linny-r 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +312 -0
  3. package/console.js +973 -0
  4. package/package.json +32 -0
  5. package/server.js +1547 -0
  6. package/static/fonts/FantasqueSansMono-Bold.ttf +0 -0
  7. package/static/fonts/FantasqueSansMono-BoldItalic.ttf +0 -0
  8. package/static/fonts/FantasqueSansMono-Italic.ttf +0 -0
  9. package/static/fonts/FantasqueSansMono-Regular.ttf +0 -0
  10. package/static/fonts/Hack-Bold.ttf +0 -0
  11. package/static/fonts/Hack-BoldItalic.ttf +0 -0
  12. package/static/fonts/Hack-Italic.ttf +0 -0
  13. package/static/fonts/Hack-Regular.ttf +0 -0
  14. package/static/fonts/Lato-Bold.ttf +0 -0
  15. package/static/fonts/Lato-BoldItalic.ttf +0 -0
  16. package/static/fonts/Lato-Italic.ttf +0 -0
  17. package/static/fonts/Lato-Regular.ttf +0 -0
  18. package/static/fonts/mplus-1m-bold.ttf +0 -0
  19. package/static/fonts/mplus-1m-light.ttf +0 -0
  20. package/static/fonts/mplus-1m-medium.ttf +0 -0
  21. package/static/fonts/mplus-1m-regular.ttf +0 -0
  22. package/static/fonts/mplus-1m-thin.ttf +0 -0
  23. package/static/images/access.png +0 -0
  24. package/static/images/actor.png +0 -0
  25. package/static/images/actors.png +0 -0
  26. package/static/images/add-selector.png +0 -0
  27. package/static/images/add.png +0 -0
  28. package/static/images/back.png +0 -0
  29. package/static/images/black-box.png +0 -0
  30. package/static/images/by-sa.svg +74 -0
  31. package/static/images/cancel.png +0 -0
  32. package/static/images/chart.png +0 -0
  33. package/static/images/check-disab.png +0 -0
  34. package/static/images/check-off.png +0 -0
  35. package/static/images/check-on.png +0 -0
  36. package/static/images/check-x.png +0 -0
  37. package/static/images/clone.png +0 -0
  38. package/static/images/close.png +0 -0
  39. package/static/images/cluster.png +0 -0
  40. package/static/images/compare.png +0 -0
  41. package/static/images/compress.png +0 -0
  42. package/static/images/constraint.png +0 -0
  43. package/static/images/copy.png +0 -0
  44. package/static/images/data-to-clpbrd.png +0 -0
  45. package/static/images/dataset.png +0 -0
  46. package/static/images/delete.png +0 -0
  47. package/static/images/diagram.png +0 -0
  48. package/static/images/down.png +0 -0
  49. package/static/images/edit-chart.png +0 -0
  50. package/static/images/edit.png +0 -0
  51. package/static/images/eq.png +0 -0
  52. package/static/images/equation.png +0 -0
  53. package/static/images/experiment.png +0 -0
  54. package/static/images/favicon.ico +0 -0
  55. package/static/images/fewer-dec.png +0 -0
  56. package/static/images/filter.png +0 -0
  57. package/static/images/find.png +0 -0
  58. package/static/images/forward.png +0 -0
  59. package/static/images/host-logo.png +0 -0
  60. package/static/images/icon.png +0 -0
  61. package/static/images/icon.svg +23 -0
  62. package/static/images/ignore.png +0 -0
  63. package/static/images/include.png +0 -0
  64. package/static/images/info-to-clpbrd.png +0 -0
  65. package/static/images/info.png +0 -0
  66. package/static/images/is-black-box.png +0 -0
  67. package/static/images/lbl.png +0 -0
  68. package/static/images/lift.png +0 -0
  69. package/static/images/link.png +0 -0
  70. package/static/images/linny-r.icns +0 -0
  71. package/static/images/linny-r.ico +0 -0
  72. package/static/images/linny-r.png +0 -0
  73. package/static/images/linny-r.svg +21 -0
  74. package/static/images/logo.png +0 -0
  75. package/static/images/model-info.png +0 -0
  76. package/static/images/module.png +0 -0
  77. package/static/images/monitor.png +0 -0
  78. package/static/images/more-dec.png +0 -0
  79. package/static/images/ne.png +0 -0
  80. package/static/images/new.png +0 -0
  81. package/static/images/note.png +0 -0
  82. package/static/images/ok.png +0 -0
  83. package/static/images/open.png +0 -0
  84. package/static/images/outcome.png +0 -0
  85. package/static/images/parent.png +0 -0
  86. package/static/images/paste.png +0 -0
  87. package/static/images/pause.png +0 -0
  88. package/static/images/print-chart.png +0 -0
  89. package/static/images/print.png +0 -0
  90. package/static/images/process.png +0 -0
  91. package/static/images/product.png +0 -0
  92. package/static/images/pwlf.png +0 -0
  93. package/static/images/receiver.png +0 -0
  94. package/static/images/redo.png +0 -0
  95. package/static/images/remove.png +0 -0
  96. package/static/images/rename.png +0 -0
  97. package/static/images/repo-logo.png +0 -0
  98. package/static/images/repository.png +0 -0
  99. package/static/images/reset.png +0 -0
  100. package/static/images/resize.png +0 -0
  101. package/static/images/restore.png +0 -0
  102. package/static/images/save-chart.png +0 -0
  103. package/static/images/save-data.png +0 -0
  104. package/static/images/save-diagram.png +0 -0
  105. package/static/images/save.png +0 -0
  106. package/static/images/sensitivity.png +0 -0
  107. package/static/images/settings.png +0 -0
  108. package/static/images/solve.png +0 -0
  109. package/static/images/solver-logo.png +0 -0
  110. package/static/images/stats-to-clpbrd.png +0 -0
  111. package/static/images/stats.png +0 -0
  112. package/static/images/stop.png +0 -0
  113. package/static/images/store.png +0 -0
  114. package/static/images/stretch.png +0 -0
  115. package/static/images/table-to-clpbrd.png +0 -0
  116. package/static/images/table.png +0 -0
  117. package/static/images/tree.png +0 -0
  118. package/static/images/tudelft.png +0 -0
  119. package/static/images/ubl.png +0 -0
  120. package/static/images/undo.png +0 -0
  121. package/static/images/up.png +0 -0
  122. package/static/images/zoom-in.png +0 -0
  123. package/static/images/zoom-out.png +0 -0
  124. package/static/index.html +3088 -0
  125. package/static/linny-r.css +4722 -0
  126. package/static/scripts/iro.min.js +7 -0
  127. package/static/scripts/linny-r-config.js +105 -0
  128. package/static/scripts/linny-r-ctrl.js +1199 -0
  129. package/static/scripts/linny-r-gui.js +14814 -0
  130. package/static/scripts/linny-r-milp.js +286 -0
  131. package/static/scripts/linny-r-model.js +10405 -0
  132. package/static/scripts/linny-r-utils.js +687 -0
  133. package/static/scripts/linny-r-vm.js +7079 -0
  134. package/static/show-diff.html +84 -0
  135. package/static/show-png.html +113 -0
  136. package/static/sounds/error.wav +0 -0
  137. package/static/sounds/notification.wav +0 -0
  138. package/static/sounds/warning.wav +0 -0
@@ -0,0 +1,3088 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+ <head id="doc-head">
4
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
5
+ <title>Linny-R</title>
6
+
7
+ <!--
8
+ Linny-R is an executable graphical specification language for (mixed integer)
9
+ linear programming (MILP) problems, especially unit commitment problems (UCP).
10
+ The Linny-R language and tool have been developed by Pieter Bots at Delft
11
+ University of Technology, starting in 2009. The project to develop a browser-
12
+ based version started in 2017. See https://linny-r.org for more information.
13
+
14
+ This HTML document (index.html) provides the browser-based GUI for editing and
15
+ executing Linny-R models. See the <head> section for required JavaScript files.
16
+
17
+ NOTE: One of these files (iro.js) is authored by James Daniel. This JS code
18
+ implements the elegant color picker that appears in the Edit variable dialog
19
+ of the Chart Manager.
20
+
21
+ NOTE: The Linny-R model editor is implemented in JavaScript and will work
22
+ "stand-alone" in modern web browsers. The model solver has been implemented as
23
+ a server-side application, and requires a web server that will process the HTTP
24
+ requests made by the virtual machine that translates a Linny-R model to MILP
25
+ equations. Two such web servers have been implemented: one in PHP (for LAMPS
26
+ production servers) and one in Python (for stand-alone computers). The Python
27
+ implementation is made available via the Linny-R web site.
28
+ -->
29
+
30
+ <!--
31
+ Copyright (c) 2017-2022 Delft University of Technology
32
+
33
+ Permission is hereby granted, free of charge, to any person obtaining
34
+ a copy of this software and associated documentation files (the
35
+ "Software"), to deal in the Software without restriction, including
36
+ without limitation the rights to use, copy, modify, merge, publish,
37
+ distribute, sublicense, and/or sell copies of the Software, and to
38
+ permit persons to whom the Software is furnished to do so, subject to
39
+ the following conditions:
40
+
41
+ The above copyright notice and this permission notice shall be included
42
+ in all copies or substantial portions of the Software.
43
+
44
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
45
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
46
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
47
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
48
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
49
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
50
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
51
+ -->
52
+
53
+ <link rel="shortcut icon" type="image/png" href="images/icon.png">
54
+ <script>
55
+ var
56
+ // NODE = false indicates that modules need not export their properties
57
+ NODE = false,
58
+ // Version number and release date
59
+ LINNY_R_VERSION = '1.1.0',
60
+ VERSION_RELEASE_DATE = '2022-09-14 17:00',
61
+ // Linny-R server hosting public channels
62
+ PUBLIC_LINNY_R_URL = 'https://sysmod.tbm.tudelft.nl/linny-r',
63
+ // Create the XML parser
64
+ XML_PARSER = new DOMParser();
65
+ // NOTE: global variables will be initialized when page has loaded
66
+ // The controller object (User Interface)
67
+ UI = null,
68
+ // The current model
69
+ MODEL = null,
70
+ // @@ TO DO: make an IO context STACK to permit nested modules
71
+ IO_CONTEXT = null,
72
+ // Manager objects that will act as controller and/or viewer
73
+ X_EDIT = null,
74
+ MONITOR = null,
75
+ FILE_MANAGER = null,
76
+ DATASET_MANAGER = null,
77
+ CHART_MANAGER = null,
78
+ EXPERIMENT_MANAGER = null,
79
+ SENSITIVITY_ANALYSIS = null,
80
+ CONSTRAINT_EDITOR = null,
81
+ DOCUMENTATION_MANAGER = null,
82
+ RECEIVER = null,
83
+ REPOSITORY_BROWSER = null,
84
+ // Stack for undo/redo operations
85
+ UNDO_STACK = null,
86
+ // The virtual machine
87
+ VM = null;
88
+
89
+ // Load audio files
90
+ var SOUNDS = {
91
+ notification: new Audio('sounds/notification.wav'),
92
+ warning: new Audio('sounds/warning.wav'),
93
+ error: new Audio('sounds/error.wav')
94
+ };
95
+
96
+
97
+ function loadLinnyR() {
98
+ // Ensures that the Linny-R HTML and scripts will be the latest version
99
+ // by reloading unless URL contains current time stamp truncated to 10 s
100
+ const d = new Date(),
101
+ t = Math.floor(d.getTime() / 10000), // getTime returns milliseconds
102
+ url = window.location.href;
103
+ if(url.indexOf('?x=' + t) < 0) {
104
+ // NOTE: URL may contain user user ID (e-mail address)
105
+ const split = url.split('?u='),
106
+ base = split[0],
107
+ userid = (split.length > 1 ? '&u=' + split[1] : '');
108
+ // NOTE: remove prior '?x=' cache buster if any
109
+ window.location.assign(base.split('?x=')[0] + '?x=' + t + userid);
110
+ } else {
111
+ // Reload the style sheet
112
+ const link = document.createElement('link');
113
+ link.rel = 'stylesheet';
114
+ link.type = 'text/css';
115
+ link.href = 'linny-r.css?x=' + t;
116
+ link.media = 'all';
117
+ document.getElementById('doc-head').appendChild(link);
118
+ // Reload the scripts in their proper sequence, i.e., such that all
119
+ // classes are initialized before their instances are created
120
+ loadScripts(['-config', '-model', '-ctrl', '-gui', '-vm', '-utils'], t);
121
+ }
122
+ }
123
+
124
+ function loadScripts(sl, t) {
125
+ if(sl.length == 0) {
126
+ // Initialize only after all scripts have loaded
127
+ initializeLinnyR();
128
+ } else {
129
+ const
130
+ s = sl.shift(),
131
+ head = document.getElementById('doc-head'),
132
+ script = document.createElement('script');
133
+ // NOTE: recursive call after script s has loaded
134
+ script.onload = () => {
135
+ console.log('Loaded script: linny-r' + s);
136
+ loadScripts(sl, t);
137
+ };
138
+ script.src= 'scripts/linny-r' + s + '.js?x=' + t;
139
+ head.appendChild(script);
140
+ }
141
+ }
142
+
143
+ function checkForUpdates() {
144
+ UI.check_update_modal.element('reload-btn').style.display = 'none';
145
+ UI.check_update_modal.element('restart-btn').style.display = 'none';
146
+ fetch('auto-check')
147
+ .then((response) => response.text())
148
+ .then((data) => {
149
+ console.log('Version check:', data);
150
+ const info = data.split('|');
151
+ if(info.length > 1) {
152
+ UI.check_update_modal.element('msg').innerHTML = [
153
+ '<a href="https://sysmod.tbm.tudelft.nl/linny-r/docs/?15" ',
154
+ 'target="_blank">Version <strong>',
155
+ info[0], '</strong></a> released on ', info[1],
156
+ ' can be installed.'].join('');
157
+ UI.check_update_modal.show();
158
+ UI.check_update_modal.element('buttons').style.display = 'block';
159
+ } else if(data.trim() !== 'up-to-date') {
160
+ UI.warn('Version check failed: "' + data + '"');
161
+ }
162
+ })
163
+ .catch((error) => UI.warn(UI.WARNING.NO_CONNECTION, error));
164
+ }
165
+
166
+ function initializeLinnyR() {
167
+ // Protect user from unintentionally closing the browser
168
+ window.onbeforeunload = () => { return 'Exit Linny-R?'; };
169
+ // NOTE: first create UI and Documentation Manager to report messages
170
+ UI = new GUIController();
171
+ UI.addListeners();
172
+ DOCUMENTATION_MANAGER = new DocumentationManager();
173
+ // Create the virtual machine
174
+ VM = new VirtualMachine();
175
+ // Create the GUI-only objects
176
+ UNDO_STACK = new UndoStack();
177
+ X_EDIT = new ExpressionEditor();
178
+ ACTOR_MANAGER = new ActorManager();
179
+ EQUATION_MANAGER = new EquationManager();
180
+ FINDER = new Finder();
181
+ CONSTRAINT_EDITOR = new ConstraintEditor();
182
+ // NOTE: Instantiate the GUI classes, not their superclasses
183
+ FILE_MANAGER = new GUIFileManager();
184
+ REPOSITORY_BROWSER = new GUIRepositoryBrowser();
185
+ DATASET_MANAGER = new GUIDatasetManager();
186
+ CHART_MANAGER = new GUIChartManager();
187
+ SENSITIVITY_ANALYSIS = new GUISensitivityAnalysis();
188
+ EXPERIMENT_MANAGER = new GUIExperimentManager();
189
+ MONITOR = new GUIMonitor();
190
+ RECEIVER = new GUIReceiver();
191
+ // Check for software updates only when running on local server
192
+ // NOTE: do this *after* GUI elements have been created, as the updater
193
+ // uses a dialog
194
+ if(!SOLVER.user_id) checkForUpdates();
195
+ // Initialize auto-saving function
196
+ AUTO_SAVE = new ModelAutoSaver();
197
+ // Create a new Linny-R model
198
+ UI.createNewModel();
199
+ // Connect the virtual machine (may prompt for password)
200
+ MONITOR.connectToServer();
201
+ }
202
+
203
+ </script>
204
+ <script type="text/javascript" src="scripts/iro.min.js"></script>
205
+ </head>
206
+ <body onload="loadLinnyR();">
207
+ <!-- header shows top menu bar -->
208
+ <header>
209
+ <img id="static-icon" src="images/icon.svg">
210
+ <img id="linny-r-name" src="images/linny-r.svg">
211
+ <div id="linny-r-version-number"></div>
212
+ <div id="topbar">
213
+ <img id="new-btn" class="btn enab" src="images/new.png"
214
+ title="Create new model">
215
+ <img id="load-btn" class="btn enab" src="images/open.png"
216
+ title="Load model (Ctrl-L)">
217
+ <img id="settings-btn" class="btn enab" src="images/settings.png"
218
+ title="Change settings (Ctrl-V)">
219
+ <img id="save-btn" class="btn enab" src="images/save.png"
220
+ title="Save model (Ctrl-S)">
221
+ <img id="repository-btn" class="btn enab" src="images/repository.png"
222
+ title="Browse repositories (Ctrl-B)">
223
+ <img id="actors-btn" class="btn enab" src="images/actors.png"
224
+ title="Manage actors (Ctrl-A)">
225
+ <img id="dataset-btn" class="btn enab" src="images/dataset.png"
226
+ title="Manage datasets (Ctrl-D)">
227
+ <img id="equation-btn" class="btn enab" src="images/equation.png"
228
+ title="Manage equations (Ctrl-E)">
229
+ <img id="chart-btn" class="btn enab" src="images/chart.png"
230
+ title="Manage charts (Ctrl-O)">
231
+ <img id="sensitivity-btn" class="btn enab" src="images/sensitivity.png"
232
+ title="Sensitivity analysis (Ctrl-J)">
233
+ <img id="experiment-btn" class="btn enab" src="images/experiment.png"
234
+ title="Manage experiments (Ctrl-X)">
235
+ <a href="show-png.html" target="_blank"
236
+ style="text-decoration: none; outline: none">
237
+ <img id="diagram-btn" class="btn enab" src="images/diagram.png"
238
+ title="Render diagram as bitmap at 300 dpi (Ctrl-P)">
239
+ </a>
240
+ <img id="savediagram-btn" class="btn enab" src="images/save-diagram.png"
241
+ title="Download diagram as Scalable Vector Graphics (Ctrl-G)">
242
+ <img id="finder-btn" class="btn enab" src="images/find.png"
243
+ title="Find model elements by their name (Ctrl-F)">
244
+ <img id="monitor-btn" class="btn enab" src="images/monitor.png"
245
+ title="View solver monitor (Ctrl-M)">
246
+ <img id="receiver-btn" class="btn enab" src="images/receiver.png"
247
+ title="Listen for commands from local host (Ctrl-H)">
248
+ <img id="documentation-btn" class="btn enab" src="images/info.png"
249
+ title="View information and documentation (Ctrl-I)">
250
+ </div>
251
+ <!-- if diagram is not the TOP cluster, show a button to move up to the parent cluster -->
252
+ <div id="focal-cluster">
253
+ <img id="focal-black-box" class="btn" src="images/is-black-box.png"
254
+ title="This cluster is a &quot;black box&quot;" hidden>
255
+ <div id="focal-name"></div>
256
+ <img id="parent-btn" class="btn enab" src="images/parent.png"
257
+ title="View parent cluster (Ctrl-U)">
258
+ <img id="lift-btn" class="btn disab" src="images/lift.png"
259
+ title="Move selection to parent cluster">
260
+ </div>
261
+ <!-- solver host image -->
262
+ <div id="server-host" style="float: right">
263
+ <img id="host-logo" src="images/host-logo.png"
264
+ title="Solver host">
265
+ </div>
266
+ </header>
267
+ <!-- the main window pane shows the diagram (SVG image) -->
268
+ <main>
269
+ <div id="cc">
270
+ <svg id="svg-root" version="1.1" xmlns="http://www.w3.org/2000/svg"
271
+ xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
272
+ </svg>
273
+ </div>
274
+ </main>
275
+ <!-- the footer displays the status bar with X/Y coordinates, zoom in/out buttons, buttons for moving forward/backward
276
+ in time, and the status line that displays info, notifications, warnings, and error messages
277
+ -->
278
+ <footer>
279
+ <div id="set-up-progress">
280
+ <div id="set-up-progress-bar"></div>
281
+ </div>
282
+ <table id="statusbar">
283
+ <tr>
284
+ <td id="pos-x">X = 0</td>
285
+ <td id="pos-y">Y = 0</td>
286
+ <td>
287
+ <img id="zoomout-btn" class="sbtn senab" src="images/zoom-out.png">
288
+ </td>
289
+ <td id="zoom">100%</td>
290
+ <td id="zoom-sep">
291
+ <img id="zoomin-btn" class="sbtn senab" src="images/zoom-in.png">
292
+ </td>
293
+ <td>
294
+ <img id="stepback-btn" class="sbtn senab" src="images/back.png">
295
+ </td>
296
+ <td id="step">1</td>
297
+ <td id="step-sep">
298
+ <img id="stepforward-btn" class="sbtn senab" src="images/forward.png">
299
+ </td>
300
+ <td id="info-line" title="Status bar"></td>
301
+ <td id="autosave-sep">
302
+ <img id="autosave-btn" class="btn enab" src="images/restore.png">
303
+ </td>
304
+ <td id="recall-btn"
305
+ title="To view previous messages, open the information dialog (Ctrl-I)
306
+ and move the cursor over the status bar">
307
+ </td>
308
+ </tr>
309
+ </table>
310
+ </footer>
311
+ <!-- the side bar holds buttons for editing the model (ADD, DELETE, UNDO, REDO) and for running it -->
312
+ <div id="sidebar">
313
+ <img id="process-btn" class="btn toggle enab" src="images/process.png"
314
+ title="Add process">
315
+ <img id="product-btn" class="btn toggle enab" src="images/product.png"
316
+ title="Add product">
317
+ <img id="link-btn" class="btn toggle enab" src="images/link.png"
318
+ title="Draw link">
319
+ <img id="constraint-btn" class="btn toggle enab" src="images/constraint.png"
320
+ title="Add composite constraint">
321
+ <img id="cluster-btn" class="btn toggle disab" src="images/cluster.png"
322
+ title="Add cluster">
323
+ <img id="note-btn" class="btn toggle enab sep" src="images/note.png"
324
+ title="Add note">
325
+ <img id="clone-btn" class="btn disab sep" src="images/clone.png"
326
+ title="Clone selection (Ctrl-C)">
327
+ <img id="delete-btn" class="btn disab sep" src="images/delete.png"
328
+ title="Delete">
329
+ <img id="undo-btn" class="btn enab" src="images/undo.png"
330
+ title="Undo (Ctrl-Z)">
331
+ <img id="redo-btn" class="btn disab" src="images/redo.png"
332
+ title="Redo (Ctrl-Y)">
333
+ <img id="solve-btn" class="btn enab" src="images/solve.png"
334
+ title="Run simulation (Ctrl-R)">
335
+ <img id="stop-btn" class="btn enab off" src="images/stop.png"
336
+ title="Stop solving (Ctrl-Q)">
337
+ <img id="reset-btn" class="btn enab off" src="images/reset.png"
338
+ title="Reset model (Ctrl-K)">
339
+ </div>
340
+
341
+ <!-- these hidden DIVs help to output create files to the browser as "attachments" (downloads) -->
342
+ <a id="xml-saver" target='_blank' hidden="hidden"></a>
343
+ <a id="svg-saver" target='_blank' hidden="hidden"></a>
344
+
345
+ <!-- the following hidden DIVs are dialog windows that are shown as "modals",
346
+ i.e., disabling all other functions -->
347
+
348
+ <!-- the LOGON dialog prompts for (optional) user name and password -->
349
+ <div id="logon-modal" class="modal">
350
+ <div id="logon-dlg" class="inp-dlg">
351
+ <div class="dlg-title">
352
+ Logon to server
353
+ <img class="cancel-btn" src="images/cancel.png">
354
+ <img class="ok-btn" src="images/ok.png">
355
+ </div>
356
+ <table style="width: 100%">
357
+ <tr>
358
+ <td>Mail address:</td>
359
+ <td>
360
+ <input id="logon-name" style="width: 221px"
361
+ type="text" autocomplete="off">
362
+ </td>
363
+ </tr>
364
+ <tr>
365
+ <td>Password:</td>
366
+ <td>
367
+ <input id="logon-password" style="width: 219px"
368
+ type="password" autocomplete="off">
369
+ </td>
370
+ </tr>
371
+ <tr>
372
+ <td colspan="2">
373
+ <small>
374
+ No account yet?
375
+ Sign up <a href="solver" target="_blank">here</a>.
376
+ </small>
377
+ </td>
378
+ </tr>
379
+ </table>
380
+ </div>
381
+ </div>
382
+
383
+ <!-- the MODEL dialog prompts for (optional) model name and author name -->
384
+ <div id="model-modal" class="modal">
385
+ <div id="model-dlg" class="inp-dlg">
386
+ <div class="dlg-title">
387
+ New model
388
+ <img class="cancel-btn" src="images/cancel.png">
389
+ <img class="ok-btn" src="images/ok.png">
390
+ </div>
391
+ <table style="width: 100%">
392
+ <tr>
393
+ <td>Name:</td>
394
+ <td>
395
+ <input id="model-name" style="width: 219px"
396
+ type="text" autocomplete="off">
397
+ </td>
398
+ </tr>
399
+ <tr>
400
+ <td>Author:</td>
401
+ <td>
402
+ <input id="model-author" style="width: 219px"
403
+ type="text" autocomplete="off">
404
+ </td>
405
+ </tr>
406
+ </table>
407
+ </div>
408
+ </div>
409
+
410
+ <!-- the LOAD dialog prompts the user for a Linny-R model file on disk
411
+ to be loaded -->
412
+ <div id="load-modal" class="modal">
413
+ <div id="load-dlg" class="inp-dlg">
414
+ <div class="dlg-title">
415
+ Load model
416
+ <img class="cancel-btn" src="images/cancel.png">
417
+ <img class="ok-btn" src="images/ok.png">
418
+ </div>
419
+ <input id="load-xml-file" type="file">
420
+ <img id="load-autosaved-btn" class="btn enab" src="images/restore.png">
421
+ </div>
422
+ </div>
423
+
424
+ <!-- the PASSWORD dialog prompts the user for a password -->
425
+ <div id="password-modal" class="modal">
426
+ <div id="password-dlg" class="inp-dlg">
427
+ <div class="dlg-title">
428
+ <span id="password-action">Enter</span> password
429
+ <img class="cancel-btn" src="images/cancel.png">
430
+ <img id="password-ok-btn" class="ok-btn" src="images/ok.png">
431
+ </div>
432
+ <input id="password-code" type="password">
433
+ <div id="password-strength-bar"></div>
434
+ </div>
435
+ </div>
436
+
437
+ <!-- the RESTORE dialog allows the user to restore an auto-saved model -->
438
+ <div id="restore-modal" class="modal">
439
+ <div id="restore-dlg" class="inp-dlg">
440
+ <div class="dlg-title">
441
+ <span id="restore-dlg-title">Restore auto-saved model</span>
442
+ <img id="restore-cancel" class="cancel-btn" src="images/cancel.png">
443
+ <img id="restore-confirm" class="ok-btn" src="images/ok.png">
444
+ </div>
445
+ <div id="restore-scroll-area">
446
+ <table id="restore-table"></table>
447
+ </div>
448
+ <div id="auto-save-settings">
449
+ <label>Auto-save interval</label>
450
+ <input id="auto-save-minutes" type="text" autocomplete="off">
451
+ minutes <small>(0 = OFF)</small>
452
+ <label style="margin-left: 12px">Remove models after</label>
453
+ <input id="auto-save-hours" type="text" autocomplete="off">
454
+ hours
455
+ <img id="auto-save-clear-btn" class="btn enab" src="images/reset.png"
456
+ title="Remove all auto-saved models from local storage">
457
+ </div>
458
+ <div id="confirm-remove-models">
459
+ Really remove all auto-saved from local storage?
460
+ <strong>
461
+ <img id="autosave-do-remove" class="inline-ok-btn"
462
+ src="images/ok.png"> Yes
463
+ <img id="autosave-cancel" class="inline-cancel-btn"
464
+ src="images/cancel.png"> No
465
+ </strong>
466
+ </div>
467
+ </div>
468
+ </div>
469
+
470
+ <!-- the MODEL SETTINGS dialog allows the user to modify model parameters -->
471
+ <div id="settings-modal" class="modal">
472
+ <div id="settings-dlg" class="inp-dlg">
473
+ <div class="dlg-title">
474
+ Model settings
475
+ <img class="cancel-btn" src="images/cancel.png">
476
+ <img class="ok-btn" src="images/ok.png">
477
+ <img class="info-btn" src="images/info.png"
478
+ title="View/edit the documentation for this model">
479
+ </div>
480
+ <table style="width: 100%; white-space: nowrap">
481
+ <tr>
482
+ <td>Name:</td>
483
+ <td><input id="settings-name" type="text" autocomplete="off"
484
+ style="width:270px"></td>
485
+ </tr>
486
+ <tr>
487
+ <td>Author:</td>
488
+ <td><input id="settings-author" type="text" autocomplete="off"
489
+ style="width:270px"></td>
490
+ </tr>
491
+ </table>
492
+ <table style="width:100%; white-space: nowrap">
493
+ <tr>
494
+ <td colspan="2">Default product unit:&nbsp;
495
+ <input id="settings-product-unit" type="text" autocomplete="off"
496
+ style="width:45px;margin-right:19px">Currency unit:&nbsp;
497
+ <input id="settings-currency-unit" type="text" style="width:45px">
498
+ </td>
499
+ </tr>
500
+ <tr>
501
+ <td style="padding:0px">
502
+ <div id="settings-decimal-comma" class="box clear"></div>
503
+ </td>
504
+ <td style="padding-bottom:4px">
505
+ Use decimal <u>comma</u> when copying data to clipboard
506
+ </td>
507
+ </tr>
508
+ <tr>
509
+ <td style="padding:0px">
510
+ <div id="settings-align-to-grid" class="box clear"></div>
511
+ </td>
512
+ <td style="padding-bottom:4px">Snap to alignment grid with
513
+ <input id="settings-grid-pixels" type="text" autocomplete="off"
514
+ style="width:35px;text-align:center"> pixels resolution
515
+ </td>
516
+ </tr>
517
+ <tr>
518
+ <td colspan="2">Time step:&nbsp;
519
+ <input id="settings-time-scale" type="text" autocomplete="off"
520
+ style="width:50px">
521
+ <select id="settings-time-unit"
522
+ style="height:20px;font-size:12px;vertical-align:top">
523
+ <option value="year">year</option>
524
+ <option value="week">week</option>
525
+ <option value="day">day</option>
526
+ <option value="hour" selected="selected">hour</option>
527
+ <option value="minute">minute</option>
528
+ <option value="second">second</option>
529
+ </select>
530
+ </td>
531
+ </tr>
532
+ <tr>
533
+ <td colspan="2">
534
+ Optimize from&nbsp;step&nbsp;t<sub><small>0</small></sub> =
535
+ <input id="settings-period-start" type="text" autocomplete="off"
536
+ style="width:50px">
537
+ &nbsp;&nbsp;to&nbsp;&nbsp;t<sub><small>N</small></sub> =
538
+ <input id="settings-period-end" type="text" autocomplete="off"
539
+ style="width:50px">
540
+ </td>
541
+ </tr>
542
+ <tr>
543
+ <td colspan="2">Block length:&nbsp;
544
+ <input id="settings-block-length" type="text" autocomplete="off"
545
+ style="width:50px"> &nbsp;&nbsp;Look-ahead:&nbsp;
546
+ <input id="settings-look-ahead" type="text" autocomplete="off"
547
+ style="width:50px"> time steps
548
+ </td>
549
+ </tr>
550
+ <tr>
551
+ <td colspan="2">Solver time limit:&nbsp;
552
+ <input id="settings-time-limit" type="text" autocomplete="off"
553
+ style="width:35px;text-align:center"> seconds per block
554
+ </td>
555
+ </tr>
556
+ <tr>
557
+ <td style="padding:0px">
558
+ <div id="settings-cost-prices" class="box clear"></div>
559
+ </td>
560
+ <td style="padding-bottom:4px">Infer and display cost prices</td>
561
+ </tr>
562
+ <tr>
563
+ <td style="padding:0px">
564
+ <div id="settings-block-arrows" class="box clear"></div>
565
+ </td>
566
+ <td style="padding-bottom:4px">Show hidden flows as block arrows</td>
567
+ </tr>
568
+ <tr>
569
+ <td style="padding:0px">
570
+ <div id="settings-encrypt" class="box clear"></div>
571
+ </td>
572
+ <td style="padding-bottom:4px">
573
+ Encrypt with password
574
+ </td>
575
+ </tr>
576
+ </table>
577
+ </div>
578
+ </div>
579
+
580
+ <!-- the REPOSITORY BROWSER dialog allows interaction with repositories -->
581
+ <div id="repository-dlg" class="inp-dlg">
582
+ <div id="repository-hdr" class="dragger dlg-title">Repository browser
583
+ <img id="repository-close-btn" class="close-btn" src="images/close.png">
584
+ </div>
585
+ <div id="repository-not-implemented">
586
+ <div style="margin-top: 20px">
587
+ Repositories have not (yet) been implemented on this server.
588
+ </div>
589
+ </div>
590
+ <div id="repository-pane">
591
+ <div id="repository-buttons">
592
+ <img id="repo-add-btn" class="btn enab" src="images/add.png"
593
+ title="Add repository">
594
+ <img id="repo-remove-btn" class="btn disab" src="images/remove.png"
595
+ title="Remove selected repository from list">
596
+ <img id="repo-access-btn" class="btn disab" src="images/access.png"
597
+ title="Obtain write access for this repository (requires a valid token)">
598
+ <img id="repo-include-btn" class="btn disab" src="images/module.png"
599
+ title="Include module in current model">
600
+ <img id="repo-load-btn" class="btn disab" src="images/open.png"
601
+ title="Load model from repository">
602
+ <img id="repo-store-btn" class="btn enab" src="images/store.png"
603
+ title="Store model as module in repository">
604
+ <img id="repo-black-box-btn" class="btn enab" src="images/black-box.png"
605
+ title="Store model as &quot;black-box&quot; module in repository">
606
+ <img id="repo-delete-btn" class="btn disab" src="images/delete.png"
607
+ title="Delete selected module from repository">
608
+ </div>
609
+ <select id="repository-selector">
610
+ </select>
611
+ <div id="modules-header">Modules in repository</div>
612
+ <div id="modules-scroll-area">
613
+ <table id="modules-table">
614
+ </table>
615
+ </div>
616
+ <div id="modules-count"></div>
617
+ </div>
618
+ <div id="repository-resize" class="resizer"></div>
619
+ </div>
620
+
621
+ <!-- the ADD REPOSITORY dialog prompts for a repository name, URL and token -->
622
+ <div id="add-repository-modal" class="modal">
623
+ <div id="add-repository-dlg" class="inp-dlg">
624
+ <div class="dlg-title">
625
+ Register a repository
626
+ <img class="cancel-btn" src="images/cancel.png">
627
+ <img class="ok-btn" src="images/ok.png">
628
+ </div>
629
+ <table style="width:100%">
630
+ <tr>
631
+ <td>Name:</td>
632
+ <td>
633
+ <input id="add-repository-name" type="text" autocomplete="off"
634
+ style="width:230px">
635
+ </td>
636
+ </tr>
637
+ <tr>
638
+ <td>https://</td>
639
+ <td>
640
+ <input id="add-repository-url" type="text" autocomplete="off"
641
+ style="width:230px; font-size:12px;">
642
+ </td>
643
+ </tr>
644
+ <tr>
645
+ <td>Token:</td>
646
+ <td>
647
+ <input id="add-repository-token" type="text" autocomplete="off"
648
+ placeholder="(optional - required only for write access)"
649
+ style="width:230px; font-size:12px;">
650
+ </td>
651
+ </tr>
652
+ </table>
653
+ </div>
654
+ </div>
655
+
656
+ <!-- the ACCESS REPOSITORY dialog prompts for a token -->
657
+ <div id="access-repository-modal" class="modal">
658
+ <div id="access-repository-dlg" class="inp-dlg">
659
+ <div class="dlg-title">
660
+ Access repository <div id="access-repository-name"></div>
661
+ <img class="cancel-btn" src="images/cancel.png">
662
+ <img class="ok-btn" src="images/ok.png">
663
+ </div>
664
+ <table style="width:100%">
665
+ <tr>
666
+ <td>Token:</td>
667
+ <td>
668
+ <input id="access-repository-token" type="text" autocomplete="off"
669
+ placeholder="(required for write access)"
670
+ style="width:230px; font-size:12px;">
671
+ </td>
672
+ </tr>
673
+ </table>
674
+ </div>
675
+ </div>
676
+
677
+ <!-- the STORE MODEL dialog suggests a file name and asks for OK -->
678
+ <div id="store-in-repository-modal" class="modal">
679
+ <div id="store-in-repository-dlg" class="inp-dlg">
680
+ <div class="dlg-title">
681
+ Store model in <span id="store-in-repository-name"></span>
682
+ <img class="cancel-btn" src="images/cancel.png">
683
+ <img class="ok-btn" src="images/ok.png">
684
+ </div>
685
+ <table style="width:100%">
686
+ <tr>
687
+ <td>Module:</td>
688
+ <td>
689
+ <input id="store-in-repository-model-name"
690
+ type="text" autocomplete="off"
691
+ style="width:266px; font-size:12px;">
692
+ </td>
693
+ </tr>
694
+ <tr>
695
+ <td colspan="2" style="font-size:10px">
696
+ <span style="font-size:11px; font-weight:bold">NOTE:</span>
697
+ By storing a model in this repository, you declare that you have
698
+ full copyright of this model, and that you make it available under the
699
+ <a href="https://creativecommons.org/licenses/by-sa/4.0"
700
+ target="_blank">
701
+ Creative Commons Attribution-ShareAlike (CC BY-SA) license</a>.
702
+ <img src="../images/by-sa.svg" style="height:21px; margin-top:3px">
703
+ </td>
704
+ </tr>
705
+ </table>
706
+ </div>
707
+ </div>
708
+
709
+ <!-- the STORE BLACK-BOX MODEL dialog suggests a file name and asks for OK -->
710
+ <div id="store-bb-in-repository-modal" class="modal">
711
+ <div id="store-bb-in-repository-dlg" class="inp-dlg">
712
+ <div class="dlg-title">
713
+ Store model as "black box" in
714
+ <span id="store-bb-in-repository-name"></span>
715
+ <img class="cancel-btn" src="images/cancel.png">
716
+ <img class="ok-btn" src="images/ok.png">
717
+ </div>
718
+ <table style="width:100%">
719
+ <tr>
720
+ <td>Module:</td>
721
+ <td>
722
+ <input id="store-bb-model-in-repository-name" type="text"
723
+ autocomplete="off" style="width:266px; font-size:12px;">
724
+ </td>
725
+ </tr>
726
+ <tr>
727
+ <td colspan="2" style="font-size:10px">
728
+ <span style="font-size:11px; font-weight:bold">NOTE:</span>
729
+ By storing a model in this repository, you declare that you have
730
+ full copyright of this model, and that you make it available under the
731
+ <a href="https://creativecommons.org/licenses/by-sa/4.0"
732
+ target="_blank">
733
+ Creative Commons Attribution-ShareAlike (CC BY-SA) license</a>.
734
+ <img src="../images/by-sa.svg" style="height:21px; margin-top:3px">
735
+ </td>
736
+ </tr>
737
+ </table>
738
+ </div>
739
+ </div>
740
+
741
+ <!-- the INCLUDE dialog prompts for a prefix and parameter bindings -->
742
+ <div id="include-modal" class="modal">
743
+ <div id="include-dlg" class="inp-dlg">
744
+ <div class="dlg-title">
745
+ Include model <span id="include-name"></span> as cluster
746
+ <img class="cancel-btn" src="images/cancel.png">
747
+ <img class="ok-btn" src="images/ok.png">
748
+ </div>
749
+ <div style="margin:2px; background-color: Yellow">
750
+ <strong>NOTE:</strong> <em>This action cannot be undone!</em>
751
+ </div>
752
+ <div style="margin:2px">
753
+ <label>Cluster:</label>
754
+ <input id="include-prefix" type="text"
755
+ placeholder="(name must be unique)" autocomplete="off">
756
+ </div>
757
+ <div style="margin:2px">
758
+ <label>Actor:</label>
759
+ <input id="include-actor" type="text"
760
+ placeholder="(no actor)" autocomplete="off">
761
+ </div>
762
+ <div style="font-weight: bold; margin:4px 2px 2px 2px">
763
+ Parameter bindings:
764
+ </div>
765
+ <div id="include-scroll-area">
766
+ </div>
767
+ </div>
768
+ </div>
769
+
770
+ <!-- the CONFIRM DELETE modal asks to confirm to delete module from repository -->
771
+ <div id="confirm-delete-from-repo-modal" class="modal">
772
+ <div id="confirm-delete-from-repo-dlg" class="inp-dlg">
773
+ <div class="dlg-title" style="background-color: #cc88b0">
774
+ Confirm delete
775
+ </div>
776
+ <div id="confirm-delete-from-repo-msg">
777
+ Really delete module
778
+ <span id="confirm-delete-from-repo-mod-name"></span>
779
+ from repository
780
+ <span id="confirm-delete-from-repo-name"></span>?
781
+ </div>
782
+ <div id="confirm-delete-from-repo-buttons">
783
+ <img class="ok-btn big-btn" src="images/ok.png">
784
+ Yes
785
+ <img class="cancel-btn big-btn" src="images/cancel.png">
786
+ No
787
+ </div>
788
+ </div>
789
+ </div>
790
+
791
+ <!-- the ACTOR dialog allows modification of the name and relative weight of a selected actor -->
792
+ <div id="actor-modal" class="modal">
793
+ <div id="actor-dlg" class="inp-dlg">
794
+ <div class="dlg-title">
795
+ Modify actor <span id="actor-span"></span>
796
+ <img class="cancel-btn" src="images/cancel.png">
797
+ <img class="ok-btn" src="images/ok.png">
798
+ </div>
799
+ <table style="width: 100%">
800
+ <tr>
801
+ <td>Name:</td>
802
+ <td>
803
+ <input id="actor-name" type="text" autocomplete="off"
804
+ style="width:222px">
805
+ </td>
806
+ <td>
807
+ <div id="actor-io"
808
+ title="Click to set/unset actor as model parameter">
809
+ &#10063;
810
+ <div id="actor-import">&darr;</div>
811
+ <div id="actor-export">&uarr;</div>
812
+ </div>
813
+ </td>
814
+ </tr>
815
+ <tr>
816
+ <td>Weight:</td>
817
+ <td>
818
+ <input id="actor-W" type="text" autocomplete="off"
819
+ style="width:222px">
820
+ </td>
821
+ <td>
822
+ <img id="actor-W-x" class="sbtn enab" src="images/edit.png"
823
+ title="Edit expression for actor weight">
824
+ </td>
825
+ </tr>
826
+ </table>
827
+ </div>
828
+ </div>
829
+
830
+ <!-- The ACTORS (plural!) dialog displays a scrollable list of all actors;
831
+ clicking an actor will open the ACTOR dialog for that actor.
832
+ NOTE: Changes to this list are discarded if CANCEL is clicked.
833
+ -->
834
+ <div id="actors-modal" class="modal">
835
+ <div id="actors-dlg" class="inp-dlg">
836
+ <div class="dlg-title">
837
+ Actors
838
+ <img class="cancel-btn" src="images/cancel.png">
839
+ <img class="ok-btn" src="images/ok.png">
840
+ </div>
841
+ <div id="round-settings">
842
+ <div id="round-count-lbl"
843
+ title="Defining multiple rounds permits game-theoretic optimization">
844
+ Optimization in <span id="round-count">1 round</span>
845
+ </div>
846
+ <img id="add-round-btn" class="v-btn" src="images/add.png"
847
+ title="Add one more round">
848
+ <img id="delete-round-btn" class="v-btn" src="images/remove.png"
849
+ title="Delete selected round (click its column header to select)">
850
+ <div id="default-seq-div" title="Sequence of rounds when running this model">
851
+ <label>Sequence:</label>
852
+ <input id="default-sequence" type="text" autocomplete="off"
853
+ placeholder="a (default)">
854
+ </div>
855
+ <div id="round-info-lbl">
856
+ <em>Checked actors can <strong>not</strong> change their production
857
+ levels in that round</em>&nbsp;&#8628;
858
+ </div>
859
+ </div>
860
+ <div id="actors-scroll-hdr">
861
+ <div id="actors-name-hdr">Actor name</div>
862
+ <div id="actors-weight-hdr"
863
+ title="Multiplier of actor cash flow in objective function
864
+ &rarr; Set to 0 to disregard an actor's interest
865
+ &rarr; Use conditional expression (e.g., R=3 ? 0 : 1) to differentiate between rounds">
866
+ Weight
867
+ </div>
868
+ <div id="rounds-hdr"
869
+ title="Click to select; Ctrl-click to check/uncheck for all actors">
870
+ </div>
871
+ </div>
872
+ <div id="actors-scroll">
873
+ <table id="actors-table" width="100%"></table>
874
+ </div>
875
+ </div>
876
+ </div>
877
+
878
+ <!-- NOTE: the following hidden DIVs implement dialogs for the buttons on
879
+ the side bar -->
880
+
881
+ <!-- the ADD PROCESS dialog prompts only for the process name and (optionally)
882
+ the name of the actor "owning" it -->
883
+ <div id="add-process-modal" class="modal">
884
+ <div id="add-process-dlg" class="inp-dlg">
885
+ <div class="dlg-title">
886
+ Add process
887
+ <img class="cancel-btn" src="images/cancel.png">
888
+ <img class="ok-btn" src="images/ok.png">
889
+ </div>
890
+ <table style="width: 100%">
891
+ <tr>
892
+ <td>Name:</td>
893
+ <td>
894
+ <input id="add-process-name" style="width:223px" type="text"
895
+ autocomplete="off">
896
+ </td>
897
+ </tr>
898
+ <tr>
899
+ <td>Actor:</td>
900
+ <td>
901
+ <input id="add-process-actor-name" style="width:223px" type="text"
902
+ autocomplete="off">
903
+ </td>
904
+ </tr>
905
+ </table>
906
+ </div>
907
+ </div>
908
+
909
+ <!-- the ADD PRODUCT dialog prompts only for the product name and its unit of measure -->
910
+ <div id="add-product-modal" class="modal">
911
+ <div id="add-product-dlg" class="inp-dlg">
912
+ <div class="dlg-title">
913
+ Add product
914
+ <img class="cancel-btn" src="images/cancel.png">
915
+ <img class="ok-btn" src="images/ok.png">
916
+ </div>
917
+ <table style="width: 100%">
918
+ <tr>
919
+ <td>Name:</td>
920
+ <td colspan="3">
921
+ <input id="add-product-name"
922
+ style="width:223px" type="text" autocomplete="off">
923
+ </td>
924
+ </tr>
925
+ <tr>
926
+ <td>Unit:</td>
927
+ <td>
928
+ <input id="add-product-unit"
929
+ style="width:70px" type="text" autocomplete="off">
930
+ </td>
931
+ <td style="width:20px;padding:0px">
932
+ <div id="add-product-data" class="box clear">
933
+ </td>
934
+ <td style="white-space:nowrap">Data</td>
935
+ </tr>
936
+ </table>
937
+ </div>
938
+ </div>
939
+
940
+ <!-- the CLUSTER dialog prompts only for the process name and (optionally)
941
+ the name of the actor "owning" it
942
+ NOTE: this dialog is also used to *edit* these properties of an existing
943
+ cluster, as clusters have no other intrinsic properties (they merely
944
+ group other Linny-R entities)
945
+ -->
946
+ <div id="cluster-modal" class="modal">
947
+ <div id="cluster-dlg" class="inp-dlg">
948
+ <div class="dlg-title">
949
+ <span id="cluster-action">Add</span> cluster
950
+ <img class="cancel-btn" src="images/cancel.png">
951
+ <img class="ok-btn" src="images/ok.png">
952
+ </div>
953
+ <table style="width: 100%">
954
+ <tr>
955
+ <td>Name:</td>
956
+ <td><input id="cluster-name" style="width:270px"
957
+ type="text" autocomplete="off"></td>
958
+ </tr>
959
+ <tr>
960
+ <td>Actor:</td>
961
+ <td><input id="cluster-actor-name" style="width:270px"
962
+ type="text" autocomplete="off"></td>
963
+ </tr>
964
+ </table>
965
+ <div id="cluster-options" hidden>
966
+ <div id="cluster-collapsed" class="box clear"></div>
967
+ <div style="display:inline-block; vertical-align:top;
968
+ margin-right:15px; padding-top:3px">
969
+ Display as small square
970
+ </div>
971
+ <div id="cluster-ignore" class="box clear"></div>
972
+ <div style="display:inline-block; vertical-align:top;
973
+ margin-right:15px; padding-top:3px">
974
+ Ignore
975
+ </div>
976
+ <div id="cluster-black-box" class="box clear"></div>
977
+ <div style="display:inline-block;vertical-align:top; padding-top:3px">
978
+ Black box
979
+ </div>
980
+ </div>
981
+ </div>
982
+ </div>
983
+
984
+ <!-- The NOTE dialog -- notes have no name as identifier => no input field
985
+ NOTE: this dialog is also used to *edit* an existing note
986
+ -->
987
+ <div id="note-modal" class="modal">
988
+ <div id="note-dlg" class="inp-dlg">
989
+ <div class="dlg-title">
990
+ <span id="note-action">Add</span> note
991
+ <img class="cancel-btn" src="images/cancel.png">
992
+ <img class="ok-btn" src="images/ok.png">
993
+ </div>
994
+ <textarea id="note-text" autocomplete="off" autocorrect="off"
995
+ autocapitalize="off"></textarea>
996
+ <div id="note-attr">
997
+ Color:
998
+ <input id="note-C" type="text" autocomplete="off"
999
+ title="0 = yellow (default), 1 = green, 2 = blue, 3 = purple, 4 = white, 5 = ALERT">
1000
+ <img id="note-C-x" class="sbtn enab" src="images/edit.png"
1001
+ title="Edit expression for note color"
1002
+ style="margin-top: -3px">
1003
+ </div>
1004
+ </div>
1005
+ </div>
1006
+
1007
+ <!--
1008
+ The MODIFY LINK dialog allows specifying link properties. The names of the FROM and
1009
+ TO nodes are set dynamically (as inner HTML). The proprties that can be changed are
1010
+ the multiplier and the rate, and for "typical" links (product flows Q -> P) the
1011
+ % allocated cost for the TO-node.
1012
+
1013
+ NOTE: links to "information products" can be defined to calculate the actual flow
1014
+ by multiplying the rate with different variables:
1015
+
1016
+ The "actual flow" is calculated as rate * multiplier
1017
+ -->
1018
+ <div id="link-modal" class="modal">
1019
+ <div id="link-dlg" class="inp-dlg">
1020
+ <div class="dlg-title">
1021
+ <!-- link arrow symbol depends on type of link: product => solid, data => dashed -->
1022
+ Link X <span id="link-arrow-1">&#x279D;</span> Y:
1023
+ <div id="link-from-name" title="FROM"></div>
1024
+ <span id="link-arrow-2">&#x279D;</span>
1025
+ <div id="link-to-name" title="TO"></div>
1026
+ <img class="cancel-btn" src="images/cancel.png">
1027
+ <img class="ok-btn" src="images/ok.png">
1028
+ </div>
1029
+ <table style="width: 100%">
1030
+ <tr id="link-multiplier-row">
1031
+ <td style="vertical-align: baseline">
1032
+ Multiplier:
1033
+ <select id="link-multiplier" style="font-size: 9pt">
1034
+ <option id="link-flow" selected="selected" value="0">
1035
+ Level of X (no flow symbol)
1036
+ </option>
1037
+ <option id="link-throughput" value="1">
1038
+ &rrarr; (throughput: the sum of all inflows of X)
1039
+ </option>
1040
+ <option id="link-increase" value="2">
1041
+ &Delta; (increase: X[t] &minus; X[t-1])
1042
+ </option>
1043
+ <option id="link-sum" value="3">
1044
+ &Sigma; (sum: the total of levels X[t-&delta;] through X[t])
1045
+ </option>
1046
+ <option id="link-mean" value="4">
1047
+ &mu; (mean: the average level &Sigma;/(&delta;+1) )
1048
+ </option>
1049
+ <option id="link-startup" value="5">
1050
+ &#x2B9D; (start-up: 1 if X[t-1] = 0 &and; X[t] > 0, otherwise 0)
1051
+ </option>
1052
+ <option id="link-on" value="6">
1053
+ &plus; (positive: 1 if X[t] > 0, otherwise 0)
1054
+ </option>
1055
+ <option id="link-off" value="7">
1056
+ 0 (zero: 1 if X[t] = 0, otherwise 0)
1057
+ </option>
1058
+ <option id="link-shutdown" value="10">
1059
+ &#x2B9F; (shut-down: 1 if X[t-1] > 0 &and; X[t] = 0, otherwise 0)
1060
+ </option>
1061
+ <option id="link-spinning" value="8">
1062
+ &#x2934; (spinning reserve: UB - X[t] if X[t] > 0, otherwise 0)
1063
+ </option>
1064
+ <option id="link-first-commit" value="9">
1065
+ &#10034; (first commit: 1 if X[t] > 0 &and; X[i] = 0 &forall; i &lt; t, otherwise 0)
1066
+ </option>
1067
+ <option id="link-peak-inc" value="11">
1068
+ &#x2A39; (peak increase: X&#x302;[b] &minus; X&#x302;[b-1] if bt = 1, otherwise 0)
1069
+ </option>
1070
+ </select>
1071
+ </td>
1072
+ </tr>
1073
+ <tr>
1074
+ <td>
1075
+ Rate (<span id="link-to-unit">unit</span>/<span id="link-from-unit">level</span>):
1076
+ <input id="link-R" type="text" autocomplete="off">
1077
+ <img id="link-R-x" class="sbtn enab"
1078
+ title="Edit expression for link rate" src="images/edit.png"
1079
+ style="margin-top: -3px">
1080
+ </td>
1081
+ </tr>
1082
+ <tr id="link-output-row" hidden="hidden">
1083
+ <td style="vertical-align: baseline">
1084
+ Delay &delta;:
1085
+ <input id="link-D" type="text" autocomplete="off">
1086
+ <img id="link-D-x" class="sbtn enab"
1087
+ title="Edit expression for link delay" src="images/edit.png"
1088
+ style="margin-top: -3px">
1089
+ <div id="link-output-soc">
1090
+ Attributed share of cost:
1091
+ <input id="link-share-of-cost" type="text" autocomplete="off">%
1092
+ </div>
1093
+ </td>
1094
+ </tr>
1095
+ </table>
1096
+ </div>
1097
+ </div>
1098
+
1099
+ <!-- The constraint dialog allows specification of a constraint between two nodes.
1100
+ The names of the constraining node FROM and the constrained node TO are set dynamically
1101
+ (as inner HTML) along the X and Y axis, respectively.
1102
+ A constraint defines how the RELATIVE upper and lower bounds of TO vary as a function of
1103
+ RELATIVE level of FROM. Both nodes MUST therefore have a non-infinite upper bound.
1104
+ The user defines constraints on the relative level of TO (scaled between 0 and 100% of its
1105
+ upper bound) as a linear function of the relative level of FROM (likewise scaled to its
1106
+ upper bound) by drawing one or more straight bound lines in the X-Y graph displayed by
1107
+ this dialog.
1108
+ NOTE: This dialog is "managed" by the single instance of class ConstraintEditor
1109
+ (the global variable CONSTRAINT_EDITOR). This editor tracks all edits in its own
1110
+ properties; a new instance of Constraint is created (or edits to an existing
1111
+ instance become effectuated) only when OK is clicked.
1112
+ -->
1113
+ <div id="constraint-modal" class="modal">
1114
+ <div id="constraint-dlg" class="inp-dlg">
1115
+ <div class="dlg-title">Constraint X &DDotrahd; Y
1116
+ <div style="display: inline-block; margin-left: 219px; margin-bottom: -7px">
1117
+ <img class="cancel-btn" src="images/cancel.png">
1118
+ <img class="ok-btn" src="images/ok.png"
1119
+ style="margin-left: 4px; margin-bottom: 3px">
1120
+ </div>
1121
+ </div>
1122
+ <div id="ce-button-bar">
1123
+ <img id="add-point-btn" class="mbtn enab" src="images/add.png"
1124
+ title="Add new point to selected bound line">
1125
+ <img id="del-point-btn" class="mbtn disab"
1126
+ title="Remove selected point from bound line" src="images/remove.png">
1127
+ <img id="add-bl-btn" class="mbtn enab" title="Add new bound line"
1128
+ style="margin-left: 10px" src="images/pwlf.png">
1129
+ <!-- NOTE: values correspond to constants used by Virtual Machine -->
1130
+ <select id="bl-type" title="Bound type">
1131
+ <option value="1">&le;</option>
1132
+ <option value="3" selected>=</option>
1133
+ <option value="2">&ge;</option>
1134
+ </select>
1135
+ <img id="del-bl-btn" class="mbtn disab" src="images/delete.png"
1136
+ title="Delete selected bound line">
1137
+ <label>Selectors:</label>
1138
+ <input id="bl-selectors" type="text" placeholder="(any)"
1139
+ title="When specified, bound line will constrain only in matching experiment runs">
1140
+ </div>
1141
+ <div id="ce-y-label">% range of <span id="ce-to-name"></span></div>
1142
+ <!-- NOTE: this is the div that will contain the chart's SVG image -->
1143
+ <div id="ce-container"></div>
1144
+ <div id="ce-x-label">% range of <span id="ce-from-name"></span></div>
1145
+ <div id="ce-pos-x">X = 0</div>
1146
+ <div id="ce-pos-y">Y = 0</div>
1147
+ <div id="ce-point" title="Selected point"></div>
1148
+ <div id="ce-equation" title="Equation for line segment"></div>
1149
+ <div id="ce-bottom-div">
1150
+ <div id="ce-no-slack-div"
1151
+ title="Check to enforce bounds (Caution: this may make model infeasible)">
1152
+ <div id="ce-no-slack" class="box clear"></div>
1153
+ <div id="ce-no-slack-lbl">No slack</div>
1154
+ </div>
1155
+ <div id="ce-soc">
1156
+ <label>Attributed share of cost:</label>
1157
+ <select id="ce-soc-direct">
1158
+ <option value="1">X&rarr;Y</option>
1159
+ <option value="-1">Y&rarr;X</option>
1160
+ </selector>
1161
+ <input id="ce-share-of-cost" type="text" autocomplete="off"><label>%</label>
1162
+ </div>
1163
+ </div>
1164
+ </div>
1165
+ </div>
1166
+
1167
+ <!-- PROCESS properties dialog -->
1168
+ <div id="process-modal" class="modal">
1169
+ <div id="process-dlg" class="inp-dlg">
1170
+ <div class="dlg-title">
1171
+ Process properties
1172
+ <img class="cancel-btn" src="images/cancel.png">
1173
+ <img class="ok-btn" src="images/ok.png">
1174
+ </div>
1175
+ <div id="process-name-lbl">Name:</div>
1176
+ <input id="process-name" type="text" autocomplete="off">
1177
+ <div id="process-actor-lbl">Actor:</div>
1178
+ <input id="process-actor" type="text" autocomplete="off">
1179
+ <div id="process-LB-lbl">Lower bound:</div>
1180
+ <input id="process-LB" type="text" autocomplete="off">
1181
+ <img id="process-LB-x" class="sbtn enab" src="images/edit.png"
1182
+ title="Edit expression for lower process bound">
1183
+ <div id="process-UB-lbl">Upper bound:</div>
1184
+ <input id="process-UB" type="text" autocomplete="off">
1185
+ <img id="process-UB-x" class="sbtn enab" src="images/edit.png"
1186
+ title="Edit expression for upper process bound">
1187
+ <!-- "equal bounds" button is displayed middle-left of the two input fields -->
1188
+ <div id="process-UB-equal" class="nebtn" title="Set equal bounds"></div>
1189
+ <div id="process-IL-lbl">Initial level:</div>
1190
+ <input id="process-IL" type="text" autocomplete="off">
1191
+ <img id="process-IL-x" class="sbtn enab" src="images/edit.png"
1192
+ title="Edit expression for initial production level">
1193
+ <div id="process-int-div">
1194
+ <div id="process-integer" class="box clear"></div>
1195
+ <div id="process-int-lbl">Integer</div>
1196
+ </div>
1197
+ <div id="process-shut-down-div">
1198
+ <div id="process-shut-down" class="box clear"></div>
1199
+ <div id="process-shut-down-lbl">
1200
+ Shut down if lower bound (>0) constrains
1201
+ </div>
1202
+ </div>
1203
+ <div id="process-pace-div">
1204
+ Level change frequency: 1/
1205
+ <input id="process-pace" type="text" autocomplete="off">
1206
+ time step(s)
1207
+ <img id="process-pace-x" class="sbtn enab" src="images/edit.png"
1208
+ title="Edit expression for level change frequency">
1209
+ </div>
1210
+ <div id="process-collapsed-div">
1211
+ <div id="process-collapsed" class="box clear"></div>
1212
+ <div id="process-collapsed-lbl">Display as small rectangle</div>
1213
+ </div>
1214
+ </div>
1215
+ </div>
1216
+
1217
+ <!-- PRODUCT properties dialog -->
1218
+ <div id="product-modal" class="modal">
1219
+ <div id="product-dlg" class="inp-dlg">
1220
+ <div class="dlg-title">
1221
+ Product properties
1222
+ <img class="cancel-btn" src="images/cancel.png">
1223
+ <img class="ok-btn" src="images/ok.png">
1224
+ </div>
1225
+ <div id="product-name-lbl">Name:</div>
1226
+ <input id="product-name" type="text" autocomplete="off">
1227
+ <div id="product-unit-lbl">Unit:</div>
1228
+ <input id="product-unit" type="text" autocomplete="off">
1229
+ <div id="source" title="Source products may have level &lt; 0">
1230
+ <div id="product-source" class="box clear"></div>
1231
+ <div id="product-source-lbl">Source</div>
1232
+ </div>
1233
+ <div id="sink" title="Sink products may have level &gt; 0">
1234
+ <div id="product-sink" class="box clear"></div>
1235
+ <div id="product-sink-lbl">Sink</div>
1236
+ </div>
1237
+ <div id="stock"
1238
+ title="Stock products aggregate their inflows and outflows over time">
1239
+ <div id="product-stock" class="box clear"></div>
1240
+ <div id="product-stock-lbl">Stock</div>
1241
+ </div>
1242
+ <div id="data"
1243
+ title="Data products aggregate information on processes and products">
1244
+ <div id="product-data" class="box clear"></div>
1245
+ <div id="product-data-lbl">Data</div>
1246
+ </div>
1247
+ <div id="product-LB-lbl">Lower bound:</div>
1248
+ <input id="product-LB" type="text" autocomplete="off">
1249
+ <img id="product-LB-x" class="sbtn enab" src="images/edit.png"
1250
+ title="Edit expression for lower product bound">
1251
+ <div id="product-UB-lbl">Upper bound:</div>
1252
+ <input id="product-UB" type="text" autocomplete="off">
1253
+ <img id="product-UB-x" class="sbtn enab" src="images/edit.png"
1254
+ title="Edit expression for upper product bound">
1255
+ <!-- "equal bounds" button is displayed middle-left of the two input fields -->
1256
+ <div id="product-UB-equal" class="nebtn" title="Set equal bounds"></div>
1257
+ <div id="product-IL-lbl">Initial level:</div>
1258
+ <input id="product-IL" type="text" autocomplete="off">
1259
+ <img id="product-IL-x" class="sbtn enab" src="images/edit.png"
1260
+ title="Edit expression for initial stock level">
1261
+ <div id="product-P-div">
1262
+ <div id="product-P-lbl">
1263
+ Price
1264
+ <small>(<span id="product-currency"></span>/<span id="product-P-unit"></span>)</small>:
1265
+ </div>
1266
+ <input id="product-P" type="text" autocomplete="off">
1267
+ <img id="product-P-x" class="sbtn enab" src="images/edit.png"
1268
+ title="Edit expression for product market price">
1269
+ </div>
1270
+ <div id="product-int-div">
1271
+ <div id="product-integer" class="box clear"></div>
1272
+ <div id="product-int-lbl">Integer</div>
1273
+ </div>
1274
+ <div id="product-no-slack-div"
1275
+ title="Check to enforce bounds (Caution: this may make model infeasible)">
1276
+ <div id="product-no-slack" class="box clear"></div>
1277
+ <div id="product-no-slack-lbl">No slack</div>
1278
+ </div>
1279
+ <div id="product-no-links-div">
1280
+ <div id="product-no-links" class="box clear"></div>
1281
+ <div id="product-no-links-lbl">Hide related links</div>
1282
+ </div>
1283
+ <div id="product-io" title="Click to set/unset as model parameter">
1284
+ &#10063;
1285
+ <div id="product-import">&darr;</div>
1286
+ <div id="product-export">&uarr;</div>
1287
+ </div>
1288
+ </div>
1289
+ </div>
1290
+
1291
+ <!-- The CLONE dialog prompts for a prefix -->
1292
+ <div id="clone-modal" class="modal">
1293
+ <div id="clone-dlg" class="inp-dlg">
1294
+ <div class="dlg-title">
1295
+ Clone selection <span id="clone-count"></span>
1296
+ <img class="cancel-btn" src="images/cancel.png">
1297
+ <img class="ok-btn" src="images/ok.png">
1298
+ </div>
1299
+ <div style="font-size: 11px; margin: 2px">
1300
+ Prefix + actor should result in unique new names
1301
+ for selected processes and clusters.<br>
1302
+ <em>Products will NOT be cloned unless a prefix is specified.</em>
1303
+ </div>
1304
+ <table style="width: 100%">
1305
+ <tr>
1306
+ <td>Prefix:</td>
1307
+ <td>
1308
+ <input id="clone-prefix" type="text" autocomplete="off">
1309
+ </td>
1310
+ </tr>
1311
+ <tr>
1312
+ <td>Actor:</td>
1313
+ <td>
1314
+ <input id="clone-actor" type="text" autocomplete="off">
1315
+ </td>
1316
+ </tr>
1317
+ </table>
1318
+ <div>
1319
+ <div id="clone-renumbering" class="box clear"></div>
1320
+ <div style="display:inline-block; vertical-align:top; margin-top:3px"
1321
+ title="NOTE: This applies only to selected processes and products">
1322
+ Use incremental numbering where possible
1323
+ </div>
1324
+ </div>
1325
+ </div>
1326
+ </div>
1327
+
1328
+ <!-- The MOVE modal asks to confirm to move node to focal cluster -->
1329
+ <div id="move-modal" class="modal">
1330
+ <div id="move-dlg" class="inp-dlg">
1331
+ <div class="dlg-title" style="background-color: #cc88b0">
1332
+ Confirm move
1333
+ </div>
1334
+ <div id="move-msg">
1335
+ Really move <span id="move-node-type"></span>
1336
+ <em><span id="move-node-name"></span></em>
1337
+ from cluster <strong><span id="move-from-cluster"></span></strong>
1338
+ to this cluster?
1339
+ </div>
1340
+ <div id="move-buttons">
1341
+ <img class="ok-btn big-btn" src="images/ok.png">
1342
+ Yes
1343
+ <img class="cancel-btn big-btn" src="images/cancel.png">
1344
+ No
1345
+ </div>
1346
+ </div>
1347
+ </div>
1348
+
1349
+ <!-- REPLACE PRODUCT dialog -->
1350
+ <div id="replace-modal" class="modal">
1351
+ <div id="replace-dlg" class="inp-dlg">
1352
+ <div class="dlg-title">
1353
+ Replace <div id="replace-product-name"></div>
1354
+ <img class="cancel-btn" src="images/cancel.png">
1355
+ <img class="ok-btn" src="images/ok.png">
1356
+ </div>
1357
+ <div style="margin: 0 0 2px 2px; width: 100%">
1358
+ <label>Replace by:</label>
1359
+ <select id="replace-by-name"></select>
1360
+ <div id="replace-option"
1361
+ title="When checked, only the links shown in this diagram will be redirected">
1362
+ <div id="replace-local" class="box clear"></div>
1363
+ <div style="display: inline-block">(locally)</div>
1364
+ </div>
1365
+ </div>
1366
+ </div>
1367
+ </div>
1368
+
1369
+
1370
+ <!-- EXPRESSION EDITOR dialog -->
1371
+ <div id="expression-modal" class="modal">
1372
+ <div id="expression-dlg" class="inp-dlg">
1373
+ <div class="dlg-title">Editing expression for
1374
+ <div id="expression-property"></div>
1375
+ <img class="cancel-btn" src="images/cancel.png">
1376
+ <img class="ok-btn" src="images/ok.png">
1377
+ <img class="info-btn" src="images/info.png">
1378
+ </div>
1379
+ <div id="variable-bar">
1380
+ <select id="variable-obj">
1381
+ <option value="0" selected="selected">Process</option>
1382
+ <option value="1">Product</option>
1383
+ <option value="2">Cluster</option>
1384
+ <option value="3">Link</option>
1385
+ <option value="4">Constraint</option>
1386
+ <option value="5">Actor</option>
1387
+ <option value="6">Dataset</option>
1388
+ <option value="7">Equation</option>
1389
+ </select>
1390
+ <select id="variable-name"></select>
1391
+ <select id="variable-attr"></select>
1392
+ <button id="variable-insert">Insert</button>
1393
+ </div>
1394
+ <textarea id="expression-text" autocomplete="off" autocorrect="off"
1395
+ autocapitalize="off" spellcheck="false"></textarea>
1396
+ <div id="expression-status">&nbsp;</div>
1397
+ <div id="expression-info">
1398
+ </div>
1399
+ </div>
1400
+ </div>
1401
+
1402
+
1403
+ <!-- the DATASET MANAGER dialog allows definition of datasets -->
1404
+ <div id="dataset-dlg" class="inp-dlg">
1405
+ <div id="dataset-hdr" class="dragger dlg-title">Dataset manager
1406
+ <img id="dataset-close-btn" class="close-btn" src="images/close.png">
1407
+ </div>
1408
+ <div id="dataset-buttons">
1409
+ <img id="ds-new-btn" class="btn enab" src="images/new.png"
1410
+ title="New dataset">
1411
+ <img id="ds-data-btn" class="btn disab" src="images/dataset.png"
1412
+ title="Edit time series of selected dataset">
1413
+ <img id="ds-rename-btn" class="btn disab" src="images/rename.png"
1414
+ title="Rename selected dataset">
1415
+ <img id="ds-clone-btn" class="btn disab" src="images/clone.png"
1416
+ title="Clone selected dataset">
1417
+ <img id="ds-delete-btn" class="btn disab" src="images/delete.png"
1418
+ title="Delete selected dataset"
1419
+ style="position: absolute; right: 2px">
1420
+ </div>
1421
+ <div id="dataset-header">
1422
+ Datasets
1423
+ <img id="ds-filter-btn" class="btn enab" src="images/filter.png"
1424
+ title="Filter on name">
1425
+ </div>
1426
+ <div id="ds-filter-bar">
1427
+ <input id="ds-filter-text" type="text"
1428
+ placeholder="(name filtering pattern)"
1429
+ title="Pattern may contain logical & (AND), | (OR) and ^ (NOT)">
1430
+ </div>
1431
+ <div id="dataset-scroll-area">
1432
+ <table id="dataset-table">
1433
+ </table>
1434
+ </div>
1435
+ <div id="dataset-properties">
1436
+ <div>Default = <span id="dataset-default">0</span></div>
1437
+ <div>N =
1438
+ <span id="dataset-count">0</span>
1439
+ <span id="dataset-special"></span>
1440
+ </div>
1441
+ <div id="dataset-stats">
1442
+ <div>Range:
1443
+ <span id="dataset-min"></span>&hellip;<span id="dataset-max"></span>
1444
+ </div>
1445
+ <div>&mu; = <span id="dataset-mean"></span>,
1446
+ &sigma; = <span id="dataset-stdev"></span>
1447
+ </div>
1448
+ </div>
1449
+ <div id="dataset-blackbox" class="off"
1450
+ title="Click to set/unset dataset as &quot;black-boxed&quot;">
1451
+ &#x25FC;
1452
+ </div>
1453
+ <img id="dataset-outcome" src="images/outcome.png"
1454
+ title="Click to consider/ignore dataset expressions as experiment outcome">
1455
+ <div id="dataset-io"
1456
+ title="Click to set/unset dataset as model parameter">
1457
+ &#10063;
1458
+ <div id="dataset-import">&darr;</div>
1459
+ <div id="dataset-export">&uarr;</div>
1460
+ </div>
1461
+ </div>
1462
+ <div id="dataset-separator"></div>
1463
+ <div id="dataset-modif-header">(no dataset selected)</div>
1464
+ <div id="dataset-modif-ds-name"></div>
1465
+ <div id="dataset-modif-titles">
1466
+ <span>Selector</span>
1467
+ <span style="margin-left: 35px">Expression</span>
1468
+ </div>
1469
+ <div id="dataset-modif-scroll-area">
1470
+ <table id="dataset-modif-table">
1471
+ </table>
1472
+ </div>
1473
+ <div id="dataset-modif-buttons">
1474
+ <img id="ds-add-modif-btn" class="btn enab"
1475
+ src="images/add-selector.png" title="Add new selector">
1476
+ <img id="ds-rename-modif-btn" class="btn disab" src="images/rename.png"
1477
+ title="Rename selected modifier">
1478
+ <img id="ds-edit-modif-btn" class="btn disab"
1479
+ src="images/edit.png" title="Edit expression of selected modifier">
1480
+ <img id="ds-delete-modif-btn" class="btn disab"
1481
+ src="images/delete.png" title="Delete selected modifier"
1482
+ style="margin-left: 20px">
1483
+ </div>
1484
+ <div id="dataset-resize" class="resizer"></div>
1485
+ </div>
1486
+
1487
+ <!-- the NEW DATASET dialog prompts for the name of a new dataset -->
1488
+ <div id="new-dataset-modal" class="modal">
1489
+ <div id="new-dataset-dlg" class="inp-dlg">
1490
+ <div class="dlg-title">
1491
+ Name of new dataset
1492
+ <img class="cancel-btn" src="images/cancel.png">
1493
+ <img class="ok-btn" src="images/ok.png">
1494
+ </div>
1495
+ <input id="new-dataset-name" type="text" autocomplete="off">
1496
+ </div>
1497
+ </div>
1498
+
1499
+ <!-- the RENAME DATASET dialog prompts for the new name of a dataset -->
1500
+ <div id="rename-dataset-modal" class="modal">
1501
+ <div id="rename-dataset-dlg" class="inp-dlg">
1502
+ <div class="dlg-title">
1503
+ Rename dataset
1504
+ <img class="cancel-btn" src="images/cancel.png">
1505
+ <img class="ok-btn" src="images/ok.png">
1506
+ </div>
1507
+ <input id="rename-dataset-name" type="text" autocomplete="off">
1508
+ </div>
1509
+ </div>
1510
+
1511
+ <!-- the NEW SELECTOR dialog prompts for a new selector for a dataset -->
1512
+ <div id="new-selector-modal" class="modal">
1513
+ <div id="new-selector-dlg" class="inp-dlg">
1514
+ <div class="dlg-title">
1515
+ New dataset modifier
1516
+ <img class="cancel-btn" src="images/cancel.png">
1517
+ <img class="ok-btn" src="images/ok.png">
1518
+ </div>
1519
+ <input id="new-selector-name" type="text"
1520
+ title="Can contain only alphanumerical characters, +, -, and %
1521
+ NOTE: * and ? will be interpreted as wildcards"
1522
+ maxlength="10" autocomplete="off">
1523
+ <div id="new-selector-label">(1 to 10 characters)</div>
1524
+ </div>
1525
+ </div>
1526
+
1527
+ <!-- the RENAME SELECTOR dialog prompts for a new selector name -->
1528
+ <div id="rename-selector-modal" class="modal">
1529
+ <div id="rename-selector-dlg" class="inp-dlg">
1530
+ <div class="dlg-title">
1531
+ Rename dataset modifier
1532
+ <img class="cancel-btn" src="images/cancel.png">
1533
+ <img class="ok-btn" src="images/ok.png">
1534
+ </div>
1535
+ <input id="rename-selector-name" type="text"
1536
+ title="Can contain only alphanumerical characters, +, -, and %"
1537
+ maxlength="10" autocomplete="off">
1538
+ <div id="rename-selector-label">(1 to 10 characters)</div>
1539
+ </div>
1540
+ </div>
1541
+
1542
+ <!-- the SERIES dialog presents the properties of the time series
1543
+ data of the selected dataset, including a text area for copy/paste
1544
+ of numbers while showing the line count and checking for correct
1545
+ number format
1546
+ -->
1547
+ <div id="series-modal" class="modal">
1548
+ <div id="series-dlg" class="inp-dlg">
1549
+ <div class="dlg-title">
1550
+ Edit time series
1551
+ <img class="ok-btn" src="images/ok.png">
1552
+ <img class="cancel-btn" src="images/cancel.png">
1553
+ </div>
1554
+ <div id="series-default-lbl">Default value:</div>
1555
+ <input id="series-default" type="text" autocomplete="off">
1556
+ <div id="series-periodic" class="box clear"></div>
1557
+ <div id="series-periodic-lbl">Periodic</div>
1558
+ <div id="series-array" class="box clear"></div>
1559
+ <div id="series-array-lbl">Array</div>
1560
+ <div id="series-no-time-msg">
1561
+ Arrays ignore time dimension
1562
+ </div>
1563
+ <div id="series-time-step-lbl">Time step:</div>
1564
+ <input id="series-time-scale" type="text" autocomplete="off">
1565
+ <select id="series-time-unit">
1566
+ <!-- options are added by DATASET_MANAGER -->
1567
+ </select>
1568
+ <div id="series-method-lbl">Method:</div>
1569
+ <select id="series-method">
1570
+ <!-- options are added by DATASET_MANAGER -->
1571
+ </select>
1572
+ <div id="series-remote">
1573
+ <input id="series-url" type="text"
1574
+ placeholder="(URL or path on local host)"> </div>
1575
+ <div id="series-data-lbl">Series data:</div>
1576
+ <textarea id="series-data" autocomplete="off"
1577
+ autocorrect="off" autocapitalize="off" spellcheck="false">
1578
+ </textarea>
1579
+ <div id="series-line">
1580
+ Line <span id="series-line-number">1</span>
1581
+ (of <span id="series-line-count">1</span>)
1582
+ </div>
1583
+ </div>
1584
+ </div>
1585
+
1586
+
1587
+ <!-- the EQUATION dialog allows definition of equations -->
1588
+ <div id="equation-dlg" class="inp-dlg">
1589
+ <div id="equation-hdr" class="dragger dlg-title">Equation manager
1590
+ <img id="equation-close-btn" class="close-btn" src="images/close.png">
1591
+ </div>
1592
+ <div id="equation-buttons">
1593
+ <img id="eq-new-btn" class="btn enab" src="images/new.png"
1594
+ title="New equation">
1595
+ <img id="eq-rename-btn" class="btn disab" src="images/rename.png"
1596
+ title="Rename selected equation">
1597
+ <img id="eq-edit-btn" class="btn disab" src="images/edit.png"
1598
+ title="Edit selected equation">
1599
+ <img id="eq-delete-btn" class="btn disab" src="images/delete.png"
1600
+ title="Delete selected equation">
1601
+ </div>
1602
+ <div id="equation-scroll-area">
1603
+ <table id="equation-table">
1604
+ </table>
1605
+ </div>
1606
+ <div id="equation-resize" class="resizer"></div>
1607
+ </div>
1608
+
1609
+ <!-- the NEW EQUATION dialog prompts for the name of a new equation -->
1610
+ <div id="new-equation-modal" class="modal">
1611
+ <div id="new-equation-dlg" class="inp-dlg">
1612
+ <div class="dlg-title">
1613
+ Name of new equation
1614
+ <img class="cancel-btn" src="images/cancel.png"">
1615
+ <img class="ok-btn" src="images/ok.png">
1616
+ </div>
1617
+ <input id="new-equation-name" type="text" autocomplete="off">
1618
+ </div>
1619
+ </div>
1620
+
1621
+ <!-- the RENAME EQUATION dialog prompts for the new name of an equation -->
1622
+ <div id="rename-equation-modal" class="modal">
1623
+ <div id="rename-equation-dlg" class="inp-dlg">
1624
+ <div class="dlg-title">
1625
+ Rename equation
1626
+ <img class="cancel-btn" src="images/cancel.png">
1627
+ <img class="ok-btn" src="images/ok.png">
1628
+ </div>
1629
+ <input id="rename-equation-name" type="text" autocomplete="off">
1630
+ </div>
1631
+ </div>
1632
+
1633
+
1634
+ <!-- the CHART dialog allows definition of charts and displays them -->
1635
+ <div id="chart-dlg" class="inp-dlg">
1636
+ <div id="chart-hdr" class="dragger dlg-title">Chart manager
1637
+ <div id="chart-experiment-info"></div>
1638
+ <img id="chart-close-btn" class="close-btn" src="images/close.png">
1639
+ </div>
1640
+ <div id="chart-control-panel">
1641
+ <div id="chart-buttons">
1642
+ <img id="chart-rename-btn" class="btn enab" src="images/rename.png"
1643
+ title="Rename selected chart">
1644
+ <img id="chart-clone-btn" class="btn enab" src="images/clone.png"
1645
+ title="Clone selected chart">
1646
+ <img id="chart-results-btn" class="btn enab" src="images/experiment.png"
1647
+ title="Show chart for experiment results (if any)">
1648
+ <img id="chart-delete-btn" class="btn enab" src="images/delete.png"
1649
+ title="Delete selected chart" style="margin-left: 105px">
1650
+ </div>
1651
+ <select id="chart-selector">
1652
+ <!-- options are added by the chart manager -->
1653
+ </select>
1654
+ <div id="chart-histogram" class="box clear"></div>
1655
+ <div id="chart-histogram-lbl">As histogram</div>
1656
+ <div id="chart-histogram-options">
1657
+ <label>with</label>
1658
+ <select id="histogram-bins" dir="rtl">
1659
+ <option value="5">5</option>
1660
+ <option value="10">10</option>
1661
+ <option value="15">15</option>
1662
+ <option value="20">20</option>
1663
+ <option value="30">30</option>
1664
+ <option value="40">40</option>
1665
+ <option value="50">50</option>
1666
+ <option value="100">100</option>
1667
+ </select>
1668
+ <label>bins</label>
1669
+ </div>
1670
+ <div id="chart-title" class="box clear"></div>
1671
+ <div id="chart-title-lbl">With title</div>
1672
+ <div id="chart-legend-lbl">Legend:</div>
1673
+ <select id="chart-legend">
1674
+ <!-- options are added by the chart manager -->
1675
+ </select>
1676
+ <div id="chart-variables-header">
1677
+ Variables:
1678
+ <div id="chart-variable-buttons">
1679
+ <img id="chart-add-variable-btn" class="btn enab"
1680
+ src="images/add.png"
1681
+ title="Add variable (Shift-click to add a new equation)">
1682
+ <img id="chart-variable-up-btn" class="btn disab"
1683
+ src="images/up.png" style="margin-left: 4px"
1684
+ title="Move selected variable up in list">
1685
+ <img id="chart-variable-down-btn" class="btn disab"
1686
+ src="images/down.png"
1687
+ title="Move selected variable down in list">
1688
+ <img id="chart-edit-variable-btn" class="btn disab"
1689
+ src="images/edit.png" style="margin-left: 4px"
1690
+ title="Edit selected variable">
1691
+ <img id="chart-delete-variable-btn" class="btn disab"
1692
+ src="images/remove.png" style="margin-left: 4px"
1693
+ title="Delete selected variable">
1694
+ </div>
1695
+ </div>
1696
+ <div id="chart-variables">
1697
+ <table id="chart-variables-table">
1698
+ </table>
1699
+ </div>
1700
+ </div>
1701
+ <div id="chart-display-panel">
1702
+ <!-- NOTE: the scroller scrolls when the container is "stretched" -->
1703
+ <div id="chart-svg-scroller">
1704
+ <div id="chart-svg-container">
1705
+ <!-- NOTE: this is the div that will contain the chart's SVG image -->
1706
+ <div id="chart-svg"></div>
1707
+ </div>
1708
+ </div>
1709
+ <div id="chart-table-panel" hidden="hidden"></div>
1710
+ <div id="chart-toggle-chevron" title="Hide control panel">&laquo;</div>
1711
+ <div id="chart-display-buttons">
1712
+ <img id="chart-stats-btn" class="btn enab" src="images/stats.png"
1713
+ title="Show descriptive statistics">
1714
+ <img id="chart-copy-stats-btn" class="btn enab"
1715
+ src="images/stats-to-clpbrd.png"
1716
+ title="Copy descriptive statistics to clipboard">
1717
+ <img id="chart-copy-data-btn" class="btn enab"
1718
+ src="images/data-to-clpbrd.png"
1719
+ title="Copy series data to clipboard">
1720
+ <div id="table-only-buttons">
1721
+ <img id="chart-copy-table-btn" class="btn enab"
1722
+ src="images/table-to-clpbrd.png"
1723
+ title="Copy table to clipboard (as HTML)">
1724
+ </div>
1725
+ <div id="chart-only-buttons">
1726
+ <img id="chart-save-btn" class="btn enab" src="images/save-chart.png"
1727
+ title="Save chart diagram">
1728
+ <a id="chart-render-btn" href="show-png.html" target="_blank"
1729
+ style="margin-left: 4px; text-decoration: none; outline: none">
1730
+ <img class="btn enab" src="images/chart.png"
1731
+ title="Render chart diagram as PNG"
1732
+ style="height: 20px; width: 20px">
1733
+ </a>
1734
+ <img id="chart-widen-btn" class="btn enab" src="images/stretch.png"
1735
+ title="Widen chart" style="margin-left: 24px">
1736
+ <img id="chart-narrow-btn" class="btn enab" src="images/compress.png"
1737
+ title="Narrow chart">
1738
+ </div>
1739
+ </div>
1740
+ <div id="chart-time-step">t = 0</div>
1741
+ </div>
1742
+ <div id="chart-resize" class="resizer"></div>
1743
+ </div>
1744
+
1745
+ <!-- the VARIABLE dialog allows formatting a chart variable -->
1746
+ <div id="variable-modal" class="modal">
1747
+ <div id="variable-dlg" class="inp-dlg">
1748
+ <div class="dlg-title">
1749
+ <div id="variable-dlg-name"></div>
1750
+ <img class="cancel-btn" src="images/cancel.png">
1751
+ <img class="ok-btn" src="images/ok.png">
1752
+ </div>
1753
+ <div style="padding: 4px; width: 100px">
1754
+ <div id="variable-color-div">
1755
+ <div style="display:inline-block; vertical-align:top">Color:</div>
1756
+ <div id="variable-color"></div>
1757
+ </div>
1758
+ <div id="variable-scale-div" style="margin-top: 3px">
1759
+ <div style="display:inline-block; vertical-align:top; margin-top: 2px">
1760
+ Scale by:
1761
+ </div>
1762
+ <input id="variable-scale" type="text" autocomplete="off">
1763
+ </div>
1764
+ <div id="variable-width-div" style="margin: 4px 4px 8px 0px">
1765
+ <div style="display:inline-block; vertical-align:top; margin-top: 2px">
1766
+ Line width:
1767
+ </div>
1768
+ <input id="variable-width" type="text" autocomplete="off">
1769
+ </div>
1770
+ <div id="variable-stacked-div" style="margin: -2px -2px">
1771
+ <div id="variable-stacked" class="box clear"></div>
1772
+ <div style="display:inline-block; vertical-align:top; margin-top: 3px">
1773
+ Stacked area
1774
+ </div>
1775
+ </div>
1776
+ </div>
1777
+ <div id="color-picker"></div>
1778
+ <div id="change-equation-btns">
1779
+ <img id="chart-rename-equation-btn" class="btn enab"
1780
+ src="images/rename.png" title="Rename equation">
1781
+ <img id="chart-edit-equation-btn" class="btn enab"
1782
+ src="images/edit.png" style="margin-left: 4px"
1783
+ title="Edit equation">
1784
+ </div>
1785
+ </div>
1786
+ </div>
1787
+
1788
+ <!-- the ADD VARIABLE dialog allows selecting a variable to add to the chart -->
1789
+ <div id="add-variable-modal" class="modal">
1790
+ <div id="add-variable-dlg" class="inp-dlg">
1791
+ <div class="dlg-title">
1792
+ Add variable
1793
+ <img class="cancel-btn" src="images/cancel.png">
1794
+ <img class="ok-btn" src="images/ok.png">
1795
+ </div>
1796
+ <select id="add-variable-obj">
1797
+ <option value="0" selected="selected">Process</option>
1798
+ <option value="1">Product</option>
1799
+ <option value="2">Cluster</option>
1800
+ <option value="3">Link</option>
1801
+ <option value="4">Constraint</option>
1802
+ <option value="5">Actor</option>
1803
+ <option value="6">Dataset</option>
1804
+ <option value="7">Equation</option>
1805
+ </select>
1806
+ <select id="add-variable-name"></select>
1807
+ <select id="add-variable-attr"></select>
1808
+ </div>
1809
+ </div>
1810
+
1811
+ <!-- the RENAME CHART dialog prompts for the new title for a chart -->
1812
+ <div id="rename-chart-modal" class="modal">
1813
+ <div id="rename-chart-dlg" class="inp-dlg">
1814
+ <div class="dlg-title">
1815
+ Rename chart
1816
+ <img class="cancel-btn" src="images/cancel.png">
1817
+ <img class="ok-btn" src="images/ok.png">
1818
+ </div>
1819
+ <input id="new-chart-title" type="text" autocomplete="off">
1820
+ </div>
1821
+ </div>
1822
+
1823
+ <!-- the SENSITIVITY dialog allows sensitivity analysis -->
1824
+ <div id="sensitivity-dlg" class="inp-dlg">
1825
+ <div id="sensitivity-hdr" class="dragger dlg-title">Sensitivity analysis
1826
+ <img id="sensitivity-close-btn" class="close-btn" src="images/close.png">
1827
+ </div>
1828
+ <div id="sensitivity-control-panel">
1829
+ <div id="sa-base" title="Dataset modifier selectors for base scenario">
1830
+ Base:
1831
+ <input id="sa-base-selectors" type="text" autocomplete="off"
1832
+ placeholder="(no selectors)">
1833
+ </div>
1834
+ <div id="sa-delta" title="Relative change in parameter value">
1835
+ Delta:
1836
+ <input id="sensitivity-delta" type="text" autocomplete="off">
1837
+ <span id="sa-percent">%</span>
1838
+ </div>
1839
+ <div id="sa-p-header">
1840
+ Parameters:
1841
+ <div id="sa-p-btns">
1842
+ <img id="sa-p-add-btn" class="v-btn" src="images/add.png"
1843
+ title="Add parameter">
1844
+ <img id="sa-p-up-btn" class="v-btn v-disab"
1845
+ src="images/up.png" style="margin-left: 4px"
1846
+ title="Move selected parameter up in list">
1847
+ <img id="sa-p-down-btn" class="v-btn v-disab"
1848
+ src="images/down.png"
1849
+ title="Move selected parameter down in list">
1850
+ <img id="sa-p-delete-btn" class="v-btn" src="images/remove.png"
1851
+ title="Delete selected parameter">
1852
+ </div>
1853
+ </div>
1854
+ <div id="sa-p-scroll-area">
1855
+ <table id="sa-p-table"></table>
1856
+ </div>
1857
+ <div id="sa-o-header">
1858
+ Outcomes:
1859
+ <div id="sa-o-btns">
1860
+ <img id="sa-o-add-btn" class="v-btn" src="images/add.png"
1861
+ title="Add outcome">
1862
+ <img id="sa-o-up-btn" class="v-btn v-disab"
1863
+ src="images/up.png" style="margin-left: 4px"
1864
+ title="Move selected outcome up in list">
1865
+ <img id="sa-o-down-btn" class="v-btn v-disab"
1866
+ src="images/down.png"
1867
+ title="Move selected outcome down in list">
1868
+ <img id="sa-o-delete-btn" class="v-btn" src="images/remove.png"
1869
+ title="Delete selected outcome">
1870
+ </div>
1871
+ </div>
1872
+ <div id="sa-o-scroll-area">
1873
+ <table id="sa-o-table">
1874
+ </table>
1875
+ </div>
1876
+ </div>
1877
+ <div id="sensitivity-display-panel">
1878
+ <div id="sa-toggle-chevron" title="Hide control panel">&laquo;</div>
1879
+ <div id="sa-display-top-bar">
1880
+ <div id="sa-control-buttons">
1881
+ <img id="sa-start-btn" class="btn disab" src="images/solve.png"
1882
+ title="Start analysis">
1883
+ <img id="sa-pause-btn" class="btn enab off" src="images/pause.png"
1884
+ title="Pause analysis">
1885
+ <img id="sa-stop-btn" class="btn enab off" src="images/stop.png"
1886
+ title="Stop analysis">
1887
+ <img id="sa-reset-btn" class="btn enab off" src="images/reset.png"
1888
+ title="Clear results">
1889
+ </div>
1890
+ <div id="sa-progress"></div>
1891
+ <div id="sa-statistic">
1892
+ <label>Statistic:</label>
1893
+ <select id="sensitivity-statistic">
1894
+ <option title="Count" value="N">N</option>
1895
+ <option title="Mean" value="mean" selected="selected">&mu;</option>
1896
+ <option title="Standard deviation" value="sd">&sigma;</option>
1897
+ <option title="Sum" value="sum">&Sigma;</option>
1898
+ <option title="Lowest value" value="min">MIN</option>
1899
+ <option title="Highest value" value="max">MAX</option>
1900
+ <option title="Non-zero count" value="nz">&ne;0</option>
1901
+ <option title="Exception count" value="except">&#9888;</option>
1902
+ <option title="Value at final time step" value="last">&#10132;</option>
1903
+ </select>
1904
+ </div>
1905
+ </div>
1906
+ <div id="sa-scroll-area">
1907
+ <table id="sa-table">
1908
+ </table>
1909
+ </div>
1910
+ <div id="sa-bottom-bar">
1911
+ <div id="sa-abs-rel" title="Toggle absolute/relative change">%</div>
1912
+ <div id="sa-rb-scale" class="color-scale blue-to-red"></div>
1913
+ <div id="sa-no-scale" class="color-scale no-colors"></div>
1914
+ <img id="sa-copy-btn" class="btn enab" src="images/table-to-clpbrd.png"
1915
+ title="Copy table to clipboard (as HTML)">
1916
+ <img id="sa-copy-data-btn" class="btn enab"
1917
+ src="images/data-to-clpbrd.png" title="Copy data to clipboard">
1918
+ </div>
1919
+ <div id="sa-outcome-name"></div>
1920
+ </div>
1921
+ <div id="sensitivity-resize" class="resizer"></div>
1922
+ </div>
1923
+
1924
+ <!-- the ADD SA VARIABLE dialog allows selecting a variable as parameter
1925
+ or outcome for sensitivity analysis -->
1926
+ <div id="add-sa-variable-modal" class="modal">
1927
+ <div id="add-sa-variable-dlg" class="inp-dlg">
1928
+ <div class="dlg-title">
1929
+ Add <span id="add-sa-variable-type">parameter/outcome</span>
1930
+ <img class="cancel-btn" src="images/cancel.png">
1931
+ <img class="ok-btn" src="images/ok.png">
1932
+ </div>
1933
+ <select id="add-sa-variable-obj">
1934
+ <option value="0" selected="selected">Process</option>
1935
+ <option value="1">Product</option>
1936
+ <option id="add-sa-variable-cluster" value="2">Cluster</option>
1937
+ <option value="3">Link</option>
1938
+ <option value="4">Constraint</option>
1939
+ <option value="5">Actor</option>
1940
+ <option value="6">Dataset</option>
1941
+ <option id="add-sa-variable-equation" value="7">Equation</option>
1942
+ </select>
1943
+ <select id="add-sa-variable-name">
1944
+ </select>
1945
+ <select id="add-sa-variable-attr">
1946
+ </select>
1947
+ </div>
1948
+ </div>
1949
+
1950
+
1951
+ <!-- the EXPERIMENT dialog is the GUI of the Experiment manager -->
1952
+ <div id="experiment-dlg" class="inp-dlg">
1953
+ <div id="experiment-hdr" class="dragger dlg-title">Experiment manager
1954
+ <img id="experiment-close-btn" class="close-btn" src="images/close.png">
1955
+ </div>
1956
+ <div id="experiment-design">
1957
+ <div id="experiment-buttons">
1958
+ <img id="xp-new-btn" class="btn enab" src="images/new.png"
1959
+ title="New experiment">
1960
+ <img id="xp-rename-btn" class="btn disab" src="images/rename.png"
1961
+ title="Rename selected experiment">
1962
+ <img id="xp-view-btn" class="btn disab" src="images/table.png"
1963
+ title="View selected experiment">
1964
+ <img id="xp-reset-btn" class="btn enab off" src="images/reset.png"
1965
+ title="Clear results for selected experiment">
1966
+ <img id="xp-delete-btn" class="btn disab" src="images/delete.png"
1967
+ style="position: absolute; right: 2px"
1968
+ title="Delete selected experiment">
1969
+ </div>
1970
+ <div id="experiment-header">Experiments</div>
1971
+ <div id="experiment-scroll-area">
1972
+ <table id="experiment-table">
1973
+ </table>
1974
+ </div>
1975
+ <div id="experiment-properties">
1976
+ <div id="experiment-combi-count"></div>
1977
+ <div id="experiment-dim-count"></div>
1978
+ </div>
1979
+ <div id="experiment-separator"></div>
1980
+ <div id="experiment-default-message">
1981
+ To define a meaningful experiment, a model must feature at least
1982
+ one outcome dataset, or a graph having one or more variables.
1983
+ </div>
1984
+ <div id="experiment-params-header">(no experiment selected)</div>
1985
+ <div id="experiment-params-div">
1986
+ <div id="experiment-d-header">Dimensions:
1987
+ <div id="experiment-d-btns">
1988
+ <img id="xp-d-add-btn" class="v-btn" src="images/add.png"
1989
+ title="Add dimension">
1990
+ <img id="xp-d-up-btn" class="v-btn" src="images/up.png"
1991
+ title="Move dimension up in list">
1992
+ <img id="xp-d-down-btn" class="v-btn" src="images/down.png"
1993
+ title="Move dimension down in list">
1994
+ <img id="xp-d-settings-btn" class="v-btn" src="images/settings.png"
1995
+ title="Edit model settings dimensions">
1996
+ <img id="xp-d-actor-btn" class="v-btn" src="images/actors.png"
1997
+ title="Edit actor dimension">
1998
+ <img id="xp-d-delete-btn" class="v-btn" src="images/remove.png"
1999
+ title="Remove selected dimension from list">
2000
+ </div>
2001
+ </div>
2002
+ <div id="experiment-d-scroll-area">
2003
+ <table id="experiment-dim-table">
2004
+ </table>
2005
+ </div>
2006
+ <div id="experiment-c-header">Charts:
2007
+ <img id="xp-c-add-btn" class="v-btn" src="images/add.png"
2008
+ title="Add chart">
2009
+ <img id="xp-c-delete-btn" class="v-btn" src="images/remove.png"
2010
+ title="Remove selected chart from list">
2011
+ </div>
2012
+ <div id="experiment-c-scroll-area">
2013
+ <table id="experiment-chart-table">
2014
+ </table>
2015
+ </div>
2016
+ <div id="experiment-filter" title="Selectors to exclude from this experiment">
2017
+ Exclude:
2018
+ <input id="experiment-exclude" type="text" autocomplete="off">
2019
+ </div>
2020
+ <img id="xp-ignore-btn" class="btn disab"
2021
+ src="images/ignore.png" title="Select clusters to be ignored">
2022
+ <div id="xp-ignore-count"></div>
2023
+ </div>
2024
+ </div>
2025
+ <div id="experiment-viewer" hidden="hidden">
2026
+ <div id="viewer-buttons">
2027
+ <img id="xv-back-btn" class="btn enab" src="images/back.png"
2028
+ title="Back to design mode">
2029
+ <img id="xv-start-btn" class="btn enab" src="images/solve.png"
2030
+ title="Start experiment">
2031
+ <img id="xv-pause-btn" class="btn enab off" src="images/pause.png"
2032
+ title="Pause experiment">
2033
+ <img id="xv-stop-btn" class="btn enab off" src="images/stop.png"
2034
+ title="Stop experiment">
2035
+ </div>
2036
+ <div id="viewer-selectors">
2037
+ <label>Variable:</label>
2038
+ <select id="viewer-variable" style="margin-right: 10px">
2039
+ </select>
2040
+ <label>Statistic:</label>
2041
+ <select id="viewer-statistic">
2042
+ <option title="Count" value="N">N</option>
2043
+ <option title="Mean" value="mean" selected="selected">&mu;</option>
2044
+ <option title="Standard deviation" value="sd">&sigma;</option>
2045
+ <option title="Sum" value="sum">&Sigma;</option>
2046
+ <option title="Lowest value" value="min">MIN</option>
2047
+ <option title="Highest value" value="max">MAX</option>
2048
+ <option title="Non-zero count" value="nz">&ne;0</option>
2049
+ <option title="Exception count" value="except">&#9888;</option>
2050
+ <option title="Value at final time step" value="last">&#10132;</option>
2051
+ </select>
2052
+ </div>
2053
+ <div id="viewer-bar">
2054
+ <div id="viewer-title"></div>
2055
+ <div id="viewer-progress"></div>
2056
+ </div>
2057
+ <div id="viewer-scroll-area">
2058
+ <table id="viewer-table"></table>
2059
+ </div>
2060
+ <div id="viewer-spinners">
2061
+ <label>Layout:</label>
2062
+ <div id="xp-config-spinner" class="spinner" title="# configuration dimensions">
2063
+ <div id="xp-cd-minus" class="spin-min">&minus;</div>
2064
+ <div id="xp-cd-value" class="spin-val">0</div>
2065
+ <div id="xp-cd-plus" class="spin-plus">&plus;</div>
2066
+ </div>
2067
+ <div id="xp-scen-spinner" class="spinner" title="# column scenario dimensions">
2068
+ <div id="xp-sd-minus" class="spin-min">&minus;</div>
2069
+ <div id="xp-sd-value" class="spin-val">0</div>
2070
+ <div id="xp-sd-plus" class="spin-plus">&plus;</div>
2071
+ </div>
2072
+ <label>Scale:</label>
2073
+ <select id="viewer-scale">
2074
+ <option title="Values as computed"
2075
+ value="val" selected="selected">Values</option>
2076
+ <option title="Difference with reference configuration"
2077
+ value="dif" style="background-color: orange">Difference</option>
2078
+ <option title="Regret (difference with highest value in scenario)"
2079
+ value="reg">Regret (-)</option>
2080
+ <option title="Computing time used by solver (in seconds)"
2081
+ value="sec">Solver time</option>
2082
+ </select>
2083
+ <div id="xv-rb-scale" class="color-scale blue-to-red"></div>
2084
+ <div id="xv-br-scale" class="color-scale red-to-blue"></div>
2085
+ <div id="xv-rg-scale" class="color-scale green-to-red"></div>
2086
+ <div id="xv-gr-scale" class="color-scale red-to-green"></div>
2087
+ <div id="xv-no-scale" class="color-scale no-colors"></div>
2088
+ <img id="xv-copy-btn" class="btn enab" src="images/table-to-clpbrd.png"
2089
+ title="Copy table to clipboard (as HTML)">
2090
+ </div>
2091
+ </div>
2092
+ <div id="experiment-resize" class="resizer"></div>
2093
+ </div>
2094
+
2095
+ <!-- the NEW dialog prompts for the name of a new experiment -->
2096
+ <div id="xp-new-modal" class="modal">
2097
+ <div id="xp-new-dlg" class="inp-dlg">
2098
+ <div class="dlg-title">
2099
+ Title of new experiment
2100
+ <img class="cancel-btn" src="images/cancel.png">
2101
+ <img class="ok-btn" src="images/ok.png">
2102
+ </div>
2103
+ <input id="xp-new-name" type="text" autocomplete="off">
2104
+ </div>
2105
+ </div>
2106
+
2107
+ <!-- the RENAME dialog prompts for the new name of an experiment -->
2108
+ <div id="xp-rename-modal" class="modal">
2109
+ <div id="xp-rename-dlg" class="inp-dlg">
2110
+ <div class="dlg-title">
2111
+ New name for
2112
+ <div class="sdsn"
2113
+ style="width: 110px" id="xp-rename-former-name"></div>
2114
+ <img class="cancel-btn" src="images/cancel.png">
2115
+ <img class="ok-btn" src="images/ok.png">
2116
+ </div>
2117
+ <input id="xp-rename-name" type="text" autocomplete="off">
2118
+ </div>
2119
+ </div>
2120
+
2121
+ <!-- the PARAMETER dialog prompts for a dataset or chart name -->
2122
+ <div id="xp-parameter-modal" class="modal">
2123
+ <div id="xp-parameter-dlg" class="inp-dlg">
2124
+ <div class="dlg-title">
2125
+ Add <span id="xp-parameter-type">parameter</span>
2126
+ <img class="cancel-btn" src="images/cancel.png">
2127
+ <img class="ok-btn" src="images/ok.png">
2128
+ </div>
2129
+ <select id="xp-parameter-select">
2130
+ </select>
2131
+ </div>
2132
+ </div>
2133
+
2134
+ <!-- the SETTINGS dialog permits editing the model settings dimensions -->
2135
+ <div id="xp-settings-modal" class="modal">
2136
+ <div id="xp-settings-dlg" class="inp-dlg">
2137
+ <div class="dlg-title">
2138
+ Model settings dimensions
2139
+ <img class="close-btn" src="images/close.png">
2140
+ </div>
2141
+ <div id="xp-settings-s-header">Selectors:
2142
+ <img id="xp-settings-s-add-btn" class="v-btn" src="images/add.png"
2143
+ title="Add selector">
2144
+ </div>
2145
+ <div id="xp-settings-s-scroll-area">
2146
+ <table id="xp-settings-s-table">
2147
+ </table>
2148
+ </div>
2149
+ <div id="xp-settings-d-header">Dimensions:
2150
+ <img id="xp-settings-d-add-btn" class="v-btn" src="images/add.png"
2151
+ title="Add dimension">
2152
+ </div>
2153
+ <div id="xp-settings-d-scroll-area">
2154
+ <table id="xp-settings-d-table">
2155
+ </table>
2156
+ </div>
2157
+ </div>
2158
+ </div>
2159
+
2160
+ <!-- the SETTINGS SELECTOR dialog prompts for a selector + string -->
2161
+ <div id="xp-settings-selector-modal" class="modal">
2162
+ <div id="xp-settings-selector-dlg" class="inp-dlg">
2163
+ <div class="dlg-title">
2164
+ <span id="xp-settings-selector-action">Edit</span>
2165
+ model settings selector
2166
+ <span id="xp-settings-selector-clear" class="sd-clear">
2167
+ (clear settings field to remove)
2168
+ </span>
2169
+ <img class="cancel-btn" src="images/cancel.png">
2170
+ <img class="ok-btn" src="images/ok.png">
2171
+ </div>
2172
+ <div style="padding: 2px; white-space: nowrap">
2173
+ <label>Selector:</label>
2174
+ <input id="xp-settings-selector-code" type="text"
2175
+ title="Max. 10 characters (only alphanumericals, +, -, and %)"
2176
+ maxlength="10" autocomplete="off">
2177
+ <label>Settings:</label>
2178
+ <input id="xp-settings-selector-string" type="text" autocomplete="off"
2179
+ title="Can specifiy time step, simulation period, block length and look-ahead.
2180
+ Example: s=0.5h t=1-480 b=24 l=24 (in this order: s t b l)">
2181
+ </div>
2182
+ </div>
2183
+ </div>
2184
+
2185
+ <!-- the SETTINGS DIMENSION dialog prompts for a selector combination -->
2186
+ <div id="xp-settings-dimension-modal" class="modal">
2187
+ <div id="xp-settings-dimension-dlg" class="inp-dlg">
2188
+ <div class="dlg-title">
2189
+ <span id="xp-settings-dimension-action">Edit</span>
2190
+ model settings dimension
2191
+ <span id="xp-settings-dimension-clear">(clear to remove)</span>
2192
+ <img class="cancel-btn" src="images/cancel.png">
2193
+ <img class="ok-btn" src="images/ok.png">
2194
+ </div>
2195
+ <div style="padding: 2px; white-space: nowrap"
2196
+ title="One or more model settings selectors, separated by spaces">
2197
+ <label>Selectors:</label>
2198
+ <input id="xp-settings-dimension-string" type="text" autocomplete="off">
2199
+ </div>
2200
+ </div>
2201
+ </div>
2202
+
2203
+ <!-- the ACTOR DIMENSION dialog permits editing these dimensions -->
2204
+ <div id="xp-actor-dimension-modal" class="modal">
2205
+ <div id="xp-actor-dimension-dlg" class="inp-dlg">
2206
+ <div class="dlg-title">
2207
+ Actor dimension
2208
+ <img class="close-btn" src="images/close.png">
2209
+ </div>
2210
+ <div id="xp-actor-dimension-header">Selectors:
2211
+ <img id="xp-actor-dimension-add-btn" class="v-btn" src="images/add.png"
2212
+ title="Add selector">
2213
+ </div>
2214
+ <div id="xp-actor-dimension-scroll-area">
2215
+ <table id="xp-actor-dimension-table">
2216
+ </table>
2217
+ </div>
2218
+ </div>
2219
+ </div>
2220
+
2221
+ <!-- the ACTOR SELECTOR dialog prompts for a selector -->
2222
+ <div id="xp-actor-selector-modal" class="modal">
2223
+ <div id="xp-actor-selector-dlg" class="inp-dlg">
2224
+ <div class="dlg-title">
2225
+ <span id="xp-actor-selector-action">Edit</span> actor selector
2226
+ <img class="cancel-btn" src="images/cancel.png">
2227
+ <img class="ok-btn" src="images/ok.png">
2228
+ </div>
2229
+ <div style="padding: 2px; white-space: nowrap">
2230
+ <label>Selector:</label>
2231
+ <input id="xp-actor-selector-code" type="text" autocomplete="off"
2232
+ title="Max. 10 characters (only alphanumericals, +, -, and %)"
2233
+ maxlength="10">
2234
+ <span id="xp-actor-selector-clear" class="sd-clear">
2235
+ (clear to remove)
2236
+ </span>
2237
+ </div>
2238
+ <div style="padding: 2px; white-space: nowrap">
2239
+ <label>Rounds sequence:</label>
2240
+ <input id="xp-actor-selector-rounds" type="text" autocomplete="off"
2241
+ title="One or more round letters">
2242
+ </div>
2243
+ </div>
2244
+ </div>
2245
+
2246
+ <!-- The "clusters to ignore" dialog displays a scrollable list of clusters
2247
+ set to be ignored for specified selectors.
2248
+ NOTE: Changes to this list are discarded if CANCEL is clicked.
2249
+ -->
2250
+ <div id="xp-clusters-modal" class="modal">
2251
+ <div id="xp-clusters-dlg" class="inp-dlg">
2252
+ <div class="dlg-title">
2253
+ Clusters set to be ignored
2254
+ <img class="cancel-btn" src="images/cancel.png">
2255
+ <img class="ok-btn" src="images/ok.png">
2256
+ </div>
2257
+ <select id="xp-clusters-select"></select>
2258
+ <img id="xp-clusters-add-btn" src="images/add.png" class="btn enab"
2259
+ title="Add cluster to list">
2260
+ <div id="xp-clusters-no-list">
2261
+ No clusters set to be ignored
2262
+ </div>
2263
+ <div id="xp-clusters-list">
2264
+ <div id="xp-clusters-scroll-hdr">
2265
+ <div id="xp-clusters-name-hdr">Cluster</div>
2266
+ <div id="xp-clusters-selectors-hdr">Selector(s)</div>
2267
+ </div>
2268
+ <div id="xp-clusters-scroll">
2269
+ <table id="xp-clusters-table" width="100%"></table>
2270
+ </div>
2271
+ <div id="xp-clusters-selectors-div">
2272
+ Selector(s):
2273
+ <input id="xp-clusters-selectors" type="text">
2274
+ <img id="xp-clusters-delete-btn" src="images/remove.png"
2275
+ class="btn enab" title="Delete cluster from list">
2276
+ </div>
2277
+ </div>
2278
+ </div>
2279
+ </div>
2280
+
2281
+
2282
+ <!-- the FINDER dialog allows searching for occurrence of entities -->
2283
+ <div id="finder-dlg" class="inp-dlg">
2284
+ <div id="finder-hdr" class="dragger dlg-title">
2285
+ Find occurrences of entities <div id="finder-entity-imgs"></div>
2286
+ <img id="finder-close-btn" class="close-btn" src="images/close.png">
2287
+ </div>
2288
+ <div id="finder-filter-bar">
2289
+ <input id="finder-filter-text" type="text"
2290
+ placeholder="(name filtering pattern)"
2291
+ title="Pattern may contain logical & (AND), | (OR) and ^ (NOT)
2292
+ Limit search by starting with a type selector X?
2293
+ where X can be one or several of these letters: ABCDELPQ">
2294
+ </div>
2295
+ <div id="finder-scroll-area">
2296
+ <table id="finder-table">
2297
+ </table>
2298
+ </div>
2299
+ <div id="finder-status">
2300
+ <span id="finder-count"></span> found
2301
+ </div>
2302
+ <img id="finder-copy-btn" class="btn enab"
2303
+ src="images/table-to-clpbrd.png"
2304
+ title="Copy entity attributes to clipboard">
2305
+ <div id="finder-separator"></div>
2306
+ <div id="finder-item-header">(no item selected)</div>
2307
+ <div id="finder-item-scroll-area">
2308
+ <table id="finder-item-table">
2309
+ </table>
2310
+ </div>
2311
+ <div id="finder-expression-hdr">No expressions</div>
2312
+ <div id="finder-expression-scroll-area">
2313
+ <table id="finder-expression-table">
2314
+ </table>
2315
+ </div>
2316
+ <div id="finder-resize" class="resizer"></div>
2317
+ </div>
2318
+
2319
+ <!-- the MONITOR dialog shows solver progress and messages, and model equations -->
2320
+ <div id="monitor-dlg" class="inp-dlg">
2321
+ <div id="monitor-hdr" class="dragger dlg-title">Solver monitor
2322
+ <img id="monitor-close-btn" class="close-btn" src="images/close.png">
2323
+ </div>
2324
+ <div id="monitor-tabs" class="tabs">
2325
+ <div id="monitor-msg-tab" class="tab sel-tab"
2326
+ title="Any text output from the MILP solver">
2327
+ Messages
2328
+ </div>
2329
+ <div id="monitor-vbl-tab" class="tab"
2330
+ title="Legend to variables (numbers are column indices in Simplex tableau)">
2331
+ Variables
2332
+ </div>
2333
+ <div id="monitor-eqs-tab" class="tab"
2334
+ title="Equations of the MILP problem submitted to the solver">
2335
+ Equations
2336
+ </div>
2337
+ </div>
2338
+ <textarea id="monitor-msg" autocomplete="off" autocorrect="off"
2339
+ autocapitalize="off" spellcheck="false" hidden="hidden"></textarea>
2340
+ <textarea id="monitor-vbl" autocomplete="off" autocorrect="off"
2341
+ autocapitalize="off" spellcheck="false" hidden="hidden"></textarea>
2342
+ <textarea id="monitor-eqs" autocomplete="off" autocorrect="off"
2343
+ autocapitalize="off" spellcheck="false" hidden="hidden"></textarea>
2344
+ <div id="monitor-blocks">1/1</div>
2345
+ <div id="monitor-timer">00:00</div>
2346
+ <div id="monitor-progress">
2347
+ <div id="monitor-progress-bar"></div>
2348
+ </div>
2349
+ <div id="monitor-resize" class="resizer"></div>
2350
+ </div>
2351
+
2352
+ <!-- the CHANNEL dialog prompts for two paths: channel and call-back -->
2353
+ <div id="channel-modal" class="modal">
2354
+ <div id="channel-dlg" class="inp-dlg">
2355
+ <div class="dlg-title">
2356
+ Activate receiver
2357
+ <img class="cancel-btn" src="images/cancel.png">
2358
+ <img class="ok-btn" src="images/ok.png">
2359
+ </div>
2360
+ <div style="margin:3.5px">
2361
+ <div>
2362
+ Channel:<br>
2363
+ <input id="channel-path" type="text" autocomplete="off"
2364
+ placeholder="(main)/channel">
2365
+ </div>
2366
+ <div>
2367
+ Call-back command:<br>
2368
+ <input id="channel-callback" type="text" placeholder="(optional)"
2369
+ autocomplete="off">
2370
+ </div>
2371
+ </div>
2372
+ </div>
2373
+ </div>
2374
+
2375
+ <!-- the DOCUMENTATION dialog shows user comments and Linny-R docu-items -->
2376
+ <div id="documentation-dlg" class="inp-dlg">
2377
+ <div id="documentation-hdr" class="dragger dlg-title">
2378
+ <div id="docu-item-title">Documentation</div>
2379
+ <img id="documentation-close-btn" class="close-btn" src="images/close.png">
2380
+ </div>
2381
+ <div id="docu-container">
2382
+ <div id="docu-viewer"></div>
2383
+ <textarea id="docu-editor" autocomplete="off" autocorrect="off"
2384
+ autocapitalize="off" hidden="hidden"></textarea>
2385
+ </div>
2386
+ <img id="docu-edit-btn" class="btn disab" src="images/edit.png"
2387
+ title="Edit">
2388
+ <img id="docu-copy-btn" class="btn enab" src="images/info-to-clpbrd.png"
2389
+ title="Copy documentation to clipboard">
2390
+ <img id="docu-model-info-btn" class="btn enab" src="images/model-info.png"
2391
+ title="Show all model documentation">
2392
+ <img id="compare-btn" class="btn enab" src="images/compare.png"
2393
+ title="Show differences between current model and some other model">
2394
+ <img id="docu-save-btn" class="ok-btn" src="images/ok.png"
2395
+ title="Save">
2396
+ <img id="docu-cancel-btn" class="cancel-btn" src="images/cancel.png"
2397
+ title="Cancel">
2398
+ <img id="docu-info-btn" class="info-btn" src="images/info.png"
2399
+ title="Markup conventions">
2400
+ <img id="docu-resume-btn" class="close-btn" src="images/close.png"
2401
+ title="Resume editing">
2402
+ <div id="docu-symbols" title="Click to insert symbol in text">
2403
+ <div class="docu-sym" id="docu-tail-1">&#x2919;</div>
2404
+ <div class="docu-sym" id="docu-head">&#x21A3;</div>
2405
+ <div class="docu-sym" id="docu-link">&#x2192;</div>
2406
+ <div class="docu-sym" id="docu-constraint">&#x2911;</div>
2407
+ <div class="docu-sym" id="docu-bi-constraint">&#x2194;</div>
2408
+ <div class="docu-sym" id="docu-throughput">&#x2B86;</div>
2409
+ <div class="docu-sym" id="docu-change">&#x0394;</div>
2410
+ <div class="docu-sym" id="docu-sum">&#x3A3;</div>
2411
+ <div class="docu-sym" id="docu-mean">&#x03BC;</div>
2412
+ <div class="docu-sym" id="docu-startup">&#x2B9D;</div>
2413
+ <div class="docu-sym" id="docu-shutdown">&#x2B9F;</div>
2414
+ <div class="docu-sym" id="docu-spinning-reserve">&#x2934;</div>
2415
+ <div class="docu-sym" id="docu-first-commit">&#x2732;</div>
2416
+ <div class="docu-sym" id="docu-infinity">&#x221E;</div>
2417
+ <div class="docu-sym" id="docu-undefined">&#x2047;</div>
2418
+ <div class="docu-sym" id="docu-not-computed">&#x2BBF;</div>
2419
+ <div class="docu-sym" id="docu-computing">&#x25A6;</div>
2420
+ <div class="docu-sym" id="docu-warning">&#x26A0;</div>
2421
+ </div>
2422
+ <div id="docu-message-hint">
2423
+ To view messages, <span style="font-style: normal">Shift</span>-move
2424
+ cursor over status bar
2425
+ </div>
2426
+ <div id="documentation-resize" class="resizer"></div>
2427
+ </div>
2428
+
2429
+ <!-- the PROMPT FOR COMPARISON dialog prompts the user for a Linny-R model
2430
+ file on disk to be compared with the current model -->
2431
+ <div id="comparison-modal" class="modal">
2432
+ <div id="comparison-dlg" class="inp-dlg">
2433
+ <div class="dlg-title">
2434
+ Select model to compare with current model
2435
+ <img class="cancel-btn" src="images/cancel.png">
2436
+ <img class="ok-btn" src="images/ok.png">
2437
+ </div>
2438
+ <input id="comparison-xml-file" type="file">
2439
+ </div>
2440
+ </div>
2441
+
2442
+ <!-- the CALL STACK modal shows the VM's expression call stack
2443
+ when an error has occurred -->
2444
+ <div id="call-stack-modal" class="modal">
2445
+ <div id="call-stack-dlg" class="inp-dlg">
2446
+ <div class="dlg-title" style="background-color: #cc88b0">
2447
+ <div id="call-stack-error"></div>
2448
+ <img id="call-stack-close-btn" class="close-btn" src="images/close.png">
2449
+ </div>
2450
+ <div id="call-stack-table"></div>
2451
+ </div>
2452
+ </div>
2453
+
2454
+ <!-- the CHECK UPDATE modal notifies that an update is available -->
2455
+ <div id="check-update-modal" class="modal">
2456
+ <div id="check-update-dlg" class="inp-dlg">
2457
+ <div class="dlg-title" style="background-color: #cc88b0">
2458
+ Linny-R software update
2459
+ </div>
2460
+ <div id="check-update-msg"></div>
2461
+ <div id="check-update-buttons">
2462
+ <img class="ok-btn big-btn" src="images/ok.png">
2463
+ Shut down server to install new version
2464
+ <img class="cancel-btn big-btn" src="images/cancel.png">
2465
+ Continue using current version
2466
+ </div>
2467
+ </div>
2468
+ </div>
2469
+
2470
+ <!--- rotating Linny-R logo icon -->
2471
+ <div id="rotating-icon">
2472
+ <div>
2473
+ <svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"
2474
+ viewBox="24 32 232 231" preserveAspectRatio="xMidYMid">
2475
+ <style>
2476
+ path.roic {
2477
+ stroke: #8264a0;
2478
+ stroke-width: 1px;
2479
+ stroke-linejoin: round;
2480
+ stroke-opacity: 1;
2481
+ opacity: 0.45;
2482
+ }
2483
+ </style>
2484
+ <g id="fr00">
2485
+ <path id="ABC0" class="roic" style="fill:#960041" d="M40 96L167 78L122 32z"></path>
2486
+ <path id="ADE0" class="roic" style="fill:#ebebe1" d="M40 96L61 189L120 208z"></path>
2487
+ <path id="AEB0" class="roic" style="fill:#fab8ea" d="M40 96L120 208L167 78z"></path>
2488
+ <path id="FEB0" class="roic" style="fill:#3236c8" d="M215 160L120 208L167 78z"></path>
2489
+ <path id="FBC0" class="roic" style="fill:#ebebe1" d="M215 160L167 78L122 32z"></path>
2490
+ <path id="FDE0" class="roic" style="fill:#960041" d="M215 160L61 189L120 208z"></path>
2491
+ <path id="FCD0" class="roic" style="fill:#fab8ea" d="M215 160L122 32L61 189z"></path>
2492
+ <path id="ACD0" class="roic" style="fill:#3236c8" d="M40 96L122 32L61 189z"></path>
2493
+ </g>
2494
+ <g id="fr01">
2495
+ <path id="ABC1" class="roic" style="fill:#960041" d="M45 96L172 77L115 32z"></path>
2496
+ <path id="ADE1" class="roic" style="fill:#ebebe1" d="M45 96L54 188L125 208z"></path>
2497
+ <path id="AEB1" class="roic" style="fill:#fab8ea" d="M45 96L125 208L172 77z"></path>
2498
+ <path id="FEB1" class="roic" style="fill:#3236c8" d="M212 161L125 208L172 77z"></path>
2499
+ <path id="FBC1" class="roic" style="fill:#ebebe1" d="M212 161L172 77L115 32z"></path>
2500
+ <path id="FCD1" class="roic" style="fill:#fab8ea" d="M212 161L115 32L54 188z"></path>
2501
+ <path id="FDE1" class="roic" style="fill:#960041" d="M212 161L54 188L125 208z"></path>
2502
+ <path id="ACD1" class="roic" style="fill:#3236c8" d="M45 96L115 32L54 188z"></path>
2503
+ </g>
2504
+ <g id="fr02">
2505
+ <path id="ABC2" class="roic" style="fill:#960041" d="M51 96L178 76L107 32z"></path>
2506
+ <path id="ADE2" class="roic" style="fill:#ebebe1" d="M51 96L48 187L131 208z"></path>
2507
+ <path id="AEB2" class="roic" style="fill:#fab8ea" d="M51 96L131 208L178 76z"></path>
2508
+ <path id="FEB2" class="roic" style="fill:#3236c8" d="M207 162L131 208L178 76z"></path>
2509
+ <path id="FBC2" class="roic" style="fill:#ebebe1" d="M207 162L178 76L107 32z"></path>
2510
+ <path id="FCD2" class="roic" style="fill:#fab8ea" d="M207 162L107 32L48 187z"></path>
2511
+ <path id="FDE2" class="roic" style="fill:#960041" d="M207 162L48 187L131 208z"></path>
2512
+ <path id="ACD2" class="roic" style="fill:#3236c8" d="M51 96L107 32L48 187z"></path>
2513
+ </g>
2514
+ <g id="fr03">
2515
+ <path id="ABC3" class="roic" style="fill:#960041" d="M57 96L184 75L100 32z"></path>
2516
+ <path id="ADE3" class="roic" style="fill:#ebebe1" d="M57 96L43 186L136 209z"></path>
2517
+ <path id="AEB3" class="roic" style="fill:#fab8ea" d="M57 96L136 209L184 75z"></path>
2518
+ <path id="FEB3" class="roic" style="fill:#3236c8" d="M201 163L136 209L184 75z"></path>
2519
+ <path id="FBC3" class="roic" style="fill:#ebebe1" d="M201 163L184 75L100 32z"></path>
2520
+ <path id="FCD3" class="roic" style="fill:#fab8ea" d="M201 163L100 32L43 186z"></path>
2521
+ <path id="FDE3" class="roic" style="fill:#960041" d="M201 163L43 186L136 209z"></path>
2522
+ <path id="ACD3" class="roic" style="fill:#3236c8" d="M57 96L100 32L43 186z"></path>
2523
+ </g>
2524
+ <g id="fr04">
2525
+ <path id="ABC4" class="roic" style="fill:#960041" d="M65 97L189 75L93 33z"></path>
2526
+ <path id="ADE4" class="roic" style="fill:#ebebe1" d="M65 97L39 185L142 208z"></path>
2527
+ <path id="AEB4" class="roic" style="fill:#fab8ea" d="M65 97L142 208L189 75z"></path>
2528
+ <path id="FEB4" class="roic" style="fill:#3236c8" d="M195 164L142 208L189 75z"></path>
2529
+ <path id="FBC4" class="roic" style="fill:#ebebe1" d="M195 164L189 75L93 33z"></path>
2530
+ <path id="FCD4" class="roic" style="fill:#fab8ea" d="M195 164L93 33L39 185z"></path>
2531
+ <path id="FDE4" class="roic" style="fill:#960041" d="M195 164L39 185L142 208z"></path>
2532
+ <path id="ACD4" class="roic" style="fill:#3236c8" d="M65 97L93 33L39 185z"></path>
2533
+ </g>
2534
+ <g id="fr05">
2535
+ <path id="ABC5" class="roic" style="fill:#960041" d="M73 98L193 74L87 34z"></path>
2536
+ <path id="ACD5" class="roic" style="fill:#3236c8" d="M73 98L87 34L36 184z"></path>
2537
+ <path id="ADE5" class="roic" style="fill:#ebebe1" d="M73 98L36 184L149 209z"></path>
2538
+ <path id="AEB5" class="roic" style="fill:#fab8ea" d="M73 98L149 209L193 74z"></path>
2539
+ <path id="FEB5" class="roic" style="fill:#3236c8" d="M186 164L149 209L193 74z"></path>
2540
+ <path id="FBC5" class="roic" style="fill:#ebebe1" d="M186 164L193 74L87 34z"></path>
2541
+ <path id="FCD5" class="roic" style="fill:#fab8ea" d="M186 164L87 34L36 184z"></path>
2542
+ <path id="FDE5" class="roic" style="fill:#960041" d="M186 164L36 184L149 209z"></path>
2543
+ </g>
2544
+ <g id="fr06">
2545
+ <path id="ABC6" class="roic" style="fill:#960041" d="M80 98L198 73L80 35z"></path>
2546
+ <path id="ACD6" class="roic" style="fill:#3236c8" d="M80 98L80 35L35 183z"></path>
2547
+ <path id="ADE6" class="roic" style="fill:#ebebe1" d="M80 98L35 183L153 209z"></path>
2548
+ <path id="AEB6" class="roic" style="fill:#fab8ea" d="M80 98L153 209L198 73z"></path>
2549
+ <path id="FEB6" class="roic" style="fill:#3236c8" d="M178 165L153 209L198 73z"></path>
2550
+ <path id="FBC6" class="roic" style="fill:#ebebe1" d="M178 165L198 73L80 35z"></path>
2551
+ <path id="FCD6" class="roic" style="fill:#fab8ea" d="M178 165L80 35L35 183z"></path>
2552
+ <path id="FDE6" class="roic" style="fill:#960041" d="M178 165L35 183L153 209z"></path>
2553
+ </g>
2554
+ <g id="fr07">
2555
+ <path id="ABC7" class="roic" style="fill:#960041" d="M88 99L201 73L74 35z"></path>
2556
+ <path id="ACD7" class="roic" style="fill:#3236c8" d="M88 99L74 35L34 181z"></path>
2557
+ <path id="ADE7" class="roic" style="fill:#ebebe1" d="M88 99L34 181L158 210z"></path>
2558
+ <path id="AEB7" class="roic" style="fill:#fab8ea" d="M88 99L158 210L201 73z"></path>
2559
+ <path id="FBC7" class="roic" style="fill:#ebebe1" d="M168 165L201 73L74 35z"></path>
2560
+ <path id="FCD7" class="roic" style="fill:#fab8ea" d="M168 165L74 35L34 181z"></path>
2561
+ <path id="FDE7" class="roic" style="fill:#960041" d="M168 165L34 181L158 210z"></path>
2562
+ <path id="FEB7" class="roic" style="fill:#3236c8" d="M168 165L158 210L201 73z"></path>
2563
+ </g>
2564
+ <g id="fr08">
2565
+ <path id="ABC8" class="roic" style="fill:#960041" d="M96 99L204 72L70 36z"></path>
2566
+ <path id="ACD8" class="roic" style="fill:#3236c8" d="M96 99L70 36L34 181z"></path>
2567
+ <path id="ADE8" class="roic" style="fill:#ebebe1" d="M96 99L34 181L163 210z"></path>
2568
+ <path id="AEB8" class="roic" style="fill:#fab8ea" d="M96 99L163 210L204 72z"></path>
2569
+ <path id="FBC8" class="roic" style="fill:#ebebe1" d="M156 165L204 72L70 36z"></path>
2570
+ <path id="FCD8" class="roic" style="fill:#fab8ea" d="M156 165L70 36L34 181z"></path>
2571
+ <path id="FDE8" class="roic" style="fill:#960041" d="M156 165L34 181L163 210z"></path>
2572
+ <path id="FEB8" class="roic" style="fill:#3236c8" d="M156 165L163 210L204 72z"></path>
2573
+ </g>
2574
+ <g id="fr09">
2575
+ <path id="ABC9" class="roic" style="fill:#960041" d="M104 99L206 71L66 37z"></path>
2576
+ <path id="ACD9" class="roic" style="fill:#3236c8" d="M104 99L66 37L35 180z"></path>
2577
+ <path id="ADE9" class="roic" style="fill:#ebebe1" d="M104 99L35 180L168 212z"></path>
2578
+ <path id="AEB9" class="roic" style="fill:#fab8ea" d="M104 99L168 212L206 71z"></path>
2579
+ <path id="FBC9" class="roic" style="fill:#ebebe1" d="M144 165L206 71L66 37z"></path>
2580
+ <path id="FCD9" class="roic" style="fill:#fab8ea" d="M144 165L66 37L35 180z"></path>
2581
+ <path id="FDE9" class="roic" style="fill:#960041" d="M144 165L35 180L168 212z"></path>
2582
+ <path id="FEB9" class="roic" style="fill:#3236c8" d="M144 165L168 212L206 71z"></path>
2583
+ </g>
2584
+ <g id="fr10">
2585
+ <path id="ABC10" class="roic" style="fill:#960041" d="M112 99L207 69L62 38z"></path>
2586
+ <path id="ACD10" class="roic" style="fill:#3236c8" d="M112 99L62 38L38 179z"></path>
2587
+ <path id="ADE10" class="roic" style="fill:#ebebe1" d="M112 99L38 179L171 212z"></path>
2588
+ <path id="AEB10" class="roic" style="fill:#fab8ea" d="M112 99L171 212L207 69z"></path>
2589
+ <path id="FBC10" class="roic" style="fill:#ebebe1" d="M132 166L207 69L62 38z"></path>
2590
+ <path id="FCD10" class="roic" style="fill:#fab8ea" d="M132 166L62 38L38 179z"></path>
2591
+ <path id="FDE10" class="roic" style="fill:#960041" d="M132 166L38 179L171 212z"></path>
2592
+ <path id="FEB10" class="roic" style="fill:#3236c8" d="M132 166L171 212L207 69z"></path>
2593
+ </g>
2594
+ <g id="fr11">
2595
+ <path id="ABC11" class="roic" style="fill:#960041" d="M120 99L207 68L59 39z"></path>
2596
+ <path id="ACD11" class="roic" style="fill:#3236c8" d="M120 99L59 39L40 178z"></path>
2597
+ <path id="ADE11" class="roic" style="fill:#ebebe1" d="M120 99L40 178L175 214z"></path>
2598
+ <path id="AEB11" class="roic" style="fill:#fab8ea" d="M120 99L175 214L207 68z"></path>
2599
+ <path id="FBC11" class="roic" style="fill:#ebebe1" d="M120 166L207 68L59 39z"></path>
2600
+ <path id="FCD11" class="roic" style="fill:#fab8ea" d="M120 166L59 39L40 178z"></path>
2601
+ <path id="FDE11" class="roic" style="fill:#960041" d="M120 166L40 178L175 214z"></path>
2602
+ <path id="FEB11" class="roic" style="fill:#3236c8" d="M120 166L175 214L207 68z"></path>
2603
+ </g>
2604
+ <g id="fr12">
2605
+ <path id="ABC12" class="roic" style="fill:#960041" d="M129 99L206 67L57 40z"></path>
2606
+ <path id="ACD12" class="roic" style="fill:#3236c8" d="M129 99L57 40L44 177z"></path>
2607
+ <path id="ADE12" class="roic" style="fill:#ebebe1" d="M129 99L44 177L178 214z"></path>
2608
+ <path id="AEB12" class="roic" style="fill:#fab8ea" d="M129 99L178 214L206 67z"></path>
2609
+ <path id="FBC12" class="roic" style="fill:#ebebe1" d="M108 166L206 67L57 40z"></path>
2610
+ <path id="FCD12" class="roic" style="fill:#fab8ea" d="M108 166L57 40L44 177z"></path>
2611
+ <path id="FDE12" class="roic" style="fill:#960041" d="M108 166L44 177L178 214z"></path>
2612
+ <path id="FEB12" class="roic" style="fill:#3236c8" d="M108 166L178 214L206 67z"></path>
2613
+ </g>
2614
+ <g id="fr13">
2615
+ <path id="ABC13" class="roic" style="fill:#960041" d="M137 98L204 66L57 42z"></path>
2616
+ <path id="ACD13" class="roic" style="fill:#3236c8" d="M137 98L57 42L49 176z"></path>
2617
+ <path id="ADE13" class="roic" style="fill:#ebebe1" d="M137 98L49 176L181 215z"></path>
2618
+ <path id="AEB13" class="roic" style="fill:#fab8ea" d="M137 98L181 215L204 66z"></path>
2619
+ <path id="FBC13" class="roic" style="fill:#ebebe1" d="M96 166L204 66L57 42z"></path>
2620
+ <path id="FCD13" class="roic" style="fill:#fab8ea" d="M96 166L57 42L49 176z"></path>
2621
+ <path id="FDE13" class="roic" style="fill:#960041" d="M96 166L49 176L181 215z"></path>
2622
+ <path id="FEB13" class="roic" style="fill:#3236c8" d="M96 166L181 215L204 66z"></path>
2623
+ </g>
2624
+ <g id="fr14">
2625
+ <path id="ABC14" class="roic" style="fill:#960041" d="M145 99L200 65L56 43z"></path>
2626
+ <path id="ACD14" class="roic" style="fill:#3236c8" d="M145 99L56 43L54 175z"></path>
2627
+ <path id="ADE14" class="roic" style="fill:#ebebe1" d="M145 99L54 175L183 216z"></path>
2628
+ <path id="AEB14" class="roic" style="fill:#fab8ea" d="M145 99L183 216L200 65z"></path>
2629
+ <path id="FBC14" class="roic" style="fill:#ebebe1" d="M85 165L200 65L56 43z"></path>
2630
+ <path id="FCD14" class="roic" style="fill:#fab8ea" d="M85 165L56 43L54 175z"></path>
2631
+ <path id="FDE14" class="roic" style="fill:#960041" d="M85 165L54 175L183 216z"></path>
2632
+ <path id="FEB14" class="roic" style="fill:#3236c8" d="M85 165L183 216L200 65z"></path>
2633
+ </g>
2634
+ <g id="fr15">
2635
+ <path id="ABC15" class="roic" style="fill:#960041" d="M153 99L197 64L56 44z"></path>
2636
+ <path id="ACD15" class="roic" style="fill:#3236c8" d="M153 99L56 44L58 174z"></path>
2637
+ <path id="ADE15" class="roic" style="fill:#ebebe1" d="M153 99L58 174L184 218z"></path>
2638
+ <path id="AEB15" class="roic" style="fill:#fab8ea" d="M153 99L184 218L197 64z"></path>
2639
+ <path id="FBC15" class="roic" style="fill:#ebebe1" d="M74 164L197 64L56 44z"></path>
2640
+ <path id="FCD15" class="roic" style="fill:#fab8ea" d="M74 164L56 44L58 174z"></path>
2641
+ <path id="FDE15" class="roic" style="fill:#960041" d="M74 164L58 174L184 218z"></path>
2642
+ <path id="FEB15" class="roic" style="fill:#3236c8" d="M74 164L184 218L197 64z"></path>
2643
+ </g>
2644
+ <g id="fr16">
2645
+ <path id="FCD16" class="roic" style="fill:#fab8ea" d="M63 164L57 45L65 174z"></path>
2646
+ <path id="ABC16" class="roic" style="fill:#960041" d="M161 99L192 62L57 45z"></path>
2647
+ <path id="ACD16" class="roic" style="fill:#3236c8" d="M161 99L57 45L65 174z"></path>
2648
+ <path id="ADE16" class="roic" style="fill:#ebebe1" d="M161 99L65 174L184 219z"></path>
2649
+ <path id="AEB16" class="roic" style="fill:#fab8ea" d="M161 99L184 219L192 62z"></path>
2650
+ <path id="FBC16" class="roic" style="fill:#ebebe1" d="M63 164L192 62L57 45z"></path>
2651
+ <path id="FDE16" class="roic" style="fill:#960041" d="M63 164L65 174L184 219z"></path>
2652
+ <path id="FEB16" class="roic" style="fill:#3236c8" d="M63 164L184 219L192 62z"></path>
2653
+ </g>
2654
+ <g id="fr17">
2655
+ <path id="FCD17" class="roic" style="fill:#fab8ea" d="M54 164L59 46L72 173z"></path>
2656
+ <path id="ABC17" class="roic" style="fill:#960041" d="M168 98L185 62L59 46z"></path>
2657
+ <path id="ACD17" class="roic" style="fill:#3236c8" d="M168 98L59 46L72 173z"></path>
2658
+ <path id="ADE17" class="roic" style="fill:#ebebe1" d="M168 98L72 173L184 219z"></path>
2659
+ <path id="AEB17" class="roic" style="fill:#fab8ea" d="M168 98L184 219L185 62z"></path>
2660
+ <path id="FBC17" class="roic" style="fill:#ebebe1" d="M54 164L185 62L59 46z"></path>
2661
+ <path id="FDE17" class="roic" style="fill:#960041" d="M54 164L72 173L184 219z"></path>
2662
+ <path id="FEB17" class="roic" style="fill:#3236c8" d="M54 164L184 219L185 62z"></path>
2663
+ </g>
2664
+ <g id="fr18">
2665
+ <path id="FDE18" class="roic" style="fill:#960041" d="M45 164L78 171L184 221z"></path>
2666
+ <path id="FCD18" class="roic" style="fill:#fab8ea" d="M45 164L62 47L78 171z"></path>
2667
+ <path id="ABC18" class="roic" style="fill:#960041" d="M176 98L178 61L62 47z"></path>
2668
+ <path id="ACD18" class="roic" style="fill:#3236c8" d="M176 98L62 47L78 171z"></path>
2669
+ <path id="ADE18" class="roic" style="fill:#ebebe1" d="M176 98L78 171L184 221z"></path>
2670
+ <path id="AEB18" class="roic" style="fill:#fab8ea" d="M176 98L184 221L178 61z"></path>
2671
+ <path id="FBC18" class="roic" style="fill:#ebebe1" d="M45 164L178 61L62 47z"></path>
2672
+ <path id="FEB18" class="roic" style="fill:#3236c8" d="M45 164L184 221L178 61z"></path>
2673
+ </g>
2674
+ <g id="fr19">
2675
+ <path id="FDE19" class="roic" style="fill:#960041" d="M39 163L85 171L183 223z"></path>
2676
+ <path id="FCD19" class="roic" style="fill:#fab8ea" d="M39 163L65 48L85 171z"></path>
2677
+ <path id="ABC19" class="roic" style="fill:#960041" d="M184 97L170 60L65 48z"></path>
2678
+ <path id="ACD19" class="roic" style="fill:#3236c8" d="M184 97L65 48L85 171z"></path>
2679
+ <path id="ADE19" class="roic" style="fill:#ebebe1" d="M184 97L85 171L183 223z"></path>
2680
+ <path id="AEB19" class="roic" style="fill:#fab8ea" d="M184 97L183 223L170 60z"></path>
2681
+ <path id="FBC19" class="roic" style="fill:#ebebe1" d="M39 163L170 60L65 48z"></path>
2682
+ <path id="FEB19" class="roic" style="fill:#3236c8" d="M39 163L183 223L170 60z"></path>
2683
+ </g>
2684
+ <g id="fr20">
2685
+ <path id="FDE20" class="roic" style="fill:#960041" d="M33 162L92 171L180 224z"></path>
2686
+ <path id="FCD20" class="roic" style="fill:#fab8ea" d="M33 162L68 49L92 171z"></path>
2687
+ <path id="ABC20" class="roic" style="fill:#960041" d="M190 97L160 60L68 49z"></path>
2688
+ <path id="ACD20" class="roic" style="fill:#3236c8" d="M190 97L68 49L92 171z"></path>
2689
+ <path id="ADE20" class="roic" style="fill:#ebebe1" d="M190 97L92 171L180 224z"></path>
2690
+ <path id="AEB20" class="roic" style="fill:#fab8ea" d="M190 97L180 224L160 60z"></path>
2691
+ <path id="FBC20" class="roic" style="fill:#ebebe1" d="M33 162L160 60L68 49z"></path>
2692
+ <path id="FEB20" class="roic" style="fill:#3236c8" d="M33 162L180 224L160 60z"></path>
2693
+ </g>
2694
+ <g id="fr21">
2695
+ <path id="FDE21" class="roic" style="fill:#960041" d="M28 161L99 171L177 225z"></path>
2696
+ <path id="FCD21" class="roic" style="fill:#fab8ea" d="M28 161L72 50L99 171z"></path>
2697
+ <path id="ABC21" class="roic" style="fill:#960041" d="M197 96L151 59L72 50z"></path>
2698
+ <path id="ACD21" class="roic" style="fill:#3236c8" d="M197 96L72 50L99 171z"></path>
2699
+ <path id="ADE21" class="roic" style="fill:#ebebe1" d="M197 96L99 171L177 225z"></path>
2700
+ <path id="AEB21" class="roic" style="fill:#fab8ea" d="M197 96L177 225L151 59z"></path>
2701
+ <path id="FBC21" class="roic" style="fill:#ebebe1" d="M28 161L151 59L72 50z"></path>
2702
+ <path id="FEB21" class="roic" style="fill:#3236c8" d="M28 161L177 225L151 59z"></path>
2703
+ </g>
2704
+ <g id="fr22">
2705
+ <path id="FDE22" class="roic" style="fill:#960041" d="M25 161L106 171L173 226z"></path>
2706
+ <path id="FCD22" class="roic" style="fill:#fab8ea" d="M25 161L76 51L106 171z"></path>
2707
+ <path id="ABC22" class="roic" style="fill:#960041" d="M201 95L140 59L76 51z"></path>
2708
+ <path id="ACD22" class="roic" style="fill:#3236c8" d="M201 95L76 51L106 171z"></path>
2709
+ <path id="ADE22" class="roic" style="fill:#ebebe1" d="M201 95L106 171L173 226z"></path>
2710
+ <path id="AEB22" class="roic" style="fill:#fab8ea" d="M201 95L173 226L140 59z"></path>
2711
+ <path id="FBC22" class="roic" style="fill:#ebebe1" d="M25 161L140 59L76 51z"></path>
2712
+ <path id="FEB22" class="roic" style="fill:#3236c8" d="M25 161L173 226L140 59z"></path>
2713
+ </g>
2714
+ <g id="fr23">
2715
+ <path id="FDE23" class="roic" style="fill:#960041" d="M24 160L114 171L168 227z"></path>
2716
+ <path id="FCD23" class="roic" style="fill:#fab8ea" d="M24 160L81 51L114 171z"></path>
2717
+ <path id="ABC23" class="roic" style="fill:#960041" d="M206 95L130 58L81 51z"></path>
2718
+ <path id="ACD23" class="roic" style="fill:#3236c8" d="M206 95L81 51L114 171z"></path>
2719
+ <path id="ADE23" class="roic" style="fill:#ebebe1" d="M206 95L114 171L168 227z"></path>
2720
+ <path id="AEB23" class="roic" style="fill:#fab8ea" d="M206 95L168 227L130 58z"></path>
2721
+ <path id="FBC23" class="roic" style="fill:#ebebe1" d="M24 160L130 58L81 51z"></path>
2722
+ <path id="FEB23" class="roic" style="fill:#3236c8" d="M24 160L168 227L130 58z"></path>
2723
+ </g>
2724
+ <g id="fr24">
2725
+ <path id="FDE24" class="roic" style="fill:#960041" d="M24 159L121 170L164 228z"></path>
2726
+ <path id="FCD24" class="roic" style="fill:#fab8ea" d="M24 159L86 52L121 170z"></path>
2727
+ <path id="ABC24" class="roic" style="fill:#960041" d="M210 94L119 58L86 52z"></path>
2728
+ <path id="ACD24" class="roic" style="fill:#3236c8" d="M210 94L86 52L121 170z"></path>
2729
+ <path id="ADE24" class="roic" style="fill:#ebebe1" d="M210 94L121 170L164 228z"></path>
2730
+ <path id="AEB24" class="roic" style="fill:#fab8ea" d="M210 94L164 228L119 58z"></path>
2731
+ <path id="FBC24" class="roic" style="fill:#ebebe1" d="M24 159L119 58L86 52z"></path>
2732
+ <path id="FEB24" class="roic" style="fill:#3236c8" d="M24 159L164 228L119 58z"></path>
2733
+ </g>
2734
+ <g id="fr25">
2735
+ <path id="FDE25" class="roic" style="fill:#960041" d="M24 158L129 170L157 230z"></path>
2736
+ <path id="FCD25" class="roic" style="fill:#fab8ea" d="M24 158L91 52L129 170z"></path>
2737
+ <path id="ACD25" class="roic" style="fill:#3236c8" d="M214 93L91 52L129 170z"></path>
2738
+ <path id="ADE25" class="roic" style="fill:#ebebe1" d="M214 93L129 170L157 230z"></path>
2739
+ <path id="AEB25" class="roic" style="fill:#fab8ea" d="M214 93L157 230L108 59z"></path>
2740
+ <path id="FBC25" class="roic" style="fill:#ebebe1" d="M24 158L108 59L91 52z"></path>
2741
+ <path id="FEB25" class="roic" style="fill:#3236c8" d="M24 158L157 230L108 59z"></path>
2742
+ <path id="ABC25" class="roic" style="fill:#960041" d="M214 93L108 59L91 52z"></path>
2743
+ </g>
2744
+ <g id="fr26">
2745
+ <path id="FDE26" class="roic" style="fill:#960041" d="M24 158L136 170L152 230z"></path>
2746
+ <path id="FCD26" class="roic" style="fill:#fab8ea" d="M24 158L96 53L136 170z"></path>
2747
+ <path id="ACD26" class="roic" style="fill:#3236c8" d="M216 93L96 53L136 170z"></path>
2748
+ <path id="ADE26" class="roic" style="fill:#ebebe1" d="M216 93L136 170L152 230z"></path>
2749
+ <path id="AEB26" class="roic" style="fill:#fab8ea" d="M216 93L152 230L98 60z"></path>
2750
+ <path id="FBC26" class="roic" style="fill:#ebebe1" d="M24 158L98 60L96 53z"></path>
2751
+ <path id="FEB26" class="roic" style="fill:#3236c8" d="M24 158L152 230L98 60z"></path>
2752
+ <path id="ABC26" class="roic" style="fill:#960041" d="M216 93L98 60L96 53z"></path>
2753
+ </g>
2754
+ <g id="fr27">
2755
+ <path id="FBC27" class="roic" style="fill:#ebebe1" d="M27 157L87 59L103 54z"></path>
2756
+ <path id="FDE27" class="roic" style="fill:#960041" d="M27 157L144 171L144 230z"></path>
2757
+ <path id="FCD27" class="roic" style="fill:#fab8ea" d="M27 157L103 54L144 171z"></path>
2758
+ <path id="ACD27" class="roic" style="fill:#3236c8" d="M216 92L103 54L144 171z"></path>
2759
+ <path id="ADE27" class="roic" style="fill:#ebebe1" d="M216 92L144 171L144 230z"></path>
2760
+ <path id="AEB27" class="roic" style="fill:#fab8ea" d="M216 92L144 230L87 59z"></path>
2761
+ <path id="FEB27" class="roic" style="fill:#3236c8" d="M27 157L144 230L87 59z"></path>
2762
+ <path id="ABC27" class="roic" style="fill:#960041" d="M216 92L87 59L103 54z"></path>
2763
+ </g>
2764
+ <g id="fr28">
2765
+ <path id="FBC28" class="roic" style="fill:#ebebe1" d="M30 156L77 60L108 53z"></path>
2766
+ <path id="FDE28" class="roic" style="fill:#960041" d="M30 156L152 171L137 230z"></path>
2767
+ <path id="FCD28" class="roic" style="fill:#fab8ea" d="M30 156L108 53L152 171z"></path>
2768
+ <path id="ACD28" class="roic" style="fill:#3236c8" d="M217 92L108 53L152 171z"></path>
2769
+ <path id="ADE28" class="roic" style="fill:#ebebe1" d="M217 92L152 171L137 230z"></path>
2770
+ <path id="AEB28" class="roic" style="fill:#fab8ea" d="M217 92L137 230L77 60z"></path>
2771
+ <path id="FEB28" class="roic" style="fill:#3236c8" d="M30 156L137 230L77 60z"></path>
2772
+ <path id="ABC28" class="roic" style="fill:#960041" d="M217 92L77 60L108 53z"></path>
2773
+ </g>
2774
+ <g id="fr29">
2775
+ <path id="FBC29" class="roic" style="fill:#ebebe1" d="M35 155L69 59L114 54z"></path>
2776
+ <path id="FDE29" class="roic" style="fill:#960041" d="M35 155L159 172L130 231z"></path>
2777
+ <path id="FCD29" class="roic" style="fill:#fab8ea" d="M35 155L114 54L159 172z"></path>
2778
+ <path id="ACD29" class="roic" style="fill:#3236c8" d="M216 91L114 54L159 172z"></path>
2779
+ <path id="ADE29" class="roic" style="fill:#ebebe1" d="M216 91L159 172L130 231z"></path>
2780
+ <path id="AEB29" class="roic" style="fill:#fab8ea" d="M216 91L130 231L69 59z"></path>
2781
+ <path id="FEB29" class="roic" style="fill:#3236c8" d="M35 155L130 231L69 59z"></path>
2782
+ <path id="ABC29" class="roic" style="fill:#960041" d="M216 91L69 59L114 54z"></path>
2783
+ </g>
2784
+ <g id="fr30">
2785
+ <path id="FBC30" class="roic" style="fill:#ebebe1" d="M40 155L60 60L120 53z"></path>
2786
+ <path id="FDE30" class="roic" style="fill:#960041" d="M40 155L166 172L122 231z"></path>
2787
+ <path id="FCD30" class="roic" style="fill:#fab8ea" d="M40 155L120 53L166 172z"></path>
2788
+ <path id="ACD30" class="roic" style="fill:#3236c8" d="M216 90L120 53L166 172z"></path>
2789
+ <path id="ADE30" class="roic" style="fill:#ebebe1" d="M216 90L166 172L122 231z"></path>
2790
+ <path id="AEB30" class="roic" style="fill:#fab8ea" d="M216 90L122 231L60 60z"></path>
2791
+ <path id="FEB30" class="roic" style="fill:#3236c8" d="M40 155L122 231L60 60z"></path>
2792
+ <path id="ABC30" class="roic" style="fill:#960041" d="M216 90L60 60L120 53z"></path>
2793
+ </g>
2794
+ <g id="fr31">
2795
+ <path id="FBC31" class="roic" style="fill:#ebebe1" d="M45 155L53 62L125 54z"></path>
2796
+ <path id="FDE31" class="roic" style="fill:#960041" d="M45 155L172 173L115 230z"></path>
2797
+ <path id="FCD31" class="roic" style="fill:#fab8ea" d="M45 155L125 54L172 173z"></path>
2798
+ <path id="ACD31" class="roic" style="fill:#3236c8" d="M212 89L125 54L172 173z"></path>
2799
+ <path id="ADE31" class="roic" style="fill:#ebebe1" d="M212 89L172 173L115 230z"></path>
2800
+ <path id="AEB31" class="roic" style="fill:#fab8ea" d="M212 89L115 230L53 62z"></path>
2801
+ <path id="FEB31" class="roic" style="fill:#3236c8" d="M45 155L115 230L53 62z"></path>
2802
+ <path id="ABC31" class="roic" style="fill:#960041" d="M212 89L53 62L125 54z"></path>
2803
+ </g>
2804
+ <g id="fr32">
2805
+ <path id="FBC32" class="roic" style="fill:#ebebe1" d="M51 154L47 63L132 53z"></path>
2806
+ <path id="FDE32" class="roic" style="fill:#960041" d="M51 154L178 174L107 230z"></path>
2807
+ <path id="FCD32" class="roic" style="fill:#fab8ea" d="M51 154L132 53L178 174z"></path>
2808
+ <path id="ACD32" class="roic" style="fill:#3236c8" d="M207 88L132 53L178 174z"></path>
2809
+ <path id="ADE32" class="roic" style="fill:#ebebe1" d="M207 88L178 174L107 230z"></path>
2810
+ <path id="AEB32" class="roic" style="fill:#fab8ea" d="M207 88L107 230L47 63z"></path>
2811
+ <path id="FEB32" class="roic" style="fill:#3236c8" d="M51 154L107 230L47 63z"></path>
2812
+ <path id="ABC32" class="roic" style="fill:#960041" d="M207 88L47 63L132 53z"></path>
2813
+ </g>
2814
+ <g id="fr33">
2815
+ <path id="FBC33" class="roic" style="fill:#ebebe1" d="M58 153L42 64L136 54z"></path>
2816
+ <path id="FDE33" class="roic" style="fill:#960041" d="M58 153L184 174L100 230z"></path>
2817
+ <path id="FCD33" class="roic" style="fill:#fab8ea" d="M58 153L136 54L184 174z"></path>
2818
+ <path id="ACD33" class="roic" style="fill:#3236c8" d="M202 87L136 54L184 174z"></path>
2819
+ <path id="ADE33" class="roic" style="fill:#ebebe1" d="M202 87L184 174L100 230z"></path>
2820
+ <path id="AEB33" class="roic" style="fill:#fab8ea" d="M202 87L100 230L42 64z"></path>
2821
+ <path id="FEB33" class="roic" style="fill:#3236c8" d="M58 153L100 230L42 64z"></path>
2822
+ <path id="ABC33" class="roic" style="fill:#960041" d="M202 87L42 64L136 54z"></path>
2823
+ </g>
2824
+ <g id="fr34">
2825
+ <path id="FBC34" class="roic" style="fill:#ebebe1" d="M65 152L39 65L142 53z"></path>
2826
+ <path id="FDE34" class="roic" style="fill:#960041" d="M65 152L189 175L92 230z"></path>
2827
+ <path id="FCD34" class="roic" style="fill:#fab8ea" d="M65 152L142 53L189 175z"></path>
2828
+ <path id="ACD34" class="roic" style="fill:#3236c8" d="M195 87L142 53L189 175z"></path>
2829
+ <path id="ADE34" class="roic" style="fill:#ebebe1" d="M195 87L189 175L92 230z"></path>
2830
+ <path id="AEB34" class="roic" style="fill:#fab8ea" d="M195 87L92 230L39 65z"></path>
2831
+ <path id="ABC34" class="roic" style="fill:#960041" d="M195 87L39 65L142 53z"></path>
2832
+ </g>
2833
+ <g id="fr35">
2834
+ <path id="FEB35" class="roic" style="fill:#3236c8" d="M72 152L86 228L36 67z"></path>
2835
+ <path id="FEB34" class="roic" style="fill:#3236c8" d="M65 152L92 230L39 65z"></path>
2836
+ <path id="FBC35" class="roic" style="fill:#ebebe1" d="M72 152L36 67L149 53z"></path>
2837
+ <path id="FDE35" class="roic" style="fill:#960041" d="M72 152L194 176L86 228z"></path>
2838
+ <path id="FCD35" class="roic" style="fill:#fab8ea" d="M72 152L149 53L194 176z"></path>
2839
+ <path id="ACD35" class="roic" style="fill:#3236c8" d="M187 86L149 53L194 176z"></path>
2840
+ <path id="ADE35" class="roic" style="fill:#ebebe1" d="M187 86L194 176L86 228z"></path>
2841
+ <path id="AEB35" class="roic" style="fill:#fab8ea" d="M187 86L86 228L36 67z"></path>
2842
+ <path id="ABC35" class="roic" style="fill:#960041" d="M187 86L36 67L149 53z"></path>
2843
+ </g>
2844
+ <g id="fr36">
2845
+ <path id="FEB36" class="roic" style="fill:#3236c8" d="M80 152L79 228L34 67z"></path>
2846
+ <path id="FBC36" class="roic" style="fill:#ebebe1" d="M80 152L34 67L153 52z"></path>
2847
+ <path id="FDE36" class="roic" style="fill:#960041" d="M80 152L198 177L79 228z"></path>
2848
+ <path id="FCD36" class="roic" style="fill:#fab8ea" d="M80 152L153 52L198 177z"></path>
2849
+ <path id="ACD36" class="roic" style="fill:#3236c8" d="M178 86L153 52L198 177z"></path>
2850
+ <path id="ADE36" class="roic" style="fill:#ebebe1" d="M178 86L198 177L79 228z"></path>
2851
+ <path id="AEB36" class="roic" style="fill:#fab8ea" d="M178 86L79 228L34 67z"></path>
2852
+ <path id="ABC36" class="roic" style="fill:#960041" d="M178 86L34 67L153 52z"></path>
2853
+ </g>
2854
+ <g id="fr37">
2855
+ <path id="FEB37" class="roic" style="fill:#3236c8" d="M88 151L75 227L33 68z"></path>
2856
+ <path id="FBC37" class="roic" style="fill:#ebebe1" d="M88 151L33 68L158 52z"></path>
2857
+ <path id="FDE37" class="roic" style="fill:#960041" d="M88 151L201 177L75 227z"></path>
2858
+ <path id="FCD37" class="roic" style="fill:#fab8ea" d="M88 151L158 52L201 177z"></path>
2859
+ <path id="ADE37" class="roic" style="fill:#ebebe1" d="M168 86L201 177L75 227z"></path>
2860
+ <path id="AEB37" class="roic" style="fill:#fab8ea" d="M168 86L75 227L33 68z"></path>
2861
+ <path id="ACD37" class="roic" style="fill:#3236c8" d="M168 86L158 52L201 177z"></path>
2862
+ <path id="ABC37" class="roic" style="fill:#960041" d="M168 86L33 68L158 52z"></path>
2863
+ </g>
2864
+ <g id="fr38">
2865
+ <path id="FEB38" class="roic" style="fill:#3236c8" d="M96 151L70 226L34 69z"></path>
2866
+ <path id="FBC38" class="roic" style="fill:#ebebe1" d="M96 151L34 69L163 51z"></path>
2867
+ <path id="FDE38" class="roic" style="fill:#960041" d="M96 151L204 179L70 226z"></path>
2868
+ <path id="FCD38" class="roic" style="fill:#fab8ea" d="M96 151L163 51L204 179z"></path>
2869
+ <path id="ADE38" class="roic" style="fill:#ebebe1" d="M156 85L204 179L70 226z"></path>
2870
+ <path id="AEB38" class="roic" style="fill:#fab8ea" d="M156 85L70 226L34 69z"></path>
2871
+ <path id="ACD38" class="roic" style="fill:#3236c8" d="M156 85L163 51L204 179z"></path>
2872
+ <path id="ABC38" class="roic" style="fill:#960041" d="M156 85L34 69L163 51z"></path>
2873
+ </g>
2874
+ <g id="fr39">
2875
+ <path id="FEB39" class="roic" style="fill:#3236c8" d="M103 151L66 225L35 71z"></path>
2876
+ <path id="FBC39" class="roic" style="fill:#ebebe1" d="M103 151L35 71L167 50z"></path>
2877
+ <path id="FDE39" class="roic" style="fill:#960041" d="M103 151L206 179L66 225z"></path>
2878
+ <path id="FCD39" class="roic" style="fill:#fab8ea" d="M103 151L167 50L206 179z"></path>
2879
+ <path id="ADE39" class="roic" style="fill:#ebebe1" d="M145 85L206 179L66 225z"></path>
2880
+ <path id="AEB39" class="roic" style="fill:#fab8ea" d="M145 85L66 225L35 71z"></path>
2881
+ <path id="ACD39" class="roic" style="fill:#3236c8" d="M145 85L167 50L206 179z"></path>
2882
+ <path id="ABC39" class="roic" style="fill:#960041" d="M145 85L35 71L167 50z"></path>
2883
+ </g>
2884
+ <g id="fr40">
2885
+ <path id="FEB40" class="roic" style="fill:#3236c8" d="M113 151L62 224L37 72z"></path>
2886
+ <path id="FBC40" class="roic" style="fill:#ebebe1" d="M113 151L37 72L171 49z"></path>
2887
+ <path id="FDE40" class="roic" style="fill:#960041" d="M113 151L208 181L62 224z"></path>
2888
+ <path id="FCD40" class="roic" style="fill:#fab8ea" d="M113 151L171 49L208 181z"></path>
2889
+ <path id="ADE40" class="roic" style="fill:#ebebe1" d="M132 85L208 181L62 224z"></path>
2890
+ <path id="AEB40" class="roic" style="fill:#fab8ea" d="M132 85L62 224L37 72z"></path>
2891
+ <path id="ACD40" class="roic" style="fill:#3236c8" d="M132 85L171 49L208 181z"></path>
2892
+ <path id="ABC40" class="roic" style="fill:#960041" d="M132 85L37 72L171 49z"></path>
2893
+ </g>
2894
+ <g id="fr41">
2895
+ <path id="FEB41" class="roic" style="fill:#3236c8" d="M120 151L59 223L40 73z"></path>
2896
+ <path id="FBC41" class="roic" style="fill:#ebebe1" d="M120 151L40 73L174 48z"></path>
2897
+ <path id="FDE41" class="roic" style="fill:#960041" d="M120 151L207 182L59 223z"></path>
2898
+ <path id="FCD41" class="roic" style="fill:#fab8ea" d="M120 151L174 48L207 182z"></path>
2899
+ <path id="ADE41" class="roic" style="fill:#ebebe1" d="M119 85L207 182L59 223z"></path>
2900
+ <path id="AEB41" class="roic" style="fill:#fab8ea" d="M119 85L59 223L40 73z"></path>
2901
+ <path id="ACD41" class="roic" style="fill:#3236c8" d="M119 85L174 48L207 182z"></path>
2902
+ <path id="ABC41" class="roic" style="fill:#960041" d="M119 85L40 73L174 48z"></path>
2903
+ </g>
2904
+ <g id="fr42">
2905
+ <path id="FEB42" class="roic" style="fill:#3236c8" d="M129 151L57 222L43 74z"></path>
2906
+ <path id="FBC42" class="roic" style="fill:#ebebe1" d="M129 151L43 74L178 48z"></path>
2907
+ <path id="FDE42" class="roic" style="fill:#960041" d="M129 151L206 184L57 222z"></path>
2908
+ <path id="FCD42" class="roic" style="fill:#fab8ea" d="M129 151L178 48L206 184z"></path>
2909
+ <path id="ADE42" class="roic" style="fill:#ebebe1" d="M107 85L206 184L57 222z"></path>
2910
+ <path id="AEB42" class="roic" style="fill:#fab8ea" d="M107 85L57 222L43 74z"></path>
2911
+ <path id="ACD42" class="roic" style="fill:#3236c8" d="M107 85L178 48L206 184z"></path>
2912
+ <path id="ABC42" class="roic" style="fill:#960041" d="M107 85L43 74L178 48z"></path>
2913
+ </g>
2914
+ <g id="fr43">
2915
+ <path id="FEB43" class="roic" style="fill:#3236c8" d="M137 152L56 221L48 75z"></path>
2916
+ <path id="FBC43" class="roic" style="fill:#ebebe1" d="M137 152L48 75L181 46z"></path>
2917
+ <path id="FDE43" class="roic" style="fill:#960041" d="M137 152L204 185L56 221z"></path>
2918
+ <path id="FCD43" class="roic" style="fill:#fab8ea" d="M137 152L181 46L204 185z"></path>
2919
+ <path id="ADE43" class="roic" style="fill:#ebebe1" d="M96 85L204 185L56 221z"></path>
2920
+ <path id="AEB43" class="roic" style="fill:#fab8ea" d="M96 85L56 221L48 75z"></path>
2921
+ <path id="ACD43" class="roic" style="fill:#3236c8" d="M96 85L181 46L204 185z"></path>
2922
+ <path id="ABC43" class="roic" style="fill:#960041" d="M96 85L48 75L181 46z"></path>
2923
+ </g>
2924
+ <g id="fr44">
2925
+ <path id="FEB44" class="roic" style="fill:#3236c8" d="M145 151L56 219L54 75z"></path>
2926
+ <path id="FBC44" class="roic" style="fill:#ebebe1" d="M145 151L54 75L184 45z"></path>
2927
+ <path id="FDE44" class="roic" style="fill:#960041" d="M145 151L201 186L56 219z"></path>
2928
+ <path id="FCD44" class="roic" style="fill:#fab8ea" d="M145 151L184 45L201 186z"></path>
2929
+ <path id="ADE44" class="roic" style="fill:#ebebe1" d="M84 85L201 186L56 219z"></path>
2930
+ <path id="AEB44" class="roic" style="fill:#fab8ea" d="M84 85L56 219L54 75z"></path>
2931
+ <path id="ACD44" class="roic" style="fill:#3236c8" d="M84 85L184 45L201 186z"></path>
2932
+ <path id="ABC44" class="roic" style="fill:#960041" d="M84 85L54 75L184 45z"></path>
2933
+ </g>
2934
+ <g id="fr45">
2935
+ <path id="FEB45" class="roic" style="fill:#3236c8" d="M153 152L56 218L58 76z"></path>
2936
+ <path id="FBC45" class="roic" style="fill:#ebebe1" d="M153 152L58 76L184 44z"></path>
2937
+ <path id="FDE45" class="roic" style="fill:#960041" d="M153 152L198 188L56 218z"></path>
2938
+ <path id="FCD45" class="roic" style="fill:#fab8ea" d="M153 152L184 44L198 188z"></path>
2939
+ <path id="ADE45" class="roic" style="fill:#ebebe1" d="M73 86L198 188L56 218z"></path>
2940
+ <path id="AEB45" class="roic" style="fill:#fab8ea" d="M73 86L56 218L58 76z"></path>
2941
+ <path id="ACD45" class="roic" style="fill:#3236c8" d="M73 86L184 44L198 188z"></path>
2942
+ <path id="ABC45" class="roic" style="fill:#960041" d="M73 86L58 76L184 44z"></path>
2943
+ </g>
2944
+ <g id="fr46">
2945
+ <path id="FEB46" class="roic" style="fill:#3236c8" d="M161 152L57 216L65 75z"></path>
2946
+ <path id="FBC46" class="roic" style="fill:#ebebe1" d="M161 152L65 75L184 43z"></path>
2947
+ <path id="FDE46" class="roic" style="fill:#960041" d="M161 152L192 189L57 216z"></path>
2948
+ <path id="FCD46" class="roic" style="fill:#fab8ea" d="M161 152L184 43L192 189z"></path>
2949
+ <path id="ADE46" class="roic" style="fill:#ebebe1" d="M62 86L192 189L57 216z"></path>
2950
+ <path id="AEB46" class="roic" style="fill:#fab8ea" d="M62 86L57 216L65 75z"></path>
2951
+ <path id="ACD46" class="roic" style="fill:#3236c8" d="M62 86L184 43L192 189z"></path>
2952
+ <path id="ABC46" class="roic" style="fill:#960041" d="M62 86L65 75L184 43z"></path>
2953
+ </g>
2954
+ <g id="fr47">
2955
+ <path id="FEB47" class="roic" style="fill:#3236c8" d="M168 152L59 216L72 78z"></path>
2956
+ <path id="FBC47" class="roic" style="fill:#ebebe1" d="M168 152L72 78L184 43z"></path>
2957
+ <path id="FDE47" class="roic" style="fill:#960041" d="M168 152L185 190L59 216z"></path>
2958
+ <path id="FCD47" class="roic" style="fill:#fab8ea" d="M168 152L184 43L185 190z"></path>
2959
+ <path id="ADE47" class="roic" style="fill:#ebebe1" d="M53 86L185 190L59 216z"></path>
2960
+ <path id="AEB47" class="roic" style="fill:#fab8ea" d="M53 86L59 216L72 78z"></path>
2961
+ <path id="ACD47" class="roic" style="fill:#3236c8" d="M53 86L184 43L185 190z"></path>
2962
+ <path id="ABC47" class="roic" style="fill:#960041" d="M53 86L72 78L184 43z"></path>
2963
+ </g>
2964
+ <g id="fr48">
2965
+ <path id="FEB48" class="roic" style="fill:#3236c8" d="M176 153L62 215L78 79z"></path>
2966
+ <path id="FBC48" class="roic" style="fill:#ebebe1" d="M176 153L78 79L184 41z"></path>
2967
+ <path id="ABC48" class="roic" style="fill:#960041" d="M45 86L78 79L184 41z"></path>
2968
+ <path id="FDE48" class="roic" style="fill:#960041" d="M176 153L179 191L62 215z"></path>
2969
+ <path id="FCD48" class="roic" style="fill:#fab8ea" d="M176 153L184 41L179 191z"></path>
2970
+ <path id="ADE48" class="roic" style="fill:#ebebe1" d="M45 86L179 191L62 215z"></path>
2971
+ <path id="AEB48" class="roic" style="fill:#fab8ea" d="M45 86L62 215L78 79z"></path>
2972
+ <path id="ACD48" class="roic" style="fill:#3236c8" d="M45 86L184 41L179 191z"></path>
2973
+ </g>
2974
+ <g id="fr49">
2975
+ <path id="FEB49" class="roic" style="fill:#3236c8" d="M184 154L64 214L85 79z"></path>
2976
+ <path id="FBC49" class="roic" style="fill:#ebebe1" d="M184 154L85 79L183 39z"></path>
2977
+ <path id="ABC49" class="roic" style="fill:#960041" d="M38 87L85 79L183 39z"></path>
2978
+ <path id="FDE49" class="roic" style="fill:#960041" d="M184 154L169 191L64 214z"></path>
2979
+ <path id="ADE49" class="roic" style="fill:#ebebe1" d="M38 87L169 191L64 214z"></path>
2980
+ <path id="AEB49" class="roic" style="fill:#fab8ea" d="M38 87L64 214L85 79z"></path>
2981
+ <path id="FCD49" class="roic" style="fill:#fab8ea" d="M184 154L183 39L169 191z"></path>
2982
+ <path id="ACD49" class="roic" style="fill:#3236c8" d="M38 87L183 39L169 191z"></path>
2983
+ </g>
2984
+ <g id="fr50">
2985
+ <path id="FEB50" class="roic" style="fill:#3236c8" d="M190 154L68 213L92 79z"></path>
2986
+ <path id="FBC50" class="roic" style="fill:#ebebe1" d="M190 154L92 79L180 38z"></path>
2987
+ <path id="ABC50" class="roic" style="fill:#960041" d="M33 88L92 79L180 38z"></path>
2988
+ <path id="FDE50" class="roic" style="fill:#960041" d="M190 154L160 191L68 213z"></path>
2989
+ <path id="ADE50" class="roic" style="fill:#ebebe1" d="M33 88L160 191L68 213z"></path>
2990
+ <path id="AEB50" class="roic" style="fill:#fab8ea" d="M33 88L68 213L92 79z"></path>
2991
+ <path id="FCD50" class="roic" style="fill:#fab8ea" d="M190 154L180 38L160 191z"></path>
2992
+ <path id="ACD50" class="roic" style="fill:#3236c8" d="M33 88L180 38L160 191z"></path>
2993
+ </g>
2994
+ <g id="fr51">
2995
+ <path id="FEB51" class="roic" style="fill:#3236c8" d="M196 154L72 212L100 79z"></path>
2996
+ <path id="FBC51" class="roic" style="fill:#ebebe1" d="M196 154L100 79L177 37z"></path>
2997
+ <path id="ABC51" class="roic" style="fill:#960041" d="M28 89L100 79L177 37z"></path>
2998
+ <path id="FDE51" class="roic" style="fill:#960041" d="M196 154L151 191L72 212z"></path>
2999
+ <path id="ADE51" class="roic" style="fill:#ebebe1" d="M28 89L151 191L72 212z"></path>
3000
+ <path id="AEB51" class="roic" style="fill:#fab8ea" d="M28 89L72 212L100 79z"></path>
3001
+ <path id="FCD51" class="roic" style="fill:#fab8ea" d="M196 154L177 37L151 191z"></path>
3002
+ <path id="ACD51" class="roic" style="fill:#3236c8" d="M28 89L177 37L151 191z"></path>
3003
+ </g>
3004
+ <g id="fr52">
3005
+ <path id="FEB52" class="roic" style="fill:#3236c8" d="M201 155L76 211L106 79z"></path>
3006
+ <path id="FBC52" class="roic" style="fill:#ebebe1" d="M201 155L106 79L173 36z"></path>
3007
+ <path id="ABC52" class="roic" style="fill:#960041" d="M25 90L106 79L173 36z"></path>
3008
+ <path id="FDE52" class="roic" style="fill:#960041" d="M201 155L140 191L76 211z"></path>
3009
+ <path id="ADE52" class="roic" style="fill:#ebebe1" d="M25 90L140 191L76 211z"></path>
3010
+ <path id="AEB52" class="roic" style="fill:#fab8ea" d="M25 90L76 211L106 79z"></path>
3011
+ <path id="FCD52" class="roic" style="fill:#fab8ea" d="M201 155L173 36L140 191z"></path>
3012
+ <path id="ACD52" class="roic" style="fill:#3236c8" d="M25 90L173 36L140 191z"></path>
3013
+ </g>
3014
+ <g id="fr53">
3015
+ <path id="FEB53" class="roic" style="fill:#3236c8" d="M206 156L80 210L114 79z"></path>
3016
+ <path id="FBC53" class="roic" style="fill:#ebebe1" d="M206 156L114 79L169 35z"></path>
3017
+ <path id="ABC53" class="roic" style="fill:#960041" d="M24 91L114 79L169 35z"></path>
3018
+ <path id="FDE53" class="roic" style="fill:#960041" d="M206 156L130 191L80 210z"></path>
3019
+ <path id="ADE53" class="roic" style="fill:#ebebe1" d="M24 91L130 191L80 210z"></path>
3020
+ <path id="AEB53" class="roic" style="fill:#fab8ea" d="M24 91L80 210L114 79z"></path>
3021
+ <path id="FCD53" class="roic" style="fill:#fab8ea" d="M206 156L169 35L130 191z"></path>
3022
+ <path id="ACD53" class="roic" style="fill:#3236c8" d="M24 91L169 35L130 191z"></path>
3023
+ </g>
3024
+ <g id="fr54">
3025
+ <path id="FEB54" class="roic" style="fill:#3236c8" d="M211 156L86 210L121 79z"></path>
3026
+ <path id="FBC54" class="roic" style="fill:#ebebe1" d="M211 156L121 79L164 34z"></path>
3027
+ <path id="ABC54" class="roic" style="fill:#960041" d="M23 91L121 79L164 34z"></path>
3028
+ <path id="ADE54" class="roic" style="fill:#ebebe1" d="M23 91L120 191L86 210z"></path>
3029
+ <path id="AEB54" class="roic" style="fill:#fab8ea" d="M23 91L86 210L121 79z"></path>
3030
+ <path id="FCD54" class="roic" style="fill:#fab8ea" d="M211 156L164 34L120 191z"></path>
3031
+ <path id="ACD54" class="roic" style="fill:#3236c8" d="M23 91L164 34L120 191z"></path>
3032
+ <path id="FDE54" class="roic" style="fill:#960041" d="M211 156L120 191L86 210z"></path>
3033
+ </g>
3034
+ <g id="fr55">
3035
+ <path id="FEB55" class="roic" style="fill:#3236c8" d="M214 157L91 209L130 79z"></path>
3036
+ <path id="FBC55" class="roic" style="fill:#ebebe1" d="M214 157L130 79L158 33z"></path>
3037
+ <path id="ABC55" class="roic" style="fill:#960041" d="M23 92L130 79L158 33z"></path>
3038
+ <path id="ADE55" class="roic" style="fill:#ebebe1" d="M23 92L108 191L91 209z"></path>
3039
+ <path id="AEB55" class="roic" style="fill:#fab8ea" d="M23 92L91 209L130 79z"></path>
3040
+ <path id="FCD55" class="roic" style="fill:#fab8ea" d="M214 157L158 33L108 191z"></path>
3041
+ <path id="ACD55" class="roic" style="fill:#3236c8" d="M23 92L158 33L108 191z"></path>
3042
+ <path id="FDE55" class="roic" style="fill:#960041" d="M214 157L108 191L91 209z"></path>
3043
+ </g>
3044
+ <g id="fr56">
3045
+ <path id="FEB56" class="roic" style="fill:#3236c8" d="M216 158L96 210L137 79z"></path>
3046
+ <path id="FBC56" class="roic" style="fill:#ebebe1" d="M216 158L137 79L152 32z"></path>
3047
+ <path id="ABC56" class="roic" style="fill:#960041" d="M24 93L137 79L152 32z"></path>
3048
+ <path id="ADE56" class="roic" style="fill:#ebebe1" d="M24 93L98 191L96 210z"></path>
3049
+ <path id="AEB56" class="roic" style="fill:#fab8ea" d="M24 93L96 210L137 79z"></path>
3050
+ <path id="FCD56" class="roic" style="fill:#fab8ea" d="M216 158L152 32L98 191z"></path>
3051
+ <path id="ACD56" class="roic" style="fill:#3236c8" d="M24 93L152 32L98 191z"></path>
3052
+ <path id="FDE56" class="roic" style="fill:#960041" d="M216 158L98 191L96 210z"></path>
3053
+ </g>
3054
+ <g id="fr57">
3055
+ <path id="FEB57" class="roic" style="fill:#3236c8" d="M217 158L103 209L144 79z"></path>
3056
+ <path id="FBC57" class="roic" style="fill:#ebebe1" d="M217 158L144 79L144 32z"></path>
3057
+ <path id="ABC57" class="roic" style="fill:#960041" d="M27 94L144 79L144 32z"></path>
3058
+ <path id="ADE57" class="roic" style="fill:#ebebe1" d="M27 94L88 191L103 209z"></path>
3059
+ <path id="AEB57" class="roic" style="fill:#fab8ea" d="M27 94L103 209L144 79z"></path>
3060
+ <path id="FCD57" class="roic" style="fill:#fab8ea" d="M217 158L144 32L88 191z"></path>
3061
+ <path id="ACD57" class="roic" style="fill:#3236c8" d="M27 94L144 32L88 191z"></path>
3062
+ <path id="FDE57" class="roic" style="fill:#960041" d="M217 158L88 191L103 209z"></path>
3063
+ </g>
3064
+ <g id="fr58">
3065
+ <path id="FEB58" class="roic" style="fill:#3236c8" d="M218 159L107 209L151 79z"></path>
3066
+ <path id="ABC58" class="roic" style="fill:#960041" d="M30 95L151 79L137 32z"></path>
3067
+ <path id="ADE58" class="roic" style="fill:#ebebe1" d="M30 95L77 191L107 209z"></path>
3068
+ <path id="AEB58" class="roic" style="fill:#fab8ea" d="M30 95L107 209L151 79z"></path>
3069
+ <path id="FBC58" class="roic" style="fill:#ebebe1" d="M218 159L151 79L137 32z"></path>
3070
+ <path id="FCD58" class="roic" style="fill:#fab8ea" d="M218 159L137 32L77 191z"></path>
3071
+ <path id="ACD58" class="roic" style="fill:#3236c8" d="M30 95L137 32L77 191z"></path>
3072
+ <path id="FDE58" class="roic" style="fill:#960041" d="M218 159L77 191L107 209z"></path>
3073
+ </g>
3074
+ <g id="fr59">
3075
+ <path id="FEB59" class="roic" style="fill:#3236c8" d="M217 160L114 208L158 79z"></path>
3076
+ <path id="ABC59" class="roic" style="fill:#960041" d="M35 96L158 79L130 32z"></path>
3077
+ <path id="ADE59" class="roic" style="fill:#ebebe1" d="M35 96L70 190L114 208z"></path>
3078
+ <path id="AEB59" class="roic" style="fill:#fab8ea" d="M35 96L114 208L158 79z"></path>
3079
+ <path id="FBC59" class="roic" style="fill:#ebebe1" d="M217 160L158 79L130 32z"></path>
3080
+ <path id="FCD59" class="roic" style="fill:#fab8ea" d="M217 160L130 32L70 190z"></path>
3081
+ <path id="ACD59" class="roic" style="fill:#3236c8" d="M35 96L130 32L70 190z"></path>
3082
+ <path id="FDE59" class="roic" style="fill:#960041" d="M217 160L70 190L114 208z"></path>
3083
+ </g>
3084
+ </svg>
3085
+ </div>
3086
+ </div>
3087
+ </body>
3088
+ </html>