@sphereon/ssi-sdk.oid4vci-holder 0.33.1-next.2 → 0.33.1-next.68
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/dist/index.cjs +3143 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +786 -0
- package/dist/index.d.ts +785 -11
- package/dist/index.js +3112 -31
- package/dist/index.js.map +1 -1
- package/package.json +44 -33
- package/src/agent/OID4VCIHolder.ts +8 -5
- package/dist/agent/OID4VCIHolder.d.ts +0 -59
- package/dist/agent/OID4VCIHolder.d.ts.map +0 -1
- package/dist/agent/OID4VCIHolder.js +0 -884
- package/dist/agent/OID4VCIHolder.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/link-handler/index.d.ts +0 -31
- package/dist/link-handler/index.d.ts.map +0 -1
- package/dist/link-handler/index.js +0 -65
- package/dist/link-handler/index.js.map +0 -1
- package/dist/listeners/headlessStateNavListener.d.ts +0 -3
- package/dist/listeners/headlessStateNavListener.d.ts.map +0 -1
- package/dist/listeners/headlessStateNavListener.js +0 -45
- package/dist/listeners/headlessStateNavListener.js.map +0 -1
- package/dist/localization/Localization.d.ts +0 -9
- package/dist/localization/Localization.d.ts.map +0 -1
- package/dist/localization/Localization.js +0 -46
- package/dist/localization/Localization.js.map +0 -1
- package/dist/localization/translations/en.json +0 -19
- package/dist/localization/translations/nl.json +0 -18
- package/dist/machines/firstPartyMachine.d.ts +0 -15
- package/dist/machines/firstPartyMachine.d.ts.map +0 -1
- package/dist/machines/firstPartyMachine.js +0 -222
- package/dist/machines/firstPartyMachine.js.map +0 -1
- package/dist/machines/oid4vciMachine.d.ts +0 -7
- package/dist/machines/oid4vciMachine.d.ts.map +0 -1
- package/dist/machines/oid4vciMachine.js +0 -727
- package/dist/machines/oid4vciMachine.js.map +0 -1
- package/dist/mappers/OIDC4VCIBrandingMapper.d.ts +0 -16
- package/dist/mappers/OIDC4VCIBrandingMapper.d.ts.map +0 -1
- package/dist/mappers/OIDC4VCIBrandingMapper.js +0 -201
- package/dist/mappers/OIDC4VCIBrandingMapper.js.map +0 -1
- package/dist/services/FirstPartyMachineServices.d.ts +0 -9
- package/dist/services/FirstPartyMachineServices.d.ts.map +0 -1
- package/dist/services/FirstPartyMachineServices.js +0 -53
- package/dist/services/FirstPartyMachineServices.js.map +0 -1
- package/dist/services/OID4VCIHolderService.d.ts +0 -28
- package/dist/services/OID4VCIHolderService.d.ts.map +0 -1
- package/dist/services/OID4VCIHolderService.js +0 -524
- package/dist/services/OID4VCIHolderService.js.map +0 -1
- package/dist/types/FirstPartyMachine.d.ts +0 -112
- package/dist/types/FirstPartyMachine.d.ts.map +0 -1
- package/dist/types/FirstPartyMachine.js +0 -30
- package/dist/types/FirstPartyMachine.js.map +0 -1
- package/dist/types/IOID4VCIHolder.d.ts +0 -558
- package/dist/types/IOID4VCIHolder.d.ts.map +0 -1
- package/dist/types/IOID4VCIHolder.js +0 -114
- package/dist/types/IOID4VCIHolder.js.map +0 -1
|
@@ -1,524 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.startFirstPartApplicationMachine = exports.getIssuanceCryptoSuite = exports.getIssuanceMethod = exports.getIssuanceOpts = exports.getCredentialConfigsSupportedBySingleTypeOrId = exports.getCredentialConfigsSupported = exports.getCredentialConfigsSupportedMerged = exports.getIdentifierOpts = exports.mapCredentialToAccept = exports.verifyCredentialToAccept = exports.selectCredentialLocaleBranding = exports.getCredentialConfigsBasedOnFormatPref = exports.getBasicIssuerLocaleBranding = exports.getCredentialBranding = void 0;
|
|
13
|
-
const oid4vci_client_1 = require("@sphereon/oid4vci-client");
|
|
14
|
-
const oid4vci_common_1 = require("@sphereon/oid4vci-common");
|
|
15
|
-
const ssi_sdk_ext_did_resolver_jwk_1 = require("@sphereon/ssi-sdk-ext.did-resolver-jwk");
|
|
16
|
-
const ssi_sdk_ext_did_utils_1 = require("@sphereon/ssi-sdk-ext.did-utils");
|
|
17
|
-
const ssi_sdk_ext_identifier_resolution_1 = require("@sphereon/ssi-sdk-ext.identifier-resolution");
|
|
18
|
-
const ssi_sdk_ext_key_utils_1 = require("@sphereon/ssi-sdk-ext.key-utils");
|
|
19
|
-
const ssi_types_1 = require("@sphereon/ssi-types");
|
|
20
|
-
const utils_1 = require("@veramo/utils");
|
|
21
|
-
const Localization_1 = require("../localization/Localization");
|
|
22
|
-
const IOID4VCIHolder_1 = require("../types/IOID4VCIHolder");
|
|
23
|
-
const OIDC4VCIBrandingMapper_1 = require("../mappers/OIDC4VCIBrandingMapper");
|
|
24
|
-
const firstPartyMachine_1 = require("../machines/firstPartyMachine");
|
|
25
|
-
const FirstPartyMachine_1 = require("../types/FirstPartyMachine");
|
|
26
|
-
const ssi_sdk_core_1 = require("@sphereon/ssi-sdk.core");
|
|
27
|
-
const getCredentialBranding = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
-
const { credentialsSupported, context } = args;
|
|
29
|
-
const credentialBranding = {};
|
|
30
|
-
yield Promise.all(Object.entries(credentialsSupported).map((_a) => __awaiter(void 0, [_a], void 0, function* ([configId, credentialsConfigSupported]) {
|
|
31
|
-
let sdJwtTypeMetadata;
|
|
32
|
-
if (credentialsConfigSupported.format === 'vc+sd-jwt') {
|
|
33
|
-
const vct = credentialsConfigSupported.vct;
|
|
34
|
-
if (vct.startsWith('http')) {
|
|
35
|
-
try {
|
|
36
|
-
sdJwtTypeMetadata = yield context.agent.fetchSdJwtTypeMetadataFromVctUrl({ vct });
|
|
37
|
-
}
|
|
38
|
-
catch (_b) {
|
|
39
|
-
// For now, we are just going to ignore and continue without any branding as we still have a fallback
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
let mappedLocaleBranding = [];
|
|
44
|
-
if (sdJwtTypeMetadata) {
|
|
45
|
-
mappedLocaleBranding = yield (0, OIDC4VCIBrandingMapper_1.sdJwtGetCredentialBrandingFrom)({
|
|
46
|
-
credentialDisplay: sdJwtTypeMetadata.display,
|
|
47
|
-
claimsMetadata: sdJwtTypeMetadata.claims,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
mappedLocaleBranding = yield (0, OIDC4VCIBrandingMapper_1.oid4vciGetCredentialBrandingFrom)({
|
|
52
|
-
credentialDisplay: credentialsConfigSupported.display,
|
|
53
|
-
issuerCredentialSubject:
|
|
54
|
-
// @ts-ignore // FIXME SPRIND-123 add proper support for type recognition as claim display can be located elsewhere for v13
|
|
55
|
-
credentialsSupported.claims !== undefined ? credentialsConfigSupported.claims : credentialsConfigSupported.credentialSubject,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
// TODO we should make the mapper part of the plugin, so that the logic for getting the branding becomes more clear and easier to use
|
|
59
|
-
const localeBranding = yield Promise.all(mappedLocaleBranding.map((localeBranding) => __awaiter(void 0, void 0, void 0, function* () { return yield context.agent.ibCredentialLocaleBrandingFrom({ localeBranding }); })));
|
|
60
|
-
const defaultCredentialType = 'VerifiableCredential';
|
|
61
|
-
const configSupportedTypes = (0, oid4vci_common_1.getTypesFromCredentialSupported)(credentialsConfigSupported);
|
|
62
|
-
const credentialTypes = configSupportedTypes.length === 0 ? (0, utils_1.asArray)(defaultCredentialType) : configSupportedTypes;
|
|
63
|
-
const filteredCredentialTypes = credentialTypes.filter((type) => type !== defaultCredentialType);
|
|
64
|
-
credentialBranding[filteredCredentialTypes[0]] = localeBranding; // TODO for now taking the first type
|
|
65
|
-
})));
|
|
66
|
-
return credentialBranding;
|
|
67
|
-
});
|
|
68
|
-
exports.getCredentialBranding = getCredentialBranding;
|
|
69
|
-
const getBasicIssuerLocaleBranding = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
70
|
-
const { display, dynamicRegistrationClientMetadata, context } = args;
|
|
71
|
-
return yield Promise.all(display.map((issuerDisplay) => __awaiter(void 0, void 0, void 0, function* () {
|
|
72
|
-
// FIXME for now we do not have locale support for dynamicRegistrationClientMetadata, so we add all the metadata to every locale
|
|
73
|
-
const branding = yield (0, OIDC4VCIBrandingMapper_1.issuerLocaleBrandingFrom)({ issuerDisplay, dynamicRegistrationClientMetadata });
|
|
74
|
-
return context.agent.ibIssuerLocaleBrandingFrom({ localeBranding: branding });
|
|
75
|
-
})));
|
|
76
|
-
});
|
|
77
|
-
exports.getBasicIssuerLocaleBranding = getBasicIssuerLocaleBranding;
|
|
78
|
-
const getCredentialConfigsBasedOnFormatPref = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
-
const { vcFormatPreferences, credentials } = args;
|
|
80
|
-
const prefConfigs = {};
|
|
81
|
-
Object.entries(credentials).forEach(([key, config]) => {
|
|
82
|
-
const result = !config.format || vcFormatPreferences.map((pref) => pref.toLowerCase()).includes(config.format.toLowerCase());
|
|
83
|
-
if (result) {
|
|
84
|
-
prefConfigs[key] = config;
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
return prefConfigs;
|
|
88
|
-
});
|
|
89
|
-
exports.getCredentialConfigsBasedOnFormatPref = getCredentialConfigsBasedOnFormatPref;
|
|
90
|
-
const selectCredentialLocaleBranding = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
|
-
const { locale, localeBranding } = args;
|
|
92
|
-
return localeBranding === null || localeBranding === void 0 ? void 0 : localeBranding.find((branding) => { var _a; return locale ? ((_a = branding.locale) === null || _a === void 0 ? void 0 : _a.startsWith(locale)) || branding.locale === undefined : branding.locale === undefined; });
|
|
93
|
-
});
|
|
94
|
-
exports.selectCredentialLocaleBranding = selectCredentialLocaleBranding;
|
|
95
|
-
const verifyCredentialToAccept = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
97
|
-
const { mappedCredential, hasher, onVerifyEBSICredentialIssuer, schemaValidation, context } = args;
|
|
98
|
-
const credential = mappedCredential.credentialToAccept.credentialResponse.credential;
|
|
99
|
-
if (!credential) {
|
|
100
|
-
return Promise.reject(Error('No credential found in credential response'));
|
|
101
|
-
}
|
|
102
|
-
const wrappedVC = ssi_types_1.CredentialMapper.toWrappedVerifiableCredential(credential, { hasher: hasher !== null && hasher !== void 0 ? hasher : ssi_sdk_core_1.defaultHasher });
|
|
103
|
-
if (((_b = (_a = wrappedVC.decoded) === null || _a === void 0 ? void 0 : _a.iss) === null || _b === void 0 ? void 0 : _b.includes('did:ebsi:')) ||
|
|
104
|
-
(typeof ((_d = (_c = wrappedVC.decoded) === null || _c === void 0 ? void 0 : _c.vc) === null || _d === void 0 ? void 0 : _d.issuer) === 'string'
|
|
105
|
-
? (_g = (_f = (_e = wrappedVC.decoded) === null || _e === void 0 ? void 0 : _e.vc) === null || _f === void 0 ? void 0 : _f.issuer) === null || _g === void 0 ? void 0 : _g.includes('did:ebsi:')
|
|
106
|
-
: (_l = (_k = (_j = (_h = wrappedVC.decoded) === null || _h === void 0 ? void 0 : _h.vc) === null || _j === void 0 ? void 0 : _j.issuer) === null || _k === void 0 ? void 0 : _k.existingInstanceId) === null || _l === void 0 ? void 0 : _l.includes('did:ebsi:'))) {
|
|
107
|
-
// TODO: Skipping VC validation for EBSI conformance issued credential, as their Issuer is not present in the ledger (sigh)
|
|
108
|
-
// just calling the verifySchema functionality for ebsi credentials
|
|
109
|
-
yield context.agent.cvVerifySchema({ credential, hasher, validationPolicy: schemaValidation });
|
|
110
|
-
if (JSON.stringify(wrappedVC.decoded).includes('vc:ebsi:conformance')) {
|
|
111
|
-
return { source: wrappedVC, error: undefined, result: true, subResults: [] };
|
|
112
|
-
}
|
|
113
|
-
if (onVerifyEBSICredentialIssuer) {
|
|
114
|
-
try {
|
|
115
|
-
yield onVerifyEBSICredentialIssuer({
|
|
116
|
-
wrappedVc: wrappedVC,
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
catch (e) {
|
|
120
|
-
return { source: wrappedVC, error: e.message, result: true, subResults: [] };
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
const verificationResult = yield context.agent.cvVerifyCredential({
|
|
125
|
-
credential,
|
|
126
|
-
hasher,
|
|
127
|
-
// TODO WAL-675 we might want to allow these types of options as part of the context, now we have state machines. Allows us to pre-determine whether these policies apply and whether remote context should be fetched
|
|
128
|
-
fetchRemoteContexts: true,
|
|
129
|
-
policies: {
|
|
130
|
-
schemaValidation: schemaValidation,
|
|
131
|
-
credentialStatus: false,
|
|
132
|
-
expirationDate: false,
|
|
133
|
-
issuanceDate: false,
|
|
134
|
-
},
|
|
135
|
-
});
|
|
136
|
-
if (!verificationResult.result || verificationResult.error) {
|
|
137
|
-
return Promise.reject(Error((_m = verificationResult.error) !== null && _m !== void 0 ? _m : (0, Localization_1.translate)('oid4vci_machine_credential_verification_failed_message')));
|
|
138
|
-
}
|
|
139
|
-
return verificationResult;
|
|
140
|
-
});
|
|
141
|
-
exports.verifyCredentialToAccept = verifyCredentialToAccept;
|
|
142
|
-
const mapCredentialToAccept = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
143
|
-
const { credentialToAccept, hasher } = args;
|
|
144
|
-
const credentialResponse = credentialToAccept.credentialResponse;
|
|
145
|
-
const verifiableCredential = credentialResponse.credential;
|
|
146
|
-
if (!verifiableCredential) {
|
|
147
|
-
return Promise.reject(Error('No credential found in credential response'));
|
|
148
|
-
}
|
|
149
|
-
const wrappedVerifiableCredential = ssi_types_1.CredentialMapper.toWrappedVerifiableCredential(verifiableCredential, { hasher });
|
|
150
|
-
let uniformVerifiableCredential;
|
|
151
|
-
if (ssi_types_1.CredentialMapper.isSdJwtDecodedCredential(wrappedVerifiableCredential.credential)) {
|
|
152
|
-
uniformVerifiableCredential = yield (0, ssi_types_1.sdJwtDecodedCredentialToUniformCredential)(wrappedVerifiableCredential.credential);
|
|
153
|
-
}
|
|
154
|
-
else if (ssi_types_1.CredentialMapper.isSdJwtEncoded(wrappedVerifiableCredential.credential)) {
|
|
155
|
-
if (!hasher) {
|
|
156
|
-
return Promise.reject('a hasher is required for encoded SD-JWT credentials');
|
|
157
|
-
}
|
|
158
|
-
const asyncHasher = (data, algorithm) => Promise.resolve(hasher(data, algorithm));
|
|
159
|
-
const decodedSdJwt = yield ssi_types_1.CredentialMapper.decodeSdJwtVcAsync(wrappedVerifiableCredential.credential, asyncHasher);
|
|
160
|
-
uniformVerifiableCredential = (0, ssi_types_1.sdJwtDecodedCredentialToUniformCredential)(decodedSdJwt);
|
|
161
|
-
}
|
|
162
|
-
else if (ssi_types_1.CredentialMapper.isMsoMdocDecodedCredential(wrappedVerifiableCredential.credential)) {
|
|
163
|
-
uniformVerifiableCredential = (0, ssi_types_1.mdocDecodedCredentialToUniformCredential)(wrappedVerifiableCredential.credential);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
uniformVerifiableCredential = wrappedVerifiableCredential.credential;
|
|
167
|
-
}
|
|
168
|
-
const correlationId = typeof uniformVerifiableCredential.issuer === 'string'
|
|
169
|
-
? uniformVerifiableCredential.issuer
|
|
170
|
-
: ssi_types_1.CredentialMapper.isSdJwtDecodedCredential(uniformVerifiableCredential)
|
|
171
|
-
? uniformVerifiableCredential.decodedPayload.iss
|
|
172
|
-
: uniformVerifiableCredential.issuer.id;
|
|
173
|
-
return Object.assign({ correlationId,
|
|
174
|
-
credentialToAccept, types: credentialToAccept.types, rawVerifiableCredential: verifiableCredential, uniformVerifiableCredential }, (credentialResponse.credential_subject_issuance && { credential_subject_issuance: credentialResponse.credential_subject_issuance }));
|
|
175
|
-
});
|
|
176
|
-
exports.mapCredentialToAccept = mapCredentialToAccept;
|
|
177
|
-
const getIdentifierOpts = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
178
|
-
const { issuanceOpt, context } = args;
|
|
179
|
-
const { identifier: identifierArg } = issuanceOpt;
|
|
180
|
-
if (identifierArg && (0, ssi_sdk_ext_identifier_resolution_1.isManagedIdentifierResult)(identifierArg)) {
|
|
181
|
-
return identifierArg;
|
|
182
|
-
}
|
|
183
|
-
const { supportedPreferredDidMethod, supportedBindingMethods, keyType = 'Secp256r1', kms = yield context.agent.keyManagerGetDefaultKeyManagementSystem(), } = issuanceOpt;
|
|
184
|
-
let identifier;
|
|
185
|
-
if (identifierArg) {
|
|
186
|
-
if ((0, ssi_sdk_ext_identifier_resolution_1.isIIdentifier)(identifierArg.identifier)) {
|
|
187
|
-
identifier = yield context.agent.identifierManagedGet(identifierArg);
|
|
188
|
-
}
|
|
189
|
-
else if (!identifierArg.method && issuanceOpt.supportedBindingMethods.includes('jwk')) {
|
|
190
|
-
identifier = yield (0, ssi_sdk_ext_identifier_resolution_1.managedIdentifierToJwk)(identifierArg, context);
|
|
191
|
-
}
|
|
192
|
-
else if (identifierArg.method && !supportedBindingMethods.includes(identifierArg.method)) {
|
|
193
|
-
throw Error(`Supplied identifier method ${identifierArg.method} not supported by the issuer: ${supportedBindingMethods.join(',')}`);
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
identifier = yield context.agent.identifierManagedGet(identifierArg);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
const agentContext = Object.assign(Object.assign({}, context), { agent: context.agent });
|
|
200
|
-
if ((!identifierArg || (0, ssi_sdk_ext_identifier_resolution_1.isIIdentifier)(identifierArg.identifier)) &&
|
|
201
|
-
supportedPreferredDidMethod &&
|
|
202
|
-
(!supportedBindingMethods || supportedBindingMethods.length === 0 || supportedBindingMethods.filter((method) => method.startsWith('did')))) {
|
|
203
|
-
// previous code for managing DIDs only
|
|
204
|
-
const { result, created } = yield (0, ssi_sdk_ext_did_utils_1.getOrCreatePrimaryIdentifier)(agentContext, {
|
|
205
|
-
method: supportedPreferredDidMethod,
|
|
206
|
-
createOpts: {
|
|
207
|
-
options: {
|
|
208
|
-
type: issuanceOpt.keyType,
|
|
209
|
-
use: ssi_sdk_ext_did_resolver_jwk_1.KeyUse.Signature,
|
|
210
|
-
codecName: issuanceOpt.codecName,
|
|
211
|
-
kms: issuanceOpt.kms,
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
identifier = yield context.agent.identifierManagedGetByDid({
|
|
216
|
-
identifier: result,
|
|
217
|
-
keyType,
|
|
218
|
-
offlineWhenNoDIDRegistered: result.did.startsWith('did:ebsi:'),
|
|
219
|
-
});
|
|
220
|
-
if (created) {
|
|
221
|
-
yield agentContext.agent.emit(IOID4VCIHolder_1.OID4VCIHolderEvent.IDENTIFIER_CREATED, { identifier });
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
else if (supportedBindingMethods.includes('jwk')) {
|
|
225
|
-
// todo: we probably should do something similar as with DIDs for re-use/new keys
|
|
226
|
-
const key = yield context.agent.keyManagerCreate({ type: keyType, kms, meta: { keyAlias: `key_${keyType}_${Date.now()}` } });
|
|
227
|
-
// TODO. Create/move this to identifier service await agentContext.agent.emit(OID4VCIHolderEvent.IDENTIFIER_CREATED, { key })
|
|
228
|
-
identifier = yield (0, ssi_sdk_ext_identifier_resolution_1.managedIdentifierToJwk)({ method: 'key', identifier: key, kmsKeyRef: key.kid }, context);
|
|
229
|
-
// } else if (supportedBindingMethods.includes('cose_key')) {
|
|
230
|
-
// // TODO COSE HERE
|
|
231
|
-
// throw Error(`Holder currently does not support binding method: ${supportedBindingMethods.join(',')}`)
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
throw Error(`Holder currently does not support binding method: ${supportedBindingMethods.join(',')}`);
|
|
235
|
-
}
|
|
236
|
-
args.issuanceOpt.identifier = identifier;
|
|
237
|
-
return identifier;
|
|
238
|
-
});
|
|
239
|
-
exports.getIdentifierOpts = getIdentifierOpts;
|
|
240
|
-
const getCredentialConfigsSupportedMerged = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
241
|
-
let result = {};
|
|
242
|
-
(yield (0, exports.getCredentialConfigsSupported)(args)).forEach((supported) => {
|
|
243
|
-
result = Object.assign(Object.assign({}, result), supported);
|
|
244
|
-
});
|
|
245
|
-
return result;
|
|
246
|
-
});
|
|
247
|
-
exports.getCredentialConfigsSupportedMerged = getCredentialConfigsSupportedMerged;
|
|
248
|
-
const getCredentialConfigsSupported = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
249
|
-
const { types, configurationIds } = args;
|
|
250
|
-
if (Array.isArray(types) && types.length > 0) {
|
|
251
|
-
return Promise.all(types.map((type) => (0, exports.getCredentialConfigsSupportedBySingleTypeOrId)(Object.assign(Object.assign({}, args), { types: type }))));
|
|
252
|
-
}
|
|
253
|
-
else if (Array.isArray(configurationIds) && configurationIds.length > 0) {
|
|
254
|
-
return Promise.all(configurationIds.map((configurationId) => (0, exports.getCredentialConfigsSupportedBySingleTypeOrId)(Object.assign(Object.assign({}, args), { configurationId, types: undefined }))));
|
|
255
|
-
}
|
|
256
|
-
const configs = yield (0, exports.getCredentialConfigsSupportedBySingleTypeOrId)(Object.assign(Object.assign({}, args), { types: undefined, configurationId: undefined }));
|
|
257
|
-
return configs && Object.keys(configs).length > 0 ? [configs] : [];
|
|
258
|
-
});
|
|
259
|
-
exports.getCredentialConfigsSupported = getCredentialConfigsSupported;
|
|
260
|
-
/**
|
|
261
|
-
* Please note that this method only returns configs supported for a single set of credential types or a single config id.
|
|
262
|
-
* If an offer contains multiple formats/types in an array or multiple config ids, you will have to call this method for all of them
|
|
263
|
-
* @param args
|
|
264
|
-
*/
|
|
265
|
-
const getCredentialConfigsSupportedBySingleTypeOrId = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
266
|
-
const { client, vcFormatPreferences, configurationId } = args;
|
|
267
|
-
let { format = undefined, types = undefined } = args;
|
|
268
|
-
function createIdFromTypes(supported) {
|
|
269
|
-
var _a, _b;
|
|
270
|
-
const format = supported.format;
|
|
271
|
-
const type = (_b = (_a = (0, oid4vci_common_1.getTypesFromObject)(supported)) === null || _a === void 0 ? void 0 : _a.join()) !== null && _b !== void 0 ? _b : '';
|
|
272
|
-
const id = `${type}:${format}`;
|
|
273
|
-
return id;
|
|
274
|
-
}
|
|
275
|
-
if (configurationId) {
|
|
276
|
-
const allSupported = client.getCredentialsSupported(false);
|
|
277
|
-
return Object.fromEntries(Object.entries(allSupported).filter(([id, supported]) => id === configurationId || supported.id === configurationId || createIdFromTypes(supported) === configurationId));
|
|
278
|
-
}
|
|
279
|
-
if (!types && !client.credentialOffer) {
|
|
280
|
-
return Promise.reject(Error('openID4VCIClient has no credentialOffer and no types where provided'));
|
|
281
|
-
/*} else if (!format && !client.credentialOffer) {
|
|
282
|
-
return Promise.reject(Error('openID4VCIClient has no credentialOffer and no formats where provided'))*/
|
|
283
|
-
}
|
|
284
|
-
// We should always have a credential offer at this point given the above
|
|
285
|
-
if (!Array.isArray(format) && client.credentialOffer) {
|
|
286
|
-
if (client.version() > oid4vci_common_1.OpenId4VCIVersion.VER_1_0_09 &&
|
|
287
|
-
typeof client.credentialOffer.credential_offer === 'object' &&
|
|
288
|
-
'credentials' in client.credentialOffer.credential_offer) {
|
|
289
|
-
format = client.credentialOffer.credential_offer.credentials
|
|
290
|
-
.filter((cred) => typeof cred !== 'string')
|
|
291
|
-
.map((cred) => cred.format);
|
|
292
|
-
if ((format === null || format === void 0 ? void 0 : format.length) === 0) {
|
|
293
|
-
format = undefined; // Otherwise we would match nothing
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
const offerSupported = (0, oid4vci_common_1.getSupportedCredentials)({
|
|
298
|
-
types: types ? [types] : client.getCredentialOfferTypes(),
|
|
299
|
-
format,
|
|
300
|
-
version: client.version(),
|
|
301
|
-
issuerMetadata: client.endpointMetadata.credentialIssuerMetadata,
|
|
302
|
-
});
|
|
303
|
-
let allSupported;
|
|
304
|
-
if (!Array.isArray(offerSupported)) {
|
|
305
|
-
allSupported = offerSupported;
|
|
306
|
-
}
|
|
307
|
-
else {
|
|
308
|
-
allSupported = {};
|
|
309
|
-
offerSupported.forEach((supported) => {
|
|
310
|
-
if (supported.id) {
|
|
311
|
-
allSupported[supported.id] = supported;
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
const id = createIdFromTypes(supported);
|
|
315
|
-
allSupported[id] = supported;
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
let credentialConfigsSupported = yield (0, exports.getCredentialConfigsBasedOnFormatPref)({
|
|
319
|
-
credentials: allSupported,
|
|
320
|
-
vcFormatPreferences,
|
|
321
|
-
});
|
|
322
|
-
if (!credentialConfigsSupported || Object.keys(credentialConfigsSupported).length === 0) {
|
|
323
|
-
oid4vci_client_1.LOG.warning(`No matching supported credential found for ${client.getIssuer()}`);
|
|
324
|
-
}
|
|
325
|
-
if (client.credentialOffer === undefined) {
|
|
326
|
-
return credentialConfigsSupported;
|
|
327
|
-
}
|
|
328
|
-
// Filter configurations based on the credential offer IDs
|
|
329
|
-
const credentialOffer = client.credentialOffer.credential_offer;
|
|
330
|
-
let credentialsToOffer;
|
|
331
|
-
if ('credential_configuration_ids' in credentialOffer) {
|
|
332
|
-
credentialsToOffer = Object.fromEntries(Object.entries(credentialConfigsSupported).filter(([configId, config]) => credentialOffer.credential_configuration_ids.includes(configId)));
|
|
333
|
-
if (Object.keys(credentialsToOffer).length === 0) {
|
|
334
|
-
throw new Error(`No matching supported credential configs found for offer ${credentialOffer.credential_configuration_ids.join(', ')}`);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
credentialsToOffer = credentialConfigsSupported;
|
|
339
|
-
}
|
|
340
|
-
if (Object.keys(credentialsToOffer).length === 0) {
|
|
341
|
-
// Same check as above, but more generic error message, as it can also apply to below draft 13
|
|
342
|
-
throw new Error(`No matching supported credential configs found for offer`);
|
|
343
|
-
}
|
|
344
|
-
return credentialsToOffer;
|
|
345
|
-
});
|
|
346
|
-
exports.getCredentialConfigsSupportedBySingleTypeOrId = getCredentialConfigsSupportedBySingleTypeOrId;
|
|
347
|
-
const getIssuanceOpts = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
348
|
-
const { client, credentialsSupported,
|
|
349
|
-
// serverMetadata,
|
|
350
|
-
context, didMethodPreferences, jwtCryptographicSuitePreferences, jsonldCryptographicSuitePreferences, forceIssuanceOpt, } = args;
|
|
351
|
-
if (credentialsSupported === undefined || Object.keys(credentialsSupported).length === 0) {
|
|
352
|
-
return Promise.reject(Error('No credentials supported'));
|
|
353
|
-
}
|
|
354
|
-
const getIssuanceOpts = Object.values(credentialsSupported).map((credentialSupported) => __awaiter(void 0, void 0, void 0, function* () {
|
|
355
|
-
/*if (!serverMetadata?.credentialIssuerMetadata) {
|
|
356
|
-
return await getDefaultIssuanceOpts({ credentialSupported, opts: { client }, context })
|
|
357
|
-
}*/
|
|
358
|
-
var _a;
|
|
359
|
-
const cryptographicSuite = yield (0, exports.getIssuanceCryptoSuite)({
|
|
360
|
-
credentialSupported,
|
|
361
|
-
client,
|
|
362
|
-
jwtCryptographicSuitePreferences,
|
|
363
|
-
jsonldCryptographicSuitePreferences,
|
|
364
|
-
});
|
|
365
|
-
const { didMethod, methods } = yield (0, exports.getIssuanceMethod)({
|
|
366
|
-
credentialSupported,
|
|
367
|
-
client,
|
|
368
|
-
didMethodPreferences,
|
|
369
|
-
});
|
|
370
|
-
if (methods.length == 0) {
|
|
371
|
-
console.log(`Could not determine supported cryptographic_binding_methods_supported, will use DIDs`);
|
|
372
|
-
methods.push('did');
|
|
373
|
-
}
|
|
374
|
-
const issuanceOpt = forceIssuanceOpt
|
|
375
|
-
? Object.assign(Object.assign({}, credentialSupported), forceIssuanceOpt) : Object.assign(Object.assign(Object.assign({}, credentialSupported), { supportedPreferredDidMethod: didMethod, supportedBindingMethods: methods, format: credentialSupported.format, keyType: client.isEBSI() ? 'Secp256r1' : (0, ssi_sdk_ext_key_utils_1.keyTypeFromCryptographicSuite)({ crv: cryptographicSuite }) }), (client.isEBSI() && { codecName: 'EBSI' }));
|
|
376
|
-
const identifier = yield (0, exports.getIdentifierOpts)({ issuanceOpt, context });
|
|
377
|
-
if (!client.clientId && (0, ssi_sdk_ext_identifier_resolution_1.isManagedIdentifierDidResult)(identifier)) {
|
|
378
|
-
// FIXME: We really should fetch server metadata. Have user select required credentials. Take the first cred to determine a kid when no clientId is present and set that.
|
|
379
|
-
// Needs a preference service for crypto, keys, dids, and clientId, with ecosystem support
|
|
380
|
-
client.clientId = (_a = identifier.issuer) !== null && _a !== void 0 ? _a : identifier.did;
|
|
381
|
-
}
|
|
382
|
-
return Object.assign(Object.assign({}, issuanceOpt), { identifier });
|
|
383
|
-
}));
|
|
384
|
-
return yield Promise.all(getIssuanceOpts);
|
|
385
|
-
});
|
|
386
|
-
exports.getIssuanceOpts = getIssuanceOpts;
|
|
387
|
-
const getIssuanceMethod = (opts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
388
|
-
const { client, credentialSupported, didMethodPreferences } = opts;
|
|
389
|
-
const { format, cryptographic_binding_methods_supported } = credentialSupported;
|
|
390
|
-
let methods = []; // we use the external identifier method, as we should be supporting all values in the server metadata anyway
|
|
391
|
-
if (cryptographic_binding_methods_supported && Array.isArray(cryptographic_binding_methods_supported)) {
|
|
392
|
-
methods = cryptographic_binding_methods_supported;
|
|
393
|
-
const didMethods = didMethodPreferences.find((method) => cryptographic_binding_methods_supported.includes(`did:${method.toLowerCase() /*.replace('did:', '')*/}`));
|
|
394
|
-
if (didMethods) {
|
|
395
|
-
return { methods, didMethod: didMethods };
|
|
396
|
-
}
|
|
397
|
-
else if (cryptographic_binding_methods_supported.includes('did')) {
|
|
398
|
-
return { methods, didMethod: format ? didMethodPreferences[1] : didMethodPreferences[0] };
|
|
399
|
-
}
|
|
400
|
-
else if (methods.length > 0) {
|
|
401
|
-
return { methods };
|
|
402
|
-
}
|
|
403
|
-
console.warn(`We should have been able to determine cryptographic_binding_methods_supported, will fall back to legacy behaviour. This is likely a bug`);
|
|
404
|
-
}
|
|
405
|
-
if (client.isEBSI()) {
|
|
406
|
-
return { methods: ['did'], didMethod: ssi_sdk_ext_did_utils_1.SupportedDidMethodEnum.DID_KEY };
|
|
407
|
-
}
|
|
408
|
-
// legacy fallback
|
|
409
|
-
methods = ['did'];
|
|
410
|
-
if (!format || (format.includes('jwt') && !(format === null || format === void 0 ? void 0 : format.includes('jwt_vc_json_ld')))) {
|
|
411
|
-
return { methods, didMethod: format ? didMethodPreferences[1] : didMethodPreferences[0] };
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
414
|
-
// JsonLD
|
|
415
|
-
return { methods, didMethod: didMethodPreferences[0] };
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
exports.getIssuanceMethod = getIssuanceMethod;
|
|
419
|
-
const getIssuanceCryptoSuite = (opts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
420
|
-
var _a, _b;
|
|
421
|
-
const { client, credentialSupported, jwtCryptographicSuitePreferences, jsonldCryptographicSuitePreferences } = opts;
|
|
422
|
-
let signing_algs_supported;
|
|
423
|
-
if ('proof_types_supported' in credentialSupported && credentialSupported.proof_types_supported) {
|
|
424
|
-
if ('jwt' in credentialSupported.proof_types_supported && credentialSupported.proof_types_supported.jwt) {
|
|
425
|
-
signing_algs_supported = credentialSupported.proof_types_supported.jwt.proof_signing_alg_values_supported;
|
|
426
|
-
}
|
|
427
|
-
else if ('ldp_vp' in credentialSupported.proof_types_supported && credentialSupported.proof_types_supported.ldp_vp) {
|
|
428
|
-
signing_algs_supported = credentialSupported.proof_types_supported.ldp_vp.proof_signing_alg_values_supported;
|
|
429
|
-
}
|
|
430
|
-
else if ('cwt' in credentialSupported.proof_types_supported && credentialSupported.proof_types_supported.cwt) {
|
|
431
|
-
signing_algs_supported = credentialSupported.proof_types_supported.cwt.proof_signing_alg_values_supported;
|
|
432
|
-
console.error('cwt proof type not supported. Likely that errors will occur after this point');
|
|
433
|
-
}
|
|
434
|
-
else {
|
|
435
|
-
return Promise.reject(Error(`Unsupported proof_types_supported`));
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
else {
|
|
439
|
-
signing_algs_supported = (0, utils_1.asArray)(
|
|
440
|
-
// @ts-ignore // legacy
|
|
441
|
-
(_b = (_a = credentialSupported.credential_signing_alg_values_supported) !== null && _a !== void 0 ? _a : credentialSupported.proof_signing_alg_values_supported) !== null && _b !== void 0 ? _b : []);
|
|
442
|
-
}
|
|
443
|
-
// TODO: Return array, so the wallet/user could choose
|
|
444
|
-
switch (credentialSupported.format) {
|
|
445
|
-
// @ts-ignore legacy value
|
|
446
|
-
case 'jwt':
|
|
447
|
-
case 'jwt_vc_json':
|
|
448
|
-
case 'jwt_vc':
|
|
449
|
-
case 'vc+sd-jwt':
|
|
450
|
-
case 'mso_mdoc': {
|
|
451
|
-
const supportedPreferences = jwtCryptographicSuitePreferences.filter((suite) => signing_algs_supported.includes(suite));
|
|
452
|
-
if (supportedPreferences.length > 0) {
|
|
453
|
-
return supportedPreferences[0];
|
|
454
|
-
}
|
|
455
|
-
else if (client.isEBSI()) {
|
|
456
|
-
return ssi_types_1.JoseSignatureAlgorithm.ES256;
|
|
457
|
-
}
|
|
458
|
-
// if we cannot find supported cryptographic suites, we just try with the first preference
|
|
459
|
-
const fallback = jwtCryptographicSuitePreferences[0];
|
|
460
|
-
console.log(`Warn: We could not determine the crypto suites from the server metadata, and will fallback to a default: ${fallback}`);
|
|
461
|
-
return fallback;
|
|
462
|
-
}
|
|
463
|
-
// @ts-ignore
|
|
464
|
-
case 'ldp':
|
|
465
|
-
// @ts-ignore
|
|
466
|
-
case 'jwt_vc_json_ld':
|
|
467
|
-
case 'ldp_vc': {
|
|
468
|
-
const supportedPreferences = jsonldCryptographicSuitePreferences.filter((suite) => signing_algs_supported.includes(suite));
|
|
469
|
-
if (supportedPreferences.length > 0) {
|
|
470
|
-
return supportedPreferences[0];
|
|
471
|
-
}
|
|
472
|
-
// if we cannot find supported cryptographic suites, we just try with the first preference
|
|
473
|
-
const fallback = jsonldCryptographicSuitePreferences[0];
|
|
474
|
-
console.log(`Warn: We could not determine the crypto suites from the server metadata, and will fallback to a default: ${fallback}`);
|
|
475
|
-
return fallback;
|
|
476
|
-
}
|
|
477
|
-
default:
|
|
478
|
-
return Promise.reject(Error(`Credential format '${credentialSupported.format}' not supported`));
|
|
479
|
-
}
|
|
480
|
-
});
|
|
481
|
-
exports.getIssuanceCryptoSuite = getIssuanceCryptoSuite;
|
|
482
|
-
const startFirstPartApplicationMachine = (args, context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
483
|
-
const { openID4VCIClientState, stateNavigationListener, contact } = args;
|
|
484
|
-
if (!openID4VCIClientState) {
|
|
485
|
-
return Promise.reject(Error('Missing openID4VCI client state in context'));
|
|
486
|
-
}
|
|
487
|
-
if (!contact) {
|
|
488
|
-
return Promise.reject(Error('Missing contact in context'));
|
|
489
|
-
}
|
|
490
|
-
const firstPartyMachineInstance = firstPartyMachine_1.FirstPartyMachine.newInstance({
|
|
491
|
-
openID4VCIClientState,
|
|
492
|
-
contact,
|
|
493
|
-
agentContext: context,
|
|
494
|
-
stateNavigationListener,
|
|
495
|
-
});
|
|
496
|
-
return new Promise((resolve, reject) => {
|
|
497
|
-
try {
|
|
498
|
-
firstPartyMachineInstance.onTransition((state) => {
|
|
499
|
-
if (state.matches(FirstPartyMachine_1.FirstPartyMachineStateTypes.done)) {
|
|
500
|
-
const authorizationCodeResponse = state.context.authorizationCodeResponse;
|
|
501
|
-
if (!authorizationCodeResponse) {
|
|
502
|
-
reject(Error('No authorizationCodeResponse acquired'));
|
|
503
|
-
}
|
|
504
|
-
resolve(authorizationCodeResponse);
|
|
505
|
-
}
|
|
506
|
-
else if (state.matches(FirstPartyMachine_1.FirstPartyMachineStateTypes.aborted)) {
|
|
507
|
-
resolve(FirstPartyMachine_1.FirstPartyMachineStateTypes.aborted);
|
|
508
|
-
}
|
|
509
|
-
else if (state.matches(FirstPartyMachine_1.FirstPartyMachineStateTypes.declined)) {
|
|
510
|
-
resolve(FirstPartyMachine_1.FirstPartyMachineStateTypes.declined);
|
|
511
|
-
}
|
|
512
|
-
else if (state.matches(FirstPartyMachine_1.FirstPartyMachineStateTypes.error)) {
|
|
513
|
-
reject(state.context.error);
|
|
514
|
-
}
|
|
515
|
-
});
|
|
516
|
-
firstPartyMachineInstance.start();
|
|
517
|
-
}
|
|
518
|
-
catch (error) {
|
|
519
|
-
reject(error);
|
|
520
|
-
}
|
|
521
|
-
});
|
|
522
|
-
});
|
|
523
|
-
exports.startFirstPartApplicationMachine = startFirstPartApplicationMachine;
|
|
524
|
-
//# sourceMappingURL=OID4VCIHolderService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OID4VCIHolderService.js","sourceRoot":"","sources":["../../src/services/OID4VCIHolderService.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6DAA8C;AAC9C,6DAYiC;AACjC,yFAA+D;AAC/D,2EAAsG;AACtG,mGAOoD;AACpD,2EAA+E;AAE/E,mDAa4B;AAC5B,yCAAuC;AACvC,+DAAwD;AACxD,4DAoBgC;AAChC,8EAA8I;AAC9I,qEAAiE;AACjE,kEAAgG;AAChG,yDAAsD;AAE/C,MAAM,qBAAqB,GAAG,CAAO,IAA+B,EAAkE,EAAE;IAC7I,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9C,MAAM,kBAAkB,GAA0D,EAAE,CAAA;IACpF,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,KAA8D,EAAE,4CAAzD,CAAC,QAAQ,EAAE,0BAA0B,CAAC;QACpF,IAAI,iBAAgD,CAAA;QACpD,IAAI,0BAA0B,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACtD,MAAM,GAAG,GAAiF,0BAA2B,CAAC,GAAG,CAAA;YACzH,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,iBAAiB,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;gBACnF,CAAC;gBAAC,WAAM,CAAC;oBACP,qGAAqG;gBACvG,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,oBAAoB,GAA0C,EAAE,CAAA;QACpE,IAAI,iBAAiB,EAAE,CAAC;YACtB,oBAAoB,GAAG,MAAM,IAAA,uDAA8B,EAAC;gBAC1D,iBAAiB,EAAE,iBAAiB,CAAC,OAAO;gBAC5C,cAAc,EAAE,iBAAiB,CAAC,MAAM;aACzC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,oBAAoB,GAAG,MAAM,IAAA,yDAAgC,EAAC;gBAC5D,iBAAiB,EAAE,0BAA0B,CAAC,OAAO;gBACrD,uBAAuB;gBACrB,2HAA2H;gBAC3H,oBAAoB,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,iBAAiB;aAC/H,CAAC,CAAA;QACJ,CAAC;QACD,qIAAqI;QACrI,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,oBAAoB,CAAC,GAAG,CACtB,CAAO,cAAc,EAA2C,EAAE,kDAAC,OAAA,MAAM,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,EAAE,cAAc,EAAE,CAAC,CAAA,GAAA,CAC1I,CACF,CAAA;QACD,MAAM,qBAAqB,GAAG,sBAAsB,CAAA;QACpD,MAAM,oBAAoB,GAAG,IAAA,gDAA+B,EAAC,0BAA0B,CAAC,CAAA;QACxF,MAAM,eAAe,GAAkB,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAA,eAAO,EAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAA;QAChI,MAAM,uBAAuB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAA;QACjH,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAA,CAAC,qCAAqC;IACvG,CAAC,CAAA,CAAC,CACH,CAAA;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC,CAAA,CAAA;AA7CY,QAAA,qBAAqB,yBA6CjC;AAEM,MAAM,4BAA4B,GAAG,CAAO,IAAsC,EAA8C,EAAE;IACvI,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IACpE,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,OAAO,CAAC,GAAG,CAAC,CAAO,aAA8B,EAAuC,EAAE;QACxF,gIAAgI;QAChI,MAAM,QAAQ,GAAG,MAAM,IAAA,iDAAwB,EAAC,EAAE,aAAa,EAAE,iCAAiC,EAAE,CAAC,CAAA;QACrG,OAAO,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC/E,CAAC,CAAA,CAAC,CACH,CAAA;AACH,CAAC,CAAA,CAAA;AATY,QAAA,4BAA4B,gCASxC;AAEM,MAAM,qCAAqC,GAAG,CACnD,IAAuC,EACoB,EAAE;IAC7D,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;IACjD,MAAM,WAAW,GAAG,EAAsD,CAAA;IAC1E,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QAC5H,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;QAC3B,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA,CAAA;AAbY,QAAA,qCAAqC,yCAajD;AAEM,MAAM,8BAA8B,GAAG,CAC5C,IAAiC,EACiD,EAAE;IACpF,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;IAEvC,OAAO,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,CACzB,CAAC,QAAqE,EAAE,EAAE,WACxE,OAAA,MAAM,CAAC,CAAC,CAAC,CAAA,MAAA,QAAQ,CAAC,MAAM,0CAAE,UAAU,CAAC,MAAM,CAAC,KAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAA,EAAA,CAChH,CAAA;AACH,CAAC,CAAA,CAAA;AATY,QAAA,8BAA8B,kCAS1C;AAEM,MAAM,wBAAwB,GAAG,CAAO,IAAkC,EAA+B,EAAE;;IAChH,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAElG,MAAM,UAAU,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,UAA0C,CAAA;IACpH,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,SAAS,GAAG,4BAAgB,CAAC,6BAA6B,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,4BAAa,EAAE,CAAC,CAAA;IACjH,IACE,CAAA,MAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,GAAG,0CAAE,QAAQ,CAAC,WAAW,CAAC;QAC7C,CAAC,OAAO,CAAA,MAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,EAAE,0CAAE,MAAM,CAAA,KAAK,QAAQ;YAChD,CAAC,CAAC,MAAA,MAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,EAAE,0CAAE,MAAM,0CAAE,QAAQ,CAAC,WAAW,CAAC;YACtD,CAAC,CAAC,MAAA,MAAA,MAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,EAAE,0CAAE,MAAM,0CAAE,kBAAkB,0CAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,EAC7E,CAAC;QACD,2HAA2H;QAC3H,mEAAmE;QACnE,MAAM,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAC9F,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACtE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAA+B,CAAA;QAC3G,CAAC;QAED,IAAI,4BAA4B,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,4BAA4B,CAAC;oBACjC,SAAS,EAAE,SAAS;iBACrB,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAA+B,CAAA;YAC3G,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAuB,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACpF,UAAU;QACV,MAAM;QACN,sNAAsN;QACtN,mBAAmB,EAAE,IAAI;QACzB,QAAQ,EAAE;YACR,gBAAgB,EAAE,gBAAgB;YAClC,gBAAgB,EAAE,KAAK;YACvB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,KAAK;SACpB;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAC3D,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAA,kBAAkB,CAAC,KAAK,mCAAI,IAAA,wBAAS,EAAC,wDAAwD,CAAC,CAAC,CAAC,CAAA;IAC/H,CAAC;IACD,OAAO,kBAAkB,CAAA;AAC3B,CAAC,CAAA,CAAA;AAlDY,QAAA,wBAAwB,4BAkDpC;AAEM,MAAM,qBAAqB,GAAG,CAAO,IAA+B,EAAqC,EAAE;IAChH,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAE3C,MAAM,kBAAkB,GAAuB,kBAAkB,CAAC,kBAAkB,CAAA;IACpF,MAAM,oBAAoB,GAAwC,kBAAkB,CAAC,UAAU,CAAA;IAC/F,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,2BAA2B,GAAgC,4BAAgB,CAAC,6BAA6B,CAC7G,oBAAoD,EACpD,EAAE,MAAM,EAAE,CACX,CAAA;IACD,IAAI,2BAAkD,CAAA;IACtD,IAAI,4BAAgB,CAAC,wBAAwB,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;QACtF,2BAA2B,GAAG,MAAM,IAAA,qDAAyC,EACzC,2BAA2B,CAAC,UAAU,CACzE,CAAA;IACH,CAAC;SAAM,IAAI,4BAAgB,CAAC,cAAc,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;QACnF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAA;QAC9E,CAAC;QACD,MAAM,WAAW,GAAW,CAAC,IAA0B,EAAE,SAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;QACvH,MAAM,YAAY,GAAG,MAAM,4BAAgB,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QACnH,2BAA2B,GAAG,IAAA,qDAAyC,EAAmC,YAAY,CAAC,CAAA;IACzH,CAAC;SAAM,IAAI,4BAAgB,CAAC,0BAA0B,CAAC,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/F,2BAA2B,GAAG,IAAA,oDAAwC,EAAC,2BAA2B,CAAC,UAAU,CAAC,CAAA;IAChH,CAAC;SAAM,CAAC;QACN,2BAA2B,GAA0B,2BAA2B,CAAC,UAAU,CAAA;IAC7F,CAAC;IAED,MAAM,aAAa,GACjB,OAAO,2BAA2B,CAAC,MAAM,KAAK,QAAQ;QACpD,CAAC,CAAC,2BAA2B,CAAC,MAAM;QACpC,CAAC,CAAC,4BAAgB,CAAC,wBAAwB,CAAC,2BAA2B,CAAC;YACtE,CAAC,CAAC,2BAA2B,CAAC,cAAc,CAAC,GAAG;YAChD,CAAC,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAA;IAE7C,uBACE,aAAa;QACb,kBAAkB,EAClB,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAC/B,uBAAuB,EAAE,oBAAoB,EAC7C,2BAA2B,IACxB,CAAC,kBAAkB,CAAC,2BAA2B,IAAI,EAAE,2BAA2B,EAAE,kBAAkB,CAAC,2BAA2B,EAAE,CAAC,EACvI;AACH,CAAC,CAAA,CAAA;AA9CY,QAAA,qBAAqB,yBA8CjC;AAEM,MAAM,iBAAiB,GAAG,CAAO,IAAuB,EAAoC,EAAE;IACnG,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IACrC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,WAAW,CAAA;IACjD,IAAI,aAAa,IAAI,IAAA,6DAAyB,EAAC,aAAa,CAAC,EAAE,CAAC;QAC9D,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,MAAM,EACJ,2BAA2B,EAC3B,uBAAuB,EACvB,OAAO,GAAG,WAAW,EACrB,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GACpE,GAAG,WAAW,CAAA;IACf,IAAI,UAAmC,CAAA;IAEvC,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,IAAA,iDAAa,EAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,UAAU,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;QACtE,CAAC;aAAM,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,WAAW,CAAC,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxF,UAAU,GAAG,MAAM,IAAA,0DAAsB,EAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnE,CAAC;aAAM,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3F,MAAM,KAAK,CAAC,8BAA8B,aAAa,CAAC,MAAM,iCAAiC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACrI,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;IACD,MAAM,YAAY,mCAAQ,OAAO,KAAE,KAAK,EAAE,OAAO,CAAC,KAAkB,GAAE,CAAA;IAEtE,IACE,CAAC,CAAC,aAAa,IAAI,IAAA,iDAAa,EAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC3D,2BAA2B;QAC3B,CAAC,CAAC,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAC1I,CAAC;QACD,uCAAuC;QACvC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,oDAA4B,EAAC,YAAY,EAAE;YAC3E,MAAM,EAAE,2BAA2B;YACnC,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW,CAAC,OAAO;oBACzB,GAAG,EAAE,qCAAM,CAAC,SAAS;oBACrB,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,GAAG,EAAE,WAAW,CAAC,GAAG;iBACrB;aACF;SACF,CAAC,CAAA;QACF,UAAU,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC;YACzD,UAAU,EAAE,MAAM;YAClB,OAAO;YACP,0BAA0B,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;SAC/D,CAAC,CAAA;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAkB,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;QACtF,CAAC;IACH,CAAC;SAAM,IAAI,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,iFAAiF;QACjF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAC5H,6HAA6H;QAC7H,UAAU,GAAG,MAAM,IAAA,0DAAsB,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAC1G,6DAA6D;QAC7D,sBAAsB;QACtB,0GAA0G;IAC5G,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,qDAAqD,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACvG,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,UAAU,CAAA;IACxC,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA,CAAA;AAjEY,QAAA,iBAAiB,qBAiE7B;AAEM,MAAM,mCAAmC,GAAG,CACjD,IAAuC,EACoB,EAAE;IAC7D,IAAI,MAAM,GAAG,EAAsD,CAClE;IAAA,CAAC,MAAM,IAAA,qCAA6B,EAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAA2D,EAAE,EAAE;QACnH,MAAM,mCAAQ,MAAM,GAAK,SAAS,CAAE,CAAA;IACtC,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA,CAAA;AARY,QAAA,mCAAmC,uCAQ/C;AAEM,MAAM,6BAA6B,GAAG,CAC3C,IAAuC,EAC2B,EAAE;IACpE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,qDAA6C,kCAAM,IAAI,KAAE,KAAK,EAAE,IAAI,IAAG,CAAC,CAAC,CAAA;IAClH,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,OAAO,CAAC,GAAG,CAChB,gBAAgB,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CACvC,IAAA,qDAA6C,kCACxC,IAAI,KACP,eAAe,EACf,KAAK,EAAE,SAAS,IAChB,CACH,CACF,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAA,qDAA6C,kCAC9D,IAAI,KACP,KAAK,EAAE,SAAS,EAChB,eAAe,EAAE,SAAS,IAC1B,CAAA;IACF,OAAO,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACpE,CAAC,CAAA,CAAA;AAvBY,QAAA,6BAA6B,iCAuBzC;AACD;;;;GAIG;AACI,MAAM,6CAA6C,GAAG,CAC3D,IAAuD,EACI,EAAE;IAC7D,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;IAC7D,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,EAAE,GAAG,IAAI,CAAA;IAEpD,SAAS,iBAAiB,CAAC,SAA2C;;QACpE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;QAC/B,MAAM,IAAI,GAAW,MAAA,MAAA,IAAA,mCAAkB,EAAC,SAAS,CAAC,0CAAE,IAAI,EAAE,mCAAI,EAAE,CAAA;QAChE,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAA;QAC9B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,YAAY,GAAG,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAA;QAC1D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,eAAe,IAAI,SAAS,CAAC,EAAE,KAAK,eAAe,IAAI,iBAAiB,CAAC,SAAS,CAAC,KAAK,eAAe,CACpI,CACF,CAAA;IACH,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC,CAAA;QACnG;+GACuG;IACzG,CAAC;IACD,yEAAyE;IACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACrD,IACE,MAAM,CAAC,OAAO,EAAE,GAAG,kCAAiB,CAAC,UAAU;YAC/C,OAAO,MAAM,CAAC,eAAe,CAAC,gBAAgB,KAAK,QAAQ;YAC3D,aAAa,IAAI,MAAM,CAAC,eAAe,CAAC,gBAAgB,EACxD,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,WAAW;iBACzD,MAAM,CAAC,CAAC,IAA2C,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;iBACjF,GAAG,CAAC,CAAC,IAA2C,EAAE,EAAE,CAAE,IAAqC,CAAC,MAAM,CAAC,CAAA;YACtG,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,MAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,SAAS,CAAA,CAAC,mCAAmC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,wCAAuB,EAAC;QAC7C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,uBAAuB,EAAE;QACzD,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;QACzB,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC,wBAAwB;KACjE,CAAC,CAAA;IACF,IAAI,YAA8D,CAAA;IAElE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,YAAY,GAAG,cAAc,CAAA;IAC/B,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,EAA6D,CAAA;QAC5E,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACnC,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;gBACjB,YAAY,CAAC,SAAS,CAAC,EAAY,CAAC,GAAG,SAAS,CAAA;gBAChD,OAAM;YACR,CAAC;YACD,MAAM,EAAE,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;YACvC,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,0BAA0B,GAAG,MAAM,IAAA,6CAAqC,EAAC;QAC3E,WAAW,EAAE,YAAY;QACzB,mBAAmB;KACpB,CAAC,CAAA;IACF,IAAI,CAAC,0BAA0B,IAAI,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxF,oBAAG,CAAC,OAAO,CAAC,8CAA8C,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACjF,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,0BAA0B,CAAA;IACnC,CAAC;IACD,0DAA0D;IAC1D,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAA;IAE/D,IAAI,kBAAoE,CAAA;IACxE,IAAI,8BAA8B,IAAI,eAAe,EAAE,CAAC;QACtD,kBAAkB,GAAG,MAAM,CAAC,WAAW,CACrC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAC3I,CAAA;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,4DAA4D,eAAe,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxI,CAAC;IACH,CAAC;SAAM,CAAC;QACN,kBAAkB,GAAG,0BAA0B,CAAA;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,8FAA8F;QAC9F,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC,CAAA,CAAA;AAhGY,QAAA,6CAA6C,iDAgGzD;AAEM,MAAM,eAAe,GAAG,CAAO,IAAyB,EAAgC,EAAE;IAC/F,MAAM,EACJ,MAAM,EACN,oBAAoB;IACpB,kBAAkB;IAClB,OAAO,EACP,oBAAoB,EACpB,gCAAgC,EAChC,mCAAmC,EACnC,gBAAgB,GACjB,GAAG,IAAI,CAAA;IAER,IAAI,oBAAoB,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzF,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,eAAe,GAAiC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAO,mBAAmB,EAAE,EAAE;QAC1H;;WAEG;;QAEH,MAAM,kBAAkB,GAAW,MAAM,IAAA,8BAAsB,EAAC;YAC9D,mBAAmB;YACnB,MAAM;YACN,gCAAgC;YAChC,mCAAmC;SACpC,CAAC,CAAA;QACF,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,yBAAiB,EAAC;YACrD,mBAAmB;YACnB,MAAM;YACN,oBAAoB;SACrB,CAAC,CAAA;QACF,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAA;YACnG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;QACD,MAAM,WAAW,GAAG,gBAAgB;YAClC,CAAC,iCAAM,mBAAmB,GAAK,gBAAgB,EAC/C,CAAC,CAAE,8CACI,mBAAmB,KACtB,2BAA2B,EAAE,SAAS,EACtC,uBAAuB,EAAE,OAAO,EAChC,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAA,qDAA6B,EAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,KAChG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CACtB,CAAA;QAC7B,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAiB,EAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;QACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAA,gEAA4B,EAAC,UAAU,CAAC,EAAE,CAAC;YACjE,yKAAyK;YACzK,2FAA2F;YAC3F,MAAM,CAAC,QAAQ,GAAG,MAAA,UAAU,CAAC,MAAM,mCAAI,UAAU,CAAC,GAAG,CAAA;QACvD,CAAC;QACD,uCAAY,WAAW,KAAE,UAAU,IAAE;IACvC,CAAC,CAAA,CAAC,CAAA;IAEF,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAC3C,CAAC,CAAA,CAAA;AAxDY,QAAA,eAAe,mBAwD3B;AAEM,MAAM,iBAAiB,GAAG,CAC/B,IAA8B,EAI7B,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAA;IAClE,MAAM,EAAE,MAAM,EAAE,uCAAuC,EAAE,GAAG,mBAAmB,CAAA;IAC/E,IAAI,OAAO,GAA8B,EAAE,CAAA,CAAC,6GAA6G;IACzJ,IAAI,uCAAuC,IAAI,KAAK,CAAC,OAAO,CAAC,uCAAuC,CAAC,EAAE,CAAC;QACtG,OAAO,GAAG,uCAAoE,CAAA;QAC9E,MAAM,UAAU,GAAuC,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAA8B,EAAE,EAAE,CAClH,uCAAuC,CAAC,QAAQ,CAAC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,wBAAwB,EAAE,CAAC,CACzG,CAAA;QACD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;QAC3C,CAAC;aAAM,IAAI,uCAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3F,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,CAAA;QACpB,CAAC;QACD,OAAO,CAAC,IAAI,CACV,yIAAyI,CAC1I,CAAA;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,8CAAsB,CAAC,OAAO,EAAE,CAAA;IACxE,CAAC;IAED,kBAAkB;IAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAA;IACjB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAA,CAAC,EAAE,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3F,CAAC;SAAM,CAAC;QACN,SAAS;QACT,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAA;IACxD,CAAC;AACH,CAAC,CAAA,CAAA;AAtCY,QAAA,iBAAiB,qBAsC7B;AAEM,MAAM,sBAAsB,GAAG,CAAO,IAAgC,EAAmB,EAAE;;IAChG,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,gCAAgC,EAAE,mCAAmC,EAAE,GAAG,IAAI,CAAA;IAEnH,IAAI,sBAAqC,CAAA;IACzC,IAAI,uBAAuB,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,qBAAqB,EAAE,CAAC;QAChG,IAAI,KAAK,IAAI,mBAAmB,CAAC,qBAAqB,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC;YACxG,sBAAsB,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,GAAG,CAAC,kCAAkC,CAAA;QAC3G,CAAC;aAAM,IAAI,QAAQ,IAAI,mBAAmB,CAAC,qBAAqB,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;YACrH,sBAAsB,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,MAAM,CAAC,kCAAkC,CAAA;QAC9G,CAAC;aAAM,IAAI,KAAK,IAAI,mBAAmB,CAAC,qBAAqB,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC;YAC/G,sBAAsB,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,GAAG,CAAC,kCAAkC,CAAA;YACzG,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAA;QAC/F,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,sBAAsB,GAAG,IAAA,eAAO;QAC9B,uBAAuB;QACvB,MAAA,MAAA,mBAAmB,CAAC,uCAAuC,mCAAI,mBAAmB,CAAC,kCAAkC,mCAAI,EAAE,CAC5H,CAAA;IACH,CAAC;IAED,sDAAsD;IACtD,QAAQ,mBAAmB,CAAC,MAAM,EAAE,CAAC;QACnC,0BAA0B;QAC1B,KAAK,KAAK,CAAC;QACX,KAAK,aAAa,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,oBAAoB,GAAiE,gCAAgC,CAAC,MAAM,CAChI,CAAC,KAA4D,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CACzG,CAAA;YAED,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAA;YAChC,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3B,OAAO,kCAAsB,CAAC,KAAK,CAAA;YACrC,CAAC;YAED,0FAA0F;YAC1F,MAAM,QAAQ,GAAG,gCAAgC,CAAC,CAAC,CAAC,CAAA;YACpD,OAAO,CAAC,GAAG,CAAC,4GAA4G,QAAQ,EAAE,CAAC,CAAA;YACnI,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,aAAa;QACb,KAAK,KAAK,CAAC;QACX,aAAa;QACb,KAAK,gBAAgB,CAAC;QACtB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,oBAAoB,GAAkB,mCAAmC,CAAC,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE,CACvG,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CACvC,CAAA;YACD,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAA;YAChC,CAAC;YAED,0FAA0F;YAC1F,MAAM,QAAQ,GAAG,mCAAmC,CAAC,CAAC,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,CAAC,4GAA4G,QAAQ,EAAE,CAAC,CAAA;YACnI,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD;YACE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,mBAAmB,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAA;IACnG,CAAC;AACH,CAAC,CAAA,CAAA;AAjEY,QAAA,sBAAsB,0BAiElC;AAEM,MAAM,gCAAgC,GAAG,CAC9C,IAAsC,EACtC,OAAwB,EAC8B,EAAE;IACxD,MAAM,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAExE,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,MAAM,yBAAyB,GAAG,qCAAiB,CAAC,WAAW,CAAC;QAC9D,qBAAqB;QACrB,OAAO;QACP,YAAY,EAAE,OAAO;QACrB,uBAAuB;KACxB,CAAC,CAAA;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,yBAAyB,CAAC,YAAY,CAAC,CAAC,KAA6B,EAAE,EAAE;gBACvE,IAAI,KAAK,CAAC,OAAO,CAAC,+CAA2B,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpD,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAA;oBACzE,IAAI,CAAC,yBAAyB,EAAE,CAAC;wBAC/B,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAA;oBACxD,CAAC;oBACD,OAAO,CAAC,yBAA0B,CAAC,CAAA;gBACrC,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,+CAA2B,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9D,OAAO,CAAC,+CAA2B,CAAC,OAAO,CAAC,CAAA;gBAC9C,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,+CAA2B,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/D,OAAO,CAAC,+CAA2B,CAAC,QAAQ,CAAC,CAAA;gBAC/C,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,+CAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAA;YACF,yBAAyB,CAAC,KAAK,EAAE,CAAA;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,CAAA;QACf,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AA3CY,QAAA,gCAAgC,oCA2C5C"}
|