@budibase/server 1.0.123 → 1.0.125
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/builder/assets/index.3d890df7.js +1299 -0
- package/builder/assets/index.89795487.css +6 -0
- package/builder/assets/{vendor.8e34a169.js → vendor.5240f480.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +695 -1678
- package/coverage/coverage-final.json +28 -43
- package/coverage/lcov-report/api/controllers/analytics.js.html +8 -3
- package/coverage/lcov-report/api/controllers/apikeys.js.html +9 -4
- package/coverage/lcov-report/api/controllers/auth.js.html +8 -3
- package/coverage/lcov-report/api/controllers/automation.js.html +8 -3
- package/coverage/lcov-report/api/controllers/backup.js.html +8 -3
- package/coverage/lcov-report/api/controllers/cloud.js.html +8 -3
- package/coverage/lcov-report/api/controllers/component.js.html +8 -3
- package/coverage/lcov-report/api/controllers/datasource.js.html +11 -6
- package/coverage/lcov-report/api/controllers/dev.js.html +8 -3
- package/coverage/lcov-report/api/controllers/index.html +16 -26
- package/coverage/lcov-report/api/controllers/integration.js.html +8 -3
- package/coverage/lcov-report/api/controllers/layout.js.html +8 -3
- package/coverage/lcov-report/api/controllers/metadata.js.html +8 -3
- package/coverage/lcov-report/api/controllers/migrations.js.html +8 -3
- package/coverage/lcov-report/api/controllers/permission.js.html +8 -3
- package/coverage/lcov-report/api/controllers/query/index.html +16 -26
- package/coverage/lcov-report/api/controllers/query/validation.js.html +8 -3
- package/coverage/lcov-report/api/controllers/role.js.html +10 -5
- package/coverage/lcov-report/api/controllers/routing.js.html +9 -4
- package/coverage/lcov-report/api/controllers/row/external.js.html +8 -3
- package/coverage/lcov-report/api/controllers/row/index.html +25 -35
- package/coverage/lcov-report/api/controllers/row/internal.js.html +32 -24
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +21 -16
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -19
- package/coverage/lcov-report/api/controllers/row/utils.js.html +33 -19
- package/coverage/lcov-report/api/controllers/screen.js.html +9 -4
- package/coverage/lcov-report/api/controllers/script.js.html +8 -3
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +55 -50
- package/coverage/lcov-report/api/controllers/table/external.js.html +8 -3
- package/coverage/lcov-report/api/controllers/table/index.html +19 -44
- package/coverage/lcov-report/api/controllers/table/index.js.html +20 -15
- package/coverage/lcov-report/api/controllers/templates.js.html +8 -3
- package/coverage/lcov-report/api/controllers/user.js.html +8 -3
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +8 -3
- package/coverage/lcov-report/api/controllers/view/index.html +8 -3
- package/coverage/lcov-report/api/controllers/view/index.js.html +10 -5
- package/coverage/lcov-report/api/controllers/view/utils.js.html +8 -3
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +8 -3
- package/coverage/lcov-report/api/controllers/webhook.js.html +10 -5
- package/coverage/lcov-report/api/index.html +18 -13
- package/coverage/lcov-report/api/index.js.html +28 -8
- package/coverage/lcov-report/api/routes/analytics.js.html +8 -3
- package/coverage/lcov-report/api/routes/apikeys.js.html +8 -3
- package/coverage/lcov-report/api/routes/auth.js.html +8 -3
- package/coverage/lcov-report/api/routes/automation.js.html +8 -3
- package/coverage/lcov-report/api/routes/backup.js.html +8 -3
- package/coverage/lcov-report/api/routes/cloud.js.html +8 -3
- package/coverage/lcov-report/api/routes/component.js.html +8 -3
- package/coverage/lcov-report/api/routes/datasource.js.html +8 -3
- package/coverage/lcov-report/api/routes/deploy.js.html +8 -3
- package/coverage/lcov-report/api/routes/dev.js.html +9 -4
- package/coverage/lcov-report/api/routes/index.html +13 -68
- package/coverage/lcov-report/api/routes/integration.js.html +8 -3
- package/coverage/lcov-report/api/routes/layout.js.html +8 -3
- package/coverage/lcov-report/api/routes/metadata.js.html +8 -3
- package/coverage/lcov-report/api/routes/migrations.js.html +8 -3
- package/coverage/lcov-report/api/routes/permission.js.html +8 -3
- package/coverage/lcov-report/api/routes/query.js.html +8 -3
- package/coverage/lcov-report/api/routes/role.js.html +8 -3
- package/coverage/lcov-report/api/routes/routing.js.html +8 -3
- package/coverage/lcov-report/api/routes/screen.js.html +8 -3
- package/coverage/lcov-report/api/routes/script.js.html +8 -3
- package/coverage/lcov-report/api/routes/table.js.html +8 -3
- package/coverage/lcov-report/api/routes/templates.js.html +8 -3
- package/coverage/lcov-report/api/routes/user.js.html +8 -3
- package/coverage/lcov-report/api/routes/utils/index.html +8 -3
- package/coverage/lcov-report/api/routes/utils/validators.js.html +8 -3
- package/coverage/lcov-report/api/routes/view.js.html +8 -3
- package/coverage/lcov-report/api/routes/webhook.js.html +8 -3
- package/coverage/lcov-report/automations/actions.js.html +21 -7
- package/coverage/lcov-report/automations/automationUtils.js.html +64 -23
- package/coverage/lcov-report/automations/bullboard.js.html +8 -3
- package/coverage/lcov-report/automations/index.html +27 -37
- package/coverage/lcov-report/automations/index.js.html +8 -3
- package/coverage/lcov-report/automations/steps/bash.js.html +8 -3
- package/coverage/lcov-report/automations/steps/delay.js.html +8 -3
- package/coverage/lcov-report/automations/steps/discord.js.html +8 -3
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +8 -3
- package/coverage/lcov-report/automations/steps/executeScript.js.html +8 -3
- package/coverage/lcov-report/automations/steps/filter.js.html +8 -3
- package/coverage/lcov-report/automations/steps/index.html +31 -41
- package/coverage/lcov-report/automations/steps/integromat.js.html +8 -3
- package/coverage/lcov-report/{api/routes/static.js.html → automations/steps/loop.js.html} +70 -80
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +9 -4
- package/coverage/lcov-report/automations/steps/queryRows.js.html +9 -4
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +8 -3
- package/coverage/lcov-report/automations/steps/serverLog.js.html +8 -3
- package/coverage/lcov-report/automations/steps/slack.js.html +8 -3
- package/coverage/lcov-report/automations/steps/updateRow.js.html +8 -3
- package/coverage/lcov-report/automations/steps/utils.js.html +14 -9
- package/coverage/lcov-report/automations/steps/zapier.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/index.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +8 -3
- package/coverage/lcov-report/automations/triggers.js.html +16 -11
- package/coverage/lcov-report/block-navigation.js +8 -0
- package/coverage/lcov-report/constants/index.html +12 -7
- package/coverage/lcov-report/constants/index.js.html +55 -32
- package/coverage/lcov-report/constants/layouts.js.html +8 -3
- package/coverage/lcov-report/constants/screens.js.html +8 -3
- package/coverage/lcov-report/db/inMemoryView.js.html +8 -3
- package/coverage/lcov-report/db/index.html +8 -3
- package/coverage/lcov-report/db/index.js.html +9 -4
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +20 -15
- package/coverage/lcov-report/db/linkedRows/index.html +8 -3
- package/coverage/lcov-report/db/linkedRows/index.js.html +22 -17
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +12 -7
- package/coverage/lcov-report/db/newid.js.html +11 -6
- package/coverage/lcov-report/db/utils.js.html +84 -79
- package/coverage/lcov-report/events/AutomationEmitter.js.html +14 -9
- package/coverage/lcov-report/events/index.html +8 -3
- package/coverage/lcov-report/events/index.js.html +9 -4
- package/coverage/lcov-report/events/utils.js.html +18 -13
- package/coverage/lcov-report/index.html +125 -120
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +8 -3
- package/coverage/lcov-report/integrations/tests/index.html +8 -3
- package/coverage/lcov-report/middleware/appInfo.js.html +8 -3
- package/coverage/lcov-report/middleware/builder.js.html +8 -3
- package/coverage/lcov-report/middleware/currentapp.js.html +65 -15
- package/coverage/lcov-report/middleware/index.html +25 -50
- package/coverage/lcov-report/middleware/joi-validator.js.html +9 -4
- package/coverage/lcov-report/middleware/publicApi.js.html +8 -3
- package/coverage/lcov-report/middleware/resourceId.js.html +8 -3
- package/coverage/lcov-report/middleware/selfhost.js.html +9 -4
- package/coverage/lcov-report/middleware/utils.js.html +8 -3
- package/coverage/lcov-report/sorter.js +26 -0
- package/coverage/lcov-report/threads/automation.js.html +581 -90
- package/coverage/lcov-report/threads/index.html +30 -40
- package/coverage/lcov-report/threads/query.js.html +9 -4
- package/coverage/lcov-report/threads/utils.js.html +17 -9
- package/coverage/lcov-report/utilities/bcrypt.js.html +8 -3
- package/coverage/lcov-report/utilities/budibaseDir.js.html +8 -3
- package/coverage/lcov-report/utilities/centralPath.js.html +8 -3
- package/coverage/lcov-report/utilities/csvParser.js.html +10 -5
- package/coverage/lcov-report/utilities/global.js.html +9 -4
- package/coverage/lcov-report/utilities/index.html +8 -3
- package/coverage/lcov-report/utilities/index.js.html +11 -6
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +32 -9
- package/coverage/lcov-report/utilities/queue/index.html +12 -7
- package/coverage/lcov-report/utilities/routing/index.html +8 -3
- package/coverage/lcov-report/utilities/routing/index.js.html +8 -3
- package/coverage/lcov-report/utilities/rowProcessor/index.html +8 -3
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +48 -43
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +18 -13
- package/coverage/lcov-report/utilities/scriptRunner.js.html +8 -3
- package/coverage/lcov-report/utilities/security.js.html +9 -4
- package/coverage/lcov-report/utilities/statusCodes.js.html +8 -3
- package/coverage/lcov-report/utilities/usageQuota/index.html +24 -34
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +44 -39
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +8 -3
- package/coverage/lcov-report/utilities/users.js.html +8 -3
- package/coverage/lcov-report/utilities/workerRequests.js.html +9 -4
- package/coverage/lcov.info +1144 -2875
- package/dist/api/controllers/application.js +145 -73
- package/dist/api/controllers/deploy/index.js +68 -36
- package/dist/api/controllers/public/applications.js +29 -9
- package/dist/api/controllers/public/queries.js +27 -7
- package/dist/api/controllers/public/rows.js +32 -12
- package/dist/api/controllers/public/tables.js +2 -2
- package/dist/api/controllers/public/users.js +8 -8
- package/dist/api/controllers/public/utils.js +1 -1
- package/dist/api/controllers/query/import/index.js +3 -3
- package/dist/api/controllers/query/index.js +57 -44
- package/dist/api/controllers/row/ExternalRequest.js +27 -27
- package/dist/api/controllers/row/index.js +83 -60
- package/dist/api/controllers/row/internal.js +2 -1
- package/dist/api/controllers/row/utils.js +2 -1
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +3 -0
- package/dist/api/controllers/table/bulkFormula.js +2 -1
- package/dist/api/controllers/table/internal.js +41 -35
- package/dist/api/controllers/table/utils.js +271 -229
- package/dist/api/index.js +5 -0
- package/dist/api/routes/application.js +39 -13
- package/dist/api/routes/index.js +61 -56
- package/dist/api/routes/public/index.js +6 -9
- package/dist/api/routes/public/queries.js +1 -1
- package/dist/api/routes/public/rows.js +1 -1
- package/dist/api/routes/public/tables.js +3 -3
- package/dist/api/routes/public/users.js +1 -1
- package/dist/api/routes/row.js +43 -17
- package/dist/api/routes/static.js +40 -13
- package/dist/api/routes/tests/utilities/TestFunctions.js +75 -33
- package/dist/app.js +8 -4
- package/dist/automations/actions.js +3 -0
- package/dist/automations/automationUtils.js +10 -0
- package/dist/automations/steps/createRow.js +12 -12
- package/dist/automations/steps/deleteRow.js +13 -16
- package/dist/automations/steps/loop.js +51 -0
- package/dist/automations/tests/utilities/index.js +13 -11
- package/dist/automations/utils.js +187 -133
- package/dist/constants/index.js +5 -0
- package/dist/definitions/datasource.js +1 -0
- package/dist/environment.js +2 -3
- package/dist/index.js +4 -0
- package/dist/integrations/base/sql.js +2 -2
- package/dist/integrations/base/sqlTable.js +2 -2
- package/dist/integrations/googlesheets.js +1 -1
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/microsoftSqlServer.js +8 -8
- package/dist/integrations/mysql.js +9 -9
- package/dist/integrations/oracle.js +7 -7
- package/dist/integrations/postgres.js +7 -7
- package/dist/integrations/queries/sql.js +2 -2
- package/dist/integrations/redis.js +158 -0
- package/dist/integrations/rest.js +1 -1
- package/dist/middleware/authorized.js +51 -51
- package/dist/middleware/currentapp.js +15 -1
- package/dist/migrations/functions/appUrls.js +1 -1
- package/dist/migrations/functions/developerQuota.js +49 -0
- package/dist/migrations/functions/publishedAppsQuota.js +47 -0
- package/dist/migrations/functions/quotas1.js +6 -2
- package/dist/migrations/functions/usageQuotas/index.js +0 -4
- package/dist/migrations/functions/usageQuotas/syncApps.js +4 -7
- package/dist/migrations/functions/usageQuotas/syncDevelopers.js +24 -0
- package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +26 -0
- package/dist/migrations/functions/usageQuotas/syncRows.js +5 -8
- package/dist/migrations/index.js +17 -1
- package/dist/package.json +14 -8
- package/dist/threads/automation.js +149 -27
- package/dist/threads/index.js +36 -10
- package/dist/threads/utils.js +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/utilities/queue/inMemoryQueue.js +6 -1
- package/nodemon.json +1 -1
- package/package.json +15 -9
- package/scripts/dev/manage.js +2 -0
- package/src/api/controllers/{application.js → application.ts} +118 -51
- package/src/api/controllers/deploy/{index.js → index.ts} +53 -29
- package/src/api/controllers/public/applications.ts +2 -2
- package/src/api/controllers/public/queries.ts +1 -1
- package/src/api/controllers/public/rows.ts +1 -1
- package/src/api/controllers/query/{index.js → index.ts} +51 -48
- package/src/api/controllers/row/ExternalRequest.ts +1 -1
- package/src/api/controllers/row/{index.js → index.ts} +24 -17
- package/src/api/controllers/row/internal.js +2 -1
- package/src/api/controllers/row/utils.js +4 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +3 -0
- package/src/api/controllers/table/bulkFormula.js +1 -1
- package/src/api/controllers/table/{internal.js → internal.ts} +30 -26
- package/src/api/controllers/table/{utils.js → utils.ts} +86 -69
- package/src/api/index.js +5 -0
- package/src/api/routes/{application.js → application.ts} +8 -14
- package/src/api/routes/index.ts +60 -0
- package/src/api/routes/public/index.ts +1 -4
- package/src/api/routes/{row.js → row.ts} +7 -15
- package/src/api/routes/{static.js → static.ts} +11 -11
- package/src/api/routes/tests/misc.spec.js +39 -37
- package/src/api/routes/tests/utilities/{TestFunctions.js → TestFunctions.ts} +57 -33
- package/src/app.ts +1 -2
- package/src/automations/actions.js +3 -0
- package/src/automations/automationUtils.js +12 -0
- package/src/automations/steps/{createRow.js → createRow.ts} +9 -15
- package/src/automations/steps/{deleteRow.js → deleteRow.ts} +10 -16
- package/src/automations/steps/loop.js +50 -0
- package/src/automations/tests/automation.spec.js +0 -1
- package/src/automations/tests/{createRow.spec.js → createRow.spec.ts} +4 -15
- package/src/automations/tests/{deleteRow.spec.js → deleteRow.spec.ts} +3 -5
- package/src/automations/tests/utilities/index.js +12 -10
- package/src/automations/{utils.js → utils.ts} +39 -28
- package/src/constants/index.js +6 -0
- package/src/definitions/common.ts +1 -0
- package/src/definitions/datasource.ts +1 -0
- package/src/environment.js +2 -3
- package/src/index.ts +3 -0
- package/src/integrations/index.ts +4 -0
- package/src/integrations/redis.ts +152 -0
- package/src/integrations/tests/redis.spec.js +60 -0
- package/src/middleware/{authorized.js → authorized.ts} +20 -14
- package/src/middleware/currentapp.js +16 -1
- package/src/middleware/tests/currentapp.spec.js +8 -4
- package/src/migrations/functions/developerQuota.ts +15 -0
- package/src/migrations/functions/publishedAppsQuota.ts +13 -0
- package/src/migrations/functions/tests/quotas1.spec.js +0 -2
- package/src/migrations/functions/usageQuotas/index.ts +0 -5
- package/src/migrations/functions/usageQuotas/syncApps.ts +3 -6
- package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
- package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
- package/src/migrations/functions/usageQuotas/syncRows.ts +3 -6
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +34 -0
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +40 -0
- package/src/migrations/index.ts +13 -1
- package/src/threads/automation.js +196 -34
- package/src/threads/{index.js → index.ts} +18 -14
- package/src/threads/utils.js +1 -0
- package/src/utilities/queue/inMemoryQueue.js +7 -1
- package/tsconfig.build.json +10 -0
- package/tsconfig.json +2 -2
- package/builder/assets/index.68a7f4e3.css +0 -6
- package/builder/assets/index.8d4a5b33.js +0 -1291
- package/coverage/lcov-report/api/controllers/application.js.html +0 -1436
- package/coverage/lcov-report/api/controllers/query/index.js.html +0 -713
- package/coverage/lcov-report/api/controllers/row/index.js.html +0 -524
- package/coverage/lcov-report/api/controllers/table/internal.js.html +0 -620
- package/coverage/lcov-report/api/controllers/table/utils.js.html +0 -1331
- package/coverage/lcov-report/api/routes/application.js.html +0 -179
- package/coverage/lcov-report/api/routes/index.js.html +0 -266
- package/coverage/lcov-report/api/routes/row.js.html +0 -908
- package/coverage/lcov-report/automations/steps/createRow.js.html +0 -380
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +0 -347
- package/coverage/lcov-report/automations/utils.js.html +0 -665
- package/coverage/lcov-report/middleware/authorized.js.html +0 -458
- package/coverage/lcov-report/middleware/usageQuota.js.html +0 -572
- package/coverage/lcov-report/threads/index.js.html +0 -296
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +0 -359
- package/dist/middleware/usageQuota.js +0 -154
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utilities/usageQuota/index.js +0 -86
- package/src/api/routes/index.js +0 -62
- package/src/middleware/tests/usageQuota.spec.js +0 -120
- package/src/middleware/usageQuota.js +0 -164
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +0 -41
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +0 -45
- package/src/utilities/tests/usageQuota/usageQuota.spec.js +0 -72
- package/src/utilities/usageQuota/index.js +0 -93
|
@@ -1,1436 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for api/controllers/application.js</title>
|
|
7
|
-
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
-
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
-
<style type='text/css'>
|
|
13
|
-
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
-
}
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
|
|
19
|
-
<body>
|
|
20
|
-
<div class='wrapper'>
|
|
21
|
-
<div class='pad1'>
|
|
22
|
-
<h1><a href="../../index.html">All files</a> / <a href="index.html">api/controllers</a> application.js</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">80.76% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>168/208</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">60.25% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>47/78</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">88.46% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>23/26</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">81.18% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>164/202</span>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</div>
|
|
54
|
-
<p class="quiet">
|
|
55
|
-
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
-
</p>
|
|
57
|
-
</div>
|
|
58
|
-
<div class='status-line high'></div>
|
|
59
|
-
<pre><table class="coverage">
|
|
60
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
61
|
-
<a name='L2'></a><a href='#L2'>2</a>
|
|
62
|
-
<a name='L3'></a><a href='#L3'>3</a>
|
|
63
|
-
<a name='L4'></a><a href='#L4'>4</a>
|
|
64
|
-
<a name='L5'></a><a href='#L5'>5</a>
|
|
65
|
-
<a name='L6'></a><a href='#L6'>6</a>
|
|
66
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
|
67
|
-
<a name='L8'></a><a href='#L8'>8</a>
|
|
68
|
-
<a name='L9'></a><a href='#L9'>9</a>
|
|
69
|
-
<a name='L10'></a><a href='#L10'>10</a>
|
|
70
|
-
<a name='L11'></a><a href='#L11'>11</a>
|
|
71
|
-
<a name='L12'></a><a href='#L12'>12</a>
|
|
72
|
-
<a name='L13'></a><a href='#L13'>13</a>
|
|
73
|
-
<a name='L14'></a><a href='#L14'>14</a>
|
|
74
|
-
<a name='L15'></a><a href='#L15'>15</a>
|
|
75
|
-
<a name='L16'></a><a href='#L16'>16</a>
|
|
76
|
-
<a name='L17'></a><a href='#L17'>17</a>
|
|
77
|
-
<a name='L18'></a><a href='#L18'>18</a>
|
|
78
|
-
<a name='L19'></a><a href='#L19'>19</a>
|
|
79
|
-
<a name='L20'></a><a href='#L20'>20</a>
|
|
80
|
-
<a name='L21'></a><a href='#L21'>21</a>
|
|
81
|
-
<a name='L22'></a><a href='#L22'>22</a>
|
|
82
|
-
<a name='L23'></a><a href='#L23'>23</a>
|
|
83
|
-
<a name='L24'></a><a href='#L24'>24</a>
|
|
84
|
-
<a name='L25'></a><a href='#L25'>25</a>
|
|
85
|
-
<a name='L26'></a><a href='#L26'>26</a>
|
|
86
|
-
<a name='L27'></a><a href='#L27'>27</a>
|
|
87
|
-
<a name='L28'></a><a href='#L28'>28</a>
|
|
88
|
-
<a name='L29'></a><a href='#L29'>29</a>
|
|
89
|
-
<a name='L30'></a><a href='#L30'>30</a>
|
|
90
|
-
<a name='L31'></a><a href='#L31'>31</a>
|
|
91
|
-
<a name='L32'></a><a href='#L32'>32</a>
|
|
92
|
-
<a name='L33'></a><a href='#L33'>33</a>
|
|
93
|
-
<a name='L34'></a><a href='#L34'>34</a>
|
|
94
|
-
<a name='L35'></a><a href='#L35'>35</a>
|
|
95
|
-
<a name='L36'></a><a href='#L36'>36</a>
|
|
96
|
-
<a name='L37'></a><a href='#L37'>37</a>
|
|
97
|
-
<a name='L38'></a><a href='#L38'>38</a>
|
|
98
|
-
<a name='L39'></a><a href='#L39'>39</a>
|
|
99
|
-
<a name='L40'></a><a href='#L40'>40</a>
|
|
100
|
-
<a name='L41'></a><a href='#L41'>41</a>
|
|
101
|
-
<a name='L42'></a><a href='#L42'>42</a>
|
|
102
|
-
<a name='L43'></a><a href='#L43'>43</a>
|
|
103
|
-
<a name='L44'></a><a href='#L44'>44</a>
|
|
104
|
-
<a name='L45'></a><a href='#L45'>45</a>
|
|
105
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
|
106
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
|
107
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
|
108
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
|
109
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
|
110
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
|
111
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
|
112
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
|
113
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
|
114
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
|
115
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
|
116
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
|
117
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
|
118
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
|
119
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
|
120
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
|
121
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
|
122
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
|
123
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
|
124
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
|
125
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
|
126
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
|
127
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
|
128
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
|
129
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
|
130
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
|
131
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
|
132
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
|
133
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
|
134
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
|
135
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
|
136
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
|
137
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
|
138
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
|
139
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
|
140
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
|
141
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
|
142
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
|
143
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
|
144
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
|
145
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
|
146
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
|
147
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
|
148
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
|
149
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
|
150
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
|
151
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
|
152
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
|
153
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
|
154
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
|
155
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
|
156
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
|
157
|
-
<a name='L98'></a><a href='#L98'>98</a>
|
|
158
|
-
<a name='L99'></a><a href='#L99'>99</a>
|
|
159
|
-
<a name='L100'></a><a href='#L100'>100</a>
|
|
160
|
-
<a name='L101'></a><a href='#L101'>101</a>
|
|
161
|
-
<a name='L102'></a><a href='#L102'>102</a>
|
|
162
|
-
<a name='L103'></a><a href='#L103'>103</a>
|
|
163
|
-
<a name='L104'></a><a href='#L104'>104</a>
|
|
164
|
-
<a name='L105'></a><a href='#L105'>105</a>
|
|
165
|
-
<a name='L106'></a><a href='#L106'>106</a>
|
|
166
|
-
<a name='L107'></a><a href='#L107'>107</a>
|
|
167
|
-
<a name='L108'></a><a href='#L108'>108</a>
|
|
168
|
-
<a name='L109'></a><a href='#L109'>109</a>
|
|
169
|
-
<a name='L110'></a><a href='#L110'>110</a>
|
|
170
|
-
<a name='L111'></a><a href='#L111'>111</a>
|
|
171
|
-
<a name='L112'></a><a href='#L112'>112</a>
|
|
172
|
-
<a name='L113'></a><a href='#L113'>113</a>
|
|
173
|
-
<a name='L114'></a><a href='#L114'>114</a>
|
|
174
|
-
<a name='L115'></a><a href='#L115'>115</a>
|
|
175
|
-
<a name='L116'></a><a href='#L116'>116</a>
|
|
176
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
|
177
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
|
178
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
|
179
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
|
180
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
|
181
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
|
182
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
|
183
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
|
184
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
|
185
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
|
186
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
|
187
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
|
188
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
|
189
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
|
190
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
|
191
|
-
<a name='L132'></a><a href='#L132'>132</a>
|
|
192
|
-
<a name='L133'></a><a href='#L133'>133</a>
|
|
193
|
-
<a name='L134'></a><a href='#L134'>134</a>
|
|
194
|
-
<a name='L135'></a><a href='#L135'>135</a>
|
|
195
|
-
<a name='L136'></a><a href='#L136'>136</a>
|
|
196
|
-
<a name='L137'></a><a href='#L137'>137</a>
|
|
197
|
-
<a name='L138'></a><a href='#L138'>138</a>
|
|
198
|
-
<a name='L139'></a><a href='#L139'>139</a>
|
|
199
|
-
<a name='L140'></a><a href='#L140'>140</a>
|
|
200
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
|
201
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
|
202
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
|
203
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
|
204
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
|
205
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
|
206
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
207
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
208
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
209
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
210
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
211
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
212
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
213
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
214
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
215
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
|
216
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
|
217
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
|
218
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
|
219
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
|
220
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
|
221
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
|
222
|
-
<a name='L163'></a><a href='#L163'>163</a>
|
|
223
|
-
<a name='L164'></a><a href='#L164'>164</a>
|
|
224
|
-
<a name='L165'></a><a href='#L165'>165</a>
|
|
225
|
-
<a name='L166'></a><a href='#L166'>166</a>
|
|
226
|
-
<a name='L167'></a><a href='#L167'>167</a>
|
|
227
|
-
<a name='L168'></a><a href='#L168'>168</a>
|
|
228
|
-
<a name='L169'></a><a href='#L169'>169</a>
|
|
229
|
-
<a name='L170'></a><a href='#L170'>170</a>
|
|
230
|
-
<a name='L171'></a><a href='#L171'>171</a>
|
|
231
|
-
<a name='L172'></a><a href='#L172'>172</a>
|
|
232
|
-
<a name='L173'></a><a href='#L173'>173</a>
|
|
233
|
-
<a name='L174'></a><a href='#L174'>174</a>
|
|
234
|
-
<a name='L175'></a><a href='#L175'>175</a>
|
|
235
|
-
<a name='L176'></a><a href='#L176'>176</a>
|
|
236
|
-
<a name='L177'></a><a href='#L177'>177</a>
|
|
237
|
-
<a name='L178'></a><a href='#L178'>178</a>
|
|
238
|
-
<a name='L179'></a><a href='#L179'>179</a>
|
|
239
|
-
<a name='L180'></a><a href='#L180'>180</a>
|
|
240
|
-
<a name='L181'></a><a href='#L181'>181</a>
|
|
241
|
-
<a name='L182'></a><a href='#L182'>182</a>
|
|
242
|
-
<a name='L183'></a><a href='#L183'>183</a>
|
|
243
|
-
<a name='L184'></a><a href='#L184'>184</a>
|
|
244
|
-
<a name='L185'></a><a href='#L185'>185</a>
|
|
245
|
-
<a name='L186'></a><a href='#L186'>186</a>
|
|
246
|
-
<a name='L187'></a><a href='#L187'>187</a>
|
|
247
|
-
<a name='L188'></a><a href='#L188'>188</a>
|
|
248
|
-
<a name='L189'></a><a href='#L189'>189</a>
|
|
249
|
-
<a name='L190'></a><a href='#L190'>190</a>
|
|
250
|
-
<a name='L191'></a><a href='#L191'>191</a>
|
|
251
|
-
<a name='L192'></a><a href='#L192'>192</a>
|
|
252
|
-
<a name='L193'></a><a href='#L193'>193</a>
|
|
253
|
-
<a name='L194'></a><a href='#L194'>194</a>
|
|
254
|
-
<a name='L195'></a><a href='#L195'>195</a>
|
|
255
|
-
<a name='L196'></a><a href='#L196'>196</a>
|
|
256
|
-
<a name='L197'></a><a href='#L197'>197</a>
|
|
257
|
-
<a name='L198'></a><a href='#L198'>198</a>
|
|
258
|
-
<a name='L199'></a><a href='#L199'>199</a>
|
|
259
|
-
<a name='L200'></a><a href='#L200'>200</a>
|
|
260
|
-
<a name='L201'></a><a href='#L201'>201</a>
|
|
261
|
-
<a name='L202'></a><a href='#L202'>202</a>
|
|
262
|
-
<a name='L203'></a><a href='#L203'>203</a>
|
|
263
|
-
<a name='L204'></a><a href='#L204'>204</a>
|
|
264
|
-
<a name='L205'></a><a href='#L205'>205</a>
|
|
265
|
-
<a name='L206'></a><a href='#L206'>206</a>
|
|
266
|
-
<a name='L207'></a><a href='#L207'>207</a>
|
|
267
|
-
<a name='L208'></a><a href='#L208'>208</a>
|
|
268
|
-
<a name='L209'></a><a href='#L209'>209</a>
|
|
269
|
-
<a name='L210'></a><a href='#L210'>210</a>
|
|
270
|
-
<a name='L211'></a><a href='#L211'>211</a>
|
|
271
|
-
<a name='L212'></a><a href='#L212'>212</a>
|
|
272
|
-
<a name='L213'></a><a href='#L213'>213</a>
|
|
273
|
-
<a name='L214'></a><a href='#L214'>214</a>
|
|
274
|
-
<a name='L215'></a><a href='#L215'>215</a>
|
|
275
|
-
<a name='L216'></a><a href='#L216'>216</a>
|
|
276
|
-
<a name='L217'></a><a href='#L217'>217</a>
|
|
277
|
-
<a name='L218'></a><a href='#L218'>218</a>
|
|
278
|
-
<a name='L219'></a><a href='#L219'>219</a>
|
|
279
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
|
280
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
|
281
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
|
282
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
|
283
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
|
284
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
|
285
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
|
286
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
|
287
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
|
288
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
|
289
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
|
290
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
|
291
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
|
292
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
|
293
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
|
294
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
|
295
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
|
296
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
|
297
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
|
298
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
|
299
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
|
300
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
|
301
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
|
302
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
|
303
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
304
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
|
305
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
|
306
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
307
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
308
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
309
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
310
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
311
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
312
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
313
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
314
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
315
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
316
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
317
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
|
318
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
|
319
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
|
320
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
|
321
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
322
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
323
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
324
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
325
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
326
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
327
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
328
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
329
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
330
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
331
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
332
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
333
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
334
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
335
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
336
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
337
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
338
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
339
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
340
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
341
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
342
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
343
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
344
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
345
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
346
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
347
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
348
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
349
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
350
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
351
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
352
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
353
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
354
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
355
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
356
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
357
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
358
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
359
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
360
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
361
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
|
362
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
|
363
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
|
364
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
|
365
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
|
366
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
|
367
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
|
368
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
|
369
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
|
370
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
|
371
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
|
372
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
|
373
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
|
374
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
|
375
|
-
<a name='L316'></a><a href='#L316'>316</a>
|
|
376
|
-
<a name='L317'></a><a href='#L317'>317</a>
|
|
377
|
-
<a name='L318'></a><a href='#L318'>318</a>
|
|
378
|
-
<a name='L319'></a><a href='#L319'>319</a>
|
|
379
|
-
<a name='L320'></a><a href='#L320'>320</a>
|
|
380
|
-
<a name='L321'></a><a href='#L321'>321</a>
|
|
381
|
-
<a name='L322'></a><a href='#L322'>322</a>
|
|
382
|
-
<a name='L323'></a><a href='#L323'>323</a>
|
|
383
|
-
<a name='L324'></a><a href='#L324'>324</a>
|
|
384
|
-
<a name='L325'></a><a href='#L325'>325</a>
|
|
385
|
-
<a name='L326'></a><a href='#L326'>326</a>
|
|
386
|
-
<a name='L327'></a><a href='#L327'>327</a>
|
|
387
|
-
<a name='L328'></a><a href='#L328'>328</a>
|
|
388
|
-
<a name='L329'></a><a href='#L329'>329</a>
|
|
389
|
-
<a name='L330'></a><a href='#L330'>330</a>
|
|
390
|
-
<a name='L331'></a><a href='#L331'>331</a>
|
|
391
|
-
<a name='L332'></a><a href='#L332'>332</a>
|
|
392
|
-
<a name='L333'></a><a href='#L333'>333</a>
|
|
393
|
-
<a name='L334'></a><a href='#L334'>334</a>
|
|
394
|
-
<a name='L335'></a><a href='#L335'>335</a>
|
|
395
|
-
<a name='L336'></a><a href='#L336'>336</a>
|
|
396
|
-
<a name='L337'></a><a href='#L337'>337</a>
|
|
397
|
-
<a name='L338'></a><a href='#L338'>338</a>
|
|
398
|
-
<a name='L339'></a><a href='#L339'>339</a>
|
|
399
|
-
<a name='L340'></a><a href='#L340'>340</a>
|
|
400
|
-
<a name='L341'></a><a href='#L341'>341</a>
|
|
401
|
-
<a name='L342'></a><a href='#L342'>342</a>
|
|
402
|
-
<a name='L343'></a><a href='#L343'>343</a>
|
|
403
|
-
<a name='L344'></a><a href='#L344'>344</a>
|
|
404
|
-
<a name='L345'></a><a href='#L345'>345</a>
|
|
405
|
-
<a name='L346'></a><a href='#L346'>346</a>
|
|
406
|
-
<a name='L347'></a><a href='#L347'>347</a>
|
|
407
|
-
<a name='L348'></a><a href='#L348'>348</a>
|
|
408
|
-
<a name='L349'></a><a href='#L349'>349</a>
|
|
409
|
-
<a name='L350'></a><a href='#L350'>350</a>
|
|
410
|
-
<a name='L351'></a><a href='#L351'>351</a>
|
|
411
|
-
<a name='L352'></a><a href='#L352'>352</a>
|
|
412
|
-
<a name='L353'></a><a href='#L353'>353</a>
|
|
413
|
-
<a name='L354'></a><a href='#L354'>354</a>
|
|
414
|
-
<a name='L355'></a><a href='#L355'>355</a>
|
|
415
|
-
<a name='L356'></a><a href='#L356'>356</a>
|
|
416
|
-
<a name='L357'></a><a href='#L357'>357</a>
|
|
417
|
-
<a name='L358'></a><a href='#L358'>358</a>
|
|
418
|
-
<a name='L359'></a><a href='#L359'>359</a>
|
|
419
|
-
<a name='L360'></a><a href='#L360'>360</a>
|
|
420
|
-
<a name='L361'></a><a href='#L361'>361</a>
|
|
421
|
-
<a name='L362'></a><a href='#L362'>362</a>
|
|
422
|
-
<a name='L363'></a><a href='#L363'>363</a>
|
|
423
|
-
<a name='L364'></a><a href='#L364'>364</a>
|
|
424
|
-
<a name='L365'></a><a href='#L365'>365</a>
|
|
425
|
-
<a name='L366'></a><a href='#L366'>366</a>
|
|
426
|
-
<a name='L367'></a><a href='#L367'>367</a>
|
|
427
|
-
<a name='L368'></a><a href='#L368'>368</a>
|
|
428
|
-
<a name='L369'></a><a href='#L369'>369</a>
|
|
429
|
-
<a name='L370'></a><a href='#L370'>370</a>
|
|
430
|
-
<a name='L371'></a><a href='#L371'>371</a>
|
|
431
|
-
<a name='L372'></a><a href='#L372'>372</a>
|
|
432
|
-
<a name='L373'></a><a href='#L373'>373</a>
|
|
433
|
-
<a name='L374'></a><a href='#L374'>374</a>
|
|
434
|
-
<a name='L375'></a><a href='#L375'>375</a>
|
|
435
|
-
<a name='L376'></a><a href='#L376'>376</a>
|
|
436
|
-
<a name='L377'></a><a href='#L377'>377</a>
|
|
437
|
-
<a name='L378'></a><a href='#L378'>378</a>
|
|
438
|
-
<a name='L379'></a><a href='#L379'>379</a>
|
|
439
|
-
<a name='L380'></a><a href='#L380'>380</a>
|
|
440
|
-
<a name='L381'></a><a href='#L381'>381</a>
|
|
441
|
-
<a name='L382'></a><a href='#L382'>382</a>
|
|
442
|
-
<a name='L383'></a><a href='#L383'>383</a>
|
|
443
|
-
<a name='L384'></a><a href='#L384'>384</a>
|
|
444
|
-
<a name='L385'></a><a href='#L385'>385</a>
|
|
445
|
-
<a name='L386'></a><a href='#L386'>386</a>
|
|
446
|
-
<a name='L387'></a><a href='#L387'>387</a>
|
|
447
|
-
<a name='L388'></a><a href='#L388'>388</a>
|
|
448
|
-
<a name='L389'></a><a href='#L389'>389</a>
|
|
449
|
-
<a name='L390'></a><a href='#L390'>390</a>
|
|
450
|
-
<a name='L391'></a><a href='#L391'>391</a>
|
|
451
|
-
<a name='L392'></a><a href='#L392'>392</a>
|
|
452
|
-
<a name='L393'></a><a href='#L393'>393</a>
|
|
453
|
-
<a name='L394'></a><a href='#L394'>394</a>
|
|
454
|
-
<a name='L395'></a><a href='#L395'>395</a>
|
|
455
|
-
<a name='L396'></a><a href='#L396'>396</a>
|
|
456
|
-
<a name='L397'></a><a href='#L397'>397</a>
|
|
457
|
-
<a name='L398'></a><a href='#L398'>398</a>
|
|
458
|
-
<a name='L399'></a><a href='#L399'>399</a>
|
|
459
|
-
<a name='L400'></a><a href='#L400'>400</a>
|
|
460
|
-
<a name='L401'></a><a href='#L401'>401</a>
|
|
461
|
-
<a name='L402'></a><a href='#L402'>402</a>
|
|
462
|
-
<a name='L403'></a><a href='#L403'>403</a>
|
|
463
|
-
<a name='L404'></a><a href='#L404'>404</a>
|
|
464
|
-
<a name='L405'></a><a href='#L405'>405</a>
|
|
465
|
-
<a name='L406'></a><a href='#L406'>406</a>
|
|
466
|
-
<a name='L407'></a><a href='#L407'>407</a>
|
|
467
|
-
<a name='L408'></a><a href='#L408'>408</a>
|
|
468
|
-
<a name='L409'></a><a href='#L409'>409</a>
|
|
469
|
-
<a name='L410'></a><a href='#L410'>410</a>
|
|
470
|
-
<a name='L411'></a><a href='#L411'>411</a>
|
|
471
|
-
<a name='L412'></a><a href='#L412'>412</a>
|
|
472
|
-
<a name='L413'></a><a href='#L413'>413</a>
|
|
473
|
-
<a name='L414'></a><a href='#L414'>414</a>
|
|
474
|
-
<a name='L415'></a><a href='#L415'>415</a>
|
|
475
|
-
<a name='L416'></a><a href='#L416'>416</a>
|
|
476
|
-
<a name='L417'></a><a href='#L417'>417</a>
|
|
477
|
-
<a name='L418'></a><a href='#L418'>418</a>
|
|
478
|
-
<a name='L419'></a><a href='#L419'>419</a>
|
|
479
|
-
<a name='L420'></a><a href='#L420'>420</a>
|
|
480
|
-
<a name='L421'></a><a href='#L421'>421</a>
|
|
481
|
-
<a name='L422'></a><a href='#L422'>422</a>
|
|
482
|
-
<a name='L423'></a><a href='#L423'>423</a>
|
|
483
|
-
<a name='L424'></a><a href='#L424'>424</a>
|
|
484
|
-
<a name='L425'></a><a href='#L425'>425</a>
|
|
485
|
-
<a name='L426'></a><a href='#L426'>426</a>
|
|
486
|
-
<a name='L427'></a><a href='#L427'>427</a>
|
|
487
|
-
<a name='L428'></a><a href='#L428'>428</a>
|
|
488
|
-
<a name='L429'></a><a href='#L429'>429</a>
|
|
489
|
-
<a name='L430'></a><a href='#L430'>430</a>
|
|
490
|
-
<a name='L431'></a><a href='#L431'>431</a>
|
|
491
|
-
<a name='L432'></a><a href='#L432'>432</a>
|
|
492
|
-
<a name='L433'></a><a href='#L433'>433</a>
|
|
493
|
-
<a name='L434'></a><a href='#L434'>434</a>
|
|
494
|
-
<a name='L435'></a><a href='#L435'>435</a>
|
|
495
|
-
<a name='L436'></a><a href='#L436'>436</a>
|
|
496
|
-
<a name='L437'></a><a href='#L437'>437</a>
|
|
497
|
-
<a name='L438'></a><a href='#L438'>438</a>
|
|
498
|
-
<a name='L439'></a><a href='#L439'>439</a>
|
|
499
|
-
<a name='L440'></a><a href='#L440'>440</a>
|
|
500
|
-
<a name='L441'></a><a href='#L441'>441</a>
|
|
501
|
-
<a name='L442'></a><a href='#L442'>442</a>
|
|
502
|
-
<a name='L443'></a><a href='#L443'>443</a>
|
|
503
|
-
<a name='L444'></a><a href='#L444'>444</a>
|
|
504
|
-
<a name='L445'></a><a href='#L445'>445</a>
|
|
505
|
-
<a name='L446'></a><a href='#L446'>446</a>
|
|
506
|
-
<a name='L447'></a><a href='#L447'>447</a>
|
|
507
|
-
<a name='L448'></a><a href='#L448'>448</a>
|
|
508
|
-
<a name='L449'></a><a href='#L449'>449</a>
|
|
509
|
-
<a name='L450'></a><a href='#L450'>450</a>
|
|
510
|
-
<a name='L451'></a><a href='#L451'>451</a>
|
|
511
|
-
<a name='L452'></a><a href='#L452'>452</a>
|
|
512
|
-
<a name='L453'></a><a href='#L453'>453</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">40x</span>
|
|
513
|
-
<span class="cline-any cline-yes">40x</span>
|
|
514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
515
|
-
<span class="cline-any cline-neutral"> </span>
|
|
516
|
-
<span class="cline-any cline-neutral"> </span>
|
|
517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
518
|
-
<span class="cline-any cline-yes">40x</span>
|
|
519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
520
|
-
<span class="cline-any cline-neutral"> </span>
|
|
521
|
-
<span class="cline-any cline-neutral"> </span>
|
|
522
|
-
<span class="cline-any cline-neutral"> </span>
|
|
523
|
-
<span class="cline-any cline-yes">40x</span>
|
|
524
|
-
<span class="cline-any cline-neutral"> </span>
|
|
525
|
-
<span class="cline-any cline-neutral"> </span>
|
|
526
|
-
<span class="cline-any cline-neutral"> </span>
|
|
527
|
-
<span class="cline-any cline-neutral"> </span>
|
|
528
|
-
<span class="cline-any cline-neutral"> </span>
|
|
529
|
-
<span class="cline-any cline-neutral"> </span>
|
|
530
|
-
<span class="cline-any cline-neutral"> </span>
|
|
531
|
-
<span class="cline-any cline-yes">40x</span>
|
|
532
|
-
<span class="cline-any cline-neutral"> </span>
|
|
533
|
-
<span class="cline-any cline-neutral"> </span>
|
|
534
|
-
<span class="cline-any cline-neutral"> </span>
|
|
535
|
-
<span class="cline-any cline-yes">40x</span>
|
|
536
|
-
<span class="cline-any cline-yes">40x</span>
|
|
537
|
-
<span class="cline-any cline-yes">40x</span>
|
|
538
|
-
<span class="cline-any cline-yes">40x</span>
|
|
539
|
-
<span class="cline-any cline-neutral"> </span>
|
|
540
|
-
<span class="cline-any cline-neutral"> </span>
|
|
541
|
-
<span class="cline-any cline-neutral"> </span>
|
|
542
|
-
<span class="cline-any cline-neutral"> </span>
|
|
543
|
-
<span class="cline-any cline-neutral"> </span>
|
|
544
|
-
<span class="cline-any cline-yes">40x</span>
|
|
545
|
-
<span class="cline-any cline-yes">40x</span>
|
|
546
|
-
<span class="cline-any cline-yes">40x</span>
|
|
547
|
-
<span class="cline-any cline-yes">40x</span>
|
|
548
|
-
<span class="cline-any cline-yes">40x</span>
|
|
549
|
-
<span class="cline-any cline-neutral"> </span>
|
|
550
|
-
<span class="cline-any cline-neutral"> </span>
|
|
551
|
-
<span class="cline-any cline-neutral"> </span>
|
|
552
|
-
<span class="cline-any cline-neutral"> </span>
|
|
553
|
-
<span class="cline-any cline-yes">40x</span>
|
|
554
|
-
<span class="cline-any cline-yes">40x</span>
|
|
555
|
-
<span class="cline-any cline-yes">40x</span>
|
|
556
|
-
<span class="cline-any cline-yes">40x</span>
|
|
557
|
-
<span class="cline-any cline-yes">40x</span>
|
|
558
|
-
<span class="cline-any cline-neutral"> </span>
|
|
559
|
-
<span class="cline-any cline-neutral"> </span>
|
|
560
|
-
<span class="cline-any cline-neutral"> </span>
|
|
561
|
-
<span class="cline-any cline-neutral"> </span>
|
|
562
|
-
<span class="cline-any cline-yes">40x</span>
|
|
563
|
-
<span class="cline-any cline-neutral"> </span>
|
|
564
|
-
<span class="cline-any cline-yes">40x</span>
|
|
565
|
-
<span class="cline-any cline-neutral"> </span>
|
|
566
|
-
<span class="cline-any cline-neutral"> </span>
|
|
567
|
-
<span class="cline-any cline-neutral"> </span>
|
|
568
|
-
<span class="cline-any cline-yes">213x</span>
|
|
569
|
-
<span class="cline-any cline-yes">213x</span>
|
|
570
|
-
<span class="cline-any cline-neutral"> </span>
|
|
571
|
-
<span class="cline-any cline-neutral"> </span>
|
|
572
|
-
<span class="cline-any cline-neutral"> </span>
|
|
573
|
-
<span class="cline-any cline-neutral"> </span>
|
|
574
|
-
<span class="cline-any cline-neutral"> </span>
|
|
575
|
-
<span class="cline-any cline-yes">426x</span>
|
|
576
|
-
<span class="cline-any cline-neutral"> </span>
|
|
577
|
-
<span class="cline-any cline-neutral"> </span>
|
|
578
|
-
<span class="cline-any cline-neutral"> </span>
|
|
579
|
-
<span class="cline-any cline-yes">213x</span>
|
|
580
|
-
<span class="cline-any cline-yes">213x</span>
|
|
581
|
-
<span class="cline-any cline-neutral"> </span>
|
|
582
|
-
<span class="cline-any cline-neutral"> </span>
|
|
583
|
-
<span class="cline-any cline-neutral"> </span>
|
|
584
|
-
<span class="cline-any cline-neutral"> </span>
|
|
585
|
-
<span class="cline-any cline-neutral"> </span>
|
|
586
|
-
<span class="cline-any cline-yes">12x</span>
|
|
587
|
-
<span class="cline-any cline-neutral"> </span>
|
|
588
|
-
<span class="cline-any cline-neutral"> </span>
|
|
589
|
-
<span class="cline-any cline-neutral"> </span>
|
|
590
|
-
<span class="cline-any cline-yes">207x</span>
|
|
591
|
-
<span class="cline-any cline-neutral"> </span>
|
|
592
|
-
<span class="cline-any cline-neutral"> </span>
|
|
593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
595
|
-
<span class="cline-any cline-yes">40x</span>
|
|
596
|
-
<span class="cline-any cline-neutral"> </span>
|
|
597
|
-
<span class="cline-any cline-neutral"> </span>
|
|
598
|
-
<span class="cline-any cline-yes">204x</span>
|
|
599
|
-
<span class="cline-any cline-neutral"> </span>
|
|
600
|
-
<span class="cline-any cline-yes">1x</span>
|
|
601
|
-
<span class="cline-any cline-yes">203x</span>
|
|
602
|
-
<span class="cline-any cline-neutral"> </span>
|
|
603
|
-
<span class="cline-any cline-yes">203x</span>
|
|
604
|
-
<span class="cline-any cline-neutral"> </span>
|
|
605
|
-
<span class="cline-any cline-yes">204x</span>
|
|
606
|
-
<span class="cline-any cline-yes">204x</span>
|
|
607
|
-
<span class="cline-any cline-neutral"> </span>
|
|
608
|
-
<span class="cline-any cline-yes">204x</span>
|
|
609
|
-
<span class="cline-any cline-neutral"> </span>
|
|
610
|
-
<span class="cline-any cline-neutral"> </span>
|
|
611
|
-
<span class="cline-any cline-yes">40x</span>
|
|
612
|
-
<span class="cline-any cline-yes">203x</span>
|
|
613
|
-
<span class="cline-any cline-yes">3x</span>
|
|
614
|
-
<span class="cline-any cline-neutral"> </span>
|
|
615
|
-
<span class="cline-any cline-yes">735x</span>
|
|
616
|
-
<span class="cline-any cline-no"> </span>
|
|
617
|
-
<span class="cline-any cline-neutral"> </span>
|
|
618
|
-
<span class="cline-any cline-neutral"> </span>
|
|
619
|
-
<span class="cline-any cline-neutral"> </span>
|
|
620
|
-
<span class="cline-any cline-yes">40x</span>
|
|
621
|
-
<span class="cline-any cline-neutral"> </span>
|
|
622
|
-
<span class="cline-any cline-yes">203x</span>
|
|
623
|
-
<span class="cline-any cline-no"> </span>
|
|
624
|
-
<span class="cline-any cline-neutral"> </span>
|
|
625
|
-
<span class="cline-any cline-yes">203x</span>
|
|
626
|
-
<span class="cline-any cline-yes">3x</span>
|
|
627
|
-
<span class="cline-any cline-neutral"> </span>
|
|
628
|
-
<span class="cline-any cline-yes">735x</span>
|
|
629
|
-
<span class="cline-any cline-no"> </span>
|
|
630
|
-
<span class="cline-any cline-neutral"> </span>
|
|
631
|
-
<span class="cline-any cline-neutral"> </span>
|
|
632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
633
|
-
<span class="cline-any cline-neutral"> </span>
|
|
634
|
-
<span class="cline-any cline-yes">200x</span>
|
|
635
|
-
<span class="cline-any cline-yes">200x</span>
|
|
636
|
-
<span class="cline-any cline-yes">200x</span>
|
|
637
|
-
<span class="cline-any cline-yes">200x</span>
|
|
638
|
-
<span class="cline-any cline-neutral"> </span>
|
|
639
|
-
<span class="cline-any cline-yes">200x</span>
|
|
640
|
-
<span class="cline-any cline-yes">200x</span>
|
|
641
|
-
<span class="cline-any cline-neutral"> </span>
|
|
642
|
-
<span class="cline-any cline-neutral"> </span>
|
|
643
|
-
<span class="cline-any cline-neutral"> </span>
|
|
644
|
-
<span class="cline-any cline-neutral"> </span>
|
|
645
|
-
<span class="cline-any cline-neutral"> </span>
|
|
646
|
-
<span class="cline-any cline-neutral"> </span>
|
|
647
|
-
<span class="cline-any cline-neutral"> </span>
|
|
648
|
-
<span class="cline-any cline-neutral"> </span>
|
|
649
|
-
<span class="cline-any cline-yes">200x</span>
|
|
650
|
-
<span class="cline-any cline-yes">200x</span>
|
|
651
|
-
<span class="cline-any cline-yes">200x</span>
|
|
652
|
-
<span class="cline-any cline-neutral"> </span>
|
|
653
|
-
<span class="cline-any cline-neutral"> </span>
|
|
654
|
-
<span class="cline-any cline-neutral"> </span>
|
|
655
|
-
<span class="cline-any cline-yes">200x</span>
|
|
656
|
-
<span class="cline-any cline-no"> </span>
|
|
657
|
-
<span class="cline-any cline-no"> </span>
|
|
658
|
-
<span class="cline-any cline-no"> </span>
|
|
659
|
-
<span class="cline-any cline-neutral"> </span>
|
|
660
|
-
<span class="cline-any cline-yes">200x</span>
|
|
661
|
-
<span class="cline-any cline-neutral"> </span>
|
|
662
|
-
<span class="cline-any cline-neutral"> </span>
|
|
663
|
-
<span class="cline-any cline-no"> </span>
|
|
664
|
-
<span class="cline-any cline-no"> </span>
|
|
665
|
-
<span class="cline-any cline-neutral"> </span>
|
|
666
|
-
<span class="cline-any cline-neutral"> </span>
|
|
667
|
-
<span class="cline-any cline-neutral"> </span>
|
|
668
|
-
<span class="cline-any cline-yes">200x</span>
|
|
669
|
-
<span class="cline-any cline-neutral"> </span>
|
|
670
|
-
<span class="cline-any cline-neutral"> </span>
|
|
671
|
-
<span class="cline-any cline-yes">200x</span>
|
|
672
|
-
<span class="cline-any cline-neutral"> </span>
|
|
673
|
-
<span class="cline-any cline-neutral"> </span>
|
|
674
|
-
<span class="cline-any cline-yes">40x</span>
|
|
675
|
-
<span class="cline-any cline-yes">10x</span>
|
|
676
|
-
<span class="cline-any cline-yes">10x</span>
|
|
677
|
-
<span class="cline-any cline-yes">10x</span>
|
|
678
|
-
<span class="cline-any cline-neutral"> </span>
|
|
679
|
-
<span class="cline-any cline-neutral"> </span>
|
|
680
|
-
<span class="cline-any cline-yes">10x</span>
|
|
681
|
-
<span class="cline-any cline-yes">10x</span>
|
|
682
|
-
<span class="cline-any cline-yes">10x</span>
|
|
683
|
-
<span class="cline-any cline-yes">13x</span>
|
|
684
|
-
<span class="cline-any cline-no"> </span>
|
|
685
|
-
<span class="cline-any cline-neutral"> </span>
|
|
686
|
-
<span class="cline-any cline-yes">13x</span>
|
|
687
|
-
<span class="cline-any cline-yes">13x</span>
|
|
688
|
-
<span class="cline-any cline-no"> </span>
|
|
689
|
-
<span class="cline-any cline-neutral"> </span>
|
|
690
|
-
<span class="cline-any cline-neutral"> </span>
|
|
691
|
-
<span class="cline-any cline-yes">13x</span>
|
|
692
|
-
<span class="cline-any cline-neutral"> </span>
|
|
693
|
-
<span class="cline-any cline-neutral"> </span>
|
|
694
|
-
<span class="cline-any cline-neutral"> </span>
|
|
695
|
-
<span class="cline-any cline-neutral"> </span>
|
|
696
|
-
<span class="cline-any cline-yes">10x</span>
|
|
697
|
-
<span class="cline-any cline-neutral"> </span>
|
|
698
|
-
<span class="cline-any cline-neutral"> </span>
|
|
699
|
-
<span class="cline-any cline-yes">40x</span>
|
|
700
|
-
<span class="cline-any cline-yes">1x</span>
|
|
701
|
-
<span class="cline-any cline-yes">1x</span>
|
|
702
|
-
<span class="cline-any cline-yes">1x</span>
|
|
703
|
-
<span class="cline-any cline-yes">1x</span>
|
|
704
|
-
<span class="cline-any cline-neutral"> </span>
|
|
705
|
-
<span class="cline-any cline-neutral"> </span>
|
|
706
|
-
<span class="cline-any cline-neutral"> </span>
|
|
707
|
-
<span class="cline-any cline-yes">1x</span>
|
|
708
|
-
<span class="cline-any cline-neutral"> </span>
|
|
709
|
-
<span class="cline-any cline-neutral"> </span>
|
|
710
|
-
<span class="cline-any cline-neutral"> </span>
|
|
711
|
-
<span class="cline-any cline-neutral"> </span>
|
|
712
|
-
<span class="cline-any cline-neutral"> </span>
|
|
713
|
-
<span class="cline-any cline-neutral"> </span>
|
|
714
|
-
<span class="cline-any cline-yes">40x</span>
|
|
715
|
-
<span class="cline-any cline-yes">212x</span>
|
|
716
|
-
<span class="cline-any cline-yes">212x</span>
|
|
717
|
-
<span class="cline-any cline-yes">212x</span>
|
|
718
|
-
<span class="cline-any cline-yes">212x</span>
|
|
719
|
-
<span class="cline-any cline-neutral"> </span>
|
|
720
|
-
<span class="cline-any cline-neutral"> </span>
|
|
721
|
-
<span class="cline-any cline-yes">212x</span>
|
|
722
|
-
<span class="cline-any cline-yes">206x</span>
|
|
723
|
-
<span class="cline-any cline-yes">206x</span>
|
|
724
|
-
<span class="cline-any cline-yes">206x</span>
|
|
725
|
-
<span class="cline-any cline-neutral"> </span>
|
|
726
|
-
<span class="cline-any cline-neutral"> </span>
|
|
727
|
-
<span class="cline-any cline-yes">212x</span>
|
|
728
|
-
<span class="cline-any cline-neutral"> </span>
|
|
729
|
-
<span class="cline-any cline-neutral"> </span>
|
|
730
|
-
<span class="cline-any cline-neutral"> </span>
|
|
731
|
-
<span class="cline-any cline-neutral"> </span>
|
|
732
|
-
<span class="cline-any cline-neutral"> </span>
|
|
733
|
-
<span class="cline-any cline-neutral"> </span>
|
|
734
|
-
<span class="cline-any cline-neutral"> </span>
|
|
735
|
-
<span class="cline-any cline-yes">40x</span>
|
|
736
|
-
<span class="cline-any cline-yes">200x</span>
|
|
737
|
-
<span class="cline-any cline-yes">200x</span>
|
|
738
|
-
<span class="cline-any cline-yes">200x</span>
|
|
739
|
-
<span class="cline-any cline-yes">200x</span>
|
|
740
|
-
<span class="cline-any cline-yes">200x</span>
|
|
741
|
-
<span class="cline-any cline-neutral"> </span>
|
|
742
|
-
<span class="cline-any cline-yes">200x</span>
|
|
743
|
-
<span class="cline-any cline-yes">200x</span>
|
|
744
|
-
<span class="cline-any cline-neutral"> </span>
|
|
745
|
-
<span class="cline-any cline-neutral"> </span>
|
|
746
|
-
<span class="cline-any cline-neutral"> </span>
|
|
747
|
-
<span class="cline-any cline-neutral"> </span>
|
|
748
|
-
<span class="cline-any cline-yes">200x</span>
|
|
749
|
-
<span class="cline-any cline-no"> </span>
|
|
750
|
-
<span class="cline-any cline-neutral"> </span>
|
|
751
|
-
<span class="cline-any cline-yes">200x</span>
|
|
752
|
-
<span class="cline-any cline-yes">200x</span>
|
|
753
|
-
<span class="cline-any cline-neutral"> </span>
|
|
754
|
-
<span class="cline-any cline-yes">200x</span>
|
|
755
|
-
<span class="cline-any cline-neutral"> </span>
|
|
756
|
-
<span class="cline-any cline-yes">200x</span>
|
|
757
|
-
<span class="cline-any cline-neutral"> </span>
|
|
758
|
-
<span class="cline-any cline-yes">200x</span>
|
|
759
|
-
<span class="cline-any cline-no"> </span>
|
|
760
|
-
<span class="cline-any cline-neutral"> </span>
|
|
761
|
-
<span class="cline-any cline-neutral"> </span>
|
|
762
|
-
<span class="cline-any cline-neutral"> </span>
|
|
763
|
-
<span class="cline-any cline-yes">200x</span>
|
|
764
|
-
<span class="cline-any cline-neutral"> </span>
|
|
765
|
-
<span class="cline-any cline-neutral"> </span>
|
|
766
|
-
<span class="cline-any cline-neutral"> </span>
|
|
767
|
-
<span class="cline-any cline-neutral"> </span>
|
|
768
|
-
<span class="cline-any cline-neutral"> </span>
|
|
769
|
-
<span class="cline-any cline-neutral"> </span>
|
|
770
|
-
<span class="cline-any cline-neutral"> </span>
|
|
771
|
-
<span class="cline-any cline-neutral"> </span>
|
|
772
|
-
<span class="cline-any cline-neutral"> </span>
|
|
773
|
-
<span class="cline-any cline-neutral"> </span>
|
|
774
|
-
<span class="cline-any cline-neutral"> </span>
|
|
775
|
-
<span class="cline-any cline-neutral"> </span>
|
|
776
|
-
<span class="cline-any cline-neutral"> </span>
|
|
777
|
-
<span class="cline-any cline-neutral"> </span>
|
|
778
|
-
<span class="cline-any cline-neutral"> </span>
|
|
779
|
-
<span class="cline-any cline-yes">200x</span>
|
|
780
|
-
<span class="cline-any cline-yes">200x</span>
|
|
781
|
-
<span class="cline-any cline-neutral"> </span>
|
|
782
|
-
<span class="cline-any cline-neutral"> </span>
|
|
783
|
-
<span class="cline-any cline-neutral"> </span>
|
|
784
|
-
<span class="cline-any cline-yes">200x</span>
|
|
785
|
-
<span class="cline-any cline-yes">200x</span>
|
|
786
|
-
<span class="cline-any cline-neutral"> </span>
|
|
787
|
-
<span class="cline-any cline-neutral"> </span>
|
|
788
|
-
<span class="cline-any cline-neutral"> </span>
|
|
789
|
-
<span class="cline-any cline-neutral"> </span>
|
|
790
|
-
<span class="cline-any cline-neutral"> </span>
|
|
791
|
-
<span class="cline-any cline-neutral"> </span>
|
|
792
|
-
<span class="cline-any cline-neutral"> </span>
|
|
793
|
-
<span class="cline-any cline-yes">200x</span>
|
|
794
|
-
<span class="cline-any cline-yes">200x</span>
|
|
795
|
-
<span class="cline-any cline-yes">200x</span>
|
|
796
|
-
<span class="cline-any cline-neutral"> </span>
|
|
797
|
-
<span class="cline-any cline-neutral"> </span>
|
|
798
|
-
<span class="cline-any cline-neutral"> </span>
|
|
799
|
-
<span class="cline-any cline-neutral"> </span>
|
|
800
|
-
<span class="cline-any cline-yes">40x</span>
|
|
801
|
-
<span class="cline-any cline-yes">3x</span>
|
|
802
|
-
<span class="cline-any cline-neutral"> </span>
|
|
803
|
-
<span class="cline-any cline-yes">3x</span>
|
|
804
|
-
<span class="cline-any cline-yes">3x</span>
|
|
805
|
-
<span class="cline-any cline-yes">3x</span>
|
|
806
|
-
<span class="cline-any cline-neutral"> </span>
|
|
807
|
-
<span class="cline-any cline-yes">3x</span>
|
|
808
|
-
<span class="cline-any cline-yes">3x</span>
|
|
809
|
-
<span class="cline-any cline-yes">3x</span>
|
|
810
|
-
<span class="cline-any cline-yes">3x</span>
|
|
811
|
-
<span class="cline-any cline-neutral"> </span>
|
|
812
|
-
<span class="cline-any cline-neutral"> </span>
|
|
813
|
-
<span class="cline-any cline-yes">3x</span>
|
|
814
|
-
<span class="cline-any cline-yes">3x</span>
|
|
815
|
-
<span class="cline-any cline-yes">3x</span>
|
|
816
|
-
<span class="cline-any cline-neutral"> </span>
|
|
817
|
-
<span class="cline-any cline-neutral"> </span>
|
|
818
|
-
<span class="cline-any cline-yes">40x</span>
|
|
819
|
-
<span class="cline-any cline-neutral"> </span>
|
|
820
|
-
<span class="cline-any cline-yes">2x</span>
|
|
821
|
-
<span class="cline-any cline-yes">2x</span>
|
|
822
|
-
<span class="cline-any cline-yes">2x</span>
|
|
823
|
-
<span class="cline-any cline-neutral"> </span>
|
|
824
|
-
<span class="cline-any cline-neutral"> </span>
|
|
825
|
-
<span class="cline-any cline-yes">2x</span>
|
|
826
|
-
<span class="cline-any cline-no"> </span>
|
|
827
|
-
<span class="cline-any cline-no"> </span>
|
|
828
|
-
<span class="cline-any cline-neutral"> </span>
|
|
829
|
-
<span class="cline-any cline-neutral"> </span>
|
|
830
|
-
<span class="cline-any cline-neutral"> </span>
|
|
831
|
-
<span class="cline-any cline-yes">2x</span>
|
|
832
|
-
<span class="cline-any cline-neutral"> </span>
|
|
833
|
-
<span class="cline-any cline-neutral"> </span>
|
|
834
|
-
<span class="cline-any cline-neutral"> </span>
|
|
835
|
-
<span class="cline-any cline-yes">2x</span>
|
|
836
|
-
<span class="cline-any cline-yes">2x</span>
|
|
837
|
-
<span class="cline-any cline-yes">2x</span>
|
|
838
|
-
<span class="cline-any cline-neutral"> </span>
|
|
839
|
-
<span class="cline-any cline-neutral"> </span>
|
|
840
|
-
<span class="cline-any cline-yes">40x</span>
|
|
841
|
-
<span class="cline-any cline-neutral"> </span>
|
|
842
|
-
<span class="cline-any cline-yes">1x</span>
|
|
843
|
-
<span class="cline-any cline-yes">1x</span>
|
|
844
|
-
<span class="cline-any cline-yes">1x</span>
|
|
845
|
-
<span class="cline-any cline-no"> </span>
|
|
846
|
-
<span class="cline-any cline-neutral"> </span>
|
|
847
|
-
<span class="cline-any cline-neutral"> </span>
|
|
848
|
-
<span class="cline-any cline-neutral"> </span>
|
|
849
|
-
<span class="cline-any cline-yes">1x</span>
|
|
850
|
-
<span class="cline-any cline-no"> </span>
|
|
851
|
-
<span class="cline-any cline-neutral"> </span>
|
|
852
|
-
<span class="cline-any cline-neutral"> </span>
|
|
853
|
-
<span class="cline-any cline-neutral"> </span>
|
|
854
|
-
<span class="cline-any cline-yes">1x</span>
|
|
855
|
-
<span class="cline-any cline-neutral"> </span>
|
|
856
|
-
<span class="cline-any cline-neutral"> </span>
|
|
857
|
-
<span class="cline-any cline-neutral"> </span>
|
|
858
|
-
<span class="cline-any cline-yes">1x</span>
|
|
859
|
-
<span class="cline-any cline-yes">1x</span>
|
|
860
|
-
<span class="cline-any cline-yes">1x</span>
|
|
861
|
-
<span class="cline-any cline-neutral"> </span>
|
|
862
|
-
<span class="cline-any cline-neutral"> </span>
|
|
863
|
-
<span class="cline-any cline-yes">40x</span>
|
|
864
|
-
<span class="cline-any cline-yes">11x</span>
|
|
865
|
-
<span class="cline-any cline-neutral"> </span>
|
|
866
|
-
<span class="cline-any cline-yes">11x</span>
|
|
867
|
-
<span class="cline-any cline-neutral"> </span>
|
|
868
|
-
<span class="cline-any cline-neutral"> </span>
|
|
869
|
-
<span class="cline-any cline-neutral"> </span>
|
|
870
|
-
<span class="cline-any cline-neutral"> </span>
|
|
871
|
-
<span class="cline-any cline-yes">11x</span>
|
|
872
|
-
<span class="cline-any cline-no"> </span>
|
|
873
|
-
<span class="cline-any cline-neutral"> </span>
|
|
874
|
-
<span class="cline-any cline-neutral"> </span>
|
|
875
|
-
<span class="cline-any cline-yes">11x</span>
|
|
876
|
-
<span class="cline-any cline-yes">11x</span>
|
|
877
|
-
<span class="cline-any cline-neutral"> </span>
|
|
878
|
-
<span class="cline-any cline-yes">11x</span>
|
|
879
|
-
<span class="cline-any cline-yes">11x</span>
|
|
880
|
-
<span class="cline-any cline-neutral"> </span>
|
|
881
|
-
<span class="cline-any cline-neutral"> </span>
|
|
882
|
-
<span class="cline-any cline-yes">40x</span>
|
|
883
|
-
<span class="cline-any cline-no"> </span>
|
|
884
|
-
<span class="cline-any cline-no"> </span>
|
|
885
|
-
<span class="cline-any cline-no"> </span>
|
|
886
|
-
<span class="cline-any cline-neutral"> </span>
|
|
887
|
-
<span class="cline-any cline-neutral"> </span>
|
|
888
|
-
<span class="cline-any cline-neutral"> </span>
|
|
889
|
-
<span class="cline-any cline-no"> </span>
|
|
890
|
-
<span class="cline-any cline-neutral"> </span>
|
|
891
|
-
<span class="cline-any cline-no"> </span>
|
|
892
|
-
<span class="cline-any cline-neutral"> </span>
|
|
893
|
-
<span class="cline-any cline-no"> </span>
|
|
894
|
-
<span class="cline-any cline-no"> </span>
|
|
895
|
-
<span class="cline-any cline-no"> </span>
|
|
896
|
-
<span class="cline-any cline-neutral"> </span>
|
|
897
|
-
<span class="cline-any cline-neutral"> </span>
|
|
898
|
-
<span class="cline-any cline-no"> </span>
|
|
899
|
-
<span class="cline-any cline-no"> </span>
|
|
900
|
-
<span class="cline-any cline-neutral"> </span>
|
|
901
|
-
<span class="cline-any cline-neutral"> </span>
|
|
902
|
-
<span class="cline-any cline-no"> </span>
|
|
903
|
-
<span class="cline-any cline-neutral"> </span>
|
|
904
|
-
<span class="cline-any cline-neutral"> </span>
|
|
905
|
-
<span class="cline-any cline-no"> </span>
|
|
906
|
-
<span class="cline-any cline-neutral"> </span>
|
|
907
|
-
<span class="cline-any cline-neutral"> </span>
|
|
908
|
-
<span class="cline-any cline-neutral"> </span>
|
|
909
|
-
<span class="cline-any cline-neutral"> </span>
|
|
910
|
-
<span class="cline-any cline-no"> </span>
|
|
911
|
-
<span class="cline-any cline-no"> </span>
|
|
912
|
-
<span class="cline-any cline-neutral"> </span>
|
|
913
|
-
<span class="cline-any cline-no"> </span>
|
|
914
|
-
<span class="cline-any cline-neutral"> </span>
|
|
915
|
-
<span class="cline-any cline-neutral"> </span>
|
|
916
|
-
<span class="cline-any cline-neutral"> </span>
|
|
917
|
-
<span class="cline-any cline-no"> </span>
|
|
918
|
-
<span class="cline-any cline-neutral"> </span>
|
|
919
|
-
<span class="cline-any cline-no"> </span>
|
|
920
|
-
<span class="cline-any cline-neutral"> </span>
|
|
921
|
-
<span class="cline-any cline-neutral"> </span>
|
|
922
|
-
<span class="cline-any cline-neutral"> </span>
|
|
923
|
-
<span class="cline-any cline-no"> </span>
|
|
924
|
-
<span class="cline-any cline-neutral"> </span>
|
|
925
|
-
<span class="cline-any cline-no"> </span>
|
|
926
|
-
<span class="cline-any cline-no"> </span>
|
|
927
|
-
<span class="cline-any cline-neutral"> </span>
|
|
928
|
-
<span class="cline-any cline-no"> </span>
|
|
929
|
-
<span class="cline-any cline-neutral"> </span>
|
|
930
|
-
<span class="cline-any cline-neutral"> </span>
|
|
931
|
-
<span class="cline-any cline-neutral"> </span>
|
|
932
|
-
<span class="cline-any cline-neutral"> </span>
|
|
933
|
-
<span class="cline-any cline-neutral"> </span>
|
|
934
|
-
<span class="cline-any cline-yes">40x</span>
|
|
935
|
-
<span class="cline-any cline-yes">6x</span>
|
|
936
|
-
<span class="cline-any cline-yes">6x</span>
|
|
937
|
-
<span class="cline-any cline-neutral"> </span>
|
|
938
|
-
<span class="cline-any cline-yes">6x</span>
|
|
939
|
-
<span class="cline-any cline-yes">6x</span>
|
|
940
|
-
<span class="cline-any cline-yes">5x</span>
|
|
941
|
-
<span class="cline-any cline-neutral"> </span>
|
|
942
|
-
<span class="cline-any cline-neutral"> </span>
|
|
943
|
-
<span class="cline-any cline-neutral"> </span>
|
|
944
|
-
<span class="cline-any cline-neutral"> </span>
|
|
945
|
-
<span class="cline-any cline-yes">6x</span>
|
|
946
|
-
<span class="cline-any cline-neutral"> </span>
|
|
947
|
-
<span class="cline-any cline-yes">6x</span>
|
|
948
|
-
<span class="cline-any cline-neutral"> </span>
|
|
949
|
-
<span class="cline-any cline-yes">6x</span>
|
|
950
|
-
<span class="cline-any cline-yes">6x</span>
|
|
951
|
-
<span class="cline-any cline-neutral"> </span>
|
|
952
|
-
<span class="cline-any cline-neutral"> </span>
|
|
953
|
-
<span class="cline-any cline-yes">40x</span>
|
|
954
|
-
<span class="cline-any cline-yes">200x</span>
|
|
955
|
-
<span class="cline-any cline-neutral"> </span>
|
|
956
|
-
<span class="cline-any cline-yes">200x</span>
|
|
957
|
-
<span class="cline-any cline-yes">200x</span>
|
|
958
|
-
<span class="cline-any cline-yes">400x</span>
|
|
959
|
-
<span class="cline-any cline-yes">400x</span>
|
|
960
|
-
<span class="cline-any cline-neutral"> </span>
|
|
961
|
-
<span class="cline-any cline-neutral"> </span>
|
|
962
|
-
<span class="cline-any cline-yes">200x</span>
|
|
963
|
-
<span class="cline-any cline-neutral"> </span>
|
|
964
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">const env = require("../../environment")
|
|
965
|
-
const packageJson = require("../../../package.json")
|
|
966
|
-
const {
|
|
967
|
-
createLinkView,
|
|
968
|
-
createRoutingView,
|
|
969
|
-
createAllSearchIndex,
|
|
970
|
-
} = require("../../db/views/staticViews")
|
|
971
|
-
const {
|
|
972
|
-
getTemplateStream,
|
|
973
|
-
createApp,
|
|
974
|
-
deleteApp,
|
|
975
|
-
} = require("../../utilities/fileSystem")
|
|
976
|
-
const {
|
|
977
|
-
generateAppID,
|
|
978
|
-
getLayoutParams,
|
|
979
|
-
getScreenParams,
|
|
980
|
-
generateDevAppID,
|
|
981
|
-
DocumentTypes,
|
|
982
|
-
AppStatus,
|
|
983
|
-
} = require("../../db/utils")
|
|
984
|
-
const {
|
|
985
|
-
BUILTIN_ROLE_IDS,
|
|
986
|
-
AccessController,
|
|
987
|
-
} = require("@budibase/backend-core/roles")
|
|
988
|
-
const { BASE_LAYOUTS } = require("../../constants/layouts")
|
|
989
|
-
const { cloneDeep } = require("lodash/fp")
|
|
990
|
-
const { processObject } = require("@budibase/string-templates")
|
|
991
|
-
const {
|
|
992
|
-
getAllApps,
|
|
993
|
-
isDevAppID,
|
|
994
|
-
getProdAppID,
|
|
995
|
-
Replication,
|
|
996
|
-
} = require("@budibase/backend-core/db")
|
|
997
|
-
const { USERS_TABLE_SCHEMA } = require("../../constants")
|
|
998
|
-
const { removeAppFromUserRoles } = require("../../utilities/workerRequests")
|
|
999
|
-
const { clientLibraryPath, stringToReadStream } = require("../../utilities")
|
|
1000
|
-
const { getAllLocks } = require("../../utilities/redis")
|
|
1001
|
-
const {
|
|
1002
|
-
updateClientLibrary,
|
|
1003
|
-
backupClientLibrary,
|
|
1004
|
-
revertClientLibrary,
|
|
1005
|
-
} = require("../../utilities/fileSystem/clientLibrary")
|
|
1006
|
-
const { getTenantId, isMultiTenant } = require("@budibase/backend-core/tenancy")
|
|
1007
|
-
const { syncGlobalUsers } = require("./user")
|
|
1008
|
-
const { app: appCache } = require("@budibase/backend-core/cache")
|
|
1009
|
-
const { cleanupAutomations } = require("../../automations/utils")
|
|
1010
|
-
const {
|
|
1011
|
-
getAppDB,
|
|
1012
|
-
getProdAppDB,
|
|
1013
|
-
updateAppId,
|
|
1014
|
-
} = require("@budibase/backend-core/context")
|
|
1015
|
-
|
|
1016
|
-
const URL_REGEX_SLASH = /\/|\\/g
|
|
1017
|
-
|
|
1018
|
-
// utility function, need to do away with this
|
|
1019
|
-
async function getLayouts() {
|
|
1020
|
-
const db = getAppDB()
|
|
1021
|
-
return (
|
|
1022
|
-
await db.allDocs(
|
|
1023
|
-
getLayoutParams(null, {
|
|
1024
|
-
include_docs: true,
|
|
1025
|
-
})
|
|
1026
|
-
)
|
|
1027
|
-
).rows.map(row => row.doc)
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
async function getScreens() {
|
|
1031
|
-
const db = getAppDB()
|
|
1032
|
-
return (
|
|
1033
|
-
await db.allDocs(
|
|
1034
|
-
getScreenParams(null, {
|
|
1035
|
-
include_docs: true,
|
|
1036
|
-
})
|
|
1037
|
-
)
|
|
1038
|
-
).rows.map(row => row.doc)
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
function getUserRoleId(ctx) {
|
|
1042
|
-
return !ctx.user.role || !ctx.user.role._id
|
|
1043
|
-
? BUILTIN_ROLE_IDS.PUBLIC
|
|
1044
|
-
: ctx.user.role._id
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
|
-
exports.getAppUrl = ctx => {
|
|
1048
|
-
// construct the url
|
|
1049
|
-
let url
|
|
1050
|
-
if (ctx.request.body.url) {
|
|
1051
|
-
// if the url is provided, use that
|
|
1052
|
-
url = encodeURI(ctx.request.body.url)
|
|
1053
|
-
} else if (ctx.request.body.name) {
|
|
1054
|
-
// otherwise use the name
|
|
1055
|
-
url = encodeURI(`${ctx.request.body.name}`)
|
|
1056
|
-
}
|
|
1057
|
-
if (url) {
|
|
1058
|
-
url = `/${url.replace(URL_REGEX_SLASH, "")}`.toLowerCase()
|
|
1059
|
-
}
|
|
1060
|
-
return url
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
const checkAppUrl = (ctx, apps, url, currentAppId) => {
|
|
1064
|
-
if (currentAppId) {
|
|
1065
|
-
apps = apps.filter(app => app.appId !== currentAppId)
|
|
1066
|
-
}
|
|
1067
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (apps.some(app => app.url === url)) {
|
|
1068
|
-
<span class="cstat-no" title="statement not covered" > ctx.throw(400, "App URL is already in use.")</span>
|
|
1069
|
-
}
|
|
1070
|
-
}
|
|
1071
|
-
|
|
1072
|
-
const checkAppName = (ctx, apps, name, currentAppId) => {
|
|
1073
|
-
// TODO: Replace with Joi
|
|
1074
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!name) {
|
|
1075
|
-
<span class="cstat-no" title="statement not covered" > ctx.throw(400, "Name is required")</span>
|
|
1076
|
-
}
|
|
1077
|
-
if (currentAppId) {
|
|
1078
|
-
apps = apps.filter(app => app.appId !== currentAppId)
|
|
1079
|
-
}
|
|
1080
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (apps.some(app => app.name === name)) {
|
|
1081
|
-
<span class="cstat-no" title="statement not covered" > ctx.throw(400, "App name is already in use.")</span>
|
|
1082
|
-
}
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
async function createInstance(template) {
|
|
1086
|
-
const tenantId = isMultiTenant() ? <span class="branch-0 cbranch-no" title="branch not covered" >getTenantId() </span>: null
|
|
1087
|
-
const baseAppId = generateAppID(tenantId)
|
|
1088
|
-
const appId = generateDevAppID(baseAppId)
|
|
1089
|
-
await updateAppId(appId)
|
|
1090
|
-
|
|
1091
|
-
const db = getAppDB()
|
|
1092
|
-
await db.put({
|
|
1093
|
-
_id: "_design/database",
|
|
1094
|
-
// view collation information, read before writing any complex views:
|
|
1095
|
-
// https://docs.couchdb.org/en/master/ddocs/views/collation.html#collation-specification
|
|
1096
|
-
views: {},
|
|
1097
|
-
})
|
|
1098
|
-
|
|
1099
|
-
// NOTE: indexes need to be created before any tables/templates
|
|
1100
|
-
// add view for linked rows
|
|
1101
|
-
await createLinkView()
|
|
1102
|
-
await createRoutingView()
|
|
1103
|
-
await createAllSearchIndex()
|
|
1104
|
-
|
|
1105
|
-
// replicate the template data to the instance DB
|
|
1106
|
-
// this is currently very hard to test, downloading and importing template files
|
|
1107
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (template && template.templateString) {
|
|
1108
|
-
const { ok } = <span class="cstat-no" title="statement not covered" >await db.load(stringToReadStream(template.templateString))</span>
|
|
1109
|
-
<span class="cstat-no" title="statement not covered" > if (!ok) {</span>
|
|
1110
|
-
<span class="cstat-no" title="statement not covered" > throw "Error loading database dump from memory."</span>
|
|
1111
|
-
}
|
|
1112
|
-
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (template && template.useTemplate === "true") {
|
|
1113
|
-
/* istanbul ignore next */
|
|
1114
|
-
const { ok } = await db.load(await getTemplateStream(template))
|
|
1115
|
-
<span class="cstat-no" title="statement not covered" > if (!ok) {</span>
|
|
1116
|
-
<span class="cstat-no" title="statement not covered" > throw "Error loading database dump from template."</span>
|
|
1117
|
-
}
|
|
1118
|
-
} else {
|
|
1119
|
-
// create the users table
|
|
1120
|
-
await db.put(USERS_TABLE_SCHEMA)
|
|
1121
|
-
}
|
|
1122
|
-
|
|
1123
|
-
return { _id: appId }
|
|
1124
|
-
}
|
|
1125
|
-
|
|
1126
|
-
exports.fetch = async ctx => {
|
|
1127
|
-
const dev = ctx.query && ctx.query.status === AppStatus.DEV
|
|
1128
|
-
const all = ctx.query && ctx.query.status === AppStatus.ALL
|
|
1129
|
-
const apps = await getAllApps({ dev, all })
|
|
1130
|
-
|
|
1131
|
-
// get the locks for all the dev apps
|
|
1132
|
-
if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
|
|
1133
|
-
const locks = await getAllLocks()
|
|
1134
|
-
for (let app of apps) {
|
|
1135
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (app.status !== "development") {
|
|
1136
|
-
<span class="cstat-no" title="statement not covered" > continue</span>
|
|
1137
|
-
}
|
|
1138
|
-
const lock = locks.find(<span class="fstat-no" title="function not covered" >lo</span>ck => <span class="cstat-no" title="statement not covered" >lock.appId === app.appId)</span>
|
|
1139
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (lock) {
|
|
1140
|
-
<span class="cstat-no" title="statement not covered" > app.lockedBy = lock.user</span>
|
|
1141
|
-
} else {
|
|
1142
|
-
// make sure its definitely not present
|
|
1143
|
-
delete app.lockedBy
|
|
1144
|
-
}
|
|
1145
|
-
}
|
|
1146
|
-
}
|
|
1147
|
-
|
|
1148
|
-
ctx.body = apps
|
|
1149
|
-
}
|
|
1150
|
-
|
|
1151
|
-
exports.fetchAppDefinition = async ctx => {
|
|
1152
|
-
const layouts = await getLayouts()
|
|
1153
|
-
const userRoleId = getUserRoleId(ctx)
|
|
1154
|
-
const accessController = new AccessController()
|
|
1155
|
-
const screens = await accessController.checkScreensAccess(
|
|
1156
|
-
await getScreens(),
|
|
1157
|
-
userRoleId
|
|
1158
|
-
)
|
|
1159
|
-
ctx.body = {
|
|
1160
|
-
layouts,
|
|
1161
|
-
screens,
|
|
1162
|
-
libraries: ["@budibase/standard-components"],
|
|
1163
|
-
}
|
|
1164
|
-
}
|
|
1165
|
-
|
|
1166
|
-
exports.fetchAppPackage = async ctx => {
|
|
1167
|
-
const db = getAppDB()
|
|
1168
|
-
const application = await db.get(DocumentTypes.APP_METADATA)
|
|
1169
|
-
const layouts = await getLayouts()
|
|
1170
|
-
let screens = await getScreens()
|
|
1171
|
-
|
|
1172
|
-
// Only filter screens if the user is not a builder
|
|
1173
|
-
if (!(ctx.user.builder && ctx.user.builder.global)) {
|
|
1174
|
-
const userRoleId = getUserRoleId(ctx)
|
|
1175
|
-
const accessController = new AccessController()
|
|
1176
|
-
screens = await accessController.checkScreensAccess(screens, userRoleId)
|
|
1177
|
-
}
|
|
1178
|
-
|
|
1179
|
-
ctx.body = {
|
|
1180
|
-
application,
|
|
1181
|
-
screens,
|
|
1182
|
-
layouts,
|
|
1183
|
-
clientLibPath: clientLibraryPath(ctx.params.appId, application.version),
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
|
|
1187
|
-
exports.create = async ctx => {
|
|
1188
|
-
const apps = await getAllApps({ dev: true })
|
|
1189
|
-
const name = ctx.request.body.name
|
|
1190
|
-
checkAppName(ctx, apps, name)
|
|
1191
|
-
const url = exports.getAppUrl(ctx)
|
|
1192
|
-
checkAppUrl(ctx, apps, url)
|
|
1193
|
-
|
|
1194
|
-
const { useTemplate, templateKey, templateString } = ctx.request.body
|
|
1195
|
-
const instanceConfig = {
|
|
1196
|
-
useTemplate,
|
|
1197
|
-
key: templateKey,
|
|
1198
|
-
templateString,
|
|
1199
|
-
}
|
|
1200
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.request.files && <span class="branch-1 cbranch-no" title="branch not covered" >ctx.request.files.templateFile)</span> {
|
|
1201
|
-
<span class="cstat-no" title="statement not covered" > instanceConfig.file = ctx.request.files.templateFile</span>
|
|
1202
|
-
}
|
|
1203
|
-
const instance = await createInstance(instanceConfig)
|
|
1204
|
-
const appId = instance._id
|
|
1205
|
-
|
|
1206
|
-
const db = getAppDB()
|
|
1207
|
-
let _rev
|
|
1208
|
-
try {
|
|
1209
|
-
// if template there will be an existing doc
|
|
1210
|
-
const existing = await db.get(DocumentTypes.APP_METADATA)
|
|
1211
|
-
<span class="cstat-no" title="statement not covered" > _rev = existing._rev</span>
|
|
1212
|
-
} catch (err) {
|
|
1213
|
-
// nothing to do
|
|
1214
|
-
}
|
|
1215
|
-
const newApplication = {
|
|
1216
|
-
_id: DocumentTypes.APP_METADATA,
|
|
1217
|
-
_rev,
|
|
1218
|
-
appId: instance._id,
|
|
1219
|
-
type: "app",
|
|
1220
|
-
version: packageJson.version,
|
|
1221
|
-
componentLibraries: ["@budibase/standard-components"],
|
|
1222
|
-
name: name,
|
|
1223
|
-
url: url,
|
|
1224
|
-
template: ctx.request.body.template,
|
|
1225
|
-
instance: instance,
|
|
1226
|
-
tenantId: getTenantId(),
|
|
1227
|
-
updatedAt: new Date().toISOString(),
|
|
1228
|
-
createdAt: new Date().toISOString(),
|
|
1229
|
-
status: AppStatus.DEV,
|
|
1230
|
-
}
|
|
1231
|
-
const response = await db.put(newApplication, { force: true })
|
|
1232
|
-
newApplication._rev = response.rev
|
|
1233
|
-
|
|
1234
|
-
// Only create the default home screens and layout if we aren't importing
|
|
1235
|
-
// an app
|
|
1236
|
-
if (useTemplate !== "true") {
|
|
1237
|
-
await createEmptyAppPackage(ctx, newApplication)
|
|
1238
|
-
}
|
|
1239
|
-
|
|
1240
|
-
/* istanbul ignore next */
|
|
1241
|
-
if (!env.isTest()) {
|
|
1242
|
-
await createApp(appId)
|
|
1243
|
-
}
|
|
1244
|
-
|
|
1245
|
-
await appCache.invalidateAppMetadata(appId, newApplication)
|
|
1246
|
-
ctx.status = 200
|
|
1247
|
-
ctx.body = newApplication
|
|
1248
|
-
}
|
|
1249
|
-
|
|
1250
|
-
// This endpoint currently operates as a PATCH rather than a PUT
|
|
1251
|
-
// Thus name and url fields are handled only if present
|
|
1252
|
-
exports.update = async ctx => {
|
|
1253
|
-
const apps = await getAllApps({ dev: true })
|
|
1254
|
-
// validation
|
|
1255
|
-
const name = ctx.request.body.name
|
|
1256
|
-
if (name) {
|
|
1257
|
-
checkAppName(ctx, apps, name, ctx.params.appId)
|
|
1258
|
-
}
|
|
1259
|
-
const url = await exports.getAppUrl(ctx)
|
|
1260
|
-
if (url) {
|
|
1261
|
-
checkAppUrl(ctx, apps, url, ctx.params.appId)
|
|
1262
|
-
ctx.request.body.url = url
|
|
1263
|
-
}
|
|
1264
|
-
|
|
1265
|
-
const data = await updateAppPackage(ctx.request.body, ctx.params.appId)
|
|
1266
|
-
ctx.status = 200
|
|
1267
|
-
ctx.body = data
|
|
1268
|
-
}
|
|
1269
|
-
|
|
1270
|
-
exports.updateClient = async ctx => {
|
|
1271
|
-
// Get current app version
|
|
1272
|
-
const db = getAppDB()
|
|
1273
|
-
const application = await db.get(DocumentTypes.APP_METADATA)
|
|
1274
|
-
const currentVersion = application.version
|
|
1275
|
-
|
|
1276
|
-
// Update client library and manifest
|
|
1277
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!env.isTest()) {
|
|
1278
|
-
<span class="cstat-no" title="statement not covered" > await backupClientLibrary(ctx.params.appId)</span>
|
|
1279
|
-
<span class="cstat-no" title="statement not covered" > await updateClientLibrary(ctx.params.appId)</span>
|
|
1280
|
-
}
|
|
1281
|
-
|
|
1282
|
-
// Update versions in app package
|
|
1283
|
-
const appPackageUpdates = {
|
|
1284
|
-
version: packageJson.version,
|
|
1285
|
-
revertableVersion: currentVersion,
|
|
1286
|
-
}
|
|
1287
|
-
const data = await updateAppPackage(appPackageUpdates, ctx.params.appId)
|
|
1288
|
-
ctx.status = 200
|
|
1289
|
-
ctx.body = data
|
|
1290
|
-
}
|
|
1291
|
-
|
|
1292
|
-
exports.revertClient = async ctx => {
|
|
1293
|
-
// Check app can be reverted
|
|
1294
|
-
const db = getAppDB()
|
|
1295
|
-
const application = await db.get(DocumentTypes.APP_METADATA)
|
|
1296
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!application.revertableVersion) {
|
|
1297
|
-
<span class="cstat-no" title="statement not covered" > ctx.throw(400, "There is no version to revert to")</span>
|
|
1298
|
-
}
|
|
1299
|
-
|
|
1300
|
-
// Update client library and manifest
|
|
1301
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!env.isTest()) {
|
|
1302
|
-
<span class="cstat-no" title="statement not covered" > await revertClientLibrary(ctx.params.appId)</span>
|
|
1303
|
-
}
|
|
1304
|
-
|
|
1305
|
-
// Update versions in app package
|
|
1306
|
-
const appPackageUpdates = {
|
|
1307
|
-
version: application.revertableVersion,
|
|
1308
|
-
revertableVersion: null,
|
|
1309
|
-
}
|
|
1310
|
-
const data = await updateAppPackage(appPackageUpdates, ctx.params.appId)
|
|
1311
|
-
ctx.status = 200
|
|
1312
|
-
ctx.body = data
|
|
1313
|
-
}
|
|
1314
|
-
|
|
1315
|
-
exports.delete = async ctx => {
|
|
1316
|
-
const db = getAppDB()
|
|
1317
|
-
|
|
1318
|
-
const result = await db.destroy()
|
|
1319
|
-
/* istanbul ignore next */
|
|
1320
|
-
if (!env.isTest() && !ctx.query.unpublish) {
|
|
1321
|
-
await deleteApp(ctx.params.appId)
|
|
1322
|
-
}
|
|
1323
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.query && ctx.query.unpublish) {
|
|
1324
|
-
<span class="cstat-no" title="statement not covered" > await cleanupAutomations(ctx.params.appId)</span>
|
|
1325
|
-
}
|
|
1326
|
-
// make sure the app/role doesn't stick around after the app has been deleted
|
|
1327
|
-
await removeAppFromUserRoles(ctx, ctx.params.appId)
|
|
1328
|
-
await appCache.invalidateAppMetadata(ctx.params.appId)
|
|
1329
|
-
|
|
1330
|
-
ctx.status = 200
|
|
1331
|
-
ctx.body = result
|
|
1332
|
-
}
|
|
1333
|
-
|
|
1334
|
-
exports.sync = <span class="fstat-no" title="function not covered" >as</span>ync (ctx, next) => {
|
|
1335
|
-
const appId = <span class="cstat-no" title="statement not covered" >ctx.params.appId</span>
|
|
1336
|
-
<span class="cstat-no" title="statement not covered" > if (!isDevAppID(appId)) {</span>
|
|
1337
|
-
<span class="cstat-no" title="statement not covered" > ctx.throw(400, "This action cannot be performed for production apps")</span>
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
|
-
// replicate prod to dev
|
|
1341
|
-
const prodAppId = <span class="cstat-no" title="statement not covered" >getProdAppID(appId)</span>
|
|
1342
|
-
|
|
1343
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1344
|
-
// specific case, want to make sure setup is skipped
|
|
1345
|
-
const prodDb = <span class="cstat-no" title="statement not covered" >getProdAppDB({ skip_setup: true })</span>
|
|
1346
|
-
const info = <span class="cstat-no" title="statement not covered" >await prodDb.info()</span>
|
|
1347
|
-
<span class="cstat-no" title="statement not covered" > if (info.error) <span class="cstat-no" title="statement not covered" >throw info.error</span></span>
|
|
1348
|
-
} catch (err) {
|
|
1349
|
-
// the database doesn't exist. Don't replicate
|
|
1350
|
-
<span class="cstat-no" title="statement not covered" > ctx.status = 200</span>
|
|
1351
|
-
<span class="cstat-no" title="statement not covered" > ctx.body = {</span>
|
|
1352
|
-
message: "App sync not required, app not deployed.",
|
|
1353
|
-
}
|
|
1354
|
-
<span class="cstat-no" title="statement not covered" > return next()</span>
|
|
1355
|
-
}
|
|
1356
|
-
|
|
1357
|
-
const replication = <span class="cstat-no" title="statement not covered" >new Replication({</span>
|
|
1358
|
-
source: prodAppId,
|
|
1359
|
-
target: appId,
|
|
1360
|
-
})
|
|
1361
|
-
let error
|
|
1362
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1363
|
-
<span class="cstat-no" title="statement not covered" > await replication.replicate({</span>
|
|
1364
|
-
filter: <span class="fstat-no" title="function not covered" >fu</span>nction (doc) {
|
|
1365
|
-
<span class="cstat-no" title="statement not covered" > return doc._id !== DocumentTypes.APP_METADATA</span>
|
|
1366
|
-
},
|
|
1367
|
-
})
|
|
1368
|
-
} catch (err) {
|
|
1369
|
-
<span class="cstat-no" title="statement not covered" > error = err</span>
|
|
1370
|
-
} finally {
|
|
1371
|
-
<span class="cstat-no" title="statement not covered" > await replication.close()</span>
|
|
1372
|
-
}
|
|
1373
|
-
|
|
1374
|
-
// sync the users
|
|
1375
|
-
<span class="cstat-no" title="statement not covered" > await syncGlobalUsers()</span>
|
|
1376
|
-
|
|
1377
|
-
<span class="cstat-no" title="statement not covered" > if (error) {</span>
|
|
1378
|
-
<span class="cstat-no" title="statement not covered" > ctx.throw(400, error)</span>
|
|
1379
|
-
} else {
|
|
1380
|
-
<span class="cstat-no" title="statement not covered" > ctx.body = {</span>
|
|
1381
|
-
message: "App sync completed successfully.",
|
|
1382
|
-
}
|
|
1383
|
-
}
|
|
1384
|
-
}
|
|
1385
|
-
|
|
1386
|
-
const updateAppPackage = async (appPackage, appId) => {
|
|
1387
|
-
const db = getAppDB()
|
|
1388
|
-
const application = await db.get(DocumentTypes.APP_METADATA)
|
|
1389
|
-
|
|
1390
|
-
const newAppPackage = { ...application, ...appPackage }
|
|
1391
|
-
if (appPackage._rev !== application._rev) {
|
|
1392
|
-
newAppPackage._rev = application._rev
|
|
1393
|
-
}
|
|
1394
|
-
|
|
1395
|
-
// the locked by property is attached by server but generated from
|
|
1396
|
-
// Redis, shouldn't ever store it
|
|
1397
|
-
delete newAppPackage.lockedBy
|
|
1398
|
-
|
|
1399
|
-
const response = await db.put(newAppPackage)
|
|
1400
|
-
// remove any cached metadata, so that it will be updated
|
|
1401
|
-
await appCache.invalidateAppMetadata(appId)
|
|
1402
|
-
return response
|
|
1403
|
-
}
|
|
1404
|
-
|
|
1405
|
-
const createEmptyAppPackage = async (ctx, app) => {
|
|
1406
|
-
const db = getAppDB()
|
|
1407
|
-
|
|
1408
|
-
let screensAndLayouts = []
|
|
1409
|
-
for (let layout of BASE_LAYOUTS) {
|
|
1410
|
-
const cloned = cloneDeep(layout)
|
|
1411
|
-
screensAndLayouts.push(await processObject(cloned, app))
|
|
1412
|
-
}
|
|
1413
|
-
|
|
1414
|
-
await db.bulkDocs(screensAndLayouts)
|
|
1415
|
-
}
|
|
1416
|
-
</pre></td></tr></table></pre>
|
|
1417
|
-
|
|
1418
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
1419
|
-
</div><!-- /wrapper -->
|
|
1420
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
1421
|
-
Code coverage generated by
|
|
1422
|
-
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
1423
|
-
at Tue Apr 26 2022 17:11:02 GMT+0000 (Coordinated Universal Time)
|
|
1424
|
-
</div>
|
|
1425
|
-
</div>
|
|
1426
|
-
<script src="../../prettify.js"></script>
|
|
1427
|
-
<script>
|
|
1428
|
-
window.onload = function () {
|
|
1429
|
-
prettyPrint();
|
|
1430
|
-
};
|
|
1431
|
-
</script>
|
|
1432
|
-
<script src="../../sorter.js"></script>
|
|
1433
|
-
<script src="../../block-navigation.js"></script>
|
|
1434
|
-
</body>
|
|
1435
|
-
</html>
|
|
1436
|
-
|