proofpress 0.1.0 → 0.2.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.
- package/README.md +87 -215
- package/assets/logo-on-dark.svg +6 -0
- package/assets/logo-on-light.svg +6 -0
- package/package.json +6 -2
- package/proofpress.py +679 -68
- package/skills/README.md +34 -71
- package/skills/claude-code/proofpress/SKILL.md +14 -18
- package/skills/codex/AGENTS-snippet.md +14 -18
- package/skills/cursor/proofpress/SKILL.md +14 -18
- package/skills/pi/proofpress-skill.md +14 -18
package/README.md
CHANGED
|
@@ -6,41 +6,32 @@
|
|
|
6
6
|
[//]: # (ob:de7999eb)
|
|
7
7
|
# Proofpress
|
|
8
8
|
|
|
9
|
+
[//]: # (ob:7542280e)
|
|
10
|
+
[](https://www.npmjs.com/package/proofpress)
|
|
11
|
+
[](https://github.com/chenmingtang830/proofpress/actions/workflows/ci.yml)
|
|
12
|
+
[](LICENSE)
|
|
13
|
+
|
|
9
14
|
[//]: # (ob:e667d986)
|
|
10
|
-
|
|
11
|
-
that travels with the artifact.
|
|
15
|
+
**The trust layer for multiplayer AI.**
|
|
12
16
|
|
|
13
17
|
[//]: # (ob:0e0e9d9a)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
knowledge artifacts do not. Proofpress keeps a shared, checkable record of
|
|
18
|
-
accepted changes, stated reasons, consequential rejections, and their relation
|
|
19
|
-
to the artifact itself—so that history can travel with the work.
|
|
20
|
-
|
|
21
|
-
[//]: # (ob:cc376e2b)
|
|
22
|
-
Think C2PA, but for knowledge work: a portable, inspectable record of the
|
|
23
|
-
history admitted into an artifact. This is an analogy, not a claim of C2PA
|
|
24
|
-
compatibility, signed authorship, or complete capture.
|
|
18
|
+
Proofpress is an open, agent-native ledger that travels with Markdown and
|
|
19
|
+
static HTML artifacts—even when Git does not. It keeps accepted changes,
|
|
20
|
+
stated reasons, and consequential rejections tied to the work.
|
|
25
21
|
|
|
26
22
|
[//]: # (ob:6ef36a68)
|
|
27
|
-
> Git made code collaborative. Proofpress makes intelligence
|
|
23
|
+
> Git made code collaborative. Proofpress makes intelligence compound.
|
|
28
24
|
|
|
29
|
-
[//]: # (ob:
|
|
30
|
-
|
|
25
|
+
[//]: # (ob:cd8c1f66)
|
|
26
|
+
Think C2PA for knowledge work: a portable, inspectable record of admitted
|
|
27
|
+
history—not a claim of C2PA compatibility, signed authorship, or complete
|
|
28
|
+
capture.
|
|
31
29
|
|
|
32
|
-
[//]: # (ob:
|
|
33
|
-
|
|
34
|
-
artifact behaviors are covered by black-box tests, but the embedded carrier and
|
|
35
|
-
command interfaces may still change before a stable release. The npm package is
|
|
36
|
-
published under the `next` tag while these interfaces settle.
|
|
37
|
-
|
|
38
|
-
[//]: # (ob:19210f53)
|
|
39
|
-
## Install the alpha
|
|
30
|
+
[//]: # (ob:cc376e2b)
|
|
31
|
+
## Install
|
|
40
32
|
|
|
41
|
-
[//]: # (ob:
|
|
42
|
-
|
|
43
|
-
plus repository setup command. Python 3 and Git are required:
|
|
33
|
+
[//]: # (ob:d6f9f208)
|
|
34
|
+
Requires Python 3.11+, Git, and Node 22+:
|
|
44
35
|
|
|
45
36
|
[//]: # (ob:7b197ac1)
|
|
46
37
|
```sh
|
|
@@ -50,231 +41,112 @@ npx --no-install proofpress setup --agent codex
|
|
|
50
41
|
```
|
|
51
42
|
|
|
52
43
|
[//]: # (ob:5ae48e1b)
|
|
53
|
-
`setup` installs
|
|
54
|
-
|
|
55
|
-
`cursor`, or `all`. Portable history remains opt-in per artifact.
|
|
56
|
-
|
|
57
|
-
[//]: # (ob:da019dfc)
|
|
58
|
-
`proofpress@0.1.0` is the current stable release channel. The deprecated
|
|
59
|
-
`0.0.1` placeholder is no longer the default install.
|
|
44
|
+
`setup` installs the agent adapter and writes `.proofpress/manifest.json`. Use
|
|
45
|
+
`--agent claude`, `cursor`, or `all` for another supported harness.
|
|
60
46
|
|
|
61
47
|
[//]: # (ob:4273537d)
|
|
62
|
-
##
|
|
48
|
+
## Create a portable document
|
|
63
49
|
|
|
64
50
|
[//]: # (ob:1160e434)
|
|
65
|
-
|
|
66
|
-
community-planning document with a real, embedded v1 → v2 ledger. In a clean
|
|
67
|
-
Git repository, install `proofpress`, copy only `strategy.md`, then run
|
|
68
|
-
`inspect`, `import`, and `verify`. The recipient needs neither the source
|
|
69
|
-
repository nor the original session.
|
|
51
|
+
Run these commands on a Markdown or static HTML file:
|
|
70
52
|
|
|
71
53
|
[//]: # (ob:2b655d31)
|
|
72
|
-
To add a visible, transparent distribution mark to a repository README:
|
|
73
|
-
|
|
74
|
-
[//]: # (ob:d4916c37)
|
|
75
54
|
```sh
|
|
76
|
-
npx --no-install proofpress
|
|
55
|
+
npx --no-install proofpress policy proposal.md portable
|
|
56
|
+
npx --no-install proofpress anchor proposal.md
|
|
57
|
+
npx --no-install proofpress snapshot proposal.md --kind agent --author codex \
|
|
58
|
+
--why "accepted the smaller launch scope"
|
|
59
|
+
npx --no-install proofpress verify proposal.md
|
|
77
60
|
```
|
|
78
61
|
|
|
79
62
|
[//]: # (ob:5796ae98)
|
|
80
|
-
The
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
cannot silently fetch the package.
|
|
84
|
-
|
|
85
|
-
[//]: # (ob:e7b4f799)
|
|
86
|
-
## Single-file install
|
|
87
|
-
|
|
88
|
-
[//]: # (ob:d8cafbd3)
|
|
89
|
-
Proofpress is a single Python file with no third-party runtime dependencies:
|
|
90
|
-
|
|
91
|
-
[//]: # (ob:0b5b4916)
|
|
92
|
-
```sh
|
|
93
|
-
git clone https://github.com/chenmingtang830/proofpress.git
|
|
94
|
-
cd proofpress
|
|
95
|
-
python3 proofpress.py --help
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
[//]: # (ob:166fd594)
|
|
99
|
-
To use it in another repository, vendor `proofpress.py` at that repository's
|
|
100
|
-
root and install the matching adapter from [`skills/`](skills/).
|
|
63
|
+
The policy is sticky. Each accepted snapshot refreshes the hidden capsule in
|
|
64
|
+
the file. Source code stays in Git; Proofpress manages only Markdown and static
|
|
65
|
+
HTML knowledge artifacts.
|
|
101
66
|
|
|
102
67
|
[//]: # (ob:949eb6a5)
|
|
103
|
-
##
|
|
68
|
+
## Hand off a document
|
|
104
69
|
|
|
105
70
|
[//]: # (ob:2173502c)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
[//]: # (ob:c44f6768)
|
|
109
|
-
```sh
|
|
110
|
-
python3 proofpress.py policy proposal.md portable
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
[//]: # (ob:79416c44)
|
|
114
|
-
The setting is sticky. Later accepted revisions refresh a compact, hidden
|
|
115
|
-
capsule inside the carrier file. Send the original file to a collaborator and
|
|
116
|
-
their agent can inspect and import its history without access to your Git repo,
|
|
117
|
-
chat session, or Proofpress ledger ref.
|
|
71
|
+
Send the original file. The recipient does not need your repository, session,
|
|
72
|
+
or local ledger:
|
|
118
73
|
|
|
119
74
|
[//]: # (ob:af7113fa)
|
|
120
75
|
```sh
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
76
|
+
npx --no-install proofpress inspect proposal.md
|
|
77
|
+
npx --no-install proofpress import proposal.md
|
|
78
|
+
npx --no-install proofpress log proposal.md
|
|
124
79
|
```
|
|
125
80
|
|
|
126
|
-
[//]: # (ob:
|
|
127
|
-
|
|
128
|
-
for accidental drift and inconsistent rewrites, but V0 does not claim signed
|
|
129
|
-
authorship or protection from wholesale malicious replacement.
|
|
130
|
-
|
|
131
|
-
[//]: # (ob:839fc8a1)
|
|
132
|
-
Portable carriers include a non-rendering discovery marker with
|
|
133
|
-
`Verifiable revision history by Proofpress` and the project URL. The capsule's
|
|
134
|
-
canonical discovery object names `proofpress@latest`. An agent may explain
|
|
135
|
-
this provenance and offer installation, but must obtain user consent before
|
|
136
|
-
downloading or executing anything.
|
|
137
|
-
|
|
138
|
-
[//]: # (ob:cc095bd4)
|
|
139
|
-
## Static HTML carrier
|
|
140
|
-
|
|
141
|
-
[//]: # (ob:e6463f5e)
|
|
142
|
-
Proofpress also supports static `.html` and `.htm` artifacts. `anchor` writes a
|
|
143
|
-
stable `data-proofpress-id` onto supported visible blocks (headings, paragraphs,
|
|
144
|
-
list items, block quotes, preformatted blocks, table cells, and figure captions).
|
|
145
|
-
The metadata marker lives in `<head>`; a portable capsule is a non-executing
|
|
146
|
-
`application/vnd.proofpress+json` data block before `</body>`.
|
|
147
|
-
|
|
148
|
-
[//]: # (ob:b8abc9df)
|
|
149
|
-
```sh
|
|
150
|
-
python3 proofpress.py policy launch-plan.html portable
|
|
151
|
-
python3 proofpress.py anchor launch-plan.html
|
|
152
|
-
python3 proofpress.py snapshot launch-plan.html --kind agent --author codex \
|
|
153
|
-
--why "made the accepted review scope explicit"
|
|
154
|
-
python3 proofpress.py verify launch-plan.html
|
|
155
|
-
```
|
|
81
|
+
[//]: # (ob:5e991c72)
|
|
82
|
+
### GitHub or a raw file
|
|
156
83
|
|
|
157
|
-
[//]: # (ob:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
84
|
+
[//]: # (ob:398568bb)
|
|
85
|
+
| Route | What travels |
|
|
86
|
+
|---|---|
|
|
87
|
+
| GitHub | The file and capsule move through ordinary commits and pull requests |
|
|
88
|
+
| Outside Git | The raw file carries its own public history |
|
|
89
|
+
|
|
90
|
+
[//]: # (ob:a908fde7)
|
|
91
|
+
`refs/proofpress/ledger` remains the complete local working record. Portable
|
|
92
|
+
files do not depend on it: their capsule crosses the repository boundary with
|
|
93
|
+
the file. A team that also wants to share the complete ledger must run
|
|
94
|
+
`npx --no-install proofpress sync` explicitly; an ordinary `git push` does not
|
|
95
|
+
push the special ref.
|
|
163
96
|
|
|
164
97
|
[//]: # (ob:226a29fd)
|
|
165
|
-
## What
|
|
98
|
+
## What is—and is not—recorded
|
|
166
99
|
|
|
167
100
|
[//]: # (ob:cfc1c3aa)
|
|
168
|
-
Proofpress records accepted
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
against the actual artifact diff.
|
|
101
|
+
Proofpress records accepted versions, computed block changes, stated actor
|
|
102
|
+
roles, reasons, and consequential rejections. Claims are checked against the
|
|
103
|
+
actual document diff.
|
|
172
104
|
|
|
173
105
|
[//]: # (ob:5e0b34ed)
|
|
174
|
-
It does not automatically store raw prompts, transcripts,
|
|
175
|
-
brainstorming, or every save.
|
|
176
|
-
|
|
177
|
-
preserve an otherwise missed version, but identifies itself only as
|
|
178
|
-
`recorded_by`; it does not guess who wrote the content or why. Harness skills
|
|
179
|
-
can also capture a specific existing file before an agent edits it, keeping
|
|
180
|
-
unattributed human drift separate from the agent's revision.
|
|
181
|
-
|
|
182
|
-
[//]: # (ob:d8387b0b)
|
|
183
|
-
## Privacy modes
|
|
184
|
-
|
|
185
|
-
[//]: # (ob:5df13acf)
|
|
186
|
-
Each artifact has one policy:
|
|
187
|
-
|
|
188
|
-
[//]: # (ob:3b52e3b3)
|
|
189
|
-
- `portable`: future accepted versions refresh the embedded capsule.
|
|
190
|
-
- `local`: versions stay in the local/Git ledger; the current capsule is
|
|
191
|
-
|
|
192
|
-
[//]: # (ob:126978a2)
|
|
193
|
-
removed.
|
|
194
|
-
|
|
195
|
-
[//]: # (ob:0890e114)
|
|
196
|
-
- `ignored`: future capture is skipped.
|
|
197
|
-
|
|
198
|
-
[//]: # (ob:c6642117)
|
|
199
|
-
Switching from portable to local cannot recall copies already sent. Re-enabling
|
|
200
|
-
portable starts a clean lineage at the current body, so private-interval actors,
|
|
201
|
-
reasons, rejected paths, event IDs, and omitted-event counts do not leak.
|
|
202
|
-
|
|
203
|
-
[//]: # (ob:18995a53)
|
|
204
|
-
For a one-off history-free copy, use:
|
|
205
|
-
|
|
206
|
-
[//]: # (ob:f28051ef)
|
|
207
|
-
```sh
|
|
208
|
-
python3 proofpress.py clean proposal.md --output proposal-clean.md
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
[//]: # (ob:bfac82a8)
|
|
212
|
-
## Core workflow
|
|
213
|
-
|
|
214
|
-
[//]: # (ob:706dcea3)
|
|
215
|
-
```sh
|
|
216
|
-
python3 proofpress.py anchor proposal.md
|
|
217
|
-
python3 proofpress.py snapshot proposal.md --kind agent --author codex \
|
|
218
|
-
--produced-by codex --recorded-by codex \
|
|
219
|
-
--attribution-basis harness_attested \
|
|
220
|
-
--note "incorporated review" --claims /tmp/claims.json \
|
|
221
|
-
--why "the team chose the smaller launch scope"
|
|
222
|
-
python3 proofpress.py verify proposal.md
|
|
223
|
-
```
|
|
106
|
+
It does not automatically store raw prompts, transcripts, private reasoning,
|
|
107
|
+
tool traces, casual brainstorming, or every save. See the
|
|
108
|
+
[privacy boundary](docs/PRIVACY_AND_DISCLOSURE.md) for the complete rules.
|
|
224
109
|
|
|
225
|
-
[//]: # (ob:
|
|
226
|
-
|
|
227
|
-
should not repeat. Source code stays in Git; Proofpress is for Markdown and
|
|
228
|
-
static HTML knowledge artifacts.
|
|
110
|
+
[//]: # (ob:47f21d3a)
|
|
111
|
+
## Merge parallel copies
|
|
229
112
|
|
|
230
|
-
[//]: # (ob:
|
|
231
|
-
|
|
113
|
+
[//]: # (ob:55bcd98e)
|
|
114
|
+
Keep every original copy. First, ask Proofpress to find the common ancestor and
|
|
115
|
+
report only genuine block conflicts:
|
|
232
116
|
|
|
233
|
-
[//]: # (ob:
|
|
234
|
-
When one document merges several Proofpress-managed sources, record the
|
|
235
|
-
upstream references — identity, head version, and digest, never copied
|
|
236
|
-
history:
|
|
237
|
-
|
|
238
|
-
[//]: # (ob:100c5aa7)
|
|
117
|
+
[//]: # (ob:8f498c01)
|
|
239
118
|
```sh
|
|
240
|
-
|
|
241
|
-
--from
|
|
119
|
+
npx --no-install proofpress merge-plan proposal-alice.md \
|
|
120
|
+
--from proposal-bob.md --json
|
|
242
121
|
```
|
|
243
122
|
|
|
244
|
-
[//]: # (ob:
|
|
245
|
-
|
|
246
|
-
sanitized), the ledger can still recognize it by a deterministic content
|
|
247
|
-
fingerprint:
|
|
123
|
+
[//]: # (ob:d4ed0d79)
|
|
124
|
+
After an agent or user resolves the visible body, record the reunion:
|
|
248
125
|
|
|
249
|
-
[//]: # (ob:
|
|
126
|
+
[//]: # (ob:74883804)
|
|
250
127
|
```sh
|
|
251
|
-
|
|
128
|
+
npx --no-install proofpress anchor proposal-alice.md
|
|
129
|
+
npx --no-install proofpress merge proposal-alice.md --from proposal-bob.md \
|
|
130
|
+
--kind agent --author codex --why "resolved the parallel review copies"
|
|
131
|
+
npx --no-install proofpress verify proposal-alice.md
|
|
252
132
|
```
|
|
253
133
|
|
|
254
|
-
[//]: # (ob:
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
and a copy with wording changes intentionally does not match.
|
|
134
|
+
[//]: # (ob:1575e201)
|
|
135
|
+
Same-document branches become `parents`. Other source documents remain
|
|
136
|
+
`ingredients`; record those with `merge-lineage`.
|
|
258
137
|
|
|
259
138
|
[//]: # (ob:2a955c60)
|
|
260
|
-
##
|
|
139
|
+
## Go deeper
|
|
261
140
|
|
|
262
141
|
[//]: # (ob:8deed5b3)
|
|
263
|
-
-
|
|
264
|
-
-
|
|
265
|
-
-
|
|
266
|
-
-
|
|
267
|
-
|
|
268
|
-
[
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
[//]: # (
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
[//]: # (ob:820f39ab)
|
|
275
|
-
Start with the [documentation index](docs/README.md). The executable behavior is
|
|
276
|
-
defined by the [Portable Artifact V0 contract](docs/PORTABLE_ARTIFACT_SPEC.md),
|
|
277
|
-
with its disclosure limits in
|
|
278
|
-
[Privacy Boundaries for Portable Artifacts](docs/PRIVACY_AND_DISCLOSURE.md).
|
|
279
|
-
|
|
280
|
-
[//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzU1NmIxMTVkZTcxMWIwY2QzM2VlZDI2MCIsInBvbGljeSI6ImxvY2FsIiwicHJvb2ZwcmVzcyI6MX0)
|
|
142
|
+
- [Five-minute portable handoff demo](examples/portable-handoff/README.md)
|
|
143
|
+
- [Documentation map](docs/README.md)
|
|
144
|
+
- [Executable V1 contract](docs/PORTABLE_ARTIFACT_SPEC.md)
|
|
145
|
+
- [Privacy boundaries](docs/PRIVACY_AND_DISCLOSURE.md)
|
|
146
|
+
- [Agent adapters](skills/README.md)
|
|
147
|
+
- [Contributing](CONTRIBUTING.md) · [Changelog](CHANGELOG.md) ·
|
|
148
|
+
[Security](SECURITY.md) · [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
149
|
+
|
|
150
|
+
[//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzU1NmIxMTVkZTcxMWIwY2QzM2VlZDI2MCIsInBvbGljeSI6InBvcnRhYmxlIiwicG9ydGFibGVfaGVhZCI6IjExZjBkYzYzIiwicG9ydGFibGVfaGVhZF9ldmVudCI6InBwZV9mMDBlZDU2NGU1MTJiYjM4NTQ1OTc3NTgiLCJwb3J0YWJsZV9saW5lYWdlX2lkIjoicHBsX2UyOWYxODUxZTBiNDhhYTFkNDIxM2ZjMiIsInByb29mcHJlc3MiOjF9)
|
|
151
|
+
[//]: # (proofpress:discovery:Verifiable revision history by Proofpress | https://github.com/chenmingtang830/proofpress)
|
|
152
|
+
[//]: # (proofpress:capsule:eNrtfUlzI0eW5l-JYR1KqiLI2BdKLevsVFYpbbRZZkptbck0wsPdg4hKIAKFCJDJkmRWp5n72FifZq7zF-Y-P6UOYzb_Yt5zD19AAkEsTNTScVAKBCJ8ff627z1_P52QRVsWhLZXJTu5OJnPr6Iozj0vYjzxvNylLAg4Z37snpye5DW7u2LlNW9aeLaZED-KL3KWpTGlCaFe4foeTUKX5MxjhZe6bhb5LI6TLOXcZRmJkziOaZxzFgVFknI3iwtol5UNrW_44u7k4if8o71qyTX0MCUtdnUKH3I-hS9-5IuyKEk-5c6C35RNWVfOBJ6vF3dOfud8v6jrYr7gTQPvzAl9T645Tmrl60X9Bw7TXS6wwUnbzpuL8_Prsp0s8zNaz87phFezsrpuSXWdBu75ytsL_sdlCZ-vlg1fXNG6angFa9EulvyX05MJJ7iIHiwEo3FwIr-54jfiIVhcflW4Lkw-Dnnk-XkepFEYZUkSpTiyetHi1K6mZcVh5GpHplfcz2A1I4-7eZgS4rHQ94KC-nI63eiuKJk3yylM2Mdx0nrBmpOLtz-ddN3_dAK7XC8a_CR_5uwqhyV_e0Jrxj-cvIMZKGqAjl-9ePblNy_OZuzkdCciIW27KPNlC3tzlZOmbHCZyaLCIcJvsKFcNLlsJ_UCB_O-rLDV5g5-mcEvFZnhrslBnZ408CK0dXJRLadTGCKdwMZwObV8WtP38GzMaZJ4eQiPw560_ANO4JP_--__9f_9r3__FL7suiCMib7nSDz8Fr75fO6QaXld_dPlCYVV4ovLky8uK8f5vJxdO82CwvekaXjbnE_r6_qsubm-PIE3Wvi-IzZorr2bCzIjC3Lyy6kZFaxOlmU8XxnVCo1uHNevVmm56wGpCShzpRMOxwtP4B6dmKecsnHaCXeAjpvWmZI7vnCKeuHMltO2nMu_n728cEjl1HNenTqkZ9oud3kGh32PEX21nJGqgW6YAwegahuHQpdA42xJuUMcVtPlDL534BTS99O7UwcITYyc8Z4RURokMff32Yg3k7J67zz3v38m-8JVeV_Vt1POrrlzWy_ew6o46uieOmXVzIG9CBbVM6KYF0FM4nSPEX3h_L5snRlh3MEjAv9MgT3WC9KWN_zMoht45j2HrYXmp0DjvKJ9a-TFGUsjP1gZ0euWtMt-Qv2Vox_qoVIWF1nhu-mOrVuTcc-8M1fRKV0uFkgGjVzoaj4DeTDlpIEFABkh5ELfXDPfc4toda4vK2htOn1ksuapntlmKUw24nTX9q3pvud8DnsHJ-BPfFGPGIdjx2ALQcjdAeOsHF5dg5iQR4Wxpm-6Se5lKJ53Hc54PG4mlxWubimfdkajhtxwGM6NYyQPPvIBfqrqkXoOfjQDQjJdGVBEeJhyL995QMCJl_OxGk2DJ09K-RG5JQtYDUbmwMTFqtwuShA2l9X4TI60j1ET18tYsfN-jc0a_LOgz_EGAu2I00HZVfHpmfNm0jOc0E-CKEjYynCE6nNn8RoH2mJ1UcBqOAUcfQeUlmXLH6HfbZt55Dx7XuzyMAiffIhvYPHePnif8Vn97hP-gczmU96cq99H3e_nnzo4ip4l9fM4iljgPf14azx-0AZqo0ICtAsQYTAA3H7UZZUyBOx48d5p4Xkgh3ndlH3jZWHmxSC1nny8-kw_PLCK9YhDBr8KCSxkDD6bE3bdd6STLCY8Sz8KQWDf3GnIHR4u0hrdH0YNyi0ByeaAQt5Ywu8z4J19PJEneViAerYqkIDMgaqKEkZabiUO1r_RJwhTSoqcBYf0u6q3EacRryvBIFq5BXvGqWpYrnLBRjD79s5ZLKu27NPb8ihHsjtkaB15gTnl0GkN8mkXA6uHvLw4LliUhYeMDY4qEAnSBVAfqWrg0wt1FMGAPHWAlBiodxZXP5vfjR0guL6jmoWg4sckWhnavyKZ_uXP_0MR_l_-_D-dGQfG8Ag99b3XQ1W-BxLD9enhY3izXFTdcS2nJVANUFQN5-uiT70OwwIs-_Tw3jvymQtKDpyVjYBRTUvQf-BL2DIyBctU8xWQ8uNxD_kkWQjsNAyfYH2AHQGDbGEH8PA1Ldghd2fO10SoHZRy0D-YZlANfCpg_BM4pbTuWUJSgCEdFOQjL2FnndhruPpoH4fnWebRxF8Z4pvbuhN4MEZnQcrpIxT-K2f9Kz3EHWRpFKd5fkjHoMyVYCuB5fTVMj8VKto3II5ZfVudf_Xmm68l10S1sRRGp_CkYAc3fNq3bZmbFmDmHzK075btg7HVixK0ezKFt2_l0LSB3rV75rxse5X-vKBZ4FFyyNCQ2NVawAAYp1Mi7UyHkZacgoRppaEu-O9iSVHRaXBsfUNLg6ygKfEOGdr3SqOgZLEoweSDEdDpkqGXoKqr0QLNpQWeUu1cFAoYnNLbXk-Bm0U5Cx_YqSV1BJ103W1hEj98o9eLE8ZBEfFD-rXUAjJtaqdZznEtkUmJdsZnk3Y2HQsqF5_hY-fXa_oIKSU5BevokKFtw9enZFnRyWg-JZUYqGbuPTzJdUHspL57yNjeTEqlR4kXR_aLzjc_ft-RuVMsyIyjxweOp_P8m9dAcX0Whx8TPyvYQ45-zVuUC9IDu40-cP-FHjqiBfVoQMgBvVpk1HmRjVxT9AKqknCyNIJdlQsQbrO5VOQ3rUfE3TwI-SHrAVyF1aDli-1YtvUMtwuUvjsHEQAumCWQ1mzeNp0ZRhel_KNP9rI0SJPcve8dLG8IUOUMSO4xpe3-sz37E7HCCwgt9uvrBaETswcT0jioYsvz06egBXnk8yAP9ut1BBpxdxTHF06xbJfoaVEkoShBazoopvgs59iOJQWmYAqvqvR-nCUp8fcblAP9zYCts7M-iybNXO554d7zLq8rICxmpg3SUPwfVb_35Xy-0v-DKdI4Dn3PS_br_zUYcXSCIqwAojY2dFs70D4oB5RUeBTg6KAFT-t5yZH1LxCF6nF-plkWkWhPYvgd8D6CZDdCM77D3kaw8-iInoMRBSZWHykWfupGHt_zAPTKETrlEizQ5sFoVC9b4Evyyx45ksOBSn2yasE8R56C_L6Y1rePsID7z_awgMSNGeUk2K-v3hUgIEBhfzZq90XPEgQBdyOy7xL8AIb1eARaF2KrcGCAQoAtI1giMNI_LkFHLIFkGSyIky9woLxz5hR9QiNL4ox6q5riN3xxDaylQ0mFOoNeNjyM3SF4ZLO2aqBnB8Ok8D0W3AO4YOzTKdfnsC4EJ2xAZ9Cw1WOm0ZZt9MmXKKcsS_mTDk3r2miJgBlQO5LtCChcoFHAkma4qGfOf-Z87nChbgsjps8MKMIspa73pGPtPR9ijELD1GdkREB4cmQWl5eXNmj04IAwUF5clmRPOlxhYdWzGdJghcsGyyqBC4lqdk2cOc-qztBCQBTeyHuVzyRMQalxw-Mt7T3Wo5dVP9_n3IuSiPtPTAjPQCSWFTD_xpkhqJ1zI0HXNDm2QhzGfd4-j6SM50871n-d8EqochrfFpSKrnggCWCbRicfAakQ5F5NvVxQ3pz2SXrXpcDSk2MfMMVYbVEsThcI5D4yCEMasNh9-qUlQjcBrQnoAP07M94SdGAI1q8cHJ_MSSNsnMYBDlFWvU5fH4iAhlFxvKUtGYrQAsxlMcwRzkicr37PZ56AVKdB-rQDVYNBZ0JzK7wv4pv2zvnLn_-7c3nSdka1kPDqaF2eiF_rqjd8xCdZFNF7ZPB6uYAWHpXs1mM9QhL2jrPonjm0TQ-j-9jAxQN03oLln3_98uyyGonohDmhfaYQydPYv2cVbjMgRyhnaCIoneozi8tJwgaTAKQ07u98mQNXduZ8gZhJH5Pz3cQr8mSfBQKzaDptzmFpnk8J-uOeA0mein8_wP-Wi6ZenIr1-b50ZBAYjt_2jj9cnyJhgefvsz45b9oRLwp0KhZA9Dmh751JXb9v-gzHGA5NnKRsjwV4oUzf-_twAUTQTkbwZkctrUZDa-EC7lmA1HeLICP5zuN53cLhk2ggUsBbdbqJQKRxLB_efQJfNuc63O9TjE4AE_7D_fV5d6pCCU86o_-Kgq0pw_nELyo8kF-lWeKSmEcRY0HK8iwPSebHwroA3VG0qZZHSQugXvp-XpeC9Uj8XMb8qb8w5O8dhkmiu8NqwQ6dtBoRQZl7RlU2ddFeFUCXfDFflF3wZpN7F5QlBQ2TmCVeVMQ88eMsCmlKPTf2OUkCxl2acvgxKvDRPCesSDIShh4jLhUAHXoZRRCm3K2LOPsFFhqjJH3Xj0duMvLjN25yEQYXfvxb171wkRV2K45OjYyx0OMhEIj59qeniNwU1CYDKyekmaClU3gxicM0osJiF21YsZYdIR4eRInORvwNvr8tWTuBX9IU_pjw8nrSdn9Bm5-fz79Yc2y70aZREhdB6sWZG6jRWjGY3WgfD63smmNZjDp_kuYizkU0Z0VbPgja2z2IEhX6USUBFRFQuLishMSUwFNjDq7axrPNs_cS4JIuKdwi52q4VihmN9xDIixph2mKITYTAvbyZYX6VCGwKpjrTMiaZbOUXlmK8b4L1KnoooYFouJFGc_bnDqvp8CMT0Eb4winNkIqXFZNPeMYaP5r1NNm9eLuTJiYsLj8A-WgtsDgblGrw0EJd7x0eYF-B-uIOBA-_5kzA23vsjKxmhrr6AzYlVBJGW5HcFYw3lPJjLrQLXRMg4p0WWmfZxeCfCoQAwH3kkbMaNXZIb0hcq644NJVvuBTwX1hq-uVvUXVlE8LUJGaWq6xCm3HLZIkYSgCZ95DDUD2jMTAlVIRdCmowQqDVaDbAdGtemFwOJeVGiths7LFRSlxfjBwTbqORlow_ILAeb9T0AoFhXuGTeFQLitEE2CNZAQCrDLwFiQioSw0k3J-6tQScpjyVvtkexYjKjKaJ0Uch5wYNqYjcLvFOCSw1oFTs5zKJ3s2JXY9n6fEz2imxmHF3SoG1R9S27VFSApKmp94pNBzsqJsH3KnnQNo3TP_zAVDfj4hZx6YJVKpaFb4mZbiim80F6J90H0F1eI-3_0JVM8HFsdlhQavAuFxQxsLt1NEc-rg4PkCGGReA-VLKit5d6I6GhQHyzqf8Eo9lUF3BE-1GPGoi8kTmgpsZyk5SBdAqnAMyVru6uVlVXEkOmBuHyQ18-uFVJsaqXj1bHRaMJbSFORsluiNNkHHZqN7w4m7xtw48lJQo7jPtBC2Iowf7vTOscME48QqQQUShUVBNJ8uGys8qgsL7JxVZ6qpQLSCBwc5f-cTZBebl4aysMjcPEgI1WLKClDuZnNY6LFaiNGo29WdAx43mdWKocR-kLGcAJfV3NUKalaTOCRcGUd2DktdFmDBnP0B5MtYxFWUwtaezUGLhsEK37XC-cdi6ONT-CBMr_EpNEeFxTUWLHMMo4BWtD9X8ewFnxEYJKglLawPGojbKBwpLVw_C4QCqTmQiaRWi3BAjDQqHXOEt1rUNMbuGTQwRu8M5ZN6ymCYJaLBoDqipt5pKQWB067WvE8osCLLMX4AFHU1fCvy2pzRA0OmlXrmpUHAIp_HCdUswURRa4G8f_iz3EI41xVfgrYwFXJ0tgQN7U74vCsRDaP0O6FIYCgymZ4avPbGc_7yX_6bc-N3-iiQnHCfIbR2WeExtwMm1Vmy9nh8Kn1tAv8ZNzAO4JvoqBqLUIEKo1BhKztFAmm1nOF8xpKhj2_EYo_l7sPWlyAuYLTIi2GreSmCNoWzSvg_LyuLQ1X1YjV6qlM1e4ggx1S8lBReSDUNW7HialcOCPLGgUmDrI8pRiQkRUiSPNVM0QoBv88U94nd5o42Cx9hbhkHgRP6jLmxXhMrvNui1H3jsssuhgMowYobE9pnZ5TACqJaMK0JQ8bFP3AKJ8xBuxw555kSnCihJRNtsCeY2f3VAcJqpB6q4ROMAob_8Q-wcXgmJJrePS9FPOwmHB-Jrzcl2hwIZ_KWTmyloYewCEj_wGdRQn29iFbMuaXqbRtB3jVcFH6c5SzlaaRFjxVUvtYq3S1EfCbYrlQZQNPqIVs_LmiKCb-eUXOsKPJVst0vJrw5g6dgK9iK0F_vIh-NJnw6f4S6g8xPc-qyiMae0cF1dLk58XvHisuToB79NQwXnpGiWp1YpKEZ6aI7lBYgojzeagfqu0-6T5_2kBmL04BngUdAF9G6oQlIN2S2Y2C5WizQcYARFEnOtNCyYs3VYu0QM64cSwHNcoocxdPjtsLIVynnycLBFbd1wfhjQZEGqXbsWBHiFoPbN9IbzFe0XSYlCNUKGUkXQyujkIXy08UX4lE8c15z6R4wokscUSFHjBlaL6SHRPoRDD9TUd2CwoQ0Fcp_5-5XSh6e9xpsfBx6IzgsWDkLI9RPV9wzQl-0vXNCHcBJKtFcaLWxlSC2sMYvK8FNz2WraJ19hribWEQrfK-sbsi0ZLCWtl6Fk5aOCNHICJUIy7MgDD51rkZTjv6QaV2_B4nXQRzA2ytyQ8opNtdzbBIWuFEUhDQ3Is4Kwd-G_B4NpbcelXuyxZPT-nr1sV46Bu0VLMPCixPPWCEmSl8f_h1i7pUKECQ0CbwgKsy5t8LwTYbk3kH18PSiXl5PgMygc7K4k9pqidGaCsuSKuF8OZ0KwxLsoObMGQPlNZZ8OJeUOdbUSC6rhuOGt4YqFfmukpDEPz4DQwQIbDZCkhYi_ry5qyieeRABxRL0aKRIK-SF4eHR9Cv0AZuCe-guJoFXcF5QN9NOGyuHoFvXQzIC1Cprg0A45zpWoGM1UZ2GaaDC1dGxOPKW7xLfB6uGyB8E25Hu6utlia8i0o-HWpoRnYCUmr8FJneYS59LjLMkYCzNmB-pFbFSFyxevG8iAq4TGE58MQJWjbDbZSUUTUrFXxiUBiaHks_owQV-gy2pSBzJkX70DPeS7krploR10X5JR0bAtLzTZ1Gg34KlyuE4o8CHPShr6VVBG1ZE9vQwKRpzsBejMAk1nGGlTihN74BECNg7YDFbX6oyVl5sp7tExfnh1ddSHHSbg8oOSKS6wrhsq8M6F4_jzR6NrTP9s7zhZWzFN83IHWjmIgIDJR3snmVMYP9g8PLFirYuN0hE-dQ5Uj0e3C7ysMLIH9hvOATKoMC10DaFUMCqO_R_XfeRaVBEfsoyIEyjr5hckVXP7VaZH0qdB54apEWQksAzIJNOBnmozu-c2gEsUwZnjTsfk-CQkmbGeHpGZj9GpQjdbHUP6BKQNq8j0UHnk24ScCxwka4XZD5pTkHslyK4hs_wvOCjzh-XtTg90DJCQ0SgArIV4GmSZjkouJLNF-W1CrDGo_vp2WWFhKVDdTqa1RjP-HMcyBfjz2wFwuIRkvr1JgOdk_kcDqCgmPObill-tt8K95pgJd3YJc1AJ-cIRX0x7vMjUZ5itB3ITE0aVs7MDqrsxgyYR4Lu7r-36fGmguWZ1O3DjkYjjCDoTuBoJDla5z5QkVu3kzvn8kTAIwK1sjVgfuvAUZ9zcXKBybWXJ5sGIR08a8bc75OgYDhHxGPU0yq7lfxj4Ky9U3m0e99GepBpdDz_jgsNblaCWQiaS8VGGDKs4AnpNVA6zSsOB-_8xyUcmmU5ZUDhOBA4daQq2_JPwKRPHc5QB2lO1Qjm5ZyjuEQPiZCgdzIo2dLbpKjDxUcFAMaGQ2Zc6PIIKnea1CqCIkKurIAtNBjAlhE6Fa2vKxiOgxa20LgV3ivMB8N2jeCrZ-j1oX3Io5fGjBJCPDc0NqNJhrpnkm6R26TEIXpKUwaGe5hrFmzSnR5yyp2zlzrupOHdy0qRsyOuzoJ9n3L5Ugf5Cg1KmD_iFcnJ1oHAqCcwUB2lXmLwaxMAJc8est1pKaN_Z1K0wvCB3IQeI1BpoXJco27XdgexXUI_enKsLIqe7XET6iY8YsSLuDEadG6WUu0PSLWqp_gNxqYCsWEoACjQCzFekAIwVUHyMkQcER2Q_auRWXKajQCVgFqZULNlyEIHGQBvIe2k0cC_xpw7RF1q-6edJoSrC22NumQeWzK-FD0IbFOCjHiMUJW9xWMOZ70xGU7dyZAHCbdIwvXS000QubFuVRt_tmLuXi-RIEEVBBFcdzaDCOSCfYXFANZ65nwl70hzpNdH6FFS2KucI-BqoKlD39S4LoUl0Akr7eNE1oLDOxVIoBB-YBZ317LBhCYYA9JpvdpUEsqqoCds49eN1gX7aMlPo4SEYDd71PgidTadOepbZMgpl2KWoz0b-aHnavI0SXNdk7smwilR7QWgWxVRkrra2LBy47rGD8l36xQQEfc5FiwVmtCvgFRCo1PSqHaTSGr9bAUTM4rMmqhA5WLOE-K6MYnCQjsxrKS6bja9iXLKLA2zmPmEIKaspavJnTPrsmc-nBowC3Pi-9SlVAtxK0VOhTUekPaGKDWC-6_4CEQX2LxI-7qFBoMhGwVnmfyfdmXpUeETmMEcibblI9QNQMJPpRBAsaDjfRRzF6GdKNQxtsB5-WWn09aSLY3k14KN6_QZGEKfFCXc82mUFlnkG7jQZO51a7VvNp7adw8EakQpxsKoTqwEvW1U18eS7jAXRDzzuDsroEEQBkGUpzQwrgCdmGe4yRbJdopBRV4YuRE0a3QRK_9umwk-mlP3UL1eXY3HNesu-o6NwNpWkJ2SJeY79bR1v-ZI3K_p3L9dUz-Kobags6NXYzFHD7JW1y9P4Gfhxmic83Y2P5efRZzBPY1fOJk4mYFYrhspupoZQm_K8JCq_6Ma__Z-TZakse9mIUkMqGGlJ3a7dkjKYce8LM86CFzYu-WUdY6-OSfAR14LkFmGgyHzNtGFqwAb9qpDmWQUo-UHWBOD2HPyCy_PfTdxA9eEVVh5kOYY7JvGqPRpOAchCj-XaV-kldloeY_3T0tUfCYPvCzM8yTytepuZSre92TtkWZYCZflXIIEpHl_WVkbBK8VpY6_RDczELmSsGjgNB20InzDYGgJM0ACDOiWrgrQK9o-IDTNCi9M8iglTO-Zld64DZ95PDcRTqSUiOrnvM4li8FT-8iZKhKe56mb-4UJgbQyGm0_657piNyxUhtg2aQRpTZEvC_cclJfzhGKghaW-GLDoUc8LnqtoYeilZEeKG6benqD5hmIZhEAJVUoEOdgPnaokVbhUfeVTLu5FyOILS0r4Js9OwmHrkjcKEJFSksMk025h8R4mAq5bufXbPqG7Va0sFmuKM6t102GLHSHuPPXyLO8Nde2ZtFPZ1nguhHY5Lkfa73F5Hd263dIcqYEhbRnTEEMaCvD6Ubu00B7wlMx7hJHxqo1udRdBOiDrEswkzBYBQ1oLiN7VFArhpGqhEsRGDBeyXSUIX7QMyrxNYahwDT5QoQgybc6dAo06OoaFOhSjEp6o7ox9kgEMIk85ga8sCLVrDxUfZfK_kmkK4dkOQcxggIfLBxcBxw-OpFUit-pWGRjFuN-yEvhTzumIbaQaeS257gVfhAEccKi1IqINmmr2zPOvpxTcYyQPZAFnYyIdbb0l_njlJ0EaepxEnMaGco2Kav2LuyZbwot4E5oZ_mp8RiyT08tz8YGJx6iNQT0HSC9WVmhh4AqL8NlZWUz9VkEvgd2YJCGqa_hCCvXdStgfLdEVeU1jFxeRGEO2ohWEazcVdXxwYmnzoygcckdDCAV5qFZVuEP0j6bBZeuLgWFSZZ-o5w3MNNb0nQET6YizwU2TIi77meERm-FV_Za-RSFo7lC3V0403RnIhjorDe1KecxjQuXaeKzEmUt_Kk3A9bA-9zN0pi5hV5sKynW8oPsne2K4XEXMqxc5P6gZtOKDCEVYS4BVxPKfD_UXPpQNqD9Fxa0rxwpI_QgokLcef9WXFubvRI8iWkU-C4oRyYgzCTkajfK_pm2Gi_t96aFNM5cj2ZuZsI5rExcsyt7p9hW6JdF1_502eNXyoPYywvmMy80fiWTgasXZLfUWh1cGrh-RrwsjUwqjsm21ZPcP41WmAo9Xigvzdy8SPwi94yubvJrzSVyeyfOIuQohpzzCbkpMcgCkSQOLBiV2DvZojZ3nik_5o-e3qOu7e-_e_Xm2b98_eLq2as3L3_37Pmbq9ffv3iOfQGrEYND8YI4O8gaNGmn5Uz4fsEceKucrv-CaBXBpBlhpz7ot1GdvXr547Pn_3b17Nsvr758-fr519-9_uGVnNiDVOBfcEHXFBZB1_P9siKiSIlwcNz_fn0ZElllRXgyuh9elcA-F-yvXaFEKNv7FSjZqv7BrGaILLCDb6q3GqqWcJBwb96-PRHpF_CdSOw6effuYX639AJtGvma1mUu9w9zJnxLEhiTaRyNmJwFK2AemdMlkSmgpgtDEANayStTyWibJr_VUNSZRUXX5LndT_hqa2clRQWGciYXQy3wTydgT-EyIVfvPP5rk-CkeaFWALUD6O_GTqfDpO2tk-hBs8zyPEtIFJMwS4KYhkFY-JmerZ0db2eG2xnzP_090-P2twrorHrd14X_y_q0-cfuEHiaiwICUK5SL8sISQsQncwnBfFCSjg63Qs_yorCZ74bkjgkaUTzJM85SN2o4H6cC-V7w5TuXxXgeRdhcuGma64K8FOgGRjJcFXAcFXAcFXAcFXAcFXAf8yrApI4L0Lm53kSbHlVgL_dVQEvW5lAbvEtC2_f-U4A596VAKsw2h53AuiwjQ5EOPBOAEdeCYDOtOFOgOFOgOFOgDUZoWEYRHGSF4m77Z0A_nAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwN_onQBWgqjJnV5JON0-D9vK3jy4LSv3b7uc7jVCpTfPfIu2HgzKyqQ5rCErncM09Fyk4NtRA5YPY6cJW-kbhzb_YOhWEsKhbWtVS6-vCeZ_8nFbwcem7a-6uB0rkXjXtbaijvdu9yGhmWBJ06iMunOEZ10F2-06WitWcv-G5WUFdrNWqOD-zT4kNQPOm1YFOF82oDYLNU1oqfCHhdTvtCAWUP8kfazZSg1hf5wOLNeo6eAb6bpZ9Y_uujaWJ_SAlh9e12G8e0_ZrOXMecpmLWPGIu0arFlQ8xa7LqllzOzYmtYWVVNWQrhpyrTQgat4p4h0rB2YMd638iYlfNuRPJIzrls2qck7tNybu6zlgUlU3rbpQzKZd72-pn8kh-Su9p5Mndm39UgOSf3rUQWslLRdaGrbnDU9Y5OgtgcV7JzB1qc8m_S0Hdd-v_y1nrW3ss62HcohaWl9VoDJvNpxUZ4sNUsNxcrD2npRDkjU6lkUKwthl5Hsm6bQMxIr6H_r03NAVkCvuahD3ncUQVvFxBtrWQfA78Eudo6Q7yMCE8j9lCdjY6R3z8mwwp23p8f946H75JcJ8duBCraIAdQasQn427aDXSMCtaVmwv-27eqQ-MAeRdMK3dt2JL2xfZpuTCDfDjPcM9JPMwoT1rdtp4fE_fVpzSZobtuR7BtVp7q0QuiehGk8FmPXwzSs-LkdjuoWAXZaXptouieZ66Phdj2TtWLEth3LIUFkfd4IE6-1w7LvG9ClbS0TE7Btr4cEDfQdOgPhPwlVPI7x9-nZBqTfaVn2RPH7nBwGSX-SZdkRatdMweDqWw_jYOC9j1oM2rq95Nsfju3zXhu4dQdZuTce26cNGMB1-zXZDZHVHi4Dv24_6f3x2Z5JWzDs1lrDATjtyVaXYlvQ3cabqF9xac0tF120nQj2EqnyQISIvyo_yalaDUkQMiCNdHbgJpjvqP1akOBR-93m8vGP0a-FNh61XwucPGq_Fmp51H4tRPO4-2vQzqP2ayGhx11ng5Qed50NmHrUfi2s9aj9WmDscffXwLXHlQsGwj0yXWlk97j82QC-x52vgYOPK38NXnxceWQA5eOeI4M4H7VfC5s-ar8WkP1An_6Y22tQ66N2ayDtY3Zrwd3H7PZhtZzjdGuA7GN2a4HWR52tAbGP2a2FWB_33Gp0-pjdWlD0Mbu1YOdjdmthzMfs1gKUj7q3Bj0-KrswaPJR99ZAx0dlFwYmPi5z1JjwMbu1kOJjdmuhxkflyQYiPipJGQT5qOzCYMhHXWQDGB-zWws0Pq4E0gDxUeWtgY2Pem4NQnxULmXg4KMaIwYPPuoBMuDvUbs1MO8xu7Uw3aOeW4PhHnWRDVR7VEo2uOxRZ2tA2GN2awGyR7UKDPr60btdV3IXkyHkXedFUVIRdbMC5sq3R0W5aORt3Zw0GMeItxVTUu1UbjfzSeHStPBgg2kSUEoozxh1N5Xb1dVVHy-3O6R6DqmeQ6rnkOo5pHoOqZ5DqueQ6jmkeg6pnkOq55DqOaR6DqmeQ6rnkOo5pHoOqZ5DqueQ6jmkeg6pnkOq55DqOaR6DqmeQ6rn8VM97yGCwDayPM8SEsUkzJIALNMgLHx0l6BGLW631T7ECz841WO8CN1fThXkaGOF2ItUS7EPo_arj1cdl1ODmF5xPyu8FBQKNw9TQjwGmlVQUFQUm7por6xL3MUbTe5dpH7mhRlP8zgvwsyNwsBnSZH7UeLyNCGBF_MsC1yaxV5CvCD1WMJSkuR-nkRJkbnbThCfOPFdPx65yciP33jeRZRceOFvXffCxVbMCiQRc4MiC07sdfnpKa7uleVjBd6qbs0uvJjEYRpRoYXJC6U5TRIvtwp2fD4H9REU3X-6PKEc63ldnnyB0uTzcnbtNAsK35Om4W1zPq2v67Pm5hr4GZm28L1lbuJv8P1tydoJ_JKm8MeEl9eTtvsL2vz8fP5F7z3ucQF7EGeurnEF88yyjNsV85wVjLenWl7ik4jwIufENdWDNf78sCbmtSifa5cqcuxKRUTWXhSHXN17L7i8LNredCWjVQlSYPh4imQ5y99bBQ97LgAPSFD4bpaDJNDXrVswt1XcCdoTDc95Pe_qyAuHSleakD8sQqTrUysTDW_dpp0v6FZUdzLVHbuKHA3FK59FXUhxUT06drGO5YzzVpY5lvELM1iLvgv6C8ZSmgLZZokpEK0Rd3NBf68rXddVdN00d_3Qi_VN8Bbk3jX2SlZGapSjNDjFPZDj_RbBCC_9bU-pB8pCOP15kBCqq2wluQcckD6sWYS3-itH9GiEZTtHjN9YOkq_w3o06tjAzn7tx0qF-WEUA4dISaErF1oxBWoSouGxmkFj6lw6oObN264YQVfpaGxVhj4HTbgsQNaKymjjM-cHrO4y1kMUSsD41BlTIfrHorbpGPoYC8tC-W1NNe3unvEeSmIRS0Ie8JhxX9flMtENVhm8Phh_M3ERPwPLwc2oT0zJFRPeoIhrKWosNboeVCPLZ2jWAbOzOQeygz5i8zmoHYT5ua87teIediiSvd7T_Fer3ScrLWmX0BGq48VpGAaJz6M01QLPCvOwKnl1K2Y5yqXrTA1WT7rzX3VVviYlaHumQBrWElAMf8uKeNJ8bKSFvUbYXFZ71MVz0yAPcx7FYaCPuhWCYs7F-lCRzQciykDLABU3Jolm3VYMiioIwTvZouvNyQV5I4pB03JeyopRXUGXClQW5w4WawWz6UoFnF5WWLZduLpktZKeowPGgRtFQUjzWNerIAWoRkFBti3JU2Hl4Habg1DORAW8LZ4EZWiXmo5BBGwnKfyCeKbstI7JsaoNbghy2bx_QZyA3p4AvzR1cK2onK7pn51XYJRw52dZd1wpND9fVj-PRiPxH3xUvf8s9lVAj7YLYCbr_8gq77reOnJIWXUOWNJSFGUS9Stk6853pixJ166aVuefl7A3HpHOelWq18_rIoQUWUSpD6LPD3iiOaoVNKTIYkP9nE776RDulVI62tyWsTMrRZFAfHNZZlvqSrISuq7bk8tKI9KrZsklMVd46QZ0cCzm3Vf31nVDFiVJGtItqsf3Bvz0UAxIP5YnDIwEd79S8qaC_Iba8YLTCaUSVuay6irH68LBm-rES4zwuSzMij6NruS7Y1V8v6y6ku9a7X2k5DsN46TwSMFdwj5GyfeuUHI3O6zwDhLjYRl4p78K_GvO5ezezjv4SJHTo_VpBL2tUPICnUJ9ShawHhIlPAWlva_4qbMp3KlHnOSMFCGYdPDv5mKnmwqYnjm_w_jmU1Ezc30NU1XB1K5ciqUtBeMWIlfV1exI8h-igKkfsKCgkcui1N1cwFRWDSWqOiksjqg52lXClAwLgwNEdSZR6NtUPnSG6qAfuzqoR-MQLDUCzDbZXB30Ndj0I83cNBRzv6jnmfOdNK6kSmqKdUrZBkOxi21-ZnYay1gLN-K9Kp59RZmzIPSSxE8fq79nRx5u5hFFlNAk9X1GOe0rwPf2dyVY2sAuUXPR4lQ5WRmf1e8-4R8IMj2Q8t3vo-53yw2KpfTefrniL52R-QNvqXjshalftktBMvHu96ucG0joUd4t3ntm2-LwTudmNyO770keCpD9gxQgWxtzu64twthxYm8pqAReEcd7jOjNpKzeO8_9758JjcTYt6hSX1ga8akyybqQUqDCp72MslYJWjAFKnyli2XTjqbkTlSPbfk16utCcRdFKXe9ePJ5DZYAVR6PBw2iuqLZlQnVkWbNY9cSqXXtmw5wsuVUbPTI3lZHHnRhv87gubNNO7tFV2IbCehl9XVXy5V_mIOYwzr0YjG1tUNBfyXtprQ2VUdWuIZaLEh6jXV5HyzZ7QStJAyDRuMLn5bsRc9ZOMCtHLidEt7A7k58sL4jz0vhYxHlHISXqNG9NuFNQzh_vwlvA2vZzFq2T4fU2KAc04V_aqOEv6yH_Y4CfGZ56BMauGGY-fCfGxAvpkXux0URuGB8FZQWseuCxp7FYZxlcZrHnEepF6IuJ9t-bHIPQE__wg0vvGgN6ElZ7KVekA-g50cGPTlFRkZy7vaBnr_5DXraBKd2pNjDcwNSoy3n8u9nL89-85uecsxpwOOCBXlIos1A5b3chcqp57w6lZbXqJIB4V3R9gdA6opr_LJaAWKVQ3wzxIp-OZk0o71Syvkk2xKR8Fv4m5y2lD49lDnITnrsoKjIaJ4ACwu5Kd9s-Gy3KIewT0u094IBWZgQF8ynWB8Ai7tqEGR_pokQAlgks7IVOHKnu8B2yDBqoZvhI6J19DvBkPNyWrbo5odDhz47ob83k3IunF3KOXVZdQG2A5w8wMkDnDzAyQOcPMDJA5w8wMkDnDzAyQOcPMDJA5w8wMkDnDzAyQOcPMDJf6NwchKFPlAv3wPJePuf3qL7p1N53n2irlgpZ9dnzaTkU9aclfU5PHN-Y6ma6J7-9CnQnk3I0XrA1ZroeszwmUiNg9GeOs9fSk0MmRfoYkJnWzaY5Pu-ETpFZ8IvxAkWbpt-JHQN7ir2gmnBU1cK6pSp9MZ5KrRq0F_w6GxAJgmr561-CPNahb8BSAcYjmoeBPD1UucoLxdAlGhoVKCZoXY_J_S9-jVfllPWzXoncDKmzAviiJI8pZHH8yTnRZrxdBM4qaGWx8HJf0xC3R7cvY9weTbC5f2yHsA6CnwX0jRnCYkT1-UhzWhRBGkUcC_zEi_ywjDwsoT5KU94ErokZV6ecphCCjY-DbMi2WZya-A7L1sP37muTzlx-QDffWT4Lg9DEuR-FsncU6n0mlPaNXfI4TNP397ensEjf2jEzV0dr7IeB3UBOnr-0ryxzUVfzXl3kfG5ujijOafl2d1seo53sPF7gzisSTnEr6VIuXCewSQmfOSfuRvXRIzhvBNCo-4FfGOUT5dqcF-_fP7i29cvPt287QPM-teDWVmSRjEo8xEP_I8Fs2rdYABZB5B1AFkHkHUAWQeQdQBZB5B1AFkHkHUAWQeQdQBZB5B1AFkHkHUAWQeQ9e8QZF1IkBVdrR8TaG34tLhCP_zi6VHWncusVctZznFR3749CfDW3uDM82Bx3p542Ijvn7x799cpRGZZP3sX9XrQqCXtDihQ9LAwhZEOT9nsoZWK1gPUFo30ZOtKFauTGwsQ-dJo0YB0B_bifoBSQsqFuJxa1Fmk8g7bs02kcsReLSI6Yq8WlR2xV4sIjzlXQ6Mfu9d1EQl0r6a1t2q1j51CEJI4izOwtpKQ8jT1QGvN8szzNxYE1XDx4yEIAxcfuPgKF98--mXNxczxL-ujFo4TsxEWiR8HOYOTEmRxypgbc0LiLIGT4_uhW7i5F5MsTqIC9GVWkIJEDFPLgyiLC3_zlB5EagQXbrI-UiMtCsLcMB4iNYZIjSFSY4jUGCI1hkiNXSI1fPRcxcQtvDzZIVIDdLDf3o_W8P0hWmOI1vibiNZw_SQmKejnru89Gq3RRyK9MRt9L66L3OilxSPEb_T1P0RxDFEcvVEccRL4QQZGZJb4j0Zx9FHa2liO3hfWRHT0PT_EdQxxHUNcxxDXMcR1_APEdUQBSxiYI26UF4_GdfRJhf8Q0R2Fm8Zgg7upSx6N7thBe7WiIx5d4r9ipMcO-u0Q77FbvEfCCzClgH9kRtsf4j164j3EU89xLCJGorp-98nz77598-rlv_zw5uW3vxfC4f_8b3hEiGVQWeH3r559-_sXX3-nfsTT8fY1zG1RtiBqXr94_sOrl2_-zbyKxg96meoKr3nGDr58cfXd766goy9_eP5myO1_gqgTS3O1EK71lsBeOfVWB5tB5ikR3Ev4iB-W-5Umg-AQYEkoh3JzV9GuBiS8hYns6iptrYygIQYq3gh0cfUW6KvqZu8NsHTDcTr28VZGiNC9hLAX_L6e40aB-qD6Blpdo9XLjnfCpwvXBc4Thzzy_DwP0iiMwM6K0ocrJhzj-qpye2VQMee8S3NXQLZG0x4Hsp-WMLYH4NdAhquZ6wYRPAoKGnHqZT5PEliOCIyjMPNCj_lJFBcFC3juRn4aJUHgJqlfZBGoSGEW-BlJch5EvudvntIDFDS8CPyLcF2NXc8rXEbjocbugIIOKOiAgg4o6ICCDijogIIOKOiAgg4o6ICCDijogIIeGQXlJC6SMASbMPE-Lgr6vebEOOYGqF7QPONzPCQgP8r2AtspF3qdBEbKN6OkqHjbfOaZ03Iyk8o5mTa1c0vQbQ3qMLp2-L1RSk1-hkbFYole7V6Of1fRsfbQTO8-E_aB2roxmF-w6s1kbCG9-Lfk8NJ9hRxzAG4H4HYAbgfgdgBuB-B2AG4H4PYfEbh998v_B4IL3CY)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<title>Proofpress — on dark</title>
|
|
3
|
+
<desc>A light document outline with a teal proof point, for dark backgrounds.</desc>
|
|
4
|
+
<rect x="7" y="4" width="28" height="36" stroke="#F0EEE8" stroke-width="3"/>
|
|
5
|
+
<circle cx="35" cy="36" r="9" fill="#4AAEC2"/>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<title>Proofpress — on light</title>
|
|
3
|
+
<desc>A dark document outline with a teal proof point, for light backgrounds.</desc>
|
|
4
|
+
<rect x="7" y="4" width="28" height="36" stroke="#101013" stroke-width="3"/>
|
|
5
|
+
<circle cx="35" cy="36" r="9" fill="#2E8FA3"/>
|
|
6
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "proofpress",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "The trust layer for multiplayer AI: an open, agent-native ledger for knowledge artifacts",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"bin": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"prepublishOnly": "npm test && npm run pack:check"
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
23
|
+
"node": ">=22"
|
|
24
24
|
},
|
|
25
25
|
"keywords": [
|
|
26
26
|
"provenance",
|
|
@@ -36,5 +36,9 @@
|
|
|
36
36
|
"homepage": "https://github.com/chenmingtang830/proofpress#readme",
|
|
37
37
|
"bugs": {
|
|
38
38
|
"url": "https://github.com/chenmingtang830/proofpress/issues"
|
|
39
|
+
},
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public",
|
|
42
|
+
"provenance": true
|
|
39
43
|
}
|
|
40
44
|
}
|