@atproto/dev-env 0.0.0-spaces-alpha-20260818163953

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 (187) hide show
  1. package/CHANGELOG.md +3424 -0
  2. package/LICENSE.txt +7 -0
  3. package/README.md +39 -0
  4. package/bin.js +7 -0
  5. package/dist/bin-multi-pds.d.ts +2 -0
  6. package/dist/bin-multi-pds.d.ts.map +1 -0
  7. package/dist/bin-multi-pds.js +130 -0
  8. package/dist/bin-multi-pds.js.map +1 -0
  9. package/dist/bin.d.ts +2 -0
  10. package/dist/bin.d.ts.map +1 -0
  11. package/dist/bin.js +56 -0
  12. package/dist/bin.js.map +1 -0
  13. package/dist/bsky.d.ts +27 -0
  14. package/dist/bsky.d.ts.map +1 -0
  15. package/dist/bsky.js +165 -0
  16. package/dist/bsky.js.map +1 -0
  17. package/dist/bsync.d.ts +22 -0
  18. package/dist/bsync.d.ts.map +1 -0
  19. package/dist/bsync.js +54 -0
  20. package/dist/bsync.js.map +1 -0
  21. package/dist/const.d.ts +4 -0
  22. package/dist/const.d.ts.map +1 -0
  23. package/dist/const.js +4 -0
  24. package/dist/const.js.map +1 -0
  25. package/dist/env.d.ts +2 -0
  26. package/dist/env.d.ts.map +1 -0
  27. package/dist/env.js +10 -0
  28. package/dist/env.js.map +1 -0
  29. package/dist/feed-gen.d.ts +15 -0
  30. package/dist/feed-gen.d.ts.map +1 -0
  31. package/dist/feed-gen.js +73 -0
  32. package/dist/feed-gen.js.map +1 -0
  33. package/dist/index.d.ts +17 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +17 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/introspect.d.ts +22 -0
  38. package/dist/introspect.d.ts.map +1 -0
  39. package/dist/introspect.js +65 -0
  40. package/dist/introspect.js.map +1 -0
  41. package/dist/mock/data.d.ts +3 -0
  42. package/dist/mock/data.d.ts.map +1 -0
  43. package/dist/mock/data.js +46 -0
  44. package/dist/mock/data.js.map +1 -0
  45. package/dist/mock/img/blur-hash-avatar-b64.d.ts +3 -0
  46. package/dist/mock/img/blur-hash-avatar-b64.d.ts.map +1 -0
  47. package/dist/mock/img/blur-hash-avatar-b64.js +2 -0
  48. package/dist/mock/img/blur-hash-avatar-b64.js.map +1 -0
  49. package/dist/mock/img/labeled-img-b64.d.ts +3 -0
  50. package/dist/mock/img/labeled-img-b64.d.ts.map +1 -0
  51. package/dist/mock/img/labeled-img-b64.js +2 -0
  52. package/dist/mock/img/labeled-img-b64.js.map +1 -0
  53. package/dist/mock/index.d.ts +3 -0
  54. package/dist/mock/index.d.ts.map +1 -0
  55. package/dist/mock/index.js +574 -0
  56. package/dist/mock/index.js.map +1 -0
  57. package/dist/moderator-client.d.ts +58 -0
  58. package/dist/moderator-client.d.ts.map +1 -0
  59. package/dist/moderator-client.js +110 -0
  60. package/dist/moderator-client.js.map +1 -0
  61. package/dist/network-no-appview.d.ts +21 -0
  62. package/dist/network-no-appview.d.ts.map +1 -0
  63. package/dist/network-no-appview.js +74 -0
  64. package/dist/network-no-appview.js.map +1 -0
  65. package/dist/network.d.ts +32 -0
  66. package/dist/network.d.ts.map +1 -0
  67. package/dist/network.js +190 -0
  68. package/dist/network.js.map +1 -0
  69. package/dist/ozone.d.ts +31 -0
  70. package/dist/ozone.d.ts.map +1 -0
  71. package/dist/ozone.js +254 -0
  72. package/dist/ozone.js.map +1 -0
  73. package/dist/pds.d.ts +23 -0
  74. package/dist/pds.d.ts.map +1 -0
  75. package/dist/pds.js +97 -0
  76. package/dist/pds.js.map +1 -0
  77. package/dist/plc.d.ts +14 -0
  78. package/dist/plc.d.ts.map +1 -0
  79. package/dist/plc.js +28 -0
  80. package/dist/plc.js.map +1 -0
  81. package/dist/seed/author-feed.d.ts +4 -0
  82. package/dist/seed/author-feed.d.ts.map +1 -0
  83. package/dist/seed/author-feed.js +50 -0
  84. package/dist/seed/author-feed.js.map +1 -0
  85. package/dist/seed/basic.d.ts +16 -0
  86. package/dist/seed/basic.d.ts.map +1 -0
  87. package/dist/seed/basic.js +113 -0
  88. package/dist/seed/basic.js.map +1 -0
  89. package/dist/seed/client.d.ts +151 -0
  90. package/dist/seed/client.d.ts.map +1 -0
  91. package/dist/seed/client.js +365 -0
  92. package/dist/seed/client.js.map +1 -0
  93. package/dist/seed/follows.d.ts +4 -0
  94. package/dist/seed/follows.d.ts.map +1 -0
  95. package/dist/seed/follows.js +55 -0
  96. package/dist/seed/follows.js.map +1 -0
  97. package/dist/seed/index.d.ts +11 -0
  98. package/dist/seed/index.d.ts.map +1 -0
  99. package/dist/seed/index.js +11 -0
  100. package/dist/seed/index.js.map +1 -0
  101. package/dist/seed/likes.d.ts +4 -0
  102. package/dist/seed/likes.d.ts.map +1 -0
  103. package/dist/seed/likes.js +37 -0
  104. package/dist/seed/likes.js.map +1 -0
  105. package/dist/seed/quotes.d.ts +4 -0
  106. package/dist/seed/quotes.d.ts.map +1 -0
  107. package/dist/seed/quotes.js +21 -0
  108. package/dist/seed/quotes.js.map +1 -0
  109. package/dist/seed/reposts.d.ts +4 -0
  110. package/dist/seed/reposts.d.ts.map +1 -0
  111. package/dist/seed/reposts.js +17 -0
  112. package/dist/seed/reposts.js.map +1 -0
  113. package/dist/seed/thread-v2.d.ts +227 -0
  114. package/dist/seed/thread-v2.d.ts.map +1 -0
  115. package/dist/seed/thread-v2.js +755 -0
  116. package/dist/seed/thread-v2.js.map +1 -0
  117. package/dist/seed/users-bulk.d.ts +3 -0
  118. package/dist/seed/users-bulk.d.ts.map +1 -0
  119. package/dist/seed/users-bulk.js +224 -0
  120. package/dist/seed/users-bulk.js.map +1 -0
  121. package/dist/seed/users.d.ts +3 -0
  122. package/dist/seed/users.d.ts.map +1 -0
  123. package/dist/seed/users.js +45 -0
  124. package/dist/seed/users.js.map +1 -0
  125. package/dist/seed/verifications.d.ts +5 -0
  126. package/dist/seed/verifications.d.ts.map +1 -0
  127. package/dist/seed/verifications.js +164 -0
  128. package/dist/seed/verifications.js.map +1 -0
  129. package/dist/service-profile-lexicon.d.ts +11 -0
  130. package/dist/service-profile-lexicon.d.ts.map +1 -0
  131. package/dist/service-profile-lexicon.js +115 -0
  132. package/dist/service-profile-lexicon.js.map +1 -0
  133. package/dist/service-profile-ozone.d.ts +18 -0
  134. package/dist/service-profile-ozone.d.ts.map +1 -0
  135. package/dist/service-profile-ozone.js +333 -0
  136. package/dist/service-profile-ozone.js.map +1 -0
  137. package/dist/service-profile.d.ts +24 -0
  138. package/dist/service-profile.d.ts.map +1 -0
  139. package/dist/service-profile.js +61 -0
  140. package/dist/service-profile.js.map +1 -0
  141. package/dist/types.d.ts +61 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +2 -0
  144. package/dist/types.js.map +1 -0
  145. package/dist/util.d.ts +14 -0
  146. package/dist/util.d.ts.map +1 -0
  147. package/dist/util.js +86 -0
  148. package/dist/util.js.map +1 -0
  149. package/package.json +69 -0
  150. package/src/bin-multi-pds.ts +166 -0
  151. package/src/bin.ts +64 -0
  152. package/src/bsky.ts +198 -0
  153. package/src/bsync.ts +66 -0
  154. package/src/const.ts +3 -0
  155. package/src/env.ts +9 -0
  156. package/src/feed-gen.ts +96 -0
  157. package/src/index.ts +17 -0
  158. package/src/introspect.ts +91 -0
  159. package/src/mock/data.ts +46 -0
  160. package/src/mock/img/blur-hash-avatar-b64.ts +1 -0
  161. package/src/mock/img/labeled-img-b64.ts +1 -0
  162. package/src/mock/index.ts +702 -0
  163. package/src/moderator-client.ts +267 -0
  164. package/src/network-no-appview.ts +89 -0
  165. package/src/network.ts +243 -0
  166. package/src/ozone.ts +287 -0
  167. package/src/pds.ts +118 -0
  168. package/src/plc.ts +33 -0
  169. package/src/seed/author-feed.ts +98 -0
  170. package/src/seed/basic.ts +189 -0
  171. package/src/seed/client.ts +676 -0
  172. package/src/seed/follows.ts +57 -0
  173. package/src/seed/index.ts +11 -0
  174. package/src/seed/likes.ts +43 -0
  175. package/src/seed/quotes.ts +53 -0
  176. package/src/seed/reposts.ts +18 -0
  177. package/src/seed/thread-v2.ts +925 -0
  178. package/src/seed/users-bulk.ts +229 -0
  179. package/src/seed/users.ts +64 -0
  180. package/src/seed/verifications.ts +254 -0
  181. package/src/service-profile-lexicon.ts +127 -0
  182. package/src/service-profile-ozone.ts +375 -0
  183. package/src/service-profile.ts +95 -0
  184. package/src/types.ts +68 -0
  185. package/src/util.ts +118 -0
  186. package/tsconfig.build.json +25 -0
  187. package/tsconfig.json +4 -0
@@ -0,0 +1,96 @@
1
+ import events from 'node:events'
2
+ import type http from 'node:http'
3
+ import * as plc from '@did-plc/lib'
4
+ import getPort from 'get-port'
5
+ import { type HttpTerminator, createHttpTerminator } from 'http-terminator'
6
+ import { Secp256k1Keypair } from '@atproto/crypto'
7
+ import { type SkeletonHandler, app } from '@atproto/pds'
8
+ import type { AtUriString, DidString } from '@atproto/syntax'
9
+ import { InvalidRequestError, createServer } from '@atproto/xrpc-server'
10
+
11
+ export class TestFeedGen {
12
+ private terminator: HttpTerminator
13
+ private terminatorPromise?: Promise<void>
14
+
15
+ get destroyed() {
16
+ return this.terminatorPromise != null
17
+ }
18
+
19
+ constructor(
20
+ public port: number,
21
+ public server: http.Server,
22
+ public did: string,
23
+ ) {
24
+ this.terminator = createHttpTerminator({ server })
25
+ }
26
+
27
+ static async create(
28
+ plcUrl: string,
29
+ feeds: Record<string, SkeletonHandler>,
30
+ ): Promise<TestFeedGen> {
31
+ const port = await getPort()
32
+ const did = await createFgDid(plcUrl, port)
33
+ const xrpcServer = createServer()
34
+
35
+ xrpcServer.add(app.bsky.feed.getFeedSkeleton, async (args) => {
36
+ const handler = feeds[args.params.feed]
37
+ if (!handler) {
38
+ throw new InvalidRequestError('unknown feed', 'UnknownFeed')
39
+ }
40
+ return handler(args)
41
+ })
42
+
43
+ xrpcServer.add(app.bsky.feed.describeFeedGenerator, async () => {
44
+ return {
45
+ encoding: 'application/json' as const,
46
+ body: {
47
+ did: did as DidString,
48
+ feeds: (Object.keys(feeds) as AtUriString[]).map((uri) => ({
49
+ uri,
50
+ })),
51
+ },
52
+ }
53
+ })
54
+
55
+ const httpServer = xrpcServer.listen(port)
56
+ await events.once(httpServer, 'listening')
57
+ return new TestFeedGen(port, httpServer, did)
58
+ }
59
+
60
+ close(): Promise<void> {
61
+ return (this.terminatorPromise ??= this.terminator.terminate())
62
+ }
63
+
64
+ async [Symbol.asyncDispose]() {
65
+ await this.close()
66
+ }
67
+ }
68
+
69
+ const createFgDid = async (
70
+ plcUrl: string,
71
+ port: number,
72
+ ): Promise<DidString> => {
73
+ const keypair = await Secp256k1Keypair.create()
74
+ const plcClient = new plc.Client(plcUrl)
75
+ const op = await plc.signOperation(
76
+ {
77
+ type: 'plc_operation',
78
+ verificationMethods: {
79
+ atproto: keypair.did(),
80
+ },
81
+ rotationKeys: [keypair.did()],
82
+ alsoKnownAs: [],
83
+ services: {
84
+ bsky_fg: {
85
+ type: 'BskyFeedGenerator',
86
+ endpoint: `http://localhost:${port}`,
87
+ },
88
+ },
89
+ prev: null,
90
+ },
91
+ keypair,
92
+ )
93
+ const did = await plc.didForCreateOp(op)
94
+ await plcClient.sendOperation(did, op)
95
+ return did as DidString
96
+ }
package/src/index.ts ADDED
@@ -0,0 +1,17 @@
1
+ export * from './bsky.js'
2
+ export * from './bsync.js'
3
+ export * from './network.js'
4
+ export * from './network-no-appview.js'
5
+ export * from './ozone.js'
6
+ export * from './pds.js'
7
+ export * from './plc.js'
8
+ export * from './ozone.js'
9
+ export * from './feed-gen.js'
10
+ export * from './seed/index.js'
11
+ export * from './moderator-client.js'
12
+ export * from './types.js'
13
+ export * from './util.js'
14
+ export * from './const.js'
15
+
16
+ import * as seedThreadV2 from './seed/thread-v2.js'
17
+ export { seedThreadV2 }
@@ -0,0 +1,91 @@
1
+ import events from 'node:events'
2
+ import type http from 'node:http'
3
+ import express from 'express'
4
+ import { type HttpTerminator, createHttpTerminator } from 'http-terminator'
5
+ import type { TestBsky } from './bsky.js'
6
+ import type { TestBsync } from './bsync.js'
7
+ import type { TestOzone } from './ozone.js'
8
+ import type { TestPds } from './pds.js'
9
+ import type { TestPlc } from './plc.js'
10
+
11
+ export type LexiconAuthorityIntrospection = {
12
+ did: string
13
+ handle: string
14
+ password: string
15
+ /** PDS URL hosting the authority account. */
16
+ pds: string
17
+ }
18
+
19
+ export class IntrospectServer {
20
+ private terminator: HttpTerminator
21
+ constructor(
22
+ public port: number,
23
+ public server: http.Server,
24
+ ) {
25
+ this.terminator = createHttpTerminator({ server })
26
+ }
27
+
28
+ static async start(
29
+ port: number,
30
+ plc: TestPlc,
31
+ pds: TestPds | TestPds[],
32
+ bsync?: TestBsync,
33
+ bsky?: TestBsky,
34
+ ozone?: TestOzone,
35
+ lexiconAuthority?: LexiconAuthorityIntrospection,
36
+ ) {
37
+ const pdses = Array.isArray(pds) ? pds : [pds]
38
+ const app = express()
39
+ app.get('/', (_req, res) => {
40
+ res.status(200).send({
41
+ plc: {
42
+ url: plc.url,
43
+ },
44
+ // For backwards compat the first PDS is exposed at "pds"; all PDSes
45
+ // (including the first) are exposed at "pdses".
46
+ pds: {
47
+ url: pdses[0].url,
48
+ did: pdses[0].ctx.cfg.service.did,
49
+ },
50
+ pdses: pdses.map((p) => ({
51
+ url: p.url,
52
+ did: p.ctx.cfg.service.did,
53
+ handleDomains: p.ctx.cfg.identity.serviceHandleDomains,
54
+ })),
55
+ bsync: bsync
56
+ ? {
57
+ url: bsync.url,
58
+ }
59
+ : undefined,
60
+ bsky: bsky
61
+ ? {
62
+ url: bsky.url,
63
+ did: bsky.ctx.cfg.serverDid,
64
+ }
65
+ : undefined,
66
+ ozone: ozone
67
+ ? {
68
+ url: ozone.url,
69
+ did: ozone.ctx.cfg.service.did,
70
+ }
71
+ : undefined,
72
+ db: ozone
73
+ ? {
74
+ url: ozone.ctx.cfg.db.postgresUrl,
75
+ }
76
+ : undefined,
77
+ // Credentials for the dev-env lex authority. Demo apps log in here to
78
+ // publish lexicon docs (permission sets, space declarations) that the
79
+ // PDSes will resolve via `lexiconDidAuthority`.
80
+ lexiconAuthority,
81
+ })
82
+ })
83
+ const server = app.listen(port)
84
+ await events.once(server, 'listening')
85
+ return new IntrospectServer(port, server)
86
+ }
87
+
88
+ async close() {
89
+ await this.terminator.terminate()
90
+ }
91
+ }
@@ -0,0 +1,46 @@
1
+ export const postTexts = [
2
+ `Nervous?
3
+ Yes. Very.
4
+ First time?
5
+ No, I've been nervous lots of times.`,
6
+ `I am serious...and don't call me Shirley.`,
7
+ `Looks like I picked the wrong week to quit smoking.`,
8
+ `Looks like I picked the wrong week to quit drinking.`,
9
+ `Looks like I picked the wrong week to quit amphetamines.`,
10
+ `Looks like I picked the wrong week to quit sniffing glue.`,
11
+ `Captain, how soon can we land?
12
+ I can't tell.
13
+ You can tell me, I'm a doctor.`,
14
+ `Ladies and gentlemen, this is your stewardess speaking... We regret any inconvenience the sudden cabin movement might have caused, and we hope you enjoy the rest of your flight... By the way, is there anyone on board who knows how to fly a plane? `,
15
+ `Joey, have you ever been in a turkish prison?`,
16
+ `These people need to go to a hospital.
17
+ What is it?
18
+ It's a big place where sick people go, but that's not important right now.`,
19
+ `I just want to tell you both good luck. We're all counting on you.`,
20
+ `Joey, do you like movies about gladiators?`,
21
+ `Captain, maybe we ought to turn on the searchlights now.
22
+ No… that’s just what they’ll be expecting us to do.`,
23
+ `Johnny, what can you make out of this?
24
+ This? Why, I can make a hat or a brooch or a pterodactyl…`,
25
+ `I need the best man on this. Someone who knows that plane inside and out and won’t crack under pressure. How about Mister Rogers?`,
26
+ `What was it we had for dinner tonight?
27
+ Well, we had a choice of steak or fish.
28
+ Yes, yes, I remember, I had lasagna.`,
29
+ `Jim never vomits at home.`,
30
+ `The life of everyone on board depends upon just one thing: finding someone back there who can not only fly this plane, but who didn't have fish for dinner.`,
31
+ `Shanna, they bought their tickets, they knew what they were getting into. I say, let 'em crash.`,
32
+ ]
33
+
34
+ export const replyTexts = [
35
+ 'Wow, so true!',
36
+ 'Haha ikr',
37
+ 'lol',
38
+ 'What does this mean for pet owners in the midterms?',
39
+ 'is it cool if I DM?',
40
+ "This is sort of accurate, but honestly it misses a huge part of the issue at hand. There are just so many factors and I don't think a vibe is enough to cover it.",
41
+ 'Wen token',
42
+ 'fire',
43
+ 'a/s/l?',
44
+ 'finally! decentralization!',
45
+ 'ugh when will hashtags get supported in this app',
46
+ ]
@@ -0,0 +1 @@
1
+ export default 'iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAADMElEQVR4nOzVwQnAIBQFQYXff81RUkQCOyDj1YOPnbXWPmeTRef+/3O/OyBjzh3CD95BfqICMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMO0TAAD//2Anhf4QtqobAAAAAElFTkSuQmCC'
@@ -0,0 +1 @@
1
+ export default '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AQSsAEHGSlAjgAACCCCAgDoBgoy6LqPBCCCAAAIIIGAFCDJWghoBBBBAAAEE1AkQZNR1GQ1GAAEEEEAAAStAkLES1AgggAACCCCgToAgo67LaDACOgW23HJLs+uuu5pddtkl+G+HHXYIdmTlypVG/vvll1/MokWLzK+//qpzB2k1AgiURIAgUxJ2v41uvfXWpm7dun4z/2+uP/74w6xatcp7/nxnlD9E2267behiGzZsMKtXrw6dJ6mJnTt3NltttZXX6qZPn27WrVvnNW+cmdq2bWsaN24cuoovvvjCfP7556HzRJnYvn17Y8NBruXnzJljli5dmmtyop/vtttupkePHqZdu3amXr16ZrPNNvNav3wfL1u2zMyfP9+88MILZsWKFV7LuWZq3bq12XPPPUNnW7JkiZk7d27oPFEnduzYMXAIW/6jjz4K9j3bPG3atDHNmjXLNknFZ/LzJz+HUho2bGgOO+wwZ7vl50R+XopdjjjiCLPddtuFbnbx4sXB92joTEwsigBBpijM0TZyww03mP3339974f/++8/06dPHrFmzxnuZfGY8//zzTdeuXZ2LDB482CxcuNA5X5wZGjVqZCZNmuS9ismTJxv5r9DlgQceMPIHPKx8/PHHZsSIEWGzRJr25JNPmvr164cuO2XKFDNx4sTQeeJMlCA1cOBAc8ABB+QVwsO2+f3335vnnnvOzJgxI2w257TbbrvNtGjRInQ++aN56aWXhs4TdaKEsjp16oQu/vjjj5unnnoq6zx33HGH2XvvvbNO0/DhX3/9Zbp37x40VfZD9sdV5MDopJNOMvK7rVilZcuWZvTo0c7NSeA+8cQTnfMxQ+EFCDKFN468hXyDjGzo7bff9vohjNIo3yAzZswYM3PmzCib8F7mjDPOCH7B+S7w3XffmUGDBvnOHnm+TTnISJ/IGRjfMy/5Iv/+++/m/vvvjxxoCDL5iic7f+UgI2seO3asad68uXMjU6dONRMmTHDOl9QMjzzyiNlxxx2dq3viiSeMHDxQSi9AkCl9H+RsQZQg888//5iePXsGl5lyrjjihDQFGTmrsNNOO3nviRzRydHg33//7b1MlBk3xSAjR7DDhg1zXnaM4pltmR9++MHccsst5uuvv842OednBJmcNEWZUDXINGjQwDz22GPO4Cu/00455ZSiXBqWy3+XX36500Mu4Z966qnO+ZihOAIEmeI4R9pKlCAjG3r99dfNPffcE2mbYQulJcjIvTpyiSTfI/9x48ZVXKMP28840za1IHPZZZeZo48+Og5ZpGXXrl1revfundeyBJm8uBKfuWqQkQ1ccMEFpkuXLs5tzZo1y8jvw0IX+b3ic9/d8OHDjdxvRkmHAEEmHf2QtRVRg4ycdZBT/EmffUhLkJEzK1EuEy1YsMAMGTIkq3VSH25KQUaOXOUIthTlt99+M7169cpr0wSZvLgSnzlbkKlRo0ZwUOK6d0jOqMqly+XLlyfeLrvCvn37GvnPVQp5H5Vr20zPLkCQye6Sik+jBhlp/LPPPmvkWm+SJS1B5q677jJ77bVX3ruW7Rdp3itxLLCpBJlLLrnEHHPMMQ6Nwk0myBTOtlBrzvXzJ99H8v3kKl9++aXXfK71ZJteu3btIFBtvvnm2SZXfCaBqn///sFQARUf8o+SCxBkSt4FuRsQJ8jIHfVyVibJu/3TEGTkctLLL79satasmRsuZMrQoUML+sjkphBkfC8HVO0Gefx23rx5wePFcp+L/Cf9KePK7LzzzsFj661atTLbbLNN1UWrfU2QqUaS+g9yBRlpuO89b1dccYX57LPPEt9X37OLb775prnzzjsT3z4rjCdAkInnV9Cl4wQZaZg8niyPrSZV0hBkDj74YCPXp6OW999/39x0001RF3cuV+5BRu5nkCDjWyRIy9goTz/9tPd4IHIT9wknnGCOOuooI2MpZSubYpDZb7/9Ej0L1qFDh2y0GZ/JWZCkLufIDbLy1Fm2IuP73H333dkmZXz2008/mQEDBmR8FveL7bff3shj76577uRRcLmcmfQl+7jtZ3ljCDIp/i6IG2TkCPjkk09ObA/TEGTSZlIVt5yDjNxkLYGkVq1aVXc769cyWu9VV11l5NH3qEWeDJEnVqqe8t8Ug0xUw1zLvfLKK84zmzLWS9zxe3Jtv+rnvj/bt99+u3nrrbeqLh7561tvvdXIYImuIpe033jjDddsTC+BAEGmBOi+m/T9wQ5bnxzlTJs2LWwW72lpCDKuQcVk8DTXyLpnnnlmcFnDe8fzmLGcg0w+34/yh0b+4CRR5P4FuYdCRlu1hSBjJaLXaQsycvZNgrLrsvH69euDISai7/nGJX3PBMlZKRnokZJOAYJMOvslaFU+fzhy7UaS4x2UOsjIDb5yVBRW5B6Ym2++OfQ0sfwCHz9+fNhqIk8r1yAj966MGjXKy+W9994L+sBr5jxmkiAjT53JJQCCTB5wOWZNW5CRZvbr1y84A5ejyRUfy+jHcjkobnnwwQedBz6yjYsuuih4D1jc7bF8YQQIMoVxTWStSQQZaYgMHvbuu+/GblOpg4wMHd+pU6ec+yHXrrt16xaMAiovJ8xVfv755+DJg1zT43xerkFGjpRd79kSt0KPoNy0adPgTI/czJ7vgGTaH7+O832Zbdk0Bhlp5zPPPOO84Vt+1uWyuXwfRC0HHXSQufbaa52Ly3gxce7Lc26AGWILEGRiExZuBUkFmaT+cJc6yLjeJSQjvV544YXmrLPOcr4DRX4JFuIlkuUYZORMiDwt4io2XMirBApZZMAyuSFYXtqXTyHIZGqlNcj4Boy4r2Nx/T4RLQlMEpjlDCAlvQIEmfT2TTCSpc9LI3/88UcjL1EMK9dcc03st/qWMsjIkwXybpOwYl+416RJk5xPR9jlk36iy663HIOMjBK9xx572F3MWT/66KPB0XTOGUo8gSCT2QFpDTLSSp/vuThjusjLHuWAx1XkTKS8RoGSbgGCTIr7x/eMjLyk0fV+ELkJ9uyzz461t6UMMqeddlrwZu+wHZAjJ7knSIrrpuBvvvnGyP4kXcotyMgNmDK4ouvRVDkLI28pTnMhyGT2TpqDjJxxe/jhh53fd1FG65Yn4GRYii222CITpMpXa9as8bpfp8pifFkCAYJMCdB9N+kbZC6++OLgZjS5Az+syD0mMrx21FLKICNvvw2776XqzZ+uRyrlaO64445LdMBAcS23IHP66ad7PcIvo0hL4ElzIchk9k6ag4y0VC5nVn5SLbP1G7+S339fffXVxg8c/zrvvPOCn33HbGbkyJFm9uzZrtmYngIBgkwKOiFXE/IJMnKUMXbs2FyrCj6395CEzhQysVRBRsYtefHFF0OPzj788ENz/fXXV7T+2GOPDe6Xqfggyz9Gjx5t5Dp7kqXcgozPfQTyduLjjz8+ScaCrIsgk8ma9iAjj93LmRPXuEUyQrQMqeBT5IZ1eeLJdYYx7u9Kn7YwT3ICBJnkLBNfUz5BRo5IXGctpIHnnHOOWbp0aaS2lirI+IQSGa1XRu21RU4by+WlsF9Y8+fPN/K4dpKlnIKMvDrgoYcecvLITbf5jPbrXGGBZiDIZMKmPchIa33vZfF9MvO6664zBx54YCZEla/kbG2hX1BZZZN8GVOAIBMTsJCL5xtk5MZgWSasyHtKfJ5AybaOUgUZOdPUvHnzbE0KPst1mUhu/m3QoEHO5f78889gKPycM0SYUE5BRu55kV/orqLhspLsA0Emsyc1BBlpsevnWOZZu3at6d27t/wzZ5FL0zJuTNjBjSw8c+ZMI/cdUvQIEGRS3Ff5BhnZFXlypGHDhjn3Ks6d/qUKMvKSyKpD1FfewWXLlmV9AsE17oysY/DgwWbhwoWVVxfr3+UUZHyOXgVLXiEgN0amvRBkMntIS5Bp2bKlkcvAruJ6ak5GOXfdRygHNzI0g7zgkqJHgCCT4r6KEmTkRXDyfpuw8sknn3gNBFV1HaUIMj5nmaZOnRpcVqva3hYtWgRH4VU/r/x13LEoKq9L/l1OQcYVimV/NT3ZQZCRHttYtAQZabEEGQk0YUXCR8+ePbOGkH333TcYGDRseZl23333mVdffdU1G9NTJkCQSVmHVG5OlCAjy7tu0JSzMn369Mn7KLoUQUZG3pQBssLKoEGDcr6Y0HU2J+k/xOUUZHz+0MlTcHLmS0MhyGT2kk//FvOlkZmty/yqfv36ZvLkyc7LQtOnTzfjxo3LXPh/X/mE8qQGDq22cT4ouABBpuDE0TcQNch06dLFefPlO++8Y+QR5XxKKYLM888/b+Sty7nKhg0bTI8ePXJNDt7NJO9oCiv9+/c38kssiVIuQUbG8Zg4caKTJMmXQzo3FnMGgkwmoKYgIy33eWxaDtJkPKnVq1dX7Gznzp2NPKLtKnGHp3Ctn+mFEyDIFM429pqjBhnZ8JQpU4wM5Z6ryCOzvXr1MvkMJ1/sIOMzQu+nn34aeilN9nHAgAG5GILPJSzJ4FtJlHIJMt27dzdypstVZH9feukl12ypmO4TZCTQys9OIYqMJBt2r5ds045OXYjtV12ntiBTo0aN4HHssAMb2ce5c+caGclcitzYK/3pWmbevHnm6quvDpbhf/oECDIp7rM4QcbnD/i0adOM3ADnW4odZOSRXjm7FFak/bIfuUq9evWCcSNyTZfPly9fbgYOHBg2i/e0cgky5557rtfYMPkORuYNWYAZfYJMATab1yoJMuFcHTt2dI5iLmuQ799vv/02OIiR34VhRQ7q+vbtm/el9rB1Mq24AgSZ4nrntbU4QUaORGQclbBhuOWFaHJZRmqfUuwg43rsUk4jS/tdb8B1vbnZdz0+RuUSZHxHVZXRkf/9918fmpLPQ5DJ7AJtZ2Rs62VsIxnjKKzIWFlyqUjepO06CyZnbHwuo4Ztj2mlFSDIlNY/dOtxgoys2Gd4+Xx+iIsZZGQETgkgYWXFihVG3sHkKsOGDTOHHHJI6GxJXSIplyDj870nAbBr166hrmmaSJDJ7A2tQWb33Xc39957b+bOZPlK3i/XuHHjLFM2frRu3brgErt8L1P0ChBkUtx3Pn9MpPm5Tu/LkYiclQk7IpGzGXJWw+cHuZhBRsYm6devX2jvzJgxw8hTFa7Srl07M2LEiNDZFi1aFLyvKnQmj4nlEmRcgxAKhZzJ69atm4dKOmYhyGT2g9YgI3vhO8ZR5h5X/6rqiODV5+ATDQIEmRT3UtwgI7vmc5+JayApS1TMIDN+/HjTtGlTu+mste9gdnKZTcaGCBvRM6k/yuUSZGQ8jWbNmmV1tx8WYmRku+5C1ASZTFXNQUYeZJAztmEHaZl7W/2rJUuWBE9CVZ/CJ9oECDIp7rEkgozcrS9vJa5Zs2bOPV2/fn0wkFTOGf5/QrGCjPxykidhkgweMjS56zSzeM+aNcvFEDq9XILMpEmTTKNGjUL3VZ54k9cYaCkEmcye0hxkZE/kBl35L0qRM9DyFJm8cJKiX4Agk+I+TCLIyO5deeWV5vDDDw/dU7nm/Nprr4XOU6wg4/NkQr6XgnzuF5ozZ44ZPnx4qIFrYrkEGdegiuIQdzBBORPoeizW5S1hSsYB8ikEmUwl7UFG9sZ1I3/mHm/8Kso4WhuX5l9pEyDIpK1HKrUnqSDj8+p6nz9KxQoyMlBf69atK0lU/2e+Lyr0eZOza3C96q2o/km5BBk5i1e3bt3qO1jpk5UrV0Y+IpbVSHAOO+tWaVM5/5nPDcc+QUZu/pQxRQpRDj30UOdqefzaSZQxQ9u2bc3IkSMzPnN9Ia8ykPcpyaVRSnkIEGRS3I9JBRnZRflhlx/6sCIBQo5UcpViBRm5rFSrVq1czQg+j/KiQtcowbJiuado8eLFodsOm1guQaYYZ2TSGGQK+coFufG+Tp06Yd8+DIgXqpN9os/LICsvOWHCBCPvZ6OUjwBBJsV9mWSQkTdiy1mMsCNg17tGihFkWrVqZUaNGhXaKz5nj7KtQJ5QaNOmTbZJFZ/5PglVsUCVf5RLkJFxNeQ1BWEl7j0yBJnqupyRqW7i+kS+T2Vk7rDfbXYdvkM22PmpdQgQZFLcT0kGGdlNCQgSFMKK3CMi94pkK8UIMkOHDjXt27fPtvmKzz744ANz4403Vnzt+49OnTo5X3C4atWq4F0tvuusOl+5BBm5Z0rG6wgrcZ9aIshU1yXIVDfx+WTIkCHmyCOPdM4q8y1YsMA5HzPoEiDIpLi/kg4yPu8uWrZsWXA3fzaWYgQZn3sz5DLZ7NmzszUx9LPatWsHp5RdR27y0jkJNFFKuQSZMWPGmH322SeUIO4j6wSZ6rwEmeomPp906NAh9J1rso587qfy2SbzpEfg/wAAAP//mlRinwAAF9lJREFU7d0HjDVl1QfwBxsIKgpSgoABUUJAjYqKITZiQUVADCoajEGxICUWFGIUsVDEAhYUpNpQsEQsVDFRE0CCJiAaVEjEBhpFQSFWvu/c79t1d9+9M3Puu3f3LP4mMbv3zrkz5/6elft/5848s87WW299V7OUFHj3u9/dHve4x/X2dthhh7Wf/exnvXVR8OEPf7htt912nbVveMMb2vXXX79Gzetf//r2vOc9b43nFz7x/ve/v1122WULn+59vPnmm7czzjijs+6uu+5qe+yxR4ufkyxnn31222STTTpfes4557RPf/rTnTXjVp5yyiltq622Grd69PxVV13VjjrqqM6aSVZ+7nOfaw984AM7X/rFL36x1zg2cPTRR7fHP/7xnduKMRjy9zBuI9/4xjfaOuusM271oOczPZxwwgltxx137Nxu/N3H3/80li9/+cttvfXW69x0/N3F399yLF/72tfaPe95z85dfehDH2qXXHJJZ02FlU95ylPaEUcc0dlK5m+lc0NWlhNYR5ApNyazDU0jyGy//fYt/uPUtdx4443t4IMPXqNk2kHmNa95Tdtrr73W2O/cJ371q1+1V7/61XOfSv1+yCGHtOc85zmdr/n1r3/dDjzwwM6acSvvLkHm8MMPb09/+tPHvc3Z5yNU/vvf/559nPklglffB3vf+syHkyAzf3QEmfkeHq1eAUGm8NhNI8jE2z311FPblltu2fnOX/va17abbrppXs20g8xZZ53VNt1003n7XPjgvPPOa2eeeebCpwc/HhLk4sNx7733bv/4xz8Gb3em8O4SZGL899xzz5m3NfZn5mjg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+amdLkHxkKu14oN03333bXfcccdEe3zxi188OlE2zp9Z6uXWW28dfcBfffXVS73pQduLO6PH14FdNx8dtKFFisI9TvyOu2xnjsLM3ZQgM1ejje4z1ndLEne/nm/mUU0BQabmuIy6ijk44g7Nfcv+++8/usqlr26S9bvuumuLGWEzS1eQGXLZdcw+m91npr9xtbvvvns79NBDx62efT5zGfbsixb8EvePilATk+et7RLnE5166qltpQLM3P4joMVkh3GZdnwtubZfOUWo/cEPfjCaa+fPf/7z3F2lfx/yD4Mrr7xydHQpvfEBLxgS4pdqtucB7Yxubho3Oe1aYtbouJ1G9WXIzNMRhiNsW+5+AoLM3W9MvaNVJBDn5jztaU9rO++88+iDv+9ITfzHOO5iHXOzxBGKb3/72xMfoZg2U8x5ExP2PetZz2pxeXV8aMbRmnHhJt5b3CT05ptvbldccUW78MILUydWT/v92D4BAjUFBJma46Kr/2KB9ddffzRvzCabbNI22GCDUVCJc3Nibpn4oF/tS7ynmA8nwk18RRfBJU7ejauQLAQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgKCDJZMfUECBAgQIBAGQFBpsxQaIQAAQIECBDICggyWTH1BAgQIECAQBkBQabMUGiEAAECBAgQyAoIMlkx9QQIECBAgEAZAUGmzFBohAABAgQIEMgK/A951lPeQIDuUAAAAABJRU5ErkJggg=='