@open-charging-cloud/wwcp-poi 0.1.0 → 0.1.1
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/CHANGELOG.md +155 -1
- package/README.md +70 -8
- package/dist/common.d.ts +9 -0
- package/dist/common.d.ts.map +1 -1
- package/dist/history/apply.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1671 -198
- package/dist/index.js.map +1 -1
- package/dist/keys.d.ts.map +1 -1
- package/dist/network/certificates.d.ts +6 -4
- package/dist/network/certificates.d.ts.map +1 -1
- package/dist/network/evTaler.d.ts +13 -0
- package/dist/network/evTaler.d.ts.map +1 -1
- package/dist/network/identifications.d.ts +15 -2
- package/dist/network/identifications.d.ts.map +1 -1
- package/dist/network/partyKeys.d.ts.map +1 -1
- package/dist/network/roamingNetwork.d.ts +9 -0
- package/dist/network/roamingNetwork.d.ts.map +1 -1
- package/dist/network/versionTexts.d.ts +3 -2
- package/dist/network/versionTexts.d.ts.map +1 -1
- package/dist/network/writtenForm.d.ts +24 -0
- package/dist/network/writtenForm.d.ts.map +1 -0
- package/dist/proofs/keyStatement.d.ts +6 -1
- package/dist/proofs/keyStatement.d.ts.map +1 -1
- package/dist/proofs/signingKeyCertificate.d.ts +5 -0
- package/dist/proofs/signingKeyCertificate.d.ts.map +1 -1
- package/dist/proofs/stationProof.d.ts +3 -2
- package/dist/proofs/stationProof.d.ts.map +1 -1
- package/dist/proofs/trustContext.d.ts +50 -0
- package/dist/proofs/trustContext.d.ts.map +1 -0
- package/dist/verifier/chargingStation.d.ts +2 -1
- package/dist/verifier/chargingStation.d.ts.map +1 -1
- package/dist/verifier/trust.d.ts +3 -2
- package/dist/verifier/trust.d.ts.map +1 -1
- package/dist/verifier/version.d.ts +2 -1
- package/dist/verifier/version.d.ts.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,160 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.1.1 (2026-10-31)
|
|
6
|
+
|
|
7
|
+
`TrustContext`, for apps that import a trust anchor before they trust its keys. `TrustContext.evaluate` checks a key
|
|
8
|
+
statement against the identity keys of a trust anchor the app trusts locally and reports its signatures, signers, quorum
|
|
9
|
+
and validity apart (`TrustEvaluation`); a context only when all of them hold, `TrustContext.create` throws otherwise.
|
|
10
|
+
The context keeps the holders of the trust anchor and its quorum, and binds the roaming network, its operator, the
|
|
11
|
+
signed key statement and the time of the evaluation. `OperatorTrust.of` and `fromOperatorJSON`, `verifyVersion`,
|
|
12
|
+
`verifyChargingStation`, `ChargingStationProof.verify` and `verifyCheckpoint` take it in place of a trust anchor; given
|
|
13
|
+
a trust anchor, they verify as before. The app keeps storing and showing its decisions and creates a context from its
|
|
14
|
+
current decisions for every verification. Tested with genuine signatures, the proofs of the conformance tests and in
|
|
15
|
+
Chromium.
|
|
16
|
+
|
|
17
|
+
S31 and S32 of WWCP_POI `d6b0127`. A release keeps its version: a new version is a new release, so that a
|
|
18
|
+
certificate naming a release names the version that was assessed. A change set updating or removing the `version` of a
|
|
19
|
+
transparency software release is refused, and so is one removing a release and adding it again with another version,
|
|
20
|
+
after its last change (`ChangedTransparencySoftwareVersion`; versions compared trimmed and without case, as
|
|
21
|
+
`TransparencySoftwareVersion` compares them). The `notifiedBodyNumber` and `notifiedFor` of a conformity assessment
|
|
22
|
+
body are the roaming network operator's, which vets the body, also once the body has keys: a body issuing a
|
|
23
|
+
certificate under a legislation the same change set adds to its `notifiedFor` signs it together with the operator. A
|
|
24
|
+
number names one body, in every version and after every change set (`DuplicateNotifiedBodyNumber`).
|
|
25
|
+
`tests/releasesAndBodies.test.ts`, after `A_release_keeps_its_version` and
|
|
26
|
+
`The_roaming_network_operator_says_what_a_body_is_notified_for`.
|
|
27
|
+
|
|
28
|
+
A conformity assessment body is refused as its constructor in WWCP_POI refuses it, in its words and order: a
|
|
29
|
+
`notifiedBodyNumber` not of four digits (nothing after them, also no line feed, since WWCP_POI `f53d220`), a legislation
|
|
30
|
+
of `notifiedFor` empty or given twice (with case), a certificate issued under a legislation it is not notified for
|
|
31
|
+
(exactly as written, its certificates in the ordinal order of their identifications), each wrapped as WWCP_POI wraps it,
|
|
32
|
+
e.g. "The given JSON representation of a conformity assessment body is invalid: The certificate 'PTB-2026-0042' is issued
|
|
33
|
+
under the legislation 'CRA', which the conformity assessment body 'PTB' is not notified for! (Parameter 'Certificates')";
|
|
34
|
+
before them a `notifiedBodyNumber` that is no text and a `notifiedFor` that is no array of texts. A version is refused
|
|
35
|
+
for what WWCP_POI refuses of an entity as it reads it before what it refuses of the network made of them, the
|
|
36
|
+
identifications unique within the network last. Checked against WWCP_POI3 itself, on 33 versions of QA: the same, but
|
|
37
|
+
for two refusals of one body at once, a key and its number. In a change set WWCP_POI names the change ("Change 0: …"),
|
|
38
|
+
this library refuses the version it leads to.
|
|
39
|
+
|
|
40
|
+
The four vectors of WWCPPOIConformanceTests `d4a4928` vendored, `poi-refusals.json` of 93 vectors: a key of a party
|
|
41
|
+
whose `notAfter` is written with an offset, as a date only or as null, and one whose key is another CBOR of the same
|
|
42
|
+
COSE key. WWCP_POI refuses them too since `a425530` (D13 there, SPECIFICATION.md 2, Written forms), as this library did;
|
|
43
|
+
the key not in deterministic CBOR now in its words: "Invalid COSE key: Invalid deterministic CBOR: the key of the public
|
|
44
|
+
key '…' is not written as the deterministic CBOR of its COSE key!"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
The four vectors of WWCPPOIConformanceTests `ad7c73e` vendored, `poi-refusals.json` of 97 vectors: a conformity
|
|
48
|
+
assessment body as its constructor in WWCP_POI checks it, a certificate issued under a legislation it is not notified
|
|
49
|
+
for, a notified body number of three digits, a legislation notified for empty, one given twice (D14 there, found against
|
|
50
|
+
`1f914ac`, fixed by `4ff1fc2` here).
|
|
51
|
+
|
|
52
|
+
The legislations a conformity assessment body is notified for are refused unless written in their ordinal order, as
|
|
53
|
+
WWCP_POI writes them (Achim's decision of 2026-10-29, as D13 decided it for keys): WWCP_POI takes another order and
|
|
54
|
+
writes it sorted, which written again would be another text than the one hashed. Refused as the body is read, before
|
|
55
|
+
what its constructor checks, in the words of this library: "The legislations the conformity assessment body 'PTB' is
|
|
56
|
+
notified for are written in their ordinal order!"
|
|
57
|
+
|
|
58
|
+
The four vectors of WWCPPOIConformanceTests `012ce9d` vendored, `poi-refusals.json` of 101 vectors: a conformity
|
|
59
|
+
assessment body as the content holds it, notified for legislations out of their ordinal order, with a notified body
|
|
60
|
+
number that is no text, with a notifiedFor that is no array of texts, and with the number of another body. WWCP_POI
|
|
61
|
+
refuses the order since `8108522`, in the words of this library.
|
|
62
|
+
|
|
63
|
+
WWCP_POI `f53d220`: its regular expressions end with `\z`, no longer with `$`, which in .NET matched before a last line
|
|
64
|
+
feed as well. A notified body number "0102" with a line feed is refused, which this library had taken as WWCP_POI took
|
|
65
|
+
it; a certificate timestamp with a line feed after its offset was refused here already, as every check of this library
|
|
66
|
+
ends at the end of its text.
|
|
67
|
+
|
|
68
|
+
The content as WWCP_POI writes it (SPECIFICATION.md 2, Written forms): what WWCP_POI takes of a version and writes otherwise
|
|
69
|
+
is refused, as written again it would be another text than the one hashed (Achim's decision of 2026-10-29, as D13
|
|
70
|
+
decided it for keys and 9decdb5 for the legislations a body is notified for). Of every entity, `notWrittenAsHeld`, as a
|
|
71
|
+
version is read, after everything WWCP_POI refuses of it, so that its words come first: what the content orders
|
|
72
|
+
(its ordered lists, `POIJSON.OrderedIds`, entities, keys, exchanges) out of its ordinal order, the texts of an ordered list
|
|
73
|
+
untrimmed, a list WWCP_POI writes only with an element given empty (about ninety; not the versions, releases and energy
|
|
74
|
+
meters of a certificate, the elements of a price, the exchanges of a merchant, the identity keys of a key statement), a
|
|
75
|
+
property given as null, an embedded object naming a JSON-LD context, a text in languages not naming each language as
|
|
76
|
+
Styx writes it, in lower case, with a text, a timestamp not UTC to the millisecond; custom data held as given. Of a key of
|
|
77
|
+
a party, a property WWCP_POI does not read; of an EV Taler merchant and its exchanges, such a property, a base URL not as
|
|
78
|
+
Hermod writes it, trimmed and with its scheme, and a currency not by its code. In the words of this library, e.g.
|
|
79
|
+
"'chargingStationOperators[0].chargingPools[1].paymentOptions' is not written as the content holds it: its elements are in the
|
|
80
|
+
order the content holds them in!". The new values of a change set are checked by the same rules (`asGiven`), as
|
|
81
|
+
WWCP_POI refuses a new value the content holds otherwise, "e.g. an empty array written as none". Found by probing
|
|
82
|
+
WWCP_POI3 at 8108522 with 201 versions of QA: of the 20 it takes and writes otherwise this library took all, and
|
|
83
|
+
refuses all now; every one it takes as given is taken, every one it refuses refused, and every version of the frozen run
|
|
84
|
+
is written as the content holds it. `tests/writtenForm.test.ts`.
|
|
85
|
+
|
|
86
|
+
What the constructor of the roaming network refuses, of a version, in the words of WWCP_POI: as an argument of its
|
|
87
|
+
parameter, which its TryParse names, e.g. "The given JSON representation of a roaming network is invalid: The notified
|
|
88
|
+
body number '0102' of the conformity assessment body 'PTB' is the one of the conformity assessment body 'BSI' already!
|
|
89
|
+
(Parameter 'ConformityAssessmentBodies')", in its order (the groups of providers and the offers before the releases): the
|
|
90
|
+
identifications unique within the network, and the key statement and the certificates of the roaming network operator
|
|
91
|
+
(`KeyStatementError`, 'Operator'), its key statement of another network now before its certificates. After the last change
|
|
92
|
+
of a change set they are named bare, in the order WWCP_POI checks them there (`RoamingNetwork.afterChangeSet`). The
|
|
93
|
+
golden vectors held the inner words only. Checked against WWCP_POI3 at 8108522 on 10 versions of QA.
|
|
94
|
+
|
|
95
|
+
The roaming network operator, its key statement and the certificates of its signing keys in the words and order of
|
|
96
|
+
WWCP_POI3 (the TryParse of `RoamingNetworkOperator`, `RoamingNetworkKeyStatement` and
|
|
97
|
+
`RoamingNetworkSigningKeyCertificate`), e.g. "A key statement requires its minConsensus, a whole number from 1 to 255!",
|
|
98
|
+
"Invalid key in the identityKeys of a key statement!", "A signing key certificate requires the signingKey it certifies!";
|
|
99
|
+
what this library refuses besides (properties it does not know, identity keys out of their order) after them. What the
|
|
100
|
+
constructor of the operator refuses as an argument of it, "The given JSON representation of a roaming network operator is
|
|
101
|
+
invalid: …": a certificate by the same identity key given twice, which this library took, a signing key certified in two
|
|
102
|
+
forms, a key both a signing and an identity key, a quorum its keys do not have; the holder of a key as it names it ("the
|
|
103
|
+
holder 'BetaOrg'"). The tree hash algorithms of a roaming network as `POITreeHashAlgorithms` names them, four refusals for
|
|
104
|
+
the one of this library. An entity without its identification as Styx refuses it, "Missing JSON property '@id'!", which
|
|
105
|
+
this library took but of the roaming network and its operator (`invalidIdentification`, first of all), and one of another
|
|
106
|
+
JSON type in the words of the kinds WWCP_POI3 refuses it of ("Invalid 'charging pool identification'!"). Certificates and
|
|
107
|
+
the versions of stations, meters, their templates and models without the prefix this library gave them ("The certificate
|
|
108
|
+
'…': "), as WWCP_POI3 names them, with the parameter its constructor names ("(Parameter 'Versions')", 'HardwareRevisions',
|
|
109
|
+
'FirmwareVersions', 'Legislation', 'NotBefore', 'EnergyMeters'), a version twice in a model as an argument of the model; a
|
|
110
|
+
certificate without its identification, of a certified meter a model of another JSON type, in its words.
|
|
111
|
+
|
|
112
|
+
Of the written form also, as WWCP_POI3 takes and writes it otherwise: an entity without its lastChange, which it writes as
|
|
113
|
+
its created; a party without its name, which it makes up of its kind and identification ("Charging Station Manufacturer
|
|
114
|
+
'GraphDefined'"); a text in languages without a language, but the name of a charging station operator, which it writes
|
|
115
|
+
so; the releases of a certificate and the URLs of an open source license left out, which it writes also empty; the energy
|
|
116
|
+
meters of a certificate given empty; an identification and the type of a charging connector given as a number.
|
|
117
|
+
|
|
118
|
+
Probed against WWCP_POI3 at 8108522 with 617 versions of QA, of every kind of object a property it does not read, every
|
|
119
|
+
property of it removed and given in another JSON type, the tree hash algorithms and the quorum of the operator, and 10
|
|
120
|
+
of certificates and models: none it takes as given is refused here; of what it refuses, this library refuses all in its
|
|
121
|
+
words but 20, of what it takes and writes otherwise all but the properties it does not read (25 kinds, which it leaves
|
|
122
|
+
out). Not ported yet: properties of another JSON type or missing that WWCP_POI3 refuses (168, in the words of every kind)
|
|
123
|
+
and the references it checks (23, of templates, tariffs, members, manufacturers, models, releases and certificates).
|
|
124
|
+
`tests/operator.test.ts`, and in `writtenForm`, `identifications` and `certificates`.
|
|
125
|
+
|
|
126
|
+
The 27 vectors of WWCPPOIConformanceTests `1c36c6d` vendored, `poi-refusals.json` of 128 vectors: versions not written as
|
|
127
|
+
the content holds them (`version-held-*`), the 20 versions WWCP_POI3 at 8108522 took and wrote otherwise and more of their
|
|
128
|
+
kinds (bodies, keys, payment options and exchanges out of their order, an untrimmed payment option, lists given empty, a
|
|
129
|
+
property given as null, embedded JSON-LD contexts, texts in languages not as Styx writes them, a timestamp with an offset,
|
|
130
|
+
properties of keys, merchants and exchanges not read, URLs and currencies not as written), ten with their eTags as
|
|
131
|
+
published, their reasons in the words of this library, which refuses them since `5c534d4`. WWCP_POI refuses them as well
|
|
132
|
+
since D15 of WWCPPOIConformanceTests, fixed there in `1c36c6d` (SPECIFICATION.md 2: a reader MUST refuse a version not
|
|
133
|
+
written so).
|
|
134
|
+
|
|
135
|
+
The written form as WWCP_POI3 refuses it since WWCP_POI `3de830a`, which writes a version again and walks both
|
|
136
|
+
(RoamingNetwork.WrittenForm.cs, FirstNotWritten): `notWritten` walks a version in that order and in those words, the
|
|
137
|
+
reasons of this library, which WWCP_POI took over, and two of its own. "the content leaves it out", of a property given
|
|
138
|
+
that WWCP_POI does not write: of every entity a property its type in WWCP_POI3 neither writes (ToJSON) nor reads
|
|
139
|
+
(PropertyKeys), drawn from it at `3de830a` for 33 kinds and checked against the 605 versions it wrote in the frozen run
|
|
140
|
+
and the probes, of a key statement, its signatures, a certificate of a signing key, a coordinate, a price component and
|
|
141
|
+
a public key of a meter as well; `dataLicenseIds`, which a version names completely (`dataLicenses`), a license it does not know
|
|
142
|
+
in its words; a text in languages without a language WWCP_POI reads. "the content holds it as '…'", of a value it writes
|
|
143
|
+
otherwise, by the path of that value: the lastChange of an entity naming none (its created), the name of a party naming
|
|
144
|
+
none (not of grid and parking operators), the lists it writes also empty, an identification given as a number, texts
|
|
145
|
+
its types write trimmed (identifications, references, currencies, versions, e-mail addresses, URLs), URLs with the
|
|
146
|
+
scheme https, the identification of a charging station operator in upper case, the role of a meter, the legal status of
|
|
147
|
+
a release and signature methods as they are named, coordinates as doubles (50.92710 as 50.9271; quantities keep their
|
|
148
|
+
decimals). Of a release and its licenses, a certificate and the meters it was issued with, a property they do not read
|
|
149
|
+
as WWCP_POI2 refuses it ("Unknown property 'x'."). The roaming network and its operator compared without case and
|
|
150
|
+
trimmed, as their types read them, also of the key statement and the certificates, signed as read. Seven cases keep the
|
|
151
|
+
words of this library, refused where it reads them, before the written form, as WWCP_POI takes them over (Achim's
|
|
152
|
+
decision of 2026-10-30): a property of a key of a party, of an EV Taler merchant or of an exchange, the merchant base URL,
|
|
153
|
+
the base URL and the currency of an exchange not as written. Probed against WWCP_POI3 at `3de830a` with 1257 versions of
|
|
154
|
+
QA: none it takes is refused here; of what it refuses as written otherwise, all in its words but those seven.
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
## 0.1.0 (2026-10-29)
|
|
4
158
|
|
|
5
159
|
The first milestone: the examples A1 to A14 of WWCP_POI (commit `33447ac`) checked in TypeScript.
|
|
6
160
|
|
package/README.md
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/OpenChargingCloud/WWCP_POI.TS/actions/workflows/ci.yml)
|
|
4
4
|
[](https://github.com/OpenChargingCloud/WWCP_POI.TS/actions/workflows/nightly.yml)
|
|
5
|
+
[](https://www.npmjs.com/package/@open-charging-cloud/wwcp-poi)
|
|
5
6
|
|
|
6
|
-
Verifies what a roaming network of [WWCP
|
|
7
|
+
Verifies what a roaming network of [WWCP/POI](https://github.com/OpenChargingCloud/WWCP_POI) publishes about its
|
|
7
8
|
charging stations and their tariffs, from the **trust anchor** of the roaming network alone: the QR code its operator
|
|
8
9
|
publishes, naming the identity keys of the operator and its quorum.
|
|
9
10
|
|
|
@@ -41,6 +42,8 @@ This repository vendors the vectors and runs them in its own suite (`tests/confo
|
|
|
41
42
|
|
|
42
43
|
## Installation
|
|
43
44
|
|
|
45
|
+
From npm, as [`@open-charging-cloud/wwcp-poi`](https://www.npmjs.com/package/@open-charging-cloud/wwcp-poi):
|
|
46
|
+
|
|
44
47
|
```bash
|
|
45
48
|
npm install @open-charging-cloud/wwcp-poi
|
|
46
49
|
```
|
|
@@ -194,10 +197,10 @@ epoch2.root.commit.id; // the published genesis of epoch 2, 128 hexadecimal d
|
|
|
194
197
|
| Canonical JSON, deterministic CBOR (Styx) | complete, including Styx's string escaping and decimals as `System.Decimal` holds them |
|
|
195
198
|
| Keys, thumbprints, signatures | EC2, OKP and AKP COSE keys, read in the words of WWCP_POI; all signature algorithms of section 4; the key usages `infrastructure`, `tariffs`, `priceStatements`, `models`, `software`, `certificates`, `payments`, `party` |
|
|
196
199
|
| Trust anchors | QR code (`WWCP/TA-2:` and Base45 of CBOR), URL and JSON forms, read and written; key statements followed by succession |
|
|
197
|
-
| Roaming networks | ETags `json`, `cbor`, `effectiveTree`; the roaming network operator, its key statement and certificates; the keys of every party and of the roaming network operator as WWCP_POI reads them, none twice, none both a signing and an identity key, no identity key naming usages; the identifications unique within the network (grid connection points, energy meters, parking entities, transparency software releases and certificates, energy meter templates and groups, groups of operators and providers, offers), each once, compared as the C# types compare them; hardware revisions, firmware versions and serial numbers as WWCP_POI reads them, not empty, no whitespace at either end, those of a model each once; certificates as WWCP_POI reads them, for exactly one model, with its versions and releases |
|
|
200
|
+
| Roaming networks | ETags `json`, `cbor`, `effectiveTree`; the roaming network operator, its key statement and certificates; the keys of every party and of the roaming network operator as WWCP_POI reads them, none twice, none both a signing and an identity key, no identity key naming usages; the identifications unique within the network (grid connection points, energy meters, parking entities, transparency software releases and certificates, energy meter templates and groups, groups of operators and providers, offers), each once, compared as the C# types compare them; hardware revisions, firmware versions and serial numbers as WWCP_POI reads them, not empty, no whitespace at either end, those of a model each once; certificates as WWCP_POI reads them, for exactly one model, with its versions and releases; the conformity assessment bodies issuing them as WWCP_POI reads them, a notified body number of four digits for one body only, the legislations they are notified for neither empty nor twice, in their ordinal order, a certificate only under one of them; the content as WWCP_POI writes it (SPECIFICATION.md 2): what it takes and writes otherwise is refused, as written again it would be another text than the one hashed (ordered lists out of their order or with untrimmed texts, lists it leaves out given empty or writes also empty left out, properties given as null, embedded objects naming a JSON-LD context, texts in languages not as Styx writes them or empty, timestamps not UTC to the millisecond, entities without their lastChange, parties without their name, identifications given as numbers, properties of keys and of EV Taler merchants and exchanges it does not read, their base URLs and currencies not as it writes them); the roaming network operator, its key statement and certificates, the tree hash algorithms and the identifications of entities in the words of WWCP_POI.; of every entity what its type in WWCP_POI3 neither writes nor reads, and values it writes otherwise (trimmed, with a scheme, in its case, coordinates as doubles), in the words of its written form since 3de830a ("the content leaves it out", "the content holds it as …"). Not yet: properties of another JSON type or missing, the formats of identifications, and the references, which WWCP_POI refuses |
|
|
198
201
|
| Effective members (9.2) | EVSEs, charging stations, charging pools, charging tariffs, energy meters. Parking spaces and energy meters of grid connection points taking templates are refused, not calculated |
|
|
199
202
|
| Proofs (8.4), attestations (8.5) | complete, with the manufacturers and models of the station and its meters, the transparency software releases and certificates of the meters; subject attestations do not count for a whole proof |
|
|
200
|
-
| Change sets (4) | `Add`, `Remove`, `UpdateProperty`, `RemoveProperty` of parties (charging station operators, e-mobility providers, grid and parking operators, charging station and energy meter manufacturers, transparency software manufacturers, conformity assessment bodies), the roaming network and its operator, of charging pools, stations, EVSEs, tariffs, templates and groups of charging station operators, energy meter templates and groups, models of manufacturers, transparency software releases and certificates, with their owners' signatures, quorum and proof of possession, and the properties a change set may change. Element changes, preconditions, offers and the entities of providers, grid and parking operators are refused, not applied. The references the C# implementation checks after every change set (a manufacturer, model, release or certificate a station, meter or certificate names) are not checked again: the `afterETags` of the change set pin the version it leads to. The identifications unique within the network are, as in every version |
|
|
203
|
+
| Change sets (4) | `Add`, `Remove`, `UpdateProperty`, `RemoveProperty` of parties (charging station operators, e-mobility providers, grid and parking operators, charging station and energy meter manufacturers, transparency software manufacturers, conformity assessment bodies), the roaming network and its operator, of charging pools, stations, EVSEs, tariffs, templates and groups of charging station operators, energy meter templates and groups, models of manufacturers, transparency software releases and certificates, with their owners' signatures, quorum and proof of possession, and the properties a change set may change: not the version of a release, also not by removing it and adding it again; the `notifiedBodyNumber` and `notifiedFor` of a conformity assessment body by the roaming network operator only. Element changes, preconditions, offers and the entities of providers, grid and parking operators are refused, not applied. The references the C# implementation checks after every change set (a manufacturer, model, release or certificate a station, meter or certificate names) are not checked again: the `afterETags` of the change set pin the version it leads to. The identifications unique within the network are, as in every version |
|
|
201
204
|
| Histories (5, 10, 11) | linear histories from snapshots, anchored in the trust anchor as a peer of WWCP_POI starts (10.5): a snapshot of a checkpoint by the checkpoint, signed as the roaming network operator, a snapshot of the head by its attestations, none without a trust anchor unless taken unanchored explicitly; commits, checkpoints, their lines and signatures, signed ones only with a verifier; proofs of commits, archive segments; epochs: their profiles, the final checkpoint, the genesis of the next epoch, its first checkpoint. Merges are not taken yet; no peer, no server |
|
|
202
205
|
| Price statements (12) | statements, chains, checkpoint trees and proofs in every epoch |
|
|
203
206
|
| Runtime status (12.5) | status updates, frames of the WebSocket, the runtime status of a snapshot. No WebSocket client: the app brings its own |
|
|
@@ -210,6 +213,65 @@ And whatever it calculated otherwise than the C# implementation would end in oth
|
|
|
210
213
|
refused as well.
|
|
211
214
|
|
|
212
215
|
|
|
216
|
+
## Local authorization and shared trust contexts
|
|
217
|
+
|
|
218
|
+
An app that lets its users import a trust anchor before they trust its keys does not hand that anchor to a verifier: a
|
|
219
|
+
verifier given a `TrustAnchor` trusts every identity key it pins. The app evaluates a `TrustContext` instead, from the
|
|
220
|
+
identity keys it trusts locally:
|
|
221
|
+
|
|
222
|
+
```ts
|
|
223
|
+
import { ChargingStationProof, RoamingNetworkOperator, TrustContext, verifyChargingStation } from '@open-charging-cloud/wwcp-poi';
|
|
224
|
+
|
|
225
|
+
// The key statement and the identity keys of the operator as the proof gives them: trusted only once evaluated.
|
|
226
|
+
const proof = ChargingStationProof.parse(proofJSON);
|
|
227
|
+
const operator = RoamingNetworkOperator.parse(proof.roamingNetwork['operator'], anchor.id);
|
|
228
|
+
|
|
229
|
+
if (operator.keyStatement !== undefined) {
|
|
230
|
+
|
|
231
|
+
const result = TrustContext.evaluate(anchor, operator.keyStatement, {
|
|
232
|
+
trustedIdentityKeyIds: locallyAuthorizedKeyIds,
|
|
233
|
+
otherIdentityKeys: operator.identityKeys,
|
|
234
|
+
at: Date.now()
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
// Show signatures, signers, quorum and validity apart. canTrustKeys allows importing
|
|
238
|
+
// validly signed data even without a trusted quorum.
|
|
239
|
+
if (result.context !== undefined) {
|
|
240
|
+
const station = verifyChargingStation(result.context, proof, { evseId: 'DE*GEF*E1*1' });
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
`TrustContext.evaluate` keeps of the holders of the trust anchor the identity keys the app trusts, and checks every
|
|
247
|
+
signature of the key statement and that its key was valid when the statement was signed, that the statement is valid at
|
|
248
|
+
`at`, that it names the holders of the trusted keys as the trust anchor does, and that trusted keys of as many holders
|
|
249
|
+
as the larger of both quorums signed it. Two trusted keys of one holder still count once. A context exists only when all
|
|
250
|
+
of that holds; `TrustContext.create` evaluates the same and throws otherwise.
|
|
251
|
+
|
|
252
|
+
The context binds what is verified with it to the roaming network, its operator and the signed content of the key
|
|
253
|
+
statement, which a statement embedded without its JSON-LD context gives as well. Another key statement, even one signed
|
|
254
|
+
genuinely, needs another evaluation: a context does not follow the keys of the operator to their successors by itself.
|
|
255
|
+
Other valid signatures, or the same in another order, do not change the content; every signature given and the trusted
|
|
256
|
+
quorum are checked again.
|
|
257
|
+
|
|
258
|
+
`OperatorTrust.of` and `fromOperatorJSON`, `verifyVersion`, `verifyChargingStation`, `ChargingStationProof.verify` and
|
|
259
|
+
`verifyCheckpoint` take a context in place of a trust anchor. A context is evaluated for one time: `at` is that time or
|
|
260
|
+
left out, another time needs another context. Given a trust anchor, they verify as before, trusting every key it pins.
|
|
261
|
+
The other APIs taking a trust anchor, among them `verifyEvidence` and `POIClient`, take only one the app has authorized:
|
|
262
|
+
they are no way around its local policy.
|
|
263
|
+
|
|
264
|
+
The app keeps storing and showing its decisions, choosing keys and excluding them locally. It reads its current
|
|
265
|
+
decisions consistently and creates a context from them for every verification: a context is no authority to store, nor
|
|
266
|
+
to use again after a key was withdrawn or deleted or the policy changed, and does not see what changes after it was
|
|
267
|
+
created. The library needs no IndexedDB, localStorage, network, DOM, Node or anything of an app.
|
|
268
|
+
|
|
269
|
+
Removing a pinned key from the local roots removes the trust it started with. A key statement signed by the quorum may
|
|
270
|
+
still name it among its identity keys and so delegate to it: excluding a key locally is no global revocation or deny
|
|
271
|
+
list. Revocation and verified succession need policies of their own. Unknown imports, invalid evidence and expired data
|
|
272
|
+
never give an authorized context.
|
|
273
|
+
|
|
274
|
+
|
|
213
275
|
## Tests
|
|
214
276
|
|
|
215
277
|
```bash
|
|
@@ -277,12 +339,12 @@ npx tsx examples/validate-examples.ts D:\Coding\OpenChargingCloud\WWCP_POI\examp
|
|
|
277
339
|
## Publishing
|
|
278
340
|
|
|
279
341
|
```
|
|
280
|
-
npm version 0.1.
|
|
342
|
+
npm version 0.1.1 --no-git-tag-version
|
|
281
343
|
git commit -a
|
|
282
|
-
git tag -s v0.1.
|
|
283
|
-
git push origin master v0.1.
|
|
284
|
-
git push git1 master v0.1.
|
|
285
|
-
git push git2 master v0.1.
|
|
344
|
+
git tag -s v0.1.1 -m "v0.1.1"
|
|
345
|
+
git push origin master v0.1.1
|
|
346
|
+
git push git1 master v0.1.1
|
|
347
|
+
git push git2 master v0.1.1
|
|
286
348
|
|
|
287
349
|
npm run verify
|
|
288
350
|
npm pack --dry-run
|
package/dist/common.d.ts
CHANGED
|
@@ -27,6 +27,15 @@ export declare function parseTimestamp(text: string, what?: string): number;
|
|
|
27
27
|
export declare function toTimestamp(time: number | Date): string;
|
|
28
28
|
export declare function requireTimestamp(object: JSONObject, property: string, what?: string): number;
|
|
29
29
|
export declare function optionalTimestamp(object: JSONObject, property: string, what?: string): number | undefined;
|
|
30
|
+
/** A timestamp as POI writes it, of the given property; undefined where it is none or written otherwise. */
|
|
31
|
+
export declare function timestampAt(object: JSONObject, property: string): number | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* A text the given object must name, refused as Styx refuses it where it names none (`ParseMandatory`): "Missing JSON
|
|
34
|
+
* property '@id'!".
|
|
35
|
+
*/
|
|
36
|
+
export declare function mandatoryText(object: JSONObject, property: string, what?: string): string;
|
|
37
|
+
/** The text of the given property, where it is one and not empty. */
|
|
38
|
+
export declare function nonemptyText(object: JSONObject, property: string): string | undefined;
|
|
30
39
|
/** Now, or the given point in time, as milliseconds since 1970. */
|
|
31
40
|
export declare const timeOf: (at?: number | Date | string) => number;
|
|
32
41
|
/** The first text of a multilingual text, e.g. `{"en": "Quality Assurance"}`. */
|
package/dist/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAwC,mBAAmB,CAAC;AAC9E,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI1G,iFAAiF;AACjF,eAAO,MAAM,cAAc,+CAA+C,CAAC;AAM3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAIpF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAIlF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOtG;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,GAAG,SAA0B,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlI;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,GAAG,SAA0B,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/I;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CASzF;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIpF;AAQD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,MAAM,CAezE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAUvD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzG;AAED,mEAAmE;AACnE,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM,KAAG,MAIT,CAAC;AAG7C,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKzE"}
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAwC,mBAAmB,CAAC;AAC9E,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI1G,iFAAiF;AACjF,eAAO,MAAM,cAAc,+CAA+C,CAAC;AAM3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAIpF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAIlF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOtG;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,GAAG,SAA0B,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlI;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,GAAG,SAA0B,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/I;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CASzF;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIpF;AAQD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,MAAM,CAezE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAUvD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzG;AAED,4GAA4G;AAC5G,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUpF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrF;AAED,mEAAmE;AACnE,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM,KAAG,MAIT,CAAC;AAG7C,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/history/apply.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,cAAc,EAAE,MAAsB,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/history/apply.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,cAAc,EAAE,MAAsB,8BAA8B,CAAC;AAK9E,OAAO,KAAK,EAAU,SAAS,EAAE,MAAc,gBAAgB,CAAC;AAwiChE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA6IjF;AAuBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CAoEvI"}
|
package/dist/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export { RoamingNetwork, RoamingNetworkOperator, ROAMING_NETWORK_CONTEXT } from
|
|
|
29
29
|
export { EV_TALER_EXCHANGE_CONTEXT, EV_TALER_MERCHANT_CONTEXT, EV_TALER_PAYMENT_MEANS, EV_TALER_PAYMENT_OPTION, evTalerMerchantOf, isTalerPublicKey, paymentOptionName, type EVTalerExchange, type EVTalerMerchant } from './network/evTaler.ts';
|
|
30
30
|
export { effectiveContent, effectiveChargingStationOperator } from './network/effective.ts';
|
|
31
31
|
export { CHILD_ARRAYS, effectiveTreeETag, entityDigest, prunedTree, skeleton } from './network/tree.ts';
|
|
32
|
+
export { TrustContext, type TrustEvaluation, type TrustEvaluationOptions } from './proofs/trustContext.ts';
|
|
32
33
|
export { TrustAnchor, TRUST_ANCHOR_CONTEXT, TRUST_ANCHOR_QR_PREFIX, type I18NText } from './proofs/trustAnchor.ts';
|
|
33
34
|
export { KeyStatement, KEY_STATEMENT_CONTEXT, type KeyStatementSignature } from './proofs/keyStatement.ts';
|
|
34
35
|
export { SigningKeyCertificate, SIGNING_KEY_CERTIFICATE_CONTEXT } from './proofs/signingKeyCertificate.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,MAA0B,aAAa,CAAC;AAGhF,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAA6B,mBAAmB,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAa,iBAAiB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5I,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAY,aAAa,CAAC;AAGhF,OAAO,EAAE,IAAI,EAAE,KAAK,aAAa,EAAE,MAA+B,kBAAkB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvG,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAiB,WAAW,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAChJ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGnH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC9G,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACjP,OAAO,EAAE,gBAAgB,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGxG,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC3G,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAuB,yBAAyB,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,4BAA4B,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAG7O,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACnL,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAyB,oBAAoB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACvG,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1H,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACnN,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG3H,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAiB,yBAAyB,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,SAAS,EAAE,YAAY,EAAE,yBAAyB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC7L,OAAO,EAAE,8BAA8B,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAC9I,OAAO,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,yBAAyB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC7S,OAAO,EAAE,gBAAgB,EAAE,KAAK,QAAQ,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG3F,OAAO,EAAE,aAAa,EAAE,MAA0C,qBAAqB,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,yBAAyB,EAAE,KAAK,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACzN,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpK,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,SAAS,EAAE,KAAK,sBAAsB,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC"}
|