diff --git a/pb_schema.json b/pb_schema.json index 5b0081b..eed5442 100644 --- a/pb_schema.json +++ b/pb_schema.json @@ -1,176 +1,4 @@ [ - { - "id": "pbc_3142635823", - "listRule": null, - "viewRule": null, - "createRule": null, - "updateRule": null, - "deleteRule": null, - "name": "_superusers", - "type": "auth", - "fields": [ - { - "autogeneratePattern": "[a-z0-9]{15}", - "hidden": false, - "id": "text3208210256", - "max": 15, - "min": 15, - "name": "id", - "pattern": "^[a-z0-9]+$", - "presentable": false, - "primaryKey": true, - "required": true, - "system": true, - "type": "text" - }, - { - "cost": 0, - "hidden": true, - "id": "password901924565", - "max": 0, - "min": 8, - "name": "password", - "pattern": "", - "presentable": false, - "required": true, - "system": true, - "type": "password" - }, - { - "autogeneratePattern": "[a-zA-Z0-9]{50}", - "hidden": true, - "id": "text2504183744", - "max": 60, - "min": 30, - "name": "tokenKey", - "pattern": "", - "presentable": false, - "primaryKey": false, - "required": true, - "system": true, - "type": "text" - }, - { - "exceptDomains": null, - "hidden": false, - "id": "email3885137012", - "name": "email", - "onlyDomains": null, - "presentable": false, - "required": true, - "system": true, - "type": "email" - }, - { - "hidden": false, - "id": "bool1547992806", - "name": "emailVisibility", - "presentable": false, - "required": false, - "system": true, - "type": "bool" - }, - { - "hidden": false, - "id": "bool256245529", - "name": "verified", - "presentable": false, - "required": false, - "system": true, - "type": "bool" - }, - { - "hidden": false, - "id": "autodate2990389176", - "name": "created", - "onCreate": true, - "onUpdate": false, - "presentable": false, - "system": true, - "type": "autodate" - }, - { - "hidden": false, - "id": "autodate3332085495", - "name": "updated", - "onCreate": true, - "onUpdate": true, - "presentable": false, - "system": true, - "type": "autodate" - } - ], - "indexes": [ - "CREATE UNIQUE INDEX `idx_tokenKey_pbc_3142635823` ON `_superusers` (`tokenKey`)", - "CREATE UNIQUE INDEX `idx_email_pbc_3142635823` ON `_superusers` (`email`) WHERE `email` != ''" - ], - "system": true, - "authRule": "", - "manageRule": null, - "authAlert": { - "enabled": true, - "emailTemplate": { - "subject": "Login from a new location", - "body": "

Hello,

\n

We noticed a login to your {APP_NAME} account from a new location.

\n

If this was you, you may disregard this email.

\n

If this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.

\n

\n Thanks,
\n {APP_NAME} team\n

" - } - }, - "oauth2": { - "mappedFields": { - "id": "", - "name": "", - "username": "", - "avatarURL": "" - }, - "enabled": false - }, - "passwordAuth": { - "enabled": true, - "identityFields": [ - "email" - ] - }, - "mfa": { - "enabled": false, - "duration": 1800, - "rule": "" - }, - "otp": { - "enabled": false, - "duration": 180, - "length": 8, - "emailTemplate": { - "subject": "OTP for {APP_NAME}", - "body": "

Hello,

\n

Your one-time password is: {OTP}

\n

If you didn't ask for the one-time password, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

" - } - }, - "authToken": { - "duration": 86400 - }, - "passwordResetToken": { - "duration": 1800 - }, - "emailChangeToken": { - "duration": 1800 - }, - "verificationToken": { - "duration": 259200 - }, - "fileToken": { - "duration": 180 - }, - "verificationTemplate": { - "subject": "Verify your {APP_NAME} email", - "body": "

Hello,

\n

Thank you for joining us at {APP_NAME}.

\n

Click on the button below to verify your email address.

\n

\n Verify\n

\n

\n Thanks,
\n {APP_NAME} team\n

" - }, - "resetPasswordTemplate": { - "subject": "Reset your {APP_NAME} password", - "body": "

Hello,

\n

Click on the button below to reset your password.

\n

\n Reset password\n

\n

If you didn't ask to reset your password, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

" - }, - "confirmEmailChangeTemplate": { - "subject": "Confirm your {APP_NAME} new email address", - "body": "

Hello,

\n

Click on the button below to confirm your new email address.

\n

\n Confirm new email\n

\n

If you didn't ask to change your email address, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

" - } - }, { "id": "pbc_1736455494", "listRule": "", @@ -337,7 +165,7 @@ "enabled": false, "emailTemplate": { "subject": "Login from a new location", - "body": "

Hello,

\n

We noticed a login to your {APP_NAME} account from a new location.

\n

If this was you, you may disregard this email.

\n

If this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.

\n

\n Thanks,
\n {APP_NAME} team\n

" + "body": "

Hello,

\n

We noticed a login to your {APP_NAME} account from a new location:

\n

{ALERT_INFO}

\n

If this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.

\n

If this was you, you may disregard this email.

\n

\n Thanks,
\n {APP_NAME} team\n

" } }, "oauth2": { @@ -1553,6 +1381,109 @@ ], "system": false }, + { + "id": "pbc_2435909571", + "listRule": "", + "viewRule": "", + "createRule": "", + "updateRule": "", + "deleteRule": "", + "name": "scraped_startinggrids", + "type": "base", + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "hidden": false, + "id": "number516222579", + "max": 24, + "min": 1, + "name": "race_step", + "onlyInt": true, + "presentable": false, + "required": true, + "system": false, + "type": "number" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text2428491277", + "max": 3, + "min": 3, + "name": "driver_code", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": false, + "type": "text" + }, + { + "hidden": false, + "id": "number1177347317", + "max": 20, + "min": 1, + "name": "position", + "onlyInt": true, + "presentable": false, + "required": true, + "system": false, + "type": "number" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text1872009285", + "max": 0, + "min": 0, + "name": "time", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": false, + "system": false, + "type": "text" + }, + { + "hidden": true, + "id": "autodate2990389176", + "name": "created", + "onCreate": true, + "onUpdate": false, + "presentable": false, + "system": false, + "type": "autodate" + }, + { + "hidden": true, + "id": "autodate3332085495", + "name": "updated", + "onCreate": true, + "onUpdate": true, + "presentable": false, + "system": false, + "type": "autodate" + } + ], + "indexes": [ + "CREATE UNIQUE INDEX `idx_QPaZOui4P1` ON `scraped_startinggrids` (\n `race_step`,\n `driver_code`\n)", + "CREATE UNIQUE INDEX `idx_1bfQwZkKBX` ON `scraped_startinggrids` (\n `race_step`,\n `position`\n)" + ], + "system": false + }, { "id": "pbc_286850423", "listRule": "", @@ -2033,7 +1964,7 @@ { "autogeneratePattern": "", "hidden": false, - "id": "_clone_fPMW", + "id": "_clone_8Abk", "max": 10, "min": 3, "name": "username", @@ -2047,7 +1978,7 @@ { "autogeneratePattern": "", "hidden": false, - "id": "_clone_Wusg", + "id": "_clone_s6Vb", "max": 0, "min": 0, "name": "firstname", @@ -2060,7 +1991,7 @@ }, { "hidden": false, - "id": "_clone_NeO9", + "id": "_clone_3shc", "maxSelect": 1, "maxSize": 0, "mimeTypes": [ @@ -2076,7 +2007,7 @@ }, { "hidden": false, - "id": "_clone_hY91", + "id": "_clone_Phc6", "name": "admin", "presentable": false, "required": false, @@ -2125,7 +2056,7 @@ { "autogeneratePattern": "", "hidden": false, - "id": "_clone_DK1r", + "id": "_clone_Lqek", "max": 0, "min": 0, "name": "name", @@ -2138,7 +2069,7 @@ }, { "hidden": false, - "id": "_clone_vhUL", + "id": "_clone_74gl", "max": null, "min": null, "name": "step", @@ -2150,7 +2081,7 @@ }, { "hidden": false, - "id": "_clone_3jG4", + "id": "_clone_XSiN", "maxSelect": 1, "maxSize": 0, "mimeTypes": [ @@ -2166,7 +2097,7 @@ }, { "hidden": false, - "id": "_clone_kazm", + "id": "_clone_Dt5c", "max": null, "min": null, "name": "pxx", @@ -2178,7 +2109,7 @@ }, { "hidden": false, - "id": "_clone_KPr7", + "id": "_clone_DjBN", "max": "", "min": "", "name": "sprintqualidate", @@ -2189,7 +2120,7 @@ }, { "hidden": false, - "id": "_clone_a1zU", + "id": "_clone_9JoH", "max": "", "min": "", "name": "sprintdate", @@ -2200,7 +2131,7 @@ }, { "hidden": false, - "id": "_clone_TUqn", + "id": "_clone_3g96", "max": "", "min": "", "name": "qualidate", @@ -2211,7 +2142,7 @@ }, { "hidden": false, - "id": "_clone_YboV", + "id": "_clone_ikdE", "max": "", "min": "", "name": "racedate", @@ -2253,7 +2184,7 @@ "cascadeDelete": false, "collectionId": "pbc_1736455494", "hidden": false, - "id": "_clone_pIDk", + "id": "_clone_m714", "maxSelect": 1, "minSelect": 0, "name": "user", @@ -2265,7 +2196,7 @@ { "autogeneratePattern": "", "hidden": false, - "id": "_clone_ysK2", + "id": "_clone_kDMs", "max": 0, "min": 0, "name": "hottake", @@ -2309,7 +2240,7 @@ "cascadeDelete": false, "collectionId": "pbc_1736455494", "hidden": false, - "id": "_clone_4RjP", + "id": "_clone_jTU8", "maxSelect": 1, "minSelect": 0, "name": "user", @@ -2320,7 +2251,7 @@ }, { "hidden": false, - "id": "_clone_OwkZ", + "id": "_clone_VwLb", "max": null, "min": null, "name": "step", @@ -2353,10 +2284,10 @@ ], "indexes": [], "system": false, - "viewQuery": "SELECT\n rp.id,\n rp.user,\n -- rp.race,\n r.step,\n \n -- rp.pxx,\n -- rr.pxxs,\n (CASE\n -- Correct pxx pick\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[3]') THEN 10\n \n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[2]') THEN 6\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[4]') THEN 6\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[1]') THEN 3\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[5]') THEN 3\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[0]') THEN 1\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[6]') THEN 1\n \n ELSE 0 \n END) AS pxx_points,\n \n -- rp.dnf,\n -- rr.dnfs,\n (CASE\n -- Correct dnf pick with a single DNF\n WHEN rr.dnfs LIKE '[\"' || rp.dnf || '\"]' THEN 10\n \n -- Correct dnf pick with multiple DNFs\n WHEN rr.dnfs LIKE '[%,\"' || rp.dnf || '\",%]' THEN 10\n \n ELSE 0 \n END) AS dnf_points\nFROM racepicks rp\nJOIN races r ON rp.race = r.id\nJOIN raceresults rr ON rp.race = rr.race\nWHERE pxx_points > 0 OR dnf_points > 0\nORDER BY r.step ASC;" + "viewQuery": "SELECT\n rp.id,\n rp.user,\n -- rp.race,\n r.step,\n \n -- rp.pxx,\n -- rr.pxxs,\n (CASE\n -- Correct pxx pick\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[3]') THEN 10\n \n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[2]') THEN 6\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[4]') THEN 6\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[1]') THEN 3\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[5]') THEN 3\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[0]') THEN 1\n WHEN rp.pxx = JSON_EXTRACT(rr.pxxs, '$[6]') THEN 1\n \n ELSE 0 \n END) AS pxx_points,\n \n -- rp.dnf,\n -- rr.dnfs,\n (CASE\n -- Correct dnf pick with a single DNF\n -- WHEN rr.dnfs LIKE '[\"' || rp.dnf || '\"]' THEN 10\n \n -- Correct dnf pick with single or multiple DNFs\n WHEN rr.dnfs LIKE '[%\"' || rp.dnf || '\"%]' THEN 10\n \n ELSE 0 \n END) AS dnf_points\nFROM racepicks rp\nJOIN races r ON rp.race = r.id\nJOIN raceresults rr ON rp.race = rr.race\n-- WHERE pxx_points > 0 OR dnf_points > 0\nORDER BY r.step ASC;" }, { - "id": "pbc_3585110310", + "id": "pbc_4223880558", "listRule": "", "viewRule": "", "createRule": null, @@ -2383,7 +2314,91 @@ "cascadeDelete": false, "collectionId": "pbc_1736455494", "hidden": false, - "id": "_clone_oTTu", + "id": "_clone_fDe7", + "maxSelect": 1, + "minSelect": 0, + "name": "user", + "presentable": false, + "required": true, + "system": false, + "type": "relation" + }, + { + "hidden": false, + "id": "_clone_dFLq", + "max": null, + "min": null, + "name": "step", + "onlyInt": true, + "presentable": false, + "required": true, + "system": false, + "type": "number" + }, + { + "hidden": false, + "id": "json1186524854", + "maxSize": 1, + "name": "acc_pxx_points", + "presentable": false, + "required": false, + "system": false, + "type": "json" + }, + { + "hidden": false, + "id": "json3726038982", + "maxSize": 1, + "name": "acc_dnf_points", + "presentable": false, + "required": false, + "system": false, + "type": "json" + }, + { + "hidden": false, + "id": "json2780867541", + "maxSize": 1, + "name": "acc_points", + "presentable": false, + "required": false, + "system": false, + "type": "json" + } + ], + "indexes": [], + "system": false, + "viewQuery": "SELECT\n p.id,\n p.user,\n p.step,\n (SUM(p.pxx_points) OVER(PARTITION BY p.user ORDER BY p.step ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS acc_pxx_points,\n (SUM(p.dnf_points) OVER(PARTITION BY p.user ORDER BY p.step ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS acc_dnf_points,\n (SUM(p.pxx_points + p.dnf_points) OVER(PARTITION BY p.user ORDER BY p.step ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS acc_points\nFROM racepickpoints p\nORDER BY step ASC;" + }, + { + "id": "pbc_3585110310", + "listRule": "", + "viewRule": "", + "createRule": null, + "updateRule": null, + "deleteRule": null, + "name": "racepickpointstotal", + "type": "view", + "fields": [ + { + "autogeneratePattern": "", + "hidden": false, + "id": "text3208210256", + "max": 0, + "min": 0, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "cascadeDelete": false, + "collectionId": "pbc_1736455494", + "hidden": false, + "id": "_clone_M37B", "maxSelect": 1, "minSelect": 0, "name": "user", @@ -2421,11 +2436,21 @@ "required": false, "system": false, "type": "json" + }, + { + "hidden": false, + "id": "json1247457462", + "maxSize": 1, + "name": "total_points_per_pick", + "presentable": false, + "required": false, + "system": false, + "type": "json" } ], "indexes": [], "system": false, - "viewQuery": "SELECT\n p.id,\n p.user,\n SUM(p.pxx_points) AS total_pxx_points,\n SUM(p.dnf_points) AS total_dnf_points,\n SUM(p.pxx_points + p.dnf_points) AS total_points\nFROM racepickpoints p\nGROUP BY user\nORDER BY total_points DESC;" + "viewQuery": "SELECT\n p.id,\n p.user,\n SUM(p.pxx_points) AS total_pxx_points,\n SUM(p.dnf_points) AS total_dnf_points,\n SUM(p.pxx_points + p.dnf_points) AS total_points,\n (CAST(SUM(p.pxx_points + p.dnf_points) AS REAL) / COUNT(*)) AS total_points_per_pick\nFROM racepickpoints p\nGROUP BY user\nORDER BY total_points DESC;" }, { "id": "pbc_2823555101", @@ -2455,7 +2480,7 @@ "cascadeDelete": false, "collectionId": "pbc_2533072930", "hidden": false, - "id": "_clone_XoxW", + "id": "_clone_Lw6s", "maxSelect": 1, "minSelect": 0, "name": "race", @@ -2468,7 +2493,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_lN2E", + "id": "_clone_dlrx", "maxSelect": 7, "minSelect": 0, "name": "pxxs", @@ -2481,7 +2506,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_aCgW", + "id": "_clone_YWtq", "maxSelect": 20, "minSelect": 0, "name": "dnfs", @@ -2495,6 +2520,71 @@ "system": false, "viewQuery": "-- This query simply returns the raceresults sorted by their race steps (descending).\nSELECT result.id, result.race, result.pxxs, result.dnfs\nFROM raceresults result\nJOIN races race ON result.race = race.id\nORDER BY race.step DESC;" }, + { + "id": "pbc_3189024959", + "listRule": "", + "viewRule": "", + "createRule": null, + "updateRule": null, + "deleteRule": null, + "name": "scraped_raceresultsacc", + "type": "view", + "fields": [ + { + "autogeneratePattern": "", + "hidden": false, + "id": "text3208210256", + "max": 0, + "min": 0, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "hidden": false, + "id": "_clone_YEQY", + "max": 24, + "min": 1, + "name": "race_step", + "onlyInt": true, + "presentable": false, + "required": true, + "system": false, + "type": "number" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "_clone_lePz", + "max": 3, + "min": 3, + "name": "driver_code", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": false, + "type": "text" + }, + { + "hidden": false, + "id": "json2780867541", + "maxSize": 1, + "name": "acc_points", + "presentable": false, + "required": false, + "system": false, + "type": "json" + } + ], + "indexes": [], + "system": false, + "viewQuery": "SELECT\n r.id,\n r.race_step,\n r.driver_code,\n (SUM(r.points) OVER(PARTITION BY r.driver_code ORDER BY r.race_step ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS acc_points\nFROM scraped_raceresults r\nORDER BY race_step ASC;" + }, { "id": "pbc_1743016826", "listRule": "", @@ -2522,7 +2612,7 @@ { "autogeneratePattern": "", "hidden": false, - "id": "_clone_ASwf", + "id": "_clone_u2Xp", "max": 10, "min": 3, "name": "username", @@ -2536,7 +2626,7 @@ { "autogeneratePattern": "", "hidden": false, - "id": "_clone_feSn", + "id": "_clone_IGYL", "max": 0, "min": 0, "name": "firstname", @@ -2549,7 +2639,7 @@ }, { "hidden": false, - "id": "_clone_AuI7", + "id": "_clone_sEZH", "maxSelect": 1, "maxSize": 0, "mimeTypes": [ @@ -2565,7 +2655,7 @@ }, { "hidden": false, - "id": "_clone_kxwg", + "id": "_clone_Aev1", "name": "admin", "presentable": false, "required": false, @@ -2615,7 +2705,7 @@ "cascadeDelete": false, "collectionId": "pbc_1736455494", "hidden": false, - "id": "_clone_gNum", + "id": "_clone_a4Gn", "maxSelect": 1, "minSelect": 0, "name": "user", @@ -2628,7 +2718,7 @@ "cascadeDelete": false, "collectionId": "pbc_2533072930", "hidden": false, - "id": "_clone_JngA", + "id": "_clone_scFa", "maxSelect": 1, "minSelect": 0, "name": "race", @@ -2641,7 +2731,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_lSLH", + "id": "_clone_Z5l5", "maxSelect": 1, "minSelect": 0, "name": "pxx", @@ -2654,7 +2744,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_fr0S", + "id": "_clone_0ry6", "maxSelect": 1, "minSelect": 0, "name": "dnf", @@ -2696,7 +2786,7 @@ "cascadeDelete": false, "collectionId": "pbc_1736455494", "hidden": false, - "id": "_clone_G7K2", + "id": "_clone_Z44W", "maxSelect": 1, "minSelect": 0, "name": "user", @@ -2708,7 +2798,7 @@ { "autogeneratePattern": "", "hidden": false, - "id": "_clone_oLff", + "id": "_clone_ivB8", "max": 0, "min": 0, "name": "hottake", @@ -2723,7 +2813,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_1le8", + "id": "_clone_RgzD", "maxSelect": 1, "minSelect": 0, "name": "wdcwinner", @@ -2736,7 +2826,7 @@ "cascadeDelete": false, "collectionId": "pbc_1568971955", "hidden": false, - "id": "_clone_HQds", + "id": "_clone_nnZX", "maxSelect": 1, "minSelect": 0, "name": "wccwinner", @@ -2749,7 +2839,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_k21B", + "id": "_clone_wNY4", "maxSelect": 1, "minSelect": 0, "name": "mostovertakes", @@ -2762,7 +2852,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_pgZL", + "id": "_clone_okPh", "maxSelect": 1, "minSelect": 0, "name": "mostdnfs", @@ -2773,7 +2863,7 @@ }, { "hidden": false, - "id": "_clone_u3OO", + "id": "_clone_9rOH", "max": null, "min": null, "name": "doohanstarts", @@ -2787,7 +2877,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_8Z5h", + "id": "_clone_WZjB", "maxSelect": 10, "minSelect": 10, "name": "teamwinners", @@ -2800,7 +2890,7 @@ "cascadeDelete": false, "collectionId": "pbc_1967373549", "hidden": false, - "id": "_clone_ahZg", + "id": "_clone_870o", "maxSelect": 20, "minSelect": 3, "name": "podiums",