wao 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/cjs/accounts.js +96 -0
  2. package/cjs/ao.js +1543 -0
  3. package/cjs/aoconnect.js +758 -0
  4. package/cjs/ar.js +794 -0
  5. package/cjs/dirname.js +7 -0
  6. package/cjs/helpers.js +381 -0
  7. package/cjs/index.js +20 -0
  8. package/cjs/utils.js +438 -0
  9. package/esm/.cache/opt.json +1 -0
  10. package/esm/accounts.js +91 -0
  11. package/esm/ao.js +737 -0
  12. package/esm/aoconnect.js +318 -0
  13. package/esm/ar.js +243 -0
  14. package/esm/dirname.js +1 -0
  15. package/esm/helpers.js +161 -0
  16. package/esm/index.js +4 -0
  17. package/esm/lua/aos-sqlite.wasm +0 -0
  18. package/esm/lua/aos.wasm +0 -0
  19. package/esm/lua/aos2.lua +33 -0
  20. package/esm/lua/aos2_0_1.wasm +0 -0
  21. package/esm/lua/atomic-asset.lua +238 -0
  22. package/esm/lua/atomic-note-library.lua +2274 -0
  23. package/esm/lua/atomic-note.lua +11 -0
  24. package/esm/lua/collection-registry.lua +202 -0
  25. package/esm/lua/collection.lua +173 -0
  26. package/esm/lua/notebook.lua +173 -0
  27. package/esm/lua/profile.lua +858 -0
  28. package/esm/lua/profile000.lua +666 -0
  29. package/esm/lua/proxy.lua +24 -0
  30. package/esm/lua/registry.lua +858 -0
  31. package/esm/lua/registry000.lua +636 -0
  32. package/esm/test.js +94 -0
  33. package/esm/utils.js +342 -0
  34. package/package.json +21 -0
  35. package/test/.cache/opt.json +1 -0
  36. package/test/accounts.js +91 -0
  37. package/test/ao.js +737 -0
  38. package/test/aoconnect.js +318 -0
  39. package/test/ar.js +243 -0
  40. package/test/dirname.js +1 -0
  41. package/test/helpers.js +161 -0
  42. package/test/index.js +4 -0
  43. package/test/lua/aos-sqlite.wasm +0 -0
  44. package/test/lua/aos.wasm +0 -0
  45. package/test/lua/aos2.lua +33 -0
  46. package/test/lua/aos2_0_1.wasm +0 -0
  47. package/test/lua/atomic-asset.lua +238 -0
  48. package/test/lua/atomic-note-library.lua +2274 -0
  49. package/test/lua/atomic-note.lua +11 -0
  50. package/test/lua/collection-registry.lua +202 -0
  51. package/test/lua/collection.lua +173 -0
  52. package/test/lua/notebook.lua +173 -0
  53. package/test/lua/profile.lua +858 -0
  54. package/test/lua/profile000.lua +666 -0
  55. package/test/lua/proxy.lua +24 -0
  56. package/test/lua/registry.lua +858 -0
  57. package/test/lua/registry000.lua +636 -0
  58. package/test/package.json +21 -0
  59. package/test/test.js +94 -0
  60. package/test/utils.js +342 -0
package/esm/test.js ADDED
@@ -0,0 +1,94 @@
1
+ import { Profile, AR, AO, Collection, Notebook } from "./index.js"
2
+ import { expect } from "chai"
3
+ import { createDataItemSigner, connect } from "@permaweb/aoconnect"
4
+ import { resolve } from "path"
5
+ import { readFileSync } from "fs"
6
+ export class Src {
7
+ constructor({ ar, base = "./lua", readFileSync, dir, resolve }) {
8
+ this.ar = ar
9
+ this.base = base
10
+ this.dir = dir
11
+ }
12
+ async upload(file, ext = "lua") {
13
+ const data = readFileSync(
14
+ `${this.dir}/${this.base}/${file}.${ext}`,
15
+ ext === "wasm" ? null : "utf8",
16
+ )
17
+ const res = await this.ar.post({ data })
18
+ return res.err ? null : res.id
19
+ }
20
+ }
21
+
22
+ export const setup = async ({ aoconnect, arweave } = {}) => {
23
+ console.error = () => {}
24
+ console.warn = () => {}
25
+ arweave ??= { port: 4000 }
26
+ aoconnect ??= {
27
+ MU_URL: "http://localhost:4002",
28
+ CU_URL: "http://localhost:4004",
29
+ GATEWAY_URL: "http://localhost:4000",
30
+ }
31
+ const dir = resolve(import.meta.dirname)
32
+ const thumbnail = readFileSync(`${dir}/assets/thumbnail.png`)
33
+ const banner = readFileSync(resolve(`${dir}/assets/banner.png`))
34
+ const ar = new AR(arweave)
35
+ await ar.gen("10")
36
+ const src = new Src({ ar, readFileSync, dir })
37
+ const notelib_src = await src.upload("atomic-note-library")
38
+ const registry_src = await src.upload("registry000")
39
+ const profile_src = await src.upload("profile000")
40
+ const collection_registry_src = await src.upload("collection-registry")
41
+ const notebook_src = await src.upload("notebook")
42
+ const note_src = await src.upload("atomic-note")
43
+ const proxy = await src.upload("proxy")
44
+ const wasm = await src.upload("aos-sqlite", "wasm")
45
+ const wasm2 = await src.upload("aos", "wasm")
46
+ const ao = new AO({ aoconnect, ar })
47
+
48
+ const { id: module_sqlite } = await ao.postModule({
49
+ data: await ar.data(wasm),
50
+ overwrite: true,
51
+ })
52
+
53
+ const { scheduler } = await ao.postScheduler({
54
+ url: "http://su",
55
+ overwrite: true,
56
+ })
57
+
58
+ const profile = new Profile({ profile_src, registry_src, ao })
59
+ await profile.createRegistry({})
60
+ const notebook = new Notebook({
61
+ notebook_src,
62
+ registry_src: collection_registry_src,
63
+ profile,
64
+ })
65
+
66
+ await notebook.createRegistry()
67
+ const { id: module } = await ao.postModule({ data: await ar.data(wasm2) })
68
+ const { pid: proxy_pid } = await ao.deploy({ src: proxy, module })
69
+
70
+ let opt = {
71
+ ar: { ...arweave },
72
+ profile: { registry_src, registry: profile.registry, profile_src },
73
+ ao: { module: module_sqlite, scheduler, aoconnect },
74
+ note: { proxy: proxy_pid, note_src, notelib_src },
75
+ notebook: {
76
+ notebook_src,
77
+ registry: notebook.registry,
78
+ registry_src: collection_registry_src,
79
+ },
80
+ }
81
+ return { opt, profile, ao, ar, thumbnail, banner }
82
+ }
83
+
84
+ export const ok = obj => {
85
+ if (obj.err) console.log(obj.err)
86
+ expect(obj.err).to.eql(null)
87
+ return obj
88
+ }
89
+
90
+ export const fail = obj => {
91
+ if (!obj.err) console.log(obj.res)
92
+ expect(obj.err).to.not.eql(null)
93
+ return obj
94
+ }
package/esm/utils.js ADDED
@@ -0,0 +1,342 @@
1
+ import { clone, is, includes, fromPairs, map, isNil } from "ramda"
2
+
3
+ const allows = [
4
+ { key: "allowed", val: "Allowed" },
5
+ { key: "disallowed", val: "Disallowed" },
6
+ ]
7
+ const allowsMap = fromPairs(allows.map(({ key, val }) => [key, val]))
8
+ const accesses = [
9
+ { key: "none", val: "None" },
10
+ { key: "one-time", val: "One-Time" },
11
+ ]
12
+ const accessesMap = fromPairs(accesses.map(({ key, val }) => [key, val]))
13
+ const payments = [
14
+ { key: "single", val: "Single" },
15
+ { key: "random", val: "Random" },
16
+ { key: "global", val: "Global" },
17
+ ]
18
+ const paymentsMap = fromPairs(payments.map(({ key, val }) => [key, val]))
19
+ const dTerms = [
20
+ { key: "credit", val: "With Credit" },
21
+ { key: "indication", val: "With Indication" },
22
+ { key: "passthrough", val: "With License Passthrough" },
23
+ { key: "revenue", val: "With Revenue Share" },
24
+ { key: "monthly", val: "With Monthly Fee" },
25
+ { key: "one-time", val: "With One-Time Fee" },
26
+ ]
27
+ const dtMap = fromPairs(dTerms.map(({ key, val }) => [key, val]))
28
+ const cTerms = [
29
+ { key: "revenue", val: "With Revenue Share" },
30
+ { key: "monthly", val: "With Monthly Fee" },
31
+ { key: "one-time", val: "With One-Time Fee" },
32
+ ]
33
+ const ctMap = fromPairs(cTerms.map(({ key, val }) => [key, val]))
34
+ const tTerms = [
35
+ { key: "monthly", val: "With Monthly Fee" },
36
+ { key: "one-time", val: "With One-Time Fee" },
37
+ ]
38
+ const ttMap = fromPairs(tTerms.map(({ key, val }) => [key, val]))
39
+
40
+ const action = value => tag("Action", value)
41
+ const tag = (name, value) => ({ name, value: jsonToStr(value) })
42
+
43
+ const wait = ms => new Promise(res => setTimeout(() => res(), ms))
44
+
45
+ const tags = tags => fromPairs(map(v => [v.name, v.value])(tags))
46
+ const ltags = tags => fromPairs(map(v => [v.name.toLowerCase(), v.value])(tags))
47
+
48
+ const validAddress = addr => /^[a-zA-Z0-9_-]{43}$/.test(addr)
49
+
50
+ const isRegExp = obj => obj instanceof RegExp
51
+
52
+ const getTag = (_tags, name) => tags(_tags)[name] ?? null
53
+
54
+ const tagEq = (tags, name, val = null) => {
55
+ const tag = getTag(tags, name)
56
+ if (val === true) {
57
+ return tag !== null
58
+ } else if (isRegExp(val)) {
59
+ let ok = false
60
+ try {
61
+ ok = val.test(tag)
62
+ } catch (e) {}
63
+ return ok
64
+ } else return tag === val
65
+ }
66
+
67
+ const searchTag = (res, name, val) => {
68
+ for (let v of res.Messages || []) {
69
+ if (tagEq(v.Tags || {}, name, val)) return v
70
+ }
71
+ return null
72
+ }
73
+
74
+ const checkTag = (res, name, val) => {
75
+ for (let v of res.Messages || []) {
76
+ if (tagEq(v.Tags || {}, name, val)) return true
77
+ }
78
+ return false
79
+ }
80
+
81
+ const isData = (data, res) => {
82
+ for (const v of res.Messages ?? []) {
83
+ if (isRegExp(data)) {
84
+ try {
85
+ if (data.test(v.Data)) return true
86
+ } catch (e) {}
87
+ } else {
88
+ if (data === true || v.Data === data) return true
89
+ }
90
+ }
91
+ return false
92
+ }
93
+
94
+ const query = txid => `query {
95
+ transactions(ids: ["${txid}"]) {
96
+ edges { node { id tags { name value } owner { address } } }
97
+ }
98
+ }`
99
+
100
+ const queries = to => `query {
101
+ transactions (recipients: ["${to}"]){
102
+ edges { node { id recipient tags { name value } owner { address } } }
103
+ }
104
+ }`
105
+
106
+ const isLocalhost = v => includes(v, ["localhost", "127.0.0.1"])
107
+
108
+ const udl = ({ payment, access, derivations, commercial, training }) => {
109
+ let tags = {
110
+ License: "dE0rmDfl9_OWjkDznNEXHaSO_JohJkRolvMzaCroUdw",
111
+ Currency: "xU9zFkq3X2ZQ6olwNVvr1vUWIjc3kXTWr7xKQD6dh10",
112
+ }
113
+ tags["Payment-Mode"] = paymentsMap[payment.mode]
114
+ if (payment.mode === "single") tags["Payment-Address"] = payment.recipient
115
+ let _access = accessesMap[access.mode]
116
+ if (access.mode === "one-time") _access += "-" + access.fee
117
+ tags["Access-Fee"] = _access
118
+
119
+ let _derivations = allowsMap[derivations.mode]
120
+ if (derivations.mode === "allowed") {
121
+ if (derivations.term === "revenue") {
122
+ _derivations += `-${dtMap[derivations.term].split(" ").join("-")}-${derivations.share}`
123
+ } else if (
124
+ derivations.term === "monthly" ||
125
+ derivations.term === "one-time"
126
+ ) {
127
+ _derivations += `-${dtMap[derivations.term].split(" ").join("-")}-${derivations.fee}`
128
+ } else {
129
+ _derivations += `-${dtMap[derivations.term].split(" ").join("-")}-0`
130
+ }
131
+ }
132
+ tags["Derivations"] = _derivations
133
+ let _commercial = allowsMap[commercial.mode]
134
+ if (commercial.mode === "allowed") {
135
+ if (commercial.term === "revenue") {
136
+ _commercial += `-${ctMap[commercial.term].split(" ").join("-")}-${commercial.share}`
137
+ } else {
138
+ _commercial += `-${ctMap[commercial.term].split(" ").join("-")}-${commercial.fee}`
139
+ }
140
+ }
141
+ tags["Commercial-Use"] = _commercial
142
+ let _training = allowsMap[training.mode]
143
+ if (training.mode === "allowed") {
144
+ _training += `-${ttMap[training.term].split(" ").join("-")}-${training.fee}`
145
+ }
146
+ tags["Data-Model-Training"] = _training
147
+ return tags
148
+ }
149
+
150
+ const modGet = get => {
151
+ let _get = clone(get)
152
+ if (is(Array, get)) {
153
+ _get = { obj: {} }
154
+ for (const v of get) {
155
+ if (typeof v === "string") _get.obj[v] = v
156
+ else if (is(Array, v)) _get.obj[v[0]] = v[1]
157
+ else if (is(Object, v)) for (const k in v) _get.obj[k] = v[k]
158
+ }
159
+ } else if (
160
+ is(Object, get) &&
161
+ isNil(get.data) &&
162
+ isNil(get.json) &&
163
+ isNil(get.name) &&
164
+ isNil(get.obj)
165
+ ) {
166
+ _get = { obj: get }
167
+ }
168
+ return _get
169
+ }
170
+
171
+ const _getTagVal = (get, res) => {
172
+ let out = null
173
+ const _get = modGet(get)
174
+ if (typeof _get === "object" && _get.obj) {
175
+ out = {}
176
+ for (const k in _get.obj ?? {}) out[k] = _getTagVal(_get.obj[k], res)
177
+ } else {
178
+ for (const v of res.Messages ?? []) {
179
+ if (
180
+ (typeof _get === "object" && _get.data) ||
181
+ typeof _get === "boolean"
182
+ ) {
183
+ if (v.Data) out = v.Data
184
+ try {
185
+ if (_get.json || _get === true) out = JSON.parse(out)
186
+ } catch (e) {}
187
+ } else if (typeof _get === "object" && typeof _get.name === "string") {
188
+ out = getTag(v.Tags ?? [], _get.name)
189
+ try {
190
+ if (_get.json) out = JSON.parse(out)
191
+ } catch (e) {}
192
+ } else out = getTag(v.Tags ?? [], _get)
193
+ if (out) break
194
+ }
195
+ }
196
+ return out
197
+ }
198
+
199
+ const getTagVal = (get, res) => {
200
+ const _get = modGet(get)
201
+ return _getTagVal(_get, res)
202
+ }
203
+
204
+ const srcs = {
205
+ module: "cNlipBptaF9JeFAf4wUmpi43EojNanIBos3EfNrEOWo",
206
+ module_sqlite: "ghSkge2sIUD_F00ym5sEimC63BDBuBrq4b5OcwxOjiw",
207
+ module_aos2: "Do_Uc2Sju_ffp6Ev0AnLVdPtot15rvMjP-a9VVaA5fM",
208
+
209
+ notelib_src: "h35YJqJ0ve_2pxO5uV1tKTQ44k9WpTBOzk5lGpYcEWs",
210
+ note_src: "6BrngB9N_ujSka4BmsZ2HuRbbqePQFkNXQ-tATp03ZU",
211
+ notebook_src: "NKISXnq5XseLQd_u-lfO6ThBLuikLoontY47UlONrB4",
212
+ asset_src: "CT5qN5e97Fr0wJ8VVu_TRj6qPNWped52IPsJMJ2pd08",
213
+ collection_src: "cLzVDfhmC0JAADYyFkdLQbtEMtL4VxbeGv98TADbbRk",
214
+ bookreg_src: "4Bm1snpCEHIxYMDdAxiFf6ar81gKQHvElDFeDZbSnJU",
215
+ registry_src: "kBk-wRbK5aIZVqDJEzWhjYb5gnydHafrFG3wgItBvuI",
216
+
217
+ scheduler: "_GQ33BkPtZrqxA84vM8Zk-N2aO0toNNu_C-l-rawrBA",
218
+ authority: "fcoN_xJeisVsPXA-trzVAuIiqO3ydLQxM-L4XbrQKzY",
219
+
220
+ notelib_mid: "ls7QnjCPXDeAF6w7mA0cNAwv9hY7r-W1T31X1iEJMJU",
221
+ bookreg: "TFWDmf8a3_nw43GCm_CuYlYoylHAjCcFGbgHfDaGcsg",
222
+ thumb: "9v2GrtXpVpPWf9KBuTBdClARjjcDA3NqxFn8Kbn1f2M",
223
+ banner: "UuEwLRmuNmqLTDcKqgcxDEV1CWIR_uZ6rxzmKjODlrg",
224
+ proxy: "0uboI80S6vMxJD9Yn41Wdwnp9uAHEi4XLGQhBrp3qSQ",
225
+ render: "yXXAop3Yxm8QlZRzP46oRxZjCBp88YTpoSTPlTr4TcQ",
226
+ registry: "SNy4m-DrqxWl01YqGM4sxI8qCni-58re8uuJLvZPypY",
227
+ profile: "uEtSHyK9yDBABomez6ts3LI_8ULvO-rANSgDN_9OzEc",
228
+ }
229
+
230
+ const buildTags = (act, tags) => {
231
+ let _tags = []
232
+ if (act) _tags.push(action(act))
233
+ for (const k in tags) {
234
+ if (is(Array)(tags[k])) for (const v of tags[k]) _tags.push(tag(k, v))
235
+ else _tags.push(tag(k, tags[k]))
236
+ }
237
+ return _tags
238
+ }
239
+
240
+ const mergeOut = (out, out2, get) => {
241
+ const _get = modGet(get)
242
+ if (_get.obj) {
243
+ for (const k in out2 ?? {}) {
244
+ if (isNil(out?.[k])) {
245
+ if (!out) out = {}
246
+ out[k] = out2[k]
247
+ }
248
+ }
249
+ return out
250
+ } else return out2
251
+ }
252
+
253
+ const mergeChecks = (check1, check2, check) => {
254
+ if (!isRegExp(check) && !includes(typeof check)(["string", "boolean"])) {
255
+ for (const k in check2 ?? {}) {
256
+ if (!check1) check1 = {}
257
+ check1[k] = check1[k] || check2[k]
258
+ }
259
+ return check1
260
+ } else return check1 || check2
261
+ }
262
+
263
+ const isOutComplete = (out, get) => {
264
+ if (isNil(out)) return false
265
+ const _get = modGet(get)
266
+ if (_get.obj) {
267
+ for (const k in out ?? {}) {
268
+ if (isNil(out[k])) return false
269
+ }
270
+ }
271
+ return true
272
+ }
273
+
274
+ const isCheckComplete = (checks, check) => {
275
+ let i = 0
276
+ for (const v of checks) {
277
+ if (
278
+ isRegExp(check[i]) ||
279
+ includes(typeof check[i])(["string", "boolean"])
280
+ ) {
281
+ if (!v) return false
282
+ } else {
283
+ for (const k in v) {
284
+ if (!v[k]) return false
285
+ }
286
+ }
287
+ i++
288
+ }
289
+ return true
290
+ }
291
+
292
+ function isJSON(obj) {
293
+ if (obj === null || obj === undefined) return false
294
+ if (
295
+ typeof obj !== "object" ||
296
+ obj instanceof Buffer ||
297
+ obj instanceof ArrayBuffer ||
298
+ Array.isArray(obj)
299
+ ) {
300
+ return false
301
+ }
302
+
303
+ try {
304
+ const str = JSON.stringify(obj)
305
+ const parsed = JSON.parse(str)
306
+ const isjson = typeof parsed === "object" && parsed !== null
307
+ return isjson ? str : false
308
+ } catch (e) {
309
+ return false
310
+ }
311
+ }
312
+
313
+ const jsonToStr = obj =>
314
+ isJSON(obj) || (is(Number, obj) ? Number(obj).toString() : obj)
315
+
316
+ export {
317
+ jsonToStr,
318
+ mergeChecks,
319
+ isCheckComplete,
320
+ mergeOut,
321
+ isOutComplete,
322
+ isRegExp,
323
+ buildTags,
324
+ srcs,
325
+ getTagVal,
326
+ isData,
327
+ query,
328
+ queries,
329
+ getTag,
330
+ tagEq,
331
+ searchTag,
332
+ checkTag,
333
+ validAddress,
334
+ ltags,
335
+ tags,
336
+ wait,
337
+ action,
338
+ tag,
339
+ isLocalhost,
340
+ udl,
341
+ isJSON,
342
+ }
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "wao",
3
+ "version": "0.1.0",
4
+ "description": "",
5
+ "main": "cjs/index.js",
6
+ "module": "esm/index.js",
7
+ "engines": {
8
+ "node": ">=20.0.0"
9
+ },
10
+ "author": "",
11
+ "license": "MIT",
12
+ "dependencies": {
13
+ "@babel/plugin-transform-modules-commonjs": "^7.24.8",
14
+ "@permaweb/ao-loader": "^0.0.43",
15
+ "@permaweb/aoconnect": "^0.0.61",
16
+ "arbundles": "^0.11.1",
17
+ "arweave": "^1.15.1",
18
+ "base64url": "^3.0.1",
19
+ "ramda": "^0.30.1"
20
+ }
21
+ }
@@ -0,0 +1 @@
1
+ {"ar":{"port":4000},"jwk":{"kty":"RSA","n":"vAiSYEBIogdeHhE1c-WoZOrrpsqing6sDQffTJYI7v2Hik7WkjhtxoXH3xlWk-dfUUXdntGEoaU9cBIdBz4EczxIkvBZ0e2bJQgDrZfbuQgy7RMdcvvCDQYXhQqF_DkmCbxDjpnP_W_Z3wL_7Sil5Ru5Jj_M_c6cyODuOiv8WZUZRi1KCoSuUVZr6dgiqGmzU_tBtZgoEtStKb29RHtT0PgpktWTYTk1nHWpOrA0mJMivrDdLmLfexFe_bPpZp-cW9MxOzbdj_jG3VpZE6iT6z-g2H2sQC2xROCvYMrhu2JrV447gOT81PKPw4sUw1aPE17GKg45p58aaa1c28-c0o_VF4CsgKh7SCURWpY0BUvWfw4tJX1l0CCu7OxdDT0pLzagy5mGke0vz-eQH_NEUeAyjqTzV_42WoTEisyGvR1wD9iEd_JKjJBWVII5fbZH3cMB3FDvgNaZRfCMNKQPMdF7evBUEXW0RwVF3Il5TfbIGmLQN01QV_U6L2XdZT69BESRHehUT0W5JM5Og1m9-Kn8ZKN1yL5XifpiGsZlGP5rNw1uKKMLopCAuYzngwjQq-nM-TrGXxlFFuX-L3tc3I8MdNXpTkdXT8xpUetVZrZ2W2oUfSpl8Bp4DvSkqIYssjbxQjMO7KNRO5HvTrWj9iMtuQLST5ooVvEdVmgTDOs","e":"AQAB","d":"U1MxGnoiNbsyF_zkRRG2h9Iaz3Toj0ZNNBETAStTliS_lajOKUncS6cpJVJjLXPQp4FgbmrGbaN-EFXWi0kOS8qhFoxwITk8ETL1_k1XTy20854O5M9v9LmIXqqFKXphwtqszVqX8uVIFS2NIBltOpQIfkyzmJ2gmNwkdZ7cWw5ZfuG-995IKT803xGqehstHsAvJDvjNkUM33x3jQth3y65rZn7j4_8k_MIJTvEcwBw2zQhL9cc1bqi76Z0fcepUH_MR0NO9-f0qE7LPozrz8oIiydV17Ln5W_0B96gHZvFma0r7TiMWgmLb8oIT2_iQ2EyS5y2K_OzjrUGe1oLUfdj-M_gNgFCEsVDsJU7R3JdZp-oR5_D-wYs6uCs4NzkvgiF96zmx0Dnvw6p_eH_vgtZJeD7gBbtzfbKwqwG1IGA8f7qywcdmYSF5igGcyoYhwAUcXDIZSh_So6YdNxN5CVzknTHiPZaPHMSxjK4LZ3YiQj-ajuTefRZgviKFcArOBSkjL2VacleKBOH9PZci_1jaTQklaYVwHJD1K9aWEuF2Jc3_G7dVET2SANHeg2RPjPHAnsk4vt7ratL4ao7N1SsudoumFrJ429Hd6Hu01GDE2gq0RYmBXhAZwXJ7WtGv1kizEHR__ASLpbi21zk2vBnnAiQfrni3xu1wLq5K5E","p":"_gUpJCExeTkLcnp7spqLyMxAk_Rrbgeyec0ra19zGWLFbkIm-tmA1g0mRM18DrLHsO6LTz2_cVjolAs4KQW_3RNMXd2VxS4gWbdtA5kcJIemydayduwVeIf3HHhVzzCAbaJ2144Bnmqsgq3QC3aV36hH9QlBCR95OTzn50FCvR3ryH-A1YZKjADu5dQfsvXFie4vY3qvLSBiivYyXqqTYRExHjtSImaluFTzWa78-HHjLUCVeRbS4AfFxlG6XQEFTKZLuAnO0mth2_IcAHCVbKlXGSt377fQHEYmZ7xKuOw5eyt6abx7CTk_DRJRfgwonbFITfBQwLU2s7SAwBJd1w","q":"vX-_7SauLYNBRP_bRFEiXyf-gf0BAFVCP-hbkqhd6z2CybooIRibL6ZAJ26GPWhWxFlaCUXQhUSABWoroo5mlef9QK297jPz49ZKZcfuem32eo60ZGPNGSrBfhtHmQc8tIqDFHjdLKPBJIvxk4P1gwQwRonYyik9lVUQMJ_sL-rLjNQ7i4x-oKaV-YsUhuBv9zaBD7H00jihWBPSYBX809N0hAXeJXLNwMoLZnmDLl1OJg0VccIuYLTaczT0j_BSULI6VTVifyUHppJntX1WkL0x6bjT25N9bXlwMPFvXi8DRKpaosgJHEUYRrlAbG1VoPdDGN-aqCSlzAIRSwrfDQ","dp":"hkqGKIKf3B1rTtcwBAkuMzbAQTfrf5z0Hu53sOkiOV59T8ALSXypXwBOpfsYRdEAPyqtXXQgfLTrKDESPKW8fAzSx6D4p-it06BkMo3EUg-g_n3RlYtUAoem_Vckzkcu7kcAmw6JDo4Iq4FmRlkn_LjDaei9iCwqczcexqQ6uy5RU4sMulWnnYJ0ye4t3_eMulHAnc_jQnEnh52GnYOCLMPg-sGTt3oazGukx1n6hQH4fxjwrLaDP0r8pM7aPobmnVIhH6eXvqhkcNn7McRTSsHvuO_BFWtQy1HOxfLGciL4dIRU0AeD6ClqiuePS5rz8gIiXonYtzhWNgUMN_69uw","dq":"aN5FrEv3oCA_ApxFD62Gw_oyEmWdJD4Kh6ti4epi70f_FPv8MTSYzOnIHwo_J8SSH98CwJbuKpIZ9uUmeLMtelAECsMblLMTiUaRrXnTM9WezXwjwFqqqf7LTapzGPC0W4U7vRyV6ZpFzJ_VdLlWKMcsoByw6E-iUP3eE8qsvmfFdY4N1dBOU0FdRdf96BZUYA69pZ3pylykjUWK6rnATMl8dYN5yGecDdDCNleQjRv9n3kmIOpBGCt9qLvpi66HHzlCpt0AQTSQ41GqKvnN6hOJh7pNI_qfMvI9cBhsdUa3HEzaE7N3tzlVke37BQYMmSO88grsX5jIV_nc8BZ4EQ","qi":"8XcLLnE-6jPJURB3K-BNPBylUxXwQwEeMs4MX7tFXqxnnh2A23tVhOXESEb6PDkKe2Gql78B6_WrbtiTozV_-c6M0VjqGHRor62dBCvef9mUpiPUxkbflwlmcbqGTuiCNZyoZxR-8Pf0E2al2WxEkKeQjkplNHWt433A6hbx3rx8HsWAdM4RhY3LMsddGpFMc5gjm5PmTKo33uC15X16SmpC00SeVDnKaoiWWI3005RmMP2Wfago9XCTEwBsWeozQC7R2zI3CuW7jX3W6UeUYPoEeS3Qa0suCP4CqCbfNwstl-SQhWtm2IVBpbOZTDQ6e0cYUyyMGVh1AMCoehHMrw"},"module_sqlite":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","ao":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","scheduler":"9uDpdXg7JjC8xonD61nylkcjA2QYIti7jqSKgxOuLWs","aoconnect":{"MU_URL":"http://localhost:4002","CU_URL":"http://localhost:4004","GATEWAY_URL":"http://localhost:4000"},"ar":{"port":4000},"authority":"XztbUZU7D8lAcWlbg0avCD0s2lMBbFGgTC4YzLcOR90"},"ao2":{"module":"KCRP66Aq-4uQ7R556SgaNtzDNSnRJW4DA1m5sgxirDk","scheduler":"9uDpdXg7JjC8xonD61nylkcjA2QYIti7jqSKgxOuLWs","aoconnect":{"MU_URL":"http://localhost:4002","CU_URL":"http://localhost:4004","GATEWAY_URL":"http://localhost:4000"},"ar":{"port":4000},"authority":"XztbUZU7D8lAcWlbg0avCD0s2lMBbFGgTC4YzLcOR90"},"profile":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","registry_src":"maJGJ2tAa6zVtW1rGhngNlhEZDUqbCwO3r5mYxDBCsQ","registry":"yRmn7BZDk_c916ZNy8JBY-H52vYMrP8SBp-npeOgAbU","profile_src":"LNTKw-wvmybqSrxvtMYtdplOADLAey1c8FpNXoMa638","ao":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","scheduler":"9uDpdXg7JjC8xonD61nylkcjA2QYIti7jqSKgxOuLWs","aoconnect":{"MU_URL":"http://localhost:4002","CU_URL":"http://localhost:4004","GATEWAY_URL":"http://localhost:4000"},"ar":{"port":4000},"authority":"XztbUZU7D8lAcWlbg0avCD0s2lMBbFGgTC4YzLcOR90"}},"note":{"proxy":"0uUOLKRlt-4zume2JnSeIYFlSK6-5mH51kdj6o3Q4jw","note_src":"XmteOz1FGAFKGLRtVQo65-ggchiQJ1bJ7OrHueZDK8I","profile":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","registry_src":"maJGJ2tAa6zVtW1rGhngNlhEZDUqbCwO3r5mYxDBCsQ","registry":"yRmn7BZDk_c916ZNy8JBY-H52vYMrP8SBp-npeOgAbU","profile_src":"LNTKw-wvmybqSrxvtMYtdplOADLAey1c8FpNXoMa638","ao":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","scheduler":"9uDpdXg7JjC8xonD61nylkcjA2QYIti7jqSKgxOuLWs","aoconnect":{"MU_URL":"http://localhost:4002","CU_URL":"http://localhost:4004","GATEWAY_URL":"http://localhost:4000"},"ar":{"port":4000},"authority":"XztbUZU7D8lAcWlbg0avCD0s2lMBbFGgTC4YzLcOR90"}}},"notebook":{"notebook_src":"cAa0NBOgYfQPRH6DEcKxrLBm4QExws4FCKAyP-LHufg","registry":"EGVoxgKS9V4z6w21RJ9HiM3Q6TcwgwdwX8INSUTUuKE","registry_src":"6EX6wZ8RfUHbSfUvhU5Aby7q52czm0T-RckiOrIG4Wc","profile":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","registry_src":"maJGJ2tAa6zVtW1rGhngNlhEZDUqbCwO3r5mYxDBCsQ","registry":"yRmn7BZDk_c916ZNy8JBY-H52vYMrP8SBp-npeOgAbU","profile_src":"LNTKw-wvmybqSrxvtMYtdplOADLAey1c8FpNXoMa638","ao":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","scheduler":"9uDpdXg7JjC8xonD61nylkcjA2QYIti7jqSKgxOuLWs","aoconnect":{"MU_URL":"http://localhost:4002","CU_URL":"http://localhost:4004","GATEWAY_URL":"http://localhost:4000"},"ar":{"port":4000},"authority":"XztbUZU7D8lAcWlbg0avCD0s2lMBbFGgTC4YzLcOR90"}}},"asset":{"asset_src":"sZe0uqoLAlzFtFcATqERh_Jg3yvyJ-P1Fp7MstYUr8E","profile":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","registry_src":"maJGJ2tAa6zVtW1rGhngNlhEZDUqbCwO3r5mYxDBCsQ","registry":"yRmn7BZDk_c916ZNy8JBY-H52vYMrP8SBp-npeOgAbU","profile_src":"LNTKw-wvmybqSrxvtMYtdplOADLAey1c8FpNXoMa638","ao":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","scheduler":"9uDpdXg7JjC8xonD61nylkcjA2QYIti7jqSKgxOuLWs","aoconnect":{"MU_URL":"http://localhost:4002","CU_URL":"http://localhost:4004","GATEWAY_URL":"http://localhost:4000"},"ar":{"port":4000},"authority":"XztbUZU7D8lAcWlbg0avCD0s2lMBbFGgTC4YzLcOR90"}}},"collection":{"collection_src":"5MGgg1uHqI04MS7ZZNJSDYld2CqxyC9Aws08k4VZey0","registry":"EGVoxgKS9V4z6w21RJ9HiM3Q6TcwgwdwX8INSUTUuKE","registry_src":"6EX6wZ8RfUHbSfUvhU5Aby7q52czm0T-RckiOrIG4Wc","profile":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","registry_src":"maJGJ2tAa6zVtW1rGhngNlhEZDUqbCwO3r5mYxDBCsQ","registry":"yRmn7BZDk_c916ZNy8JBY-H52vYMrP8SBp-npeOgAbU","profile_src":"LNTKw-wvmybqSrxvtMYtdplOADLAey1c8FpNXoMa638","ao":{"module":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs","scheduler":"9uDpdXg7JjC8xonD61nylkcjA2QYIti7jqSKgxOuLWs","aoconnect":{"MU_URL":"http://localhost:4002","CU_URL":"http://localhost:4004","GATEWAY_URL":"http://localhost:4000"},"ar":{"port":4000},"authority":"XztbUZU7D8lAcWlbg0avCD0s2lMBbFGgTC4YzLcOR90"}}},"modules":{"aos2":"KCRP66Aq-4uQ7R556SgaNtzDNSnRJW4DA1m5sgxirDk","aos1":"WpmAgOtIAWrtwyrMpWQv8bsINlFo9N8qu8lXng-Hjv0","sqlite":"I2E4Uu9bVmxCmXmfSfwQ3hOosbGRIKpF5qebATBylzs"}}
@@ -0,0 +1,91 @@
1
+ import { createDataItemSigner } from "@permaweb/aoconnect"
2
+
3
+ const users = [
4
+ {
5
+ jwk: {
6
+ kty: "RSA",
7
+ n: "uZbloE0aCITj9JxuK8IhhMf1aCJzDKG9oK72Y6-D1p6VrSQ39irWxa5b2conpLnlI_8eiiwuUbDB1a_Zq98icah9I50Ky6E4iAc038yKILE3QVuJO0M_ykbDEeMaBufUFl78kQYFS9wRTUy9pDOdNp04TvN8cyB94w6ArubxAzavq95U2b2XEaMXWPCX5K8ahZmMc0OzAvNVoLBIXrrnkvB8hvIxbZAgVHmLl10A47O-7EADqa2_ErZA6He2PTnQexMUEWhyfqhRPLwrnzR5CfwnRKr8HDMsUETXz-tuCpGcDDsmPjLPutCjS4Cc46bxEfOdW2pfjAYX-epoeL-eiu7-dEf5fbEWoE_c_IKADgzl5D7t3GgojoHGBZof--Xse-R0vqgpw_w-ovDQnxzWlwtRBqwkWxqAY2v4KsNPMKVxS8eiiRatIMca8Q38wprJCOMs0hjlt-k5WFCez6ndvc0Ir2Zwo5ojk9RfpFv8pEgzqZEvaWwzkGNB5BP5_HOCS0s8zGTzo9xn8niPhyDYZi4__7jR1JVDKRK0Cc0dLO-yF6jDppAEXpUMRyJ-chb9_zJ-vcvztDrKfRK_pcHb7KyluiJHUPq4QBB5RAni9MXLBItEZzhFLMogU_sgWzkgdRFxHo7Ne2z_C-os0QAAXOE4WInq9j5Zs5TNuFTV5Rk",
8
+ e: "AQAB",
9
+ d: "BTKkOMKgDYgHSGUPMtuLi8f76BA676oiAPuVfAJA64RihchjZtoZTM0O1oEybgskz0bIaK9HFtOgAiecLZOgx9UjuBkgYcagqjKlePUmEzdTaFmzdLzz7urfcMNPCc15Y60CXt9vy4mc1HDnSM-HQi3SE2f_XswUqoTP9tYR_viLoAEomDaWohBSyZNndaiv0fkUdW_6dgUxqz_0ru6GKNfibPcgikSEm0kSL0mUCkyQ9tXuJFTw6om_NKORr5JMc_37TGeD-Wcma1CL2jgigbSVtvcg-3s1bQQYlUKvQM2GNNN9RTWwGrfYMvelrTySOOH9UL-gcHAFQOMfTO509rviDOwHBGzAa8mp4GIBPYiWHFwEmyNe7VPe_71AzxSjVzZo5Wn63xzpNRZCK8ujm2CHFehEMvlq63cM1kuh7YCLRytOsGWVjoMPe3vhO5RDwrQrhwFE5nYwzWHxH4dbsh8IsT8im-yfUqv8Er5aJsMFmhFMT1OUqlIQOQ6cRI9zJdjB_rwHWVLWqrw2RZLMXL_Wk8LSDtRqaBTqjRKaXLOHAsz7O-R2ZFKuHuAAuNNGysCIdAIVb7q9t01WEKQS2DKLmOaDRHeuMBQne-KWUSnWWkOo36gBiWajQa3lYyIBdeszaTi4Tvvk-yDtMHonqAuGVweuZgHMKIpL6y4Q0n8",
10
+ p: "9X70tZFhQYI6F3h9DX44G5jY4sP-GuiIkEBn27a_L8XmyG_WF9VYYIV0m5y7ZBhM6v3hC-m4iJKxDpAs3hj0UQn3KQDJOM3flxAEcWtFFSF2IE6vX79uB1B59JbSHcoDJA441JwdWpCCyQiIg-ryh0X1f3DMTPoWdcI-KD4NeFvuMkQFqgj9-Y_J4mhW88WzMHexwVEFGPYbJ0ZZ2Awny6co0__t9U2Cst721Bs8Hon7JH4pqEFO4dzY8YJ3scGVn01YPumDkKcUrOTxLgQxlsNZjzQqdRg3YEby3G_460aVMt2XT_MS6GpJ3QtOIpUZRWNVc4qZarUw1ko6G17zUw",
11
+ q: "wYfBHNc08gHPKSrR5rqhUPVTB8nALdwiSMka4mNVMji8DouF56s6eZPxP8IA5c5lcaRUFy70ofuFUduQw1vfy1VyzadMw7pIAWPmoi_L1fFbrfwHIuHYervPH3_wpg6kLFEbB9fdCX6ppypgVb9j54Ls6v0UYqj_Xr5S44ebndB6QqBIXZk3m5Njh7eAXMgBaoZSGHGWTk_p9fCnFFE0TC5QHRNggCzP4P_WmZ5wwgr9Ymx0Q9pPkKee0ph3nWO758lKyk7P3MLAFnFhbHlU6PF6Tq5aoEfjvvl7vNcnLuAXbSPSiriyjIktvHjVdCtJ3BMjlNE9EdLoWwGl-d2EYw",
12
+ dp: "k44mSYfDPBupDPhnuZd24-d_3PTOo5_GjWWYxy_VREKgDzNhLFwYTZOJXgrbezM78DZ-cKmfN79r2oP_49J97sOdojCNwa3ESUjgUseV8zh0hsCkmlk2KgFN_Bw22J7WOnKt5-SZpBid83VEkH3EHliHUX0b3tymaUtCDvAVKpWe2umVufjDpp-tSX9LXCQlKumWlso61SD_eyDG2Zucw8SKPrpibYGUICzxkNV50iU_JVULds0iO5GBd8_iX54qb2COvOmgIW67d5v39p-gqqxqBS_moRDYH-8lBCftJoT7ImKcEvrYD4frM4gbA6A4W0N0VgklY0TawMJGoLL2bw",
13
+ dq: "cUhft9wZN9frRXO1LlPsfZE8qwBjp_SFdQmS3RW8FwuyuOje1v8Z2XTJ8MJE-D_ajazdNDzeIbszDPlzQYeT9lfsPYlCnAd8gqPRqvpDXNZNDgjKvJZqu10YHp4rZWiInRBUvECVOCuWby2U-lxvxGKU__BocF_wK6tIpbsJUlVoW3urIG7BaCXcSuMVFjpU6d_6SiijDPAmSTo28uOds0IgzwQ6poyUmmXnXkCqTEtWirhlThqKHGihxTBORCjPIxxm1QlRDy5Idlqj5nUXSMuhBlF05wFtxKoQzjc6zmuKCu6_HUiD61OZHAu3FqsILvRdDY11K-vC6xKJ7zrFdQ",
14
+ qi: "D5o0OJycgyWor3HWRMXmjDJtgciMjXG0YIlKxHeb2q3xQ6SJttqW-ZKstPvUQEBOIe6CuEkGbj4K-PgtOTISmHD0PInTsqm6Jbe_MdRWxmN2cUAZd-aH466bsgq881TrIuxQsmnVROowDSSrXX0OpbO8he8vv_DRImKImkvnL8-YN_oTtO2b-f32VmSI7v9Ffu9x0MgTJU0PfAlo42czDfkkaXshqZPHO6t0Jq-vaPTnSfkQWS2nNvFunzs1HX8zjURzLiRufzT_0Er3fv0It9uYLD_lpPUON6EvZyUm46lPAivxgNQ04mtu0GVgFm0QlImH6xqLm5NU2f_Q0wUb6g",
15
+ },
16
+ addr: "Rix7e0HB-8OAaimcoYkxTZB-dStgTOHWUik1DvKD5vM",
17
+ },
18
+ {
19
+ jwk: {
20
+ kty: "RSA",
21
+ n: "mbXYDG_yPtr5tqM51zYRNNfa7bYfgwz116HYiERYeLCxMgQnybW3Gh-32j2pzDLsKEL1o8WOu09AugiG2NF60Zx_Y4Wr1dME0OgipYddJ2VesaK5vb48lv5K1J8Rd7w6OjMpk8392Bpnq2e9cruf2-ZtJhVzRsuBGAa2PvSo7IBJC11uCjlwcoAEyKMCOPriE8_ZdagFbFcfiH9m5ApByNmIH6wYB1at5GVbkYACqzyc1qV9XfZLuzJ6CO_2OMtbpjPeZ10GOXALqFY4JzBtGdyYgYD4RNb9Sah-SLI1bedxCRLjQjrxz_nXVmE-2hZmFCada5HKChhwqTdvtEd9DjGh8QHNJvE9K1_YqBy_twY-qdC09LKn3v-XzwiGdTWHxKRF5xbs59VL8HY3QP2ZPyE_nXehKuoQlw8_1-KnL1MYyYqYBnu0QEXC6NtUbidRHxAdNFepQRIbRPNDXbDa9G34I98AW4I-VhHc5kHSMW24wB1mBbUXXiNYhJ25JugQGZc6B-dY88wr4oy_eTexZ-9uCL4_tCSCTC7-VQcV2rpEI31sei8pQ_LU4SdwjMw3jocFFEBRmywo50YI2geGT7pO3iGuoLQ2QkLBsSQcJkSeVOSuOb1BCZjBjc6_3Et-wofBFtgX2jSOP0JJTy61Pg3DWYe34OF2IVr0fcF4U30",
22
+ e: "AQAB",
23
+ d: "IbB1deRjV9tut9T2rHCxPL_CwC8WoQaKK4TRjKxOJ8WyUKAQiGlHhHZHOZIiURsoH3rtk8ONEQjBywRracIgBSkj0pBNpUPm3lLCpT0R8byKEKz1wNydMwrxI8DpdzDOIktsZXTUmjTPXAYUw7zTwMK0UZCJ_45C8R0nfIzrKUrEt7T2lU8Zkj70zXTM2-hA_M6lfuAgsCo4QxaJWpnU6UykRSzW52TcIB8G_tDrxNQ4G-ORorKEzra1gJf3g2Mu5zKfIFCHOLeSFocvL4exoeVzl47I222zfh1r8Er-4uPDJpX5MV7x-P9tbwVJXUtjfC8qeZUujx_kMXJxDTZN9iM28kZRiyHlKu0QwceevRwAAsoLwVQq0nvEHxPM5iuGJL4bomtJzULS3nphoO3MvpI8XDG7L_9wIjfr_joOolPTQoiVjYDpcy8lxQ2ZFUYHc0LaIzfp3KUR7N0cfHtfXSXJAWnV4bBY_joVSkR3xw8I-MLJALSteTP_yjTnNs1ncUqel8ZBurKVWkWFC0ymxCszGOXyVJ3AFVjRdsi7x_PX9vJnbYy0A5fuFLbtEp2ha0j5mDSjPcE5DhZ71ATJtMr7nsa294_JMyMD_0rDbZNkFEB_dyIal_T3kqQqQbx5AKJsY1PQpEmJnSIOk97WLX23xXppFAzKKWdMBqUrNQE",
24
+ p: "1uBrjk44EnkgHMyA65ySgCnrUbLZI1w680TdCwpIs95Da2-z53twsaezS6Is6hLoZL4eNa0C259rhOMsKVaQGWQzulZxXgXy20i7v1S4md_zTgg85tws-HEj9hCugkoVU5BbWmUILMlu3sq_zNS9hN4IqgexxI6ws2TKea3xjGZKHkcnW8ut4WE1YzHmYF26x1bQyqIHnRwPYgpMXs5sx5cJrNLgVG2FluTpta0cMykqce5_oKKMEkwFxfedqQHyjdQLt4GucjpW_Hk2b5qK590iAirZv7J4seejg7O2su0tmRfRgKxPCxgi04za49FV-ErnsOUeVuxiLKidMi66LQ",
25
+ q: "tyCqf8LGUQmJVTteAbh7F2uGWtG2nYz3RJidlcJuFcu4Cf4vEdqtvFdLZuQmjOaSozeZGS_v-eiM2XQocZUfyZw7xyEuDxXQFCD9W1ZGSSJNS1w4EEGOKqgrahqho7Jwg04P5jbjJ-0fUhciXLcZQC7ptsbY3T83SN4ojj1UgB-aif0r4f-_LLvC_zgnhTxr5E7ATzyIPb65QXYSmUM2EFWB_2UPw8AWQodNZsDGT45pB6uN4f4lw0R5_xIeM-0z0EuY17dZgcZB4yKVY6_eHDVV4KopthgeIj5ebZtVT6mD54OZURNtm_1MoUkS4te106XezTmWKnjP6GhJefBgkQ",
26
+ dp: "C0QA35kiP3WyRVBDghbXZ3jLKaFi2QPA43g8zpNfdG62wi89E2nZYrcUI2cBS9Rp8r40_0Nu3uzgyjrO2ev76hjizWYy02ckcHLDxSg_9XFUZEbySnhIs03bQM9nFtWjgJoU8AxT_WUiNvQSUj7lIM4zThbRLyj8AqvKIc8I1v-V6zh3y8xF9YcPMYAwP-UqIcFfeQA9vfL2q4E2t9HCykQU8caslECZvGuMBUZqMBR8cTS75EQha-QoeVSeI3pCqUTwyFI4Pyzn2pzQSdGkbrudSNfOSsqkoU8vt3v4nDDrLxecmE5wZniBeu3rm_4hr77dntykVpJWI1lDxJnGkQ",
27
+ dq: "Pxd3BmthjfveH8pDWg5oAiqecF2-L8uoSS7XZAhHiyTTtEWpi9oubywYI0vJaFPsA2WdToswf4Y6OJUHdhJtkDVOdw2cY8AdH0I6Z6RytLGntaYA_sDHLTUhN_4S4GYS03oqiiMw4cmVN-AWi6DdhzpidQFPJ_Kmpmk7yb2hhj7dLFtYKhXFlLDfvrRnEUU-2rqzENmHCtbR1pbKU5lPYBNFpWr5InTkdmlNJnCWIkSrNORLDqhT9FF8Qn_IfhVj-4iAERnvMYHPo2R_2Yd223sYqj2V_1GR2DRqrhKNMtPxSOsTAFbUNaDwLMUTR6oPz-pet4_2h411-9kqL2O8sQ",
28
+ qi: "G8-51_DkhkqorPChF7jmBrlu94qW5mqRMZWB0OS2PsV8OG5-LsdmIMT5Pz_r-3EtxJ0VexxmjPk0RWjQydESd1u8mqGpScPBuAV0Th7QonHad4OtEnwiiQi7U3kmhDAH4C-BTxGxfy2zH-DLPHEVMwQsoGs0b-eEtlxn4q3iziSZMVQvuZUKqHFy3Uj5iRwzkozqUhK3jHEumTFWpyjre4oWQy-EtHRPQ_vlrYVoINkbOZSSXIVgPM8bhsuFEI9oAWtwxZPsfbezueHlNAb7wOLLoGwuR3_ILkvoVgSb2ZOVOa2keNyepWHC8LWQsV8tPHR6r2bQ5YWzCCYBZvf3vQ",
29
+ },
30
+ addr: "I7rrECHrYnAC_BIEbfHqs84UtK2ZJVNJfHaXEezVccQ",
31
+ },
32
+ {
33
+ jwk: {
34
+ kty: "RSA",
35
+ n: "xOm9h9pK0xtofkLwiTzp-H4QXXsj5nVEVYotY6YGWXItVQkRkSZfTYLvQpUmEMy4XxrOQvRl6l7KXdm71kDlSBvQT2mS-G0dL5mZd1kw3SZ90qs70Q-yemXNApgSgjPWckesSUOP6933x3BM75lVL--RTbNmGc8Cs5YqbL3drsrDoyI_PDXuxCDVpLqbM9hdtjM7PvCCz-e3Xl4Xi0SSYhSrvRQZ0sZgK6vIL-K7bihqfQlSuFEBZBm01PH4mxL_jX09ptaVDt8ApI91d6NMfwchZMOcodvKOxfFPfa17EZse4uI7N2-xYH4DTVyhTowmLoKH-rsNHnSP7QOoWeW3rVqm5OIlTy8WNoeIoIpC65pMnjmwebCv1AKqz50BhA0xEMaF5QWv-cZ-JsR1VWl3HnYX7YThVhEKx6gBboE8oftnxjBDWNmM5EcplHpHdnIKzOn4GlxJxjsQnG8lGP7o2kZiUvPjN4mV1dTUBGXv0wIGDWhCEV7HVhAwGnM0QLVHOEjtCgTDEdtO9RsltG3iOlFvoUEeJvK_qe7cyaV1GJOEhWkLHA5FDb-WrwdgW9gRMF1gyUdIjSLYP5sE0_ocugQIztEeyWuTm3phaL_4LRDyQOSGb-W0YwuVXdF6FrmEWZ-IntMqFUl4Wu3oKf93mDSO2Ow_D-rHwqM11NXc1k",
36
+ e: "AQAB",
37
+ d: "BGkKaFaX2okW95owg-THOVw6qee8mtuLBrhwzxyayhn5naZozCqC5wjhxEj0M8GfqoYLUx2t6UheU3V-OvlnbHLh1EZOA9e1ZOMvK2iZV9N8hqfa3KvNLueE5mpsb00E01JU76u-XdIyC8RxfX24PJN3mp9dqZvRmJ8D8ooN6Xpb1EiyB_taqCFmvGKik10LLxRc-H12DJaI-Wl1l2_kFtbI-7pNk5ADLoJrM8L20p8mNwhq37tB78SrBtVbLYv8IpmvJ3a2AXTpfh-pcGvKDMYZ3FImRrJi-4Mku40BFgDqZDNj0A-HLfcwGVZv99k6plBAzEy2DCNwKLwAoBXvUtUQ8nRk-Ec4NohFh0NMTlWhBIrRG40EVaMr7CEQYqar8WG7EQi03rqc85hMdWVaumsJzjXNfQrI3MXWOXd_nDN0BcFkxaVlptJAuHHnh97AkqPhehZ_KnpGpcO8V3eUzYZLxVauMwGDgAVfsfTc06Tct6Vb_R2Bt7rI2EnJ6kpN_-PZec6reKRuEm1Mn5gAGIcvlqyZdINxFMBoqjQD6mliMpHa3bYKox-t05LYA0ECs2I0RJAJWptZvQ7IiQZgzWmObcdktZSWZVhqJ2mVw-Vl2krIsaMmy1AZzJUSeiRQCxtaJme1S_24M7-Qm2lDgWqunpBaSJr2DfvW6yWVr2U",
38
+ p: "7g2Z7nevoE7Lzm1rqdoC2tyYIzsra6cdlPyl0KgAPix6ReRzJ84b2CZtvBS6r4D3g9MJm7PpbfSOesv_p4lA-KGeDHjn-1gL6ADFechmPw8wBAE1kOHRF_ibxP3fIJ6TGuGRaLhh0yHUORg5y6P487g8JsslMFZ3drW0mKj5-MCr2KhgcuybuEdxCi6ERKJrHIU0iBNBeE5P5SgHx7YJrC-K2SQZ8zjSIU21nkXlIaNtPkwK2x58NQIL8fTloT3wD2gavwLO6J4jWJi6QIDUiW8UGh48Nfmct0ycZMtFAK7PhsUcIPFwCwzuO3ML5j6KZDqVvSYVgkYxYmSq5YXZ5Q",
39
+ q: "08Ij3U6ojcVPo_PWLBJwyqm1EtaguQ8eEkyNzF_GmzEd19f3iBMOui9wvIjP3Krk8w1Fo0XQw72XGBHHoZzJd-M_Enxfl-Ch0Bk4EYUZrNXzfogFbXmH9p9jmgWB1f2nkSWxgXysj_3RVZ5y5fQ-mVY3Ge4o7rdOq2dVM1r9jZ4gU9baeI6VV0ZKkF2-3hhmIyqwTo79Bwrm9HzU96h9-29P3MWheQHnUlkTbskt0G-OLtq_1nvLMHC7IfiKrmiNi2WJAlLSRJ531kJ61nzwxlbOPx0qQk2fex9Kb1AkVdCQfNWFcvA2xyoOUq1Qt8kz6nKuxKC6CDZPk9Io1e7MZQ",
40
+ dp: "6GAykQwYTp5caId7f3QnMUoA4PNTcWTShasSmdpFUmvMeAmHN6YEnDz3BZAepE96Th5l1K4NAZ6mrswQJZTf7VSmmXo0ya-q_7AxFK5A0PGcZ2xew60LlSDDvcosUwU4iBcFAHpsU9ND_O_fCyBnVlHTtfK7vLHLMAAz6Imaae56UaYbcFPztjFW8R9zUiRR9qc5HlPdpvibGRC4d4UFcCWAnnKVOk2PIZ9f2L5V6z5C13sXZcoeaQg0bN4ogfuaKQ_we-Db5UrpKgT8WxbnYbkioFQ_ZljhWDTavbGHDCGYxvAGg0nrm33l1_Z3-Su3oBtoLBnPCTpH3spx4FeG2Q",
41
+ dq: "UUkTxU79arZT9OaTzwUhINp2NI4I0iDYdUPHpq0ZKtd20jUHwsc1_whY6TZHPDipfBcbJSqWkZzEVCv3CrWJrKihvHHbrAxBcQVNPYRvL6ZNOsPx-W0OYQAcFrKIfWFKInBqq_70qq1O3uPczSKtqOSscBq4wbHB1A_tZ7JE5EjPtf8ii-aHsyG7W6FwtAZ_pn4rgWxn-n0X3L_SbGLUQWEgMen3KuEtL7IbwIofOQSpepjjzOxmOej8HHUwnvRpaRoHtsmeB1MhQzDvwEfjkO8faqDCaQMs9fEz_HiyCfLuk8zO1ikZjeg56Ui4VGQ6toNhTP85ig93CpJAtKZe9Q",
42
+ qi: "by63I_jq8AEvZRkQiViTP7pjil75oNNjmYL9BXnIVF7ENiu6P935UxS1ceWVm3vtcW6xX2SuvhZ6ypHAti_JbYa0YQZwxqzDMB_Cvo-T5Qpfzg4EwIOnJ4x_Y6jaxf56KAmWEkSrE041ClD2xLWrlytqlwipGBronkuWTrx3S4-RDH-pqz_Tb3hPMUfBsumqtFejKqplRe_XAOVvrURTliVjNCXv_-TU4jyC--X_f79eBRxxCONPKHfEgKteAErWB0QOKSs46dWQjVEdOamwZZv5c6dQusbbgtzSHyfDhw3nDK5GVm7RF-hLLZRkBrzybH46a491ZQwp5mXFlnMq8Q",
43
+ },
44
+ addr: "aL1ZfFd2g90vy4TuF08OAVPhocB8obLG7sIyMv7_lHk",
45
+ },
46
+ {
47
+ jwk: {
48
+ kty: "RSA",
49
+ n: "qrpDNYXNDf9wDbQSwnCc9eKTr71TIWF0FN5bEf7c2cByYlde99c4H_W4HPn0RjCusfHN8svSon7yGXbJA2SXMndbtbOO7MtXV3EhOOBjSheAiS_LmwUarTSb6pbRsQHremPD4KZR310Ur6A_kwdouEyW02guI7SBi1cLRT2x6lWrcJ3aeYYPQ1AUjV6L3emNJEL5MbKqF8CMnEzX6xBiEpK9b72osT31nJyUvqv4lRMwV1xxJeOagxaIwb6sPwErdTl5G-5Torrd2_GI9_f9GGDI6rGmNrfHoihr4sRwOROQLDGn-OkpoXsLXJswBl0KXsTgz5ctM5R6_LtDsZJCl9-JYenJPWgIBnsBvEWCKaq-nhy0KKPXLnhLqT5uQY35OtW8-Mud-VuV8KT8422SEobk6nobH6L-BQhdjM1h6bvqqo9cUqfrj-DK1mG8MZZcbHEhiyO5607cJPnIkSRKnccf0D0uZ90z_3jQEh1xojc-ouasPYyRfUNNEUmVV6Jeotmmaeip3t4GZE6ECmwNs12DFUS2RSVdOmmbY70i0YF6fcYEsne8B10GDUEMK5UDEu-zrmOmQTWRuYSUvBEHkHtV78BSHAExXw-bcvwyShlz3HI1H33I6x9GA67ES4Yx542fnLb1IwRm7ZcJVSQiqgoZn8DOc-sqBpY__UFlAec",
50
+ e: "AQAB",
51
+ d: "DL4_ZjJsMxqSwHflTvcWq1gnCHiIrz0Pa_LweEAX0V1tP3Lgp0rv3DU8JO_xPP-R1b1dnAnjpg_0pFSHiqww7uoWAdKuHQ8zOaPuxC7xELNlYcs1ltOpzi2j_HDkCokncuiy0t6HNBvF_5l_juSZx-ilLCo8CDU6cCFmOXWL68vkmOpnYSe4Lu2LKZKNI3PoMY5mldnzzgPbJ8JClL_FAJ7l6rFZpihT4Cv9z3RiZxPAfKmgcAdBKrF9ZRZSBzF529OXR-LuAjKRfPYjCfzMIUww4vexZA2R2V3MA7UAei1ZvW3taQWHGNybmGUK9iA7gtLBXWCEb4B3MTMNfMBIHd-xHUBYoLPDA1I1GCnw4cWYrvO1JODdWrI8quv6-hXrHe3HRU61YRtJVKUj5AAYCHWFZNPEkH9DbDKQASqTfjNPhzQ28rD4pREUx5Gwu1yA5tadKPBZJ267KaKZ7vVa0BGzG3icRU3G1v3KQFoZu15h6Rtd6ljPEbmCfNphYupGK78WBdUbX86gHlzqi2WAI5cDVgnn71_kaI12AcwUqJ3CnP5D3eTBZ5w6qZKgs-WoXenzwLe6Ly2xXA-9IGF7dibEa1DZ1UjHFDh_E5VlVX_oywqjPSM5Jb4NzqHKzA-345SFH1fEzT1a7DukUA0AvBMk3i6G255phhxVam56kCE",
52
+ p: "1Tqxjwzusm8I2OhXRIY5NSCpWRpzWVm_W8kF78BhdG9GwbBauZVsC7-UFQ203anmrylPzx3HZmm8fEp8JH37UQBKBcN600wI8SpCwDJrwc1qUkpzlUscrexUmVRcQvYB15UduvWVQ7zkaexGsVbsXUZK9XuCupgK0Po3pg0t5Cha2jvnYJmWVNGQf0cU5-CWYIziJcapgTS8YdY51OaISUYWwcVSeXhBSanbzPGOwZDrB7Nbh8oxSfmj8DmwDRCEebSgz6EIsy3hFwAlpe_W_6hVheZ1FelupPx4NUJL55iP2NZutlYu-8Nca51NaunSPiYRzKSfn57HcoHCoH2jYQ",
53
+ q: "zPkcXiIT9dS9qNwhEVy1ZZ2iZDuzwH1s9Ker2dQ0zUXoKYbpRltv5EjkUnzUuijGNUgQm9rulY-YqlVoJDjCjoQ8qR1kp2UFfNd3eiWLzQ-oW26cTiLfRthGrxIuxgOPFPop_uYynQQ0LpNXDlF381kDvRir21YF-dc4Jk0GwT-EXIo7x7zLftUe0pZKr9IPAHt-6c7ukqHvaEfTuZUbTmyJraCOJ81Nh101VlJ84jYKtVgZXGq3yAVencVl7I8rFJzvJSyow3e9nCja29hirR1E9dPp01Xh2QIm8nmrYJ4kRF-OjZQ4HeC62uo3mkiAmCubjOA261I9DxibCvvyRw",
54
+ dp: "tCF1RmeiblKmorcEofrR8TO6XG-f6meK5LsZrMRUj8xBdfbJbeXw9KvPKUn-9RNGscqwhUOe48GHXWh_H0TePjuETQIqjL27ACC3ay4tIfeqTgJfSku92p-_iBhgKKEyRTDPgNVeV28HdwQHZGEOJG3xfRfuBDvVR11aDYksr4X32kyo1k5pVRYEf8FIw-pSnxXlJgyBvYkTa4NSL6zgjSYMq31Kgxs37Eb2TFf0RUlrg4HdXQVORjQCbjoNo7vEbhxNjZl4hAXKFWgmZdwLQMawGQHq_6vHsNEnq7Zp8ShMvN3JgXelEUKknLSyZhNJbP80IjEgN_QmgXFlPbdlgQ",
55
+ dq: "ZoQpZgNRTGCswynl-BMQPtSKhes-SgXxWqQJ1ZbHGeve4_Yv8hqFaf3zBDafBsSh7cAvXmQvc-owBvFUdtlUpYcJ9-NVlkt2ZSw2-4aP123_XEuELahPV9WP9Lv5XNwm0e0U2AI2SkXx-2GB5w1kGvfoYMlYGwl5T64OzUk1Ga40-zvADnQkqzjYg6bbj_hVvH4HydTPidMoNFXIVUd4Ms8iRQ7KSqnqHsvFg3kaMOGqlWyMsqZFaOsWmX5DLf-lIlgjW8psVecrlFDytYYSRFchSHpGtoZ7wNfMtvWXe2lc5j2MxM7fCkJ98kO2r5mXh4Q39kul7ChjlYtO8D12vQ",
56
+ qi: "yIOFjrcvdERR93nm88D4k8gvwYo5qpyJp5wyFbqXNF6hR7ybp2Y_ebyxsf5CSWmxPWuqU5fF4c461tH7zMuk45cW809HukWfHZuMQBHIBNkKy5hbnYqBgnCCpnbqA_azyrL7Z562IKmoYeSLa2S-SykZlAN4sOnMNGCvDJvHsxd_9LVpM6qlkq85KqtuOdRh24xPdvYdXPjKu_qSV_LY-8PC4CzlVEgUeRLDH7tRukY5xMXJbr_ATSy-J2SJCItNHTPNcuJ6vWekCM1EfbXcL3NhY4AVjVUGVkiHfLjCcrr9i20Yokxbjsg7Iloj4HifO3pV3f6Hb40PTJAbFtlNhw",
57
+ },
58
+ addr: "oepP6rUoOskYDLycGPR9fuk7eJdYUgCqp6_WiLMpO2I",
59
+ },
60
+ {
61
+ jwk: {
62
+ kty: "RSA",
63
+ n: "rRdhSHGUHJ3ntvZqLgclHNvemDl_VUJTBD8qGMZFV0ZSNh03dg1N1kJZkqCOzSg9WXKejOteEq8_gxmd9DYMTf171HGu6mKvc1Wtqc5gvMmHKfzs_vBUC_KTqKkGzOlIlNYQKWIRzrCTaLmdhlJVaaeNdONeAR0xD06nsoQMJlonUsbGbLqG3lMKVho0tTL6WksmHqeb6jJDGbmxF-N1LwEnv_nQK_eCKmk-ijmTweikCDjZBSwhxcNE8IwraVBNk4udQaPTFXfrExs6gTUWJaOqmSPzZIk7R2d5s63krrCoekjuUeBie-ZXykgdoyRvAi6wk-XzTyOIVcfDnlAWNykbw4UBN5T4E4J5t5GnoYkAMkPGg2cLU9CqAlBjiZFBIOIa4FbIZrqvlhD0KLSUCQ_j2qhC30CJjX1mSUY-ObfBhXerg2GqlKTkHkm43itFuow2G47Im9PAOkrbei2yU3OB27Kph8dEN5eq-87SQmt9_an4iyXssrtBqZ2ErWYh04WVh4_svA6MEF1591aS5RMpKFadHUZ14IOhBf39GozpRVqB0p-z3_Irw_p7JVzQcb_6yIZ9Byf_ELOPad8xpXocsjN67FpNGKngCmX9YI0W03yugEfNI2CDOmZFz1iYgBHloK6PSps1nlOxVrt8MNHZPWwX-3YhckGvSr5hhmk",
64
+ e: "AQAB",
65
+ d: "Vna65GbEH2VrpfRCxxpPmjJk57K1HkBi2ti4rSaB5d5dW-XNWh28N57uQrYMj4Qd3UxJ0kgSto-vUMxfoGnNTLomfNGLGE9SqHDwrsXGghfDeqB7PMCNo2g6BYLlwD96P8sMyLdSAOcow6QRAdOoEf6eRXj8cN8FrklSsPSQYyoewZVE8nRcwbtGiwtNMAS2lZs7gA2m717LMRMW2UGIvIG9uwLNz-C0N35aPM8VNcSCCA9prVFFz5XDHsxONS3liqIv3GW7IFrGZUVxPLDpjsTKh_Qy9ZItt_YDD9P6S584kdlTnzfQymaejQ_oKiIdh8AN-dtg5rPvuzXuTGtiJLjGI8Y0LiFmpf8nKg6BnRESL-MhHCLvLkKzTT7-j9m21VvcbhdGUe4TE0ofLzXUYyETAsk4M4CwJTNKSBdS7L3exvLodXHCQM_OjWAzeaiUiIGWMVzmrtKh67wAFWQAvogmOhOkxPgeES25R60iix-DjtGFgMgNp2H_HbKQMtEynPpzwcvOrOzFhfAtfGFanKXryuKe4CpFcnbvy97B7fRipVS1bBBogfI_2mhx5EoQEtuSBHsqRlEn-kLLPxceVm_KGJ8QLFwFhhcf_5WuIDSqvM9O86YVkrN2eIjzoFb-z_M9o-5v4iSXvYykymGCgYSRYK5BRqvU29vRZCaI-D8",
66
+ p: "74nngtXGwzoomqFmwlL9d8raOS56N2shhJXU1_4qRgsHafJSI4A0NDwBDLa8xq0yze5QTrj4t_zVAKFub49pX0Kxm7_dqDwNIRZnsnPF8sOUjS0YUz0_oQXZItpevhFNxPKzyZmTV61KevZsH9tA-NwsX7yVRJ49MrWUolsrtHQmbU0fmEyXWODBMVD9euNJVEnPEwlZFOKqq03pUp1c1IbLk-kBGaUv7EEOO5r5yGj1ph7nslmPiY0h0gJE2hL5pHR0E_LFuZrqIV2n831WNEXs1iJ6ViZl1oYVDxp_xSXstrhyVJ5lQ7Lf2m6ox4Pxy1bXr_LK97JOOZKvxc859w",
67
+ q: "uPx_UmWmBUGifv0CIj4OijWrM8baz3yncDqqv6e8atlFNDDIQbTP_y9XBxMmMUGw_Sfdnut1VcxU3ikY9kZPUCjNuRaIPPh6PoV6A1QkFjmYiRaCjLGa3Qd4ystC0tdkkWGvn6jFn6lO5my1wzVjy_O9JUaCycT65waYyTXP3YNCosjwGO8jEWJEWS3a56F4X2C2efY0E_DstCD3G1DQvUlxYOMTrCiffnbV0ewb9MW4twOTL0WrzgSuA407RbEzo8NJvvuOSAFIKFFJVChjsITplyfVJ_Q8bydoak6MY7HkjWr4uwJlWg-Vv8nOGgeKnV-N73WAx1l0e-2z26Yqnw",
68
+ dp: "pGNPrkpnjbNsCjKaAuJRcNSVzohG96Fd70-kMlcLS-ZlwB-8nwBs0ywazE7cXryeERVrp5rpldq9kyE2WPlipy1uFiUmST5tBDgMEjvBrUjrubco6ncuI6OP0ItsWaQmavLkz4XFyHX0l05mBbbCcAcprMoO5nhyJ0rWJlXLOJw9guVauXpWo3gbHW0niB5TRLUilz3jFKI53jYp2biE7JVVQLy3NJJYwRokWmOQ6Cif7NFo0M0F5LAmdal49u_uwx3oS4hgiW_3Hc7YZBGwB0-1qX8f1d-kJAUAjszwwqu0N_F9BPVvKXaoiY9H5SR328RNYUKOaE7FwF0ao_YDIQ",
69
+ dq: "Q-sA3EHR6NAmVzWRmPzr3bbCuunh4JhF6aDAnEl7lkdbb0QR4n3-eBTrgP944FDcKLaAWh7dH7k7162DKri52haBIdmx_6DDUT00hRBZh4dyB7MqD3oN_-UEZoCmcj7-_5m8H4SZunsxKszzF0786x78bTksP-SAsl3rrsSBIzVUO-xGqwDyASnxKkT5wF26klox5SmOCVxFrAUGdRMA8N6MMCRvTqBDnu0GqGJmCUKnBRrc6VhNMgDp2wf5oSbkbNYAt4wouystURA3OhzyLRc_pG3NhzPXFICFh7J7PQdNgNarqA3DJIPgWWBAubHXJNy2ghrEQ20GpZGqnZSuxQ",
70
+ qi: "wA1-0QVgEN44olq30xj7JwhMGxXOCVR86e-ArYvxdVBg4gKW-WkNVw-COO1xdRH0OBMkpg99ugPj0BtNEr2ftFN3h1vsk1GJHhlnIm5YCjKw75f8rMGPSNSNGuoGj2wscfl0KfX82mdS4IRyY6A5sIc-tcn5zteeEkimdZgn2Uv5nhZYXSVqjysAIPBlNsakzJFhpSEz10cTWodEkn08Mp2wF6ZTLRXQzkYry5rGyARjfunQat63epWD-T-nVHETsahUIBMLnCAb9mmJCF0vzkntLVaLns2J-y4hl666sGz-EVqvon1K_bVav4_lE4idbDNsD7Bd9VhzGOJfqIBf0A",
71
+ },
72
+ addr: "wPQsT8DLcE1b33x0qa279O_N-6XdFMC37VLEmgyZz2s",
73
+ },
74
+ ]
75
+ let mu = {
76
+ jwk: {
77
+ kty: "RSA",
78
+ n: "qNP1LCo1OihKjVZ8aqZzO54Kmx5OluCDr6VuAPOws5_RReB92dP-SGan17Y0nYr5c3IzX5tkT9KKtbAC3dEqSbyqqTe_lkfIM5cXYCVHSUVOBt8J51xLoOCNXQUjxF_14hOeo_5Qvkmvjck-ZM6ezGnG1Dw8WzDKMBm1oL9GYBfjz0ymvUYsxjt_emyOoaFz6FZ8Q12hiIXBSnalJWYgAmp9_jxcwL5SDcWXJF6m_8b3WonvZn0QiRLJTwnQQ0E3PUIeS5QbIIMHalzdCSrMwMkfAzojRoZJZhLZDNUgRAYNPLDprF2aam7K9QROGepqO7jds85hTq23AXxOs_zXNkhmhwKcnTGcwu6sVgBG8qbP5fvrXrsulf75tncLjj3X33HTRpVCMJ3qvyl1fDpBHblh3nIa6lQc7ZrsHEN-BsHpK9c7Bsf4vPnBDTDgYNZ0z8abd8jXdFeyrvipJLH_PZFMLkZO1hXpGqNFu6YS2AwZY6mGG8GOdxNrDl6IeD69MVfTatvU9x_NlfiykeHsHjYeS2wCScEpUNYmJls3CxDhDhy4KnjnwJNSFSmojMQs0LoR5dLu3283D08z7TP0UetG0-FzetquqhTJ7TpEb7g7HujPEcr2u7Vyd3Q3-3IaOxr5B9zK0mMcjAsxMl--tZUKJj9ry4UR-C4onQZDa2c",
79
+ e: "AQAB",
80
+ d: "Ao7bmyS0k8IChyu1TORiwJd_b6RA6pZSSHoINal7lu0n_ZgOMBu_MZekmWcgWva9GtuzHZK8LV1yTphxIq1Fp8JdD51RoNRLm0SBzSojb1_Gc-IzQzcpyjE80xj91r7heeB0OeXjkU6Kg2p2MI7U5yH_Kj4TaApQNfRdxSbAyTnzcLOnnxyOFx7VqqQ0cQyCNhYBYf_sL6ZfLGKp0-w9NewpJo4BlcYMdjr1NE7e1udL3ipS30mr03feZv0uE6bMUHhM_zYqRw7VMO5hRv9IBO_HMYRS_oGQYSSN91zPVViGINJJaBwu98ff-WBsUoYzv93oNg49eTS2niYlByMgm6KmTQ2apZTG0Ho0PCaifhjS26KWbwXiJt-ojVSPk-BnH4f49lRd7qgw-I1gM7ug9S1eCZHflLJT0_J13T6aVovpKeesm6PUs2zGKfv3kb3VgjwSZpkT67T9yQfphOILl3qhfhV5_Nfmst_wuTYQ7hIMwprnaPwcUgoOhF2Ye89VSMR8ERCRzrhgKDajIkaBnf_Z0u8BfCp5FAD54DoZGb0BHddwK9VYQfccEjkaKdf4QOiIZJgm6PWiK9EiYjJu_no3mxhGqwHOPFyX82h0RFQryKIcgaXXsD7LiNcZ18algCAI0uTtZp6-OOHKVRAsgnlqZ7fb4iwlMZyvb14Fcgk",
81
+ p: "0imAhWkgoMWN14UM15lWaqMrsudyfasZfA3kGdnx8Fv9bZpFIEfnS0p1mzINcUozyNmYIQUgG_w5DMBCGwBVMrF0aEDmOtxwMn1qmgETfr2BlXY1bNgBsM9lFOsmJo7YPN8SuD5RCVrwenr1YE6K9nQcnSGatX3qhFidqO4DyZx26OKgAIOlT1-qsparDKAFmwTeEi6rJWmSkXBTiGvoLrAgn8e6i4axCLLspl68vdZu2VUK9c_gxbYjgh0gFpJ2Hth1R6p3nroaZtQZ251i2_RWzUNdfOLSRbXl0mZ0AKMy7KL6YIs-5-fDcewhkAh3lkdJLaD-6ZtYjc2PV5t0aw",
82
+ q: "zaaLSG2z4nZ3FWxJMUcSvmCvmbDAlu0_t-tPHMQwSZ3uG9BCVr8-NI8UncuGi_HOyUpq8rCVZJe9gRJn1I3lkmLRQXig0yVB1ACrECfSAg90-IXDZWckC04DlkJNB5QYclbAjtHKbVmhW67kfWqMxHsWJvFLSh3qj3G4F5ujrtoQV4XrbxKZLclJrvIo7IcAxGTC_GS4JFKRp3r94i1m6rxwkU1vR1RZLc16MTTxw0h-CJ6otYwEc5a351VcwlP1yEjoTIFFHC7ILsgxnzAAHXjYoldum5ccnWy-U4cOJh1f9FfgLQa3y2yQ6OBNQ9WG-R7dhFwxZsbdA9srNk9D9Q",
83
+ dp: "VU53Vq_niJroCnV9Uv5w73QwRrxf4tbSz2IsFro61J_ibNzT9lh5cDxXJJnajwPZpUt9ztlvwSxOU_iuXJtz-dHCOJcvXPEhsbzqynxpV2bA9NQ4t2euuABXPXh90eTlrT-3L4ZMCooZVv4WH_OBwKw8-SMs00K7MOFvjaSfcPTL55gl7k-BiIiCl19FKyjBXb1KDwNWgScrUVHQ9m0mn9zqQTEnbX9M2QUXvihyYHRsJle4zTKGQHrASw5beg4VWEvwvxhY2dsc4GRz4osuF65Elakkh47iX12IXjEsIR4di6RUEWA0NpoC4XlB3l8xe5SQBa92CYj_FwA7kQoO5Q",
84
+ dq: "Hx2f3Wmb2hwKkJc9y9LxJxUB_MMdoLhs96sG4Vdd5wWaTWMJZo6xHsq3V9i_ltUTcKlt3SKSuBGtfqYGR8bggXGqL7nMu6Xbe_RN7bfYsq8cB65VjjY44ez_5fBKL2dc-4_cur9LXZg-Ld0cfU1t1xy4kVPZDHHSV7nhHNFTxtT_u_5rTPcHbkISgAHr5z3WA-ErD309z2Ee4LRfTaWI-ONiNNn-iFBe3etFHcTg_6csSqmW5UE2OzcGxF3KFy0U9yTw4QJ-LnF1oH5x46AjpFHwlT-dYLVQgxE9Cu5YWbQAHLxfEvD9Ri47DsFBb44TSgY9hhVc9CwKrNawhxsfMQ",
85
+ qi: "0Fg91oiiD94elAhcMshiMnzy8Q5tq-WoAQOpPBnYR7HyE4DsjWAWjP9EdopOpsKMM6QbC-bxJKUy0OTvluWUi8m7iR7SPHbgnglyjS8KyIZkckmQdnvOZNZuRrbXDBEzhQrTfdxi24d9QodVYAa-48Gm_PBV-mzBM8doxO5UXKP3cNfxNnJpo2dxbynTNgGQolxvd30jeMzgktpsShGGsiDeCkHJdfIJiI2SX90AnlJhRZlaCZpwUoiSODRqdIpdbgogJUh8-8w_CpfUmoe5MAcgOQxh3pdKSqJpoMAC32NeCFJ8iix31BsbtvxaZMo3OSTYeOgjStb9wX9NDQgJeg",
86
+ },
87
+ addr: "eNaLJLsMiWCSWvQKNbk_YT-9ydeWl9lrWwXxLVp9kcg",
88
+ }
89
+ for (const v of users) v.signer = createDataItemSigner(v.jwk)
90
+ mu.signer = createDataItemSigner(mu.jwk)
91
+ export default { users, mu }