@scratch/scratch-gui 11.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +13 -0
- package/.browserslistrc +7 -0
- package/.editorconfig +11 -0
- package/.eslintignore +5 -0
- package/.eslintrc.js +4 -0
- package/.gitattributes +43 -0
- package/.nvmrc +1 -0
- package/.tx/config +8 -0
- package/CHANGELOG.md +5562 -0
- package/LICENSE +12 -0
- package/README.md +300 -0
- package/TRADEMARK +1 -0
- package/commitlint.config.js +4 -0
- package/docs/project_state_diagram.svg +3 -0
- package/docs/project_state_example.png +0 -0
- package/package.json +199 -0
- package/prune-gh-pages.sh +64 -0
- package/release.config.js +19 -0
- package/scripts/.eslintrc.js +8 -0
- package/scripts/prepare.mjs +125 -0
- package/static/favicon.ico +0 -0
- package/static/microbit/scratch-microbit-1.2.0.hex +26350 -0
- package/tsconfig.json +30 -0
- package/tsconfig.test.json +11 -0
- package/webpack.config.js +211 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Copyright (c) 2016, Massachusetts Institute of Technology
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
5
|
+
|
|
6
|
+
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
7
|
+
|
|
8
|
+
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
9
|
+
|
|
10
|
+
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
11
|
+
|
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
package/README.md
ADDED
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# scratch-gui
|
|
2
|
+
|
|
3
|
+
Scratch GUI is a set of React components that comprise the interface for creating and running Scratch 3.0 projects
|
|
4
|
+
|
|
5
|
+
To open the current build in your browser on Github Pages:
|
|
6
|
+
|
|
7
|
+
https://scratchfoundation.github.io/scratch-gui/
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
This requires you to have Git and Node.js installed.
|
|
12
|
+
|
|
13
|
+
In your own node environment/application:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install https://github.com/scratchfoundation/scratch-gui.git
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
If you want to edit/play yourself:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
git clone https://github.com/scratchfoundation/scratch-gui.git
|
|
23
|
+
cd scratch-gui
|
|
24
|
+
npm install
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**You may want to add `--depth=1` to the `git clone` command because there are some [large files in the git repository
|
|
28
|
+
history](https://github.com/scratchfoundation/scratch-gui/issues/5140).**
|
|
29
|
+
|
|
30
|
+
## Getting started
|
|
31
|
+
|
|
32
|
+
Running the project requires Node.js to be installed.
|
|
33
|
+
|
|
34
|
+
## Running
|
|
35
|
+
|
|
36
|
+
Open a Command Prompt or Terminal in the repository and run:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm start
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Then go to [http://localhost:8601/](http://localhost:8601/) - the playground outputs the default GUI component
|
|
43
|
+
|
|
44
|
+
## Developing alongside other Scratch repositories
|
|
45
|
+
|
|
46
|
+
### Getting another repo to point to this code
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
If you wish to develop `scratch-gui` alongside other scratch repositories that depend on it, you may wish
|
|
50
|
+
to have the other repositories use your local `scratch-gui` build instead of fetching the current production
|
|
51
|
+
version of the scratch-gui that is found by default using `npm install`.
|
|
52
|
+
|
|
53
|
+
Here's how to link your local `scratch-gui` code to another project's `node_modules/scratch-gui`.
|
|
54
|
+
|
|
55
|
+
#### Configuration
|
|
56
|
+
|
|
57
|
+
1. In your local `scratch-gui` repository's top level:
|
|
58
|
+
1. Make sure you have run `npm install`
|
|
59
|
+
2. Build the `dist` directory by running `BUILD_MODE=dist npm run build`
|
|
60
|
+
3. Establish a link to this repository by running `npm link`
|
|
61
|
+
|
|
62
|
+
2. From the top level of each repository (such as `scratch-www`) that depends on `scratch-gui`:
|
|
63
|
+
1. Make sure you have run `npm install`
|
|
64
|
+
2. Run `npm link scratch-gui`
|
|
65
|
+
3. Build or run the repository
|
|
66
|
+
|
|
67
|
+
#### Using `npm run watch`
|
|
68
|
+
|
|
69
|
+
Instead of `BUILD_MODE=dist npm run build`, you can use `BUILD_MODE=dist npm run watch` instead. This will watch for
|
|
70
|
+
changes to your `scratch-gui` code, and automatically rebuild when there are changes. Sometimes this has been
|
|
71
|
+
unreliable; if you are having problems, try going back to `BUILD_MODE=dist npm run build` until you resolve them.
|
|
72
|
+
|
|
73
|
+
#### Oh no! It didn't work!
|
|
74
|
+
|
|
75
|
+
If you can't get linking to work right, try:
|
|
76
|
+
|
|
77
|
+
* Follow the recipe above step by step and don't change the order. It is especially important to run `npm install`
|
|
78
|
+
_before_ `npm link` as installing after the linking will reset the linking.
|
|
79
|
+
* Make sure the repositories are siblings on your machine's file tree, like
|
|
80
|
+
`.../.../MY_SCRATCH_DEV_DIRECTORY/scratch-gui/` and `.../.../MY_SCRATCH_DEV_DIRECTORY/scratch-www/`.
|
|
81
|
+
* Consistent node.js version: If you have multiple Terminal tabs or windows open for the different Scratch
|
|
82
|
+
repositories, make sure to use the same node version in all of them.
|
|
83
|
+
* If nothing else works, unlink the repositories by running `npm unlink` in both, and start over.
|
|
84
|
+
|
|
85
|
+
## Testing
|
|
86
|
+
|
|
87
|
+
### Documentation
|
|
88
|
+
|
|
89
|
+
You may want to review the documentation for [Jest](https://facebook.github.io/jest/docs/en/api.html) and
|
|
90
|
+
[Enzyme](http://airbnb.io/enzyme/docs/api/) as you write your tests.
|
|
91
|
+
|
|
92
|
+
See [jest cli docs](https://facebook.github.io/jest/docs/en/cli.html#content) for more options.
|
|
93
|
+
|
|
94
|
+
### Running tests
|
|
95
|
+
|
|
96
|
+
*NOTE: If you're a Windows user, please run these scripts in Windows `cmd.exe` instead of Git Bash/MINGW64.*
|
|
97
|
+
|
|
98
|
+
Before running any tests, make sure you have run `npm install` from this (scratch-gui) repository's top level.
|
|
99
|
+
|
|
100
|
+
#### Main testing command
|
|
101
|
+
|
|
102
|
+
To run linter, unit tests, build, and integration tests, all at once:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm test
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
#### Running unit tests
|
|
109
|
+
|
|
110
|
+
To run unit tests in isolation:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
npm run test:unit
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
To run unit tests in watch mode (watches for code changes and continuously runs tests):
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
npm run test:unit -- --watch
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
You can run a single file of integration tests (in this example, the `button` tests):
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
$(npm bin)/jest --runInBand test/unit/components/button.test.jsx
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### Running integration tests
|
|
129
|
+
|
|
130
|
+
Integration tests use a headless browser to manipulate the actual HTML and javascript that the repo
|
|
131
|
+
produces. You will not see this activity (though you can hear it when sounds are played!).
|
|
132
|
+
|
|
133
|
+
To run the integration tests, you'll first need to install Chrome, Chromium, or a variant, along with Chromedriver.
|
|
134
|
+
|
|
135
|
+
Note that integration tests require you to first create a build that can be loaded in a browser:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
npm run build
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Then, you can run all integration tests:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
npm run test:integration
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Or, you can run a single file of integration tests (in this example, the `backpack` tests):
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
$(npm bin)/jest --runInBand test/integration/backpack.test.js
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
If you want to watch the browser as it runs the test, rather than running headless, use:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
USE_HEADLESS=no $(npm bin)/jest --runInBand test/integration/backpack.test.js
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Troubleshooting
|
|
160
|
+
|
|
161
|
+
### Ignoring optional dependencies
|
|
162
|
+
|
|
163
|
+
When running `npm install`, you can get warnings about optional dependencies:
|
|
164
|
+
|
|
165
|
+
```text
|
|
166
|
+
npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
|
|
167
|
+
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.2.7
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
You can suppress them by adding the `no-optional` switch:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
npm install --no-optional
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Further reading: [Stack Overflow](https://stackoverflow.com/questions/36725181/not-compatible-with-your-operating-system-or-architecture-fsevents1-0-11)
|
|
177
|
+
|
|
178
|
+
### Resolving dependencies
|
|
179
|
+
|
|
180
|
+
When installing for the first time, you can get warnings that need to be resolved:
|
|
181
|
+
|
|
182
|
+
```text
|
|
183
|
+
npm WARN eslint-config-scratch@5.0.0 requires a peer of babel-eslint@^8.0.1 but none was installed.
|
|
184
|
+
npm WARN eslint-config-scratch@5.0.0 requires a peer of eslint@^4.0 but none was installed.
|
|
185
|
+
npm WARN scratch-paint@0.2.0-prerelease.20190318170811 requires a peer of react-intl-redux@^0.7 but none was installed.
|
|
186
|
+
npm WARN scratch-paint@0.2.0-prerelease.20190318170811 requires a peer of react-responsive@^4 but none was installed.
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
You can check which versions are available:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
npm view react-intl-redux@0.* version
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
You will need to install the required version:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
npm install --no-optional --save-dev react-intl-redux@^0.7
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
The dependency itself might have more missing dependencies, which will show up like this:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
user@machine:~/sources/scratch/scratch-gui (491-translatable-library-objects)$ npm install --no-optional --save-dev react-intl-redux@^0.7
|
|
205
|
+
scratch-gui@0.1.0 /media/cuideigin/Linux/sources/scratch/scratch-gui
|
|
206
|
+
├── react-intl-redux@0.7.0
|
|
207
|
+
└── UNMET PEER DEPENDENCY react-responsive@5.0.0
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
You will need to install those as well:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
npm install --no-optional --save-dev react-responsive@^5.0.0
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Further reading: [Stack Overflow](https://stackoverflow.com/questions/46602286/npm-requires-a-peer-of-but-all-peers-are-in-package-json-and-node-modules)
|
|
217
|
+
|
|
218
|
+
## Troubleshooting
|
|
219
|
+
|
|
220
|
+
If you run into npm install errors, try these steps:
|
|
221
|
+
|
|
222
|
+
1. run `npm cache clean --force`
|
|
223
|
+
2. Delete the node_modules directory
|
|
224
|
+
3. Delete package-lock.json
|
|
225
|
+
4. run `npm install` again
|
|
226
|
+
|
|
227
|
+
## Publishing to GitHub Pages
|
|
228
|
+
|
|
229
|
+
You can publish the GUI to github.io so that others on the Internet can view it.
|
|
230
|
+
[Read the wiki for a step-by-step guide.](https://github.com/scratchfoundation/scratch-gui/wiki/Publishing-to-GitHub-Pages)
|
|
231
|
+
|
|
232
|
+
## Understanding the project state machine
|
|
233
|
+
|
|
234
|
+
Since so much code throughout scratch-gui depends on the state of the project, which goes through many different
|
|
235
|
+
phases of loading, displaying and saving, we created a "finite state machine" to make it clear which state it is in at
|
|
236
|
+
any moment. This is contained in the file src/reducers/project-state.js .
|
|
237
|
+
|
|
238
|
+
It can be hard to understand the code in src/reducers/project-state.js . There are several types of data and functions
|
|
239
|
+
used, which relate to each other:
|
|
240
|
+
|
|
241
|
+
### Loading states
|
|
242
|
+
|
|
243
|
+
These include state constant strings like:
|
|
244
|
+
|
|
245
|
+
* `NOT_LOADED` (the default state),
|
|
246
|
+
* `ERROR`,
|
|
247
|
+
* `FETCHING_WITH_ID`,
|
|
248
|
+
* `LOADING_VM_WITH_ID`,
|
|
249
|
+
* `REMIXING`,
|
|
250
|
+
* `SHOWING_WITH_ID`,
|
|
251
|
+
* `SHOWING_WITHOUT_ID`,
|
|
252
|
+
* etc.
|
|
253
|
+
|
|
254
|
+
### Transitions
|
|
255
|
+
|
|
256
|
+
These are names for the action which causes a state change. Some examples are:
|
|
257
|
+
|
|
258
|
+
* `START_FETCHING_NEW`,
|
|
259
|
+
* `DONE_FETCHING_WITH_ID`,
|
|
260
|
+
* `DONE_LOADING_VM_WITH_ID`,
|
|
261
|
+
* `SET_PROJECT_ID`,
|
|
262
|
+
* `START_AUTO_UPDATING`,
|
|
263
|
+
|
|
264
|
+
### How transitions relate to loading states
|
|
265
|
+
|
|
266
|
+
Like this diagram of the project state machine shows, various transition actions can move us from one loading state to
|
|
267
|
+
another:
|
|
268
|
+
|
|
269
|
+

|
|
270
|
+
|
|
271
|
+
_Note: for clarity, the diagram above excludes states and transitions relating to error handling._
|
|
272
|
+
|
|
273
|
+
#### Example
|
|
274
|
+
|
|
275
|
+
Here's an example of how states transition.
|
|
276
|
+
|
|
277
|
+
Suppose a user clicks on a project, and the page starts to load with URL `https://scratch.mit.edu/projects/123456`.
|
|
278
|
+
|
|
279
|
+
Here's what will happen in the project state machine:
|
|
280
|
+
|
|
281
|
+

|
|
282
|
+
|
|
283
|
+
1. When the app first mounts, the project state is `NOT_LOADED`.
|
|
284
|
+
2. The `SET_PROJECT_ID` redux action is dispatched (from src/lib/project-fetcher-hoc.jsx), with `projectId` set to
|
|
285
|
+
`123456`. This transitions the state from `NOT_LOADED` to `FETCHING_WITH_ID`.
|
|
286
|
+
3. The `FETCHING_WITH_ID` state. In src/lib/project-fetcher-hoc.jsx, the `projectId` value `123456` is used to request
|
|
287
|
+
the data for that project from the server.
|
|
288
|
+
4. When the server responds with the data, src/lib/project-fetcher-hoc.jsx dispatches the `DONE_FETCHING_WITH_ID`
|
|
289
|
+
action, with `projectData` set. This transitions the state from `FETCHING_WITH_ID` to `LOADING_VM_WITH_ID`.
|
|
290
|
+
5. The `LOADING_VM_WITH_ID` state. In src/lib/vm-manager-hoc.jsx, we load the `projectData` into Scratch's virtual
|
|
291
|
+
machine ("the vm").
|
|
292
|
+
6. When loading is done, src/lib/vm-manager-hoc.jsx dispatches the `DONE_LOADING_VM_WITH_ID` action. This transitions
|
|
293
|
+
the state from `LOADING_VM_WITH_ID` to `SHOWING_WITH_ID`.
|
|
294
|
+
7. The `SHOWING_WITH_ID` state. Now the project appears normally and is playable and editable.
|
|
295
|
+
|
|
296
|
+
## Donate
|
|
297
|
+
|
|
298
|
+
We provide [Scratch](https://scratch.mit.edu) free of charge, and want to keep it that way! Please consider making a
|
|
299
|
+
[donation](https://www.scratchfoundation.org/donate) to support our continued engineering, design, community, and
|
|
300
|
+
resource development efforts. Donations of any size are appreciated. Thank you!
|
package/TRADEMARK
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
The Scratch trademarks, including the Scratch name, logo, the Scratch Cat, Gobo, Pico, Nano, Tera and Giga graphics (the "Marks"), are property of the Massachusetts Institute of Technology (MIT). Marks may not be used to endorse or promote products derived from this software without specific prior written permission.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1381px" height="1012px" viewBox="-0.5 -0.5 1381 1012" content="<mxfile host="www.draw.io" modified="2020-02-04T16:31:44.889Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" etag="8a2X5Jj65jOGG04xBBh1" version="12.6.4" type="device"><diagram name="Page-1" id="58cdce13-f638-feb5-8d6f-7d28b1aa9fa0">7V1Zd6O4Ev41OffJHImdRydxujOT7XSSXuYlh9g4YcY2GUw6yfz6KxYBEqtBErjbeYkthMCo9FXVV6XiSDlZv3/y7ZfnS2/hrI5ksHg/Uk6PZBmqEKJ/YctH0gKBFrc8+e4iacsabt3/nKQRJK2v7sLZEh0Dz1sF7gvZOPc2G2ceEG2273tvZLeltyKv+mI/JVcEWcPt3F45hW7f3EXwnP6MXPfPjvv0nFza1JIDj/b8nyffe90k1zuSlWX0Fx9e23ispP/22V54b7kmZXaknPieF8Sf1u8nzip8uPixxeedVRxN79t3NkGbExRTfrTgo6ZB+LgAS2OSjPDTXr06+CdENxp84IeDRkDzgL4cPwfrFWqD6CP6IS/h8W1g+8FtYAfh8aW7Wp14K8+PTlRA9Bd2DnzvHyd3ZLlMjkSPzllkg8ZPJzw099buPPm8sh+d1XH6rPFIG28TXdbbBGf22l2F4vfV8Rf2xk6aE1GDcvK97O7slfu0QW1z9AwddPB44fpIyFwvbNx6r+EUHhcfNH5yjh8477mm5MF/cry1E/gfqEtyVMeLIlklE6gnUvGWyZySND3npA232YmUP6VDZzONPiSTXT7x/z3CCw98/uv8z5/G2fftuxxsLieqWZzsBVoYyVfPD569J29jr2ZZ6/H81f+ZzljW5cLzXpLGv50g+EievP0aeKTkOO9u8D2cV0lLvv3IHTl9T6Y8+vKBv2zQz82dFH79kT+WnRZ9w+dVzhqaVn/uVKyJZJqQZD85Qc3jS55e+Mhq5993Vnbg/iSxps9knn9Tzq//Mh+Xp856onvw6uz934lSspL1VZAIPjHL+r+vHj4w2UYTNUUdIHh5zw6iT0/h/9Prq9nDxfX09Pzq08PXy4dv53efH85P8eDoXuPx494FgUKLIyAFoLDewiXkIjCeJgfW7mIRiZrvoJuzH6Ohwul88dxNED037fhIO60GhgyG8R0VlmmqTJLx87ohE5eaZVO5zidAUlVFjQdrPffJcDfhT8zGope+t1xukUzSspLeRCvxqRL4StHBUxu3bV/sTStxgmXiVCtJ8dDk5R59uqWtPFtl11959mIbzrLv/Y1m/9QO7PDRbBBMoSewrhTrqptpkn9Sw709u4Fz+2JH2POGrClqafjzBDdltahPQ4Ge1+vTkWhQBtoyXY4f1PecskwVaF5b6ry0JSzMbbOy7KUfIdDzGlICWGGyVZKEQg9HvHF8Fz2ycCZ7aFG9qEULfQzWGjQ6der79keuQ6I2KkFW0wxC1CBlQxcwGdR0Rx/i63dF51LZM3RG2j2eT7ByN84Er5roaLi8tCJc3s7uHm6+XP8xO7nLQXUGg28uWowpmp4vwivIur0OgS0BxPBxdUXPkVgPjSZBFbxVWRl1xoNpQtJPMJiYEhMKUHUOlkXps1E64CapNQV5GcxwrvQxyEN5C+WAUub4jxVQ0E2E97HXQIJM27m7eUKtentYwT5db1hBLommkvSDzAZVVBKrhKGKJsgaY2VUxWOYxg6kB09TrNyx5WKOFWTG1EmhgbpGDhHfaHJWJjq72nW6SbkQ9XadpdZ152TXyYxguACzd9Mvd3na5uz8YvZwfxO27A1mtkRJTF+wML5kA1DCyQYmddLFmMgWB6CsWvjMpevqOpatWWtZOtAg3WgQjQKlSRqTGowHMfbFnhcbNTCKSraKaB1JxICX7okiBmezu5PPoe6hWN7MdEd4VyBi90oxsYwpGE2KSVGxrZAiQT/NxFfzGA2yxTKkUCVqYgIKTyViDJa+tw5HdJAX4B9iCiNRpnRMQbMGVqVQeEyhk/ZUCO0pAWjs5P2Gh9g4sjhfqNGTxR25u7IK6S0otF1f4cp2gNhSFW7ygdnWiQDX93ddALffjZCGQ0oR5vjB1jfidlUFZtmNIRNi4wVJD3SXQUj4kTf67PhOOKnbzf/C6yBjwdlubSQDWrUrlTYX7nYPeVD2phOsB31kO2mqbpJOPWDi1dNxGgnIVv5PhIuPfwpzKz630q9m3x5OZ2fT+4u7/mu6Z1ZGu3V9sKDE0BFCszJkW3mcyxqw50ugQ2MxsTpYT7l5rX/6zmYxDVOLw5FenE3ckjx3s3a6W84bnp+VswzqZqfeImrBOuhDsQ6lcK13mLTxhoPrQr21k8LeQu3FBbEKB9dzQZVKpJoLOpg4eM3UWjgQ9qSDsEvMwWapWyNCPJdU/koMGaEk0cJZ2q+roCXreTBuhjVuBqeHtC700C+3P6MuVWEAIqhf7Kwp1Z4fOVOlbMv4k71Vus25AiwzNTUyIiP308BpqgBJK1ADMNHI5eHAIXeDwRzWAMmoz3QvXdI9cIQdLYxza4FMnsIoowlCi/K/k9Spqpymwgl452rhhPLjvbOeyiXNEoSCd9cPt9Ovsz0DsY6eQ82irgMxS4MWISITyAbIdIlKeoKKKOdCrZSvfo5EYz6dAFeCySAU3xq6JhTlKu3slrCNpVylgRSSE/Yekxt2w/vfOFF8HURyJCB8cnCturlWpj4gb1zuGHThIflYO2239RGeVeZoMfetzJa+lczatepkE6kGKVpqw/Y9ur9p8Td4qvXRXm22QVAhowcA4uTyPKu2944j04B0I11r6NhZxHkjChOTS5MlqsaIbIiyubQu+/x+D7KqNaCOq6IIbEri7Lc55f7mdHoX4sfx7Oz6y+zh5Mss/n5yffPjN4aPeCFVwgeSWquUIerJWfDgmcqDWYOy2oTlBRWlHVRACQCTtL+Sc2sAo2wDX/dkyF7Igl38sSALK4OoHFkup1f304sUYPYGS7I9wnJ6gucvHD/X+Sz64wI8emMiHTAU0m7BPkBfzlshRwWSZYL8nyoMnIa1YgAgXUNdV9vaMqZMARQAewRQeMCxAFR1nK4fgxgD1PT+7roMnkj6cGzwJB6Q6i2hsNCabJDQwahWClQhWlC5VF4yf1hXJCis0oHepdQBO0gKK8VkkBQqgYg9bGM07UZYda530M8yYl6Dqh/wVJdxZAE8X2aX598PmNO42uq8L6iRkMOm0qMmqSTGTFS00oRhTJdN3b0xJjNeZDZMTLOZwdwPKp9NhdppqKpUHCPGr94JAfR1tAbyWzNr+/Nhv3E8WTSPlOOlR+/6cQCyxi3lumlSLLTOBMp0XbLIyL/Ox1wqlbYucT1moTy5ZSyPMo2MJtuIgNpSCGNmJZVv5Rce1VNIoFKs+kQnuj9MKAOuwMaNH2dZdPPXhr5qCKh1Gy1QWvK1fzU8HvW6y5UqKMykSK/QVOUc8IX0eEuiikI+ubtXyAsA+eWJ7mzdaWQ0VwP11h1M5bjrCeiSAuxBXpvNfqGidyzhEDaXHFYBmQPKiEfT0AKnCoRaEhCWBtpUHaNrwaHbz9ffyusNHZIHBZTtUbATO9zGrC7Kt4e+jVjXPA2LlqzSkoUFkmVRBXySc2u0biaqlTGhneha3nyLphiSSiKNKsuSBXMMPrW1tYKBKSphw5TMXDRS2e0yjHZ+aJR/o8pK7V039Oe0r4NXLZJoX0cZr1O3qW1vMxKFc95ac1lcgHc0Mao+iIkhUaZA044jlvUIKwhIAXtDts6mfFtHtKkDVyM8KV6dLGIYP8zDtvRxmD/0tvThzR+1S+GdvuYPnRhj1Js/JdYJadRUzkwjZyCquKCB43+pDqcmlJFtUXUdvrYCr53wMQmwl0Eg4Yo/XsiVyEPVt4Ogp9LHm8Go/aZAMpR82TwML/ytAmPYbD/iZSCgHs8yd84gYuUpn8p810LrYqsqazjsV2KDb27xL8EuNpcjZ/jmIRz6ZeQ54CAzRViaHDCjXHENsnG0R05dcdtDQ5S6dDmzwxA+AeailqFSXRSDsp4YpeAYNDvZEKku9K+qyJFy6P36i9jfKh8i4eMM/cjNW1Flk0xnZAPPikZX/5hwKf9R/ir0YeumQbmDXbdrRhDnuHhr409mAd67Ym4B2xsw0TD69ReSTYS3VnFK/S7brj/69G/2iKjUk21o9aoGm+A3lVqhwBQR+Tu2LKrCN4a+Cy9/ONC/AkrnDE//6uMpndNQKDDHmuS2a7fZYsB4GyQseTtcXcrKSHYjydVcCoN3yTRuRsqs/a7XYXO3VbHl0atP8bunGv0NXQEUH6SxcTiIQXmwQbULu88KKVW0OywOsmXh/mxzVX61BXcMQlfEl1Fz9EtG9uN2D5TTP+RgFjExi7IX4WIGePCSgro8pF2EX8uX2kZKhxB5DwtH0M5KOhlUbVlqmRnVWb1Bm0GO296VrBFvYVQQTpmFAS2TTNHsyWgKMCKqs9P6GRFxIaQGE6IfIVAQWcZvhmtnTRxeDzdOpTwCskIdUCkDyQL5WECYyAa6lfs1x1BurnWdhZHRGNXMOgedvYcZ5xzUdMWGyVzgUaNSOLDQ9CUCoCQT42qSQtSSE1ZUJcVP1mo9LB92UOoHpT6QUk8T0odLQB+2JNqYa01j6rNRReMNYiPR0YoQvzqtEfR7l5hW64ucIe2swEL6DhPtTKeUqxIUFhTHS4N5ULxOug6a8/fVnDRXObzi1Mfzjr9ulbL4vfUGlwbck9feQJku5Wc01XqhThCRGIxz/8Vo9cNer8alX6fzTdUio+hsIvNpvZ+P0gE46ntetHqN3JUq1zItPLQV0O8J7PBzD7YEl13gw9sS+O3HI3iPyw5ZgGrenoB4X7m4TEDsdoun0LuZGVQdGUNpsDKo/k0V6GQV1vUnrZLi2QpJIav0Hi/eyQC8KtmRBW/K/clfqOINe2snBqfa+IOpUGQETu3obe9okkYOLUuWsIxEvACZsxwN4ijQsDlpsG3aZQzXJgn2+hX1SYIHTmZMnIwB+NlR6KvvhZKRrW80Nc+X3sIJe/wf</diagram></mxfile>" style="background-color: rgb(255, 255, 255);"><defs/><g><ellipse cx="720" cy="15" rx="11" ry="11" fill="#000000" stroke="#ff0000" transform="rotate(90,720,15)" pointer-events="all"/><path d="M 400 440 Q 400 440 400 533.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 400 538.88 L 396.5 531.88 L 400 533.63 L 403.5 531.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 468px; margin-left: 430px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">DONE_LOADING_VM_WITH_ID</font></div></div></div></foreignObject><text x="430" y="472" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_LOADING_VM_WITH_ID</text></switch></g><rect x="320" y="380" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 410px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font><span style="font-size: 11px">LOADING_VM_WITH_ID</span><br /><font style="font-size: 9px">loads projectData into vm</font><br /></font></div></div></div></foreignObject><text x="400" y="414" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">LOADING_VM_WITH_ID...</text></switch></g><path d="M 656.96 123 Q 657 170 528.5 170 Q 400 170 400 212.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 400 217.88 L 396.5 210.88 L 400 212.63 L 403.5 210.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 150px; margin-left: 630px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px ; line-height: 120%">SET_PROJECT_ID<br />with projectId > 0<br /></font></div></div></div></foreignObject><text x="630" y="154" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">SET_PROJECT_ID...</text></switch></g><path d="M 720 120 L 720 212.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 720 217.88 L 716.5 210.88 L 720 212.63 L 723.5 210.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 186px; margin-left: 718px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px ; line-height: 120%">SET_PROJECT_ID<br />with projectId == 0<br /></font></div></div></div></foreignObject><text x="718" y="190" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">SET_PROJECT_ID...</text></switch></g><path d="M 780 120 Q 780 180 910 180 Q 1040 180 1040 373.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1040 378.88 L 1036.5 371.88 L 1040 373.63 L 1043.5 371.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 150px; margin-left: 843px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">START_LOADING_VM_FILE_UPLOAD</font></div></div></div></foreignObject><text x="843" y="154" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_LOADING_VM_FILE_UPLOAD</text></switch></g><rect x="640" y="60" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 90px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 10px">NOT_LOADED</font></div></div></div></foreignObject><text x="720" y="94" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">NOT_LOADED</text></switch></g><path d="M 400 279 L 400 373.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 400 378.88 L 396.5 371.88 L 400 373.63 L 403.5 371.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 313px; margin-left: 399px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">DONE_FETCHING_WITH_ID<br />sets projectData</font></div></div></div></foreignObject><text x="399" y="316" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_FETCHING_WITH_ID...</text></switch></g><rect x="320" y="219" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 249px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font><span style="font-size: 11px">FETCHING_WITH_ID</span><br /><font style="font-size: 9px">gets projectData from server</font><br /></font></div></div></div></foreignObject><text x="400" y="253" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">FETCHING_WITH_ID...</text></switch></g><path d="M 720 440 Q 720 490 864 490 Q 1008 490 1008 534.65" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1008 539.9 L 1004.5 532.9 L 1008 534.65 L 1011.5 532.9 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 473px; margin-left: 760px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font><span style="font-size: 10px">DONE_LOADING_VM_WITHOUT_ID</span><br /><span style="font-size: 10px">sets projectId = 0</span><br /><i><font style="font-size: 8px">[note: setting projectId here isn't necessary]</font></i><br /></font></div></div></div></foreignObject><text x="760" y="477" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_LOADING_VM_WITHOUT_ID...</text></switch></g><rect x="640" y="380" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 410px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 10px">LOADING_VM_NEW_DEFAULT<br /><span style="font-size: 9px">loads projectData into vm</span><br /></font></div></div></div></foreignObject><text x="720" y="414" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">LOADING_VM_NEW_DEFAULT...</text></switch></g><path d="M 720 30 L 720 57.76" fill="none" stroke="#ff0000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 715.5 49.88 L 720 58.88 L 724.5 49.88" fill="none" stroke="#ff0000" stroke-miterlimit="10" pointer-events="all"/><path d="M 720 279 L 720 373.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 720 378.88 L 716.5 371.88 L 720 373.63 L 723.5 371.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 309px; margin-left: 720px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">DONE_FETCHING_DEFAULT<br />sets projectData<br /></font></div></div></div></foreignObject><text x="720" y="313" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_FETCHING_DEFAULT...</text></switch></g><rect x="640" y="219" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 249px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font><span style="font-size: 10px">FETCHING_NEW_DEFAULT</span><br /><font style="font-size: 9px">gets default projectData</font><br /></font></div></div></div></foreignObject><text x="720" y="253" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">FETCHING_NEW_DEFAULT...</text></switch></g><path d="M 1040 440 Q 1040 440 1040 533.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1040 538.88 L 1036.5 531.88 L 1040 533.63 L 1043.5 531.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 466px; margin-left: 981px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">DONE_LOADING_VM_WITHOUT_ID<br />sets projectId = 0<br /></font></div></div></div></foreignObject><text x="981" y="469" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_LOADING_VM_WITHOUT_ID...</text></switch></g><path d="M 1120 425 Q 1290 425 1290 717.5 Q 1290 1010 695 1010 Q 100 1010 100 768.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 100 763.12 L 103.5 770.12 L 100 768.37 L 96.5 770.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 450px; margin-left: 1180px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">DONE_LOADING_VM_TO_SAVE</font></div></div></div></foreignObject><text x="1180" y="454" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_LOADING_VM_TO_SAVE</text></switch></g><rect x="960" y="380" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 410px; margin-left: 961px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-size: 10px">LOADING_VM_FILE_UPLOAD</span><br /><font style="font-size: 9px"><font style="font-size: 9px">loads project data into vm.</font><br /><i><font style="font-size: 8px">Note: projectData object is never set</font></i><br /></font></div></div></div></foreignObject><text x="1040" y="414" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">LOADING_VM_FILE_UPLOAD...</text></switch></g><path d="M 480 570 Q 570 570 570 409.5 Q 570 249 633.63 249" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 638.88 249 L 631.88 252.5 L 633.63 249 L 631.88 245.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 510px; margin-left: 590px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px ; line-height: 120%">SET_PROJECT_ID<br />with projectId == 0<br />or, START_FETCHING_NEW<br /></font></div></div></div></foreignObject><text x="590" y="514" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">SET_PROJECT_ID...</text></switch></g><path d="M 400 600 Q 400 600 400 693.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 400 698.88 L 396.5 691.88 L 400 693.63 L 403.5 691.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 681px; margin-left: 401px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">START_UPDATING_BEFORE_CREATING_COPY</font></div></div></div></foreignObject><text x="401" y="684" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_UPDATING_BEFORE_CREATING_COPY</text></switch></g><path d="M 320 547.98 Q 320 547.98 167.65 547.98" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 162.4 547.98 L 169.4 544.48 L 167.65 547.98 L 169.4 551.48 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 545px; margin-left: 244px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; border: 1px solid #FFFFFF; white-space: nowrap; "><font style="font-size: 10px">START_MANUAL_UPDATING</font></div></div></div></foreignObject><text x="244" y="549" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_MANUAL_UPDATING</text></switch></g><path d="M 320.16 579.84 Q 132.5 579.83 132.48 693.81" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 132.48 699.06 L 128.98 692.06 L 132.48 693.81 L 135.98 692.06 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 650px; margin-left: 90px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; border: 1px solid #FFFFFF; white-space: nowrap; "><span style="font-size: 10px">START_AUTO_UPDATING</span></div></div></div></foreignObject><text x="90" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_AUTO_UPDATING</text></switch></g><path d="M 356.16 539.28 Q 356.17 410 166.37 410" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 161.12 410 L 168.12 406.5 L 166.37 410 L 168.12 413.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 410px; margin-left: 245px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; border: 1px solid #FFFFFF; white-space: nowrap; "><span style="font-size: 10px">START_REMIXING</span></div></div></div></foreignObject><text x="245" y="414" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_REMIXING</text></switch></g><path d="M 420 600 Q 420 670 550 670 Q 680 670 680 693.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 680 698.88 L 676.5 691.88 L 680 693.63 L 683.5 691.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 662px; margin-left: 523px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">START_UPDATING_BEFORE_CREATING_NEW</font></div></div></div></foreignObject><text x="523" y="666" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_UPDATING_BEFORE_CREATING_NEW</text></switch></g><path d="M 480 555 Q 530 555 530 409.5 Q 530 264 486.37 264" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 481.12 264 L 488.12 260.5 L 486.37 264 L 488.12 267.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 506px; margin-left: 480px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">SET_PROJECT_ID<br />with projectId > 0</font></div></div></div></foreignObject><text x="480" y="510" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">SET_PROJECT_ID...</text></switch></g><path d="M 454.72 600.24 Q 454.67 660 882.33 660 Q 1310 660 1310 527.5 Q 1310 395 1126.37 395" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1121.12 395 L 1128.12 391.5 L 1126.37 395 L 1128.12 398.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 624px; margin-left: 555px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">START_LOADING_VM_FILE_UPLOAD</font></div></div></div></foreignObject><text x="555" y="628" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_LOADING_VM_FILE_UPLOAD</text></switch></g><rect x="320" y="540" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 570px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 11px">SHOWING_WITH_ID</font></div></div></div></foreignObject><text x="400" y="574" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">SHOWING_WITH_ID</text></switch></g><path d="M 637.44 582.92 L 630 582.92 L 485.25 582.92" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 480 582.92 L 487 579.42 L 485.25 582.92 L 487 586.42 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 588px; margin-left: 575px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; border: 1px solid #FFFFFF; white-space: nowrap; "><font style="font-size: 10px">DONE_CREATING_NEW<br />sets projectId<br /></font></div></div></div></foreignObject><text x="575" y="592" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_CREATING_NEW...</text></switch></g><rect x="640" y="540" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 570px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font><span style="font-size: 11px">CREATING_NEW</span><br /><font style="font-size: 9px">sends project data to server,<br />gets project id</font><br /></font></div></div></div></foreignObject><text x="720" y="574" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">CREATING_NEW...</text></switch></g><path d="M 958.24 580.02 L 801 580 L 807.37 580" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 802.12 580 L 809.12 576.5 L 807.37 580 L 809.12 583.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 580px; margin-left: 890px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; border: 1px solid #FFFFFF; white-space: nowrap; "><font style="font-size: 10px">START_CREATING_NEW</font></div></div></div></foreignObject><text x="890" y="583" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_CREATING_NEW</text></switch></g><path d="M 1080 540 Q 1080 540 1080 446.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1080 441.12 L 1083.5 448.12 L 1080 446.37 L 1076.5 448.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 510px; margin-left: 1150px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">START_LOADING_VM_FILE_UPLOAD</font></div></div></div></foreignObject><text x="1150" y="514" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_LOADING_VM_FILE_UPLOAD</text></switch></g><path d="M 960 555 Q 820 555 820 532.5 Q 820 510 710 510 Q 600 510 600 379.5 Q 600 249 486.37 249" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 481.12 249 L 488.12 245.5 L 486.37 249 L 488.12 252.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 543px; margin-left: 889px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">SET_PROJECT_ID<br />with projectId > 0</font></div></div></div></foreignObject><text x="889" y="547" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">SET_PROJECT_ID...</text></switch></g><path d="M 980 540 Q 980 510 925 510 Q 870 510 870 387 Q 870 264 806.37 264" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 801.12 264 L 808.12 260.5 L 806.37 264 L 808.12 267.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 420px; margin-left: 880px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><span style="font-size: 10px">START_FETCHING_NEW</span></div></div></div></foreignObject><text x="880" y="424" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">START_FETCHING_NEW</text></switch></g><rect x="960" y="540" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 570px; margin-left: 961px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 11px">SHOWING_WITHOUT_ID</font></div></div></div></foreignObject><text x="1040" y="574" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">SHOWING_WITHOUT_ID</text></switch></g><path d="M 160 425 Q 341.33 425 341.28 533.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 341.28 538.88 L 337.78 531.88 L 341.28 533.63 L 344.78 531.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 438px; margin-left: 218px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; border: 1px solid #FFFFFF; white-space: nowrap; "><span style="font-size: 10px">DONE_REMIXING</span><br style="font-size: 10px" /><span style="font-size: 10px">sets projectId</span></div></div></div></foreignObject><text x="218" y="442" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_REMIXING...</text></switch></g><rect x="0" y="380" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 410px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-size: 11px">REMIXING</span><br /><div style="font-size: 9px"><font style="font-size: 9px">sends project data to server,</font></div><div style="font-size: 9px"><font style="font-size: 9px">gets project id</font></div></div></div></div></foreignObject><text x="80" y="414" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">REMIXING...</text></switch></g><path d="M 162.72 562.02 Q 162.72 562.02 313.63 562" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 562 L 311.88 565.5 L 313.63 562 L 311.88 558.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 561px; margin-left: 226px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; border: 1px solid #FFFFFF; white-space: nowrap; "><font style="font-size: 10px">DONE_UPDATING</font></div></div></div></foreignObject><text x="226" y="565" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_UPDATING</text></switch></g><rect x="0" y="540" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 570px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-size: 11px">MANUAL</span><font style="font-size: 11px">_UPDATING<br /><span style="font-size: 9px">sends project data to server</span><br /></font></div></div></div></foreignObject><text x="80" y="574" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">MANUAL_UPDATING...</text></switch></g><path d="M 144.8 699.7 Q 144.83 590 313.63 589.98" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 589.98 L 311.88 593.48 L 313.63 589.98 L 311.88 586.48 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 670px; margin-left: 184px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">DONE_UPDATING<br /></font></div></div></div></foreignObject><text x="184" y="674" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_UPDATING
</text></switch></g><rect x="0" y="700" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 730px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-size: 11px">AUTO</span><font style="font-size: 11px">_UPDATING<br /><span style="font-size: 9px">sends project data to server</span><br /></font></div></div></div></foreignObject><text x="80" y="734" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">AUTO_UPDATING...</text></switch></g><path d="M 400 760 Q 400 760 400 853.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 400 858.88 L 396.5 851.88 L 400 853.63 L 403.5 851.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 780px; margin-left: 400px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">DONE_UPDATING_BEFORE_COPY</font></div></div></div></foreignObject><text x="400" y="784" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_UPDATING_BEFORE_COPY</text></switch></g><rect x="320" y="700" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 730px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 11px">UPDATING_BEFORE_COPY<br /><span style="font-size: 9px">sends project data to server</span><br /></font></div></div></div></foreignObject><text x="400" y="734" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">UPDATING_BEFORE_COPY...</text></switch></g><path d="M 800 730 Q 1380 730 1380 489.5 Q 1380 249 806.37 249" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 801.12 249 L 808.12 245.5 L 806.37 249 L 808.12 252.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 726px; margin-left: 913px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; border: 1px solid #FFFFFF; white-space: nowrap; "><font style="font-size: 10px">DONE_UPDATING_BEFORE_NEW</font></div></div></div></foreignObject><text x="913" y="730" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_UPDATING_BEFORE_NEW</text></switch></g><rect x="640" y="700" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 730px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-size: 11px">UPDATING_BEFORE_NEW<br /></span><span style="font-size: 9px">sends project data to server</span><span style="font-size: 11px"><br /></span></div></div></div></foreignObject><text x="720" y="734" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">UPDATING_BEFORE_NEW...</text></switch></g><path d="M 320 890 Q 230 890 230 775 Q 230 660 285.71 660 Q 341.42 660 341.44 607.03" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 341.44 601.78 L 344.94 608.78 L 341.44 607.03 L 337.94 608.78 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 870px; margin-left: 252px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 10px">DONE_CREATING_COPY<br />sets projectId<br /></font></div></div></div></foreignObject><text x="252" y="874" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DONE_CREATING_COPY...</text></switch></g><rect x="320" y="860" width="160" height="60" rx="14.4" ry="14.4" fill="#ffffc0" stroke="#ff0000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 890px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 11px">CREATING_COPY<br /><span style="font-size: 9px">sends project data to server,</span><br style="font-size: 9px" /><span style="font-size: 9px">gets project id</span><br /></font></div></div></div></foreignObject><text x="400" y="894" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">CREATING_COPY...</text></switch></g></g></svg>
|
|
Binary file
|