@icure/api 6.4.0 → 6.4.2
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/icc-api/model/models.d.ts +2 -2
- package/icc-x-api/crypto/AES.d.ts +1 -0
- package/icc-x-api/crypto/AES.js +13 -4
- package/icc-x-api/crypto/AES.js.map +1 -1
- package/icc-x-api/filters/filters.d.ts +1 -1
- package/icc-x-api/icc-accesslog-x-api.js +10 -7
- package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
- package/icc-x-api/icc-bekmehr-x-api.d.ts +1 -1
- package/icc-x-api/icc-calendar-item-x-api.js +14 -6
- package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
- package/icc-x-api/icc-contact-x-api.js +12 -9
- package/icc-x-api/icc-contact-x-api.js.map +1 -1
- package/icc-x-api/icc-crypto-x-api.d.ts +7 -1
- package/icc-x-api/icc-crypto-x-api.js +84 -69
- package/icc-x-api/icc-crypto-x-api.js.map +1 -1
- package/icc-x-api/icc-form-x-api.js +5 -4
- package/icc-x-api/icc-form-x-api.js.map +1 -1
- package/icc-x-api/icc-helement-x-api.js +8 -2
- package/icc-x-api/icc-helement-x-api.js.map +1 -1
- package/icc-x-api/icc-maintenance-task-x-api.js +8 -2
- package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
- package/icc-x-api/icc-patient-x-api.js +70 -64
- package/icc-x-api/icc-patient-x-api.js.map +1 -1
- package/icc-x-api/utils/asn1-packer.d.ts +1 -1
- package/icc-x-api/utils/asn1-parser.d.ts +1 -1
- package/icc-x-api/utils/net-utils.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icc-patient-x-api.js","sourceRoot":"","sources":["../../icc-x-api/icc-patient-x-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccPatientApi } from '../icc-api'\nimport { IccCryptoXApi } from './icc-crypto-x-api'\nimport { IccContactXApi } from './icc-contact-x-api'\nimport { IccFormXApi } from './icc-form-x-api'\nimport { IccHcpartyXApi } from './icc-hcparty-x-api'\nimport { IccInvoiceXApi } from './icc-invoice-x-api'\nimport { IccDocumentXApi } from './icc-document-x-api'\nimport { IccHelementXApi } from './icc-helement-x-api'\nimport { IccClassificationXApi } from './icc-classification-x-api'\n\nimport * as _ from 'lodash'\nimport * as models from '../icc-api/model/models'\nimport {\n CalendarItem,\n Classification,\n Delegation,\n Device,\n Document,\n HealthcareParty,\n IcureStub,\n Invoice,\n ListOfIds,\n Patient\n} from '../icc-api/model/models'\nimport { IccCalendarItemXApi } from './icc-calendar-item-x-api'\nimport { b64_2ab } from '../icc-api/model/ModelHelper'\nimport { b2a, hex2ua, string2ua, ua2hex, ua2utf8, utf8_2ua } from './utils/binary-utils'\nimport { findName, garnishPersonWithName, hasName } from './utils/person-util'\nimport { crypt, decrypt, retry } from './utils'\nimport { IccDataOwnerXApi } from './icc-data-owner-x-api'\nimport { AuthenticationProvider, NoAuthenticationProvider } from './auth/AuthenticationProvider'\n\n// noinspection JSUnusedGlobalSymbols\nexport class IccPatientXApi extends IccPatientApi {\n crypto: IccCryptoXApi\n contactApi: IccContactXApi\n formApi: IccFormXApi\n helementApi: IccHelementXApi\n invoiceApi: IccInvoiceXApi\n hcpartyApi: IccHcpartyXApi\n documentApi: IccDocumentXApi\n classificationApi: IccClassificationXApi\n calendarItemApi: IccCalendarItemXApi\n dataOwnerApi: IccDataOwnerXApi\n\n private readonly encryptedKeys: Array<string>\n\n constructor(\n host: string,\n headers: { [key: string]: string },\n crypto: IccCryptoXApi,\n contactApi: IccContactXApi,\n formApi: IccFormXApi,\n helementApi: IccHelementXApi,\n invoiceApi: IccInvoiceXApi,\n documentApi: IccDocumentXApi,\n hcpartyApi: IccHcpartyXApi,\n classificationApi: IccClassificationXApi,\n dataOwnerApi: IccDataOwnerXApi,\n calendarItemaApi: IccCalendarItemXApi,\n encryptedKeys: Array<string> = ['note'],\n authenticationProvider: AuthenticationProvider = new NoAuthenticationProvider(),\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch\n ) {\n super(host, headers, authenticationProvider, fetchImpl)\n this.crypto = crypto\n this.contactApi = contactApi\n this.formApi = formApi\n this.helementApi = helementApi\n this.invoiceApi = invoiceApi\n this.hcpartyApi = hcpartyApi\n this.documentApi = documentApi\n this.classificationApi = classificationApi\n this.calendarItemApi = calendarItemaApi\n this.dataOwnerApi = dataOwnerApi\n\n this.encryptedKeys = encryptedKeys\n }\n\n // noinspection JSUnusedGlobalSymbols\n newInstance(user: models.User, p: any = {}, delegates: string[] = []) {\n const patient = _.extend(\n {\n id: this.crypto.randomUuid(),\n _type: 'org.taktik.icure.entities.Patient',\n created: new Date().getTime(),\n modified: new Date().getTime(),\n responsible: this.dataOwnerApi.getDataOwnerOf(user),\n author: user.id,\n codes: [],\n tags: [],\n },\n p || {}\n )\n return this.initDelegationsAndEncryptionKeys(patient, user, undefined, delegates)\n }\n\n completeNames(patient: models.Patient): models.Patient {\n let finalPatient = patient\n\n if (!!finalPatient.lastName && !hasName(finalPatient, models.PersonName.UseEnum.Official)) {\n finalPatient = garnishPersonWithName(finalPatient, models.PersonName.UseEnum.Official, finalPatient.lastName, finalPatient.firstName)\n }\n\n if (!!finalPatient.maidenName && !hasName(finalPatient, models.PersonName.UseEnum.Maiden)) {\n finalPatient = garnishPersonWithName(finalPatient, models.PersonName.UseEnum.Maiden, finalPatient.maidenName, finalPatient.firstName)\n }\n\n if (!!finalPatient.alias && !hasName(finalPatient, models.PersonName.UseEnum.Nickname)) {\n finalPatient = garnishPersonWithName(finalPatient, models.PersonName.UseEnum.Nickname, finalPatient.alias, finalPatient.firstName)\n }\n\n if (!finalPatient.lastName && !!hasName(finalPatient, models.PersonName.UseEnum.Official)) {\n const officialName = findName(finalPatient, models.PersonName.UseEnum.Official)\n finalPatient = {\n ...finalPatient,\n lastName: officialName!.lastName,\n firstName: officialName!.firstNames?.[0],\n }\n }\n\n if (!finalPatient.maidenName && !!hasName(finalPatient, models.PersonName.UseEnum.Maiden)) {\n finalPatient = {\n ...finalPatient,\n maidenName: findName(finalPatient, models.PersonName.UseEnum.Maiden)!.lastName,\n }\n }\n\n if (!finalPatient.alias && !!hasName(finalPatient, models.PersonName.UseEnum.Nickname)) {\n finalPatient = {\n ...finalPatient,\n alias: findName(finalPatient, models.PersonName.UseEnum.Nickname)!.lastName,\n }\n }\n\n return finalPatient\n }\n\n async initDelegationsAndEncryptionKeys(\n patient: models.Patient,\n user: models.User,\n secretForeignKey: string | undefined = undefined,\n delegates: string[] = []\n ): Promise<models.Patient> {\n function updatePatientWithDataOwnerIfSame(dataOwner: Patient | Device | HealthcareParty) {\n if (dataOwner.id === patient.id) {\n _.extend(patient, {\n rev: dataOwner.rev,\n publicKey: dataOwner.publicKey,\n aesExchangeKeys: dataOwner.aesExchangeKeys,\n hcPartyKeys: dataOwner.hcPartyKeys\n })\n }\n }\n\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n const dels = await this.crypto.initObjectDelegations(patient, null, dataOwnerId!, null)\n updatePatientWithDataOwnerIfSame(dels.owner)\n const eks = await this.crypto.initEncryptionKeys(patient, dataOwnerId!)\n updatePatientWithDataOwnerIfSame(eks.modifiedOwner)\n patient.delegations = dels.delegations\n patient.encryptionKeys = eks.encryptionKeys\n\n let promise = Promise.resolve(patient)\n _.uniq(\n delegates.concat(user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : [])\n ).forEach(\n (delegateId) =>\n (promise = promise.then((patient) =>\n this.crypto.addDelegationsAndEncryptionKeys(null, patient, dataOwnerId!, delegateId, dels.secretId, eks.secretId).catch((e) => {\n console.log(e)\n return patient\n })\n ))\n )\n ;(user.autoDelegations && user.autoDelegations.anonymousMedicalInformation ? user.autoDelegations.anonymousMedicalInformation : []).forEach(\n (delegateId) =>\n (promise = promise.then((patient) =>\n this.crypto.addDelegationsAndEncryptionKeys(null, patient, dataOwnerId!, delegateId, null, eks.secretId).catch((e) => {\n console.log(e)\n return patient\n })\n ))\n )\n return promise\n }\n\n initConfidentialDelegation(patient: models.Patient, user: models.User): Promise<models.Patient | null> {\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n return this.crypto.extractPreferredSfk(patient, dataOwnerId!, true).then((k) => {\n if (!k) {\n const secretId = this.crypto.randomUuid()\n return this.crypto\n .decryptAndImportAesHcPartyKeysForDelegators([dataOwnerId!], dataOwnerId!)\n .then((hcPartyKeys) => {\n return this.crypto.AES.encrypt(hcPartyKeys[0].key, string2ua(patient.id + ':' + secretId).buffer as ArrayBuffer)\n })\n .then((newDelegation) => {\n ;(patient.delegations![dataOwnerId!] || (patient.delegations![dataOwnerId!] = [])).push(\n new Delegation({\n owner: dataOwnerId,\n delegatedTo: dataOwnerId,\n tag: 'confidential',\n key: ua2hex(newDelegation),\n })\n )\n return patient.rev ? this.modifyPatientWithUser(user, patient) : this.createPatientWithUser(user, patient)\n })\n } else {\n return patient\n }\n })\n }\n\n createPatient(body?: models.Patient): never {\n throw new Error('Cannot call a method that returns patients without providing a user for de/encryption')\n }\n\n createPatientWithUser(user: models.User, body?: models.Patient): Promise<models.Patient | any> {\n return body\n ? this.encrypt(user, [_.cloneDeep(this.completeNames(body))])\n .then((pats) => super.createPatient(pats[0]))\n .then((p) => this.decrypt(user, [p]))\n .then((pats) => pats[0])\n : Promise.resolve(null)\n }\n\n filterBy(\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n skip?: number,\n sort?: string,\n desc?: boolean,\n body?: models.FilterChainPatient\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n filterByWithUser(\n user: models.User,\n filterChain: models.FilterChainPatient,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n skip?: number,\n sort?: string,\n desc?: boolean\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .filterPatientsBy(startKey, startDocumentId, limit, skip, sort, desc, filterChain)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n findByAccessLogUserAfterDate(\n userId: string,\n accessType?: string,\n startDate?: number,\n startKey?: string,\n startDocumentId?: string,\n limit?: number\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n findByAccessLogUserAfterDateWithUser(\n user: models.User,\n userId: string,\n accessType?: string,\n startDate?: number,\n startKey?: string,\n startDocumentId?: string,\n limit?: number\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .findByAccessLogUserAfterDate(userId, accessType, startDate, startKey, startDocumentId, limit)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n findByAccessLogUserAfterDate_1(externalId: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n findByExternalIdWithUser(user: models.User, externalId: string): Promise<models.Patient | any> {\n return super\n .findByExternalId(externalId)\n .then((pats) => this.decrypt(user, [pats]))\n .then((x) => x[0])\n }\n\n findByNameBirthSsinAuto(\n healthcarePartyId?: string,\n filterValue?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n findByNameBirthSsinAutoWithUser(\n user: models.User,\n healthcarePartyId?: string,\n filterValue?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .findByNameBirthSsinAuto(healthcarePartyId, filterValue, startKey, startDocumentId, limit, sortDirection)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n fuzzySearch(firstName?: string, lastName?: string, dateOfBirth?: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n fuzzySearchWithUser(user: models.User, firstName?: string, lastName?: string, dateOfBirth?: number): Promise<Array<models.Patient> | any> {\n return super.fuzzySearch(firstName, lastName, dateOfBirth).then((pats) => this.decrypt(user, pats))\n }\n\n getPatient(patientId: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n getPatientRaw(patientId: string): Promise<models.Patient | any> {\n return super.getPatient(patientId)\n }\n\n getPatientWithUser(user: models.User, patientId: string): Promise<models.Patient | any> {\n return super\n .getPatient(patientId)\n .then((p) => this.tryDecryptOrReturnOriginal(user, [p], false))\n .then((pats) => pats[0].patient)\n }\n\n getPotentiallyEncryptedPatientWithUser(user: models.User, patientId: string): Promise<{ patient: models.Patient, decrypted: boolean }> {\n return super\n .getPatient(patientId)\n .then((p) => this.tryDecryptOrReturnOriginal(user, [p], false))\n .then((pats) => pats[0])\n }\n\n getPatients(body?: models.ListOfIds): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n getPatientsWithUser(user: models.User, body?: models.ListOfIds): Promise<Array<models.Patient> | any> {\n return super.getPatients(body).then((pats) => this.decrypt(user, pats))\n }\n\n listDeletedPatients(startDate?: number, endDate?: number, desc?: boolean, startDocumentId?: string, limit?: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listDeletedPatientsWithUser(\n user: models.User,\n startDate?: number,\n endDate?: number,\n desc?: boolean,\n startDocumentId?: string,\n limit?: number\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listDeletedPatients(startDate, endDate, desc, startDocumentId, limit)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n listDeletedPatients_2(firstName?: string, lastName?: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listDeletedPatientsByNameWithUser(user: models.User, firstName?: string, lastName?: string): Promise<Array<models.Patient> | any> {\n return super.listDeletedPatientsByName(firstName, lastName).then((rows) => this.decrypt(user, rows, false))\n }\n\n listOfMergesAfter(date: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listOfMergesAfterWithUser(user: models.User, date: number): Promise<Array<models.Patient> | any> {\n return super.listOfMergesAfter(date).then((pats) => this.decrypt(user, pats, false))\n }\n\n listOfPatientsModifiedAfter(date: number, startKey?: number, startDocumentId?: string, limit?: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listOfPatientsModifiedAfterWithUser(\n user: models.User,\n date: number,\n startKey?: number,\n startDocumentId?: string,\n limit?: number\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listOfPatientsModifiedAfter(date, startKey, startDocumentId, limit)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n listPatients(hcPartyId?: string, sortField?: string, startKey?: string, startDocumentId?: string, limit?: number, sortDirection?: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listPatientsWithUser(\n user: models.User,\n hcPartyId?: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listPatients(hcPartyId, sortField, startKey, startDocumentId, limit, sortDirection)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n listPatientsByHcParty(\n hcPartyId: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listPatientsByHcPartyWithUser(\n user: models.User,\n hcPartyId: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listPatientsByHcParty(hcPartyId, sortField, startKey, startDocumentId, limit, sortDirection)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n listPatientsOfHcParty(\n hcPartyId: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listPatientsOfHcPartyWithUser(\n user: models.User,\n hcPartyId: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listPatientsOfHcParty(hcPartyId, sortField, startKey, startDocumentId, limit, sortDirection)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n mergeInto(toId: string, fromIds: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n mergeIntoWithUser(user: models.User, toId: string, fromIds: string): Promise<models.Patient | any> {\n return super\n .mergeInto(toId, fromIds)\n .then((p) => this.decrypt(user, [p]))\n .then((pats) => pats[0])\n }\n\n modifyPatient(body?: models.Patient): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n modifyPatientRaw(body?: models.Patient): Promise<models.Patient | any> {\n return super.modifyPatient(body)\n }\n\n modifyPatientWithUser(user: models.User, body?: models.Patient): Promise<models.Patient | null> {\n return body\n ? this.tryEncrypt(user, [_.cloneDeep(this.completeNames(body))], false)\n .then((pats) => super.modifyPatient(pats[0]))\n .then((p) => this.decrypt(user, [p]))\n .then((pats) => {\n pats[0]?.id && this.crypto.emptyHcpCache(pats[0].id!)\n return pats[0]\n })\n : Promise.resolve(null)\n }\n\n modifyPatientReferral(patientId: string, referralId: string, start?: number, end?: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n modifyPatientReferralWithUser(\n user: models.User,\n patientId: string,\n referralId: string,\n start?: number,\n end?: number\n ): Promise<models.Patient | any> {\n return super\n .modifyPatientReferral(patientId, referralId, start, end)\n .then((p) => this.decrypt(user, [p]))\n .then((pats) => {\n pats[0]?.id && this.crypto.emptyHcpCache(pats[0].id!)\n return pats[0]\n })\n }\n\n encrypt(user: models.User, pats: Array<models.Patient>): Promise<Array<models.Patient>> {\n return this.tryEncrypt(user, pats, true)\n }\n\n private tryEncrypt(user: models.User, pats: Array<models.Patient>, requireAccessibleKey: boolean): Promise<Array<models.Patient>> {\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n return Promise.all(\n pats.map(async (p) => {\n const patientWithInitialisedEks = (p.encryptionKeys && Object.values(p.encryptionKeys).some((v) => !!v.length)\n ? p\n : await this.initEncryptionKeys(user, p)\n )\n const seks = await this.crypto.extractKeysFromDelegationsForHcpHierarchy(\n dataOwnerId!,\n patientWithInitialisedEks.id!,\n patientWithInitialisedEks.encryptionKeys!\n ).catch((e) => { console.error(e); throw e })\n if (seks.extractedKeys.length) {\n const key = await this.crypto.AES.importKey('raw', hex2ua(seks.extractedKeys[0].replace(/-/g, '')))\n return crypt(\n patientWithInitialisedEks,\n (obj: { [key: string]: string }) =>\n this.crypto.AES.encrypt(\n key,\n utf8_2ua(\n JSON.stringify(obj, (k, v) => {\n return v instanceof ArrayBuffer || v instanceof Uint8Array\n ? b2a(new Uint8Array(v).reduce((d, b) => d + String.fromCharCode(b), ''))\n : v\n })\n )\n ),\n this.encryptedKeys\n )\n } else if (requireAccessibleKey) {\n throw new Error(`Current data owner can't access any key of patient ${p.id}.`)\n } else {\n const cryptedCopyWithRandomKey = await crypt(\n _.cloneDeep(patientWithInitialisedEks),\n async (obj: { [key: string]: string }) => Promise.resolve(new ArrayBuffer(1)),\n this.encryptedKeys\n )\n if (!_.isEqual(\n _.omitBy({ ...cryptedCopyWithRandomKey, encryptedSelf: undefined }, _.isNil),\n _.omitBy({ ...patientWithInitialisedEks, encryptedSelf: undefined }, _.isNil)\n )) {\n throw Error(\"You can't modify encrypted data of a patient if you don't have access to his encryption key.\")\n }\n return patientWithInitialisedEks\n }\n })\n )\n }\n\n // If patient can't be decrypted returns patient with encrypted data.\n decrypt(user: models.User, patients: Array<models.Patient>, fillDelegations = true): Promise<Array<models.Patient>> {\n return this.tryDecryptOrReturnOriginal(user, patients, fillDelegations).then((ps) => ps.map((p) => p.patient))\n }\n\n private async tryDecryptOrReturnOriginal(user: models.User, patients: Array<models.Patient>, fillDelegations = true): Promise<{ patient: models.Patient, decrypted: boolean }[]> {\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n const ids = await (user.healthcarePartyId ? this.hcpartyApi.getHealthcarePartyHierarchyIds(user.healthcarePartyId) : Promise.resolve([dataOwnerId]))\n\n //First check that we have no dangling delegation\n const patsWithMissingDelegations = patients.filter(\n (p) =>\n p.delegations &&\n ids.some((id) => p.delegations![id!] && !p.delegations![id!].length) &&\n !Object.values(p.delegations).some((d) => d.length > 0)\n )\n\n const acc: { [key: string]: models.Patient } = fillDelegations\n ? await patsWithMissingDelegations.reduce(async (acc, p) => {\n const pats = await acc\n const pat = await this.initDelegationsAndEncryptionKeys(p, user)\n const mp = await this.modifyPatientWithUser(user, pat)\n return { ...pats, [pat.id!]: mp || pat }\n }, Promise.resolve({} as { [key: string]: models.Patient }))\n : {}\n\n return Promise.all(\n patients\n .map((p) => acc[p.id!] || p)\n .map(async (p) => {\n const decryptedPatient = await ids.reduce(\n async (decP, hcpId) => {\n return (\n (await decP) ??\n (p.encryptedSelf\n ? await this.crypto\n .extractKeysFromDelegationsForHcpHierarchy(hcpId!, p.id!, _.size(p.encryptionKeys) ? p.encryptionKeys! : p.delegations!)\n .then(({ extractedKeys: sfks }) => {\n if (!sfks || !sfks.length) {\n return Promise.resolve(undefined)\n }\n return this.crypto.AES.importKey('raw', hex2ua(sfks[0].replace(/-/g, ''))).then((key) =>\n decrypt(p, (ec) =>\n this.crypto.AES.decrypt(key, ec)\n .then((dec) => {\n const jsonContent = dec && ua2utf8(dec)\n try {\n return JSON.parse(jsonContent)\n } catch (e) {\n console.log('Cannot parse patient', p.id, jsonContent || 'Invalid content')\n return Promise.resolve(undefined)\n }\n })\n .catch((err) => {\n console.log('Cannot decrypt patient', p.id, err)\n return Promise.resolve(undefined)\n })\n ).then((p) => {\n if (p.picture && !(p.picture instanceof ArrayBuffer)) {\n p.picture = b64_2ab(p.picture)\n }\n return p\n })\n )\n })\n : p)\n )\n },\n Promise.resolve(undefined as Patient | undefined)\n )\n return decryptedPatient ? { patient: decryptedPatient, decrypted: true } : { patient: p, decrypted: false }\n })\n )\n }\n\n /** By default, an encryptionKey will be added for every hcp in the autoDelegations of the provided user.\n * In optional field additionalDelegateIds, you can ask the method to create encryptionKeys for additional hcps */\n initEncryptionKeys(user: models.User, pat: models.Patient, additionalDelegateIds?: string[]): Promise<models.Patient> {\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n const userAutoDelegations = user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : []\n return this.crypto.initEncryptionKeys(pat, dataOwnerId!).then((eks) => {\n let promise = Promise.resolve(\n _.extend(pat.id === eks.modifiedOwner.id ? eks.modifiedOwner as Patient : pat, {\n encryptionKeys: eks.encryptionKeys,\n })\n )\n new Set([...userAutoDelegations, ...(additionalDelegateIds || [])]).forEach(\n (delegateId) =>\n (promise = promise.then((patient) =>\n this.crypto\n .appendEncryptionKeys(patient, dataOwnerId!, delegateId, eks.secretId)\n .then((extraEks) => {\n return _.extend(extraEks.modifiedObject, {\n encryptionKeys: extraEks.encryptionKeys,\n })\n })\n .catch((e) => {\n console.log(e.message)\n return patient\n })\n ))\n )\n return promise\n })\n }\n\n share(\n user: models.User,\n patId: string,\n ownerId: string,\n delegateIds: Array<string>,\n delegationTags: { [key: string]: Array<string> },\n usingPost: boolean = false\n ): Promise<{\n patient: models.Patient | null\n statuses: { [key: string]: { success: boolean | null; error: Error | null } }\n } | null> {\n const addDelegationsAndKeys = (\n dtos: Array<models.Form | models.Document | models.Contact | models.HealthElement | models.Classification | models.CalendarItem>,\n markerPromise: Promise<any>,\n delegateId: string,\n patient: models.Patient | null\n ) => {\n return dtos.reduce(\n (p, x) =>\n p.then(() =>\n Promise.all([this.crypto.extractDelegationsSFKs(x, ownerId), this.crypto.extractEncryptionsSKs(x, ownerId)]).then(([sfks, eks]) => {\n //console.log(`share ${x.id} to ${delegateId}`)\n return this.crypto\n .addDelegationsAndEncryptionKeys(patient, x, ownerId, delegateId, sfks.extractedKeys[0], eks.extractedKeys[0])\n .catch((e: any) => {\n console.log(e)\n return x\n })\n })\n ),\n markerPromise\n )\n }\n\n const allTags: string[] = _.uniq(_.flatMap(Object.values(delegationTags)))\n\n // Determine which keys to share, depending on the delegation tag. For example, anonymousMedicalData only shares encryption keys and no delegations or secret foreign keys.\n const shareDelegations: boolean = allTags.some((tag) => tag != 'anonymousMedicalInformation')\n const shareEncryptionKeys = true\n const shareCryptedForeignKeys: boolean = allTags.some((tag) => tag != 'anonymousMedicalInformation')\n\n // Anonymous sharing, will not change anything to the patient, only its contacts and health elements.\n const shareAnonymously: boolean = allTags.every((tag) => tag == 'anonymousMedicalInformation')\n\n return this.hcpartyApi.getHealthcareParty(ownerId).then((hcp) => {\n const parentId = hcp.parentId\n const status = {\n contacts: {\n success:\n allTags.includes('medicalInformation') || allTags.includes('anonymousMedicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n forms: {\n success: allTags.includes('medicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n healthElements: {\n success:\n allTags.includes('medicalInformation') || allTags.includes('anonymousMedicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n invoices: {\n success: allTags.includes('financialInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n documents: {\n success: allTags.includes('medicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n classifications: {\n success: allTags.includes('medicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n calendarItems: {\n success: allTags.includes('medicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n patient: { success: false, error: null, modified: 0 } as {\n success: boolean\n error: Error | null\n },\n }\n return retry(() => this.getPatientWithUser(user, patId))\n .then((patient: models.Patient) =>\n patient.encryptionKeys && Object.keys(patient.encryptionKeys || {}).length\n ? Promise.resolve(patient)\n : this.initEncryptionKeys(user, patient).then((patient: models.Patient) => this.modifyPatientWithUser(user, patient))\n )\n .then((patient: models.Patient | null) => {\n if (!patient) {\n status.patient = {\n success: false,\n error: new Error('Patient does not exist or cannot initialise encryption keys'),\n }\n return Promise.resolve({ patient: patient, statuses: status })\n }\n\n return this.crypto.extractDelegationsSFKsAndEncryptionSKs(patient, ownerId).then(([delSfks, ecKeys]) => {\n return delSfks.length\n ? Promise.all([\n retry(() =>\n (usingPost ? this.helementApi\n .findHealthElementsDelegationsStubsByHCPartyPatientForeignKeysUsingPost(ownerId, _.uniq(delSfks)) : this.helementApi\n .findHealthElementsDelegationsStubsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(',')))\n .then((hes) =>\n parentId\n ? (usingPost ? this.helementApi\n .findHealthElementsDelegationsStubsByHCPartyPatientForeignKeysUsingPost(parentId, _.uniq(delSfks)) : this.helementApi\n .findHealthElementsDelegationsStubsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreHes) => _.uniqBy(hes.concat(moreHes), 'id'))\n : hes\n )\n ) as Promise<Array<models.IcureStub>>,\n retry(() =>\n (usingPost ? this.formApi\n .findFormsDelegationsStubsByHCPartyPatientForeignKeysUsingPost(ownerId, _.uniq(delSfks)) : this.formApi\n .findFormsDelegationsStubsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((frms) =>\n parentId\n ? (usingPost ? this.formApi\n .findFormsDelegationsStubsByHCPartyPatientForeignKeysUsingPost(parentId, _.uniq(delSfks)) : this.formApi\n .findFormsDelegationsStubsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreFrms) => _.uniqBy(frms.concat(moreFrms), 'id'))\n : frms\n )\n ) as Promise<Array<models.Form>>,\n retry(() =>\n (usingPost ? this.contactApi\n .findByHCPartyPatientSecretFKeysUsingPost(ownerId, undefined, undefined, _.uniq(delSfks)) : this.contactApi\n .findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((ctcs) =>\n parentId\n ? (usingPost ? this.contactApi\n .findByHCPartyPatientSecretFKeysUsingPost(parentId, undefined, undefined, _.uniq(delSfks)) : this.contactApi\n .findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreCtcs) => _.uniqBy(ctcs.concat(moreCtcs), 'id'))\n : ctcs\n )\n ) as Promise<Array<models.Contact>>,\n retry(() =>\n (usingPost ? this.invoiceApi\n .findInvoicesDelegationsStubsByHCPartyPatientForeignKeysUsingPost(ownerId, _.uniq(delSfks)) : this.invoiceApi\n .findInvoicesDelegationsStubsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((ivs) =>\n parentId\n ? this.invoiceApi\n .findInvoicesDelegationsStubsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n .then((moreIvs) => _.uniqBy(ivs.concat(moreIvs), 'id'))\n : ivs\n )\n ) as Promise<Array<models.IcureStub>>,\n retry(() =>\n this.classificationApi\n .findClassificationsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n .then((cls) =>\n parentId\n ? this.classificationApi\n .findClassificationsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n .then((moreCls) => _.uniqBy(cls.concat(moreCls), 'id'))\n : cls\n )\n ) as Promise<Array<models.Classification>>,\n retry(() =>\n (usingPost ? this.calendarItemApi\n .findByHCPartyPatientSecretFKeysArray(ownerId, _.uniq(delSfks)) : this.calendarItemApi\n .findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((cls) =>\n parentId\n ? (usingPost ? this.calendarItemApi\n .findByHCPartyPatientSecretFKeysArray(parentId, _.uniq(delSfks)) : this.calendarItemApi\n .findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreCls) => _.uniqBy(cls.concat(moreCls), 'id'))\n : cls\n )\n ) as Promise<Array<models.CalendarItem>>,\n ]).then(([hes, frms, ctcs, ivs, cls, cis]) => {\n const cloneKeysAndDelegations = function (x: models.IcureStub) {\n return {\n delegations: shareDelegations ? _.clone(x.delegations) : undefined,\n cryptedForeignKeys: shareCryptedForeignKeys ? _.clone(x.cryptedForeignKeys) : undefined,\n encryptionKeys: shareEncryptionKeys ? _.clone(x.encryptionKeys) : undefined,\n }\n }\n\n const ctcsStubs = ctcs.map((c) => ({\n id: c.id,\n rev: c.rev,\n ...cloneKeysAndDelegations(c),\n }))\n const oHes = hes.map((x) => _.assign(new IcureStub({}), x, cloneKeysAndDelegations(x)))\n const oFrms = frms.map((x) => _.assign(new IcureStub({}), x, cloneKeysAndDelegations(x)))\n const oCtcsStubs = ctcsStubs.map((x) => _.assign({}, x, cloneKeysAndDelegations(x)))\n const oIvs = ivs.map((x) => _.assign(new Invoice({}), x, cloneKeysAndDelegations(x)))\n const oCls = cls.map((x) => _.assign(new Classification({}), x, cloneKeysAndDelegations(x)))\n const oCis = cis.map((x) => _.assign(new CalendarItem({}), x, cloneKeysAndDelegations(x)))\n\n const docIds: { [key: string]: number } = {}\n ctcs.forEach(\n (c: models.Contact) =>\n c.services &&\n c.services.forEach((s) => s.content && Object.values(s.content).forEach((c) => c && c.documentId && (docIds[c.documentId] = 1)))\n )\n\n return retry(() => this.documentApi.getDocuments(new ListOfIds({ ids: Object.keys(docIds) }))).then((docs: Array<Document>) => {\n const oDocs = docs.map((x) => _.assign({}, x, cloneKeysAndDelegations(x)))\n\n let markerPromise: Promise<any> = Promise.resolve(null)\n delegateIds.forEach((delegateId) => {\n const tags = delegationTags[delegateId]\n markerPromise = markerPromise.then(() => {\n //Share patient\n //console.log(`share ${patient.id} to ${delegateId}`)\n return shareAnonymously\n ? patient\n : this.crypto\n .addDelegationsAndEncryptionKeys(null, patient, ownerId, delegateId, delSfks[0], ecKeys[0])\n .then(async (patient) => {\n if (delSfks.length > 1) {\n return delSfks.slice(1).reduce(async (patientPromise: Promise<models.Patient>, delSfk: string) => {\n const patient = await patientPromise\n return shareAnonymously\n ? patient\n : this.crypto\n .addDelegationsAndEncryptionKeys(null, patient, ownerId, delegateId, delSfk, null)\n .catch((e: any) => {\n console.log(e)\n return patient\n })\n }, Promise.resolve(patient))\n }\n return patient\n })\n .catch((e) => {\n console.log(e)\n return patient\n })\n })\n ;(tags.includes('medicalInformation') || tags.includes('anonymousMedicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(hes, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(frms, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('anonymousMedicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(ctcsStubs, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(cls, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(cis, markerPromise, delegateId, patient))\n ;(tags.includes('financialInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(ivs, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(docs, markerPromise, delegateId, null))\n })\n\n return markerPromise\n .then(() => {\n //console.log(\"scd\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('anonymousMedicalInformation') || allTags.includes('all')) &&\n ctcsStubs &&\n ctcsStubs.length &&\n !_.isEqual(oCtcsStubs, ctcsStubs) &&\n this.contactApi\n .setContactsDelegations(ctcsStubs)\n .then(() => {\n status.contacts.success = true\n status.contacts.modified += ctcsStubs.length\n })\n .catch((e) => (status.contacts.error = e))) ||\n Promise.resolve((status.contacts.success = true))\n )\n })\n .then(() => {\n //console.log(\"shed\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('anonymousMedicalInformation') || allTags.includes('all')) &&\n hes &&\n hes.length &&\n !_.isEqual(oHes, hes) &&\n this.helementApi\n .setHealthElementsDelegations(hes)\n .then(() => {\n status.healthElements.success = true\n status.healthElements.modified += hes.length\n })\n .catch((e) => (status.healthElements.error = e))) ||\n Promise.resolve((status.healthElements.success = true))\n )\n })\n .then(() => {\n //console.log(\"sfd\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('all')) &&\n frms &&\n frms.length &&\n !_.isEqual(oFrms, frms) &&\n this.formApi\n .setFormsDelegations(frms)\n .then(() => {\n status.forms.success = true\n status.forms.modified += frms.length\n })\n .catch((e) => (status.forms.error = e))) ||\n Promise.resolve((status.forms.success = true))\n )\n })\n .then(() => {\n //console.log(\"sid\")\n return (\n ((allTags.includes('financialInformation') || allTags.includes('all')) &&\n ivs &&\n ivs.length &&\n !_.isEqual(oIvs, ivs) &&\n this.invoiceApi\n .setInvoicesDelegations(ivs)\n .then(() => {\n status.invoices.success = true\n status.invoices.modified += ivs.length\n })\n .catch((e) => (status.invoices.error = e))) ||\n Promise.resolve((status.invoices.success = true))\n )\n })\n .then(() => {\n //console.log(\"sdd\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('all')) &&\n docs &&\n docs.length &&\n !_.isEqual(oDocs, docs) &&\n this.documentApi\n .setDocumentsDelegations(docs)\n .then(() => {\n status.documents.success = true\n status.documents.modified += docs.length\n })\n .catch((e) => (status.documents.error = e))) ||\n Promise.resolve((status.documents.success = true))\n )\n })\n .then(() => {\n //console.log(\"scld\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('all')) &&\n cls &&\n cls.length &&\n !_.isEqual(oCls, cls) &&\n this.classificationApi\n .setClassificationsDelegations(cls)\n .then(() => {\n status.classifications.success = true\n status.classifications.modified += cls.length\n })\n .catch((e) => (status.classifications.error = e))) ||\n Promise.resolve((status.classifications.success = true))\n )\n })\n .then(() => {\n //console.log(\"scid\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('all')) &&\n cis &&\n cis.length &&\n !_.isEqual(oCis, cis) &&\n this.calendarItemApi\n .setCalendarItemsDelegations(cis)\n .then(() => {\n status.calendarItems.success = true\n status.calendarItems.modified += cis.length\n })\n .catch((e) => (status.calendarItems.error = e))) ||\n Promise.resolve((status.calendarItems.success = true))\n )\n })\n .then(() => this.modifyPatientWithUser(user, patient))\n .then((p) => {\n status.patient.success = true\n console.log(\n `c: ${status.contacts.modified}, he: ${status.healthElements.modified}, docs: ${status.documents.modified}, frms: ${status.forms.modified}, ivs: ${status.invoices.modified}, cis: ${status.calendarItems.modified}, cls: ${status.classifications.modified}`\n )\n return { patient: p, statuses: status }\n })\n .catch((e) => {\n status.patient.error = e\n return { patient: patient, statuses: status }\n })\n })\n })\n : (allTags.includes('anonymousMedicalInformation')\n ? Promise.resolve(patient)\n : this.modifyPatientWithUser(\n user,\n _.assign(patient, {\n delegations: _.assign(\n patient.delegations,\n delegateIds\n .filter((id) => !patient.delegations || !patient.delegations[id]) //If there are delegations do not modify\n .reduce((acc, del: string) => Object.assign(acc, _.fromPairs([[del, []]])), patient.delegations || {})\n ),\n })\n )\n )\n .then((p) => {\n status.patient.success = true\n return { patient: p, statuses: status }\n })\n .catch((e) => {\n status.patient.error = e\n return { patient: patient, statuses: status }\n })\n })\n })\n })\n }\n\n export(user: models.User, patId: string, ownerId: string, usingPost: boolean = false): Promise<{ id: string }> {\n return this.hcpartyApi.getHealthcareParty(ownerId).then((hcp) => {\n const parentId = hcp.parentId\n\n return retry(() => this.getPatientWithUser(user, patId))\n .then((patient: models.Patient) =>\n patient.encryptionKeys && Object.keys(patient.encryptionKeys || {}).length\n ? Promise.resolve(patient)\n : this.initEncryptionKeys(user, patient).then((patient: models.Patient) => this.modifyPatientWithUser(user, patient))\n )\n .then((patient: models.Patient | null) => {\n if (!patient) {\n return Promise.resolve({ id: patId })\n }\n\n return this.crypto.extractDelegationsSFKsAndEncryptionSKs(patient, ownerId).then(([delSfks, ecKeys]) => {\n return delSfks.length\n ? Promise.all([\n retry(() =>\n (usingPost ? this.helementApi\n .findByHCPartyPatientSecretFKeysArray(ownerId, _.uniq(delSfks)) : this.helementApi\n .findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((hes) =>\n parentId\n ? this.helementApi\n .findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(','))\n .then((moreHes) => _.uniqBy(hes.concat(moreHes), 'id'))\n : hes\n )\n ) as Promise<Array<models.IcureStub>>,\n retry(() =>\n (usingPost ? this.formApi\n .findFormsByHCPartyPatientForeignKeysUsingPost(ownerId, undefined, undefined, undefined, _.uniq(delSfks)) : this.formApi\n .findFormsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((frms) =>\n parentId\n ? (usingPost ? this.formApi\n .findFormsByHCPartyPatientForeignKeysUsingPost(parentId, undefined, undefined, undefined, _.uniq(delSfks)) : this.formApi\n .findFormsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreFrms) => _.uniqBy(frms.concat(moreFrms), 'id'))\n : frms\n )\n ) as Promise<Array<models.Form>>,\n retry(() =>\n (usingPost ? this.contactApi\n .findByHCPartyPatientSecretFKeysArray(ownerId, _.uniq(delSfks)) : this.contactApi\n .findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((ctcs) =>\n parentId\n ? (usingPost ? this.contactApi\n .findByHCPartyPatientSecretFKeysArray(parentId, _.uniq(delSfks)) : this.contactApi\n .findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreCtcs) => _.uniqBy(ctcs.concat(moreCtcs), 'id'))\n : ctcs\n )\n ) as Promise<Array<models.Contact>>,\n retry(() =>\n (usingPost ? this.invoiceApi\n .findInvoicesByHCPartyPatientForeignKeysUsingPost(ownerId, _.uniq(delSfks)) : this.invoiceApi\n .findInvoicesByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((ivs) =>\n parentId\n ? (usingPost ? this.invoiceApi\n .findInvoicesByHCPartyPatientForeignKeysUsingPost(parentId, _.uniq(delSfks)) : this.invoiceApi\n .findInvoicesByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreIvs) => _.uniqBy(ivs.concat(moreIvs), 'id'))\n : ivs\n )\n ) as Promise<Array<models.IcureStub>>,\n retry(() =>\n this.classificationApi\n .findClassificationsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n .then((cls) =>\n parentId\n ? this.classificationApi\n .findClassificationsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n .then((moreCls) => _.uniqBy(cls.concat(moreCls), 'id'))\n : cls\n )\n ) as Promise<Array<models.Classification>>,\n retry(async () => {\n const delegationSFKs = _.uniq(delSfks).join(',')\n try {\n let calendarItems = await (usingPost ?\n this.calendarItemApi.findByHCPartyPatientSecretFKeysArray(ownerId, _.uniq(delSfks)) :\n this.calendarItemApi.findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(',')))\n\n if (parentId) {\n const moreCalendarItems = await (usingPost ?\n this.calendarItemApi.findByHCPartyPatientSecretFKeysArray(parentId, _.uniq(delSfks)) :\n this.calendarItemApi.findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(',')))\n calendarItems = _.uniqBy(calendarItems.concat(moreCalendarItems), 'id')\n }\n\n return calendarItems\n } catch (ex) {\n console.log(`exception occured exporting calendarItem for ownerId: ${ownerId} - ${ex}`)\n //throw ex\n }\n }) as Promise<Array<models.CalendarItem>>,\n ]).then(([hes, frms, ctcs, ivs, cls, cis]) => {\n const docIds: { [key: string]: number } = {}\n ctcs.forEach(\n (c: models.Contact) =>\n c.services &&\n c.services.forEach((s) => s.content && Object.values(s.content).forEach((c) => c && c.documentId && (docIds[c.documentId] = 1)))\n )\n\n return retry(() => this.documentApi.getDocuments(new ListOfIds({ ids: Object.keys(docIds) }))).then((docs: Array<Document>) => {\n return {\n id: patId,\n patient: patient,\n contacts: ctcs,\n forms: frms,\n healthElements: hes,\n invoices: ivs,\n classifications: cls,\n calItems: cis,\n documents: docs,\n }\n })\n })\n : Promise.resolve({\n id: patId,\n patient: patient,\n contacts: [],\n forms: [],\n healthElements: [],\n invoices: [],\n classifications: [],\n calItems: [],\n documents: [],\n })\n })\n })\n })\n }\n\n checkInami(inami: string): boolean {\n const num_inami = inami.replace(new RegExp('[^(0-9)]', 'g'), '')\n\n const checkDigit = num_inami.substr(6, 2)\n const numSansCheck = num_inami.substr(0, 6)\n let retour = false\n\n //modulo du niss\n const modINAMI = parseInt(numSansCheck) % 97\n\n //obtention du num de check 97 - le resultat du mod\n const checkDigit_2 = 97 - modINAMI\n\n if (parseInt(checkDigit) == checkDigit_2) {\n retour = true\n }\n return retour\n }\n\n isValidSsin(ssin: string) {\n ssin = ssin.replace(new RegExp('[^(0-9)]', 'g'), '')\n let isValidNiss = false\n\n const normalNumber =\n /^[0-9][0-9](([0][0-9])|([1][0-2]))(([0-2][0-9])|([3][0-1]))(([0-9]{2}[1-9])|([0-9][1-9][0-9])|([1-9][0-9]{2}))(([0-8][0-9])|([9][0-7]))$/.test(\n ssin\n )\n const bisNumber = /^[0-9][0-9](([2][0-9])|([3][0-2]))(([0-2][0-9])|([3][0-1]))[0-9]{3}(([0-8][0-9])|([9][0-7]))$/.test(ssin)\n const terNumber = /^[0-9][0-9](([4][0-9])|([5][0-2]))(([0-2][0-9])|([3][0-1]))[0-9]{3}(([0-8][0-9])|([9][0-7]))$/.test(ssin)\n\n if (normalNumber || bisNumber || terNumber) {\n isValidNiss =\n 97 - (Number(ssin.substr(0, 9)) % 97) === Number(ssin.substr(9, 2))\n ? true\n : 97 - (Number('2' + ssin.substr(0, 9)) % 97) === Number(ssin.substr(9, 2))\n }\n\n return isValidNiss\n }\n\n async getPatientIdOfChildDocumentForHcpAndHcpParents(\n childDocument: models.Invoice | models.CalendarItem | models.Contact | models.AccessLog,\n hcpId: string\n ): Promise<string> {\n const parentIdsArray = (await this.crypto.extractCryptedFKs(childDocument, hcpId)).extractedKeys\n\n const multipleParentIds = _.uniq(parentIdsArray).length > 1\n\n if (multipleParentIds) {\n throw 'Child document with id ' + childDocument.id + ' contains multiple parent ids in its CFKs for hcpId: ' + hcpId\n }\n\n const parentId = _.first(parentIdsArray)\n\n if (!parentId) {\n throw 'Parent id is empty in CFK of child document with id ' + childDocument.id + ' for hcpId: ' + hcpId\n }\n\n let patient: models.Patient = await super.getPatient(parentId!)\n\n let mergeLevel = 0\n const maxMergeLevel = 10\n while (patient.mergeToPatientId) {\n mergeLevel++\n if (mergeLevel === maxMergeLevel) {\n throw 'Too many merged levels for parent (Patient) of child document ' + childDocument.id + ' ; hcpId: ' + hcpId\n }\n\n patient = await super.getPatient(patient.mergeToPatientId!)\n }\n\n return patient.id!\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"icc-patient-x-api.js","sourceRoot":"","sources":["../../icc-x-api/icc-patient-x-api.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAU1C,4BAA2B;AAC3B,kDAAiD;AACjD,oDAWgC;AAEhC,8DAAsD;AACtD,uDAAwF;AACxF,qDAA8E;AAC9E,mCAA+C;AAE/C,0EAAgG;AAEhG,qCAAqC;AACrC,MAAa,cAAe,SAAQ,uBAAa;IAc/C,YACE,IAAY,EACZ,OAAkC,EAClC,MAAqB,EACrB,UAA0B,EAC1B,OAAoB,EACpB,WAA4B,EAC5B,UAA0B,EAC1B,WAA4B,EAC5B,UAA0B,EAC1B,iBAAwC,EACxC,YAA8B,EAC9B,gBAAqC,EACrC,gBAA+B,CAAC,MAAM,CAAC,EACvC,yBAAiD,IAAI,iDAAwB,EAAE,EAC/E,YAA2E,OAAO,MAAM,KAAK,WAAW;QACtG,CAAC,CAAC,MAAM,CAAC,KAAK;QACd,CAAC,CAAC,OAAO,IAAI,KAAK,WAAW;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK;YACZ,CAAC,CAAC,KAAK;QAET,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAA;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAA;QACvC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAEhC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;IAED,qCAAqC;IACrC,WAAW,CAAC,IAAiB,EAAE,IAAS,EAAE,EAAE,YAAsB,EAAE;QAClE,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CACtB;YACE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC5B,KAAK,EAAE,mCAAmC;YAC1C,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;YAC7B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;YAC9B,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;YACnD,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;SACT,EACD,CAAC,IAAI,EAAE,CACR,CAAA;QACD,OAAO,IAAI,CAAC,gCAAgC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IACnF,CAAC;IAED,aAAa,CAAC,OAAuB;;QACnC,IAAI,YAAY,GAAG,OAAO,CAAA;QAE1B,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,IAAA,qBAAO,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzF,YAAY,GAAG,IAAA,mCAAqB,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;SACtI;QAED,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,IAAA,qBAAO,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzF,YAAY,GAAG,IAAA,mCAAqB,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;SACtI;QAED,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,IAAA,qBAAO,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACtF,YAAY,GAAG,IAAA,mCAAqB,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;SACnI;QAED,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAA,qBAAO,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzF,MAAM,YAAY,GAAG,IAAA,sBAAQ,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC/E,YAAY,mCACP,YAAY,KACf,QAAQ,EAAE,YAAa,CAAC,QAAQ,EAChC,SAAS,EAAE,MAAA,YAAa,CAAC,UAAU,0CAAG,CAAC,CAAC,GACzC,CAAA;SACF;QAED,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC,IAAA,qBAAO,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzF,YAAY,mCACP,YAAY,KACf,UAAU,EAAE,IAAA,sBAAQ,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAE,CAAC,QAAQ,GAC/E,CAAA;SACF;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC,IAAA,qBAAO,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACtF,YAAY,mCACP,YAAY,KACf,KAAK,EAAE,IAAA,sBAAQ,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAE,CAAC,QAAQ,GAC5E,CAAA;SACF;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;IAEK,gCAAgC,CACpC,OAAuB,EACvB,IAAiB,EACjB,mBAAuC,SAAS,EAChD,YAAsB,EAAE;;YAExB,SAAS,gCAAgC,CAAC,SAA6C;gBACrF,IAAI,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE;oBAC/B,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;wBAChB,GAAG,EAAE,SAAS,CAAC,GAAG;wBAClB,SAAS,EAAE,SAAS,CAAC,SAAS;wBAC9B,eAAe,EAAE,SAAS,CAAC,eAAe;wBAC1C,WAAW,EAAE,SAAS,CAAC,WAAW;qBACnC,CAAC,CAAA;iBACH;YACH,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,WAAY,EAAE,IAAI,CAAC,CAAA;YACvF,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAY,CAAC,CAAA;YACvE,gCAAgC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;YACnD,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;YACtC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAA;YAE3C,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACtC,CAAC,CAAC,IAAI,CACJ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACrI,CAAC,OAAO,CACP,CAAC,UAAU,EAAE,EAAE,CACb,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAClC,IAAI,CAAC,MAAM,CAAC,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,WAAY,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5H,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBACd,OAAO,OAAO,CAAA;YAChB,CAAC,CAAC,CACH,CAAC,CACL,CACA;YAAA,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CACzI,CAAC,UAAU,EAAE,EAAE,CACb,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAClC,IAAI,CAAC,MAAM,CAAC,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,WAAY,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnH,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBACd,OAAO,OAAO,CAAA;YAChB,CAAC,CAAC,CACH,CAAC,CACL,CAAA;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;KAAA;IAED,0BAA0B,CAAC,OAAuB,EAAE,IAAiB;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAY,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7E,IAAI,CAAC,CAAC,EAAE;gBACN,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;gBACzC,OAAO,IAAI,CAAC,MAAM;qBACf,2CAA2C,CAAC,CAAC,WAAY,CAAC,EAAE,WAAY,CAAC;qBACzE,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;oBACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAA,wBAAS,EAAC,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,MAAqB,CAAC,CAAA;gBAClH,CAAC,CAAC;qBACD,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE;oBACtB,CAAC;oBAAA,CAAC,OAAO,CAAC,WAAY,CAAC,WAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAY,CAAC,WAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CACrF,IAAI,mBAAU,CAAC;wBACb,KAAK,EAAE,WAAW;wBAClB,WAAW,EAAE,WAAW;wBACxB,GAAG,EAAE,cAAc;wBACnB,GAAG,EAAE,IAAA,qBAAM,EAAC,aAAa,CAAC;qBAC3B,CAAC,CACH,CAAA;oBACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBAC5G,CAAC,CAAC,CAAA;aACL;iBAAM;gBACL,OAAO,OAAO,CAAA;aACf;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,aAAa,CAAC,IAAqB;QACjC,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,qBAAqB,CAAC,IAAiB,EAAE,IAAqB;QAC5D,OAAO,IAAI;YACT,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACxD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACpC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,QAAQ,CACN,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,IAAa,EACb,IAAa,EACb,IAAc,EACd,IAAgC;QAEhC,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,gBAAgB,CACd,IAAiB,EACjB,WAAsC,EACtC,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,IAAa,EACb,IAAa,EACb,IAAc;QAEd,OAAO,KAAK;aACT,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;aACjF,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,4BAA4B,CAC1B,MAAc,EACd,UAAmB,EACnB,SAAkB,EAClB,QAAiB,EACjB,eAAwB,EACxB,KAAc;QAEd,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,oCAAoC,CAClC,IAAiB,EACjB,MAAc,EACd,UAAmB,EACnB,SAAkB,EAClB,QAAiB,EACjB,eAAwB,EACxB,KAAc;QAEd,OAAO,KAAK;aACT,4BAA4B,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC;aAC7F,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,8BAA8B,CAAC,UAAkB;QAC/C,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,wBAAwB,CAAC,IAAiB,EAAE,UAAkB;QAC5D,OAAO,KAAK;aACT,gBAAgB,CAAC,UAAU,CAAC;aAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;aAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IAED,uBAAuB,CACrB,iBAA0B,EAC1B,WAAoB,EACpB,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,aAAsB;QAEtB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,+BAA+B,CAC7B,IAAiB,EACjB,iBAA0B,EAC1B,WAAoB,EACpB,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,aAAsB;QAEtB,OAAO,KAAK;aACT,uBAAuB,CAAC,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,CAAC;aACxG,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,WAAW,CAAC,SAAkB,EAAE,QAAiB,EAAE,WAAoB;QACrE,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,mBAAmB,CAAC,IAAiB,EAAE,SAAkB,EAAE,QAAiB,EAAE,WAAoB;QAChG,OAAO,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACrG,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IACpC,CAAC;IAED,kBAAkB,CAAC,IAAiB,EAAE,SAAiB;QACrD,OAAO,KAAK;aACT,UAAU,CAAC,SAAS,CAAC;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;aAC9D,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAED,sCAAsC,CAAC,IAAiB,EAAE,SAAiB;QACzE,OAAO,KAAK;aACT,UAAU,CAAC,SAAS,CAAC;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;aAC9D,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAC;IAED,WAAW,CAAC,IAAuB;QACjC,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,mBAAmB,CAAC,IAAiB,EAAE,IAAuB;QAC5D,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,mBAAmB,CAAC,SAAkB,EAAE,OAAgB,EAAE,IAAc,EAAE,eAAwB,EAAE,KAAc;QAChH,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,2BAA2B,CACzB,IAAiB,EACjB,SAAkB,EAClB,OAAgB,EAChB,IAAc,EACd,eAAwB,EACxB,KAAc;QAEd,OAAO,KAAK;aACT,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC;aACrE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,qBAAqB,CAAC,SAAkB,EAAE,QAAiB;QACzD,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,iCAAiC,CAAC,IAAiB,EAAE,SAAkB,EAAE,QAAiB;QACxF,OAAO,KAAK,CAAC,yBAAyB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7G,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC5B,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,yBAAyB,CAAC,IAAiB,EAAE,IAAY;QACvD,OAAO,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IACtF,CAAC;IAED,2BAA2B,CAAC,IAAY,EAAE,QAAiB,EAAE,eAAwB,EAAE,KAAc;QACnG,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,mCAAmC,CACjC,IAAiB,EACjB,IAAY,EACZ,QAAiB,EACjB,eAAwB,EACxB,KAAc;QAEd,OAAO,KAAK;aACT,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC;aACnE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,YAAY,CAAC,SAAkB,EAAE,SAAkB,EAAE,QAAiB,EAAE,eAAwB,EAAE,KAAc,EAAE,aAAsB;QACtI,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,oBAAoB,CAClB,IAAiB,EACjB,SAAkB,EAClB,SAAkB,EAClB,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,aAAsB;QAEtB,OAAO,KAAK;aACT,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,CAAC;aACnF,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,qBAAqB,CACnB,SAAiB,EACjB,SAAkB,EAClB,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,aAAsB;QAEtB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,6BAA6B,CAC3B,IAAiB,EACjB,SAAiB,EACjB,SAAkB,EAClB,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,aAAsB;QAEtB,OAAO,KAAK;aACT,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,CAAC;aAC5F,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,qBAAqB,CACnB,SAAiB,EACjB,SAAkB,EAClB,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,aAAsB;QAEtB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,6BAA6B,CAC3B,IAAiB,EACjB,SAAiB,EACjB,SAAkB,EAClB,QAAiB,EACjB,eAAwB,EACxB,KAAc,EACd,aAAsB;QAEtB,OAAO,KAAK;aACT,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,CAAC;aAC5F,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,OAAe;QACrC,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,iBAAiB,CAAC,IAAiB,EAAE,IAAY,EAAE,OAAe;QAChE,OAAO,KAAK;aACT,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;aACxB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAC;IAED,aAAa,CAAC,IAAqB;QACjC,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,gBAAgB,CAAC,IAAqB;QACpC,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,qBAAqB,CAAC,IAAiB,EAAE,IAAqB;QAC5D,OAAO,IAAI;YACT,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;iBAClE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACpC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;;gBACb,CAAA,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,EAAE,KAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAA;gBACrD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;YAChB,CAAC,CAAC;YACN,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,qBAAqB,CAAC,SAAiB,EAAE,UAAkB,EAAE,KAAc,EAAE,GAAY;QACvF,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;IAC1G,CAAC;IAED,6BAA6B,CAC3B,IAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,KAAc,EACd,GAAY;QAEZ,OAAO,KAAK;aACT,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC;aACxD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;;YACb,CAAA,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,EAAE,KAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAA;YACrD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,OAAO,CAAC,IAAiB,EAAE,IAA2B;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEO,UAAU,CAAC,IAAiB,EAAE,IAA2B,EAAE,oBAA6B;QAC9F,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC1D,OAAO,OAAO,CAAC,GAAG,CAChB,IAAI,CAAC,GAAG,CAAC,CAAO,CAAC,EAAE,EAAE;YACnB,MAAM,yBAAyB,GAC7B,CAAC,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAC1H,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM;iBACpC,yCAAyC,CAAC,WAAY,EAAE,yBAAyB,CAAC,EAAG,EAAE,yBAAyB,CAAC,cAAe,CAAC;iBACjI,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAChB,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;YACJ,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,2CAA2C,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;YACtG,IAAI,SAAS,CAAC,MAAM,EAAE;gBACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,IAAA,qBAAM,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBACxE,OAAO,IAAA,aAAK,EACV,yBAAyB,EACzB,CAAC,GAA8B,EAAE,EAAE,CACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CACrB,GAAG,EACH,IAAA,uBAAQ,EACN,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC3B,OAAO,CAAC,YAAY,WAAW,IAAI,CAAC,YAAY,UAAU;wBACxD,CAAC,CAAC,IAAA,kBAAG,EAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACzE,CAAC,CAAC,CAAC,CAAA;gBACP,CAAC,CAAC,CACH,CACF,EACH,IAAI,CAAC,aAAa,CACnB,CAAA;aACF;iBAAM,IAAI,oBAAoB,EAAE;gBAC/B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;aAC/E;iBAAM;gBACL,MAAM,wBAAwB,GAAG,MAAM,IAAA,aAAK,EAC1C,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,EACtC,CAAO,GAA8B,EAAE,EAAE,gDAAC,OAAA,OAAO,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA,GAAA,EAC7E,IAAI,CAAC,aAAa,CACnB,CAAA;gBACD,IACE,CAAC,CAAC,CAAC,OAAO,CACR,CAAC,CAAC,MAAM,iCAAM,wBAAwB,KAAE,aAAa,EAAE,SAAS,KAAI,CAAC,CAAC,KAAK,CAAC,EAC5E,CAAC,CAAC,MAAM,iCAAM,yBAAyB,KAAE,aAAa,EAAE,SAAS,KAAI,CAAC,CAAC,KAAK,CAAC,CAC9E,EACD;oBACA,MAAM,KAAK,CAAC,8FAA8F,CAAC,CAAA;iBAC5G;gBACD,OAAO,yBAAyB,CAAA;aACjC;QACH,CAAC,CAAA,CAAC,CACH,CAAA;IACH,CAAC;IAED,qEAAqE;IACrE,OAAO,CAAC,IAAiB,EAAE,QAA+B,EAAE,eAAe,GAAG,IAAI;QAChF,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAChH,CAAC;IAEa,0BAA0B,CACtC,IAAiB,EACjB,QAA+B,EAC/B,eAAe,GAAG,IAAI;;YAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB;gBACvC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,8BAA8B,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACxE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YAEnC,iDAAiD;YACjD,MAAM,0BAA0B,GAAG,QAAQ,CAAC,MAAM,CAChD,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW;gBACb,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,WAAY,CAAC,EAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAY,CAAC,EAAG,CAAC,CAAC,MAAM,CAAC;gBACpE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAC1D,CAAA;YAED,MAAM,GAAG,GAAsC,eAAe;gBAC5D,CAAC,CAAC,MAAM,0BAA0B,CAAC,MAAM,CAAC,CAAO,GAAG,EAAE,CAAC,EAAE,EAAE;oBACvD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAA;oBACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;oBAChE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;oBACtD,uCAAY,IAAI,KAAE,CAAC,GAAG,CAAC,EAAG,CAAC,EAAE,EAAE,IAAI,GAAG,IAAE;gBAC1C,CAAC,CAAA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAuC,CAAC,CAAC;gBAC9D,CAAC,CAAC,EAAE,CAAA;YAEN,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ;iBACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAG,CAAC,IAAI,CAAC,CAAC;iBAC3B,GAAG,CAAC,CAAO,CAAC,EAAE,EAAE;gBACf,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAO,IAAI,EAAE,KAAK,EAAE,EAAE;;oBAC9D,OAAO,CACL,MAAA,CAAC,MAAM,IAAI,CAAC,mCACZ,CAAC,CAAC,CAAC,aAAa;wBACd,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM;6BACd,yCAAyC,CAAC,KAAM,EAAE,CAAC,CAAC,EAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAe,CAAC,CAAC,CAAC,CAAC,CAAC,WAAY,CAAC;6BACvH,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE;4BAChC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,2CAA2C,CAAC,IAAI,CAAC,CAAA;4BACpE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gCACzB,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;6BAClC;4BACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,IAAA,qBAAM,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACpE,IAAA,eAAO,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;iCAC7B,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gCACZ,MAAM,WAAW,GAAG,GAAG,IAAI,IAAA,sBAAO,EAAC,GAAG,CAAC,CAAA;gCACvC,IAAI;oCACF,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;iCAC/B;gCAAC,OAAO,CAAC,EAAE;oCACV,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,IAAI,iBAAiB,CAAC,CAAA;oCAC3E,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;iCAClC;4BACH,CAAC,CAAC;iCACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gCACb,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gCAChD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;4BACnC,CAAC,CAAC,CACL,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gCACX,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,WAAW,CAAC,EAAE;oCACpD,CAAC,CAAC,OAAO,GAAG,IAAA,qBAAO,EAAC,CAAC,CAAC,OAAO,CAAC,CAAA;iCAC/B;gCACD,OAAO,CAAC,CAAA;4BACV,CAAC,CAAC,CACH,CAAA;wBACH,CAAC,CAAC;wBACN,CAAC,CAAC,CAAC,CAAC,CACP,CAAA;gBACH,CAAC,CAAA,EAAE,OAAO,CAAC,OAAO,CAAC,SAAgC,CAAC,CAAC,CAAA;gBACrD,OAAO,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;YAC7G,CAAC,CAAA,CAAC,CACL,CAAA;QACH,CAAC;KAAA;IAED;sHACkH;IAClH,kBAAkB,CAAC,IAAiB,EAAE,GAAmB,EAAE,qBAAgC;QACzF,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC1D,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9I,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,WAAY,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACpE,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAC3B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAE,GAAG,CAAC,aAAyB,CAAC,CAAC,CAAC,GAAG,EAAE;gBAC/E,cAAc,EAAE,GAAG,CAAC,cAAc;aACnC,CAAC,CACH,CAAA;YACD,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,EAAE,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CACzE,CAAC,UAAU,EAAE,EAAE,CACb,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAClC,IAAI,CAAC,MAAM;iBACR,oBAAoB,CAAC,OAAO,EAAE,WAAY,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC;iBACrE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACjB,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE;oBACvC,cAAc,EAAE,QAAQ,CAAC,cAAc;iBACxC,CAAC,CAAA;YACJ,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;gBACtB,OAAO,OAAO,CAAA;YAChB,CAAC,CAAC,CACL,CAAC,CACL,CAAA;YACD,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CACH,IAAiB,EACjB,KAAa,EACb,OAAe,EACf,WAA0B,EAC1B,cAAgD,EAChD,YAAqB,KAAK;QAK1B,MAAM,qBAAqB,GAAG,CAC5B,IAAgI,EAChI,aAA2B,EAC3B,UAAkB,EAClB,OAA8B,EAC9B,EAAE;YACF,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACV,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;gBAChI,+CAA+C;gBAC/C,OAAO,IAAI,CAAC,MAAM;qBACf,+BAA+B,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;qBAC7G,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;oBAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;oBACd,OAAO,CAAC,CAAA;gBACV,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CACH,EACH,aAAa,CACd,CAAA;QACH,CAAC,CAAA;QAED,MAAM,OAAO,GAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;QAE1E,2KAA2K;QAC3K,MAAM,gBAAgB,GAAY,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;QAC7F,MAAM,mBAAmB,GAAG,IAAI,CAAA;QAChC,MAAM,uBAAuB,GAAY,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;QAEpG,qGAAqG;QACrG,MAAM,gBAAgB,GAAY,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;QAE9F,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;YAC7B,MAAM,MAAM,GAAG;gBACb,QAAQ,EAAE;oBACR,OAAO,EACL,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBACrI,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBACzF,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD,cAAc,EAAE;oBACd,OAAO,EACL,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBACrI,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD,QAAQ,EAAE;oBACR,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBAC3F,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD,SAAS,EAAE;oBACT,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBACzF,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD,eAAe,EAAE;oBACf,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBACzF,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD,aAAa,EAAE;oBACb,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBACzF,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAGlD;aACF,CAAA;YACD,OAAO,IAAA,aAAK,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBACrD,IAAI,CAAC,CAAC,OAAuB,EAAE,EAAE,CAChC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,MAAM;gBACxE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAuB,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CACxH;iBACA,IAAI,CAAC,CAAC,OAA8B,EAAE,EAAE;gBACvC,IAAI,CAAC,OAAO,EAAE;oBACZ,MAAM,CAAC,OAAO,GAAG;wBACf,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,IAAI,KAAK,CAAC,6DAA6D,CAAC;qBAChF,CAAA;oBACD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;iBAC/D;gBAED,OAAO,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;oBACrG,OAAO,OAAO,CAAC,MAAM;wBACnB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;4BACV,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,sEAAsE,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACnH,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,6DAA6D,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACrH,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,QAAQ;gCACN,CAAC,CAAC,CAAC,SAAS;oCACR,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,sEAAsE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oCACpH,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,6DAA6D,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACtH,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC1D,CAAC,CAAC,GAAG,CACR,CACkC;4BACrC,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,6DAA6D,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACtG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oDAAoD,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACxG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACd,QAAQ;gCACN,CAAC,CAAC,CAAC,SAAS;oCACR,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,6DAA6D,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oCACvG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oDAAoD,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACzG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC7D,CAAC,CAAC,IAAI,CACT,CAC6B;4BAChC,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,wCAAwC,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCAC1G,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACtF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACd,QAAQ;gCACN,CAAC,CAAC,CAAC,SAAS;oCACR,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,wCAAwC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oCAC3G,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACvF,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC7D,CAAC,CAAC,IAAI,CACT,CACgC;4BACnC,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gEAAgE,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCAC5G,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,uDAAuD,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9G,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,QAAQ;gCACN,CAAC,CAAC,IAAI,CAAC,UAAU;qCACZ,uDAAuD,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qCAC5F,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC3D,CAAC,CAAC,GAAG,CACR,CACkC;4BACrC,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,IAAI,CAAC,iBAAiB;iCACnB,8CAA8C,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iCAClF,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACZ,QAAQ;gCACN,CAAC,CAAC,IAAI,CAAC,iBAAiB;qCACnB,8CAA8C,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qCACnF,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC3D,CAAC,CAAC,GAAG,CACR,CACqC;4BAC1C,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,oCAAoC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACrF,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC3F,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,QAAQ;gCACN,CAAC,CAAC,CAAC,SAAS;oCACR,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,oCAAoC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oCACtF,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC5F,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC1D,CAAC,CAAC,GAAG,CACR,CACqC;yBACzC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;4BAC3C,MAAM,uBAAuB,GAAG,UAAU,CAAmB;gCAC3D,OAAO;oCACL,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;oCAClE,kBAAkB,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS;oCACvF,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;iCAC5E,CAAA;4BACH,CAAC,CAAA;4BAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAChC,EAAE,EAAE,CAAC,CAAC,EAAE,EACR,GAAG,EAAE,CAAC,CAAC,GAAG,IACP,uBAAuB,CAAC,CAAC,CAAC,EAC7B,CAAC,CAAA;4BACH,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,kBAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;4BACvF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,kBAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;4BACzF,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;4BACpF,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,gBAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;4BACrF,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,uBAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;4BAC5F,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,qBAAY,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;4BAE1F,MAAM,MAAM,GAA8B,EAAE,CAAA;4BAC5C,IAAI,CAAC,OAAO,CACV,CAAC,CAAiB,EAAE,EAAE,CACpB,CAAC,CAAC,QAAQ;gCACV,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACnI,CAAA;4BAED,OAAO,IAAA,aAAK,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,kBAAS,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAqB,EAAE,EAAE;gCAC5H,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gCAE1E,IAAI,aAAa,GAAiB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gCACvD,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;oCACjC,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;oCACvC,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE;wCACtC,eAAe;wCACf,qDAAqD;wCACrD,OAAO,gBAAgB;4CACrB,CAAC,CAAC,OAAO;4CACT,CAAC,CAAC,IAAI,CAAC,MAAM;iDACR,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;iDAC1F,IAAI,CAAC,CAAO,OAAO,EAAE,EAAE;gDACtB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oDACtB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAO,cAAuC,EAAE,MAAc,EAAE,EAAE;wDAC/F,MAAM,OAAO,GAAG,MAAM,cAAc,CAAA;wDACpC,OAAO,gBAAgB;4DACrB,CAAC,CAAC,OAAO;4DACT,CAAC,CAAC,IAAI,CAAC,MAAM;iEACR,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC;iEACjF,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;gEAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gEACd,OAAO,OAAO,CAAA;4DAChB,CAAC,CAAC,CAAA;oDACV,CAAC,CAAA,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;iDAC7B;gDACD,OAAO,OAAO,CAAA;4CAChB,CAAC,CAAA,CAAC;iDACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gDACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gDACd,OAAO,OAAO,CAAA;4CAChB,CAAC,CAAC,CAAA;oCACV,CAAC,CAAC,CACD;oCAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAC5G,CAAC,aAAa,GAAG,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CACjF;oCAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAC5D,CAAC,aAAa,GAAG,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAClF;oCAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAC5G,CAAC,aAAa,GAAG,qBAAqB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CACvF;oCAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAC5D,CAAC,aAAa,GAAG,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CACjF;oCAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAC5D,CAAC,aAAa,GAAG,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CACjF;oCAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAC9D,CAAC,aAAa,GAAG,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CACjF;oCAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAC5D,CAAC,aAAa,GAAG,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAA;gCAClF,CAAC,CAAC,CAAA;gCAEF,OAAO,aAAa;qCACjB,IAAI,CAAC,GAAG,EAAE;oCACT,oBAAoB;oCACpB,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCACrH,SAAS;wCACT,SAAS,CAAC,MAAM;wCAChB,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;wCACjC,IAAI,CAAC,UAAU;6CACZ,sBAAsB,CAAC,SAAS,CAAC;6CACjC,IAAI,CAAC,GAAG,EAAE;4CACT,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;4CAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAA;wCAC9C,CAAC,CAAC;6CACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wCAC/C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAClD,CAAA;gCACH,CAAC,CAAC;qCACD,IAAI,CAAC,GAAG,EAAE;oCACT,qBAAqB;oCACrB,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCACrH,GAAG;wCACH,GAAG,CAAC,MAAM;wCACV,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;wCACrB,IAAI,CAAC,WAAW;6CACb,4BAA4B,CAAC,GAAG,CAAC;6CACjC,IAAI,CAAC,GAAG,EAAE;4CACT,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAA;4CACpC,MAAM,CAAC,cAAc,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAA;wCAC9C,CAAC,CAAC;6CACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wCACrD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CACxD,CAAA;gCACH,CAAC,CAAC;qCACD,IAAI,CAAC,GAAG,EAAE;oCACT,oBAAoB;oCACpB,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAClE,IAAI;wCACJ,IAAI,CAAC,MAAM;wCACX,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;wCACvB,IAAI,CAAC,OAAO;6CACT,mBAAmB,CAAC,IAAI,CAAC;6CACzB,IAAI,CAAC,GAAG,EAAE;4CACT,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;4CAC3B,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAA;wCACtC,CAAC,CAAC;6CACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wCAC5C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAC/C,CAAA;gCACH,CAAC,CAAC;qCACD,IAAI,CAAC,GAAG,EAAE;oCACT,oBAAoB;oCACpB,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCACpE,GAAG;wCACH,GAAG,CAAC,MAAM;wCACV,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;wCACrB,IAAI,CAAC,UAAU;6CACZ,sBAAsB,CAAC,GAAG,CAAC;6CAC3B,IAAI,CAAC,GAAG,EAAE;4CACT,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;4CAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAA;wCACxC,CAAC,CAAC;6CACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wCAC/C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAClD,CAAA;gCACH,CAAC,CAAC;qCACD,IAAI,CAAC,GAAG,EAAE;oCACT,oBAAoB;oCACpB,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAClE,IAAI;wCACJ,IAAI,CAAC,MAAM;wCACX,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;wCACvB,IAAI,CAAC,WAAW;6CACb,uBAAuB,CAAC,IAAI,CAAC;6CAC7B,IAAI,CAAC,GAAG,EAAE;4CACT,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA;4CAC/B,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAA;wCAC1C,CAAC,CAAC;6CACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wCAChD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CACnD,CAAA;gCACH,CAAC,CAAC;qCACD,IAAI,CAAC,GAAG,EAAE;oCACT,qBAAqB;oCACrB,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAClE,GAAG;wCACH,GAAG,CAAC,MAAM;wCACV,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;wCACrB,IAAI,CAAC,iBAAiB;6CACnB,6BAA6B,CAAC,GAAG,CAAC;6CAClC,IAAI,CAAC,GAAG,EAAE;4CACT,MAAM,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;4CACrC,MAAM,CAAC,eAAe,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAA;wCAC/C,CAAC,CAAC;6CACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wCACtD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CACzD,CAAA;gCACH,CAAC,CAAC;qCACD,IAAI,CAAC,GAAG,EAAE;oCACT,qBAAqB;oCACrB,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wCAClE,GAAG;wCACH,GAAG,CAAC,MAAM;wCACV,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;wCACrB,IAAI,CAAC,eAAe;6CACjB,2BAA2B,CAAC,GAAG,CAAC;6CAChC,IAAI,CAAC,GAAG,EAAE;4CACT,MAAM,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAA;4CACnC,MAAM,CAAC,aAAa,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAA;wCAC7C,CAAC,CAAC;6CACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wCACpD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CACvD,CAAA;gCACH,CAAC,CAAC;qCACD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;qCACrD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oCACV,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;oCAC7B,OAAO,CAAC,GAAG,CACT,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,SAAS,MAAM,CAAC,cAAc,CAAC,QAAQ,WAAW,MAAM,CAAC,SAAS,CAAC,QAAQ,WAAW,MAAM,CAAC,KAAK,CAAC,QAAQ,UAAU,MAAM,CAAC,QAAQ,CAAC,QAAQ,UAAU,MAAM,CAAC,aAAa,CAAC,QAAQ,UAAU,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAC9P,CAAA;oCACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;gCACzC,CAAC,CAAC;qCACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oCACX,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAA;oCACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;gCAC/C,CAAC,CAAC,CAAA;4BACN,CAAC,CAAC,CAAA;wBACJ,CAAC,CAAC;wBACJ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC;4BAC9C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;4BAC1B,CAAC,CAAC,IAAI,CAAC,qBAAqB,CACxB,IAAI,EACJ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;gCAChB,WAAW,EAAE,CAAC,CAAC,MAAM,CACnB,OAAO,CAAC,WAAW,EACnB,WAAW;qCACR,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC;qCACzG,MAAM,CAAC,CAAC,GAAG,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CACzG;6BACF,CAAC,CACH,CACJ;6BACE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;4BACV,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;4BAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;wBACzC,CAAC,CAAC;6BACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;4BACX,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAA;4BACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;wBAC/C,CAAC,CAAC,CAAA;gBACV,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,IAAiB,EAAE,KAAa,EAAE,OAAe,EAAE,YAAqB,KAAK;QAClF,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;YAE7B,OAAO,IAAA,aAAK,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBACrD,IAAI,CAAC,CAAC,OAAuB,EAAE,EAAE,CAChC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,MAAM;gBACxE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAuB,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CACxH;iBACA,IAAI,CAAC,CAAC,OAA8B,EAAE,EAAE;gBACvC,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;iBACtC;gBAED,OAAO,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;oBACrG,OAAO,OAAO,CAAC,MAAM;wBACnB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;4BACV,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,oCAAoC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACjF,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACvF,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,QAAQ;gCACN,CAAC,CAAC,IAAI,CAAC,WAAW;qCACb,+BAA+B,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qCACpE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC3D,CAAC,CAAC,GAAG,CACR,CACkC;4BACrC,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,6CAA6C,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACvH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACxF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACd,QAAQ;gCACN,CAAC,CAAC,CAAC,SAAS;oCACR,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,6CAA6C,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oCACxH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACzF,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC7D,CAAC,CAAC,IAAI,CACT,CAC6B;4BAChC,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,oCAAoC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCAChF,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACtF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACd,QAAQ;gCACN,CAAC,CAAC,CAAC,SAAS;oCACR,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,oCAAoC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oCACjF,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACvF,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC7D,CAAC,CAAC,IAAI,CACT,CACgC;4BACnC,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,CAAC,SAAS;gCACR,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gDAAgD,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCAC5F,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,uCAAuC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9F,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,QAAQ;gCACN,CAAC,CAAC,CAAC,SAAS;oCACR,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gDAAgD,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oCAC7F,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,uCAAuC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/F,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC1D,CAAC,CAAC,GAAG,CACR,CACkC;4BACrC,IAAA,aAAK,EAAC,GAAG,EAAE,CACT,IAAI,CAAC,iBAAiB;iCACnB,8CAA8C,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iCAClF,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACZ,QAAQ;gCACN,CAAC,CAAC,IAAI,CAAC,iBAAiB;qCACnB,8CAA8C,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qCACnF,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gCAC3D,CAAC,CAAC,GAAG,CACR,CACqC;4BAC1C,IAAA,aAAK,EAAC,GAAS,EAAE;gCACf,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gCAChD,IAAI;oCACF,IAAI,aAAa,GAAG,MAAM,CAAC,SAAS;wCAClC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,oCAAoC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wCACrF,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;oCAE7F,IAAI,QAAQ,EAAE;wCACZ,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS;4CACxC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,oCAAoC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;4CACtF,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;wCAC9F,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAA;qCACxE;oCAED,OAAO,aAAa,CAAA;iCACrB;gCAAC,OAAO,EAAE,EAAE;oCACX,OAAO,CAAC,GAAG,CAAC,yDAAyD,OAAO,MAAM,EAAE,EAAE,CAAC,CAAA;oCACvF,UAAU;iCACX;4BACH,CAAC,CAAA,CAAwC;yBAC1C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;4BAC3C,MAAM,MAAM,GAA8B,EAAE,CAAA;4BAC5C,IAAI,CAAC,OAAO,CACV,CAAC,CAAiB,EAAE,EAAE,CACpB,CAAC,CAAC,QAAQ;gCACV,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACnI,CAAA;4BAED,OAAO,IAAA,aAAK,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,kBAAS,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAqB,EAAE,EAAE;gCAC5H,OAAO;oCACL,EAAE,EAAE,KAAK;oCACT,OAAO,EAAE,OAAO;oCAChB,QAAQ,EAAE,IAAI;oCACd,KAAK,EAAE,IAAI;oCACX,cAAc,EAAE,GAAG;oCACnB,QAAQ,EAAE,GAAG;oCACb,eAAe,EAAE,GAAG;oCACpB,QAAQ,EAAE,GAAG;oCACb,SAAS,EAAE,IAAI;iCAChB,CAAA;4BACH,CAAC,CAAC,CAAA;wBACJ,CAAC,CAAC;wBACJ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;4BACd,EAAE,EAAE,KAAK;4BACT,OAAO,EAAE,OAAO;4BAChB,QAAQ,EAAE,EAAE;4BACZ,KAAK,EAAE,EAAE;4BACT,cAAc,EAAE,EAAE;4BAClB,QAAQ,EAAE,EAAE;4BACZ,eAAe,EAAE,EAAE;4BACnB,QAAQ,EAAE,EAAE;4BACZ,SAAS,EAAE,EAAE;yBACd,CAAC,CAAA;gBACR,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;QAEhE,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACzC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3C,IAAI,MAAM,GAAG,KAAK,CAAA;QAElB,gBAAgB;QAChB,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA;QAE5C,mDAAmD;QACnD,MAAM,YAAY,GAAG,EAAE,GAAG,QAAQ,CAAA;QAElC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,YAAY,EAAE;YACxC,MAAM,GAAG,IAAI,CAAA;SACd;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;QACpD,IAAI,WAAW,GAAG,KAAK,CAAA;QAEvB,MAAM,YAAY,GAChB,0IAA0I,CAAC,IAAI,CAC7I,IAAI,CACL,CAAA;QACH,MAAM,SAAS,GAAG,+FAA+F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5H,MAAM,SAAS,GAAG,+FAA+F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE5H,IAAI,YAAY,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1C,WAAW;gBACT,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACjE,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;SAChF;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAEK,8CAA8C,CAClD,aAAuF,EACvF,KAAa;;;;;YAEb,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAA;YAEhG,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;YAE3D,IAAI,iBAAiB,EAAE;gBACrB,MAAM,yBAAyB,GAAG,aAAa,CAAC,EAAE,GAAG,uDAAuD,GAAG,KAAK,CAAA;aACrH;YAED,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;YAExC,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,sDAAsD,GAAG,aAAa,CAAC,EAAE,GAAG,cAAc,GAAG,KAAK,CAAA;aACzG;YAED,IAAI,OAAO,GAAmB,MAAM,OAAM,UAAU,YAAC,QAAS,CAAC,CAAA;YAE/D,IAAI,UAAU,GAAG,CAAC,CAAA;YAClB,MAAM,aAAa,GAAG,EAAE,CAAA;YACxB,OAAO,OAAO,CAAC,gBAAgB,EAAE;gBAC/B,UAAU,EAAE,CAAA;gBACZ,IAAI,UAAU,KAAK,aAAa,EAAE;oBAChC,MAAM,gEAAgE,GAAG,aAAa,CAAC,EAAE,GAAG,YAAY,GAAG,KAAK,CAAA;iBACjH;gBAED,OAAO,GAAG,MAAM,OAAM,UAAU,YAAC,OAAO,CAAC,gBAAiB,CAAC,CAAA;aAC5D;YAED,OAAO,OAAO,CAAC,EAAG,CAAA;QACpB,CAAC;KAAA;CACF;AA1wCD,wCA0wCC","sourcesContent":["import { IccPatientApi } from '../icc-api'\nimport { IccCryptoXApi } from './icc-crypto-x-api'\nimport { IccContactXApi } from './icc-contact-x-api'\nimport { IccFormXApi } from './icc-form-x-api'\nimport { IccHcpartyXApi } from './icc-hcparty-x-api'\nimport { IccInvoiceXApi } from './icc-invoice-x-api'\nimport { IccDocumentXApi } from './icc-document-x-api'\nimport { IccHelementXApi } from './icc-helement-x-api'\nimport { IccClassificationXApi } from './icc-classification-x-api'\n\nimport * as _ from 'lodash'\nimport * as models from '../icc-api/model/models'\nimport {\n CalendarItem,\n Classification,\n Delegation,\n Device,\n Document,\n HealthcareParty,\n IcureStub,\n Invoice,\n ListOfIds,\n Patient,\n} from '../icc-api/model/models'\nimport { IccCalendarItemXApi } from './icc-calendar-item-x-api'\nimport { b64_2ab } from '../icc-api/model/ModelHelper'\nimport { b2a, hex2ua, string2ua, ua2hex, ua2utf8, utf8_2ua } from './utils/binary-utils'\nimport { findName, garnishPersonWithName, hasName } from './utils/person-util'\nimport { crypt, decrypt, retry } from './utils'\nimport { IccDataOwnerXApi } from './icc-data-owner-x-api'\nimport { AuthenticationProvider, NoAuthenticationProvider } from './auth/AuthenticationProvider'\n\n// noinspection JSUnusedGlobalSymbols\nexport class IccPatientXApi extends IccPatientApi {\n crypto: IccCryptoXApi\n contactApi: IccContactXApi\n formApi: IccFormXApi\n helementApi: IccHelementXApi\n invoiceApi: IccInvoiceXApi\n hcpartyApi: IccHcpartyXApi\n documentApi: IccDocumentXApi\n classificationApi: IccClassificationXApi\n calendarItemApi: IccCalendarItemXApi\n dataOwnerApi: IccDataOwnerXApi\n\n private readonly encryptedKeys: Array<string>\n\n constructor(\n host: string,\n headers: { [key: string]: string },\n crypto: IccCryptoXApi,\n contactApi: IccContactXApi,\n formApi: IccFormXApi,\n helementApi: IccHelementXApi,\n invoiceApi: IccInvoiceXApi,\n documentApi: IccDocumentXApi,\n hcpartyApi: IccHcpartyXApi,\n classificationApi: IccClassificationXApi,\n dataOwnerApi: IccDataOwnerXApi,\n calendarItemaApi: IccCalendarItemXApi,\n encryptedKeys: Array<string> = ['note'],\n authenticationProvider: AuthenticationProvider = new NoAuthenticationProvider(),\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch\n ) {\n super(host, headers, authenticationProvider, fetchImpl)\n this.crypto = crypto\n this.contactApi = contactApi\n this.formApi = formApi\n this.helementApi = helementApi\n this.invoiceApi = invoiceApi\n this.hcpartyApi = hcpartyApi\n this.documentApi = documentApi\n this.classificationApi = classificationApi\n this.calendarItemApi = calendarItemaApi\n this.dataOwnerApi = dataOwnerApi\n\n this.encryptedKeys = encryptedKeys\n }\n\n // noinspection JSUnusedGlobalSymbols\n newInstance(user: models.User, p: any = {}, delegates: string[] = []) {\n const patient = _.extend(\n {\n id: this.crypto.randomUuid(),\n _type: 'org.taktik.icure.entities.Patient',\n created: new Date().getTime(),\n modified: new Date().getTime(),\n responsible: this.dataOwnerApi.getDataOwnerOf(user),\n author: user.id,\n codes: [],\n tags: [],\n },\n p || {}\n )\n return this.initDelegationsAndEncryptionKeys(patient, user, undefined, delegates)\n }\n\n completeNames(patient: models.Patient): models.Patient {\n let finalPatient = patient\n\n if (!!finalPatient.lastName && !hasName(finalPatient, models.PersonName.UseEnum.Official)) {\n finalPatient = garnishPersonWithName(finalPatient, models.PersonName.UseEnum.Official, finalPatient.lastName, finalPatient.firstName)\n }\n\n if (!!finalPatient.maidenName && !hasName(finalPatient, models.PersonName.UseEnum.Maiden)) {\n finalPatient = garnishPersonWithName(finalPatient, models.PersonName.UseEnum.Maiden, finalPatient.maidenName, finalPatient.firstName)\n }\n\n if (!!finalPatient.alias && !hasName(finalPatient, models.PersonName.UseEnum.Nickname)) {\n finalPatient = garnishPersonWithName(finalPatient, models.PersonName.UseEnum.Nickname, finalPatient.alias, finalPatient.firstName)\n }\n\n if (!finalPatient.lastName && !!hasName(finalPatient, models.PersonName.UseEnum.Official)) {\n const officialName = findName(finalPatient, models.PersonName.UseEnum.Official)\n finalPatient = {\n ...finalPatient,\n lastName: officialName!.lastName,\n firstName: officialName!.firstNames?.[0],\n }\n }\n\n if (!finalPatient.maidenName && !!hasName(finalPatient, models.PersonName.UseEnum.Maiden)) {\n finalPatient = {\n ...finalPatient,\n maidenName: findName(finalPatient, models.PersonName.UseEnum.Maiden)!.lastName,\n }\n }\n\n if (!finalPatient.alias && !!hasName(finalPatient, models.PersonName.UseEnum.Nickname)) {\n finalPatient = {\n ...finalPatient,\n alias: findName(finalPatient, models.PersonName.UseEnum.Nickname)!.lastName,\n }\n }\n\n return finalPatient\n }\n\n async initDelegationsAndEncryptionKeys(\n patient: models.Patient,\n user: models.User,\n secretForeignKey: string | undefined = undefined,\n delegates: string[] = []\n ): Promise<models.Patient> {\n function updatePatientWithDataOwnerIfSame(dataOwner: Patient | Device | HealthcareParty) {\n if (dataOwner.id === patient.id) {\n _.extend(patient, {\n rev: dataOwner.rev,\n publicKey: dataOwner.publicKey,\n aesExchangeKeys: dataOwner.aesExchangeKeys,\n hcPartyKeys: dataOwner.hcPartyKeys,\n })\n }\n }\n\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n const dels = await this.crypto.initObjectDelegations(patient, null, dataOwnerId!, null)\n updatePatientWithDataOwnerIfSame(dels.owner)\n const eks = await this.crypto.initEncryptionKeys(patient, dataOwnerId!)\n updatePatientWithDataOwnerIfSame(eks.modifiedOwner)\n patient.delegations = dels.delegations\n patient.encryptionKeys = eks.encryptionKeys\n\n let promise = Promise.resolve(patient)\n _.uniq(\n delegates.concat(user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : [])\n ).forEach(\n (delegateId) =>\n (promise = promise.then((patient) =>\n this.crypto.addDelegationsAndEncryptionKeys(null, patient, dataOwnerId!, delegateId, dels.secretId, eks.secretId).catch((e) => {\n console.log(e)\n return patient\n })\n ))\n )\n ;(user.autoDelegations && user.autoDelegations.anonymousMedicalInformation ? user.autoDelegations.anonymousMedicalInformation : []).forEach(\n (delegateId) =>\n (promise = promise.then((patient) =>\n this.crypto.addDelegationsAndEncryptionKeys(null, patient, dataOwnerId!, delegateId, null, eks.secretId).catch((e) => {\n console.log(e)\n return patient\n })\n ))\n )\n return promise\n }\n\n initConfidentialDelegation(patient: models.Patient, user: models.User): Promise<models.Patient | null> {\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n return this.crypto.extractPreferredSfk(patient, dataOwnerId!, true).then((k) => {\n if (!k) {\n const secretId = this.crypto.randomUuid()\n return this.crypto\n .decryptAndImportAesHcPartyKeysForDelegators([dataOwnerId!], dataOwnerId!)\n .then((hcPartyKeys) => {\n return this.crypto.AES.encrypt(hcPartyKeys[0].key, string2ua(patient.id + ':' + secretId).buffer as ArrayBuffer)\n })\n .then((newDelegation) => {\n ;(patient.delegations![dataOwnerId!] || (patient.delegations![dataOwnerId!] = [])).push(\n new Delegation({\n owner: dataOwnerId,\n delegatedTo: dataOwnerId,\n tag: 'confidential',\n key: ua2hex(newDelegation),\n })\n )\n return patient.rev ? this.modifyPatientWithUser(user, patient) : this.createPatientWithUser(user, patient)\n })\n } else {\n return patient\n }\n })\n }\n\n createPatient(body?: models.Patient): never {\n throw new Error('Cannot call a method that returns patients without providing a user for de/encryption')\n }\n\n createPatientWithUser(user: models.User, body?: models.Patient): Promise<models.Patient | any> {\n return body\n ? this.encrypt(user, [_.cloneDeep(this.completeNames(body))])\n .then((pats) => super.createPatient(pats[0]))\n .then((p) => this.decrypt(user, [p]))\n .then((pats) => pats[0])\n : Promise.resolve(null)\n }\n\n filterBy(\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n skip?: number,\n sort?: string,\n desc?: boolean,\n body?: models.FilterChainPatient\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n filterByWithUser(\n user: models.User,\n filterChain: models.FilterChainPatient,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n skip?: number,\n sort?: string,\n desc?: boolean\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .filterPatientsBy(startKey, startDocumentId, limit, skip, sort, desc, filterChain)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n findByAccessLogUserAfterDate(\n userId: string,\n accessType?: string,\n startDate?: number,\n startKey?: string,\n startDocumentId?: string,\n limit?: number\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n findByAccessLogUserAfterDateWithUser(\n user: models.User,\n userId: string,\n accessType?: string,\n startDate?: number,\n startKey?: string,\n startDocumentId?: string,\n limit?: number\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .findByAccessLogUserAfterDate(userId, accessType, startDate, startKey, startDocumentId, limit)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n findByAccessLogUserAfterDate_1(externalId: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n findByExternalIdWithUser(user: models.User, externalId: string): Promise<models.Patient | any> {\n return super\n .findByExternalId(externalId)\n .then((pats) => this.decrypt(user, [pats]))\n .then((x) => x[0])\n }\n\n findByNameBirthSsinAuto(\n healthcarePartyId?: string,\n filterValue?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n findByNameBirthSsinAutoWithUser(\n user: models.User,\n healthcarePartyId?: string,\n filterValue?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .findByNameBirthSsinAuto(healthcarePartyId, filterValue, startKey, startDocumentId, limit, sortDirection)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n fuzzySearch(firstName?: string, lastName?: string, dateOfBirth?: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n fuzzySearchWithUser(user: models.User, firstName?: string, lastName?: string, dateOfBirth?: number): Promise<Array<models.Patient> | any> {\n return super.fuzzySearch(firstName, lastName, dateOfBirth).then((pats) => this.decrypt(user, pats))\n }\n\n getPatient(patientId: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n getPatientRaw(patientId: string): Promise<models.Patient | any> {\n return super.getPatient(patientId)\n }\n\n getPatientWithUser(user: models.User, patientId: string): Promise<models.Patient | any> {\n return super\n .getPatient(patientId)\n .then((p) => this.tryDecryptOrReturnOriginal(user, [p], false))\n .then((pats) => pats[0].patient)\n }\n\n getPotentiallyEncryptedPatientWithUser(user: models.User, patientId: string): Promise<{ patient: models.Patient; decrypted: boolean }> {\n return super\n .getPatient(patientId)\n .then((p) => this.tryDecryptOrReturnOriginal(user, [p], false))\n .then((pats) => pats[0])\n }\n\n getPatients(body?: models.ListOfIds): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n getPatientsWithUser(user: models.User, body?: models.ListOfIds): Promise<Array<models.Patient> | any> {\n return super.getPatients(body).then((pats) => this.decrypt(user, pats))\n }\n\n listDeletedPatients(startDate?: number, endDate?: number, desc?: boolean, startDocumentId?: string, limit?: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listDeletedPatientsWithUser(\n user: models.User,\n startDate?: number,\n endDate?: number,\n desc?: boolean,\n startDocumentId?: string,\n limit?: number\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listDeletedPatients(startDate, endDate, desc, startDocumentId, limit)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n listDeletedPatients_2(firstName?: string, lastName?: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listDeletedPatientsByNameWithUser(user: models.User, firstName?: string, lastName?: string): Promise<Array<models.Patient> | any> {\n return super.listDeletedPatientsByName(firstName, lastName).then((rows) => this.decrypt(user, rows, false))\n }\n\n listOfMergesAfter(date: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listOfMergesAfterWithUser(user: models.User, date: number): Promise<Array<models.Patient> | any> {\n return super.listOfMergesAfter(date).then((pats) => this.decrypt(user, pats, false))\n }\n\n listOfPatientsModifiedAfter(date: number, startKey?: number, startDocumentId?: string, limit?: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listOfPatientsModifiedAfterWithUser(\n user: models.User,\n date: number,\n startKey?: number,\n startDocumentId?: string,\n limit?: number\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listOfPatientsModifiedAfter(date, startKey, startDocumentId, limit)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n listPatients(hcPartyId?: string, sortField?: string, startKey?: string, startDocumentId?: string, limit?: number, sortDirection?: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listPatientsWithUser(\n user: models.User,\n hcPartyId?: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listPatients(hcPartyId, sortField, startKey, startDocumentId, limit, sortDirection)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n listPatientsByHcParty(\n hcPartyId: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listPatientsByHcPartyWithUser(\n user: models.User,\n hcPartyId: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listPatientsByHcParty(hcPartyId, sortField, startKey, startDocumentId, limit, sortDirection)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n listPatientsOfHcParty(\n hcPartyId: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n listPatientsOfHcPartyWithUser(\n user: models.User,\n hcPartyId: string,\n sortField?: string,\n startKey?: string,\n startDocumentId?: string,\n limit?: number,\n sortDirection?: string\n ): Promise<models.PaginatedListPatient | any> {\n return super\n .listPatientsOfHcParty(hcPartyId, sortField, startKey, startDocumentId, limit, sortDirection)\n .then((pl) => this.decrypt(user, pl.rows!, false).then((dr) => Object.assign(pl, { rows: dr })))\n }\n\n mergeInto(toId: string, fromIds: string): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n mergeIntoWithUser(user: models.User, toId: string, fromIds: string): Promise<models.Patient | any> {\n return super\n .mergeInto(toId, fromIds)\n .then((p) => this.decrypt(user, [p]))\n .then((pats) => pats[0])\n }\n\n modifyPatient(body?: models.Patient): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n modifyPatientRaw(body?: models.Patient): Promise<models.Patient | any> {\n return super.modifyPatient(body)\n }\n\n modifyPatientWithUser(user: models.User, body?: models.Patient): Promise<models.Patient | null> {\n return body\n ? this.tryEncrypt(user, [_.cloneDeep(this.completeNames(body))], false)\n .then((pats) => super.modifyPatient(pats[0]))\n .then((p) => this.decrypt(user, [p]))\n .then((pats) => {\n pats[0]?.id && this.crypto.emptyHcpCache(pats[0].id!)\n return pats[0]\n })\n : Promise.resolve(null)\n }\n\n modifyPatientReferral(patientId: string, referralId: string, start?: number, end?: number): never {\n throw new Error('Cannot call a method that returns contacts without providing a user for de/encryption')\n }\n\n modifyPatientReferralWithUser(\n user: models.User,\n patientId: string,\n referralId: string,\n start?: number,\n end?: number\n ): Promise<models.Patient | any> {\n return super\n .modifyPatientReferral(patientId, referralId, start, end)\n .then((p) => this.decrypt(user, [p]))\n .then((pats) => {\n pats[0]?.id && this.crypto.emptyHcpCache(pats[0].id!)\n return pats[0]\n })\n }\n\n encrypt(user: models.User, pats: Array<models.Patient>): Promise<Array<models.Patient>> {\n return this.tryEncrypt(user, pats, true)\n }\n\n private tryEncrypt(user: models.User, pats: Array<models.Patient>, requireAccessibleKey: boolean): Promise<Array<models.Patient>> {\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n return Promise.all(\n pats.map(async (p) => {\n const patientWithInitialisedEks =\n p.encryptionKeys && Object.values(p.encryptionKeys).some((v) => !!v.length) ? p : await this.initEncryptionKeys(user, p)\n const decryptedKeys = await this.crypto\n .extractKeysFromDelegationsForHcpHierarchy(dataOwnerId!, patientWithInitialisedEks.id!, patientWithInitialisedEks.encryptionKeys!)\n .catch((e) => {\n console.error(e)\n throw e\n })\n const fixedKeys = this.crypto.filterAndFixValidEntityEncryptionKeyStrings(decryptedKeys.extractedKeys)\n if (fixedKeys.length) {\n const key = await this.crypto.AES.importKey('raw', hex2ua(fixedKeys[0]))\n return crypt(\n patientWithInitialisedEks,\n (obj: { [key: string]: string }) =>\n this.crypto.AES.encrypt(\n key,\n utf8_2ua(\n JSON.stringify(obj, (k, v) => {\n return v instanceof ArrayBuffer || v instanceof Uint8Array\n ? b2a(new Uint8Array(v).reduce((d, b) => d + String.fromCharCode(b), ''))\n : v\n })\n )\n ),\n this.encryptedKeys\n )\n } else if (requireAccessibleKey) {\n throw new Error(`Current data owner can't access any key of patient ${p.id}.`)\n } else {\n const cryptedCopyWithRandomKey = await crypt(\n _.cloneDeep(patientWithInitialisedEks),\n async (obj: { [key: string]: string }) => Promise.resolve(new ArrayBuffer(1)),\n this.encryptedKeys\n )\n if (\n !_.isEqual(\n _.omitBy({ ...cryptedCopyWithRandomKey, encryptedSelf: undefined }, _.isNil),\n _.omitBy({ ...patientWithInitialisedEks, encryptedSelf: undefined }, _.isNil)\n )\n ) {\n throw Error(\"You can't modify encrypted data of a patient if you don't have access to his encryption key.\")\n }\n return patientWithInitialisedEks\n }\n })\n )\n }\n\n // If patient can't be decrypted returns patient with encrypted data.\n decrypt(user: models.User, patients: Array<models.Patient>, fillDelegations = true): Promise<Array<models.Patient>> {\n return this.tryDecryptOrReturnOriginal(user, patients, fillDelegations).then((ps) => ps.map((p) => p.patient))\n }\n\n private async tryDecryptOrReturnOriginal(\n user: models.User,\n patients: Array<models.Patient>,\n fillDelegations = true\n ): Promise<{ patient: models.Patient; decrypted: boolean }[]> {\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n const ids = await (user.healthcarePartyId\n ? this.hcpartyApi.getHealthcarePartyHierarchyIds(user.healthcarePartyId)\n : Promise.resolve([dataOwnerId]))\n\n //First check that we have no dangling delegation\n const patsWithMissingDelegations = patients.filter(\n (p) =>\n p.delegations &&\n ids.some((id) => p.delegations![id!] && !p.delegations![id!].length) &&\n !Object.values(p.delegations).some((d) => d.length > 0)\n )\n\n const acc: { [key: string]: models.Patient } = fillDelegations\n ? await patsWithMissingDelegations.reduce(async (acc, p) => {\n const pats = await acc\n const pat = await this.initDelegationsAndEncryptionKeys(p, user)\n const mp = await this.modifyPatientWithUser(user, pat)\n return { ...pats, [pat.id!]: mp || pat }\n }, Promise.resolve({} as { [key: string]: models.Patient }))\n : {}\n\n return Promise.all(\n patients\n .map((p) => acc[p.id!] || p)\n .map(async (p) => {\n const decryptedPatient = await ids.reduce(async (decP, hcpId) => {\n return (\n (await decP) ??\n (p.encryptedSelf\n ? await this.crypto\n .extractKeysFromDelegationsForHcpHierarchy(hcpId!, p.id!, _.size(p.encryptionKeys) ? p.encryptionKeys! : p.delegations!)\n .then(({ extractedKeys: sfks }) => {\n sfks = this.crypto.filterAndFixValidEntityEncryptionKeyStrings(sfks)\n if (!sfks || !sfks.length) {\n return Promise.resolve(undefined)\n }\n return this.crypto.AES.importKey('raw', hex2ua(sfks[0])).then((key) =>\n decrypt(p, (ec) =>\n this.crypto.AES.decrypt(key, ec)\n .then((dec) => {\n const jsonContent = dec && ua2utf8(dec)\n try {\n return JSON.parse(jsonContent)\n } catch (e) {\n console.log('Cannot parse patient', p.id, jsonContent || 'Invalid content')\n return Promise.resolve(undefined)\n }\n })\n .catch((err) => {\n console.log('Cannot decrypt patient', p.id, err)\n return Promise.resolve(undefined)\n })\n ).then((p) => {\n if (p.picture && !(p.picture instanceof ArrayBuffer)) {\n p.picture = b64_2ab(p.picture)\n }\n return p\n })\n )\n })\n : p)\n )\n }, Promise.resolve(undefined as Patient | undefined))\n return decryptedPatient ? { patient: decryptedPatient, decrypted: true } : { patient: p, decrypted: false }\n })\n )\n }\n\n /** By default, an encryptionKey will be added for every hcp in the autoDelegations of the provided user.\n * In optional field additionalDelegateIds, you can ask the method to create encryptionKeys for additional hcps */\n initEncryptionKeys(user: models.User, pat: models.Patient, additionalDelegateIds?: string[]): Promise<models.Patient> {\n const dataOwnerId = this.dataOwnerApi.getDataOwnerOf(user)\n const userAutoDelegations = user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : []\n return this.crypto.initEncryptionKeys(pat, dataOwnerId!).then((eks) => {\n let promise = Promise.resolve(\n _.extend(pat.id === eks.modifiedOwner.id ? (eks.modifiedOwner as Patient) : pat, {\n encryptionKeys: eks.encryptionKeys,\n })\n )\n new Set([...userAutoDelegations, ...(additionalDelegateIds || [])]).forEach(\n (delegateId) =>\n (promise = promise.then((patient) =>\n this.crypto\n .appendEncryptionKeys(patient, dataOwnerId!, delegateId, eks.secretId)\n .then((extraEks) => {\n return _.extend(extraEks.modifiedObject, {\n encryptionKeys: extraEks.encryptionKeys,\n })\n })\n .catch((e) => {\n console.log(e.message)\n return patient\n })\n ))\n )\n return promise\n })\n }\n\n share(\n user: models.User,\n patId: string,\n ownerId: string,\n delegateIds: Array<string>,\n delegationTags: { [key: string]: Array<string> },\n usingPost: boolean = false\n ): Promise<{\n patient: models.Patient | null\n statuses: { [key: string]: { success: boolean | null; error: Error | null } }\n } | null> {\n const addDelegationsAndKeys = (\n dtos: Array<models.Form | models.Document | models.Contact | models.HealthElement | models.Classification | models.CalendarItem>,\n markerPromise: Promise<any>,\n delegateId: string,\n patient: models.Patient | null\n ) => {\n return dtos.reduce(\n (p, x) =>\n p.then(() =>\n Promise.all([this.crypto.extractDelegationsSFKs(x, ownerId), this.crypto.extractEncryptionsSKs(x, ownerId)]).then(([sfks, eks]) => {\n //console.log(`share ${x.id} to ${delegateId}`)\n return this.crypto\n .addDelegationsAndEncryptionKeys(patient, x, ownerId, delegateId, sfks.extractedKeys[0], eks.extractedKeys[0])\n .catch((e: any) => {\n console.log(e)\n return x\n })\n })\n ),\n markerPromise\n )\n }\n\n const allTags: string[] = _.uniq(_.flatMap(Object.values(delegationTags)))\n\n // Determine which keys to share, depending on the delegation tag. For example, anonymousMedicalData only shares encryption keys and no delegations or secret foreign keys.\n const shareDelegations: boolean = allTags.some((tag) => tag != 'anonymousMedicalInformation')\n const shareEncryptionKeys = true\n const shareCryptedForeignKeys: boolean = allTags.some((tag) => tag != 'anonymousMedicalInformation')\n\n // Anonymous sharing, will not change anything to the patient, only its contacts and health elements.\n const shareAnonymously: boolean = allTags.every((tag) => tag == 'anonymousMedicalInformation')\n\n return this.hcpartyApi.getHealthcareParty(ownerId).then((hcp) => {\n const parentId = hcp.parentId\n const status = {\n contacts: {\n success:\n allTags.includes('medicalInformation') || allTags.includes('anonymousMedicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n forms: {\n success: allTags.includes('medicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n healthElements: {\n success:\n allTags.includes('medicalInformation') || allTags.includes('anonymousMedicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n invoices: {\n success: allTags.includes('financialInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n documents: {\n success: allTags.includes('medicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n classifications: {\n success: allTags.includes('medicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n calendarItems: {\n success: allTags.includes('medicalInformation') || allTags.includes('all') ? false : null,\n error: null,\n modified: 0,\n },\n patient: { success: false, error: null, modified: 0 } as {\n success: boolean\n error: Error | null\n },\n }\n return retry(() => this.getPatientWithUser(user, patId))\n .then((patient: models.Patient) =>\n patient.encryptionKeys && Object.keys(patient.encryptionKeys || {}).length\n ? Promise.resolve(patient)\n : this.initEncryptionKeys(user, patient).then((patient: models.Patient) => this.modifyPatientWithUser(user, patient))\n )\n .then((patient: models.Patient | null) => {\n if (!patient) {\n status.patient = {\n success: false,\n error: new Error('Patient does not exist or cannot initialise encryption keys'),\n }\n return Promise.resolve({ patient: patient, statuses: status })\n }\n\n return this.crypto.extractDelegationsSFKsAndEncryptionSKs(patient, ownerId).then(([delSfks, ecKeys]) => {\n return delSfks.length\n ? Promise.all([\n retry(() =>\n (usingPost\n ? this.helementApi.findHealthElementsDelegationsStubsByHCPartyPatientForeignKeysUsingPost(ownerId, _.uniq(delSfks))\n : this.helementApi.findHealthElementsDelegationsStubsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((hes) =>\n parentId\n ? (usingPost\n ? this.helementApi.findHealthElementsDelegationsStubsByHCPartyPatientForeignKeysUsingPost(parentId, _.uniq(delSfks))\n : this.helementApi.findHealthElementsDelegationsStubsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreHes) => _.uniqBy(hes.concat(moreHes), 'id'))\n : hes\n )\n ) as Promise<Array<models.IcureStub>>,\n retry(() =>\n (usingPost\n ? this.formApi.findFormsDelegationsStubsByHCPartyPatientForeignKeysUsingPost(ownerId, _.uniq(delSfks))\n : this.formApi.findFormsDelegationsStubsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((frms) =>\n parentId\n ? (usingPost\n ? this.formApi.findFormsDelegationsStubsByHCPartyPatientForeignKeysUsingPost(parentId, _.uniq(delSfks))\n : this.formApi.findFormsDelegationsStubsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreFrms) => _.uniqBy(frms.concat(moreFrms), 'id'))\n : frms\n )\n ) as Promise<Array<models.Form>>,\n retry(() =>\n (usingPost\n ? this.contactApi.findByHCPartyPatientSecretFKeysUsingPost(ownerId, undefined, undefined, _.uniq(delSfks))\n : this.contactApi.findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((ctcs) =>\n parentId\n ? (usingPost\n ? this.contactApi.findByHCPartyPatientSecretFKeysUsingPost(parentId, undefined, undefined, _.uniq(delSfks))\n : this.contactApi.findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreCtcs) => _.uniqBy(ctcs.concat(moreCtcs), 'id'))\n : ctcs\n )\n ) as Promise<Array<models.Contact>>,\n retry(() =>\n (usingPost\n ? this.invoiceApi.findInvoicesDelegationsStubsByHCPartyPatientForeignKeysUsingPost(ownerId, _.uniq(delSfks))\n : this.invoiceApi.findInvoicesDelegationsStubsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((ivs) =>\n parentId\n ? this.invoiceApi\n .findInvoicesDelegationsStubsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n .then((moreIvs) => _.uniqBy(ivs.concat(moreIvs), 'id'))\n : ivs\n )\n ) as Promise<Array<models.IcureStub>>,\n retry(() =>\n this.classificationApi\n .findClassificationsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n .then((cls) =>\n parentId\n ? this.classificationApi\n .findClassificationsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n .then((moreCls) => _.uniqBy(cls.concat(moreCls), 'id'))\n : cls\n )\n ) as Promise<Array<models.Classification>>,\n retry(() =>\n (usingPost\n ? this.calendarItemApi.findByHCPartyPatientSecretFKeysArray(ownerId, _.uniq(delSfks))\n : this.calendarItemApi.findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((cls) =>\n parentId\n ? (usingPost\n ? this.calendarItemApi.findByHCPartyPatientSecretFKeysArray(parentId, _.uniq(delSfks))\n : this.calendarItemApi.findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreCls) => _.uniqBy(cls.concat(moreCls), 'id'))\n : cls\n )\n ) as Promise<Array<models.CalendarItem>>,\n ]).then(([hes, frms, ctcs, ivs, cls, cis]) => {\n const cloneKeysAndDelegations = function (x: models.IcureStub) {\n return {\n delegations: shareDelegations ? _.clone(x.delegations) : undefined,\n cryptedForeignKeys: shareCryptedForeignKeys ? _.clone(x.cryptedForeignKeys) : undefined,\n encryptionKeys: shareEncryptionKeys ? _.clone(x.encryptionKeys) : undefined,\n }\n }\n\n const ctcsStubs = ctcs.map((c) => ({\n id: c.id,\n rev: c.rev,\n ...cloneKeysAndDelegations(c),\n }))\n const oHes = hes.map((x) => _.assign(new IcureStub({}), x, cloneKeysAndDelegations(x)))\n const oFrms = frms.map((x) => _.assign(new IcureStub({}), x, cloneKeysAndDelegations(x)))\n const oCtcsStubs = ctcsStubs.map((x) => _.assign({}, x, cloneKeysAndDelegations(x)))\n const oIvs = ivs.map((x) => _.assign(new Invoice({}), x, cloneKeysAndDelegations(x)))\n const oCls = cls.map((x) => _.assign(new Classification({}), x, cloneKeysAndDelegations(x)))\n const oCis = cis.map((x) => _.assign(new CalendarItem({}), x, cloneKeysAndDelegations(x)))\n\n const docIds: { [key: string]: number } = {}\n ctcs.forEach(\n (c: models.Contact) =>\n c.services &&\n c.services.forEach((s) => s.content && Object.values(s.content).forEach((c) => c && c.documentId && (docIds[c.documentId] = 1)))\n )\n\n return retry(() => this.documentApi.getDocuments(new ListOfIds({ ids: Object.keys(docIds) }))).then((docs: Array<Document>) => {\n const oDocs = docs.map((x) => _.assign({}, x, cloneKeysAndDelegations(x)))\n\n let markerPromise: Promise<any> = Promise.resolve(null)\n delegateIds.forEach((delegateId) => {\n const tags = delegationTags[delegateId]\n markerPromise = markerPromise.then(() => {\n //Share patient\n //console.log(`share ${patient.id} to ${delegateId}`)\n return shareAnonymously\n ? patient\n : this.crypto\n .addDelegationsAndEncryptionKeys(null, patient, ownerId, delegateId, delSfks[0], ecKeys[0])\n .then(async (patient) => {\n if (delSfks.length > 1) {\n return delSfks.slice(1).reduce(async (patientPromise: Promise<models.Patient>, delSfk: string) => {\n const patient = await patientPromise\n return shareAnonymously\n ? patient\n : this.crypto\n .addDelegationsAndEncryptionKeys(null, patient, ownerId, delegateId, delSfk, null)\n .catch((e: any) => {\n console.log(e)\n return patient\n })\n }, Promise.resolve(patient))\n }\n return patient\n })\n .catch((e) => {\n console.log(e)\n return patient\n })\n })\n ;(tags.includes('medicalInformation') || tags.includes('anonymousMedicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(hes, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(frms, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('anonymousMedicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(ctcsStubs, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(cls, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(cis, markerPromise, delegateId, patient))\n ;(tags.includes('financialInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(ivs, markerPromise, delegateId, patient))\n ;(tags.includes('medicalInformation') || tags.includes('all')) &&\n (markerPromise = addDelegationsAndKeys(docs, markerPromise, delegateId, null))\n })\n\n return markerPromise\n .then(() => {\n //console.log(\"scd\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('anonymousMedicalInformation') || allTags.includes('all')) &&\n ctcsStubs &&\n ctcsStubs.length &&\n !_.isEqual(oCtcsStubs, ctcsStubs) &&\n this.contactApi\n .setContactsDelegations(ctcsStubs)\n .then(() => {\n status.contacts.success = true\n status.contacts.modified += ctcsStubs.length\n })\n .catch((e) => (status.contacts.error = e))) ||\n Promise.resolve((status.contacts.success = true))\n )\n })\n .then(() => {\n //console.log(\"shed\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('anonymousMedicalInformation') || allTags.includes('all')) &&\n hes &&\n hes.length &&\n !_.isEqual(oHes, hes) &&\n this.helementApi\n .setHealthElementsDelegations(hes)\n .then(() => {\n status.healthElements.success = true\n status.healthElements.modified += hes.length\n })\n .catch((e) => (status.healthElements.error = e))) ||\n Promise.resolve((status.healthElements.success = true))\n )\n })\n .then(() => {\n //console.log(\"sfd\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('all')) &&\n frms &&\n frms.length &&\n !_.isEqual(oFrms, frms) &&\n this.formApi\n .setFormsDelegations(frms)\n .then(() => {\n status.forms.success = true\n status.forms.modified += frms.length\n })\n .catch((e) => (status.forms.error = e))) ||\n Promise.resolve((status.forms.success = true))\n )\n })\n .then(() => {\n //console.log(\"sid\")\n return (\n ((allTags.includes('financialInformation') || allTags.includes('all')) &&\n ivs &&\n ivs.length &&\n !_.isEqual(oIvs, ivs) &&\n this.invoiceApi\n .setInvoicesDelegations(ivs)\n .then(() => {\n status.invoices.success = true\n status.invoices.modified += ivs.length\n })\n .catch((e) => (status.invoices.error = e))) ||\n Promise.resolve((status.invoices.success = true))\n )\n })\n .then(() => {\n //console.log(\"sdd\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('all')) &&\n docs &&\n docs.length &&\n !_.isEqual(oDocs, docs) &&\n this.documentApi\n .setDocumentsDelegations(docs)\n .then(() => {\n status.documents.success = true\n status.documents.modified += docs.length\n })\n .catch((e) => (status.documents.error = e))) ||\n Promise.resolve((status.documents.success = true))\n )\n })\n .then(() => {\n //console.log(\"scld\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('all')) &&\n cls &&\n cls.length &&\n !_.isEqual(oCls, cls) &&\n this.classificationApi\n .setClassificationsDelegations(cls)\n .then(() => {\n status.classifications.success = true\n status.classifications.modified += cls.length\n })\n .catch((e) => (status.classifications.error = e))) ||\n Promise.resolve((status.classifications.success = true))\n )\n })\n .then(() => {\n //console.log(\"scid\")\n return (\n ((allTags.includes('medicalInformation') || allTags.includes('all')) &&\n cis &&\n cis.length &&\n !_.isEqual(oCis, cis) &&\n this.calendarItemApi\n .setCalendarItemsDelegations(cis)\n .then(() => {\n status.calendarItems.success = true\n status.calendarItems.modified += cis.length\n })\n .catch((e) => (status.calendarItems.error = e))) ||\n Promise.resolve((status.calendarItems.success = true))\n )\n })\n .then(() => this.modifyPatientWithUser(user, patient))\n .then((p) => {\n status.patient.success = true\n console.log(\n `c: ${status.contacts.modified}, he: ${status.healthElements.modified}, docs: ${status.documents.modified}, frms: ${status.forms.modified}, ivs: ${status.invoices.modified}, cis: ${status.calendarItems.modified}, cls: ${status.classifications.modified}`\n )\n return { patient: p, statuses: status }\n })\n .catch((e) => {\n status.patient.error = e\n return { patient: patient, statuses: status }\n })\n })\n })\n : (allTags.includes('anonymousMedicalInformation')\n ? Promise.resolve(patient)\n : this.modifyPatientWithUser(\n user,\n _.assign(patient, {\n delegations: _.assign(\n patient.delegations,\n delegateIds\n .filter((id) => !patient.delegations || !patient.delegations[id]) //If there are delegations do not modify\n .reduce((acc, del: string) => Object.assign(acc, _.fromPairs([[del, []]])), patient.delegations || {})\n ),\n })\n )\n )\n .then((p) => {\n status.patient.success = true\n return { patient: p, statuses: status }\n })\n .catch((e) => {\n status.patient.error = e\n return { patient: patient, statuses: status }\n })\n })\n })\n })\n }\n\n export(user: models.User, patId: string, ownerId: string, usingPost: boolean = false): Promise<{ id: string }> {\n return this.hcpartyApi.getHealthcareParty(ownerId).then((hcp) => {\n const parentId = hcp.parentId\n\n return retry(() => this.getPatientWithUser(user, patId))\n .then((patient: models.Patient) =>\n patient.encryptionKeys && Object.keys(patient.encryptionKeys || {}).length\n ? Promise.resolve(patient)\n : this.initEncryptionKeys(user, patient).then((patient: models.Patient) => this.modifyPatientWithUser(user, patient))\n )\n .then((patient: models.Patient | null) => {\n if (!patient) {\n return Promise.resolve({ id: patId })\n }\n\n return this.crypto.extractDelegationsSFKsAndEncryptionSKs(patient, ownerId).then(([delSfks, ecKeys]) => {\n return delSfks.length\n ? Promise.all([\n retry(() =>\n (usingPost\n ? this.helementApi.findByHCPartyPatientSecretFKeysArray(ownerId, _.uniq(delSfks))\n : this.helementApi.findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((hes) =>\n parentId\n ? this.helementApi\n .findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(','))\n .then((moreHes) => _.uniqBy(hes.concat(moreHes), 'id'))\n : hes\n )\n ) as Promise<Array<models.IcureStub>>,\n retry(() =>\n (usingPost\n ? this.formApi.findFormsByHCPartyPatientForeignKeysUsingPost(ownerId, undefined, undefined, undefined, _.uniq(delSfks))\n : this.formApi.findFormsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((frms) =>\n parentId\n ? (usingPost\n ? this.formApi.findFormsByHCPartyPatientForeignKeysUsingPost(parentId, undefined, undefined, undefined, _.uniq(delSfks))\n : this.formApi.findFormsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreFrms) => _.uniqBy(frms.concat(moreFrms), 'id'))\n : frms\n )\n ) as Promise<Array<models.Form>>,\n retry(() =>\n (usingPost\n ? this.contactApi.findByHCPartyPatientSecretFKeysArray(ownerId, _.uniq(delSfks))\n : this.contactApi.findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((ctcs) =>\n parentId\n ? (usingPost\n ? this.contactApi.findByHCPartyPatientSecretFKeysArray(parentId, _.uniq(delSfks))\n : this.contactApi.findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreCtcs) => _.uniqBy(ctcs.concat(moreCtcs), 'id'))\n : ctcs\n )\n ) as Promise<Array<models.Contact>>,\n retry(() =>\n (usingPost\n ? this.invoiceApi.findInvoicesByHCPartyPatientForeignKeysUsingPost(ownerId, _.uniq(delSfks))\n : this.invoiceApi.findInvoicesByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n ).then((ivs) =>\n parentId\n ? (usingPost\n ? this.invoiceApi.findInvoicesByHCPartyPatientForeignKeysUsingPost(parentId, _.uniq(delSfks))\n : this.invoiceApi.findInvoicesByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n ).then((moreIvs) => _.uniqBy(ivs.concat(moreIvs), 'id'))\n : ivs\n )\n ) as Promise<Array<models.IcureStub>>,\n retry(() =>\n this.classificationApi\n .findClassificationsByHCPartyPatientForeignKeys(ownerId, _.uniq(delSfks).join(','))\n .then((cls) =>\n parentId\n ? this.classificationApi\n .findClassificationsByHCPartyPatientForeignKeys(parentId, _.uniq(delSfks).join(','))\n .then((moreCls) => _.uniqBy(cls.concat(moreCls), 'id'))\n : cls\n )\n ) as Promise<Array<models.Classification>>,\n retry(async () => {\n const delegationSFKs = _.uniq(delSfks).join(',')\n try {\n let calendarItems = await (usingPost\n ? this.calendarItemApi.findByHCPartyPatientSecretFKeysArray(ownerId, _.uniq(delSfks))\n : this.calendarItemApi.findByHCPartyPatientSecretFKeys(ownerId, _.uniq(delSfks).join(',')))\n\n if (parentId) {\n const moreCalendarItems = await (usingPost\n ? this.calendarItemApi.findByHCPartyPatientSecretFKeysArray(parentId, _.uniq(delSfks))\n : this.calendarItemApi.findByHCPartyPatientSecretFKeys(parentId, _.uniq(delSfks).join(',')))\n calendarItems = _.uniqBy(calendarItems.concat(moreCalendarItems), 'id')\n }\n\n return calendarItems\n } catch (ex) {\n console.log(`exception occured exporting calendarItem for ownerId: ${ownerId} - ${ex}`)\n //throw ex\n }\n }) as Promise<Array<models.CalendarItem>>,\n ]).then(([hes, frms, ctcs, ivs, cls, cis]) => {\n const docIds: { [key: string]: number } = {}\n ctcs.forEach(\n (c: models.Contact) =>\n c.services &&\n c.services.forEach((s) => s.content && Object.values(s.content).forEach((c) => c && c.documentId && (docIds[c.documentId] = 1)))\n )\n\n return retry(() => this.documentApi.getDocuments(new ListOfIds({ ids: Object.keys(docIds) }))).then((docs: Array<Document>) => {\n return {\n id: patId,\n patient: patient,\n contacts: ctcs,\n forms: frms,\n healthElements: hes,\n invoices: ivs,\n classifications: cls,\n calItems: cis,\n documents: docs,\n }\n })\n })\n : Promise.resolve({\n id: patId,\n patient: patient,\n contacts: [],\n forms: [],\n healthElements: [],\n invoices: [],\n classifications: [],\n calItems: [],\n documents: [],\n })\n })\n })\n })\n }\n\n checkInami(inami: string): boolean {\n const num_inami = inami.replace(new RegExp('[^(0-9)]', 'g'), '')\n\n const checkDigit = num_inami.substr(6, 2)\n const numSansCheck = num_inami.substr(0, 6)\n let retour = false\n\n //modulo du niss\n const modINAMI = parseInt(numSansCheck) % 97\n\n //obtention du num de check 97 - le resultat du mod\n const checkDigit_2 = 97 - modINAMI\n\n if (parseInt(checkDigit) == checkDigit_2) {\n retour = true\n }\n return retour\n }\n\n isValidSsin(ssin: string) {\n ssin = ssin.replace(new RegExp('[^(0-9)]', 'g'), '')\n let isValidNiss = false\n\n const normalNumber =\n /^[0-9][0-9](([0][0-9])|([1][0-2]))(([0-2][0-9])|([3][0-1]))(([0-9]{2}[1-9])|([0-9][1-9][0-9])|([1-9][0-9]{2}))(([0-8][0-9])|([9][0-7]))$/.test(\n ssin\n )\n const bisNumber = /^[0-9][0-9](([2][0-9])|([3][0-2]))(([0-2][0-9])|([3][0-1]))[0-9]{3}(([0-8][0-9])|([9][0-7]))$/.test(ssin)\n const terNumber = /^[0-9][0-9](([4][0-9])|([5][0-2]))(([0-2][0-9])|([3][0-1]))[0-9]{3}(([0-8][0-9])|([9][0-7]))$/.test(ssin)\n\n if (normalNumber || bisNumber || terNumber) {\n isValidNiss =\n 97 - (Number(ssin.substr(0, 9)) % 97) === Number(ssin.substr(9, 2))\n ? true\n : 97 - (Number('2' + ssin.substr(0, 9)) % 97) === Number(ssin.substr(9, 2))\n }\n\n return isValidNiss\n }\n\n async getPatientIdOfChildDocumentForHcpAndHcpParents(\n childDocument: models.Invoice | models.CalendarItem | models.Contact | models.AccessLog,\n hcpId: string\n ): Promise<string> {\n const parentIdsArray = (await this.crypto.extractCryptedFKs(childDocument, hcpId)).extractedKeys\n\n const multipleParentIds = _.uniq(parentIdsArray).length > 1\n\n if (multipleParentIds) {\n throw 'Child document with id ' + childDocument.id + ' contains multiple parent ids in its CFKs for hcpId: ' + hcpId\n }\n\n const parentId = _.first(parentIdsArray)\n\n if (!parentId) {\n throw 'Parent id is empty in CFK of child document with id ' + childDocument.id + ' for hcpId: ' + hcpId\n }\n\n let patient: models.Patient = await super.getPatient(parentId!)\n\n let mergeLevel = 0\n const maxMergeLevel = 10\n while (patient.mergeToPatientId) {\n mergeLevel++\n if (mergeLevel === maxMergeLevel) {\n throw 'Too many merged levels for parent (Patient) of child document ' + childDocument.id + ' ; hcpId: ' + hcpId\n }\n\n patient = await super.getPatient(patient.mergeToPatientId!)\n }\n\n return patient.id!\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type PaginatorFunction<X> = (key: any, docId: string | null, limit: number | undefined) => Promise<PaginatorResponse<X>>;
|
|
2
|
-
export type PaginatorExecutor<X> = (latestPaginatorFunctionResult: PaginatorResponse<X>, acc: any[], limit: number | undefined) => Promise<PaginatorResponse<X>>;
|
|
1
|
+
export declare type PaginatorFunction<X> = (key: any, docId: string | null, limit: number | undefined) => Promise<PaginatorResponse<X>>;
|
|
2
|
+
export declare type PaginatorExecutor<X> = (latestPaginatorFunctionResult: PaginatorResponse<X>, acc: any[], limit: number | undefined) => Promise<PaginatorResponse<X>>;
|
|
3
3
|
export interface PaginatorResponse<X> {
|
|
4
4
|
rows: Array<X>;
|
|
5
5
|
nextKey: any | null | undefined;
|