@ohif/app 3.9.0-beta.52 → 3.9.0-beta.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{169.bundle.eeb9614e7b06f896c70f.js → 169.bundle.483057ed84ca3e92513a.js} +2 -2
- package/dist/{210.bundle.d69d940a6b0a5fd60a02.js → 210.bundle.23df9d395237def99256.js} +2 -2
- package/dist/{246.bundle.26883d5e7649848ac00f.js → 246.bundle.07aee1251a6cfac762d0.js} +2 -2
- package/dist/{281.bundle.f69da42cda732b1853f7.js → 281.bundle.80f169c084e30c148f09.js} +6 -6
- package/dist/{353.bundle.79e29af337df8bfc6ce0.js → 353.bundle.4371e55b06de8f3c7aa7.js} +2 -2
- package/dist/{360.bundle.48ee0dcf983460ccfa3f.js → 360.bundle.40c4f2cac5dc24cbd151.js} +5 -5
- package/dist/{372.bundle.ab285c12eeb9b509aea0.js → 372.bundle.d9ed2938305b951123a8.js} +2 -2
- package/dist/{376.bundle.79453127db5f42215b71.js → 376.bundle.4c934b0adf377e00de69.js} +2 -2
- package/dist/{502.bundle.5eaf758f5d2583c89175.js → 502.bundle.38ca85216c5168ce773b.js} +2 -2
- package/dist/{217.bundle.0062f653c3f106777a2f.js → 516.bundle.85aeaa0680375e6eedd1.js} +36 -6
- package/dist/{552.bundle.6b69034625105790fb87.js → 552.bundle.bf1485400629f36602a9.js} +4 -4
- package/dist/{571.bundle.a80609c9815339516d77.js → 571.bundle.2b4e21bc61d7685a5fdb.js} +1 -1
- package/dist/{591.bundle.08b3095d2bbea32d236a.js → 591.bundle.3b939d8f32f22c4e9978.js} +2 -2
- package/dist/{791.bundle.999d1d43103a61565916.js → 791.bundle.b5c3d922846354a1f244.js} +2 -2
- package/dist/{842.bundle.5f140089d52350155046.js → 842.bundle.24d9a57ef3a6f60abcd7.js} +2 -2
- package/dist/{888.bundle.0c078cfae635297cfcd5.js → 888.bundle.f624d032cdccc374fa84.js} +2 -2
- package/dist/{944.bundle.b28b6bf61814d7335b7a.js → 944.bundle.6b7e1773f5cf2637cf67.js} +2 -2
- package/dist/{962.bundle.33f3dcd6115d9f597657.js → 962.bundle.230a6e51c90ae71baa2f.js} +2 -2
- package/dist/{978.bundle.2c82f42354d37219849d.js → 978.bundle.60ae5483cf810ecd524a.js} +2 -2
- package/dist/{994.bundle.018b0c76da2b447ebcc1.js → 994.bundle.5dc798210cd5c4493e0e.js} +30 -9
- package/dist/{app.bundle.d781a60f8a0340af9dec.js → app.bundle.b0d7489a2dc221b7e9b4.js} +639 -40
- package/dist/assets/images/database.svg +8 -0
- package/dist/index.html +1 -1
- package/dist/sw.js +1 -1
- package/package.json +18 -18
- /package/dist/{153.bundle.8f00f4310208024890d2.js → 153.bundle.4263246744bdb7397061.js} +0 -0
- /package/dist/{217.css → 516.css} +0 -0
|
@@ -126,8 +126,8 @@ var ui_src = __webpack_require__(38604);
|
|
|
126
126
|
var ui_next_src = __webpack_require__(51946);
|
|
127
127
|
// EXTERNAL MODULE: ./state/index.js + 1 modules
|
|
128
128
|
var state = __webpack_require__(52490);
|
|
129
|
-
// EXTERNAL MODULE: ../../core/src/index.ts +
|
|
130
|
-
var core_src = __webpack_require__(
|
|
129
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 74 modules
|
|
130
|
+
var core_src = __webpack_require__(84793);
|
|
131
131
|
// EXTERNAL MODULE: ../node_modules/react-router/dist/index.js
|
|
132
132
|
var react_router_dist = __webpack_require__(85066);
|
|
133
133
|
// EXTERNAL MODULE: ./hooks/useSearchParams.ts
|
|
@@ -1048,8 +1048,8 @@ function WorkList({
|
|
|
1048
1048
|
};
|
|
1049
1049
|
});
|
|
1050
1050
|
const hasStudies = numOfStudies > 0;
|
|
1051
|
-
const versionNumber = "3.9.0-beta.
|
|
1052
|
-
const commitHash = "
|
|
1051
|
+
const versionNumber = "3.9.0-beta.54";
|
|
1052
|
+
const commitHash = "2048b19484c0b1fae73f993cfaa814f861bbd230";
|
|
1053
1053
|
const menuOptions = [{
|
|
1054
1054
|
title: t('Header:About'),
|
|
1055
1055
|
icon: 'info',
|
|
@@ -1933,7 +1933,7 @@ async function loadModule(module) {
|
|
|
1933
1933
|
return imported.default;
|
|
1934
1934
|
}
|
|
1935
1935
|
if (module === "@ohif/extension-cornerstone") {
|
|
1936
|
-
const imported = await Promise.all(/* import() */[__webpack_require__.e(428), __webpack_require__.e(818), __webpack_require__.e(497), __webpack_require__.e(993), __webpack_require__.e(604), __webpack_require__.e(793), __webpack_require__.e(10), __webpack_require__.e(
|
|
1936
|
+
const imported = await Promise.all(/* import() */[__webpack_require__.e(428), __webpack_require__.e(818), __webpack_require__.e(497), __webpack_require__.e(993), __webpack_require__.e(604), __webpack_require__.e(793), __webpack_require__.e(10), __webpack_require__.e(516)]).then(__webpack_require__.bind(__webpack_require__, 15516));
|
|
1937
1937
|
return imported.default;
|
|
1938
1938
|
}
|
|
1939
1939
|
if (module === "@ohif/extension-measurement-tracking") {
|
|
@@ -2891,7 +2891,7 @@ async function appInit(appConfigOrFunc, defaultExtensions, defaultModes) {
|
|
|
2891
2891
|
appConfig
|
|
2892
2892
|
});
|
|
2893
2893
|
servicesManager.setExtensionManager(extensionManager);
|
|
2894
|
-
servicesManager.registerServices([core_src/* UINotificationService */.ex.REGISTRATION, core_src/* UIModalService */.vq.REGISTRATION, core_src/* UIDialogService */.wA.REGISTRATION, core_src/* UIViewportDialogService */.Zi.REGISTRATION, core_src.MeasurementService.REGISTRATION, core_src/* DisplaySetService */.iY.REGISTRATION, [core_src/* CustomizationService */.wQ.REGISTRATION, appConfig.customizationService], core_src.ToolbarService.REGISTRATION, core_src/* ViewportGridService */.pK.REGISTRATION, core_src/* HangingProtocolService */.hy.REGISTRATION, core_src/* CineService */.d5.REGISTRATION, core_src/* UserAuthenticationService */.qS.REGISTRATION, core_src/* PanelService */.Ku.REGISTRATION, core_src/* WorkflowStepsService */.Og.REGISTRATION, core_src/* StateSyncService */.v.REGISTRATION]);
|
|
2894
|
+
servicesManager.registerServices([core_src/* UINotificationService */.ex.REGISTRATION, core_src/* UIModalService */.vq.REGISTRATION, core_src/* UIDialogService */.wA.REGISTRATION, core_src/* UIViewportDialogService */.Zi.REGISTRATION, core_src.MeasurementService.REGISTRATION, core_src/* DisplaySetService */.iY.REGISTRATION, [core_src/* CustomizationService */.wQ.REGISTRATION, appConfig.customizationService], core_src.ToolbarService.REGISTRATION, core_src/* ViewportGridService */.pK.REGISTRATION, core_src/* HangingProtocolService */.hy.REGISTRATION, core_src/* CineService */.d5.REGISTRATION, core_src/* UserAuthenticationService */.qS.REGISTRATION, core_src/* PanelService */.Ku.REGISTRATION, core_src/* WorkflowStepsService */.Og.REGISTRATION, core_src/* StateSyncService */.v.REGISTRATION, [core_src/* StudyPrefetcherService */.P_.REGISTRATION, appConfig.studyPrefetcher]]);
|
|
2895
2895
|
core_src/* errorHandler */.Po.getHTTPErrorHandler = () => {
|
|
2896
2896
|
if (typeof appConfig.httpErrorHandler === 'function') {
|
|
2897
2897
|
return appConfig.httpErrorHandler;
|
|
@@ -5027,7 +5027,7 @@ const detectionOptions = {
|
|
|
5027
5027
|
}
|
|
5028
5028
|
});
|
|
5029
5029
|
;// CONCATENATED MODULE: ../../i18n/package.json
|
|
5030
|
-
const package_namespaceObject = JSON.parse('{"i8":"3.9.0-beta.
|
|
5030
|
+
const package_namespaceObject = JSON.parse('{"i8":"3.9.0-beta.53"}');
|
|
5031
5031
|
;// CONCATENATED MODULE: ../../i18n/src/utils.js
|
|
5032
5032
|
const languagesMap = {
|
|
5033
5033
|
ar: 'Arabic',
|
|
@@ -5851,7 +5851,7 @@ i18next/* default */.Z.currentLanguage = () => ({
|
|
|
5851
5851
|
|
|
5852
5852
|
/***/ }),
|
|
5853
5853
|
|
|
5854
|
-
/***/
|
|
5854
|
+
/***/ 28607:
|
|
5855
5855
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
5856
5856
|
|
|
5857
5857
|
"use strict";
|
|
@@ -6094,6 +6094,41 @@ const SvgCloseIcon = ({
|
|
|
6094
6094
|
})));
|
|
6095
6095
|
|
|
6096
6096
|
/* harmony default export */ const closeIcon = (__webpack_require__.p + "assets/images/closeIcon.svg");
|
|
6097
|
+
;// CONCATENATED MODULE: ../../ui/src/assets/icons/database.svg
|
|
6098
|
+
var database_g;
|
|
6099
|
+
function database_extends() { return database_extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, database_extends.apply(null, arguments); }
|
|
6100
|
+
|
|
6101
|
+
const SvgDatabase = ({
|
|
6102
|
+
title,
|
|
6103
|
+
titleId,
|
|
6104
|
+
...props
|
|
6105
|
+
}) => /*#__PURE__*/react.createElement("svg", database_extends({
|
|
6106
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
6107
|
+
width: 19,
|
|
6108
|
+
height: 19,
|
|
6109
|
+
viewBox: "0 0 19 19",
|
|
6110
|
+
"aria-labelledby": titleId
|
|
6111
|
+
}, props), title ? /*#__PURE__*/react.createElement("title", {
|
|
6112
|
+
id: titleId
|
|
6113
|
+
}, title) : null, database_g || (database_g = /*#__PURE__*/react.createElement("g", {
|
|
6114
|
+
fill: "none",
|
|
6115
|
+
stroke: "currentColor",
|
|
6116
|
+
strokeLinecap: "round",
|
|
6117
|
+
strokeLinejoin: "round",
|
|
6118
|
+
strokeWidth: 2,
|
|
6119
|
+
transform: "matrix(.84874 0 0 .84874 .136 .142)"
|
|
6120
|
+
}, /*#__PURE__*/react.createElement("ellipse", {
|
|
6121
|
+
cx: 11,
|
|
6122
|
+
cy: 4,
|
|
6123
|
+
rx: 9,
|
|
6124
|
+
ry: 3
|
|
6125
|
+
}), /*#__PURE__*/react.createElement("path", {
|
|
6126
|
+
d: "M2 4v14a9 3 0 0 0 18 0V4"
|
|
6127
|
+
}), /*#__PURE__*/react.createElement("path", {
|
|
6128
|
+
d: "M2 11a9 3 0 0 0 18 0"
|
|
6129
|
+
}))));
|
|
6130
|
+
|
|
6131
|
+
/* harmony default export */ const database = (__webpack_require__.p + "assets/images/database.svg");
|
|
6097
6132
|
;// CONCATENATED MODULE: ../../ui/src/assets/icons/dotted-circle.svg
|
|
6098
6133
|
var dotted_circle_path;
|
|
6099
6134
|
function dotted_circle_extends() { return dotted_circle_extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, dotted_circle_extends.apply(null, arguments); }
|
|
@@ -11750,6 +11785,7 @@ const SvgToolWindowRegion = ({
|
|
|
11750
11785
|
|
|
11751
11786
|
|
|
11752
11787
|
|
|
11788
|
+
|
|
11753
11789
|
|
|
11754
11790
|
|
|
11755
11791
|
const ICONS = {
|
|
@@ -11762,6 +11798,7 @@ const ICONS = {
|
|
|
11762
11798
|
cancel: SvgCancel,
|
|
11763
11799
|
clipboard: SvgClipboard,
|
|
11764
11800
|
close: SvgCloseIcon,
|
|
11801
|
+
database: SvgDatabase,
|
|
11765
11802
|
'dotted-circle': SvgDottedCircle,
|
|
11766
11803
|
'circled-checkmark': SvgCircledCheckmark,
|
|
11767
11804
|
'chevron-down': SvgChevronDown,
|
|
@@ -19646,8 +19683,8 @@ ViewportDialogProvider.propTypes = {
|
|
|
19646
19683
|
// EXTERNAL MODULE: ../../../node_modules/lodash.merge/index.js
|
|
19647
19684
|
var lodash_merge = __webpack_require__(12178);
|
|
19648
19685
|
var lodash_merge_default = /*#__PURE__*/__webpack_require__.n(lodash_merge);
|
|
19649
|
-
// EXTERNAL MODULE: ../../core/src/index.ts +
|
|
19650
|
-
var src = __webpack_require__(
|
|
19686
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 74 modules
|
|
19687
|
+
var src = __webpack_require__(84793);
|
|
19651
19688
|
;// CONCATENATED MODULE: ../../ui/src/utils/viewportLabels.ts
|
|
19652
19689
|
const viewportLabels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
|
|
19653
19690
|
/* harmony default export */ const utils_viewportLabels = (viewportLabels);
|
|
@@ -34219,6 +34256,7 @@ const Thumbnail = ({
|
|
|
34219
34256
|
description,
|
|
34220
34257
|
seriesNumber,
|
|
34221
34258
|
numInstances,
|
|
34259
|
+
loadingProgress,
|
|
34222
34260
|
countIcon,
|
|
34223
34261
|
messages,
|
|
34224
34262
|
dragData = {},
|
|
@@ -34278,7 +34316,12 @@ const Thumbnail = ({
|
|
|
34278
34316
|
}, /*#__PURE__*/react.createElement(Icon/* default */.Z, {
|
|
34279
34317
|
name: countIcon || 'group-layers',
|
|
34280
34318
|
className: "mr-2 w-3"
|
|
34281
|
-
}), ` ${numInstances}`), /*#__PURE__*/react.createElement(
|
|
34319
|
+
}), ` ${numInstances}`), /*#__PURE__*/react.createElement("div", {
|
|
34320
|
+
className: "flex mr-2 last:mr-0"
|
|
34321
|
+
}, loadingProgress && loadingProgress < 1 && /*#__PURE__*/react.createElement(react.Fragment, null, Math.round(loadingProgress * 100), "%"), loadingProgress && loadingProgress === 1 && /*#__PURE__*/react.createElement(Icon/* default */.Z, {
|
|
34322
|
+
name: 'database',
|
|
34323
|
+
className: "w-3"
|
|
34324
|
+
})), /*#__PURE__*/react.createElement(components_DisplaySetMessageListTooltip, {
|
|
34282
34325
|
messages: messages,
|
|
34283
34326
|
id: `display-set-tooltip-${displaySetInstanceUID}`
|
|
34284
34327
|
})), /*#__PURE__*/react.createElement("div", {
|
|
@@ -34304,6 +34347,7 @@ Thumbnail.propTypes = {
|
|
|
34304
34347
|
description: (prop_types_default()).string.isRequired,
|
|
34305
34348
|
seriesNumber: StringNumber.isRequired,
|
|
34306
34349
|
numInstances: (prop_types_default()).number.isRequired,
|
|
34350
|
+
loadingProgress: (prop_types_default()).number,
|
|
34307
34351
|
messages: (prop_types_default()).object,
|
|
34308
34352
|
isActive: (prop_types_default()).bool.isRequired,
|
|
34309
34353
|
onClick: (prop_types_default()).func.isRequired,
|
|
@@ -34449,6 +34493,7 @@ function ThumbnailTracked({
|
|
|
34449
34493
|
description,
|
|
34450
34494
|
seriesNumber,
|
|
34451
34495
|
numInstances,
|
|
34496
|
+
loadingProgress,
|
|
34452
34497
|
countIcon,
|
|
34453
34498
|
messages,
|
|
34454
34499
|
dragData,
|
|
@@ -34501,6 +34546,7 @@ function ThumbnailTracked({
|
|
|
34501
34546
|
messages: messages,
|
|
34502
34547
|
numInstances: numInstances,
|
|
34503
34548
|
countIcon: countIcon,
|
|
34549
|
+
loadingProgress: loadingProgress,
|
|
34504
34550
|
isActive: isActive,
|
|
34505
34551
|
onClick: onClick,
|
|
34506
34552
|
onDoubleClick: onDoubleClick
|
|
@@ -34525,6 +34571,7 @@ ThumbnailTracked.propTypes = {
|
|
|
34525
34571
|
description: (prop_types_default()).string.isRequired,
|
|
34526
34572
|
seriesNumber: StringNumber.isRequired,
|
|
34527
34573
|
numInstances: (prop_types_default()).number.isRequired,
|
|
34574
|
+
loadingProgress: (prop_types_default()).number,
|
|
34528
34575
|
onClick: (prop_types_default()).func.isRequired,
|
|
34529
34576
|
onDoubleClick: (prop_types_default()).func.isRequired,
|
|
34530
34577
|
onClickUntrack: (prop_types_default()).func.isRequired,
|
|
@@ -34559,6 +34606,7 @@ const ThumbnailList = ({
|
|
|
34559
34606
|
dragData,
|
|
34560
34607
|
seriesNumber,
|
|
34561
34608
|
numInstances,
|
|
34609
|
+
loadingProgress,
|
|
34562
34610
|
modality,
|
|
34563
34611
|
componentType,
|
|
34564
34612
|
seriesDate,
|
|
@@ -34597,6 +34645,7 @@ const ThumbnailList = ({
|
|
|
34597
34645
|
description: description,
|
|
34598
34646
|
seriesNumber: seriesNumber,
|
|
34599
34647
|
numInstances: numInstances,
|
|
34648
|
+
loadingProgress: loadingProgress,
|
|
34600
34649
|
countIcon: countIcon,
|
|
34601
34650
|
imageSrc: imageSrc,
|
|
34602
34651
|
imageAltText: imageAltText,
|
|
@@ -60368,8 +60417,8 @@ const HeaderItem = ({
|
|
|
60368
60417
|
}, children);
|
|
60369
60418
|
};
|
|
60370
60419
|
/* harmony default export */ const AllInOneMenu_HeaderItem = (HeaderItem);
|
|
60371
|
-
// EXTERNAL MODULE: ../../ui/src/components/Icon/getIcon.js +
|
|
60372
|
-
var getIcon = __webpack_require__(
|
|
60420
|
+
// EXTERNAL MODULE: ../../ui/src/components/Icon/getIcon.js + 203 modules
|
|
60421
|
+
var getIcon = __webpack_require__(28607);
|
|
60373
60422
|
;// CONCATENATED MODULE: ../../ui/src/components/AllInOneMenu/IconMenu.tsx
|
|
60374
60423
|
|
|
60375
60424
|
|
|
@@ -61440,7 +61489,7 @@ function _getImageOrientationPatient(image) {
|
|
|
61440
61489
|
|
|
61441
61490
|
/***/ }),
|
|
61442
61491
|
|
|
61443
|
-
/***/
|
|
61492
|
+
/***/ 84793:
|
|
61444
61493
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
61445
61494
|
|
|
61446
61495
|
"use strict";
|
|
@@ -61467,6 +61516,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
61467
61516
|
H: () => (/* reexport */ ServiceProvidersManager),
|
|
61468
61517
|
Xw: () => (/* reexport */ ServicesManager),
|
|
61469
61518
|
v: () => (/* reexport */ services_StateSyncService),
|
|
61519
|
+
P_: () => (/* reexport */ StudyPrefetcherService),
|
|
61470
61520
|
ToolbarService: () => (/* reexport */ ToolBarService),
|
|
61471
61521
|
wA: () => (/* reexport */ services_UIDialogService),
|
|
61472
61522
|
vq: () => (/* reexport */ services_UIModalService),
|
|
@@ -63808,8 +63858,8 @@ class ViewportGridService extends pubSubServiceInterface/* PubSubService */.h {
|
|
|
63808
63858
|
// Just update a single viewport, but use the multi-viewport update for it.
|
|
63809
63859
|
this.setDisplaySetsForViewports([props]);
|
|
63810
63860
|
}
|
|
63811
|
-
setDisplaySetsForViewports(props) {
|
|
63812
|
-
this.serviceImplementation._setDisplaySetsForViewports(props);
|
|
63861
|
+
async setDisplaySetsForViewports(props) {
|
|
63862
|
+
await this.serviceImplementation._setDisplaySetsForViewports(props);
|
|
63813
63863
|
const state = this.getState();
|
|
63814
63864
|
const viewports = [];
|
|
63815
63865
|
for (const viewport of props) {
|
|
@@ -67274,6 +67324,548 @@ WorkflowStepsService.REGISTRATION = {
|
|
|
67274
67324
|
;// CONCATENATED MODULE: ../../core/src/services/WorkflowStepsService/index.ts
|
|
67275
67325
|
|
|
67276
67326
|
/* harmony default export */ const services_WorkflowStepsService = (WorkflowStepsService);
|
|
67327
|
+
;// CONCATENATED MODULE: ../../core/src/services/StudyPrefetcherService/StudyPrefetcherService.ts
|
|
67328
|
+
var _StudyPrefetcherService;
|
|
67329
|
+
|
|
67330
|
+
|
|
67331
|
+
const IMAGE_REQUEST_TYPE = 'prefetch';
|
|
67332
|
+
const StudyPrefetcherService_EVENTS = {
|
|
67333
|
+
SERVICE_STARTED: 'event::studyPrefetcherService:started',
|
|
67334
|
+
SERVICE_STOPPED: 'event::studyPrefetcherService:stopped',
|
|
67335
|
+
DISPLAYSET_LOAD_PROGRESS: 'event::studyPrefetcherService:displaySetLoadProgress',
|
|
67336
|
+
DISPLAYSET_LOAD_COMPLETE: 'event::studyPrefetcherService:displaySetLoadComplete'
|
|
67337
|
+
};
|
|
67338
|
+
|
|
67339
|
+
/**
|
|
67340
|
+
* Order used for prefetching display set
|
|
67341
|
+
*/
|
|
67342
|
+
var StudyPrefetchOrder = /*#__PURE__*/function (StudyPrefetchOrder) {
|
|
67343
|
+
StudyPrefetchOrder["closest"] = "closest";
|
|
67344
|
+
StudyPrefetchOrder["downward"] = "downward";
|
|
67345
|
+
StudyPrefetchOrder["upward"] = "upward";
|
|
67346
|
+
return StudyPrefetchOrder;
|
|
67347
|
+
}(StudyPrefetchOrder || {});
|
|
67348
|
+
/**
|
|
67349
|
+
* Study Prefetcher configuration
|
|
67350
|
+
*/
|
|
67351
|
+
class StudyPrefetcherService extends pubSubServiceInterface/* PubSubService */.h {
|
|
67352
|
+
constructor({
|
|
67353
|
+
servicesManager,
|
|
67354
|
+
extensionManager,
|
|
67355
|
+
configuration
|
|
67356
|
+
}) {
|
|
67357
|
+
super(StudyPrefetcherService_EVENTS);
|
|
67358
|
+
this._extensionManager = void 0;
|
|
67359
|
+
this._servicesManager = void 0;
|
|
67360
|
+
this._subscriptions = void 0;
|
|
67361
|
+
this._activeDisplaySetsInstanceUIDs = [];
|
|
67362
|
+
this._pendingRequests = [];
|
|
67363
|
+
this._inflightRequests = new Map();
|
|
67364
|
+
this._isRunning = false;
|
|
67365
|
+
this._displaySetLoadingStates = new Map();
|
|
67366
|
+
this._imageIdsToDisplaySetsMap = new Map();
|
|
67367
|
+
this.config = {
|
|
67368
|
+
/* Enable/disable study prefetching service */
|
|
67369
|
+
enabled: false,
|
|
67370
|
+
/* Number of displaysets to be prefetched */
|
|
67371
|
+
displaySetsCount: 1,
|
|
67372
|
+
/**
|
|
67373
|
+
* Max number of concurrent prefetch requests
|
|
67374
|
+
* High numbers may impact on the time to load a new dropped series because
|
|
67375
|
+
* the browser will be busy with all prefetching requests. As soon as the
|
|
67376
|
+
* prefetch requests get fulfilled the new ones from the new dropped series
|
|
67377
|
+
* are sent to the server.
|
|
67378
|
+
*
|
|
67379
|
+
* TODO: abort all prefetch requests when a new series is loaded on a viewport.
|
|
67380
|
+
* (need to add support for `AbortController` on Cornerstone)
|
|
67381
|
+
* */
|
|
67382
|
+
maxNumPrefetchRequests: 10,
|
|
67383
|
+
/* Display sets prefetching order (closest, downward and upward) */
|
|
67384
|
+
order: StudyPrefetchOrder.downward
|
|
67385
|
+
};
|
|
67386
|
+
// Properties set by Cornerstone extension (initStudyPrefetcherService)
|
|
67387
|
+
this.requestType = IMAGE_REQUEST_TYPE;
|
|
67388
|
+
this.cache = void 0;
|
|
67389
|
+
this.imageLoadPoolManager = void 0;
|
|
67390
|
+
this.imageLoader = void 0;
|
|
67391
|
+
this.imageLoadEventsManager = void 0;
|
|
67392
|
+
this._servicesManager = servicesManager;
|
|
67393
|
+
this._extensionManager = extensionManager;
|
|
67394
|
+
this._subscriptions = [];
|
|
67395
|
+
Object.assign(this.config, configuration);
|
|
67396
|
+
}
|
|
67397
|
+
onModeEnter() {
|
|
67398
|
+
this._addEventListeners();
|
|
67399
|
+
}
|
|
67400
|
+
|
|
67401
|
+
/**
|
|
67402
|
+
* The onModeExit returns the service to the initial state.
|
|
67403
|
+
*/
|
|
67404
|
+
onModeExit() {
|
|
67405
|
+
this._removeEventListeners();
|
|
67406
|
+
this._stopPrefetching();
|
|
67407
|
+
}
|
|
67408
|
+
_addImageLoadingEventsListeners() {
|
|
67409
|
+
const fnOnImageLoadCompleted = imageId => {
|
|
67410
|
+
// `sendNextRequests` must be called after image loaded/failed events
|
|
67411
|
+
// to make sure prefetch requests shall be sent as soon as the active
|
|
67412
|
+
// displaySets (active viewport) are loaded.
|
|
67413
|
+
//
|
|
67414
|
+
// PS: active display sets are not loaded by this service and that is why
|
|
67415
|
+
// the requests shall not be in the inflight queue.
|
|
67416
|
+
if (!this._inflightRequests.get(imageId)) {
|
|
67417
|
+
this._sendNextRequests();
|
|
67418
|
+
}
|
|
67419
|
+
};
|
|
67420
|
+
const fnImageLoadedEventListener = evt => {
|
|
67421
|
+
const {
|
|
67422
|
+
image
|
|
67423
|
+
} = evt.detail;
|
|
67424
|
+
const {
|
|
67425
|
+
imageId
|
|
67426
|
+
} = image;
|
|
67427
|
+
this._moveImageIdToLoadedSet(imageId);
|
|
67428
|
+
fnOnImageLoadCompleted(imageId);
|
|
67429
|
+
};
|
|
67430
|
+
const fnImageLoadFailedEventListener = evt => {
|
|
67431
|
+
const {
|
|
67432
|
+
imageId
|
|
67433
|
+
} = evt.detail;
|
|
67434
|
+
this._moveImageIdToFailedSet(imageId);
|
|
67435
|
+
fnOnImageLoadCompleted(imageId);
|
|
67436
|
+
};
|
|
67437
|
+
return this.imageLoadEventsManager.addEventListeners(fnImageLoadedEventListener, fnImageLoadFailedEventListener);
|
|
67438
|
+
}
|
|
67439
|
+
_addServicesListeners() {
|
|
67440
|
+
const {
|
|
67441
|
+
displaySetService,
|
|
67442
|
+
viewportGridService
|
|
67443
|
+
} = this._servicesManager.services;
|
|
67444
|
+
|
|
67445
|
+
// Restart the prefetcher after any change to the displaySets
|
|
67446
|
+
// (eg: sorting the displaySets on StudyBrowser)
|
|
67447
|
+
const displaySetsChangedSubscription = displaySetService.subscribe(displaySetService.EVENTS.DISPLAY_SETS_CHANGED, () => this._syncWithActiveViewport({
|
|
67448
|
+
forceRestart: true
|
|
67449
|
+
}));
|
|
67450
|
+
|
|
67451
|
+
// Loads new datasets when making a new viewport active
|
|
67452
|
+
const viewportGridActiveViewportIdSubscription = viewportGridService.subscribe(services_ViewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED, ({
|
|
67453
|
+
viewportId
|
|
67454
|
+
}) => this._syncWithActiveViewport({
|
|
67455
|
+
activeViewportId: viewportId
|
|
67456
|
+
}));
|
|
67457
|
+
|
|
67458
|
+
// Continue loading datasets after changing the layout (eg: from 1x1 to 2x1)
|
|
67459
|
+
const viewportGridLayoutChangedSubscription = viewportGridService.subscribe(services_ViewportGridService.EVENTS.LAYOUT_CHANGED, () => this._syncWithActiveViewport());
|
|
67460
|
+
|
|
67461
|
+
// Loads new datasets after loading a new display set on a viewport
|
|
67462
|
+
const viewportGridStateChangedSubscription = viewportGridService.subscribe(services_ViewportGridService.EVENTS.GRID_STATE_CHANGED, () => this._syncWithActiveViewport());
|
|
67463
|
+
|
|
67464
|
+
// Loads the first datasets right after opening the viewer
|
|
67465
|
+
const viewportGridViewportreadySubscription = viewportGridService.subscribe(services_ViewportGridService.EVENTS.VIEWPORTS_READY, () => {
|
|
67466
|
+
this._syncWithActiveViewport();
|
|
67467
|
+
this._startPrefetching();
|
|
67468
|
+
});
|
|
67469
|
+
return [displaySetsChangedSubscription, viewportGridActiveViewportIdSubscription, viewportGridLayoutChangedSubscription, viewportGridStateChangedSubscription, viewportGridViewportreadySubscription];
|
|
67470
|
+
}
|
|
67471
|
+
_addEventListeners() {
|
|
67472
|
+
const imageLoadingEventsSubscriptions = this._addImageLoadingEventsListeners();
|
|
67473
|
+
const servicesSubscriptions = this._addServicesListeners();
|
|
67474
|
+
this._subscriptions.push(...imageLoadingEventsSubscriptions);
|
|
67475
|
+
this._subscriptions.push(...servicesSubscriptions);
|
|
67476
|
+
}
|
|
67477
|
+
_removeEventListeners() {
|
|
67478
|
+
this._subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
67479
|
+
this._subscriptions = [];
|
|
67480
|
+
}
|
|
67481
|
+
_syncWithActiveViewport({
|
|
67482
|
+
activeViewportId,
|
|
67483
|
+
forceRestart
|
|
67484
|
+
} = {}) {
|
|
67485
|
+
const {
|
|
67486
|
+
viewportGridService
|
|
67487
|
+
} = this._servicesManager.services;
|
|
67488
|
+
const viewportGridServiceState = viewportGridService.getState();
|
|
67489
|
+
const {
|
|
67490
|
+
viewports
|
|
67491
|
+
} = viewportGridServiceState;
|
|
67492
|
+
activeViewportId = activeViewportId ?? viewportGridServiceState.activeViewportId;
|
|
67493
|
+
|
|
67494
|
+
// If may be null when the viewer is loaded
|
|
67495
|
+
if (!activeViewportId) {
|
|
67496
|
+
return;
|
|
67497
|
+
}
|
|
67498
|
+
const activeViewport = viewports.get(activeViewportId);
|
|
67499
|
+
const displaySetUpdated = this._setActiveDisplaySetsUIDs(activeViewport.displaySetInstanceUIDs);
|
|
67500
|
+
if (forceRestart || displaySetUpdated) {
|
|
67501
|
+
this._restartPrefetching();
|
|
67502
|
+
}
|
|
67503
|
+
}
|
|
67504
|
+
_setActiveDisplaySetsUIDs(newActiveDisplaySetInstanceUIDs) {
|
|
67505
|
+
const sameDisplaySets = newActiveDisplaySetInstanceUIDs.length === this._activeDisplaySetsInstanceUIDs.length && newActiveDisplaySetInstanceUIDs.every(uid => this._activeDisplaySetsInstanceUIDs.includes(uid));
|
|
67506
|
+
if (sameDisplaySets) {
|
|
67507
|
+
return false;
|
|
67508
|
+
}
|
|
67509
|
+
this._activeDisplaySetsInstanceUIDs = [...newActiveDisplaySetInstanceUIDs];
|
|
67510
|
+
this._restartPrefetching();
|
|
67511
|
+
return true;
|
|
67512
|
+
}
|
|
67513
|
+
_areActiveDisplaySetsLoaded() {
|
|
67514
|
+
const {
|
|
67515
|
+
_activeDisplaySetsInstanceUIDs: displaySetsInstanceUIDs
|
|
67516
|
+
} = this;
|
|
67517
|
+
return displaySetsInstanceUIDs.length && displaySetsInstanceUIDs.every(displaySetsInstanceUID => this._displaySetLoadingStates.get(displaySetsInstanceUID).loadingProgress >= 1);
|
|
67518
|
+
}
|
|
67519
|
+
_getClosestDisplaySets(displaySets, activeDisplaySetIndex) {
|
|
67520
|
+
const sortedDisplaySets = [];
|
|
67521
|
+
let previousIndex = activeDisplaySetIndex - 1;
|
|
67522
|
+
let nextIndex = activeDisplaySetIndex + 1;
|
|
67523
|
+
while (previousIndex >= 0 || nextIndex < displaySets.length) {
|
|
67524
|
+
if (previousIndex >= 0) {
|
|
67525
|
+
sortedDisplaySets.push(displaySets[previousIndex]);
|
|
67526
|
+
previousIndex--;
|
|
67527
|
+
}
|
|
67528
|
+
if (nextIndex < displaySets.length) {
|
|
67529
|
+
sortedDisplaySets.push(displaySets[nextIndex]);
|
|
67530
|
+
nextIndex++;
|
|
67531
|
+
}
|
|
67532
|
+
}
|
|
67533
|
+
return sortedDisplaySets;
|
|
67534
|
+
}
|
|
67535
|
+
_getDownwardDisplaySets(displaySets, activeDisplaySetIndex) {
|
|
67536
|
+
const sortedDisplaySets = [];
|
|
67537
|
+
for (let i = activeDisplaySetIndex + 1; i < displaySets.length; i++) {
|
|
67538
|
+
sortedDisplaySets.push(displaySets[i]);
|
|
67539
|
+
}
|
|
67540
|
+
return sortedDisplaySets;
|
|
67541
|
+
}
|
|
67542
|
+
_getUpwardDisplaySets(displaySets, activeDisplaySetIndex) {
|
|
67543
|
+
const sortedDisplaySets = [];
|
|
67544
|
+
for (let i = activeDisplaySetIndex - 1; i >= 0 && i !== activeDisplaySetIndex; i--) {
|
|
67545
|
+
sortedDisplaySets.push(displaySets[i]);
|
|
67546
|
+
}
|
|
67547
|
+
return sortedDisplaySets;
|
|
67548
|
+
}
|
|
67549
|
+
_getSortedDisplaySetsToPrefetch(displaySets) {
|
|
67550
|
+
if (!this._activeDisplaySetsInstanceUIDs?.length) {
|
|
67551
|
+
return [];
|
|
67552
|
+
}
|
|
67553
|
+
const {
|
|
67554
|
+
displaySetsCount
|
|
67555
|
+
} = this.config;
|
|
67556
|
+
const activeDisplaySetsInstanceUIDs = this._activeDisplaySetsInstanceUIDs;
|
|
67557
|
+
const [activeDisplaySetUID] = activeDisplaySetsInstanceUIDs;
|
|
67558
|
+
const activeDisplaySetIndex = displaySets.findIndex(ds => ds.displaySetInstanceUID === activeDisplaySetUID);
|
|
67559
|
+
const getDisplaySetsFunctionsMap = {
|
|
67560
|
+
[StudyPrefetchOrder.closest]: this._getClosestDisplaySets,
|
|
67561
|
+
[StudyPrefetchOrder.downward]: this._getDownwardDisplaySets,
|
|
67562
|
+
[StudyPrefetchOrder.upward]: this._getUpwardDisplaySets
|
|
67563
|
+
};
|
|
67564
|
+
const {
|
|
67565
|
+
order
|
|
67566
|
+
} = this.config;
|
|
67567
|
+
const fnGetDisplaySets = getDisplaySetsFunctionsMap[order];
|
|
67568
|
+
if (!fnGetDisplaySets) {
|
|
67569
|
+
throw new Error(`Invalid order (${order})`);
|
|
67570
|
+
}
|
|
67571
|
+
|
|
67572
|
+
// Creates a `Set` to look for UIDs in O(1) instead of O(n)
|
|
67573
|
+
const uidsSet = new Set(activeDisplaySetsInstanceUIDs);
|
|
67574
|
+
|
|
67575
|
+
// Remove any active displaySet that may still be in the activeDisplaySetsInstanceUIDs.
|
|
67576
|
+
// That may happen when activeDisplaySetsInstanceUIDs has more than one element.
|
|
67577
|
+
return fnGetDisplaySets.call(this, displaySets, activeDisplaySetIndex).filter(ds => !uidsSet.has(ds.displaySetInstanceUID)).slice(0, displaySetsCount);
|
|
67578
|
+
}
|
|
67579
|
+
_getDisplaySets() {
|
|
67580
|
+
const {
|
|
67581
|
+
displaySetService
|
|
67582
|
+
} = this._servicesManager.services;
|
|
67583
|
+
const displaySets = [...displaySetService.getActiveDisplaySets()];
|
|
67584
|
+
let displaySetsToPrefetch = this._getSortedDisplaySetsToPrefetch(displaySets);
|
|
67585
|
+
return {
|
|
67586
|
+
displaySets,
|
|
67587
|
+
displaySetsToPrefetch
|
|
67588
|
+
};
|
|
67589
|
+
}
|
|
67590
|
+
_updateImageIdsDisplaySetMap(displaySetInstanceUID, imageIds) {
|
|
67591
|
+
for (const imageId of imageIds) {
|
|
67592
|
+
let displaySetsInstanceUIDsMap = this._imageIdsToDisplaySetsMap.get(imageId);
|
|
67593
|
+
if (!displaySetsInstanceUIDsMap) {
|
|
67594
|
+
displaySetsInstanceUIDsMap = new Set();
|
|
67595
|
+
this._imageIdsToDisplaySetsMap.set(imageId, displaySetsInstanceUIDsMap);
|
|
67596
|
+
}
|
|
67597
|
+
displaySetsInstanceUIDsMap.add(displaySetInstanceUID);
|
|
67598
|
+
}
|
|
67599
|
+
}
|
|
67600
|
+
_getImageIdsForDisplaySet(displaySet) {
|
|
67601
|
+
const dataSource = this._extensionManager.getActiveDataSource()[0];
|
|
67602
|
+
return dataSource.getImageIdsForDisplaySet(displaySet);
|
|
67603
|
+
}
|
|
67604
|
+
_updateDisplaySetLoadingProgress(displaySetLoadingState) {
|
|
67605
|
+
const {
|
|
67606
|
+
numInstances,
|
|
67607
|
+
loadedImageIds,
|
|
67608
|
+
failedImageIds
|
|
67609
|
+
} = displaySetLoadingState;
|
|
67610
|
+
const loadingProgress = (loadedImageIds.size + failedImageIds.size) / numInstances;
|
|
67611
|
+
displaySetLoadingState.loadingProgress = loadingProgress;
|
|
67612
|
+
}
|
|
67613
|
+
_addDisplaySetLoadingState(displaySet) {
|
|
67614
|
+
const {
|
|
67615
|
+
displaySetInstanceUID
|
|
67616
|
+
} = displaySet;
|
|
67617
|
+
const imageIds = this._getImageIdsForDisplaySet(displaySet);
|
|
67618
|
+
let displaySetLoadingState = this._displaySetLoadingStates.get(displaySetInstanceUID);
|
|
67619
|
+
if (displaySetLoadingState) {
|
|
67620
|
+
return;
|
|
67621
|
+
}
|
|
67622
|
+
const pendingImageIds = new Set(imageIds);
|
|
67623
|
+
const loadedImageIds = new Set();
|
|
67624
|
+
|
|
67625
|
+
// Needs to check which image is already loaded to update the progress properly
|
|
67626
|
+
// because some images may already be loaded (thumbnails and viewports).
|
|
67627
|
+
for (const imageId of imageIds) {
|
|
67628
|
+
if (this.cache.isImageCached(imageId)) {
|
|
67629
|
+
loadedImageIds.add(imageId);
|
|
67630
|
+
} else {
|
|
67631
|
+
pendingImageIds.add(imageId);
|
|
67632
|
+
}
|
|
67633
|
+
}
|
|
67634
|
+
displaySetLoadingState = {
|
|
67635
|
+
displaySetInstanceUID,
|
|
67636
|
+
numInstances: imageIds.length,
|
|
67637
|
+
pendingImageIds,
|
|
67638
|
+
loadedImageIds,
|
|
67639
|
+
failedImageIds: new Set(),
|
|
67640
|
+
loadingProgress: 0
|
|
67641
|
+
};
|
|
67642
|
+
this._updateDisplaySetLoadingProgress(displaySetLoadingState);
|
|
67643
|
+
this._displaySetLoadingStates.set(displaySetInstanceUID, displaySetLoadingState);
|
|
67644
|
+
this._updateImageIdsDisplaySetMap(displaySetInstanceUID, imageIds);
|
|
67645
|
+
|
|
67646
|
+
// Notify the UI that something is already loaded (eg: update StudyBrowser)
|
|
67647
|
+
if (loadedImageIds.size) {
|
|
67648
|
+
this._triggerDisplaySetEvents(displaySetInstanceUID);
|
|
67649
|
+
}
|
|
67650
|
+
}
|
|
67651
|
+
_loadDisplaySets() {
|
|
67652
|
+
const {
|
|
67653
|
+
displaySets,
|
|
67654
|
+
displaySetsToPrefetch
|
|
67655
|
+
} = this._getDisplaySets();
|
|
67656
|
+
displaySets.forEach(displaySet => this._addDisplaySetLoadingState(displaySet));
|
|
67657
|
+
displaySetsToPrefetch.forEach(displaySet => this._enqueueDisplaySetImagesRequests(displaySet));
|
|
67658
|
+
}
|
|
67659
|
+
_moveImageIdToLoadedSet(imageId) {
|
|
67660
|
+
const displaySetsInstanceUIDs = this._imageIdsToDisplaySetsMap.get(imageId);
|
|
67661
|
+
if (!displaySetsInstanceUIDs) {
|
|
67662
|
+
return;
|
|
67663
|
+
}
|
|
67664
|
+
for (const displaySetInstanceUID of Array.from(displaySetsInstanceUIDs.values())) {
|
|
67665
|
+
const displaySetLoadingState = this._displaySetLoadingStates.get(displaySetInstanceUID);
|
|
67666
|
+
const {
|
|
67667
|
+
pendingImageIds,
|
|
67668
|
+
loadedImageIds
|
|
67669
|
+
} = displaySetLoadingState;
|
|
67670
|
+
pendingImageIds.delete(imageId);
|
|
67671
|
+
loadedImageIds.add(imageId);
|
|
67672
|
+
this._updateDisplaySetLoadingProgress(displaySetLoadingState);
|
|
67673
|
+
this._triggerDisplaySetEvents(displaySetInstanceUID);
|
|
67674
|
+
}
|
|
67675
|
+
return true;
|
|
67676
|
+
}
|
|
67677
|
+
_moveImageIdToFailedSet(imageId) {
|
|
67678
|
+
const displaySetsInstanceUIDs = this._imageIdsToDisplaySetsMap.get(imageId);
|
|
67679
|
+
if (!displaySetsInstanceUIDs) {
|
|
67680
|
+
return;
|
|
67681
|
+
}
|
|
67682
|
+
for (const displaySetInstanceUID of Array.from(displaySetsInstanceUIDs.values())) {
|
|
67683
|
+
const displaySetLoadingState = this._displaySetLoadingStates.get(displaySetInstanceUID);
|
|
67684
|
+
const {
|
|
67685
|
+
pendingImageIds,
|
|
67686
|
+
failedImageIds
|
|
67687
|
+
} = displaySetLoadingState;
|
|
67688
|
+
pendingImageIds.delete(imageId);
|
|
67689
|
+
failedImageIds.add(imageId);
|
|
67690
|
+
this._updateDisplaySetLoadingProgress(displaySetLoadingState);
|
|
67691
|
+
this._triggerDisplaySetEvents(displaySetInstanceUID);
|
|
67692
|
+
}
|
|
67693
|
+
return true;
|
|
67694
|
+
}
|
|
67695
|
+
_triggerDisplaySetEvents(displaySetInstanceUID) {
|
|
67696
|
+
const displaySetLoadingState = this._displaySetLoadingStates.get(displaySetInstanceUID);
|
|
67697
|
+
const {
|
|
67698
|
+
loadingProgress,
|
|
67699
|
+
numInstances
|
|
67700
|
+
} = displaySetLoadingState;
|
|
67701
|
+
this._broadcastEvent(this.EVENTS.DISPLAYSET_LOAD_PROGRESS, {
|
|
67702
|
+
displaySetInstanceUID,
|
|
67703
|
+
numInstances,
|
|
67704
|
+
loadingProgress
|
|
67705
|
+
});
|
|
67706
|
+
if (loadingProgress >= 1) {
|
|
67707
|
+
this._broadcastEvent(this.EVENTS.DISPLAYSET_LOAD_COMPLETE, {
|
|
67708
|
+
displaySetInstanceUID
|
|
67709
|
+
});
|
|
67710
|
+
}
|
|
67711
|
+
}
|
|
67712
|
+
_onImagePrefetchSuccess(imageRequest) {
|
|
67713
|
+
if (imageRequest.aborted) {
|
|
67714
|
+
return;
|
|
67715
|
+
}
|
|
67716
|
+
const {
|
|
67717
|
+
imageId
|
|
67718
|
+
} = imageRequest;
|
|
67719
|
+
this._inflightRequests.delete(imageId);
|
|
67720
|
+
this._moveImageIdToLoadedSet(imageId);
|
|
67721
|
+
|
|
67722
|
+
// `sendNextRequests` must be called after removing the request from the inflight
|
|
67723
|
+
// queue otherwise it shall not be able to send the request (maxNumPrefetchRequests)
|
|
67724
|
+
this._sendNextRequests();
|
|
67725
|
+
}
|
|
67726
|
+
_onImagePrefetchFailed(imageRequest, error) {
|
|
67727
|
+
if (imageRequest.aborted) {
|
|
67728
|
+
return;
|
|
67729
|
+
}
|
|
67730
|
+
console.warn(`An error ocurred when trying to load "${imageRequest.imageId}"`, error);
|
|
67731
|
+
const {
|
|
67732
|
+
imageId
|
|
67733
|
+
} = imageRequest;
|
|
67734
|
+
this._inflightRequests.delete(imageId);
|
|
67735
|
+
this._moveImageIdToFailedSet(imageId);
|
|
67736
|
+
|
|
67737
|
+
// `sendNextRequests` must be called after removing the request from the inflight
|
|
67738
|
+
// queue otherwise it shall not be able to send the request (maxNumPrefetchRequests)
|
|
67739
|
+
this._sendNextRequests();
|
|
67740
|
+
}
|
|
67741
|
+
async _sendNextRequests() {
|
|
67742
|
+
// If the service has stopped with async requests in progress this method may
|
|
67743
|
+
// get called again when each of those requests are fulfilled.
|
|
67744
|
+
if (!this._isRunning) {
|
|
67745
|
+
return;
|
|
67746
|
+
}
|
|
67747
|
+
|
|
67748
|
+
// Does not send any prefetch request until the active display sets are loaded
|
|
67749
|
+
if (!this._areActiveDisplaySetsLoaded()) {
|
|
67750
|
+
return;
|
|
67751
|
+
}
|
|
67752
|
+
const {
|
|
67753
|
+
_pendingRequests: pendingRequests,
|
|
67754
|
+
_inflightRequests: inflightRequests
|
|
67755
|
+
} = this;
|
|
67756
|
+
const {
|
|
67757
|
+
maxNumPrefetchRequests
|
|
67758
|
+
} = this.config;
|
|
67759
|
+
if (!pendingRequests.length || inflightRequests.size >= maxNumPrefetchRequests) {
|
|
67760
|
+
return;
|
|
67761
|
+
}
|
|
67762
|
+
const numImageRequests = Math.min(pendingRequests.length, maxNumPrefetchRequests - inflightRequests.size);
|
|
67763
|
+
const imageRequests = this._pendingRequests.splice(0, numImageRequests);
|
|
67764
|
+
imageRequests.forEach(imageRequest => {
|
|
67765
|
+
const {
|
|
67766
|
+
imageId
|
|
67767
|
+
} = imageRequest;
|
|
67768
|
+
const options = {
|
|
67769
|
+
priority: -5,
|
|
67770
|
+
requestType: this.requestType,
|
|
67771
|
+
additionalDetails: {
|
|
67772
|
+
imageId
|
|
67773
|
+
},
|
|
67774
|
+
preScale: {
|
|
67775
|
+
enabled: true
|
|
67776
|
+
}
|
|
67777
|
+
};
|
|
67778
|
+
this.imageLoadPoolManager.addRequest(async () => this.imageLoader.loadAndCacheImage(imageId, options).then(_image => this._onImagePrefetchSuccess(imageRequest), error => this._onImagePrefetchFailed(imageRequest, error)), this.requestType, {
|
|
67779
|
+
imageId
|
|
67780
|
+
});
|
|
67781
|
+
inflightRequests.set(imageId, imageRequest);
|
|
67782
|
+
});
|
|
67783
|
+
}
|
|
67784
|
+
_enqueueDisplaySetImagesRequests(displaySet) {
|
|
67785
|
+
const {
|
|
67786
|
+
displaySetInstanceUID
|
|
67787
|
+
} = displaySet;
|
|
67788
|
+
const imageIds = this._getImageIdsForDisplaySet(displaySet);
|
|
67789
|
+
imageIds.forEach(imageId => {
|
|
67790
|
+
if (this.cache.isImageCached(imageId)) {
|
|
67791
|
+
this._moveImageIdToLoadedSet(imageId);
|
|
67792
|
+
return;
|
|
67793
|
+
}
|
|
67794
|
+
this._pendingRequests.push({
|
|
67795
|
+
displaySetInstanceUID,
|
|
67796
|
+
imageId,
|
|
67797
|
+
aborted: false
|
|
67798
|
+
});
|
|
67799
|
+
});
|
|
67800
|
+
}
|
|
67801
|
+
|
|
67802
|
+
/**
|
|
67803
|
+
* Start prefetching the display sets based on the active viewport and app configuration.
|
|
67804
|
+
*/
|
|
67805
|
+
_startPrefetching() {
|
|
67806
|
+
if (this._isRunning) {
|
|
67807
|
+
return;
|
|
67808
|
+
}
|
|
67809
|
+
if (!this.config.enabled) {
|
|
67810
|
+
console.log('StudyPrefetcher is not enabled');
|
|
67811
|
+
return;
|
|
67812
|
+
}
|
|
67813
|
+
this._isRunning = true;
|
|
67814
|
+
this._loadDisplaySets();
|
|
67815
|
+
this._sendNextRequests();
|
|
67816
|
+
this._broadcastEvent(this.EVENTS.SERVICE_STARTED, {});
|
|
67817
|
+
}
|
|
67818
|
+
|
|
67819
|
+
/**
|
|
67820
|
+
* Stop prefetching the display sets.
|
|
67821
|
+
* All internal variables are cleared but activeDisplaySetsInstanceUIDs otherwise restart would not work.
|
|
67822
|
+
*/
|
|
67823
|
+
_stopPrefetching() {
|
|
67824
|
+
if (!this._isRunning) {
|
|
67825
|
+
return;
|
|
67826
|
+
}
|
|
67827
|
+
this._isRunning = false;
|
|
67828
|
+
|
|
67829
|
+
// Mark all inflight requests as aborted before clearing the map.
|
|
67830
|
+
this._inflightRequests.forEach(inflightRequest => inflightRequest.aborted = true);
|
|
67831
|
+
this._pendingRequests = [];
|
|
67832
|
+
this._displaySetLoadingStates.clear();
|
|
67833
|
+
this._imageIdsToDisplaySetsMap.clear();
|
|
67834
|
+
this._inflightRequests.clear();
|
|
67835
|
+
this.imageLoadPoolManager.clearRequestStack(IMAGE_REQUEST_TYPE);
|
|
67836
|
+
this._broadcastEvent(this.EVENTS.SERVICE_STOPPED, {});
|
|
67837
|
+
}
|
|
67838
|
+
|
|
67839
|
+
/**
|
|
67840
|
+
* Restart prefetching in case it is already running.
|
|
67841
|
+
*/
|
|
67842
|
+
_restartPrefetching() {
|
|
67843
|
+
if (this._isRunning) {
|
|
67844
|
+
this._stopPrefetching();
|
|
67845
|
+
this._startPrefetching();
|
|
67846
|
+
}
|
|
67847
|
+
}
|
|
67848
|
+
}
|
|
67849
|
+
_StudyPrefetcherService = StudyPrefetcherService;
|
|
67850
|
+
StudyPrefetcherService.REGISTRATION = {
|
|
67851
|
+
name: 'studyPrefetcherService',
|
|
67852
|
+
altName: 'StudyPrefetcherService',
|
|
67853
|
+
create: ({
|
|
67854
|
+
configuration,
|
|
67855
|
+
servicesManager,
|
|
67856
|
+
extensionManager
|
|
67857
|
+
}) => {
|
|
67858
|
+
return new _StudyPrefetcherService({
|
|
67859
|
+
servicesManager,
|
|
67860
|
+
extensionManager,
|
|
67861
|
+
configuration
|
|
67862
|
+
});
|
|
67863
|
+
}
|
|
67864
|
+
};
|
|
67865
|
+
|
|
67866
|
+
;// CONCATENATED MODULE: ../../core/src/services/StudyPrefetcherService/index.ts
|
|
67867
|
+
|
|
67868
|
+
|
|
67277
67869
|
;// CONCATENATED MODULE: ../../core/src/services/index.ts
|
|
67278
67870
|
|
|
67279
67871
|
|
|
@@ -67294,6 +67886,7 @@ WorkflowStepsService.REGISTRATION = {
|
|
|
67294
67886
|
|
|
67295
67887
|
|
|
67296
67888
|
|
|
67889
|
+
|
|
67297
67890
|
|
|
67298
67891
|
;// CONCATENATED MODULE: ../../core/src/extensions/ExtensionManager.ts
|
|
67299
67892
|
|
|
@@ -67626,6 +68219,11 @@ class ExtensionManager extends pubSubServiceInterface/* PubSubService */.h {
|
|
|
67626
68219
|
getRegisteredExtensionIds() {
|
|
67627
68220
|
return [...this.registeredExtensionIds];
|
|
67628
68221
|
}
|
|
68222
|
+
getUniqueServicesList(servicesManager) {
|
|
68223
|
+
// Make sure only one service instance is returned because almost all services are
|
|
68224
|
+
// registered with different keys (eg: StudyPrefetcherService and studyPrefetcherService)
|
|
68225
|
+
return Array.from(new Set(Object.values(servicesManager.services)));
|
|
68226
|
+
}
|
|
67629
68227
|
|
|
67630
68228
|
/**
|
|
67631
68229
|
* Calls all the services and extension on mode enters.
|
|
@@ -67641,11 +68239,12 @@ class ExtensionManager extends pubSubServiceInterface/* PubSubService */.h {
|
|
|
67641
68239
|
_hotkeysManager,
|
|
67642
68240
|
_extensionLifeCycleHooks
|
|
67643
68241
|
} = this;
|
|
68242
|
+
const services = this.getUniqueServicesList(_servicesManager);
|
|
67644
68243
|
|
|
67645
68244
|
// The onModeEnter of the service must occur BEFORE the extension
|
|
67646
68245
|
// onModeEnter in order to reset the state to a standard state
|
|
67647
68246
|
// before the extension restores and cached data.
|
|
67648
|
-
for (const service of
|
|
68247
|
+
for (const service of services) {
|
|
67649
68248
|
service?.onModeEnter?.();
|
|
67650
68249
|
}
|
|
67651
68250
|
registeredExtensionIds.forEach(extensionId => {
|
|
@@ -67666,6 +68265,7 @@ class ExtensionManager extends pubSubServiceInterface/* PubSubService */.h {
|
|
|
67666
68265
|
_commandsManager,
|
|
67667
68266
|
_extensionLifeCycleHooks
|
|
67668
68267
|
} = this;
|
|
68268
|
+
const services = this.getUniqueServicesList(_servicesManager);
|
|
67669
68269
|
registeredExtensionIds.forEach(extensionId => {
|
|
67670
68270
|
const onModeExit = _extensionLifeCycleHooks.onModeExit[extensionId];
|
|
67671
68271
|
if (typeof onModeExit === 'function') {
|
|
@@ -67678,7 +68278,7 @@ class ExtensionManager extends pubSubServiceInterface/* PubSubService */.h {
|
|
|
67678
68278
|
|
|
67679
68279
|
// The service onModeExit calls must occur after the extension ones
|
|
67680
68280
|
// so that extension ones can store/restore data.
|
|
67681
|
-
for (const service of
|
|
68281
|
+
for (const service of services) {
|
|
67682
68282
|
try {
|
|
67683
68283
|
service?.onModeExit?.();
|
|
67684
68284
|
} catch (e) {
|
|
@@ -69857,7 +70457,8 @@ const OHIF = {
|
|
|
69857
70457
|
PubSubService: pubSubServiceInterface/* PubSubService */.h,
|
|
69858
70458
|
PanelService: services_PanelService,
|
|
69859
70459
|
useToolbar: useToolbar,
|
|
69860
|
-
WorkflowStepsService: services_WorkflowStepsService
|
|
70460
|
+
WorkflowStepsService: services_WorkflowStepsService,
|
|
70461
|
+
StudyPrefetcherService: StudyPrefetcherService
|
|
69861
70462
|
};
|
|
69862
70463
|
|
|
69863
70464
|
|
|
@@ -187534,7 +188135,7 @@ ContextMenu.propTypes = {
|
|
|
187534
188135
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43001);
|
|
187535
188136
|
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3827);
|
|
187536
188137
|
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
|
|
187537
|
-
/* harmony import */ var _getIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
|
|
188138
|
+
/* harmony import */ var _getIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28607);
|
|
187538
188139
|
|
|
187539
188140
|
|
|
187540
188141
|
|
|
@@ -374956,7 +375557,8 @@ module.exports = function regexTester(regex) {
|
|
|
374956
375557
|
/***/ ((__unused_webpack_module, exports) => {
|
|
374957
375558
|
|
|
374958
375559
|
"use strict";
|
|
374959
|
-
/**
|
|
375560
|
+
/**
|
|
375561
|
+
* @license React
|
|
374960
375562
|
* scheduler.production.min.js
|
|
374961
375563
|
*
|
|
374962
375564
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
@@ -374964,19 +375566,16 @@ module.exports = function regexTester(regex) {
|
|
|
374964
375566
|
* This source code is licensed under the MIT license found in the
|
|
374965
375567
|
* LICENSE file in the root directory of this source tree.
|
|
374966
375568
|
*/
|
|
374967
|
-
|
|
374968
|
-
var
|
|
374969
|
-
|
|
374970
|
-
y=
|
|
374971
|
-
|
|
374972
|
-
|
|
374973
|
-
function
|
|
374974
|
-
function
|
|
374975
|
-
function
|
|
374976
|
-
function
|
|
374977
|
-
exports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};
|
|
374978
|
-
exports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if("object"===typeof c&&null!==c){var e=c.delay;e="number"===typeof e&&0<e?d+e:d;c="number"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),e=d;c=e+c;a={id:P++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};
|
|
374979
|
-
exports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<Q.expirationTime||k()};exports.unstable_wrapCallback=function(a){var b=R;return function(){var c=R;R=b;try{return a.apply(this,arguments)}finally{R=c}}};
|
|
375569
|
+
function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}
|
|
375570
|
+
function g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}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}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D="function"===typeof setTimeout?setTimeout:null,E="function"===typeof clearTimeout?clearTimeout:null,F="undefined"!==typeof setImmediate?setImmediate:null;
|
|
375571
|
+
"undefined"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}
|
|
375572
|
+
function J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if("function"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();"function"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;
|
|
375573
|
+
function M(){return exports.unstable_now()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if("function"===typeof F)S=function(){F(R)};else if("undefined"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}
|
|
375574
|
+
exports.unstable_IdlePriority=5;exports.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(){A||z||(A=!0,I(J))};
|
|
375575
|
+
exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};
|
|
375576
|
+
exports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};
|
|
375577
|
+
exports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();"object"===typeof c&&null!==c?(c=c.delay,c="number"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};
|
|
375578
|
+
exports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};
|
|
374980
375579
|
|
|
374981
375580
|
|
|
374982
375581
|
/***/ }),
|
|
@@ -393227,7 +393826,7 @@ function __disposeResources(env) {
|
|
|
393227
393826
|
/******/ // This function allow to reference async chunks
|
|
393228
393827
|
/******/ __webpack_require__.u = (chunkId) => {
|
|
393229
393828
|
/******/ // return url for filenames based on template
|
|
393230
|
-
/******/ return "" + ({"158":"histogram-worker","607":"suv-peak-worker","985":"polySeg"}[chunkId] || chunkId) + ".bundle." + {"10":"c626810bd199ab63f3a2","153":"
|
|
393829
|
+
/******/ return "" + ({"158":"histogram-worker","607":"suv-peak-worker","985":"polySeg"}[chunkId] || chunkId) + ".bundle." + {"10":"c626810bd199ab63f3a2","153":"4263246744bdb7397061","158":"e7e9fea2c3236b0e747a","169":"483057ed84ca3e92513a","202":"bb0e8196739bb896dc9e","210":"23df9d395237def99256","246":"07aee1251a6cfac762d0","281":"80f169c084e30c148f09","286":"985c5ebbb2158c7e59ab","315":"f7f9e6c76811f8a6a30f","353":"4371e55b06de8f3c7aa7","360":"40c4f2cac5dc24cbd151","372":"d9ed2938305b951123a8","376":"4c934b0adf377e00de69","412":"836f106f6e2896dc42a5","417":"abf8bcee0f246002acb9","428":"744fc5865b2d747de88a","497":"ee102d6243f984113f08","498":"bb47c493dd02451f77ef","502":"38ca85216c5168ce773b","516":"85aeaa0680375e6eedd1","530":"87f8b13ff55bf7b2a6d1","552":"bf1485400629f36602a9","571":"2b4e21bc61d7685a5fdb","591":"3b939d8f32f22c4e9978","604":"83f50929b208c60e48da","607":"eb11e71db02e52601ecf","658":"358716d6aee4c190f2cd","757":"1900204cf3e21d28e3b0","791":"b5c3d922846354a1f244","793":"c92f52ddff0e3bf506e6","818":"cda4e369fdee5459a544","831":"9e1a3495947e5bb49756","842":"24d9a57ef3a6f60abcd7","888":"f624d032cdccc374fa84","931":"f6fa2a436ace89ebf60f","944":"6b7e1773f5cf2637cf67","962":"230a6e51c90ae71baa2f","978":"60ae5483cf810ecd524a","985":"b25c61224998018d0f79","993":"aa31ebda5a5f62c44de5","994":"5dc798210cd5c4493e0e"}[chunkId] + ".js";
|
|
393231
393830
|
/******/ };
|
|
393232
393831
|
/******/ })();
|
|
393233
393832
|
/******/
|
|
@@ -393399,7 +393998,7 @@ function __disposeResources(env) {
|
|
|
393399
393998
|
/******/ };
|
|
393400
393999
|
/******/
|
|
393401
394000
|
/******/ __webpack_require__.f.miniCss = (chunkId, promises) => {
|
|
393402
|
-
/******/ var cssChunks = {"169":1,"210":1,"
|
|
394001
|
+
/******/ var cssChunks = {"169":1,"210":1,"286":1,"516":1,"552":1,"757":1,"994":1};
|
|
393403
394002
|
/******/ if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);
|
|
393404
394003
|
/******/ else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {
|
|
393405
394004
|
/******/ promises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {
|
|
@@ -393414,7 +394013,7 @@ function __disposeResources(env) {
|
|
|
393414
394013
|
/******/ // no hmr
|
|
393415
394014
|
/******/
|
|
393416
394015
|
/******/ __webpack_require__.F.miniCss = (chunkId) => {
|
|
393417
|
-
/******/ if((!__webpack_require__.o(installedCssChunks, chunkId) || installedCssChunks[chunkId] === undefined) && /^(
|
|
394016
|
+
/******/ if((!__webpack_require__.o(installedCssChunks, chunkId) || installedCssChunks[chunkId] === undefined) && /^(143|169|210|286|516|552|757|994)$/.test(chunkId)) {
|
|
393418
394017
|
/******/ installedCssChunks[chunkId] = null;
|
|
393419
394018
|
/******/ var link = document.createElement('link');
|
|
393420
394019
|
/******/
|
|
@@ -393549,12 +394148,12 @@ function __disposeResources(env) {
|
|
|
393549
394148
|
/******/ "210": [
|
|
393550
394149
|
/******/ 315
|
|
393551
394150
|
/******/ ],
|
|
393552
|
-
/******/ "217": [
|
|
393553
|
-
/******/ 169
|
|
393554
|
-
/******/ ],
|
|
393555
394151
|
/******/ "360": [
|
|
393556
394152
|
/******/ 571
|
|
393557
394153
|
/******/ ],
|
|
394154
|
+
/******/ "516": [
|
|
394155
|
+
/******/ 169
|
|
394156
|
+
/******/ ],
|
|
393558
394157
|
/******/ "591": [
|
|
393559
394158
|
/******/ 412
|
|
393560
394159
|
/******/ ],
|