diff --git a/.gitmodules b/.gitmodules
index 339cb8a471..0000f1d57a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,9 @@
[submodule "submodules/v86"]
path = submodules/v86
url = git@github.com:copy/v86.git
+[submodule "submodules/twisp"]
+ path = submodules/twisp
+ url = git@github.com:MercuryWorkshop/twisp.git
+[submodule "submodules/epoxy-tls"]
+ path = submodules/epoxy-tls
+ url = git@github.com:MercuryWorkshop/epoxy-tls.git
diff --git a/doc/devmeta/track-comments.md b/doc/devmeta/track-comments.md
index 1c373262e2..260d7f3330 100644
--- a/doc/devmeta/track-comments.md
+++ b/doc/devmeta/track-comments.md
@@ -57,3 +57,6 @@ Comments beginning with `// track:`. See
It may be applicable to write an iterator in the
future, or something will come up that require
these to be handled with a modular approach instead.
+- `track: checkpoint`
+ A location where some statement about the state of the
+ software must hold true.
diff --git a/src/backend/src/modules/selfhosted/SelfHostedModule.js b/src/backend/src/modules/selfhosted/SelfHostedModule.js
index 6ec4b6e2ba..a10989428e 100644
--- a/src/backend/src/modules/selfhosted/SelfHostedModule.js
+++ b/src/backend/src/modules/selfhosted/SelfHostedModule.js
@@ -117,10 +117,18 @@ class SelfHostedModule extends AdvancedBase {
prefix: '/builtin/dev-center',
path: path_.resolve(__dirname, RELATIVE_PATH, 'src/dev-center'),
},
+ {
+ prefix: '/builtin/emulator/image',
+ path: path_.resolve(__dirname, RELATIVE_PATH, 'src/emulator/image'),
+ },
{
prefix: '/builtin/emulator',
path: path_.resolve(__dirname, RELATIVE_PATH, 'src/emulator/dist'),
},
+ {
+ prefix: '/vendor/v86/bios',
+ path: path_.resolve(__dirname, RELATIVE_PATH, 'submodules/v86/bios'),
+ },
{
prefix: '/vendor/v86',
path: path_.resolve(__dirname, RELATIVE_PATH, 'submodules/v86/build'),
diff --git a/src/backend/src/om/entitystorage/SubdomainES.js b/src/backend/src/om/entitystorage/SubdomainES.js
index 2932db5ae9..27a543e0ca 100644
--- a/src/backend/src/om/entitystorage/SubdomainES.js
+++ b/src/backend/src/om/entitystorage/SubdomainES.js
@@ -39,7 +39,9 @@ class SubdomainES extends BaseES {
}
},
async upsert (entity, extra) {
- await this._check_max_subdomains();
+ if ( ! extra.old_entity ) {
+ await this._check_max_subdomains();
+ }
return await this.upstream.upsert(entity, extra);
},
diff --git a/src/backend/src/services/BaseService.js b/src/backend/src/services/BaseService.js
index 83ba918a8f..1b169fae6d 100644
--- a/src/backend/src/services/BaseService.js
+++ b/src/backend/src/services/BaseService.js
@@ -16,11 +16,11 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see