From 57d69c934494d08d119aa7544285c50f25d6c297 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 6 Mar 2024 09:47:08 +0100 Subject: [PATCH 01/87] chore(contracts): view creation --- .../services/admin-mock/admin.handler.ts | 6 +- .../mocks/services/admin-mock/admin.model.ts | 303 ++++++++++++------ .../app/modules/page/admin/admin.module.ts | 5 +- .../app/modules/page/admin/admin.routing.ts | 13 +- .../modules/page/admin/core/admin.facade.ts | 11 +- .../modules/page/admin/core/admin.model.ts | 16 +- .../modules/page/admin/core/admin.service.ts | 28 +- .../admin/presentation/admin.component.ts | 7 +- .../contract-table.component.html | 25 ++ .../contract-table.component.scss | 0 .../contract-table.component.spec.ts | 21 ++ .../contract-table.component.ts | 41 +++ frontend/src/assets/locales/de/common.json | 3 +- .../src/assets/locales/de/page.admin.json | 9 + frontend/src/assets/locales/en/common.json | 3 +- .../src/assets/locales/en/page.admin.json | 9 + 16 files changed, 383 insertions(+), 117 deletions(-) create mode 100644 frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html create mode 100644 frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.scss create mode 100644 frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts create mode 100644 frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts diff --git a/frontend/src/app/mocks/services/admin-mock/admin.handler.ts b/frontend/src/app/mocks/services/admin-mock/admin.handler.ts index 857ce9f684..25b51769bc 100644 --- a/frontend/src/app/mocks/services/admin-mock/admin.handler.ts +++ b/frontend/src/app/mocks/services/admin-mock/admin.handler.ts @@ -21,7 +21,7 @@ import { environment } from '@env'; import { rest } from 'msw'; -import { getBpnConfig, getImportReport } from './admin.model'; +import { getBpnConfig, getContracts, getImportReport } from './admin.model'; export const adminHandler = (_ => { @@ -45,6 +45,10 @@ export const adminHandler = (_ => { rest.post(`*${ environment.apiUrl }/assets/import`, (req, res, ctx) => { return res(ctx.status(200), ctx.json(getImportReport())); + }), + + rest.get(`*${ environment.apiUrl }/contracts`, (req, res, ctx) => { + return res(ctx.status(200), ctx.json(getContracts())); }) ]; diff --git a/frontend/src/app/mocks/services/admin-mock/admin.model.ts b/frontend/src/app/mocks/services/admin-mock/admin.model.ts index 282a1f5779..b934d971b8 100644 --- a/frontend/src/app/mocks/services/admin-mock/admin.model.ts +++ b/frontend/src/app/mocks/services/admin-mock/admin.model.ts @@ -19,7 +19,8 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { BpnConfigResponse } from '@page/admin/core/admin.model'; +import { PaginationResponse } from '@core/model/pagination.model'; +import { BpnConfigResponse, Contract, ContractState } from '@page/admin/core/admin.model'; export const getBpnConfig = (): BpnConfigResponse[] => [ @@ -109,102 +110,206 @@ export const getBpnConfig = (): BpnConfigResponse[] => [ }, ]; -export const getImportReport = (): any => { return { - "importStateMessage": [ - { - "catenaXId": "urn:uuid:0733946c-59c6-41ae-9570-cb43a6e4da01", - "persistedOrUpdated": false +export const getImportReport = (): any => { + return { + 'importStateMessage': [ + { + 'catenaXId': 'urn:uuid:0733946c-59c6-41ae-9570-cb43a6e4da01', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:aad27ddb-43aa-4e42-98c2-01e529ef127c', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:e5c96ab5-896a-482c-8761-efd74777ca98', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:4f7b1cf2-a598-4027-bc78-63f6d8e55699', + 'persistedOrUpdated': true, + }, + { + 'catenaXId': 'urn:uuid:bee5614f-9e46-4c98-9209-61a6f2b2a7fc', + 'persistedOrUpdated': true, + }, + { + 'catenaXId': 'urn:uuid:4518c080-14fb-4252-b8de-4362d615868d', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:3cdd2826-5df0-4c7b-b540-9eeccecb2301', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:68904173-ad59-4a77-8412-3e73fcafbd8b', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:6b2296cc-26c0-4f38-8a22-092338c36e22', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:d8030bbf-a874-49fb-b2e1-7610f0ccad12', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:4e390dab-707f-446e-bfbe-653f6f5b1f37', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:7c7d5aec-b15d-491c-8fbd-c61c6c02c69a', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:4a5e9ff6-2d5c-4510-a90e-d55af3ba502f', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:6ec3f1db-2798-454b-a73f-0d21a8966c74', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa01', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa02', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa03', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:0733946c-59c6-41ae-9570-cb43a6e43842', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:44347dec-21d1-47aa-b2a7-f959bf9d424b', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:1233b405-5ac8-4867-93f8-6fdf37733737', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:bcfae197-40fa-4be0-821d-5c1873a1b7c2', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:254604ab-2153-45fb-8cad-54ef09f4070e', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:e3b2f5e2-5be5-4ea6-98f0-6876de0fca4f', + 'persistedOrUpdated': false, + }, + ], + 'validationResult': { + 'validationErrors': [], }, - { - "catenaXId": "urn:uuid:aad27ddb-43aa-4e42-98c2-01e529ef127c", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:e5c96ab5-896a-482c-8761-efd74777ca98", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:4f7b1cf2-a598-4027-bc78-63f6d8e55699", - "persistedOrUpdated": true - }, - { - "catenaXId": "urn:uuid:bee5614f-9e46-4c98-9209-61a6f2b2a7fc", - "persistedOrUpdated": true - }, - { - "catenaXId": "urn:uuid:4518c080-14fb-4252-b8de-4362d615868d", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:3cdd2826-5df0-4c7b-b540-9eeccecb2301", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:68904173-ad59-4a77-8412-3e73fcafbd8b", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:6b2296cc-26c0-4f38-8a22-092338c36e22", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:d8030bbf-a874-49fb-b2e1-7610f0ccad12", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:4e390dab-707f-446e-bfbe-653f6f5b1f37", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:7c7d5aec-b15d-491c-8fbd-c61c6c02c69a", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:4a5e9ff6-2d5c-4510-a90e-d55af3ba502f", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:6ec3f1db-2798-454b-a73f-0d21a8966c74", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa01", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa02", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa03", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:0733946c-59c6-41ae-9570-cb43a6e43842", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:44347dec-21d1-47aa-b2a7-f959bf9d424b", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:1233b405-5ac8-4867-93f8-6fdf37733737", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:bcfae197-40fa-4be0-821d-5c1873a1b7c2", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:254604ab-2153-45fb-8cad-54ef09f4070e", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:e3b2f5e2-5be5-4ea6-98f0-6876de0fca4f", - "persistedOrUpdated": false - } - ], - "validationResult": { - "validationErrors": [] - } -}} + }; +}; + +export const getContracts = (): PaginationResponse => { + return { + page: 0, + pageSize: 10, + totalItems: 12, + pageCount: 2, + content: [ + { + "contractId": "abc1", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc2", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc3", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc4", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc5", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc6", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc7", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc8", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc9", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc10", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc11", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc12", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc13", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": 1708951.087000000, + "endDate": null, + "state": ContractState.FINALIZED + } + ], + }; +}; diff --git a/frontend/src/app/modules/page/admin/admin.module.ts b/frontend/src/app/modules/page/admin/admin.module.ts index b23b01f174..b5c4475632 100644 --- a/frontend/src/app/modules/page/admin/admin.module.ts +++ b/frontend/src/app/modules/page/admin/admin.module.ts @@ -24,17 +24,18 @@ import { NgModule } from '@angular/core'; import { getI18nPageProvider } from '@core/i18n'; import { AdminFacade } from '@page/admin/core/admin.facade'; import { AdminService } from '@page/admin/core/admin.service'; +import { ContractTableComponent } from '@page/admin/presentation/contract-table/contract-table.component'; +import { ModalModule } from '@shared/modules/modal/modal.module'; import { SharedModule } from '@shared/shared.module'; import { TemplateModule } from '@shared/template.module'; import { AdminRoutingModule } from './admin.routing'; import { AdminComponent } from './presentation/admin.component'; import { BpnConfigurationComponent } from './presentation/bpn-configuration/bpn-configuration.component'; import { SaveBpnConfigModal } from './presentation/bpn-configuration/save-modal/save-modal.component'; -import { ModalModule } from '@shared/modules/modal/modal.module'; import { ImportJsonComponent } from './presentation/import-json/import-json.component'; @NgModule({ - declarations: [ AdminComponent, BpnConfigurationComponent, SaveBpnConfigModal, ImportJsonComponent ], + declarations: [ AdminComponent, BpnConfigurationComponent, SaveBpnConfigModal, ImportJsonComponent, ContractTableComponent ], imports: [ CommonModule, TemplateModule, SharedModule, AdminRoutingModule, ModalModule ], providers: [ ...getI18nPageProvider('page.admin'), AdminService, AdminFacade ], }) diff --git a/frontend/src/app/modules/page/admin/admin.routing.ts b/frontend/src/app/modules/page/admin/admin.routing.ts index f42a40af93..73691913d3 100644 --- a/frontend/src/app/modules/page/admin/admin.routing.ts +++ b/frontend/src/app/modules/page/admin/admin.routing.ts @@ -21,11 +21,12 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { I18NEXT_NAMESPACE_RESOLVER } from 'angular-i18next'; +import { RoleGuard } from '@core/user/role.guard'; import { KnownAdminRoutes } from '@page/admin/core/admin.model'; import { BpnConfigurationComponent } from '@page/admin/presentation/bpn-configuration/bpn-configuration.component'; +import { ContractTableComponent } from '@page/admin/presentation/contract-table/contract-table.component'; import { ImportJsonComponent } from '@page/admin/presentation/import-json/import-json.component'; -import { RoleGuard } from '@core/user/role.guard'; +import { I18NEXT_NAMESPACE_RESOLVER } from 'angular-i18next'; export /** @type {*} */ const ADMIN_ROUTING: Routes = [ @@ -49,6 +50,14 @@ const ADMIN_ROUTING: Routes = [ data: { i18nextNamespaces: [ 'page.admin' ] }, resolve: { i18next: I18NEXT_NAMESPACE_RESOLVER }, }, + { + path: KnownAdminRoutes.CONTRACT, + pathMatch: 'full', + component: ContractTableComponent, + data: { i18nextNamespaces: [ 'page.admin' ] }, + resolve: { i18next: I18NEXT_NAMESPACE_RESOLVER }, + canActivate: [ RoleGuard ], + }, ]; @NgModule({ diff --git a/frontend/src/app/modules/page/admin/core/admin.facade.ts b/frontend/src/app/modules/page/admin/core/admin.facade.ts index 639df85220..8a2c914627 100644 --- a/frontend/src/app/modules/page/admin/core/admin.facade.ts +++ b/frontend/src/app/modules/page/admin/core/admin.facade.ts @@ -20,9 +20,11 @@ ********************************************************************************/ import { Injectable } from '@angular/core'; -import { BpnConfig } from '@page/admin/core/admin.model'; +import { Pagination } from '@core/model/pagination.model'; +import { BpnConfig, Contract } from '@page/admin/core/admin.model'; import { AdminService } from '@page/admin/core/admin.service'; -import { Observable} from 'rxjs'; +import { TableHeaderSort } from '@shared/components/table/table.model'; +import { Observable } from 'rxjs'; @Injectable() export class AdminFacade { @@ -48,4 +50,9 @@ export class AdminFacade { public postJsonImport(file: File): Observable{ return this.adminService.postJsonFile(file); } + + public getContracts(page: number, pageSize: number, sorting?: TableHeaderSort[], filter?: any ): Observable> { + return this.adminService.getContracts(page, pageSize, sorting, filter); + } + } diff --git a/frontend/src/app/modules/page/admin/core/admin.model.ts b/frontend/src/app/modules/page/admin/core/admin.model.ts index b59466db84..52e1022989 100644 --- a/frontend/src/app/modules/page/admin/core/admin.model.ts +++ b/frontend/src/app/modules/page/admin/core/admin.model.ts @@ -24,7 +24,8 @@ import { FormArray, FormControl, FormGroup } from '@angular/forms'; export enum KnownAdminRoutes { BPN = 'configure-bpn', - IMPORT = 'configure-import' + IMPORT = 'configure-import', + CONTRACT = 'contracts' } @@ -43,3 +44,16 @@ export interface BpnConfig { } export type BpnConfigFormGroup = FormGroup<{ bpnConfig: FormArray> }>; + +export interface Contract { + contractId: string, + counterpartyAddress: string, + creationDate: number, + endDate: number, + state: ContractState +} + +export enum ContractState { + FINALIZED = "Finalized", + TERMINATED = "Terminated" +} diff --git a/frontend/src/app/modules/page/admin/core/admin.service.ts b/frontend/src/app/modules/page/admin/core/admin.service.ts index f756fbc26d..081e51d8b7 100644 --- a/frontend/src/app/modules/page/admin/core/admin.service.ts +++ b/frontend/src/app/modules/page/admin/core/admin.service.ts @@ -19,13 +19,16 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import {Injectable} from '@angular/core'; -import {ApiService} from '@core/api/api.service'; -import {environment} from '@env'; -import {AdminAssembler} from '@page/admin/core/admin.assembler'; -import {BpnConfig, BpnConfigResponse} from '@page/admin/core/admin.model'; -import {Observable} from 'rxjs'; -import {map} from 'rxjs/operators'; +import { HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { ApiService } from '@core/api/api.service'; +import { Pagination } from '@core/model/pagination.model'; +import { environment } from '@env'; +import { AdminAssembler } from '@page/admin/core/admin.assembler'; +import { BpnConfig, BpnConfigResponse, Contract } from '@page/admin/core/admin.model'; +import { TableHeaderSort } from '@shared/components/table/table.model'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; @Injectable() export class AdminService { @@ -59,4 +62,15 @@ export class AdminService { return this.apiService.postFile(`${this.url}/assets/import`, formData); } + public getContracts(page: number, pageSize: number, sorting?: TableHeaderSort[], filter?: any): Observable> { + + let params = new HttpParams() + .set('page', page) + .set('size', pageSize) + //.set('filter', filter) + //.set('sort', sorting[0].toString()) + + return this.apiService.getBy(`${this.url}/contracts`, params) + } + } diff --git a/frontend/src/app/modules/page/admin/presentation/admin.component.ts b/frontend/src/app/modules/page/admin/presentation/admin.component.ts index 1ddd34edc4..cb4a9390eb 100644 --- a/frontend/src/app/modules/page/admin/presentation/admin.component.ts +++ b/frontend/src/app/modules/page/admin/presentation/admin.component.ts @@ -21,8 +21,8 @@ import { Component } from '@angular/core'; import { NavigationEnd, Router } from '@angular/router'; -import { filter } from 'rxjs/operators'; import { Role } from '@core/user/role.model'; +import { filter } from 'rxjs/operators'; @Component({ selector: 'app-admin', @@ -47,6 +47,11 @@ export class AdminComponent { icon: 'upload', link: '/admin/configure-import', }, + { + name: 'routing.adminContract', + icon: 'assignment_ind', + link: '/admin/contracts', + }, ]; constructor(router: Router) { diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html new file mode 100644 index 0000000000..875d163cd1 --- /dev/null +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html @@ -0,0 +1,25 @@ + + +

{{"pageAdmin.contracts.contracts" | i18n}}

+
+ + +
+ Export +
+ + +
+ +
diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.scss b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts new file mode 100644 index 0000000000..38d9998d98 --- /dev/null +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ContractTableComponent } from './contract-table.component'; + +describe('ContractTableComponent', () => { + let component: ContractTableComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ContractTableComponent] + }); + fixture = TestBed.createComponent(ContractTableComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts new file mode 100644 index 0000000000..7db77b8d53 --- /dev/null +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts @@ -0,0 +1,41 @@ +import { Component } from '@angular/core'; +import { Pagination } from '@core/model/pagination.model'; +import { AdminFacade } from '@page/admin/core/admin.facade'; +import { Contract } from '@page/admin/core/admin.model'; +import { CreateHeaderFromColumns, TableConfig } from '@shared/components/table/table.model'; +import { Observable } from 'rxjs'; + +@Component({ + selector: 'app-contract-table', + templateUrl: './contract-table.component.html', + styleUrls: [ './contract-table.component.scss' ], +}) +export class ContractTableComponent { + contracts: Observable>; + tableConfig: TableConfig + + constructor(private adminFacade: AdminFacade) { + this.tableConfig = { + displayedColumns: ["contractId", "counterpartyAddress", "creationDate", "endDate", "state"], + header: CreateHeaderFromColumns(["contractId", "counterpartyAddress", "creationDate", "endDate", "state"], "pageAdmin.contracts"), + menuActionsConfig: [], + sortableColumns: {contractId: true}, + hasPagination: true + } + + } + + public ngOnInit() { + this.contracts = this.adminFacade.getContracts(0,10); + + //this.contracts.subscribe(next => console.log(next)) + } + + ngAfterViewInit() { + + } + + exportContractsAsCsv() { + + } +} diff --git a/frontend/src/assets/locales/de/common.json b/frontend/src/assets/locales/de/common.json index 3cf3593019..f8cae56fd7 100644 --- a/frontend/src/assets/locales/de/common.json +++ b/frontend/src/assets/locales/de/common.json @@ -17,7 +17,8 @@ "notAllowedForAsPlanned": "Diese Funktion ist für Produkte im Lebenszyklus \"AsPlanned\" nicht verfügbar.", "noChildPartsForInvestigation": "Diese Funktion ist für Produkte ohne Bauteile nicht verfügbar.", "noCustomerAsPlannedParts": "Produkte von Kunden im Lebenszyklus \"AsPlanned\" sind nicht verfügbar.", - "nonTransientPart": "Ein oder mehrere ausgewählte Produkte befinden sich nicht im erforderlichen Importstatus \"TRANSIENT\"." + "nonTransientPart": "Ein oder mehrere ausgewählte Produkte befinden sich nicht im erforderlichen Importstatus \"TRANSIENT\".", + "adminContract": "Verträge" }, "pageTitle": { "dashboard": "Dashboard", diff --git a/frontend/src/assets/locales/de/page.admin.json b/frontend/src/assets/locales/de/page.admin.json index 404dc38f48..6461a5925c 100644 --- a/frontend/src/assets/locales/de/page.admin.json +++ b/frontend/src/assets/locales/de/page.admin.json @@ -40,6 +40,15 @@ "description": "Beschreibung", "uploadMore": "Mehr Hochladen", "noImportStateMessage": "Der Server hat keine weitere Information zurückgegeben." + }, + "contracts": { + "contracts": "Verträge", + "contractId": "Vertrags ID", + "counterpartyAddress": "Vertragspartner Adresse", + "creationDate": "Erstelldatum", + "endDate": "Ablaufdatum", + "state": "Status", + "policies": "Richtlinien" } } } diff --git a/frontend/src/assets/locales/en/common.json b/frontend/src/assets/locales/en/common.json index b5637fd165..29757ca061 100644 --- a/frontend/src/assets/locales/en/common.json +++ b/frontend/src/assets/locales/en/common.json @@ -17,7 +17,8 @@ "notAllowedForAsPlanned": "This function is not available for Parts in the Lifecycle \"AsPlanned\".", "noChildPartsForInvestigation": "This function is not available for Parts without components.", "noCustomerAsPlannedParts": "Customer parts in lifecycle \"AsPlanned\" are not available.", - "nonTransientPart": "One or more selected parts are not in the required import state \"TRANSIENT\"." + "nonTransientPart": "One or more selected parts are not in the required import state \"TRANSIENT\".", + "adminContract": "Contracts" }, "pageTitle": { "dashboard": "Dashboard", diff --git a/frontend/src/assets/locales/en/page.admin.json b/frontend/src/assets/locales/en/page.admin.json index 6b156175b4..6d328547d0 100644 --- a/frontend/src/assets/locales/en/page.admin.json +++ b/frontend/src/assets/locales/en/page.admin.json @@ -40,6 +40,15 @@ "description": "Description", "uploadMore": "Upload more", "noImportStateMessage": "No additional information was returned by the server." + }, + "contracts": { + "contracts": "Contracts", + "contractId": "Contract ID", + "counterpartyAddress": "Counterparty address", + "creationDate": "Creation date", + "endDate": "End date", + "state": "State", + "policies": "Policies" } } } From 48eea9c063f236d823036a1a5e67dd97260744f6 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 6 Mar 2024 16:04:29 +0100 Subject: [PATCH 02/87] chore(515): contract agreement view --- .../services/admin-mock/admin.handler.ts | 2 +- .../modules/page/admin/core/admin.service.ts | 22 +++++- .../contract-table.component.html | 20 ++++- .../contract-table.component.ts | 79 ++++++++++++++++--- .../autocomplete-strategy.ts | 21 +++++ .../table-type.model.ts | 1 + .../components/table/table.component.ts | 7 +- .../src/assets/locales/de/page.admin.json | 6 +- .../src/assets/locales/en/page.admin.json | 4 +- 9 files changed, 143 insertions(+), 19 deletions(-) diff --git a/frontend/src/app/mocks/services/admin-mock/admin.handler.ts b/frontend/src/app/mocks/services/admin-mock/admin.handler.ts index 25b51769bc..b995495863 100644 --- a/frontend/src/app/mocks/services/admin-mock/admin.handler.ts +++ b/frontend/src/app/mocks/services/admin-mock/admin.handler.ts @@ -47,7 +47,7 @@ export const adminHandler = (_ => { return res(ctx.status(200), ctx.json(getImportReport())); }), - rest.get(`*${ environment.apiUrl }/contracts`, (req, res, ctx) => { + rest.post(`*${ environment.apiUrl }/contracts`, (req, res, ctx) => { return res(ctx.status(200), ctx.json(getContracts())); }) diff --git a/frontend/src/app/modules/page/admin/core/admin.service.ts b/frontend/src/app/modules/page/admin/core/admin.service.ts index 081e51d8b7..ed1a75f125 100644 --- a/frontend/src/app/modules/page/admin/core/admin.service.ts +++ b/frontend/src/app/modules/page/admin/core/admin.service.ts @@ -64,13 +64,33 @@ export class AdminService { public getContracts(page: number, pageSize: number, sorting?: TableHeaderSort[], filter?: any): Observable> { + const body = { + pageAble: { + page: page, + size: pageSize, + // sort: sorting[0].toString(), + }, + searchCriteria: { + //filter: [ ...additionalFilters ], + }, + }; + let params = new HttpParams() .set('page', page) .set('size', pageSize) //.set('filter', filter) //.set('sort', sorting[0].toString()) - return this.apiService.getBy(`${this.url}/contracts`, params) + return this.apiService.post(`${this.url}/contracts`, body) } + getDistinctFilterValues(filterColumns: string, searchElement: string) { + let params = new HttpParams() + .set('fieldName', filterColumns) + .set('startWith', searchElement) + .set('size', 200) + + return this.apiService.getBy(`${this.url}/contracts/distinctFilterValues`, params); + + } } diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html index 875d163cd1..631ac1f195 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html @@ -5,11 +5,21 @@
+
Export + (click)="exportContractsAsCSV()" + [isDisabled]="!selectedContracts?.length" + >{{'pageAdmin.contracts.exportAsCSV' | i18n}} +
diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts index 7db77b8d53..575fbcd517 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts @@ -2,7 +2,9 @@ import { Component } from '@angular/core'; import { Pagination } from '@core/model/pagination.model'; import { AdminFacade } from '@page/admin/core/admin.facade'; import { Contract } from '@page/admin/core/admin.model'; -import { CreateHeaderFromColumns, TableConfig } from '@shared/components/table/table.model'; +import { TableType } from '@shared/components/multi-select-autocomplete/table-type.model'; +import { CreateHeaderFromColumns, TableConfig, TableEventConfig } from '@shared/components/table/table.model'; +import { NotificationAction } from '@shared/modules/notification/notification-action.enum'; import { Observable } from 'rxjs'; @Component({ @@ -12,30 +14,85 @@ import { Observable } from 'rxjs'; }) export class ContractTableComponent { contracts: Observable>; - tableConfig: TableConfig + tableConfig: TableConfig; + selectedContracts: Contract[]; + contractFilter: any; + pagination: TableEventConfig; constructor(private adminFacade: AdminFacade) { + this.pagination = { page: 0, pageSize: 10, sorting: null }; this.tableConfig = { - displayedColumns: ["contractId", "counterpartyAddress", "creationDate", "endDate", "state"], - header: CreateHeaderFromColumns(["contractId", "counterpartyAddress", "creationDate", "endDate", "state"], "pageAdmin.contracts"), + displayedColumns: [ 'select', 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], + header: CreateHeaderFromColumns([ 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], 'pageAdmin.contracts'), menuActionsConfig: [], - sortableColumns: {contractId: true}, - hasPagination: true - } + sortableColumns: { + select: false, + contractId: true, + counterpartyAddress: false, + creationDate: false, + endDate: false, + state: false, + }, + hasPagination: true, + }; } public ngOnInit() { - this.contracts = this.adminFacade.getContracts(0,10); + this.contracts = this.adminFacade.getContracts(0, 10); + } + + filterActivated(contractFilter: any): void { + console.log(contractFilter); + this.contracts = this.adminFacade.getContracts(0, 10, null, contractFilter); + this.contractFilter = contractFilter; + } + + public onTableConfigChange(pagination: TableEventConfig): void { + console.log(pagination); + this.pagination = pagination; + this.adminFacade.getContracts(pagination.page, pagination.pageSize, [ pagination.sorting ], this.contractFilter); + } + multiSelection(selectedContracts: Contract[]) { + this.selectedContracts = selectedContracts; + console.log(this.selectedContracts); + } - //this.contracts.subscribe(next => console.log(next)) + exportContractsAsCSV() { + const csvContent = this.convertArrayOfObjectsToCSV(this.selectedContracts); + this.downloadCSV(csvContent, 'Exported_Contracts.csv'); } - ngAfterViewInit() { + convertArrayOfObjectsToCSV(data: any[]) { + const csvArray = []; + const headers = Object.keys(data[0]); + csvArray.push(headers.join(',')); + + data.forEach(item => { + const values = headers.map(header => item[header]); + csvArray.push(values.join(',')); + }); + return csvArray.join('\n'); } - exportContractsAsCsv() { + downloadCSV(csvContent: string, fileName: string) { + const blob = new Blob([ csvContent ], { type: 'text/csv;charset=utf-8;' }); + + const link = document.createElement('a'); + if (link.download !== undefined) { + const url = URL.createObjectURL(blob); + link.setAttribute('href', url); + link.setAttribute('download', fileName); + link.style.visibility = 'hidden'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } } + + + protected readonly NotificationAction = NotificationAction; + protected readonly TableType = TableType; } diff --git a/frontend/src/app/modules/shared/components/multi-select-autocomplete/autocomplete-strategy.ts b/frontend/src/app/modules/shared/components/multi-select-autocomplete/autocomplete-strategy.ts index 8054019448..2a3fc4da18 100644 --- a/frontend/src/app/modules/shared/components/multi-select-autocomplete/autocomplete-strategy.ts +++ b/frontend/src/app/modules/shared/components/multi-select-autocomplete/autocomplete-strategy.ts @@ -17,6 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ import { Injectable } from '@angular/core'; +import { AdminService } from '@page/admin/core/admin.service'; import { Owner } from '@page/parts/model/owner.enum'; import { NotificationChannel, TableType } from '@shared/components/multi-select-autocomplete/table-type.model'; import { NotificationService } from '@shared/service/notification.service'; @@ -93,6 +94,25 @@ export class AlertStrategy extends AutocompleteStrategy { } } +@Injectable({ + providedIn: 'any', +}) +export class ContractsStrategy extends AutocompleteStrategy { + adminService: AdminService; + + constructor(adminService: AdminService) { + super(); + this.adminService = adminService; + } + + retrieveSuggestionValues(tableType: TableType, filterColumns: string, searchElement: string): any { + return this.adminService.getDistinctFilterValues( + filterColumns, + searchElement, + ); + } +} + export const AutocompleteStrategyMap = new Map([ [ TableType.AS_BUILT_OWN, PartsStrategy ], [ TableType.AS_BUILT_SUPPLIER, PartsStrategy ], @@ -104,6 +124,7 @@ export const AutocompleteStrategyMap = new Map([ [ TableType.CREATED_INVESTIGATION, InvestigationStrategy ], [ TableType.RECEIVED_ALERT, AlertStrategy ], [ TableType.CREATED_ALERT, AlertStrategy ], + [ TableType.CONTRACTS, ContractsStrategy] ]); export function getOwnerOfTable(tableType: TableType): Owner { diff --git a/frontend/src/app/modules/shared/components/multi-select-autocomplete/table-type.model.ts b/frontend/src/app/modules/shared/components/multi-select-autocomplete/table-type.model.ts index 6870340148..a87d2e271c 100644 --- a/frontend/src/app/modules/shared/components/multi-select-autocomplete/table-type.model.ts +++ b/frontend/src/app/modules/shared/components/multi-select-autocomplete/table-type.model.ts @@ -28,6 +28,7 @@ export enum TableType { CREATED_INVESTIGATION = 'CREATED_INVESTIGATION', RECEIVED_ALERT = 'RECEIVED_ALERT', CREATED_ALERT = 'CREATED_ALERT', + CONTRACTS='CONTRACTS' } export enum NotificationChannel { diff --git a/frontend/src/app/modules/shared/components/table/table.component.ts b/frontend/src/app/modules/shared/components/table/table.component.ts index 44fefc18bb..a0260f0275 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.ts +++ b/frontend/src/app/modules/shared/components/table/table.component.ts @@ -86,7 +86,12 @@ export class TableComponent { @Input() tableHeader: string; @Input() multiSortList: TableHeaderSort[]; - @Input() set paginationData({ page, pageSize, totalItems, content }: Pagination) { + @Input() set paginationData(paginationData: Pagination) { + if(!paginationData) { + return; + } + + const { page, pageSize, totalItems, content } = paginationData; this.totalItems = totalItems; this.pageSize = pageSize; this.dataSource.data = content; diff --git a/frontend/src/assets/locales/de/page.admin.json b/frontend/src/assets/locales/de/page.admin.json index 6461a5925c..1171ec8065 100644 --- a/frontend/src/assets/locales/de/page.admin.json +++ b/frontend/src/assets/locales/de/page.admin.json @@ -43,12 +43,14 @@ }, "contracts": { "contracts": "Verträge", - "contractId": "Vertrags ID", + "contractId": "Vertrags-ID", "counterpartyAddress": "Vertragspartner Adresse", "creationDate": "Erstelldatum", "endDate": "Ablaufdatum", "state": "Status", - "policies": "Richtlinien" + "policies": "Richtlinie", + "selectAtleastOne": "Selektieren Sie mindestens einen Vertrag um exportieren zu können.", + "exportAsCSV": ".CSV-Datei Export" } } } diff --git a/frontend/src/assets/locales/en/page.admin.json b/frontend/src/assets/locales/en/page.admin.json index 6d328547d0..cd9dadebcd 100644 --- a/frontend/src/assets/locales/en/page.admin.json +++ b/frontend/src/assets/locales/en/page.admin.json @@ -48,7 +48,9 @@ "creationDate": "Creation date", "endDate": "End date", "state": "State", - "policies": "Policies" + "policies": "Policies", + "selectAtleastOne": "Select atleast one contract to use the export functionality.", + "exportAsCSV": ".CSV-File Export" } } } From 9459bbb912bfd4694596309220f98a6bf5bc1a3c Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 6 Mar 2024 16:07:25 +0100 Subject: [PATCH 03/87] chore(421): contract agreement view --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa5f5e8a9a..19dfef2f0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [UNRELEASED - DD.MM.YYYY] ### Added +- Added contract agreement view ### Changed - Updated RELEASE.md to the latest release guide (added more steps) From cc0cdbfdffb82abad84227eb52965c44d8f62317 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 6 Mar 2024 16:11:35 +0100 Subject: [PATCH 04/87] chore(contracts): add contract agreement view --- CONTRIBUTING.md | 8 + .../core/api/http-error-interceptor.spec.ts | 4 +- .../core/api/http-error.interceptor.ts | 12 +- .../approve-notification-modal.component.ts | 2 +- frontend/src/assets/locales/de/common.json | 4 +- frontend/src/assets/locales/en/common.json | 4 +- .../openapi/traceability-foss-backend.json | 2024 ++++++++--------- .../infrastructure/base/irs/IrsService.java | 8 +- .../response/factory/AssetMapperFactory.java | 6 +- .../common/config/ErrorHandlingConfig.java | 10 +- .../AbstractQualityNotificationService.java | 5 +- .../EdcNotificationContractServiceTest.java | 3 +- .../alert/ReceiverAlertsControllerIT.java | 38 +- .../ReceiverInvestigationsControllerIT.java | 41 - 14 files changed, 1055 insertions(+), 1114 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ace02fa04d..119b7cd8cb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -65,6 +65,14 @@ https://www.eclipse.org/projects/handbook/#resources-commit ## General contribution to the project +### Maintaining [CHANGELOG.md](CHANGELOG.md) +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres +to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +_**For better traceability add the corresponding GitHub issue number in each changelog entry, please.**_ + ### Dash IP Prerequisites: 1) Create access token diff --git a/frontend/src/app/modules/core/api/http-error-interceptor.spec.ts b/frontend/src/app/modules/core/api/http-error-interceptor.spec.ts index aba543fe25..e110d78d45 100644 --- a/frontend/src/app/modules/core/api/http-error-interceptor.spec.ts +++ b/frontend/src/app/modules/core/api/http-error-interceptor.spec.ts @@ -57,7 +57,7 @@ describe('HttpErrorInterceptor', () => { it('should intercept', async () => { await initErrorInterceptor('403'); expect( - await waitFor(() => screen.getByText('Backend returned code 403: Permission denied error message')), - ).toBeInTheDocument(); + await waitFor(() => screen.queryByText('Backend returned code 403: Permission denied error message')), + ).not.toBeInTheDocument(); }); }); diff --git a/frontend/src/app/modules/core/api/http-error.interceptor.ts b/frontend/src/app/modules/core/api/http-error.interceptor.ts index 231d408f7e..1e43486265 100644 --- a/frontend/src/app/modules/core/api/http-error.interceptor.ts +++ b/frontend/src/app/modules/core/api/http-error.interceptor.ts @@ -19,10 +19,10 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; -import { Observable, throwError } from 'rxjs'; -import { catchError, retry } from 'rxjs/operators'; -import { ToastService } from 'src/app/modules/shared/components/toasts/toast.service'; +import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http'; +import {Observable, throwError} from 'rxjs'; +import {catchError, retry} from 'rxjs/operators'; +import {ToastService} from 'src/app/modules/shared/components/toasts/toast.service'; export class HttpErrorInterceptor implements HttpInterceptor { @@ -46,7 +46,7 @@ export class HttpErrorInterceptor implements HttpInterceptor { const errorMessage = !error.message ? message : `Backend returned code ${ error.status }: ${ error.message }`; // Check if the request URL matches any pattern in the avoidList - if (this.shouldShowToast(request.url)) { + if (!this.isOnAlreadyHandledUrlList(request.url)) { this.toastService.error(errorMessage); } @@ -56,7 +56,7 @@ export class HttpErrorInterceptor implements HttpInterceptor { } // Helper method to check if the URL matches any pattern in the avoidList - private shouldShowToast(url: string): boolean { + private isOnAlreadyHandledUrlList(url: string): boolean { return !this.avoidList.some(pattern => this.urlMatchesPattern(url, pattern)); } diff --git a/frontend/src/app/modules/shared/modules/notification/modal/approve/approve-notification-modal.component.ts b/frontend/src/app/modules/shared/modules/notification/modal/approve/approve-notification-modal.component.ts index 8320df7143..0f21b9cf63 100644 --- a/frontend/src/app/modules/shared/modules/notification/modal/approve/approve-notification-modal.component.ts +++ b/frontend/src/app/modules/shared/modules/notification/modal/approve/approve-notification-modal.component.ts @@ -54,7 +54,7 @@ export class ApproveNotificationModalComponent { this.confirmActionCompleted.emit(); }, error: (err) => { - this.toastService.error(this.translationContext + '.modal.failedApprove', 5000,true, err.error.message); + this.toastService.error(this.translationContext + '.modal.failedApprove', 15000,true); }, }); }; diff --git a/frontend/src/assets/locales/de/common.json b/frontend/src/assets/locales/de/common.json index f8cae56fd7..eb54d0ffce 100644 --- a/frontend/src/assets/locales/de/common.json +++ b/frontend/src/assets/locales/de/common.json @@ -252,7 +252,7 @@ "successfullyDeclined": "Untersuchung wurde erfolgreich abgelehnt.", "failedAccept": "Untersuchung konnte nicht akzeptiert werden, bitte versuchen Sie es erneut.", "failedAcknowledge": "Untersuchung konnte nicht bestätigt werden, bitte versuchen Sie es erneut.", - "failedApprove": "Die Untersuchung konnte nicht genehmigt werden, bitte versuchen Sie es erneut.", + "failedApprove": "Die Qualitätsuntersuchung konnte nicht gesendet werden, bitte versuchen Sie es erneut.", "failedCancel": "Die Untersuchung konnte nicht gelöscht werden, bitte versuchen Sie es erneut.", "failedClose": "Die Untersuchung konnte nicht abgeschlossen werden, bitte versuchen Sie es erneut.", "failedDecline": "Untersuchung konnte nicht abgelehnt werden, bitte versuchen Sie es erneut." @@ -294,7 +294,7 @@ "successfullyDeclined": "Qualitätswarnung wurde erfolgreich abgelehnt.", "failedAccept": "Qualitätswarnung konnte nicht akzeptiert werden, bitte versuchen Sie es erneut.", "failedAcknowledge": "Qualitätswarnung konnte nicht bestätigt werden, bitte versuchen Sie es erneut.", - "failedApprove": "Die Qualitätswarnung konnte nicht genehmigt werden, bitte versuchen Sie es erneut.", + "failedApprove": "Die Qualitätswarnung konnte nicht gesendet werden, bitte versuchen Sie es erneut.", "failedCancel": "Die Qualitätswarnung konnte nicht gelöscht werden, bitte versuchen Sie es erneut.", "failedClose": "Die Qualitätswarnung konnte nicht abgeschlossen werden, bitte versuchen Sie es erneut.", "failedDecline": "Qualitätswarnung konnte nicht abgelehnt werden, bitte versuchen Sie es erneut." diff --git a/frontend/src/assets/locales/en/common.json b/frontend/src/assets/locales/en/common.json index 29757ca061..de887b3ea8 100644 --- a/frontend/src/assets/locales/en/common.json +++ b/frontend/src/assets/locales/en/common.json @@ -254,7 +254,7 @@ "successfullyDeclined": "Investigation was declined successfully.", "failedAccept": "Investigation failed to accept, please try again.", "failedAcknowledge": "Investigation failed to acknowledge, please try again.", - "failedApprove": "Investigation failed to approve, please try again.", + "failedApprove": "Investigation failed to send, please try again.", "failedCancel": "Investigation failed to cancel, please try again.", "failedClose": "Investigation failed to close, please try again.", "failedDecline": "Investigation failed to decline, please try again." @@ -296,7 +296,7 @@ "successfullyDeclined": "Alert was declined successfully.", "failedAccept": "Alert failed to accept, please try again.", "failedAcknowledge": "Alert failed to acknowledge, please try again.", - "failedApprove": "Alert failed to approve, please try again.", + "failedApprove": "Alert failed to send, please try again.", "failedCancel": "Alert failed to cancel, please try again.", "failedClose": "Alert failed to close, please try again.", "failedDecline": "Alert failed to decline, please try again." diff --git a/tx-backend/openapi/traceability-foss-backend.json b/tx-backend/openapi/traceability-foss-backend.json index 7ad6a3adfd..41a2a3e116 100644 --- a/tx-backend/openapi/traceability-foss-backend.json +++ b/tx-backend/openapi/traceability-foss-backend.json @@ -37,8 +37,8 @@ "description" : "The endpoint returns a result of BPN EDC URL mappings.", "operationId" : "getBpnEdcs", "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -47,8 +47,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -57,17 +57,12 @@ } } }, - "200" : { - "description" : "Returns the paged result found", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } @@ -82,8 +77,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -92,18 +87,23 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns the paged result found", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -112,8 +112,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -169,8 +169,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -179,8 +179,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -189,8 +189,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -199,8 +199,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -209,8 +209,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -219,8 +219,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -229,8 +229,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -286,8 +286,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -296,8 +296,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -306,8 +306,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -316,8 +316,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -326,8 +326,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -336,8 +336,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -346,8 +346,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -385,8 +385,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -395,8 +395,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -405,8 +405,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -415,14 +415,8 @@ } } }, - "200" : { - "description" : "Returns the paged result found", - "content" : { - "application/json" : {} - } - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -431,8 +425,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -441,8 +435,14 @@ } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Returns the paged result found", + "content" : { + "application/json" : {} + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -451,8 +451,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -504,8 +504,8 @@ "application/json" : {} } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -514,8 +514,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -524,8 +524,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -534,14 +534,8 @@ } } }, - "200" : { - "description" : "Ok.", - "content" : { - "application/json" : {} - } - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -550,8 +544,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -560,8 +554,14 @@ } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Ok.", + "content" : { + "application/json" : {} + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -570,8 +570,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -609,8 +609,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -619,8 +619,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -629,8 +629,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -639,8 +639,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -649,8 +649,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -659,28 +659,28 @@ } } }, - "400" : { - "description" : "Bad request.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } }, - "201" : { - "description" : "Created.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -729,11 +729,8 @@ "required" : true }, "responses" : { - "200" : { - "description" : "Ok." - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -742,8 +739,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -752,8 +749,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "204" : { + "description" : "No content." + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -762,8 +762,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -772,8 +772,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Ok." + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -782,8 +785,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -792,11 +795,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -845,11 +845,8 @@ "required" : true }, "responses" : { - "200" : { - "description" : "Ok." - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -858,8 +855,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -868,8 +865,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "204" : { + "description" : "No content." + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -878,8 +878,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -888,8 +888,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Ok." + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -898,8 +901,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -908,11 +911,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -951,11 +951,8 @@ } ], "responses" : { - "200" : { - "description" : "Ok." - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -964,8 +961,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -974,8 +971,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -984,8 +981,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -994,11 +991,11 @@ } } }, - "204" : { - "description" : "No content." + "200" : { + "description" : "Ok." }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1007,8 +1004,11 @@ } } }, - "400" : { - "description" : "Bad request.", + "204" : { + "description" : "No content." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1017,8 +1017,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1057,11 +1057,8 @@ } ], "responses" : { - "200" : { - "description" : "Ok." - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1070,8 +1067,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1080,8 +1077,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1090,8 +1087,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1100,11 +1097,11 @@ } } }, - "204" : { - "description" : "No content." + "200" : { + "description" : "Ok." }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1113,8 +1110,11 @@ } } }, - "400" : { - "description" : "Bad request.", + "204" : { + "description" : "No content." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1123,8 +1123,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1162,16 +1162,6 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "429" : { "description" : "Too many requests.", "content" : { @@ -1182,46 +1172,6 @@ } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -1356,6 +1306,16 @@ } } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "415" : { "description" : "Unsupported media type", "content" : { @@ -1365,6 +1325,46 @@ } } } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, "security" : [ @@ -1395,8 +1395,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1405,8 +1405,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1415,8 +1415,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1425,8 +1425,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1435,8 +1435,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1445,28 +1445,28 @@ } } }, - "400" : { - "description" : "Bad request.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/CreateNotificationContractResponse" } } } }, - "201" : { - "description" : "Created.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/CreateNotificationContractResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1505,8 +1505,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1515,8 +1515,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1525,8 +1525,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1535,17 +1535,8 @@ } } }, - "204" : { - "description" : "No Content." - }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} - } - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1554,8 +1545,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1564,8 +1555,14 @@ } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1574,8 +1571,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No Content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1621,8 +1621,8 @@ } }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1631,8 +1631,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1641,8 +1641,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1651,17 +1651,8 @@ } } }, - "204" : { - "description" : "No Content." - }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} - } - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1670,8 +1661,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1680,8 +1671,14 @@ } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1690,8 +1687,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No Content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1729,8 +1729,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1739,8 +1739,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1749,8 +1749,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1759,8 +1759,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1769,8 +1769,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1779,8 +1779,11 @@ } } }, - "400" : { - "description" : "Bad request.", + "201" : { + "description" : "Created." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1789,11 +1792,8 @@ } } }, - "201" : { - "description" : "Created." - }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1831,6 +1831,66 @@ "required" : true }, "responses" : { + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -2002,58 +2062,18 @@ "IN_SYNCHRONIZATION", "UNSET" ] - }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" - }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" - } - } - } - } - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + }, + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" + }, + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + } + } + } + } } } } @@ -2067,26 +2087,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -2117,8 +2117,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2127,8 +2127,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2137,8 +2137,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2147,8 +2147,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2157,8 +2157,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2167,8 +2167,11 @@ } } }, - "400" : { - "description" : "Bad request.", + "201" : { + "description" : "Created." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2177,11 +2180,8 @@ } } }, - "201" : { - "description" : "Created." - }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2219,8 +2219,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2229,8 +2229,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2239,8 +2239,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2249,8 +2249,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2259,8 +2259,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2269,8 +2269,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2466,8 +2466,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2505,8 +2505,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2515,8 +2515,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2525,8 +2525,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2535,8 +2535,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2545,8 +2545,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2555,28 +2555,28 @@ } } }, - "400" : { - "description" : "Bad request.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } }, - "201" : { - "description" : "Created.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2625,8 +2625,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2635,8 +2635,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2645,8 +2645,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "204" : { + "description" : "No content." + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2655,8 +2658,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2665,8 +2668,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2675,8 +2678,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2685,11 +2688,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2738,11 +2738,8 @@ "required" : true }, "responses" : { - "200" : { - "description" : "Ok." - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2751,8 +2748,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2761,8 +2758,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "204" : { + "description" : "No content." + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2771,8 +2771,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2781,8 +2781,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Ok." + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2791,8 +2794,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2801,11 +2804,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2844,11 +2844,8 @@ } ], "responses" : { - "200" : { - "description" : "Ok." - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2857,8 +2854,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2867,8 +2864,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2877,8 +2874,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2887,11 +2884,11 @@ } } }, - "204" : { - "description" : "No content." + "200" : { + "description" : "Ok." }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2900,8 +2897,11 @@ } } }, - "400" : { - "description" : "Bad request.", + "204" : { + "description" : "No content." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2910,8 +2910,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2950,11 +2950,18 @@ } ], "responses" : { - "200" : { - "description" : "Ok." + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2963,8 +2970,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2983,8 +2990,11 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Ok." + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2996,18 +3006,8 @@ "204" : { "description" : "No content." }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3016,8 +3016,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3055,8 +3055,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3065,8 +3065,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3085,8 +3095,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3095,8 +3105,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3233,18 +3243,8 @@ } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3282,6 +3282,66 @@ } ], "responses" : { + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the assets found", "content" : { @@ -3464,46 +3524,6 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "401" : { "description" : "Authorization failed.", "content" : { @@ -3513,26 +3533,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -3571,8 +3571,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3581,8 +3581,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3601,6 +3611,16 @@ } } }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the updated asset", "content" : { @@ -3802,26 +3822,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -4034,8 +4034,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4044,8 +4044,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4054,8 +4054,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4064,8 +4064,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4074,8 +4074,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4084,8 +4084,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4094,8 +4094,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4141,8 +4141,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4151,8 +4151,38 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4343,16 +4373,6 @@ } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "403" : { "description" : "Forbidden.", "content" : { @@ -4372,26 +4392,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -4412,8 +4412,8 @@ "description" : "The endpoint Triggers reload of shell descriptors.", "operationId" : "reload", "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4422,8 +4422,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4432,8 +4432,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4442,11 +4442,8 @@ } } }, - "202" : { - "description" : "Created registry reload job." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4455,8 +4452,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4465,8 +4462,11 @@ } } }, - "400" : { - "description" : "Bad request.", + "202" : { + "description" : "Created registry reload job." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4475,8 +4475,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4504,8 +4504,8 @@ "description" : "The endpoint returns all policies .", "operationId" : "policy", "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4514,8 +4514,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4524,12 +4524,12 @@ } } }, - "200" : { - "description" : "Returns the policies", + "415" : { + "description" : "Unsupported media type", "content" : { - "*/*" : { + "application/json" : { "schema" : { - "$ref" : "#/components/schemas/PolicyResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } @@ -4544,8 +4544,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4554,18 +4554,18 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns the policies", "content" : { - "application/json" : { + "*/*" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/PolicyResponse" } } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4574,8 +4574,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4614,24 +4614,18 @@ } ], "responses" : { - "200" : { - "description" : "OK.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : -2147483648, - "type" : "array", - "description" : "Investigations", - "items" : { - "$ref" : "#/components/schemas/InvestigationResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4640,8 +4634,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4660,18 +4654,24 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "OK.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : -2147483648, + "type" : "array", + "description" : "Investigations", + "items" : { + "$ref" : "#/components/schemas/InvestigationResponse" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4680,8 +4680,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4690,8 +4690,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4759,8 +4759,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4769,8 +4769,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4779,8 +4779,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4789,8 +4789,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4799,8 +4799,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4824,8 +4824,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4834,8 +4834,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4863,18 +4863,18 @@ "description" : "The endpoint can return limited data based on the user role", "operationId" : "dashboard", "responses" : { - "200" : { - "description" : "Returns dashboard data", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/DashboardResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4883,8 +4883,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4903,18 +4903,18 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns dashboard data", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/DashboardResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4923,8 +4923,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4933,8 +4933,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4973,18 +4973,18 @@ } ], "responses" : { - "200" : { - "description" : "OK.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ImportReportResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4993,8 +4993,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5013,11 +5013,8 @@ } } }, - "204" : { - "description" : "No Content." - }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5026,18 +5023,18 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "OK.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/ImportReportResponse" } } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5046,8 +5043,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No Content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5093,8 +5093,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5103,8 +5103,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5123,6 +5133,16 @@ } } }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -5329,26 +5349,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -5411,8 +5411,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5421,8 +5421,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5431,8 +5431,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5441,8 +5441,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5451,8 +5451,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5476,8 +5476,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5486,8 +5486,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5525,16 +5525,6 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "429" : { "description" : "Too many requests.", "content" : { @@ -5545,8 +5535,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5555,8 +5545,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5565,8 +5555,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5575,8 +5565,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5767,8 +5757,18 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5814,36 +5814,6 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -6031,8 +6001,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6041,8 +6011,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6051,8 +6021,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6061,8 +6031,38 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6132,8 +6132,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6142,8 +6142,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6152,8 +6152,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6162,8 +6162,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6172,8 +6172,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6197,8 +6197,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6207,8 +6207,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6236,8 +6236,8 @@ "description" : "The endpoint returns a map for assets consumed by the map.", "operationId" : "assetsCountryMap", "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6246,8 +6246,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6256,8 +6256,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6266,23 +6266,18 @@ } } }, - "200" : { - "description" : "Returns the assets found", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6291,18 +6286,23 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns the assets found", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6311,8 +6311,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6350,8 +6350,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6360,8 +6360,38 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6552,16 +6582,6 @@ } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "403" : { "description" : "Forbidden.", "content" : { @@ -6581,26 +6601,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -6632,23 +6632,18 @@ } ], "responses" : { - "200" : { - "description" : "OK.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Alerts", - "items" : { - "$ref" : "#/components/schemas/AlertResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6657,8 +6652,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6677,18 +6672,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "OK.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "type" : "array", + "description" : "Alerts", + "items" : { + "$ref" : "#/components/schemas/AlertResponse" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6697,8 +6697,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6707,8 +6707,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6776,8 +6776,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6786,8 +6786,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6796,8 +6796,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6806,8 +6806,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6816,8 +6816,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6841,8 +6841,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6851,8 +6851,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6880,11 +6880,8 @@ "description" : "Deletes all submodels from the system.", "operationId" : "deleteSubmodels", "responses" : { - "200" : { - "description" : "Ok." - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6893,8 +6890,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6903,8 +6900,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6913,8 +6910,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6923,8 +6920,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Ok." + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6936,8 +6936,8 @@ "204" : { "description" : "No Content." }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6946,8 +6946,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6985,11 +6985,8 @@ } ], "responses" : { - "204" : { - "description" : "Deleted." - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6998,8 +6995,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -7008,11 +7005,8 @@ } } }, - "200" : { - "description" : "Okay" - }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -7021,8 +7015,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -7031,8 +7025,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -7041,8 +7035,14 @@ } } }, - "400" : { - "description" : "Bad request.", + "204" : { + "description" : "Deleted." + }, + "200" : { + "description" : "Okay" + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -7051,8 +7051,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java index b252def30b..a7ccc422fe 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java @@ -88,12 +88,6 @@ public IrsService( @Override public void createJobToResolveAssets(String globalAssetId, Direction direction, List aspects, BomLifecycle bomLifecycle) { RegisterJobRequest registerJobRequest = RegisterJobRequest.buildJobRequest(globalAssetId, traceabilityProperties.getBpn().toString(), direction, aspects, bomLifecycle, traceabilityProperties.getUrl()); - log.info("Build HTTP Request {}", registerJobRequest); - try { - log.info("Build HTTP Request as JSON {}", objectMapper.writeValueAsString(registerJobRequest)); - } catch (Exception e) { - log.error("exception", e); - } this.irsClient.registerJob(registerJobRequest); } @@ -143,7 +137,7 @@ void saveOrUpdateAssets(AssetCallbackRepository repository, AssetBase asset) { if (!asset.getParentRelations().isEmpty()) { existingAsset.setParentRelations(asset.getParentRelations()); } - existingAsset.setTombstone(asset.getTombstone()); + existingAsset.setTombstone(asset.getTombstone() == null ? "" : asset.getTombstone()); repository.save(existingAsset); } else { repository.save(asset); diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/factory/AssetMapperFactory.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/factory/AssetMapperFactory.java index be0d0b4e35..6c0f2b0255 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/factory/AssetMapperFactory.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/factory/AssetMapperFactory.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.eclipse.tractusx.irs.component.Bpn; import org.eclipse.tractusx.irs.component.Relationship; import org.eclipse.tractusx.irs.component.enums.Direction; @@ -52,6 +53,7 @@ import static org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.mapping.submodel.MapperHelper.getShortId; @Component +@Slf4j @RequiredArgsConstructor public class AssetMapperFactory { @@ -71,7 +73,9 @@ public List mapToAssetBaseList(IRSResponse irsResponse) { List partSiteInformationAsPlanned = extractPartSiteInformationAsPlanned(irsResponse); List tombstones = TombstoneMapper.mapTombstones(irsResponse.jobStatus(), irsResponse.tombstones(), objectMapper); - + if (tombstones != null) { + log.info("Found {} tombstones", tombstones.size()); + } return toAssetBase(irsResponse, descriptionMap, bpnMap, tractionBatteryCode, partSiteInformationAsPlanned, tombstones); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ErrorHandlingConfig.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ErrorHandlingConfig.java index eea36aff70..13e794efab 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ErrorHandlingConfig.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ErrorHandlingConfig.java @@ -43,11 +43,12 @@ import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.CreateNotificationContractException; import org.eclipse.tractusx.traceability.qualitynotification.application.validation.UpdateQualityNotificationValidationException; import org.eclipse.tractusx.traceability.qualitynotification.domain.alert.model.exception.AlertNotFoundException; +import org.eclipse.tractusx.traceability.qualitynotification.domain.base.exception.SendNotificationException; import org.eclipse.tractusx.traceability.qualitynotification.domain.investigation.model.exception.InvestigationIllegalUpdate; import org.eclipse.tractusx.traceability.qualitynotification.domain.investigation.model.exception.InvestigationNotFoundException; -import org.eclipse.tractusx.traceability.qualitynotification.domain.investigation.model.exception.NotificationNotSupportedException; import org.eclipse.tractusx.traceability.qualitynotification.domain.investigation.model.exception.InvestigationReceiverBpnMismatchException; import org.eclipse.tractusx.traceability.qualitynotification.domain.investigation.model.exception.InvestigationStatusTransitionNotAllowed; +import org.eclipse.tractusx.traceability.qualitynotification.domain.investigation.model.exception.NotificationNotSupportedException; import org.eclipse.tractusx.traceability.qualitynotification.domain.investigation.model.exception.NotificationStatusTransitionNotAllowed; import org.eclipse.tractusx.traceability.submodel.domain.model.SubmodelNotFoundException; import org.springframework.context.support.DefaultMessageSourceResolvable; @@ -169,6 +170,13 @@ ResponseEntity handleInvestigationReceiverBpnMismatchException(In .body(new ErrorResponse(exception.getMessage())); } + @ExceptionHandler(SendNotificationException.class) + ResponseEntity handleSendNotificationException(SendNotificationException exception) { + log.warn("handleSendNotificationException", exception); + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) + .body(new ErrorResponse(exception.getMessage())); + } + @ExceptionHandler(ValidationException.class) ResponseEntity handleValidationException(ValidationException exception) { log.warn("handleValidationException", exception); diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/qualitynotification/domain/base/service/AbstractQualityNotificationService.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/qualitynotification/domain/base/service/AbstractQualityNotificationService.java index cbb3ee6d16..e3116ff80c 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/qualitynotification/domain/base/service/AbstractQualityNotificationService.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/qualitynotification/domain/base/service/AbstractQualityNotificationService.java @@ -19,7 +19,6 @@ package org.eclipse.tractusx.traceability.qualitynotification.domain.base.service; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.traceability.assets.domain.asbuilt.service.AssetAsBuiltServiceImpl; import org.eclipse.tractusx.traceability.common.model.PageResult; import org.eclipse.tractusx.traceability.common.model.SearchCriteria; import org.eclipse.tractusx.traceability.qualitynotification.application.base.service.QualityNotificationService; @@ -58,7 +57,7 @@ public void update(Long notificationId, QualityNotificationStatus notificationSt updatedAlert = getNotificationPublisherService().updateNotificationPublisher(alert, notificationStatus, reason); } catch (SendNotificationException exception) { log.info("Notification status rollback", exception); - return; + throw new SendNotificationException(exception.getMessage()); } getQualityNotificationRepository().updateQualityNotificationEntity(updatedAlert); @@ -78,7 +77,7 @@ public void approve(Long notificationId) { approvedInvestigation = getNotificationPublisherService().approveNotification(notification); } catch (SendNotificationException exception) { log.info("Notification status rollback", exception); - return; + throw new SendNotificationException(exception.getMessage()); } getQualityNotificationRepository().updateQualityNotificationEntity(approvedInvestigation); } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/infrastructure/edc/notificationcontract/service/EdcNotificationContractServiceTest.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/infrastructure/edc/notificationcontract/service/EdcNotificationContractServiceTest.java index 78f632137e..48e1ad4f93 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/infrastructure/edc/notificationcontract/service/EdcNotificationContractServiceTest.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/infrastructure/edc/notificationcontract/service/EdcNotificationContractServiceTest.java @@ -45,6 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -127,7 +128,7 @@ void givenService_whenPolicyDefinitionServiceThrowsException_thenThrowException( when(edcNotificationAssetService.createNotificationAsset(any(), any(), any(), any())).thenReturn(notificationAssetId); when(traceabilityProperties.getUrl()).thenReturn("https://test"); when(traceabilityProperties.getRightOperand()).thenReturn(rightOperand); - doThrow(CreateEdcPolicyDefinitionException.class).when(edcPolicyDefinitionService).createAccessPolicy(any()); + doThrow(CreateEdcPolicyDefinitionException.class).when(edcPolicyDefinitionService).createAccessPolicy(anyString()); // when/then assertThrows(CreateNotificationContractException.class, () -> edcNotificationContractService.handle(request)); diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/alert/ReceiverAlertsControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/alert/ReceiverAlertsControllerIT.java index bc3de39353..e9f7a407d1 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/alert/ReceiverAlertsControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/alert/ReceiverAlertsControllerIT.java @@ -25,6 +25,7 @@ import org.eclipse.tractusx.traceability.common.request.SearchCriteriaRequestParam; import org.eclipse.tractusx.traceability.integration.IntegrationTestSpecification; import org.eclipse.tractusx.traceability.integration.common.support.AlertsSupport; +import org.eclipse.tractusx.traceability.integration.common.support.AssetsSupport; import org.hamcrest.Matchers; import org.jose4j.lang.JoseException; import org.junit.jupiter.api.Test; @@ -47,41 +48,8 @@ class ReceiverAlertsControllerIT extends IntegrationTestSpecification { @Autowired AlertsSupport alertsSupport; - @Test - void ShouldAcknowledgeReceivedAlert() throws JoseException { - // given - var alertId = alertsSupport.defaultReceivedAlertStored(); - String filterString = "channel,EQUAL,RECEIVER,AND"; - - // when - given() - .contentType(ContentType.JSON) - .body( - """ - { - "status" : "ACKNOWLEDGED" - } - """ - ) - .header(oAuth2Support.jwtAuthorization(SUPERVISOR)) - .when() - .post("/api/alerts/$alertId/update".replace("$alertId", alertId.toString())) - .then() - .statusCode(204); - - // then - given() - .header(oAuth2Support.jwtAuthorization(ADMIN)) - .body(new PageableFilterRequest(new OwnPageable(0, 10, List.of()), new SearchCriteriaRequestParam(List.of(filterString)))) - .contentType(ContentType.JSON) - .when() - .post("/api/alerts/filter") - .then() - .statusCode(200) - .body("page", Matchers.is(0)) - .body("pageSize", Matchers.is(10)) - .body("content", Matchers.hasSize(1)); - } + @Autowired + AssetsSupport assetsSupport; @Test void shouldNotUpdateToAcknowledgedNonExistingAlert() throws JoseException { diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/investigation/ReceiverInvestigationsControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/investigation/ReceiverInvestigationsControllerIT.java index 40099de4d0..af94073c1e 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/investigation/ReceiverInvestigationsControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/investigation/ReceiverInvestigationsControllerIT.java @@ -20,13 +20,8 @@ package org.eclipse.tractusx.traceability.integration.qualitynotification.investigation; import io.restassured.http.ContentType; -import lombok.val; -import org.eclipse.tractusx.traceability.common.request.OwnPageable; -import org.eclipse.tractusx.traceability.common.request.PageableFilterRequest; -import org.eclipse.tractusx.traceability.common.request.SearchCriteriaRequestParam; import org.eclipse.tractusx.traceability.integration.IntegrationTestSpecification; import org.eclipse.tractusx.traceability.integration.common.support.InvestigationsSupport; -import org.hamcrest.Matchers; import org.jose4j.lang.JoseException; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -35,11 +30,9 @@ import org.springframework.beans.factory.annotation.Autowired; import qualitynotification.base.request.UpdateQualityNotificationStatusRequest; -import java.util.List; import java.util.stream.Stream; import static io.restassured.RestAssured.given; -import static org.eclipse.tractusx.traceability.common.security.JwtRole.ADMIN; import static org.eclipse.tractusx.traceability.common.security.JwtRole.SUPERVISOR; import static org.junit.jupiter.params.provider.Arguments.arguments; @@ -48,40 +41,6 @@ class ReceiverInvestigationsControllerIT extends IntegrationTestSpecification { @Autowired InvestigationsSupport investigationsSupport; - @Test - void ShouldAcknowledgeReceivedInvestigation() throws JoseException { - // given - val investigationId = investigationsSupport.defaultReceivedInvestigationStored(); - - // when - given() - .contentType(ContentType.JSON) - .body(""" - { - "status" : "ACKNOWLEDGED" - } - """) - .header(oAuth2Support.jwtAuthorization(SUPERVISOR)) - .when() - .post("/api/investigations/{investigationId}/update", investigationId) - .then() - .statusCode(204); - - // then - given() - .header(oAuth2Support.jwtAuthorization(ADMIN)) - .body(new PageableFilterRequest(new OwnPageable(0, 10, List.of()), new SearchCriteriaRequestParam(List.of()))) - .contentType(ContentType.JSON) - .when() - .post("/api/investigations/filter") - .then() - .statusCode(200) - .body("page", Matchers.is(0)) - .body("pageSize", Matchers.is(10)) - .body("content", Matchers.hasSize(1)) - .body("content.status", Matchers.containsInRelativeOrder("RECEIVED")); - } - @Test void shouldNotUpdateToAcknowledgedNonExistingInvestigation() throws JoseException { // given From 340698f590012ecc253bf5be893cbfb0c928c589 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Thu, 7 Mar 2024 09:14:25 +0100 Subject: [PATCH 05/87] chore(contracts): 421 create contract agreement view --- .../modules/page/admin/core/admin.service.ts | 6 ----- .../contract-table.component.html | 15 ++++++++++++- .../contract-table.component.spec.ts | 22 +++++++++++-------- .../contract-table.component.ts | 4 ++++ .../components/table/table.component.ts | 19 ++++++++++++---- 5 files changed, 46 insertions(+), 20 deletions(-) diff --git a/frontend/src/app/modules/page/admin/core/admin.service.ts b/frontend/src/app/modules/page/admin/core/admin.service.ts index ed1a75f125..c4f3a832c2 100644 --- a/frontend/src/app/modules/page/admin/core/admin.service.ts +++ b/frontend/src/app/modules/page/admin/core/admin.service.ts @@ -75,12 +75,6 @@ export class AdminService { }, }; - let params = new HttpParams() - .set('page', page) - .set('size', pageSize) - //.set('filter', filter) - //.set('sort', sorting[0].toString()) - return this.apiService.post(`${this.url}/contracts`, body) } diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html index 631ac1f195..b048615550 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html @@ -21,8 +21,11 @@ >{{'pageAdmin.contracts.exportAsCSV' | i18n}} + + + + + + + + + + + + + diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts index 38d9998d98..dff1165b35 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts @@ -1,21 +1,25 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; +import { AdminModule } from '@page/admin/admin.module'; +import { AdminFacade } from '@page/admin/core/admin.facade'; +import { AdminService } from '@page/admin/core/admin.service'; +import { renderComponent } from '@tests/test-render.utils'; import { ContractTableComponent } from './contract-table.component'; describe('ContractTableComponent', () => { - let component: ContractTableComponent; - let fixture: ComponentFixture; + const renderContractTableComponent = () => renderComponent(ContractTableComponent, { imports: [AdminModule]}) beforeEach(() => { TestBed.configureTestingModule({ - declarations: [ContractTableComponent] + declarations: [ContractTableComponent], + providers: [AdminFacade, AdminService] }); - fixture = TestBed.createComponent(ContractTableComponent); - component = fixture.componentInstance; - fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); + it('should create', async() => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + expect(componentInstance).toBeTruthy(); }); }); diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts index 575fbcd517..776dc9e5fb 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts @@ -4,8 +4,10 @@ import { AdminFacade } from '@page/admin/core/admin.facade'; import { Contract } from '@page/admin/core/admin.model'; import { TableType } from '@shared/components/multi-select-autocomplete/table-type.model'; import { CreateHeaderFromColumns, TableConfig, TableEventConfig } from '@shared/components/table/table.model'; +import { View } from '@shared/model/view.model'; import { NotificationAction } from '@shared/modules/notification/notification-action.enum'; import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; @Component({ selector: 'app-contract-table', @@ -14,6 +16,7 @@ import { Observable } from 'rxjs'; }) export class ContractTableComponent { contracts: Observable>; + contractsView$: Observable>>; tableConfig: TableConfig; selectedContracts: Contract[]; contractFilter: any; @@ -40,6 +43,7 @@ export class ContractTableComponent { public ngOnInit() { this.contracts = this.adminFacade.getContracts(0, 10); + this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) } filterActivated(contractFilter: any): void { diff --git a/frontend/src/app/modules/shared/components/table/table.component.ts b/frontend/src/app/modules/shared/components/table/table.component.ts index a0260f0275..94faf0ffda 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.ts +++ b/frontend/src/app/modules/shared/components/table/table.component.ts @@ -87,7 +87,7 @@ export class TableComponent { @Input() multiSortList: TableHeaderSort[]; @Input() set paginationData(paginationData: Pagination) { - if(!paginationData) { + if (!paginationData) { return; } @@ -169,12 +169,21 @@ export class TableComponent { } ngOnInit(): void { + + const displayFilterColumnMappings = this.tableType === TableType.CONTRACTS ? + PartsTableConfigUtils.generateFilterColumnsMapping(this.tableConfig?.sortableColumns, [ 'creationDate', 'endDate' ], [], true, false) + : PartsTableConfigUtils.generateFilterColumnsMapping(this.tableConfig?.sortableColumns, [ 'createdDate', 'targetDate' ], [], false, true); + + const filterColumns = this.tableType === TableType.CONTRACTS ? + PartsTableConfigUtils.createFilterColumns(this.tableConfig?.displayedColumns, true, false) + : PartsTableConfigUtils.createFilterColumns(this.tableConfig?.displayedColumns, false, true); + this.tableViewConfig = { displayedColumns: Object.keys(this.tableConfig.sortableColumns), filterFormGroup: PartsTableConfigUtils.createFormGroup(this.tableConfig?.displayedColumns), - filterColumns: PartsTableConfigUtils.createFilterColumns(this.tableConfig?.displayedColumns, false, true), + filterColumns: filterColumns, sortableColumns: this.tableConfig?.sortableColumns, - displayFilterColumnMappings: PartsTableConfigUtils.generateFilterColumnsMapping(this.tableConfig?.sortableColumns, [ 'createdDate', 'targetDate' ], [], false, true), + displayFilterColumnMappings: displayFilterColumnMappings, }; for (const controlName in this.tableViewConfig.filterFormGroup) { @@ -186,6 +195,8 @@ export class TableComponent { this.filterFormGroup.valueChanges.subscribe((formValues) => { this.filterActivated.emit(formValues); }); + console.log(this.tableConfig); + console.log(this.tableViewConfig); } public areAllRowsSelected(): boolean { @@ -219,7 +230,7 @@ export class TableComponent { this.emitMultiSelect(); this.sorting = !direction ? null : ([ active, direction ] as TableHeaderSort); this.isDataLoading = true; - if (this.pageSize === 0){ + if (this.pageSize === 0) { this.pageSize = EmptyPagination.pageSize; } this.configChanged.emit({ page: 0, pageSize: this.pageSize, sorting: this.sorting }); From 0b1122a204e06e55b724195638fbf89fffe2909a Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Thu, 7 Mar 2024 16:07:07 +0100 Subject: [PATCH 06/87] chore: update COMPATIBILITY_MATRIX.md --- COMPATIBILITY_MATRIX.md | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/COMPATIBILITY_MATRIX.md b/COMPATIBILITY_MATRIX.md index a17019e77f..d5d223acb8 100644 --- a/COMPATIBILITY_MATRIX.md +++ b/COMPATIBILITY_MATRIX.md @@ -1,15 +1,46 @@ # Compatibility matrix Trace-X ## Catena-X Release? -- [x] yes -> Catena-X Release 9.0.0-rc2 + +- [x] yes -> Catena-X Release 10.6.0 - [ ] no +### (Trace-X Release) [10.6.0| Release Notes](https://github.com/catenax-ng/tx-traceability-foss/releases/tag/10.6.0) + +#### Trace-X version 10.6.0 + +#### Helm Version helm-charts-1.3.31 + +| Dependency | Name of Service | Version | Helm | Comments | +|-------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Service | discovery service | 1.16.0 | 0.1.0 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | + +## Catena-X Release? + +- [x] yes -> Catena-X Release 9.0.0-rc2 +- [ ] no ### (Trace-X Release) [9.0.0-rc2| Release Notes](https://github.com/catenax-ng/tx-traceability-foss/releases/tag/9.0.0-rc2) #### Trace-X version 9.0.0-rc2 -#### Helm Version 1.3.21 +#### Helm Version 1.3.21 | Dependency | Name of Service | Version | Helm | Comments | |-------------------|------------------------------|---------------------------------|-------|-----------------------------------------------------------------------------------| From 640003593f067cfa2c2e88b564491bb497ca2d8c Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Thu, 7 Mar 2024 16:16:17 +0100 Subject: [PATCH 07/87] chore: update COMPATIBILITY_MATRIX.md --- COMPATIBILITY_MATRIX.md | 52 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/COMPATIBILITY_MATRIX.md b/COMPATIBILITY_MATRIX.md index d5d223acb8..c887544952 100644 --- a/COMPATIBILITY_MATRIX.md +++ b/COMPATIBILITY_MATRIX.md @@ -2,34 +2,34 @@ ## Catena-X Release? -- [x] yes -> Catena-X Release 10.6.0 +- [x] yes -> Catena-X Release 10.3.0 - [ ] no -### (Trace-X Release) [10.6.0| Release Notes](https://github.com/catenax-ng/tx-traceability-foss/releases/tag/10.6.0) - -#### Trace-X version 10.6.0 - -#### Helm Version helm-charts-1.3.31 - -| Dependency | Name of Service | Version | Helm | Comments | -|-------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| -| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | -| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | -| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | -| Discovery Service | discovery service | 1.16.0 | 0.1.0 | Service for discovering and registering artifacts | -| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | -| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | -| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | -| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | -| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | -| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | -| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | -| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | -| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | -| Aspect Model | TractionBatteryCode | [1.0.0] | - | | -| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | -| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | -| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | +### (Trace-X Release) [10.3.0| Release Notes](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.3.0) + +#### Trace-X version 10.3.0 + +#### Helm Version 1.3.28 + +| Dependency | Name of Service | Version | Helm | Comments | +|------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Finder | discovery service | v0.2.4-M1 | 0.1.11 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | ## Catena-X Release? From 900b5d1ff41feae17a6aace3fd9781e1e95f64b2 Mon Sep 17 00:00:00 2001 From: ds-mwesener <124587888+ds-mwesener@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:35:54 +0000 Subject: [PATCH 08/87] Update Dependencies Backend Action --- DEPENDENCIES_BACKEND | 14 +- DEPENDENCIES_FRONTEND | 1703 ----------------------------------------- 2 files changed, 7 insertions(+), 1710 deletions(-) diff --git a/DEPENDENCIES_BACKEND b/DEPENDENCIES_BACKEND index 55cab4eaf8..0c78aba26f 100644 --- a/DEPENDENCIES_BACKEND +++ b/DEPENDENCIES_BACKEND @@ -161,9 +161,9 @@ maven/mavencentral/net.java.dev.jna/jna/5.12.1, Apache-2.0 OR LGPL-2.1-or-later, maven/mavencentral/net.javacrumbs.json-unit/json-unit-assertj/3.2.2, Apache-2.0, approved, clearlydefined maven/mavencentral/net.javacrumbs.json-unit/json-unit-core/3.2.2, Apache-2.0, approved, clearlydefined maven/mavencentral/net.javacrumbs.json-unit/json-unit-json-path/3.2.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/net.javacrumbs.shedlock/shedlock-core/5.11.0, , restricted, clearlydefined -maven/mavencentral/net.javacrumbs.shedlock/shedlock-provider-jdbc-template/5.11.0, , restricted, clearlydefined -maven/mavencentral/net.javacrumbs.shedlock/shedlock-spring/5.11.0, , restricted, clearlydefined +maven/mavencentral/net.javacrumbs.shedlock/shedlock-core/5.11.0, Apache-2.0, approved, #13500 +maven/mavencentral/net.javacrumbs.shedlock/shedlock-provider-jdbc-template/5.11.0, Apache-2.0, approved, #13498 +maven/mavencentral/net.javacrumbs.shedlock/shedlock-spring/5.11.0, Apache-2.0, approved, #13499 maven/mavencentral/net.minidev/accessors-smart/2.4.11, Apache-2.0, approved, #7515 maven/mavencentral/net.minidev/accessors-smart/2.4.9, Apache-2.0, approved, #7515 maven/mavencentral/net.minidev/json-smart/2.4.10, Apache-2.0, approved, #3288 @@ -301,10 +301,10 @@ maven/mavencentral/org.eclipse.jetty/jetty-webapp/11.0.17, EPL-2.0 OR Apache-2.0 maven/mavencentral/org.eclipse.jetty/jetty-webapp/11.0.20, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-xml/11.0.17, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-xml/11.0.20, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.tractusx.irs/irs-common/1.6.0-20240229.132600-18, Apache-2.0, approved, automotive.tractusx -maven/mavencentral/org.eclipse.tractusx.irs/irs-edc-client/1.6.0-20240229.132600-18, Apache-2.0, approved, automotive.tractusx -maven/mavencentral/org.eclipse.tractusx.irs/irs-models/1.6.0-20240229.132600-18, Apache-2.0, approved, automotive.tractusx -maven/mavencentral/org.eclipse.tractusx.irs/irs-registry-client/1.6.0-20240229.132600-18, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.irs/irs-common/1.6.0-20240307.091809-32, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.irs/irs-edc-client/1.6.0-20240307.091809-32, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.irs/irs-models/1.6.0-20240307.091809-32, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.irs/irs-registry-client/1.6.0-20240307.091809-32, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.eclipse.tractusx.traceability/tx-backend/0.0.1-SNAPSHOT, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.eclipse.tractusx.traceability/tx-models/0.0.1-SNAPSHOT, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.flywaydb/flyway-core/9.16.3, Apache-2.0, approved, #7935 diff --git a/DEPENDENCIES_FRONTEND b/DEPENDENCIES_FRONTEND index bf05c2aa8e..e69de29bb2 100644 --- a/DEPENDENCIES_FRONTEND +++ b/DEPENDENCIES_FRONTEND @@ -1,1703 +0,0 @@ -npm/npmjs/-/abab/2.0.6, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/abbrev/1.1.1, ISC, approved, clearlydefined -npm/npmjs/-/accepts/1.3.8, MIT, approved, clearlydefined -npm/npmjs/-/acorn-globals/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn-import-assertions/1.8.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn-import-assertions/1.9.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn-jsx/5.3.2, MIT, approved, clearlydefined -npm/npmjs/-/acorn-walk/7.2.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn-walk/8.2.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn/7.4.1, MIT, approved, clearlydefined -npm/npmjs/-/acorn/8.11.3, MIT, approved, clearlydefined -npm/npmjs/-/acorn/8.8.2, MIT, approved, #6951 -npm/npmjs/-/adjust-sourcemap-loader/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/agent-base/6.0.2, MIT, approved, clearlydefined -npm/npmjs/-/agentkeepalive/4.2.1, MIT, approved, clearlydefined -npm/npmjs/-/aggregate-error/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/ajv-formats/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/ajv-keywords/3.5.2, MIT, approved, clearlydefined -npm/npmjs/-/ajv-keywords/5.1.0, MIT, approved, clearlydefined -npm/npmjs/-/ajv/6.12.6, MIT, approved, #979 -npm/npmjs/-/ajv/8.11.0, MIT, approved, #4969 -npm/npmjs/-/ajv/8.12.0, MIT AND OFL-1.1 AND (EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0), approved, #6025 -npm/npmjs/-/angular-i18next/16.0.0, MIT, approved, clearlydefined -npm/npmjs/-/angular-split/16.2.1, Apache-2.0, approved, #13295 -npm/npmjs/-/ansi-colors/4.1.3, MIT, approved, clearlydefined -npm/npmjs/-/ansi-escapes/4.3.2, MIT, approved, clearlydefined -npm/npmjs/-/ansi-html-community/0.0.8, Apache-2.0, approved, clearlydefined -npm/npmjs/-/ansi-regex/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/ansi-regex/5.0.1, MIT, approved, clearlydefined -npm/npmjs/-/ansi-regex/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/ansi-styles/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/ansi-styles/4.3.0, MIT, approved, clearlydefined -npm/npmjs/-/ansi-styles/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/ansi-styles/6.1.0, MIT, approved, clearlydefined -npm/npmjs/-/any-promise/1.3.0, MIT, approved, clearlydefined -npm/npmjs/-/anymatch/3.1.3, ISC, approved, #5050 -npm/npmjs/-/aproba/2.0.0, ISC, approved, clearlydefined -npm/npmjs/-/arch/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/are-docs-informative/0.0.2, MIT, approved, #8056 -npm/npmjs/-/are-we-there-yet/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/arg/4.1.3, MIT, approved, clearlydefined -npm/npmjs/-/arg/5.0.2, MIT, approved, clearlydefined -npm/npmjs/-/argparse/1.0.10, MIT, approved, #2174 -npm/npmjs/-/argparse/2.0.1, Python-2.0, approved, CQ22954 -npm/npmjs/-/aria-query/5.1.3, Apache-2.0, approved, clearlydefined -npm/npmjs/-/aria-query/5.3.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/array-buffer-byte-length/1.0.0, MIT, approved, #7548 -npm/npmjs/-/array-flatten/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/array-flatten/2.1.2, MIT, approved, clearlydefined -npm/npmjs/-/array-includes/3.1.6, MIT, approved, #4577 -npm/npmjs/-/array-union/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/array.prototype.flat/1.3.1, MIT, approved, #4574 -npm/npmjs/-/array.prototype.flatmap/1.3.1, MIT, approved, #4651 -npm/npmjs/-/arrify/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/asn1/0.2.6, MIT, approved, clearlydefined -npm/npmjs/-/assert-plus/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/assertion-error-formatter/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/astral-regex/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/async/3.2.4, Apache-2.0 AND MIT, approved, #1553 -npm/npmjs/-/asynckit/0.4.0, MIT, approved, clearlydefined -npm/npmjs/-/at-least-node/1.0.0, ISC, approved, clearlydefined -npm/npmjs/-/atob/2.1.2, MIT OR Apache-2.0, approved, #1027 -npm/npmjs/-/autoprefixer/10.4.14, MIT, approved, #7494 -npm/npmjs/-/available-typed-arrays/1.0.5, MIT, approved, clearlydefined -npm/npmjs/-/aws-sign2/0.7.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/aws4/1.11.0, MIT, approved, clearlydefined -npm/npmjs/-/axios/1.6.7, MIT, approved, #11338 -npm/npmjs/-/axobject-query/4.0.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/babel-loader/9.1.3, MIT, approved, clearlydefined -npm/npmjs/-/babel-plugin-istanbul/6.1.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/babel-plugin-polyfill-corejs2/0.4.8, MIT, approved, #9309 -npm/npmjs/-/babel-plugin-polyfill-corejs3/0.8.7, MIT, approved, #9316 -npm/npmjs/-/babel-plugin-polyfill-regenerator/0.5.5, MIT, approved, #9310 -npm/npmjs/-/balanced-match/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/balanced-match/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/base64-js/1.5.1, MIT, approved, clearlydefined -npm/npmjs/-/base64id/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/batch/0.6.1, MIT, approved, clearlydefined -npm/npmjs/-/bcrypt-pbkdf/1.0.2, BSD-3-Clause AND ISC AND BSD-3-Clause, approved, #2725 -npm/npmjs/-/big.js/5.2.2, MIT, approved, clearlydefined -npm/npmjs/-/binary-extensions/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/bl/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/blob-util/2.0.2, Apache-2.0, approved, clearlydefined -npm/npmjs/-/bluebird/3.7.2, MIT, approved, clearlydefined -npm/npmjs/-/body-parser/1.20.1, MIT, approved, clearlydefined -npm/npmjs/-/body-parser/1.20.2, MIT, approved, clearlydefined -npm/npmjs/-/bonjour-service/1.1.1, MIT, approved, #7474 -npm/npmjs/-/boolbase/1.0.0, ISC, approved, clearlydefined -npm/npmjs/-/brace-expansion/1.1.11, MIT, approved, clearlydefined -npm/npmjs/-/brace-expansion/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/braces/3.0.2, MIT, approved, clearlydefined -npm/npmjs/-/browser-process-hrtime/1.0.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/browserslist/4.21.5, MIT, approved, #7034 -npm/npmjs/-/browserslist/4.22.3, MIT, approved, #10780 -npm/npmjs/-/buffer-crc32/0.2.13, MIT, approved, clearlydefined -npm/npmjs/-/buffer-from/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/buffer/5.7.1, MIT, approved, clearlydefined -npm/npmjs/-/builtins/5.0.1, MIT, approved, clearlydefined -npm/npmjs/-/bytes/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/bytes/3.1.2, MIT, approved, clearlydefined -npm/npmjs/-/cacache/16.1.3, ISC, approved, clearlydefined -npm/npmjs/-/cacache/17.0.4, ISC, approved, #7610 -npm/npmjs/-/cachedir/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/call-bind/1.0.5, MIT, approved, #11092 -npm/npmjs/-/callsites/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/camelcase-css/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/camelcase-keys/6.2.2, MIT, approved, clearlydefined -npm/npmjs/-/camelcase/5.3.1, MIT, approved, clearlydefined -npm/npmjs/-/caniuse-lite/1.0.30001486, CC-BY-4.0, approved, #1196 -npm/npmjs/-/caniuse-lite/1.0.30001581, CC-BY-4.0, approved, #1196 -npm/npmjs/-/capital-case/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/caseless/0.12.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/chalk/2.4.2, MIT, approved, clearlydefined -npm/npmjs/-/chalk/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/chalk/4.1.2, MIT, approved, clearlydefined -npm/npmjs/-/chalk/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/chardet/0.7.0, MIT, approved, clearlydefined -npm/npmjs/-/check-more-types/2.24.0, MIT, approved, clearlydefined -npm/npmjs/-/chokidar/3.5.3, MIT, approved, #2317 -npm/npmjs/-/chownr/2.0.0, ISC, approved, clearlydefined -npm/npmjs/-/chrome-trace-event/1.0.3, MIT, approved, #2414 -npm/npmjs/-/ci-info/3.7.0, MIT, approved, clearlydefined -npm/npmjs/-/class-transformer/0.5.1, MIT, approved, clearlydefined -npm/npmjs/-/clean-stack/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/cli-cursor/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/cli-spinners/2.6.1, MIT, approved, clearlydefined -npm/npmjs/-/cli-spinners/2.9.0, MIT, approved, #8249 -npm/npmjs/-/cli-table/0.3.11, MIT, approved, clearlydefined -npm/npmjs/-/cli-table3/0.6.3, MIT, approved, clearlydefined -npm/npmjs/-/cli-truncate/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/cli-truncate/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/cli-width/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/cliui/7.0.4, ISC AND Artistic-2.0, approved, #2724 -npm/npmjs/-/cliui/8.0.1, ISC AND Artistic-2.0, approved, #3753 -npm/npmjs/-/clone-deep/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/clone-regexp/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/clone/1.0.4, MIT, approved, #2729 -npm/npmjs/-/color-convert/1.9.3, MIT, approved, clearlydefined -npm/npmjs/-/color-convert/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/color-name/1.1.3, MIT, approved, clearlydefined -npm/npmjs/-/color-name/1.1.4, MIT, approved, clearlydefined -npm/npmjs/-/color-string/1.9.1, MIT, approved, clearlydefined -npm/npmjs/-/color-support/1.1.3, ISC, approved, clearlydefined -npm/npmjs/-/color/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/colord/2.9.3, MIT, approved, clearlydefined -npm/npmjs/-/colorette/2.0.20, MIT, approved, clearlydefined -npm/npmjs/-/colors/1.0.3, MIT, approved, clearlydefined -npm/npmjs/-/colors/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/colorspace/1.1.4, MIT, approved, clearlydefined -npm/npmjs/-/combined-stream/1.0.8, MIT, approved, clearlydefined -npm/npmjs/-/commander/10.0.1, MIT, approved, #8062 -npm/npmjs/-/commander/2.20.3, MIT, approved, clearlydefined -npm/npmjs/-/commander/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/commander/6.2.1, MIT, approved, clearlydefined -npm/npmjs/-/commander/7.2.0, MIT, approved, clearlydefined -npm/npmjs/-/commander/9.1.0, MIT, approved, clearlydefined -npm/npmjs/-/commander/9.4.1, MIT, approved, clearlydefined -npm/npmjs/-/commander/9.5.0, MIT, approved, #6166 -npm/npmjs/-/comment-parser/1.3.1, MIT, approved, clearlydefined -npm/npmjs/-/common-ancestor-path/1.0.1, ISC, approved, clearlydefined -npm/npmjs/-/common-path-prefix/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/common-tags/1.8.2, MIT, approved, #2950 -npm/npmjs/-/compressible/2.0.18, MIT, approved, clearlydefined -npm/npmjs/-/compression/1.7.4, MIT, approved, #1975 -npm/npmjs/-/concat-map/0.0.1, MIT, approved, clearlydefined -npm/npmjs/-/connect-history-api-fallback/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/connect/3.7.0, MIT, approved, clearlydefined -npm/npmjs/-/console-control-strings/1.1.0, ISC, approved, clearlydefined -npm/npmjs/-/content-disposition/0.5.4, MIT, approved, clearlydefined -npm/npmjs/-/content-type/1.0.5, MIT, approved, #6950 -npm/npmjs/-/convert-source-map/1.9.0, MIT, approved, clearlydefined -npm/npmjs/-/convert-source-map/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/cookie-signature/1.0.6, MIT, approved, clearlydefined -npm/npmjs/-/cookie/0.4.2, MIT, approved, clearlydefined -npm/npmjs/-/cookie/0.5.0, MIT, approved, clearlydefined -npm/npmjs/-/copy-anything/2.0.6, 0BSD AND MIT, approved, #1819 -npm/npmjs/-/copy-webpack-plugin/11.0.0, MIT, approved, clearlydefined -npm/npmjs/-/core-js-compat/3.35.1, MIT, approved, #12900 -npm/npmjs/-/core-util-is/1.0.2, MIT, approved, #5898 -npm/npmjs/-/core-util-is/1.0.3, MIT, approved, #5898 -npm/npmjs/-/cors/2.8.5, MIT, approved, clearlydefined -npm/npmjs/-/cosmiconfig-typescript-loader/4.3.0, MIT, approved, clearlydefined -npm/npmjs/-/cosmiconfig/7.1.0, MIT, approved, #4975 -npm/npmjs/-/cosmiconfig/8.1.3, MIT, approved, #7589 -npm/npmjs/-/cosmiconfig/8.3.6, MIT, approved, #10781 -npm/npmjs/-/create-require/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/critters/0.0.20, Apache-2.0, approved, clearlydefined -npm/npmjs/-/cross-fetch/3.1.5, MIT, approved, clearlydefined -npm/npmjs/-/cross-spawn/7.0.3, MIT, approved, clearlydefined -npm/npmjs/-/css-functions-list/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/css-loader/6.8.1, MIT AND Apache-2.0, approved, #8759 -npm/npmjs/-/css-select/5.1.0, BSD-2-Clause AND MIT, approved, #3493 -npm/npmjs/-/css-tree/2.3.1, MIT, approved, clearlydefined -npm/npmjs/-/css-what/6.1.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/css.escape/1.5.1, MIT, approved, clearlydefined -npm/npmjs/-/css/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/cssesc/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/cssom/0.3.8, MIT, approved, clearlydefined -npm/npmjs/-/cssom/0.4.4, MIT, approved, clearlydefined -npm/npmjs/-/cssstyle/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/custom-event/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/cypress/12.17.4, MIT, restricted, clearlydefined -npm/npmjs/-/d3-array/3.2.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-axis/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-brush/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-chord/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-color/3.1.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-contour/4.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-delaunay/6.0.2, ISC, approved, clearlydefined -npm/npmjs/-/d3-dispatch/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-drag/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-dsv/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-ease/3.0.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/d3-fetch/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-force/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-format/3.1.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-geo/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-hierarchy/3.1.2, ISC, approved, clearlydefined -npm/npmjs/-/d3-interpolate/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-path/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-polygon/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-quadtree/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-random/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-scale-chromatic/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-scale/4.0.2, ISC, approved, clearlydefined -npm/npmjs/-/d3-selection/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-shape/3.1.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-time-format/4.1.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-time/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-timer/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-transition/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-zoom/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3/7.8.4, ISC, approved, clearlydefined -npm/npmjs/-/dashdash/1.14.1, MIT, approved, clearlydefined -npm/npmjs/-/data-urls/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/date-format/4.0.14, MIT, approved, clearlydefined -npm/npmjs/-/dayjs/1.11.7, MIT, approved, #9149 -npm/npmjs/-/debug/2.6.9, MIT, approved, clearlydefined -npm/npmjs/-/debug/3.2.7, MIT, approved, clearlydefined -npm/npmjs/-/debug/4.3.4, MIT, approved, clearlydefined -npm/npmjs/-/decamelize-keys/1.1.0, MIT, approved, #4601 -npm/npmjs/-/decamelize/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/decimal.js/10.4.3, MIT, approved, clearlydefined -npm/npmjs/-/decode-uri-component/0.2.2, MIT, approved, #5322 -npm/npmjs/-/deep-equal/2.2.3, MIT, approved, #8406 -npm/npmjs/-/deep-is/0.1.4, MIT, approved, #2130 -npm/npmjs/-/default-gateway/6.0.3, BSD-2-Clause AND BSD-3-Clause, approved, #2956 -npm/npmjs/-/defaults/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/define-data-property/1.1.1, MIT, approved, #10591 -npm/npmjs/-/define-lazy-prop/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/define-properties/1.2.1, MIT, approved, #7116 -npm/npmjs/-/delaunator/5.0.0, ISC, approved, clearlydefined -npm/npmjs/-/delayed-stream/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/delegates/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/depd/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/depd/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/dequal/2.0.3, MIT, approved, clearlydefined -npm/npmjs/-/destroy/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/detect-node/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/di/0.0.1, MIT, approved, clearlydefined -npm/npmjs/-/didyoumean/1.2.2, Apache-2.0, approved, clearlydefined -npm/npmjs/-/diff/4.0.2, BSD-3-Clause, approved, #2728 -npm/npmjs/-/dir-glob/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/dlv/1.1.3, MIT, approved, clearlydefined -npm/npmjs/-/dns-equal/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/dns-packet/5.6.0, MIT, approved, clearlydefined -npm/npmjs/-/doctrine/2.1.0, Apache-2.0 AND BSD-2-Clause, approved, #1987 -npm/npmjs/-/doctrine/3.0.0, Apache-2.0 AND BSD-2-Clause, approved, CQ22628 -npm/npmjs/-/dom-accessibility-api/0.5.16, MIT, approved, clearlydefined -npm/npmjs/-/dom-serialize/2.2.1, MIT, approved, clearlydefined -npm/npmjs/-/dom-serializer/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/domelementtype/2.3.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/domexception/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/domhandler/5.0.3, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/domutils/3.1.0, BSD-2-Clause, approved, #8391 -npm/npmjs/-/dotenv/10.0.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/duplexer/0.1.2, MIT, approved, #1002 -npm/npmjs/-/eastasianwidth/0.2.0, MIT, approved, clearlydefined -npm/npmjs/-/ecc-jsbn/0.1.2, MIT, approved, clearlydefined -npm/npmjs/-/ee-first/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/ejs/3.1.9, Apache-2.0, approved, #1373 -npm/npmjs/-/electron-to-chromium/1.4.385, ISC, approved, #1950 -npm/npmjs/-/electron-to-chromium/1.4.650, ISC, approved, #1950 -npm/npmjs/-/emoji-regex/8.0.0, MIT, approved, clearlydefined -npm/npmjs/-/emoji-regex/9.2.2, MIT, approved, clearlydefined -npm/npmjs/-/emojis-list/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/enabled/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/encodeurl/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/encoding/0.1.13, MIT AND MIT-0, approved, #1016 -npm/npmjs/-/end-of-stream/1.4.4, MIT, approved, clearlydefined -npm/npmjs/-/engine.io-parser/5.0.6, MIT, approved, #6249 -npm/npmjs/-/engine.io/6.4.2, MIT, approved, #7128 -npm/npmjs/-/enhanced-resolve/5.12.0, MIT, approved, clearlydefined -npm/npmjs/-/enhanced-resolve/5.15.0, MIT, approved, #8939 -npm/npmjs/-/enquirer/2.3.6, MIT AND (ISC AND MIT), approved, #2727 -npm/npmjs/-/ent/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/entities/4.4.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/entities/4.5.0, BSD-2-Clause, approved, #7910 -npm/npmjs/-/env-paths/2.2.1, MIT, approved, clearlydefined -npm/npmjs/-/err-code/2.0.3, MIT, approved, clearlydefined -npm/npmjs/-/errno/0.1.8, MIT, approved, clearlydefined -npm/npmjs/-/error-ex/1.3.2, MIT, approved, clearlydefined -npm/npmjs/-/error-stack-parser/2.1.4, MIT, approved, clearlydefined -npm/npmjs/-/es-abstract/1.21.1, MIT, approved, #6209 -npm/npmjs/-/es-get-iterator/1.1.3, MIT, approved, clearlydefined -npm/npmjs/-/es-module-lexer/0.9.3, MIT, approved, #1206 -npm/npmjs/-/es-module-lexer/1.4.1, MIT, approved, clearlydefined -npm/npmjs/-/es-set-tostringtag/2.0.1, MIT, approved, #6218 -npm/npmjs/-/es-shim-unscopables/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/es-to-primitive/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-android-64/0.14.54, MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #3297 -npm/npmjs/-/esbuild-android-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-darwin-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-darwin-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-freebsd-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-freebsd-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-32/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-arm/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-mips64le/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-ppc64le/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-riscv64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-s390x/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-netbsd-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-openbsd-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-sunos-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-wasm/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #13304 -npm/npmjs/-/esbuild-windows-32/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-windows-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-windows-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7537 -npm/npmjs/-/esbuild/0.18.17, MIT, approved, #9907 -npm/npmjs/-/esbuild/0.18.20, MIT, approved, #9907 -npm/npmjs/-/escalade/3.1.1, MIT, approved, clearlydefined -npm/npmjs/-/escape-html/1.0.3, MIT, approved, clearlydefined -npm/npmjs/-/escape-string-regexp/1.0.5, MIT, approved, clearlydefined -npm/npmjs/-/escape-string-regexp/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/escodegen/2.1.0, BSD-2-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9306 -npm/npmjs/-/eslint-config-prettier/8.8.0, MIT, approved, #7543 -npm/npmjs/-/eslint-import-resolver-node/0.3.7, MIT, approved, #9923 -npm/npmjs/-/eslint-module-utils/2.7.4, MIT, approved, #2500 -npm/npmjs/-/eslint-plugin-import/2.27.5, MIT, approved, #6937 -npm/npmjs/-/eslint-plugin-jsdoc/43.1.1, BSD-3-Clause, approved, #8059 -npm/npmjs/-/eslint-plugin-prefer-arrow/1.2.3, MIT, approved, clearlydefined -npm/npmjs/-/eslint-scope/5.1.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/eslint-scope/7.1.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/eslint-scope/7.2.0, BSD-2-Clause, approved, #9916 -npm/npmjs/-/eslint-visitor-keys/3.3.0, Apache-2.0, approved, #2696 -npm/npmjs/-/eslint-visitor-keys/3.4.0, Apache-2.0, approved, #7729 -npm/npmjs/-/eslint/8.39.0, MIT AND OFL-1.1-no-RFN AND CC-BY-NC-SA-4.0 AND ISC AND CC-BY-SA-2.0 AND (JSON AND MIT), approved, #8043 -npm/npmjs/-/espree/9.5.1, BSD-2-Clause AND BSD-3-Clause AND MIT AND BSD-2-Clause AND BSD-3-Clause AND MIT AND (BSD-2-Clause AND MIT) AND (BSD-3-Clause AND LGPL-2.0-or-later AND MIT) AND LGPL-2.1-or-later, approved, #7478 -npm/npmjs/-/esprima/4.0.1, BSD-2-Clause, approved, #995 -npm/npmjs/-/esquery/1.5.0, BSD-3-Clause, approved, #7469 -npm/npmjs/-/esrecurse/4.3.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/estraverse/4.3.0, BSD-2-Clause, approved, #518 -npm/npmjs/-/estraverse/5.3.0, BSD-2-Clause AND MIT, approved, #1557 -npm/npmjs/-/esutils/2.0.3, BSD-2-Clause AND BSD-3-Clause, approved, #120 -npm/npmjs/-/etag/1.8.1, MIT, approved, clearlydefined -npm/npmjs/-/eventemitter-asyncresource/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/eventemitter2/6.4.7, MIT, approved, clearlydefined -npm/npmjs/-/eventemitter3/4.0.7, MIT, approved, clearlydefined -npm/npmjs/-/events/3.3.0, MIT, approved, clearlydefined -npm/npmjs/-/execa/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/execa/5.1.1, MIT, approved, clearlydefined -npm/npmjs/-/execa/7.1.1, MIT, approved, clearlydefined -npm/npmjs/-/executable/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/express/4.18.2, MIT, approved, clearlydefined -npm/npmjs/-/extend/3.0.2, MIT, approved, clearlydefined -npm/npmjs/-/external-editor/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/extract-zip/2.0.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/extsprintf/1.3.0, MIT, approved, #1813 -npm/npmjs/-/extsprintf/1.4.1, MIT, approved, #1039 -npm/npmjs/-/fast-deep-equal/3.1.3, MIT, approved, clearlydefined -npm/npmjs/-/fast-glob/3.2.12, MIT, approved, clearlydefined -npm/npmjs/-/fast-glob/3.2.7, MIT, approved, clearlydefined -npm/npmjs/-/fast-glob/3.3.1, MIT, approved, #9307 -npm/npmjs/-/fast-json-stable-stringify/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/fast-levenshtein/2.0.6, MIT, approved, #2428 -npm/npmjs/-/fastest-levenshtein/1.0.16, MIT, approved, clearlydefined -npm/npmjs/-/fastq/1.15.0, ISC, approved, #6021 -npm/npmjs/-/faye-websocket/0.11.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/fd-slicer/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/fecha/4.2.3, MIT, approved, clearlydefined -npm/npmjs/-/figures/3.2.0, MIT, approved, clearlydefined -npm/npmjs/-/file-entry-cache/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/filelist/1.0.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/fill-range/7.0.1, MIT, approved, clearlydefined -npm/npmjs/-/finalhandler/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/finalhandler/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/find-cache-dir/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/find-up/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/find-up/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/find-up/6.3.0, MIT, approved, clearlydefined -npm/npmjs/-/flat-cache/3.0.4, MIT, approved, clearlydefined -npm/npmjs/-/flat/5.0.2, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/flatted/3.2.7, ISC AND (ISC AND MIT), approved, #2430 -npm/npmjs/-/fn.name/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/follow-redirects/1.15.5, MIT, approved, #10782 -npm/npmjs/-/for-each/0.3.3, MIT, approved, clearlydefined -npm/npmjs/-/forever-agent/0.6.1, Apache-2.0, approved, clearlydefined -npm/npmjs/-/form-data/2.3.3, MIT, approved, clearlydefined -npm/npmjs/-/form-data/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/form-data/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/forwarded/0.2.0, MIT, approved, clearlydefined -npm/npmjs/-/fraction.js/4.2.0, MIT, approved, clearlydefined -npm/npmjs/-/fresh/0.5.2, MIT, approved, clearlydefined -npm/npmjs/-/fs-constants/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/fs-extra/11.2.0, MIT, approved, clearlydefined -npm/npmjs/-/fs-extra/8.1.0, MIT, approved, clearlydefined -npm/npmjs/-/fs-extra/9.1.0, MIT, approved, clearlydefined -npm/npmjs/-/fs-minipass/2.1.0, ISC, approved, clearlydefined -npm/npmjs/-/fs-minipass/3.0.2, ISC, approved, #8277 -npm/npmjs/-/fs-monkey/1.0.3, Unlicense AND (ISC AND MIT), approved, #2964 -npm/npmjs/-/fs.realpath/1.0.0, ISC, approved, clearlydefined -npm/npmjs/-/fsevents/2.3.3, MIT, approved, #2967 -npm/npmjs/-/function-bind/1.1.2, MIT, approved, #11063 -npm/npmjs/-/function.prototype.name/1.1.5, MIT, approved, #10255 -npm/npmjs/-/functions-have-names/1.2.3, MIT, approved, clearlydefined -npm/npmjs/-/gauge/4.0.4, ISC, approved, clearlydefined -npm/npmjs/-/gensync/1.0.0-beta.2, MIT, approved, clearlydefined -npm/npmjs/-/get-caller-file/2.0.5, ISC, approved, clearlydefined -npm/npmjs/-/get-intrinsic/1.2.2, MIT, approved, #8453 -npm/npmjs/-/get-package-type/0.1.0, MIT, approved, clearlydefined -npm/npmjs/-/get-stream/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/get-stream/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/get-symbol-description/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/getos/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/getpass/0.1.7, MIT, approved, clearlydefined -npm/npmjs/-/glob-parent/5.1.2, ISC, approved, clearlydefined -npm/npmjs/-/glob-parent/6.0.2, ISC, approved, clearlydefined -npm/npmjs/-/glob-to-regexp/0.4.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/glob/7.1.4, ISC, approved, #994 -npm/npmjs/-/glob/7.1.6, ISC, approved, #994 -npm/npmjs/-/glob/7.2.3, ISC, approved, clearlydefined -npm/npmjs/-/glob/8.1.0, ISC AND (ISC AND MIT) AND CC-BY-SA-4.0, approved, #7145 -npm/npmjs/-/glob/9.3.5, ISC AND CC-BY-SA-4.0, approved, #7590 -npm/npmjs/-/global-dirs/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/global-modules/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/global-prefix/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/globals/11.12.0, MIT, approved, clearlydefined -npm/npmjs/-/globals/13.20.0, MIT, approved, #6953 -npm/npmjs/-/globalthis/1.0.3, MIT, approved, clearlydefined -npm/npmjs/-/globby/11.1.0, MIT, approved, clearlydefined -npm/npmjs/-/globby/13.1.4, MIT, approved, #5753 -npm/npmjs/-/globjoin/0.1.4, MIT, approved, clearlydefined -npm/npmjs/-/gopd/1.0.1, MIT, approved, #4863 -npm/npmjs/-/graceful-fs/4.2.11, ISC, approved, #7413 -npm/npmjs/-/grapheme-splitter/1.0.4, MIT, approved, #1645 -npm/npmjs/-/graphql/16.8.1, MIT, approved, clearlydefined -npm/npmjs/-/guess-parser/0.4.22, MIT, approved, clearlydefined -npm/npmjs/-/gzip-size/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/handle-thing/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/hard-rejection/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/has-ansi/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/has-bigints/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/has-flag/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/has-flag/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/has-property-descriptors/1.0.1, MIT, approved, #11098 -npm/npmjs/-/has-proto/1.0.1, MIT, approved, #6175 -npm/npmjs/-/has-symbols/1.0.3, MIT, approved, clearlydefined -npm/npmjs/-/has-tostringtag/1.0.0, MIT, approved, #13161 -npm/npmjs/-/has-unicode/2.0.1, ISC, approved, clearlydefined -npm/npmjs/-/has/1.0.3, MIT, approved, #10930 -npm/npmjs/-/hasown/2.0.0, MIT, approved, #11097 -npm/npmjs/-/hdr-histogram-js/2.0.3, BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND 0BSD, approved, #3301 -npm/npmjs/-/hdr-histogram-percentiles-obj/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/headers-polyfill/3.1.2, MIT, approved, clearlydefined -npm/npmjs/-/hosted-git-info/2.8.9, ISC, approved, clearlydefined -npm/npmjs/-/hosted-git-info/4.1.0, ISC, approved, clearlydefined -npm/npmjs/-/hosted-git-info/6.1.1, ISC, approved, clearlydefined -npm/npmjs/-/hpack.js/2.1.6, MIT, approved, clearlydefined -npm/npmjs/-/html-encoding-sniffer/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/html-entities/2.3.3, MIT, approved, #9043 -npm/npmjs/-/html-escaper/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/html-tags/3.3.1, MIT, approved, clearlydefined -npm/npmjs/-/htmlparser2/8.0.2, MIT, approved, clearlydefined -npm/npmjs/-/http-cache-semantics/4.1.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/http-deceiver/1.2.7, MIT, approved, clearlydefined -npm/npmjs/-/http-errors/1.6.3, MIT, approved, clearlydefined -npm/npmjs/-/http-errors/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/http-parser-js/0.5.8, MIT, approved, #2970 -npm/npmjs/-/http-proxy-agent/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/http-proxy-agent/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/http-proxy-middleware/2.0.6, MIT, approved, clearlydefined -npm/npmjs/-/http-proxy/1.18.1, MIT, approved, clearlydefined -npm/npmjs/-/http-signature/1.3.6, MIT, approved, clearlydefined -npm/npmjs/-/https-proxy-agent/5.0.1, MIT, approved, clearlydefined -npm/npmjs/-/human-signals/1.1.1, Apache-2.0, approved, clearlydefined -npm/npmjs/-/human-signals/2.1.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/human-signals/4.3.1, Apache-2.0, approved, clearlydefined -npm/npmjs/-/humanize-ms/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/husky/8.0.3, MIT, approved, clearlydefined -npm/npmjs/-/i18next-browser-languagedetector/7.0.1, MIT, approved, clearlydefined -npm/npmjs/-/i18next-http-backend/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/i18next/22.4.15, MIT, approved, #8063 -npm/npmjs/-/iconv-lite/0.4.24, MIT, approved, clearlydefined -npm/npmjs/-/iconv-lite/0.6.3, MIT, approved, clearlydefined -npm/npmjs/-/icss-utils/5.1.0, ISC, approved, clearlydefined -npm/npmjs/-/ieee754/1.2.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/ignore-walk/6.0.1, ISC, approved, #7563 -npm/npmjs/-/ignore/5.2.4, MIT, approved, #5907 -npm/npmjs/-/image-size/0.5.5, MIT, approved, clearlydefined -npm/npmjs/-/immutable/4.3.0, MIT, approved, #7353 -npm/npmjs/-/import-fresh/3.3.0, MIT, approved, clearlydefined -npm/npmjs/-/import-lazy/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/imurmurhash/0.1.4, MIT, approved, clearlydefined -npm/npmjs/-/indent-string/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/infer-owner/1.0.4, ISC, approved, clearlydefined -npm/npmjs/-/inflight/1.0.6, ISC, approved, clearlydefined -npm/npmjs/-/inherits/2.0.3, ISC, approved, clearlydefined -npm/npmjs/-/inherits/2.0.4, ISC, approved, clearlydefined -npm/npmjs/-/ini/1.3.8, ISC AND MIT AND BSD-3-Clause, approved, CQ23023 -npm/npmjs/-/ini/2.0.0, ISC, approved, clearlydefined -npm/npmjs/-/ini/4.1.1, ISC, approved, clearlydefined -npm/npmjs/-/inquirer/8.2.4, MIT, approved, clearlydefined -npm/npmjs/-/internal-slot/1.0.4, MIT, approved, #7118 -npm/npmjs/-/internmap/2.0.3, ISC, approved, clearlydefined -npm/npmjs/-/ip/1.1.5, MIT, approved, #126 -npm/npmjs/-/ipaddr.js/1.9.1, MIT, approved, clearlydefined -npm/npmjs/-/ipaddr.js/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-arguments/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/is-array-buffer/3.0.2, MIT, approved, #6248 -npm/npmjs/-/is-arrayish/0.2.1, MIT, approved, clearlydefined -npm/npmjs/-/is-arrayish/0.3.2, MIT, approved, clearlydefined -npm/npmjs/-/is-bigint/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/is-binary-path/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/is-boolean-object/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/is-callable/1.2.7, MIT, approved, clearlydefined -npm/npmjs/-/is-ci/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-core-module/2.11.0, MIT, approved, clearlydefined -npm/npmjs/-/is-core-module/2.12.0, MIT, approved, clearlydefined -npm/npmjs/-/is-date-object/1.0.5, MIT, approved, clearlydefined -npm/npmjs/-/is-docker/2.2.1, MIT, approved, clearlydefined -npm/npmjs/-/is-extglob/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/is-fullwidth-code-point/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-fullwidth-code-point/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-generator-function/1.0.10, MIT, approved, clearlydefined -npm/npmjs/-/is-glob/4.0.3, MIT, approved, clearlydefined -npm/npmjs/-/is-installed-globally/0.4.0, MIT, approved, clearlydefined -npm/npmjs/-/is-interactive/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-lambda/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-map/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-negative-zero/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-node-process/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/is-number-object/1.0.7, MIT, approved, clearlydefined -npm/npmjs/-/is-number/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-path-inside/3.0.3, MIT, approved, clearlydefined -npm/npmjs/-/is-plain-obj/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/is-plain-obj/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-plain-object/2.0.4, MIT, approved, clearlydefined -npm/npmjs/-/is-plain-object/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-potential-custom-element-name/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-regex/1.1.4, MIT, approved, clearlydefined -npm/npmjs/-/is-regexp/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/is-set/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-shared-array-buffer/1.0.2, MIT, approved, #1207 -npm/npmjs/-/is-stream/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-stream/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-string/1.0.7, MIT, approved, clearlydefined -npm/npmjs/-/is-symbol/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/is-typed-array/1.1.10, MIT, approved, #4853 -npm/npmjs/-/is-typedarray/1.0.0, MIT, approved, #2531 -npm/npmjs/-/is-unicode-supported/0.1.0, MIT, approved, clearlydefined -npm/npmjs/-/is-weakmap/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-weakref/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-weakset/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-what/3.14.1, MIT, approved, clearlydefined -npm/npmjs/-/is-wsl/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/isarray/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/isarray/2.0.5, MIT, approved, clearlydefined -npm/npmjs/-/isbinaryfile/4.0.10, MIT, approved, clearlydefined -npm/npmjs/-/isexe/2.0.0, ISC, approved, clearlydefined -npm/npmjs/-/isobject/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/isstream/0.1.2, MIT, approved, clearlydefined -npm/npmjs/-/istanbul-lib-coverage/3.2.0, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-lib-instrument/5.2.0, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-lib-instrument/5.2.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-lib-report/3.0.0, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-lib-source-maps/4.0.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-reports/3.1.5, BSD-3-Clause AND MIT, approved, #1710 -npm/npmjs/-/jake/10.8.7, Apache-2.0 AND MIT, approved, #1316 -npm/npmjs/-/jasmine-core/4.6.0, MIT, approved, clearlydefined -npm/npmjs/-/jest-worker/27.5.1, 0BSD AND Apache-2.0 AND BSD-2-Clause AND MIT, approved, #1952 -npm/npmjs/-/jiti/1.18.2, MIT, approved, clearlydefined -npm/npmjs/-/jiti/1.21.0, MIT, approved, clearlydefined -npm/npmjs/-/js-levenshtein/1.1.6, MIT, approved, clearlydefined -npm/npmjs/-/js-sdsl/4.2.0, MIT AND (0BSD AND MIT), approved, #5025 -npm/npmjs/-/js-sha256/0.9.0, MIT, approved, clearlydefined -npm/npmjs/-/js-tokens/4.0.0, MIT, approved, #2401 -npm/npmjs/-/js-yaml/3.14.1, MIT, approved, clearlydefined -npm/npmjs/-/js-yaml/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/js2xmlparser/4.0.2, Apache-2.0, approved, clearlydefined -npm/npmjs/-/jsbn/0.1.1, MIT, approved, clearlydefined -npm/npmjs/-/jsdoc-type-pratt-parser/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/jsdom/16.7.0, LGPL-2.0-or-later AND MIT, approved, #1370 -npm/npmjs/-/jsesc/0.5.0, MIT, approved, clearlydefined -npm/npmjs/-/jsesc/2.5.2, MIT, approved, clearlydefined -npm/npmjs/-/json-parse-even-better-errors/2.3.1, MIT, approved, clearlydefined -npm/npmjs/-/json-parse-even-better-errors/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/json-schema-traverse/0.4.1, MIT, approved, clearlydefined -npm/npmjs/-/json-schema-traverse/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/json-schema/0.4.0, AFL-2.1 OR BSD-3-Clause, approved, #2410 -npm/npmjs/-/json-stable-stringify-without-jsonify/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/json-stringify-safe/5.0.1, ISC, approved, clearlydefined -npm/npmjs/-/json5/1.0.2, MIT, approved, CQ22351 -npm/npmjs/-/json5/2.2.3, MIT, approved, #2126 -npm/npmjs/-/jsonc-parser/3.2.0, MIT, approved, #12891 -npm/npmjs/-/jsonfile/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/jsonfile/6.1.0, MIT, approved, clearlydefined -npm/npmjs/-/jsonparse/1.3.1, MIT, approved, clearlydefined -npm/npmjs/-/jsprim/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/karma-chrome-launcher/3.2.0, MIT, approved, #8061 -npm/npmjs/-/karma-coverage/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/karma-jasmine/5.1.0, MIT, approved, clearlydefined -npm/npmjs/-/karma-sonarqube-reporter/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/karma-source-map-support/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/karma-spec-reporter/0.0.36, MIT, approved, clearlydefined -npm/npmjs/-/karma/6.4.2, MIT, approved, #8049 -npm/npmjs/-/keycloak-angular/14.2.0, MIT, approved, #13301 -npm/npmjs/-/keycloak-js/21.0.2, Apache-2.0 AND MIT, approved, #8025 -npm/npmjs/-/kind-of/6.0.3, MIT, approved, clearlydefined -npm/npmjs/-/klona/2.0.6, MIT, approved, clearlydefined -npm/npmjs/-/known-css-properties/0.27.0, MIT, approved, clearlydefined -npm/npmjs/-/knuth-shuffle-seeded/1.0.6, Apache-2.0, approved, clearlydefined -npm/npmjs/-/kuler/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/launch-editor/2.6.1, MIT, approved, #10975 -npm/npmjs/-/lazy-ass/1.6.0, MIT, approved, clearlydefined -npm/npmjs/-/less-loader/11.1.0, MIT, approved, clearlydefined -npm/npmjs/-/less/4.1.3, 0BSD AND Apache-2.0 AND BSD-2-Clause AND MIT, approved, #1527 -npm/npmjs/-/levn/0.4.1, MIT, approved, clearlydefined -npm/npmjs/-/license-webpack-plugin/4.0.2, ISC AND MIT AND (BSD-3-Clause AND ISC AND MIT), approved, #3303 -npm/npmjs/-/lilconfig/2.0.6, MIT, approved, clearlydefined -npm/npmjs/-/lilconfig/2.1.0, MIT, approved, #7313 -npm/npmjs/-/lines-and-columns/1.2.4, MIT, approved, clearlydefined -npm/npmjs/-/lines-and-columns/2.0.4, MIT, approved, clearlydefined -npm/npmjs/-/lint-staged/13.2.1, MIT, approved, #9206 -npm/npmjs/-/listr2/3.14.0, MIT, approved, clearlydefined -npm/npmjs/-/listr2/5.0.8, MIT, approved, clearlydefined -npm/npmjs/-/loader-runner/4.3.0, MIT, approved, clearlydefined -npm/npmjs/-/loader-utils/2.0.4, MIT, approved, #4986 -npm/npmjs/-/loader-utils/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/locate-path/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/locate-path/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/locate-path/7.2.0, MIT, approved, clearlydefined -npm/npmjs/-/lodash-es/4.17.21, MIT, approved, clearlydefined -npm/npmjs/-/lodash.debounce/4.0.8, MIT, approved, clearlydefined -npm/npmjs/-/lodash.merge/4.6.2, MIT, approved, clearlydefined -npm/npmjs/-/lodash.mergewith/4.6.2, MIT, approved, clearlydefined -npm/npmjs/-/lodash.once/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/lodash.truncate/4.4.2, MIT, approved, clearlydefined -npm/npmjs/-/lodash/4.17.21, CC0-1.0 AND MIT, approved, #2096 -npm/npmjs/-/log-symbols/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/log-update/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/log4js/6.9.1, Apache-2.0, approved, clearlydefined -npm/npmjs/-/logform/2.4.2, MIT, approved, clearlydefined -npm/npmjs/-/lower-case/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/lru-cache/5.1.1, ISC, approved, clearlydefined -npm/npmjs/-/lru-cache/6.0.0, ISC, approved, clearlydefined -npm/npmjs/-/lru-cache/7.18.3, MIT AND ISC, approved, #7614 -npm/npmjs/-/lru-cache/9.1.1, ISC AND MIT, approved, #8054 -npm/npmjs/-/luxon/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/lz-string/1.5.0, MIT AND WTFPL, approved, #8398 -npm/npmjs/-/magic-string/0.30.1, MIT, approved, #13189 -npm/npmjs/-/make-dir/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/make-dir/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/make-error/1.3.6, ISC, approved, clearlydefined -npm/npmjs/-/make-fetch-happen/10.2.1, ISC AND Apache-2.0, approved, #3077 -npm/npmjs/-/make-fetch-happen/11.1.0, ISC AND Apache-2.0, approved, #8022 -npm/npmjs/-/make-fetch-happen/11.1.1, ISC AND Apache-2.0, approved, #8022 -npm/npmjs/-/map-obj/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/map-obj/4.3.0, MIT, approved, clearlydefined -npm/npmjs/-/mathml-tag-names/2.1.3, MIT, approved, clearlydefined -npm/npmjs/-/mdn-data/2.0.30, CC0-1.0, approved, clearlydefined -npm/npmjs/-/media-typer/0.3.0, MIT, approved, clearlydefined -npm/npmjs/-/memfs/3.5.1, Unlicense, approved, #8397 -npm/npmjs/-/meow/9.0.0, MIT, approved, clearlydefined -npm/npmjs/-/merge-descriptors/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/merge-stream/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/merge2/1.4.1, MIT, approved, clearlydefined -npm/npmjs/-/methods/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/micromatch/4.0.5, MIT, approved, clearlydefined -npm/npmjs/-/mime-db/1.52.0, MIT, approved, clearlydefined -npm/npmjs/-/mime-types/2.1.35, MIT, approved, clearlydefined -npm/npmjs/-/mime/1.6.0, MIT, approved, clearlydefined -npm/npmjs/-/mime/2.6.0, MIT, approved, clearlydefined -npm/npmjs/-/mimic-fn/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/mimic-fn/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/min-indent/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/mini-css-extract-plugin/2.7.6, MIT, approved, #5004 -npm/npmjs/-/minimalistic-assert/1.0.1, ISC, approved, clearlydefined -npm/npmjs/-/minimatch/3.0.5, ISC, approved, clearlydefined -npm/npmjs/-/minimatch/3.1.2, ISC, approved, clearlydefined -npm/npmjs/-/minimatch/5.1.6, ISC, approved, #5952 -npm/npmjs/-/minimatch/6.2.0, ISC, approved, clearlydefined -npm/npmjs/-/minimatch/8.0.4, ISC, approved, #8026 -npm/npmjs/-/minimatch/9.0.3, ISC, approved, #9190 -npm/npmjs/-/minimist-options/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/minimist/1.2.8, MIT, approved, #5886 -npm/npmjs/-/minipass-collect/1.0.2, ISC, approved, clearlydefined -npm/npmjs/-/minipass-fetch/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/minipass-fetch/3.0.1, MIT, approved, #5764 -npm/npmjs/-/minipass-flush/1.0.5, ISC, approved, clearlydefined -npm/npmjs/-/minipass-json-stream/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/minipass-pipeline/1.2.4, ISC, approved, clearlydefined -npm/npmjs/-/minipass-sized/1.0.3, ISC, approved, clearlydefined -npm/npmjs/-/minipass/3.3.6, ISC, approved, clearlydefined -npm/npmjs/-/minipass/4.2.8, ISC, approved, #7573 -npm/npmjs/-/minipass/5.0.0, ISC, approved, clearlydefined -npm/npmjs/-/minizlib/2.1.2, MIT, approved, clearlydefined -npm/npmjs/-/mkdirp/0.5.6, MIT, approved, clearlydefined -npm/npmjs/-/mkdirp/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/module-alias/2.2.2, MIT, approved, clearlydefined -npm/npmjs/-/mrmime/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/ms/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/ms/2.1.2, MIT, approved, #5895 -npm/npmjs/-/ms/2.1.3, MIT, approved, #5895 -npm/npmjs/-/msw/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/multicast-dns/7.2.5, MIT, approved, clearlydefined -npm/npmjs/-/mute-stream/0.0.8, ISC, approved, clearlydefined -npm/npmjs/-/mz/2.7.0, MIT, approved, clearlydefined -npm/npmjs/-/nanoclone/0.2.1, MIT, approved, clearlydefined -npm/npmjs/-/nanoid/3.3.6, MIT, approved, #7571 -npm/npmjs/-/nanoid/3.3.7, MIT, approved, #7571 -npm/npmjs/-/natural-compare-lite/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/natural-compare/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/needle/3.2.0, MIT, approved, #4963 -npm/npmjs/-/negotiator/0.6.3, MIT, approved, clearlydefined -npm/npmjs/-/neo-async/2.6.2, MIT, approved, clearlydefined -npm/npmjs/-/nice-napi/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/no-case/3.0.4, MIT, approved, clearlydefined -npm/npmjs/-/node-addon-api/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/node-fetch/2.6.7, MIT, approved, #6954 -npm/npmjs/-/node-forge/1.3.1, (BSD-3-Clause OR GPL-2.0-only) AND MIT, approved, #3014 -npm/npmjs/-/node-gyp-build/4.8.0, MIT, approved, clearlydefined -npm/npmjs/-/node-gyp/9.3.1, MIT AND BSD-3-Clause, approved, #3783 -npm/npmjs/-/node-hook/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/node-releases/2.0.10, MIT, approved, #1954 -npm/npmjs/-/node-releases/2.0.14, MIT, approved, #1954 -npm/npmjs/-/nopt/6.0.0, ISC, approved, clearlydefined -npm/npmjs/-/normalize-package-data/2.5.0, BSD-2-Clause AND Apache-2.0 AND MIT, approved, #2499 -npm/npmjs/-/normalize-package-data/3.0.3, BSD-2-Clause, approved, #11614 -npm/npmjs/-/normalize-package-data/5.0.0, BSD-3-Clause, approved, #5757 -npm/npmjs/-/normalize-path/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/normalize-range/0.1.2, MIT, approved, clearlydefined -npm/npmjs/-/npm-bundled/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/npm-install-checks/6.0.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/npm-normalize-package-bin/3.0.0, ISC, approved, #8252 -npm/npmjs/-/npm-package-arg/10.1.0, ISC, approved, #5758 -npm/npmjs/-/npm-packlist/7.0.4, ISC, approved, #5755 -npm/npmjs/-/npm-pick-manifest/8.0.1, ISC, approved, clearlydefined -npm/npmjs/-/npm-registry-fetch/14.0.3, ISC, approved, #5743 -npm/npmjs/-/npm-run-path/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/npm-run-path/5.1.0, MIT, approved, clearlydefined -npm/npmjs/-/npmlog/6.0.2, ISC, approved, clearlydefined -npm/npmjs/-/nth-check/2.1.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/nwsapi/2.2.7, MIT, approved, #7909 -npm/npmjs/-/nx/16.5.1, MIT AND MIT-0 AND (CC0-1.0 AND MIT), approved, #9380 -npm/npmjs/-/object-assign/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/object-hash/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/object-inspect/1.12.3, MIT, approved, clearlydefined -npm/npmjs/-/object-is/1.1.5, MIT, approved, clearlydefined -npm/npmjs/-/object-keys/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/object-path/0.11.8, MIT, approved, clearlydefined -npm/npmjs/-/object.assign/4.1.4, MIT, approved, #3232 -npm/npmjs/-/object.values/1.1.6, MIT, approved, #4665 -npm/npmjs/-/obuf/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/on-finished/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/on-finished/2.4.1, MIT, approved, clearlydefined -npm/npmjs/-/on-headers/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/once/1.4.0, ISC, approved, clearlydefined -npm/npmjs/-/one-time/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/onetime/5.1.2, MIT, approved, clearlydefined -npm/npmjs/-/onetime/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/open/8.4.2, MIT, approved, #7102 -npm/npmjs/-/opener/1.5.2, MIT AND WTFPL AND WTFPL, approved, #11619 -npm/npmjs/-/optionator/0.9.1, MIT, approved, #9208 -npm/npmjs/-/ora/5.4.1, MIT, approved, clearlydefined -npm/npmjs/-/os-tmpdir/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/ospath/1.2.2, MIT, approved, clearlydefined -npm/npmjs/-/outvariant/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/p-limit/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/p-limit/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/p-limit/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/p-locate/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/p-locate/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/p-locate/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/p-map/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/p-retry/4.6.2, MIT, approved, clearlydefined -npm/npmjs/-/p-try/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/pacote/15.2.0, ISC AND (ISC AND MIT), approved, #8751 -npm/npmjs/-/pad-right/0.2.2, MIT, approved, clearlydefined -npm/npmjs/-/pako/1.0.11, MIT AND Zlib, approved, clearlydefined -npm/npmjs/-/parent-module/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/parse-json/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/parse-node-version/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/parse5-html-rewriting-stream/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/parse5-sax-parser/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/parse5/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/parse5/7.1.2, MIT, approved, clearlydefined -npm/npmjs/-/parseurl/1.3.3, MIT, approved, clearlydefined -npm/npmjs/-/path-exists/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/path-exists/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/path-is-absolute/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/path-key/3.1.1, MIT, approved, clearlydefined -npm/npmjs/-/path-key/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/path-parse/1.0.7, MIT, approved, clearlydefined -npm/npmjs/-/path-scurry/1.7.0, BlueOak-1.0.0, approved, #8028 -npm/npmjs/-/path-to-regexp/0.1.7, MIT, approved, clearlydefined -npm/npmjs/-/path-to-regexp/6.2.0, MIT, approved, clearlydefined -npm/npmjs/-/path-type/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/pend/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/performance-now/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/picocolors/1.0.0, ISC, approved, clearlydefined -npm/npmjs/-/picomatch/2.3.1, MIT, approved, clearlydefined -npm/npmjs/-/pidtree/0.6.0, MIT, approved, clearlydefined -npm/npmjs/-/pify/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/pify/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/pirates/4.0.5, MIT, approved, #680 -npm/npmjs/-/piscina/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/pkg-dir/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/playwright-core/1.32.3, Apache-2.0 AND MPL-2.0 AND (BSD-2-Clause AND MPL-2.0) AND BSD-2-Clause AND (BSD-2-Clause AND LGPL-2.0-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later) AND (Apache-2.0 AND MIT) AND ISC AND MIT AND (BSD-2-Clause AND BSD-3-Clause AND CC-BY-SA-4.0 AND ISC AND MIT) AND CC0-1.0 AND (Apache-2.0 AND CC-BY-4.0 AND ISC AND MIT) AND OFL-1.1 AND (Apache-2.0 AND BSD-3-Clause AND MIT) AND (BSD-3-Clause AND MIT) AND BSD-3-Clause, approved, #8060 -npm/npmjs/-/playwright-webkit/1.32.3, Apache-2.0 AND MPL-2.0 AND (BSD-2-Clause AND MPL-2.0) AND BSD-2-Clause AND (BSD-2-Clause AND LGPL-2.0-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later) AND (Apache-2.0 AND MIT) AND ISC AND MIT AND (BSD-2-Clause AND BSD-3-Clause AND CC-BY-SA-4.0 AND ISC AND MIT) AND CC0-1.0 AND (Apache-2.0 AND CC-BY-4.0 AND ISC AND MIT) AND OFL-1.1 AND (Apache-2.0 AND BSD-3-Clause AND MIT) AND (BSD-3-Clause AND MIT) AND BSD-3-Clause, approved, #8036 -npm/npmjs/-/postcss-import/14.1.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-import/15.1.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-js/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-load-config/3.1.4, MIT, approved, clearlydefined -npm/npmjs/-/postcss-loader/7.2.4, MIT, approved, clearlydefined -npm/npmjs/-/postcss-loader/7.3.3, MIT, approved, clearlydefined -npm/npmjs/-/postcss-media-query-parser/0.2.3, MIT, approved, clearlydefined -npm/npmjs/-/postcss-modules-extract-imports/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/postcss-modules-local-by-default/4.0.4, MIT, approved, #8508 -npm/npmjs/-/postcss-modules-scope/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/postcss-modules-values/4.0.0, ISC, approved, clearlydefined -npm/npmjs/-/postcss-nested/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-resolve-nested-selector/0.1.1, MIT, approved, clearlydefined -npm/npmjs/-/postcss-safe-parser/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-scss/4.0.6, MIT, approved, clearlydefined -npm/npmjs/-/postcss-selector-parser/6.0.11, MIT, approved, #5056 -npm/npmjs/-/postcss-selector-parser/6.0.12, MIT, approved, #5056 -npm/npmjs/-/postcss-value-parser/4.2.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss/8.4.31, MIT, approved, #3545 -npm/npmjs/-/postcss/8.4.33, MIT, approved, #3545 -npm/npmjs/-/prelude-ls/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/prettier/2.8.8, MIT AND (0BSD AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND CC-BY-SA-4.0 AND ISC AND MIT) AND BSD-2-Clause, approved, #6871 -npm/npmjs/-/pretty-bytes/5.6.0, MIT, approved, clearlydefined -npm/npmjs/-/pretty-format/27.5.1, 0BSD AND Apache-2.0 AND BSD-2-Clause AND MIT, approved, #1948 -npm/npmjs/-/proc-log/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/process-nextick-args/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/process/0.11.10, MIT, approved, CQ23452 -npm/npmjs/-/progress/2.0.3, MIT, approved, clearlydefined -npm/npmjs/-/promise-inflight/1.0.1, ISC, approved, clearlydefined -npm/npmjs/-/promise-retry/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/property-expr/2.0.5, MIT, approved, clearlydefined -npm/npmjs/-/proxy-addr/2.0.7, MIT, approved, clearlydefined -npm/npmjs/-/proxy-from-env/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/proxy-from-env/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/prr/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/psl/1.9.0, MIT AND CC0-1.0, approved, #3080 -npm/npmjs/-/pump/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/punycode/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/punycode/2.3.0, MIT, approved, #6373 -npm/npmjs/-/qjobs/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/qs/6.10.5, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/qs/6.11.0, BSD-3-Clause, approved, #7556 -npm/npmjs/-/querystringify/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/queue-microtask/1.2.3, MIT, approved, clearlydefined -npm/npmjs/-/quick-lru/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/quick-lru/5.1.1, MIT, approved, clearlydefined -npm/npmjs/-/randombytes/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/range-parser/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/raw-body/2.5.1, MIT, approved, clearlydefined -npm/npmjs/-/raw-body/2.5.2, MIT, approved, clearlydefined -npm/npmjs/-/react-is/17.0.2, MIT, approved, clearlydefined -npm/npmjs/-/read-cache/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/read-package-json-fast/3.0.2, ISC, approved, #5752 -npm/npmjs/-/read-package-json/6.0.0, ISC, approved, #7568 -npm/npmjs/-/read-pkg-up/7.0.1, MIT, approved, clearlydefined -npm/npmjs/-/read-pkg/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/readable-stream/2.3.8, MIT, approved, #945 -npm/npmjs/-/readable-stream/3.6.2, MIT, approved, CQ22627 -npm/npmjs/-/readdirp/3.6.0, MIT, approved, #2977 -npm/npmjs/-/redent/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/reflect-metadata/0.1.13, Apache-2.0, approved, clearlydefined -npm/npmjs/-/regenerate-unicode-properties/10.1.0, MIT, approved, #10903 -npm/npmjs/-/regenerate/1.4.2, MIT, approved, clearlydefined -npm/npmjs/-/regenerator-runtime/0.13.11, MIT, approved, #4978 -npm/npmjs/-/regenerator-transform/0.15.2, MIT, approved, #5001 -npm/npmjs/-/regex-parser/2.2.11, MIT, approved, clearlydefined -npm/npmjs/-/regexp-match-indices/1.0.2, Apache-2.0, approved, clearlydefined -npm/npmjs/-/regexp-tree/0.1.24, MIT, approved, clearlydefined -npm/npmjs/-/regexp.prototype.flags/1.5.1, MIT, approved, #8199 -npm/npmjs/-/regexpu-core/5.3.2, MIT, approved, #7117 -npm/npmjs/-/regjsparser/0.9.1, BSD-2-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #3329 -npm/npmjs/-/repeat-string/1.6.1, MIT, approved, clearlydefined -npm/npmjs/-/request-progress/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/require-directory/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/require-from-string/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/requires-port/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve-from/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve-from/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve-pkg/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve-url-loader/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve/1.22.1, MIT AND ISC, approved, #2409 -npm/npmjs/-/resolve/1.22.2, MIT AND ISC, approved, #2409 -npm/npmjs/-/restore-cursor/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/retry/0.12.0, MIT, approved, clearlydefined -npm/npmjs/-/retry/0.13.1, MIT, approved, clearlydefined -npm/npmjs/-/reusify/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/rfdc/1.3.0, MIT, approved, clearlydefined -npm/npmjs/-/rimraf/3.0.2, ISC, approved, clearlydefined -npm/npmjs/-/robust-predicates/3.0.1, Unlicense, approved, #3305 -npm/npmjs/-/rollup/3.29.4, MIT, approved, clearlydefined -npm/npmjs/-/run-async/2.4.1, MIT, approved, clearlydefined -npm/npmjs/-/run-parallel/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/rw/1.3.3, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/rxjs/6.6.7, Apache-2.0 AND MIT, approved, #941 -npm/npmjs/-/rxjs/7.8.0, Apache-2.0 AND (0BSD AND Apache-2.0) AND 0BSD, approved, #5993 -npm/npmjs/-/rxjs/7.8.1, Apache-2.0 AND (0BSD AND Apache-2.0) AND 0BSD, approved, #5993 -npm/npmjs/-/safe-buffer/5.1.2, MIT, approved, clearlydefined -npm/npmjs/-/safe-buffer/5.2.1, MIT, approved, clearlydefined -npm/npmjs/-/safe-regex-test/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/safe-stable-stringify/2.4.0, MIT, approved, clearlydefined -npm/npmjs/-/safer-buffer/2.1.2, MIT, approved, clearlydefined -npm/npmjs/-/safevalues/0.3.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/sass-loader/13.3.2, MIT, approved, clearlydefined -npm/npmjs/-/sass/1.64.1, Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT AND MIT, approved, #9722 -npm/npmjs/-/sax/1.2.4, ISC AND MIT AND ISC, approved, #5889 -npm/npmjs/-/saxes/5.0.1, ISC, approved, clearlydefined -npm/npmjs/-/schema-utils/3.1.1, MIT, approved, #7963 -npm/npmjs/-/schema-utils/3.3.0, MIT, approved, #8952 -npm/npmjs/-/schema-utils/4.0.1, MIT, approved, #8213 -npm/npmjs/-/seed-random/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/select-hose/2.0.0, MIT, approved, #145 -npm/npmjs/-/selfsigned/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/semver/5.7.2, ISC, approved, #5900 -npm/npmjs/-/semver/6.3.1, ISC, approved, clearlydefined -npm/npmjs/-/semver/7.3.8, ISC, approved, clearlydefined -npm/npmjs/-/semver/7.5.3, ISC, approved, clearlydefined -npm/npmjs/-/semver/7.5.4, ISC, approved, clearlydefined -npm/npmjs/-/semver/7.6.0, ISC, approved, clearlydefined -npm/npmjs/-/send/0.18.0, MIT, approved, clearlydefined -npm/npmjs/-/serialize-javascript/6.0.1, BSD-3-Clause, approved, #12680 -npm/npmjs/-/serialize-javascript/6.0.2, BSD-3-Clause, approved, #12680 -npm/npmjs/-/serve-index/1.9.1, MIT, approved, clearlydefined -npm/npmjs/-/serve-static/1.15.0, MIT, approved, clearlydefined -npm/npmjs/-/set-blocking/2.0.0, ISC, approved, #5899 -npm/npmjs/-/set-cookie-parser/2.4.8, MIT, approved, clearlydefined -npm/npmjs/-/set-function-length/1.2.0, MIT, approved, #12772 -npm/npmjs/-/set-function-name/2.0.1, MIT, approved, #10590 -npm/npmjs/-/setprototypeof/1.1.0, ISC, approved, clearlydefined -npm/npmjs/-/setprototypeof/1.2.0, ISC, approved, clearlydefined -npm/npmjs/-/shallow-clone/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/shebang-command/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/shebang-regex/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/shell-quote/1.8.1, MIT, approved, #7044 -npm/npmjs/-/side-channel/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/signal-exit/3.0.7, ISC, approved, #5892 -npm/npmjs/-/sigstore/1.9.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/simple-swizzle/0.2.2, MIT, approved, clearlydefined -npm/npmjs/-/sirv/1.0.19, MIT, approved, clearlydefined -npm/npmjs/-/slash/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/slash/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/slice-ansi/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/slice-ansi/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/slice-ansi/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/smart-buffer/4.2.0, MIT, approved, clearlydefined -npm/npmjs/-/socket.io-adapter/2.5.2, MIT, approved, #13465 -npm/npmjs/-/socket.io-parser/4.2.3, MIT, approved, #8535 -npm/npmjs/-/socket.io/4.6.1, MIT, approved, #7121 -npm/npmjs/-/sockjs/0.3.24, MIT, approved, #2985 -npm/npmjs/-/socks-proxy-agent/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/socks/2.6.2, MIT, approved, clearlydefined -npm/npmjs/-/source-map-js/1.0.2, BSD-3-Clause, approved, #2412 -npm/npmjs/-/source-map-loader/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/source-map-resolve/0.6.0, MIT, approved, clearlydefined -npm/npmjs/-/source-map-support/0.5.21, MIT, approved, clearlydefined -npm/npmjs/-/source-map/0.6.1, BSD-3-Clause, approved, #2417 -npm/npmjs/-/source-map/0.7.4, BSD-3-Clause, approved, #2416 -npm/npmjs/-/spdx-correct/3.1.1, Apache-2.0, approved, #990 -npm/npmjs/-/spdx-exceptions/2.3.0, CC-BY-3.0, approved, clearlydefined -npm/npmjs/-/spdx-expression-parse/3.0.1, MIT, approved, #1127 -npm/npmjs/-/spdx-license-ids/3.0.11, CC0-1.0, approved, #989 -npm/npmjs/-/spdy-transport/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/spdy/4.0.2, MIT, approved, #2926 -npm/npmjs/-/sprintf-js/1.0.3, BSD-3-Clause, approved, #949 -npm/npmjs/-/sshpk/1.17.0, MIT, approved, clearlydefined -npm/npmjs/-/ssri/10.0.4, ISC, approved, #5768 -npm/npmjs/-/ssri/9.0.0, CC0-1.0 AND ISC, approved, #2683 -npm/npmjs/-/stack-trace/0.0.10, MIT, approved, clearlydefined -npm/npmjs/-/stackframe/1.3.4, MIT, approved, clearlydefined -npm/npmjs/-/statuses/1.5.0, MIT, approved, clearlydefined -npm/npmjs/-/statuses/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/stop-iteration-iterator/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/streamroller/3.1.5, MIT, approved, clearlydefined -npm/npmjs/-/strict-event-emitter/0.2.8, MIT, approved, clearlydefined -npm/npmjs/-/strict-event-emitter/0.4.4, MIT, approved, #7077 -npm/npmjs/-/string-argv/0.3.1, MIT, approved, clearlydefined -npm/npmjs/-/string-width/4.2.3, MIT, approved, clearlydefined -npm/npmjs/-/string-width/5.1.2, MIT, approved, clearlydefined -npm/npmjs/-/string.prototype.trimend/1.0.6, MIT, approved, #4564 -npm/npmjs/-/string.prototype.trimstart/1.0.6, MIT, approved, #4647 -npm/npmjs/-/string_decoder/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/string_decoder/1.3.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-ansi/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/strip-ansi/7.0.1, MIT, approved, clearlydefined -npm/npmjs/-/strip-bom/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-final-newline/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-final-newline/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-indent/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-json-comments/3.1.1, MIT, approved, clearlydefined -npm/npmjs/-/strong-log-transformer/2.1.0, Apache-2.0, approved, #1138 -npm/npmjs/-/style-search/0.1.0, ISC, approved, clearlydefined -npm/npmjs/-/stylelint-config-recommended-scss/11.0.0, MIT, approved, #8068 -npm/npmjs/-/stylelint-config-recommended/12.0.0, MIT, approved, #8039 -npm/npmjs/-/stylelint-config-standard-scss/9.0.0, MIT, approved, #8024 -npm/npmjs/-/stylelint-config-standard/33.0.0, MIT, approved, #8038 -npm/npmjs/-/stylelint-scss/4.6.0, MIT, approved, clearlydefined -npm/npmjs/-/stylelint/15.6.0, MIT, approved, #8034 -npm/npmjs/-/sucrase/3.32.0, MIT, approved, #8042 -npm/npmjs/-/supports-color/5.5.0, MIT, approved, clearlydefined -npm/npmjs/-/supports-color/7.2.0, MIT, approved, clearlydefined -npm/npmjs/-/supports-color/8.1.1, MIT, approved, clearlydefined -npm/npmjs/-/supports-hyperlinks/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/supports-preserve-symlinks-flag/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/svg-tags/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/symbol-observable/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/symbol-tree/3.2.4, MIT, approved, clearlydefined -npm/npmjs/-/table/6.8.1, BSD-3-Clause, approved, #4596 -npm/npmjs/-/tailwindcss/3.3.1, MIT AND (Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND ISC AND MIT) AND CC0-1.0, approved, #8390 -npm/npmjs/-/tapable/2.2.1, MIT, approved, clearlydefined -npm/npmjs/-/tar-stream/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/tar/6.1.14, ISC, approved, #4566 -npm/npmjs/-/terser-webpack-plugin/5.3.1, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #7461 -npm/npmjs/-/terser-webpack-plugin/5.3.10, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #7461 -npm/npmjs/-/terser/5.16.3, BSD-2-Clause AND BSD-3-Clause AND BSD-2-Clause AND ISC, approved, #7045 -npm/npmjs/-/terser/5.19.2, BSD-2-Clause AND BSD-3-Clause AND BSD-2-Clause, approved, #9355 -npm/npmjs/-/terser/5.27.0, BSD-2-Clause AND (BSD-2-Clause AND BSD-3-Clause) AND ISC, approved, #12904 -npm/npmjs/-/test-exclude/6.0.0, ISC, approved, clearlydefined -npm/npmjs/-/text-hex/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/text-table/0.2.0, MIT, approved, clearlydefined -npm/npmjs/-/thenify-all/1.6.0, MIT, approved, clearlydefined -npm/npmjs/-/thenify/3.3.1, MIT, approved, clearlydefined -npm/npmjs/-/throttleit/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/through/2.3.8, Apache-2.0 AND MIT, approved, #1036 -npm/npmjs/-/thunky/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/tmp/0.0.33, MIT, approved, clearlydefined -npm/npmjs/-/tmp/0.2.1, MIT, approved, clearlydefined -npm/npmjs/-/to-fast-properties/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/to-regex-range/5.0.1, MIT, approved, clearlydefined -npm/npmjs/-/toidentifier/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/toposort/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/totalist/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/tough-cookie/4.1.3, BSD-3-Clause AND MIT, approved, #8743 -npm/npmjs/-/tr46/0.0.3, MIT, approved, clearlydefined -npm/npmjs/-/tr46/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/tree-kill/1.2.2, MIT, approved, clearlydefined -npm/npmjs/-/trim-newlines/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/triple-beam/1.3.0, MIT, approved, clearlydefined -npm/npmjs/-/ts-interface-checker/0.1.13, Apache-2.0, approved, clearlydefined -npm/npmjs/-/ts-loader/9.4.2, MIT AND ISC, approved, #5028 -npm/npmjs/-/ts-node/10.9.1, MIT, approved, clearlydefined -npm/npmjs/-/tsconfig-paths/3.14.1, MIT, approved, clearlydefined -npm/npmjs/-/tsconfig-paths/4.1.2, MIT, approved, #5390 -npm/npmjs/-/tsconfig-paths/4.2.0, MIT, approved, #7709 -npm/npmjs/-/tslib/1.14.1, 0BSD, approved, clearlydefined -npm/npmjs/-/tslib/2.5.0, 0BSD, approved, #6747 -npm/npmjs/-/tslib/2.6.1, 0BSD, approved, #9189 -npm/npmjs/-/tslib/2.6.2, 0BSD, approved, #9189 -npm/npmjs/-/tsutils/3.21.0, MIT, approved, clearlydefined -npm/npmjs/-/tuf-js/1.1.7, MIT, approved, #7585 -npm/npmjs/-/tunnel-agent/0.6.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/tweetnacl/0.14.5, Unlicense, approved, #1035 -npm/npmjs/-/type-check/0.4.0, MIT, approved, clearlydefined -npm/npmjs/-/type-fest/0.18.1, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/0.20.2, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/0.21.3, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/0.6.0, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/0.8.1, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/2.19.0, CC0-1.0 OR MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-is/1.6.18, MIT, approved, clearlydefined -npm/npmjs/-/typed-array-length/1.0.4, MIT, approved, #6246 -npm/npmjs/-/typed-assert/1.0.9, MIT, approved, clearlydefined -npm/npmjs/-/typescript/4.9.5, Apache-2.0 AND (CC-BY-4.0 AND LicenseRef-scancode-khronos AND LicenseRef-scancode-unicode AND MIT AND W3C-20150513), approved, #4979 -npm/npmjs/-/ua-parser-js/0.7.35, MIT, approved, clearlydefined -npm/npmjs/-/unbox-primitive/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/unicode-canonical-property-names-ecmascript/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/unicode-match-property-ecmascript/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/unicode-match-property-value-ecmascript/2.1.0, MIT, approved, #4991 -npm/npmjs/-/unicode-property-aliases-ecmascript/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/unique-filename/2.0.1, ISC, approved, clearlydefined -npm/npmjs/-/unique-filename/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/unique-slug/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/unique-slug/4.0.0, ISC, approved, clearlydefined -npm/npmjs/-/universalify/0.1.2, MIT, approved, clearlydefined -npm/npmjs/-/universalify/0.2.0, MIT, approved, clearlydefined -npm/npmjs/-/universalify/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/unpipe/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/untildify/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/update-browserslist-db/1.0.11, MIT, approved, #8237 -npm/npmjs/-/update-browserslist-db/1.0.13, MIT, approved, #8237 -npm/npmjs/-/upper-case-first/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/uri-js/4.4.1, BSD-2-Clause, approved, #1086 -npm/npmjs/-/url-parse/1.5.10, MIT, approved, clearlydefined -npm/npmjs/-/util-arity/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/util-deprecate/1.0.2, MIT, approved, #5885 -npm/npmjs/-/util/0.12.5, MIT, approved, clearlydefined -npm/npmjs/-/utils-merge/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/uuid/8.3.2, MIT AND (BSD-3-Clause AND MIT), approved, #2438 -npm/npmjs/-/uuid/9.0.0, MIT AND (BSD-3-Clause AND MIT), approved, #6869 -npm/npmjs/-/v8-compile-cache-lib/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/v8-compile-cache/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/validate-npm-package-license/3.0.4, Apache-2.0 AND (Apache-2.0 AND BSD-2-Clause), approved, #2562 -npm/npmjs/-/validate-npm-package-name/5.0.0, ISC, approved, clearlydefined -npm/npmjs/-/vary/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/verror/1.10.0, MIT, approved, clearlydefined -npm/npmjs/-/verror/1.10.1, MIT, approved, clearlydefined -npm/npmjs/-/vite/4.5.2, MIT, approved, clearlydefined -npm/npmjs/-/void-elements/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/w3c-hr-time/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/w3c-xmlserializer/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/watchpack/2.4.0, MIT, approved, clearlydefined -npm/npmjs/-/wbuf/1.7.3, MIT, approved, clearlydefined -npm/npmjs/-/wcwidth/1.0.1, MIT, approved, #944 -npm/npmjs/-/web-encoding/1.1.5, MIT, approved, clearlydefined -npm/npmjs/-/webidl-conversions/3.0.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/webidl-conversions/5.0.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/webidl-conversions/6.1.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/webpack-bundle-analyzer/4.8.0, MIT, approved, clearlydefined -npm/npmjs/-/webpack-dev-middleware/5.3.3, MIT, approved, clearlydefined -npm/npmjs/-/webpack-dev-middleware/6.1.1, MIT, approved, clearlydefined -npm/npmjs/-/webpack-dev-server/4.15.1, MIT, approved, #8400 -npm/npmjs/-/webpack-merge/5.10.0, MIT, approved, #12055 -npm/npmjs/-/webpack-merge/5.9.0, MIT, approved, #8760 -npm/npmjs/-/webpack-sources/3.2.3, MIT, approved, clearlydefined -npm/npmjs/-/webpack-subresource-integrity/5.1.0, MIT AND (BSD-2-Clause AND MIT), approved, #3307 -npm/npmjs/-/webpack/5.76.1, MIT, approved, #7409 -npm/npmjs/-/webpack/5.88.2, MIT, approved, #9185 -npm/npmjs/-/websocket-driver/0.7.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/websocket-extensions/0.1.4, Apache-2.0, approved, CQ23021 -npm/npmjs/-/whatwg-encoding/1.0.5, MIT, approved, clearlydefined -npm/npmjs/-/whatwg-mimetype/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/whatwg-url/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/whatwg-url/8.7.0, MIT, approved, clearlydefined -npm/npmjs/-/which-boxed-primitive/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/which-collection/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/which-typed-array/1.1.13, MIT, approved, #4864 -npm/npmjs/-/which/1.3.1, ISC, approved, clearlydefined -npm/npmjs/-/which/2.0.2, ISC, approved, clearlydefined -npm/npmjs/-/which/3.0.0, ISC, approved, #8246 -npm/npmjs/-/wide-align/1.1.5, ISC, approved, clearlydefined -npm/npmjs/-/wildcard/2.0.1, MIT, approved, #8274 -npm/npmjs/-/winston-transport/4.5.0, MIT, approved, clearlydefined -npm/npmjs/-/winston/3.8.2, MIT, approved, clearlydefined -npm/npmjs/-/word-wrap/1.2.5, MIT, approved, clearlydefined -npm/npmjs/-/wrap-ansi/6.2.0, MIT, approved, clearlydefined -npm/npmjs/-/wrap-ansi/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/wrappy/1.0.2, ISC, approved, clearlydefined -npm/npmjs/-/write-file-atomic/5.0.0, ISC, approved, #8219 -npm/npmjs/-/ws/7.5.7, MIT, approved, #1940 -npm/npmjs/-/ws/7.5.9, MIT, approved, #1940 -npm/npmjs/-/ws/8.11.0, MIT, approved, clearlydefined -npm/npmjs/-/ws/8.16.0, MIT, approved, clearlydefined -npm/npmjs/-/xml-name-validator/3.0.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/xmlbuilder/15.1.1, MIT, approved, clearlydefined -npm/npmjs/-/xmlchars/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/xmlcreate/2.0.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/y18n/5.0.8, ISC, approved, clearlydefined -npm/npmjs/-/yallist/3.1.1, ISC, approved, clearlydefined -npm/npmjs/-/yallist/4.0.0, ISC, approved, clearlydefined -npm/npmjs/-/yaml/1.10.2, ISC, approved, clearlydefined -npm/npmjs/-/yaml/2.2.2, ISC, approved, #7343 -npm/npmjs/-/yargs-parser/20.2.9, ISC, approved, clearlydefined -npm/npmjs/-/yargs-parser/21.1.1, ISC, approved, clearlydefined -npm/npmjs/-/yargs/16.2.0, MIT, approved, clearlydefined -npm/npmjs/-/yargs/17.7.2, MIT, approved, #8222 -npm/npmjs/-/yauzl/2.10.0, MIT, approved, clearlydefined -npm/npmjs/-/yn/3.1.1, MIT, approved, clearlydefined -npm/npmjs/-/yocto-queue/0.1.0, MIT, approved, clearlydefined -npm/npmjs/-/yocto-queue/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/yup/0.32.11, MIT, approved, clearlydefined -npm/npmjs/-/zone.js/0.13.0, MIT, approved, clearlydefined -npm/npmjs/@ampproject/remapping/2.2.1, Apache-2.0, approved, clearlydefined -npm/npmjs/@angular-builders/custom-webpack/16.0.1, MIT, approved, clearlydefined -npm/npmjs/@angular-devkit/architect/0.1602.12, MIT, approved, #13306 -npm/npmjs/@angular-devkit/build-angular/16.2.12, MIT, approved, #13294 -npm/npmjs/@angular-devkit/build-webpack/0.1602.12, MIT, approved, #13297 -npm/npmjs/@angular-devkit/core/16.2.12, MIT, approved, #13296 -npm/npmjs/@angular-devkit/schematics/16.2.12, MIT, approved, #13303 -npm/npmjs/@angular-eslint/builder/16.3.1, MIT, approved, #13299 -npm/npmjs/@angular-eslint/bundled-angular-compiler/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/eslint-plugin-template/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/eslint-plugin/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/schematics/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/template-parser/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/utils/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-material-components/datetime-picker/16.0.1, MIT, approved, clearlydefined -npm/npmjs/@angular/animations/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/cdk/16.2.13, MIT, approved, clearlydefined -npm/npmjs/@angular/cli/16.2.12, MIT AND Apache-2.0 AND (ISC AND BSD-2-Clause AND BSD-3-Clause AND MIT), approved, #13307 -npm/npmjs/@angular/common/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/compiler-cli/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/compiler/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/core/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/forms/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/language-service/16.2.12, MIT AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND Unlicense AND CC-BY-4.0 AND LicenseRef-Public-domain, approved, #11035 -npm/npmjs/@angular/material/16.2.13, MIT, approved, #13302 -npm/npmjs/@angular/platform-browser-dynamic/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/platform-browser/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/router/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@assemblyscript/loader/0.10.1, Apache-2.0, approved, clearlydefined -npm/npmjs/@babel/code-frame/7.21.4, MIT, approved, clearlydefined -npm/npmjs/@babel/code-frame/7.23.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11659 -npm/npmjs/@babel/compat-data/7.23.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11554 -npm/npmjs/@babel/core/7.21.8, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7466 -npm/npmjs/@babel/core/7.22.9, MIT, approved, #9057 -npm/npmjs/@babel/core/7.23.2, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11570 -npm/npmjs/@babel/generator/7.21.5, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7470 -npm/npmjs/@babel/generator/7.22.9, MIT, approved, #9002 -npm/npmjs/@babel/generator/7.23.0, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11522 -npm/npmjs/@babel/generator/7.23.6, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11522 -npm/npmjs/@babel/helper-annotate-as-pure/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-annotate-as-pure/7.22.5, MIT, approved, #9009 -npm/npmjs/@babel/helper-builder-binary-assignment-operator-visitor/7.22.15, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8765 -npm/npmjs/@babel/helper-compilation-targets/7.23.6, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-create-class-features-plugin/7.23.9, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-create-regexp-features-plugin/7.21.8, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8261 -npm/npmjs/@babel/helper-create-regexp-features-plugin/7.22.15, MIT, approved, #8950 -npm/npmjs/@babel/helper-define-polyfill-provider/0.4.4, MIT, approved, #9314 -npm/npmjs/@babel/helper-define-polyfill-provider/0.5.0, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-environment-visitor/7.22.20, MIT, approved, #8934 -npm/npmjs/@babel/helper-function-name/7.23.0, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-hoist-variables/7.22.5, MIT, approved, #8957 -npm/npmjs/@babel/helper-member-expression-to-functions/7.23.0, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10960 -npm/npmjs/@babel/helper-module-imports/7.22.15, MIT, approved, #8944 -npm/npmjs/@babel/helper-module-transforms/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8214 -npm/npmjs/@babel/helper-module-transforms/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11537 -npm/npmjs/@babel/helper-optimise-call-expression/7.22.5, MIT, approved, #9011 -npm/npmjs/@babel/helper-plugin-utils/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8262 -npm/npmjs/@babel/helper-plugin-utils/7.22.5, MIT, approved, #9012 -npm/npmjs/@babel/helper-remap-async-to-generator/7.22.20, MIT, approved, #8981 -npm/npmjs/@babel/helper-replace-supers/7.22.20, MIT, approved, #9068 -npm/npmjs/@babel/helper-simple-access/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8220 -npm/npmjs/@babel/helper-simple-access/7.22.5, MIT, approved, #9048 -npm/npmjs/@babel/helper-skip-transparent-expression-wrappers/7.22.5, MIT, approved, #8984 -npm/npmjs/@babel/helper-split-export-declaration/7.22.6, MIT, approved, #8938 -npm/npmjs/@babel/helper-string-parser/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8226 -npm/npmjs/@babel/helper-string-parser/7.22.5, MIT, approved, #8962 -npm/npmjs/@babel/helper-string-parser/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11660 -npm/npmjs/@babel/helper-validator-identifier/7.22.20, MIT, approved, #8955 -npm/npmjs/@babel/helper-validator-option/7.23.5, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-wrap-function/7.22.20, MIT, approved, #8951 -npm/npmjs/@babel/helpers/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8250 -npm/npmjs/@babel/helpers/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11662 -npm/npmjs/@babel/highlight/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/highlight/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11658 -npm/npmjs/@babel/parser/7.21.8, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7455 -npm/npmjs/@babel/parser/7.23.0, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10663 -npm/npmjs/@babel/parser/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10663 -npm/npmjs/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11581 -npm/npmjs/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11555 -npm/npmjs/@babel/plugin-proposal-async-generator-functions/7.20.7, MIT, approved, #4607 -npm/npmjs/@babel/plugin-proposal-private-property-in-object/7.21.0-placeholder-for-preset-env.2, MIT, approved, #8768 -npm/npmjs/@babel/plugin-proposal-unicode-property-regex/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-async-generators/7.8.4, MIT, approved, #1973 -npm/npmjs/@babel/plugin-syntax-class-properties/7.12.13, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-class-static-block/7.14.5, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-dynamic-import/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-export-namespace-from/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-import-assertions/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11577 -npm/npmjs/@babel/plugin-syntax-import-attributes/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11567 -npm/npmjs/@babel/plugin-syntax-import-meta/7.10.4, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-json-strings/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-logical-assignment-operators/7.10.4, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-numeric-separator/7.10.4, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-object-rest-spread/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-optional-catch-binding/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-optional-chaining/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-private-property-in-object/7.14.5, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-top-level-await/7.14.5, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-unicode-sets-regex/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-transform-arrow-functions/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11563 -npm/npmjs/@babel/plugin-transform-async-generator-functions/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11539 -npm/npmjs/@babel/plugin-transform-async-to-generator/7.22.5, MIT, approved, #8963 -npm/npmjs/@babel/plugin-transform-async-to-generator/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11569 -npm/npmjs/@babel/plugin-transform-block-scoped-functions/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11573 -npm/npmjs/@babel/plugin-transform-block-scoping/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10981 -npm/npmjs/@babel/plugin-transform-class-properties/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11547 -npm/npmjs/@babel/plugin-transform-class-static-block/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11590 -npm/npmjs/@babel/plugin-transform-classes/7.23.8, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11546 -npm/npmjs/@babel/plugin-transform-computed-properties/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11561 -npm/npmjs/@babel/plugin-transform-destructuring/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10963 -npm/npmjs/@babel/plugin-transform-dotall-regex/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-transform-dotall-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11553 -npm/npmjs/@babel/plugin-transform-duplicate-keys/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11576 -npm/npmjs/@babel/plugin-transform-dynamic-import/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11542 -npm/npmjs/@babel/plugin-transform-exponentiation-operator/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11588 -npm/npmjs/@babel/plugin-transform-export-namespace-from/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11544 -npm/npmjs/@babel/plugin-transform-for-of/7.23.6, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11571 -npm/npmjs/@babel/plugin-transform-function-name/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11583 -npm/npmjs/@babel/plugin-transform-json-strings/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11585 -npm/npmjs/@babel/plugin-transform-literals/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11584 -npm/npmjs/@babel/plugin-transform-logical-assignment-operators/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11562 -npm/npmjs/@babel/plugin-transform-member-expression-literals/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11587 -npm/npmjs/@babel/plugin-transform-modules-amd/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10967 -npm/npmjs/@babel/plugin-transform-modules-commonjs/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10965 -npm/npmjs/@babel/plugin-transform-modules-systemjs/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10977 -npm/npmjs/@babel/plugin-transform-modules-umd/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11541 -npm/npmjs/@babel/plugin-transform-named-capturing-groups-regex/7.22.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8738 -npm/npmjs/@babel/plugin-transform-new-target/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11548 -npm/npmjs/@babel/plugin-transform-nullish-coalescing-operator/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11550 -npm/npmjs/@babel/plugin-transform-numeric-separator/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11540 -npm/npmjs/@babel/plugin-transform-object-rest-spread/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11575 -npm/npmjs/@babel/plugin-transform-object-super/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11568 -npm/npmjs/@babel/plugin-transform-optional-catch-binding/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11574 -npm/npmjs/@babel/plugin-transform-optional-chaining/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10968 -npm/npmjs/@babel/plugin-transform-parameters/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11565 -npm/npmjs/@babel/plugin-transform-private-methods/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11545 -npm/npmjs/@babel/plugin-transform-private-property-in-object/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11578 -npm/npmjs/@babel/plugin-transform-property-literals/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11559 -npm/npmjs/@babel/plugin-transform-regenerator/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11557 -npm/npmjs/@babel/plugin-transform-reserved-words/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11572 -npm/npmjs/@babel/plugin-transform-runtime/7.22.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8746 -npm/npmjs/@babel/plugin-transform-shorthand-properties/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11589 -npm/npmjs/@babel/plugin-transform-spread/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11580 -npm/npmjs/@babel/plugin-transform-sticky-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11558 -npm/npmjs/@babel/plugin-transform-template-literals/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11560 -npm/npmjs/@babel/plugin-transform-typeof-symbol/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11556 -npm/npmjs/@babel/plugin-transform-unicode-escapes/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11566 -npm/npmjs/@babel/plugin-transform-unicode-property-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11582 -npm/npmjs/@babel/plugin-transform-unicode-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11549 -npm/npmjs/@babel/plugin-transform-unicode-sets-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11536 -npm/npmjs/@babel/preset-env/7.22.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8748 -npm/npmjs/@babel/preset-modules/0.1.5, MIT, approved, #9932 -npm/npmjs/@babel/regjsgen/0.8.0, MIT, approved, #7149 -npm/npmjs/@babel/runtime/7.20.13, MIT AND BSD-3-Clause AND BSD-2-Clause, approved, #6242 -npm/npmjs/@babel/runtime/7.21.0, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7349 -npm/npmjs/@babel/runtime/7.21.5, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7349 -npm/npmjs/@babel/runtime/7.22.6, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8730 -npm/npmjs/@babel/template/7.20.7, MIT AND BSD-2-Clause AND BSD-3-Clause, approved, #5988 -npm/npmjs/@babel/template/7.22.15, MIT, approved, #9017 -npm/npmjs/@babel/template/7.22.5, MIT, approved, #9017 -npm/npmjs/@babel/template/7.23.9, MIT, approved, clearlydefined -npm/npmjs/@babel/traverse/7.23.2, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11520 -npm/npmjs/@babel/traverse/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11520 -npm/npmjs/@babel/types/7.21.5, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7473 -npm/npmjs/@babel/types/7.23.0, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11521 -npm/npmjs/@babel/types/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11521 -npm/npmjs/@badeball/cypress-configuration/5.0.0, MIT, approved, #8021 -npm/npmjs/@badeball/cypress-cucumber-preprocessor/16.0.3, MIT, approved, #8041 -npm/npmjs/@bahmutov/cypress-esbuild-preprocessor/2.2.0, MIT, approved, clearlydefined -npm/npmjs/@colors/colors/1.5.0, MIT, approved, clearlydefined -npm/npmjs/@cspotcode/source-map-support/0.8.1, MIT, approved, clearlydefined -npm/npmjs/@csstools/css-parser-algorithms/2.1.1, MIT, approved, #8044 -npm/npmjs/@csstools/css-tokenizer/2.1.1, MIT, approved, #8033 -npm/npmjs/@csstools/media-query-list-parser/2.0.4, MIT, approved, #8067 -npm/npmjs/@csstools/selector-specificity/2.2.0, CC0-1.0, approved, clearlydefined -npm/npmjs/@cucumber/ci-environment/9.1.0, MIT, approved, clearlydefined -npm/npmjs/@cucumber/cucumber-expressions/16.1.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/cucumber/8.11.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin-streams/5.0.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin-utils/8.0.2, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin/24.1.0, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin/25.0.2, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin/26.0.3, MIT, approved, clearlydefined -npm/npmjs/@cucumber/html-formatter/19.2.0, MIT AND (Apache-2.0 AND CC-BY-4.0 AND MIT AND OFL-1.1), approved, #7072 -npm/npmjs/@cucumber/html-formatter/20.2.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/message-streams/4.0.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/messages/19.1.4, MIT, approved, clearlydefined -npm/npmjs/@cucumber/messages/21.0.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/tag-expressions/4.1.0, MIT, approved, clearlydefined -npm/npmjs/@cucumber/tag-expressions/5.0.1, MIT, approved, clearlydefined -npm/npmjs/@cypress/request/2.88.12, Apache-2.0, approved, #6948 -npm/npmjs/@cypress/schematic/2.5.0, MIT, approved, clearlydefined -npm/npmjs/@cypress/xvfb/1.2.4, MIT, approved, clearlydefined -npm/npmjs/@dabh/diagnostics/2.0.3, MIT, approved, clearlydefined -npm/npmjs/@discoveryjs/json-ext/0.5.7, MIT, approved, clearlydefined -npm/npmjs/@es-joy/jsdoccomment/0.37.1, MIT, approved, #8023 -npm/npmjs/@esbuild/android-arm/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7422 -npm/npmjs/@esbuild/android-arm/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9925 -npm/npmjs/@esbuild/android-arm/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9925 -npm/npmjs/@esbuild/android-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7550 -npm/npmjs/@esbuild/android-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9874 -npm/npmjs/@esbuild/android-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9874 -npm/npmjs/@esbuild/android-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7428 -npm/npmjs/@esbuild/android-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9889 -npm/npmjs/@esbuild/android-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9889 -npm/npmjs/@esbuild/darwin-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7542 -npm/npmjs/@esbuild/darwin-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9890 -npm/npmjs/@esbuild/darwin-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9890 -npm/npmjs/@esbuild/darwin-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7549 -npm/npmjs/@esbuild/darwin-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9873 -npm/npmjs/@esbuild/darwin-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9873 -npm/npmjs/@esbuild/freebsd-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7533 -npm/npmjs/@esbuild/freebsd-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9872 -npm/npmjs/@esbuild/freebsd-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9872 -npm/npmjs/@esbuild/freebsd-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7532 -npm/npmjs/@esbuild/freebsd-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9898 -npm/npmjs/@esbuild/freebsd-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9898 -npm/npmjs/@esbuild/linux-arm/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7534 -npm/npmjs/@esbuild/linux-arm/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9896 -npm/npmjs/@esbuild/linux-arm/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9896 -npm/npmjs/@esbuild/linux-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7525 -npm/npmjs/@esbuild/linux-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9879 -npm/npmjs/@esbuild/linux-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9879 -npm/npmjs/@esbuild/linux-ia32/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7551 -npm/npmjs/@esbuild/linux-ia32/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9918 -npm/npmjs/@esbuild/linux-ia32/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9918 -npm/npmjs/@esbuild/linux-loong64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/@esbuild/linux-loong64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7530 -npm/npmjs/@esbuild/linux-loong64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9922 -npm/npmjs/@esbuild/linux-loong64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9922 -npm/npmjs/@esbuild/linux-mips64el/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7526 -npm/npmjs/@esbuild/linux-mips64el/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9892 -npm/npmjs/@esbuild/linux-mips64el/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9892 -npm/npmjs/@esbuild/linux-ppc64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7552 -npm/npmjs/@esbuild/linux-ppc64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9931 -npm/npmjs/@esbuild/linux-ppc64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9931 -npm/npmjs/@esbuild/linux-riscv64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7545 -npm/npmjs/@esbuild/linux-riscv64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9894 -npm/npmjs/@esbuild/linux-riscv64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9894 -npm/npmjs/@esbuild/linux-s390x/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7544 -npm/npmjs/@esbuild/linux-s390x/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9888 -npm/npmjs/@esbuild/linux-s390x/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9888 -npm/npmjs/@esbuild/linux-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7539 -npm/npmjs/@esbuild/linux-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9915 -npm/npmjs/@esbuild/linux-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9915 -npm/npmjs/@esbuild/netbsd-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7535 -npm/npmjs/@esbuild/netbsd-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9909 -npm/npmjs/@esbuild/netbsd-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9909 -npm/npmjs/@esbuild/openbsd-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7529 -npm/npmjs/@esbuild/openbsd-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9914 -npm/npmjs/@esbuild/openbsd-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9914 -npm/npmjs/@esbuild/sunos-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7528 -npm/npmjs/@esbuild/sunos-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9913 -npm/npmjs/@esbuild/sunos-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9913 -npm/npmjs/@esbuild/win32-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7538 -npm/npmjs/@esbuild/win32-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9929 -npm/npmjs/@esbuild/win32-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9929 -npm/npmjs/@esbuild/win32-ia32/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7536 -npm/npmjs/@esbuild/win32-ia32/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9901 -npm/npmjs/@esbuild/win32-ia32/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9901 -npm/npmjs/@esbuild/win32-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7547 -npm/npmjs/@esbuild/win32-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9920 -npm/npmjs/@esbuild/win32-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9920 -npm/npmjs/@eslint-community/eslint-utils/4.4.0, MIT, approved, #8032 -npm/npmjs/@eslint-community/regexpp/4.5.0, MIT, approved, clearlydefined -npm/npmjs/@eslint/eslintrc/2.0.2, MIT, approved, #7481 -npm/npmjs/@eslint/js/8.39.0, MIT, approved, clearlydefined -npm/npmjs/@gar/promisify/1.1.3, MIT, approved, clearlydefined -npm/npmjs/@humanwhocodes/config-array/0.11.8, Apache-2.0, approved, #5876 -npm/npmjs/@humanwhocodes/module-importer/1.0.1, Apache-2.0, approved, clearlydefined -npm/npmjs/@humanwhocodes/object-schema/1.2.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/@istanbuljs/load-nyc-config/1.1.0, ISC, approved, clearlydefined -npm/npmjs/@istanbuljs/schema/0.1.3, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/gen-mapping/0.3.3, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/resolve-uri/3.1.0, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/resolve-uri/3.1.1, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/set-array/1.1.2, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/source-map/0.3.3, MIT, approved, #9304 -npm/npmjs/@jridgewell/source-map/0.3.5, MIT, approved, #9304 -npm/npmjs/@jridgewell/sourcemap-codec/1.4.14, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/sourcemap-codec/1.4.15, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/trace-mapping/0.3.18, MIT, approved, #9904 -npm/npmjs/@jridgewell/trace-mapping/0.3.22, MIT, approved, #9904 -npm/npmjs/@jridgewell/trace-mapping/0.3.9, MIT, approved, #9904 -npm/npmjs/@leichtgewicht/ip-codec/2.0.4, MIT, approved, clearlydefined -npm/npmjs/@material/animation/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/auto-init/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/banner/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/base/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/button/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/card/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/checkbox/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/chips/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/circular-progress/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/data-table/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/density/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/dialog/15.0.0-canary.bc9ae6c9c.0, MIT AND Apache-2.0, approved, #9870 -npm/npmjs/@material/dom/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/drawer/15.0.0-canary.bc9ae6c9c.0, MIT AND Apache-2.0, approved, #7431 -npm/npmjs/@material/elevation/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/fab/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/feature-targeting/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/floating-label/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/focus-ring/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/form-field/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/icon-button/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/image-list/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/layout-grid/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/line-ripple/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/linear-progress/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/list/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/menu-surface/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/menu/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/notched-outline/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/progress-indicator/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/radio/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/ripple/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/rtl/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/segmented-button/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/select/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/shape/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/slider/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/snackbar/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/switch/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tab-bar/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tab-indicator/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tab-scroller/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tab/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/textfield/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/theme/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tokens/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tooltip/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/top-app-bar/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/touch-target/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/typography/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@mswjs/cookies/0.2.2, MIT, approved, clearlydefined -npm/npmjs/@mswjs/interceptors/0.17.6, MIT, approved, clearlydefined -npm/npmjs/@ngtools/webpack/16.2.12, MIT, approved, #13300 -npm/npmjs/@nodelib/fs.scandir/2.1.5, MIT, approved, clearlydefined -npm/npmjs/@nodelib/fs.stat/2.0.5, MIT, approved, clearlydefined -npm/npmjs/@nodelib/fs.walk/1.2.8, MIT, approved, clearlydefined -npm/npmjs/@npmcli/fs/2.1.0, ISC, approved, clearlydefined -npm/npmjs/@npmcli/fs/3.1.0, ISC, approved, clearlydefined -npm/npmjs/@npmcli/git/4.0.3, ISC, approved, #7598 -npm/npmjs/@npmcli/installed-package-contents/2.0.1, ISC, approved, clearlydefined -npm/npmjs/@npmcli/move-file/2.0.0, MIT, approved, clearlydefined -npm/npmjs/@npmcli/node-gyp/3.0.0, ISC, approved, clearlydefined -npm/npmjs/@npmcli/promise-spawn/6.0.2, ISC, approved, #5774 -npm/npmjs/@npmcli/run-script/6.0.0, ISC, approved, #8271 -npm/npmjs/@nrwl/devkit/16.5.1, MIT, approved, #9377 -npm/npmjs/@nrwl/tao/16.5.1, MIT, approved, #9371 -npm/npmjs/@nx/devkit/16.5.1, MIT, approved, #9375 -npm/npmjs/@nx/nx-darwin-arm64/16.5.1, MIT, approved, #9374 -npm/npmjs/@nx/nx-darwin-x64/16.5.1, MIT AND Apache-2.0, approved, #9381 -npm/npmjs/@nx/nx-freebsd-x64/16.5.1, MIT AND Apache-2.0, approved, #9354 -npm/npmjs/@nx/nx-linux-arm-gnueabihf/16.5.1, MIT AND Apache-2.0, approved, #9358 -npm/npmjs/@nx/nx-linux-arm64-gnu/16.5.1, MIT, approved, #9360 -npm/npmjs/@nx/nx-linux-arm64-musl/16.5.1, MIT, approved, #9378 -npm/npmjs/@nx/nx-linux-x64-gnu/16.5.1, MIT, approved, #9366 -npm/npmjs/@nx/nx-linux-x64-musl/16.5.1, MIT, approved, #9361 -npm/npmjs/@nx/nx-win32-arm64-msvc/16.5.1, MIT, approved, #9362 -npm/npmjs/@nx/nx-win32-x64-msvc/16.5.1, MIT, approved, #9373 -npm/npmjs/@open-draft/until/1.0.3, MIT, approved, clearlydefined -npm/npmjs/@parcel/watcher/2.0.4, MIT, approved, clearlydefined -npm/npmjs/@polka/url/1.0.0-next.21, MIT, approved, clearlydefined -npm/npmjs/@schematics/angular/16.2.12, MIT AND Apache-2.0, approved, #13298 -npm/npmjs/@sigstore/bundle/1.1.0, Apache-2.0, approved, clearlydefined -npm/npmjs/@sigstore/protobuf-specs/0.2.1, Apache-2.0, approved, clearlydefined -npm/npmjs/@sigstore/sign/1.0.0, Apache-2.0, approved, clearlydefined -npm/npmjs/@sigstore/tuf/1.0.3, Apache-2.0, approved, #8733 -npm/npmjs/@socket.io/component-emitter/3.1.0, MIT, approved, clearlydefined -npm/npmjs/@teppeis/multimaps/2.0.0, MIT, approved, clearlydefined -npm/npmjs/@testing-library/angular/14.5.1, MIT, approved, #13305 -npm/npmjs/@testing-library/dom/9.3.4, MIT AND (MIT AND WTFPL), approved, #9038 -npm/npmjs/@testing-library/jasmine-dom/1.3.3, MIT, approved, clearlydefined -npm/npmjs/@tootallnate/once/1.1.2, MIT, approved, clearlydefined -npm/npmjs/@tootallnate/once/2.0.0, MIT, approved, clearlydefined -npm/npmjs/@tsconfig/node10/1.0.8, MIT, approved, clearlydefined -npm/npmjs/@tsconfig/node12/1.0.9, MIT, approved, clearlydefined -npm/npmjs/@tsconfig/node14/1.0.1, MIT, approved, clearlydefined -npm/npmjs/@tsconfig/node16/1.0.2, MIT, approved, clearlydefined -npm/npmjs/@tufjs/canonical-json/1.0.0, Apache-2.0 AND MIT, approved, #8047 -npm/npmjs/@tufjs/models/1.0.4, MIT, approved, #7600 -npm/npmjs/@types/aria-query/5.0.4, MIT, approved, #10958 -npm/npmjs/@types/body-parser/1.19.2, MIT, approved, #10831 -npm/npmjs/@types/bonjour/3.5.10, MIT, approved, clearlydefined -npm/npmjs/@types/connect-history-api-fallback/1.5.0, MIT, approved, #8395 -npm/npmjs/@types/connect/3.4.35, MIT, approved, clearlydefined -npm/npmjs/@types/cookie/0.4.1, MIT, approved, clearlydefined -npm/npmjs/@types/cors/2.8.13, MIT, approved, clearlydefined -npm/npmjs/@types/d3-array/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-axis/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-brush/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-chord/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-color/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-contour/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-delaunay/6.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-dispatch/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-drag/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-dsv/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-ease/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-fetch/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-force/3.0.3, MIT, approved, clearlydefined -npm/npmjs/@types/d3-format/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-geo/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-hierarchy/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-interpolate/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-path/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-polygon/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-quadtree/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-random/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-scale-chromatic/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-scale/4.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-selection/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-shape/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-time-format/4.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-time/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-timer/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-transition/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-zoom/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3/7.4.0, MIT, approved, clearlydefined -npm/npmjs/@types/debug/4.1.7, MIT, approved, #10817 -npm/npmjs/@types/eslint-scope/3.7.3, MIT, approved, #10812 -npm/npmjs/@types/eslint/8.4.2, MIT, approved, #2429 -npm/npmjs/@types/estree/0.0.51, MIT, approved, clearlydefined -npm/npmjs/@types/estree/1.0.5, MIT, approved, #8266 -npm/npmjs/@types/express-serve-static-core/4.17.34, MIT, approved, #6020 -npm/npmjs/@types/express/4.17.17, MIT, approved, #5760 -npm/npmjs/@types/geojson/7946.0.8, MIT, approved, #11480 -npm/npmjs/@types/glob/7.2.0, MIT, approved, clearlydefined -npm/npmjs/@types/http-proxy/1.17.11, MIT, approved, #8414 -npm/npmjs/@types/jasmine/4.3.1, MIT, approved, clearlydefined -npm/npmjs/@types/js-levenshtein/1.1.1, MIT, approved, clearlydefined -npm/npmjs/@types/json-schema/7.0.11, MIT, approved, clearlydefined -npm/npmjs/@types/json5/0.0.29, MIT, approved, clearlydefined -npm/npmjs/@types/karma/6.3.3, MIT, approved, clearlydefined -npm/npmjs/@types/lodash-es/4.17.7, MIT, approved, clearlydefined -npm/npmjs/@types/lodash/4.14.182, MIT, approved, #4131 -npm/npmjs/@types/lodash/4.14.194, MIT, approved, #4131 -npm/npmjs/@types/luxon/3.3.0, MIT, approved, clearlydefined -npm/npmjs/@types/mime/1.3.2, MIT, approved, #10834 -npm/npmjs/@types/mime/3.0.1, MIT, approved, #10805 -npm/npmjs/@types/minimatch/5.1.2, MIT, approved, clearlydefined -npm/npmjs/@types/minimist/1.2.2, MIT, approved, #10839 -npm/npmjs/@types/mkdirp/1.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/ms/0.7.31, MIT, approved, #10811 -npm/npmjs/@types/node/16.18.84, MIT, approved, #7082 -npm/npmjs/@types/node/18.16.0, MIT, approved, #9385 -npm/npmjs/@types/node/20.2.3, MIT, approved, clearlydefined -npm/npmjs/@types/normalize-package-data/2.4.1, MIT, approved, #10792 -npm/npmjs/@types/parse-json/4.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/qs/6.9.7, MIT, approved, clearlydefined -npm/npmjs/@types/range-parser/1.2.4, MIT, approved, #10795 -npm/npmjs/@types/retry/0.12.0, MIT, approved, clearlydefined -npm/npmjs/@types/semver/7.3.13, MIT, approved, #4668 -npm/npmjs/@types/send/0.17.1, MIT, approved, #10832 -npm/npmjs/@types/serve-index/1.9.1, MIT, approved, #10976 -npm/npmjs/@types/serve-static/1.15.1, MIT, approved, #9188 -npm/npmjs/@types/set-cookie-parser/2.4.2, MIT, approved, clearlydefined -npm/npmjs/@types/sinonjs__fake-timers/8.1.1, MIT, approved, #11000 -npm/npmjs/@types/sizzle/2.3.3, MIT, approved, clearlydefined -npm/npmjs/@types/sockjs/0.3.33, MIT, approved, #10984 -npm/npmjs/@types/testing-library__jasmine-dom/1.3.0, MIT, approved, clearlydefined -npm/npmjs/@types/uuid/8.3.4, MIT, approved, clearlydefined -npm/npmjs/@types/ws/8.5.10, MIT, approved, #6016 -npm/npmjs/@types/yauzl/2.10.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/eslint-plugin/5.59.1, BSD-2-Clause AND MIT, approved, #8045 -npm/npmjs/@typescript-eslint/parser/5.59.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/@typescript-eslint/scope-manager/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/scope-manager/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/type-utils/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/type-utils/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/types/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/types/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/typescript-estree/5.59.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/@typescript-eslint/typescript-estree/5.62.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/@typescript-eslint/utils/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/utils/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/visitor-keys/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/visitor-keys/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@vitejs/plugin-basic-ssl/1.0.1, MIT, approved, #12793 -npm/npmjs/@webassemblyjs/ast/1.11.1, MIT, approved, #7953 -npm/npmjs/@webassemblyjs/ast/1.11.6, MIT, approved, #7953 -npm/npmjs/@webassemblyjs/floating-point-hex-parser/1.11.1, MIT, approved, #7959 -npm/npmjs/@webassemblyjs/floating-point-hex-parser/1.11.6, MIT, approved, #7959 -npm/npmjs/@webassemblyjs/helper-api-error/1.11.1, MIT, approved, #7969 -npm/npmjs/@webassemblyjs/helper-api-error/1.11.6, MIT, approved, #7969 -npm/npmjs/@webassemblyjs/helper-buffer/1.11.1, MIT, approved, #7955 -npm/npmjs/@webassemblyjs/helper-buffer/1.11.6, MIT, approved, #7955 -npm/npmjs/@webassemblyjs/helper-numbers/1.11.1, MIT, approved, #7954 -npm/npmjs/@webassemblyjs/helper-numbers/1.11.6, MIT, approved, #7954 -npm/npmjs/@webassemblyjs/helper-wasm-bytecode/1.11.1, MIT, approved, #7962 -npm/npmjs/@webassemblyjs/helper-wasm-bytecode/1.11.6, MIT, approved, #7962 -npm/npmjs/@webassemblyjs/helper-wasm-section/1.11.1, MIT, approved, #7960 -npm/npmjs/@webassemblyjs/helper-wasm-section/1.11.6, MIT, approved, #7960 -npm/npmjs/@webassemblyjs/ieee754/1.11.1, MIT, approved, #7961 -npm/npmjs/@webassemblyjs/ieee754/1.11.6, MIT, approved, #7961 -npm/npmjs/@webassemblyjs/leb128/1.11.1, Apache-2.0, approved, #7958 -npm/npmjs/@webassemblyjs/leb128/1.11.6, Apache-2.0, approved, #7958 -npm/npmjs/@webassemblyjs/utf8/1.11.1, MIT, approved, #7966 -npm/npmjs/@webassemblyjs/utf8/1.11.6, MIT, approved, #7966 -npm/npmjs/@webassemblyjs/wasm-edit/1.11.1, Apache-2.0 AND ISC AND MIT, approved, #2186 -npm/npmjs/@webassemblyjs/wasm-edit/1.11.6, Apache-2.0 AND ISC AND MIT, approved, #2186 -npm/npmjs/@webassemblyjs/wasm-gen/1.11.1, MIT, approved, #7964 -npm/npmjs/@webassemblyjs/wasm-gen/1.11.6, MIT, approved, #7964 -npm/npmjs/@webassemblyjs/wasm-opt/1.11.1, MIT, approved, #7967 -npm/npmjs/@webassemblyjs/wasm-opt/1.11.6, MIT, approved, #7967 -npm/npmjs/@webassemblyjs/wasm-parser/1.11.1, MIT, approved, #7965 -npm/npmjs/@webassemblyjs/wasm-parser/1.11.6, MIT, approved, #7965 -npm/npmjs/@webassemblyjs/wast-printer/1.11.1, MIT, approved, #7957 -npm/npmjs/@webassemblyjs/wast-printer/1.11.6, MIT, approved, #7957 -npm/npmjs/@wessberg/ts-evaluator/0.0.27, MIT, approved, clearlydefined -npm/npmjs/@xmldom/xmldom/0.8.6, MIT, approved, #4866 -npm/npmjs/@xtuc/ieee754/1.2.0, BSD-3-Clause, approved, #123 -npm/npmjs/@xtuc/long/4.2.2, Apache-2.0, approved, clearlydefined -npm/npmjs/@yarnpkg/lockfile/1.1.0, BSD-2-Clause AND MIT, approved, #922 -npm/npmjs/@yarnpkg/parsers/3.0.0-rc.46, BSD-2-Clause, approved, #4660 -npm/npmjs/@zkochan/js-yaml/0.0.6, MIT, approved, clearlydefined -npm/npmjs/@zxing/text-encoding/0.9.0, Apache-2.0 AND Unlicense AND Apache-2.0, approved, #4869 From ee3aea2dbeab911ae62ee51cf8e0a427bd96e53d Mon Sep 17 00:00:00 2001 From: mk Date: Thu, 7 Mar 2024 17:00:19 +0100 Subject: [PATCH 09/87] chore: map C-X overall release version to Trace-X version and release documenation for releases after iteration --- COMPATIBILITY_MATRIX.md | 106 +++++++++++++++++++++++++++++++++++----- 1 file changed, 95 insertions(+), 11 deletions(-) diff --git a/COMPATIBILITY_MATRIX.md b/COMPATIBILITY_MATRIX.md index c887544952..f35b004d7c 100644 --- a/COMPATIBILITY_MATRIX.md +++ b/COMPATIBILITY_MATRIX.md @@ -1,15 +1,14 @@ # Compatibility matrix Trace-X -## Catena-X Release? -- [x] yes -> Catena-X Release 10.3.0 -- [ ] no +## Trace-X version [[10.6.0](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.6.0)] - 2024-03-04 -### (Trace-X Release) [10.3.0| Release Notes](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.3.0) +### Catena-X Release? -#### Trace-X version 10.3.0 +- [ ] yes +- [x] no -#### Helm Version 1.3.28 +### Helm Version [1.3.31](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/helm-charts-1.3.31) | Dependency | Name of Service | Version | Helm | Comments | |------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| @@ -31,16 +30,101 @@ | Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | | Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | -## Catena-X Release? -- [x] yes -> Catena-X Release 9.0.0-rc2 +## Trace-X version [[10.5.0](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.5.0)]- 2024-02-22 + +### Catena-X Release? + +- [ ] yes +- [x] no + + +| Dependency | Name of Service | Version | Helm | Comments | +|------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Finder | discovery service | v0.2.4-M1 | 0.1.11 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | + + +## Trace-X version [[10.4.0](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.4.0)] - 2024-02-19 + +### Catena-X Release? + +- [ ] yes +- [x] no + +| Dependency | Name of Service | Version | Helm | Comments | +|------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Finder | discovery service | v0.2.4-M1 | 0.1.11 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | + + +## Trace-X version [[10.3.0](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.3.0)] - 2024-02-05 + +### Catena-X Release? + +- [x] yes -> Catena-X Release 24.03 - [ ] no -### (Trace-X Release) [9.0.0-rc2| Release Notes](https://github.com/catenax-ng/tx-traceability-foss/releases/tag/9.0.0-rc2) +### Helm Version [1.3.28](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/helm-charts-1.3.28) -#### Trace-X version 9.0.0-rc2 +| Dependency | Name of Service | Version | Helm | Comments | +|------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Finder | discovery service | v0.2.4-M1 | 0.1.11 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | + + +## Trace-X version [[9.0.0-rc2](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/9.0.0-rc2)] - 2023-11-15 +## Catena-X Release? + +- [x] yes -> Catena-X Release R23.12 +- [ ] no -#### Helm Version 1.3.21 +### Helm Version 1.3.21 | Dependency | Name of Service | Version | Helm | Comments | |-------------------|------------------------------|---------------------------------|-------|-----------------------------------------------------------------------------------| From 4ac92e76885b1fbcb984c4d0dd42ade7cd690494 Mon Sep 17 00:00:00 2001 From: mk Date: Thu, 7 Mar 2024 17:17:40 +0100 Subject: [PATCH 10/87] fix(compatibility): fix helm version for release 1.3.29 --- COMPATIBILITY_MATRIX.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/COMPATIBILITY_MATRIX.md b/COMPATIBILITY_MATRIX.md index f35b004d7c..581955e5e9 100644 --- a/COMPATIBILITY_MATRIX.md +++ b/COMPATIBILITY_MATRIX.md @@ -67,6 +67,8 @@ - [ ] yes - [x] no +### Helm Version [1.3.29](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/helm-charts-1.3.29) + | Dependency | Name of Service | Version | Helm | Comments | |------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| | EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | From aea3b45c0f1dc1f9b54c15bb7c5a4c69ceff6a2f Mon Sep 17 00:00:00 2001 From: mk Date: Thu, 7 Mar 2024 17:18:54 +0100 Subject: [PATCH 11/87] chore(changelog): update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92fc525b8e..d50a55b278 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ _**For better traceability add the corresponding GitHub issue number in each cha - Updated RELEASE.md to the latest release guide (added more steps) - #515 Fixed notification toast click area - #423 Moved errorMessages from investigation/alert to notification list +- Updated COMPATIBILITY.md matrix adding release C-X 24.3 and 23.12 ### Removed - #625 Removed the header and breadcrumbs section from app layout From 6b036fd3909465f8adfdab3d0b70533343354aa9 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Fri, 8 Mar 2024 09:06:31 +0100 Subject: [PATCH 12/87] chore: update arc42 runtime-view scenarios with data sovereignty domain and contract agreements flow for assets --- .../arc42/runtime-view/data-sovereignty.adoc | 3 ++ .../return_asset_contracts.adoc | 17 +++++++ docs/src/docs/arc42/runtime-view/full.adoc | 1 + .../get-all-contracts-sequenceflow.puml | 50 +++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 docs/src/docs/arc42/runtime-view/data-sovereignty.adoc create mode 100644 docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc create mode 100644 docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml diff --git a/docs/src/docs/arc42/runtime-view/data-sovereignty.adoc b/docs/src/docs/arc42/runtime-view/data-sovereignty.adoc new file mode 100644 index 0000000000..3b4322d696 --- /dev/null +++ b/docs/src/docs/arc42/runtime-view/data-sovereignty.adoc @@ -0,0 +1,3 @@ += Data Souvereignty + +include::data-sovereignty/return_asset_contracts.adoc[leveloffset=+1] diff --git a/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc b/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc new file mode 100644 index 0000000000..6ab609d331 --- /dev/null +++ b/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc @@ -0,0 +1,17 @@ += Scenario 1: Return Asset Contract Agreements + +This section describes what happens when a user requests contract agreements from Trace-X via the /contracts API. + +[plantuml,target=return-all-assets,format=svg] +.... +include::../../../../uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml[] +.... + +==== Overview + +When a user requests contract agreements, TraceX checks if the user has an adequate role ('ROLE_ADMIN', 'ROLE_SUPERVISOR'). +If yes, then the requested assets will be mapped to their contract agreement id via a database view. +These contract agreement ids will be then requested on EDC side via POST/management/v2/contractagreements/request and GET /management/v2/contractagreements/\{ContractAgreementId\}/negotiation to get the relevant information. +The result is then returned by the endpoint as a pageable result. + +If no asset ids are provided in the request, the first 50 contract agreement ids in the database view will be returned. diff --git a/docs/src/docs/arc42/runtime-view/full.adoc b/docs/src/docs/arc42/runtime-view/full.adoc index fc9b44a74f..ebeeeb5ca2 100644 --- a/docs/src/docs/arc42/runtime-view/full.adoc +++ b/docs/src/docs/arc42/runtime-view/full.adoc @@ -6,3 +6,4 @@ include::assets.adoc[leveloffset=+1] include::notifications.adoc[leveloffset=+1] include::data-consumption.adoc[leveloffset=+1] include::data-provisioning.adoc[leveloffset=+1] +include::data-sovereignty.adoc[leveloffset=+1] diff --git a/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml b/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml new file mode 100644 index 0000000000..263be59575 --- /dev/null +++ b/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml @@ -0,0 +1,50 @@ +@startuml +title + ==POST api/contracts/request +end title + +autonumber "[00]" + +participant "Trace-X Frontend" as FE order 0 +participant "Trace-X Backend" as BE order 1 +participant "Trace-X Database" as DB order 2 +participant "EDC" as EDC order 3 + +FE -> BE: POST api/contracts/request (limit, offset, sort, filter) + +activate BE +BE -> DB: Fetch requested distinct contractAgreementIds +activate DB +autonumber stop +DB --> BE: List(contractAgreementIds) +autonumber resume +deactivate DB + +BE -> EDC: POST tx-edc/management/v2/contractagreements/request \nfiltered by contractAgreementIds +activate EDC +autonumber stop +EDC --> BE: JSON response +autonumber resume +deactivate EDC +BE -> BE: Extract contractSigningDate, policy +activate BE +deactivate BE + +loop for all contractAgreementIds +BE -> EDC: GET tx-edc/management/v2/contractagreements/{contractAgreementId}/negotiation +activate EDC +autonumber stop +EDC --> BE: JSON response +autonumber resume +deactivate EDC +BE -> BE: Extract id, counterPartyAddress, state +activate BE +deactivate BE +end + +autonumber stop +BE --> FE: JSON response +autonumber resume +deactivate BE + +@enduml From 34b9bce26a00b18316e7bcb1da9ba21b185008ce Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 10:14:22 +0100 Subject: [PATCH 13/87] chore(ux): 625 increased height of tables --- .../components/table/table.component.html | 2 +- .../components/table/table.component.scss | 14 +++++ frontend/src/theme/base.scss | 52 +++++++++++++++++-- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/modules/shared/components/table/table.component.html b/frontend/src/app/modules/shared/components/table/table.component.html index 047bddbbcb..5c72213d7c 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.html +++ b/frontend/src/app/modules/shared/components/table/table.component.html @@ -24,7 +24,7 @@
{{tableHeader | i18n}}
-
+

{{tableHeader | i18n }}

diff --git a/frontend/src/app/modules/shared/components/table/table.component.scss b/frontend/src/app/modules/shared/components/table/table.component.scss index 980c6d9a86..70997279dd 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.scss +++ b/frontend/src/app/modules/shared/components/table/table.component.scss @@ -231,3 +231,17 @@ tr.error { } } +.rows-dashboard { + + @media screen and (max-height: 1049px) { + height: 48vh !important; + max-height: 48vh !important; + } + + @media screen and (min-height: 1050px) { + height: 30vh !important; + max-height: 30vh !important; + } + +} + diff --git a/frontend/src/theme/base.scss b/frontend/src/theme/base.scss index b36ab4afdd..bba9135338 100644 --- a/frontend/src/theme/base.scss +++ b/frontend/src/theme/base.scss @@ -172,13 +172,60 @@ app-parts-table { } as-split { - height: 61vh !important; + + @media screen and (max-height: 1049px) { + height: 66vh !important + } + + @media screen and (min-height: 1050px) { + height: 75vh !important + } + +} + +app-parts, app-other-parts { + .table-wrapper { + @media screen and (max-height: 1049px) { + height: 52vh !important; + max-height: 52vh !important; + } + + @media screen and (min-height: 1050px) { + height: 60vh !important; + max-height: 60vh !important; + } + } + + .mat-mdc-paginator-page-size { + margin-bottom: 3px !important; + } } app-other-parts { .table-wrapper { background-color: white; - height: 40.5vh; + @media screen and (max-height: 1049px) { + height: 33vh !important; + max-height: 56vh !important + } + + @media screen and (min-height: 1050px) { + height: 56vh !important; + max-height: 56vh !important; + } + } +} + +app-notifications-tab { + .table-wrapper { + @media screen and (max-height: 1049px) { + height: 56vh ; + } + + @media screen and (min-height: 1050px) { + height: 70vh ; + max-height: 70vh ; + } } } @@ -239,7 +286,6 @@ app-parts, app-other-parts, app-notifications-tab { } .table-wrapper { - max-height: 52vh; overflow: auto; } From 8db610f4c191bdb540cca7901771b241e2b46ac4 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 10:15:25 +0100 Subject: [PATCH 14/87] chore(ux): 625 increased height of tables --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52275c127f..bf1211f130 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ _**For better traceability add the corresponding GitHub issue number in each cha ### Changed - Updated RELEASE.md to the latest release guide (added more steps) - #515 Fixed notification toast click area +- #625 increased height of tables ### Removed - #625 Removed the header and breadcrumbs section from app layout From 11fdb687186e9cdc7edd3302fa7c9df443f8547b Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 10:19:44 +0100 Subject: [PATCH 15/87] chore(ux): 625 fix tests --- .../app/modules/shared/components/table/table.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/modules/shared/components/table/table.component.html b/frontend/src/app/modules/shared/components/table/table.component.html index 5c72213d7c..8fddd760d0 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.html +++ b/frontend/src/app/modules/shared/components/table/table.component.html @@ -24,7 +24,7 @@
{{tableHeader | i18n}}
-
+

{{tableHeader | i18n }}

From a220bc03aee557df22e213b49de4263aa101ebaf Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Fri, 8 Mar 2024 10:17:46 +0100 Subject: [PATCH 16/87] chore: add irs-edc-lib to release flow to avoid snapshots --- docs/RELEASE.md | 52 ++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index b12c01b74c..7eb896c1be 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -4,31 +4,35 @@
## Release an app + Prerequisite: Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 -2) Create and Checkout release branch on catena /release/1.0.0 -4) Edit changelog: Align the new version (1.0.0) with the changes and add new UNRELEASED section -5) Edit /charts/traceability-foss/CHANGELOG.md -6) Add an Entry for an incremented (patch) version (1.0.0 -> 1.0.1) -7) Push onto /release/1.0.0 catena and eclipse -8) Open Release App Page Catena: https://github.com/catenax-ng/tx-traceability-foss/releases -9) Draft a new release -10) On dropdown choose a tag - use the version 1.0.0 (Create new tag will appear - select it) -11) On dropdown target use your /release/1.0.0 -12) Title = Version of app -> 1.0.0 -13) Description = Changelog Content of app -14) Checkbox set as latest release -15) Verify that github action [Release](https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/release.yaml) generation has been triggered -16) Verify that an automatic pull request has been opened (Prepare Helm release for next version) -17) Validate that the versions within that pull requests are correct -18) Merge pull request (Prepare Helm release for next version) -19) Merge release branch into main (when merging make sure to restore release branch since it should stay) -20) Open the github action for helm release generation: https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/helm-chart-release.yaml -21) Execute it from main branch -22) Validate that the helm charts release has been generated within the release page -23) Create a new branch from release/1.0.0 and name it release/helm-environments-1.0.0 (helm app version not chart version) -24) Repeat step 8 to 23 for tractus-x: [GitHub Releases page](https://github.com/eclipse-tractusx/traceability-foss/releases) -25) Sync catena and eclipse main branch -26) Create a message in the Trace-X channel of the Eclipse Foundation Chat to notify the community about the new release (add a link to the tractus-x release) +2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) and update the to the desired version +3) Create a merge request to [IRS](https://github.com/eclipse-tractusx/item-relationship-service) with the above created release branch to release the irs-registry-client in a none snapshot version +4) Create and Checkout release branch on catena /release/1.0.0 +5) Update in the above created release branch to the created one in step 3. +6) Edit changelog: Align the new version (1.0.0) with the changes and add new UNRELEASED section +7) Edit /charts/traceability-foss/CHANGELOG.md +8) Add an Entry for an incremented (patch) version (1.0.0 -> 1.0.1) +9) Push onto /release/1.0.0 catena and eclipse +10) Open Release App Page Catena: https://github.com/catenax-ng/tx-traceability-foss/releases +11) Draft a new release +12) On dropdown choose a tag - use the version 1.0.0 (Create new tag will appear - select it) +13) On dropdown target use your /release/1.0.0 +14) Title = Version of app -> 1.0.0 +15) Description = Changelog Content of app +16) Checkbox set as latest release +17) Verify that github action [Release](https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/release.yaml) generation has been triggered +18) Verify that an automatic pull request has been opened (Prepare Helm release for next version) +19) Validate that the versions within that pull requests are correct +20) Merge pull request (Prepare Helm release for next version) +21) Merge release branch into main (when merging make sure to restore release branch since it should stay) +22) Open the github action for helm release generation: https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/helm-chart-release.yaml +23) Execute it from main branch +24) Validate that the helm charts release has been generated within the release page +25) Create a new branch from release/1.0.0 and name it release/helm-environments-1.0.0 (helm app version not chart version) +26) Repeat step 8 to 23 for tractus-x: [GitHub Releases page](https://github.com/eclipse-tractusx/traceability-foss/releases) +27) Sync catena and eclipse main branch +28) Create a message in the Trace-X channel of the Eclipse Foundation Chat to notify the community about the new release (add a link to the tractus-x release) From 0b7f097ad6f300c5d1d2042b20c06c3f1d492319 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Fri, 8 Mar 2024 10:52:38 +0100 Subject: [PATCH 17/87] chore: add irs-edc-lib to release flow to avoid snapshots --- docs/RELEASE.md | 57 ++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 7eb896c1be..3ae4af81fd 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -9,30 +9,33 @@ Prerequisite: Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 -2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) and update the to the desired version -3) Create a merge request to [IRS](https://github.com/eclipse-tractusx/item-relationship-service) with the above created release branch to release the irs-registry-client in a none snapshot version -4) Create and Checkout release branch on catena /release/1.0.0 -5) Update in the above created release branch to the created one in step 3. -6) Edit changelog: Align the new version (1.0.0) with the changes and add new UNRELEASED section -7) Edit /charts/traceability-foss/CHANGELOG.md -8) Add an Entry for an incremented (patch) version (1.0.0 -> 1.0.1) -9) Push onto /release/1.0.0 catena and eclipse -10) Open Release App Page Catena: https://github.com/catenax-ng/tx-traceability-foss/releases -11) Draft a new release -12) On dropdown choose a tag - use the version 1.0.0 (Create new tag will appear - select it) -13) On dropdown target use your /release/1.0.0 -14) Title = Version of app -> 1.0.0 -15) Description = Changelog Content of app -16) Checkbox set as latest release -17) Verify that github action [Release](https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/release.yaml) generation has been triggered -18) Verify that an automatic pull request has been opened (Prepare Helm release for next version) -19) Validate that the versions within that pull requests are correct -20) Merge pull request (Prepare Helm release for next version) -21) Merge release branch into main (when merging make sure to restore release branch since it should stay) -22) Open the github action for helm release generation: https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/helm-chart-release.yaml -23) Execute it from main branch -24) Validate that the helm charts release has been generated within the release page -25) Create a new branch from release/1.0.0 and name it release/helm-environments-1.0.0 (helm app version not chart version) -26) Repeat step 8 to 23 for tractus-x: [GitHub Releases page](https://github.com/eclipse-tractusx/traceability-foss/releases) -27) Sync catena and eclipse main branch -28) Create a message in the Trace-X channel of the Eclipse Foundation Chat to notify the community about the new release (add a link to the tractus-x release) +2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release +3) Remove the "-SNAPSHOT" suffix from in the root pom.xml - if there is no snapshot version, you can skip the release of the irs-registry-client library +4) Create a merge request to the [IRS](https://github.com/eclipse-tractusx/item-relationship-service) main branch with the above created release branch +5) After merge, the release branch must be deleted +6) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 +7) Create and Checkout release branch on catena /release/1.0.0 +8) Update in the above created release branch to the created one in step 3. +9) Edit changelog: Align the new version (1.0.0) with the changes and add new UNRELEASED section +10) Edit /charts/traceability-foss/CHANGELOG.md +11) Add an Entry for an incremented (patch) version (1.0.0 -> 1.0.1) +12) Push onto /release/1.0.0 catena and eclipse +13) Open Release App Page Catena: https://github.com/catenax-ng/tx-traceability-foss/releases +14) Draft a new release +15) On dropdown choose a tag - use the version 1.0.0 (Create new tag will appear - select it) +16) On dropdown target use your /release/1.0.0 +17) Title = Version of app -> 1.0.0 +18) Description = Changelog Content of app +19) Checkbox set as latest release +20) Verify that github action [Release](https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/release.yaml) generation has been triggered +21) Verify that an automatic pull request has been opened (Prepare Helm release for next version) +22) Validate that the versions within that pull requests are correct +23) Merge pull request (Prepare Helm release for next version) +24) Merge release branch into main (when merging make sure to restore release branch since it should stay) +25) Open the github action for helm release generation: https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/helm-chart-release.yaml +26) Execute it from main branch +27) Validate that the helm charts release has been generated within the release page +28) Create a new branch from release/1.0.0 and name it release/helm-environments-1.0.0 (helm app version not chart version) +29) Repeat step 8 to 23 for tractus-x: [GitHub Releases page](https://github.com/eclipse-tractusx/traceability-foss/releases) +30) Sync catena and eclipse main branch +31) Create a message in the Trace-X channel of the Eclipse Foundation Chat to notify the community about the new release (add a link to the tractus-x release) From 891d596d39da83f42318cd88d4a94dd0fdb3a059 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Fri, 8 Mar 2024 11:31:39 +0100 Subject: [PATCH 18/87] chore: update arc42 runtime-view scenarios with data sovereignty domain and contract agreements flow for assets --- .../data-sovereignty/return_asset_contracts.adoc | 15 +++++++++------ .../get-all-contracts-sequenceflow.puml | 8 ++++---- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc b/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc index 6ab609d331..83da8b228e 100644 --- a/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc +++ b/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc @@ -1,6 +1,6 @@ = Scenario 1: Return Asset Contract Agreements -This section describes what happens when a user requests contract agreements from Trace-X via the /contracts API. +This section describes functionality and the behavior in case a user requests contract agreements from Trace-X via the Trace-X contracts API (/contracts). [plantuml,target=return-all-assets,format=svg] .... @@ -9,9 +9,12 @@ include::../../../../uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-co ==== Overview -When a user requests contract agreements, TraceX checks if the user has an adequate role ('ROLE_ADMIN', 'ROLE_SUPERVISOR'). -If yes, then the requested assets will be mapped to their contract agreement id via a database view. -These contract agreement ids will be then requested on EDC side via POST/management/v2/contractagreements/request and GET /management/v2/contractagreements/\{ContractAgreementId\}/negotiation to get the relevant information. -The result is then returned by the endpoint as a pageable result. +In case a user requests contract agreements, Trace-X checks if the user has required roles ('ROLE_ADMIN', 'ROLE_SUPERVISOR'). +If yes, then the requested assets will be mapped to the related contract agreement id. +These contract agreement ids will be then requested on EDC side via POST (/management/v2/contractagreements/request) and GET (/management/v2/contractagreements/\{ContractAgreementId\}/negotiation) to get the relevant information. -If no asset ids are provided in the request, the first 50 contract agreement ids in the database view will be returned. +The request to POST (/management/v2/contractagreements/request) looks like this: + +The contract information is then returned by the endpoint as a pageable result. + +If no asset ids are provided in the request, 50 contract agreement ids are handled by default. diff --git a/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml b/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml index 263be59575..2413a2a9bf 100644 --- a/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml +++ b/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml @@ -23,7 +23,7 @@ deactivate DB BE -> EDC: POST tx-edc/management/v2/contractagreements/request \nfiltered by contractAgreementIds activate EDC autonumber stop -EDC --> BE: JSON response +EDC --> BE: List of ContractAgreement objects autonumber resume deactivate EDC BE -> BE: Extract contractSigningDate, policy @@ -34,16 +34,16 @@ loop for all contractAgreementIds BE -> EDC: GET tx-edc/management/v2/contractagreements/{contractAgreementId}/negotiation activate EDC autonumber stop -EDC --> BE: JSON response +EDC --> BE: ContractAgreementNegotiation object autonumber resume deactivate EDC -BE -> BE: Extract id, counterPartyAddress, state +BE -> BE: Extractattributes of response (id, counterPartyAddress, state) activate BE deactivate BE end autonumber stop -BE --> FE: JSON response +BE --> FE: Pageable Result of ContractResponse objects autonumber resume deactivate BE From 8496219b93a1a4c3477e50308e86becf6cf65dfc Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Fri, 8 Mar 2024 12:28:20 +0100 Subject: [PATCH 19/87] chore: update arc42 runtime-view scenarios with data sovereignty domain and contract agreements flow for assets --- .../runtime-view/data-sovereignty/return_asset_contracts.adoc | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc b/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc index 83da8b228e..afe880541b 100644 --- a/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc +++ b/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc @@ -13,8 +13,6 @@ In case a user requests contract agreements, Trace-X checks if the user has requ If yes, then the requested assets will be mapped to the related contract agreement id. These contract agreement ids will be then requested on EDC side via POST (/management/v2/contractagreements/request) and GET (/management/v2/contractagreements/\{ContractAgreementId\}/negotiation) to get the relevant information. -The request to POST (/management/v2/contractagreements/request) looks like this: - The contract information is then returned by the endpoint as a pageable result. If no asset ids are provided in the request, 50 contract agreement ids are handled by default. From 798da056e4f70b3b89f140e0835e0e2e79bf3aa7 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 15:48:44 +0100 Subject: [PATCH 20/87] chore(contracts): 421 fix table layout and implement sorting and filtering --- .../modules/page/admin/core/admin.service.ts | 87 +++++++++++-------- .../admin/presentation/admin.component.scss | 2 +- .../contract-table.component.html | 2 +- .../contract-table.component.ts | 11 ++- .../components/table/table.component.html | 4 +- .../components/table/table.component.ts | 16 ++++ frontend/src/theme/base.scss | 7 ++ 7 files changed, 85 insertions(+), 44 deletions(-) diff --git a/frontend/src/app/modules/page/admin/core/admin.service.ts b/frontend/src/app/modules/page/admin/core/admin.service.ts index c4f3a832c2..cecad27fe4 100644 --- a/frontend/src/app/modules/page/admin/core/admin.service.ts +++ b/frontend/src/app/modules/page/admin/core/admin.service.ts @@ -32,59 +32,74 @@ import { map } from 'rxjs/operators'; @Injectable() export class AdminService { - private readonly url = environment.apiUrl; + private readonly url = environment.apiUrl; - constructor(private readonly apiService: ApiService) { - } + constructor(private readonly apiService: ApiService) { + } - public createBpnFallbackConfig(bpnConfig: BpnConfig[]): Observable { - return this.apiService.post(`${this.url}/bpn-config`, bpnConfig); - } + public createBpnFallbackConfig(bpnConfig: BpnConfig[]): Observable { + return this.apiService.post(`${ this.url }/bpn-config`, bpnConfig); + } - public readBpnFallbackConfig(): Observable { - return this.apiService - .get(`${this.url}/bpn-config`) - .pipe(map(data => AdminAssembler.assembleBpnConfig(data))); - } + public readBpnFallbackConfig(): Observable { + return this.apiService + .get(`${ this.url }/bpn-config`) + .pipe(map(data => AdminAssembler.assembleBpnConfig(data))); + } - public updateBpnFallbackConfig(bpnConfig: BpnConfig[]): Observable { - return this.apiService.put(`${this.url}/bpn-config`, bpnConfig); - } + public updateBpnFallbackConfig(bpnConfig: BpnConfig[]): Observable { + return this.apiService.put(`${ this.url }/bpn-config`, bpnConfig); + } - public deleteBpnFallbackConfig(bpn: string): Observable { - return this.apiService.delete(`${this.url}/bpn-config/${bpn}`); - } + public deleteBpnFallbackConfig(bpn: string): Observable { + return this.apiService.delete(`${ this.url }/bpn-config/${ bpn }`); + } - public postJsonFile(file: File): Observable { - const formData = new FormData(); - formData.append('file', file); - return this.apiService.postFile(`${this.url}/assets/import`, formData); - } + public postJsonFile(file: File): Observable { + const formData = new FormData(); + formData.append('file', file); + return this.apiService.postFile(`${ this.url }/assets/import`, formData); + } - public getContracts(page: number, pageSize: number, sorting?: TableHeaderSort[], filter?: any): Observable> { + public getContracts(page: number, pageSize: number, sorting?: TableHeaderSort[], filter?: Object): Observable> { + console.log(sorting); + console.log(filter); - const body = { - pageAble: { - page: page, - size: pageSize, - // sort: sorting[0].toString(), - }, - searchCriteria: { - //filter: [ ...additionalFilters ], - }, - }; + const body = { + pageAble: { + page: page, + size: pageSize, + sorting: sorting, + }, + searchCriteria: {}, + }; - return this.apiService.post(`${this.url}/contracts`, body) + if (filter) { + body.searchCriteria = { filter: this.createFilterList(filter) }; } + return this.apiService.post(`${ this.url }/contracts`, body); + } + getDistinctFilterValues(filterColumns: string, searchElement: string) { let params = new HttpParams() .set('fieldName', filterColumns) .set('startWith', searchElement) - .set('size', 200) + .set('size', 200); - return this.apiService.getBy(`${this.url}/contracts/distinctFilterValues`, params); + return this.apiService.getBy(`${ this.url }/contracts/distinctFilterValues`, params); + } + private createFilterList(filter: Object) { + let filterList = []; + Object.entries(filter).forEach(([ entry, values ]) => { + if (values.length) { + values.forEach(value => { + filterList.push(`${ entry },EQUAL,${ value },AND`); + }); + } + }); + return filterList; } } diff --git a/frontend/src/app/modules/page/admin/presentation/admin.component.scss b/frontend/src/app/modules/page/admin/presentation/admin.component.scss index 60e8758614..edbd6b0f2b 100644 --- a/frontend/src/app/modules/page/admin/presentation/admin.component.scss +++ b/frontend/src/app/modules/page/admin/presentation/admin.component.scss @@ -90,5 +90,5 @@ .sidenav--content { margin-left: 20px; min-height: 300px; - overflow: scroll; + overflow: auto; } diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html index b048615550..d4200a9609 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html @@ -30,7 +30,7 @@ [additionalTableHeader]="true" [noShadow]="true" [showHover]="false" - [labelId]="'test'" + [labelId]="'contracts'" [autocompleteEnabled]="true" (configChanged)="onTableConfigChange($event)" (filterActivated)="filterActivated($event)" diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts index 776dc9e5fb..718f5a005c 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts @@ -23,7 +23,7 @@ export class ContractTableComponent { pagination: TableEventConfig; constructor(private adminFacade: AdminFacade) { - this.pagination = { page: 0, pageSize: 10, sorting: null }; + this.pagination = { page: 0, pageSize: 50, sorting: ['',null] }; this.tableConfig = { displayedColumns: [ 'select', 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], header: CreateHeaderFromColumns([ 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], 'pageAdmin.contracts'), @@ -42,20 +42,23 @@ export class ContractTableComponent { } public ngOnInit() { - this.contracts = this.adminFacade.getContracts(0, 10); + this.contracts = this.adminFacade.getContracts(0, 50, [null,null], null); this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) } filterActivated(contractFilter: any): void { console.log(contractFilter); - this.contracts = this.adminFacade.getContracts(0, 10, null, contractFilter); this.contractFilter = contractFilter; + this.contracts = this.adminFacade.getContracts(this.pagination.page, this.pagination.pageSize, [this.pagination.sorting], contractFilter); + this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) } public onTableConfigChange(pagination: TableEventConfig): void { console.log(pagination); this.pagination = pagination; - this.adminFacade.getContracts(pagination.page, pagination.pageSize, [ pagination.sorting ], this.contractFilter); + this.contracts = this.adminFacade.getContracts(pagination.page, pagination.pageSize, [ pagination.sorting ], this.contractFilter); + this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) + } multiSelection(selectedContracts: Contract[]) { this.selectedContracts = selectedContracts; diff --git a/frontend/src/app/modules/shared/components/table/table.component.html b/frontend/src/app/modules/shared/components/table/table.component.html index 8fddd760d0..e49a3c761f 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.html +++ b/frontend/src/app/modules/shared/components/table/table.component.html @@ -73,7 +73,7 @@ *ngFor="let filter of tableViewConfig.displayFilterColumnMappings"> - {{ 'table.noResultFound' | i18n }} *ngIf="tableConfig.hasPagination" [length]="totalItems" [pageIndex]="pageIndex" - [pageSizeOptions]="[50, 100, 200]" + [pageSizeOptions]="labelId === 'contracts' ? [10,20,50] : [50,100,200]" [attr.aria-label]="'table.selectPageSize' | i18n" [attr.data-testId]="'table.selectPageSize' | i18n" (page)="onPaginationChange($event)" diff --git a/frontend/src/app/modules/shared/components/table/table.component.ts b/frontend/src/app/modules/shared/components/table/table.component.ts index 94faf0ffda..ddcfefbfbf 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.ts +++ b/frontend/src/app/modules/shared/components/table/table.component.ts @@ -257,6 +257,22 @@ export class TableComponent { return !!this.selection.selected.find(data => JSON.stringify(data) === JSON.stringify(row)); } + shouldDisplayFilter(filterKey: string) { + switch (filterKey) { + case 'filtercreationDate': + case 'filtercounterpartyAddress': + case 'filterendDate': + case 'filterstate': + case 'Menu': + case 'Filter': + return false; + + default: + return true; + + } + } + private addSelectedValues(newData: unknown[]): void { addSelectedValues(this.selection, newData); } diff --git a/frontend/src/theme/base.scss b/frontend/src/theme/base.scss index bba9135338..365dd6d360 100644 --- a/frontend/src/theme/base.scss +++ b/frontend/src/theme/base.scss @@ -218,6 +218,7 @@ app-other-parts { app-notifications-tab { .table-wrapper { + background-color: white; @media screen and (max-height: 1049px) { height: 56vh ; } @@ -335,3 +336,9 @@ app-textarea { padding-top: 14px !important; } } + +app-admin { + .table-wrapper { + overflow-x: auto; + } +} From f9cf0860e0622b7827a16ae229861e4f87fe3721 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 16:23:50 +0100 Subject: [PATCH 21/87] chore(contracts): 421 fix table height --- .../app/modules/page/admin/presentation/admin.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/modules/page/admin/presentation/admin.component.scss b/frontend/src/app/modules/page/admin/presentation/admin.component.scss index edbd6b0f2b..0b2aeaa5d7 100644 --- a/frontend/src/app/modules/page/admin/presentation/admin.component.scss +++ b/frontend/src/app/modules/page/admin/presentation/admin.component.scss @@ -25,7 +25,7 @@ grid-template-rows: 100%; position: relative; transition: all 0.5s; - max-height: calc(100vh - 220px - 4.5rem); + max-height: 80vh; overflow: hidden; } From aa61cfa9471f892619fa0b17baadcdba219c7968 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 17:26:09 +0100 Subject: [PATCH 22/87] chore(contracts): 421 added tests --- .../contract-table.component.spec.ts | 35 ++++++++++++++++++- .../contract-table.component.ts | 5 +-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts index dff1165b35..880a78a7ee 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts @@ -2,12 +2,20 @@ import { TestBed } from '@angular/core/testing'; import { AdminModule } from '@page/admin/admin.module'; import { AdminFacade } from '@page/admin/core/admin.facade'; import { AdminService } from '@page/admin/core/admin.service'; +import { TableHeaderSort } from '@shared/components/table/table.model'; import { renderComponent } from '@tests/test-render.utils'; +import { of } from 'rxjs'; +import { getContracts } from '../../../../../mocks/services/admin-mock/admin.model'; import { ContractTableComponent } from './contract-table.component'; describe('ContractTableComponent', () => { - const renderContractTableComponent = () => renderComponent(ContractTableComponent, { imports: [AdminModule]}) + + const mockAdminFacade = { + getContracts: jasmine.createSpy().and.returnValue(of(getContracts)) + }; + + const renderContractTableComponent = () => renderComponent(ContractTableComponent, { imports: [AdminModule], providers: [{provide: AdminFacade, useValue: mockAdminFacade}]}) beforeEach(() => { TestBed.configureTestingModule({ @@ -22,4 +30,29 @@ describe('ContractTableComponent', () => { const {componentInstance} = fixture; expect(componentInstance).toBeTruthy(); }); + + it('should filter', async() => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + + const mockFilter = { + contractId: ["hello"], + counterpartyAddress: [], + creationDate: [], + endDate: [], + state: [] + } + const myPagination = {page: 0, pageSize: 10, sorting: ['', null] as TableHeaderSort} + componentInstance.onTableConfigChange(myPagination) + expect(componentInstance.pagination.pageSize).toEqual(10); + + componentInstance.filterActivated(mockFilter); + expect(componentInstance.adminFacade.getContracts).toHaveBeenCalledWith(myPagination.page, myPagination.pageSize, [myPagination.sorting], mockFilter); + + + expect(JSON.stringify(componentInstance.contractFilter)).toContain("hello"); + + + + }); }); diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts index 718f5a005c..8541a05a11 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts @@ -22,7 +22,7 @@ export class ContractTableComponent { contractFilter: any; pagination: TableEventConfig; - constructor(private adminFacade: AdminFacade) { + constructor(public readonly adminFacade: AdminFacade) { this.pagination = { page: 0, pageSize: 50, sorting: ['',null] }; this.tableConfig = { displayedColumns: [ 'select', 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], @@ -47,14 +47,12 @@ export class ContractTableComponent { } filterActivated(contractFilter: any): void { - console.log(contractFilter); this.contractFilter = contractFilter; this.contracts = this.adminFacade.getContracts(this.pagination.page, this.pagination.pageSize, [this.pagination.sorting], contractFilter); this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) } public onTableConfigChange(pagination: TableEventConfig): void { - console.log(pagination); this.pagination = pagination; this.contracts = this.adminFacade.getContracts(pagination.page, pagination.pageSize, [ pagination.sorting ], this.contractFilter); this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) @@ -62,7 +60,6 @@ export class ContractTableComponent { } multiSelection(selectedContracts: Contract[]) { this.selectedContracts = selectedContracts; - console.log(this.selectedContracts); } exportContractsAsCSV() { From 1a5d698fc042ced3ff286e517cdc23859fd567ee Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 17:27:26 +0100 Subject: [PATCH 23/87] chore(contracts): 421 added tests --- frontend/src/app/modules/page/admin/core/admin.service.ts | 2 -- .../src/app/modules/shared/components/table/table.component.ts | 2 -- 2 files changed, 4 deletions(-) diff --git a/frontend/src/app/modules/page/admin/core/admin.service.ts b/frontend/src/app/modules/page/admin/core/admin.service.ts index cecad27fe4..98a002bbbe 100644 --- a/frontend/src/app/modules/page/admin/core/admin.service.ts +++ b/frontend/src/app/modules/page/admin/core/admin.service.ts @@ -63,8 +63,6 @@ export class AdminService { } public getContracts(page: number, pageSize: number, sorting?: TableHeaderSort[], filter?: Object): Observable> { - console.log(sorting); - console.log(filter); const body = { pageAble: { diff --git a/frontend/src/app/modules/shared/components/table/table.component.ts b/frontend/src/app/modules/shared/components/table/table.component.ts index ddcfefbfbf..29e2f3af08 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.ts +++ b/frontend/src/app/modules/shared/components/table/table.component.ts @@ -195,8 +195,6 @@ export class TableComponent { this.filterFormGroup.valueChanges.subscribe((formValues) => { this.filterActivated.emit(formValues); }); - console.log(this.tableConfig); - console.log(this.tableViewConfig); } public areAllRowsSelected(): boolean { From 5cb090f1ad67bfa0693a5e47936394fb5749086b Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 17:44:16 +0100 Subject: [PATCH 24/87] chore(contracts): 421 added tests --- .../contract-table.component.spec.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts index 880a78a7ee..34ef777970 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts @@ -31,7 +31,7 @@ describe('ContractTableComponent', () => { expect(componentInstance).toBeTruthy(); }); - it('should filter', async() => { + it('should filter and change table config', async() => { const {fixture} = await renderContractTableComponent(); const {componentInstance} = fixture; @@ -52,7 +52,30 @@ describe('ContractTableComponent', () => { expect(JSON.stringify(componentInstance.contractFilter)).toContain("hello"); + }); + + it('select a contract', async() => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + let mockSelectedContract = getContracts().content[0]; + componentInstance.multiSelection([mockSelectedContract]); + expect(componentInstance.selectedContracts.length).toEqual(1); + expect(componentInstance.selectedContracts[0].contractId).toEqual(mockSelectedContract.contractId) + }); + it('should export contracts as csv', async() => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + + let mockSelectedContract = getContracts().content[0]; + componentInstance.multiSelection([mockSelectedContract]); + + let convertSpy = spyOn(componentInstance, 'convertArrayOfObjectsToCSV'); + let downloadSpy = spyOn(componentInstance,'downloadCSV') + componentInstance.exportContractsAsCSV(); + expect(convertSpy).toHaveBeenCalledWith([getContracts().content[0]]); + expect(downloadSpy).toHaveBeenCalled(); }); + }); From 0cec3592212e5e0e89d2bc900189be698ef9e96a Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Fri, 8 Mar 2024 18:41:31 +0100 Subject: [PATCH 25/87] chore(contracts): 421 added tests --- .../modules/page/admin/core/admin.model.ts | 4 +- .../contract-table.component.spec.ts | 39 +++++++++++++++++++ .../contract-table.component.ts | 36 ++++++++++------- 3 files changed, 62 insertions(+), 17 deletions(-) diff --git a/frontend/src/app/modules/page/admin/core/admin.model.ts b/frontend/src/app/modules/page/admin/core/admin.model.ts index 52e1022989..70ccb650d6 100644 --- a/frontend/src/app/modules/page/admin/core/admin.model.ts +++ b/frontend/src/app/modules/page/admin/core/admin.model.ts @@ -48,8 +48,8 @@ export type BpnConfigFormGroup = FormGroup<{ bpnConfig: FormArray { }); + it('should convert data to csv', async() => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + + let result = componentInstance.convertArrayOfObjectsToCSV([getContracts().content[0]]) + + expect(result).toEqual("contractId,counterpartyAddress,creationDate,endDate,state\n" + + "abc1,https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp,1708951.087,,Finalized"); + + }); +/* + it('should download csv', async() => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + const csvContent = 'ID,Name\n1,abc\n2,def\n'; + const fileName = 'export.csv'; + + // Create a spy object with a click() method + const spyObj = jasmine.createSpyObj('a', ['click', 'setAttribute'], ['style'] ); + //TODOspyObj.style = {visibility: ''}; + + // Spy on document.createElement() and return the spy object + spyOn(document, 'createElement').and.returnValue(spyObj); + + // Spy on URL.createObjectURL() to avoid actual Blob creation + spyOn(URL, 'createObjectURL').and.returnValue('blob:url'); + + // Call the downloadCSV method + componentInstance.downloadCSV(csvContent, fileName); + + expect(document.createElement).toHaveBeenCalledTimes(1); + expect(document.createElement).toHaveBeenCalledWith('a'); + + expect(spyObj.href).toBe('blob:url'); + expect(spyObj.download).toBe(fileName); + expect(spyObj.click).toHaveBeenCalledTimes(1); + + }); +*/ }); diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts index 8541a05a11..2096c36c23 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts @@ -23,7 +23,7 @@ export class ContractTableComponent { pagination: TableEventConfig; constructor(public readonly adminFacade: AdminFacade) { - this.pagination = { page: 0, pageSize: 50, sorting: ['',null] }; + this.pagination = { page: 0, pageSize: 50, sorting: [ '', null ] }; this.tableConfig = { displayedColumns: [ 'select', 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], header: CreateHeaderFromColumns([ 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], 'pageAdmin.contracts'), @@ -42,22 +42,29 @@ export class ContractTableComponent { } public ngOnInit() { - this.contracts = this.adminFacade.getContracts(0, 50, [null,null], null); - this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) + this.contracts = this.adminFacade.getContracts(0, 50, [ null, null ], null); + this.contractsView$ = this.contracts.pipe(map(pagination => { + return { data: pagination }; + })); } filterActivated(contractFilter: any): void { this.contractFilter = contractFilter; - this.contracts = this.adminFacade.getContracts(this.pagination.page, this.pagination.pageSize, [this.pagination.sorting], contractFilter); - this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) + this.contracts = this.adminFacade.getContracts(this.pagination.page, this.pagination.pageSize, [ this.pagination.sorting ], contractFilter); + this.contractsView$ = this.contracts.pipe(map(pagination => { + return { data: pagination }; + })); } public onTableConfigChange(pagination: TableEventConfig): void { this.pagination = pagination; this.contracts = this.adminFacade.getContracts(pagination.page, pagination.pageSize, [ pagination.sorting ], this.contractFilter); - this.contractsView$ = this.contracts.pipe(map(pagination => { return {data: pagination}}) ) + this.contractsView$ = this.contracts.pipe(map(pagination => { + return { data: pagination }; + })); } + multiSelection(selectedContracts: Contract[]) { this.selectedContracts = selectedContracts; } @@ -84,15 +91,14 @@ export class ContractTableComponent { const blob = new Blob([ csvContent ], { type: 'text/csv;charset=utf-8;' }); const link = document.createElement('a'); - if (link.download !== undefined) { - const url = URL.createObjectURL(blob); - link.setAttribute('href', url); - link.setAttribute('download', fileName); - link.style.visibility = 'hidden'; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - } + const url = URL.createObjectURL(blob); + link.setAttribute('href', url); + link.setAttribute('download', fileName); + link.style.visibility = 'hidden'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } From 342c09a811a00f296ad8b796dc3aaaebb91d65b8 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 10:25:39 +0100 Subject: [PATCH 26/87] chore-xxx: updated RELEASE.md documentation --- docs/RELEASE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 3ae4af81fd..fdf0b0e05d 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -10,9 +10,9 @@ Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release -3) Remove the "-SNAPSHOT" suffix from in the root pom.xml - if there is no snapshot version, you can skip the release of the irs-registry-client library -4) Create a merge request to the [IRS](https://github.com/eclipse-tractusx/item-relationship-service) main branch with the above created release branch -5) After merge, the release branch must be deleted +3) Click on the [Update irs-registry-client Version workflow](https://github.com/catenax-ng/tx-item-relationship-service/actions/workflows/update-registry-library.yaml). +4) Select "Run workflow," choose the release branch, and provide the necessary details, such as version type. Don't forget to check the box to remove the snapshot. +5) Afterward, merge the created Pull Request and delete the release branch. 6) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 7) Create and Checkout release branch on catena /release/1.0.0 8) Update in the above created release branch to the created one in step 3. From 5d807358961288a290294a1db0aaf33b445f9317 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 10:37:01 +0100 Subject: [PATCH 27/87] feature: 420 add policy String to response --- .../mapper/ContractResponseMapper.java | 1 + .../contracts/domain/model/Contract.java | 2 ++ .../repository/ContractRepositoryImpl.java | 22 ++++++++++++++----- .../contracts/ContractControllerIT.java | 9 ++++---- .../contract/response/ContractResponse.java | 2 ++ 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/mapper/ContractResponseMapper.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/mapper/ContractResponseMapper.java index 6a8d02b4e3..aceb49adf8 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/mapper/ContractResponseMapper.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/mapper/ContractResponseMapper.java @@ -41,6 +41,7 @@ public static ContractResponse from(Contract contract) { .counterpartyAddress(contract.getCounterpartyAddress()) .endDate(contract.getEndDate()) .creationDate(contract.getCreationDate()) + .policy(contract.getPolicy()) .build(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java index 890e9f6ffe..58ff40b78c 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java @@ -35,4 +35,6 @@ public class Contract { private Instant creationDate; private Instant endDate; private String state; + private String policy; + } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java index 084d5a7243..9665799530 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java @@ -18,6 +18,8 @@ ********************************************************************************/ package org.eclipse.tractusx.traceability.contracts.infrastructure.repository; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.ImmutablePair; @@ -54,6 +56,7 @@ public class ContractRepositoryImpl implements ContractRepository { private final EdcContractAgreementService edcContractAgreementService; private final JpaContractAgreementInfoViewRepository contractAgreementInfoViewRepository; + private final ObjectMapper objectMapper; @Override public PageResult getContractsByPageable(Pageable pageable, SearchCriteria searchCriteria) { @@ -95,12 +98,19 @@ private List fetchEdcContractAgreements(Page co return contractAgreements.stream().map(contractAgreement -> - Contract.builder() - .contractId(contractAgreement.contractAgreementId()) - .counterpartyAddress(contractNegotiations.get(contractAgreement.contractAgreementId()).counterPartyAddress()) - .creationDate(Instant.ofEpochMilli(contractAgreement.contractSigningDate())) - .state(contractNegotiations.get(contractAgreement.contractAgreementId()).state()) - .build() + { + try { + return Contract.builder() + .contractId(contractAgreement.contractAgreementId()) + .counterpartyAddress(contractNegotiations.get(contractAgreement.contractAgreementId()).counterPartyAddress()) + .creationDate(Instant.ofEpochMilli(contractAgreement.contractSigningDate())) + .state(contractNegotiations.get(contractAgreement.contractAgreementId()).state()) + .policy(objectMapper.writeValueAsString(contractAgreement.policy())) + .build(); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } ).toList(); } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java index d30e7e7381..c43af62c09 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java @@ -65,10 +65,11 @@ void shouldReturnContracts() throws JoseException { .then() .log().all() .statusCode(200) - .extract().body().as(new TypeRef>() { + .extract().body().as(new TypeRef<>() { }); //THEN assertThat(contractResponsePageResult.content()).isNotEmpty(); + assertThat(contractResponsePageResult.content().get(0).getPolicy()).isNotEmpty(); } @Test @@ -89,7 +90,7 @@ void shouldReturnNextPageOfPaginatedContracts() throws JoseException { .then() .log().all() .statusCode(200) - .extract().body().as(new TypeRef>() { + .extract().body().as(new TypeRef<>() { }); @@ -103,7 +104,7 @@ void shouldReturnNextPageOfPaginatedContracts() throws JoseException { .then() .log().all() .statusCode(200) - .extract().body().as(new TypeRef>() { + .extract().body().as(new TypeRef<>() { }); //THEN List firstContractagreementIds = List.of("abc1", "abc2", "abc3", "abc4", "abc5"); @@ -134,7 +135,7 @@ void shouldReturnOnlyOneContract() throws JoseException { .then() .log().all() .statusCode(200) - .extract().body().as(new TypeRef>() { + .extract().body().as(new TypeRef<>() { }); //THEN assertThat(contractResponsePageResult.content()).isNotEmpty(); diff --git a/tx-models/src/main/java/contract/response/ContractResponse.java b/tx-models/src/main/java/contract/response/ContractResponse.java index 4ecb53a664..d4ed142e95 100644 --- a/tx-models/src/main/java/contract/response/ContractResponse.java +++ b/tx-models/src/main/java/contract/response/ContractResponse.java @@ -41,5 +41,7 @@ public class ContractResponse { private Instant endDate; @Schema(example = "FINALIZED", maxLength = 255) private String state; + @Schema(example = "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}", maxLength = 255) + private String policy; } From 42b8214e471807d99fda71845509a36663c6dacf Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Mon, 11 Mar 2024 10:47:09 +0100 Subject: [PATCH 28/87] chore(contracts): 421 remove autocomplete row --- .../presentation/contract-table/contract-table.component.html | 2 +- .../presentation/contract-table/contract-table.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html index d4200a9609..f9fcf536ab 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html @@ -31,7 +31,7 @@ [noShadow]="true" [showHover]="false" [labelId]="'contracts'" - [autocompleteEnabled]="true" + [autocompleteEnabled]="false" (configChanged)="onTableConfigChange($event)" (filterActivated)="filterActivated($event)" (multiSelect)="multiSelection($event)" diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts index 2096c36c23..4bdb84d95b 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts @@ -23,7 +23,7 @@ export class ContractTableComponent { pagination: TableEventConfig; constructor(public readonly adminFacade: AdminFacade) { - this.pagination = { page: 0, pageSize: 50, sorting: [ '', null ] }; + this.pagination = { page: 0, pageSize: 10, sorting: [ '', null ] }; this.tableConfig = { displayedColumns: [ 'select', 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], header: CreateHeaderFromColumns([ 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], 'pageAdmin.contracts'), From 58d8b5b04e5124566b7cc29a2d9f4b42a9d2d4d0 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 10:50:01 +0100 Subject: [PATCH 29/87] chore-xxx: updated RELEASE.md documentation --- docs/RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index fdf0b0e05d..fd4ae72ec1 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -11,7 +11,7 @@ Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release 3) Click on the [Update irs-registry-client Version workflow](https://github.com/catenax-ng/tx-item-relationship-service/actions/workflows/update-registry-library.yaml). -4) Select "Run workflow," choose the release branch, and provide the necessary details, such as version type. Don't forget to check the box to remove the snapshot. +4) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Don't forget to check the box to remove the snapshot. 5) Afterward, merge the created Pull Request and delete the release branch. 6) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 7) Create and Checkout release branch on catena /release/1.0.0 From 3a00fa937be81a45d2a82f93c67300014936d7a4 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 10:52:04 +0100 Subject: [PATCH 30/87] feature: 420 add policy String to response --- .../openapi/traceability-foss-backend.json | 2079 +++++++++-------- 1 file changed, 1153 insertions(+), 926 deletions(-) diff --git a/tx-backend/openapi/traceability-foss-backend.json b/tx-backend/openapi/traceability-foss-backend.json index bedc0e26e6..be7672fbc6 100644 --- a/tx-backend/openapi/traceability-foss-backend.json +++ b/tx-backend/openapi/traceability-foss-backend.json @@ -37,23 +37,18 @@ "description" : "The endpoint returns a result of BPN EDC URL mappings.", "operationId" : "getBpnEdcs", "responses" : { - "200" : { - "description" : "Returns the paged result found", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -62,8 +57,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -72,8 +67,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -82,8 +77,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -92,12 +87,17 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "Returns the paged result found", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } @@ -112,8 +112,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -154,8 +154,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -164,8 +164,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -174,23 +174,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -199,8 +194,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -209,8 +204,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -219,18 +214,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -271,8 +271,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -281,8 +281,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -291,23 +291,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -316,8 +311,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -326,8 +321,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -336,18 +331,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -385,8 +385,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -395,8 +395,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -405,8 +405,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -415,8 +415,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -425,8 +425,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -435,12 +435,6 @@ } } }, - "200" : { - "description" : "Returns the paged result found", - "content" : { - "application/json" : {} - } - }, "403" : { "description" : "Forbidden.", "content" : { @@ -451,8 +445,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -460,6 +454,12 @@ } } } + }, + "200" : { + "description" : "Returns the paged result found", + "content" : { + "application/json" : {} + } } }, "security" : [ @@ -498,14 +498,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No Content.", - "content" : { - "application/json" : {} - } - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -514,8 +508,14 @@ } } }, - "500" : { - "description" : "Internal server error.", + "204" : { + "description" : "No Content.", + "content" : { + "application/json" : {} + } + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -530,8 +530,8 @@ "application/json" : {} } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -540,8 +540,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -550,8 +550,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -570,8 +570,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -609,8 +609,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -619,8 +619,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -629,8 +629,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -639,8 +639,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -649,8 +649,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -659,28 +659,28 @@ } } }, - "201" : { - "description" : "Created.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -729,11 +729,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -742,8 +739,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -752,11 +752,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -765,8 +762,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -775,8 +772,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -795,8 +792,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -804,6 +801,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -845,11 +845,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -858,8 +855,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -868,11 +868,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -881,8 +878,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -891,8 +888,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -911,8 +908,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -920,6 +917,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -951,8 +951,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -961,8 +961,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -971,11 +974,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -984,8 +984,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -994,8 +994,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1004,9 +1004,6 @@ } } }, - "204" : { - "description" : "No content." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -1017,8 +1014,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No content." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1057,8 +1057,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1067,8 +1067,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1077,11 +1080,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1090,8 +1090,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1100,8 +1100,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1110,9 +1110,6 @@ } } }, - "204" : { - "description" : "No content." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -1123,8 +1120,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No content." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1162,6 +1162,36 @@ "required" : true }, "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "415" : { "description" : "Unsupported media type", "content" : { @@ -1182,6 +1212,26 @@ } } }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -1321,9 +1371,68 @@ } } } + } + }, + "security" : [ + { + "oAuth2" : [ + "profile email" + ] + } + ] + } + }, + "/edc/notification/contract" : { + "post" : { + "tags" : [ + "Notifications" + ], + "summary" : "Triggers EDC notification contract", + "description" : "The endpoint Triggers EDC notification contract based on notification type and method", + "operationId" : "createNotificationContract", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreateNotificationContractRequest" + } + } + }, + "required" : true + }, + "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1332,8 +1441,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1342,8 +1451,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1352,18 +1461,18 @@ } } }, - "403" : { - "description" : "Forbidden.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/CreateNotificationContractResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1382,27 +1491,28 @@ ] } }, - "/edc/notification/contract" : { + "/contracts" : { "post" : { "tags" : [ - "Notifications" + "getContracts", + "Contracts" ], - "summary" : "Triggers EDC notification contract", - "description" : "The endpoint Triggers EDC notification contract based on notification type and method", - "operationId" : "createNotificationContract", + "summary" : "All contract agreements for all assets", + "description" : "This endpoint returns all contract agreements for alls assets in Trace-X", + "operationId" : "contracts", "requestBody" : { "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/CreateNotificationContractRequest" + "$ref" : "#/components/schemas/PageableFilterRequest" } } }, "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1411,12 +1521,18 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "description" : "PageResults", + "items" : { + "$ref" : "#/components/schemas/PageResultContractResponse" + } } } } @@ -1431,8 +1547,8 @@ } } }, - "404" : { - "description" : "Not found.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1441,8 +1557,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1451,12 +1567,12 @@ } } }, - "201" : { - "description" : "Created.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/CreateNotificationContractResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } @@ -1471,8 +1587,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1511,11 +1627,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No Content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1524,8 +1637,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1540,8 +1653,8 @@ "application/json" : {} } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1550,8 +1663,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1560,8 +1673,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1580,8 +1693,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No Content." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1627,11 +1743,8 @@ } }, "responses" : { - "204" : { - "description" : "No Content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1640,8 +1753,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1656,8 +1769,8 @@ "application/json" : {} } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1666,8 +1779,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1676,8 +1789,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1696,8 +1809,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No Content." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1735,8 +1851,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1745,8 +1861,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1755,8 +1871,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1765,8 +1881,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1775,8 +1891,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1785,9 +1901,6 @@ } } }, - "201" : { - "description" : "Created." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -1798,8 +1911,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "201" : { + "description" : "Created." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1837,8 +1953,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1847,8 +1963,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1857,8 +1973,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1867,8 +1983,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1877,8 +1993,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2066,6 +2192,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -2074,18 +2204,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2123,8 +2243,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2133,8 +2253,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2143,8 +2263,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2153,8 +2273,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2163,8 +2283,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2173,9 +2293,6 @@ } } }, - "201" : { - "description" : "Created." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -2186,8 +2303,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "201" : { + "description" : "Created." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2222,9 +2342,39 @@ } } }, - "required" : true - }, - "responses" : { + "required" : true + }, + "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "415" : { "description" : "Unsupported media type", "content" : { @@ -2245,6 +2395,26 @@ } } }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -2424,6 +2594,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -2431,56 +2605,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -2511,8 +2635,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2521,8 +2645,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2531,8 +2655,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2541,8 +2665,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2551,8 +2675,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2561,28 +2685,28 @@ } } }, - "201" : { - "description" : "Created.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2631,11 +2755,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2644,8 +2765,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2654,8 +2775,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2664,8 +2785,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2674,8 +2795,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2694,8 +2815,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2703,6 +2824,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -2744,11 +2868,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2757,8 +2878,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2767,11 +2891,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2780,8 +2901,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2790,8 +2911,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2810,8 +2931,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2819,6 +2940,9 @@ } } } + }, + "204" : { + "description" : "No content." } }, "security" : [ @@ -2850,8 +2974,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2860,8 +2984,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2870,11 +2997,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2883,8 +3007,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2893,8 +3017,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2903,9 +3027,6 @@ } } }, - "204" : { - "description" : "No content." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -2916,8 +3037,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No content." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2956,8 +3080,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2966,8 +3090,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2976,11 +3103,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2989,8 +3113,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2999,8 +3123,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3009,9 +3133,6 @@ } } }, - "204" : { - "description" : "No content." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -3022,8 +3143,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No content." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3061,18 +3185,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3225,8 +3339,8 @@ } } }, - "404" : { - "description" : "Not found.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3235,8 +3349,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3255,8 +3379,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3294,8 +3418,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3304,8 +3428,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -3489,6 +3613,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -3496,8 +3624,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3506,8 +3634,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3516,8 +3644,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3536,8 +3664,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3758,6 +3886,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -3765,8 +3897,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3775,8 +3907,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -3785,8 +3917,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3795,8 +3927,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3805,8 +3937,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3825,8 +3957,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3864,36 +3996,6 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "404" : { "description" : "Not found.", "content" : { @@ -3904,16 +4006,6 @@ } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the assets found", "content" : { @@ -4089,6 +4181,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -4096,8 +4192,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4115,6 +4211,46 @@ } } } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, "security" : [ @@ -4153,8 +4289,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4163,8 +4299,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4173,8 +4309,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4183,8 +4319,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4193,8 +4329,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4378,6 +4524,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -4385,18 +4535,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4424,8 +4564,8 @@ "description" : "The endpoint Triggers reload of shell descriptors.", "operationId" : "reload", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4434,8 +4574,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4447,8 +4587,8 @@ "202" : { "description" : "Created registry reload job." }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4457,8 +4597,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4467,8 +4607,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4487,8 +4627,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4516,8 +4656,8 @@ "description" : "The endpoint returns all policies .", "operationId" : "policy", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4526,12 +4666,12 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Returns the policies", "content" : { - "application/json" : { + "*/*" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/PolicyResponse" } } } @@ -4546,8 +4686,8 @@ } } }, - "404" : { - "description" : "Not found.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4556,8 +4696,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4566,12 +4706,12 @@ } } }, - "200" : { - "description" : "Returns the policies", + "500" : { + "description" : "Internal server error.", "content" : { - "*/*" : { + "application/json" : { "schema" : { - "$ref" : "#/components/schemas/PolicyResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } @@ -4586,8 +4726,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4626,18 +4766,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4672,8 +4802,8 @@ } } }, - "404" : { - "description" : "Not found.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4682,8 +4812,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4702,8 +4842,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4771,23 +4911,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4796,8 +4931,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4806,8 +4941,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4816,8 +4951,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4826,8 +4961,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4836,18 +4971,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4875,8 +5015,8 @@ "description" : "The endpoint can return limited data based on the user role", "operationId" : "dashboard", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4885,28 +5025,28 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Returns dashboard data", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/DashboardResponse" } } } }, - "200" : { - "description" : "Returns dashboard data", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/DashboardResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4915,8 +5055,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4925,8 +5065,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4945,8 +5085,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4985,11 +5125,8 @@ } ], "responses" : { - "204" : { - "description" : "No Content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4998,28 +5135,28 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "OK.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/ImportReportResponse" } } } }, - "200" : { - "description" : "OK.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ImportReportResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5028,8 +5165,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5038,8 +5175,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5058,8 +5195,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No Content." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5105,6 +5245,36 @@ } ], "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "415" : { "description" : "Unsupported media type", "content" : { @@ -5304,6 +5474,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -5312,36 +5486,6 @@ } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "403" : { "description" : "Forbidden.", "content" : { @@ -5352,8 +5496,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5423,23 +5567,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5447,9 +5586,9 @@ } } } - }, - "500" : { - "description" : "Internal server error.", + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5458,8 +5597,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5468,8 +5607,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5478,8 +5617,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5488,18 +5627,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5537,8 +5681,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5547,8 +5691,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5557,8 +5701,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5567,8 +5711,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5577,8 +5721,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5762,6 +5916,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -5769,18 +5927,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5826,36 +5974,6 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "404" : { "description" : "Not found.", "content" : { @@ -5866,16 +5984,6 @@ } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -6055,6 +6163,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -6063,8 +6175,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6082,6 +6194,46 @@ } } } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, "security" : [ @@ -6144,23 +6296,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6169,8 +6316,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6179,8 +6326,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6189,8 +6336,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6199,8 +6346,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6209,18 +6356,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6248,8 +6400,8 @@ "description" : "The endpoint returns a map for assets consumed by the map.", "operationId" : "assetsCountryMap", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6258,12 +6410,17 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Returns the assets found", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } @@ -6278,8 +6435,8 @@ } } }, - "404" : { - "description" : "Not found.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6288,8 +6445,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6298,17 +6455,12 @@ } } }, - "200" : { - "description" : "Returns the assets found", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } @@ -6323,8 +6475,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6359,11 +6511,21 @@ "schema" : { "type" : "string" } - } - ], - "responses" : { - "415" : { - "description" : "Unsupported media type", + } + ], + "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6372,8 +6534,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6382,8 +6544,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6392,8 +6554,18 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6587,32 +6759,16 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } } } } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -6644,18 +6800,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6689,8 +6835,8 @@ } } }, - "404" : { - "description" : "Not found.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6699,8 +6845,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6719,8 +6875,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6788,23 +6944,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6813,8 +6964,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6823,8 +6974,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6833,8 +6984,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6843,8 +6994,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6853,18 +7004,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6892,8 +7048,8 @@ "description" : "Deletes all submodels from the system.", "operationId" : "deleteSubmodels", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6902,8 +7058,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6912,11 +7071,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6925,8 +7081,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6935,8 +7091,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6945,9 +7101,6 @@ } } }, - "204" : { - "description" : "No Content." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -6958,8 +7111,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No Content." + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6997,8 +7153,11 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Okay" + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -7007,8 +7166,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "204" : { + "description" : "Deleted." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -7017,11 +7179,8 @@ } } }, - "204" : { - "description" : "Deleted." - }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -7030,8 +7189,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -7040,8 +7199,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -7050,9 +7209,6 @@ } } }, - "200" : { - "description" : "Okay" - }, "403" : { "description" : "Forbidden.", "content" : { @@ -7063,8 +7219,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -7532,6 +7688,77 @@ } } }, + "ContractResponse" : { + "type" : "object", + "properties" : { + "contractId" : { + "maxLength" : 255, + "type" : "string", + "example" : "66" + }, + "counterpartyAddress" : { + "maxLength" : 255, + "type" : "string", + "example" : "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp" + }, + "creationDate" : { + "maxLength" : 255, + "type" : "string", + "format" : "date-time", + "example" : "2023-02-21T21:27:10.73495Z" + }, + "endDate" : { + "maxLength" : 255, + "type" : "string", + "format" : "date-time", + "example" : "2023-02-21T21:27:10.73495Z" + }, + "state" : { + "maxLength" : 255, + "type" : "string", + "example" : "FINALIZED" + }, + "policy" : { + "maxLength" : 255, + "type" : "string", + "example" : "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}" + } + } + }, + "PageResultContractResponse" : { + "type" : "object", + "properties" : { + "content" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "description" : "Content of PageResults", + "items" : { + "$ref" : "#/components/schemas/ContractResponse" + } + }, + "page" : { + "type" : "integer", + "format" : "int32", + "example" : 1 + }, + "pageCount" : { + "type" : "integer", + "format" : "int32", + "example" : 15 + }, + "pageSize" : { + "type" : "integer", + "format" : "int32", + "example" : 10 + }, + "totalItems" : { + "type" : "integer", + "format" : "int64", + "example" : 2 + } + } + }, "RegisterAssetRequest" : { "required" : [ "assetIds", From fe230e5896d9b94c734e3e16a5f05dbbb6aed1c2 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 11:26:41 +0100 Subject: [PATCH 31/87] chore-xxx: updated RELEASE.md documentation --- docs/RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index fd4ae72ec1..26d136141f 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -11,7 +11,7 @@ Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release 3) Click on the [Update irs-registry-client Version workflow](https://github.com/catenax-ng/tx-item-relationship-service/actions/workflows/update-registry-library.yaml). -4) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Don't forget to check the box to remove the snapshot. +4) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. 5) Afterward, merge the created Pull Request and delete the release branch. 6) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 7) Create and Checkout release branch on catena /release/1.0.0 From 8c2d58204ec3d19581e57b3b63548dca9a763e0f Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 14:18:43 +0100 Subject: [PATCH 32/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 60 +++++++++++++++++++++++++++++++++ pom.xml | 2 +- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/check_pom.yml diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml new file mode 100644 index 0000000000..915471a642 --- /dev/null +++ b/.github/workflows/check_pom.yml @@ -0,0 +1,60 @@ +# Copyright (c) 2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License, Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +name: check pom.xml + +on: + workflow_dispatch: # Trigger manually + pull_request: + paths: + - 'pom.xml' + +jobs: + check-irs-client-lib-version: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Set up JDK 17 + uses: actions/setup-java@v2 + with: + distribution: 'adopt' + java-version: 17 + + - name: Compare IRS Client Lib Version + id: compare-version + run: | + current_version=$(xmllint --xpath "string(//irs-client-lib.version)" pom.xml) + main_version=$(git show main:pom.xml | xmllint --xpath "string(//irs-client-lib.version)" -) + + if [ "$current_version" != "$main_version" ]; then + echo "IRS Client Lib Version has changed." + echo "::set-output name=version_changed::true" + else + echo "IRS Client Lib Version has not changed." + echo "::set-output name=version_changed::false" + fi + shell: bash + + - name: Create Review Comment + uses: ntsd/auto-request-changes-action@v3 + if: steps.compare-version.outputs.version_changed == 'true' + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + review-message: "Please release" diff --git a/pom.xml b/pom.xml index 961e6268b3..85976189dd 100644 --- a/pom.xml +++ b/pom.xml @@ -100,7 +100,7 @@ SPDX-License-Identifier: Apache-2.0 2.15.2 5.9.3 3.0.0 - 1.6.0-SNAPSHOT + 1.6.1-SNAPSHOT 5.4.0 jacoco From 9d58dca4e6146575af74319e29d96916b7956aae Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 14:29:44 +0100 Subject: [PATCH 33/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml index 915471a642..de6c3c2b8c 100644 --- a/.github/workflows/check_pom.yml +++ b/.github/workflows/check_pom.yml @@ -37,6 +37,9 @@ jobs: distribution: 'adopt' java-version: 17 + - name: Install xmllint + run: sudo apt-get install -y libxml2-utils + - name: Compare IRS Client Lib Version id: compare-version run: | From 112931b5dbe82663ad752389c73e083b177af37c Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 14:35:05 +0100 Subject: [PATCH 34/87] feature: 420 fix date format --- .../contracts/domain/model/Contract.java | 6 +-- .../repository/ContractRepositoryImpl.java | 4 +- .../contracts/ContractControllerIT.java | 1 + .../CustomOffsetDateTimeSerializer.java | 37 +++++++++++++++++++ .../contract/response/ContractResponse.java | 10 +++-- 5 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 tx-models/src/main/java/common/CustomOffsetDateTimeSerializer.java diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java index 58ff40b78c..ca29811a5c 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java @@ -23,7 +23,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; -import java.time.Instant; +import java.time.OffsetDateTime; @Slf4j @AllArgsConstructor @@ -32,8 +32,8 @@ public class Contract { private String contractId; private String counterpartyAddress; - private Instant creationDate; - private Instant endDate; + private OffsetDateTime creationDate; + private OffsetDateTime endDate; private String state; private String policy; diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java index 9665799530..22b9ba0102 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java @@ -40,6 +40,8 @@ import org.springframework.stereotype.Component; import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -103,7 +105,7 @@ private List fetchEdcContractAgreements(Page co return Contract.builder() .contractId(contractAgreement.contractAgreementId()) .counterpartyAddress(contractNegotiations.get(contractAgreement.contractAgreementId()).counterPartyAddress()) - .creationDate(Instant.ofEpochMilli(contractAgreement.contractSigningDate())) + .creationDate(OffsetDateTime.ofInstant(Instant.ofEpochSecond(contractAgreement.contractSigningDate()), ZoneId.systemDefault())) .state(contractNegotiations.get(contractAgreement.contractAgreementId()).state()) .policy(objectMapper.writeValueAsString(contractAgreement.policy())) .build(); diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java index c43af62c09..3ac469ce2c 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java @@ -70,6 +70,7 @@ void shouldReturnContracts() throws JoseException { //THEN assertThat(contractResponsePageResult.content()).isNotEmpty(); assertThat(contractResponsePageResult.content().get(0).getPolicy()).isNotEmpty(); + System.out.println(contractResponsePageResult.content().get(0).getCreationDate()); } @Test diff --git a/tx-models/src/main/java/common/CustomOffsetDateTimeSerializer.java b/tx-models/src/main/java/common/CustomOffsetDateTimeSerializer.java new file mode 100644 index 0000000000..750c810d8c --- /dev/null +++ b/tx-models/src/main/java/common/CustomOffsetDateTimeSerializer.java @@ -0,0 +1,37 @@ +/******************************************************************************** + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +package common; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; + +public class CustomOffsetDateTimeSerializer extends JsonSerializer { + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX"); + + @Override + public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + String formattedDateTime = offsetDateTime.format(formatter); + jsonGenerator.writeString(formattedDateTime); + } +} diff --git a/tx-models/src/main/java/contract/response/ContractResponse.java b/tx-models/src/main/java/contract/response/ContractResponse.java index d4ed142e95..39e125a6f1 100644 --- a/tx-models/src/main/java/contract/response/ContractResponse.java +++ b/tx-models/src/main/java/contract/response/ContractResponse.java @@ -18,13 +18,15 @@ ********************************************************************************/ package contract.response; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import common.CustomOffsetDateTimeSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import java.time.Instant; +import java.time.OffsetDateTime; @Data @NoArgsConstructor @@ -36,9 +38,11 @@ public class ContractResponse { @Schema(example = "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", maxLength = 255) private String counterpartyAddress; @Schema(example = "2023-02-21T21:27:10.734950Z", maxLength = 255) - private Instant creationDate; + @JsonSerialize(using = CustomOffsetDateTimeSerializer.class) + private OffsetDateTime creationDate; @Schema(example = "2023-02-21T21:27:10.734950Z", maxLength = 255) - private Instant endDate; + @JsonSerialize(using = CustomOffsetDateTimeSerializer.class) + private OffsetDateTime endDate; @Schema(example = "FINALIZED", maxLength = 255) private String state; @Schema(example = "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}", maxLength = 255) From 82f26c79d5247bcb894076e7ffaf12f0edb786a1 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 14:35:56 +0100 Subject: [PATCH 35/87] feature: 420 fix date format --- .../traceability/integration/contracts/ContractControllerIT.java | 1 - 1 file changed, 1 deletion(-) diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java index 3ac469ce2c..c43af62c09 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java @@ -70,7 +70,6 @@ void shouldReturnContracts() throws JoseException { //THEN assertThat(contractResponsePageResult.content()).isNotEmpty(); assertThat(contractResponsePageResult.content().get(0).getPolicy()).isNotEmpty(); - System.out.println(contractResponsePageResult.content().get(0).getCreationDate()); } @Test From 686315efe4fc48be2e66721aea47b7ea13e46d83 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 14:36:38 +0100 Subject: [PATCH 36/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml index de6c3c2b8c..e4502adc09 100644 --- a/.github/workflows/check_pom.yml +++ b/.github/workflows/check_pom.yml @@ -44,6 +44,7 @@ jobs: id: compare-version run: | current_version=$(xmllint --xpath "string(//irs-client-lib.version)" pom.xml) + echo "$current_version" main_version=$(git show main:pom.xml | xmllint --xpath "string(//irs-client-lib.version)" -) if [ "$current_version" != "$main_version" ]; then From 95c5a46526b3b35921b80d06cd196992a3285ecd Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 14:46:31 +0100 Subject: [PATCH 37/87] feature: 420 fix date format --- .../openapi/traceability-foss-backend.json | 2170 ++++++++--------- .../java/assets/importpoc/PolicyResponse.java | 5 + 2 files changed, 1090 insertions(+), 1085 deletions(-) diff --git a/tx-backend/openapi/traceability-foss-backend.json b/tx-backend/openapi/traceability-foss-backend.json index be7672fbc6..11bbaba713 100644 --- a/tx-backend/openapi/traceability-foss-backend.json +++ b/tx-backend/openapi/traceability-foss-backend.json @@ -37,8 +37,8 @@ "description" : "The endpoint returns a result of BPN EDC URL mappings.", "operationId" : "getBpnEdcs", "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -47,8 +47,18 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -102,18 +112,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -154,8 +154,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -164,8 +164,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -174,8 +174,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -184,18 +184,23 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -204,8 +209,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -214,23 +219,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -271,8 +271,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -281,8 +281,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -291,8 +291,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -301,18 +301,23 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -321,8 +326,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -331,23 +336,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -385,14 +385,10 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "200" : { + "description" : "Returns the paged result found", "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } + "application/json" : {} } }, "400" : { @@ -405,8 +401,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -415,8 +411,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -425,8 +421,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -435,8 +431,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -445,8 +441,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -455,10 +451,14 @@ } } }, - "200" : { - "description" : "Returns the paged result found", + "404" : { + "description" : "Not found.", "content" : { - "application/json" : {} + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } } } }, @@ -498,8 +498,14 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "200" : { + "description" : "Ok.", + "content" : { + "application/json" : {} + } + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -508,14 +514,8 @@ } } }, - "204" : { - "description" : "No Content.", - "content" : { - "application/json" : {} - } - }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -524,10 +524,14 @@ } } }, - "200" : { - "description" : "Ok.", + "403" : { + "description" : "Forbidden.", "content" : { - "application/json" : {} + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } } }, "401" : { @@ -560,18 +564,14 @@ } } }, - "403" : { - "description" : "Forbidden.", + "204" : { + "description" : "No Content.", "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } + "application/json" : {} } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -609,8 +609,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -619,8 +619,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -629,8 +629,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -639,8 +639,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -649,8 +649,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -659,8 +659,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -679,8 +679,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -729,8 +729,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -739,11 +739,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -752,8 +749,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -762,8 +762,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -772,8 +775,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -782,8 +785,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -792,8 +795,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -801,9 +804,6 @@ } } } - }, - "204" : { - "description" : "No content." } }, "security" : [ @@ -845,8 +845,18 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -858,8 +868,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -868,6 +878,9 @@ } } }, + "204" : { + "description" : "No content." + }, "401" : { "description" : "Authorization failed.", "content" : { @@ -898,18 +911,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -917,9 +920,6 @@ } } } - }, - "204" : { - "description" : "No content." } }, "security" : [ @@ -951,8 +951,18 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -964,8 +974,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1004,21 +1014,11 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "204" : { "description" : "No content." }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1057,8 +1057,18 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1070,8 +1080,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1110,21 +1120,11 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "204" : { "description" : "No content." }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1162,16 +1162,6 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "400" : { "description" : "Bad request.", "content" : { @@ -1182,28 +1172,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1222,16 +1192,6 @@ } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -1371,6 +1331,46 @@ } } } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, "security" : [ @@ -1401,8 +1401,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1411,8 +1411,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1421,8 +1421,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1431,8 +1431,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1441,8 +1441,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1451,8 +1451,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1471,8 +1471,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1511,8 +1511,18 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1537,8 +1547,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1577,18 +1587,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1627,8 +1627,14 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} + } + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1637,8 +1643,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1647,14 +1653,11 @@ } } }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} - } + "204" : { + "description" : "No Content." }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1663,8 +1666,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1673,8 +1676,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1683,8 +1686,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1693,11 +1696,8 @@ } } }, - "204" : { - "description" : "No Content." - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1743,8 +1743,14 @@ } }, "responses" : { - "404" : { - "description" : "Not found.", + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} + } + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1753,8 +1759,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1763,14 +1769,11 @@ } } }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} - } + "204" : { + "description" : "No Content." }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1779,8 +1782,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1789,8 +1792,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1799,8 +1802,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1809,11 +1812,8 @@ } } }, - "204" : { - "description" : "No Content." - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1851,8 +1851,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1861,8 +1861,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1871,8 +1871,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1881,8 +1881,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1891,8 +1891,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1901,8 +1901,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1914,8 +1914,8 @@ "201" : { "description" : "Created." }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1953,8 +1953,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1963,8 +1963,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1973,8 +1973,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1983,8 +1983,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1993,8 +1993,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2003,8 +2003,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2204,8 +2204,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2243,8 +2243,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2253,8 +2253,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2263,8 +2263,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2273,8 +2273,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2283,8 +2283,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2293,8 +2293,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2306,8 +2306,8 @@ "201" : { "description" : "Created." }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2345,76 +2345,6 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -2605,10 +2535,80 @@ } } } - } - }, - "security" : [ - { + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security" : [ + { "oAuth2" : [ "profile email" ] @@ -2635,8 +2635,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2645,8 +2645,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2655,8 +2655,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2665,8 +2665,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2675,8 +2675,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2685,8 +2685,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2705,8 +2705,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2755,8 +2755,8 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2765,8 +2765,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2775,8 +2775,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2785,8 +2785,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2795,8 +2798,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2805,8 +2808,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2815,8 +2818,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2824,9 +2827,6 @@ } } } - }, - "204" : { - "description" : "No content." } }, "security" : [ @@ -2868,8 +2868,18 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2881,8 +2891,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2891,6 +2901,9 @@ } } }, + "204" : { + "description" : "No content." + }, "401" : { "description" : "Authorization failed.", "content" : { @@ -2921,18 +2934,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2940,9 +2943,6 @@ } } } - }, - "204" : { - "description" : "No content." } }, "security" : [ @@ -2974,8 +2974,18 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2987,8 +2997,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3027,21 +3037,11 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "204" : { "description" : "No content." }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3080,8 +3080,18 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3093,8 +3103,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3133,21 +3143,11 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "204" : { "description" : "No content." }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3185,8 +3185,58 @@ "required" : true }, "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3329,8 +3379,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3338,19 +3388,38 @@ } } } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } + } + }, + "security" : [ + { + "oAuth2" : [ + "profile email" + ] + } + ] + } + }, + "/assets/as-planned/{assetId}" : { + "get" : { + "tags" : [ + "AssetsAsPlanned" + ], + "summary" : "Get asset by id", + "description" : "The endpoint returns an asset filtered by id .", + "operationId" : "assetById", + "parameters" : [ + { + "name" : "assetId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } - }, - "415" : { - "description" : "Unsupported media type", + } + ], + "responses" : { + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -3359,8 +3428,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3379,47 +3448,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security" : [ - { - "oAuth2" : [ - "profile email" - ] - } - ] - } - }, - "/assets/as-planned/{assetId}" : { - "get" : { - "tags" : [ - "AssetsAsPlanned" - ], - "summary" : "Get asset by id", - "description" : "The endpoint returns an asset filtered by id .", - "operationId" : "assetById", - "parameters" : [ - { - "name" : "assetId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } } - } - ], - "responses" : { - "404" : { - "description" : "Not found.", + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3428,8 +3468,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3624,48 +3664,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3711,6 +3711,66 @@ "required" : true }, "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the updated asset", "content" : { @@ -3906,66 +3966,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -3996,16 +3996,6 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the assets found", "content" : { @@ -4202,8 +4192,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4212,8 +4202,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4222,8 +4212,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4232,8 +4222,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4242,8 +4232,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4285,42 +4285,12 @@ "$ref" : "#/components/schemas/UpdateAssetRequest" } } - }, - "required" : true - }, - "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", + }, + "required" : true + }, + "responses" : { + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4329,8 +4299,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4535,8 +4505,38 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4564,8 +4564,8 @@ "description" : "The endpoint Triggers reload of shell descriptors.", "operationId" : "reload", "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4574,8 +4574,18 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4617,18 +4627,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4656,8 +4656,18 @@ "description" : "The endpoint returns all policies .", "operationId" : "policy", "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4676,8 +4686,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4716,18 +4726,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4766,8 +4766,18 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4792,8 +4802,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4832,18 +4842,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4911,8 +4911,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4921,8 +4921,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4931,18 +4931,23 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4951,8 +4956,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4961,8 +4966,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4971,23 +4976,18 @@ } } }, - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5015,28 +5015,28 @@ "description" : "The endpoint can return limited data based on the user role", "operationId" : "dashboard", "responses" : { - "404" : { - "description" : "Not found.", + "200" : { + "description" : "Returns dashboard data", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/DashboardResponse" } } } }, - "200" : { - "description" : "Returns dashboard data", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/DashboardResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5045,8 +5045,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5055,8 +5055,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5065,8 +5065,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5075,8 +5075,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5085,8 +5085,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5125,8 +5125,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5135,18 +5135,21 @@ } } }, - "200" : { - "description" : "OK.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ImportReportResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "204" : { + "description" : "No Content." + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5155,18 +5158,18 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "OK.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/ImportReportResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5175,8 +5178,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5185,8 +5188,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5195,11 +5198,8 @@ } } }, - "204" : { - "description" : "No Content." - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5245,56 +5245,6 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -5486,8 +5436,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5505,6 +5455,56 @@ } } } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, "security" : [ @@ -5567,8 +5567,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5577,8 +5577,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5587,18 +5587,23 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5607,8 +5612,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5617,8 +5622,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5627,23 +5632,18 @@ } } }, - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5681,8 +5681,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5691,8 +5691,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5701,8 +5701,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5711,8 +5711,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5721,8 +5721,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5731,8 +5731,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5927,8 +5927,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5974,16 +5974,6 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -6185,8 +6175,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6195,8 +6185,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6205,8 +6195,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6215,8 +6205,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6225,8 +6215,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6296,8 +6296,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6306,8 +6306,33 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } + }, + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6346,33 +6371,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6400,8 +6400,8 @@ "description" : "The endpoint returns a map for assets consumed by the map.", "operationId" : "assetsCountryMap", "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6410,23 +6410,18 @@ } } }, - "200" : { - "description" : "Returns the assets found", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6465,18 +6460,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns the assets found", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6514,16 +6514,6 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "400" : { "description" : "Bad request.", "content" : { @@ -6534,8 +6524,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6544,8 +6534,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6554,8 +6544,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6564,8 +6554,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6574,8 +6564,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6769,6 +6759,16 @@ } } } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, "security" : [ @@ -6800,8 +6800,18 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6825,8 +6835,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6865,18 +6875,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6944,8 +6944,8 @@ } ], "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6954,8 +6954,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6964,18 +6964,23 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6984,8 +6989,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6994,8 +6999,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -7004,23 +7009,18 @@ } } }, - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -7048,8 +7048,18 @@ "description" : "Deletes all submodels from the system.", "operationId" : "deleteSubmodels", "responses" : { - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -7061,8 +7071,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -7101,21 +7111,11 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "204" : { "description" : "No Content." }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -7153,11 +7153,8 @@ } ], "responses" : { - "200" : { - "description" : "Okay" - }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -7166,11 +7163,8 @@ } } }, - "204" : { - "description" : "Deleted." - }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -7179,8 +7173,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -7189,8 +7183,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -7199,8 +7193,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -7209,8 +7203,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -7219,8 +7213,14 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "Okay" + }, + "204" : { + "description" : "Deleted." + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { diff --git a/tx-models/src/main/java/assets/importpoc/PolicyResponse.java b/tx-models/src/main/java/assets/importpoc/PolicyResponse.java index 620340ba80..ee0f23b129 100644 --- a/tx-models/src/main/java/assets/importpoc/PolicyResponse.java +++ b/tx-models/src/main/java/assets/importpoc/PolicyResponse.java @@ -19,6 +19,8 @@ package assets.importpoc; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import common.CustomOffsetDateTimeSerializer; import io.swagger.v3.oas.annotations.media.Schema; import java.time.OffsetDateTime; @@ -27,7 +29,10 @@ public record PolicyResponse( @Schema(example = "5a00bb50-0253-405f-b9f1-1a3150b9d51d") String policyId, + + @JsonSerialize(using = CustomOffsetDateTimeSerializer.class) OffsetDateTime createdOn, + @JsonSerialize(using = CustomOffsetDateTimeSerializer.class) OffsetDateTime validUntil, List permissions) { } From 39e517f82501c2e0cb418cee192ba03e7751c8ef Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 14:53:41 +0100 Subject: [PATCH 38/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml index e4502adc09..10d67bd56c 100644 --- a/.github/workflows/check_pom.yml +++ b/.github/workflows/check_pom.yml @@ -42,19 +42,11 @@ jobs: - name: Compare IRS Client Lib Version id: compare-version - run: | - current_version=$(xmllint --xpath "string(//irs-client-lib.version)" pom.xml) - echo "$current_version" - main_version=$(git show main:pom.xml | xmllint --xpath "string(//irs-client-lib.version)" -) - - if [ "$current_version" != "$main_version" ]; then - echo "IRS Client Lib Version has changed." - echo "::set-output name=version_changed::true" - else - echo "IRS Client Lib Version has not changed." - echo "::set-output name=version_changed::false" - fi - shell: bash + uses: tj-actions/changed-files@v42 + with: + # Avoid using single or double quotes for multiline patterns + files: | + pom.xml - name: Create Review Comment uses: ntsd/auto-request-changes-action@v3 From 9f78f5db6317e3c11cc7cd4b0e46f497d1c2e405 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 14:56:46 +0100 Subject: [PATCH 39/87] feature: 420 fix date format --- .../date/CustomOffsetDateTimeSerializer.java | 37 ------------------- .../CustomOffsetDateTimeSerializerTest.java | 5 ++- 2 files changed, 4 insertions(+), 38 deletions(-) delete mode 100644 tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializer.java diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializer.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializer.java deleted file mode 100644 index 301db223de..0000000000 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2023 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ -package org.eclipse.tractusx.traceability.common.date; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; - -import java.io.IOException; -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; - -public class CustomOffsetDateTimeSerializer extends JsonSerializer { - private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX"); - - @Override - public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { - String formattedDateTime = offsetDateTime.format(formatter); - jsonGenerator.writeString(formattedDateTime); - } -} diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java index ba17cb0146..2146c9ab59 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; +import common.CustomOffsetDateTimeSerializer; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -27,7 +28,9 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; public class CustomOffsetDateTimeSerializerTest { From 7c26a8d560a24e6fed02027659ded4ded7464db8 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 14:58:02 +0100 Subject: [PATCH 40/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml index 10d67bd56c..c1b6cac506 100644 --- a/.github/workflows/check_pom.yml +++ b/.github/workflows/check_pom.yml @@ -29,7 +29,9 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v2 From ba7e27a5ad5c34fe23fc50ac8ab97791ce576fbf Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 15:02:57 +0100 Subject: [PATCH 41/87] feature: 420 fix date format --- tx-models/pom.xml | 5 +++++ .../common}/CustomOffsetDateTimeSerializerTest.java | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) rename {tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date => tx-models/src/test/common}/CustomOffsetDateTimeSerializerTest.java (87%) diff --git a/tx-models/pom.xml b/tx-models/pom.xml index db74e7db81..e8a3ab1199 100644 --- a/tx-models/pom.xml +++ b/tx-models/pom.xml @@ -87,6 +87,11 @@ SPDX-License-Identifier: Apache-2.0 logback-core 1.4.14 + + org.mockito + mockito-core + test + diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java b/tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java similarity index 87% rename from tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java rename to tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java index 2146c9ab59..4ceaa277ba 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java +++ b/tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java @@ -1,4 +1,4 @@ -/******************************************************************************** +package common; /******************************************************************************** * Copyright (c) 2023 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional @@ -16,11 +16,9 @@ * * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -package org.eclipse.tractusx.traceability.common.date; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; -import common.CustomOffsetDateTimeSerializer; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -32,7 +30,8 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -public class CustomOffsetDateTimeSerializerTest { +class CustomOffsetDateTimeSerializerTest { + private CustomOffsetDateTimeSerializer serializer; private JsonGenerator jsonGenerator; @@ -46,7 +45,7 @@ public void setup() { } @Test - public void testSerialize() throws IOException { + public void test_serialize() throws IOException { OffsetDateTime offsetDateTime = OffsetDateTime.of(2023, 10, 13, 14, 30, 45, 0, ZoneOffset.UTC); String expectedFormattedDateTime = "2023-10-13T14:30:45Z"; @@ -55,4 +54,5 @@ public void testSerialize() throws IOException { // Verify that the custom serializer correctly formats the OffsetDateTime and writes it to the JsonGenerator verify(jsonGenerator, times(1)).writeString(expectedFormattedDateTime); } + } From ba2b311f2ed57186ba7518e792501f023ea15301 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 15:03:43 +0100 Subject: [PATCH 42/87] feature: 420 fix date format --- .../src/test/common/CustomOffsetDateTimeSerializerTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java b/tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java index 4ceaa277ba..87b05a7c7e 100644 --- a/tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java +++ b/tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java @@ -46,12 +46,14 @@ public void setup() { @Test public void test_serialize() throws IOException { + //GIVEN OffsetDateTime offsetDateTime = OffsetDateTime.of(2023, 10, 13, 14, 30, 45, 0, ZoneOffset.UTC); String expectedFormattedDateTime = "2023-10-13T14:30:45Z"; + //WHEN serializer.serialize(offsetDateTime, jsonGenerator, serializerProvider); - // Verify that the custom serializer correctly formats the OffsetDateTime and writes it to the JsonGenerator + //THEN verify(jsonGenerator, times(1)).writeString(expectedFormattedDateTime); } From 5109e323aa3dff83cacca5b2020265135cc9706e Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 15:09:52 +0100 Subject: [PATCH 43/87] chore-xxx: added new action --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 85976189dd..d66a2be200 100644 --- a/pom.xml +++ b/pom.xml @@ -100,7 +100,7 @@ SPDX-License-Identifier: Apache-2.0 2.15.2 5.9.3 3.0.0 - 1.6.1-SNAPSHOT + 1.8.1-SNAPSHOT 5.4.0 jacoco From 2b9347759130330c922a625ec227024910b2bd51 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 15:54:48 +0100 Subject: [PATCH 44/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml index c1b6cac506..da0dfed3ab 100644 --- a/.github/workflows/check_pom.yml +++ b/.github/workflows/check_pom.yml @@ -30,8 +30,6 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 - with: - fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v2 @@ -44,11 +42,19 @@ jobs: - name: Compare IRS Client Lib Version id: compare-version - uses: tj-actions/changed-files@v42 - with: - # Avoid using single or double quotes for multiline patterns - files: | - pom.xml + run: | + git fetch origin + current_version=$(xmllint --xpath "string(//irs-client-lib.version)" pom.xml) + main_version=$(git show origin/main:pom.xml | xmllint --xpath "string(//irs-client-lib.version)" -) + + if [ "$current_version" != "$main_version" ]; then + echo "IRS Client Lib Version has changed." + echo "::set-output name=version_changed::true" + else + echo "IRS Client Lib Version has not changed." + echo "::set-output name=version_changed::false" + fi + shell: bash - name: Create Review Comment uses: ntsd/auto-request-changes-action@v3 From b4af610c669da52e876c5ed0e2d919b65623b7be Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 15:58:44 +0100 Subject: [PATCH 45/87] feature: 536 rework PolicyController to respond with policies from the IRS policy store --- .../application/importpoc/PolicyService.java | 4 +- .../mapper/PolicyResponseMapper.java | 102 ------------------ .../importpoc/rest/PolicyController.java | 8 +- .../assets/domain/base/IrsRepository.java | 3 + .../importpoc/service/PolicyServiceImpl.java | 16 ++- .../infrastructure/base/irs/IrsService.java | 1 + .../service/PolicyServiceImplTest.java | 35 +++--- .../common/support/IrsApiSupport.java | 11 ++ .../policy/PolicyControllerIT.java | 8 +- .../policies/response_200_get_policies.json | 97 +++++++++++++++++ 10 files changed, 154 insertions(+), 131 deletions(-) delete mode 100644 tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/mapper/PolicyResponseMapper.java create mode 100644 tx-backend/src/test/resources/stubs/irs/policies/response_200_get_policies.json diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/PolicyService.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/PolicyService.java index 7a941921d0..198cef4561 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/PolicyService.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/PolicyService.java @@ -18,10 +18,10 @@ ********************************************************************************/ package org.eclipse.tractusx.traceability.assets.application.importpoc; -import org.eclipse.tractusx.irs.edc.client.policy.Policy; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; import java.util.List; public interface PolicyService { - List getAllPolicies(); + List getAllPolicies(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/mapper/PolicyResponseMapper.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/mapper/PolicyResponseMapper.java deleted file mode 100644 index ed8f5e3828..0000000000 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/mapper/PolicyResponseMapper.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2024 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ -package org.eclipse.tractusx.traceability.assets.application.importpoc.mapper; - -import assets.importpoc.ConstraintResponse; -import assets.importpoc.ConstraintsResponse; -import assets.importpoc.OperatorTypeResponse; -import assets.importpoc.PermissionResponse; -import assets.importpoc.PolicyResponse; -import assets.importpoc.PolicyTypeResponse; -import org.eclipse.tractusx.irs.edc.client.policy.Constraint; -import org.eclipse.tractusx.irs.edc.client.policy.OperatorType; -import org.eclipse.tractusx.irs.edc.client.policy.Permission; -import org.eclipse.tractusx.irs.edc.client.policy.Policy; -import org.eclipse.tractusx.irs.edc.client.policy.PolicyType; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - - -public class PolicyResponseMapper { - - public static List fromList(List allPolicies) { - return allPolicies - .stream() - .map(PolicyResponseMapper::from) - .collect(Collectors.toList()); - } - - public static PolicyResponse from(final Policy policy) { - if (policy == null) { - return null; - } - - List list = policy.getPermissions() - .stream() - .map(PolicyResponseMapper::from) - .collect(Collectors.toList()); - - return new PolicyResponse( - policy.getPolicyId(), - policy.getCreatedOn(), - policy.getValidUntil(), - list - ); - } - - public static PermissionResponse from(final Permission permission) { - List or = permission.getConstraint().getOr(); - List and = permission.getConstraint().getAnd(); - List andResponse = and.stream() - .map(constraint -> new ConstraintResponse(constraint.getLeftOperand(), OperatorTypeResponse.valueOf(constraint.getOperator().getOperatorType().name()), List.of(constraint.getRightOperand())) - ).toList(); - - List orResponse = or.stream() - .map(constraint -> new ConstraintResponse(constraint.getLeftOperand(), OperatorTypeResponse.valueOf(constraint.getOperator().getOperatorType().name()), List.of(constraint.getRightOperand())) - ).toList(); - - ConstraintsResponse constraintsResponse = new ConstraintsResponse(andResponse, orResponse); - - PolicyTypeResponse policyTypeResponse = Optional.ofNullable(permission.getAction()) - .map(PolicyResponseMapper::from) - .orElse(null); - - return new PermissionResponse(policyTypeResponse, List.of(constraintsResponse)); - } - - public static PolicyTypeResponse from(final PolicyType policyType) { - return PolicyTypeResponse.valueOf(policyType.name()); - } - - public static ConstraintResponse from(final Constraint constraint) { - return new ConstraintResponse( - constraint.getLeftOperand(), - from(constraint.getOperator().getOperatorType()), - List.of(constraint.getRightOperand()) - ); - } - - public static OperatorTypeResponse from(final OperatorType operatorType) { - return OperatorTypeResponse.valueOf(operatorType.name()); - } - - -} diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java index aa0596d6ff..e56202e302 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java @@ -20,7 +20,6 @@ import assets.importpoc.ErrorResponse; -import assets.importpoc.PolicyResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -31,13 +30,14 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.eclipse.tractusx.traceability.assets.application.importpoc.PolicyService; -import org.eclipse.tractusx.traceability.assets.application.importpoc.mapper.PolicyResponseMapper; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; + @Slf4j @RequiredArgsConstructor @RestController @@ -46,7 +46,7 @@ @RequestMapping(path = "/policies") public class PolicyController { - private final PolicyService policyService; + private final PolicyService policyService; @Operation(operationId = "policy", summary = "Get all policies ", @@ -100,6 +100,6 @@ public class PolicyController { schema = @Schema(implementation = ErrorResponse.class)))}) @GetMapping() public List policy() { - return PolicyResponseMapper.fromList(policyService.getAllPolicies()); + return policyService.getAllPolicies(); } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/IrsRepository.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/IrsRepository.java index 636abda3fe..055831e634 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/IrsRepository.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/IrsRepository.java @@ -23,6 +23,7 @@ import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.request.BomLifecycle; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Direction; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; import java.util.List; @@ -39,4 +40,6 @@ public interface IrsRepository { void createIrsPolicyIfMissing(); void handleJobFinishedCallback(String jobId, String jobState); + + List getPolicies(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImpl.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImpl.java index 6f0a4a75c0..61037ae702 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImpl.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImpl.java @@ -20,30 +20,26 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy; -import org.eclipse.tractusx.irs.edc.client.policy.Policy; import org.eclipse.tractusx.traceability.assets.application.importpoc.PolicyService; +import org.eclipse.tractusx.traceability.assets.domain.base.IrsRepository; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; @Slf4j @RequiredArgsConstructor @Service public class PolicyServiceImpl implements PolicyService { - private final AcceptedPoliciesProvider acceptedPoliciesProvider; + private final IrsRepository irsRepository; @Override - public List getAllPolicies() { - List acceptedPolicies = Optional.ofNullable(acceptedPoliciesProvider.getAcceptedPolicies()) + public List getAllPolicies() { + List acceptedPolicies = Optional.ofNullable(irsRepository.getPolicies()) .orElse(Collections.emptyList()); - return acceptedPolicies.stream() - .map(AcceptedPolicy::policy) - .collect(Collectors.toList()); + return acceptedPolicies; } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java index a7ccc422fe..e1d23f56cd 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java @@ -198,6 +198,7 @@ private boolean isPolicyExpired(PolicyResponse requiredPolicy) { return traceabilityProperties.getValidUntil().isAfter(requiredPolicy.validUntil()); } + @Override public List getPolicies() { return irsClient.getPolicies(); } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImplTest.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImplTest.java index 9d41d4c838..33323ea35d 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImplTest.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImplTest.java @@ -19,9 +19,10 @@ package org.eclipse.tractusx.traceability.assets.domain.importpoc.service; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy; import org.eclipse.tractusx.irs.edc.client.policy.Policy; +import org.eclipse.tractusx.traceability.assets.domain.base.IrsRepository; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Payload; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -35,20 +36,20 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class PolicyServiceImplTest { @InjectMocks private PolicyServiceImpl policyService; @Mock - private AcceptedPoliciesProvider acceptedPoliciesProvider; + private IrsRepository irsRepository; @BeforeEach public void testSetup() { - policyService = new PolicyServiceImpl(acceptedPoliciesProvider); + policyService = new PolicyServiceImpl(irsRepository); } - @Test void testGetPolicyByID() { @@ -56,17 +57,27 @@ void testGetPolicyByID() { // GIVEN String policyId = "policy123"; OffsetDateTime createdOn = OffsetDateTime.parse("2023-07-03T16:01:05.309Z"); - List acceptedPolicies = List.of( - new AcceptedPolicy(new Policy("policy123", createdOn,null, null),null)); + List acceptedPolicies = List.of( + PolicyResponse.builder() + .validUntil(OffsetDateTime.now()) + .payload( + Payload.builder() + .policyId(policyId) + .policy( + Policy.builder() + .createdOn(createdOn) + .build()) + .build()) + .build()); // WHEN - when(acceptedPoliciesProvider.getAcceptedPolicies()).thenReturn(acceptedPolicies); - List result = policyService.getAllPolicies(); + when(irsRepository.getPolicies()).thenReturn(acceptedPolicies); + List allPolicies = policyService.getAllPolicies(); // THEN - assertNotNull(result); - assertEquals(policyId, result.get(0).getPolicyId()); - assertEquals(createdOn, result.get(0).getCreatedOn()); + assertNotNull(allPolicies); + assertEquals(policyId, allPolicies.get(0).payload().policyId()); + assertEquals(createdOn, allPolicies.get(0).payload().policy().getCreatedOn()); } } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/IrsApiSupport.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/IrsApiSupport.java index b90cc35ca3..d07db595c5 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/IrsApiSupport.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/IrsApiSupport.java @@ -94,4 +94,15 @@ public void irsJobDetailsApiFailed() { restitoProvider.jsonResponseFromFile("./stubs/irs/get/jobs/id/response_200.json") ); } + + public void irsApiReturnsPolicies() { + whenHttp(restitoProvider.stubServer()).match( + get("/irs/policies") + ) + .then( + status(HttpStatus.OK_200), + header("Content-Type", "application/json"), + restitoProvider.jsonResponseFromFile("./stubs/irs/policies/response_200_get_policies.json") + ); + } } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/policy/PolicyControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/policy/PolicyControllerIT.java index 34c4cab848..fd2c0c3a19 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/policy/PolicyControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/policy/PolicyControllerIT.java @@ -20,17 +20,23 @@ import io.restassured.http.ContentType; import org.eclipse.tractusx.traceability.integration.IntegrationTestSpecification; +import org.eclipse.tractusx.traceability.integration.common.support.IrsApiSupport; import org.jose4j.lang.JoseException; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import static io.restassured.RestAssured.given; import static org.eclipse.tractusx.traceability.common.security.JwtRole.ADMIN; class PolicyControllerIT extends IntegrationTestSpecification { - + @Autowired + IrsApiSupport irsApiSupport; @Test void shouldReturnPolicy() throws JoseException { + //GIVEN + irsApiSupport.irsApiReturnsPolicies(); + // when/then given() .header(oAuth2Support.jwtAuthorization(ADMIN)) diff --git a/tx-backend/src/test/resources/stubs/irs/policies/response_200_get_policies.json b/tx-backend/src/test/resources/stubs/irs/policies/response_200_get_policies.json new file mode 100644 index 0000000000..1d00283d88 --- /dev/null +++ b/tx-backend/src/test/resources/stubs/irs/policies/response_200_get_policies.json @@ -0,0 +1,97 @@ +[ + { + "validUntil" : "2029-03-11T11:04:52.771949893Z", + "payload" : { + "@context" : { + "odrl" : "http://www.w3.org/ns/odrl/2/" + }, + "@id" : "default-policy", + "policy" : { + "policyId" : "default-policy", + "createdOn" : "2024-03-11T11:04:52.771906693Z", + "validUntil" : "2029-03-11T11:04:52.771949893Z", + "permissions" : [ + { + "action" : "USE", + "constraint" : { + "and" : [ + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "ID 3.0 Trace" + }, + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "ID 3.1 Trace" + }, + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "R2_Traceability" + }, + { + "leftOperand" : "FrameworkAgreement.traceability", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "active" + }, + { + "leftOperand" : "Membership", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "active" + } + ], + "or" : [ + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "ID 3.0 Trace" + }, + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "ID 3.1 Trace" + }, + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "R2_Traceability" + }, + { + "leftOperand" : "FrameworkAgreement.traceability", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "active" + }, + { + "leftOperand" : "Membership", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "active" + } + ] + } + } + ] + } + } + } +] From 47b3d1b09e48d9445d4d686bbfcf88a8e0ecb862 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 16:00:58 +0100 Subject: [PATCH 46/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml index da0dfed3ab..1c4305aee4 100644 --- a/.github/workflows/check_pom.yml +++ b/.github/workflows/check_pom.yml @@ -46,13 +46,15 @@ jobs: git fetch origin current_version=$(xmllint --xpath "string(//irs-client-lib.version)" pom.xml) main_version=$(git show origin/main:pom.xml | xmllint --xpath "string(//irs-client-lib.version)" -) + echo "$current_version" + echo "$main_version" if [ "$current_version" != "$main_version" ]; then echo "IRS Client Lib Version has changed." - echo "::set-output name=version_changed::true" + echo "version_changed=true" >> $GITHUB_OUTPUT else echo "IRS Client Lib Version has not changed." - echo "::set-output name=version_changed::false" + echo "version_changed=false" >> $GITHUB_OUTPUT fi shell: bash From c420eb6d53bcef0dd07124cdba741462d6665a2c Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Mon, 11 Mar 2024 16:02:01 +0100 Subject: [PATCH 47/87] feature: 536 update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04df8bb54d..35c928b9dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ _**For better traceability add the corresponding GitHub issue number in each cha - #625 increased height of tables - #423 Moved errorMessages from investigation/alert to notification list - Updated COMPATIBILITY.md matrix adding release C-X 24.3 and 23.12 +- #536 rework /policies to respond with policies from the IRS policy store ### Removed - #625 Removed the header and breadcrumbs section from app layout From 0915e2f93ae05080740376e994a0389482dc5034 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Mon, 11 Mar 2024 16:30:48 +0100 Subject: [PATCH 48/87] chore(contracts): 421 fix date displays --- .../mocks/services/admin-mock/admin.model.ts | 32 ++++++++-------- .../modules/page/admin/core/admin.model.ts | 37 ++++++++++++++++--- .../modules/page/admin/core/admin.service.ts | 33 +++++++++++------ .../components/table/table.component.html | 2 +- .../modules/shared/helper/filter-helper.ts | 6 +-- 5 files changed, 74 insertions(+), 36 deletions(-) diff --git a/frontend/src/app/mocks/services/admin-mock/admin.model.ts b/frontend/src/app/mocks/services/admin-mock/admin.model.ts index b934d971b8..7adaae7153 100644 --- a/frontend/src/app/mocks/services/admin-mock/admin.model.ts +++ b/frontend/src/app/mocks/services/admin-mock/admin.model.ts @@ -19,8 +19,8 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { PaginationResponse } from '@core/model/pagination.model'; -import { BpnConfigResponse, Contract, ContractState } from '@page/admin/core/admin.model'; +import {PaginationResponse} from '@core/model/pagination.model'; +import {BpnConfigResponse, ContractResponse, ContractState} from '@page/admin/core/admin.model'; export const getBpnConfig = (): BpnConfigResponse[] => [ @@ -212,7 +212,7 @@ export const getImportReport = (): any => { }; }; -export const getContracts = (): PaginationResponse => { +export const getContracts = (): PaginationResponse => { return { page: 0, pageSize: 10, @@ -222,91 +222,91 @@ export const getContracts = (): PaginationResponse => { { "contractId": "abc1", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2024-02-26T13:38:07+01:00", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc2", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc3", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc4", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc5", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc6", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc7", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc8", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc9", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc10", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc11", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc12", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED }, { "contractId": "abc13", "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", - "creationDate": 1708951.087000000, + "creationDate": "2022-05-01T12:34:12", "endDate": null, "state": ContractState.FINALIZED } diff --git a/frontend/src/app/modules/page/admin/core/admin.model.ts b/frontend/src/app/modules/page/admin/core/admin.model.ts index 70ccb650d6..56767b039c 100644 --- a/frontend/src/app/modules/page/admin/core/admin.model.ts +++ b/frontend/src/app/modules/page/admin/core/admin.model.ts @@ -20,7 +20,9 @@ ********************************************************************************/ -import { FormArray, FormControl, FormGroup } from '@angular/forms'; +import {FormArray, FormControl, FormGroup} from '@angular/forms'; +import {CalendarDateModel} from '@core/model/calendar-date.model'; +import {Pagination, PaginationResponse} from '@core/model/pagination.model'; export enum KnownAdminRoutes { BPN = 'configure-bpn', @@ -48,12 +50,37 @@ export type BpnConfigFormGroup = FormGroup<{ bpnConfig: FormArray; +export type Contracts = Pagination; +export function assembleContract(contractResponse: ContractResponse): Contract { + + return { + contractId: contractResponse.contractId, + counterpartyAddress: contractResponse.counterpartyAddress, + creationDate: new CalendarDateModel(contractResponse.creationDate), + endDate: new CalendarDateModel(contractResponse.endDate), + state: contractResponse.state, + }; +} + +export function assembleContracts(contractResponseList: ContractResponse[]) { + return contractResponseList.map(contractResponse => assembleContract(contractResponse)); +} + export enum ContractState { - FINALIZED = "Finalized", - TERMINATED = "Terminated" + FINALIZED = 'Finalized', + TERMINATED = 'Terminated' } diff --git a/frontend/src/app/modules/page/admin/core/admin.service.ts b/frontend/src/app/modules/page/admin/core/admin.service.ts index 98a002bbbe..33e9573ac2 100644 --- a/frontend/src/app/modules/page/admin/core/admin.service.ts +++ b/frontend/src/app/modules/page/admin/core/admin.service.ts @@ -19,16 +19,22 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { ApiService } from '@core/api/api.service'; -import { Pagination } from '@core/model/pagination.model'; -import { environment } from '@env'; -import { AdminAssembler } from '@page/admin/core/admin.assembler'; -import { BpnConfig, BpnConfigResponse, Contract } from '@page/admin/core/admin.model'; -import { TableHeaderSort } from '@shared/components/table/table.model'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import {HttpParams} from '@angular/common/http'; +import {Injectable} from '@angular/core'; +import {ApiService} from '@core/api/api.service'; +import {Pagination} from '@core/model/pagination.model'; +import {environment} from '@env'; +import {AdminAssembler} from '@page/admin/core/admin.assembler'; +import { + assembleContract, + BpnConfig, + BpnConfigResponse, + Contract, + ContractResponse, +} from '@page/admin/core/admin.model'; +import {TableHeaderSort} from '@shared/components/table/table.model'; +import {Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; @Injectable() export class AdminService { @@ -77,7 +83,12 @@ export class AdminService { body.searchCriteria = { filter: this.createFilterList(filter) }; } - return this.apiService.post(`${ this.url }/contracts`, body); + return this.apiService.post>(`${ this.url }/contracts`, body).pipe( + map(response => { + const assembled = response.content.map(contract => assembleContract(contract)); + return {...response, content: assembled} as Pagination; + }) + ) } getDistinctFilterValues(filterColumns: string, searchElement: string) { diff --git a/frontend/src/app/modules/shared/components/table/table.component.html b/frontend/src/app/modules/shared/components/table/table.component.html index e49a3c761f..a371291798 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.html +++ b/frontend/src/app/modules/shared/components/table/table.component.html @@ -238,7 +238,7 @@

{{ 'table.noResultFound' | i18n }}

[mat-sort-header]="tableConfig.sortableColumns?.[column] ? '' : null" [disabled]="!tableConfig.sortableColumns?.[column]" mat-header-cell - class="table--cell" + class="table--cell normal--column" > Date: Mon, 11 Mar 2024 16:41:39 +0100 Subject: [PATCH 49/87] chore(contracts): 421 fix test --- .../contract-table.component.spec.ts | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts index 9ef675bbb9..b1b09421d4 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts @@ -1,13 +1,14 @@ -import { TestBed } from '@angular/core/testing'; -import { AdminModule } from '@page/admin/admin.module'; -import { AdminFacade } from '@page/admin/core/admin.facade'; -import { AdminService } from '@page/admin/core/admin.service'; -import { TableHeaderSort } from '@shared/components/table/table.model'; -import { renderComponent } from '@tests/test-render.utils'; -import { of } from 'rxjs'; -import { getContracts } from '../../../../../mocks/services/admin-mock/admin.model'; - -import { ContractTableComponent } from './contract-table.component'; +import {TestBed} from '@angular/core/testing'; +import {AdminModule} from '@page/admin/admin.module'; +import {AdminFacade} from '@page/admin/core/admin.facade'; +import {AdminService} from '@page/admin/core/admin.service'; +import {TableHeaderSort} from '@shared/components/table/table.model'; +import {renderComponent} from '@tests/test-render.utils'; +import {of} from 'rxjs'; +import {getContracts} from '../../../../../mocks/services/admin-mock/admin.model'; + +import {ContractTableComponent} from './contract-table.component'; +import {assembleContract} from "@page/admin/core/admin.model"; describe('ContractTableComponent', () => { @@ -57,7 +58,7 @@ describe('ContractTableComponent', () => { it('select a contract', async() => { const {fixture} = await renderContractTableComponent(); const {componentInstance} = fixture; - let mockSelectedContract = getContracts().content[0]; + let mockSelectedContract = assembleContract(getContracts().content[0]); componentInstance.multiSelection([mockSelectedContract]); expect(componentInstance.selectedContracts.length).toEqual(1); expect(componentInstance.selectedContracts[0].contractId).toEqual(mockSelectedContract.contractId) @@ -67,7 +68,7 @@ describe('ContractTableComponent', () => { const {fixture} = await renderContractTableComponent(); const {componentInstance} = fixture; - let mockSelectedContract = getContracts().content[0]; + let mockSelectedContract = assembleContract(getContracts().content[0]); componentInstance.multiSelection([mockSelectedContract]); let convertSpy = spyOn(componentInstance, 'convertArrayOfObjectsToCSV'); From e02641d75cdef6df5101526eb4344f14d292a5c9 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 16:52:14 +0100 Subject: [PATCH 50/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 19 +++---------------- pom.xml | 3 ++- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml index 1c4305aee4..de24bdefe9 100644 --- a/.github/workflows/check_pom.yml +++ b/.github/workflows/check_pom.yml @@ -31,25 +31,12 @@ jobs: - name: Checkout Repository uses: actions/checkout@v4 - - name: Set up JDK 17 - uses: actions/setup-java@v2 - with: - distribution: 'adopt' - java-version: 17 - - - name: Install xmllint - run: sudo apt-get install -y libxml2-utils - - - name: Compare IRS Client Lib Version + - name: Check pom id: compare-version run: | - git fetch origin - current_version=$(xmllint --xpath "string(//irs-client-lib.version)" pom.xml) - main_version=$(git show origin/main:pom.xml | xmllint --xpath "string(//irs-client-lib.version)" -) - echo "$current_version" - echo "$main_version" + snapshot=$(grep -F '-SNAPSHOT' your_file.xml) - if [ "$current_version" != "$main_version" ]; then + if [ "$snapshot" != null ]; then echo "IRS Client Lib Version has changed." echo "version_changed=true" >> $GITHUB_OUTPUT else diff --git a/pom.xml b/pom.xml index d66a2be200..88efac9639 100644 --- a/pom.xml +++ b/pom.xml @@ -100,7 +100,8 @@ SPDX-License-Identifier: Apache-2.0 2.15.2 5.9.3 3.0.0 - 1.8.1-SNAPSHOT + + 1.6.0-SNAPSHOT 5.4.0 jacoco From 579f90c4150e49bc89b1c1ac1be8dc09247e0859 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Mon, 11 Mar 2024 17:11:33 +0100 Subject: [PATCH 51/87] chore-xxx: added new action --- .github/workflows/check_pom.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_pom.yml b/.github/workflows/check_pom.yml index de24bdefe9..e06c938b71 100644 --- a/.github/workflows/check_pom.yml +++ b/.github/workflows/check_pom.yml @@ -34,7 +34,7 @@ jobs: - name: Check pom id: compare-version run: | - snapshot=$(grep -F '-SNAPSHOT' your_file.xml) + snapshot=$(grep -F '-SNAPSHOT' pom.xml) if [ "$snapshot" != null ]; then echo "IRS Client Lib Version has changed." From e6518848deb6dc4641b48df8632b32d17436091e Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Mon, 11 Mar 2024 17:17:52 +0100 Subject: [PATCH 52/87] chore(contracts): 421 fix test --- .../contract-table/contract-table.component.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts index b1b09421d4..84bf71bf10 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts @@ -74,7 +74,7 @@ describe('ContractTableComponent', () => { let convertSpy = spyOn(componentInstance, 'convertArrayOfObjectsToCSV'); let downloadSpy = spyOn(componentInstance,'downloadCSV') componentInstance.exportContractsAsCSV(); - expect(convertSpy).toHaveBeenCalledWith([getContracts().content[0]]); + expect(convertSpy).toHaveBeenCalledWith([assembleContract(getContracts().content[0])]); expect(downloadSpy).toHaveBeenCalled(); }); @@ -86,7 +86,7 @@ describe('ContractTableComponent', () => { let result = componentInstance.convertArrayOfObjectsToCSV([getContracts().content[0]]) expect(result).toEqual("contractId,counterpartyAddress,creationDate,endDate,state\n" + - "abc1,https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp,1708951.087,,Finalized"); + "abc1,https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp,2024-02-26T13:38:07+01:00,,Finalized"); }); /* From c1075076781f568d7c694f496cf5d2b492e8ceb3 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Mon, 11 Mar 2024 17:53:55 +0100 Subject: [PATCH 53/87] chore(contracts): 421 fix contractId column width --- .../shared/components/table/table.component.html | 10 ++++++++-- .../shared/components/table/table.component.scss | 7 +++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/modules/shared/components/table/table.component.html b/frontend/src/app/modules/shared/components/table/table.component.html index a371291798..72034cf43b 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.html +++ b/frontend/src/app/modules/shared/components/table/table.component.html @@ -238,7 +238,7 @@

{{ 'table.noResultFound' | i18n }}

[mat-sort-header]="tableConfig.sortableColumns?.[column] ? '' : null" [disabled]="!tableConfig.sortableColumns?.[column]" mat-header-cell - class="table--cell normal--column" + class="table--cell" > {{ 'table.noResultFound' | i18n }} - +
From b7b289d39adac772b60077361cb5dbcb88bc15a0 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 13 Mar 2024 09:15:25 +0100 Subject: [PATCH 67/87] chore(importstate): 536 added import state published to cx --- .../services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts | 2 +- frontend/src/app/modules/page/parts/model/parts.model.ts | 6 ++++-- .../app/modules/shared/components/chip/chip.component.scss | 4 ++++ frontend/src/assets/locales/de/common.json | 6 ++++-- frontend/src/assets/locales/en/common.json | 6 ++++-- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/mocks/services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts b/frontend/src/app/mocks/services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts index 073a91e323..6aa32496ca 100644 --- a/frontend/src/app/mocks/services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts +++ b/frontend/src/app/mocks/services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts @@ -66,7 +66,7 @@ export const mockBmwAssets = [ 'receivedQualityAlertIdsInStatusActive': [], 'sentQualityInvestigationIdsInStatusActive': [], 'receivedQualityInvestigationIdsInStatusActive': [], - 'importState': 'TRANSIENT', + 'importState': 'PUBLISHED_TO_CX', 'importNote': 'This is a test import note.' }, { diff --git a/frontend/src/app/modules/page/parts/model/parts.model.ts b/frontend/src/app/modules/page/parts/model/parts.model.ts index 0247cda5cc..b2c8159212 100644 --- a/frontend/src/app/modules/page/parts/model/parts.model.ts +++ b/frontend/src/app/modules/page/parts/model/parts.model.ts @@ -175,7 +175,8 @@ export enum ImportState { PERSISTENT = "PERSISTENT", IN_SYNCHRONIZATION = "IN_SYNCHRONIZATION", ERROR = "ERROR", - UNSET = "UNSET" + UNSET = "UNSET", + PUBLISHED_TO_CX="PUBLISHED_TO_CX" } export enum ImportStateInCamelCase { @@ -183,7 +184,8 @@ export enum ImportStateInCamelCase { PERSISTENT = "Persistent", IN_SYNCHRONIZATION = "In Synchronization", ERROR = "Error", - UNSET = "Unset" + UNSET = "Unset", + PUBLISHED_TO_CX="Published to CX" } export enum FilterOperator { diff --git a/frontend/src/app/modules/shared/components/chip/chip.component.scss b/frontend/src/app/modules/shared/components/chip/chip.component.scss index 9a50021b93..0dabeaaff6 100644 --- a/frontend/src/app/modules/shared/components/chip/chip.component.scss +++ b/frontend/src/app/modules/shared/components/chip/chip.component.scss @@ -23,6 +23,10 @@ background-color: rgb(255,236,189); } + &__PUBLISHED_TO_CX { + background-color: rgb(218, 245, 255); + } + &__ERROR { background-color: rgb(254,231,226); } diff --git a/frontend/src/assets/locales/de/common.json b/frontend/src/assets/locales/de/common.json index 43dae35630..925a61b9f6 100644 --- a/frontend/src/assets/locales/de/common.json +++ b/frontend/src/assets/locales/de/common.json @@ -143,7 +143,8 @@ "TRANSIENT": "TRANSIENT", "IN_SYNCHRONIZATION": "IN SYNCHRONISATION", "ERROR": "FEHLER", - "UNSET": "UNDEFINIERT" + "UNSET": "UNDEFINIERT", + "PUBLISHED_TO_CX": "VERÖFFENTLICHT" }, "severity": { "MINOR": "Gering", @@ -333,7 +334,8 @@ "PERSISTENT": "Persistent", "IN_SYNCHRONIZATION": "In Synchronisation", "ERROR": "Fehler", - "UNSET": "Undefiniert" + "UNSET": "Undefiniert", + "PUBLISHED_TO_CX": "Veröffentlicht" } }, "parts": { diff --git a/frontend/src/assets/locales/en/common.json b/frontend/src/assets/locales/en/common.json index 4b8dab2d62..0ce7305b56 100644 --- a/frontend/src/assets/locales/en/common.json +++ b/frontend/src/assets/locales/en/common.json @@ -141,7 +141,8 @@ "TRANSIENT": "TRANSIENT", "IN_SYNCHRONIZATION": "IN SYNCHRONIZATION", "ERROR": "ERROR", - "UNSET": "UNSET" + "UNSET": "UNSET", + "PUBLISHED_TO_CX": "PUBLISHED" }, "severity": { "MINOR": "Minor", @@ -335,7 +336,8 @@ "PERSISTENT": "Persistent", "IN_SYNCHRONIZATION": "In Synchronization", "ERROR": "Error", - "UNSET": "Unset" + "UNSET": "Unset", + "PUBLISHED_TO_CX": "Veröffentlicht" } }, From 1e5934b6741f5d8c325a88384061c35eca1f81a3 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 13 Mar 2024 09:16:37 +0100 Subject: [PATCH 68/87] chore(importstate): 536 added import state published to cx --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35c928b9dc..fcf8231ff1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ _**For better traceability add the corresponding GitHub issue number in each cha ### Added - #515 Service Unavailable Response on Notification failure - +- #536 Added import state PUBLISHED_TO_CX in frontend - #420 add /contracts api to fetch contract agreement information from EDC for assets ### Changed From c10d2f4a716656d24ef8c097b28e79deb305efba Mon Sep 17 00:00:00 2001 From: ds-ashanmugavel <143817136+ds-ashanmugavel@users.noreply.github.com> Date: Wed, 13 Mar 2024 09:19:49 +0100 Subject: [PATCH 69/87] Update docs/RELEASE.md Co-authored-by: ds-mmaul <117836305+ds-mmaul@users.noreply.github.com> --- docs/RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 26d136141f..a16eaea3b9 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -12,7 +12,7 @@ Make sure eclipse / catena git repositories are in sync 2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release 3) Click on the [Update irs-registry-client Version workflow](https://github.com/catenax-ng/tx-item-relationship-service/actions/workflows/update-registry-library.yaml). 4) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. -5) Afterward, merge the created Pull Request and delete the release branch. +5) Merge the created Pull reuqest and make sure the release branch is deleted afterwards (default behaviour). 6) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 7) Create and Checkout release branch on catena /release/1.0.0 8) Update in the above created release branch to the created one in step 3. From 014d0b7cb14dc74fcf648159d7db859763524bca Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Wed, 13 Mar 2024 10:00:08 +0100 Subject: [PATCH 70/87] chore-xxx: updated Release --- docs/RELEASE.md | 60 +++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 26d136141f..e2ddfb0e03 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -10,32 +10,34 @@ Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release -3) Click on the [Update irs-registry-client Version workflow](https://github.com/catenax-ng/tx-item-relationship-service/actions/workflows/update-registry-library.yaml). -4) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. -5) Afterward, merge the created Pull Request and delete the release branch. -6) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 -7) Create and Checkout release branch on catena /release/1.0.0 -8) Update in the above created release branch to the created one in step 3. -9) Edit changelog: Align the new version (1.0.0) with the changes and add new UNRELEASED section -10) Edit /charts/traceability-foss/CHANGELOG.md -11) Add an Entry for an incremented (patch) version (1.0.0 -> 1.0.1) -12) Push onto /release/1.0.0 catena and eclipse -13) Open Release App Page Catena: https://github.com/catenax-ng/tx-traceability-foss/releases -14) Draft a new release -15) On dropdown choose a tag - use the version 1.0.0 (Create new tag will appear - select it) -16) On dropdown target use your /release/1.0.0 -17) Title = Version of app -> 1.0.0 -18) Description = Changelog Content of app -19) Checkbox set as latest release -20) Verify that github action [Release](https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/release.yaml) generation has been triggered -21) Verify that an automatic pull request has been opened (Prepare Helm release for next version) -22) Validate that the versions within that pull requests are correct -23) Merge pull request (Prepare Helm release for next version) -24) Merge release branch into main (when merging make sure to restore release branch since it should stay) -25) Open the github action for helm release generation: https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/helm-chart-release.yaml -26) Execute it from main branch -27) Validate that the helm charts release has been generated within the release page -28) Create a new branch from release/1.0.0 and name it release/helm-environments-1.0.0 (helm app version not chart version) -29) Repeat step 8 to 23 for tractus-x: [GitHub Releases page](https://github.com/eclipse-tractusx/traceability-foss/releases) -30) Sync catena and eclipse main branch -31) Create a message in the Trace-X channel of the Eclipse Foundation Chat to notify the community about the new release (add a link to the tractus-x release) +3) Click on the [Update irs-registry-client Version workflow](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/update-registry-library.yaml). +4) The irs lib version in (irs)[https://github.com/eclipse-tractusx/item-relationship-service/blob/65a42336b7ec7ae50690ec7590d05d8e3b15555a/pom.xml#L76] should align with the potential (newer one)[https://github.com/catenax-ng/tx-traceability-foss/blob/fb1130d4c1dd4f869e61d334310e99bc191fa0c7/pom.xml#L103] in trace-x main +5) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. +6) A pull request (name: Update irs-registry-client to "Version") will be generated in which you have to make sure the irs lib version is now correct (change it manually if necessary). Check if Actions finish successfully. (If Dash IP Check fails, update the DEPENDENCIES file with the mvn command on the generated pull request branch) +7) Afterward, merge the created Pull Request and delete the release branch. +8) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 +9) Create and Checkout release branch on catena /release/1.0.0 +10) Update in the above created release branch to the created one in step 3. +11) Edit changelog: Align the new version (1.0.0) with the changes and add new UNRELEASED section +12) Edit /charts/traceability-foss/CHANGELOG.md +13) Add an Entry for an incremented (patch) version (1.0.0 -> 1.0.1) +14) Push onto /release/1.0.0 catena and eclipse +15) Open Release App Page Catena: https://github.com/catenax-ng/tx-traceability-foss/releases +16) Draft a new release +17) On dropdown choose a tag - use the version 1.0.0 (Create new tag will appear - select it) +18) On dropdown target use your /release/1.0.0 +19) Title = Version of app -> 1.0.0 +20) Description = Changelog Content of app +21) Checkbox set as latest release +22) Verify that github action [Release](https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/release.yaml) generation has been triggered +23) Verify that an automatic pull request has been opened (Prepare Helm release for next version) +24) Validate that the versions within that pull requests are correct +25) Merge pull request (Prepare Helm release for next version) +26) Merge release branch into main (when merging make sure to restore release branch since it should stay) +27) Open the github action for helm release generation: https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/helm-chart-release.yaml +28) Execute it from main branch +29) Validate that the helm charts release has been generated within the release page +30) Create a new branch from release/1.0.0 and name it release/helm-environments-1.0.0 (helm app version not chart version) +31) Repeat step 8 to 23 for tractus-x: [GitHub Releases page](https://github.com/eclipse-tractusx/traceability-foss/releases) +32) Sync catena and eclipse main branch +33) Create a message in the Trace-X channel of the Eclipse Foundation Chat to notify the community about the new release (add a link to the tractus-x release) From bb40c7e76a47f798eba08d469591b8883c9bffd9 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Wed, 13 Mar 2024 10:01:58 +0100 Subject: [PATCH 71/87] chore-xxx: updated Release --- docs/RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index e2ddfb0e03..3e2a9527ff 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -14,7 +14,7 @@ Make sure eclipse / catena git repositories are in sync 4) The irs lib version in (irs)[https://github.com/eclipse-tractusx/item-relationship-service/blob/65a42336b7ec7ae50690ec7590d05d8e3b15555a/pom.xml#L76] should align with the potential (newer one)[https://github.com/catenax-ng/tx-traceability-foss/blob/fb1130d4c1dd4f869e61d334310e99bc191fa0c7/pom.xml#L103] in trace-x main 5) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. 6) A pull request (name: Update irs-registry-client to "Version") will be generated in which you have to make sure the irs lib version is now correct (change it manually if necessary). Check if Actions finish successfully. (If Dash IP Check fails, update the DEPENDENCIES file with the mvn command on the generated pull request branch) -7) Afterward, merge the created Pull Request and delete the release branch. +7) Merge the created Pull request and make sure the release branch is deleted afterward (default behaviour). 8) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 9) Create and Checkout release branch on catena /release/1.0.0 10) Update in the above created release branch to the created one in step 3. From b6558cfff398892bda719b3cf8182de7df5c3578 Mon Sep 17 00:00:00 2001 From: ds-mmaul <117836305+ds-mmaul@users.noreply.github.com> Date: Wed, 13 Mar 2024 10:06:15 +0100 Subject: [PATCH 72/87] Update docs/RELEASE.md --- docs/RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 3e2a9527ff..526846ba2b 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -11,7 +11,7 @@ Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release 3) Click on the [Update irs-registry-client Version workflow](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/update-registry-library.yaml). -4) The irs lib version in (irs)[https://github.com/eclipse-tractusx/item-relationship-service/blob/65a42336b7ec7ae50690ec7590d05d8e3b15555a/pom.xml#L76] should align with the potential (newer one)[https://github.com/catenax-ng/tx-traceability-foss/blob/fb1130d4c1dd4f869e61d334310e99bc191fa0c7/pom.xml#L103] in trace-x main +4) The irs lib version in [irs](https://github.com/eclipse-tractusx/item-relationship-service/blob/65a42336b7ec7ae50690ec7590d05d8e3b15555a/pom.xml#L76) should align with the potential [newer one](https://github.com/catenax-ng/tx-traceability-foss/blob/fb1130d4c1dd4f869e61d334310e99bc191fa0c7/pom.xml#L103) in trace-x main 5) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. 6) A pull request (name: Update irs-registry-client to "Version") will be generated in which you have to make sure the irs lib version is now correct (change it manually if necessary). Check if Actions finish successfully. (If Dash IP Check fails, update the DEPENDENCIES file with the mvn command on the generated pull request branch) 7) Merge the created Pull request and make sure the release branch is deleted afterward (default behaviour). From 71f26f3295ad5e0aed09b69da886f0b3f84da4df Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Wed, 13 Mar 2024 10:13:00 +0100 Subject: [PATCH 73/87] chore-xxx: updated Release --- docs/RELEASE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 3e2a9527ff..7fc6841e30 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -11,8 +11,8 @@ Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release 3) Click on the [Update irs-registry-client Version workflow](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/update-registry-library.yaml). -4) The irs lib version in (irs)[https://github.com/eclipse-tractusx/item-relationship-service/blob/65a42336b7ec7ae50690ec7590d05d8e3b15555a/pom.xml#L76] should align with the potential (newer one)[https://github.com/catenax-ng/tx-traceability-foss/blob/fb1130d4c1dd4f869e61d334310e99bc191fa0c7/pom.xml#L103] in trace-x main -5) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. +4) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. +5) The irs lib version in (irs)[https://github.com/eclipse-tractusx/item-relationship-service/blob/65a42336b7ec7ae50690ec7590d05d8e3b15555a/pom.xml#L76] should align with the potential (newer one)[https://github.com/catenax-ng/tx-traceability-foss/blob/fb1130d4c1dd4f869e61d334310e99bc191fa0c7/pom.xml#L103] in trace-x main 6) A pull request (name: Update irs-registry-client to "Version") will be generated in which you have to make sure the irs lib version is now correct (change it manually if necessary). Check if Actions finish successfully. (If Dash IP Check fails, update the DEPENDENCIES file with the mvn command on the generated pull request branch) 7) Merge the created Pull request and make sure the release branch is deleted afterward (default behaviour). 8) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 From 3a01caef29cb1a9f9b05e2fbdd3582fda8cb4a6a Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 13 Mar 2024 10:21:30 +0100 Subject: [PATCH 74/87] chore(contracts): 421 added user manual documentation --- docs/src/docs/user/user-manual.adoc | 8 ++++++++ .../arc42/user-guide/admin_contract_view.png | Bin 0 -> 418159 bytes 2 files changed, 8 insertions(+) create mode 100644 docs/src/images/arc42/user-guide/admin_contract_view.png diff --git a/docs/src/docs/user/user-manual.adoc b/docs/src/docs/user/user-manual.adoc index 78dc45f3a7..6591398173 100644 --- a/docs/src/docs/user/user-manual.adoc +++ b/docs/src/docs/user/user-manual.adoc @@ -101,6 +101,14 @@ Navigates to the Catena-X portal. Only applicable for the admin user role. Possibility to check the network status based on logfiles and will provide access to configuration possibilities for the application. +==== Contracts View and export + +In the Contracts View an admin user can view contract agreements and sort them by the contract ID. + +Also, it's possible to select contracts and export/download them as a .csv file + +image::https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/main/docs/src/images/arc42/user-guide/admin_contract_view.png[] + ==== Data import functionality With the admin user role, you have the ability to import data into the system. diff --git a/docs/src/images/arc42/user-guide/admin_contract_view.png b/docs/src/images/arc42/user-guide/admin_contract_view.png new file mode 100644 index 0000000000000000000000000000000000000000..0396ac0a454c580be93e96fde03e8ff5177de80f GIT binary patch literal 418159 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 z zOjoL#L`yh$rHj(T4`KSAb1iDbk0UY;MguJaYaZ)jfti{?*faOzUNJ5t52MvVyJ?>I zHUlU}=&nmctiD-ub)v3EO2D!GncPQ=L(kcO&**E;mP0S>rvQ~44uwShC)qYw6GcE% zw9jWI#&&NhoAjc@8S}E^ zXx=>yKHOmXGg}CTKGx%bI{DSN`s?U8-+=Q~IfP7B679UUqUQq^cET7&9=C*Dm>dTl zSl=V^VU)_|L~aw^HFwV7W?ez|CvodAst@~Q&$s}UQlfjjM_3%daLhxgBeTqLX^K%&o93Nzypw=`1|LIrgqmKDW7l`5L9V?G8?y(fYsmsiVs`ED~ z#ws+mjm+x;%jlbc%>EJixf-?HMDJ1D)%Jg3hGezpkH7vMx2k&cC;ip`R?Z>NgR$r~ zhm*G#Z2Xe4)YE*&EVT-sQDHfH&E+v&OyW}`K-Xz5TVk#xCS@!5r1xdKC76=_t+yJD zr85j%`5$eOHIkE12*ST;qdlIEHVRpZ7!(Wxiy#9DKfHgfe61wL@Vjs=VE6fL(_BZB z;Fqk+&O+33XoAdl@@uTOWy+bJGqf5hl!b!~q371t%wIuvBc$S0OErj5=HmS<&H(;LmD4#p6?od?y}Q zV*ngp9JPlgpkC%sqn1?Eom`WrOR)_FaP=lYh`+vLcrLcW@}Mc*@l7-?nT|*ZBG&${ zqj63eZ>BQt@+6ec%m*ScIHO<(Beh1SJxLYoR&<-lH{!?T?`?bZ+c-vrh>-pav^c2cP~pdQl55sdRMny z@m7OJ$#3(*QxY`ze*z4b#oeHU&5U5XPPdZ+CjWb8S!!D$uCJ~I>U*9dnx&O|8TQnq z;;_7c$X%eij$Vi}oBt`AYZS^~V^eKGMgv0*nf1rLfJz)_Q{Nba@(&0TtU&nPMJp|SZ_|`B` zzHREM@eMUVCEKzDZa31!?e!tZlVG|%BhTA0=Tb~^VrJo9U2EM;WJHAmM=AVps5g5! z1)EHj`V!m?g>aC5I9*20wSc40Sa+`_s5%ljG&eX{YCy+Rx1gD5$XTLXcXuHcsUO)Ey7qQ4;cS^TD__0D-L( zlZf>|I)|Isr%N1cWl0-7XC8BY_IKH@3HB{aqglB`Xe6iKIM%b)cJMBvAdzXiYW;MS zT`gXy5m_W^vMo7+^^AWy#(d}>rn%U00^TZUO~Kux5JYSKlgXNU_2cz7L_vk+yKH#R zzKDQVxn1x1eG4#9nbQoke|-1Vt=G`ZtkADm!h9Q%a}7Scsk2}k_Zy_by*O)%YN5^kn+2tc+@_*)T{n^EwUcelaYlUhP@fnSAc6?BL{^YQ6o7 zocJvHn?^_VHx0D#-qkpKJ5z#v^;O5>jdUpsnhZS^ocT`RSi;c#Xvme3o$Fnm3#V_= zs;<|I8P`EF)rGa6Ou`C6fVv{4K>J+GvXQDh5$Q4wFV9sV_m*yhs8 z4$C^an6x}-TNt~STpv#ugMFD^2uR;*4*vDUk1>wDq_f+Qp6PB(-vJ?Lao>et8;o&G z1$&C5vdB$>+S*SEcUq0Mh)QNl(TskWv>8OOKUs&1j=!fU2|t@n@%;ZDpE@<>Z z{zUXN_XD?0iJG~}#m6cGQ&3y&eOzCMWNL(>TaFF=&@P^Ug&s>31?z>vWMFJ`&_Mj5L-Z8{T&-cgE#XeUhkP#J= zT^pWK2|ctZF!YGnXTX|Svq|W4wR76={vIqRmW>FWr_kDgRD!3XuqUQf@N;-a1 zt04;Z&nVdh;QRYRp{)QOC>H|B476Eiu5C&RKkPHSsIAi$ov~%$nIoX(1a;{hK}UixOFB$re*)O_9w|h zPjlQJSFZK;2k|!In@5Rcy?{OlX0T4wsVR}AO)cJmKCISLIn1aP{?|cO1-USXbfqln z&&=J!FYWA%{wAr4v*>Xf{pVxRHO}U6AKWxO##Le;lM@ouHV0-{YTM&XiZ&xH3~qU* z!~UjvV%%e#B_1lViA1jrPf$(WIWp^a>1a#3O~*Xv=QU#F*|R%K3$IlGmbIeq&kef^ zt07ZSQrQVSSuej!Hevk(Gr(jO{_Tbi{&xx{jjDr+qE_H*T>F9_N!revd0Z7(Q&ytG z6`963au56MbD7gbI=reN?~-`KsJUrl(V^h2yld=R8z)>YI$!*r4hJ9%%%dH*5|8T! z7Ug|wZ{3VEKEQtOsfPfhFy3<{uoTr$fa_NVlT=G^&X;aur zGa)YDAse)6@qitKJ3m;WGzY|czR88_Ou~5A-@};CaG6>yA8vfH`EtJCos1)CQJaPH zXw1e1e;Og}(DVFYR?v|)Gz#Oq?%Fn?SE}oaD0FQ8^}tdk*(<6hGu+s?BP0KA%}CG0 zJU9DF!oSjra^;-8aJi9X5fpxfMRw%^<2Q%!y*YC;d8Tst`R!~ZXJ=Njx;l*$;rnU7 zy8EN~2UpUIlS4C(_auNd!MkAeG#@qema`j0oLO9xPj0&PNvk36Bqa=;;)^QqHMhu< z15W5Wt=7#kM{oPwjj)H$-<8?S#+9$d&6QWEBgFsDKj|N?fPGa1XyV9Pbop?&Q}SOq z44^a*CJ$E;irAu(%Sl3Q(+eDyz|}`4I^Dq_YcND$u(D6Lr83`J2BPF0^57y-j$nle z?RD|ujuf_=nIZTD`6tdJlNU%v6w)h;f7E*}dD6Yp&#HT)Q29@GMZ>pq^|-Vn!8PGU z$i#dhL7(_2m$zew0Y|e8mvPA6`{Kh#^+hc0$In-!--8;BF)Z(quvk#)rDBCI=F~qQ zjnMf%A9=NpdA3Av1Y-JO{`|_f;57CUyz~wVpX?lGL8AMF-HU60W^5)0+n^~$ZBf6Z z99FETgZ`E0y_vWan_amyw3Et#i#ROD(Vdi7)$@gw)WlTiTQIoJcxNfXokUwbia0&W zaJ$^Jk?l(CfiAKkvk%LI&p+YZ5n=Z{$czsIB8UCT^8I{ihCg4GVY-AY|`XP=Zzbe}iB>&EynNh|^6!KCcVO@H1N4UY zE9y6N2Cil+CyGta8i?udtAH|FCJ#^h7gR_ZsuIHM@=%1}v~pEA(n+{kk-(KpU2$s! z^-Kq0%?vvytL%u|w4%z5WqnAvwnQ+3vQnV{@>}W)FXpMr5s1d*3qNU_ixxYbw`DR;Fq-wcmsf#k#$uA%?{LldRcVsx5`aJbV694mFlf z1u#YCK&j)HGG+#I_?eGN5M`*>$1iUxW-U~ZRcF2`q42Z)72$QdNuR0$GxDxYiR5*L z4P=Be=-0ee+)yF(>^HiX`LL-lVz)%=JU=scG}zkChuxh87BrRnFZ^OMvBg?jcmkuw z+MNX(17Ay=(?WrNO^WAe!PXS+cH*07``<`)<$&Ite|?)g&~YQeK|7f1m98fHa>{1GexFJ*6L-@Kw{D zuIlz~#|cpO{W@5J|E;=_PLV_a?phxoEV{~UavA(h#au_( zlz^JCw4FO8S2jIp)cQbGDrML*RxO6!jwL{(y|-LiPd-#VNlAs#jEQDXH-oUzWnMiK z?cR(Y-98L$+WJYhR);g_F+^VSav?i8wRr9Zn%|_Ia#yys6_i1Gg9jstn2K$vNH0f1 z2$=4hi8Z8AHBBy#M5X!(-5<`2n12(+C--E=@W4>b#_WX~z!*7@}22 z3ynKu#9o_K;}}cM8eLZL%tMj^<&zKB(Z2fC8WnORAE(E{Y-ROg;ANs6hf7M&<)&t& z`N;Jf4lej}h%0cBnJfD0nJugK3<1Q-dv52Ubq;mECjK7| zWviw)ryzJVLpkfe?tp(jkfU*$pm+0~wU?Mu{PW{(Ud)y+s>AiN>(H|g7(hMntS9$6 zo1-xk?%!3u|9l_c9&{>Tv|Hc~p|A7*hYOA(W(5;poPYP%2`?o%H%VZ*a`!{QV8RR^`prlhQ#05%Ju(n<>I^MoUF6S+IgKb^IP$$ z3fw8Gy~8)Ir>6N0Zm#8@+It&kQlBg=*!^Re&mG@y>H7bg>>E5t63wfWtubS$xUol; zjCsHoe0rwdoP8d?5(Qo0=wMjaP#TH}nqJ1v4aj^r+cMHXyVSfU=oWndNI&k}`y|d> z_IO0y+><>sCnj0k_a2D6)=$KTh{_-IH$SNEo--RS`sk;tl{cL_qa?}54k`2<$Xv+8 zKVVe=uoYaNK&(kEI!wOk7P3N2j)lrUg?`@U*pYpiT+AW1p%S9@aU$rYzBN~)xwU$j ze=byD`caqWC1kYvk%aFfgIrhdK=W8C{X;sr@j(*Ee3rALYfx0X!ud9*x87O0=kt+| z?||Mt7}Lj@+kZl+GW$o*xQ`cAbv#vGJj|;8WzgBL$>TGZ>n(&?wI|6ZdEliq<(P}R zj$6}{LSnsazj~^*`@qV*JsQ_Dm?E?=dUNU|bz0fy>E29@=84T}bHS+ZE;e4K6W@AH*g%TfYgKP;DV5=@-95 z_`tv7HwuV1ad;beoU~tM@6P8T880DAPVo>xHg~lPZF*Sr9DwUH3fojHBQrF9s$$)9qeio! z(|^B3LW%BdG_y!52JPx#*@9?!&TCZsW`?{TBmQpC(hYNPf?;?hEvgBfuF|*B4E;H) z5VKbs{r3|S)tIP6aG~atX5mN5a}e7|uN<8&u=|Nn0W*N{33#P3PUvlh3Xg*==SmLRpa5yQmyEHo z#t+rW81HO$#eaPKI0IM_Wawv;l-*a>;`?ll7kR^?^e5PI-Bj{vw_Hp9~w-1Si8x!?uNu1}rGC;7O_*rqshgK*WLm zu;%E6)m$PWD5fG1;p{po&rC{p+HkvJ3P9dw{?fP#iqMA3WT{VSU4A?el;SM86M+t4 ztbPkWjCGpKs_7+T9`XaTRg7DGR{O%&y8EdqOixdNhb-JG1r37)#H#fsy>5r0QJV_( zoD*r3`$+#e@b=gxr2vGu^;LVZWx=bPPF6}p~0hM4lw?&Gq$(?R!s$QHC2 z3~IrVF{v2}O3WW3`ggJmC6X8EW+okll~3dT!Mg4J@Q8Nf`ANq-CX z(r58&0O-4)>47X2^CtjaX%^axBgP^oRY5i%Xs?oLuANkt+2nw5PpjSqkzT(&JRE6K zIdQ@T5h)wCVWTbVs+6^cCWQe(%!ZQQxXI`~+C#W4cxVH~!tg?BiMYx)KNWJTVi#z(3n!29(1K6{zTLH03YX1b5oEmi)HDR;| z;(U_1rtD+NC%|u2oA)AkneC~t;Qchb5j{wd?_2iuM&RF;!ghjLE4u-e`0mk0~Y`tjv>@}Xb zanymH<$z@~@6+YHHsm4AwYwYu<^A2X9>=S$_CtRwRrEuMW4K8s0JPjR$p{r*#C6gP zn1>>6(spH9+(?9r+F?2LoRz34sEh9Niai=}jqkDdrtn|p*y*7cPm2SOZr;_8b+hP% zOT<5teJp$TeEHr8t;>9)h2`Ri$nPYCDN)-a5n5lx4JtcMLmze2UNn1kC_|`pDdW3O z@pP;AMa)a%JCrmr#s{@MGbJ*`EVXcUMi-k~GB$x>7OSb{v^Z-fSFal_~r}9$e&7Xv!clq})K+xIB+Np6)|!CW0zX-ruUB=Qz=9{mdc$r!lTG z^2RGV6r)wu`ny9sx17Zy z?~~n_8Rdqd@fNPdiLzNd(ro}c{c+eUFHl3Tl(pP869%f?HwgR~068OzfsuSNs z`vJ3{SQK09$euT2KyvQ{qtjQm=@*j(Lf{VXq#lpIVaMbkWnz2A zFSMXRTJL1Nr?%h949T4SRbm$$_ak;ic|++QW;h#tmD?w>uI7&1z|#u(?uHNdHmIdj z8TRuUi-ievxArB}b?y}*6Bt(SqCX%vt-n7SF$poYMHXStl8VBvQy3Ap=Q`=7qo_S6 zQ4!Q*L?VBE*Gk041)oIO)>E2~@c~~oI4fQP3w=byLTf2Ke`p3txS=8_Ui4oA)rBx- z%GXRenl-D-lsPul!&Af?1udmG1<6_ML8UMlG%C1!SPD@b`$Qh4b)(zNrFQP%=&C!5 zN!0miWFby=tXL=S`3nQSJC5#<{yVs4aotb$}3uJ#gUDCQ}60Cq-X$eM_2H&rx>Azgh zSKU=P&?xt2-4La#07zG^cGWx4m+-l`cxg(ntzDY)lC^65qdJbcBr<~p^#ht6yECcb zX8+Y?CyP2hMBSoz&9wkKJ9x{fne{vkYdDuSJ~H^>pZkC#$)83tSn+MrX-LjHj!tR8 z_``IhCE8C(PN|jw-Wrqol}W!HmL$f2x=t?Twilk?5!6al-9yQ5u0a!!Z^}S7dfm}! zB058~T>fDiP@=>9r;mZO1*DrzPnKy7_*Bj7eB!?aqWO8Yk$CjX{Z|(kRvt8GhAO@d z&;iW;8FbY0FVV_tT-R;XSAaK3Jdtl9N_Ui5onhPAJahWxa|FpQunvnuvz{mhP&|e< z4@@Y=F5ML2@9uS~KdI+F4Qeh*)!->ASWrCE^biO=y3RZCGrg%k#0HGk_ghWW4;vD` z`Dhk0#TJh3PngX|V^En6sIv-kI)06ouF_5Zr?Y5{z4W37^c&(LAYwTldrjI~CB^!S zn2#y@p~?s?Qx@odT8V0V1YA1w2h(`n=*d;uHjyfh zrVMQp=Cdf=PG`MF)hU@zR%^Hb|~ioR>r1 zY&XBzVb70Y{gzSS4de;WOp@=O+nQO*W{Gt|%C{Aot0=J>cs7)Xyi-( z4pPG}9F`tJI7Y=t9Eoz??6)8=2!)X{Yaz#tWB^@n{+@Cr89bGY!rv;oMxKi zDYHXv5n-#A^($O4e(wWwS>N{(V{>1sA;tcsB!0|h^!Y|4^qPLp3+d3qq>9Z4KdDs|NpO>z=ooI@BXTe;gk^(SbFpC-Bjj3?glM4lL%zGm;SCksBl z5Rt+FX9<&D(&2r??}5e-a~>hBbli`o8aTn^WUzby>CN|+9pS9B4k67 zxg~BV8wpgGf^ufV5XvPN-&@($6Op^|!tLG|k<>HM9VR0D=hn~(N9gbzw|kN(k@+IL|L)C_U8{MTD1UJ5{ZZ;kN%rFB!b6PmP{#X}{rZ(G zOmupD=BLiTs}v@x!VIYSOY?9Lt%}U&89^C?&BAM&-0m7r?*Ys!j1ibcpoPfdR2Qvsn0VcZB{C z5>qpMSuTM1J?V0Fzh3JR9odNAhXOoXzIGhktxG!5Ipyrw2+|ZIue+f@bx&o!WfX9m5r$Xw>rjv6R5Z z|5>A8abWVcMoAb4AH!UhyrCPR%&yxG|yxmsyB zHCAlMg{W!b&=Z5x{YlC=7SF}!Cq{{lBicG8Lj6%5d2NNA_-TMrqPth)GV7114_@T( z&zY}EJ)!R+JBUuRN!FKiSuUEbnBDOM?lIpDZHwTnu0d6|C;YpsDT3^-rnvKF@kZfw z8oHd&<|fh)1FMG}(Q;0h)~JKdjFb_|C>lcF*PX!kRZscD-4g%l@cF|Vk*#~`ruDgQ zM>CGY{rYE&ByG`7&l`KcGbZ?ssUKW{03qaTC( zH6Es*T2L`;|Hc?9+NILZ!58~u=#dgC?v4q#12EK4~rX@q_v5%uX z_>Ttojxq94^ZkZy8DZr9nu}_Im>-G$Ki=Lls?Duy!==TGOK~aC;_mK{QoJqhR$Pj^ z71vUVySux)y9bBj4naeJob0{d@7wSB#`%5zJtHGyJ;{@qwdPv)oY$Qw2y=Gh8c!3- zaSWrmaYbM{D3G-LkJ78xND*un4ZKQ5yF+xjM6DPl3kTQot8Sl3nSSif{`yLTlNaWD zxf(mn@G4IE4Ho*!fx6Ldvp;_sbii>+m2_=`1Dz~ZDh%H|c`6YrUXKwgo*bHuHCtOc z-cyHK)aGxSGF+zHxzFwBQNTrmmVRqn>|XY^Cw9W_D}4~gM$yVUk+UKHtL&Yg<^AZe zXH&Y=g92o8miP=J2=kfzPtmSo(J#?=f53V7MqEM!oaeS12j~>(deP^z6F?(g)8^nk zMHp4Z_TA>sJi2=rZDMGj(A&YZ{d+&=(62cn@+p)z0{jOH)jk+f!i2I09%ip>y~v(d zA?)T-q*jEj+q-@AI+3dRXzX;af4Mj)8hg~1VmP_`jLbN3f9V)4(rcVZ4&JU?{?RR< zs2!D9u~40~V610JC>T??RCR?N`-oFr5r0sa06*h_SWY_48|%kv)l43?se3i4Mq2UX ze^0-6wX~ty=})c&aN2R1eSeu1uI76Jl}`Y6lOhT1zrL^b9UV7c+4-C#JR!%Dmv&P;!Pux3o{zt&-aKtpAsT6)I-guCv%^ZOU z8Pl`dPp(%jeDChNN2h{JZbJ%ymntILHj%>s1_5$}zjROlYHCJV-rfb7d@(+?r23us?{xX8sTyPdDj-ds-B z=vLa1xa_7+DwG%dbfRx0vVw2lE4XDJG2omR`G81uIr-Bn56W*dt%5dgsPohN?mi?S!(hG=ix8H9tVF7zfc5`7lait5~nX*2rxw< zVGH&x83p>t;j~}ShX(8)X<{jh^64IKTVm9j)HG3=Mc(LCIDfs(#0l*<6nNKV`1_Sy z_&g1FXlCBgu^Q_cNEq2l^i&lKZ9LJ^cQ6YVsCW`%+>+V9KgDBnp*|ItZYLe3@JA$k zY0!^mm!$ezOHU$`R}t~(8p_!x^8Z&b|6R`|f!@gZHCVa#C28bcai*aLje3QCuo@QY zP-&r35HuG9vc3`tMp_{A+lQpFyH)9=67trY!v}J)Q8%x`Pg!4uihajfX*Wg|?Bw#l z^?vpiDoZi}Kl&zT&5Z~155yEUsY|(=eMqd@9joXCAuqR{rOoVyVWklT0<^JohR~3N zTfP!celAiCzt`qQD%|b_jZ?kx`36iP;^2Q4{c3v5BCr}V`=h2^w~LRttK|2N=kJKJ zYOny;<5Jyo0w`urZa@!c3@kpZAd{@R(V`Iy4Lr2@GqoU+UiW1`19kEsE4an4115W{ zPLU1OPTW>AGU8sW*FT5uSh$VsJ#KxvA<}B)90#OW3%DEnyiZ7S38gGv3Frvl@O%9v zWFWoSg>E?43UnL=Kyr4o(@P)O%SaT}+18MMWzijXg05sa4<6Es`M^+r&Iy&a5TP-{ z>ri%sOd&O#;w%Do;@Y2-mnVfX}DAoBBIAQ(G)C>^1bWigXY3juNorprIIWo$U_%V}jYVsVg-m2cL^|;Dc4)Bx1v)bvH&}uXjct2a+ z+hT>Di8W@pbkvgBNv1{GvKZB5y_Ag#&8b3LrofA_X-=KCer)6|qn($UL(Vq1Y9svH0xAq>`j(7`h=j8bAKZ}ralAxbRj&hKCnN{Ht7J|tm|ncOA9Q{#T3$uo|D<^9 zux^>D!cK2~W&4d-76eK{rZT8Fd=YGS?{fksZioD^4xew_NPgDrD0PQWk<2#kfK3h% zOG;YQwNtC;MOx~|2!Wh@yAG8fG=kk}gTi{=jO~H(c0hupvLCto1i7@dDvxgTS&Z>> zIN-~jKx8>o2F%bOQW6L-eDJ5UYQ3W~Ge@;ME$JIggb)vcg+t=q69w^yWRz>+x%W^^ z!xPk~yy40cQbF6Vp0BC_5khu^dv1Lx|Q!0AkE(%4UQI0UvjFxPbLorB9Qv6Hpmr1oMD9#05{ z;Z39~OK-gOj5M8nbuKqcB%}*h4I^XUm2?BZBw0qv5WZhl9o~>0cI%0oWW$72dduDF zD_|RAxN96#^vy_y2wYyub4<&CyIB>y0RX|bCj|Vk6I(0n<1ObLo)P-Rb zw?gmNUwwU%N&N?-h_7L^s>4H11~S|<4Sg7=?VMm{HSoX&y%i#reYa&YWQ>2!Vi3E< zOxIAc^w}YC=WNI<8e4zT@M7=sZ2?`9tH&Fi5RyIX5cYXggT$7bA3AN=Ct{iS9!nXg z9Dc#l-gXG08tMc%Jxd)#@zBFA63b@V42LpddeBgZ<^4krGP!n z1}TAbh??ubeF`47`$8yF2h8O7BDupCaXS%4QT*OYd7g7McIhTg)R|D?LemgEOGEwV zKD*M9LH${g?sdui7T0kj%Ya%5G)R}SUzIIYk93Qat6O;L^&F+-VX01VrBMc#W_vXD zAhsaECyyJqD(U-60S_asT)mNdU54(>8nQ8$6TB~qwY>50^{Ls3xHkb#;)#gKu< zQjZgJL&MfdMC@V#HPVb;8-+{Np)yWC06cobr?+y;C@pFsBeWX(z((3R>C+W&aQLSy z_HJN>npi3_UCeSI7kNja%QU#n$)mDElg+v_wTY)OUrauI?oTVLQsmaPTsUsfESp9gRie zAcX9fg+37cAZk}ZN_+aUJ6g0&`U!=`!lwIWQk(zG6?mpJ?`jvyH4X1a@fTJx;)TO& zU63o07l=bl(*NYeI`kmLJMXJI_EMEUCwqkZ4qx3w2ddA_@^f=`w%#`AXE@h*bzY|% z@^O+N5FDA&N3fKg*YO6>bS|ILNYp(eLDBzdU`|E0fxHbSw}|LOhML-|@LcNGrq;i- z`1klZXYT=yOMZ@jNZosoYB1Obwvwq8d*lZ{Z!E{snqVcm?h2k^w=BZQH43Sm{1A;* zv4qVJyCJH(~M36)xl{TO(C@g)g^7awL=t z{U+zWLH`E4+{!v~aUww8y+vN$5pUpV?0_xVLN04*8jEge2$g+e#t8kBWV~!`*+y}5 zj`c3rN#4!5ADJzS>mggIHJ9q)&U0(|MCwqXP#yy`ZIX({(o65fHfFn9dRAmZo#~rs zAAl0Xw%3$^zemWQu_JPFbT?)pGvRpFejQBD9YdYV{CSTT;I#JbN$AQaZc_*XNBhDOttS6glyt(Pv{Fy3mK3_Z}i`};~t2i$(@Od3%=|C-CjGXy_$dcPP^b?rWbS31xi-oF<`!sO!ZN( zS4}w~g9w#!Ut^DjH!AwF*s^_jKCm@x&mdPXWXjA+ImV<~YB~Cr+>qBogr<5UAjbLo z^J>_8oSqCjA`&a^FA5Bu@h2_6gwAA^7zkI+p`(8j7Og*#PTyV1*(|4wq42zZ9qJ!} z$oq8-tKCi7t8K(oX4|WTTxN=|NAxIe3cb4ALj3F_-(5!HCba<*OjwSW{2zB#5FXf! zQ2Rcn*IAiIH!_Myvx`F1*Sv8Cy$nW$KgBwuj!Y2Y>$BkQwQ0y6hQm(*d#QWqH?c$d zUSyh^kOO8vHJ>-V>cr5z*8bReh%IUVg--U(S+Tw2+9UCU#w#UafrGc@2JI`M3E2XZFi$~F{U9&#!vZn|m<^cSr`NMO<}PR9#qt3=D` zPxy%~ zf-lTQwa zR(Hl6q2ye?i^F<*aMd4^VVoGd@BybDDyDbYIfHp2mS))1MY1?0qz0kigWLf@!kc+V zqsNlide$(=Vu^G6?+E?!&38*>3NG3g|3DUF$O#cak8fUEK+{Y`h8QS$JI({V#>C6L z&zp>&%wu!qDLmQkYa=;`WDt0(xfzeYZ%%pp%Xz)KG%64|+?ZiJNI{FSgtvGKXXD7y zDs*Ju=)IfK?dR1*K(j_Jufv~9O(&M6{~iy(e`yqSj;Xe-7Is=U5%+7)*m-#A+La|_ z@>?}lPb?4@vnKo{g;j|8z1$|xvBK%-{R*#K;-lYU>>Y+ailf$V-P67h_w}E!ZiYLJ zb|NkzO)Vi6@4&sy5K~`VP&7@g$+5XTyx-W0DVQa^G4c z@9Jh!u0zEFk`pS`rt^M*qC>{Y>(~wK(@*A4?)IKMWOK{PB_K0;LF}JXkfczDV!SgL z=pn(NQhoIG$!jr5BN$}y1O{1rp9f{{!%ow2?U?`x$>FE}Q+xK_@8G5Vjjc6Vb#fFt zfzX!rqgRla3FSwpbHbdTA_`AjmP&3fnW%-tb1FoBY@(w>anxUh{{$s;+1GY214Bl! zgiIuU;z^vQ!K&49<8R2npswz3F7?r_7uW_p1H4pSko_iQa4rdZ3Xd0XrMKq2frZxx z#Isv?hCc1^Jdu0bO?J$I9Ui2|oUN(5m}GA zqEn}Ftw^55U2v()pc(gd>tAmq8Ijc zVRWc%Q6M>~al~Wrej&KjLbLNSxq$2;eZNprA+2Wx{!VXi?PMm$Ajd*NILf#?J(Mrc zwgux`Czt+J!nX~(>bMS@9*wYFpW&;dUZanm?? z(G4x%<&zp%#xUaRabRTPL2i%b?#r{jhFSFoiAb{2ul!82<4u`5>!2Idm?marnWF*t z-j5*9j^?*CLc3mdWtlpe2FFoXpXF3Sde~MO#LzAVxZjB;V zi)Kyt&f(fo8H%H!?5ku-j!udnO5&!3Jk5HVd6_ywSrF_P)UZZ%@@| zl#hH3xk9sql29$NznT6OHF}`X=a>8)uMz6d$oNtIf0hT@VU>4c;S9-wioS_el0;wq zmeY(3yea5B*jlw<4Q2~Wz9;r)p0=^K%6W34+)Iuhd*F+kdh{8)f^hb=Yzk~dW>mqik5Lsj<4d0I@Pf6< zDNyP5#A`wtqelxS3-Vyds|CM4w^74GPb59a+djs!!rqiZhEMP|u5>Y3v+FQw`4{#1 zo72H_KCC}{Lwq^R^*GiBsxhE!TN?by$C?WV4912Ib1omih3<&-T~n`hiHus!6B0ON zCf#k%&1EWOH?6GsjdEpl_OqH9X#u{(R=4im>bnhE;%!ZPo0D-MI5^ zGvEeQU|Faxr;x9igt)T;>G((7Nm*=+yS}!eGS471Qo|iNoIqfayWb|=)w?v}g1xyd zA+x{_nWpPz;JZBjM_6Q7KJsj^5!DcggNrzvh72)#UGWY z*X~M?^zRV=g(JzsAO7`v9MiF3b)Vl7Mf(yA)|aeol}ci+4iiqfb^JwTYz>vbpP^Yv zBmd30U@7A5V}#zGw?SBC(CrPVG2WO%=S3d1IZ8u)yw-*y*l#1TXj%+K-*MhEZVs@R8E*I}&CiW=%>tr)<|8ty z(a5=L(F2~WN7bru2@e@len3SbW0<{BL8W5nrMyc4jR{L*HP6^vORP#M0p*SR+GxG_ zQ`v_E15qd^wL&fLbcxQ3rO#*@QUQw0EV87!5%+opAm14GY0*Z^E{{$)oy^40j|+N< zFg{w#rhI3XyKukPe2R)UfSt$3U=->&K=9Q^kYF_g^O}0kll*fx{fV#K1L8r$A;U(H zEfe!G9Q$Tri9&0T7aR4%AdzwM-tpnlcYEdNdU17xN(hdv!9Vsku?lgGD zRmXS*UqcyC_xgzvE&*+UFjHZ`2}j{b)g9+249{2}Eeyjm&cN`D6wy|!hABoZQ2xO` z*LhZ^m2;jCj}a<&&+|SddRB_0Ys#a4%{LRlTSsAr>-H-u)h<$wolD*d)nq|A68H@8 z#Y4gtZ>^`VG~bdH)a3k*4km`-8Hon3zI+4qT$74sPdLHxYQ^&#MR}(F!&EtDa7eR zdGYfFq^8VCsBwr=NPA22EeY^?;@-RshG#sRa4eqGiP3tRaE1lY#J9lf65cT7HjeCY zU}(%up5vJQ>3-hp_Z0TIdF?tJjzb8#D7j8}Fg#;WyzMim(9Y0m&jJk3_>}5h0oyR| zN)zW7Y%%{mvruWw3WPEEL9>Pie%}u+bW99-9}1|_U|chhIredtKlEbI;-~E-u#+^3Rti4;M}2xq|JDS zoec{kGh(^r#bV8nxiJKG#^?vl+9p+WMNXxFlQ9ZswQcHe{>WI0YWpk(CtO~buEruG zwbY2#ci|Yf^op_>M88se>d;q}BCjT=6WVXY=7~AXhVSwYmW;Lf(40p4H~H-kA`c{lgW-Z_;3Um8 zB|n{No?WOO^b}KG4DfOG_>70`c};|-+P?8U75a*bjCGfRLF2#-V=}>fpQ+t9RWV(L z#!N+oy*q1|T?A!4#zD8l(``EI@&FX)o{19=OwObXicEdc3tJHzT2iYtd#MX~$CL=w zpw~uf+Owk#WS!V=JwCi6VlO?Ye)(1OF?`{ET?FK`d=SW}7zZzcQZ;)dQ?w*2cXOgE zD`=~;|HwvtQ%EXmM$VaPq|Os_(1XnKaqD&`1NZ9+1A=%bDzN5Rq3w~#C1shv zcAc+LVk^CN1os$qf3${Oc>fpkbMW0g{}<6WK)=~*-4ztcVZI?}uZC`D08Y@bd z@=HdsvA=B&nh#(WBQhPsy35s0!t^ZOL1_yKs1Ot>7r47hrz<#AKzJTWV-D$rTNRM$7h z=*j60z$(N5i=yw9K-LLJfg@Gm7K&lZYI=LysSQz2&bz>@x808Bs5WlehU1pS!C(KR zUg->uF)ZI3oVm8qFs8!^BvKCgQNzT+RU4v9hz$s%we@2E!)qDkKD{9#eols~Jc zeQDk&ED1z`Qi2OYj)Vj~e!n#^MPv z8wsE;EwIamUYeR6)D8E6cnK^53QaoiWo%1i*+dO;j;8g5D;l zK&4oFDQI%s>^-6otCo-IHX*wh+vt;M*8|~v+k<(~06`VqkwU&c`xU1t*v@3APBBF^ zGZU{IBdut{q~OLQ&Nb`$XC;PGV;2t5{*jFkYo926tYXR9i@>_slIe>wuSiP+pe26R zDZD}XXcAtK_6wBDM`Iz#eZ#A?&m?|m+Z+^s@>GXLl;)5)5h`gk;<^To0$Rt4X5T7UV0tM{U7|I zLA9apcd9|aGxn$d;1?r0LoTRm@7#*P?Qhq=Xiw*d*#)^)04#7;VSeH77?x03VSt{nx?`7xBy0H+e;B%YK9tjwxG0IlTbauJZB19B6T~SC4%gMT_q%_AAQD~M?~$2CBbGr~a0wGv-pVv{ zzT_vpZe{DOU3;m%FKwEgmW>`ym;C#@qM<8ob4_1i$12DA{HT%fX9owTO;HuN`UZ}Um)deJ{)lOe&->}ZA_|efmLe}=gVC^F$J_?dHVIDb69=rX6$~%Jmii{A%$WV`)-4C^ z^Ubsafr-nof6Z}GWA zRMW6kacD4C!7?jG-+1^ew?-37P79o682yMawc2fj{&hRC+tR>Sa%8YVIhEM$O#;DyXFc>aKzB_;8=qF{VzBGXh^D|~{ zhNPn2J<;x3(~g z*E0=KVm%neFK21tfoq$8!GXy{Pkh^4?yPrdl2a+7cS3L6Szo+AfS57QTU_flN2~T6-+Z-TZ;9+hkP*snA|33ZM59w%<-%@kzJJ1${P4$m(JZO zN5)@Co}_Qr37OrmmlRvwgaCJyJ-u1uLmOniA46SPLcK=SPqpLL;8{U-``*cAQmpl5)S6Io~XG{ZD;Qf4x%f!Ul-WH#zh zj^67IRu!se{^{js1YgHWp$2&9)*@y=&Xd#+WV~Mz9hWZ&mnp8Qda&j(3A|JHb~IR+=z-4rQ{T8G{EZ(dmGRD>PNy&NWA} z=Od$2?Mha*@S7jzA9|GsSa$~ywqMF9vaML(?70~;JB&&pe;V|*sPrK%d|aS!OVRjj zOH5~Z!qwH+bRULD3hg9Vlol9bW$xfJCs&{18a#f=e9i4#C#*4#c=URO=|H8W_4PM+ zrpSBG@AckzjSQ?muO8p7)ez_?38>aF6Wqi#dQ3+Rshx~bQBKv0sZ$b3??FxhIkif) zCade%;scnCoeBw`)ZDmbg*96{P}=^88Jp$k$=A#q{OA*5l@Y=zqs;iin-@Km)#G>h zvim-9A;B_Gy9L4Gx`L2e{tG$D4>JpGOEVqp{0$6WYh>5Ok)hvr$O3q4D~Q~T_i6S` zm~=u=iMRA|muR7Y(+9m#tcSI$oh6|i#jl%;T~v{X(ulVMDk9#Lqn_+;n`y;aMU&!t zSLJV}Gs&ejr0|vWL-YB5fwM$JRwCD|{#rc#yux2}jjigd^fMgFc(PNEFM$?yXx@H) z)o69x6twWXccF7t=!|1Q4UrnwkWkfN3&)m*j~d;f4)7UFMai>U!g2NW%p(kWd&;li zO(wC)L{lxs+p^sx-8oZ|a-jGtk)zgZcZo3j_G}5(k-FZ zY{9QS-}k%KHXEzT2@Q6-A-4I$0-JLO609!T%7dPns-k9Yh`XAYe*hhaJk2U);0o%N zZqPGQMyB=Xrj`xy%+D8o1=~DYMxE8f4_z+TQeeIr7#A$adm-OM`nP8dV{BlQtuzT9 z7!#H;{~Bo^$u6LZ39n3JlVS%umj6(Q`5t3j>wIMN}>b9Y@*&S)~yqV9-HU{$i&&5u%wQF zoX%bmMZaSfQ**?pkU6n#LEkY7NwAOIvz?$}0WNk?Dh^UGpP>|Y=@`r0xMbON;9y?- z*vw}DbD5xQey3Dt+Q$tS!SB&(%~YCd2mjDJ?99Uuq6l9g)<1BY&ydP9CN5z%AR4lAL(`pYO)p+V@> z?Df*t55mE0$b0^?18iwQQp)7@NE0Gu%kAjHx>f!8fwD+Q1=57md|&LuUT==p&l68J zo8KRE`~`sX`2&66beu82Jz00P6)V@P94f<3HPx=DrXJc015g|bKhs!|K8g`SGzM@} zi|L>UuOVY~8~vuc%1yrEeMF5axCD2#vie%)_A)dnE@iJoPz=bCS{T~E8j1tRx_##^ z;akziK9{Q7b;hd@xkPo8GYK7miQ#wj02sP%8xK|kh z;0Ix@w|>N3af2Z%vCFOb2SMJ7Yd=}}$6(&ZNa*O*BKa8J$*MdsdLW%%_5|+mtbV^5 zhwkzgbCN)G3P_PRj$6qUh8{h53pZ*GCQF>~f|S%QMvqlT;|m;kJ=z|8F1j@>KOoi% z@E!)l?7;$%)(6`xLdiirk|qA=f1}&XuWoJ*dXP{RuRhwmp3!;mV4n_`0!Bh_5@dV3cG$tzw3jfBJ2A}V^*Su zAv{h)QVBcpMh_E-)ne6ip=S2RVtEju@6H2)E%$^5=Et3KPQ7vwHK!v4YmETbtTARm zTxsc_bL_Z1UQBtT%Q!K`Wv$_a z(069(vYx3n^0Lr6n_`>o@dBZc`9v;lF#(_N)JSHv^Z|p9S>GYB8n!U^i?GIg zDHQMGbn}n|%a1LaLAqtk4lnJD_Y{Y)iiL{gv;GZ8Rp{av3M4jlYxwq_{htGfH-815 z`b$w7j_*0EW!Rr^;lDlA8{P+Pn8)@mlv3ovy7WRqqQBkP+~(Sw(_I$V4p|W8^zn{2 zSV+mIzal8Zc-b6$)C<|r3|1@qLfJ9&P~`nkq%%`+%D_|fdaUq=ll5rV8%rON1wh#LcWAB zQ%cgN0~ue$3uXaXhYz_UhnE!E7%b)#PQaF{a)APsihIK;wdDi)5tvmx&e-$XD8KiyvqjQBhIgr z(}yD?ATt91KWc!$RXnOjdkQ5F1$Cy!pc`?x;?6CqS`gp(ANT30{S z3ybLo&VE0~I0Yh=^BK9?e1Pyt@M17~Oek6PWSjvL@q|s<0KG9!{%~)Tz54AwJ#)pt zPF+W79Kt-U`>FZc9{+kJywm%(tz=&R!K?@4TiKrWdelnP_4gdaI5!Q=IH~&hLbQKs z8vz3KmMFbYDyA=@e5NJvJd~K!M9?QB_`$pSQv2gAmj@TNLEH{&&Uq;FDj!=h0w%(| z(rx}C>9lYaYmah<90Usx(W zY13HJ=S}NCdA^VRFZJzhuN1jNG%59>UEG+Ungmp(AqR?YAE{mURv)MBPS53h=Erxk zKy8utxyP86swt>3rPMc%_)=<_wlthISIqvw~fEX7nEU8rX3dNqi!97Xq z4i~~Psi6x_orBWbegVkQNhaI2V>3>Df;L|LrFH3H-DMTsUoegZFh3j^>aT=oha%GE zp)ShY_i(@O-OxoFBEyTKWzrR69=Q54>Yw(iu|bi&y?ge~3M+y_?S5moFLU5-!vFG| zg&#(&;^%QQBF%^UjJ2}aAxx!Bk!~Bim~AV=Ts$&o$obZ2B`Q}_yB?ya8(jF7Zsx`6 zrQ<=NkP}8y_bc;9HhZXUh|qVTG7#JMn~Hf2cIl0_A#Y2o@x4ds7r^9~M<;>|crtHn z$s=g>v)v#Ksu3C8YI^?a5S5>lokPgd+(^!?(eF^;79{e@9RStvZ}30@;m*EJYp*=b zZuyZlM!$U834jv9OAa`lm}z0Ml1FV)v)x_%!()wPJ0-{)B4&|?B#`Kg94Y&Q;@6!gh+jY#%lY-ro+D;8IhMu$px z_Qlb+D6txCH>DGxgN_WnDONl~BGRq#6Oj*DQ^y93&37mr?hfm?4`? z&iYlRPtZlVQ|?djBqy zOE&FI2C3Clbi(W@q-p3C8NbwWh)xE*uUieqH^r@~=4z6drpG-G!+_zOCL`VBkA8$8 zP0FSCGkg!|l*G`l8FfcUy4?5Um&7?(wjpFV z7JE`H+8yJwE|?H969KM!c4XVe4y0pLVI)_s*^d43**|ScUWk&{)+1$1rK1;7ckw0a(>!BFgPJ7u_Jse6X?IiM0!;QS_d}1hgCR~zyxu~sqT$){zZvsj)@rBtst7p z&&n&N%HDWu8oX9HYBmGet<~x`Cq++iJRgpD>SuZoEp|Wz&6>ZMTQm;w4sYf zy6CP)o~o0I7u$(9JM@U|`c-&qpc{Kr9Hq0Vyjb%mE&aQY>4t5M=BAoY3-CN6aM!2C z3S6ap`E^vq<|30BZSNy z^hHg$BVse~u6cRY+p|2@({m(Yd-{;FiEz|OxPODUEwso=~|>mgggx;Y@Fxa3we!C>&Z6g$!;Zs zWz$W-oh`BOMT{ZKv*()aVKncMLnLzIzQ}-4BLoIesJqK{nUapJ{<@DVbb7Z7D>&|& zRpDgW=9A;@t+1&B{T2{0aj&W%-+tRxbMgy0Q=yN?+&Xr)!P5J8kQ-q8Ioz23sR+V; zPAUFw!znd`kTK&Kh@Y=~}2`&3uF*If6>rUVs{INc=NGW)&W1@fm=Tu3Qe>Lq- z%52yIVjEa&s}z;^cSDA5nz_x(@Uu0y)DY;$>01t{A46|gdjQz{?s$wgHS(*A32nxG zByJbt058BFRhPD#@7j$rC)mIXfb)BQ3G;#%>;hrz>r^4ds>ZcWpHX6%cmfyOH< zA!_R^g*o{9PumhVSPmEao&#%LkLcIOGwPFLbmgR?E={tRXrFlwhNBhyd9E*+O(;U1g>w#wvtgUzEOFQc7ZcZ!R z6r8ml>F9=K@ckSrxsgUP>LjeQOZ058`|Yu?-SZ6Zd{XMRdw=lGRPBz0uYvO89lcK) zEqYDkP6?k{-`4fepHhhOB38eaYNe@y}zTGARJHX5rz) zKXU9pn(PA197VFy+?#)^!>J%AdJc(g@^O1ZEof+I5S|uEbE)1)6ia1Tid?62GZ1{y z`X!_`>hk{6f)liWj@pyizuMStBnX$zDtFz&`-+}1<1uMFSn7<}Yu#)RUSQ&qY)+ax z*Z0(GGsNspvr1Z&Y(KHa#odv!FCS*dxg`5EI`i9UD>@a(X%rR1(nj0@B~LByc@>ici2 zh6%G)LC=uCbUv_?oVLG_rAGzYP6aD)*G=VfbO@W*3?$B2&pQorW}!(|1%Podc&Tn2 z&1*xmrGG9GdaNbv7X~Gtf|D6*yU5}9Sjv^I94mW9Vu0TD0`dE4XA%e7EyqSt=83tI z?pPTY1UaXZWO(tgMZyH@p;`ANm@Ivw?7*fqbNrL~yr=<^{g`x2b(vu+yrOcrgVyZ=u0*ph$!F`PD^r1h;+~>`5iuX)RdP zdTxt$pS3 zdMkH`6Pxm5T!#3m0ZyQ1m5Uin@b8S|(I$V*#Xkhu9t+Xxg7p-K7*7~m) zjK&G`7?b6FPl0Ksw7uS#tc{QW+PjwDfHF;r3IO!f+-09^Qj9X8f19;F%Q5GJXeda5 zj&~_T$|N+4Jox*SEj{Jg<(OK)62~eC`>C$Jk0{N^MS44nlTy8dqdQb^jzVk(e%*o( z-}uS@50URgWVVvplr~$8hf0$RwvQs(_mhgIQVP935GR8I{deiD7wgPI=04}7d1LFg zJCwHZp-xld6K+AjNtBVzrl4!+qdf?Q z|9jH3y6=Sb`8b)ecl_PwBRjkV{D9L-=zlec-MVPoGZ30N&>Bo|sKDb9ZG1#1O;kuy zC0-q@Ye`KRBN$pc=F%eVGx<57;Ffr9oRW<04K^z=%yi)EpRw?e^40gdX-fRSh;vI8 zi_!Uk^nXM9Cpv;hMBo3_Ay#EJpH#85B|rMw{e+iqCp5mN9Vcu*6!~@Nde756r`)q# z#UvGDmUQA6{+J$IFADb14j~JyBQuDBc|_#nkYb8CRHKn%PJ~AO$1~#Z{nxIbw1@>y zF*3_vtLCrtM3Y63(5^Pbzy! z=@)(<8ztFniDbv27<~TArlq@U4dog=lQDBp`TKTkBzpoIvn&qDBRb-~vn2rzF@AnD#-fj2nmbu!c^RiqPJ;xdoEuu#uWVdF&g>u}Dw_%U&%L^Y+7uxqo4j0Ss%wfuGmyXlBdgh zzu;uO_pkh)oy&kU-k7l^p&3Y!e2I-bJ&Ib$GJRHQ!eV4NQ%P+6MTytd;V+rtJzp08B;tDt z-3hN_IHTQ+9d7zHr1V<;%i-GBh1y4unE6NGV*zh!0|t9FNM+Gl&6mE$mK={=tz|O_ z=mp&!V!KD?xC0>JzqMS6WulhS;;iA^f-rS);1I8fY@GW#CN?Dajf;&m=rimBS(Q=P zmY@T(iRTZW;uzSL%_*aI2E|zX9c)mt*7Lt8gTWVBni&sY76iu|ouB zZjDYG*pC5IV=kKQwd6i|HL}dIu#-Q&CvcNF2Vvl$b_;=Bqux%ImQjnAw8M#Z`3g>u zBa`l~I2QrblycCHv(K{)^-r96wX+#vAmJ|JZzXUwNLg1RtuX82dgB&jj}h1g9+C%&Om1JwTcL~DTZmE9 zY)jZ%m>|%Ejt?&$4Qi`phJ`(d6qo5nsQKj$!w(vU85=~CzOwxbXX#A~_g&C0XGBPr z?7TPiwgctb@qz2(UW0E}qrMDmOG`FIhGW#a{(9%)-sss%QEN{RhO@*h@9*5aGN;a! z5_N859{huZ6&P`IWDJ?_s71~*7-ZePZg-UuEKNBdMGZQy`q(y{#ydI}CH zX3ynOHq7CPl4y`eZj>numO$orHR+2q)LUBN2~|j%sDlc;>tLHmG&{3B7BOY{FRU7D z(MPdpdV;rfT4L^yYTPNZ=@Mmzv!8`}(|?AfUC4!pKF6Zo^3q&3)tGGJy$06Ur|`!3 zD9X>2TWosx(#K{XBo;cm=&)=$h5Xx0c-3gs(#oQ2+4l$7h<^(pyE2@(=k2EC=@o{x z|G3(=G(I;|qlZ!Ghi@2x3*Inwo!JF_j-(YsqUpyT#FZSic-7l7!H2w-HGho^q9HeV9|-cahANfP-7e& z+K{D#1h$8tsieYLwPYIqE+tF+u!X^~gQq{&}ND*rOO;$RpFa z|6b8wMKjv=*=wd=+>^$#6~4ibG{7siRW|6(CZIXw?Ehi!uA<`H+IB%h&;$?emf-I0 z?oQzWf@^Sh*Ce=Gkl^la72MsWaCd_3O4j<;`g-rb&$@f`K~5OO35U~uv6r=Du?l3&Fy%SiD{LNujR& z85@tT`M#}xPMKnZcUGm>D6R;Ourbt)>+In1m;a0ov!3y)pbToVG-nVP72ptIUsD3LhpM2Vv$`1|uueA?x9EalC5`PSnZC&U`qn zt%?m3^(k=&_2wAv=h1|_EEw8CB& zdTe{Mc4=G6Xi<#*Js)G-%-R<<8xM94N7y=OMTdIYGu?NPYO~rJF49#FS`|HKLY7_1 zbOf{k2&-8uPiF{DB!yDGxF-Y(^blalxjt8u-(?O!Z)1PC_$EXFus*PpFikf(y-O{D zAr3?v$w8((+i*#+skwruTxtfdK?z#RM60Dd5ez&@v;o?3%OK}`1P+tzuheV`J$osi z?h~-A@}Ru;yvwk?Ax(5fVo2}3&xJZe#!NyCW<=MMbE_C*8)E6saCg+Yj^LV#e(tlQS3-~Q;{e%dEKbJ4b z>eXy3<+)2X$nH3`SuM&$v3|Xtf3UMY(W`xC+QPX-=AW&h!||`}`CQv8@a!?Tojeuc zr4a6{t5k*yldzkG*~?78I#kpm1S2ZDqAz;f$=zHe4_Bjv{haFgNuV*dm!TSA1N9Ms zj#^lAfDYm48P%w2m`NnmCfRBNp%Cyv$2#1Gwrtwa=NJ^m}JD^%H#2t4Oj}9el`hWS|BlrqSwdBO{9}WrCql9gOcI?)*^>09iu}(hfqb zl~r9+0M;Gao87nHtNt@T1N=QdEB;0z7R7VguZYrPDoxL9Tm=Ik-4~LD0YtqS6aOUh z%d?z~{cLG)NgaAc_ul1B5LX>e_#Nq$fG0+|Mv@PIocIlA&#!r5lhelxt%x^>AGpw{ zkVv_7VXeY3O*j%y!=ECJ?%+$Zc-s7&qc4m_(a^Y8V$F!HLlv35+YR=zl03!(8>{=<@0KD<>&^P+9hO`f#k$Qj&$2uwOY8)7`nB1IJLKc5F5P zwfQE7W)vk33|hi(x&44VB)Gp03WpDsSieJ<9cAj$v=!I$`tj?OTG@i1Kzy!;IJ=BE zO8L6dP~IA>0Csmh6)45T1dM5_!xwsE_ui%y}Tv5~p*G*3adfYRg>E7RieB^v9L? zxe&rq0u&BUGivRK;>8=hFn4Q_Mk)1XsSM}@>f(FX)PISV9f%33+28$-TL#pEELbCq z?z5ZE(jPq37~tt#S@1hP>y+cjSWU3yW1b}OOgPFy6|-7%;t|GYSyXz{CQ<@`3+Abj zyVh&+%ImWC`PL2~k~Bk+h28JhB-Oy^=Tr8s1j8(_bifZzCSqc(KuFWDmc}p>APqn^ zPmv-fUgWq$S284r_$zMPhoN>);F?rgYIyw0=2g5W_Tk?9;TgLr#f0`T1~FLaCx8@I zP`Wj+GYrWE)V^#UxD^T}EyXMCdqbZmW#&~~Oda+|-E}6J4T3~&m{N>@?Jny3Lm--b zX33`Mtanh>R>VM?iUza24Oirye48R?zz3syBbP=cOr%2s#=l1H!K2GNdLZFJU|aH9 zGS8rpX~fNaKa+=n0J3JD>Zic|kE6IpUT03M{aFD1oL0?MQahIChs*bQCiQ1*w5r&q$QD=31Co=vuC4J$nG0_U2M|_TGI!;BR{LA zursrZ3pz!WfJyK>+bW_)C*=Z1?5xLe zZ&60ePit~PuRV`;im1K3gO3Qzz8=&mJ4=SVR#$9fx~s-N$p9)}R@R$YBccE}N3K42 zJF(B^M-_kR9n*{*I}v_pu@I>}|2aH~y4nT<>{x>?bnt-s=hFVO6)Jd!aW7HXeSgNa zD)7!=83StXrSk2luIK%y00sNAA$Tu*4a28+;_L#k(@jfgZyn!YPtG~BM$`;mfnIYe z45L_xW_*mctPAE9e@oC=M&ZNxjngsHmwjC9YLm4CMZ{oS?kkQcS;8uWS$FUa-4rgU zBNR?Uuh6g=hqK4x)Q{X!K~xHZis%ZS6F(Jj7iWt?wH2DFuBmjcjiG!h$vU3u6E$*u zsb{Q`}A` zCAk}vcr5m6@F-t>jVf@^E%DMe|1|Y+J$Ve>`pY7m3(;9pwvoR_2U6b=mvp+>n-7h` zK6sp>-cx?fayZmf{Ga#232_fXO{xf@qF9T1reIVH2gY#X#24F>adtd$HpW0>7(qgU zA*c3a@i?P`(F6zT97g7-c?id;H$Ct}#}RFVwTdiYwC;fuGQP}V+lRHY)RHa!C$qJc z6fqsh@zIA5ZdA$3?b!)@bZs)EsfBd~zH4e9dz_tKIDfVZ{XH{;+!v{^|3;kielfCMON<;x&q%||4DqzCj=a@~(?##1 z(@_pz0Tper3a!I|?K{JBnr#(?!QOSRi5S}M2jMCw<~it^OFjk~EVkj=Zrg^MP^5-@ z1pAMehtwc`0tCMxWOqZoBEjKr41t80C~nM5@4WHBgHme$fONT!{H&2$C+S-Y-vUAV z*nXfyzE|Yd-j2%O_E*vd)sCRsTd6u!?&w|_R8eDfex59-LCnQ@s6{Nmy%-9TPJ|+l ziiL8;p!IkbAHV&IeVJ7z+`c!Ms~?PdJ|aL~z0|9$3~5-r-A~-Eq1Rg&0+lF|CyDY*F%6f9r`5rgc~aoX$o>;6 z{95i(?ezSSTw%3?@Y+?ekyPxe6V_T73UBgCclh)dYWa71^E6A>J_-(s*n23*EUO|w z3;$z+7#hC{yr@95xWfE>J`G9302(y%_CkH^{X}~X<|+yhuyelQBKw);)w!17a!bV7 zonk|djX$TA_kdc3gGEws4Vqk9>LnNM&k)`!pIF?q=Mt#)Sv41{LPV<+fu8Fp6t+vXqeJ0>6&F+Vvg2ypLz5DdW%5<`>5r!zBoOnFR`X_ zlYD=zqaSi`i7S%`Yf>2gfn+|P$CRocHy?7msazH@yO=tEg5&Xw>^s>xhf5&dbah!eK@{WJH4vbeiJ1S_&=;vL#RDUe?Zc8WM>6(IH>PFu z$d_c=KunWSALvj~9E_n4vc3JKmE7L&Lxk5CA)s zFmgT^rrulMGcEK@GA&G?Jdl-8SUR=mLaJT0H=fi^ zC4#+@*S(67Hm7V6%~5#3$A1>XexNkuedlB6vP!n>yW6EU2)OIxzE83KHA-#9PMfd# z>|*CAV0N~Cq=Gyx^gnoi80rjr0gYPOpr7&MT|F}!>I zUUqE4>6#|VWr59;K|;X<`IQ;F39dGWW|yu?ATY9J!kwzlM?T2@2U6_*CktC`YSawX z&SoMTkXKXXjthy8V;@|SO)c`jE2zZ(Rjt_E$AFqoNydcR4lLbO!~Uz-_!FLvM4|%` z%Fr&;Ip@pT-)W+QP#DBd6?oX6W0oZBpH>AQHX| zG`1%uZp{qPgM6jO@>vWG)K@Q@5e0${a&`bJA-E(vx=B|#7HMsv%?CY(;nN`G246gv zGWxN^R-|MNa-PR?Bw|-8-z<91puG(`Sq722)G}8hWrZ{8MWfZ^rN9BrcZr^)w!J5* zs);IrMzCOB$)!&jRq5OD_Bq2lO!w>BrayjS`MCzR^#!jbI$dZD=~dlK&Tb6H{$_hn zq1mafh54eKmXbB|P*$3;<2&0ivpXdLN=xR)3Mb>%Wr}O1$eKi+iHzy7e<;a6l;j^u@((5Xhm!n5N&cZE|4@>DD9JyR z3j|L-Zu?#fCw^D&}FBW0Y%l{ax0-3nfUZz2sd zMkc?d-bVUThMm29F|bT-@3~d1(f7$Ab3-=eT?(By!XqQ=IqK!rp|o@8YxooZ+Te@Z z8CA$kgh#yGT*5*{4s!A^O8y}KEtU~IWJ8cMfc1cb)Zts%B}(BauebeuI@Xo+mDCqeg}edX@z-aMNO{@suDwmT&#O`J=XoNh z-US!{@M(kS-^ZG?61~L1M^>j#B_cdf$+vBv!U2dv`pD{iUFPr7wY8JxJzkjo)-CE! z93+2ksDqEiqbxXxkRDlc&(z;NKgO~(Z22y|T~cfx-W9+2sT!NamAMnvRb1RL@daXZ zCAWOaBDT-TedyAu7DD6rq1X!q5{SvI1t!(&pFP2EY!bBnq@PRREn|`pg@1Nz9*T7E zZtFaFz}~rXmY91NQ}KG;y}W_A%7we$#{#zt@!{Cw;EVoBVrA?0IgG5H(FNpgHtFp2%49TlZHniR;vLGw zle61-$gY}W!TD`#AFmRl0V4cqndqg?t};^{#`R17YZnd0U_bmr1EPN7g4L+vSsVM2 z*SUwYwo!sA@Hli#k-!PxTzI6hx=zyQ_Q6mS8{iT)U9y30*txP`(AQ{l&#>F|$lQvJ zmax(%LQ4TV@!NPTHtJmb9KAy{?cRFQYd)z-`5sp&`^N$ST)vI2!4Q}9*0#5fNLzH6 zm&z7CC|%qGPv`;{>nUYG=-Hw_5rAZ4z5tr&e{*%IAKZdi2AUs0(qH(TB_oaOt&P(?{X)=2gO$hr5+xs*ZLgY zHKT=z&~0(?v}cZ{A!vZYE67>>*yLOY2CouL+$-0jZv@aZ65%%Yls|kz(8j8I{E?$j zNK})09eu~Ff5DaMDR$D-Q~$JrLU<>iL3Z?G$Z8mKs3giHDPnEAb2sA{kcy}+c2g?6 z6-;rY#}d(84L|$Dpnt;H-5FzGmiv11)Ll8W@FyF1k0-f=gF=CJ=guoNgqIe46daCD)T0=8#uZ>Uy*yUTES&TT=OIiD%eSKq+^fP(x33Xcsrd$5!oH`5T!Hag%o5C5_X8+4H=!pdQ;Q22*5 zpnZof=eJg?-ieexRJ+>F?$~4Uts*xcd`pV?%e2oG8Rig~*eiRn)g1mW3LQ>p*zyVH z7G=TF4Rry;Wz;reav#TN_&f~BZz?9119EONbVn1Y0Xhy=5H8=J$b)nl@9etG&UBAB zgELvZk6ba%bRTa?e4i9PUAWo=gb4wCC1S6MjXFB!*LY}sb;8>gIl|+791*jR=IAHo z4Iepe^Rk`_W}=E!F2*%(@VmY#Y=!I7RU8F<*zJ(shCw&#P`<;ODnoCWGXleuAHOcv zN+8CkDMQT8`Y1z029BxgQvITHImR$bW%oHQRY?6289DW@Vx#eswENN>jb zzafn8fN2W@`W1-dV3OuJLSVJQ>1T$I;lx#OV>%6nB`q?{X0c)Gvk7|!XB66l#)6^b zaH&-{dgyo>iPG3peQPMWg|rdGZanM5PRuk&KDj?n4jrprI%ax`e++~i$5lk>F7SISS6CS|1$=?8&E3=Utad>13x zF-MZKZbE&KYX#xovSAC)zn*>4t9 zA+a#hY9z*dXG)oSdnyKeo2dZ#Z1!vybn+6-LwrxH>sscYv)d5PgVl3$*+oJiSRwz& zr6sWJ-_xQS@e>#5Bh_}5RdsO{cM;59HeWw?q#xZjDEQ-BH8_p$ZI|nl*?gqxyIo~$ z2-LRb28oTZ5OEnfA4{RMVrv+yTD4l^WTFWApd=EPg*d0S$_YccR6nZN3OCQ+405ZL zm-{V{kUZ)$#w6Nx*WdNAtw7Mr_LQ@8wQn=Iobd+V!<3P`JSxycPH(-BIhB1h>aZV< z97RU)dU+dS71^v%_+&UVwD*FX^ON&H&@@=ItkEh1((ak#CXdZO-|D_n^qDm69%W;^ z90d3o@OlY0Zhz-ck4G&$aO6O6*&SaUyD04Gvj!~37;

6_iOnIox!8?G!X%N>n>^R~DNtAqrt0#mc==;d``KR{*E)%C}K7t&gX8bdLjG&MQ0E zpXY3ZKYl_gcK@Im^&xu+%FyJ|Eeh23+a%3dRm?27!DoH+Cm+Z!Q%~|fvGKOd81Pt4 zaUvYa8)g(+Ut5W}X^^lVT@3Oaw{e7TTEqa3yhjT#A7Ado0ty(*7b-U#!t(-KClGqx zxU9tiOdB9UQn;UkEIQmP6g;vY*w#iGpF{6EuPVFTj3CVIq_0?*mRI}|H;EcCMZ3bVFCcpx|>D zoEdJW#Jza9XNp?MJ7JA$an1kG$;K!)XcoUmBB!X4YG z@w+g{P+VacO@m_}sd-{bH=3k~G)lAk^km#{FpJr@E zn$>#zMbJzarHkPfeTMl8zMv`eo&J6Z=$^1hkHEkb?x4e5tkBXY0@dShwNk~M3mnNq zA6&Hw2IuvDILXoxW1=iIh~hL(`zPKpDY(vVZb`;(6j?*32O=Ty!&O~F-k0g(*iboM z$@1^Vi3Np_+4Fd(-Y%>np=9T>=~=uxCvh$W_-o%ggLyjo)c)l?^|B<;f(F{*Z2zm3 zkd)bvtMj%!Y%W0nboczC3f#ZC00(dHQiJvYsF%(=`Le_LR5ht?gmX4I>%6El)83HJ zF%sz|OX0`@l0-+}>a`&tUaq9Ygw@8-LlNlhPJ(Rg$UPK$6RZD*N0UWd=-hw7qgH3! zN%gb8@`CD+Q_G7UBe#3`6EioOeQ|FpFMgjnj{G|Srp8}5Pu%u9gy(AQQvlAN*urT) zbF4*J|&TDYZbcxt%u+P#b-@V(vB(~`}P}P~f%me*k0tSaHqB#*Ojbg=P@Sl+_ z$`cNdur8r&IN>OR3ewq&!rP;t-R$Z7$GDY3EY&|M3IS5{BFa1)QQ9iNej(sw|3_#& z|6cHJv;cHJ#b<1TYM{014MI+hmIwCD!L}>d8i6V%Rw8nAXe#@zK+P%IgrIZWM4Z)1 z>GD_89x3XFF_0H3IR2(zsa*(HhdYYN;nYF=Igxc$E5yhbe(>uXq)_F1oQHD8qBk*O z0=Q!0O)OyVFg28LFJUep<3EWtr}UfLLyVF`i=6^t3#dgRfpB_WR+wnAJzqzRYe6}} zhym@H0ODbWFz;I@!BwpJ_M%rmVdqOM*I!6FEfu2T4L~#YMX)AJc@E-e9w__4VK~gt zV>OZ+mg-j|SY+_g`!L6o%-zGGQ=<<7WGLm>Jul(K+o*iX;UNhM^5Yr#`%*AR3m$0( z@Y#;Bxb)60@^+s_qlzVICtj*Kl{It!GCeKK#|BUpYCK#*_&50Dp}^rf_aBEW#M*rN zkQdzTU?6kyHUXuNX=8F%z|Ebv>%iwqg$`*_H+DIRV`SL`?9G>V-GR%AtH^P0^0H>~ zW$yEXW_mJJuZxtgrFH>?4=u2O=nEhDD#MjLp~I4MV;M1fSFn*6UWZxiMDcD(uxz?s zL+Blb^bSm%j!wm+e#oUl6?zH!Zie*igx8=~0cQOWQ!6`ZQWDH)mS%pNayY6;xmHaE zIO={q?tyFgqKrEi6bSuM=rgQ)(JOITGc?`=E7u+|u_N@e7ae?_X^zBN7{0OkL?RG#0)phYEx* zcHs%|hr&{0FxsEo>}hSs2$nr@PKj~1K-WzPkm#lo@!_RQy}y0OYGc1jm=>rK6|})f zJ^T7ymG}93sHv^OP{W#UbTH&P$T`gQx8FtV>Nodpm!>a2W?UG8{HLFXH3RlX->mFOOUTpJgjX zhuvaVz`-z6pN(PjkQwbLG7SfDta@UNnp{muB4AP%JgXqqX6)|>Tz|W3f9MVcBXkX6 z0&TG&BcAx~0ccM_?L!mXX%bm3c?3zhK6|>VzlrKkG^G_WGP1LwtJw zAD9c+(2&lNk<;bxOdH36SE%#U!s+(rVb1ktUgY+(E9PG|hz!^~*~TaPE4uX^ivNvQ z(N;kUQE6;>e{)NMFI^-mdykl9aC?~EV!c2uev79HG5h6R;p53>TT!#9Hrw~cH}bR! zxlc24{J2xezk*-^JDy~(D(YV;vTsixj{c6Kkuv;_qAieRFagn^tYd5V=-9!nn*SY) z;^+qa6O3wV{*rI(3eMXT`Evmw&B7s#I{>kL_+A6+0j1f~{&)gc1!UvHp~jgn{Jd|r z=a_jw{kyAgzoMwOXZ*zU(7)_N_dPieed(7V9snAUN-Qm z7qP?`QBw2*Pcf7UFbMTt0)Q>o(@E)IE)Ku37gaq?I&53pbuK!hQ~}nVlQa&7N2tl} z4g`|Z4ly}#zmda5>+emY;OU`eXLM`D+H2^@uq0}VThDFY6GS5qjKNYsw zcNh%B#MW*M)7m9s#(MxNCkcL8FuS@S+GW0pOJpqN~9e|F=~Bp2mylpSk{IQn|T zy#2ErU1tIKCz_s0SLT)|XI|hV_df+_wKFS$4C&H6wwS-_7%B9VW<>2lK3;txr(cOU zLnasg-qsC)G0r{hx#Ps1EnP;^=k(Q~I^- zsv-64xIY`fRnRY6-1Z?JP9cwN1a~Wa9LdfM+iCyskq;)Gn4}SL7gJp4VfZ81i{rIa zz=vco{9Q({`4vTzSC1FbMpyXYQHqrfGBZ31QJ{jT{6xxQmXK}n-W&zQ9X40=u6w0xJV}~6ue2p*Tlh6 zg%4d`1m9|-AJ1>_fQh1K5j?UG+okyJtLl|KM^5cyD}mFlqfd-+JG*!EhX3SEl_gt| z?X#3|1mPhOv1C%Chsq`LxlQ>~8pNQ6#g4-$)!LSEL5!ln zM<&751!G^{lSSP4wWJXvkn#brvJ6sTrqT;cI0waXikzfF9?*9U9!giPOO?k9_bMN#aP^tGj`(6DEy@cG z9yj^Y`>H;Xh}xBhBU!bUBahIJgiEfy-rqu$vlpmB{zAD7zs)>d#Uy~dtUTOKzje85 zODH*%*96VDi8zUxwAxbzp||%Ldp0;Fw7>1`*RHh2d8W)QY!%j3-FC!~c0Vk)2574+&sSTz{u8Q!5ousx+i7q$pCZ!qvT&^AlFFk)koh;EI>`;1S(Bd2wxphYRlRiuT z?S`hZs_;LG+r;dW2*uAoTOY+g5hQBsCKoH~h>Eu}lWXITUFNw-s?92M(v-}i zXe9^jAIO>0jnxuwqt`^sQTpi?*{Rm`9g%v2EU_8KRQPV@+lj{-$n?0iLAp0DEyAS? zv7s6FCije+a2`F(W^|m11*#WQ(oAd2#JkA-0eIS9a(tF+i`a0tnE=W= zN0RnjLBdst^56s2UW?I?>P?kwbNAbw$^F3)&5PTeYvACSV;Ef4Oz+tz zXiUd|i$}Z%`*-hgaPQe53LO~M!1ZURnY7n#WBTY|ZUCp}ZWr8BNYvX*fasc-Gl?yB z7AG7As{bfd-b>L&%!4K7_Nl-Ri?(IftFY2AXMa8hql8-`?0_&I_v{PIbHJE4ZRZQ5l2$ogj&yCE zu7XV)t|M0Z&^~x^G{@{{|6djd#jnNT!7&SWyGrMuS>w~_in(!KcTN%rIm>R7{GveH zdZ7eNJZ<>!++uqb-KP%}zw^vTDpJ5#Q+VJ8#|*qQeUn zdF(R3XE$$ZLpb3#ynbk1ZQ~_Il8s+lzZ}8pd6D7lPk_Ye*FF$?xltgXZ!m?wsA88A zZL<~G!lzJUoJQHlRcrGzj(v5Lb;Wlq+$rapy-$sHQs{kwpALCL%wgyyN%=U)kerlz z=IUJaR4GbBm`7NCdOz`0PL}LM3O^R}iSO1s?GaY>KU`*Rsk{DhL!RNM)^zf{rGvg@ zGb`2I%^8y*n;fJzPp^Z{3RJ(_3>EjHIq6MD_tBd?$2qRS6SahNwp#1mo4li^;cMzT z-8ahiP)eOyyDYvI?I%=;hhHJGdoE>^6{&&yKFi->wPJUe02Bf#YZfve3|cD_nEB`D@Sr)4$UB) z^*$_F2|A%E+?&_}R$laRf4Vj^14@zM70b(_!T0HYb)V$RF8SnhpUQ#P&uqbeF?tS7 zzfGG&h?i09iCadf`C0~nQuB)mpD@YvO;P;0?gGTGIHg7E$j*FyAwNfFaD3gl6D#89 zl<)QE2%1rr>e_&lZ&BTx-+SSD+Tv}PuZC!696qmN8!hQQuRD|;oI$DcR&rJyGd(Ov z$K~j=(cCaU@9|U6$A1BbEu;J`8Y}pE#Jv*Bmv7i(PRCpT$aKI>IM5YeBTg()GZNvo zi@V-G2B)P7p*F9!a)Sf6MmyPux6T{stxvKgR5ZRx%W6Ri#K$uJ z#D}6cMxxt}X%pVWiBvgj13WP29WroFNhQL`S}xr;G!MAEH#0mjU`&D=D)|j;{uE=< zIP*N)Y(Yb8eFt|NAB+9iEP8$6WS4abnW$N9EUKM2)6fjLd@}{hot1kw1XO%r+ytt$ z(CiT$S;lvixV564qFal6-=etdpqoNO8@loIM|vKA972b0kCNl0p@Gkua_eEJY^~Z1kPGODqDJJOhs z8N{JG@4(zx43ND7s;;brSyP|F?7d4oOdu1b1ob+_+HC(fyF+w9Q{AJ;icgu*11P3^ z7Q7(aV@z#SW3T%sJ45AT8ID>tA-8 zDo9kJiv4K*6z&%?O5-CKDuQ}4W7z1SdqC9CH2wW`>f0NF-;gD0k;G4+*Vo9=~eKMl%@3vy|eJ?-F>A6b3_#DPEyfFFwA~wHf;ctIu61b);(rQHM>{1xI>2AXRNJaUu zj(O?bXHNA|i9iaro+4*oFkXq8PAYY4)+b9-s2&y7w})aIT#~X;NC`d%RiS$EwxZ6d zeS_t3{H}`5wy||?jRUDaw#Y+TUOY<9g^%CA+F?cvoA{BaT$eude|sXIOTsE*xcQ~945**Y!7N=Y30a7R$!7Yes7Io(6gi(k;=W*?2WF`^--K7 zRddfPReeshGa)O~4MzFORSSRS-SsoE4sc7vfByGUE_0SB+Hb(W!|yM9^xr??=L$i* z&E$W-|NBw<#{bA)z6Jvt|NPXyfBydiR_A{&%Z!Aq_xxOT&5za&1>O%5_Y1x00^Zs_ z68}D%-;aJ=+su|~UDSl5K@0!9-HH`Vd>#Snxvso_dMFc2C42JZR`%1_(nkJ2jZ+85 zGFWqqFynu({QiFQe?xx$zx15{&wmB@w#WZ$vO4tiCz@p@WTEdgY+-}Uq~H5q_=34r zpgnqD&%g`?2?6{@q^~c+o0p8o#1MNjzq1akoV_JZnTkGEQba=hzWI5aejmo%4+m;; z?7afA;C+hAo22KDu!tAD_r`}fxZPiR1fV5gmH}?EWJuJbA!v_4gUu)MJXG6Me;qm1 zoR)Vw3}=j--F$(C5ryZfx_4V-av+3A<)9D&QGaf|RB^G8P*i#*;}EAGm#vZO67KHQ z2G98rJHA<_v5aDhZavf<;(O;DKX!&15b^e?=!cQ5@S)8M1fPfEIuJ2E zdS*SIiYyz+>1h)nY)&Dx60o^rQ&!eiU3mDqA%@`Y)PgVx&$q_?eR~UE*3_0S3atg> zRR#LBgt8>O%}C$p{TD;`lxl-k zhM-U1rQ(QHv<1~cc2PVplLf~p!PKBsBm>PokuSFQ(r(_b4MZlg&VDl8JMFg9dxHgw zZq3jA(_3VoJjTB$$m!!i85!RA{IYFeuN`By5+(8V!8_kr;)fTvO>3E!fm`y6vhAw4 z&Pfa&PW8Id_Qx^YxAi{XqfKp~5KH;uueB41Wvq38&~oZ0x9@LO1@F&?o`j>GzCenL zr`~Ku{7_1iD@D9}9<-Aa3vr2UXvsDDZIHbTpkB z{9>`oZvt?<#$bN8-Ha7t2Xd$-3j0yP-V4!erIG6>^?3~gU9z10hz0 zwd9(4DOw~Ns@n{b@AI+NFnEftQ68LTGk0gE0kFkFTW-cGae>ZReuE8e-RKis2(3yR zu3WVZaNEYE(_08$hjE9@R~0DbLrpX|V{;+1*YI)Y@Ec8_ogf^y6?X9;)+W|{y+(as z7w;-?^MaGfNNd&n<>c@SR2iTgpw9x{nLigjl2M#q7u|##yVn_G&f1!|JJ-O>3bIx^ zH&b%yW^k(vPz02+ctFGJ$M5;v{g00qAhJW6m8Y1>tjmT-e;5y`pBxruE1{=Zd4Qy`(DHJHFEu$!Sndub?Iof{Zb7slTh34;m%(y1PAfb7<|u+ko2zhyPkmErwnfn9sYtgHt&RyA!b(l!GBXmd1w8wBBUq*D-WY%rz5M!V>mNjzvw z>7P%nx1uq0n@&nrYlVa*cr59p-D(3Uw;fVltmLYv7k@&N4Ug<8(StbC8i6cK3dlcVUkT}=uHgY zxON922z=Xt9V?^*{(V;${3-Q=J?2;2$f-U)iiGl4sKjeGS;wn!wG7Q#_b zowBVV})t!)o>tVecsb&vM{Di;Vpf9 z7Z=W)!LB4@3y+U*H(*wMOZK@p*xQ?eYpEfJ#wAczP8#j;bl;b8`%to0%!jlp=VnX$ z=H*?Snt9j*UIs7^#<%SQmeYv&n*dnJ0TYzI*e_0wh zef>108{3j%1$elYac@a{7rwW&n!h?1*Y^+JybEO4)d!&(Gi)q5XCLHf*IM(2Jw;1g z@r`G~v*GXdUXb1YJuVkk|74vK&f2Y^@BeJ*oEe^lNVe(JUFc3sE{w=!UF;B*Z*ZB6 zjv~6<^XAZv(QDC zGU^;Wx5aFBUAUn5&k8%RMMC|~D$$TS=KUA@z>c!b)6ILxtL=u|*G!%D<1nXa89E4~ z;J%=H7PaB828uXK{ju5~d{)Ye82LyRkgKX*-%wxZ=#E~~G`QSH@USL2#MJzr|Drq& z;*-o*?QsMA6Z5OKfcCCX+7X`X8qjflu{;wD968^0+aE-_V@_*U+|C_fGydJQl%xH= zz~^j%Wk>Lw$eJ`}e&d@3IfJr|+Lmf7*<)|lIKhqeCrz0QmSQg{+x7(19tslO}ywO{pq`pS}~hugO&=rm7@{v#zcA4c@K{MBe>X%BQ#4 z-Nipd9*)(r?H8$tZF=VbZ7$rt}kgwXaJm@51Tj6@3W~{@%4dnC2+DHSvP$}KL z6JqW^|D2E8PZ&~{HBQ_Tk!H-;T!8N$%t&oRq*q*lJ=L&L6!Pu{*Tb)#WxM*KPRL%Q zeac5N_q=;oeSk&{{t5MHniH^T}pq>G|1}7p?L5nv< zsKNcpViyr5c!qlW0rI#-AKyezF?pEk`sDX5?g_fw=#$Dmbc8$S~980 z)EsQqYD`UT`of{8)R&#~8);Flkr?S&qVsxMRKD=b ztY9N&DxVm$ho%$d?CY63W@@s=7C7-(sxeTiAN#3vE4WNbr=@@a(|93{zR@O@rLydO zmL0pZ_DcD`_Zf6Oe~FCF72pY{Q_gAFPWQ_`q!&}kTLtmZN;$-}6qKb6rBqTF@;$3h z!Y}ut}?hrdIS2&OH*SRupl zAYQkFXZKt0h*tBFH~jY-_ACdfG3_J2mpC+MRI#@rWBqydbqPRWwQmXD^Xkbal|ibwNu_OM&yu}`W#%nnq}{fMG_a=RwL#Rm`2Vrx;qOS z%fmCOTW@D+L`EVh;>jl86Z|ONCsG5}PrLrsPXkhBylWDOZ?SMxkyqG24*8SGtWQn{ zNd9^Nl|X0Kw&F~`?*MI=`tAo$bOKpDdxd?;tud8Qn>sp+fWvJKw-7bnuM6LqVt8zR zl(5!!!AItL*JB2aH`$4O@=0Fj-txi$iYm;T4pac;#kklIcU`r3d!P;4k(|#-x5nTm znmqVDlmm)E>QrcLfEEFw@sBpQk$PvXd!}^}z9&HwnxV5R`c5Z%p#a^kMJ;mJ*$PD> zGgw|3>{}xt^>8;KJgPM8Azl4vB1KAVE&Y^}lCQH99WFLTgq!v#2ihLShX(roT7}DQ z)@D)(q2ZZ%o}L@-Fy?ok4n{b18LnvxT~aotpi5Vo19D*)8nG})uO=;>2A%1a1T4-; z6Xra{0R=V3%Yz3o!Gs2|tfj3)BkO_KKpbq2Y>Vk=qScxV(9kTSm9lE?U-;>&9$}~P zZ~XKlujMn(f8(e3SpNflIwvF?jz04betHWD2cG3>$+LH{&=oVz%aZNst;JM@F0H4& zH}Gp)fXJJ`@r3tjywx7RsFZJZqs>&D!>6%D3}73kTuOAAS5fvOc}Kj}^lX{>LNfdp zej2_hY%|8DN5MrqvUmO$e)@7oLc=Dk3bo`KHxNZVHC*MTq~|v3%}=unlgOJAoiRqQ zi3q;cn>zjGHj;3!y$(_xw;n$l`NtUBd^_dQ!S;C_VN0q~8dDfh( z$Y~GMg+qxoD0zF6dCFg1iW+$~P3oLNUk6{MIbukPI{2Na!9%_GD$*mjzAVUoLFXnQ z3$l08rnXK^AX+)~-<{d+VT2=eKUF4pO%X8sr3+Pth_SbmGTapvr@kj=IZ5Zp{y7X~ ztppwm`C(jB1yXWwRE}aBR0{Rtu1@!!`#zU$ zG$;a}jlyB{!){<<8uLwW@h4E5%J#Yko1{*qjQ$trbA0nuV%hh^U!RT+j*DCY-<~SD z(kd^{wdfST#V#=S4VnHeO&R z*0rFD=i6S6$IViLxz2G=!rZ6!nD@R?r9B@UvO&Ao_MShL5YIel8@DlAtOr zkK+6qv)VCTx_C}vh7gxRO<<$DQ`WZ8l~D4Ud@-|%neW32+e%>FgnE%Yt~z;mR>kbd zk;KC@8|k8(x2XmE=|aSopt(rX|6reLSLQr^VQzH>v^P@2j^7Hy3_2czfUkMFx+=)d z$_&Em;(WpmjM^eg(5`GB*iY6}vNlAVPVP|ia+JdOU+q~cUHJ?G)hLVOdt5UQdURCl zdc+FMbUPEhYZ#d^Ot;T;m>53wGXQosRLaaA5$*XVgQ_yfGzPjZX)OalBxt!@q=NEX zAo0Vcd~=;LB1`W5fayGIkRsCE#>L~!l7@}tvlKN&c%X;w$>mhRf;^R?s+fyqvS~c!rp4SkJMs-&Nk)OR~X-T$0KRZ zw^QL44F;H|nO(oYi8Q>zcggb^b&J(U1COv9#~a1XGI!3?S)ri~R{add*77n-TnU0= zd8)d61#cetaJhCap>^_a{4?Ml`>4_iSM5a6cop96ro6(jP0Z?-S6ySvW+YzWjgid=faC`&@ z1YV^joEIO863>MMq*RCK3o&0%gy!+RHQ2+8zoe|!_L<;~u|}YdVTnGC-NPN2=53E$0PJc=cW)qN9dooWfEqr6;KN)MrAB9tuC@1N?!X##)I?#b}>oZvO>8 zO$of3{R@6tXEJ+vqG-X$h}7Bo779NVhBNy5U-;=$J#LW=6n^^p5BxL^_A@@iANc7* zK7lKrCbfYlpuP$3n40xyA5OTsJc44RY(Bp1$yZ4oHcy;O?)2LyArPXK6AYy$dk?iq z;!2V(;;XQ8azmgjr>D6Dw9GmPg2{ZnajSr2|LK@MDWp+ikDvKw|7ZkFRKdg1KGmKw zuoJ9V;CrGlWv+^i$CtJ*p9XS=vH|i-6cK$v#;dfl*G83Yaf$o!a_75Cz@FQk<+Sb{iI^)K2zA_?(>v#155nFSP$I;u z=TeOU`HxZUu=)37-S`88Am``>L)%^COgo}SQ@_8{kZ6Anfh3>^Ees1IKhgjh#eI{R;{Q9Xye;c|~3b|O| z?cD+NerJ&+^?j|s}N0iY=iD{SEuce1l-ugo)Qqhte z_n}6d4$yiq|5#bd93z50Q4m+8GinSR2c6)DGw5@UbtPLVWfc!fTLyv^#Xk3>U-x69 zR>&uqxd~I#o10`9^CIzwy*4 zn|jr@qPu$e{hD;;Hs}~CG~gY{j9dSn7SgSw=#9mq$7sR;HRR>9x{)eX8f{XNdVtJy z=|&WpUgf)@XwMY@M2%Q0TF4^7`sXJ!B$Xlm5g)eXa-n8up08{6%Z1uVEs3#CqI*(f zsBwFDn*U;-&gPw)v*;$%gX*N4J3e%J8>mMmQ=sKii;681i7ifDnR5uLP7ww_5J0f1 zoF%Zb<_LKFiN(RDDk96B!%Mzpv zL)oXeDFuRyVf_U0mSi$l%PB;`JYE%a;YsW1v{Hh?kT1>7%*uwxQs!B9y?@xJRT3aA zk-a-8`*gyv8B=h)h91g3b$ZN&dp78Z)KC1IeG1ehID)cIH<=^2C@&jl@*YP2#Xbew z|II!%Zy3zcGj)A;GWa+96#J3wvx$AD!9gCr6%&IjI39yED@TyjS(A&j@;JY zKB~ha{YE5~?BqSgaEsgB8xmR{9AYEBJX>+w8djT){ZT)?bn;b!X9L6rT&EZ+u=w1XMIpS>lNv*eVLzw?^eHiDn9Z_RKeOMli0UR zHf7}fjvGIjo)G-U^UVEEf5+~pF`Kl-EduEa0};Xu&XN7kAq^%VB+o*7VLIsS^ODne zWk;%`%E-Bu&SL1o!}4T%Oxr?!-x+ z)zW6hD4l#_u8|Tsuj2b;&=j7?hd8g2Gi_vl`2gGX+t`@9N)tD|6Qdb{+d8QCv$ao2 zkofJ73oG-s^SOJKq!J02I@E%QA$!&vV>2R|b)TT{)9o=pXrW`JK8F3$80kQW-hs&{ z^>?dnHUkO$<0s#Suk!Hrcx&A(QWH4mT+T$qNcM z^Ijui_X*;Zhd;lAG{N-|J2uNOxOPf}ouBj4iF;nP^%g;CIi;f*>^YV7WvUT6t3_t* zx!U(-898&TL%(@Ar{8Tr+JFCdNi*WoViqK(`SMtWwm*zz{@I$7Ek9yeyDb35VQ!`Q zxN!+LLGZHQ=R4%MnlR+yA?D4#(dB!gP}xQhO%un2q`{xLmq%Y}{jO~t?jwJBkMi$` zuQbA5^0JKo*ynY__%(b6vl(C%224pd{<<7rU7;O%&1MVq)2SVSJpPOeda?tqd0crr z_z2LmV2joVC+RVN6?WtuJ(4s4FfB7b9Uso+S2w@rIbYpjUaBR1V>7SP>4KY$DYrhp z-;&))szcJ!AKYX+o1axU(9wcNrYfW#vz_n>?i)wTHR(*XR!jXb^Qn;MYMtx2rRM08 zuIdd$N1cyuS7=O=PlHbc=<0Huj@;NE5s_mUTdT^adB(YdKggj{e)N&Kt8W{pX0??l zYB}JY5p(2ML%E6Nr%tb! z$D_r8-LGT`WW!db7d|4{b%7`OX;dx5S4?#E-v->|JaNp{id)+|Cp3I^dpA>mFpVY=O5hm8% z^46hId+iU0d?{!0uEAhieq?U6YF=N{rD~{bG8faVreF1s46i@-e4h6bx3#TGO5R~C zq)YL*6V}^-&OU9}ipEloz~Y!U?%)nE)z`J^MUKLsFQQ`_=E+)Rl8&X~whaVmW>a%- z#cT&Su}9{rAp1nYUk`V5C{zuK#zd0Gbh8hX5sQTAk0FF6MAiJ}P&_+@Y0T~>{EeZw zGHz2aiGxKHotrz4_9@DQ|eNkUc$c$z(#rcZ)ZFk2&}y zaYshG4jp3#SZt#O5zxv`czc^bRk7F@isfRkxqG&D>h3TU*F^Cs{7hsV*F>^7hvI8s zqV4XlcLpvMmnvE`Nl18G+AVuWoU!xaf$y7bhwnoVyWPlTs`2+FdYi2p;Cvfnl*iW> zQIuambhGTf|umVa5jq)U0GBDup1GGno~`eGGjiV+zoqsL;n6{!x>G>r}XUm=Wfi?XMc5HK1D`P z1&Atw!}}V5=L$r8V$upzMTgW_URv9VP|gtXuQ%z8FguY zYW{)UD^GOPfm@~K4F%=X0WC^YJ1vnz$j&U%c!#_mFL$CIyt(2*hk zSPdB~S!%@9`tgk8VumH#ZtYPS;W!O5Ov#_rzAth#Si)})AG*K$)nR9B|da)9oV5$#gFYm#=fi*x1vlF5!5b-RwLR@0vIJ# z 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

VQh%hD`eUtEoyD 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

  • LvXw(Xilyf4IR8+PO&}rMWp*X{4-Vm+x0%`(TZhU08jH zrq=Ps^Amo^e4r|^rk=W9CZkSfY!`Tx?!CG`cPTzGuty0sucdHR?B-OB8?^C&knhzq zw?JK|6KA~UWJ0-=W=C)DLhCIX2YrHiEvnU-1ud?P&?B$2oG&|j9hZ50%x(MGG2G@1 zX(JdQ?4bi(L--#7gdz0u?hGzbmkGA`el0%V{Gebtyuc>@297xgVPKmi!fMW*TEI4B-6+froYh*GxR8Qo{9EnlX-?`y4v+DiUWzDMfkB_f{ z*X~M!y+JjCtIb`u&fd19MD+&X7NfE)rx&OW#ibZS>J<%3t2 z-Pz#H#4mYcd^=7)qD5`kIc%*K4$07HThUzWpH|TTQ46MK>ynMM8nThf{%kM=Gj)_J{+q;i9ecP5S7-_0jUn z?5-8StDh_Rq3u3?8^iZ*5DE$fH8u~^svs_Lj)8J;4c_&{=7QT}9K4XTMh1l2QudeT zQi(Obgh^`w%G2R2mYHKL{59~!?98*c&8^8QFNmaB;~hm06;=RvTu>+Eq&%TgaLnfw zyVR$ZkMl4Weah(1=#59%DeLQPx@8ITcM@-bf`1C*zOaD}3^IT&8VOs-!w6CZ1FIGu@}UR2=P8Qz%u-gzCz}@0q_qFc@Cj(0S>$97gl%;y0eh+7B{l zjTu^=c|O)&USJMo^nMT(=@sEDn*8Qt@3-6G_RKyE|FK~uI$sFVQa9bdU~jDcOKY=X zj!!$dSjzk@t=ZL=q;LLMN21HRA zP7D60Y%7+bUm20Kv73p`J&yA}7eRv~|LlTl5g)hdVT;wl-QNJ4`F^yCm!HYcM@;cC zwuw|RShewz*gr`ISO|U9a;E-JU;>sdRCVZydDZK#oTjyWIfOm#XB>g+DaOEwuW&@b zCIwufd5*fi%Z0?9!F zDsnaqihl*2DzGij+e-&mjYFZ%;Ft zr2_L;WPryXdi$7eBVX3hbS%wHUajA7$jkfYM^64`t;&@PC#Z)LQN;L$ePSf%iuKtR zAltAoN`zoN>Obz;H0~(X0`NGxj~ncuTjXyjkC#Q9eL~&#Q1%j6QdUz zuMyP673@ki)I*bG$wRs|kvZ}dP&}XsVoB?rs#OykSD4x-585J>;JUJedYF{M4*xCbD7-Fj(6cv{UOE~L@ro62eEJ0t%M>;5`bC9dO($@s zr5S-(d$g}JvHAA#Tb<7-rJ_FFXG+1EwS99~4%>cpN9MZ|<*sYYJ0lF|pR2+X!l<;) zu>3#;%SJwUO{QjK6=cg;y7jGrVRuCQs9YBMh}h%*Lw+?1O?7-cl6l={=`fz%<$rf= z&9eF0xnf@kiQdmRFjVo>`(vaAIy5u2H)9vC*C`c(2cFXH>v)cKNf-DE!g|#Ee@o1tkPN*`W$bIt^AOX77#E~$8z{{^&paOb z!j?=O(*d6@FgyR70a)>n)F^`RY~)0k?-~}_o{>j{QB_NA6S@~qZR&v34geA1Xx3uQemGEGPJY$UM znOLY@seFumMYdxZv{5;q$g~dL>ZPJzkL)mwS`E~g>i@y#UcvjPhb=zOl~ZcPYMQGG z`W{w@60S{39+y!~r({U5*Lc!+sv8{Gc-TBW|CMOfJ!x4e7@S1#oUKf#u64;tbRtwY z8yu=zda{U>CQm&-+~f=zp0>CdiaWpMR!b$wTF-bF$SVL1@sLcW!wH)Y#}DS|%_4*S zod^Dc!h+Z6+@~QgE2rL^34!pF^K76c#3_v+HvNlI)k|0vG^g)(aFhq`Z)kkQv?N@9 z7?gP04@v@UmMQMExv&7&bbMHBxZ#cC|A;W59oq_ne|_*yaFAy!#Sz&5hrN?N82o`^ z&6=z}e(&Lc?G5T)IM$J=KxZZ$7aPU9z#X3(BqiXgb~orMkKjl_TtaS+rB43L?}RLm zX0hB?Gvf7Ea`+=-PF)?41iZ&gI%Y}DCI;nS6{CmqP58Bn>nIO($8h?qb7|D)2UcyX z-1^B`Uv4)Y_GKEk8c^G3JhYLUo;Q@A1L=G>g}^MLz9?3EHV&?^46TIE*pw)e)*u3M%j z#44$(v)0}t+NcMd59IZY#4i_#C3Yy(DkX07B6)BId~7q!Qqg#k`u0d?2m%}ouD*9CpT(Zg1g=mquA?IM< zYxC#!ngI_hWd79+poKa+xO$T{@vZf>kTq=dFH9hR20ooO3Z00e%*EPIw$$KXZ|mlF zWaVIXggff(yC{Vv9=F-_th0-Y2lx zr@KJBv9F-USD3?0rrA)jL9feMKrg?%3vF}is*Yc8YN%KX*o zfeL{&yKnh`-uHebVq-@DH66**28cJf&s+#!Q%O}bw(85E;G0{_CGjDaYwfe~+mONW ztuHm_ZqGxfCvrRf3V{|J=+|H!_o0?m$;Km>zHcGd=_gQA*0J`>C64&L;H>4MmuL1}{js84A0yV$ z`9HVp5PrX-A#{R|6zg9`?1tR4)E z=ftp$(SaG8l>N4>*w4u-<@nwrW&eFMzGBb~6J1v(@~c9-p`n9mvYrBYwUcLu%Cb`k9Ys`?P=X( z4Q<)qfY+FfB^Jm1ftk8LBz*_3ytOxcWzxAoUxM7eSB+hWyX^uF*n zkRKge&vt86#ptm3Cl_+dm~&ZsYA>hgcU+sAA}TkAAF=bs{W-g0Ei`KL$u|h#bqpbq zBPd{h7Vh%rP5E8>%H_c|BUuRXkn8SilU}nwcbH#{6&yf?Z@h;Gl&CTb0&OOv^1}6h zV;GnF`D9iKYwpqW6*XOhbu*b7Ul|-XtA=`2L0!G?g$6#pl2eZOVhS2X>yHHyM)At# zdpVTnaLE&*?#)DwG3l60{(So`lAf$X@BWv&uDaOSJFW9**T$#43)2E;`DHrM}e?qE@d(r@lU#4aBd=W+kz$+u%!!o~^!{_hF2xPHudQ ze<8jMdw(lGd=*6Lo{z!mB4+|(ZJ>%Z7vn^W_ckYrY1@IMy|y1$PDZG8R5Om-+PDb!?H#Hr=|TAJ9yucZIHv<7V}euU6d_5=;YyDq5G zMKhhqf7p0qM_i!nEG*knR&AG^HO|b%I|s|M&-)fg2GH}f1sS@ORHgkwX?k|it9Ack zOWx*P-vM>S`fWzue;gi`@`+2sU8Pgv(W9HJnpzQpU38i8m5~w6ci^M6%8VA@QzQ7| zWd(kI^(A``X+SjLtOInPPG-zfUZ!6)^7{|mr3m5z(BCER-2aJ44HIiUU{-z|**q9{ zSKv?|wwbn0Yx~+XEdL$rMb)W%V#Ufr?wHd*TfhLLhl1itnj1#8St9b%zLT_^09L=w z(Cc!i0M8WI7sETR|6y6B>H={?nZE;k=o*_UouKpJK&%bLeZxd#+DSeLP0{)t3 z_v&+gEPLHeTV}OIHDXsD;`pY_1@|o@REOW9AbE^4iWe#dlqFy#r%<|NfRBr)%t_b> zTJ^T=Td5K6!{eP;y50-Tf4V{g?yRCIbBp$Jx$Jhgu3c9#v1v>fDttWs*qsOB_wX)G zgM!ice2AqgkYWTWdr_iuXXCZa919det$yoZcRqSDUl-mR2=^}^b=IM-(xYsN5-$@} zj9{C0c<*#(^~rjmo~rmg)!2+f7)EnXG8|;fzDau5I0%M{${(tT-h8RiDIKDul*QRe z1Et6b7q!A97;*siHK7@AlzYq6-xA4ma2(>k< zgHl*Srzp4Rde@5|cF_920O7K?VeulCD+|z`g0C!VzV1}pw%biX?f-!MFX>NH9dhQ& zHC869^gX6{?j<`1eS!jgu4U!9FH+nbeZW}yNLBB$nu5zwLJ{c6s=qRBVjo#+=x1)hbNc{3`kNp=Sf&KKxu z|5da^-m)!(hP2ZcK-QdzuRXqrtiYMS$?z|W!y!~XCWs%Va{7S8=@UVtutxO$QZR;A z`mR6yS4Mr<6S@-oquMbd^2ysdD?Oz-w9LIMmQ&%?s!g`0)w4|JDVoE*ojpC+Y3Uls z9l#~BZK?R)7R-D&=N|w8_Q96r(*}I8mu#$pcdA8^(xQ%a?4x}sm3u87-?&Rt>i0tS z)*fqKn$q3A+BgVkG}QaD7iT>#Hg(H%+<07WMbnn*sQGtmM}0hRp1fKOmKzTvq@D(> zE`lvx>phz`xzFrL=Aj%5pIG{lRK(TtGmdS);AC^W0vhN_6KzleD{Cfh4KHlI0qt3z zwn8DnHPcJS2S!6Jx_7_ZxGF&*$kO^l!_59I+*j zF2q7arW9PAw_l#c5T<3En6@MNo!Cmdn$i(vF4B9o$E+~&1k8GR+pev2$avXkL0{lC zJiPCr)@i8rsf}iYf+Ek9YsfhBOrjD&7wh@CP3`UK&e9?kIgs{=KW-wt8a6gJRsF9TTHLm3R=}5k7#t96OoiMydb3wc3U*Y z$w#I}DLeTBR-GGBBcyBVcQeHnIDQW$Z6;7%Fwik;j#=IWctooS{E^@F7y{T}YsGH3 zl_ZRy6WU49O?mho7-#M5UXIJ0t4o}Xzv4I+#22jC7neb9Kp7*0?+KjXt!00@G9iiL)EbSUfueoW~*$=#3F1@TjretHh)_V30 znFYfF`y(8bn0ei`IOfzSBB|{TWc-Vb*Y=Ko2N>oLZd9@JmMl`{VH0DHnaCuo3pC&+ zyw3D-IvCIl#7)zf-?w;%1L61xn|WfPKDYJbWI}8wPX|ByZ7UI=eI`=nQ+2aOlAE)v zI{21h2r_JwssnIq%_a1(MYIq8Ozu2wa_TuV^i$_nx5a>MXo8y+Bqzk znIRznc3E%^=MmE?6I{VOS6J>W;~E}#JM-_ zV8pV$A{30?89?4Jt>xp>GW{s5&Z`iMZtq>2&`DP-i;04Ja2y|hVWmmmjsBIHYGjHK zBE-4fNVP$#?7kvFNe5b5%cme$`{U$T!FvOpC#a>_rH^c`_UHY0*;lX88~dTf0joQP z_~DuSyz|L41a1%w`?EsIF!rh^ym@ZA8#~9*V2|zxdhNY2$X53M_DMT$#obof_LG{C zglV9iCw8(~UczrD_7?IERbZqH`z>ua_Wa>dxHSTX%PpL=|Fu_hVZj&U*TwnXxZjhO z2oZunVO-=G05e&XN7;{D8|QHbchs@z<`D;*3ny!UHJ-&E$!TLoK3l!IWDw_>=|F6k z)NW$)FTkL+l`r1Q+l{cSw(EO41cK!albNIC9=j}7;V9lE8Xp$!*7{>HTH*P zI%@Xs=dwZ|Cw&Y;#bj^MO&0cf!gIGoYPv+lCN5Y!T3=Rdz5fPDnY&uI7}LH)PH|jwx#yxYs< zz%)V8|8AqsR)z}29o#1Ra}bW(36nlwf3@S}1rcWseXWz_E)KnX!(um{1j*F6S#Z)z zxaR$=N%|q*ae!KWU_@C#C|AJzu`?!dGtD%J^GEJ{K%>ED8k+yb$YfLTa%J3%WmSW( zG2e`;MnXvzYb1IgdPcP@R+os2r<bd4vrwxv4qkf&rdviz-ylmjWKsm$b9NsUeyH0C984tLGi-u+Jt$vREfZye>3Jk{| zuC|ijCvfano!dRvYc@_gEqKQ*_-(K!V(2}EeTPHI)exTe>#rd2kH51X{CKx4jz*U; zi^_is0%;EGT-Kiqtt~~K*{>(W*v}rLlQHi@Z>+L*a56Tj8}F6vjz+Uu`*xU^Q`LaD zvIJlnnyH?tIY-T8vdTW2DXZFfB6l*R&;_~J)Ac}1A#nG(u%)i(LvifL<^wUt6pgso zAVFWi>*dbyIRx^n?{O~qy$vVPj0?wF1dv!hBz!~oXr^yb(Mc?<8am|*W59 zN1bG0Cc8x+@gh+=1xgFI*M7c4xSu5y0*xje4|I!u=1sgW*~YX2-^c&HjSbS&UzKI} z$q2G~M=9fpOCvu@Cs)h3S{o+r%w zLg9)?>o>Jyx)IfnR-qq1+N-?#?cVzP;tM+8qLDuZG+p8u3>o+JA8RiPHGUOuwPFtY zW)zn09gU*ZtnFsxV{1n%OJ1vZeh)mF(U6Ab4?m53MX7tKl+Ob2aya(B=i=p&{}y!@l>!)jGt z$0WC9>sw~wUrKbW%UO#mrh$3yXh|YI0ULw7ARe~xNC!Ua=~3MC+$&4PHGG8=oS0=# zIP*28JiL1IX{{YFvfr{cZNBAF{${!A`tB9cg{oo!8~u&2g!U+Fs;Z| z!Ph|YBh2S8+ufmP_Rg{^+{3m56;jg^iWdCp=sVCmf=YxqgQTw!*c9H7Q6<0F`SLV} z`%P=Y&}UJ&TNmU6j>73t*A}|UBR5V+1Lvdx(bJoetM{YYS_3q9JFm<=u``a#*Xnem zw@GU|c>BT<#ksIo0h-LlLD$uO2+3A>#2sZ&##!V{;1nLu8fJHC@AVc*a|7>!Clwb~ zp5ze2SWpp74*ESbvC4)4(!ycRM{ww3lkA{k$bo0gN2|h_RvR+JmUT3i@b*hq;{C+I z#{*s5=3WCNp`oM}70hobMXj4R>6}xCvPdZOG~J82kN)L%Jo|%CL8S z1EmkZ8L(=ZqC6>$50Us$|CJXJ{Bm}rxa+)&BO#cFgee)wD^gbs;%S-6jHVlbmVeEj zu%&Une$MAV>!m9``302X=%aon^fhZYMe{)FR49MizP1{^MxceP1@EWrCL14SrN%pJ zg$$gmg?Susc5>$&o5SW6)+^Agm-Tqsa|gkG_b>kXj>BFH6f@S_JvDK=6ZqtKinhKF zaL8x*U~Q_#k6T0tg5X)^GjNK1WD zMb0zVv8=0!mThGkxygm>lYiSy^0W>p^6Qi&FEb6*5ncU4;iu!F7eW*kTo@XyBG;VvUjF9$I)aCPv4~W60vj(x$zKq&&0^To`_qJegU1C zaPAR$+ib21_S+;Nchc}_r^ke_?&Gb~rRmRh2^s?v82EvYXl?bl6xfPtdM^vH$4Qqs!;wlD6|lrMoRaj)G*S8My2RxztdiPP-(P8o39cLCA0 zdKVV}UTh}E?)z)czn?6t@GK(l*WGMYyTAPwC;ZP-sF4MWiw`mNVWwmvtCAfmSw7JH6|kpwX?BAik%%%ZXftQ2szVqAMFXCL3bo5kCgx;8lw>^}JBW{MN+ ziME{c+GIf9rh(Ts*&k(HdI{ANS<_y@@5~s5c`lhnuu=D$S!gd+B3V~$%S(v4B~E(( zk!CiPj5&=AM#)cTuph(DKXV;Tk064L3Ib}KV^3hA$9B|%;WAXGj(A!za38*$W%+a`I<97bciael^s6is;a>;qUB8fMx?3yXQvYUnVx#MGDb>bFp z1-K!KxI_vStu98x_!1Y6xBpa*g}KPBJbgle2;i1CW0nxG$58=j`kxMyx0Xyqp-N@*$X)KYWf%$>=woH%je zz=2!bqR7qn`}>`9-#35oCx`bryx+W@&+ED#muxO=4i9xXiI&ASF*^@u(S)*YIMXJ? zxL!K0!C$p#g!InS#Z?&!C#ZTJ8_Ic{XjO+5o5+Qf1WoLeYs5sAHHt;DQv@!V8OAfc z;5<`w(gry&P@PvZ*)v8%yZl<%?;=)U!>(5zw!JlG3N)fv77_wy<5v)aIL3ih=deFl z=Idt7%h{2@l|uuj31;UeVLMPG2G5{cdQa}wVawC2V+u&pIQQv~e593K7y~<{y%H71 zKXRO75xU>fLiL&AMz3sU9|`gEPnl*ETM3Gr`NvIet6+W~(xC@CXhM!T14bRnB6#&N z`#`5Rbww|w`_4RD)u@n4E(deR@yZ}CyP0G2YnU@`br29j+(D^^TbK^5BDws(p#4{H zU^%bnC03P^weDa*ak3OL2AYpYJ(q>bzt6f}+*)lweRY79v$3W;%VxM#18i@M4d>t7kj6h(IIJC7VN0kEh9xvG) z;-@Btux)fz2!XkHcKiD|mySh;O)jI9;bCloYVwX9f>H{# zN2Do<=1be~r?Z>l+s3NUAtOD+3cr97iwBBkrIx}H!zFR^z6H2g7ZIrSqv8lgRKke% zWK5oSZqY3>X=@=7o$hFA(gNo1P%&f@w+jp;#G(`mrrQ%Hy%%<j0>IO)=JYq%s&`2@eof+wQ1ksWua z#E)k;!xa56f$VJ(&~_)Y5JW95_KQCBaFvR79v(#1IK#W9o^gjHWJ$&UiTT@%4kA^9 zAE58pc3_UV0g(Awezc=wHsAf9;S-xUYvgWEICpcxhV}7>{7k9+$|!Vp-8H^Y6j6j_|vC(9w(^Xuq~& z@XxSt$#E0jqhciHL(+I|t*a(FLFTWdC6}9-6f)i|8FPH74;}pW5(p(lDpiDsv^5B# zz4r6LmDPPSq7o43Yc8{Lutf)>pHB(m(q-EKDk@^f_ryy;?e`VQlf%83X+k^nq=k+q z8~A4=fX-QuLoKnj;M&?-0joa}WWSdPg(5&7jO*kRGSsfAvJYb-=Q|-o9qT|hOb8)x zsSFmleaNTi@8`Z6Y+16l`@|qaMLtq`6aaN9yL)h7qPEn=oHCDJ+&*)(j~(NdfOOI> zKezN^%pK&w(FJ^sr4lLlg){Q#-Gf77otvhBjf!M#*L6;lOQeL<79}2@TK9I^Ji4N< z4w&bJ*;(p@?66oz#quYK;re&S zAA6>A@5B&W-JtGP z%Hljm!dxbJBtlP?7c)4|Y(g%|L}|Si&94sB zX2yO`SH!n)3u9`R*7Bx~n#o^`lE@M06{xSa|KO8_>JSS7(tS~81m3#iPbCWErI)j@ z4VmBi4utNOp{jq>I+vGK*ot4Ik8-c@^dR{2bg|VgzR=0sC5XyPJ~^c56v{ z%ABXthL|xQ2OXMyUtX+$LzId`PLkoz(XQatO!_N?@Q!Eo(gSIdU_)hv(@XC;=N!wU zVH_de1hNv#4-9PUM_KGRjQ$S#KnFkDgt-}v!Akm42E40jFjF)4nCEAXw8xXB@-|rD z5cun;Vr2Fm(S%QN&b`cak>7d=#3+MHVwguw3fAbiHwad6Fm<=8kz*GCnLQ2Nc4GBt zfn4FTx9yt;^`z8D*R@pHx_LN-_c^rw3YJ+z|9^2BtLy(WiV)c!!y`cE3_``^uk3Kdwn?e?0e?m7V(^iNdEh__8iJb6*pE8~b(q*OiQKh<|SV zVG$^K8Wla^3;R2B%b{BQpO?SPFHUo2+`BPyQ|6S-@;SimEL}~NJF#MN7w!)vH2l+j zTJW~$4UYHtokxA2JEu-#&OTzDxTU(wp)xATOBDS_{~zgR&TUT8$ArK~?d)BwY+Oq7 z=agUlxe?q^u-7Nm*L}0nXWBxg>E>JTv(yH@tM6XXn4G&$JLin6MGG$rpM96Z3Oc=b zHk>us_sZN0oUWZY)4@0$P1_~R+~4_HEI`XQUUwNOfBlJUfdJ{U*CfX}XLpNL1XO*Z3Td zYx?oGGb^WaCe5?sLcexzv+Jl__`x_`6wkqb3t%60d~re~NpIoryYl55DW@C1+~k-8 zowJ~%w^XJm%paHb!pL89PNv0=^fbThW~mRIhQE+t@epUDJqQ|>%7?JH{eC#=tM zii|{?bJ&QbVthk~>b|Ap{yws9ONBj`9-ys#EeiU`21{o9Z{@YtZT9`5VgbJ=jn0o$ z4|D65Z2EPNeVEe3@F`LyVW<1Rr7^ULn!WbvU(BOt4Uh9Fa)f@rsy*OY{qfc`bjPdqSCu<=(7pY0i8gsLY|}9TpeT+xTaBgDqqzX*t0kSu zXa+0Atmn~1huiCilN({?{T%y5)<;$Lai!)gC*QuB(|=&9(;v&w2!BY$ zov1J4c`}#AzD?n7kLKSVV6`V6e2-|oI~un|(+S_vSKeaQDP9vs2xmTz^qe+6E!4;T zK*u;fUjHNYzlVA6N&k^AI4+OXdqIXQMuVjur-uA2`F*oCI$l0iNc^g%a&QlKZgcXH zYpn$HmRX2sLd*CKOmv?g;@B!^pF1khpt~G1f#))Z+JBQk0pMIfrPleS1mzDUpM(SY z(jMQC0u+~?4c1l=g+N&-7mn=V?U7G}aQpXJs^sTDhkuqAqWW(JJCh*kU2bz04_jyt zg-6w5IQtAZ2ps`w&@S=a#WsZ3`L3X2-mv$|z2K^PcYkG~{huq{ZlMB|E-lO`lG357 zT}$I&+Apj8%RU{7dM9yC2aWb-mYgOPRrcBOismpKpR&)<-zN5daQG&kRE*fShGkRk zf@XVDQx1|A?A-)Zw0RFMkDcE?lw4p_|0g@aCZZlQ(KE6cs!X}w`f}@D%gZ7TitMCf zwo8@3f`I?B3~d*WHR?0mz9ICDMgfM{8SGfX#~e8*4ZD@!9ARLiGZliI-J6GpAl$9P z1m`_T)x_0*S|g<}ngP*t5e;`1iyMG3M?hzex`OuX{Rih@u3gjwjn1B}NiGCX{gW#6 zgAm+dWmEeWr}|Zkg-%N^a_X51W}-*s0Kn{6{H4v5?dn!iPM>`FpC;_tNBAX;)>x2( z=JGh|zXBvjoB3=CRe#O5B0W?g#Qj(Kf-iOcAa}3y&>(Aui`u&?{{xRTU)Zi{55;cP zyjB7CD9#IS)vvxB%buAU)tF(36J@oLHR6^DI!6d*3j0O1=qBqSDfFRwNpOj#TKIpE z)GfwG$ULzwk%1%7yS zPirleawc86zJx9mDiL+~5RlkXIWxa;mip3qwN>TsV(eL{1AMCRd0u~(rZVG^MmGmZ z6qVi;H1>1wW6m>J9LzGTOCn`#K?!1zAn<>oCf?^I-79Cb>77l4GH2%L(TAT)pPpCBdl#Rj(7H z>J3%qv>Q)+GYwmvdZ5Vs*$DL>pAcXad>{_R-is$;GxNqnO37YcE&@~V3J*kv<%v4P z)*YpxHg+;o_H+Np94{-C9X%rM7mw?0z1DgV?imvjcI=19`uX5whiB_yNydH2tV2Sk z_loV*HJKK5$>8!SZfj-^qcoi^nH74V=xsaxh>Gcp0D9}Ahvhu7M!C`cPgb)Ig4HHz z^9PRxMsnwW-FX!ysNenM5)vmgxF+7n&c@8 z4=0bvLj_)OwrV8#u+5!8$`Cz5Np}7_7q; z;2Ekd48?F^CJ{myyC1ey^*i56(44U|#k8{=;18CJ!+971(Cwcme@+pC2A7GJ^u-ok z9h@RJek2|_3Ex0;!#9w-olclsk1qtLxgF;t*C@V;@HeLG#?*DUd+2S`Vs!H?jGtYmWO-UhxfhYZ;sa{vZzVPN%o zov^u{#au?;D0&<7p|D8#ifT$i^oJx8QixojT}F(*I2>v9@q z?h`yt2`@24&o%QV{r54xtt~R@6p-4&#+dN9@u0Th>k@(KlfHrd@RfW`bSSmjd8*R7 z8eZ>Vkp7?yoF|3w^xBVY3?EUm2|LLIH~4F=mW}c!(e|VF;@9KF*Wq$P?o^{{0Xb1e zk5WXYt`YXPg$eZ6csb^mO(x{{*a7H4jYS=Y9ijU2pCiIsO$=UD$|tWYaq8}QC1?U1 zb;~{Bv&k$fm;nzG(jtx*^VeVhqRr*l6wAOEZ!Sk1by@RyeSi@n?4$>_I4q0{@v4qz z)mOwnjd>F5vP}FGfev&{0guy3DEY6N2vqHT9fLH%Bo@B}YV)}6Vi;H6?oT=}|GxJN zNu>h~N^=YKn5$QJ#D)&pE0Wi?)z#iuTt~1YkHyAzmpL=dypXB#yv&d85dvLF7xP1& zYtBmW(8uA?kofwr&J!48vW;-KYx5sj5|aOJ!qxTLFvVD!9DmB`8ddvxPm+~ zltZ_dqzT;=*a9ly_T4$X>cXYV;6d(IL!J&hf*RtkitNajCR0eB@)kgEbx=7t$|#|G zg;#g#vDk)({4JYhbqO=CN#O$5Jv^>H0uqWWfc8(*dOuE#0*~@&*Th@ZhOxR=AcGeovQ1pkhsO`Qe{&`aKfnfi{L2~SnNz9nZT!CUY6M#n%!)WJ|IdF@I z+f7+0di|@b^LiSovb#^)eR$HE{HnMU&UgMnl>{*DvFZjqGlqy3EOVY<> z6r=Z|~767iJfVjnV56+ERxVV{=Ex&$Bc?|p7R2*K|ix;lb9iLesqvbGEOH?Z|lw7C1 zF%TS8)akVpgyM~(^{`E9P55zwHzg4kqT?VrQK8Z!$j2Y0fQRG__awF!9qDzQVq`WW&nl--7Gk_zk`^iv1oZrj@df$Gy!-f^;XQqG1bjuo*0gnw~xt6Cfy# zP0kF-g{&;|O*TUPJhrXa_<)j*>xI#!ObOACxfDoyKee5&+nciuS(uGg@=h$5@wC&+ zP*zl~6#(d0-K&E5dwEGV6=}J+tPNJnm410u(hNJeSOn5e2j4C%^qy# zl1KcSet~vWfZ*(cjxlz-d^bVw(lDk=**9;)vNU%PQxaq_E81W5$Y0Hsxt!R{ zX`h`pSHZH-BQeYJmmoOIC+b#2H<=0m;46MBtVy^pzFYna28Np=4!>GAolLY-?a4=Z zLx9P=MT|Tl{C7WJU!FPJ+87XLn09qwWIek6k{I@PPA|SGM+X0`UKTR33<8GqG=YJ% zW|RgLf|z*0rCB$O>v}9>-gE@+S{ql_F-{lGbCii6W!iU3u1@BzQ0l33m?D@HjRuxo zY$gJCYxp*8kT5j)0OmCjN&LA279g1r+v+nR10ThJm3__Z!UnNf5n{LrDqY{d?)uL= z>wpRgTB!=BxU?yjV7(3L0LU<%FLJSqmVOBV5xf|dc3s?RSTFYXsa|ZMHx%+KqZI8v z8CghDkXYbRUtL26#B5BB$&dM^^QQ+0AjVAmz4P7Su$kl0LMw%v!+Xv=RgJCBh-rEs zHk$6`8(!!4jSNf(6T#!Rx%P0yCK6B87qj?1ptHY>2u0h46uIh;?|ypTl)M+W z)-H_v0gpp3%POdFpst(fUPgQ%A89S-$j-K%sOGls6cH;MD;V7A(5_$V1loKGnYlUU zCf7{3o$Zm_?8-sb6GipHvEd05|buiksBcmLDI*$`F;C)@49&en4gtk=1%zMM`+6#R2{ z{;ZhtN6`y+&kZ#=g$n2d+|i%J8UK@PcMrhH4(2!3<2-wpl{r|q34Z4MEc%rVH21{r zi=C*S>ckiJ8P@#7UuQ~NOnTa$PhGn1`_Ulilq37|B^jE4f_6FWTn_7RCJ2;^7^e`` zvSVRadQzyFU9Gt!_yn(d>UY*vyYGf6(+Y6!UeS->w<*Er4lj=VYTcQ&wiWCNP$Ky{ zn`C=mc~el*l4JWZt=-jFjjDC`g29c9w|0+QrFDL&-C!#xWV077<)s|6C(NV=pTp&F zc@0K6-F?KO{TKII34}WKXL!6dSKg6tIm+2Y$5T-}xw; z4O_CPzIgH4*^YI}rR&!AJel?rkCb*2L2I+wn0s^VwtuejYs;Ka@>-_z^a1Oi&b+&d z%b2)ONo@*-7uYUyewBK6Dws+HsWHCYuwC|XzCw2~FqEVG4)@7pz+MZ4CTefpP@2qn z=p*qkBY{SG_k<}3x2K#wyOi9m*E`K&@tg#kNex~St^Y1@db%^o%8G5y(h_$GNtIuU zP$!s>=caFG4zj12R9;$hN%81&+Wp##>d*5#NMUWKHRqKV z$wqQ#n{<%1OMu4W%N~b-R?+-7wwVV-!t8?6HDS&iUK4n?2X`t`tbRmUU7+j=W|3t^ z1E+pAgnG5}XCunh2co_;!t6^ZpMv{zq?b}^|I}^}ANzkagv*8{Dt&VCd6e~~AloI& z`vPA!{l!=BXXoR0P!lS0D=Dl;&`)3 z%R2n1E*wxd6&CVmy?DHeGp0|G9Breb$;;{Wrzr>ldZLp4)w*qgG9+D?a#F>y6K8<# zrX}0Dhi==g--g;pAgcI7?{2NB)<*UI4m*75=zCpRq}V>I#juJ5+@r^9IDcRX7ZRgZz2Cl>@CvSg=h{IV&M+5IFW z(TQU=oi7z{Ejx}=#8guwLRyvWs@(6Opj|PcCVPET3%mhIC5akQtaM13GI5_h>!b2M zab4ov;cd&+djKo-s867ikF_Phl5(QAN*k^c&;Gq)Kh!h0gT*m>0Gl!(L&IeQ83ns3 z^{l0H*+QsniY+sD_m1PSa0e(;ua|HNz9@_8JbX?$z1>(j_F9;taPlKX@Zp)(458#B zGOW}1NzBF|S$T*0hw^PVxn)aJt(Ywnr|B#B>hK<}UCnW_E&N%6;OUk~mDTu)m&X!o z(;s{eVn^IBf>=E2k?d0i_19YAu4iP3QjB5VCZ~w%`3EhquR^t*u&<{y4h*OHJqqLK zH;rLg!v+grwVD&hft}2*>*8v7^V)ut8`AxWeY;LD4%8$YXnAStYW0_6%Pno5>K`0` zoQ4#x9|MGIVvuv@;fFb}NXI5WnQJc!>&*JxDgwcm zM3w574wb5|v4YKCC5>|#uQ)42u2rSrYz=D@LC_SU)W+yw>g+}0Z3p6=-Z2ro^iiYT zvGFIhiFA`Xkk(O*i*>nRKoULBVlgk?usYu{dLKWa+C^f@~{i&;XK zIn+^>tGc&Uy|TrceP1_rD^f6S8xN|b0wTKcy<7CtAtGb_iu5PHgpXdXkEXa#tjp+6 zcM7MNl;|2a#^3F+S|)%Fa||sXvHCc|`5&dZg4O-H;Qsp1Jg5|eEy44roIbqY`{`!L z6H>@1lm_AY)Wl0C1>Gxa*uXv=<<+4I4V;o$c*i`wrYPANv`HeOZM72BjaCLDDQZ~`y zK_wnd5A2=_sFU6_Y2Lm1=Tj`P(%G+RY%AgCQdxLBkF_c;BesFq#ISeIP*uwha1k;l z!Qi3$|A7qcGFH6E*^J)SIMs5xA=@(Du`65gUe?B@>v5f%XS|yb{4P!s%!_9f?(sr; zi}ZlB_>f%ff$`b21rT{Txhi+#2u|*r ze(ts&GiF1=w~^G+4Z7sXTFMAEzHZ`r9qIV!=Td_$hH3q{)*4>uPuNEjoR;&I-bjiw z1Jjqoy>&#isFaTiRTUfK z|Gd{1=kP=xo@vBIk7Ofvee*H(Rf~{;$XHnMd?U4=YYj43eGXkvQ7@b}>5KMQDTA=# z@YdZ&*oq(ev#TF8(Y{LXV zxace3M`h*F9@q)W*0C(LU&Jt1cM1&*JKRIbhFEp2GpzhV3LK7W=MR3;YQ7Kxe>W9Q zs);Fd@m~`p9o~4=EPo^4Fq0Et)|DV_&4Tq>hsg>B=X`8rX2HaZA>_oX!1)MX$UPvz_1jfWL)3^Mj1vTgx9x!MZ|q_sQK%yb+q5nFwpO0FIGur2p1jQQ~ktsNP}rOJxo zlDWAcgNPt%|3`W1`nMYFfn_S0L+vh zqOef;RR?2>kFmZ@*qA?p5`UclU6%46%Q#{)+619my^47+Q-D;fUS;en_>+v$O&wFo z^=sBgm*W(g#qe`W1JLnh7og+ZzcAXDtAtwmTd>AHU8%mt$>92cDlg1o_e zZpl*7dtPkujY1S|>)`I#%n%N2Rwe)vn%zTKso{lEPy}FLZwoOf|5gu<8GH6KU`v;K zFt&>lfI7J|jrh)0FhuI}zyRlxNqHHZ)CL{juw^M|D0tXh&!hRpiF>wyY=SFX zX11lIMQMj3%NJ=Jr7@SWKNUl2J&p(bjd7Y%N0=Rl9x=%{bn}?@hIu+JedBVRqN5N3 zxUz?T$4oG9Gyn;UbdK57WDq&xCKsfA;S2f=j^aEumjj~>YiPB$v_pqZ#=un`mR$mq zBIld74XR-+-fAa1NrbYIX}$+u`fRBc_ZzBRxV%97_B-nuw{)Z>cEYKvV0kpWB3{jl`BMwc=ixdBH2h*%?9le zrcKKB_4s0ZhzyQniJzlRP*5Z2^`j={qWSg49wsN2pFsbTPwm+7j4iNPy|#g{;Lpo9 zO5lcCVzxfXV18ZI%pLg24RjhUQmXZ}kxWxiSa%(h4TI@!z?%1)9@nz-KJcln&<}ql zoTU+{5@5Inkj-vZh*S@;Y>UXDwjqXq{Wua5d>sqE*A@jZ zoEpF8R%@>94>UL611j0LO{$#V0X*x#4?}vkA`s%Urn^}vHCJ%c)~Y_0mcD`erd!Y77~{abAr`1JvJSdg!VF4S8VWFv8jKq=;_sT3fpTRT(YOC^<%?IkB3ZduM*Kb|c@L>mShrz56L! zpLHIlHpCaaHD@6RICEZbbU)|D`gW^nYl-)3R?tG~i)WuBg0pTqvB%~L8rmCy-dhpG z|1qrK4<20OUt<;EI{wBu-JvD|?i6EvC1`41{`M|F>HWmn{fp7_guf7yYF~ zPvg!iG!FmF^`ua`n&$7`y7xhc?sIT|_wtl9_nTj3e1J!;v>Ti3@EEgQJ_$e8ER*cF zUj9jE;J&CnzC1#eH2JO3J0F;~+1Wq*Bc>!UfP;QbsiRNASg4~pghJI%8uLC(5A7GO zp58AwrJiU}2{oYJYy)4A8x(Hh{TO2d&G%@7D+nyHt01n@y?YBPX?i_^JcB9r#edG( zFt092pt6ysi;VYG2Bn-l3-Bqxj^%WbvDfKWcMBYN+E}z z+@GqT_pAKlXOAIK9ms}6qui+VuMu5VF4>=$Hb}ju`y@o{PiELhktW&f1EWo*i#XvUr_kMkFgQ*;;MWwVUWMC_R=*Er z$&FT#uFv?oGBX9IKvF^cWJ!V9mEUqacrf! znQ>tIILdU$jBe|l z5HFvIj{nWCbg}=dX58{eeDu5UoYmyAgG@)w(U^V8VI$@7rO^U_y)|Irv`7E*fK>Iv zEVXSyBK@_@62Mw6km*<3ONbvZUaJK0Rx$W(H7e$%AFO(o{Qh|PTVo1X? zBPW%NGU>gsnI}H0S%*_;ShepOe!m<3_4@SH%P&Rfhq=YphDC5MQnRjJ=@g^O+6A5) z`U)UwI{>0tveR?NDY6`{oxWqU*%s-k8cRWGmL)rFIr=yBG5G^y}7JXiH^GJ;wZI@Grq%EVwaZzi7 zx<3DEIP0EC?^SnA5so)s{&ZmmjTe$wy4VnJQZL}Zq~WMf=k;mSMt0|f?<7dgXi!_L zHZqwwFsgS&=CQyDx5m@{1QsFK*STye`Ve$1pf1FSwf)`{C)^$W^h9p6eXWXGe3*88 zdv`16;OViEhwPq)BRNiGH){OdZwaiwSOO&*i|zg%Mef zEteGs>)*+P)4lIHdFeD$=F`XU&y9XR^9$*ruhucY+*|sEBaY#i|1!#B-&GQv-frc=;qOr)rw&1pNX%a9f}NXt@Do8l`^rTL}rJrLkZy2!-<><14zbb&<%Yu(x^UUq_|6J{o*fo}5$ zls>fo@pxc3PwUU+1Xv(30~}~ImiV4Tc7vWodwTcEk6>lOVeqD5sHwq}w^F1r-<5KO zLvOiyMv8af$_c@~;~igXJs6OdWxNqh9MlL%@DN0{Y`Py$wtLKee`i7_F2x;OV$42jSS;dBppAj2B0OygpW6$_+b7N-pN`c9nhTjq5!iA0qx{Z zS5@QuXNXD~^Y!2z5*KxRp&Z9yD{!sdJcJQ`(@0tvkR-(Lucl!&Fy&!E`k{<69;#_U z4$y)08~nh@s*5tB5E&4pJQi>dN1=-X{n|)MR_XLegqOI3g=bya_klK^6Sv0H zraCX zXvsVr*Qs6Q!uKFb{hi)By~&q!Jel|b^@h#=B&y90p(a`@vNavG7)$98%|~P^6PJ?< z)|AXpkrj!FZZd9-H$?}xNcpL@jdJO$7{DI<;6=RE0R1Leb zaT#?@Lct94?zhH|A}~NT#aLoE1e*79A4mx5C?Qq{S!RH2UX}>&W8QxOK&Y|u=&-d| zl!ot9ztFW(Si`9P_cMp%&D)b`vHV*2?eiL&ov6M7C&^K3t`MWlxT=~XNN=Plp;Uhg z#zf8Knru+fKHKX=+o1dGYok}vle?qUtsAj%#!Y-@NUq#b3xRQY#pkjAdgqZRAIU=h z&U&27Mq)qx?pX(`s3rHnWFloUu5R##+CKAV0*j`2hZ@bWAJ^%#HN2$wQIix*YSkii zd?8bNsu9;|+#-}$AS0=-<)cvRHO^hCVic`oypNn2P&d$ef%XaZ3)>+$2aUsluA4++ zz=0OCI|ndy#B_;%7$DQjCdq4iUikMGTx8SkT4IHRzn{>3F`JNZrf}XMy2pIf;yFBH zL{`LcpY_PIJ#~v%nep-jj(o3#29a_75t?B-l=}C5RB;OCud+#=+lrBQZ;dfd*02$S zkY^qU4wKNY+Xul)TQy)%$g|baI`M?eLaF>1LGNJ3dlbkU><4SMY#N7ZNxo{9+IuM& zQ`Bq;VL~*4K@%wFksv$2Rb@FdskEzK#(D7vsa3PseQ|9(S|2*!)6T4ox|iUQbyd}I zCzeEy!j}q~>yY0aLEH9_c-q=4WmTQJ7V%((BlynYG@Y;6Cs1;{MT32POkjv50Nc`D z09|Z@qP-?DO7{y4-NAh#jwQAL-@UBpGtBMbkBOGs$;QFr!`*9u8r^+dOp-q^WUPd; z^D2r$Xf`&m_$fVnt--s(Cwx$VBsjh=fCyUQz&2^SLAyV{Mnn9{`IOx4o0MIjBVIM+ zeRHdkm;Vsv5i9D;i%YmHF-v*3i?*Lxh3)Q=sB`)tNFVVW+Mzc`$+TW^&&yUw-^nn# z$ICyCr?)271(Y3|6PZf7x!lm0}C)1Z9ra8e$hup8n~Hi=l-hZmQfk~MuJqZ zeB>SzWfqj<)HLSnS~Ag4fYQ8VJr!^xS#nZHRe~MABsEFd7FqR#6p#(`M-08)C@;XRr2!P_1C7G+*N;EPG*13Ed~iAlFU!cCtWhv)&Nb=ln$ zs^nGk_DntWbZRBDxb@FB@pI{N#Hz0p=Z-HI9Zaw70VzGgy5$QTILkBQ+EX9KA(K6m z-p3s$L|gd1Ve>3xEL@d5xOeq=O|CgYQ2riiwehx2?3aN-e%GGQcJsgWuW+^^9Y_ z`}Ld8_p=e(PRp}aGo3;*?(OeNB_IRIxxybnwpDNZmfq{SfC=+hr9e}d<@HMD+#nwXsV$*Gf zZUCTNCmv}|>xnnwQpDk!ZP)gB_ZC*&8di_s78}c@8>^?7;pcRp7?( ztl?Y-%l8YuiuLB`_kHiyTVHHY&&aB=%61%P>iqrky7iiB=LZtD=c+xkoDPsIsIN#{LQG!vuDWf^qWslRf|lg zs9!J|PW~#@+E;GV<`tGXQ9hvHI#@WEaKn~K@F#!abfV-@=TG|Xs^$nF?D|e`* zhduw9t@kb0u0VFNG4L_WDOkTQS^5^f|-RiVtdn3zLx6=*rcQg9}z-?-|R1lswb3!h_~^!w5b^kiLjute0{ zz{-)b^OH?w5%e z5N%R$TxB2QJloZOiL5pCc}RnP3-6xY&cZtOOZZVeZhSlCG-)Q{SJ-j8Z@`7#n)$|S z8JC=)T$|c&@6ms8yeqc9R63>;QMoKWvij`a#>4CNoK}Bvl~-ADFE{TU>GW)>j-J}G zKmOzLUZF!GtqX9H&vLK^=^XW6OS(+Mwe$_$-u|l!?y9|={@1HdI7*5rt$_59NICTR z7`_)Fkdy84WXn@zGVtK-NVYa!L!#QFWOpD`D?c%TKd?61=yUtQ3a`ce@XB+c3ca&G z+JEm{-00r;`-zqOVQLk0c%`Y-1DdaPQWVuJe;%fzNPNM2_~z>e>zf=|@(fhtD2v>e zPO(0VTD@t%{zW-_CE71?-Nn)xxA1iB#eeD|zo>2LBUCN))vq)@F6cg5J==HrK^M=r z`hNxP=_ik#-b+>cr0Ub_*vB$YyiCinsr}HC9!ilm1+Mh59?y)jh2V7Li?>s&eruj;N?Zl-M7lWJq6#NG=KWGqxZ|| zZ-IBc^P7l<&4{d=;$!7Kk=;Cjh3oLA!CoYJo6uX#i%QXm!iT;lM-_yMspo0_$kKPa zxpNzkY=!T&*_vAs+U zcEfS;Z=2`rsWGDNjigo4^v*156%j~woBXBd7zZ!U#*wBdL&8vl6DkJmoQ>4m8`5+f zeROP8P1QeujnQuhfBf{x+o7UN-|hK|sk)+S@9ObMv84Kpyqn-PlO#E5- zp*|^R(|YvH-h|3~4t%&iEBp}ctXa@-NIy0WpFrdPouB_1$DdRP55IQ-p-vo;B_Gz#fCs8R4DY%p?lyofZbYqGy!Eg7m)|{M zu@qPeXbyQjP%_lH|M10w&{`&Av_{yjIh9l%gzpac(Wz<}vi=uVH&a==pQ-*8Ya`s~ zs?jH4XT9D+zv2(J9nYJFj!fkha?l+*oALVzI2*|0F>(2F=Lo6V5j$I4>+TxNFepZA{K zsYfXWLe!4B1ikn3_OWme7VWr404QOBDG*C$O{k_R((peQYd5gzbY1*6kE;N7fjB1E z6Sw*fG+UpZu0<|hkMZ_uz81n87$XF-jq$Rby3^vj7)NcZ{^C71_(!QK&~r8Y_$gaR zp7#VSr0QUP(j%`onw1%H-QrWPHkp8thrB1H6tOFC9enjJ3)Bg_S7@ankJ}HI^=vKv zy1RFjyV$|6-6#$j-nmL09%zjf2QU_o>agp4} zQ4_rwf=rlXVN~O2D95K-K1^PfG(Vucre55$aUV~8TCfLn+a?hA35na7cQwGAqf1nb zSBs!IeS~o>oSw}P3!`<8=dPe)(DvclY%8{#(==NxvL!%!V0|FBJuwe`+(A`(*$6UA zSm9nuUt5Q@^sZ7W_v}lo>ux~Si_w$_r`hC%(pmA|7Gd~;XN*aKF*fzG2~>aN z2tt%q#K7aT<5p}b!jt))h$554*~e>HN)4fJ+))#t$b{7Enc{2FcUOwYU~d@_a{A>B zE)M*MWkX;v5p&SqJV_?yM?i6jzZJ_>`HzOX5QlJEx+y^+dA&F;baO=@+Ubd8 zR-crO%YgDLW|ARanj~=KYNYFt^MLaeX7tR}noHz9+G|3iKHj;%NwaCd%}R2rL4!S0 zjaR(4ft#jMMQ53~`g(lB}G-j&*NXAf>_Qh&KfH9(139H6*RT`z+3-?$=@yqb`Tt#o7v z*EPkqWY-BZMT+z-}W$(O-LtLM$a;;+a3uJN7i%HN05h+))MBUFMfB^TW2 z?ZjlP3KSTd;d6@40KHxYm~ z@RpZsS@%H-gPC#NOclCo&k!;J9l@@?J_A|%S9`jLd|17w z**cO7%WSUt26`agr3c`CgVOWL9JK|Aa*Dw_e7wEY8CSTRJdv{6hnbeOx+%4jdGoSf z7$Schxn0iaO)Z$b7Hh6*j5x{y@QLKhNG+Emtlb!lRr+qapl;eUoN=mAL#@{)q`6VG zcim{ipm)b0Z!Ms1yz5Scn6Nzp#S4?)jQM|dnvQ@^1td^!$76t5-={HW`c}!ejFs;qKMRe9AP4@9V<{rb4~ZYO-k9DimWmx+ zn9zEpwJ+-*+4)!+HPC!t}I0^`3PzZxGOs;O03xa|Mp z6)J|jmX2DV)Omjx5cz+o`s$!IxaQrrrF|(aR%j_sacOaPC=_>hibHS-5(u=#-Q9`> zNN|cS1o4%FlAvBb9Zn_7)l#3Kl*oq@uD7B|QZqERtE0g;@C; zJ+X4~?W4Z!hCd_6EMgpA--qb(@rNoO(J;ZvBT@L8sK;E%XmT z{-G+~^g7PShQlX>KTFS-(@7?u`pr6BsVJOWffSZ!J$>=*FbaXb@5Ljw7e2~c7=4T? zWTg*xwG~X5U0qkL6>~sU10j{;dB6MEBpRR|L^?L>s0>PHvL}XVBzD7|28yoC77Ko@ zo>(@&YUp#{CQszaq>nr;)C3@h7&R*z^!(tW&oD&9C8-1wiEeCe<3&+3TW z%CJyYR;4Q;)s66U%d%9+otGi9s#{GTj#7Hx6%#$Y|4D1&bQv9mVqKHOzx3ssUQrA5 ze);<2OqhR1y>maORPX^Mgr)mCrgB@+{Uzb#u~`Q|^@AA~{~V}rKVD!?T1Vd2fU;Q@ z&vwV5SB8T5Y1^R)9ek*x&*K?X4}7?Cqm^4gX#ieK{c-DDx73l|L9|+@$wuE;6Z<7O zdI_|TfCtW7@nlp2Soui5)?r45xVy6#jw6o*q=ZZpk2U1pW=t-40minKW6rh?U-CM+^DLgtC7rmet$PDx-V6AS{Ta(gKz*96{a55cdm2 z?~sK+)A286|=Nc`yjP2zz|2My< zThyqfjVshm@s>Edrl%${nA{+d_x5en-9ZG1227gcW}07Xp}A;zZ@O107@fv<_=I280sSTPjg4mn<8GKHA|oS^kU^XUdjpiUv@GuKF=xf`{f+7;vs_s56D-zqLn zwDtfk7Y~rZ<%@GR<|q8>Es?aLAjvgcAb5BEZw=D-;Sh#8>w6CV`t(eDN1Z|t(vg$8 zQ%+*ilK*1rRa$C;>vS%q%_G`?bFPrFZwI9w<@%_GkY?zHYL{OrnpwnPPZ>rbkphPC%K5cR+!2K(NSDJD3LApW?5VY ztO=vdzKw~tbYmSPhxRYyZ9cXnb0t1l!rPwYJL8sYuAcRTy8ySqeW~g(SWE3qO}+Gi zRPFifQOS8$pv%m8r3UPv39h<~eXz33V8p?}CAz(x2-RJEK7D|^M0Y|Gr`lbxKdWyd-JG{Q=ao)y zZ@UZbrW~+8ONZj?A9SGT)*LVwn0o!i8UJI*LCIL{o{71lxsW8? zRDSLH zIXsvUSfjS&rsp`Z-SXht?9$I%$i^5m1(I4g?>s&i>w?_CYI2WzK%JDe`aV){PYj!+ z5a#Dh0P<+RzNV!laWAoeb)qa02isbk7=q1Hv-I9?KsmqP&J^@Ux*jwy?jW|+GRImA z))z_^WfVY%r~p|yeqcT(c-HmX6f1^TgN|x%*0rjoEb*b@w``9b%vnljKYM@-*qzxf zOm=(Gl~ACIzE1ehi<-;=O!aJqTkYWtc&fGbvHb**~a9r zzX9EVG!S6fscbRLwL~Av`~{Ic)M?Sm2Y1V7r?<1)Dj_YULuIt(pzhgi4P4hbB2kog z!--hJGx~v4l@N#0DO`--47SMm_D6g0uxa59@|*)qTi#}3~ef1O!6Ob)cn5&v8TS#^A9e$t(o`g;1qWwN#sV7?{!8PSm zHo!KYJ27|gI%Mh{rtQ1bP~Hu=RH_BB*aG*~09!yp7Iv~s-OP!=gcVaEn1DPf$o}8o zo$AkukmpL^wTe9s$;YBY4q`63uz?N_+DA1%uG+dS z5F0%Q2d=l!JtOlslDH_Z@vel$!h;hzA7iv%Jp6=$E`N`1NJRSJZ`?+_bNi7G6?w>1 zSxd=*(_iCzi^ZSziL>WDZbarp=3KYX9`5OldkN6rnU$Fh)qR`Df+=8NkYO8!cj79L z5llU^@orye&b55SFjLub<9_2Wp~kb*#j>HU(++3JseRAtDJRVJw;#f&YUa=Gug)FS^9;H&@ih3Q3 zuvUF&rP7fLKH}Myd(gQ7dF~7|Bph4DxXK9NVYJpn9(tukRW(e)l9LR3r)6FYQhYHoUmLtG z$!&G`<=K zUChB6vh$ly=c_nJyl7G9{Hwm0=LoM$?_`WF1o!az2||rdMnH%F1~~Z zv8#{`uz~tt>CAXEI?a2gILe+CD~&ZXL0_Uk;8n6_S#duka2M>=7|rnL@yX ze}cKcGO-Ret$EE*fxghkr#_b~Ja3c!M6vZ*>qKdcmba=+$lhY`ebZC(Nn&d| z-bm4|hed=DlTpYS=~3c2T?_c?^YfXjD|o%lyrACxxs20lyp)<=bMj`4nNu=#x{l3- zPGs}fFBP}+b}5^@uUC4sRiZJ7Wm2X=yW;!O>6V^so%`d1(jOR>FSumeuD%mIHT)6Z z4(j_sQFjG8LDYw>KEJ5%xMbr95296emTBPr&FsCCEh0f91&x05K`%+FN3)kd^ z>E_weEroLTaT+0!^7_lbTI@Hx!#1dUgS%#^zs}#8#hH zT2DkQ>2UH}yr@Qo4cXVhi*1F7l@W}W89*WJ%$EupS)|(Z7FXdBzo{i+FjEpG1 z`fZn#ovz`d$CN$4o-^GNRn!ZFlgOFlZqo$z1eUWpQ0`#+PR6 zrWgEd6H)LfabiCr>Bpg=&tel;-qWZ4tWtrR;1YDzcXWk6p~DTTsv*tHP}@O|_scLj zp)pUl>0XCbn&TJY3F61^TS$Dma>@BLYJvz#(pHx@+VaC?s9&kwrEhZgz8RjJEajTW zzxw{ftsLknSp3L=%At6in-tcgS%WM$vXlN(cN>4lMy$Lh{6#6IN;o+;U%isjrrp-W zPgZ1!jB2E{Cl~bl$=D?3+7PfB%+?J^p*?Gd_}hB~4ETSy$GEs_43(wtdGNEc1gY(*VK33TlV@ z)k;(wj-=jhS<?+7!AXea5i;9kck9MT(AG*nXV`o9+ zndr-y1MtJ0lx=_iPBF|;v@<7D#!Jpyb{ffaH|zbIlZjeU)T}*k zm55uJjkPemw7boo>~96lb=|B49B2*fKqTQImH-Ye5zHwD}E?lKk$1M{A_ zGzOa7y60PjTsQ{M8MY{n{VkuRI$u0_KycXok3E-r^9LQ{Yw!{~gwGuuOEKp3z9rbQ zwpP-_z=m@Bto3iaYth`~nkD>uh}#-k3}l+Pi!nd4t;)3+GP2(WVI{Xga4`VZ;kIBs z!(ulWLUCX_e(rgF+jdv&i>=`sU%OlV7;>>M1{aew**Gbl+y4%4pX6Nh+o|1Hv|B)8 zibI5s>9(8WY1Q4|cib75gVQt~-a!J}Ltql{vxATK5|`fF4xp|f*Oe@b`@gMX6dQB3 ziSJ;^yhL5(V^+5B`%6yloA$jVmYd-pdupW%4?K@-%na{csuov$9?qdzsJV#OJ>THo zG^9qFzs5c2WCjy=1Tc$ptzOI?Gm2;{L>hKYu6j`%T<>GIhCW_~D&ACCpr_iUgADJp zR}AA~dAmFVzH3U>^iZD9pCAXX3WD=@v zkbjrg%mXPj723A0n)7Sw-(KK%JD3qeqQ$to5>6Z2PLPXjE3-~MH0a`u#oY%3^gBLt z%*Md(E>|0nAA8ErdE8VVqJ|k^9%N)J+ERLv$Ptwr?ZZQIdwZB^8SLa=VUZ~PkTBYq z-V?`WhKof-2Fu)T4aOQ78&lAh3K!H$9RGbdAisb#sluGV$^i!4SATV z*d>u;v3G9ndfAGlL|*P?sP|BgVOsf+mvNXGr|wt{hxfIUCo`Y}44okn{lJElWCXCT zq$}|9?0T>899dr2;JnBsmqbr7x24JZ5Oed&(2?Gyd{N5E`CMQUF}kgs;IR`^Mqx;k zH(Xg^7vz-_(;%^GHc?;K*eCY(^~rZKsL4zZ%h#b5L1U{2)7_a8G`#8V-iNrl}FpY32m9@t^41iICsZg8Loc<_~Kp?{xO zuH!x;L_&_n+cdT!zKI@wOx-d`r;jA0girV41d94@lD%=UsZVtJ)(MVLM%b&TBf~n( zdzTi%Ze*QW?Fo}=M{TdhF0skGNCkZa)7QLXue<3-7e~uuy*3WKfxkZ3TfM$5K~WD) zv&9g4@T@AE>I*&UCd)D|7<~8s^VY6x`@CX=5!0N_IDR@zLN5BUZK$cgyfp|*Xr;_N zk3TVu*icpsV4&Dc$XXMby1NZrYVv+_b4j!HXXIU8$4*pe2tyerKcdIQ{R(y-`c%*E z>dz1KU~(6zIquc|rH-gtm!Vq%WMR~0myZrnr%kex{P7NqXAdfZWGP91Kqo^l>8homu! zS1oz6M`Rr~FP#cW%J_jFg)7TmEw61}?C?`dgA(LePyYPiOo`c*g3psv(j1nWPvB4_ z7qqT+z?=BX5!61(sc**dG~Tp&3gWexC%KY07cOQTLOu-(fWU;j4o?XAP8lExPa1@x`3 zBY4MZDID;$iO^Ij;W>SS?dJxr?M}%G$`AK1JE&7~I6U6fGV<}K=a3t!lz>l_svm}= z#JK3I=XXL{sn1n2@(h9aF%vxB52~C1&bh7Dw3E9-PZ)UDJfr6Sv@QkQ7ENZbFs!+H z_JH&9p6OyuZrPkP;JiKfk;T3$KHvYv(TCF`q{7QwS~#tG5iaBT{S~p^^zVKWp5sCZ z@35eA1O749nsMDQoSHvS2WBN2NXA)U(04~a1% z1mZpU2&r2x&N_O)K$wy*kM&+?#Ph7K$rx+AO72Ewg&f3DO5?VA?65S;8i(x(=%l@r zciyrC<~8s?VNiCX=_SvDb#UeWbyOYIHK#amhlKb)-b-?6F7V#U(0w&QvvJ4xNui5C zkZH+e3%Jd$MabJ`kKRi%9c=9@*+LGhG`cqQm)sveZz? zi)Nu#kUw#*ZpGvjXk>JfetA8Q*x|+3(dW_Hq6SdAX4T4zTnhWr+UT6lCnP~Mbv*&u z=Zb`$n_IxVzPV_2XGTum1fRtf`Kvao%(XDodK!vNNVgxqB}2Dr_e$%{i*fG4-NTW& zyn6JWy&jI$^=mZZUp@n*N?yBA;~x$dvGQCi;F&;KvoQ@y{_k3&ztMU>oImf^cQxp; zDm&Zc7FL^eq02k;MmT7n=V9;qdYAH@4PByQN9?^m6sn`jqPvS2iW_F@UT83x;xbUM zm5E44((LtJ`5Tg7d;ySYog@9I9O_^NF;#5VK`#EEyb8`)6TEjJjEkY~{)|FP+Bm*u zQ?j0=hSopuO460-ld@}Z~Qi}l;)3<|3e);@J9oGOKXcBxFbe%c+K4lS*&Va{nxvh@UXYWvs`=RTbco8=yPL&+2k}RRWKR**okt84KjND!e{d=6s zeYNM8QRjNE?Q)#$y)m02PDbQ`#$zt}mI0mQMK`AY%Xp+VU#6XjQmo76B(wKx3pi)7 z-@U8@67@-!C7_q_+R-@WDj|x3gB0|oEa9n1mg=B2ws@#oV~CT5gV?Z#CPDZ}@)PkD zD`%@-b5*L<+YjtD09(h^KR*wuvX#l{^a2)=Gf5SF%>FSB4-mM7o>eAx2Mp-AekzWD zH|P}yJ${CXFaFkKqHM2_<5a1{Iy*%{b#A&U#Jjmr9cZ*1xcM?!Rz(}93y0|4 zH@dF;<8LKgnWe;-wh8ciPS<*`GiKhFFm3y+9Ezfbx5lnxgm0Yr$K5yJ=v{NSwZ_4j zcUkBZ4zVE!KGDlDJ5<6>SOZ%gCQ!tSHV1OpM#wVh>z zv&*`F47j6)bc^PLCYXZJ9P?dRU)vx{*(Hjo=7C`LLK7>txbCe3NgHNoom`!Yx=P}) zSb!IQ>a%m-z6CU&gP+^p_`2j(h z{S>*`-ldZZ&~40l4QES?-tILFZ0)e-PNqNAgS8plQ;f7Fx+M}_Xi-@yHjD`Utyc3$ z;9_WX$!ZS<24zt@6n8|gLtU^rXB5<~-T+pbf**g^i9q`KeKF*>2_${vG=#q?CdyH(wDJq>dz zyY!|jF=%s_NAiy-$5B=Y8;qOzVp-^MOOIw+EP*j+zd#~%Th5X>9a)qo0!kK^UhRdO zzp3}b&@)M-B@s(Mo)31>#W+{$4M9?%{$6tGY^vu)O(pqOh*~7KZB-wUw5hI;tJHXg zxkG(}Ckxa2w7R5!`h(92pAV@cn3;sa8{*yqyuqgiL#Wi59iv^K_FC;|d1%geySdzh zNSLO`nA@AWrONEz95z`*;CU*0pNhn02q9Dz#y+Ob%-Wmz>C)6_LkyZ=yx4m5D%4!- zi`XuV53=@+VKKR`?{S}Vpc8q4y;o2eYL)H7(PYxTvw~${HGR~V5Rb=-8mqsX)5`%p zWLSMt&B~IwfuB4yG~ie10x<7zTN0X+m!~oqZ++I>P6KNbIFiE9PWPIyNpMzMTgeaD zELOlm`s)b(Ao+9sD;7*G?i`V6`POQ)7tk57y>}3w8u$-aK{C@&`HYTthpB=z~sq#QLtI_GnTjQY2C6w2A-v1f7pxaGM3Vv zh+nBD${zkCP6cF4*p=Gho4nYdX-Z!6b#(p6p~P`- zF@ccFPlpn0=9`!7;XWFZ1o`Lj_D%OB6I0vHZeL9wI!=J3^0-S$AxOcqiNz$y~C{GI3z-9FiAGM_ip)5*_N)A+vJ9FJ$e$nE)KAa%kZAPd*7;%;+7KK;cE zz^#2J>!V{kssx3tuC4#t+5!1_^fLj2SP=xfv=o?q? zj=<$B>%CunI}g(rm&Yx>p*Ec== z%M4!Xt}3|N;6Btx#wEn_6xTTU9NlHq1Thmw|F@Xs!?-0$)NfvNxT~Szo7b;jM|@^t zXJ=<(VhVCs1puI%+@pxaMJl&n^YL8&n+g1%8kj9<4QX-`V&c!y(RiMoo|Zj(M@JL! zRKkD${NZ^L<>u_nzlvrGBeuS9eX2LO-*nG3Xd{cIJ zh_{PNTK76vdtf_~mi!@BNI4y$u-ChWD@N`gxs`Rm;=dHVRKW00>GG?oC-4gK6)#Xh zYRm8d#o04ol-%fcTP&;gT3`vEj$W%c>oS@jxy}m;%+4hps0F~91+Q5qP?#lFxNhuJnVs@UuB(B)D zCtMMWL^_r=)ytZ{fq{gZX6B?F{iAd-_z}3E`Q{u)w~7*tCPnpXz?<}%N__;_!^qXN zoMdarU2nqp>5N5~Ndd#cV#L;{4nVx!(b1`-vOYOMLoi_(rIhezd$RY)%=D6?H?vvm z*gJk};H}R2yOAo?x8m;bn7;SLE?hP}4)nA`-Ap5QeAzG82TFev=d8$s>~Il)s@H?K zBtA~0HIbRb6u&+iobzb2Fa5L-8x5W7cy@8g0xM34*)@>+C$(xEKhM0&)8hhC+O8A7 z$qTi%sWY$77FQL1`E9rFZ}&?ReK5Q`+bD~I>Qk{qR!xQKK>NmSgzGc=yYSx&n2AY* z@t0Sk)bvxAVo!IFOlhxd-0b_akA_Zzf5~cQ61o-x`4{pPzhyE;66Woky?(K!+fbo< z?(Pky&@anovbEiOl^w3?A#nQT!ZyN~H0xD@x)rlkytx4Mx*XDpADEg;z4Dzv+>kp) zaj4RfgZUWy@8jlfmEq8pflNOgL5Yc{&Eo@Ce~dkJCT;*0ayqodG)M#&~5< zNBldkyv~aWWC<61UN6m>?8cSU3Ok%AZf5GKJ8baS(3JUR zER<$*o%WU9{B$v4G+cbc`7E|xIxzI$Mq`_dTpe`sk2)z1K3Xp&C+$ajiEn53`r~)^ zOz?6sM~;}Gvma75E4g49L4TafFEU78Skk$?uJ2)e-d{Pf3c6#B1X1=M{QUI4i^f0y#ND2Qd%= zn1ylwB%&N|w6a)*CUX?JJ&f0_5d4+ju1R0u@{*r-X+%jg8d{FS>Pz!`w({M;0JCn% za$RL*4C>5Iv+f%UV8WDY~~b$ncm?fF_!d?IwaO#mT>%} zx(fOghR9N&@f%GE6_X2U;E!B)HCC-s&*&xD6Up=!7TRq&ylJ8neSY*wQR~9|i$f(H zxp~SO972gDqdJ$FE$KrKhe- zDGdD~#xb9W_)PGo=F0OthLgSElI>XwTqQnLG9%jPBVu}5a=cE(@b%8em^ENZaZvO- zPPoPqtP6HoXR`^S%@R$~*HL$k6{}g;Ny(&$gf(*e)hzw;z2+NfNl4vu`eGH%wP`!~kL%qkh@ zar5FOSJOe7az_;~x7I-*xnW0OULbLdcNpMiRE&~?k1dg(RT};LTGaFR0y-%zOFaw2 z`S{R%+cHP9blJAa1cInIMgsJ`^~LV2cx~>y{ATmxslqb+i=?^ z{+F^3xGSz-xcjSyV9!G4t51HvNXn&FV=zEmlF@_8L$~5a-u!X4hfz}P6S~~yTl;pJ zIoMH0B>Rtr$>1W;zNPvL%*$jZr4`V zLWNvg4I7iaYn)UNUquhRsoXo_nAfrVM4Y(--W z2Hxx?5s1N7fsU*RfUxPh4Yk@GZUF51=X+Dz2M5mn-z<9GP*TRk#}jaI zammZeYnhpiPbY1joZ-=jX`xT5(8VE&kT=&f8UKS#vTD(C3PiLLztRmYHc#%3Pp%5@ z&qK~8#ZSn;rrv4&C%G`g=)H}|CR!FJcT z=H_>HHM%<}!zk&g;ZNLcyxn0^t!frkbfh-@MAFyI7o*gD6A4?MS1-0|tBZc_Fd1*s z4%q6a7>Fx*-!pa5aHd5pk%H|wc?}nmHa#M~%iw-3);-m5XDA5{oBYBn#?dh1Eh76B zNj6*3KkWSF`&UW^^J9`7pU|ptCJu3|BORsS6J99vJtG?%K3(Bk4rffKu!gPzM{s1~ zcI)1=qTo$iVZS*ZvB5v{d2c`HmH>{&BLJFb)@D2{=X*7#B*?*dpYMXYqz4~zmJD?A zCX=+2RDztCF9_FHMV(c`44>Uf-V*WanC77vc%^bWAeSD^m)}aOa=LpTMc^*)yTO=h zzrX7F{Wyq$ROz`NtKm+*R+fsRGj28xBa{ngK0W=Hwf$sUSER=&VQG+U9yS5caFj?I zc&u7%Ru%ourL@ZZD?QxNnS=Sqd|0k?^Do~6sel~<0V2W~>G==Na`Z2Qt&DO-NRLj& zwEXziBrE;H!o6lVh)*gcC{4tWHDhH`@VL$&v0;$#O|9k6b}nQF%^FvMpa<{ZecZWZ zW}sX#h(pbtyY+@l)moQoXN?p3KAeeppnflfDware^8t+w_^=W@tv5Q{m>3kK!h2}T zs;|~PY6P`YZ4awr`bU@Z4_f{zt8!Wa{F6FY`4TLBtQYa9IvM$#_V>Saw1r{wv_ACp zExG27k<3wZS$Hz6q951OCOp~GCwZvN>Hmx(jZgPC5v$*6yro|DP8}{5qnxL$bsqi3 zbSD+gzWypLv*K<}{T|I0YO_{4q#~^jW-e zaY;>9(JmjgS;ZO zY~kd!fqkenTDY_JhJR*K{TMp5U4#jqv34xI=K6kT4J{kF?R8L zC}7r%JSrDuimTpV_h+P}syp?f{rOptOH`+KPL!5312p$f+{BN={eW>lYNkH^C{zYl zyCRliA6C}P5cxI)Vc(Mfr_(4We zR;dy+&rcWS8&h%R!|)F76hz)uBq%%KnfvBb(_b2{wdUUnD)A`Y{x~qrz~RbrjQ6mI z0ORVZ)R(sSC&KC})Ftq)YaJCDqNLnZIpy*k3tGqtM-21g@!KVh@=DH;GDBc|?Y&Q* zKatOG?G)Mx+Buov9@eN^p{2C>=9xt^4gF4WJd1^&k+#+;63}MDDVb~{o2NnpVK-LD z+z*Zl)%1UsKLuuwj()-Z7S|(V)iv8tG*IBhI|i&{fN$H|(`=hYSenLpDtFry9tt%) zPVwjkJCY`kEfgZ!DNwMI8sm7(Uyj4A7(D#v^kaKcmD<5iG8U{1=LhW~UrpwD_K&b< zG~^ik8v)8Xgq3!Qy`VbL1JdRUwBgRozmDWtB3JsL_ss9e8c&6-sI5G8w2y&WBgZ>n zkbU(SSLfSq37Md!FQP1&0y%ZpPvq~M{WPSHu87oYhHdGRefzj2X0WEZzRs8xlX0)k(GS@#?-%CbN9l%^Ga_#wJFR* zPI@QA=}Y$zvy#(ezh!7{35=g8LK+YP*21#@I`s4%8@e=pY{-1QeBgDc*YlWjyhGZealQA-|+nvlnQY% zk5OwWQV0=e`u`*0jc*}eD!6?yPs=UPANNCiX09iCEY+U>-`b$eS)D3X$r z(w8sp_p>KNda>4WXk(-B#}64fVv^hL>}-mQiwh=Z=9xu@zXxIe&m~^fPZNoTM@D-8 z`6X*mWz>7NGbZZw``PK~=~-R!Rcf%=7p1g%-+i{?&bI_p!}5Pq&YTYa?$Te=^<9c@ z-SKT3+CQbgli0TDpHJUSDI`~rGnV4lB`RDE8Bp@$*B_C675-BvcVE_7_LbmZ_V3r3 zsfHGscCP$Q2*EU4rc}~RRpm};^{1x-8Ft!6dTJ)YuLJA|^bi8t`eyQ0LC>D@KGHMP zn-O|eoezE(ho_bQM)PC9qa7edPf$S1)KWFzBeQYa;BT^wxtWp>BAy8uT~0fzN4D3X zI~u zPQ(HTB`!WPI?gC1kfGDmHM6OmAKN=WPEG*Sw`F319+hcX7$|_j`JmdI_8b)s0E)fJ zwWJjC1rB8};b>&5e9u(fkg~cg2B4&>c>j)-o-c!V<86Z;#WE{opXwMQC>)o=hWng^ zafG9)w6iSo_!JL>1yzhIF^m7mTx~T{na8FBa+@&vdiv?fspj%3UiA8}5o&QQynM^@ z7TUB{Gb2opT^$nxWuViebkUi#9R+P8O9lHt++Jvc?_|Lh_KB9E;bmP!*g*X%Kp!uB)G=p=|%Yo?Wz+MVQn~M9HT1)a*lI_M`R{)Uf8nTS2kt;?>6}edAmz zRmYks2$Zkz@GB+XiyTLn3Y+h>dCdz9`YmQ#`d#Pq-Ows1gE(h))+cwqRO@}@u{8*g za|fXW%-OIh#j^^wB+VDAJV#`)>F%hgaKoh~5}zQ5mZ{#6qpH5~NGJY^5-8q6v>M!2 zme$E5q!Y%oJf7>{!a$L1?vC`_TnUG7Y5eKapEn&*uCV}L>ltLErW$I1KraWO6O<`9 z6;pA=Ri(qzJuoVSk*=#znxRY#YRbvVDh+mBA|)Pi*5`6I24#afm9`gUkDfi}E4Ehp zb6ReMX!P^{x?W@jjXh_ZR4RoOWpDv&gv4hR=Chp3O4%}h?u+Q?Ajmmtb#C4lHpKm- zqSML7W^gU+qiq0Nt`~{LHb^`-!HygjJT#!CO{#G(H-sXBt4pfnn)2x_$wvu_(SILr zC3Z%(MDklOcm2NnG2k*EBh5FxtYoerQAWZ3N(iH~Dz2^`K`~1c=vTHupjkP^@_<+pM>l9miMv`?vvz)}MnJcT z*vfQKjy+E4IM4isoRcRn1(M*8Qo zHXzz3BD!n$K=T&V`sb$lx;UbC(8D8F02fmCXjR6?h|i5nTYj)oN@r0+@&1`j1V#Wz z!z22^+>YQhxpLrRS)~wLS#!<9ZA^?nkqFYhJ5_ahE79>~VFA#zt?E=Y&denhI`Ex= zgKDM19iVT+9RI{YI_0a)2s=l4X-!7E38qc#--pX=ZC9uyBhOwfS)w+sHd_JL)=;5t z1KceP)!GZ5B&Z{&;PZdY6?JslQ5!@n`aAlTCCg3ianBL8F{Xj+PKTu`6I}$%g93iv zXKLV4gm!0FCFhorPZ(bQ*Ly@=tNuR*`M;r9)+IV~wX(9ZwXMw)gVOKEQ7G3e+})kX zUF`~7B>w#S;%Fse%5Ak(*29Cx+}xaKk?jBap@GD3LUL^rlbFIny5{C)3I9L;(9zLx zaB%##VmxKNZGD_v(Jdv3mueH2n83p$GXCoi8)-xj8Fv`*{UxNFg?#@A(%6(8j1j}o zd{KhH708dA>{?;br^yy@R>l2;gHmPOLAH00)^ACDeS9h$xs^^7-x@>W@X{C2zj?s< z69NY5x)yr!vKIC9A|IT9R6ti8G=V0Mt4N+EKfhq#@F!u;31C`grjB0K*?TTX6*L3h zY|)N8L=kAznSDwR52Ql6)|A#Xq@2Zwr9&d`PMzQcZ4-heqg4ryjxYj?X*vda-$skh zxT?#Fiy{{aUZ&S_457(!z+K;4zRxYrT^`wl2VVuaL?w6oisd?2a&Z@x)+H79S*wis ze2dq>>YMv~3e6tzWQow1if>ALy{oI2R6Codt8K383MN(Oq(S53^FukL1WTI5X9tb^ zB&&hxdTEAQE7K}_zn;jE0+tKOZM<4@3!256CKzJ$gTp@pR$dFv!?3z~X;SNb2l+D9-ijspOq z`&~&Vv>@YHwn>xcN#qP)-TL)J3J}Ap9s-^m-_5^o{^>h1uEGL3NScyOcQ`st75A+oo^w z`F>FF>QAN6Wqa2l9!_v-oLbP0gb&C%t^SS>y9{uw;wtVGiQFms zPgM?dmryJcj(?3hn^M!{5t>%k^cDm{6LY4 z_FkWR-2@k4`m}?9syDB6wRAo@fmwm(CFlg`IbYKeh2S3kB~0iTrM1Tg#m5GzzfsOq zx!kNFGjSfP(7Wl9nP4AGN6h;{d5d=QX`8rj^l2jI1E!TMTSm(>yJzs)^;yZu4;}R4 z8EFJ6Lp~{`-{%Gk>rg9I%yY#QI9byP-L5;%Y z#ZVl{xMoBCWyJ7s9c2&H3I9eXTkm|V4iwS~%jOlF^q~q_6Zd(W(k$^n`H5K5OgNWY zFFE9Y0D!pSUjyz9Q8FT&K4?Pd#T`VGV!60nE`E;#I!2oSM$oBpP*ynUdG~$Jq0;k` zRK&;lR$iNO+LYi!ftUxiLWBb&py1f8vZSazuYshgyFhmgk>%|8t;6zYCE5v&rn}NV zAiB7$ycH3WkFyk#1Gr+Vv)I09{KSAe>pzQ*6wcg3bpSS-{|md!M0+p0$n~J3rrU zgE>(~+8?WP#9n8vrXXK*3PS+vbRY7e~?ti{0ig!N!zuv?wEpJfT}ZlSf! zuv-hoKyWx9()#SVDtoQAw}&?=2H^7WvF)#71@SQ7x%+s6%bD`s;@t=nj{n2ndqy?6 zZEeHbZ9zprML}vrnu7G+5)}oJrUC-e1f=&KY7~?rO+b2yiuB$)NK2$fdM84F5LyT= z32ATkQ_eo)d%o{|&-wHHdh?6H7|Ffvwbq>LnsZ+BTBS}CD&yU6mE55(PrrVcVv5H# zL^w^twJv!-PvoGjIR%w-m*|!5C&cL$brcRvO+Bq_31xrg`ZfG0Si_%E`sqIZe|dOG zh~}+p{}i#%`8v6w=|7j2a-F9utXy5=($d&YojMiqmhbA-tG#`FS6NwM^hid*bLEV# zu5MjJ1JKO$zt~FeuYg!jz7~v(=nf1F{2UzQ6B3F{O1gI8i7-_MRPomnacL5H>rZ9% z;uEBmq@2K%k*pCzCGPKGm{|>kZwW41vL}2$r#wzZUgp=#%tPmC3DvwWJq9;1k%tT| zuP_cy-@odL>g3cN>HbnK*axr9u4QE0J$Dl1=9Dn7{rb(qr{k>EKpw#J z$D4(Xtue<_x`8L>*fX-#Bi#vkuZs5d5{{)8=GB9|Pahq{$ut~|N-FexDH(GKOtEuH z!c}|vZi5#t6P&iBZDN`6qmxSylPkQ{Scc2F50987WgErDlP}?qe$5)|X|=z~GWfZEw>w z-uq#a1|Qx%tvnqPd)a4naj9&eaC2rsHwb$^B#+L2Vi&ZBIbvOeI;-A)Tk#4EJmINu zd2-3&(g*`(a&U$+13BzHxMRQ3Ly}%9n_7Md}k>;+F#An8(IvpVsag zIkoDPxV9KVpSPmsCxCWs3Dq5buMBCWMmvjB6>~waqq-6$BPK7}B*TKyFWj|Dz2c6> zrYFm$%4N@pJ33*$*V;!_&z`?!nZ?CvQ>C@zJ_#^2;FPcT8_ge(R#Gf}N`e#V33I8L zMfJ$1$eEc(YFZ47C7_T}W`~kX(tL}Td>Vcg!AxC4L_`74OSBd;O6S<~L2lYL|7OWxy24SbN{k{oy0qd0DxUyQC^+U$n%_pvwFrQ5*_Opp9afC~@9GxakK=J7?6#pvrf@XtovSvnGV07 zULGnKzk7M-%bfR%9Q@`k`KUvmmiydQO7c6*$fz|lGSlHjNK3QfQERRR%#dP-kuwaS zyN!9ThSCy5!6f0P0fjzR^?D>{=9~j&L-x!cna;0vnyQyiotw-a&4WSg5fUM4HcpU| z@UEdNYDx|%nIcD$-`cf?1x|-wVlMG2R&<$@m@WZ+WmUy)O6i0INy!FR%$qU%&XU@d zk)`VbA4-2cdFpN?U!Ftp!I!FZ)>jnF8Kzi0jf>8uU#DIYxDh%zl{Zk-6BMk5Rsoj4 z0xCyp2PNDtpRyG6Rhkr!^!ZX|*Tc0iSG;cG>nbVpeM_?7W|h#I9ZK3U(!slxzX za~!X$)Dp!0+|^Fudr?R6%hx_%vY0}$#}Dc_^vX-1%tdXng6h7n#bg0R0S_ZBM%z(V z!!*Gs|L~6Koqwl){=?%%1&AvvXVuyxya;<%57pE#7>wkC!FP9uG5H%9@y_|VIS*go zwO?P={_5dy%cb*G{)^R_fI#ucjbSg~3O6`~{)1gXo{v3PgLW*Ng%p6G$#%!fdzw9` z_mrZdL*E8JWcV{aWDUNFzT8&w&BwPj0oJ20#=AAS*n?CzW$?@c^)Ft3U@t7l*wFvM~x)j z94qljcFKa)ozR3PI&QMF+dksv1VB`>MHAeNY-W8k><&gBF!<;OGBb}oOV#?4a@nG> z?2h)Jok9L2bfaa{*KT}7HmmU~u!JiRbd#>fkvB*jRw}9U-lXVomIMQir`^#N_?!_V zcTyHrV#~_HDXZ4C=pf5A3nca}P%VFQM`511b9VRhTm>&7`sx0L(>dm?0#a)=l)dpl z$Ha~uhUoFMD$3$rbjb=aT0+M18H(8u0ik4BHFkplKtrXc83+7Vqw02H%O%Ug5Ht3P z6Yp{M;}0c;Pi5p6^L(MAc^u;j1>?jmFRJG|10Lkza^<{5XCY`jW@NCc!&9;Yl!e~z zoH*(s+~Srce&#=S6|)na7YDFdivDcSAoVSoau=D>`4u^w8ssO!%sv)!Fxwc5SMwK$ zyK#2rQL6XP(yN7aZb~E{j~Gq0tl{GXjVXPfP$UO}8K2-b-b}${)c{|JQN+y)D)EEz zF+AShgC{yX5%q`4n-JmQ9tyA(WZzf`|Is)cui9f)#%2g;M;tcz@
    *{BU{WrkPn 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%0AG0N`k0EEg} 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%0D_|FNX=y$HoqCSxGjRrGY2vQVgI5G)ul=kGEI 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 DPKj9I literal 9747 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
    xgPoM?R#FAqwJP+co@1% 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 From df76117bac517405104b708c388909f3a6aa62b4 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 13 Mar 2024 12:21:51 +0100 Subject: [PATCH 77/87] chore(contracts): 421 fix cypress test --- frontend/cypress/support/step_definitions/menu.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/frontend/cypress/support/step_definitions/menu.ts b/frontend/cypress/support/step_definitions/menu.ts index 2edfa5fc41..52cb0cbb5e 100644 --- a/frontend/cypress/support/step_definitions/menu.ts +++ b/frontend/cypress/support/step_definitions/menu.ts @@ -19,7 +19,7 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { When } from '@badeball/cypress-cucumber-preprocessor'; When("user navigate to {string}", function(desiredMenu) { @@ -48,10 +48,14 @@ When("user navigate to {string}", function(desiredMenu) { cy.get('[href="/about"]').click(); break; } - default: { - throw new Error("Set header menu '" + desiredMenu + "' is not one of valid status [Dashboard, Parts, Other parts, Quality investigations, Quality alerts, About]."); + case 'Administration': { + cy.get('[data-testid="user-menu"]').click(); + cy.get('[data-testid="user-menu-administration-button"]').click(); break; } + default: { + throw new Error("Set header menu '" + desiredMenu + "' is not one of valid status [Dashboard, Parts, Other parts, Quality investigations, Quality alerts, About, Administration]."); + } } }); From c0e657f4c25ec86ae1bafd711adf13a462886a89 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Wed, 13 Mar 2024 13:03:40 +0100 Subject: [PATCH 78/87] Revert "feature: 420 refactor swagger" This reverts commit 5d1d06a18269fe3d6aba259881a4129da867c0c5. --- .../openapi/traceability-foss-backend.json | 11069 ++++++++-------- .../application/rest/ContractController.java | 18 +- .../java/assets/importpoc/ErrorResponse.java | 2 + 3 files changed, 5550 insertions(+), 5539 deletions(-) diff --git a/tx-backend/openapi/traceability-foss-backend.json b/tx-backend/openapi/traceability-foss-backend.json index e521e1e566..11bbaba713 100644 --- a/tx-backend/openapi/traceability-foss-backend.json +++ b/tx-backend/openapi/traceability-foss-backend.json @@ -1,1227 +1,1227 @@ { - "openapi": "3.0.1", - "info": { - "title": "Trace-FOSS - OpenAPI Documentation", - "description": "Trace-FOSS is a system for tracking parts along the supply chain. A high level of transparency across the supplier network enables faster intervention based on a recorded event in the supply chain. This saves costs by seamlessly tracking parts and creates trust through clearly defined and secure data access by the companies and persons involved in the process.", - "license": { - "name": "License: Apache 2.0" + "openapi" : "3.0.1", + "info" : { + "title" : "Trace-FOSS - OpenAPI Documentation", + "description" : "Trace-FOSS is a system for tracking parts along the supply chain. A high level of transparency across the supplier network enables faster intervention based on a recorded event in the supply chain. This saves costs by seamlessly tracking parts and creates trust through clearly defined and secure data access by the companies and persons involved in the process.", + "license" : { + "name" : "License: Apache 2.0" }, - "version": "1.0.0" + "version" : "1.0.0" }, - "servers": [ + "servers" : [ { - "url": "http://localhost:9998/api", - "description": "Generated server url" + "url" : "http://localhost:9998/api", + "description" : "Generated server url" } ], - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ], - "tags": [ + "tags" : [ { - "name": "Investigations", - "description": "Operations on Investigation Notification" + "name" : "Investigations", + "description" : "Operations on Investigation Notification" } ], - "paths": { - "/bpn-config": { - "get": { - "tags": [ + "paths" : { + "/bpn-config" : { + "get" : { + "tags" : [ "BpnEdcMapping" ], - "summary": "Get BPN EDC URL mappings", - "description": "The endpoint returns a result of BPN EDC URL mappings.", - "operationId": "getBpnEdcs", - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "summary" : "Get BPN EDC URL mappings", + "description" : "The endpoint returns a result of BPN EDC URL mappings.", + "operationId" : "getBpnEdcs", + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns the paged result found", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "$ref": "#/components/schemas/BpnEdcMappingResponse" - } + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns the paged result found", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] }, - "put": { - "tags": [ + "put" : { + "tags" : [ "BpnEdcMapping" ], - "summary": "Updates BPN EDC URL mappings", - "description": "The endpoint updates BPN EDC URL mappings", - "operationId": "updateBpnEdcMappings", - "requestBody": { - "content": { - "application/json": { - "schema": { - "maxItems": 1000, - "minItems": 0, - "type": "array", - "items": { - "$ref": "#/components/schemas/BpnMappingRequest" + "summary" : "Updates BPN EDC URL mappings", + "description" : "The endpoint updates BPN EDC URL mappings", + "operationId" : "updateBpnEdcMappings", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 1000, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnMappingRequest" } } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "200": { - "description": "Returns the paged result found for BpnEdcMapping", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "$ref": "#/components/schemas/BpnEdcMappingResponse" - } + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] }, - "post": { - "tags": [ + "post" : { + "tags" : [ "BpnEdcMapping" ], - "summary": "Creates BPN EDC URL mappings", - "description": "The endpoint creates BPN EDC URL mappings", - "operationId": "createBpnEdcUrlMappings", - "requestBody": { - "content": { - "application/json": { - "schema": { - "maxItems": 1000, - "minItems": 0, - "type": "array", - "items": { - "$ref": "#/components/schemas/BpnMappingRequest" + "summary" : "Creates BPN EDC URL mappings", + "description" : "The endpoint creates BPN EDC URL mappings", + "operationId" : "createBpnEdcUrlMappings", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 1000, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnMappingRequest" } } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "200": { - "description": "Returns the paged result found for BpnEdcMapping", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "$ref": "#/components/schemas/BpnEdcMappingResponse" - } + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/submodel/data/{submodelId}": { - "get": { - "tags": [ + "/submodel/data/{submodelId}" : { + "get" : { + "tags" : [ "Submodel" ], - "summary": "Gets Submodel by its id", - "description": "The endpoint returns Submodel for given id. Used for data providing functionality", - "operationId": "getSubmodelById", - "parameters": [ + "summary" : "Gets Submodel by its id", + "description" : "The endpoint returns Submodel for given id. Used for data providing functionality", + "operationId" : "getSubmodelById", + "parameters" : [ { - "name": "submodelId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "submodelId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "responses" : { + "200" : { + "description" : "Returns the paged result found", + "content" : { + "application/json" : {} } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns the paged result found", - "content": { - "application/json": {} + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] }, - "post": { - "tags": [ + "post" : { + "tags" : [ "Submodel" ], - "summary": "Save Submodel", - "description": "This endpoint allows you to save a Submodel identified by its ID.", - "operationId": "saveSubmodel", - "parameters": [ + "summary" : "Save Submodel", + "description" : "This endpoint allows you to save a Submodel identified by its ID.", + "operationId" : "saveSubmodel", + "parameters" : [ { - "name": "submodelId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "submodelId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "string" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "responses" : { + "200" : { + "description" : "Ok.", + "content" : { + "application/json" : {} } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content.", - "content": { - "application/json": {} + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok.", - "content": { - "application/json": {} + "204" : { + "description" : "No Content.", + "content" : { + "application/json" : {} } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/investigations": { - "post": { - "tags": [ + "/investigations" : { + "post" : { + "tags" : [ "Investigations" ], - "summary": "Start investigations by part ids", - "description": "The endpoint starts investigations based on part ids provided.", - "operationId": "investigateAssets", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StartQualityNotificationRequest" + "summary" : "Start investigations by part ids", + "description" : "The endpoint starts investigations based on part ids provided.", + "operationId" : "investigateAssets", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/StartQualityNotificationRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "201": { - "description": "Created.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QualityNotificationIdResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "201" : { + "description" : "Created.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/investigations/{investigationId}/update": { - "post": { - "tags": [ + "/investigations/{investigationId}/update" : { + "post" : { + "tags" : [ "Investigations" ], - "summary": "Update investigations by id", - "description": "The endpoint updates investigations by their id.", - "operationId": "updateInvestigation", - "parameters": [ + "summary" : "Update investigations by id", + "description" : "The endpoint updates investigations by their id.", + "operationId" : "updateInvestigation", + "parameters" : [ { - "name": "investigationId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "investigationId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateQualityNotificationRequest" + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UpdateQualityNotificationRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok." + "204" : { + "description" : "No content." }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/investigations/{investigationId}/close": { - "post": { - "tags": [ + "/investigations/{investigationId}/close" : { + "post" : { + "tags" : [ "Investigations" ], - "summary": "Close investigations by id", - "description": "The endpoint closes investigations by their id.", - "operationId": "closeInvestigation", - "parameters": [ + "summary" : "Close investigations by id", + "description" : "The endpoint closes investigations by their id.", + "operationId" : "closeInvestigation", + "parameters" : [ { - "name": "investigationId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "investigationId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CloseQualityNotificationRequest" + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CloseQualityNotificationRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok." + "204" : { + "description" : "No content." }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/investigations/{investigationId}/cancel": { - "post": { - "tags": [ + "/investigations/{investigationId}/cancel" : { + "post" : { + "tags" : [ "Investigations" ], - "summary": "Cancles investigations by id", - "description": "The endpoint cancles investigations by their id.", - "operationId": "cancelInvestigation", - "parameters": [ + "summary" : "Cancles investigations by id", + "description" : "The endpoint cancles investigations by their id.", + "operationId" : "cancelInvestigation", + "parameters" : [ { - "name": "investigationId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "investigationId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok." - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "204" : { + "description" : "No content." + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/investigations/{investigationId}/approve": { - "post": { - "tags": [ + "/investigations/{investigationId}/approve" : { + "post" : { + "tags" : [ "Investigations" ], - "summary": "Approves investigations by id", - "description": "The endpoint approves investigations by their id.", - "operationId": "approveInvestigation", - "parameters": [ + "summary" : "Approves investigations by id", + "description" : "The endpoint approves investigations by their id.", + "operationId" : "approveInvestigation", + "parameters" : [ { - "name": "investigationId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "investigationId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok." - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "204" : { + "description" : "No content." + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/investigations/filter": { - "post": { - "tags": [ + "/investigations/filter" : { + "post" : { + "tags" : [ "Investigations" ], - "summary": "Filter investigations defined by the request body", - "description": "The endpoint returns investigations as paged result.", - "operationId": "filterInvestigations", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageableFilterRequest" + "summary" : "Filter investigations defined by the request body", + "description" : "The endpoint returns investigations as paged result.", + "operationId" : "filterInvestigations", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/PageableFilterRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the paged result found for Asset", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "maxItems": 2147483647, - "minItems": -2147483648, - "type": "array", - "description": "Investigations", - "items": { - "type": "object", - "properties": { - "id": { - "maximum": 255, - "minimum": 0, - "maxLength": 255, - "type": "integer", - "format": "int64", - "example": 66 + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns the paged result found for Asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "maxItems" : 2147483647, + "minItems" : -2147483648, + "type" : "array", + "description" : "Investigations", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maximum" : 255, + "minimum" : 0, + "maxLength" : 255, + "type" : "integer", + "format" : "int64", + "example" : 66 }, - "status": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "CREATED", - "enum": [ + "status" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "CREATED", + "enum" : [ "CREATED", "SENT", "RECEIVED", @@ -1232,97 +1232,97 @@ "CLOSED" ] }, - "description": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "example": "DescriptionText" + "description" : { + "maxLength" : 1000, + "minLength" : 0, + "type" : "string", + "example" : "DescriptionText" }, - "createdBy": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003AYRE" + "createdBy" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003AYRE" }, - "createdByName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "createdByName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "createdDate": { - "maxLength": 50, - "minLength": 0, - "type": "string", - "example": "2023-02-21T21:27:10.734950Z" + "createdDate" : { + "maxLength" : 50, + "minLength" : 0, + "type" : "string", + "example" : "2023-02-21T21:27:10.734950Z" }, - "assetIds": { - "maxItems": 1000, - "minItems": 0, - "type": "array", - "example": [ + "assetIds" : { + "maxItems" : 1000, + "minItems" : 0, + "type" : "array", + "example" : [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd" ], - "items": { - "type": "string", - "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" + "items" : { + "type" : "string", + "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" } }, - "channel": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "SENDER", - "enum": [ + "channel" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "SENDER", + "enum" : [ "SENDER", "RECEIVER" ] }, - "reason": { - "$ref": "#/components/schemas/QualityNotificationReasonResponse" + "reason" : { + "$ref" : "#/components/schemas/QualityNotificationReasonResponse" }, - "sendTo": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003AYRE" + "sendTo" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003AYRE" }, - "sendToName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "sendToName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "severity": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "MINOR", - "enum": [ + "severity" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "MINOR", + "enum" : [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "targetDate": { - "maxLength": 50, - "minLength": 0, - "type": "string", - "example": "2099-02-21T21:27:10.734950Z" + "targetDate" : { + "maxLength" : 50, + "minLength" : 0, + "type" : "string", + "example" : "2099-02-21T21:27:10.734950Z" }, - "errorMessage": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "EDC not reachable" + "errorMessage" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "EDC not reachable" }, - "qualityNotificationMessageResponseList": { - "type": "array", - "items": { - "$ref": "#/components/schemas/QualityNotificationMessageResponse" + "qualityNotificationMessageResponseList" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/QualityNotificationMessageResponse" } } } @@ -1332,713 +1332,774 @@ } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/edc/notification/contract": { - "post": { - "tags": [ + "/edc/notification/contract" : { + "post" : { + "tags" : [ "Notifications" ], - "summary": "Triggers EDC notification contract", - "description": "The endpoint Triggers EDC notification contract based on notification type and method", - "operationId": "createNotificationContract", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateNotificationContractRequest" + "summary" : "Triggers EDC notification contract", + "description" : "The endpoint Triggers EDC notification contract based on notification type and method", + "operationId" : "createNotificationContract", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreateNotificationContractRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "201": { - "description": "Created.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateNotificationContractResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "201" : { + "description" : "Created.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreateNotificationContractResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/contracts": { - "post": { - "tags": [ + "/contracts" : { + "post" : { + "tags" : [ + "getContracts", "Contracts" ], - "summary": "All contract agreements for all assets", - "description": "This endpoint returns all contract agreements for alls assets in Trace-X", - "operationId": "contracts", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageableFilterRequest" + "summary" : "All contract agreements for all assets", + "description" : "This endpoint returns all contract agreements for alls assets in Trace-X", + "operationId" : "contracts", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/PageableFilterRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok.", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "description" : "PageResults", + "items" : { + "$ref" : "#/components/schemas/PageResultContractResponse" + } } } } }, - "200": { - "description": "Ok.", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "description": "PageResults", - "items": { - "$ref": "#/components/schemas/PageResultContractResponse" - } + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/publish": { - "post": { - "tags": [ + "/assets/publish" : { + "post" : { + "tags" : [ "AssetsImport", "AssetsPublish" ], - "summary": "asset publish", - "description": "This endpoint publishes assets to the Catena-X network.", - "operationId": "publishAssets", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RegisterAssetRequest" + "summary" : "asset publish", + "description" : "This endpoint publishes assets to the Catena-X network.", + "operationId" : "publishAssets", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/RegisterAssetRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "responses" : { + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content." + "204" : { + "description" : "No Content." }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "OK.", - "content": { - "application/json": {} + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/import": { - "post": { - "tags": [ + "/assets/import" : { + "post" : { + "tags" : [ "AssetsImport" ], - "summary": "asset upload", - "description": "This endpoint stores assets in the application. Those can be later published in the Catena-X network.", - "operationId": "importJson", - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ + "summary" : "asset upload", + "description" : "This endpoint stores assets in the application. Those can be later published in the Catena-X network.", + "operationId" : "importJson", + "requestBody" : { + "content" : { + "multipart/form-data" : { + "schema" : { + "required" : [ "file" ], - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary" + "type" : "object", + "properties" : { + "file" : { + "type" : "string", + "format" : "binary" } } } } } }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "responses" : { + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content." + "204" : { + "description" : "No Content." }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "OK.", - "content": { - "application/json": {} + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-planned/sync": { - "post": { - "tags": [ + "/assets/as-planned/sync" : { + "post" : { + "tags" : [ "AssetsAsPlanned" ], - "summary": "Synchronizes assets from IRS", - "description": "The endpoint synchronizes the assets from irs.", - "operationId": "sync", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SyncAssetsRequest" + "summary" : "Synchronizes assets from IRS", + "description" : "The endpoint synchronizes the assets from irs.", + "operationId" : "sync", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/SyncAssetsRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "201": { - "description": "Created." - }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "201" : { + "description" : "Created." + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-planned/detail-information": { - "post": { - "tags": [ + "/assets/as-planned/detail-information" : { + "post" : { + "tags" : [ "AssetsAsPlanned" ], - "summary": "Searches for assets by ids.", - "description": "The endpoint searchs for assets by id and returns a list of them.", - "operationId": "getDetailInformation", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetDetailInformationRequest" + "summary" : "Searches for assets by ids.", + "description" : "The endpoint searchs for assets by id and returns a list of them.", + "operationId" : "getDetailInformation", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/GetDetailInformationRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Returns the paged result found for Asset", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns the paged result found for Asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -2046,16 +2107,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -2065,58 +2126,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -2124,17 +2185,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -2143,344 +2204,234 @@ } } }, - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-built/sync": { - "post": { - "tags": [ + "/assets/as-built/sync" : { + "post" : { + "tags" : [ "AssetsAsBuilt" ], - "summary": "Synchronizes assets from IRS", - "description": "The endpoint synchronizes the assets from irs.", - "operationId": "sync_1", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SyncAssetsRequest" + "summary" : "Synchronizes assets from IRS", + "description" : "The endpoint synchronizes the assets from irs.", + "operationId" : "sync_1", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/SyncAssetsRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "201": { - "description": "Created." - }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "201" : { + "description" : "Created." + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-built/detail-information": { - "post": { - "tags": [ + "/assets/as-built/detail-information" : { + "post" : { + "tags" : [ "AssetsAsBuilt" ], - "summary": "Searches for assets by ids.", - "description": "The endpoint searchs for assets by id and returns a list of them.", - "operationId": "getDetailInformation_1", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetDetailInformationRequest" + "summary" : "Searches for assets by ids.", + "description" : "The endpoint searchs for assets by id and returns a list of them.", + "operationId" : "getDetailInformation_1", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/GetDetailInformationRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the paged result found for Asset", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "responses" : { + "200" : { + "description" : "Returns the paged result found for Asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -2488,16 +2439,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -2507,58 +2458,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -2566,17 +2517,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -2585,640 +2536,740 @@ } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/alerts": { - "post": { - "tags": [ + "/alerts" : { + "post" : { + "tags" : [ "Alerts" ], - "summary": "Start alert by part ids", - "description": "The endpoint starts alert based on part ids provided.", - "operationId": "alertAssets", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StartQualityNotificationRequest" + "summary" : "Start alert by part ids", + "description" : "The endpoint starts alert based on part ids provided.", + "operationId" : "alertAssets", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/StartQualityNotificationRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "201": { - "description": "Created.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QualityNotificationIdResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "201" : { + "description" : "Created.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/alerts/{alertId}/update": { - "post": { - "tags": [ + "/alerts/{alertId}/update" : { + "post" : { + "tags" : [ "Alerts" ], - "summary": "Update alert by id", - "description": "The endpoint updates alert by their id.", - "operationId": "updateAlert", - "parameters": [ + "summary" : "Update alert by id", + "description" : "The endpoint updates alert by their id.", + "operationId" : "updateAlert", + "parameters" : [ { - "name": "alertId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "alertId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateQualityNotificationRequest" + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UpdateQualityNotificationRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/alerts/{alertId}/close": { - "post": { - "tags": [ + "/alerts/{alertId}/close" : { + "post" : { + "tags" : [ "Alerts" ], - "summary": "Close alert by id", - "description": "The endpoint closes alert by id.", - "operationId": "closeAlert", - "parameters": [ + "summary" : "Close alert by id", + "description" : "The endpoint closes alert by id.", + "operationId" : "closeAlert", + "parameters" : [ { - "name": "alertId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "alertId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CloseQualityNotificationRequest" + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CloseQualityNotificationRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok." + "204" : { + "description" : "No content." }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/alerts/{alertId}/cancel": { - "post": { - "tags": [ + "/alerts/{alertId}/cancel" : { + "post" : { + "tags" : [ "Alerts" ], - "summary": "Cancels alert by id", - "description": "The endpoint cancels alert by id.", - "operationId": "cancelAlert", - "parameters": [ + "summary" : "Cancels alert by id", + "description" : "The endpoint cancels alert by id.", + "operationId" : "cancelAlert", + "parameters" : [ { - "name": "alertId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "alertId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok." - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "204" : { + "description" : "No content." + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/alerts/{alertId}/approve": { - "post": { - "tags": [ + "/alerts/{alertId}/approve" : { + "post" : { + "tags" : [ "Alerts" ], - "summary": "Approves alert by id", - "description": "The endpoint approves alert by id.", - "operationId": "approveAlert", - "parameters": [ + "summary" : "Approves alert by id", + "description" : "The endpoint approves alert by id.", + "operationId" : "approveAlert", + "parameters" : [ { - "name": "alertId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "alertId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok." - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "204" : { + "description" : "No content." + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/alerts/filter": { - "post": { - "tags": [ + "/alerts/filter" : { + "post" : { + "tags" : [ "Alerts" ], - "summary": "Filter alerts defined by the request body", - "description": "The endpoint returns alerts as paged result.", - "operationId": "filterAlerts", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageableFilterRequest" + "summary" : "Filter alerts defined by the request body", + "description" : "The endpoint returns alerts as paged result.", + "operationId" : "filterAlerts", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/PageableFilterRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the paged result found for Asset", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "type": "array", - "description": "Alerts", - "items": { - "type": "object", - "properties": { - "id": { - "maximum": 255, - "minimum": 0, - "maxLength": 255, - "type": "integer", - "format": "int64", - "example": 66 - }, - "status": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "CREATED", - "enum": [ + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns the paged result found for Asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Alerts", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maximum" : 255, + "minimum" : 0, + "maxLength" : 255, + "type" : "integer", + "format" : "int64", + "example" : 66 + }, + "status" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "CREATED", + "enum" : [ "CREATED", "SENT", "RECEIVED", @@ -3229,97 +3280,97 @@ "CLOSED" ] }, - "description": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "example": "DescriptionText" - }, - "createdBy": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003AYRE" - }, - "createdByName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "createdDate": { - "maxLength": 50, - "minLength": 0, - "type": "string", - "example": "2023-02-21T21:27:10.734950Z" - }, - "assetIds": { - "maxItems": 1000, - "minItems": 0, - "type": "array", - "example": [ + "description" : { + "maxLength" : 1000, + "minLength" : 0, + "type" : "string", + "example" : "DescriptionText" + }, + "createdBy" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003AYRE" + }, + "createdByName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "createdDate" : { + "maxLength" : 50, + "minLength" : 0, + "type" : "string", + "example" : "2023-02-21T21:27:10.734950Z" + }, + "assetIds" : { + "maxItems" : 1000, + "minItems" : 0, + "type" : "array", + "example" : [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd" ], - "items": { - "type": "string", - "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" + "items" : { + "type" : "string", + "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" } }, - "channel": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "SENDER", - "enum": [ + "channel" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "SENDER", + "enum" : [ "SENDER", "RECEIVER" ] }, - "reason": { - "$ref": "#/components/schemas/QualityNotificationReasonResponse" - }, - "sendTo": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003AYRE" - }, - "sendToName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "severity": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "MINOR", - "enum": [ + "reason" : { + "$ref" : "#/components/schemas/QualityNotificationReasonResponse" + }, + "sendTo" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003AYRE" + }, + "sendToName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "severity" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "MINOR", + "enum" : [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "targetDate": { - "maxLength": 50, - "minLength": 0, - "type": "string", - "example": "2099-02-21T21:27:10.734950Z" - }, - "errorMessage": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "EDC not reachable" - }, - "qualityNotificationMessageResponseList": { - "type": "array", - "items": { - "$ref": "#/components/schemas/QualityNotificationMessageResponse" + "targetDate" : { + "maxLength" : 50, + "minLength" : 0, + "type" : "string", + "example" : "2099-02-21T21:27:10.734950Z" + }, + "errorMessage" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "EDC not reachable" + }, + "qualityNotificationMessageResponseList" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/QualityNotificationMessageResponse" } } } @@ -3328,238 +3379,188 @@ } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-planned/{assetId}": { - "get": { - "tags": [ + "/assets/as-planned/{assetId}" : { + "get" : { + "tags" : [ "AssetsAsPlanned" ], - "summary": "Get asset by id", - "description": "The endpoint returns an asset filtered by id .", - "operationId": "assetById", - "parameters": [ + "summary" : "Get asset by id", + "description" : "The endpoint returns an asset filtered by id .", + "operationId" : "assetById", + "parameters" : [ { - "name": "assetId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "assetId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns the assets found", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "200" : { + "description" : "Returns the assets found", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -3567,16 +3568,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -3586,58 +3587,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -3645,17 +3646,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -3663,176 +3664,196 @@ } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] }, - "patch": { - "tags": [ + "patch" : { + "tags" : [ "AssetsAsPlanned" ], - "summary": "Updates asset", - "description": "The endpoint updates asset by provided quality type.", - "operationId": "updateAsset", - "parameters": [ + "summary" : "Updates asset", + "description" : "The endpoint updates asset by provided quality type.", + "operationId" : "updateAsset", + "parameters" : [ { - "name": "assetId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "assetId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateAssetRequest" + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UpdateAssetRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the updated asset", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" - }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" - }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" - }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns the updated asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" + }, + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" + }, + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" + }, + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -3840,16 +3861,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -3859,58 +3880,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -3918,17 +3939,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -3936,218 +3957,128 @@ } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-built/{assetId}": { - "get": { - "tags": [ + "/assets/as-built/{assetId}" : { + "get" : { + "tags" : [ "AssetsAsBuilt" ], - "summary": "Get asset by id", - "description": "The endpoint returns an asset filtered by id .", - "operationId": "assetById_1", - "parameters": [ + "summary" : "Get asset by id", + "description" : "The endpoint returns an asset filtered by id .", + "operationId" : "assetById_1", + "parameters" : [ { - "name": "assetId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "assetId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the assets found", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" - }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" - }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" - }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "responses" : { + "200" : { + "description" : "Returns the assets found", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" + }, + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" + }, + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" + }, + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -4155,16 +4086,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -4174,58 +4105,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -4233,184 +4164,244 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } } } } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] }, - "patch": { - "tags": [ + "patch" : { + "tags" : [ "AssetsAsBuilt" ], - "summary": "Updates asset", - "description": "The endpoint updates asset by provided quality type.", - "operationId": "updateAsset_1", - "parameters": [ + "summary" : "Updates asset", + "description" : "The endpoint updates asset by provided quality type.", + "operationId" : "updateAsset_1", + "parameters" : [ { - "name": "assetId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "assetId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateAssetRequest" + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/UpdateAssetRequest" } } }, - "required": true + "required" : true }, - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the updated asset", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" - }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" - }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" - }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns the updated asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" + }, + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" + }, + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" + }, + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -4418,16 +4409,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -4437,58 +4428,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -4496,17 +4487,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -4514,863 +4505,833 @@ } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/registry/reload": { - "get": { - "tags": [ + "/registry/reload" : { + "get" : { + "tags" : [ "Registry" ], - "summary": "Triggers reload of shell descriptors", - "description": "The endpoint Triggers reload of shell descriptors.", - "operationId": "reload", - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "summary" : "Triggers reload of shell descriptors", + "description" : "The endpoint Triggers reload of shell descriptors.", + "operationId" : "reload", + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "202" : { + "description" : "Created registry reload job." + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "202": { - "description": "Created registry reload job." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/policies": { - "get": { - "tags": [ + "/policies" : { + "get" : { + "tags" : [ "Policies" ], - "summary": "Get all policies ", - "description": "The endpoint returns all policies .", - "operationId": "policy", - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "summary" : "Get all policies ", + "description" : "The endpoint returns all policies .", + "operationId" : "policy", + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns the policies", + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/PolicyResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns the policies", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/PolicyResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/investigations/{investigationId}": { - "get": { - "tags": [ + "/investigations/{investigationId}" : { + "get" : { + "tags" : [ "Investigations" ], - "summary": "Gets investigations by id", - "description": "The endpoint returns investigations as paged result by their id.", - "operationId": "getInvestigation", - "parameters": [ + "summary" : "Gets investigations by id", + "description" : "The endpoint returns investigations as paged result by their id.", + "operationId" : "getInvestigation", + "parameters" : [ { - "name": "investigationId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "investigationId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "OK.", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : -2147483648, + "type" : "array", + "description" : "Investigations", + "items" : { + "$ref" : "#/components/schemas/InvestigationResponse" + } } } } }, - "200": { - "description": "OK.", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": -2147483648, - "type": "array", - "description": "Investigations", - "items": { - "$ref": "#/components/schemas/InvestigationResponse" - } + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/investigations/distinctFilterValues": { - "get": { - "tags": [ + "/investigations/distinctFilterValues" : { + "get" : { + "tags" : [ "Assets", "Investigations" ], - "summary": "getDistinctFilterValues", - "description": "The endpoint returns a distinct filter values for given fieldName.", - "operationId": "distinctFilterValues", - "parameters": [ + "summary" : "getDistinctFilterValues", + "description" : "The endpoint returns a distinct filter values for given fieldName.", + "operationId" : "distinctFilterValues", + "parameters" : [ { - "name": "fieldName", - "in": "query", - "required": true, - "schema": { - "type": "string" + "name" : "fieldName", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" } }, { - "name": "size", - "in": "query", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "name" : "size", + "in" : "query", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int32" } }, { - "name": "startWith", - "in": "query", - "required": true, - "schema": { - "type": "string" + "name" : "startWith", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" } }, { - "name": "channel", - "in": "query", - "required": true, - "schema": { - "type": "string", - "enum": [ + "name" : "channel", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "SENDER", "RECEIVER" ] } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns a distinct filter values for given fieldName.", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "type": "string" - } + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/dashboard": { - "get": { - "tags": [ + "/dashboard" : { + "get" : { + "tags" : [ "Dashboard" ], - "summary": "Returns dashboard related data", - "description": "The endpoint can return limited data based on the user role", - "operationId": "dashboard", - "responses": { - "200": { - "description": "Returns dashboard data", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardResponse" + "summary" : "Returns dashboard related data", + "description" : "The endpoint can return limited data based on the user role", + "operationId" : "dashboard", + "responses" : { + "200" : { + "description" : "Returns dashboard data", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/DashboardResponse" } } } }, - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/import/report/{importJobId}": { - "get": { - "tags": [ + "/assets/import/report/{importJobId}" : { + "get" : { + "tags" : [ "ImportReport", "AssetsImport" ], - "summary": "report of the imported assets", - "description": "This endpoint returns information about the imported assets to Trace-X.", - "operationId": "importReport", - "parameters": [ + "summary" : "report of the imported assets", + "description" : "This endpoint returns information about the imported assets to Trace-X.", + "operationId" : "importReport", + "parameters" : [ { - "name": "importJobId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "importJobId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "204" : { + "description" : "No Content." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content." - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "OK.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ImportReportResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "OK.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImportReportResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-planned": { - "get": { - "tags": [ + "/assets/as-planned" : { + "get" : { + "tags" : [ "AssetsAsPlanned" ], - "summary": "Get assets by pagination", - "description": "The endpoint returns a paged result of assets.", - "operationId": "AssetsAsPlanned", - "parameters": [ + "summary" : "Get assets by pagination", + "description" : "The endpoint returns a paged result of assets.", + "operationId" : "AssetsAsPlanned", + "parameters" : [ { - "name": "pageable", - "in": "query", - "required": true, - "schema": { - "$ref": "#/components/schemas/OwnPageable" + "name" : "pageable", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/OwnPageable" } }, { - "name": "filter", - "in": "query", - "required": true, - "schema": { - "$ref": "#/components/schemas/SearchCriteriaRequestParam" + "name" : "filter", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/SearchCriteriaRequestParam" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the paged result found for Asset", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "responses" : { + "200" : { + "description" : "Returns the paged result found for Asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -5378,16 +5339,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -5397,58 +5358,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -5456,17 +5417,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -5475,88 +5436,128 @@ } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-planned/distinctFilterValues": { - "get": { - "tags": [ + "/assets/as-planned/distinctFilterValues" : { + "get" : { + "tags" : [ "Assets", "AssetsAsPlanned" ], - "summary": "getDistinctFilterValues", - "description": "The endpoint returns a distinct filter values for given fieldName.", - "operationId": "distinctFilterValues_1", - "parameters": [ + "summary" : "getDistinctFilterValues", + "description" : "The endpoint returns a distinct filter values for given fieldName.", + "operationId" : "distinctFilterValues_1", + "parameters" : [ { - "name": "fieldName", - "in": "query", - "required": true, - "schema": { - "type": "string" + "name" : "fieldName", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" } }, { - "name": "size", - "in": "query", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "name" : "size", + "in" : "query", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int32" } }, { - "name": "startWith", - "in": "query", - "required": true, - "schema": { - "type": "string" + "name" : "startWith", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" } }, { - "name": "owner", - "in": "query", - "required": true, - "schema": { - "type": "string", - "enum": [ + "name" : "owner", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", @@ -5565,214 +5566,264 @@ } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns a distinct filter values for given fieldName.", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "type": "string" - } + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-planned/*/children/{childId}": { - "get": { - "tags": [ + "/assets/as-planned/*/children/{childId}" : { + "get" : { + "tags" : [ "AssetsAsPlanned" ], - "summary": "Get asset by child id", - "description": "The endpoint returns an asset filtered by child id.", - "operationId": "assetByChildIdAndAssetId", - "parameters": [ + "summary" : "Get asset by child id", + "description" : "The endpoint returns an asset filtered by child id.", + "operationId" : "assetByChildIdAndAssetId", + "parameters" : [ { - "name": "childId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "childId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the asset by childId", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" - }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" - }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" - }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns the asset by childId", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" + }, + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" + }, + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" + }, + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -5780,16 +5831,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -5799,58 +5850,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -5858,17 +5909,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -5876,230 +5927,140 @@ } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-built": { - "get": { - "tags": [ + "/assets/as-built" : { + "get" : { + "tags" : [ "AssetsAsBuilt" ], - "summary": "Get assets by pagination", - "description": "The endpoint returns a paged result of assets.", - "operationId": "assets", - "parameters": [ + "summary" : "Get assets by pagination", + "description" : "The endpoint returns a paged result of assets.", + "operationId" : "assets", + "parameters" : [ { - "name": "pageable", - "in": "query", - "required": true, - "schema": { - "$ref": "#/components/schemas/OwnPageable" + "name" : "pageable", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/OwnPageable" } }, { - "name": "searchCriteriaRequestParam", - "in": "query", - "required": true, - "schema": { - "$ref": "#/components/schemas/SearchCriteriaRequestParam" + "name" : "searchCriteriaRequestParam", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/SearchCriteriaRequestParam" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the paged result found for Asset", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "responses" : { + "200" : { + "description" : "Returns the paged result found for Asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -6107,16 +6068,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -6126,58 +6087,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -6185,17 +6146,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -6204,88 +6165,128 @@ } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-built/distinctFilterValues": { - "get": { - "tags": [ + "/assets/as-built/distinctFilterValues" : { + "get" : { + "tags" : [ "AssetsAsBuilt", "Assets" ], - "summary": "getDistinctFilterValues", - "description": "The endpoint returns a distinct filter values for given fieldName.", - "operationId": "distinctFilterValues_2", - "parameters": [ + "summary" : "getDistinctFilterValues", + "description" : "The endpoint returns a distinct filter values for given fieldName.", + "operationId" : "distinctFilterValues_2", + "parameters" : [ { - "name": "fieldName", - "in": "query", - "required": true, - "schema": { - "type": "string" + "name" : "fieldName", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" } }, { - "name": "size", - "in": "query", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "name" : "size", + "in" : "query", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int32" } }, { - "name": "startWith", - "in": "query", - "required": true, - "schema": { - "type": "string" + "name" : "startWith", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" } }, { - "name": "owner", - "in": "query", - "required": true, - "schema": { - "type": "string", - "enum": [ + "name" : "owner", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", @@ -6294,338 +6295,368 @@ } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns a distinct filter values for given fieldName.", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "type": "string" - } + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-built/countries": { - "get": { - "tags": [ + "/assets/as-built/countries" : { + "get" : { + "tags" : [ "AssetsAsBuilt" ], - "summary": "Get map of assets", - "description": "The endpoint returns a map for assets consumed by the map.", - "operationId": "assetsCountryMap", - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "summary" : "Get map of assets", + "description" : "The endpoint returns a map for assets consumed by the map.", + "operationId" : "assetsCountryMap", + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns the assets found", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "type": "string" - } + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns the assets found", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/assets/as-built/*/children/{childId}": { - "get": { - "tags": [ + "/assets/as-built/*/children/{childId}" : { + "get" : { + "tags" : [ "AssetsAsBuilt" ], - "summary": "Get asset by child id", - "description": "The endpoint returns an asset filtered by child id.", - "operationId": "assetByChildId", - "parameters": [ + "summary" : "Get asset by child id", + "description" : "The endpoint returns an asset filtered by child id.", + "operationId" : "assetByChildId", + "parameters" : [ { - "name": "childId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "childId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "200": { - "description": "Returns the asset by childId", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "type": "array", - "description": "Assets", - "items": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" - }, - "semanticModelId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "NO-246880451848384868750731" - }, - "businessPartner": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" - }, - "manufacturerName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "nameAtManufacturer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "manufacturerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "owner": { - "type": "string", - "example": "CUSTOMER", - "enum": [ + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns the asset by childId", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Assets", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" + }, + "semanticModelId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "NO-246880451848384868750731" + }, + "businessPartner" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" + }, + "manufacturerName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "nameAtManufacturer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "manufacturerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "owner" : { + "type" : "string", + "example" : "CUSTOMER", + "enum" : [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Child relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "childRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Child relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "parentRelations": { - "maxItems": 2147483647, - "type": "array", - "description": "Parent relationships", - "items": { - "$ref": "#/components/schemas/DescriptionsResponse" + "parentRelations" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Parent relationships", + "items" : { + "$ref" : "#/components/schemas/DescriptionsResponse" } }, - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -6633,16 +6664,16 @@ "LifeThreatening" ] }, - "van": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "OMAYSKEITUGNVHKKX" + "van" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "OMAYSKEITUGNVHKKX" }, - "semanticDataModel": { - "type": "string", - "example": "BATCH", - "enum": [ + "semanticDataModel" : { + "type" : "string", + "example" : "BATCH", + "enum" : [ "BATCH", "SERIALPART", "UNKNOWN", @@ -6652,58 +6683,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "component" + "classification" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "component" }, - "detailAspectModels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "sentQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "receivedQualityAlertIdsInStatusActive": { - "type": "array", - "example": 1, - "items": { - "type": "integer", - "format": "int64", - "example": 1 + "receivedQualityAlertIdsInStatusActive" : { + "type" : "array", + "example" : 1, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } }, - "sentQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "sentQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "receivedQualityInvestigationIdsInStatusActive": { - "type": "array", - "example": 2, - "items": { - "type": "integer", - "format": "int64", - "example": 2 + "receivedQualityInvestigationIdsInStatusActive" : { + "type" : "array", + "example" : 2, + "items" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } }, - "importState": { - "type": "string", - "example": "TRANSIENT", - "enum": [ + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -6711,17 +6742,17 @@ "UNSET" ] }, - "importNote": { - "type": "string", - "example": "Asset created successfully in transient state" + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" }, - "tombstone": { - "type": "string", - "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId": { - "type": "string", - "example": "TODO" + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -6729,509 +6760,479 @@ } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/alerts/{alertId}": { - "get": { - "tags": [ + "/alerts/{alertId}" : { + "get" : { + "tags" : [ "Alerts" ], - "summary": "Gets Alert by id", - "description": "The endpoint returns alert by id.", - "operationId": "getAlert", - "parameters": [ + "summary" : "Gets Alert by id", + "description" : "The endpoint returns alert by id.", + "operationId" : "getAlert", + "parameters" : [ { - "name": "alertId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "name" : "alertId", + "in" : "path", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int64" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "OK.", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Alerts", + "items" : { + "$ref" : "#/components/schemas/AlertResponse" + } } } } }, - "200": { - "description": "OK.", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "type": "array", - "description": "Alerts", - "items": { - "$ref": "#/components/schemas/AlertResponse" - } + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/alerts/distinctFilterValues": { - "get": { - "tags": [ + "/alerts/distinctFilterValues" : { + "get" : { + "tags" : [ "Assets", "Alerts" ], - "summary": "getDistinctFilterValues", - "description": "The endpoint returns a distinct filter values for given fieldName.", - "operationId": "distinctFilterValues_3", - "parameters": [ + "summary" : "getDistinctFilterValues", + "description" : "The endpoint returns a distinct filter values for given fieldName.", + "operationId" : "distinctFilterValues_3", + "parameters" : [ { - "name": "fieldName", - "in": "query", - "required": true, - "schema": { - "type": "string" + "name" : "fieldName", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" } }, { - "name": "size", - "in": "query", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "name" : "size", + "in" : "query", + "required" : true, + "schema" : { + "type" : "integer", + "format" : "int32" } }, { - "name": "startWith", - "in": "query", - "required": true, - "schema": { - "type": "string" + "name" : "startWith", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string" } }, { - "name": "channel", - "in": "query", - "required": true, - "schema": { - "type": "string", - "enum": [ + "name" : "channel", + "in" : "query", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "SENDER", "RECEIVER" ] } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Returns a distinct filter values for given fieldName.", - "content": { - "application/json": { - "schema": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "items": { - "type": "string" - } + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/submodel/data": { - "delete": { - "tags": [ + "/submodel/data" : { + "delete" : { + "tags" : [ "Submodel" ], - "summary": "Delete All Submodels", - "description": "Deletes all submodels from the system.", - "operationId": "deleteSubmodels", - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "summary" : "Delete All Submodels", + "description" : "Deletes all submodels from the system.", + "operationId" : "deleteSubmodels", + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Ok." + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Ok." - }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "204" : { + "description" : "No Content." + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } ] } }, - "/bpn-config/{bpn}": { - "delete": { - "tags": [ + "/bpn-config/{bpn}" : { + "delete" : { + "tags" : [ "BpnEdcMapping" ], - "summary": "Deletes BPN EDC URL mappings", - "description": "The endpoint deletes BPN EDC URL mappings", - "operationId": "deleteBpnEdcUrlMappings", - "parameters": [ + "summary" : "Deletes BPN EDC URL mappings", + "description" : "The endpoint deletes BPN EDC URL mappings", + "operationId" : "deleteBpnEdcUrlMappings", + "parameters" : [ { - "name": "bpn", - "in": "path", - "required": true, - "schema": { - "type": "string" + "name" : "bpn", + "in" : "path", + "required" : true, + "schema" : { + "type" : "string" } } ], - "responses": { - "403": { - "description": "Forbidden.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "responses" : { + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415": { - "description": "Unsupported media type", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "500": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200": { - "description": "Okay" - }, - "204": { - "description": "Deleted." - }, - "400": { - "description": "Bad request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "429": { - "description": "Too many requests.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Authorization failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "200" : { + "description" : "Okay" + }, + "204" : { + "description" : "Deleted." + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" } } } } }, - "security": [ + "security" : [ { - "oAuth2": [ + "oAuth2" : [ "profile email" ] } @@ -7239,209 +7240,210 @@ } } }, - "components": { - "schemas": { - "BpnMappingRequest": { - "required": [ + "components" : { + "schemas" : { + "BpnMappingRequest" : { + "required" : [ "bpn", "url" ], - "type": "object", - "properties": { - "bpn": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003CSGV" - }, - "url": { - "maxLength": 255, - "minLength": 0, - "type": "string" + "type" : "object", + "properties" : { + "bpn" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003CSGV" + }, + "url" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string" } } }, - "ErrorResponse": { - "type": "object", - "properties": { - "message": { - "maxLength": 1000, - "minLength": 0, - "pattern": "^.*$", - "type": "string" + "ErrorResponse" : { + "type" : "object", + "properties" : { + "message" : { + "maxLength" : 1000, + "minLength" : 0, + "pattern" : "^.*$", + "type" : "string", + "example" : "Access Denied" } } }, - "BpnEdcMappingResponse": { - "type": "object", - "properties": { - "bpn": { - "type": "string", - "example": "BPNL00000003CSGV" + "BpnEdcMappingResponse" : { + "type" : "object", + "properties" : { + "bpn" : { + "type" : "string", + "example" : "BPNL00000003CSGV" }, - "url": { - "type": "string", - "example": "https://trace-x-test-edc.dev.demo.catena-x.net/a1" + "url" : { + "type" : "string", + "example" : "https://trace-x-test-edc.dev.demo.catena-x.net/a1" } } }, - "StartQualityNotificationRequest": { - "required": [ + "StartQualityNotificationRequest" : { + "required" : [ "severity" ], - "type": "object", - "properties": { - "partIds": { - "maxLength": 100, - "minLength": 1, - "maxItems": 50, - "minItems": 1, - "type": "array", - "example": [ + "type" : "object", + "properties" : { + "partIds" : { + "maxLength" : 100, + "minLength" : 1, + "maxItems" : 50, + "minItems" : 1, + "type" : "array", + "example" : [ "urn:uuid:fe99da3d-b0de-4e80-81da-882aebcca978" ], - "items": { - "maxLength": 100, - "minLength": 1, - "type": "string", - "example": "[\"urn:uuid:fe99da3d-b0de-4e80-81da-882aebcca978\"]" - } - }, - "description": { - "maxLength": 1000, - "minLength": 15, - "type": "string", - "example": "The description" - }, - "targetDate": { - "type": "string", - "format": "date-time", - "example": "2099-03-11T22:44:06.333826952Z" - }, - "severity": { - "type": "string", - "enum": [ + "items" : { + "maxLength" : 100, + "minLength" : 1, + "type" : "string", + "example" : "[\"urn:uuid:fe99da3d-b0de-4e80-81da-882aebcca978\"]" + } + }, + "description" : { + "maxLength" : 1000, + "minLength" : 15, + "type" : "string", + "example" : "The description" + }, + "targetDate" : { + "type" : "string", + "format" : "date-time", + "example" : "2099-03-11T22:44:06.333826952Z" + }, + "severity" : { + "type" : "string", + "enum" : [ "MINOR", "MAJOR", "CRITICAL", "LIFE_THREATENING" ] }, - "receiverBpn": { - "type": "string", - "example": "BPN00001123123AS" + "receiverBpn" : { + "type" : "string", + "example" : "BPN00001123123AS" }, - "asBuilt": { - "type": "boolean" + "asBuilt" : { + "type" : "boolean" } } }, - "QualityNotificationIdResponse": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64", - "example": 1 + "QualityNotificationIdResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "format" : "int64", + "example" : 1 } } }, - "UpdateQualityNotificationRequest": { - "required": [ + "UpdateQualityNotificationRequest" : { + "required" : [ "status" ], - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The UpdateInvestigationStatus", - "enum": [ + "type" : "object", + "properties" : { + "status" : { + "type" : "string", + "description" : "The UpdateInvestigationStatus", + "enum" : [ "ACKNOWLEDGED", "ACCEPTED", "DECLINED" ] }, - "reason": { - "type": "string", - "example": "The reason." + "reason" : { + "type" : "string", + "example" : "The reason." } } }, - "CloseQualityNotificationRequest": { - "type": "object", - "properties": { - "reason": { - "maxLength": 1000, - "minLength": 15, - "type": "string", - "example": "The reason." + "CloseQualityNotificationRequest" : { + "type" : "object", + "properties" : { + "reason" : { + "maxLength" : 1000, + "minLength" : 15, + "type" : "string", + "example" : "The reason." } } }, - "OwnPageable": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "format": "int32" - }, - "size": { - "type": "integer", - "format": "int32" - }, - "sort": { - "maxItems": 2147483647, - "type": "array", - "description": "Content of Assets PageResults", - "example": "manufacturerPartId,desc", - "items": { - "type": "string" + "OwnPageable" : { + "type" : "object", + "properties" : { + "page" : { + "type" : "integer", + "format" : "int32" + }, + "size" : { + "type" : "integer", + "format" : "int32" + }, + "sort" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Content of Assets PageResults", + "example" : "manufacturerPartId,desc", + "items" : { + "type" : "string" } } } }, - "PageableFilterRequest": { - "type": "object", - "properties": { - "pageAble": { - "$ref": "#/components/schemas/OwnPageable" + "PageableFilterRequest" : { + "type" : "object", + "properties" : { + "pageAble" : { + "$ref" : "#/components/schemas/OwnPageable" }, - "searchCriteria": { - "$ref": "#/components/schemas/SearchCriteriaRequestParam" + "searchCriteria" : { + "$ref" : "#/components/schemas/SearchCriteriaRequestParam" } } }, - "SearchCriteriaRequestParam": { - "type": "object", - "properties": { - "filter": { - "maxItems": 2147483647, - "type": "array", - "description": "Filter Criteria", - "example": "owner,EQUAL,OWN", - "items": { - "type": "string" + "SearchCriteriaRequestParam" : { + "type" : "object", + "properties" : { + "filter" : { + "maxItems" : 2147483647, + "type" : "array", + "description" : "Filter Criteria", + "example" : "owner,EQUAL,OWN", + "items" : { + "type" : "string" } } } }, - "InvestigationResponse": { - "type": "object", - "properties": { - "id": { - "maximum": 255, - "minimum": 0, - "maxLength": 255, - "type": "integer", - "format": "int64", - "example": 66 - }, - "status": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "CREATED", - "enum": [ + "InvestigationResponse" : { + "type" : "object", + "properties" : { + "id" : { + "maximum" : 255, + "minimum" : 0, + "maxLength" : 255, + "type" : "integer", + "format" : "int64", + "example" : 66 + }, + "status" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "CREATED", + "enum" : [ "CREATED", "SENT", "RECEIVED", @@ -7452,161 +7454,161 @@ "CLOSED" ] }, - "description": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "example": "DescriptionText" - }, - "createdBy": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003AYRE" - }, - "createdByName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "createdDate": { - "maxLength": 50, - "minLength": 0, - "type": "string", - "example": "2023-02-21T21:27:10.734950Z" - }, - "assetIds": { - "maxItems": 1000, - "minItems": 0, - "type": "array", - "example": [ + "description" : { + "maxLength" : 1000, + "minLength" : 0, + "type" : "string", + "example" : "DescriptionText" + }, + "createdBy" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003AYRE" + }, + "createdByName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "createdDate" : { + "maxLength" : 50, + "minLength" : 0, + "type" : "string", + "example" : "2023-02-21T21:27:10.734950Z" + }, + "assetIds" : { + "maxItems" : 1000, + "minItems" : 0, + "type" : "array", + "example" : [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd" ], - "items": { - "type": "string", - "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" + "items" : { + "type" : "string", + "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" } }, - "channel": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "SENDER", - "enum": [ + "channel" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "SENDER", + "enum" : [ "SENDER", "RECEIVER" ] }, - "reason": { - "$ref": "#/components/schemas/QualityNotificationReasonResponse" - }, - "sendTo": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003AYRE" - }, - "sendToName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "severity": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "MINOR", - "enum": [ + "reason" : { + "$ref" : "#/components/schemas/QualityNotificationReasonResponse" + }, + "sendTo" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003AYRE" + }, + "sendToName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "severity" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "MINOR", + "enum" : [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "targetDate": { - "maxLength": 50, - "minLength": 0, - "type": "string", - "example": "2099-02-21T21:27:10.734950Z" + "targetDate" : { + "maxLength" : 50, + "minLength" : 0, + "type" : "string", + "example" : "2099-02-21T21:27:10.734950Z" }, - "errorMessage": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "EDC not reachable" + "errorMessage" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "EDC not reachable" }, - "qualityNotificationMessageResponseList": { - "type": "array", - "items": { - "$ref": "#/components/schemas/QualityNotificationMessageResponse" + "qualityNotificationMessageResponseList" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/QualityNotificationMessageResponse" } } } }, - "QualityNotificationMessageResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" + "QualityNotificationMessageResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" }, - "createdBy": { - "type": "string" + "createdBy" : { + "type" : "string" }, - "createdByName": { - "type": "string" + "createdByName" : { + "type" : "string" }, - "sendTo": { - "type": "string" + "sendTo" : { + "type" : "string" }, - "sendToName": { - "type": "string" + "sendToName" : { + "type" : "string" }, - "edcUrl": { - "type": "string" + "edcUrl" : { + "type" : "string" }, - "contractAgreementId": { - "type": "string" + "contractAgreementId" : { + "type" : "string" }, - "notificationReferenceId": { - "type": "string" + "notificationReferenceId" : { + "type" : "string" }, - "targetDate": { - "type": "string", - "format": "date-time" + "targetDate" : { + "type" : "string", + "format" : "date-time" }, - "severity": { - "type": "string", - "enum": [ + "severity" : { + "type" : "string", + "enum" : [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "edcNotificationId": { - "type": "string" + "edcNotificationId" : { + "type" : "string" }, - "created": { - "type": "string", - "format": "date-time" + "created" : { + "type" : "string", + "format" : "date-time" }, - "updated": { - "type": "string", - "format": "date-time" + "updated" : { + "type" : "string", + "format" : "date-time" }, - "messageId": { - "type": "string" + "messageId" : { + "type" : "string" }, - "isInitial": { - "type": "boolean" + "isInitial" : { + "type" : "boolean" }, - "status": { - "type": "string", - "enum": [ + "status" : { + "type" : "string", + "enum" : [ "CREATED", "SENT", "RECEIVED", @@ -7617,51 +7619,51 @@ "CLOSED" ] }, - "errorMessage": { - "type": "string" + "errorMessage" : { + "type" : "string" } } }, - "QualityNotificationReasonResponse": { - "type": "object", - "properties": { - "close": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "example": "description of closing reason" - }, - "accept": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "example": "description of accepting reason" - }, - "decline": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "example": "description of declining reason" + "QualityNotificationReasonResponse" : { + "type" : "object", + "properties" : { + "close" : { + "maxLength" : 1000, + "minLength" : 0, + "type" : "string", + "example" : "description of closing reason" + }, + "accept" : { + "maxLength" : 1000, + "minLength" : 0, + "type" : "string", + "example" : "description of accepting reason" + }, + "decline" : { + "maxLength" : 1000, + "minLength" : 0, + "type" : "string", + "example" : "description of declining reason" } } }, - "CreateNotificationContractRequest": { - "required": [ + "CreateNotificationContractRequest" : { + "required" : [ "notificationMethod", "notificationType" ], - "type": "object", - "properties": { - "notificationType": { - "type": "string", - "enum": [ + "type" : "object", + "properties" : { + "notificationType" : { + "type" : "string", + "enum" : [ "QUALITY_INVESTIGATION", "QUALITY_ALERT" ] }, - "notificationMethod": { - "type": "string", - "enum": [ + "notificationMethod" : { + "type" : "string", + "enum" : [ "RECEIVE", "UPDATE", "RESOLVE" @@ -7669,284 +7671,284 @@ } } }, - "CreateNotificationContractResponse": { - "type": "object", - "properties": { - "notificationAssetId": { - "type": "string", - "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "CreateNotificationContractResponse" : { + "type" : "object", + "properties" : { + "notificationAssetId" : { + "type" : "string", + "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "accessPolicyId": { - "type": "string", - "example": "123" + "accessPolicyId" : { + "type" : "string", + "example" : "123" }, - "contractDefinitionId": { - "type": "string", - "example": "456" + "contractDefinitionId" : { + "type" : "string", + "example" : "456" } } }, - "ContractResponse": { - "type": "object", - "properties": { - "contractId": { - "maxLength": 255, - "type": "string", - "example": "66" - }, - "counterpartyAddress": { - "maxLength": 255, - "type": "string", - "example": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp" - }, - "creationDate": { - "maxLength": 255, - "type": "string", - "format": "date-time", - "example": "2023-02-21T21:27:10.73495Z" - }, - "endDate": { - "maxLength": 255, - "type": "string", - "format": "date-time", - "example": "2023-02-21T21:27:10.73495Z" - }, - "state": { - "maxLength": 255, - "type": "string", - "example": "FINALIZED" - }, - "policy": { - "maxLength": 255, - "type": "string", - "example": "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}" + "ContractResponse" : { + "type" : "object", + "properties" : { + "contractId" : { + "maxLength" : 255, + "type" : "string", + "example" : "66" + }, + "counterpartyAddress" : { + "maxLength" : 255, + "type" : "string", + "example" : "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp" + }, + "creationDate" : { + "maxLength" : 255, + "type" : "string", + "format" : "date-time", + "example" : "2023-02-21T21:27:10.73495Z" + }, + "endDate" : { + "maxLength" : 255, + "type" : "string", + "format" : "date-time", + "example" : "2023-02-21T21:27:10.73495Z" + }, + "state" : { + "maxLength" : 255, + "type" : "string", + "example" : "FINALIZED" + }, + "policy" : { + "maxLength" : 255, + "type" : "string", + "example" : "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}" } } }, - "PageResultContractResponse": { - "type": "object", - "properties": { - "content": { - "maxItems": 2147483647, - "minItems": 0, - "type": "array", - "description": "Content of PageResults", - "items": { - "$ref": "#/components/schemas/ContractResponse" - } - }, - "page": { - "type": "integer", - "format": "int32", - "example": 1 - }, - "pageCount": { - "type": "integer", - "format": "int32", - "example": 15 - }, - "pageSize": { - "type": "integer", - "format": "int32", - "example": 10 - }, - "totalItems": { - "type": "integer", - "format": "int64", - "example": 2 + "PageResultContractResponse" : { + "type" : "object", + "properties" : { + "content" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "description" : "Content of PageResults", + "items" : { + "$ref" : "#/components/schemas/ContractResponse" + } + }, + "page" : { + "type" : "integer", + "format" : "int32", + "example" : 1 + }, + "pageCount" : { + "type" : "integer", + "format" : "int32", + "example" : 15 + }, + "pageSize" : { + "type" : "integer", + "format" : "int32", + "example" : 10 + }, + "totalItems" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } } }, - "RegisterAssetRequest": { - "required": [ + "RegisterAssetRequest" : { + "required" : [ "assetIds", "policyId" ], - "type": "object", - "properties": { - "policyId": { - "type": "string", - "example": "a644a7cb-3de5-493b-9259-f01db315a46e" + "type" : "object", + "properties" : { + "policyId" : { + "type" : "string", + "example" : "a644a7cb-3de5-493b-9259-f01db315a46e" }, - "assetIds": { - "type": "array", - "items": { - "type": "string" + "assetIds" : { + "type" : "array", + "items" : { + "type" : "string" } } } }, - "SyncAssetsRequest": { - "type": "object", - "properties": { - "globalAssetIds": { - "maxItems": 100, - "minItems": 1, - "type": "array", - "example": [ + "SyncAssetsRequest" : { + "type" : "object", + "properties" : { + "globalAssetIds" : { + "maxItems" : 100, + "minItems" : 1, + "type" : "array", + "example" : [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" ], - "items": { - "type": "string", - "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\"]" + "items" : { + "type" : "string", + "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\"]" } } } }, - "GetDetailInformationRequest": { - "type": "object", - "properties": { - "assetIds": { - "maxLength": 50, - "minLength": 1, - "maxItems": 50, - "minItems": 1, - "type": "array", - "example": [ + "GetDetailInformationRequest" : { + "type" : "object", + "properties" : { + "assetIds" : { + "maxLength" : 50, + "minLength" : 1, + "maxItems" : 50, + "minItems" : 1, + "type" : "array", + "example" : [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" ], - "items": { - "maxLength": 50, - "minLength": 1, - "type": "string", - "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\"]" + "items" : { + "maxLength" : 50, + "minLength" : 1, + "type" : "string", + "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\"]" } } } }, - "DescriptionsResponse": { - "type": "object", - "properties": { - "id": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "urn:uuid:a4a26b9c-9460-4cc5-8645-85916b86adb0" - }, - "idShort": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "assembly-part-relationship" + "DescriptionsResponse" : { + "type" : "object", + "properties" : { + "id" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "urn:uuid:a4a26b9c-9460-4cc5-8645-85916b86adb0" + }, + "idShort" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "assembly-part-relationship" } } }, - "DetailAspectDataAsBuiltResponse": { - "type": "object", - "properties": { - "partId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "95657762-59" - }, - "customerPartId": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "01697F7-65" - }, - "nameAtCustomer": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Door front-left" - }, - "manufacturingCountry": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "DEU" - }, - "manufacturingDate": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "2022-02-04T13:48:54Z" + "DetailAspectDataAsBuiltResponse" : { + "type" : "object", + "properties" : { + "partId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "95657762-59" + }, + "customerPartId" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "01697F7-65" + }, + "nameAtCustomer" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Door front-left" + }, + "manufacturingCountry" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "DEU" + }, + "manufacturingDate" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "2022-02-04T13:48:54Z" } } }, - "DetailAspectDataAsPlannedResponse": { - "type": "object", - "properties": { - "validityPeriodFrom": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "2022-09-26T12:43:51.079Z" - }, - "validityPeriodTo": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "20232-07-13T12:00:00.000Z" + "DetailAspectDataAsPlannedResponse" : { + "type" : "object", + "properties" : { + "validityPeriodFrom" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "2022-09-26T12:43:51.079Z" + }, + "validityPeriodTo" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "20232-07-13T12:00:00.000Z" } } }, - "DetailAspectDataResponse": { - "type": "object", - "oneOf": [ + "DetailAspectDataResponse" : { + "type" : "object", + "oneOf" : [ { - "$ref": "#/components/schemas/DetailAspectDataAsBuiltResponse" + "$ref" : "#/components/schemas/DetailAspectDataAsBuiltResponse" }, { - "$ref": "#/components/schemas/DetailAspectDataAsPlannedResponse" + "$ref" : "#/components/schemas/DetailAspectDataAsPlannedResponse" }, { - "$ref": "#/components/schemas/PartSiteInformationAsPlannedResponse" + "$ref" : "#/components/schemas/PartSiteInformationAsPlannedResponse" }, { - "$ref": "#/components/schemas/DetailAspectDataTractionBatteryCodeResponse" + "$ref" : "#/components/schemas/DetailAspectDataTractionBatteryCodeResponse" } ] }, - "DetailAspectDataTractionBatteryCodeResponse": { - "type": "object", - "properties": { - "productType": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "pack" - }, - "tractionBatteryCode": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "X12MCPM27KLPCLX2M2382320" - }, - "subcomponents": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DetailAspectDataTractionBatteryCodeSubcomponentResponse" + "DetailAspectDataTractionBatteryCodeResponse" : { + "type" : "object", + "properties" : { + "productType" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "pack" + }, + "tractionBatteryCode" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "X12MCPM27KLPCLX2M2382320" + }, + "subcomponents" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DetailAspectDataTractionBatteryCodeSubcomponentResponse" } } } }, - "DetailAspectDataTractionBatteryCodeSubcomponentResponse": { - "type": "object", - "properties": { - "productType": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "pack" - }, - "tractionBatteryCode": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "X12MCPM27KLPCLX2M2382320" + "DetailAspectDataTractionBatteryCodeSubcomponentResponse" : { + "type" : "object", + "properties" : { + "productType" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "pack" + }, + "tractionBatteryCode" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "X12MCPM27KLPCLX2M2382320" } } }, - "DetailAspectModelResponse": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "PART_SITE_INFORMATION_AS_PLANNED", - "enum": [ + "DetailAspectModelResponse" : { + "type" : "object", + "properties" : { + "type" : { + "type" : "string", + "example" : "PART_SITE_INFORMATION_AS_PLANNED", + "enum" : [ "AS_BUILT", "AS_PLANNED", "TRACTION_BATTERY_CODE", @@ -7956,49 +7958,49 @@ "PART_SITE_INFORMATION_AS_PLANNED" ] }, - "data": { - "$ref": "#/components/schemas/DetailAspectDataResponse" + "data" : { + "$ref" : "#/components/schemas/DetailAspectDataResponse" } } }, - "PartSiteInformationAsPlannedResponse": { - "type": "object", - "properties": { - "functionValidUntil": { - "type": "string", - "example": "2025-02-08T04:30:48.000Z" + "PartSiteInformationAsPlannedResponse" : { + "type" : "object", + "properties" : { + "functionValidUntil" : { + "type" : "string", + "example" : "2025-02-08T04:30:48.000Z" }, - "function": { - "type": "string", - "example": "production" + "function" : { + "type" : "string", + "example" : "production" }, - "functionValidFrom": { - "type": "string", - "example": "2023-10-13T14:30:45+01:00" + "functionValidFrom" : { + "type" : "string", + "example" : "2023-10-13T14:30:45+01:00" }, - "catenaXSiteId": { - "type": "string", - "example": "urn:uuid:0fed587c-7ab4-4597-9841-1718e9693003" + "catenaXSiteId" : { + "type" : "string", + "example" : "urn:uuid:0fed587c-7ab4-4597-9841-1718e9693003" } } }, - "AlertResponse": { - "type": "object", - "properties": { - "id": { - "maximum": 255, - "minimum": 0, - "maxLength": 255, - "type": "integer", - "format": "int64", - "example": 66 - }, - "status": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "CREATED", - "enum": [ + "AlertResponse" : { + "type" : "object", + "properties" : { + "id" : { + "maximum" : 255, + "minimum" : 0, + "maxLength" : 255, + "type" : "integer", + "format" : "int64", + "example" : 66 + }, + "status" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "CREATED", + "enum" : [ "CREATED", "SENT", "RECEIVED", @@ -8009,111 +8011,111 @@ "CLOSED" ] }, - "description": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "example": "DescriptionText" - }, - "createdBy": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003AYRE" - }, - "createdByName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "createdDate": { - "maxLength": 50, - "minLength": 0, - "type": "string", - "example": "2023-02-21T21:27:10.734950Z" - }, - "assetIds": { - "maxItems": 1000, - "minItems": 0, - "type": "array", - "example": [ + "description" : { + "maxLength" : 1000, + "minLength" : 0, + "type" : "string", + "example" : "DescriptionText" + }, + "createdBy" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003AYRE" + }, + "createdByName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "createdDate" : { + "maxLength" : 50, + "minLength" : 0, + "type" : "string", + "example" : "2023-02-21T21:27:10.734950Z" + }, + "assetIds" : { + "maxItems" : 1000, + "minItems" : 0, + "type" : "array", + "example" : [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd" ], - "items": { - "type": "string", - "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" + "items" : { + "type" : "string", + "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" } }, - "channel": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "SENDER", - "enum": [ + "channel" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "SENDER", + "enum" : [ "SENDER", "RECEIVER" ] }, - "reason": { - "$ref": "#/components/schemas/QualityNotificationReasonResponse" - }, - "sendTo": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "BPNL00000003AYRE" - }, - "sendToName": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "Tier C" - }, - "severity": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "MINOR", - "enum": [ + "reason" : { + "$ref" : "#/components/schemas/QualityNotificationReasonResponse" + }, + "sendTo" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "BPNL00000003AYRE" + }, + "sendToName" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "Tier C" + }, + "severity" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "MINOR", + "enum" : [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "targetDate": { - "maxLength": 50, - "minLength": 0, - "type": "string", - "example": "2099-02-21T21:27:10.734950Z" + "targetDate" : { + "maxLength" : 50, + "minLength" : 0, + "type" : "string", + "example" : "2099-02-21T21:27:10.734950Z" }, - "errorMessage": { - "maxLength": 255, - "minLength": 0, - "type": "string", - "example": "EDC not reachable" + "errorMessage" : { + "maxLength" : 255, + "minLength" : 0, + "type" : "string", + "example" : "EDC not reachable" }, - "qualityNotificationMessageResponseList": { - "type": "array", - "items": { - "$ref": "#/components/schemas/QualityNotificationMessageResponse" + "qualityNotificationMessageResponseList" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/QualityNotificationMessageResponse" } } } }, - "UpdateAssetRequest": { - "required": [ + "UpdateAssetRequest" : { + "required" : [ "qualityType" ], - "type": "object", - "properties": { - "qualityType": { - "type": "string", - "example": "Ok", - "enum": [ + "type" : "object", + "properties" : { + "qualityType" : { + "type" : "string", + "example" : "Ok", + "enum" : [ "Ok", "Minor", "Major", @@ -8123,16 +8125,16 @@ } } }, - "ConstraintResponse": { - "type": "object", - "properties": { - "leftOperand": { - "type": "string", - "example": "PURPOSE" - }, - "operatorTypeResponse": { - "type": "string", - "enum": [ + "ConstraintResponse" : { + "type" : "object", + "properties" : { + "leftOperand" : { + "type" : "string", + "example" : "PURPOSE" + }, + "operatorTypeResponse" : { + "type" : "string", + "enum" : [ "EQ", "NEQ", "LT", @@ -8148,201 +8150,208 @@ "ISNONEOF" ] }, - "rightOperand": { - "type": "string", - "example": "ID Trace 3.1" + "rightOperands" : { + "type" : "array", + "example" : "ID Trace 3.1", + "items" : { + "type" : "string", + "example" : "ID Trace 3.1" + } } } }, - "ConstraintsResponse": { - "type": "object", - "properties": { - "and": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ConstraintResponse" + "ConstraintsResponse" : { + "type" : "object", + "properties" : { + "and" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ConstraintResponse" } }, - "or": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ConstraintResponse" + "or" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ConstraintResponse" } } } }, - "PermissionResponse": { - "type": "object", - "properties": { - "action": { - "type": "string", - "example": "USE", - "enum": [ + "PermissionResponse" : { + "type" : "object", + "properties" : { + "action" : { + "type" : "string", + "example" : "USE", + "enum" : [ "ACCESS", "USE" ] }, - "constraints": { - "$ref": "#/components/schemas/ConstraintsResponse" + "constraints" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ConstraintsResponse" + } } } }, - "PolicyResponse": { - "type": "object", - "properties": { - "policyId": { - "type": "string", - "example": "5a00bb50-0253-405f-b9f1-1a3150b9d51d" + "PolicyResponse" : { + "type" : "object", + "properties" : { + "policyId" : { + "type" : "string", + "example" : "5a00bb50-0253-405f-b9f1-1a3150b9d51d" }, - "createdOn": { - "type": "string", - "format": "date-time" + "createdOn" : { + "type" : "string", + "format" : "date-time" }, - "validUntil": { - "type": "string", - "format": "date-time" + "validUntil" : { + "type" : "string", + "format" : "date-time" }, - "permissions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PermissionResponse" + "permissions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/PermissionResponse" } } } }, - "DashboardResponse": { - "type": "object", - "properties": { - "asBuiltCustomerParts": { - "type": "integer", - "format": "int64", - "example": 5 - }, - "asPlannedCustomerParts": { - "type": "integer", - "format": "int64", - "example": 10 - }, - "asBuiltSupplierParts": { - "type": "integer", - "format": "int64", - "example": 2 - }, - "asPlannedSupplierParts": { - "type": "integer", - "format": "int64", - "example": 3 - }, - "asBuiltOwnParts": { - "type": "integer", - "format": "int64", - "example": 1 - }, - "asPlannedOwnParts": { - "type": "integer", - "format": "int64", - "example": 1 - }, - "myPartsWithOpenAlerts": { - "type": "integer", - "format": "int64", - "example": 1 - }, - "myPartsWithOpenInvestigations": { - "type": "integer", - "format": "int64", - "example": 1 - }, - "supplierPartsWithOpenAlerts": { - "type": "integer", - "format": "int64", - "example": 1 - }, - "customerPartsWithOpenAlerts": { - "type": "integer", - "format": "int64", - "example": 1 - }, - "supplierPartsWithOpenInvestigations": { - "type": "integer", - "format": "int64", - "example": 2 - }, - "customerPartsWithOpenInvestigations": { - "type": "integer", - "format": "int64", - "example": 2 - }, - "receivedActiveAlerts": { - "type": "integer", - "format": "int64", - "example": 2 - }, - "receivedActiveInvestigations": { - "type": "integer", - "format": "int64", - "example": 2 - }, - "sentActiveAlerts": { - "type": "integer", - "format": "int64", - "example": 2 - }, - "sentActiveInvestigations": { - "type": "integer", - "format": "int64", - "example": 2 + "DashboardResponse" : { + "type" : "object", + "properties" : { + "asBuiltCustomerParts" : { + "type" : "integer", + "format" : "int64", + "example" : 5 + }, + "asPlannedCustomerParts" : { + "type" : "integer", + "format" : "int64", + "example" : 10 + }, + "asBuiltSupplierParts" : { + "type" : "integer", + "format" : "int64", + "example" : 2 + }, + "asPlannedSupplierParts" : { + "type" : "integer", + "format" : "int64", + "example" : 3 + }, + "asBuiltOwnParts" : { + "type" : "integer", + "format" : "int64", + "example" : 1 + }, + "asPlannedOwnParts" : { + "type" : "integer", + "format" : "int64", + "example" : 1 + }, + "myPartsWithOpenAlerts" : { + "type" : "integer", + "format" : "int64", + "example" : 1 + }, + "myPartsWithOpenInvestigations" : { + "type" : "integer", + "format" : "int64", + "example" : 1 + }, + "supplierPartsWithOpenAlerts" : { + "type" : "integer", + "format" : "int64", + "example" : 1 + }, + "customerPartsWithOpenAlerts" : { + "type" : "integer", + "format" : "int64", + "example" : 1 + }, + "supplierPartsWithOpenInvestigations" : { + "type" : "integer", + "format" : "int64", + "example" : 2 + }, + "customerPartsWithOpenInvestigations" : { + "type" : "integer", + "format" : "int64", + "example" : 2 + }, + "receivedActiveAlerts" : { + "type" : "integer", + "format" : "int64", + "example" : 2 + }, + "receivedActiveInvestigations" : { + "type" : "integer", + "format" : "int64", + "example" : 2 + }, + "sentActiveAlerts" : { + "type" : "integer", + "format" : "int64", + "example" : 2 + }, + "sentActiveInvestigations" : { + "type" : "integer", + "format" : "int64", + "example" : 2 } } }, - "ImportJobResponse": { - "type": "object", - "properties": { - "importJobStatus": { - "type": "string", - "enum": [ + "ImportJobResponse" : { + "type" : "object", + "properties" : { + "importJobStatus" : { + "type" : "string", + "enum" : [ "INITIALIZING", "RUNNING", "ERROR", "COMPLETED" ] }, - "importId": { - "type": "string", - "example": "456a952e-05eb-40dc-a6f2-9c2cb9c1387f" + "importId" : { + "type" : "string", + "example" : "456a952e-05eb-40dc-a6f2-9c2cb9c1387f" }, - "startedOn": { - "maxLength": 50, - "type": "string", - "example": "2099-02-21T21:27:10.734950Z" + "startedOn" : { + "maxLength" : 50, + "type" : "string", + "example" : "2099-02-21T21:27:10.734950Z" }, - "completedOn": { - "maxLength": 50, - "type": "string", - "example": "2099-02-21T21:27:10.734950Z" + "completedOn" : { + "maxLength" : 50, + "type" : "string", + "example" : "2099-02-21T21:27:10.734950Z" } } }, - "ImportReportResponse": { - "type": "object", - "properties": { - "importJob": { - "$ref": "#/components/schemas/ImportJobResponse" + "ImportReportResponse" : { + "type" : "object", + "properties" : { + "importJob" : { + "$ref" : "#/components/schemas/ImportJobResponse" }, - "importedAsset": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ImportedAssetResponse" + "importedAsset" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ImportedAssetResponse" } } } }, - "ImportedAssetResponse": { - "type": "object", - "properties": { - "importState": { - "type": "string", - "enum": [ + "ImportedAssetResponse" : { + "type" : "object", + "properties" : { + "importState" : { + "type" : "string", + "enum" : [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -8350,30 +8359,30 @@ "UNSET" ] }, - "catenaxId": { - "type": "string", - "example": "urn:uuid:7eeeac86-7b69-444d-81e6-655d0f1513bd}" + "catenaxId" : { + "type" : "string", + "example" : "urn:uuid:7eeeac86-7b69-444d-81e6-655d0f1513bd}" }, - "importedOn": { - "maxLength": 50, - "type": "string", - "example": "2099-02-21T21:27:10.734950Z" + "importedOn" : { + "maxLength" : 50, + "type" : "string", + "example" : "2099-02-21T21:27:10.734950Z" }, - "importMessage": { - "type": "string", - "example": "Asset created successfully in transient state." + "importMessage" : { + "type" : "string", + "example" : "Asset created successfully in transient state." } } } }, - "securitySchemes": { - "oAuth2": { - "type": "oauth2", - "flows": { - "clientCredentials": { - "tokenUrl": "localhost", - "scopes": { - "profile email": "" + "securitySchemes" : { + "oAuth2" : { + "type" : "oauth2", + "flows" : { + "clientCredentials" : { + "tokenUrl" : "localhost", + "scopes" : { + "profile email" : "" } } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java index 5f766b836f..c177b6215b 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java @@ -50,7 +50,7 @@ public class ContractController { @Operation(operationId = "contracts", summary = "All contract agreements for all assets", - tags = {"Contracts"}, + tags = {"getContracts"}, description = "This endpoint returns all contract agreements for alls assets in Trace-X", security = @SecurityRequirement(name = "oAuth2", scopes = "profile email")) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Ok."), @@ -59,44 +59,44 @@ public class ContractController { description = "Bad request.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class, example = "Bad request."))), + schema = @Schema(implementation = ErrorResponse.class))), @ApiResponse( responseCode = "401", description = "Authorization failed.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class, example = "Authorization failed."))), + schema = @Schema(implementation = ErrorResponse.class))), @ApiResponse( responseCode = "403", description = "Forbidden.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class, example = "Forbidden."))), + schema = @Schema(implementation = ErrorResponse.class))), @ApiResponse( responseCode = "404", description = "Not found.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class, example = "Not found."))), + schema = @Schema(implementation = ErrorResponse.class))), @ApiResponse( responseCode = "415", - description = "Unsupported media type.", + description = "Unsupported media type", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class, example = "Unsupported media type."))), + schema = @Schema(implementation = ErrorResponse.class))), @ApiResponse( responseCode = "429", description = "Too many requests.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class, example = "Too many requests."))), + schema = @Schema(implementation = ErrorResponse.class))), @ApiResponse( responseCode = "500", description = "Internal server error.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class, example = "Internal server error.")))}) + schema = @Schema(implementation = ErrorResponse.class)))}) @PostMapping public PageResult getContracts(@Valid @RequestBody PageableFilterRequest pageableFilterRequest) { PageResult contracts = contractService.getContracts(pageableFilterRequest); diff --git a/tx-models/src/main/java/assets/importpoc/ErrorResponse.java b/tx-models/src/main/java/assets/importpoc/ErrorResponse.java index 246fef480a..e805a2779a 100644 --- a/tx-models/src/main/java/assets/importpoc/ErrorResponse.java +++ b/tx-models/src/main/java/assets/importpoc/ErrorResponse.java @@ -19,10 +19,12 @@ package assets.importpoc; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints.Size; public record ErrorResponse( + @Schema(example = "Access Denied") @Size(max = 1000) @Pattern(regexp = "^.*$", message = "Invalid message pattern") String message From b5778308a2ee514148bb5d262599aef0a64c1c7a Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Wed, 13 Mar 2024 13:10:24 +0100 Subject: [PATCH 79/87] feature: 420 refactor swagger --- .../application/rest/ContractController.java | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java index c177b6215b..a26e642d3c 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java @@ -18,7 +18,6 @@ ********************************************************************************/ package org.eclipse.tractusx.traceability.contracts.application.rest; -import assets.importpoc.ErrorResponse; import contract.response.ContractResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -58,45 +57,37 @@ public class ContractController { responseCode = "400", description = "Bad request.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Bad request.\"}"))), @ApiResponse( responseCode = "401", description = "Authorization failed.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Authorization failed.\"}"))), @ApiResponse( responseCode = "403", description = "Forbidden.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Forbidden.\"}"))), @ApiResponse( responseCode = "404", description = "Not found.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Not found.\"}"))), @ApiResponse( - responseCode = "415", - description = "Unsupported media type", + responseCode = "415", description = "Unsupported media type.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Unsupported media type.\"}"))), @ApiResponse( responseCode = "429", description = "Too many requests.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Too many requests.\"}"))), @ApiResponse( responseCode = "500", description = "Internal server error.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class)))}) + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Internal server error.\"}")))}) @PostMapping public PageResult getContracts(@Valid @RequestBody PageableFilterRequest pageableFilterRequest) { PageResult contracts = contractService.getContracts(pageableFilterRequest); From fd3faaf9cc8f60ed60a9f33d213dd1c1c5612402 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Wed, 13 Mar 2024 13:16:13 +0100 Subject: [PATCH 80/87] feature: 420 refactor swagger --- .../openapi/traceability-foss-backend.json | 2176 +++++++++-------- 1 file changed, 1095 insertions(+), 1081 deletions(-) diff --git a/tx-backend/openapi/traceability-foss-backend.json b/tx-backend/openapi/traceability-foss-backend.json index 11bbaba713..61451dd2da 100644 --- a/tx-backend/openapi/traceability-foss-backend.json +++ b/tx-backend/openapi/traceability-foss-backend.json @@ -37,8 +37,8 @@ "description" : "The endpoint returns a result of BPN EDC URL mappings.", "operationId" : "getBpnEdcs", "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -47,8 +47,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -57,8 +57,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -67,8 +67,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -77,8 +77,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -87,8 +87,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -112,8 +112,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -154,18 +154,23 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -174,8 +179,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -184,23 +189,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -209,8 +209,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -219,8 +219,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -229,8 +229,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -271,18 +271,23 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -291,8 +296,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -301,23 +306,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -326,8 +326,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -336,8 +336,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -346,8 +346,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -385,14 +385,8 @@ } ], "responses" : { - "200" : { - "description" : "Returns the paged result found", - "content" : { - "application/json" : {} - } - }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -401,8 +395,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -411,8 +405,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -421,8 +415,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -431,8 +425,14 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Returns the paged result found", + "content" : { + "application/json" : {} + } + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -441,8 +441,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -451,8 +451,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -498,14 +498,14 @@ "required" : true }, "responses" : { - "200" : { - "description" : "Ok.", + "204" : { + "description" : "No Content.", "content" : { "application/json" : {} } }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -514,8 +514,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -524,8 +524,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -534,8 +534,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -544,8 +544,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -554,8 +554,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -564,14 +564,8 @@ } } }, - "204" : { - "description" : "No Content.", - "content" : { - "application/json" : {} - } - }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -579,6 +573,12 @@ } } } + }, + "200" : { + "description" : "Ok.", + "content" : { + "application/json" : {} + } } }, "security" : [ @@ -609,8 +609,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -619,8 +619,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -629,8 +629,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -639,8 +639,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -649,8 +649,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -659,8 +659,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -679,8 +679,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -729,18 +729,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -752,16 +742,6 @@ "200" : { "description" : "Ok." }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "204" : { "description" : "No content." }, @@ -775,8 +755,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -785,8 +765,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -795,8 +775,28 @@ } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -845,8 +845,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -855,8 +855,14 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "Ok." + }, + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -865,11 +871,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -878,11 +881,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -891,8 +891,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -901,8 +901,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -911,8 +911,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -951,8 +951,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -961,8 +961,11 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "Ok." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -971,11 +974,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -984,8 +984,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -994,8 +994,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No content." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1004,8 +1007,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1014,11 +1017,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1057,8 +1057,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1067,8 +1067,11 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "Ok." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1077,11 +1080,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1090,8 +1090,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1100,8 +1100,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No content." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1110,8 +1113,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1120,11 +1123,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1162,36 +1162,6 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -1332,8 +1302,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1342,8 +1312,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1362,8 +1332,38 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1401,8 +1401,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1411,8 +1411,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1421,8 +1421,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1431,8 +1431,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1441,8 +1441,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1451,8 +1451,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1471,8 +1471,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1511,22 +1511,41 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Too many requests." + } } } } }, - "429" : { - "description" : "Too many requests.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Internal server error." + } + } + } + } + }, + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "type" : "string", + "example" : { + "message" : "Not found." + } } } } @@ -1547,52 +1566,54 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "401" : { "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Authorization failed." + } } } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Forbidden." + } } } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Bad request." + } } } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Unsupported media type." + } } } } @@ -1627,14 +1648,11 @@ "required" : true }, "responses" : { - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} - } + "204" : { + "description" : "No Content." }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1643,8 +1661,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1653,11 +1671,8 @@ } } }, - "204" : { - "description" : "No Content." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1666,8 +1681,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1676,8 +1691,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1686,8 +1701,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1696,8 +1711,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1705,6 +1720,12 @@ } } } + }, + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} + } } }, "security" : [ @@ -1743,14 +1764,11 @@ } }, "responses" : { - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} - } + "204" : { + "description" : "No Content." }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1759,8 +1777,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1769,11 +1787,8 @@ } } }, - "204" : { - "description" : "No Content." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1782,8 +1797,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1792,8 +1807,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1802,8 +1817,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1812,8 +1827,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1821,6 +1836,12 @@ } } } + }, + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} + } } }, "security" : [ @@ -1851,8 +1872,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1861,8 +1882,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1871,8 +1892,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1881,8 +1902,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1891,8 +1912,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1901,8 +1922,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -1914,8 +1935,8 @@ "201" : { "description" : "Created." }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1953,28 +1974,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1993,8 +1994,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2003,8 +2004,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2204,8 +2205,28 @@ } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2243,8 +2264,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2253,8 +2274,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2263,8 +2284,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2273,8 +2294,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2283,8 +2304,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2293,8 +2314,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2306,8 +2327,8 @@ "201" : { "description" : "Created." }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2345,16 +2366,86 @@ "required" : true }, "responses" : { - "200" : { - "description" : "Returns the paged result found for Asset", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "maxItems" : 2147483647, + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "200" : { + "description" : "Returns the paged result found for Asset", + "content" : { + "application/json" : { + "schema" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "maxItems" : 2147483647, "type" : "array", "description" : "Assets", "items" : { @@ -2535,76 +2626,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -2635,8 +2656,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2645,8 +2666,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2655,8 +2676,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2665,8 +2686,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2675,8 +2696,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2685,8 +2706,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2705,8 +2726,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2755,8 +2776,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2765,8 +2786,11 @@ } } }, - "429" : { - "description" : "Too many requests.", + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2775,8 +2799,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2785,11 +2809,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2798,8 +2819,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2808,8 +2829,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2818,8 +2839,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2868,8 +2889,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2878,8 +2899,14 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "Ok." + }, + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2888,11 +2915,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2901,11 +2925,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2914,8 +2935,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2924,8 +2945,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -2934,8 +2955,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2974,8 +2995,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2984,21 +3005,21 @@ } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { + "200" : { + "description" : "Ok." + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3007,8 +3028,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3017,8 +3038,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No content." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -3027,8 +3051,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3037,11 +3061,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3080,8 +3101,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3090,8 +3111,11 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "Ok." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3100,11 +3124,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3113,8 +3134,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3123,8 +3144,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "No content." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -3133,8 +3157,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -3143,11 +3167,8 @@ } } }, - "204" : { - "description" : "No content." - }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3185,28 +3206,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3225,16 +3226,6 @@ } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "500" : { "description" : "Internal server error.", "content" : { @@ -3379,8 +3370,38 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3418,28 +3439,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3458,8 +3459,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3468,8 +3469,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3664,8 +3665,28 @@ } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3711,18 +3732,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -3731,8 +3742,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3741,8 +3752,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3751,8 +3762,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3761,8 +3772,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -3957,8 +3968,18 @@ } } }, - "404" : { - "description" : "Not found.", + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4182,8 +4203,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4192,8 +4213,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4202,9 +4223,9 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { + "500" : { + "description" : "Internal server error.", + "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/ErrorResponse" @@ -4212,8 +4233,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4222,8 +4243,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4232,8 +4253,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4242,8 +4263,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4289,8 +4310,8 @@ "required" : true }, "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4299,8 +4320,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4309,8 +4330,18 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4505,18 +4536,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4525,8 +4546,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4535,8 +4556,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4564,8 +4585,8 @@ "description" : "The endpoint Triggers reload of shell descriptors.", "operationId" : "reload", "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4574,8 +4595,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4584,8 +4605,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4594,11 +4615,8 @@ } } }, - "202" : { - "description" : "Created registry reload job." - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4607,8 +4625,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "202" : { + "description" : "Created registry reload job." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4617,8 +4638,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4627,8 +4648,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4656,8 +4677,8 @@ "description" : "The endpoint returns all policies .", "operationId" : "policy", "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4666,8 +4687,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4676,18 +4697,18 @@ } } }, - "200" : { - "description" : "Returns the policies", + "500" : { + "description" : "Internal server error.", "content" : { - "*/*" : { + "application/json" : { "schema" : { - "$ref" : "#/components/schemas/PolicyResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4696,8 +4717,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4706,8 +4727,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4716,18 +4737,18 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Returns the policies", "content" : { - "application/json" : { + "*/*" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/PolicyResponse" } } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4766,18 +4787,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4802,8 +4813,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4812,8 +4823,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4822,8 +4833,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4832,8 +4843,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4842,8 +4853,18 @@ } } }, - "404" : { - "description" : "Not found.", + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4911,8 +4932,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4921,8 +4942,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4946,18 +4977,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4966,8 +4987,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4976,8 +4997,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -4986,8 +5007,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5015,28 +5036,28 @@ "description" : "The endpoint can return limited data based on the user role", "operationId" : "dashboard", "responses" : { - "200" : { - "description" : "Returns dashboard data", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/DashboardResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Returns dashboard data", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/DashboardResponse" } } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5045,8 +5066,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5055,8 +5076,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5065,8 +5086,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5075,8 +5096,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5085,8 +5106,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5125,8 +5146,11 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "204" : { + "description" : "No Content." + }, + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5135,21 +5159,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "OK.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/ImportReportResponse" } } } }, - "204" : { - "description" : "No Content." - }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5158,18 +5179,18 @@ } } }, - "200" : { - "description" : "OK.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ImportReportResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5178,8 +5199,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5188,8 +5209,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5198,8 +5219,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5235,16 +5256,76 @@ "$ref" : "#/components/schemas/OwnPageable" } }, - { - "name" : "filter", - "in" : "query", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/SearchCriteriaRequestParam" + { + "name" : "filter", + "in" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/SearchCriteriaRequestParam" + } + } + ], + "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } } - } - ], - "responses" : { + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -5436,46 +5517,6 @@ } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "415" : { "description" : "Unsupported media type", "content" : { @@ -5485,26 +5526,6 @@ } } } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -5567,8 +5588,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5577,8 +5598,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5602,18 +5633,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5622,8 +5643,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5632,8 +5653,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5642,8 +5663,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5681,8 +5702,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -5691,8 +5712,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5701,8 +5722,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5711,8 +5732,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5721,8 +5742,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5731,8 +5752,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5927,8 +5948,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6165,8 +6186,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6175,8 +6196,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6185,8 +6206,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6195,8 +6216,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6205,8 +6226,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6215,8 +6236,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6225,8 +6246,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6296,8 +6317,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6306,8 +6327,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6331,18 +6362,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6351,8 +6372,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6361,8 +6382,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6371,8 +6392,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6400,8 +6421,8 @@ "description" : "The endpoint returns a map for assets consumed by the map.", "operationId" : "assetsCountryMap", "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6410,8 +6431,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6420,8 +6441,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6430,8 +6451,18 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6440,8 +6471,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6450,8 +6481,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6474,16 +6505,6 @@ } } } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -6514,8 +6535,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6524,8 +6545,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6534,8 +6555,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6544,8 +6565,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6554,8 +6575,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6564,8 +6585,18 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6759,16 +6790,6 @@ } } } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -6800,18 +6821,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6835,8 +6846,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6845,8 +6856,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6855,8 +6866,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6865,8 +6876,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6875,8 +6886,18 @@ } } }, - "404" : { - "description" : "Not found.", + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6944,8 +6965,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6954,8 +6975,18 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6979,18 +7010,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6999,8 +7020,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -7009,8 +7030,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -7019,8 +7040,8 @@ } } }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -7048,8 +7069,8 @@ "description" : "Deletes all submodels from the system.", "operationId" : "deleteSubmodels", "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -7058,8 +7079,11 @@ } } }, - "429" : { - "description" : "Too many requests.", + "200" : { + "description" : "Ok." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -7068,11 +7092,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -7081,8 +7102,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -7091,8 +7112,8 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -7101,8 +7122,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -7114,8 +7135,8 @@ "204" : { "description" : "No Content." }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -7153,8 +7174,8 @@ } ], "responses" : { - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -7163,8 +7184,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -7173,8 +7194,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -7183,8 +7204,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -7193,8 +7214,11 @@ } } }, - "415" : { - "description" : "Unsupported media type", + "204" : { + "description" : "Deleted." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -7203,8 +7227,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -7213,14 +7237,8 @@ } } }, - "200" : { - "description" : "Okay" - }, - "204" : { - "description" : "Deleted." - }, - "404" : { - "description" : "Not found.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -7228,6 +7246,9 @@ } } } + }, + "200" : { + "description" : "Okay" } }, "security" : [ @@ -7262,18 +7283,6 @@ } } }, - "ErrorResponse" : { - "type" : "object", - "properties" : { - "message" : { - "maxLength" : 1000, - "minLength" : 0, - "pattern" : "^.*$", - "type" : "string", - "example" : "Access Denied" - } - } - }, "BpnEdcMappingResponse" : { "type" : "object", "properties" : { @@ -7287,6 +7296,18 @@ } } }, + "ErrorResponse" : { + "type" : "object", + "properties" : { + "message" : { + "maxLength" : 1000, + "minLength" : 0, + "pattern" : "^.*$", + "type" : "string", + "example" : "Access Denied" + } + } + }, "StartQualityNotificationRequest" : { "required" : [ "severity" @@ -8150,13 +8171,9 @@ "ISNONEOF" ] }, - "rightOperands" : { - "type" : "array", - "example" : "ID Trace 3.1", - "items" : { - "type" : "string", - "example" : "ID Trace 3.1" - } + "rightOperand" : { + "type" : "string", + "example" : "ID Trace 3.1" } } }, @@ -8189,10 +8206,7 @@ ] }, "constraints" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/ConstraintsResponse" - } + "$ref" : "#/components/schemas/ConstraintsResponse" } } }, From 9a19f7e5a71adcf8b2e9507994f991d11c57d6b7 Mon Sep 17 00:00:00 2001 From: ds-lcapellino Date: Wed, 13 Mar 2024 13:37:47 +0100 Subject: [PATCH 81/87] feature: 420 refactor swagger --- .../contracts/application/rest/ContractController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java index a26e642d3c..924e4d1ab8 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java @@ -49,8 +49,8 @@ public class ContractController { @Operation(operationId = "contracts", summary = "All contract agreements for all assets", - tags = {"getContracts"}, - description = "This endpoint returns all contract agreements for alls assets in Trace-X", + tags = {"Contracts"}, + description = "This endpoint returns all contract agreements for all assets in Trace-X", security = @SecurityRequirement(name = "oAuth2", scopes = "profile email")) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Ok."), @ApiResponse( From 2b64c5c45a41a564b277f0a6ee410b9e296d58d3 Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Wed, 13 Mar 2024 14:08:52 +0100 Subject: [PATCH 82/87] chore-xxx: added new PolicyStartUpConfig --- CHANGELOG.md | 2 +- .../importpoc/rest/PolicyController.java | 4 +- .../common/config/ApplicationConfig.java | 83 +----------- .../common/config/PolicyStartUpConfig.java | 128 ++++++++++++++++++ .../IntegrationTestSpecification.java | 1 - 5 files changed, 133 insertions(+), 85 deletions(-) create mode 100644 tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/PolicyStartUpConfig.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 72b0de00c4..4cf388ddc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ _**For better traceability add the corresponding GitHub issue number in each cha - #536 Added import state PUBLISHED_TO_CX in frontend - #420 add /contracts api to fetch contract agreement information from EDC for assets - Added a step to the pull-request-backend.yml which checks if the pom.xml(root) properties have some versions ending with -SNAPSHOT - +- Added a @PostConstruct method in PolicyStartUpConfig to allow Integration tests to run without errors in stack traces. ### Changed - Updated RELEASE.md to the latest release guide (added more steps) - #515 Fixed notification toast click area diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java index 796f6a843d..d6247aaf0e 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java @@ -54,7 +54,9 @@ public class PolicyController { description = "The endpoint returns all policies .", security = @SecurityRequirement(name = "oAuth2", scopes = "profile email")) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns the policies", - content = {@Content(schema = @Schema(implementation = PolicyResponse.class))}), + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = PolicyResponse.class))}), @ApiResponse( responseCode = "400", description = "Bad request.", diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ApplicationConfig.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ApplicationConfig.java index 440878acfc..7419216d63 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ApplicationConfig.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ApplicationConfig.java @@ -21,44 +21,26 @@ package org.eclipse.tractusx.traceability.common.config; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + import io.github.resilience4j.core.registry.EntryAddedEvent; import io.github.resilience4j.core.registry.EntryRemovedEvent; import io.github.resilience4j.core.registry.EntryReplacedEvent; import io.github.resilience4j.core.registry.RegistryEventConsumer; import io.github.resilience4j.retry.Retry; -import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.eclipse.tractusx.irs.edc.client.EdcConfiguration; import org.eclipse.tractusx.irs.edc.client.asset.EdcAssetService; import org.eclipse.tractusx.irs.edc.client.contract.service.EdcContractDefinitionService; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy; -import org.eclipse.tractusx.irs.edc.client.policy.Constraint; -import org.eclipse.tractusx.irs.edc.client.policy.Constraints; -import org.eclipse.tractusx.irs.edc.client.policy.Operator; -import org.eclipse.tractusx.irs.edc.client.policy.OperatorType; -import org.eclipse.tractusx.irs.edc.client.policy.Permission; -import org.eclipse.tractusx.irs.edc.client.policy.Policy; -import org.eclipse.tractusx.irs.edc.client.policy.PolicyType; import org.eclipse.tractusx.irs.edc.client.policy.service.EdcPolicyDefinitionService; import org.eclipse.tractusx.irs.edc.client.transformer.EdcTransformer; -import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.IrsRepositoryImpl; -import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; -import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties; -import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Lazy; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -71,10 +53,6 @@ import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; import org.thymeleaf.templateresolver.ITemplateResolver; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; @Configuration @ConfigurationPropertiesScan(basePackages = "org.eclipse.tractusx.traceability.*") @@ -86,15 +64,6 @@ @EnableJpaRepositories(basePackages = "org.eclipse.tractusx.traceability.*") public class ApplicationConfig { - @Autowired - TraceabilityProperties traceabilityProperties; - - @Autowired - @Lazy - IrsRepositoryImpl irsRepositoryImpl; - - - private final AcceptedPoliciesProvider.DefaultAcceptedPoliciesProvider defaultAcceptedPoliciesProvider; @Bean public InternalResourceViewResolver defaultViewResolver() { @@ -140,57 +109,7 @@ public ITemplateResolver textTemplateResolver() { return templateResolver; } - @PostConstruct - public void registerDecentralRegistryPermissions() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JavaTimeModule()); - List acceptedPolicy = buildAcceptedPolicies(); - defaultAcceptedPoliciesProvider.addAcceptedPolicies(acceptedPolicy); - log.info("Successfully added permission to irs client lib provider: {}", mapper.writeValueAsString(acceptedPolicy)); - } - - @NotNull - private List buildAcceptedPolicies() { - List acceptedPolicies = new ArrayList<>(createOwnAcceptedPolicies(traceabilityProperties.getValidUntil())); - - //add IRS policies - try { - acceptedPolicies.addAll(createIrsAcceptedPolicies()); - } catch (Exception exception) { - log.error("Failed to create Irs Policies : ", exception); - } - return acceptedPolicies; - } - - private List createIrsAcceptedPolicies() { - List irsPolicyResponse = irsRepositoryImpl.getPolicies(); - List irsPolicies = irsPolicyResponse.stream().map(response -> { - Policy policy = new Policy(response.payload().policyId(), response.payload().policy().getCreatedOn(), response.validUntil(), response.payload().policy().getPermissions()); - return new AcceptedPolicy(policy, response.validUntil()); - }).toList(); - - return new ArrayList<>(irsPolicies); - } - - private List createOwnAcceptedPolicies(OffsetDateTime offsetDateTime) { - List andConstraintList = new ArrayList<>(); - List orConstraintList = new ArrayList<>(); - andConstraintList.add(new Constraint(traceabilityProperties.getLeftOperand(), new Operator(OperatorType.fromValue(traceabilityProperties.getOperatorType())), traceabilityProperties.getRightOperand())); - andConstraintList.add(new Constraint(traceabilityProperties.getLeftOperand(), new Operator(OperatorType.fromValue(traceabilityProperties.getOperatorType())), traceabilityProperties.getRightOperand())); - - List permissions = List.of( - new Permission( - PolicyType.USE, - new Constraints( - andConstraintList, - orConstraintList) - - )); - - Policy ownPolicy = new Policy(UUID.randomUUID().toString(), OffsetDateTime.now(), offsetDateTime, permissions); - return List.of(new AcceptedPolicy(ownPolicy, offsetDateTime)); - } @Bean public RegistryEventConsumer myRetryRegistryEventConsumer() { diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/PolicyStartUpConfig.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/PolicyStartUpConfig.java new file mode 100644 index 0000000000..0e56515b02 --- /dev/null +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/PolicyStartUpConfig.java @@ -0,0 +1,128 @@ +/******************************************************************************** + * Copyright (c) 2023, 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +package org.eclipse.tractusx.traceability.common.config; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider; +import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy; +import org.eclipse.tractusx.irs.edc.client.policy.Constraint; +import org.eclipse.tractusx.irs.edc.client.policy.Constraints; +import org.eclipse.tractusx.irs.edc.client.policy.Operator; +import org.eclipse.tractusx.irs.edc.client.policy.OperatorType; +import org.eclipse.tractusx.irs.edc.client.policy.Permission; +import org.eclipse.tractusx.irs.edc.client.policy.Policy; +import org.eclipse.tractusx.irs.edc.client.policy.PolicyType; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.IrsRepositoryImpl; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; +import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Profile; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import static org.eclipse.tractusx.traceability.common.config.ApplicationProfiles.NOT_INTEGRATION_TESTS; + +@Configuration +@ConfigurationPropertiesScan(basePackages = "org.eclipse.tractusx.traceability.*") +@EnableWebMvc +@EnableAsync(proxyTargetClass = true) +@EnableConfigurationProperties +@RequiredArgsConstructor +@Slf4j +@EnableJpaRepositories(basePackages = "org.eclipse.tractusx.traceability.*") +@Profile(NOT_INTEGRATION_TESTS) +public class PolicyStartUpConfig { + + private final AcceptedPoliciesProvider.DefaultAcceptedPoliciesProvider defaultAcceptedPoliciesProvider; + @Autowired + TraceabilityProperties traceabilityProperties; + @Autowired + @Lazy + IrsRepositoryImpl irsRepositoryImpl; + + @PostConstruct + @ConditionalOnProperty(name = "applicationConfig.registerDecentralRegistryPermissions.enabled", havingValue = "true") + public void registerDecentralRegistryPermissions() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new JavaTimeModule()); + List acceptedPolicy = buildAcceptedPolicies(); + defaultAcceptedPoliciesProvider.addAcceptedPolicies(acceptedPolicy); + log.info("Successfully added permission to irs client lib provider: {}", mapper.writeValueAsString(acceptedPolicy)); + } + + @NotNull + private List buildAcceptedPolicies() { + List acceptedPolicies = new ArrayList<>(createOwnAcceptedPolicies(traceabilityProperties.getValidUntil())); + + //add IRS policies + try { + acceptedPolicies.addAll(createIrsAcceptedPolicies()); + } catch (Exception exception) { + log.error("Failed to create Irs Policies : ", exception); + } + return acceptedPolicies; + } + + private List createIrsAcceptedPolicies() { + + List irsPolicyResponse = irsRepositoryImpl.getPolicies(); + List irsPolicies = irsPolicyResponse.stream().map(response -> { + Policy policy = new Policy(response.payload().policyId(), response.payload().policy().getCreatedOn(), response.validUntil(), response.payload().policy().getPermissions()); + return new AcceptedPolicy(policy, response.validUntil()); + }).toList(); + + return new ArrayList<>(irsPolicies); + } + + private List createOwnAcceptedPolicies(OffsetDateTime offsetDateTime) { + List andConstraintList = new ArrayList<>(); + List orConstraintList = new ArrayList<>(); + andConstraintList.add(new Constraint(traceabilityProperties.getLeftOperand(), new Operator(OperatorType.fromValue(traceabilityProperties.getOperatorType())), traceabilityProperties.getRightOperand())); + andConstraintList.add(new Constraint(traceabilityProperties.getLeftOperand(), new Operator(OperatorType.fromValue(traceabilityProperties.getOperatorType())), traceabilityProperties.getRightOperand())); + + List permissions = List.of( + new Permission( + PolicyType.USE, + new Constraints( + andConstraintList, + orConstraintList) + + )); + + Policy ownPolicy = new Policy(UUID.randomUUID().toString(), OffsetDateTime.now(), offsetDateTime, permissions); + return List.of(new AcceptedPolicy(ownPolicy, offsetDateTime)); + } +} diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/IntegrationTestSpecification.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/IntegrationTestSpecification.java index bfdccd54db..bac6eb493b 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/IntegrationTestSpecification.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/IntegrationTestSpecification.java @@ -41,7 +41,6 @@ import java.util.concurrent.TimeUnit; import static org.awaitility.Awaitility.await; - @ActiveProfiles("integration-spring-boot") @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) @AutoConfigureMockMvc From d6c121b064e95a3e20c37e28085ad896a959187b Mon Sep 17 00:00:00 2001 From: ashanmugavel Date: Wed, 13 Mar 2024 14:46:17 +0100 Subject: [PATCH 83/87] chore-xxx: updated changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cf388ddc7..367227d491 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ _**For better traceability add the corresponding GitHub issue number in each cha - #536 Added import state PUBLISHED_TO_CX in frontend - #420 add /contracts api to fetch contract agreement information from EDC for assets - Added a step to the pull-request-backend.yml which checks if the pom.xml(root) properties have some versions ending with -SNAPSHOT -- Added a @PostConstruct method in PolicyStartUpConfig to allow Integration tests to run without errors in stack traces. +- Added a PostConstruct method in PolicyStartUpConfig to allow Integration tests to run without errors in stack traces. ### Changed - Updated RELEASE.md to the latest release guide (added more steps) - #515 Fixed notification toast click area From d7fcf474295bc9e9ad7fc53c3eb29f343e0cc31c Mon Sep 17 00:00:00 2001 From: Christian Rehm Date: Wed, 13 Mar 2024 14:48:04 +0100 Subject: [PATCH 84/87] chore(concept): #578 implement review suggestions --- .../#578-consistent-null-values.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md b/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md index 78d8377290..8cce6fe856 100644 --- a/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md +++ b/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md @@ -31,9 +31,9 @@ These should be consistent throughout Trace-X. - Whenever a string value is saved or updated in the database and during data consumption from IRS: - [ ] Leading and trailing whitespace characters are trimmed. - [ ] Empty strings ("") are all converted to null. -- [ ] Null values are shown as a hyphen "-" in the frontend. -- [ ] When sorting columns, empty values are shown all the way at the top regardless of the sort order. -- [ ] Empty values can be filtered for. They are shown as "*empty field*" when filtering for them. This option is always shown at the top of the filter/search box regardless of what the user is searching for. +- [ ] Null values are shown as a dash "-" in the frontend. +- [ ] When sorting columns, null values are treated the default way of the database. (Shown at the end for ASC - shown at the beginning for DESC) +- [ ] Null values can be filtered for. They are shown as "*empty field*" when filtering for them. This option is always shown at the top of the filter/search box regardless of what the user is searching for. - [ ] Leading and trailing whitespace characters don't count as mandatory values during user input. # Out of scope @@ -47,11 +47,11 @@ Whenever a string is saved or updated in the database and during data consumptio 3. Save/update value in database ### Frontend -Null values should be shown in the frontend as a hyphen: +Null values should be shown in the frontend as a dash: ![null-value-display.png](null-value-display.png) -When sorting the values, empty ones should be always shown at the top regardless of the sort order. +When sorting the values, null must be treated the default way of the database. When sorted ascending, they are at the end. When sorted descending, they are at the beginning. Filtering for empty values must be possible. In the filter box "*empty field*" should always be shown at the top regardless of what the user is searching for. ![null-value-filter.png](null-value-filter.png) From 5b5ace171c4fbc70d694deda1c1b09254eba8aa9 Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 13 Mar 2024 15:33:40 +0100 Subject: [PATCH 85/87] chore(contracts): 421 refactor cypress test --- .../integration/pages/AdminContractView.ts | 50 ------------------- .../cypress/integration/pages/AdminPage.ts | 50 +++++++++++++++++++ .../step_definitions/admin-contracts.ts | 46 +++++++++++++++++ .../cypress/support/step_definitions/menu.ts | 4 +- .../bpn-configuration.component.html | 2 +- .../contract-table.component.html | 2 +- .../import-json/import-json.component.html | 2 +- 7 files changed, 101 insertions(+), 55 deletions(-) delete mode 100644 frontend/cypress/integration/pages/AdminContractView.ts create mode 100644 frontend/cypress/integration/pages/AdminPage.ts create mode 100644 frontend/cypress/support/step_definitions/admin-contracts.ts diff --git a/frontend/cypress/integration/pages/AdminContractView.ts b/frontend/cypress/integration/pages/AdminContractView.ts deleted file mode 100644 index 85dd3fdba4..0000000000 --- a/frontend/cypress/integration/pages/AdminContractView.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Then, When } from '@badeball/cypress-cucumber-preprocessor'; - - -export class ContractAdminView { - -} - -let currentContractId: string; - -When("navigate to view section {string} in administration view", (viewSection: string) => { - let sectionTestId: string; - switch (viewSection) { - case 'bpn': - sectionTestId = '/admin/configure-bpn' - break; - case 'import': - sectionTestId = '/admin/configure-import' - break; - case 'contracts': - sectionTestId = '/admin/contracts' - break; - default: { - throw new Error("The view section " + viewSection + " does not exist in the administration view. valid views are [bpn, import, contracts]'"); - } - } - cy.get(`[data-testid="${sectionTestId}"]`).click(); -}) - -When("select contract with contract-id {string}", function(contractId: string) { - currentContractId = contractId; - cy.get('td').contains(currentContractId).parent('tr').find('td mat-checkbox').click(); -}); - -When("export selected contracts", function() { - cy.get('[data-testid="export-contracts-button"]').click(); -}); - -Then("exported contracts csv file is existing", function() { - cy.readFile('cypress/downloads/Exported_Contracts.csv', 'utf-8').then((data) => { - expect(data).to.not.be.null - }) - -}) - -Then("export csv file has correct content", function() { - cy.readFile('cypress/downloads/Exported_Contracts.csv', 'utf-8').then((data) => { - expect(data).to.equal(`contractId,counterpartyAddress,creationDate,endDate,state\n${currentContractId},https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp,Thu Mar 07 2024,Thu Jan 01 1970,FINALIZED`) - }) - -}) diff --git a/frontend/cypress/integration/pages/AdminPage.ts b/frontend/cypress/integration/pages/AdminPage.ts new file mode 100644 index 0000000000..317548e64e --- /dev/null +++ b/frontend/cypress/integration/pages/AdminPage.ts @@ -0,0 +1,50 @@ + + export enum AdminViewTab { + BPN_CONFIGURATION_VIEW = 'bpn', + IMPORT_VIEW = 'import', + CONTRACT_VIEW = 'contracts' +} + +export class AdminPage { + + static visit() { + cy.get('[data-testid="user-menu"]').click(); + cy.get('[data-testid="user-menu-administration-button"]').click(); + } + + static navigateToTab(tab: AdminViewTab) { + let sectionTestId: string; + switch (tab) { + case AdminViewTab.BPN_CONFIGURATION_VIEW: + sectionTestId = '/admin/configure-bpn' + break; + case AdminViewTab.IMPORT_VIEW: + sectionTestId = '/admin/configure-import' + break; + case AdminViewTab.CONTRACT_VIEW: + sectionTestId = '/admin/contracts' + break; + default: { + throw new Error("The view tab " + tab + " does not exist in the administration view. valid views are [bpn, import, contracts]'"); + } + } + cy.get(`[data-testid="${sectionTestId}"]`).click(); + } + + static getHeaderOfTabView(tab: AdminViewTab) { + return cy.get(`[data-testid="admin_${tab}_view_header"`) + } + + static clickCheckBoxForContractId(contractId: string) { + return cy.get('td').contains(contractId).parent('tr').find('td mat-checkbox').click(); + } + + static clickExportContractsButton() { + return cy.get('[data-testid="export-contracts-button"]').click(); + } + + static getExportedContractsFileData() { + return cy.readFile('cypress/downloads/Exported_Contracts.csv', 'utf-8'); + } + +} diff --git a/frontend/cypress/support/step_definitions/admin-contracts.ts b/frontend/cypress/support/step_definitions/admin-contracts.ts new file mode 100644 index 0000000000..2a995e8d55 --- /dev/null +++ b/frontend/cypress/support/step_definitions/admin-contracts.ts @@ -0,0 +1,46 @@ +import { Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { AdminPage, AdminViewTab } from '../../integration/pages/AdminPage'; + +let currentContractId: string; + +When('navigate to administration view tab {string}', (tabName: AdminViewTab) => { + AdminPage.navigateToTab(tabName); + const header = AdminPage.getHeaderOfTabView(tabName); + switch (tabName) { + case AdminViewTab.BPN_CONFIGURATION_VIEW: + header.contains('BPN - EDC Konfiguration').should('be.visible'); + break; + case AdminViewTab.IMPORT_VIEW: + header.contains('Trace-X Datenimport').should('be.visible'); + break; + case AdminViewTab.CONTRACT_VIEW: + header.contains('Verträge').should('be.visible'); + break; + default: { + throw new Error(`The View Tab header ${ tabName } did not load or is not existing`); + } + } +}); + +When('select contract with contract-id {string}', function(contractId: string) { + currentContractId = contractId; + AdminPage.clickCheckBoxForContractId(contractId).should('have.class', 'mat-mdc-checkbox-checked'); +}); + +When('click on contracts export button', function() { + AdminPage.clickExportContractsButton().should('be.visible'); +}); + +Then('exported contracts csv file is existing', function() { + AdminPage.getExportedContractsFileData().then((data) => { + expect(data).to.not.be.null; + }); + +}); + +Then('exported csv file has correct content', function() { + AdminPage.getExportedContractsFileData().then((data) => { + expect(data).to.equal(`contractId,counterpartyAddress,creationDate,endDate,state\n${ currentContractId },https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp,Thu Mar 07 2024,Thu Jan 01 1970,FINALIZED`); + }); + +}); diff --git a/frontend/cypress/support/step_definitions/menu.ts b/frontend/cypress/support/step_definitions/menu.ts index 52cb0cbb5e..fedb98b826 100644 --- a/frontend/cypress/support/step_definitions/menu.ts +++ b/frontend/cypress/support/step_definitions/menu.ts @@ -20,6 +20,7 @@ ********************************************************************************/ import { When } from '@badeball/cypress-cucumber-preprocessor'; +import { AdminPage } from '../../integration/pages/AdminPage'; When("user navigate to {string}", function(desiredMenu) { @@ -49,8 +50,7 @@ When("user navigate to {string}", function(desiredMenu) { break; } case 'Administration': { - cy.get('[data-testid="user-menu"]').click(); - cy.get('[data-testid="user-menu-administration-button"]').click(); + AdminPage.visit(); break; } default: { diff --git a/frontend/src/app/modules/page/admin/presentation/bpn-configuration/bpn-configuration.component.html b/frontend/src/app/modules/page/admin/presentation/bpn-configuration/bpn-configuration.component.html index 15c13b2a67..b036e791d3 100644 --- a/frontend/src/app/modules/page/admin/presentation/bpn-configuration/bpn-configuration.component.html +++ b/frontend/src/app/modules/page/admin/presentation/bpn-configuration/bpn-configuration.component.html @@ -22,7 +22,7 @@

    {{ 'pageAdmin.bpnConfig.title' | i18n }}

    {{ 'pageAdmin.bpnConfig.title' | i18n }}

    diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html index f4fbc6c769..a673ac22e0 100644 --- a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html @@ -1,6 +1,6 @@ -

    {{"pageAdmin.contracts.contracts" | i18n}}

    +

    {{"pageAdmin.contracts.contracts" | i18n}}

    diff --git a/frontend/src/app/modules/page/admin/presentation/import-json/import-json.component.html b/frontend/src/app/modules/page/admin/presentation/import-json/import-json.component.html index 59a400598d..831188b21c 100644 --- a/frontend/src/app/modules/page/admin/presentation/import-json/import-json.component.html +++ b/frontend/src/app/modules/page/admin/presentation/import-json/import-json.component.html @@ -20,7 +20,7 @@

    {{ 'pageAdmin.importJson.title' | i18n }}

    {{ 'pageAdmin.importJson.title' | i18n }}

    From 23d5af00b2b30fe1435a94c88e54a1ba8097f59a Mon Sep 17 00:00:00 2001 From: Martin Maul Date: Wed, 13 Mar 2024 15:36:39 +0100 Subject: [PATCH 86/87] chore(contracts): 421 refactor cypress test --- frontend/cypress/support/step_definitions/admin-contracts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/cypress/support/step_definitions/admin-contracts.ts b/frontend/cypress/support/step_definitions/admin-contracts.ts index 2a995e8d55..b403bc36d3 100644 --- a/frontend/cypress/support/step_definitions/admin-contracts.ts +++ b/frontend/cypress/support/step_definitions/admin-contracts.ts @@ -27,7 +27,7 @@ When('select contract with contract-id {string}', function(contractId: string) { AdminPage.clickCheckBoxForContractId(contractId).should('have.class', 'mat-mdc-checkbox-checked'); }); -When('click on contracts export button', function() { +When('export selected contracts', function() { AdminPage.clickExportContractsButton().should('be.visible'); }); From 1de48fea2650f890d955e373d15ad3cfcb162663 Mon Sep 17 00:00:00 2001 From: Christian Rehm Date: Thu, 14 Mar 2024 10:43:15 +0100 Subject: [PATCH 87/87] chore(concept): #578 integrate feedback --- .../#578-consistent-null-values.md | 4 ++-- .../null-value-filter.png | Bin 33589 -> 26431 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md b/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md index 8cce6fe856..f8c0dd050c 100644 --- a/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md +++ b/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md @@ -33,7 +33,7 @@ These should be consistent throughout Trace-X. - [ ] Empty strings ("") are all converted to null. - [ ] Null values are shown as a dash "-" in the frontend. - [ ] When sorting columns, null values are treated the default way of the database. (Shown at the end for ASC - shown at the beginning for DESC) -- [ ] Null values can be filtered for. They are shown as "*empty field*" when filtering for them. This option is always shown at the top of the filter/search box regardless of what the user is searching for. +- [ ] Null values can be filtered for. They are shown as "-" when filtering for them. This option is always shown at the top of the filter/search box regardless of what the user is searching for. - [ ] Leading and trailing whitespace characters don't count as mandatory values during user input. # Out of scope @@ -52,7 +52,7 @@ Null values should be shown in the frontend as a dash: ![null-value-display.png](null-value-display.png) When sorting the values, null must be treated the default way of the database. When sorted ascending, they are at the end. When sorted descending, they are at the beginning. -Filtering for empty values must be possible. In the filter box "*empty field*" should always be shown at the top regardless of what the user is searching for. +Filtering for empty values must be possible. In the filter box "-" should always be shown at the top regardless of what the user is searching for. ![null-value-filter.png](null-value-filter.png) diff --git a/docs/concept/#578-consistent-null-values/null-value-filter.png b/docs/concept/#578-consistent-null-values/null-value-filter.png index 0a0757bc9ebadc6fcd46c53b0faca800113f55d5..9b5dd9c3ed6c79763a03cf8c2b8c72abe7b8c33d 100644 GIT binary patch literal 26431 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 DPKj9I
  • $2EKT*Q`3cmS-Z0Bb?)?+9GqSsL?vQ<;1PgfgJrb=D zGL-&#in`w_T-^R8_fWW{L(om)`xGg^+tpV(Jf9c>5JccW(H8%%12^h>Rh8umqD$(7 zG8GhQbD#`|X&YZt$=6;!NdJYQQ-+8@@rfyp#8J_;C0ah54~lJUjJ$eUeA7>g!!e^; z=5=E8T6dI9!kc^N7aHg06qP~>jki*^wBE~I34wx^VF}6GV^p3t;&(b6a=p}`lbRu* zMGsQ{Jz|SU@s9;*EbUz`)kX)w*{5M8d$BV_vM_X^48q!mI)rRx_gBST!N^Yks^x~?nC@{}-Ej;McP4HcL~^tky`X`t`LJxYdqYdJv9(X6 zFnl}Hvkr$@PwZ9PPhQAfv0n%#uB_1M*uz^;#e|f@^fLcx!5rLM%$~~Zc6yrI<&v9L zCOg&m%n)eAu5iBkU0CisNTSNm@2ZFKVvE+}jnS}bbd6cymfuSSc8cM3$8Dc~v)or+ zNlNwvbF5Q8O$TP+zV>}VxOiTY+Cp5*oo!(30RTCqiNs=OGMuI1#6?Z^Ex62XU3gYIq<{L%?}G_ zf&iEqLIZ#uJE5eNWxWGohEi@^xq|{MdZ572!Jm}fQMn!1Y=*%kMjGQJ5$;{#(*Bas zgy$$g_7-I~d5>W&fAVwWdzJO`H?=WT zzj`Fl5B^y#mU1WoZ|-nJ*s0ENRXAn*H-|Mu$aCr_LQ@f%3Eh-HLwJ)n0a->d64l># z5L1X#r06-ndjU$MuZ7CPD=X10#1z(3(^2MQx*w7@N0chtnmI%=@^r31miYGisXl9V z0BN0<;!fC6NeHue6g-i0i}xSjlI5T0B*lj6B3@<^bq{k}Hk65E{aldd?41?#Uv6Lx zzndghsG4xi`7|1E^fX99w6^>#Fy&?c^kh(#;_zDog`x5i94U2WS~{7YU&|3c8G;N^ zSu(Q%+V%qJN1I=1&EBu0RkymM!T+zqq?_Vz4;Epp(P6E!AuE>!0vfxlgZKdM8No!q z+O!S73gX`vj&61|*PD3&4g1x2Q9q5(+lS=#*{c;q&F08#p;Il94@$nv!wrCe36v`K zy37ZqecTQ>IqfbC?f>6cP*exJ7~z8~ob3}aMsIeC-Jd*NtRsM{<)s2MnGU7>zE zcOVg(ESJUKhoy(LPD4u! z3gGD*CX&f1F)pm(>{3!j&(Tq053Flw>e^Blz{3^Sg7S=S)ZVh*ayyM~iDyxd3UR%~^ya zjLIPMFrMT!={K2Jxuds8S)@Ie9o%Eh-#CXvCz2`=uYs3V*;O$$UT-IsS#v^W*&op@%k3tY89r zl*OU`L#>OeoAmC0^W%oO8QUcoYHIz7G?&4;_qo%AQVE?d}B^9G9nT)A7h>_VC`INy5;Q`0%8tk#c@t z_9w$AK&w-3YjTHFchv$s3WN?^c)y?=pfgH+#YLIORUBv4!eJAX>@eCjbM;m}wSlcD zP9n7LURDBqV6oE&)|>MDd0E`KRn;eL9e9$fd&v#r3wKZ}*@4`|??DB(T&xB&&3!Qa z3w1clC$@uATcMx35o^6(b*M`f z`R3rhw7Jv-u-IW-8`hXuexeRTMZ}St&x5M21+#}$w4BnmKyHd2bDtk?k*HQiIEHvu zzV~7S!SjBor1-J^=?a{MpfMlnIp1Z!P~gX`))n+=x)) zsrky4ln7k`$jTR5nVCl>>+!jT>z_lhu8J}X7E+|9>npIlTxx%NyQ+F=mxZ3)z*G}A z*<7x!eQ_SI#d!dl&!aC%#s6=adN!w@?~ES-*-q&W*&a97}-Z$H&5_cx2Sa>^6#ip>~YNeq4?&35tq9xg_xgW|=Dx|DU zzp7r3mUyeY89E5g7PbeiKlOcCuh0r1_x8qW`R$!tfAs4-gY4GTil6-h3Tv*fw#jk6 z&k<1U^PGih*`0sxigDN%^3I8mczwIxs+s13RqdgT6$nN-&rtH~7wgp|M@dn601l~> z>jrSBf?f5biPfQrda#u9II;L)KKR#T|3v^g@0RWbZ|rV7cEV|u$40YPrE4)6xS`)q zpgmUZSFvkbs{JlRQSGz)UhT}$PyhcTRPS-X;LQRSyTXwem~B6y0cD)3WEU)brg~eTazt^a-4VSdZf67tF4&I272+q%sh=I zd;avPt`;QoDJujahPF@W)QvA5Gn|o(BAyDSTq~j<;t-8K+*54NoDviUEYL-wJ3cbI z={zw$!lEC_YcD+s7AqYR1@`%6_(vX_Ra+Qio(2p_O*(CO^GcFLT4EohIf`ezO7NnY z^{5x2POrSXf8ILbcl0Y9_KET?4g}Dq{p53CZL!KweKtQIp!+O3Sgf=`?P3u>H(V^- zr>^6Qo;V0IuN$fEQm*~6+KS;gzj5V*5r1MKFhI{IcGkL6d0-&)!{l5x#rWYuxptt- z?qmf;#6W8E3T$~!CR@n)DzKm4BDInNbT>4Y`UI{K@xMBFx^rHg>n!#@KKOES>(kO| z)Ov@v+foYf7NzC97h*R!4tVs{)|Y^M>4vIGAh++a~^$D!~#M0D;W;tEKyC3uo*4T2;$zdMEc%eh%78^Dk#>Twn&-2X{+z!kstEa}>w6AD<4}fd=i|X(^_D0UHOC zC--Y}3tZ(#V*o9y6OB{(%dWWv9&h^m{muDO`WdY}B^Y>8x!_`w@nAs8(uAYUM+^+z9I~0-#jpOI54f(j$JqhR{6zDTDijr z+W4-*-}T!{o6_5IeQw5B4&#GMF`9^ChZRNhT`fOc@XWu1HL{FHUG?2; z`DzC~n)*1XCbL%(uFJEtcPM+VL0xX9i{9~$Lj_U%;5!NL`I%7 z2XFWfj+sX}&VR9wwjDYq%pPrLw~H;}pf^agr|&bq4$$kbe-&HiC?%PF+8 z`A)21#GQ5};3{yI;)8I7^2r^g_G#H#p$+X8ta@{y4U*Ni{CK8ZaUzTd1oj-1)vVQC zJ@r9rOOGFK8~mN_j}F$04&>w9-)fh|`a*rzTkqPf{K|MqLj6GDxVyByjrn&c)uol9 zmlvg#`Q$gN#a9NSm!HykAd~gGxZ)M$Qn0%@a4Dh2F6G44U*IUFXuy5ejH5qsyiG7;=ps5cjuUc=tL+??gV*ta` zMDqk#YUqlNoOb`%aGsAQIKeL*u3rv^0rR9`zoMbB*HRK>c!pbpgHCfBqNZ@%)vH6Q zh4@eDzfJdljiPQ9JO0S$TpI0i4kRau7T(apL>Z*iTcerJ3uy4GH0wmO!%jBU_7!C! zhvziCo;ANAf^-UP#w7SRHns0;)$?ZnDxE^zBA8y!J z%CKRrWDOu&^$htV5Afe zw3ksBDUVu9r1jEY=_%vlp2YU-U)t@|;$OSxwP{p_pcs6{awn%W2lYbA3}Sp>BU}n? zT*(#z?)=M?QqUApYlEYR-HYGSN46X$z3o{Vb8uKhy*J!0iaEX{r7xpA5v1?BnOVO70fNCSvmf`Cd_4PJQ(VZ%VI=xd+5{ zf42Y*NMG|(j6E2oQh3b7Q#*WXeDpo*|=xArl+?`6a9#c!IwroO&XmGr7% zbYRf9z_fEQa=fB?vA%|(15hS^!&`N#NqJ6Pg!!mo7%{MW66Tq4x1?n&^20c$>yxI# z`#lYmgA^g&F98$^OyP!}==8K8LU2`cGfC<3E*-GNE?YZ`@8i#$D)j0}b0LK0qbu&W zs86M=3_hFyd+SUBzCvu#K?3(11Im_D-MALG9IQY*jn}&erMW75)B8}W5>8h~k=)4~ zHU(9})p`qz{TSk2jKMb^x+%VejG3t(BLS2*+>|(CiZ|cSC-2aGcgCRt7!89+b)m_q z+igietxaes^o?q*N9`Z-rzJ&!X!0+9Rif99@b{^9+}sH-PlVlE}L-FiZWhGO5uOvDau z*t+DSNewQkG_J+OIT*Pe+oEI_sUyFlL8q)XZIL=XkwRk8B1Pm+uru0h~=F%@d-C&-{u|AihVhf;M< zPph;NQ(WcgOR1&{zQ4U3ynp5hyv@Jd{4{?u*!hwd-~NYU`L2_uD^o=+c0lbKY6_pU zes`GT!oviVRW*}1UVGh?-2R%^r38&eUipt9E1TCUtba#6$-%(X1}i)LK=TSdp1i94 zlI&Q1uJ#cpZrl>;YfNlE@~#tKVPqcU^RZ(8`l7g1C>KZ`ywzdz;dDVj;UVeyU*T1m zByZnY{y{=Xap<8_N=&n4qrD9A=`Fq+fY5QZYTyd+^qfnI=7NNlR3}P?h4nv~N@3ai zC>nf=_|QZd*J*MkXS#?ezIkW!9fT6avTLW%KLgYTXWY33-DK?q+V1-KbamA!Gs62gW>Q){AMGh@^=Si`M;ALg}{dms8>J3+~t5TA2HwE ze4>r|RZ326j6}-S|1n?WIc|Tx_Ih)w{Ji{8W^uSJ4N^lZfjSRFbRbOopOOdcH1kiVLhr#;rPMl zIYQG-`t)s)rn{>4i|wMYkk>f3RAHg6bKPT&{_|Kqz{L%i_A7lR>|%>Ua<$Hoa5h&xrl=S_-rJ z?(rwapiiPJ&I=M1fP7Yk0sL{K0WES92AyQ1mMzU-e@aK1c!h)-SdV%!51onYJp2a0 zqR4cJ)Xejad|U2_`=2>koLtF2>*e``&-A4cak}=${R2B&uurO40bAVw{tf*!1tuWCEspONr zx+}wmZ5w$(x!Ap4m!j%V-Pz1D7@jC7*+1>ZSGVSqOsHXu&Dc8wT8J}VlS$01X?&38 znuya>#>!DNsCZgQH$$`4kKefIw3USZOtgMFH#S|8|AL9Iz{xWa_7|^BP`%O)JXJbk zG)I>-p@i99f=(CPY}fj5f5^tY80ub$5c{Mf++&pxiT;?2@Z0t3?kXKEuaM5C@q#*g zRFw%!mvA!Uw$=-ZGs*4l+m=B%XS$OB81tin)sluPgQ@^$RM&0aOq)#)U(nOkl@g>b zILZRlMcAS?a`qXNQ3GQC?n3o_G7Dbqh8VtF3=<2s2gHcyMm#dfYLoRSziBCyX9@;(He1C*6*na(C!xwDaph z3CvATt-f$xqk0moSgc{~1;%~z(3J&7#y=LBwNlx4O^xUlH^Zr&-tnDqi%f3B)HM3Y z=?r${cPsXg9A-dYq4R9`nV;_+$7D?L;&VTD-E6g6kr!g}@s1lqCb4L0d<+)~rts%M z%0EsYa2j#glcAm7WFtQAX4c_3sZ2ZFk3^HNVIkKPkvD!=l-E7!d!ecPc$vzT;+Ho3 zLFT-()zqSIcYLjweDn*yM-?I^#w^VMrV$6>h3nB8_CmA!*~piy%!BT2Go2r`m}W%x zWtauBke^|u(pc%`)RGxQKAJP7%bD;Wm^s443M9U?>m9^et>o9+qb~p>&RX7c zhL%+rcJo;S@p^Wqq^5p4_jLp(Ih7`XA*R+UCvMi#-@^0*LIy#3q z`f9r|FJ_-Jj6u*n*N|=_Jrx&k&EAgbW)p}Q7)Fxog_jpeWZCv16|Bck1fC9P^>bV> zuVcP9aWJ8gv}<2~xlZrL6f>0yu2QV)(PBb#SPC$%0=X@>`Yng6?&OKznNm`s2JU^k zZt4W=Z=trPPjPMZWP5a7G?+zv{P%Vi=lb!CmAbKM55~Gz#dmn~2EM#gz_| zh{_nY+SBiP_Hak>yNTC8!|_wk*N{pOuN5Tnl>R^k{URob^cy26_c6VP&rQ}h=pWQ7 zwetUR)})1(@r)HoUD#(^C0u@8wVugF0OGsslc8TOo?7O zIdUEM%V&ty96>V7DhW0g&EJpuFeW3dZ>9LzhH3}WaiV+Nd?{?&XbzB-$Et)KBJQb; zAkA|~7?x}pL!!s{edtQp%cjFR+5g&S@L)R4egW zJ78=MxDvTaJj&De=J5IW`8ahjKIbw=!)xN`dn}_2+7isas&&9~6A|tJTr=-2NENM$ z7tDB<($F)qmEVhPKBK3Uc)C{MRig9`W)oJYwu+ zSF2NjNd2dQ#4$Jy_N2jV^`I}(8jq}0k23=eC8;>>c-?8>=wYqS#xL)_{hN;l7~dcX zp7A3t*-ThwuFHKyZgd-7zsa@b4)JYxO?|6JFFp63c0g4vZjJo71Xo3R%$eOI50;PW z7RWrB)ZVXI^i)H-3M>+LZNtQFQR$?Dp=%pi=AZKBNO)&)J=P6MEA71YV_}nVFT=xP zCzp`&4m&q0%LW;t90c-cbx{M}y6rA23N%!S9PU*|8xzG+&2ddSNglps*L%t66r=7I zh_MX#g>pF=J_Wr)5vgU+XQ~e|9Id{uuj0G)c^lR74zt#Z!97!5n4|aV;RUki6_t;a zcXa*v87Vmtd~T<>&3x=jI-%UAlado_WU)5LGd@=X?@hFF`*H_ur?1)0v5%8jYC{I* z#16lU76<@!>(a+He83zTB=KiK%WItq_*mfK18S91q3ejheke&e^ZtNhRU4l<$7Rcm z=yww@|KfVHV>OZ#k*K{;Zhi@AIFS6d{dH1j6>h^?ysx20-c)m=Xo^H{ttr5k3_T;(a+<7p`E6_4G) z{|b8xRKJO@okXfgl z$H7qoj~zGwSb;&VF=u#5T}7%%GYW6a9CF922i24@XyhAm=!ky~my@3*%m@bvMDbx) zvabcC=8d)?=)d0iy7ZgG-j3UzmElt$Qa8K2`+F{n15ML1U$X%mKhEsR2IFS|P;b&8 zKTqwx^%=nL2L%4&HJ}*M}k#_(d*!WtMnmy%lPPA#4VlJ;E+&}$GhkrIC&jDnE z*-jp)4BJyudLZ5X>{|SJgXiJ0flpwi%#VIt`mu4t0(KSOzPH}_`r>2`yj5RSqk!7d z@Je_#l24sl8oT($Lac{|D)esZCSsI>gYo7I><%YR##+~ZdCFg!JjMe0=)oQqT^s*( zqB!uYVjY>HGe8UJ5X}z0BSoi-vlbb4;Ex*PRsUM}9)Ru8UoT5(7e0Re;MW}wt8xj= z;NO3v*eO!}BKDiv-Zt;$u ziVrxQ&&E8__jGCrQYk?Zycb6t@x)zYG}RN&%eR>lB_p)QIN}Ad_Uox5Y1qGFzAvxj zH{$yiIX8}sA!9U2Za(`d?)dXT^jACiwL!XCf0o_pLGAVNuc-fihHsP!z?rlkpvUb4 zv=fav(cR_0 zTx)?!5qWR7c@6MVpTeJOU3)I*dtC;L}`f6K_=eJ8I@_AkxopAR(T{y%aFmHwLe|8JM@|LKKF1o88THLAjw-+G*p zR(3xA)BaPANCwdiKLdqQ1wU@W*U#*ay{ioOo+J7~zl(8bo@_&}GCYSW^IZ{9l`zde zenh4X{Hns?%|(~-8<_tgB1<5cInak*VMG{een>>pHBE~U5+=2x>gCCWWdqL!d@MBn z9h}#T)A@=1q(LEU^P7G1RObo;C`&|BBo_GlS7)Ocm$6RNd!k!Rlm-Qx6dZE0cV%5+ z!eGPfR6~4EhS5S zD72@};U?Im4q(>Mc{N0Z}BRTvW>y9=R?0v&jW65z2~(beII2jj^*AC26!8IwLh|_ zG$_Ed)9o#W0kDtwp7**4eRxQ>N2I97Nt90ky~};TYCv}T*kblz5%<40BCqT>_+8=& zav)YpQGE6{st`w~1D`cKcf^jIF=XNZY)y%i%>V4u4{~zKLF4FNI7Lb?8f6qT#a(vN z2T#Dgq484kPOFqRbz?EcVh2?~C&{Y<<;A@~wq=XNVI8G06t+DIazPtTa^LaV#Sqfzo1G^Uq2v?}GO@vY$1_AG3TI|J4QoI|@`)jjJ8D;Bwq#PWz z@OG!?@)z|fLXp=T9hLUk5G7JK`ok(z%ofnn64o}k;?vSvujxJCwQNvg*RmUt6zAEK zaOkHgyR9z4BuZoqLz*)Rxdaa${CsG}`B{7)T5&{VQ-xGI??Kyh2xk>8EG!4#c@RjM zJgA9yY6O7+!efB~pX-_3-IF~MSzQ4y$QoQ zV}L!o7N?>m<=AjiqmQu)Db$(ZUScE~nG<18s(WHR6SGrcwK^gzR4W)17)gRSezGC{;(vyri=J#89bLu$blCY`|cw7d)`*xs`X#l^M|T`muHd z5s!wZsTnJk6dsCZ4u*IbRJi-6~-qrRwQLN0pS$L6pHv3}F%zq@dIooJm|0#SIL zJ$t&8m3*(k5LWjsMhZ)rYPUWc&Gu|k`KKB+g{6g?H@SyHv2?S6N0|ZzD8{f&fsY_}-Wl7|stuwEY1gMNH-jddtKQY%O+EZ((DKRHOgQ|qut1k| z;xt|N{51)c(DmqssE+J|)s<0yAJ|%3fqZ|!lUF?{871&+f zp}BJP%11hB0dJFUYf;+x+GKl)T5{L1C)-NY`GTiK)cV9ethj!#Dv+|#FOJv@+0<3^ zWy1o)gQ}qIvgZ$x*-(=mJ8H~`2+VZVr|7IAU7Sj!wS`k1B5~~iW)d{K%nOk-O5Ucr z4L|gDAiMMu5BRF7+Tp&4xPiaD}YbKfwIxjat&*Tm9z= z`1MZ?+Vkc)#Y*X`Hpk0?Se+Q^MRW1F8H4uP+=g;%EY3+fzfxqYSc_%) z(bi^V?_EW$v3;xPyv+>sJ=BT_vserrz1ZpbBU`AI7 zMj^8(Y1*Ph+~a3IIxNw%h^6mj>HVyU&wjY4bzE8ZhxJ61%%psQeo@0mK~c zG7nugR?aRfWeau~ZfkB^nu=Qd{GhV=Va25`^0$KIJfDsVQDv@P5>hFaaK6mGLXhUo zIE41w!68J@@;iBvQORli3sq|hX`afa65=>8g}~ewxq>MXl-^zGWNn|a_?K5dV6l#u zA+!Fxpzx$EMSB&fpNcG|n3Df?_-Q#sh_o7%TTosV8r@NshSm24@Z;CG-b>~NS8+dM z3kMOmDt#jv9pGS}m5q%VouF!GcNklK``PD@!s+e^vUGzU$@-mT5pY1kMRz0nv-in6 znUJ5f*%q)jhw)zP1TTOC{gWYHq;h0ix_||d=XGt_i}Y_pZrr->Lhf`bFmx^w`h-94 zbh_^^tKq&Dn~CwgDM14HjGSvN6x2U3{ijwR8vk1)eX(&zitQ73pmYyB?hT(|QmG)p zNr~NOx9atl9OB3~!51AjLRU{Nem>48Ko+;1w}*|kAxa`P%qESDybBLztf;Z^XbM97 zT|I^#LaQ`ZM;fYr*h*ifOi0*r#ph;s@-MTJ5dw8p6@wm5WjE|oDCnE7Fl-5maHqs;4ARL-z zNn5g_01v+V)>{TG+-`Ep+#~vA7aSTTeUCgVw9UH0h40NnFVShw_v!O-C4;zClV0;% z?YmryPi^x8eTK%2j>OMytN74q@TS_&i9}c_wmb?V;4X@rCgOPm)S5NTAg)VO4q^rZ z9151uyu~kS^vpLOAI*qFMwSb^8B8R4{nk~aBqy%Tw(=a%iwdygQT@^x;oL%|;9V85 zo^*1ds16Aajj=|iN&>vUxP>=R8Xa9w<1#eBDOk{9VO)iMfjL%?Td8mwe=+neuMYoe zCGqp`arqWj826oxUG;rPH%R~x5h*d)mf6?#<4=Y-M9S^F??nOFo`;x~c zRjME6>s1H09Np#v`RGb790e>HDhCzCC5eJypfaFoPvvUxa$nMUYR{fdJ%uR4`?(sX zqz?gQhCp=dnhsd9(yh^XjaI*yXD?Zi)TpDFkjLeFrV5jXGUA8Bg~Ds@M7(?q->FI) zNf9cnr13~Xw#qqxP&<*fsv)-jRvv6Yq6*8JB#{*^$Bi!UEjk$eT^OJ*I znIcx+jeVcllT)K2=YoGLVaSOoJE2Xt8(ji^p)03|oNw6cmywi@9)%%%bAxLiv;uSt z2radUck;Iyt(F2i3h&oHy(Oc0A>d)fNY;`}0Xhvnjh&?}LMDgqsghyQ2aio7AiPy3 z$bIsHkcWh2Iu~EKgyWr1LiT+%yL)n;`N%VE$c>Km{mQy%*!EwG62Gp}`3>s`&`di7 z3*~dlG}i&~@iI#nHrMz;H8F5#At+aCw&}R4%B8wl6b>!Kye1@NA{7yMF!Oc1F$BLK zaSs@C`~b9|64re3lR;js%nm8cF>wDfAQ?w|f+7edK40%8Um!Z&0rG(H%Uf3JG)!Zf(O{Rb{r#hIHxn zK@7LUtcpX1tVSSZ3crGWS;5X8v&yiFrHhPiqvh%*>6Vs92qYnrC+UC39s zS?n`j3#9Poa^Y)SeIlb2Tt){~)Dsyt32!g%jh@90CgeEkPnxctANg#ol9bB+8||IrDWpZ|ezSE8VeP*V1{ zh9@UxsG+x0YX1;fPz}hm#v!}sit4%}&=KB8D`MjlY9^7IY%t#3WOdh7lH83`=43)g z^bMKPtt5F!iZ6E5C@wq|0Y!Tj9u!87jfupw!jzm`n8x-tJxz_aoh#w`m(b zZMb>DZ_6}-b{FQ558u-bIO}<*yUoX^+{jJ0$O+H6j97R}E=6^6Z=#JtMjP{fBDN!) z)Nv|O3Y7QV23!O@Eu97mYtupzv^jS{?u$5 z-R++~=sJdj8{mKx!0Q=*ZPdO+74Yi|R(E*yE?8sZ`#Sw1+YR=S01k`v5}8AXqLjUu zECrle*kb6N?p%1Ci{OyO;iA&QF8E4VXbJ;{_?9Tm_!XNNC^XecJa8zgz_Bv!pW(! zcx7nPWaKC(>}s+1(Yd<>VwO&2(gkPBACxhc!$cQnp5LzhQW6s?FrzQIzVOYB!a*%# z@P8+J%!9VF8Gv49)&r*&`ck#Ogi{M?+kVHxsf9tWJd^5?a0Ms_hWFV73WQWkkR7Bp z-`HalZ(EW8>00RliVZ~Kr%ududG>R3UmbM;ATAz{_LW;67r~$0NHb+5bwVvuHJ)ub zb@-z_R#lci5!Uk3^yuYxXGooWhF{K#3Y^5@R7)II6I>Nda=37InxmEi7qTT&Eod89 z(sZ0-(2#(BgF&(E8a)NrH6vyblyNG8Zye;x5@khbjX z)~&VwL&ld|Kb*BytukM4VZGhkL3{S4Wlgq+8ZST;W1?#|eea@)@cc===}e$IZ56G* z?a7!zl_Gl&zH1IdPg&AA1AG4OUU%>MK`Ka3nodT<3xY3+5PP{VH`ZwO=TuQeVH2XM54*|bhXF{tNwffhBD=FZhcYv<+@?(?JNyq_p*v2D=)`Vi{uUr^t z3T!Q<*nk__f3^6Sgx3J&Jwsd)+i5GtG|^jKenOET#`o^hgj<^f=lw`Y`&3T1b}(rxsdJ75X%H z|4l8V6R_1+y)(kN2a*^TeZ|HY0Xl?UsTgf;1?CJOF!z`+qE$c zy6i^*r_5Qg-LCV*D z^hI-4x@yo0|eUr zW5c}`F@P3XeolIVI9cjlEicPmp)Rw*0Hq|6Bv6o zG{|h-Qq+$jM|D7B|7k)KEpT4~DykZd<5!NC=b8mUuSb@V74-3} z+geaRK84n#%Z?_gR3oU)~m|`*E$?4NX-d?uNl`QXe<^TesNH_Nq5NRT#LQ&tDbGp;*QK zFWSy3s?EK9(=E{A-Xg_{yA>%8#arCn3ls_NTHK*6?pCC@Q`{}M2MrcngG*r2y}$q7 z-^?7&nlly$tc1LI^UHJJ*Y(JZMfOml?A!>jIIz}rKV^Bn`H~e|e+qH#3c<~q<5(hW z@m3K4|DFd*P9GCnO~h450MVt%z9kG%i#rqXr~NX3OtFtU<=<_x9o2Q(rWWo5S_P~` z!*Ae=A0Hl@3du4Ty=g4daH-RKWjAIcz$i^G%XF-&AfLcCfz8~(D|@xB|8-&vBwuG}V4;d2_tsCob2uC*-~x&3m5O zXWl&c`ex0W`V56mNqi~ksCT>Lut&GuuRSwSuG$5_ZaaQ(9Ktsg((nE!h~-aW+ZitJ zoRV2+Hqe{cRg_O>=%lXm-(4jM zP`Bkm|4Ae=8M5e$3sI;iozK@)k6;~NnrKOaXt4=u(wX~*low)_Oac*_A>(f*L~x|N zsr@U+)`fUo7j%>#yQM*1^GuhW4Y1{pEUT)>VI`DjlL~)jsBx;5acnZlsRhi#Fb3yx z_8_POJeu=#VX-#b~}>T$XkG}7_VBX)|AYj5-)dq$_S zB)tQTJ^2@$)e@OsxL%uHd~5c<(K5z;>-NisYt+cZt-K)}QzLYe!6K z5t;-{#Z?w-e{C3_H@=@z&xYJr6TpK&d@tEOg^-eU#;^g0ZCBvHw7tw`x_*qrLCX@k==|9*gZ7Qy?y-ytg8sZhng-&t&-~H znY}i{pG3j9_@rFWj9f~ivWFf-li)saJ~@2{!-FGpxNL=m(v1pjnx)0!3InP^N980Q z2uLyy^hd6`43;*5&#OW|P$Z^??;5{)(TAmtK`_49Xi({!^-Ztub;CG0cC{IZ0qxj1 zr*|)S)Ztp?E<6t%vwmYvE#`ZzSy+ut&Z9Y<}c>Kuw1|EVp<;ri9 zDiMLRU_V8Sl-Np%NkpH8;VgSU^F<%vG&q{=#$L^R`*44+e0KD=v{0X+1THNsQQ=$b z35ZZU<4@}49dNkZ5Bf%O=!2B2{Pie`bELtaC$KhSxp7s#ODFc4LW@V-gD0p>s|OP< zl7vBN8Zcae?=j&qTL9;A0mbTEz|GBB!mgjab?*ZY9;OHGo&Jh8O)&VvO!7AW$?NBO zp^HfHm4tL{u0AVX@JeabTG5BzLeScc^Xkha(>}#Zm*e>bo^dXEstd1Y^IpvJL6aih z2WUN|BM#rUZP{B9^R?DbzM>!uPcKP(QJDW5mpKZG@6E4qEw;lImsU@~%Wr;~h^7f0 z;1Y3m@eX4RQ@n7QsSq2;>B421lnJNCQADwdTOEV!lD6isl*wK(-;y&+A-!ksQw?el z#(~blrG@)9d~j(YJUi4{(T(eD-~ zQao7I3jhm6gb}Y#CbC~qD@U(C1zGsDl`6)%#F6&XAi_*LF0VZGt@U3$1|p6XqnMTP z!oq-7PWdX)29ok)QdQ2`03f~YdTK!{U9i5C#qXt6=}TXr9Gqe(G$kU|%qr=XuDIOm zV-QEItylArGr2Hg3Q@adbUKIDD6kCAx8se_}l_Y?{D zo89y5zNeFQfH-YGz?WfbY=9aNtr{z2uW+ZAi#_wC@3q&zezcZ0gYq&s4xMaymPM1> zN}Q}Pt5m=r|FSMT|2h+qferHJtpfV1V?=`487l|glJh@13(5Qv-4?ed$*#f z_ZSlX=Faxe)0(d=^G$)Ns?hoLKCamkL|u50`c(Bmj(EHb`t){HcqeOmcL+ ziz3_objSf7WTZ+6y2i|0jKx8auOAi-cTWEl2QT5jmBtkSVS@F9QRo#}fcaNFe4`@x z;*?kVV)9$H*1>Om+;EF}9@=oIpy3=M5F?DK*H^bPez)+i zbFNaJ;K2o)yAw-TCiF*qHw%a@j~26GB#09R-2s2K;gihE>49HB;f(qU7xSD}lH^jtGE%-k{aCo4Pr4r0BWAFgw_C!#trR%Hd8V1ulP| z@y>QnD%%>nn{@0CnxlPhtH>=rI9m9VygV+uf6kz3M46h(g@_@2Q*r@s4VHg5 ztU$*U+Q|&4YM(%v54IHH>S`||=aI{R6MvI|bs*b^m%m8_-OOM@5d zQBIj_|6~eMRW+h@d&3a2b)AOH#$h2pddw`j<;2(Ih9okWa zK?_RDTgmL(@a01<-ji}|utNZLSlvHur(NnWOZ!t0bl&Vsv&t2zk1P(_XwkrS{}tD%EMk>|G? z_lmg810@>_i;vF85BBw4Pu}SIawTgwtp@QjP0Q}R$vY78VRfxPfkEFQ>!&SPfh5%I z$g9A>+-6$(o@E^FEPT^o^ojxQEX+L`_~jPM_1xBL8u?_d-2=wrXnbL*lqZo2cNR8B zai!7*&((65EIN*lBYc(Wpgy%K@ZDWr$V*5?K4$d&;vw*@HCv~_ivv6g{Zd8*361sWXbKtrP9Y1>UDzEX7+U0GGb#Vi@rL z)|o9-c>=A-LS2q1m#cO?1DI|3Q9>-(Y{f#IUAYk4+=Hey4WFPNRShm(<~XXLe1M4D zZkSN4vRg?VP|3iZg{w{}x1K-FKips?o61Rew%R5L@nhfN0v*Wv)K$YU;ax^2xU=xd z2JS56XM{Tob8XPy5HjqgtHkzOW_mnj-qabJDkqCvc^b&IS(j)$U#T?gOiMmkW7;q` z32HH+-?w;ccFOYPBQ<&c*QlR%W9Kht;U(*=1Jja=$Xp~3A>0OM51+`7OzmZLEq#3v zYaUaK@nT`I&I#z8bd3>M5PV> zuVFr2Y0+sL1xUv%uX>Pc*!1PLz%a3)rg)j=(<2{o(T4piA99p0Pn zsFkUDit*^d5gg0gyTt%{Jr#qzvdW)t%Hs^gikON){w?@1qG!G5HjX*gA2}7XBC@rI z>yLlHgWKy7`J2W*#IVUWvT)5ghWnP)7a)RqCiDLD{SW3Wc^Mw0`Q$gkqpTq*PV@)Z zAotm8!#K=pbn}5tA?h9{NkMlsRlgGbG_iL z_f=N}uu;2$dEM@l{iefqed205YN1ZECYE}%s+&-@?jfMSB*iJz`azTAp#ScYZk&|-7Pj4vSbNrq>2wLJhl)s>p|<5VA|Bkg!<^~8}Qc-oGzu1G6J+e9-P zsci+p8&__I7I!lD1~tBmi!cG376q|~!Ff-yOR>I3B+-}Yf_gvWc|3!-ya<{}+W=hd zbCdUDpX+04(rmRgJ~@`17{C|#^z;5t+q)W{dzFzalTYpJqJ_F9V8SGs1F4soQ|@6< zc6UuN2hG&u-b&O4Q@sb8sGqu(MC{l4&_pV#hsBo<*2m9 zcuQ~z8xQaw+1DYz@C^puzQrQ_B^}~-VcT#*M8=%D+eL75#8b?oy870Lt9i2mTCvU< z@8kRWKM_vFasEsm3R&8a9|_GJ4cBs%KA!{krn!^nH=H{i{GXO2kjWQlYgLxsUkV^;X z&u|k`D8*r3Bl5fC z#~)+i@XD7z#zL~cjD?S;$n~~>MHINP(D%gZd;>c&<%msn<(fOH%r!Z;omg+EC&lRt z59qb920 zUp=g&rwS*yu~2Ba5T#i!xu(4iwOt7V?^k!w5%qtJg?QP2jD^Szg%)D62Y-x(;J)2W z$lf%O<%43V87V)b%sEtsI=f;yj`ylHiR>?9p{(;E+RzdEIsC$?SEv?T zcWP3_7KvAiWkJvGO8frOBks+EIrl5E>y!H`9(a~Gu>W4WWe?TL;+P0~FW$|=4DJuk z<}ZH{az-qO7q?X=rBmJED1vA~5VK?d-YFlRr~YT+XoreN)s157&g_2ywhLX+h)COU zH_P@%{}e)Zqu49@2^UwudNxKG7w1hX=DY!LSg04vbMnAe`oIk0@Oq%gT_MJy&N$Qz zMMWgD_WAHdD*RhzKpMTZOWeMP?uep?`ib|a1Rt#13ErBQ9e%mb^!!WYzgz!?8w*jn zC_c7j`v~>R%;+e)`11+-8ZkXNNx7-}3E+W4pD+1bdaXEhei`u@x;{<&96yew+eOswGS&$yi&vn0JNp7%rGg59(^k^VwL=`_%Vz0Jj3;Vqz>&t zY+q`(HGC~htWW4Df?jS?K6qOCmEp?-l?i?TwNmSH7=|=wY`*Hp`G5b0{=jpIruHv#Rp& zifW*`fAnE8hr7<63DZkCK%-+=OIsD+?dPX(E@p80f|DffcjO892s|cQ%_**6^KVjC zeXs&p5F_)mL)S8rL+7KLVXw_de54-1;IqL+C}gw=$9gJ6g2 zwFop6e^@ZZ*%7i$2gc|tg+up6CE&tbWsUQPRuaP@zapl}AuY6j;DxP1r{}7R;3q;y z{-ZXPqc64JpEWCL3{U$+hP9nymb5#xypU?>Wn@H!3+E(neEIq~?uz*8skK7I`EJD` zx`q(*xp(y^SsfTLp3Lr$M?N-_VOMDkijV6vy^i{fuQsqt+) zl+=ddIdIoW>TLpk(vLT`RqmU#w|;f~q~}aH%Y6;mC>T!E!e6}Qj0@n(!WKN=X1KDj zHSRMO3mZ%OG-Q{xFxwHtsV1Y zke>^gs$ub>n4%}S^S#CIZN!tuktpmarXSacufim7#;Su~wN$+W6|e@azg<$~`_hnr_(_uQ z^W19Bom>_b&)n*@3*-3f?5H$uDQs8Dnr`D)nJN^tTz1Yn#20{tr4FQZ06W4y@8^cD z!aY*wcC|`ZZs(kO8c#lN7!;7%i3`{VWYqzxad?mZ#G1&;1=l9!@ zT|qNaX5#pF8}cv)6f4MBs@e=AVk`E`OSp?pAfx zqs_dgq?Tw9)KULgdJNx8P*OA7h)?cI#r>W3A9nccj|Ux$34AXc%Tsz~gkQEk85H%q3M3@)%w zVbAV^8fIqAcc@XYgK;0ro?RhFuKRRiIV-BM?w-a|ax&{*6F*D>8!2_yx2{<>D#F7_ zv8#^^#nwsb_0s?~M%^+{6jb9#P^x#vHQE`fiyMXa`Z1o30+>}S9S>Jh=UNuU| z(N>=u!W#kVPTz_n~F?$rJH>1fOR=dEvdciPt+{g?x((VJ&!-aG8)W)Q&~jA zMkT|sMU2tA>YB(e4`!y1pB!67s0vxYI}jn&6zhSs8s09`#vTh!k|gG$a{D7c=J}?< z{pI40Ee|6Y3F_6B-&hAbjf`6=01I@&n?@khl9AT%fN}bu_!~Q07A!rerFUq|YS;|( z92K6v@qWz9ELKy5YYb=e_A;XwQuG6xpQcaC;S{<&Fxu7fK#gHSL&1C#9Y8(+qNbw(6i& z84qbD{|$N(p~fScvU7`WZYPXt;>%CXDd#3Px{VuK26k64hPyC%?d6$pAhC4Ymsi3E zf?tbxOOM|ZhWKkB_I7~7(lE5X+cbi)*GZx#TPyI~nnZtS-!>YXbq4?7=QaNP>RQCM zCybsHber(*$BrtJu-?+?BLx`)tLZQWGE*8JBOF#zx495X5%aZKk7k)qE*6_#h8e_poQ=efm35!Ybm*c30H3}`fIJkS>iEm=KoVCQ{MB87tpV%Gx)*J{Ri(~ImvM*P@G8GJb)>nHxYfrC_mB6!FdO9qQn}Q@)EE zg-V$`ytkA11}mH$Em3^{@m`U1b;o4o9a)oTC2c?PP-jX3M9z9n?1vR-{S6%>`&&*F) zQ0Tk?pjiGfpbLy`fAH+hjMbWFdEegEQw2XN%k)ptu$sB2-yc zS?}xJ=N9E?q=^gnlb%QFEPB-He1lWM8M9DKi`t~7h$xUqNV z8S})tcya@>pWfPL*S#ozcqC}W$`*;~t1tNUmYote$NWgjS6uBx=$`u48&-Vt6-K0y z%yppFdP$jZ^x2ck9As1zehgn|GFxoT%x}B%qghzW!PxT|0bKQx=rw^vv>>u_HE-kC z2@`r8NOCe*b=AIQgT(==9wbbk;x^%Hha9+K59gBXN$)>A0gcRV7c3L-TcexH*rh2^ z5bh9rs^$Tbn^Z7${kyxlE1OoVj`KV+`zN#f^}%nu?HVc97q*9TS3wW=ektIJK!Zq1 zr+u1O7!}H%cX~CgqpEhHuA(Qs$;h)Kjr|_yqa_r|)Z)7+W<1HEg!OL9E8=^-8CyP= zV6xiP{ZK1n!7(~fi+iYzgo7|o^rrr(=jj38A)>`vj!)% zX!;oZQNqdt_I}x9X{=jWpvgjOW47H$gX8NzYB;BH{g+L3R`3~vr{?X<3ePt)VcBe# z{H3iAqbxxXwrZ!272~b6JA2%Q=+D4bio$D^O&(1!ue2vgQrKPN31$VmxE;4A#rG|h zvi-KVHWc5xJlZATxYlQh=ZlpnXcPVQ4Gr*`8OVqNpTiUSxvs8`p>lBaLtvFNf2-PT zK(_}+!*Dz1QX+E&B=7>^tkPz z-)bfX(P{kUff)~ou}C5K)Q$ZoExE!3EA$GjuJ&R8F?LZb^g&lNk{VNQTeKmEPy_S; zo}Om)n+b-9;wxX|uM9nlp@E9NbMYtIBF;$+lAA^5Sei$3&y!mZDBf0?IpjvWD?ZDS zL6pu`k3+&;)AM^4J0^)U%z!CWdBkV&&g@LoRx5_ZgnMs1x6B#-6yIVXT;aX_Ch<*C zU@`!*!~#k}@j7$6D&fD>#l45Ki2iB;aS5fCo@C{3e$DAm(vbmr0+n@~h_i}1?=-?i z3fZ{)%$E@^#_t(iU-%U^2zNv8-SdmJ>H+yVj1;If?R0?@#eos6WR(JjA&n$;U9|i$ z6p0%-%iFcd8vV~$E3cn+!(biNZVAzKXWzvEyJq9tzKKf)hV)DD=Gp=7b0X2AjTQvFT=c!)~euLlURsWJ4iT2X! zQUrp+?e6I$r&8EgDt1MIi|30{Ur?WEuv5rW#JGxlE!=lQnV$cNuoG&|N_7Eba#@^W zpP86%Y{u~X>Na~o?eK841ZowdFtj)_(ZI(-VxA~Lo!GC$OU7AfAuk<&5POZmqs!*5 zRfIiW01rYx^H#%BaK!D1R{HXc3~r4wWd8#HDmwm<*Vj3;q2!)hxcr?0h7T=1WLw)* znWym8)1l91IJqvwU;ZTfHL4mr5sCyN$OP|+XcXudw z8_|}ZCAtcrlhXE2Zx((>y5S`cDx$@W)>vF%DiBgp9IEA+kQjd-QB5FDU5v{R0X{|2!dy zDL_4X=t$${kV-LZ6JXd*NX2#K=0yA7iDK#%!W@CXLlw_#m$}C-v-stvos0iBkiVL# z3^)wVCfG()r>vKhh5^zk7Sa>Li*s17BL_-3n;YNzQjlZhCD+5yAm$cypyb(ni(-6a zJad6ikTTJv9Gt5aaXohsGXHaNtu_u#8=T)0(DfBfXeP&G6xOD>qujo!&VSfR^faQ8 zfiG%XzHmC!b7H1W&K^cPDRyz7%+j;KtuRz$W59fm^3jrfC+OKfz^h4g*Ey z+S$TPF|9u(V59>a_(+FjCMmEwz13fnvQ|htqYh7-sE~Uu`4wY~M&SBE-J^`nFHP#t zPnNi+!(S)O7_Yd9wjy(deVL9?nZu`PT?sS;+iNJqr4?kRk~**|A6GI~3t){&s_1f$ zylkl@48-&Kk%x;E6@`IN>Bff`h=&1e16Z1|yHR@h@R4)lg;63IRM`~zDi~X3;0NQR zYI6*!sD>a0`BX;WhnQ83nOr`8C0Tz?Ia?Uk9X`T3#P??In+M*bR_ktjq)K%eTCDRQ z^r&8uPZ@S-d*l8>$4?5$-6y;zdsjN5qyDcl$X(8ZU z&vsQ0FcNGX)#$C~^mSKzX=t+P?P|6zZJci7hylhyuCmv+c=&#uu7HlR>DYJkj2^`p zSrRZ58v)D)Fhxzi>0?TANUwsEF|R#h570&e7byvOtDVJ4nwUUoUrH8VKN05+^3h{^ zM*!N3B}0BR&b=Wc2kj2xv&zALzl5EN7iu=;Nr*xXHpT zRv0K7Ik*mK8yxiy;UAyxLF!lOLep)q4psT85!FZdZj3)8Od6#>@Usn7^L*5*%p2Eh zba_r;?YRCHA8iu72p;T`C+(!SXJ1VTx(Uz1LpH17_4&ld;;cSVh!)|A1Ox`nb9C3p zyS;~3)f$1?hwHSpPg%5F#dRskTn(Y3zj09Cv zc|-d0J0eO6LZx^PVJ(GYu9#3Tapl?Cg+b-r(-|Feg31m zXckeyNL5|>!u3`d5!|njIU2{WPH&*#P+=FmCv~+l-(u{m$}^?@Sn)dK(4@L|K9`m9 zamDrb^=QKl!yak0&K$nu9QFzF>n}6WTjVX7Lt_INh_8i^N zjt~&$5hzh-5aqIpy5!@=)il(^UgFd8YO2GzpoeFD@QYY8<&*UU->;CP#-rWl7IF>Z zyH|=Rqyt7E~s()61 z6D8-1gW3K{Hn;A=^y42&<^uPFZ!JW1vRqv%7Wx*6QNl$UiE@~UwMPknBdkC+H3_c0}5BH*C z$M;(EmGF{ZNLb@cfdXdaN47GZ_mNmuwAL07;%_NilB4~pyNelslFi>4K(FPz)5bfM zJMqVB)^@81&J4{gLqZE=3ngr({E!#HN{P9Wc5-KXaXn7Y-l47U+VY*-jlW2H%P3Fx zib+XL-a&XZd@>VH)0&M+)-sJ{z0M+17q{A3GvyMnq&`IY{kD!#HmrECn3?oj%W^jFlQoC7KKOvKe z8gg88%GCJG(s4F`4{wUsol{=;4A*pH(hvn*qbtIuzZa?(%(#6~MTmWaBKUqy>$pE! ztz0+K0>OP>W^lWoyYyvwEL+{-C~4kkY1sf}a|h-le|fPYI;n-dkY^-I5wNc9B=$CrlOfW_`>xpWkj^LiyQB$4QUotjj?u7)9dqy$_Wn3A$S@GhX)` zMNyK~{R^DqFUI3-DEpR(S^Y(Cjw6(KSZdxq0$%8Q#vGDKT}(THjx`Opd;Wtut;NWR zt&z!OQOij6!eb@tMV9~}C;m(2%5kK5>ess($1Nmey94rbb5r^SB0_55ZI6kN)i}=> zR1|-empkgn8ML1!lIow(*>-LgIsU=1;dgnQKT?6dv#;98`8)^Va%WY9BEtf=e#K5W z_OV8|zo()@JQAQx1Mm611p9 zVak`(_zCB5ijQGlU|V$xMTMBOw^E8!LIV{@+<+9$9dSi~U@aU@?$J)g(67D_CJ^hm zk}hymC4vPABmmX?l%kKGzn6ZA6dXq(u_y5>Cv}07L@gGp=K9{)9m30Wp^NuKAsWn| ze)<5O%h`^Qu4_1v%=C&}wvpvqjEXG3cTub8h#7Sj)DeuDk28NfzoB>}15IXm**>c9 zXT;fm9zVcD81gAur}8XW2Mx4+OVVHfFutEM#z8LhCuHlHJU4UxFA!;mtNxucTey1< z^E%K{-PMs_sN+cD=EqmDVi$cb4EZ|j_xy6}7--=&LNa7n{6q&CdUVKu`~exx^XF*e z|N67ORg%Mxi%!fWdjal7gxPf5i zq07~8c&7B?;l;FdUvBWi=HBOjE^N~2D$sOWy|^mW5S>1#R6-AB#W z%W8>@&Nw9eR-_kX?3&nsN`y;(#d>R&=|Ke^WNSl)kd7t^PqOzGI_a4V&Tc(V-+A9K zhd!Lb73sfHLzPwz2S#Feh>NJ}S<40vgA8w!el=23)g-sQ&jd(3W)WAMXubViiaf~- zMTidm$M%O@Onc5$b5SA?NzN_p61%VqWd@c&I#2{FB*yWE|;kswDEXi|Qk#!V|SdrHUM zYW`uiRX-@G>+?y{MW~+7W$v}uXzN@u@|cF z(^Qy(jq0>JUD27)h<$KM%HnTn?+&$iM4tU$vGn{Z^X+)~m27=e5TF24dypq0xG%QI z36mibrLCPbfD1UxiFyhHMLoi7I8Ro+9ma)A25d~siCOi`g@I!p)qw@oR?Z}8nl%@^ zSL>_Ejg}ejQsTx+qBBAd?DhG#f(rH~3s|0P+t|}wJ{ZMct!8@ST~)~3R1Bk>tgCg= zk#~9A?(_zly1!a|>OB~UnxKUMsQY+8bK9DR4owO5#K(nXRTR3BFXEU0Ym+ZLpz!jf zelmmL^A)FiYq5JVqNA7x&qkq04UD_fsYix8LmjfGin}vY94LT4(T(m{+1`xxA^xCR z!u9F%beX{6%{s%PP%GQbyWvUm)vv7RvnK2!x*o`y{fkxVI`dQeY$@3bd2QDxG=ypX zT@AO3Q1vAX*Ta}{Zri0t!bI0Iw<>-V_2XUru`;9 zKc6dEL)=tvU&f~cLh8Ww8YiO=J9cT!VE`wCnD8sq?WVHE| zTTxU!Nf;zD5&P26e%Q04iQuS+^owxLew5D)j4@eo!H)Lr~TgHs0U`~EjJa%L+$gn#Bbor;;er`NVUl z+ciSeQ!{rJ+J+9bnC|BkSi2|L-chnkM#s)(qn1ZsmI%dZ=zyZZrnbaS=`e=!j6wC) z#&0&0+ZA|w8DEtdzQ)3LZd_qA^8J^-jZrms4`b|o_!_T)^kHTW0j1i5<&o3g6x`!@&3IPpbX893Iry>&4K^7+;FQj zu8@!Jzh2S5j(guK`TwcQ{rh+Rzo`WO`x^QiJyOufQW#0FU(FRF$*#2=XBz+aQT+W= zQ@uhuuYxD9NFD>zc>hU*XzEX)7B9F$(wPhS3+jIzWBz(-O-(w8b=-ZN|L5<6|9|-& z|DT>$<%N%nih8plx*XH(U({MaorOjT zt<==+@C>*bJ^mgayWqrQlzH>+WM)QJoRMR5Iw7P)u-Y>gLfh|PUYDvT%g zMZ1?Q#GQWn+qMtVy8j)m2%iAP8HxLb-SB53wxJ|+*f3eu%8**$^bI2$%$u3+Jfwgq zIAC1acsRiVb+YSuFPiOdwN;4cf|O%eO{+fJlj^f2|G{sY@Wy~>go#uC<-lKZJJlPn z*sB+(!}vSeKy(ux7X0rJ#z4{4UkT59I@}+gSbJBtFA562bBMI{9(>SpL#2`v2qD9z_zXJp$rx^Kl;+Oz0o+UE6euJrVtdAQE!tO2L%b!mmrR-Io7BbX0xYc9V;fj+(O%Hm_t zO--CbG?U;h2x-TG?AKyKoL|S=O(qm?&raT#DLfD#Y%UB( zA9+R#Q2+CWR*9$i=*jEXxRSK~c>zhe_uDr;U8Der+@upjN$cEq@!c}R*sJF%o`^We zi<4)L5A}SclJlkY+EuNX!ae(n@{+r*?14K8$+yj~qz9n0r!_}uPs`8m8)5Z@F->y_O2n9DAR$46XKYZO=m(qIQd_mX_x{VrhiLu;ZHhLuxQc z?Ag&MdR5M9SQV3RsCJe>vb)L6@C~Dn;niyX;+^tlcIowt`tR6UaCW&>7DwV#xEUoA z@var+)E>h`J%aS-l&GVRfn2s==cmQ+;BWT)Ngd>-JVfs&U3O|&*;->}8=*qf25tHs z+!m|s7{qni>i27~9w#C9!5ra&ONnN`4{;~>8uh1{vS9kUrD!S;@X9y)S(PtX#QYWV z8^YX=vmNJ9#|9H$1!zA5EX_6?6?-MZ+ThnICM?$-sFnJJ&v}-c^jw-B+a^Th9Us!k|p% zkt?Xl!y(WDo-aOr??tTHd-jTK)CQPYN@MmW#d#c`UCfk#huzr3h38UId@$C{rt9L!CIK09?#gt^kPf)-PKb5k_ zniez?lQ)rj_yWZD9tjlEaYXmUc3|b8Tgg_#m8dt>@kOQ7321W;p0g4ebsex&H`YlDS4L0>YlC|8E_@PuG7E7zWfXdVQDvb#E< zOyp}_TrBUjE9(t@sGk(;quxYV^BJ6L|l_ zE!vsICUjGnB5)u5EvS9>9zOez+PII~>+<3zbnPldqm#?7%U7_L+|-BcqZ2Q6jJt0X zloGrAdyHxN2rpoN(_6W)Rv$l*wqFeIBMKCzQ}<;L+nrS>+|RD*I+%a4I8)L4)(0Sb9&o_9Ko5?Z;PTppKn*ay+rmtzy);g@ zDRYs-8HexkqW_(dD0OIXQJC3^MNPyYrO^acrK4hExK&XXGK`sQi@5lO@p4kI5$!cl zuKfsvnzWP4z$V>&_JCb9mvHYz#EE7?bGE|Z1tt&O@mAE-)h%qAEf$GYPhQ5 z%f0rbWDUM~&IWN#V_@&wgifTI{LFUg4oiBDt(&~37pG~<5M3+)AWorRfEVN@W>Ptb zKJ=+EtB|AE1nNv~!WiHq@w05G=@m2IEUYM+y z*&jp5-yvl+GcX;M_VSDG19!vmr);UWR=WHpI|qyBG+brXD!oo$dOrFz8@Pg5M5%tY zvt^rwE(Gis+&vcmMMR!QmZq(19|x$B6@Nw>RpaonQ}-+wxZ736ZU*m4E6J{C)%wcv zulBx797j&8s<@w-{w|L}z-Q8d2xRbt1kT>63-=`JGEN*SceRFJ;+T4SzX0=Wg^ z8hq&~?~{~7XYm97lEijbbrBs~wjp1K@Y`o6Tdk(c;mCh*PIap>MkRp_od%_v$M9=| zzv;;E#@t@cEQs@Hyx8zTgs-Z&hZ13#QgIxl`6~~_$5zBIk9x@!tglVZxJG}wR|-^> z7m?b#0(6%u{~gyX`~1;QuvR{+=s3&SDL(FfS`hK!D@TBoJU3ZLd355%(}~zZV|@J@Rocy`akI(Umw;Eg13(z zae>nGaEDeyZ}95#BP)BxnXq_Kmig!;o(yrv|H+NC6aLPPN;?37o@t0~=yLa&QfE%T z^%55|=6i~Z>RWxEQdW-6Nohtw3RlZ0v2G<%VrET`muKY6JH_-^Z+#}bR z8j@SK?7Sk2p(rJB~S<-YU4x}+{!$j#ps{4CSwQwr7P>~h&@g=;+70~70g zOEXWdc~hp{RxmD|+NM&tHeKE*1Q=+m2Dwhd(!PJ))7Eu^QxJb3MIi^JJ&B&_z3GNU z0-kPX3ud37wCK<7yn$wR$j~>@@F=fvKb!0Yg1{AKX)HFrkcEEa+RwF6vrwqlGRgXLY-NT}Av4T9YKVx*P#=&F|o;qu(c*OrA?JtGZb9RF?AR4*Jqe=3I}zpS3u*plW*^3N%w@5aIWSm2A&# z@Z;Ts&}{$sI9MgMGp@VYCix^GtX*|=4bSl9-$hL%MPfSHxHC}Txm*6T>=7aCW^Jm> zel!o;q%&HKGsd5S^-60|`ztGF3!3Wd!9PbzH4M(vjXI+34(ylQZEat;bc_!`RwQ|y z0@ETr6tOf0u2+emD!mr}dSqVO_G~(YrT-H(D`U(~&rBS{k4#(1NMRfg!64;XuWY zZgr^(DAC&!*%IQ0Uj1*<9v^sxB9)6C!-vXdkrWkK&fi88sGl_rPe{1z2;SXT>Alf8 zGUNAVY*ph-UC4J*!|1GSDmppy)-YeOXIZKhnK$-gmRmD|`mzj+xuki>W8SNIm1k&+ zGMqK#Ute9jc4f3Rr{cF`j-?!fF&PU5MR7 zVEdUWuUm_Ng$zBv^(TBy)1(5+x}byn#z8fM8BR29_xXudYMVigI*Ch)JmfQHUz<1i znO`I81ZvN}^H2x*W;~>3p~s&+ zNyfhrS}E*h^u?iw+w~tRYsOWcE*7FJ7cnlyq>e|OVraly z+Ye5cTGVkR!ZyJ0E7RSou;uR$_zCpysI@-5I*hlWW~;tS=-Wnxim z9q4QHoViU5LQ+Hh>KA*cGj4aVQd5gYf8V^VQ*WcW@Hl;`_mr)d+HT)UvnV#t%OF9I zfb|vf4tU7 ziARB5Kp3uFp=cwI)UEB%*g1cpo}UlG|FD<;#v~749rK?qRXcsO1=|=yXCY2V<1XaD zkx1meKK3HiD#O6$WdHBSCPm4Ws@Jv<0*Vc_bfA>$**$(y(7QTW)SR1&Ipv3pW0_R% z$LYo{Pmc=!%+bloD?r2fHC<_c423`8zVz8W+KGr>^-WA3TFnS4XS;g89IdCnzG5AP znF(fTYUyW7sFhbOesyJ&I%}z3nruq-y)d4C9ZQd|upHB@FfMEjR(J!&=d&+q8p^n1 zV%N+-@Y6cnLoO0IditaI2|hu-}eAry6@eh4OyUsbvEBz6?Q$N7^>8p5%j z`1ZR?N@eNT{(RtFQQ?}v4Blt{^qCeek|G29C?03i7D|NV?6MUBJpC+g<=&j;&NrB;IxET3Nn424O1(rzFkf#k^KEIl z+*zG33S;lklLK&liF^!{km4TvfSSACMi>M`>Ps*x5;}>C9g_WQ%li2tl3Fs zm(XZXiXllf^+gC>b?hoZiD-0op6y0pd?2xD{lsc|(!4LuKmErjqT``0C=fSk{=qUq zvV$c0{k5rQuKaR9hH;N_Y9;K*Tx^{lQ--Uw_vb){Ud>mi7`_?IZxnN>OWEAL%d^ba z`=l_F7l}4a|CQ54xdnsDQ^?Qi#hJW?W&At|>A&ZKG!VXNaF#yLH)v@|Qv`ZFzw3Q* z4t7h(3b#8m$?*ONjx@NmVh;&@Ol~oakml^1EqRv86{R(jSwYe9fnk_OG+qY)a(Ci-$M!|Ogs>uIuDwNJpMPYh8gtz|Lxa+chGVth&T zd?h7t8g80<$&(zWz?R}S6WJKhNFLp zA5U}raKkmN(0OZOVw^d3rVtfhX9o^b&<=UxU09;Bym6bl*AJdPZ==CE)vagh#nB!H zZ-YzI+hJ=n^xD|#rhGdEDn3pmMIw!Oa$JmgumJ8q(%L@0 zt7HiS%zexNAF(+1$FZkU6)VS4yE4pl`@N57xq-!zBK_#`%B{LFO~es1DBJ6HL+$CU zMQ(8clebCLf7xTv2SpiNf(Kq)F<338AOli9s1`rG@bA+7=}E-ZYib2fLZ;fA|4GgH zo~r%Zs?E)u2N9NL%(c(-UY!_DiP-V{_nMpv`+Ja3D1E=Pci(^XN)>x`*aS%#jy1WC0lSLGt!cYlzY5}nD<~o;8+Bn*I(Xtm zCC8-Z!~YoYa9^Sd1RKVaH&S98o+Xzh^dI6Z6u72=ADJ4~#Yt%>aU>|_%HKeFLY!qy zqKwj72qZ%0ON!&R_CAC`_La&gOi<5oOo3|}46LwpUO!HA!HiT@TQ44@Ech?E*_$3& zlNtr=l(ai)5r%vi(T1Ct)TLL4;=_H&_lxo;gy0rI0wM}rTvJew3WcC`V5Kj<9|9-p zc0cA_BXHh~aBSXeMC>fIsfya=!nXft+Ef?Wxgwo3TZXOF)xs>OsD+^Tyt((Kd@dCI zq3%DOyq$7^}`3VXDw}F63u;19{m>5gsP)>n;&HB!; zcQ62a>ra;WZqcyb7K2H9Yv~(!LNZ?xa~CRf9=Ls}4-LrEpQ{u!n@#u}*iB=|rWR_P zkJ4G^Elmy;Zr@#G(6P!~rO5%JD(h>?@Ic}7tIM7du+pE-(%4-|D#Dx~Qq{?0xdI4 zf~yl9#%(j(`H4K2wZBVxeC4E2jwhgp5)=s;$iXROo&WT-cojA!OhnG(ej?VQ=25Wp@vH)E5L8{j7a93XJjgeVm?d&T_OhZhM0}E$Jj! zVVYy*c?8IqFEeQMgihCeWMjFdd0=1SqdJ3cI`Qsu>*zg=9_ z&h_s+kZpneQxh7u-e&CwM=hK}t&~>Jt*~O7rXhq$#&=W+@-Is>zgo5d-~<| zX%?fhVpcV3)F~g(MfZs!QW*S0EM*g~8MSX&h*M~pFV3JzAs@>`0Ct*9GiOEVCmRKNLVXNS!Oy#mHdx?X2kX(9&tC$e)CrE z4qPpEKTKg1U+{Y{)Y2POkjBo)T|D#TclH(kgE|zVs0g}fp$vMYXwfPZsM8XC)c)=O zt-WxR1QOZtrkjTS!%eiU$N2J*@JaFyhI}DP2d-24yTl3&$0g6bDgm+}$GF;oe>WQg z_m8wO48;ibh_=6BHTu`cy0MfN~R&p@%|0JB=3LKK~G*<_S+M`tcXj3TEN2 z5I_5^gfW@+&6_RbEdbWZpf1iCJkPWFGgsav>s&(2+3-2$y+O`>Y=TX1W-797&2<-D znY<(*M@$#xf1X8gfB&+_W@Hza{S)r0NvP0l$01i~x4|=0=tmL6f+Bo72vE8nlOO1& zM4xTtNjP2dw7S`={%`uXcq8!pCc70S+vf?fD&Wb%s!kie{PJ!8ZReRmM6#ZhuO;o^ za+>LpbN3oLi(g9hYBN&o*T7O`Jskz#%7Qp&XK1nr8zV34s90IydU_5Lkli+<+M`+x$98olXK;tr&9RK+4dr^%Zg`Q^6~oQrp|k4`o%V*c zc&=sdi=MK*)a9G~cPedokffp)DMXL1klcWyffC+J;6i-MK>24uUXbxu0upk6Pn=>g zYJoxjm_){&@lDEPw_&oOSjyyTx3hUKss6VCUhA+LiInd%MPugd0ToP|RKV z*LLT^%>IV!PI4vVfZr5?SKbgo4mJTj`+JH8g!-Jd$=;MnE1U2zZa#xmJ$qW;{dh)- zZ<6r!6&8`B#QTq&4r1AJRv7<_GoF~Aet|x$Xf4x$FMzl5*NJ|}_*61BgpOii|eAHE@KM&6?AF%q^ ze8_4qrD)P5$lSu|9*IfDV8{u-Ia2IM9HTd*7he^x2Wu7b+RP3A-d$e{y3N4L4ILl( z1~>LgPd1LEwNmfVT=N#xdAh=B#a($|$6DqGg0IL@yA!6Yw6kXOHW}IDtt7rW zn54vd)@LstwW!1ee!cl*0%T>&`+l=D^(jq;<@+>YPhkHHe8uf)Z~(^v?*H7oSWf?6 z&Nj^&Nvy^!@RV?hCBL{or4Ab>37;VzRP5m~LF#qV80M9><$Ucw);!|3dnd+}aaTV( z6FG#s@q!@BZsqwau^fQFbKle9S{p1isz}`0x&}xmijB=9r;j?h2o7MF0CQZ&B+FER z#_Q$;#@%CfuY1eB{w&gB*|xQ1L48;45z|#`pw;=3pg;_{e5&6KT3cLW5uN%MeUG+f z5+q1wGv-E>gNMs2Xw)MVV4|mgK!f|9l+2@;WI{1#<3t)}H{C%cLV!)goNF z#pe7C^8*<(yY%blSj3KQcB&BH;!9J{`#WSpAl)O5KbbfZ01q1W+>CChh3Fo<`S!`f znrN1SIPOs!fNsbJ-OsJIl&cmX$*F?JpkK1HBU8^5BziVuS8s^Kh~l+R<}Bf5`h|9YdAW`F$up--}Vc0coRHhN4%>O>9YHI zrz-Q`h^&<+#UD$o2(1XQy0@5j_&L*IPuB>25C2 zGmmZvS8O5fCZ6R3h}3w1C#e?s@7_TK+&pv<0JXIy86_P+gqU{B9Zypcz-GKK3Vp85 zxXs7WFJ@sKAUloC($4oG2{ue&iN?TkIorLjc?L1mJRG{hL#_BSFEF5XY995n7?z>> zzfDg0Yrvq1FL9Z-blsI2Sqpd>k9a5y@8lm4WXJ2HOQ$9KKa^#=I&^H;+%FXD5Tg?L+<<8=$N)kD}i zAJ`jnClLYH5D+;GfS@W}!+*h}q^*=cF^o8Tq36#G_}N8}RIS}g7GMQ7kFK52k36Q& zTshAPw&L+Hp4-=R5SFs%`)9!e3y-A{5Lh#aeHEKc{ZY_!bG96WO4X~;@f0l3T7C`N z)W{iloG3yLG8CBbP}4}#Gs;%N8MF_9(t#5 zoENZ{eojwL^gE|uPaQkVdlo9g?;T{Tua$Ban~hcQ;=i=X$S%mZhT~L&Vc}&F&+^Ua zMJAX9D;%%XWW~m-L(G*DlgirhvxhCiEAbx73t8l&sDC?!w)I-nvBnon+woX;ID8yp zCPsNzl~<*xp;c=iRU-_U94gC?*_;)S!L`7=MLG8v4b@cGw5MrUpIU zc&TnErCa8HS&hdkUWTj9I*hyqMONk9bf#Jnrl)#*Y1mWEWr}MRZc$KS8!>9g#XGqP zFyrvcu2>t;Ig!&s9`A4>{?jxkmR0rj=25$S0hF!0II;TO`UUHFKFwu)Xo60p&}P(^ zWVY!E>_=xHQ{IkRdLB%C9H`ty_>Tk$v5gXS3=#kjQL-wb`<@Ay+2gCVpNM>_yhBsG z8yZ)d1?nuynmf3ho|h$^s*31e`P&b`crzThP|DgykDx4rw#m4)r;)*w35lT|H>2RyJNECd!;bV=|&&cNLDx zi|+k+QX4vGK$^icFP#AGqUQ6@Xg}{Vw94BUqv5|Q9}A5tdxFUacM&=FuC7)tK1|YNjfy= z`+aywAZCvDtq{m#?>@(`cdlZJD+Gyq^uEC8X@BiYKhfi6R(ZWrCj4Z5y$sIk72MqZ z1_o8@g;E=aa__~LYP9}*Y2mYLngJ_Z-BcSxqyrnegK+=&XImc#;Psa9`(4~0<@Pqt_Ar<#bv#i}b+Z+v$*Ph0zSn5ThLrfo ziA!UrV5 zPwn8APBqT{n~&XRwy@25!A1hHB1XXCG}7hs0@JV3hCDUc{NJ15C)r&s_NAlnAC{~+ zfjjFPHFtr1L@KGnH}$pD|5ZM=mjZ5&K((Bcv40tWX6)O@+k{2 z4^$Os-2ht`1I#Gvg%>?rOT zlCK1?`94yWR~vQ>wZU7yU!?AZ_Q+hwGvFC5e9?c6`l{@SiEsG`aO-}b zL%VdHj0tR7*?@(p9yIP^LrkeC8ja202K>@$Ysozu2o`C_ALT0M9sx+M6+uzZR^hpO zJY|udwQ?jxJ^PT0OB;knIBh6KQb2}J9wfmY_R4Lv9N-|bW@)htA6DKv(u z$0J8Lj{`U7*VG~yJsO_B`)T=|-vD}RjdGGvi!wNNFIlbhk3(YFM;_ZAzcO!7ehOuU zu$q_YWLUezvJxByh^iZ@ugU@!_PNyV>`Yq&j`;l|rtcUa!p!ViI$fumoMo6JgDo-Y6i(MUI0*FDKz@>09lTnVlxTkj#*T9)vjFFBMQG zwkr<-Xnj&Lu0QmZtzzV+a7cpg;t;BE?nGlcLwvSH`oGf~%ba5Y?`uiG0b_u&f?L7l z@7V9)*2xfk^a7}K{*CN#k4_xuu5ZMWQk9~QOm^riOEFPb%4O|qXS|~SB0-f);DMj@ z`t}&d8+{4-e?ClXATI|+3rxw*DY_J%?p9lQGe?Yi0poA>K&1Dq?&&=VZD_8o7dz~c^t$dE)owaK^z=0TMNxm z#S5p2IU=bC_lj_re4bGAqS%?r#gbFL>5y0QZEtTOFD!YyQZ7*%FJYf(r5rjXF4=>C zO)Cg){fxbu49sTV`FSwBI9nniTBaT;J!Kj(w+tyae5$yKx^$kQHDsjjueIx~-9PKQ z4V62(vYU47tAWTd305=Yz(MRjom@*1N&;F%I+DkdGUFC06QQe5%Fl*BJ z@J=Jj*{%0wffEykVN&XDgua`ja~Y#4UG@0R$dFwn^5uQn7BIJ45kqd@@I!#M-<$YU zMB{?cqF?<42J4lgDBbU>3F-O&paM>ss zq6JVfjK*FlsFCXMZ-#e+HoRf}gh@BmO!52T)p3_&Dg(Q5m>r2Oqpq^8wqT&Q9RIBu zSI?7_If;$z&No_>s-p8E=Wi}Q4j)_U|MVQO%NrkiVw0nMnP;-G59OBDN~IIf2MTx% zbI^yZ6_S;m{RtLz2naFETMJP$M$qgj$puPm%9ds0?DQsDYaGhXSU}?D>XTp<)4)xG z;Bjgo7MQn4_>AeCgo1l)S?k{s&as#rYt(GPkJDC(LYT6$Ycv!=mfL_X9R;l*k5|IG zMU^7QW)K!9QHVhzz>YvbUgUu?^USCg7Az(E*Boi@ZC`NL4$^B5L6zlZ1m3$yRQt-I z-?CZ-Afv$xsSwX6qO+Vzw3&}YL_-5E!`L$=(J(_U8tZu|M-a7_(B95bBsT`N3C*LC zOccyMr2UKVxyyfwMok-sUO9?r7;X`Q5=S3o%a<~l6VywLaT@ualnr)_2I_It&POO; zw>pUGbSJ@;OoFyFhMjA%En~sSe_kVV4#pj`yQ@qrmBe1$NYCEo^07bXN35Jt zFZwArj(+tZKF+F76^UUCmoci>g&kU+4R4q+igQYu;!Q|v=Ipf$Zje=4sigacsg~G8 z2ujognk%q4N|lmVGiyR>wG}w~e9km-i!d`_7nR@P#&{y1wFMb`m&han5OWrTaD}Wj z&|UtZEJAp3`djJpkXdG%~ zI%Bg^pS!j*9mX?Kld$&8Maey;wTjq|F| zE*=!sr^-LLIV(58Vn6OOLF`*N|5D83!;kr|DnxnpG?$;IzormCNDsJ;Eap6)-D&tq z{(Dl=-ceD<^t!i#WnVxR0R7Z5FMs~qht_-ztDtkKry~5<1x1?cs045Yi7Srl#hsIq zrwN2z(-uu)n%G)SzTV3VsInLq0%5qoc|p=Tg*>!*D8XM={asmH>CkD2>`iy6)Yw4+ zjvbB7#R(yL-A(B@etFmg7?j0vmAC*I8!`2j%0ZI83!k6AD+aS`naKi6X)f)E>ZY`6 zmswF_h9}cw@*E9fYYG(s-IFy~udeLA%JDvY7Ga8hNU{(}uh=j=Haj201uR9cC{}~7 z=dryW7eC_v%-I{`oY85WQK;<2fmuhVqfz})H74hCJsa?+U2I(wr;Ys$oxXEDcFcw4JvLz#xHg+{B7 z3s8eA&S`I4lt<$)C@RYLv(#Tquhdf=(+5k{_y{e~W?f)}?->A~Vf^HMkysRQ(G>Cg zotK%C13>;he>rN*FlGCNt$|(*&$QcWzAW6*TF)_ zBB_@DKRPPc*FM`;>`X0Z0~BJ+AHbJq0oTW>GK<;i*bCUX!$1^%_38!Fk94S{xL?Yu8Ns_c2W`yXZJB= zGh7|BC?HB**x8&RBpD}#C|iU>E_j+?9Uj&g>mgP#copZhhzg3_r01scu0vxD*O9Sk zQ+4`@C+ZuuAHobv?$5#!zIE6_$)9q6z!EFQ@;+oAeuJcQS({1DTKGPFTS#Q@JO1Cn zEv<-}Os7|E%yXskhI^xsPy4+){X4?Yi^_?#QsZizAnzP&(|vijejRR-PkpW5j%8Xc z7IGtImDq#Yeab72Rugy*WtXXdp%qxLyNR>aAPLE$s`vjEDOCs?(A#Y9-jR|P zDUOui>2!t9`{<&S4n<~`_{>40)JoMbKQa`4mX~Q; z8X!!nsFDhiv;c`#_3SaKnS%V3)4_U|ZDpU;uT==CnK5PNh;LN6cKOm%B{tK#pz^pI zx77Lek`|=4nbVil_dk(7clvc|#h??0z8YPITW!s=nLne6@jQODL9o;-D(|1VA^RRS zNf>$3560+^>E<4;PvT^xnO=y8zs-9RNf!&k1>bNk#tvK3dInTHD-z0Z;B29sD(&KI??Rvw_Kska`w-O;KYE^#HKS^l4_0#{1`H1gwr{_5foXsIFp7^}H zS=7j-fSy~*xVf-)2rRk1o>!iD>3#xFfO{S?5AVhnsq%1%zZe{5yaYiLC$Q1$@r?Bt zoX75Cz?h%K~gU;cze9$V{Ye4xV%zoe~Sy75$#=#LPh9+bro zi0S9<{bOm0sZ{bVu)!-Kqz0^n4mnN6sH>P*M4eH;hqnzo*?KR9vVs$QblILf4eRn6 z%jf+LPQN**s%q>Kw|Kb3^Mq%cQCY8Ki!7yqAri^z7=VNGZ%jb%(Mg#J32iLPo5zoy zy84a^U`WKtf@jaHxD0JCLUZk;1Dl^5rEawP#t$#_OT*I*Tp1_R0<2MubCoix^ywuZkBOoE{FMvDe)dRrS)E0t7ZA#UhAZ|(hu@f>`!=Yu$K>c}(T}-er zRpc`b(SLR`43~|N*e^7$FNEBRGOkD0_`mZ3%69g;+i$! z`Q8Tm@!iDbwfIgsZlQ&LCz+)f8Yix>c67RZfPu>l&vR~%75#BaGF+lxvz7M&H9B2- z{#g%C|4>|y$!K(QE%r`)a!=@Z8t7sYwP-h2DMn0nv>kp4=M(*$&v?}1LDqJfr6F*> zp=Enr-hGmdY4Fey*W?npNo-j5VrW+VgN_2n)ry1%CaZfEmcQZcM@w0ZSB z{33S9%0LUP<4IW71h^R#3x_AS5BQ#_x(2DkqRe$PI#3_~lq>)G+SYCW65yKO6u}xm zR%Rua;)A>bb}K~KEC-XsjoUpvobLcjR`oO<(Mh7!Pn#Z|6uAhw>yhJoV{9AGGF#tjV^FqTf&R9Ds8sfazM*)$ zD&Mme^MP8RIgGJ?U05v}6r38!o?p)?9u)nlq7Wem9+rmhL;(zqedGV{7+7%I$1|L(w{7>*IJ-VjCIfsbX)VM@(OPdHvCz;E8|R#Z&A#tADhO z;#L^lQ|!_wp~t_L;iiM{^GB;I!=j1H&E1|Jz^2edfNr4QqgZ5efXj8kHDwksy8qr` zE$kgcu`=sR@qNABDSwc3*0B1z_SZS=xuJk$1`N8PfT9ali?8%&m3=TA;u!VaH>|@f z8%a2ALx?oosl9*gAGviq^@!L0l*f@UVbyP?7-gdW@(zQIzu&46<=7~hT#BEiD4TuG zs|%hHzB9>cReLbaNXFf0A?tG4khxmBpV@{rkE%8tB%olm2dTFIKWK+;0cGMBaq81v zd-UIyY^7Z#cq=>;bfOAt=TV#<*lZ1m*rko{)I90!2F}dO)qsT%n>lycG|Ja#BFe?= zeb2YzBzZ9cCnFUNbdyR?RQ==DbJ)!8C*vOgU8vDPivquas*4U!u&m)Hs}=B0l!Kw? zq6Isj>P9xk^A}PyGSh`>@@+iRhQGC>IXIpSud>JJ1o_^+R%*(ZQ~?>--@1yc6Vo34 zhTaoj5ZUS>KD9VF%gL;jPu%G=e33aI7HFBLs?-EDdjGwo$A|Kk@{*5^%DoBWImr7o z=_9xrEkAdBSbtI@P2W}6%w$V?U;UvrvgJa>hFZVV?Qrd zHg&RNoFpv5MTCO}8Us%F3Y`+IGwGmrNr09GdWx$=C&SmTea~LP>h_lZh}%9;4hJ-& zm(*<1L4pL*!ej>=UpndBJ{lw&tVecZI-hHKl2;AG=JsU=> z30Fce(IvTSJ(qGSqC?)MmkS;CbE}ZR!b<8@kvN=)5>1uDGQ{YsT5y9nzr^FqP2T~Y zYR;!TS$dYw;J0H8kSJTh;dr$A|$HcpIKD+le!ZS>H z?H$O@RVYWv_O4kXWphx?1bq{re@EXa@6EZ)|0C3J{Qn(l=+cO6^)1TO#0tE3UrZu0 zE0l|pu8q>>G|8>OFP~1Sl%aeBXE!z0oAmD@O(uHWW>Y7uNMlO+Q0CNsJ<{W4I{e8Y>FmP|GRjj&Q0AOEOw%HkJ@K0k<%5(I@>JQ&kkSH6ghS&~ zWDcO7Bc#SCjr2K2t3>2c?y{RM9@gF>bu4fv}qPRUu;&H#sMEk(UXn_%l1>f8KfMKq4@QugGC* zw0o7Xdcfc;O}q$K!7Ju}T;gq?=zXn-FY>=|S0qE{AVn5{jq70q`M)oUa6B(|CO?0M z%%bEtvdzb-B`a3;XA16id~QGL<1LfL_!G~xnc9EozZ%6m_9}!p4oCs|q*F30f;4cz zHMv@qP`a@fsLC0&^;ggq6v1S9CG8)d-0FJ~@H6)-w>(Akc)eQANMqNbkb1cFl-0-S zu&AEe@PR58{;^12Wq8)w@RSenAs4x9+IeM3tyId*f`!cdVyq`RUjPN2B#ZSPb3U40 zuzjmYm8c45VDTiJr5F2SeC3jtJ+9wfwG=?H8CDS3(U1 zxWI9GrSfTr=>%?QsY{Fj`rOHMTV!(GRr#vP7Qtowsh=&hO^YIkrPY659DTZ(uLm5wGdx&E6~$grFOn7cE6G$7FZ*ayZHOYJsx(jLRBobVV*1^Yd!DL8)7q`5c#^jWsk z?ibVgpVtxdOcw~zY$_stoSAuDgwJ+=e6)eXm|FUxwyRI0mL5BxPu;b;YQA#XiZu^S zb;s_hfe(Rd_(({Ke?t3EnQ~3c@nIdZtbaOWS$4Lzawd5vVnmvYrW6n|dDZjPfij5k zV~TbQSY|;OJ+&pl#&BpNq8ap0Ev_oI@nE1F`~zynteLw~(dAHtotN|BIrq4r9HpBb z#b*{8Mj6;wrbk&{;Mvj0TBei*Kd)gWecG5&17Zd|AFq01=Dsab-L-ybEy#W>Nb+tH z^C!{uFvs|M^{w?m^hsL`#jCqxj=N0n(?BWi%P7uYC*V=5xmhN8qiH(TxSg~Kh`#Vz zBC7LI`n4*R!SjQ$UHJfxt~$A%Yc+9O`HJfE)p(>n%U=jy|9_E;%P=Hk?ja`gKdtLM zo5;ThHyB4OA}#H$SJcj>$i2sd(CC!Z2al5EC)kGkrjg__pSZVsGlKF`C4A9qRN3r| zZ~X1vbN_-e?(WWpv}zg+jbF>&p*=I^Js(lHVva|1S^Ubgm2%Z>CA)vUu@Qw)Iow{* z781dMc-IOVw=v!MAneMSGbe&m5mjUbnIXUESwwz0XLV#P58AzQhj9s2;IZ2d zRAW$4r|U_P&4RBM8PC1Pz-EnipGd9? zL`{@7Hq)5@O*b?VRlO#M(G9zAUS>8nKkz#hKNQ}HCugUz^MC{A!M!ofMnOr}+6f*k z{i}(D=kLOG0E*arN3+(C-#@cu{3I9V=F3Ig^(8tO`0xg9zJ8nTt%6B1Ug4}F2cC&} zruJlA)wNTCB|K0Ju8lO!m!73k`4>LDUIl%X*Bx8x&kD8AX}0hoB0Vffekm31pe~zq zJ!Mc=>T-;Zl$B{In>K;O`RzNI6|v8W9PrYi$Z#J?$(}v)o$(X#u-6JO$}XGUZXjig z6oIC44E17f8htY2eMU`>NrcuKnI|rn&WvCwM!@NtC5);N=UT@T?mZR-l4B8d9 zSNwtUTP4nop~D@uj?FGa*mPD1^JOCEqWjdCw=4tHieV9e_4W3Cw!RTZO;vC$dh*b6 z6>Q^uRhlGrBzc}BY?K`D^}28Q&+COru|)Zf(cjI#XP)!2Mho7OJ^5E#qq=;w*RTLY zRm+jW5WAc2)K?tF`m+jdxca#G*Vpd<#WpaLftAU-X{jM1hh06KAZdTG1*ctC_T!?; z`ZJ0f%857ci?+?ags__ufT&j3SQ`~hRC+e3p0hMd!E$dKn2D3WU?|pYo$Wi1I7@AnqZMp zG>jD^tzZkQr{b8-(tmTxj=ZdhX z!hvBSG+0SkDiJNNIhLcV_x7Nf4PWH#30C%7N@~|GoGX&1iCDz;Ex+|F&wJ!#=xUXG zo}`-w8lpaWpX?v!Pu9VyO++;yiQHVAV3t20ov9x9sBiA< zKy&Gv`HpGzAc$c`f-UNh^Wk$8ygb!UsrXreT-g(+5mLJqEVrt@W9x!fpHtU3>l;|H z-cM+v-yp{L+gzW9CXN+$dvo^sx<#xofe)ET|lh* zeRRP-TOHW;OPnBg6&pWOp)u`64wQ4`fL31c_}k*$({c>1v9OD(e7w{rTd3# zrZ!u?qb$7~nizZCOX^;RxtKLq2`f(CFf%3c<6d2 zRodo{uV~8)0C}uN@+*rWA0c$q946`d&MCmf2$i7c&_Qudy7c)74~!LU4`mSgx%lHC zr0tEw4EO5ySRa*2-5N)K+BN32NLjDM$6Oa~J;jqiEo+r4GjX}EOqjvFw+&1&XD5n? zkf8IsqE41(f8B$08eax6Ls~<&AWDnZgFg~JV{15M2G_8*VY{(>TyP(q3PMoQVh@rt zQoEOu8XEvIJP4E_)@qCX;$c7W>Np(&9)9uGl@$jCR|}+-rgg|W!TM@fi8J!TLV4kK zBWWI4V5zk5&dPURr-IPesSS& zoBqSs1bllv=YlkRwNZcW;E81Q4EY+&71g_ZEID?yD2QojtrA{ETc$zoa5mK5Fi}Fj zgU)=h@aNNGJ}>iT%ENBSw}brOODHnQEo%7Lj8b3Z34SZZlc&Re{^WY-Hh-#ZWIlM# z%P4$?o$0)YAVUHsi;fX%N5sT86a4g^ z&WMJ7?NJR+8%0~~T{m7UYkN5nZ>2FxQf?jNoKzB#FT0|X6h5m#iZfch6*#Z-2v*LE z%)_wm)zpv}ChG)q9Ko`Qs#`OIx3#$HlMmxItTvZ^8P1-FZ?mke3}EV@0ASd;6$=A3 z*=1ihhyF!x&<;|>jVl@Y_C0*Zn>C(3vCY8V(khJ^P zs8BA$V*HQ)EMmTk(@QfP%C*TR?HfaS3zT_fzz+~do{*ltH_ovp`^+^}EmPTr!3uFk zn~S3c>kwCQr=;sNZ0<^(kBE>lzq>YPB!k^*_{EP>VBv$8$Yr@4;FH@p#U$A=#ImsD+=SA>huRMVO>Im`e$u~Pis>RB zqM`6)Jpn$b0(*b^<}uZoNzZkqtM5aiBj4R`d#D^ogwmff-wlTGo~?zl+UdTDj}ivP zkA$LFE}u1l0A=?jetO;=dl%2_oLN zU~xBIuMb9*LPCsBEfN{PomuM8CnCnheY_TsJ5vlZp1SqQaJEh8+C<5^IyohOE1|qA zBjw+Y7mLw=jbR-j`)8{WG&t7~U&qO*T$hVf6ZO#*f+QslD`FMu;k}pV8fc!3+b}|e zpM9|iJ#Xo~TQLWA zP5$hA1!DqJWnbnl(Y3^tMWkdTyx$H2r*I3(ZK0w@U?RP)AMutIdYdvXu{v5>l;Prm z4K!*f3b|{cz@KHWzoF|M_c4aN7V7h{C`Ai9cpq+x%{S>Y8t-2eeCC_NN}lego7#M2 z?s@hNO;P-Oeov4YF~s0*%Xwfa#Y=AJWjmN7fIAm*Vyz+mJ7Vcpzig2b!`YE9Xt9F? zj~~;jZf5m%I#E`16sWCOE~zutK%S(da_h?c(^BLRLK2j^BrQINrJpT<4KitAiOwAm ze{?so^a0lc=ePtYHU@K-i;-9U2UkW+|Ci9oy*uD=M!8G<^6*N;2OUQ45wWri@>68q zzwAxoTBrw&Ol5fVCUccqg!E|Xg^yPS@xCdf4?@k;GO(Z`&L%H9I6ZhBqJY;SFyqs; zA|!HwWfS~?5n|BlL7?)Q8F)?dNCjrvyNLbAd!m)9mKQRfBF?-g2RGJhzdS3V7x5YyXrnE!X3brcAf;l=JIw5{$c}{@c*f~8OOQ3O(=z{V#O{4;pqtPs0M$L;0{X4W zMs2D~XHTkl7HKn~Mv3D1Bj8K6-t^vwZ>sE_5E)K~Zm@klUh#fJ_d+~dYKe~^OUXkF; zvF7Ubdmy0C<*HDo$pD-WtOFwtI8Xz^gciQ-pTu#l?r-(m*j#4(#%SEv!D+`C3JXu8 z4Qd<~wFK^3b>O)0eX$hfar-00Q=<2WYDj~SBrk2tYq+-4iGWd(kaDsj-2U&8P^id- zeQOl!5@&8%e(V1Q*if0V{DrBP&{Eeyq_3ZJDfw#Uv6nN5S}sxZ$~eTDoOsEOH_GXR zD;6cmm7Vij{CH&yb>e``sctDRuP{*jBXTO*2)XfI``XbyS*E0$!tCfjP@pKs^%rrg zP7qMVNTu)a7{k-l1h9$aS%*@y*7;k|8%7tZIP)aDsUAJ7%f-|&KVL^dk-0_K!O`zV z$m-q<_r7iGTpI^!Um>fkH^2}B=EH9U7vMLmEHs!UH0Ia7+UCAcklYg8k?*>cX9lZZ z3?P}_ylNV#*ZW{p;!kACd|JZ*pS&L{+CwujMy-XI`!ak*HFZ&gTo^7|CO(T34`FWt zy7^#vYjlB4211#$36hbBhkk!_SiJRraxOY=tL($C^w!VXcJJ~b2_*t5X)6Os5m=^XW;}K^!(Je`B z-8nxQ@)+}*tr;Iqy*&l2lHt~Buev8KvHhzlfBFlQl*2GizIF1Ga$)5k>3m`2rC_Jt z+g&8Q+^-eSlPM1ZliL{s3jFRO9w?6_EAA;g?1sx&{}*X@71rh!wF|pg(c&#mkRrvU zSh3=5p=fc3V#Qqp#T`nEyA^kr;O?$L3&C9z^bc#TZ>@dpZ=d~VTsa_+ym>R{e8#wk z&}7(*>zg6C#GzVE&iKHgMzntoH$Nj!++$ob-^EZMHl;{FS0K1e`rBQ^%sB4mD`*}o zAqJN|j~u+o&pZ#HU}rn;nb5wKO|Ze??3Kp_varSj(VlUD@Sewfe#vhvx6?nqXg7L# zWU_5Hr{eGRq~ld7jIf40Up6Uhu3+~h5%C!J(Kc~#cnWNta?lf`UaM0#Y#VG*RnpwL zaK5p=&GC}|Z#~;zYZvZzy80;LE}saWe-eo(#6M?#*Rk{&c4R%sE#BHu2Je1C9R=8lnvLlLq zTNTa7J4JFr<(fv0RZuZ69My~=APRuIe&bwvw1xF=J3gF(r9QJvAaEK2=-$JK3Q^&r zCSN_17|n`GsU!DRD7-sC_F}hbOHPQDR|Ry43qeEmM?0_;Yp!{BuDGNb z4<9#b>%KEX##h6z9e(DeMt|7$|~M?T9_v8#Ik`AQ;k0*DK*b@ZVqQAgqL=MX?9xNU8avcNEcx zSX|~=2uW$@qTtvkq0-UtP<6X^{R`8k7+MCQ_skK=hK}#VW6d@kuMRXJ zB>%RZ{`35N^-0`jaO_itPztgDT|Sff6>FxB15XZZHvjh%zZT^C_B}r6|3RBt2K?`r z1lJ+*zlqKN{kvs&{}ze=_h3KI{}cE8|NlbO+gN$K{CavxNLosSWSMR@;GZ*I&b(tq zp;R4s{h=6w{zC#u|D(d7_PalYRGp7{-~EnP=-c8)(TVvvBVuCkBJT9WS2hO{t-^ru zucpR{>=7;5;?QLxLoMXvYw0;_YpK^LMVwVu!f=J+Lu*D}zjyunc z2T@p}p}ejZDf)V~EQs96ors~Trt-|g#|}BqVzvhIk^*C`f8D3o?D6>PFqEJUu$RZa z?O>2XflYHkQXCDE*F!#I*zU?L9!oZH!Z{V~+2dQi<}NAgn=9@UeLV1~2FWe3>k)M} zC}$4g2$W`6obgGg_*hI`1>eOwP+;mO*cG-{+~|qF0ZwX;`ewuVb0b_|3{+?US!{ z5=%5^HIBBiNVMCQq^s)?=+!9qJW2;}c<{Q-W6y0@pb z{fhB&C0Ni0Cff*^AeZR+=8SYRYlzQQ##im~FI84>^E2Ve{FHU|`rRL!@R#`s&e#-t zGC$jl6%}BxV|~puD8X!Rb%MqIIkAcKzn5q>{l}kYR(CdybR#`g=$RqZ)O@uZcgzVn z5IaftQd*P=&073Jr0lcjRM<5+8yoYM_Wa+=)W21@nUHw|%|s@KtXWbbkG^4dbbb>M z6=%6_2(` zgI$IY6a`~JzwNk$ZGUt9M*Osnw~?m{{^ss>Ps@=xhZWeuqp@3SNy(mMQ@IRwy+PwQ z_XYTFJve(XJTY}HXMrIKGE)XWVo8I{Tw7H<7ABQW`PU{3#o(g5DXFv)7JKInBK3X^ z`(qG?Dh7P0tCQ>%3Pc})*WevlJ)YLC9!>e0~ImiiDUB4L&BPTj>2T0BqZm42OWymOSK9-G>wD7;@mg9sHyS{gYoJ)r;WnUiWb8Bj1u4DlB)KA5Hu@`E=bVw z{F!1Bh$6olOI6#|_#VPrL!pF%7X&h&KW;x7mHyHIbzu1%ebAYejA`yB@S~x^cG$0~ zj-nv3473@Bf$KH~_4I2anxKIM4*Tx;6q-INRB0pfyG@^fPXJLgbPPFoU6}m>rQ1i} z?uKXwzJ$nVQ0nSMFKZVo(r;4?{R*x#;2ZnJdI}_<-cmP`Ire@#ny~sIc~AUOUuJC~ zzZ9>t)%wS5#eJNy(hZ1U{JxV>%`u!Pqe_2J7Np!6-O*+x{amg%xwr*c8 z15satsd(OY3Vd`AA8OJwnPc-Q9gWOQ-8f)QHuRYb|9$UXi!;2%{)+S zXb9Ti1LGi|taGQ;?dHpKq#a$wPzMOzs>=m3csmP?El8sB9w1-#=Jt}q2)XmaT{GTA zD-YInG&xIsjT~l?qGz7$0w3l!I~sQO5@kmOA7`VY=CJwuOn5D|Ai=HP%!D5D3`vrT05SK7OHP>wTAGE&%|`~1 zIf-44b71S0xl}NGkjGSf5bOw_@Hz75By@knSkYEelZPMli7#O_fZv$YS@#!E+;qdw z3i6Z%Vck)2{4PT1p(}fV1s?N(N7pLRJv)`x1~*D{+B6nMyQ7BMXPkge3q5^^vEDeP zCq|A#qp1b?MuQ^vr+g<7zY33hQ&x%dDcAOT-Bp6|L^s}$biS4y5km2curpH~dkQUp zNThYMiVWU|M9rWgsiqsDfe61H#%#^$b!3sHvL@?z!1`D1gdu@0E14Mwpl58f*Et7` zK#%H3MY&T~7WNk|*wb7@z9P`1v9(hL>TH#%jQ8t3WVg1%dAE_-{*)bYYI5rS8RNMMgan3{Ti?IF{@ zi{1XnrzQK+#o5{&GoMG)F56wkVHYa*kW$_rZhYwO?fDu%Q!a@zhhMrWPC(({cz`MM zfs5xKCFrgH33<5gSE4RN#B=L6V(JTWWT^-Ul^UkRol2-%^AVkIc==y}jliFnofGvQ zS|(BDb|}X6uHyZG{IDsm&$gOf)P!aUMhm%m$UMGM=pFiL0iH28VERO}MZ@Zf8U^ME zNEepsw`x6{9LiZ`@*rHhPSg36Aq?={vj98Z7*fHa^mNo!o0V`?NrP=vMqsu$ws^Ps zxy{7^6?xq>J~z?gGsD-sce!u<>%MJQhwa^Nw(#3g0%ZRwA~M;*HEevsmHimaPg`^(#O0ab;Jo3C9 z=5<5m5&XHZz!BAa&|k=1H-J@K1gzVJA0~^Iyc3l>Nwt3y@yieMYGH8S{ul16ptT#v z*-?%xbz7OwUj0y6YWP5m@05f&4pMYsbbvj+ZlvUrL+?g{l?34uwbLBpcK0~^De?+1QTURW~W;e0^)eQumIG_<;Z_#ShJd8j4s?A^`YKEYq? z=hPB`_G6gCu*iOgaWnE~N_vl|qkUg^<<-%|bc%I@)t;)_Ay-#Ex<<7laUkZh9Xm_F z$snl{qq9{BaB@R}$@b)9g}fO!sbeoHjzT{Vao$Zhc>t9?ij%!aVj~1~8Du6nlwhr2 zCgEIZqdi=yBGEQhc^593wJXtVXJ*rzZzHKF=Nqib8xpcHb(kzu8MV<=09m!0Spv3*l)(!oV&9&}8I=f)mpa+7Wm z#A2sPmU6x?pJ;epwKQOLq3qIV#8f7| zk^9O`&qii0;vGDMwt2hw#D3nY5of^J&$lBzj&;ZJj3;qt%AA!BigMMNo8i+QxC`52 z$M=zTX7db`sn+3YS4Dhg9SnC*rd`%;8n-@!Jq;&}0^S!*CJga>GLEk*6#YogKU>yEVOwJY9|MOl`@6Kj zWx>D@X5`$cg!h7soL%k9+Xnlaz^j8TU5MD=rO2@52MQA^Zq-{aZQ|wf)PUwJIcNV~ z$x)I6uM;@}=?o3wGLU-sKjAnta}}#QW+bLj;ig2DzD6}tt$Z;Epr%giA}o>u3BBVK z%+qKrF*DH^7On48RSP@%fKUW*?NaK$Y92?qc0gYri-TyU=OX_eyIOCtD8VlDDA0pe zW7L${cl7S_>-SBrGRzuQ@lV_-v+7i{TBX3__P5zI#EP}{4efDv-UTlOS)+|#ZjrCBCo*0H`7H19?I0xoGr9#8RV;E}sGK11(MXQ+=7LEp={B^cS6Y0LP^vs7p+r^jFP2(<9pF?={GBim$ zJ?qyuqsf%=(pSF!d#c8i$h!4bc;MLNkBwJ~q6N?MqScu@E@iHE%CCRBjCP zgZ0+M)`)SqKgQKSZ!b)@VzgsMYYdvS=GB0g)BL(b&2M{d8hJ>JUfN#EJ=tzH7!J{n zH%SXlJ4~81$}AMMajr8kJAiFH?FBqgjfDSXXIyotk%NOEN6I>1kIzr2G6bESL~vNY zEgU;`wa~ymM2rhBhXTA8qJNNUM;M)`Fb@LQP@<5H#lVjKxTXs#h;~<8mmCXT{3qVA z2_(nol9MBls?wTX#so5&$fd-~zV_FsMSLS-bMY4vlUvJqLNO3(_GMo^4d47(>G3PA zpsc7yW+B|B7xN9MwT^wB7oX4$ZTcWVrO(gbMsKH5(_HLHd({|}yOgciXv=U6ThicHCCv3RddA3+{_Bzw^vg>}(c zr-2UdgQ{8I1r4agnnm=`+v#Gyex9^hE1(m8H4)lR((8BFMjWF@Vo_*Aw&Hd`i>SC95%Vo`wPlhuBsrNe zfy51N<3TZ5E1w0W^7@X0&l1*{Lm>db1sgix%!8quTR2+ ze|FGfhUwy|;YhA|p)r^V7-sCf55=!}8ThMW#j=8r8^*C9TxnR2m!1Z-1JtM$WhR&;>`V$(@B%pa36^PGwRe}&Dd7EVi$&?aVe&zNjPB);h8m=*4nLGfC(kQrXKALEp7%*dv!h>>0I=kg|%|-%jS8+ zeQst+k2VH~nIjla*BT>ly>{+w$$(1g2b9S}wX%?ila zw5aSrG@)?^)%>Mt1SF5uW{G?`(%h#E9RY z%*8Tx;4z0CwWM+>SPU~tk1;Cr<;({<_hHlEzQh$$i#j9k`{Tr-6}*=9EL%eCA|cY2 zSe5Pia-QRuy3HnCGLTTbt?d<^W89p2%w?H7G0Y9kAzD7J-%KoaVM7ABx~3F^Dwd1I znV11}ayUgW%OQlujw)aV^Ji8~zb~)Tg0@mxp^Tvtg^SS9cV{J@C2?7+sBWvI1I9P| zQs#>9+rA*m(D0fD=L|=Wqa$RgG@?E)Js;u}qM{ny^J!gjoJKTTV7z&rjVlhb*s6wf zeI**~`YQ8R)+_}43;i_IeqP0tun$K+i=FaJ{tc6pCL%E!D>4su)jo{5jpvK*xY^a& z)6$48hxVcrc4$t06_jrK0K?B^XJ;HEq!o5M?FY^eM+Me+rd$fZ(a*W;VmodZ;umoA z)13fPt-IgPw`o2g%yX?(38Uk)valtu?7V7!LO+oMIp>MKQ~_Uz3z13M+FM{-dlEhz zwj|C?hZXh6&%-zdx4bqj5Qk5{f8`RYRa5!(w#qZ22i}wA)&3Ny7FM`l*RhVmZW(yaKl4DP*N$O97uDCKmY9^3MG(M%}U)HPz3BTn^PrrBE%(CD%5z87W^0J8>iD}?YSeJmM z76hV!7DFdcup5K5Qd=6ZS_HxNUSfN8-Nwngl0AibH2~J{)%;iSCJ#8A9=Q}PEZdV1 zS*yf@5p%aGzrn!5j;7que8F4mT@N=iO}07S$mdn^X7ny!MD-E%9fQw25c8VGp*6^3 z+}@BEY$U0l=NxCfZRrB)y>O=;=k-F@)72C?_q&l+Tm%b0}AIY#KN^r$~+Z zj9l42y&|dC+BM%3rhRcU?yTY7QGoQ5t5L@Mm9WgzOtIA>q>=3laOpS2t3=kR3o9zR zij-O1z)!-VBXIL`p)ieBU^#?1soN93Jn~VxpVwf-!Jk$A%!XjPk^0~xMd^Q2e>bI{ za-mi!xhVWE0Sa9(^#Q7a7)2Q*wNkx6RUEdyqF$GPN6^b)p__2H`AP0Gi%QCA)+Uoq zq&8oVkhPnDx40j8eF>%g(ST;HTZyUtlq0u#x2DYuRf1ZHX1ARjspTEAPY-8s^>srb z%rJ-IiaW77n{BnXO@F%RF-`{e4fowT0`lXFx-=Kx7M<#aZ>j z+(^Wl?y(9C`ToH%cGqkZEddqALp-K2m@6&?m_7Cv9tPd}&T=o+is543a9qvjS6B8rmrGf+O{ZT!^zL|?yAz-iee`G$3{2X&fX2{Ljrzi50 zYgi`9S^%o2comm$8UIYN67!az1x|jtw1uSm?00QBS3Z%Sv;$%SJeP*1bfkwOZrBW> z3e#}%a|BKg3MjP^K#@KDyC--3@m^3IdA7F~_q~~Jv%Ck%F zHrgbnl6deZ{}XgmH0Q6nO{M*qsbgVukXnP;dOZrE=?%8(G?a@*?nZ?#O(rS*6KUJ; zg0tj?!;>pFV!rB0;&>|hWCAF!_1CVzw(7#)#tDu;57xIi5T*lI<#T;b@2znGD+u+I zy^=Vt*(0&h6J2{(3;E5vw5G$3z3A-U>aKJ0?X%cE*XI~3Y6hVaKiWJM8ie(H5^OE< z;#_Ri2!v}VHhz5QimFnjJ@M8-%oiKGynysC_SdR`RCJ?x<0;4DU)9J^*s&{#$fJMg z{R(!RZg{#iR)cJ}-N#17v^4~5ZN)~4i4)(voczIE3vaOKusy~UJSN|h^s{bW^A`e^qBYtLsVsPJi;|A={)edAXT*Adq zfY(81xh2-$;wR`f8})MLKC!;>)lqZl2F7y}*47cupcv2%M6CbvrSKPjB3mG~AlH(e z9c>JF7ThbMR{mzi`$JyMq1(~CyO_;4o7niRcfT1@TwwUxTeB>qwVTO5M$tnO4=Qxi zL^;dK&JEFizP#EU7<7=xzt)P$#+8<<7#p<@2-2y%!+8;ai+{e(=+b%WY|H-3vT6)o zI7GuSQfnbSMz#8trjy~d#UtC0|2pfO6ER< zAGu$i9R_!n@NgUX>RRM%#&k&=AAftjDD`mrLGhjEGgIbU3hu7EOFh)q(2zU75oCBU zto}$tc9}^RprcOj7*7;oJL093QO=Mu6A_v59UkXDoJzJN7Wbq5MAr(2*o}Xh==m_*wuLLLrGZ9qgL*EkdsKrRhM*5mJaKGp-xG~7 z=HNQQx!eZ=2ge^lKywG%?>^ng`#NMSKDgsb)fg21&&?{_$f%><^Hb*vc?ha!JD&Je zRnSb7ZF-au;>}l)54~7?df&(%J&QIrusV3XDSbZk)KdEBY9bwnPS5(4GmB^?1QCjx zISYT&<4LCpi9UrJ?#1gE+c<02C3m7RrQKU5E2_k4DoV zN-jBCnCVlAYydIGvTC5P0zz>jv*9MfHT|6On&KNhE zG5~tV_EvgT!XTTkAlZ#wQ&;OzPV!N-dHk-xh3U0rjE%s<_(1|s9h*8z5v7G`n=5wK z#8TjI?W#1FkR|iK>N7~`HMXh6js5USA@q0>;??IEAzkNopM7^#U3n5er*Z6k2~6F;Mq@pRpNK3kWd6WUk>TQ} zo)Z9r#>h_A)u|r`kiiX=@OP3zfnIyAFCPcPoAiD^H`(D_4t!;w*uvLqy_tNNZ$*>t z9dFx#)?FT3Kl24bB$NUX-rv0%dOG^Q2c5(E`EY2n*_1DNgR7TJ?*vbQaPc#4L!`J4 zK=FwcNsl*%pb$);DZKB_t;f#Bd|dQ(UdFwEU+;LH3qb&Y6zULFK6jnfabjQOg=50P ztV_vw+?!iCCEaJ0Z9cPaysJFtDDs899I0r7FH=E#)`Vy%Wjv&e=G^eT%2fh@yHe;= zycFXlv78FF*G`MU&RaHbw*JHSiXsmi^R9l5ZxN=U_Vjb^&bm>@Z8wSIZ}nM@k(Wh^ z7Yl}+qwXnGQ{6)#lHfd0e0@UU!#OX<$|!cx)XT9kIp^RXDNA3NOKv7~hGC3QKLE+M zLTkyN0pm6}a?YwvZ}PsZ4qWLBq+MohM39x@=+tvgz^j9j|GcXa@gfDgm~o3ohOFUb zI<+GG#(8#3F|}&LrKAMaw~^>LkF=9_+vFy&V%}2}o(}bYB0u>s{w>|vBn`VOf|H-Y zhK=?3M^dI2Gjm;I$HTnZhV?|*-|w?@4XUfR)!^i(#vw0Z;&()5pRuyx{a2E);>F?TV|3l#*% zSLW>D7#SgqNn^aGgFk}ObWd8xgW3Tai)Iice6Y>(^NSBsjQZ=+umdz99tvE1b#WS& zB+GFToerO;cavVM{yL-(%ezrJC zd#nizPbOVa^3~mM@$8T$QGg!~@SJ9NIz+R*Sn|s$S60VNcei1@0Y|egBPX?!2B@=d zuPeOFAlL6XbML zv6O&m#^qY2?&(cdJVYdaq1B>0_|<)Ds&Gi%3f@SdQ#$IUtt6*sC|TUK7RQAt<|1k= zPEzGn49?5#%igFo@%ZRCDZHBd42qMMh3BisEOsJ_=(j|N$-vlipqZ6>`tgL5$x|5y zPsvKQhKSx@SpnlElS&%zJ5!iE-261|lS;2@1yL<}$CqsLZ}e^PfljRU!{f$~Tp}Ls zIGq?Jj!pDkIO(ec)}F^ps|p{%8UYnMILIO;HAHF6T5v+Ui|04a3xykk^CS}{)N`!5 z=vlJqha`&flaQF2ESuBrJ7 zsij2s1GaGDyY9-S$iceN-@nYkUyY|9&k<^@PsF|qX74!Q@OJM9rDjmpwCr_-%=8Q{ z26n2jJo3Ii|MkO`B9uZ!)CU!6IZMxMJMh*z09()-jH;=8ppNr&`KWY zSt^n!iw3K!{wIQo3^Gs`Bx?6mVO~!j^!~)E5#-k;1_Ajv!)wwfOc(rmQPhj$;DhNz zpHa)zhX4uS(ZfGyb!AzYK5D+RJZ$qUriqyF-ky8m&WviDO@V97A7hlS9+HIe1%1X4 zhicyRN4F6HAR8J8p8#+C)7oq+vr4jFLICxBepLD5{QS-2FQs0=1mkJyM%s!4C0b>{ zSlc%>C9kL`^wBg5k^M%W}arm#WRE>;>GoSCwKTTtC^d7kN_??>uv z2FtRwcCXGr6`eB`n6=e0yl(Ng-csY|f1UG3&ewjc8%cYwEBlgske33d)@V6!*mW?4 zMgDEIQDV$*{W%mS}as>ZEi%C=>Qyr zX{piT%)}?vKw7zPuT~(GnOrDOMp^9zJZv{EEnrfcRo4le4Q9(!dHLm_ZN|5kVX5-I zc3uhg9#1|!R99oD?f{=&K=F2(99q|h7#stn2>J4bxvzNzMI)h($-Vb_CNj)iqw$1a zTHr)rgcX*^6%_Kno# z&#!5gR&Qh;Eq4)97I~S9-zCI1S(7zC$UZIx_tVrnfU55tW{uRfQGVW^v2}Kwy<4F? zx%+mfN9I*TW`NcRtE@A=WGc~WBo>99NAe$i?VC0VKhun;i&XrDd*R&PTBhu*)06v% zoiD2HfG=K75m5W)!7~`wp}L9KblcJW0v{4Hv%~d2(M^N|g-jIi8CV>099k$JtJSow z{t%y3AuCqX_N+$a+g%C-iog!?y1;|r^;fBv^eFpH$XYy-QuA^AThQ2F`*lzyy?gU> zdbZGzs)$^2+d-)vTWiP^h-g_3^^@pIP#zx=yrtklLqTq}J>SXhb?|E;qHdY$)I}I2 zsz3jsgSe;r%m;+wz3|L>Ed%DSp-r!8xComKxZJk<&a#jV4TyisFVoEz^3LZ~DFk{; zl2;qzONE5Wh+x=UQ#&!$73AK?DF>O(|!c=F!Hz5XXcV0U3ra>%fC ztfSyvZep$e{s3)&4?rWx=wavAv~nPk4PAFd#d{Ek$+vUH&ou8>ghJ#R?;N7IJ*clIY5i{MQMDr)FC z{RaiU!4}8Jd3cyKA_G@uM_It!r*{?*5?J1U1;Ima7Bfq1YenVR^vXGwqL!g?5ZxLffs>^4>gNLWGYf(H=3*64f=)bgoq@@ zyiSj%BHatL%}_W;+n(#__(c0#WJ71^kd4*$4`1hEa#Td9uyjebII5$q|CQhMO% zr+Bbx1_gHI6Z-kq64MKgezN@OI)2rW2S-0K*EA0udk>MWxcCBa{LWl{8?e)uK$6?d zFU~pg5TUf|zQb%hZ^vz@7>%l11#r`A%LJ{_;`1L` zSu5$D_PR|pv^Un0%A5Uy#J~plQT;~E>PN@2fbZ!3%tX)nHw>WVc!{1!F)X* zhG7Ue+5j{)74W9Hq;b=eTtmwA%DU?O_1g|x{EaXMJJKiioszm3+Vo?I=PkrCIZDeY zEX-CosofvEyuYLkJ1?T?>mz*fPHkeJkv+8Vzx`+&m!{R7{X z#*$bn*j;km_q`7uZ@(q3xV?J7q6nkSKv_>r`rMHCBSlpN!!%9$OK8Avc!4V(vZtIz z9o3~9=YxEZBi%v4L!ZR_R4aktMzrpTT@Ir20c;kvx9MYm*T#sG#i({!(%p#Dw%pmF zso26)>5uf&Oa-D!qNvMkFR=FkBnR;|rLEzRpZpB`Qn7mza5Zw^x=3JRwXeR=_-qBe z)U-_{Zf=t-@ZYL^2Z_dKZy?8y;SH&0D+P7+3n2jA{Gv@mk*9u1R8{?k89#B$yPvTE zJE2saUX=2j0S|Amt;gcBsN`34t?W+Q8DG3pcf!=c=(rBjcSo2fQloC*<5e)#*;FLZ zimISU+82jS$X}dLCvTKVj#vLC6K^`Kx^z7e;0Cz1E9*o?*4cm<$KdE^YX!OQveoVB z-{>bFN<8zyIZE*p`U&0f{BYpg6KXQ$by9d9pP#jYDb^xi%Xuy93{RTK{y{(U=F&sf z*x+5DjbCOioS*cI{faYjRn)4*ztB%dypz!}VQ6NB5GNp$pFF@WiY~W5bjFv>ni323 zM9+(MW2rAfqg5UFgnqVn&_e7^;piuaA44_^1B)HooA1ZEmx`_+xxIDBd1RzgzVUP) zi+%?BvS)3JQ?~)C5GdV@+HrwoeHU`RGTUirpV_pF?bKEhTSyp)i)A_aQ>_ki@;i5s z880hSQ!w~aT}bL%N$c^UayoM>E{{bR`H{F=oEZDN9Ntf+I@?@a=3uTlAM{RbO6ZJp zzg3{>6u%xapoYqKF4{F*@hBJf8I0GU@2c8*(KrB4fudWm^IgN%V7W3lq@h~uBGJd( zP9kx_wU=L=i~e_C(oIa?!>&WZ$9*)Kgy3FV*mk6&aPc5fxc{Nv4jmtNPQ%e_@wDmVh{`*RNFvr$1_W4uhx!U2|v1?su7*Jir zrq(U(#cJ=Os7g=`XZ$f)O}H_x0tz1Ic^yxy?uu!E;h>^|a@#Mxrkh`_N0wj~)~f{u zBE=u(8=C3xz#i&hdY0uE5e44~8`e=kxIZW1idX$}OfJuDM(Q)B-hf#<*z^75f%I() z5YPQrxYDf;Pv^iQF6WNeJ+nWwYx6iO+XQu~T4JZ6g&-$-6N#RzWb)%hI@9}Q#}T`M zoboe6P4LMm9og2)En_GCXO-r(T7W;o(CnSUTLc zd7ikSQm~yvQ#er6?}3^io`)yfs7^_cL~JYwd+n692)0FYQfl!XT7RpQw#DXfcy&wd zWk!-br`}FqKZ8H?_{!=mMNw!KBO>BY)NKiLEr6n#Qr+WB2P4N!n{4IQpMoyX3Z~$D zmgm-*A7jxb@3e**N7<#<7}*B3W?6Lt3%NTHI+CVKTng`k4J;~2sQRfadh>w6R*fh)WqIt5)~G3C+=qTET5mV(%jBwK6#$(B+{Qh!n@kZ*sqBUjrwdg zv(e$6r(&XsKt)Snc^SG0Cyskh?R<-xIM|Z@t?2rf`_ZWOwk(9>#8fMa1NdHM2~%dm z+oBfaQwah{U4EVQ8rgzPg`Zq&2%b2V%r)vneF7T^|6G)&Bc2vmk*)K*G!>a6Lg~@VidCg{$J15+yUXUlfz?`c zd_V06eBCRbkoyNCpZ$`%&jMHb;MejGBNM?teZIxpVr;b8lOZ1PmD+rX%MPxqUPXIl zO{(B*?Cvfo$?*6&n>$?M`3;^ODwW*cO1vQ=qD2)VcH*T!@8>}4 z9kd%GP1SKAY^G%Fw*lXw4*klnEXk838vaO-DLnRI&ZO^uqtK`bQy-Oq3*wqwLcPVk$Yj*I@StuZQ%$aO;+;WnQVx~ ziabWoS81eZ|3L>V*1N4g)^jX@YkU~L?VJ9jfA84}pm0`-ZBY%?K<_!%*L`#%n#9^v z6RmdD-J|y@6L=NL)?ake1k3S`Z5#9EFZL0vyc$y>lH6sh8%vnBFut_?4R{rwK{xnD zbo<%i52B$*OL%5P)Qm>aHDo0a)#gO#8D9*qYW8O zsb*de5K#251IK!ZcAi=K6Xl^6Dc$7Le|U5Sfb{TG-yAlxt@4<_eVnT=+kwpZk^{)q z>#N}h+%939WG)nj)@Lcp9Hj+8!l#_Kx)*!6snH5nP}WdeCxIO#jn!f-9F4Gt+vq#w9f5+w>q^g#_PQJq1Pi_ ziOuAir@x9kSD|Ub+95~lnoQdz6mnboTzGD}je4Hz=bL-`#6{`IISp$tG0ZvPd2r<7{=cA)dwiozB%w~VsbJY zM8o$SUdtDEBB!cf5{+WqYy~C|V;3;LEyf4Uz)dQiPs_FBB@bK{3h%=ZOz zJxB(YdSt%$<*T32CkMoKcs}zJGs+Z;J(I&uPt#1Gujpta3osr*d5abQr@$s@yqJd= zX1_&M=ah}aT(4aLjMmmRm0PslKjs)>oHeFXc0-`d1>^Jxi0=7#kc)mq9-2fR%<-;i zP{;=HQ7Uc@!3@spI^)cP+{=k)%W7V?F?-Jk@X)Fz3of}mbGEM_1oR#^KyGL6D04B- z73b2h^z0i^&847xH3-b)Zf35Ob>GfpB{#bn&%&+Hj^$qT=3$P1>+jffV@IuBLaNy) z&Dhn=ZyJE$XPUS@t6KL;%hN;iR9jz5YbM}Je|-u%45$@#T%7tNY?+RQ7)Y5~vyWKw zSc}q9&>ipd!J5H+Sr_Jr5Ey+#qW+z?xM|FPQWcd`0Z4xO%;lW1$hBvX>dcTYD7@&c za9i$s%!e~R8|yJjVC#7}hklZI1BZAS*`>QLeAy{xlbizTefa$8ufEE%HZq>~vX0~U z67ZV5HgW?B_P@q(8^_4IO>nJA7t=rc=C?6ns~y=B%!D1IxS2`k@_82EtJx{BTx zRuyZ2VX9`de0Tc!r%jU?#ooBzmGPkKZ``I;ruHVN4$XE~C9J4S67Svgi{lhwv>w6c zzp}CkAY({B9i*j3QZnE}w#;@S*d+HHFCa(yHdmKO{lV^~^z|i8Hb|ZrE7MhsZZIxE zfCMA^QICNf^V9l+2>^d#$TR=BKdwky$W#`U-$A30Yij!I_U2vwCDuZOiekE|a-^7- zrFLV=D<7CK9*3+M-9&hWXc5co zH}UJj7ip?12}y>KuA{B_Y9ks+5!@iun@t0Y80)__ zPc49%*pOq-weW5v?_R$L3svw|b)j0Su%=4qk7%kE zXw6%X%S+?!aAuv!?6DPr@`2w3h__7YoPB;G{ned=$#kg!uK^;$pe&S&^>wb~&l?T8&6~7;2Q94id1v5zRogp6+F>MD+)IJrya+Slz#pI z8`+y6ULW1Itg~pQF#3q#PQ}~x^l*nbmdIq-PIxw?|H>ww>uR~aZoQLqCSc3#ZvHNa zDBT+P-k$DB)w|ck1l(H{0*%br7z&~PYrW!y>H4A#Hz=Zjqg$F@hoyI7Wk5aVYNiz!^1 zDb#>{AEe!iQTlwAipY9ld+S};^-{|PY?OlIbd(k{DJGbts$!KVwup8W_aE--(63NT zLJdu1#;`jLWnXM0VOm=;zzKS`NGkF~|IS#$y3z^(4{Gzlz?SA3yd!S#8pSl~5TR*t zYWbsCboB*8qal>9wnT}k{;t+jzloKJ?R*Bn7Ok} zMc+y)a)7qNZ{)5VR$p`-3vRchoXyEkGd)9Ei1&Ky*ykeM@1*}G5>;Uq-)pCsaV)hY z#rt_ofKHlI zQV?C%+vGXz!y@|wDs_(q7YrwmZY4Y`>zOZ=coKXDkJ(nD!=eP9Bj&pAT z(mp}Ci=^oB%O;`~sIkunuz%Ebg@}RF`Np75Rgw-y_B~4G<%FB<0r9S^s-6jMl=j9)mf) z@7`afiL#T!Y^ZrU!aL)a-8YcI~A6tn!37Q>UvTAZ`lsD9bsXf=4k^E3Ccg9 zz=tX!+p2O&$*yaSbFP>_;64p*2Iu16sibI1>DM!Ony1$$f5nnEZ_<^joH?mm-O1iP zHsYAew!LyLz9&?#tgn3{0Eo0G=k6OHas3!@?6&f7rz9Pi=lIvgjSVY{h1qbwItJ8; z)wb&TYtD!SF^wTl-gDHb(tpa)nmah%|BC>KIWrbQo#Flo`<#+R;buF4<=XgyY>>Wk!DYs{wB5a)vSf|VXX)q>ZUL@2rYcJ6I!vL{elS)2w z+~?gIqAe=3R^xiKI3Y;m9!CP8`$Q45yG_IQ^6!!TelTM@9KPn-k2;*%wnXD1)AkCG zc(;$PE${iv2CMM9aQOs5=M-2rggm(x)_%*U~wh`6elH9eR?`!@Cu+i>%)4kS^2{;rE^+Ji}$)qrz84Re%8SbY3Ccg@k=XrRE;`32nq_b|Nef{flf zyr0cbuuMEbzhrv1uB}NAX+?>Inv2@Tq>KFHeDY7UgHonJs;BsYO&8tR>8_kELl^`R(h0;20;v05KFlgy~UyT91l4%yk0qs-1A66+CNF zCQZ5R*96+5-+W}aOGRx}JA$t1ue0+V5V{q}*54O@;+Y64cftnw5{}1cSl!cM@2`1o zNxV*Cn?)Kn+D9F-FYzcP>c+LaBcm9*1;4P?FIaONb6xFSZ2c?afEjs_?b~Aw{oY0x zU5f+!@85y+@7P}&IUo|20H~8n*bkKxIsGs@?1GyL%W}B31K932s6YIPC0JyRqWDw! zBIieICwH|w!`kmQ$Mola)zh67HL5+{6l`nPVs%NuNr(9Fa`S2a@kATC@cHbphcvgMfv8F zE;n*n``Sh^Y%z&lXQ%X6t?W31O3BCF)g;TO02!SYrgeshUqP0)O1xCxuU6i1tu$u^ zlcz@+U6#uVIMy1R{F}R^4qP((%_1GO`;MIXV2UU^hP<|*_W9CwQ?yR8vckHr)m?W@ zEm)}jp^@Yq%VUBY*PDW9{e-|$xFYY*BwYtHL}lT7UOVKpxWFmTY5t~6tK^7Z@vt+Sh`0bQV* zqm=Nb|~Am27j}-DqG*d1vRW@d%)!<#!k#I z&irz~AOV<7aAN+;Bq2ZfkZ|xnqhXluK9~Xk^XIc;J)h9sme()*`Q;Z_bQiGPiL=PM zU+D226BYy#8YQ3R;+I^Gj7|>(^IgiLeU!_AG;{J*e7gSR;1;zW~w_LpzU&CeIyx=3CieEd(ZvW3-d=uOJisGmDuY{?9mW&7RCt|8m@P zCZ3!2J9S5Z0o9*G8_79RGbQ`N$J!6}NZ{-$Ub=LJvWS^#~a(U)5ZL3l4U}saP zLEbKkA^!wkBvO{$HGZDEC`X9bO|Z_`^Hz_uXZMf8w!G%7;sz+6lRnKpU!2S~ME3ra zr6NW(%tW9wh%7#>a<5YufUzibzoK6*c{Y9q05o@R7Z zrnOH|;`hfszu3g3?Jc--q-6Cz@{e_5Ia-+GvwIQ;mBxi;o^^r%Z^)tml6c{9%BsQ3m^)KR+f zuEQ^Rm#uZvajxrDgMreUyOcFf_%{_`eah)EK}{o?Syf!f@CFMaeqFMkMbs|gBMwOp zn|}Dt2n8MJka$%>IUEL#8cHZ#MV(1x#O=Z<0>Hexx^<-NGy5(!h5x}(pio!q_C`EC zQVqFuLpP*tuG^7!3^J-73xL-j-1lg=Y@KBMZ|IELm0k}t+c!cd=u3620*phdY}qpF zQR(Tuik@?<+>yI&;cvazqzj|rTu2w3XAHxxNFGR+Q#a7c<>zS9(K~k*orwbb3SWtr zAA|_~3P^1uJhYO>Gir-&zY-aO5WoD-O5BpAfgD);ML>%%fypG;-^e_Zb=69>>~}0i z@O*Z~64j_iE0jg-H(kXdjV1uAUl_L+7zMn`l08(cOEa^90t>8TUm(r#J6qcyM~5%p z5zYFnMAtt^1m@*JY1xIy15cuSvmKV2VVS3H9(;@vzrdk4Dp)4g|PJ_ z)IM>eoo5LeWxX>NlWafwjsuqy>Kvk4kr zO{NFLq@7iHzK9_*ONrvNvBCH|Jtz<76{n9?#-Xbz!6b=4IrYA=5kVV3Mj8ETeN#6i z><>HeireT4swfCqwBxDlqqsBy2%+0LTuNeFo+~m=Y1OUi98ZbJ2YzpB29jt{d~o}= zY7b(5dWxp{$Zs47&h89Uyh}G_8khTGoEd7D)qT^$LkA#!Y*T*90*-JNva>}6o-WWC zU^TZ!;OQ)Cd$x%Sz)$hmE<(bwkes$o#W!o7++SHhQ9%ILsU#P{%26z2oV&;wIRgd` z_}jR1<6kqDqpzAnZn8`+(@yS5H0L%CW;V0@t~zuK3J!@X(2ez&Ccq)-v*SFsWO<_< zwbu7izVc1cK@|#(>PFhWuM7;kwNy?AV8(fo*fnG;;7*U@pYX7BQ4AuP;a33h&^7ES3SphQt*2o%{U2&Gxmi5{tII_&p zAx{VN437oi+BUltLJFEi#fh7__X%pdu7HE?tDw;OnMuOZ!!W#*8KVNd=5wH50)IcP zRLcNpS$Vvs9wL6O3?oW0>(mc#b`M|rRn@|Jh2EPDDZu2tyv8GC$cs$k&Ye}RqCzP2 zx}x+Q6xDWfVYv3vGx8PfzdwJ~xR-A|`FtCezHOT^?Y}vcs1<3%edHdp6+D3+K5>Z{YHGUDEYHz~=vM00wf;U~NvVQm z6vqxG5Ag;dHgn9S%VUszZ@&4b>5yMo<(QlGXwsMgUGgP zWbX}n!z4VY^uovB9@X1mjAwiBAs5p(~=l&Z~0 zXn=^Y={M=M@Dzx%V~|W|nLVr>^~j5O&u5F}*Ge_JNyJd$CGehRz7eIb1x3D?7>f3( zcvfk;%4d#`OqP`UcBcItszN1<%Br-tU$0rdgMr$e$*T=jd^X8+R&U%?&!%kMvoT+< zekn%^F&TXz!wyX~&ag$&ZmHK>^#!sihEnQ>9ZP`opR;siP@?>hi6e_6`8A;Ap}A@S zal3Z(qShH1B3qa(Nj_WzqZ)zqd_T`L)JmSV7K?2x_&ye(Uf#c-!WOKA%N#$S$E8os z_vLAu$P;#0XgaEUeqq3FG~9c7*9t)rfA12oGetb`_oxQ8AO|s{e{*>b!w*B-*Fz@h zG|zS=5Lw;88o%(<5Z)EynGcst-Yii9=MBQAlxI8LHFb<6VTteBb>|)jJI^A;mFOuL z;i#;o>d~2OF}lbfMaqEZ(A~)0l9pKyD419v=eDi_8_~CtztNlLw~){QVW}%>892)z zp|n~;MY~obtYRUO+kb^r7#7%I4nCV3`x}5D(^jQ~o-bZk(8FMc!YYcnE zz;T%dW88T(_@|U^W!lcq#GCdo>~of?Ja=)@ongn9O0GF~6||>^Q?n?>t9);4=O2fv z7=2bycYTfVOGHPVhQXb~w%qbqwO0FqH^#_9CpLZMuwmZ*hs98R5q*j-v&!J%ALJ&b zGQbvgbrJQbZ3?Oll>icbaT^81)X^GK&sd;}Cnq3wMiTVaBA?jRi zO?tz>7aa_6lGvwPWg13z1A0bes2|DXolj4c177vd%}gDYvX|Sbu7o zTw1_TvyCyn7jtMz=kDc{+!i9YsnA@^d!^oRBCS)2{^jCYk{BC@k|*ytsYRttK=XNP z*=p0v(DEfs9xQqR!sc~h3n$yI+ZSFP+QGk4U@#w3kVh@aEWb$cT{prv`>&*=>*?QH z`^^8~NIEokWZ#c{ydoH_>^P8l?Sp_QOxQ-1nCoeMc*C^};{kNDd#HDr?Zvs(zKycd z%U<%KHXXRWeb)+$kd6Jj>rwNg!0d3&HE9|_#X-xvN_$nrGT8%xLsaHCZK?ax%bS`W zz~=b{x%PjqB}lJ~)ZoU1zlX!K?ckUNe7*5UKLo z;JLR2NDg-H(FqQy8w;Gd`-n+Zt)cA!EAbI?Fl!B65v!WPkhC`17ysZz%mr`!@^Kl(Yn3$kUJff!_d@}aMv>@L z{$U!@m5IX8tB_#RAC_> zwHL4c$O&IF{*ec5x0-8AiSGdxJL;4qS}+g|t86>jgv^uPk6-0I18D49JrUX9h|;UP`Kq9!g%{ z{}?d&J!*a^`oslhQAudGsnsOr z-0lglfyz%%trTI={_(Wm2`6eV8Bgx=MyxVGR)78Sk35u@Bdk(0H2OZ7X0j5W@F!XK zo#3e)w3hjXW1OnXhQaB^^?5c;?V>|+?ViN3=^Mos^IFa8D#*+!z;k?zEHVv)y(&JT z`GDiOmPtJIhM7a+_hbB%65w+QIxeWlWe#A4-y56!?QzymRsV3qtNcj27g!f?1ninF z+VvTDCIieRn_W`N5FyDspGd#NZ}b-55M0U1cHi%#1K!l<=@5N2t1i`oVIISao;~@( zkm(QD>egd6S)Y1q4wKD}a2#9wbEX<^ny^cx&Rj%53cI@gz#h)D>8H4#{$ei*29}geExINAd)VFT|9xb4@bZM+tH?wLJ`p{_ zm_Gq2U`91pl;Pfs2Tvz*f?pU+#1hIi$ldDZR+2RYZY`o`jL-)OkLW)3>Ih@FFSqsa z*(G)bm}8$mYqN4=tQR4;*vYQrlaWW*SJ~$$2q|(r8SEj@Utn2rcq??lx~Z&F3K~k+ zvBPT=s_fo#_@{Q}2Ch}S>u!7VV2?M#eN?HVy;w-l4>1mAuG6UqQ3cpCVM(C~7;_(v zng`kYK9dwkdlN;Wp*$Yo$bZtuOjCJ|5HF@mjZAG)>&frshK;3b69&^YK6B!d`MxKW z5a2`(V*2Qk$S%i$INHAb9&2wQJRJonREp_8i1^7-2+KVJ)R@Uc6Oy`iJ00n7CsYj! zcQf5_CZoiopPH z>cnpnE5A$y5X(|Mnifcn)S20~Y$^ygxt zLQ%n;V;trEcRFH9%AM-0Y%MU5Ne0pw@{*I%o>WiVkDmGuNqpTt7G$jfsT4mC?T82T z-L|GlKxV-jGh(1~#7~D*ni*8|9%GI8{cpRF?(M*rjc-xVrJNoFZ7q{0N*eO$#mu1j z*g~^*uL0qzO}V&z-vF0n8*oaqZXHXgC&QGQB{w_l$q&3%Ffho#nAjT`aA^i_o?lP! z)<+BHY_qq3JKls)nCly<&wo2Qk83~{ZT$WzDwp3x0LlM#L@-9$nGGAMj}E<4|7bRcp<)7vAr|u1pb?s z+J!YoBSx+RL(v>+aCWVfqgw$)1Ia`)IUjoi99C*Fz{4;NC#PAvp)l-o9YC}N^krcG zJ^V%WPb~E(`-0D|hrqO=@l}3_`AaOGnpgiW@4%(czvpQUuMMiuHGo#~8kOGwbiyaT z3=mkXGu7sc>ziK&l}R!aH944hfVyr`-KJ;WC8!oPf>+oGr-wDUx701bGtK7sa(?wC zMrqGv<$AV<%KUFAs)}O$E)O%+MkHuFJ?`NstwepVe8zdC2pgHvCXTc&-);01J^GRi zxk{+vf!rhVpQ#lP^g<+D)&=h`t@Lnpj?MVIm|FC>2(}a zysFeT8EE&_*c%3u=5r}5OlQ5sBe$K~jOJf_b#dDA?BJKCdW&6UC9tY_sVFoUGn$Bn znRH12R@~%vUJiKy_M+P6{T}`5Yf7I4zV}qY&xGWD2!Xz1f;qtlL?- z>&z@N?%$uy#I&q4n%(Q~`g=D8p6(1mSe4)V|AI+{D?FMZ>Z0l#P#vTXbB#uuuIUw~ zdnb4YoI2@NzCQ@d7YOT>&<|NiRdFzi76qcO$?XGO-9=@!O1ZJ#4E2})-jCrt0KcPC zaKg$peOTAC6pU%lU^u3sO* z_;Fm3m-Z?*UodhhS)sQom41{fQ=ZMsv-6od9epd|uk_Mn72~X!>un$>$UqdMnzG~T zf5!{X2)VyyNVGqtAMVkNMEv~LwWr6|@eCnYArxWV;dRrxK`ij4>~7|9 zFQDU4?oBkCEZ5Bs0x%#6Ue3QN`>06*rRIvIRS%t6T4q~q5de+OaMdQ=9M2q;mOpW7`3EH-V5 zdch{y4V%tAngO1v11@9OI9{%_Vjn8CgtbltLjNuCA`#d=M+9wMeaS$EmtoAPSawvS z7Ji4jlOmGrppn_HG_}H$&4wq7C4WulWg_?7%UHJ*k#X zlXb$HH=aGGaNP^Y2S%^@r9{1=78CIkq8FgF?n`e=aR^-7yU2Ygxtwq2Y0xG7cUef5 zBg4+1QdvL<>IYrjv#mJg=!33~;W-Hh^1rnpBCkHvHtfV*j>Twd(ymk7l6~R-QEj?& z@<%kDlLcVZAqUo`6kg9;OD(W5;+DT}mcxP9%rh&w_t_V^zrPZjOEK5uIO>!J47$ z(7T81mV1@?kv}k$a^jTIJ=JFr)zw&eN&}w)qPnQt91` z64vnDDqym+HEVVE7zcqwzEboHH+#O|XU~k)-bzcTdk75F`@H;IkI8oGBhvjU2GF1z z7>^S={+AfUarF8CxSD)Pr`9%9piek1$7$|7yJ<#DW+(R`#=`g1hW?oGL&~Ml(%)5+ zx*+*HVa|&N9@NHo1EQF(vZe%2Rz7|$ltAX%;9W`~j|G07WqjeL>S1@YDKbtd z8VV(goM*J@Mqw*xma`KUF?#y(ViuEGrtD z&Z{iK5~g(TY%U^o$f4ttgVp=E#m8UL@Gxc@GJm1PA*<<8-Im)8{5bzB?roLz5p?L=TTiteo)O6^Was0N1LP} zH1(>>U@H6@Ot8Bj*_92_)BdM%YKrQUhybV&CpPO?deeV;t<<`jBG2$U5cO9QQM_e% zEM=?5mYAKzfaGG^=v{hOK#lFBMk9%EWH1JQRcjbzq1<(g%(-?eGu69n9{P=}zLq~) z+t_>UrEEX9e>d?VI`cyNbLvdY+=fP;ka|(Hrz?XITN{}f69yO_#oR>35;`WQvWO^77dKOJPqPViX67NXv{lT2aKU(nA z(3jm(_}Mxu{mvxx0|(>{el4KWjO@XG(PIf=XD*DsfEtdri(ieDOVaSITL(tLwkhb# z9DLdL-hvo(EHXGt8UexF2NSL86q#(j6hT8X2i<5qPmNSZXSeHP$P3=s=K`_JJr zvsk1W`@^U`K(tm+Yv*zyPz;&zwbvS%Ci2T$&eS6TPgpC$3n6FRL{N28E+tueO^q*i zGzXI!e77JYvy?_H9wrARl?(AqgrNn>>{ewav1YI>8IJWev(!d^m565>LhR)+>iE4? zQ4y}Ip=;hf-i$2FIw80vy}aR(!P#@W>5S-h{lZzsGXmK`yIEFu$%*mADyoKj41L$S zOkz&I4ASRAqCEa62$`r&sm`9T&=70r-+r@{GJKi?d^atLXmHfK3m>v1#WrT37rc^j zB+&lCRbYc_^i%GJI>%xRVW$qc_wcKy5Mt3^(FTbwdk{K4#VZS*R%;1x_q37zuimMQ zhx$*Vtu?GkwrR2mI)&VL!o^t}Un-iUJVoKu^sRs&{C7w?AkUL9#tIGuZ95upyLH7- z_66-Kq@A3yny;&#o&5G2Nc9oB@}{{2GYh1Z@7TrSB}fthr54E)XhNE?-3Vwii_M&7 z8+S_oq?jst;CH^k->hf=5Jsm|0gmkadc^D2m{q1#Ektw?k-BA{crG(zpZn|zm9`p9 z!@W&eqUDLm%-h@7fbn(oh>FFIe_^4IBwBm%eZ`$uIw+US&+OeE=RG={9*a$Pkd9Q` z5DlB__oFo>4ZR#Hb9do7w8RX1`b|+DT#05y zcQJC3sfMX=x8F**6eX;{G|nPg`~V>;xn`Ai9G&G5^m*c980F})``!zR^F}YQzI;B2 zZS_P-)KGkNY#*#`u!?@*(%gj2AUJt*WfNLa-U~?pHfd--zR+!OVIkE&GsZ*m0AE(R zwi?~4_nX2t%AeoOl`q#mV zuaN7HER{_bWP}q zXy986rN=uijnA9so%iKHv0K^csdq3gYLpw5NJv~3!+!hSnZ>J}8(5t+Din^cImb=O zJ*g81n^QSOSc4>HfD8%exzPO%Dbc3Zjk25HkGgxOwCY1)O}=wKmNS5uUUd8rU^TO!6rVHQI^o4NH4qV^hB2dv3rTVA^z@ zV)1h6(dLZ-4bX#*r9qpcu!M;e&QI)oMvu#wTKI-F}@5V3!FOG*e z`#Wa_vmo9q8ejd!qRTI{r|6cNpZzd4T<2?_Af9|C2)LP_K{4o%W||iC;`ChLz|9Gp!`d zHw)$5Tg*Zz0<-wxa#Gx1QVJAS$ZGDdS z`H!#Cp<3E2K9d1=`@SO}J@o74*^fv8)r70t#652e9w0Ba?!qaHyCNFILMTWa1R7%p z?GNltsY>SX9mQX&EyCK+4qIRF^YY6pxMci_Q)&T*vANh1?tE}odb5Klt>`viK9)tS zHFwL2_!I5^!pyuWXUeWNOc`{WGxSXeyZP|Hv;q+8f<+<`L=kiv3iCsgw`3rkg z>MgRUtRATj?nWm572nhI8>UV|NB)Znjhp7~N)l-OT8ElcsG@5p4wc0Fpcn|R&}hn) zcl+K+&N~NP$M0*b z1E81^QtH;!u9cGYKcqQNT-{(&Fj=s`1lAL=%U(#m`-@pW5hmx(xI?Zd-mn`{6yKb3 zR$NKP8_rzlq#xTaCn+H+>3ie6NtJTK{|G#q^H1?}U%=XR3Zm)vyjOK6+zd1~sZ@s7 zn&n7&rdQhp{&FPiG<^#O9?xYfx>w;~KIVeisA;~T(7-pH5vh=T?aLZBM75JH%UXNg zaNGA!s7-=zdc=5|_&dc-{9Vg26U9+>i*$mbB?7p$Tcfb$UZi8cr)y z(sCBn3P-Vn6(v6Z{k^3{J&DeoeGE1t6OZXANc|AgQC|AxTH408YmR`bOhF3P%HB-L zTS2Of(<^s7biuE`cv&nhW+g!ein-w+Yaa{f&@dq0=!n7UU*us5pICRZYxLu?F#wPh z!~(hh^oe049~XCL7RL3wHlU)Pr(6us)FS+mY$Ml43-jD-z^Gv5G~9ajjye19z;x6w zw|OoxiDqW8v|Rh~a0Ct_^0sxzO`_y342c^8QQJCD?rDf8mL1d!kvf`TbP-zrl$g`( z!!YEpkFv%2ORUKtGG-xdwkfu@D|+y?`1Z0lZ$FiD_MKtz!qW`KBBK;dFI4_;cR8m2 zc1YK&xjqW}m2ZLdyJ@!*$)oo~!hTgQ^Bc@|)+L>1N62agl_p)QpC;fUbd1{5G5tJYrHzl6HzCxaJNhOoF4N*nKC^)e#2vIYvkzPw`Y2kZawNL@ zJ7j6tt8WVpJVrB*iS#<>+N&81gND_gJjsY1Esv4UKAN|ZRt?An&CJXAYQ-mJ-sM|kcM~7`qh^uILCIEuU&)mIX@sdE$&r;lMNtu2 z{qhU>^L6x|BY#Q}Bb1{dXYE#2fI$S3f?7}DT12_u+f_59`#;bDFlBsaz9c^MR4(bF zUej>HIx*IF+%3||DnYQukH-o2%7q0NmJti?Qa3U*#n)dFIxMxeUD0dA4-Eq?Em0WR zL+;^_*H%CCR-g~bAj2(39T5+?=fY|_(vf9@RkL!t5Iy5WK$A#8)`w0o@QYQ?XFOSg3IlM|iEM z*rl27TWeK5Tf*ej!zozovBn*-hNyYnK!A+aaV~q$sX2m%KDh(UWRqL;r-2Zy=qb6y zo}zaQ8OZmX^i$MGw7uUIO7ni|8kMS8;*=KP2BL%aq|I|?X^wy)^4wX zcxMy;;y9T6#CRT*wsaNI^w%{1a9+VPO&6Y%3B*HT+mp%_{5mnXS+(aE6G7EoRW5nW zxYy}?xyOUbuyfXw-73$9RD`eL7^SrCN$9qu(0ITde{OPHZ`6=C8?jdn(hfwQ*T$IJfajcsayMPmSLIJ9xz=sI8QL&-hcJ6wS@oTH*>fe?OQcXuy zRw|A^xDtq*2x}G{CkOSD1B4KQlciGw`Ut>>JvF6PERRBo>O# zxvu7DA&%3LbV5+bE2g}LE&;SJkm0E`7bC{>+2k{u{;F$v2)iA5l@Q?h93*E82Qq@Q zE2XF$S68xicEFb0ppRjMFN1v(CLklv?e@9A6%XNovj@M004&YN=)O|ch%W}S>@Pzo z6)85fmu1a$cYeLCwXf#dht)DK^4+{(Hvf|%*>IH_QwA&=TpIW8o0uO-t}`Y2k$t;; zJJ=B28~r1z0|Clw8<)^vmdYm?LeX&)P+I1+AHAly3cJ(GlQ{YrMt8SqQjO3B0zo=| z%Q3Q2l_eSIYi&OgoRrMP^9fm{y4JIuS2~1xX^*UG>?Ah*OJ?L3jIyXcV;AW5wudpk zE`d-zol!xbm;jHyhunWV;!=|TH{$GnBhLPRhd8TrwExUU`AI|Ego;=M-?~HU@0s?( zD=?F?34~r*H51HCML%kIr71vU*lWEK;ZT5(Pvs~zl?E3$&f-_fP~f)iI`!kD6nF(FCN`h)>eOw%paD7e^5f_PD6@O07$oGZExQFUw zc4`ZSlHxSc3!Gszy}h(lNDcScLIk?%?|tZ*da4)a?D~DaL>2uwct)vU5U-@4=qT>* zS)&wo4IY?=pT7#(TJc(!2)I}-fDUI6U?=Mqx18Gg*A0@k4AT6VW$A~Araj2x{w*{R z2`4f(jW-B_u+kis6Lntu0rj*KSHs3Ph|*d4nj-UiPg?>|{BnQ=-)6)t7u$b^L8=Wd z=yONmp)ZEW9D3H&DQbxs`Ve`^tf9TI4H5njk=E)CGZMMfG(nZKL z(V6z+pB5JHlo55S7z$dFgIb(+F|xy&mox2^LfS?M{!%}mnPob7$DJowj%b@(s;|h* z%pcyNkR8}eeEBdm&4A**P_?DCCB8DhBWg}pi-3~!|m;?sQK_vt_^h_;;k_=dN%+JZTqsX3RYYn`>{ zCwH*7nDT6tL zH+C~cjOr^dR$n#4#KZD+!8o8d!QXMH0*Ab58WhUR9$&Iv&`WMTg$w}?)+2jo!LQg* zPrUDiWZ;!1+24}Wc3uo4z%ubD#pAIS5(%6F+QQc^JlCB0xNt)oXE*mxak3#lK8OZxd4loVLP;;!Cvd2ohgy-TUV#k@1fM>>TQ0fQyyPO!#9xB*2GP} zuw|O{nBQLI2|W5j9_DEyp#$WMukmSn_NEx_X~KPdjNZ~YE4Ho7J6V|?YxxIGl*Hr= zSEK6AoNu4mXYMQ9`o2yNxwkkQObwkdp0Ny(I;5}&1dJ}iuMW_%M%Zqd1X)Po%V{PF9k7`Gp^u+hjR?efr8jE>WoCT=5KaMI< z;s)}kO<1{Z~2* zb@oosi|!MLUgnjwByrMPC$Ly8EVgy1r|jTt8IbCtrBd#2HURaL~$3)HJ z_`Q^68w!1hIv3xD7W1usPCB)uxkwPq8PREDZ&`boj)!ANf}KzQV*c+ z4sqc#O5sH=XcscLbzDEQa2{kE(W61S@_4Rn5Y$dBxN6JZuY8K6@+4aVht7*WR@iuS(tpUXxOEwZYyuNScB`>70jl}?k#F9_=A@w^$ zD%cDs?0k(LM)A)xSelX8gVwxzDq5c%qL*MVk)<(kvpW}|vdPUykGSSQtr)y+utz^? z(d;h#!lYhyTeuUxNl%FpHexF8m(}Grh~LTMwJ_9fGq9widgY_8gv4ISI-(C|pdw&u?BU-NXF82I6te)19(amUc>lUAgp% zZSI6#{#9#|Q;eW160VdBn1X=-*5HqzfR%<1S5EGw8wrt zHkD;vEfJfwSHoCai*;`Fs62sD`|(s0@dyQy@H?-|y^4el=r2zpxBdM^Q(XI|i5264 z$8C!SLMD|6lm_E9Uz-jiPcI;zj<)NS0xHX&kedxPht$I*QG$7`-?D(5Z{EKLCxog@ zlxFnYv1HQlYOY?pF^v-#hNkk!V7XJb4rLQ%sFKlfm%EUV)Y_*UbRe#?0igRrX7%00 z*5n-ifDd0g4+dIf7~S8adjnpH% z!lvmgByqns6(0sopMH+lSkt0VuTuV_%3L}&W5fG`-E)Icqk|kS$QAfmA==vab>3t& zwpo%30uG-?rOEdt6zqw%MGP@v&1Sa%TJ?W&&A#r@X)SB}s~W{yuIe*KSw<_tl*Vc6{W zLSWAh9(EaQQh2*-?Kt!&y{s9X^S7jh5AK&IG zCW8B-ajZBl@7^ojqsq}ix4|&-!FyLYP0MB;g;0!Ys^>Ku<^xl_;qd0S7x#JJ&iOvM zGIwBK>6H3fZ5y==(I*2wZY*H?mmV8%3ad7A8YBv7&DTE)hEC{co)9&@50P897VHyC zvwgdFn>~J_cmCGk5v^oOb^y^m=xDBx)gFQ9tN1Eh;r2ZDie)DMUbG`DwvtB}aIGUG zTliyT?#RVi+!I8-2CoL0X{@--E~%u$BfxhYal z0&5s`C?S@HAJm4U8w3q2`530|Nrw2nS;s@P$pl{-O`8P-r z3#~g$zQSqpm5^pxf1W0tf>>or0wk2ln=v#oeJWjGRT9h@t-> zF~%kYL-??d)li*?k9Q#A-JxEBBJ!%3cw!H(uyW<4z=b*Kz&M@OCQxQ@?!{k`vvi9w zp2y4zCnB4K2)K2adC%*f20~AiclBfw7*|(kG7)g6_53X4=c<&Oth^g7Cwo-2D)R+nQIp0Ey(PcbU=iNx!!N?Ex% zKlLiNdbr)c#b-@Nm>T>jZ8^uZXEGMDX1^R9H>H1gk8=S?sVx10Lr|jzdU@M@`hSU4 z%bI$b_{289#h>HRPC!i3M{%ul)`cqUCR%>6)r2oQUeDKhjVvsWwgAb32P>Tcm1(DZ zGj=-x%%Z_NFk%msFVV5tK2t;}To7|S=Pr}y=mjjek-Z%>Rhdxr0HuK!7&1OW?V2?} z4=Ki)CfsQs4+bUqpF+(UO4~)ln(@3Y-9C-o@w&0qy(YcN0WTONA2WTqEJ2aA&#$D! zF-n^1iL8p6HVrxHsp*_*QHd20hurbQyL-#9q7)8aZ}uQ*KLFX%p$%BWSs-`aGh0uc zMC1?=tAki0OV1aWRLF$9dfQnL~)vzMh zH=M$#`V8CD6^(=~bMjW+qk-ED>BXxmI5+$}YZP&DWdUuZOrO2i85cRq60bQDuk(sB zM^ZVi(xgcDWp2DnDLjN`5A@jO^6jfA-`eNlV(gQj(1F^#YG8n!heMwGkM7854s1RB z<;U5W+)b?6+3WM5I&O6?vMIaH{K; zb7cVTel7BPSh-p`v%fkOmyY-ajq`=5hqCr$E3a>kqWfgmGx3j)Yf*v%7pu0$bI_UW zj?*6HV6o)Y;y|Tv8sPrR=%-iD_T+Rcd40RUHf#495E?tjhq$x8&>FE)Cj0KzUMiYJ zagq0arGaan2@mVJk6f@V-9(%aIJF`PKEll{>=qE*m0DxruRj&8tF~o!;qC%{J%E&x z);?7@ml~J_?U@iGuZl!}D-%{Ha!$b!Pkr1Lou|~tyvMJ19B5t}F6nVdGz=>nvfk@X z4{*$JE9YaogO0If-2`ocPb15FGX09)?NPkI^i-|M%=Z*kCM#KIXkHT(Le>>p5F6@1 z|MfJVHcYu3qv-~Hn9D~g6$)=-`6lO6THesJG>fLyN^|a``B0>B0t=rbDIgD> z8N*Zu`;~%eL3U*Nf7_Il@5);SYU$}4rY2&AW* zjD=;Y4^?8BM64Bw$E=;1H!)5~<01K9n8}ZvOBS2vA8VBt!!^a8LL3ZT`Z-q0LBWF? z%<4m33bVm&bC^%1m-G5P2daeji?!Gve5Yd|*9!pOOGmMK2W5Ti{FZrNQu60}XRT#j zdsluFi2i2K?p-bh-;!EX5f0Ms;jN3%r-sjQSyw&cc2dhOi`giK$H*M>r?cX`q*v-; zhlT+`%40o`9-f(&e!V03nz1?67}%{lqJFO|>Ek*A zzkWFx*b&%i-5C))5p;Q%dpmmHj$C|sg8*jAIyil7hnMAE9Um_b+z5NkVfegyR!2NM zfFvzidwe!73Qf=P;c?Hv{^5E)#=ZC=ZD8&}vzz>4q`jlp!Vy;O`Y}oE@u%Vucy<7jvoPBUwNB*a=(dU$aA@;dGw_ef>NJO14Q@OOiwY)l1RReeZ4?uU3sm zs;IM3%)36;5(hU%(|$#TSyAYZTDY}`vI2jiqVL`yXAL&p5={O+*K2P3*(VEt-a_xu zhsXKX%_S&IcF`J|KlXKP>%699XAtKO_B8^84LS-4i!X1dZMVYe?cTHIYrF{~gjz_% zd@cuhXV|z~s$uLCM^C7`WDKi&PQlNV`|6M-J+FIIV3~27ST<^;7c{@nKoTRm&Akt1IL4YD zGBCrf-fC)R&gSw^w(i(zxVdkpowkVXX=|oT9o$epL#tJ9?PFVE&(#tnF0PdU%Kb6t zpscPd1tz`Uk3O!PAdInTDPTGDuKh)zclO$Sf~Xbv#YX60+N$~SfKX$z2bHb0549d) zC-6uJr1ldjbxlXNVBOW29l<^ca|Sg>zv^2r#%Ne zKK?)2d#|V_m?v-)P_Uq)A|NPY`2+C!sh)VBGT0%fb zLJI^H0qG?qKp-H!gn*PJw7`v@{yzWr?VfYbeY^XRlbmdsotd4PotfRGMdhb?N9L3Y z7OBHu`+t1XC}`=IDqmO1f96vaMVHpy+l*~}V+iUmwITAUm#7`FqF3PLPJiyg+;;~2 zR1!sOS~XS>drjJr_rXIe)k@*@P`+gn8xHO5z@;f6XDUAKFnj(x|E*C_U$K5Y1~ z&De8`x}UmD5+>3zjVAR@M=zO}Q}|n`k66RS8#sZ3C9ZMICx<5k;y1Pv7ws0dw%g30 zOQu1=WHey&<5H+FW7P6S!gs24nnE$Oj)#Xc{$YKANm$G~$r!mbg$1o{2ES9@?lC3p zAKxO-cSoTM)SBuDljaExnN=%3Ne+>A#-0KH?&hVUQJCY&w>=F{OJPgRXTEEs-_K+Q zW*U5ko_xbzNzd94Fh1iZ(0&lXYG{rAf2^J0t-3Q38>?Ifid({S8>=NppVvD7{q<-+v;{P z((c+06m?4r<-79~el2HH=Oej(8PIsKk1?(qZ<9&B)uI?!BG`G7e0J_xn;`gA0&>Tk zS@-ItNaoePufV3`!o@%Ok|hWE9~{oV@>s5^CH63Q_@wa_kF-y7m8kA*3SZvae#Nt# z0(SLxc>PNVygO$b{F2F}ocv}H;;;xd22?{qyvOJ9z*Y_1*Mfb01B|$Bcx{mxnKx-Ix_f8JC`W}CH3v(f598>-4oPdDde3b}k}@}R9{ccGxn!(sIOuBMrx z3Hn9uVx~EgF62?v??*n4S|<+$%`Sh5QR^9kM&WDBk$_bFAI2*U-egly#n1b;qMF=s7A2%A**}w zmFBL5m=6vC?v8a8cJ6xOLTcL;+F9`FB)srNC@QN_& zj|;N12u1;5@Px56e+-yVT#fJ+@|d`NFt1WXOw7#T=J|&8l(!l6$h0o_vL(#_wV-5a z&xfCPDns||hB(*cEZ*BKe^HIcnPjkCFj5v9S{97iKu(Ukb*rt|F|z4cfu&I%+%~sd zZ&%|02M5R61>_#`$n#D;&LYbMK*kknhAb-=VyehCnB0`eez5o)3SM=;Bc}gBrSvlQEm{=bB-<>)pWCjH^-JgO zoz_*|IQ`XdeNl3`e|5?Z>PB9_MUnegLFqc=MJ%@i@Lv1_s-2Lv zeKWHC{i;Ami3xGxyf)kqO&_!dof<$^Y^4OF298H zfDkcxH@d1icy6^+GR^x5 zAQ=J2nlDQCM!q2Ds+lu{3vz$p!_9qYyo@KkM+jhyk(>;6F|7Qa?mJ;hPl-w*g94Pq zqk#0GU`|pWm}meo33EGFQ)*6^=`i-t4QLHJv0w7URf}x;m{3HqDu4<3{*k(D8j zQ1-ZTN9SH69wejgQ34!zU)wO=Lz7H%piz5ewJWq^yM{Yol0h5ryX%KmG@~nZh^o0& zGa62MS1sHiW_!9=UlI6#nxTdpHmI2GTfU2aINLM5s~7asDsBX%^~d#^e!ao1sbPDu zG^s2yB)`2!VM3`$dg=lH0W51p-`sYj%P_j6>bzke1mYa8E2jwT{E0)9cEL>^IwuBB z@bGOj&9l(=+X(n8?*}Rj^l=pKvr>D_)urQBYWLi*NQw(=XD#p>eYq&yw7HMX&^%`$ zd&tjtGBs}ZIwhrCF-RB;cQf^YK?V=Iq?;Ex-z~p#Ib@Jvt>S&&Z@btawFGhh)T%;@ zAJoRzAj~tSqyKB1h5dnxCNFI45&Fo1KzUi0aiVBr;JA-X>M!^ur`%Sly?g!b*?sF+!Ck>3KxtMK%PBmR#>bX zU&hFg{v0J~?#mhiY|Q?!z9)F1y>BF}6ZdE+!}3eNAQE%QHDJ~B8rFn&TEKNUFi%nu z)smlpoVTm|_~LO-0xHEfa9*i}*TpvXYi7kdS8^2~GiENOP44c^|j+iO8q}60SMb0eV7K`E9tc$Mk;S z0F1$v*lDKyIza2<2}(u(T+@K3ep+o;j#>p|I;^x>?A-v2>(gW5G|8bKo8`_Zj!tKqN2iZOXtn)jwJubUh|nWvsA zz5^HSUwc5vNqt{+B+S^X$cxf@ef{icK)PPiiNHKtyR`UPld%;rEl34r?VPz@+CR&F zemXiLNj(Pj|`Ev(- ztx|L2t(k{r??*d&>0rx=%~M}@cpz; z9a}+t2@!&@5I6myr@KzSO?`@9NY856bcf$UQu14?JdJ`Fln=VoeF7fyK252#vpm_*HZczG?j*SgrwrE;}07=YhAJ_ ze5*$7Q~Y7!^|)~){;Gee_RkfOj?p?BC3r!n=OAun@f6X|AB6~cW;DA({U_kG4q;we z6DNPW>X>(vcu3;`uH4kr6B!iW)14E(+s!YRC{ng&PW#~b+Vd~unpLD^lL0xsLPHB( z;x!)i)9w2u)g5b2scH)hYMEZtxcbd#-gVKII#r0C>@UMI@x95S9;qkr?)R39QCYK(=G@`^gAEI5=LH~e z8OH?ixb=IIJ8{hW0*YLOE?GB<2DVxdt#C(Y-ovW%SIo;kRXb}>3>Z0xx>RKweYwj(tR5*Fyz}L9o}{!wEOSHTm*ut? z*^6Wg%bEn2)wdqj&@yQ0Z^q)da1O~ue)b}D$60Rait5cG_{iRpmLJ5F%6`~Qk9ntE zLfr^ugsBP294TY19@(vZ|C_UJH~UIqHEVOa5QJub$A#Lc=BO{NVTC_#n=OC15u%f8y-3dfOcC%Bx1SJ%;Q{AIJMR+As%MZ-kq# zmyqlVnI#GZ@or;CnL-6Y^C6@FLiw0}?OW=}>sU>po?xZnOUg@+Xu}j84ktiK^7Y%y zht2b~1B;%P1YL#Z7X}uCBfG#4)dC|~)RVn&!s+B1xjGGSB)KwPqPeKny9S{ofqO~+ zhdgTbvGTFD2e)K>K=|>|5<&uJv`k7+`uI>Wj5<>LT zcEuHv9!?6XGutZ*^?WV4vgzNk9W3i7hk7MZThkypnls)T%C+-lxM2EB(ACxTFVk&8 z(yv{PprAhDw?jhRIm3le-R+q&mIN=pYUhyqm&!M|1>zH3wsUT^Oz{#c%FN5sJ;(sf zBvJtyvYbDk>`Ow*QNxj)NZUnErH?HkrSQzo$FX#8AdBujeR#K4!c^GXMm5#Ea_kWf z_Z_(Fi7z#W8lIScYhC;4eAdqnDS65^=O}HyYF!GOvSVW#Q^u>NHz>cm{*nzd<8CTh z4s%HTm}-V~>GY`rDfOg;2sb^c0fBu~%=X2~ETQG}4gmg1-PN5%E-1)G+aVligV289 z`516_q|W5JJFAKQt$4+A~fsIAcac5)~Kh=qTPWc(Wpnetn|DGpGh=eO1>(0pLA% zTJ%W?uq#u;bWD#qiW80cXKU)r%{kQBFiBkA-5xPw0ru)!sg(f{=&*78=JvouM~Nj% zN~pl!(H+3woN3AO4Nn>LVtxy&G7NJDe3D1h)EiPWR6Qv=bWy|xxM*t?s(gsPvHSx2 z11Co`!!_A1YM;-qz`n-#F>eupls3(R1f*((!GrpGTY;(MjPEbbYXS2klzQ=BjzWmM zG6}OOCIR)VonQP@Ds2G^A(lI4Nc!>;azm?Pb{}tuZD9?ewc|SI6b>@MExBCT%KHNQd6c-keq6dF zv$Retr65qLYO8QP&Bbdg=gh|R4cymgB(3LEU-^*jX@jA8Y+r!qDn1x3GT!gj;IsSW zB_}tJs3*61g*#So?YnpirdKlos)2Ve$&+VFoWcz7Uedp`JSiT&vnb&46QCUmc{QDJ zim1UCbS@79E^@hh{ve%zb#c8L{@jD#q)AFN&Nm-y0800~Mh_jB>y@M2i0N6=SW@jG zL?Z!ttyuCqAF+qbn2`G6!XZnA!m(c_{sapFOxRZcWt7eq* zGaX1G1*%eD!#6C}n?HoAN%5_muT>9<4*m39Y;Uqfc#LbPdmby0JY!J@{NknY?$G0{ zqqVgbNH3bOJv}g;;oh?fvMiJ*oUDm`V4m%Qt#&L_49+#M&cxZGWt8n^GM7?A7sQ|h zoCJ%Yi%n@BP6Fg0T#>g3y^H7;hj^NYx&7S%X7RT^6RJ(A6uwM*)$2;zK+wt^NxXZC zBE_L|%wK`#!z*FwM&py|P7tA1`*uAZN%ZQ^UtJ{Zu`C$nbBJ$$jezlJ{c)P@8Ll6i-brT&RVHS7qpt;oYZ_uZN=}T8uI?JxzsX$KstAZ<#oC zu=5tDPlM-)JIMm%hn9mn-fm63N5IsNGGK$I2_7>a0+#^(35zJ zu}!YV&27ukOvZ+cdz`0j_J)v3>HyEimgM@zK>^K+9oyR+p8J3EsD0ApH@?%t^jG#l zu7g89n-K8Bl%nCiD3YFMiO*`&B?%=%xcd3@>xy<8fd>8|7;4gruO_Lvxn^PRVIuY! zeJAZSb$m*BXcDlb?C^#Ke&QSfAGv48b2pyt#uu|<`i7c81T{b2R-zPy zqhAZ??IM|T3--u_QGxyso2?joshpY(8UkQ9#jBnJE_{Wk?X*)oaSXL#liIqoG>*A3 z|Bu>9OLZA#$;Fr#a|ZNw`_Y?q0dU{jpju#A^y@WN?G|>k_5E9S!av1ZlE+SBGh?g$ zUwxjfTGHX84n|3wm|YS+y?=Ehz^cEpei6TKWeaTgIzef#Ic&ze!iVQyTzqyt#ypHx zFjJ`xI}=c1m#djYzh$lkw+dP(%e_!&13n-*JpfEiUQ&V=D{vR{s#QgNW2~cf_(^^P z3w=k-e0_b3`)$zHuag6AS-|h9jTLV%`oQ;7Gns57^=^8YC^)3ZxaU4Ec6}xG^uQa* z1KOmky_>aE%+FSnaJ`1&Cy``DMer5~Y-a6ZiwvQGVMtR^87<_)DX<-N=!>kaj?Rf_ zPZO5c%6tP{kzjO>EfXV@Z%!ztz)-d}q(s+w|OpSjI(i)V=q{*5O>Lh297NLqY( z%yJLlA~SNi5845We=Jw%?U60pLr!|Wi@G!B>k4{ldZYICdxN4Ux-Szte{)~KH7@cw z@8_g{c71&Cprh1y6_jhNW5e`xj4|*>y91wQ$93FsvAKbs3;wUI2q~l*45QY!(CG$M zREr7LE$9PM5k!w5_eJfwCHdovf!ueeoj0CDVm{ z^l|#(bkg*Ii)LNuNMK&QOK-pGe|>Nag8FzcbK4HiK~;kqCB==kn+;ZSQ`}8b@T3~~ z#n&nkDhUBLru!s5>XSNByFQje|28cjEj;A9PwU|3gT;f8lc)&l2j5@Tx35&=bh$Vk~U#bMyIp=4DWv(oE>u3<|XT$%e%Z1nc*@r*ojF~AY6yl z4!%DG()a~&{*nBv`344}u`^?Q2`t%kssEZjHEk&5b=^96DVCaM3A(Q0MN-RlP4ro5 z2J8Je1f#Urzx9~^f%ypi>bN_(Jk4^R+XVdb^87AmVQ)4CG09)=o5s0oP%(EEh6YO) zw+G}p%lk9+evb(hWzF1{0{pK9$B(rS{94{lW_i!%#y-Lala+233;Bu9=nu?AZ>0#G zEG?U88d_2rJR+uASn}=W)YO#QBky7#U*GuHSORN4^Ua!NjMWGl6ocFQUzcfQal?#- z&cpiZX98v-u1W-~%QY7taAlRYv|#k~4})T?ra+-NpGW*L>$43>KE6I{uU>Jg6)KD^ z7;*gtjAM@+U=P`t*jOg?HK;f7uuK|snkE!5D5>SIx8Z0wQiZO&4qd4MGUgYTRtBV2 zAIP*}4*v(k(*@c2<}CgALzijSU1{Egz3H7NOKqELR6re7mCrHH3N0p0$Wz1mOWf(!lK;rd!OftfoDc!=Y`ZGfo~ z?2V1mNBYNo*#7|FFtBBBnp3XGnSOSA-Zi{k<~i3LXTwm@SYyV_@yB+O(ko>|Nbg8} z9lRidbuZU{4V5+Cq&!vBC|rOK3d2Y#gtDt3O&OU{tH9GPohhiz%x%AaN91o$X}Pwg zH(FZRDR;X0w`b;8AJ>AMoQ0bGJ>B$y-`#eukGU*f+ly&>wckyjQk#GtLC!p3{>AKB zH7Da6)E7y>1UF#&I(p}_Qoyq)d0#zA*%QITxo!)xS67EW;OxD#hnq99>V*9A-W{V^e2gS5h-p1(;2# zNfyNHSYVQm4*Z>XK}p*BvkSTBkLmG=v)aV_Ct3 z-Ku8m|55h)B#SxP?-jaws&2JYZGK(^A91Z9thQD?9ky7#xd75a8iuaKdS2$Rmw(wj zu{hj4HTjm!`i6qsnEdv==={8e>$tYDTw5L5JH_|P#SM}CDc6c_OmrP24;>-C+7F5j zgTJ9Z9N!atN~uIGOQF81!->nv_mJ25tUpA$W}>IOHU3&=zH4{8OToGIM6|G6lWo{D zWuM8H{xou4KM(tHO(@N*w z)>lIZ8muOsP=9Mm4i1UuZYq$kgNE=;!VC0m`;z2p|7npF$N`QU@VojqQqR0#h`k|S zM#)(XO-}|Fe}ju+`VSE?AB1a=3{BSTQmAb4Sh2%AX>^AN{y#SPv7Y1^t>0#KTFm!w z2X-$# ztN62C$93O0NMyP}pr_~CmEyV2kz!R;oqt=vl^ZD2 z1qR4I^{J_u%UbX^*m1|Y{^}vh{A3x`p4iye($|4RnvOo>M*nSXAZkTwEE|JD+@I^o zExkx#oWulHx3+Zz6iB4E&Ir7wmkpW0GUCV~S&{YEsP;x({GOb>_X>X|mqTuaMsF@}uv% z0&6(=JI0QHubbe$6?06BZjV#$A@XORIn@9)WFY(>Nl77SMYG7%^~ zB-M&vBjeYsf-2f6lWTr{fonCVwr_0Y%Ag_n{EZjrXvwXIW$>rQC0|KToEu~B|wYioAY z)mby_8_XE%>25aBL~0-U=K~Z>5%%Tf{4x1GimhC<3ibFDJCFx7(l0kJnkZ{^L9`(N z^jlMVn;Xk~qy4FBp?O-{I*}~=m_5Up;l}WI>mb&qnokKLA^v4V%lfs?3Iuip^xsmD z;g22ee#BBMny6M)sGqrd79y(beIrJLkyL_PRMlXu5mebS2G_JqhLq0Xw-(Vey9-@A zdRiMThM30_cW;s3`+T~MijnRW@b&7;(HV*udvN>!6r<>B+(@ihK1Bx)%?QF&tue*( zYG5^+ta0A3C>DWMv)ufCf;S>Sah3r}1Il)cj+$D{RF2=J^d61h`S`GrpD`bvg2XQ5 zIURZTX#~D%V_I-NzWtKPIC05!gd$B+V`JkamK{;}B&*RbAKOnXlUu@MDNNK&4?5PT zBow<`dB~r}BkwsZ{A)F+?e4(pcBm*4wf^#Z<;lgzKiXmKu=J4ak&!=CR>@ak6WLa% zk{dM^ju|NrFc?AF<^M5Af0!Mkt~F!7TkPXI(-&_EblX=7$_UK2o*$@(*NZld1kR*y zeig!JS)pA9SL=7^rNoiW8Ljij z)DfF!veuylP% zp&h>v0@(8B0!XAm-_rUT#ae?(BbeYPGrxB)9BC_hmbv-J-T=N?+PzeYha0X`0O$^S zopJ_ZL};6%6f_YR{d+`)dWxIa=@_*Qhac)CB4m_`zW5c9lSTG624IUeT6hYmgprk` z5Sl?{VOb$SQNGaO_Je5;7S*)ISpO0uf)I|jtvvkxjI@BhQ1P_-1gv%wQ*bGB8Kj)uM`=r}>-wPU~e(*$wMb;bG?+gxPFaqb! zTZkzKpz3Fl^pYjK2Q~w?gonZ{?vVLrZ{P@xWxJqo51(p;3|}>G$?{EsCWfR7`!M%a z555p%La%2}cl@gP`l@t+trURYZ)Z6Mj;U9Fytenyfxz=l*6AHWMr`Hp9GO0Nyw}As z9Ze}b;wl%Ouwz6>4X9YVR10ma1=vl~NZwF7Utivz?9pC9$u7q7p=C;~9YG6LGym>bc2tvtf@UVQl$O-D zWz*Gu%MWke{d)xt3L&qZ6^QtHFtXtwcSqC_Y~M&RJ>67(W>c~wxwnY^Afc#nZm_Sn zBw=5F(byMNj~@AsI=tSO1Z}|1omi53x%R6f0Yr^@Au3=LC0I$FoQ13H3Gfp|?Fd6FV;m`%qN-I{@+v(VU^cXn z)=U>jDK9XnL`Bz(L2mUl3l=TXpMFKpAm*crbZh-8T}J88YkViej-jloOi&Z;*kq*J z1R1k(3UWfl)uO4db~2bcOq14WU!>p^0#_!_z?bBo(bSe|bMKsQ06l)5)cpmrK^(es z?Q!sNQ5rZM@DWpGCMjug|AD;kN$}!O>XHSTrDx5geS0}CSi?lI(C3RUXQpHw$V?gE zvg(P^ppk(tbzSa|ujKDTx?3X=Corvcw0oLb1)MUo^6f%WdbiO%S5Hxc2b~iK2_Nsr zmW%&vZ&C%}j77UeSlsb0b;-3HeFs1tkRZ!u$9OM&;62DKl3eFWFMV-$joTB=F_m`B zJWbZIf%*n6YP*Wl8ve;xKAALyt%{g2DtX|5t0{FlJ%*Wb-;Vm5{7)BzjIKS*dd`kd zKf2kS!YBDoqESg{Rw$3Ja60Odz(Z$l(^hj|uU8rHeCfekYs9Czi-pES%sV>%U2E%1 zVOg#bFWxHe!+D6Ewlg9n(P#_jGU2bCB4gA@bb!IXJpUw_SV|msOSb0slupX!wp1M= zHv@s$sF(_6&Q83Af_p~MzJvtiKwov%!>I?Bg-(vKA2cc#O@2n1BdTlk@)Dgq9iIH? z)s?=a0OgaEM**aEDsD)@&y@9ZAJjG9YG{;9HL3y zW7+{=dN*`ictYS)LUX?Ui0T&69TK0+ObJN}3H(y565)G=zg?XAqcnA_v>txuH;I)) z*a-%t>^W1esOE_lH)#ca!6;-*#`(2~;zU0-n zx5J)+eA+GfB zIX^)|<+Fd_EC0Icp#$CrJ8=)6y_O6j(MaIT^{dZrLl7E)Zn1#H;eYs(yY)eeNpaH;( zv%|Pf5!GFUgFAE_#iFaHSwJqvahbnF%1MjurK%kdpNZ zRbBM(O=M{Y%4aN0WWvBA5RdNE>#XR6;h2sz!otv8r!sWdsv(t`z*@~%bN-FqAAJEg zB7^lOzoMo3HlLtXw+~-cOU16V%$~LGt!5`$EtcJDh4FUs(nnI(!m0=#h{WaIAnfSF z#l6ajaYf_tQ1BwgQbjKSffNxCy)$(r_|s^*96N2$G&Ub-4DP@Dz9RG6TX7V;#r9K0 z(#j|kLU}&q*VeD!*2K0RymM1Ve}ZkYdZqS&gC#%s99gbVKn%I-9*?T)$@iaGqFu)t!W* zTq{LVwGz&s)|(rn3GT8qHy@NX)xo(J`zp4+5>uA-$^FC^yY_6NqrAR7Rm*=NNzRL8 zy?a`1+8xABrvQvyP1Ubi=#TE2^OpQpLs0z2O}*QAl5{GOz#*`Hs&i&Gw)_h=SL-vt+i?shn>^AATUHUr6dO1aZ=S=VfW+p>JmJ8i!PlLuwI&5H&11B z0<(!qD$+Lm7NUY7OCAD=)-yXdBh5^*jePGk(n$((H|b61rLD}y_qN*}Xw;fFqDF18 zPa|cT(8KeuWiz6ofWb7QClM-<7PR!B$i;eMZFAp}?|ju1lL1}ciiEH43t>_10up(a zI+RBH!uT``Z$}=PHZ4?4!hE83+OHjef{W8 zwIy{Jt7!5`>C}PcySbjhpBigGjCq>>-1FB5^V*hrOi3Y1^2Q3CyU&U>z)N1E6`s?) zW=WPMFp_mwe4S>=cgFyTa~o$gI-}sW80*z^D3jCNkcJWsAcx?P=C6dAMgG9Y0c~EZ z3&A=}2#qMLdOvi|Kg9Ds8aHWKLbUEj^kTe~x)v)f!KT4!dZ6mal>+ciWi5!=R|e`j zvjtt5Y+)cX1CKD50`O;7S`0%?K2!_yTNWxrH@t^WpVR00+LV?S z2UF{o{75wW5=~cDZ{i9KkCgiU zw_;k`@Yyrccb#v*$_MPu&j!jcov$%z?+z^wb_j-WV|dQdzN^GrcOLIP5>q@sK2Tbj zCC4J}&D*gkF%bGTGJxq+WhcdfTIu4*_Ke|`MY?}=U_F`-G@5UY5+bQ?$=9lWtY=3U z{>(y|OZ=m7zBlP)-%b+~?eSxM&l#NNVld)H(+%YMO8EQ}r@Rz0S>ScEKumMr2HBCFEww>u?XRsckcBso!@xhX+@~NhPjwaRAGHbMS8v6?f zSA5ttdW6exbw2Zuj51x^bTRzXWzOOQ-n66r>BWJ&L9kN+>FAg~mdK7{Y70BMVfV*d z>wP@kvgB}o#=!EWFu8<67t-gu#D(la8)T?SZttt>Se@LcyF&sp#YVJNaJY{3abEkr z6)r=9h=P{ZsI(}h9Mu^su3z3<*_oducZ!-uE3bI%s8xU*H`|f*!dJ?|H+;Pq3*+nL z*IEuNHQ_>rU@gPkCF$zh!|*@qlp{^guT3quDuLr#O?Tt+0Vl4mwQf0$f9QrgF=FN4}bxQnZW#dm|`Hb!IdG8aMy z+41H7Dtd3Kga`1q&W|;}R&GoN{%h|D7Xjb8Wu1t} zmooqBfNT5!lU1+s67l-oT_;Qt6q8~wDsoGaVV`DOQ(Z1nw#SdPcoo8Xj|HC>mbPR4ljUC%~**ez!H%{|;|GEE#GT5U(J$CEHU;jJDg%?l% zHw*TkclUGtf$$fcZ;t+-A;FX9RF?PXX!_6m!T7Hl5=W(7|NgXparFO-VgHX=b6mT% r|NkHG7v|aJ{{ Date: Wed, 13 Mar 2024 10:23:01 +0100 Subject: [PATCH 75/87] feature: 420 refactor swagger --- .../openapi/traceability-foss-backend.json | 11069 ++++++++-------- .../application/rest/ContractController.java | 18 +- .../java/assets/importpoc/ErrorResponse.java | 2 - 3 files changed, 5539 insertions(+), 5550 deletions(-) diff --git a/tx-backend/openapi/traceability-foss-backend.json b/tx-backend/openapi/traceability-foss-backend.json index 11bbaba713..e521e1e566 100644 --- a/tx-backend/openapi/traceability-foss-backend.json +++ b/tx-backend/openapi/traceability-foss-backend.json @@ -1,1227 +1,1227 @@ { - "openapi" : "3.0.1", - "info" : { - "title" : "Trace-FOSS - OpenAPI Documentation", - "description" : "Trace-FOSS is a system for tracking parts along the supply chain. A high level of transparency across the supplier network enables faster intervention based on a recorded event in the supply chain. This saves costs by seamlessly tracking parts and creates trust through clearly defined and secure data access by the companies and persons involved in the process.", - "license" : { - "name" : "License: Apache 2.0" + "openapi": "3.0.1", + "info": { + "title": "Trace-FOSS - OpenAPI Documentation", + "description": "Trace-FOSS is a system for tracking parts along the supply chain. A high level of transparency across the supplier network enables faster intervention based on a recorded event in the supply chain. This saves costs by seamlessly tracking parts and creates trust through clearly defined and secure data access by the companies and persons involved in the process.", + "license": { + "name": "License: Apache 2.0" }, - "version" : "1.0.0" + "version": "1.0.0" }, - "servers" : [ + "servers": [ { - "url" : "http://localhost:9998/api", - "description" : "Generated server url" + "url": "http://localhost:9998/api", + "description": "Generated server url" } ], - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ], - "tags" : [ + "tags": [ { - "name" : "Investigations", - "description" : "Operations on Investigation Notification" + "name": "Investigations", + "description": "Operations on Investigation Notification" } ], - "paths" : { - "/bpn-config" : { - "get" : { - "tags" : [ + "paths": { + "/bpn-config": { + "get": { + "tags": [ "BpnEdcMapping" ], - "summary" : "Get BPN EDC URL mappings", - "description" : "The endpoint returns a result of BPN EDC URL mappings.", - "operationId" : "getBpnEdcs", - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "summary": "Get BPN EDC URL mappings", + "description": "The endpoint returns a result of BPN EDC URL mappings.", + "operationId": "getBpnEdcs", + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns the paged result found", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "$ref": "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns the paged result found", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] }, - "put" : { - "tags" : [ + "put": { + "tags": [ "BpnEdcMapping" ], - "summary" : "Updates BPN EDC URL mappings", - "description" : "The endpoint updates BPN EDC URL mappings", - "operationId" : "updateBpnEdcMappings", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 1000, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnMappingRequest" + "summary": "Updates BPN EDC URL mappings", + "description": "The endpoint updates BPN EDC URL mappings", + "operationId": "updateBpnEdcMappings", + "requestBody": { + "content": { + "application/json": { + "schema": { + "maxItems": 1000, + "minItems": 0, + "type": "array", + "items": { + "$ref": "#/components/schemas/BpnMappingRequest" } } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns the paged result found for BpnEdcMapping", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "$ref": "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] }, - "post" : { - "tags" : [ + "post": { + "tags": [ "BpnEdcMapping" ], - "summary" : "Creates BPN EDC URL mappings", - "description" : "The endpoint creates BPN EDC URL mappings", - "operationId" : "createBpnEdcUrlMappings", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 1000, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnMappingRequest" + "summary": "Creates BPN EDC URL mappings", + "description": "The endpoint creates BPN EDC URL mappings", + "operationId": "createBpnEdcUrlMappings", + "requestBody": { + "content": { + "application/json": { + "schema": { + "maxItems": 1000, + "minItems": 0, + "type": "array", + "items": { + "$ref": "#/components/schemas/BpnMappingRequest" } } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns the paged result found for BpnEdcMapping", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "$ref": "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/submodel/data/{submodelId}" : { - "get" : { - "tags" : [ + "/submodel/data/{submodelId}": { + "get": { + "tags": [ "Submodel" ], - "summary" : "Gets Submodel by its id", - "description" : "The endpoint returns Submodel for given id. Used for data providing functionality", - "operationId" : "getSubmodelById", - "parameters" : [ + "summary": "Gets Submodel by its id", + "description": "The endpoint returns Submodel for given id. Used for data providing functionality", + "operationId": "getSubmodelById", + "parameters": [ { - "name" : "submodelId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "submodelId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "responses" : { - "200" : { - "description" : "Returns the paged result found", - "content" : { - "application/json" : {} - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns the paged result found", + "content": { + "application/json": {} + } + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] }, - "post" : { - "tags" : [ + "post": { + "tags": [ "Submodel" ], - "summary" : "Save Submodel", - "description" : "This endpoint allows you to save a Submodel identified by its ID.", - "operationId" : "saveSubmodel", - "parameters" : [ + "summary": "Save Submodel", + "description": "This endpoint allows you to save a Submodel identified by its ID.", + "operationId": "saveSubmodel", + "parameters": [ { - "name" : "submodelId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "submodelId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "string" + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Ok.", - "content" : { - "application/json" : {} - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No Content.", + "content": { + "application/json": {} + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No Content.", - "content" : { - "application/json" : {} + "200": { + "description": "Ok.", + "content": { + "application/json": {} } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/investigations" : { - "post" : { - "tags" : [ + "/investigations": { + "post": { + "tags": [ "Investigations" ], - "summary" : "Start investigations by part ids", - "description" : "The endpoint starts investigations based on part ids provided.", - "operationId" : "investigateAssets", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/StartQualityNotificationRequest" + "summary": "Start investigations by part ids", + "description": "The endpoint starts investigations based on part ids provided.", + "operationId": "investigateAssets", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartQualityNotificationRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "201": { + "description": "Created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityNotificationIdResponse" } } } }, - "201" : { - "description" : "Created.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/investigations/{investigationId}/update" : { - "post" : { - "tags" : [ + "/investigations/{investigationId}/update": { + "post": { + "tags": [ "Investigations" ], - "summary" : "Update investigations by id", - "description" : "The endpoint updates investigations by their id.", - "operationId" : "updateInvestigation", - "parameters" : [ + "summary": "Update investigations by id", + "description": "The endpoint updates investigations by their id.", + "operationId": "updateInvestigation", + "parameters": [ { - "name" : "investigationId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "investigationId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UpdateQualityNotificationRequest" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateQualityNotificationRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No content." + "200": { + "description": "Ok." }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/investigations/{investigationId}/close" : { - "post" : { - "tags" : [ + "/investigations/{investigationId}/close": { + "post": { + "tags": [ "Investigations" ], - "summary" : "Close investigations by id", - "description" : "The endpoint closes investigations by their id.", - "operationId" : "closeInvestigation", - "parameters" : [ + "summary": "Close investigations by id", + "description": "The endpoint closes investigations by their id.", + "operationId": "closeInvestigation", + "parameters": [ { - "name" : "investigationId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "investigationId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CloseQualityNotificationRequest" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CloseQualityNotificationRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No content." + "200": { + "description": "Ok." }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/investigations/{investigationId}/cancel" : { - "post" : { - "tags" : [ + "/investigations/{investigationId}/cancel": { + "post": { + "tags": [ "Investigations" ], - "summary" : "Cancles investigations by id", - "description" : "The endpoint cancles investigations by their id.", - "operationId" : "cancelInvestigation", - "parameters" : [ + "summary": "Cancles investigations by id", + "description": "The endpoint cancles investigations by their id.", + "operationId": "cancelInvestigation", + "parameters": [ { - "name" : "investigationId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "investigationId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Ok." + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No content." - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/investigations/{investigationId}/approve" : { - "post" : { - "tags" : [ + "/investigations/{investigationId}/approve": { + "post": { + "tags": [ "Investigations" ], - "summary" : "Approves investigations by id", - "description" : "The endpoint approves investigations by their id.", - "operationId" : "approveInvestigation", - "parameters" : [ + "summary": "Approves investigations by id", + "description": "The endpoint approves investigations by their id.", + "operationId": "approveInvestigation", + "parameters": [ { - "name" : "investigationId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "investigationId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Ok." + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No content." - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/investigations/filter" : { - "post" : { - "tags" : [ + "/investigations/filter": { + "post": { + "tags": [ "Investigations" ], - "summary" : "Filter investigations defined by the request body", - "description" : "The endpoint returns investigations as paged result.", - "operationId" : "filterInvestigations", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/PageableFilterRequest" + "summary": "Filter investigations defined by the request body", + "description": "The endpoint returns investigations as paged result.", + "operationId": "filterInvestigations", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageableFilterRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "200" : { - "description" : "Returns the paged result found for Asset", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "maxItems" : 2147483647, - "minItems" : -2147483648, - "type" : "array", - "description" : "Investigations", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maximum" : 255, - "minimum" : 0, - "maxLength" : 255, - "type" : "integer", - "format" : "int64", - "example" : 66 + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the paged result found for Asset", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "maxItems": 2147483647, + "minItems": -2147483648, + "type": "array", + "description": "Investigations", + "items": { + "type": "object", + "properties": { + "id": { + "maximum": 255, + "minimum": 0, + "maxLength": 255, + "type": "integer", + "format": "int64", + "example": 66 }, - "status" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "CREATED", - "enum" : [ + "status": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "CREATED", + "enum": [ "CREATED", "SENT", "RECEIVED", @@ -1232,97 +1232,97 @@ "CLOSED" ] }, - "description" : { - "maxLength" : 1000, - "minLength" : 0, - "type" : "string", - "example" : "DescriptionText" + "description": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "example": "DescriptionText" }, - "createdBy" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003AYRE" + "createdBy": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003AYRE" }, - "createdByName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "createdByName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "createdDate" : { - "maxLength" : 50, - "minLength" : 0, - "type" : "string", - "example" : "2023-02-21T21:27:10.734950Z" + "createdDate": { + "maxLength": 50, + "minLength": 0, + "type": "string", + "example": "2023-02-21T21:27:10.734950Z" }, - "assetIds" : { - "maxItems" : 1000, - "minItems" : 0, - "type" : "array", - "example" : [ + "assetIds": { + "maxItems": 1000, + "minItems": 0, + "type": "array", + "example": [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd" ], - "items" : { - "type" : "string", - "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" + "items": { + "type": "string", + "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" } }, - "channel" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "SENDER", - "enum" : [ + "channel": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "SENDER", + "enum": [ "SENDER", "RECEIVER" ] }, - "reason" : { - "$ref" : "#/components/schemas/QualityNotificationReasonResponse" + "reason": { + "$ref": "#/components/schemas/QualityNotificationReasonResponse" }, - "sendTo" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003AYRE" + "sendTo": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003AYRE" }, - "sendToName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "sendToName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "severity" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "MINOR", - "enum" : [ + "severity": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "MINOR", + "enum": [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "targetDate" : { - "maxLength" : 50, - "minLength" : 0, - "type" : "string", - "example" : "2099-02-21T21:27:10.734950Z" + "targetDate": { + "maxLength": 50, + "minLength": 0, + "type": "string", + "example": "2099-02-21T21:27:10.734950Z" }, - "errorMessage" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "EDC not reachable" + "errorMessage": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "EDC not reachable" }, - "qualityNotificationMessageResponseList" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/QualityNotificationMessageResponse" + "qualityNotificationMessageResponseList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityNotificationMessageResponse" } } } @@ -1332,774 +1332,713 @@ } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/edc/notification/contract" : { - "post" : { - "tags" : [ + "/edc/notification/contract": { + "post": { + "tags": [ "Notifications" ], - "summary" : "Triggers EDC notification contract", - "description" : "The endpoint Triggers EDC notification contract based on notification type and method", - "operationId" : "createNotificationContract", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CreateNotificationContractRequest" + "summary": "Triggers EDC notification contract", + "description": "The endpoint Triggers EDC notification contract based on notification type and method", + "operationId": "createNotificationContract", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotificationContractRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "201": { + "description": "Created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotificationContractResponse" } } } }, - "201" : { - "description" : "Created.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CreateNotificationContractResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/contracts" : { - "post" : { - "tags" : [ - "getContracts", + "/contracts": { + "post": { + "tags": [ "Contracts" ], - "summary" : "All contract agreements for all assets", - "description" : "This endpoint returns all contract agreements for alls assets in Trace-X", - "operationId" : "contracts", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/PageableFilterRequest" + "summary": "All contract agreements for all assets", + "description": "This endpoint returns all contract agreements for alls assets in Trace-X", + "operationId": "contracts", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageableFilterRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok.", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "description" : "PageResults", - "items" : { - "$ref" : "#/components/schemas/PageResultContractResponse" - } + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Ok.", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "description": "PageResults", + "items": { + "$ref": "#/components/schemas/PageResultContractResponse" + } } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/publish" : { - "post" : { - "tags" : [ + "/assets/publish": { + "post": { + "tags": [ "AssetsImport", "AssetsPublish" ], - "summary" : "asset publish", - "description" : "This endpoint publishes assets to the Catena-X network.", - "operationId" : "publishAssets", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/RegisterAssetRequest" + "summary": "asset publish", + "description": "This endpoint publishes assets to the Catena-X network.", + "operationId": "publishAssets", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterAssetRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No Content." + "204": { + "description": "No Content." }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } + "200": { + "description": "OK.", + "content": { + "application/json": {} } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/import" : { - "post" : { - "tags" : [ + "/assets/import": { + "post": { + "tags": [ "AssetsImport" ], - "summary" : "asset upload", - "description" : "This endpoint stores assets in the application. Those can be later published in the Catena-X network.", - "operationId" : "importJson", - "requestBody" : { - "content" : { - "multipart/form-data" : { - "schema" : { - "required" : [ + "summary": "asset upload", + "description": "This endpoint stores assets in the application. Those can be later published in the Catena-X network.", + "operationId": "importJson", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ "file" ], - "type" : "object", - "properties" : { - "file" : { - "type" : "string", - "format" : "binary" + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" } } } } } }, - "responses" : { - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No Content." + "204": { + "description": "No Content." }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } + "200": { + "description": "OK.", + "content": { + "application/json": {} } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-planned/sync" : { - "post" : { - "tags" : [ + "/assets/as-planned/sync": { + "post": { + "tags": [ "AssetsAsPlanned" ], - "summary" : "Synchronizes assets from IRS", - "description" : "The endpoint synchronizes the assets from irs.", - "operationId" : "sync", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/SyncAssetsRequest" + "summary": "Synchronizes assets from IRS", + "description": "The endpoint synchronizes the assets from irs.", + "operationId": "sync", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SyncAssetsRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "201": { + "description": "Created." + }, + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "201" : { - "description" : "Created." - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-planned/detail-information" : { - "post" : { - "tags" : [ + "/assets/as-planned/detail-information": { + "post": { + "tags": [ "AssetsAsPlanned" ], - "summary" : "Searches for assets by ids.", - "description" : "The endpoint searchs for assets by id and returns a list of them.", - "operationId" : "getDetailInformation", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/GetDetailInformationRequest" + "summary": "Searches for assets by ids.", + "description": "The endpoint searchs for assets by id and returns a list of them.", + "operationId": "getDetailInformation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetDetailInformationRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "200" : { - "description" : "Returns the paged result found for Asset", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "responses": { + "200": { + "description": "Returns the paged result found for Asset", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -2107,16 +2046,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -2126,58 +2065,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -2185,17 +2124,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -2204,234 +2143,344 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-built/sync" : { - "post" : { - "tags" : [ + "/assets/as-built/sync": { + "post": { + "tags": [ "AssetsAsBuilt" ], - "summary" : "Synchronizes assets from IRS", - "description" : "The endpoint synchronizes the assets from irs.", - "operationId" : "sync_1", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/SyncAssetsRequest" + "summary": "Synchronizes assets from IRS", + "description": "The endpoint synchronizes the assets from irs.", + "operationId": "sync_1", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SyncAssetsRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "201": { + "description": "Created." + }, + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "201" : { - "description" : "Created." - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-built/detail-information" : { - "post" : { - "tags" : [ + "/assets/as-built/detail-information": { + "post": { + "tags": [ "AssetsAsBuilt" ], - "summary" : "Searches for assets by ids.", - "description" : "The endpoint searchs for assets by id and returns a list of them.", - "operationId" : "getDetailInformation_1", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/GetDetailInformationRequest" + "summary": "Searches for assets by ids.", + "description": "The endpoint searchs for assets by id and returns a list of them.", + "operationId": "getDetailInformation_1", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetDetailInformationRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Returns the paged result found for Asset", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the paged result found for Asset", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -2439,16 +2488,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -2458,58 +2507,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -2517,17 +2566,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -2536,740 +2585,640 @@ } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/alerts" : { - "post" : { - "tags" : [ + "/alerts": { + "post": { + "tags": [ "Alerts" ], - "summary" : "Start alert by part ids", - "description" : "The endpoint starts alert based on part ids provided.", - "operationId" : "alertAssets", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/StartQualityNotificationRequest" + "summary": "Start alert by part ids", + "description": "The endpoint starts alert based on part ids provided.", + "operationId": "alertAssets", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartQualityNotificationRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "201": { + "description": "Created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityNotificationIdResponse" } } } }, - "201" : { - "description" : "Created.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/alerts/{alertId}/update" : { - "post" : { - "tags" : [ + "/alerts/{alertId}/update": { + "post": { + "tags": [ "Alerts" ], - "summary" : "Update alert by id", - "description" : "The endpoint updates alert by their id.", - "operationId" : "updateAlert", - "parameters" : [ + "summary": "Update alert by id", + "description": "The endpoint updates alert by their id.", + "operationId": "updateAlert", + "parameters": [ { - "name" : "alertId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "alertId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UpdateQualityNotificationRequest" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateQualityNotificationRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No content." - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/alerts/{alertId}/close" : { - "post" : { - "tags" : [ + "/alerts/{alertId}/close": { + "post": { + "tags": [ "Alerts" ], - "summary" : "Close alert by id", - "description" : "The endpoint closes alert by id.", - "operationId" : "closeAlert", - "parameters" : [ + "summary": "Close alert by id", + "description": "The endpoint closes alert by id.", + "operationId": "closeAlert", + "parameters": [ { - "name" : "alertId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "alertId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/CloseQualityNotificationRequest" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CloseQualityNotificationRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No content." + "200": { + "description": "Ok." }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/alerts/{alertId}/cancel" : { - "post" : { - "tags" : [ + "/alerts/{alertId}/cancel": { + "post": { + "tags": [ "Alerts" ], - "summary" : "Cancels alert by id", - "description" : "The endpoint cancels alert by id.", - "operationId" : "cancelAlert", - "parameters" : [ + "summary": "Cancels alert by id", + "description": "The endpoint cancels alert by id.", + "operationId": "cancelAlert", + "parameters": [ { - "name" : "alertId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "alertId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Ok." + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No content." - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/alerts/{alertId}/approve" : { - "post" : { - "tags" : [ + "/alerts/{alertId}/approve": { + "post": { + "tags": [ "Alerts" ], - "summary" : "Approves alert by id", - "description" : "The endpoint approves alert by id.", - "operationId" : "approveAlert", - "parameters" : [ + "summary": "Approves alert by id", + "description": "The endpoint approves alert by id.", + "operationId": "approveAlert", + "parameters": [ { - "name" : "alertId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "alertId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Ok." + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No content." - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/alerts/filter" : { - "post" : { - "tags" : [ + "/alerts/filter": { + "post": { + "tags": [ "Alerts" ], - "summary" : "Filter alerts defined by the request body", - "description" : "The endpoint returns alerts as paged result.", - "operationId" : "filterAlerts", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/PageableFilterRequest" + "summary": "Filter alerts defined by the request body", + "description": "The endpoint returns alerts as paged result.", + "operationId": "filterAlerts", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageableFilterRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "200" : { - "description" : "Returns the paged result found for Asset", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Alerts", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maximum" : 255, - "minimum" : 0, - "maxLength" : 255, - "type" : "integer", - "format" : "int64", - "example" : 66 - }, - "status" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "CREATED", - "enum" : [ + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the paged result found for Asset", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "type": "array", + "description": "Alerts", + "items": { + "type": "object", + "properties": { + "id": { + "maximum": 255, + "minimum": 0, + "maxLength": 255, + "type": "integer", + "format": "int64", + "example": 66 + }, + "status": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "CREATED", + "enum": [ "CREATED", "SENT", "RECEIVED", @@ -3280,97 +3229,97 @@ "CLOSED" ] }, - "description" : { - "maxLength" : 1000, - "minLength" : 0, - "type" : "string", - "example" : "DescriptionText" - }, - "createdBy" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003AYRE" - }, - "createdByName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "createdDate" : { - "maxLength" : 50, - "minLength" : 0, - "type" : "string", - "example" : "2023-02-21T21:27:10.734950Z" - }, - "assetIds" : { - "maxItems" : 1000, - "minItems" : 0, - "type" : "array", - "example" : [ + "description": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "example": "DescriptionText" + }, + "createdBy": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003AYRE" + }, + "createdByName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "createdDate": { + "maxLength": 50, + "minLength": 0, + "type": "string", + "example": "2023-02-21T21:27:10.734950Z" + }, + "assetIds": { + "maxItems": 1000, + "minItems": 0, + "type": "array", + "example": [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd" ], - "items" : { - "type" : "string", - "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" + "items": { + "type": "string", + "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" } }, - "channel" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "SENDER", - "enum" : [ + "channel": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "SENDER", + "enum": [ "SENDER", "RECEIVER" ] }, - "reason" : { - "$ref" : "#/components/schemas/QualityNotificationReasonResponse" - }, - "sendTo" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003AYRE" - }, - "sendToName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "severity" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "MINOR", - "enum" : [ + "reason": { + "$ref": "#/components/schemas/QualityNotificationReasonResponse" + }, + "sendTo": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003AYRE" + }, + "sendToName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "severity": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "MINOR", + "enum": [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "targetDate" : { - "maxLength" : 50, - "minLength" : 0, - "type" : "string", - "example" : "2099-02-21T21:27:10.734950Z" - }, - "errorMessage" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "EDC not reachable" - }, - "qualityNotificationMessageResponseList" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/QualityNotificationMessageResponse" + "targetDate": { + "maxLength": 50, + "minLength": 0, + "type": "string", + "example": "2099-02-21T21:27:10.734950Z" + }, + "errorMessage": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "EDC not reachable" + }, + "qualityNotificationMessageResponseList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityNotificationMessageResponse" } } } @@ -3379,188 +3328,238 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-planned/{assetId}" : { - "get" : { - "tags" : [ + "/assets/as-planned/{assetId}": { + "get": { + "tags": [ "AssetsAsPlanned" ], - "summary" : "Get asset by id", - "description" : "The endpoint returns an asset filtered by id .", - "operationId" : "assetById", - "parameters" : [ + "summary": "Get asset by id", + "description": "The endpoint returns an asset filtered by id .", + "operationId": "assetById", + "parameters": [ { - "name" : "assetId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "assetId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns the assets found", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "200": { + "description": "Returns the assets found", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -3568,16 +3567,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -3587,58 +3586,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -3646,17 +3645,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -3664,196 +3663,176 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] }, - "patch" : { - "tags" : [ + "patch": { + "tags": [ "AssetsAsPlanned" ], - "summary" : "Updates asset", - "description" : "The endpoint updates asset by provided quality type.", - "operationId" : "updateAsset", - "parameters" : [ + "summary": "Updates asset", + "description": "The endpoint updates asset by provided quality type.", + "operationId": "updateAsset", + "parameters": [ { - "name" : "assetId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "assetId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UpdateAssetRequest" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAssetRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "200" : { - "description" : "Returns the updated asset", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" - }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" - }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" - }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the updated asset", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" + }, + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" + }, + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" + }, + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -3861,16 +3840,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -3880,58 +3859,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -3939,17 +3918,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -3957,128 +3936,218 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-built/{assetId}" : { - "get" : { - "tags" : [ + "/assets/as-built/{assetId}": { + "get": { + "tags": [ "AssetsAsBuilt" ], - "summary" : "Get asset by id", - "description" : "The endpoint returns an asset filtered by id .", - "operationId" : "assetById_1", - "parameters" : [ + "summary": "Get asset by id", + "description": "The endpoint returns an asset filtered by id .", + "operationId": "assetById_1", + "parameters": [ { - "name" : "assetId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "assetId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "responses" : { - "200" : { - "description" : "Returns the assets found", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" - }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" - }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" - }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the assets found", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" + }, + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" + }, + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" + }, + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -4086,16 +4155,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -4105,58 +4174,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -4164,244 +4233,184 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] }, - "patch" : { - "tags" : [ + "patch": { + "tags": [ "AssetsAsBuilt" ], - "summary" : "Updates asset", - "description" : "The endpoint updates asset by provided quality type.", - "operationId" : "updateAsset_1", - "parameters" : [ + "summary": "Updates asset", + "description": "The endpoint updates asset by provided quality type.", + "operationId": "updateAsset_1", + "parameters": [ { - "name" : "assetId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "assetId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/UpdateAssetRequest" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAssetRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "200" : { - "description" : "Returns the updated asset", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" - }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" - }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" - }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the updated asset", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" + }, + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" + }, + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" + }, + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -4409,16 +4418,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -4428,58 +4437,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -4487,17 +4496,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -4505,833 +4514,863 @@ } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/registry/reload" : { - "get" : { - "tags" : [ + "/registry/reload": { + "get": { + "tags": [ "Registry" ], - "summary" : "Triggers reload of shell descriptors", - "description" : "The endpoint Triggers reload of shell descriptors.", - "operationId" : "reload", - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "summary": "Triggers reload of shell descriptors", + "description": "The endpoint Triggers reload of shell descriptors.", + "operationId": "reload", + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "202" : { - "description" : "Created registry reload job." - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "202": { + "description": "Created registry reload job." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/policies" : { - "get" : { - "tags" : [ + "/policies": { + "get": { + "tags": [ "Policies" ], - "summary" : "Get all policies ", - "description" : "The endpoint returns all policies .", - "operationId" : "policy", - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "summary": "Get all policies ", + "description": "The endpoint returns all policies .", + "operationId": "policy", + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns the policies", - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/PolicyResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns the policies", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PolicyResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/investigations/{investigationId}" : { - "get" : { - "tags" : [ + "/investigations/{investigationId}": { + "get": { + "tags": [ "Investigations" ], - "summary" : "Gets investigations by id", - "description" : "The endpoint returns investigations as paged result by their id.", - "operationId" : "getInvestigation", - "parameters" : [ + "summary": "Gets investigations by id", + "description": "The endpoint returns investigations as paged result by their id.", + "operationId": "getInvestigation", + "parameters": [ { - "name" : "investigationId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "investigationId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : -2147483648, - "type" : "array", - "description" : "Investigations", - "items" : { - "$ref" : "#/components/schemas/InvestigationResponse" - } + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "OK.", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": -2147483648, + "type": "array", + "description": "Investigations", + "items": { + "$ref": "#/components/schemas/InvestigationResponse" + } } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/investigations/distinctFilterValues" : { - "get" : { - "tags" : [ + "/investigations/distinctFilterValues": { + "get": { + "tags": [ "Assets", "Investigations" ], - "summary" : "getDistinctFilterValues", - "description" : "The endpoint returns a distinct filter values for given fieldName.", - "operationId" : "distinctFilterValues", - "parameters" : [ + "summary": "getDistinctFilterValues", + "description": "The endpoint returns a distinct filter values for given fieldName.", + "operationId": "distinctFilterValues", + "parameters": [ { - "name" : "fieldName", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" + "name": "fieldName", + "in": "query", + "required": true, + "schema": { + "type": "string" } }, { - "name" : "size", - "in" : "query", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int32" + "name": "size", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, { - "name" : "startWith", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" + "name": "startWith", + "in": "query", + "required": true, + "schema": { + "type": "string" } }, { - "name" : "channel", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ + "name": "channel", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ "SENDER", "RECEIVER" ] } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns a distinct filter values for given fieldName.", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "type": "string" + } } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/dashboard" : { - "get" : { - "tags" : [ + "/dashboard": { + "get": { + "tags": [ "Dashboard" ], - "summary" : "Returns dashboard related data", - "description" : "The endpoint can return limited data based on the user role", - "operationId" : "dashboard", - "responses" : { - "200" : { - "description" : "Returns dashboard data", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/DashboardResponse" + "summary": "Returns dashboard related data", + "description": "The endpoint can return limited data based on the user role", + "operationId": "dashboard", + "responses": { + "200": { + "description": "Returns dashboard data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardResponse" } } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/import/report/{importJobId}" : { - "get" : { - "tags" : [ + "/assets/import/report/{importJobId}": { + "get": { + "tags": [ "ImportReport", "AssetsImport" ], - "summary" : "report of the imported assets", - "description" : "This endpoint returns information about the imported assets to Trace-X.", - "operationId" : "importReport", - "parameters" : [ + "summary": "report of the imported assets", + "description": "This endpoint returns information about the imported assets to Trace-X.", + "operationId": "importReport", + "parameters": [ { - "name" : "importJobId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "importJobId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No Content." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ImportReportResponse" + "204": { + "description": "No Content." + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "OK.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportReportResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-planned" : { - "get" : { - "tags" : [ + "/assets/as-planned": { + "get": { + "tags": [ "AssetsAsPlanned" ], - "summary" : "Get assets by pagination", - "description" : "The endpoint returns a paged result of assets.", - "operationId" : "AssetsAsPlanned", - "parameters" : [ + "summary": "Get assets by pagination", + "description": "The endpoint returns a paged result of assets.", + "operationId": "AssetsAsPlanned", + "parameters": [ { - "name" : "pageable", - "in" : "query", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/OwnPageable" + "name": "pageable", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/OwnPageable" } }, { - "name" : "filter", - "in" : "query", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/SearchCriteriaRequestParam" + "name": "filter", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/SearchCriteriaRequestParam" } } ], - "responses" : { - "200" : { - "description" : "Returns the paged result found for Asset", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the paged result found for Asset", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -5339,16 +5378,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -5358,58 +5397,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -5417,17 +5456,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -5436,128 +5475,88 @@ } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-planned/distinctFilterValues" : { - "get" : { - "tags" : [ + "/assets/as-planned/distinctFilterValues": { + "get": { + "tags": [ "Assets", "AssetsAsPlanned" ], - "summary" : "getDistinctFilterValues", - "description" : "The endpoint returns a distinct filter values for given fieldName.", - "operationId" : "distinctFilterValues_1", - "parameters" : [ + "summary": "getDistinctFilterValues", + "description": "The endpoint returns a distinct filter values for given fieldName.", + "operationId": "distinctFilterValues_1", + "parameters": [ { - "name" : "fieldName", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" + "name": "fieldName", + "in": "query", + "required": true, + "schema": { + "type": "string" } }, { - "name" : "size", - "in" : "query", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int32" + "name": "size", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, { - "name" : "startWith", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" + "name": "startWith", + "in": "query", + "required": true, + "schema": { + "type": "string" } }, { - "name" : "owner", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ + "name": "owner", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", @@ -5566,264 +5565,214 @@ } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns a distinct filter values for given fieldName.", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "type": "string" + } } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-planned/*/children/{childId}" : { - "get" : { - "tags" : [ + "/assets/as-planned/*/children/{childId}": { + "get": { + "tags": [ "AssetsAsPlanned" ], - "summary" : "Get asset by child id", - "description" : "The endpoint returns an asset filtered by child id.", - "operationId" : "assetByChildIdAndAssetId", - "parameters" : [ + "summary": "Get asset by child id", + "description": "The endpoint returns an asset filtered by child id.", + "operationId": "assetByChildIdAndAssetId", + "parameters": [ { - "name" : "childId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "childId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "200" : { - "description" : "Returns the asset by childId", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" - }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" - }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" - }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the asset by childId", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" + }, + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" + }, + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" + }, + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -5831,16 +5780,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -5850,58 +5799,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -5909,17 +5858,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -5927,140 +5876,230 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-built" : { - "get" : { - "tags" : [ + "/assets/as-built": { + "get": { + "tags": [ "AssetsAsBuilt" ], - "summary" : "Get assets by pagination", - "description" : "The endpoint returns a paged result of assets.", - "operationId" : "assets", - "parameters" : [ + "summary": "Get assets by pagination", + "description": "The endpoint returns a paged result of assets.", + "operationId": "assets", + "parameters": [ { - "name" : "pageable", - "in" : "query", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/OwnPageable" + "name": "pageable", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/OwnPageable" } }, { - "name" : "searchCriteriaRequestParam", - "in" : "query", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/SearchCriteriaRequestParam" + "name": "searchCriteriaRequestParam", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/SearchCriteriaRequestParam" } } ], - "responses" : { - "200" : { - "description" : "Returns the paged result found for Asset", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the paged result found for Asset", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -6068,16 +6107,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -6087,58 +6126,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -6146,17 +6185,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -6165,128 +6204,88 @@ } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-built/distinctFilterValues" : { - "get" : { - "tags" : [ + "/assets/as-built/distinctFilterValues": { + "get": { + "tags": [ "AssetsAsBuilt", "Assets" ], - "summary" : "getDistinctFilterValues", - "description" : "The endpoint returns a distinct filter values for given fieldName.", - "operationId" : "distinctFilterValues_2", - "parameters" : [ + "summary": "getDistinctFilterValues", + "description": "The endpoint returns a distinct filter values for given fieldName.", + "operationId": "distinctFilterValues_2", + "parameters": [ { - "name" : "fieldName", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" + "name": "fieldName", + "in": "query", + "required": true, + "schema": { + "type": "string" } }, { - "name" : "size", - "in" : "query", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int32" + "name": "size", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, { - "name" : "startWith", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" + "name": "startWith", + "in": "query", + "required": true, + "schema": { + "type": "string" } }, { - "name" : "owner", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ + "name": "owner", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", @@ -6295,368 +6294,338 @@ } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns a distinct filter values for given fieldName.", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "type": "string" + } } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-built/countries" : { - "get" : { - "tags" : [ + "/assets/as-built/countries": { + "get": { + "tags": [ "AssetsAsBuilt" ], - "summary" : "Get map of assets", - "description" : "The endpoint returns a map for assets consumed by the map.", - "operationId" : "assetsCountryMap", - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "summary": "Get map of assets", + "description": "The endpoint returns a map for assets consumed by the map.", + "operationId": "assetsCountryMap", + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns the assets found", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "type": "string" + } } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns the assets found", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/assets/as-built/*/children/{childId}" : { - "get" : { - "tags" : [ + "/assets/as-built/*/children/{childId}": { + "get": { + "tags": [ "AssetsAsBuilt" ], - "summary" : "Get asset by child id", - "description" : "The endpoint returns an asset filtered by child id.", - "operationId" : "assetByChildId", - "parameters" : [ + "summary": "Get asset by child id", + "description": "The endpoint returns an asset filtered by child id.", + "operationId": "assetByChildId", + "parameters": [ { - "name" : "childId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "childId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "200" : { - "description" : "Returns the asset by childId", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Assets", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" - }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" - }, - "semanticModelId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "NO-246880451848384868750731" - }, - "businessPartner" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" - }, - "manufacturerName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "nameAtManufacturer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "manufacturerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "owner" : { - "type" : "string", - "example" : "CUSTOMER", - "enum" : [ + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "200": { + "description": "Returns the asset by childId", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "type": "array", + "description": "Assets", + "items": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + }, + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" + }, + "semanticModelId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "NO-246880451848384868750731" + }, + "businessPartner": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" + }, + "manufacturerName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "nameAtManufacturer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "manufacturerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "owner": { + "type": "string", + "example": "CUSTOMER", + "enum": [ "SUPPLIER", "CUSTOMER", "OWN", "UNKNOWN" ] }, - "childRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Child relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "childRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Child relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "parentRelations" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Parent relationships", - "items" : { - "$ref" : "#/components/schemas/DescriptionsResponse" + "parentRelations": { + "maxItems": 2147483647, + "type": "array", + "description": "Parent relationships", + "items": { + "$ref": "#/components/schemas/DescriptionsResponse" } }, - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -6664,16 +6633,16 @@ "LifeThreatening" ] }, - "van" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "OMAYSKEITUGNVHKKX" + "van": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "OMAYSKEITUGNVHKKX" }, - "semanticDataModel" : { - "type" : "string", - "example" : "BATCH", - "enum" : [ + "semanticDataModel": { + "type": "string", + "example": "BATCH", + "enum": [ "BATCH", "SERIALPART", "UNKNOWN", @@ -6683,58 +6652,58 @@ "TOMBSTONEASPLANNED" ] }, - "classification" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "component" + "classification": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "component" }, - "detailAspectModels" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectModelResponse" + "detailAspectModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectModelResponse" } }, - "sentQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "sentQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "receivedQualityAlertIdsInStatusActive" : { - "type" : "array", - "example" : 1, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "receivedQualityAlertIdsInStatusActive": { + "type": "array", + "example": 1, + "items": { + "type": "integer", + "format": "int64", + "example": 1 } }, - "sentQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "sentQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "receivedQualityInvestigationIdsInStatusActive" : { - "type" : "array", - "example" : 2, - "items" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "receivedQualityInvestigationIdsInStatusActive": { + "type": "array", + "example": 2, + "items": { + "type": "integer", + "format": "int64", + "example": 2 } }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ + "importState": { + "type": "string", + "example": "TRANSIENT", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -6742,17 +6711,17 @@ "UNSET" ] }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" + "importNote": { + "type": "string", + "example": "Asset created successfully in transient state" }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + "tombstone": { + "type": "string", + "example": " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" }, - "contractAgreementId" : { - "type" : "string", - "example" : "TODO" + "contractAgreementId": { + "type": "string", + "example": "TODO" } } } @@ -6760,479 +6729,509 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/alerts/{alertId}" : { - "get" : { - "tags" : [ + "/alerts/{alertId}": { + "get": { + "tags": [ "Alerts" ], - "summary" : "Gets Alert by id", - "description" : "The endpoint returns alert by id.", - "operationId" : "getAlert", - "parameters" : [ + "summary": "Gets Alert by id", + "description": "The endpoint returns alert by id.", + "operationId": "getAlert", + "parameters": [ { - "name" : "alertId", - "in" : "path", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int64" + "name": "alertId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Alerts", - "items" : { - "$ref" : "#/components/schemas/AlertResponse" - } + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "OK.", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "type": "array", + "description": "Alerts", + "items": { + "$ref": "#/components/schemas/AlertResponse" + } } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/alerts/distinctFilterValues" : { - "get" : { - "tags" : [ + "/alerts/distinctFilterValues": { + "get": { + "tags": [ "Assets", "Alerts" ], - "summary" : "getDistinctFilterValues", - "description" : "The endpoint returns a distinct filter values for given fieldName.", - "operationId" : "distinctFilterValues_3", - "parameters" : [ + "summary": "getDistinctFilterValues", + "description": "The endpoint returns a distinct filter values for given fieldName.", + "operationId": "distinctFilterValues_3", + "parameters": [ { - "name" : "fieldName", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" + "name": "fieldName", + "in": "query", + "required": true, + "schema": { + "type": "string" } }, { - "name" : "size", - "in" : "query", - "required" : true, - "schema" : { - "type" : "integer", - "format" : "int32" + "name": "size", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, { - "name" : "startWith", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string" + "name": "startWith", + "in": "query", + "required": true, + "schema": { + "type": "string" } }, { - "name" : "channel", - "in" : "query", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ + "name": "channel", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ "SENDER", "RECEIVER" ] } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", - "content" : { - "application/json" : { - "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Returns a distinct filter values for given fieldName.", + "content": { + "application/json": { + "schema": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "items": { + "type": "string" + } } } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/submodel/data" : { - "delete" : { - "tags" : [ + "/submodel/data": { + "delete": { + "tags": [ "Submodel" ], - "summary" : "Delete All Submodels", - "description" : "Deletes all submodels from the system.", - "operationId" : "deleteSubmodels", - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "summary": "Delete All Submodels", + "description": "Deletes all submodels from the system.", + "operationId": "deleteSubmodels", + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Ok." - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Ok." + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "204": { + "description": "No Content." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204" : { - "description" : "No Content." - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } ] } }, - "/bpn-config/{bpn}" : { - "delete" : { - "tags" : [ + "/bpn-config/{bpn}": { + "delete": { + "tags": [ "BpnEdcMapping" ], - "summary" : "Deletes BPN EDC URL mappings", - "description" : "The endpoint deletes BPN EDC URL mappings", - "operationId" : "deleteBpnEdcUrlMappings", - "parameters" : [ + "summary": "Deletes BPN EDC URL mappings", + "description": "The endpoint deletes BPN EDC URL mappings", + "operationId": "deleteBpnEdcUrlMappings", + "parameters": [ { - "name" : "bpn", - "in" : "path", - "required" : true, - "schema" : { - "type" : "string" + "name": "bpn", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], - "responses" : { - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "responses": { + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "415": { + "description": "Unsupported media type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "500": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "200": { + "description": "Okay" + }, + "204": { + "description": "Deleted." + }, + "400": { + "description": "Bad request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "429": { + "description": "Too many requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "200" : { - "description" : "Okay" - }, - "204" : { - "description" : "Deleted." - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "401": { + "description": "Authorization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, - "security" : [ + "security": [ { - "oAuth2" : [ + "oAuth2": [ "profile email" ] } @@ -7240,210 +7239,209 @@ } } }, - "components" : { - "schemas" : { - "BpnMappingRequest" : { - "required" : [ + "components": { + "schemas": { + "BpnMappingRequest": { + "required": [ "bpn", "url" ], - "type" : "object", - "properties" : { - "bpn" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003CSGV" - }, - "url" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string" + "type": "object", + "properties": { + "bpn": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003CSGV" + }, + "url": { + "maxLength": 255, + "minLength": 0, + "type": "string" } } }, - "ErrorResponse" : { - "type" : "object", - "properties" : { - "message" : { - "maxLength" : 1000, - "minLength" : 0, - "pattern" : "^.*$", - "type" : "string", - "example" : "Access Denied" + "ErrorResponse": { + "type": "object", + "properties": { + "message": { + "maxLength": 1000, + "minLength": 0, + "pattern": "^.*$", + "type": "string" } } }, - "BpnEdcMappingResponse" : { - "type" : "object", - "properties" : { - "bpn" : { - "type" : "string", - "example" : "BPNL00000003CSGV" + "BpnEdcMappingResponse": { + "type": "object", + "properties": { + "bpn": { + "type": "string", + "example": "BPNL00000003CSGV" }, - "url" : { - "type" : "string", - "example" : "https://trace-x-test-edc.dev.demo.catena-x.net/a1" + "url": { + "type": "string", + "example": "https://trace-x-test-edc.dev.demo.catena-x.net/a1" } } }, - "StartQualityNotificationRequest" : { - "required" : [ + "StartQualityNotificationRequest": { + "required": [ "severity" ], - "type" : "object", - "properties" : { - "partIds" : { - "maxLength" : 100, - "minLength" : 1, - "maxItems" : 50, - "minItems" : 1, - "type" : "array", - "example" : [ + "type": "object", + "properties": { + "partIds": { + "maxLength": 100, + "minLength": 1, + "maxItems": 50, + "minItems": 1, + "type": "array", + "example": [ "urn:uuid:fe99da3d-b0de-4e80-81da-882aebcca978" ], - "items" : { - "maxLength" : 100, - "minLength" : 1, - "type" : "string", - "example" : "[\"urn:uuid:fe99da3d-b0de-4e80-81da-882aebcca978\"]" - } - }, - "description" : { - "maxLength" : 1000, - "minLength" : 15, - "type" : "string", - "example" : "The description" - }, - "targetDate" : { - "type" : "string", - "format" : "date-time", - "example" : "2099-03-11T22:44:06.333826952Z" - }, - "severity" : { - "type" : "string", - "enum" : [ + "items": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "example": "[\"urn:uuid:fe99da3d-b0de-4e80-81da-882aebcca978\"]" + } + }, + "description": { + "maxLength": 1000, + "minLength": 15, + "type": "string", + "example": "The description" + }, + "targetDate": { + "type": "string", + "format": "date-time", + "example": "2099-03-11T22:44:06.333826952Z" + }, + "severity": { + "type": "string", + "enum": [ "MINOR", "MAJOR", "CRITICAL", "LIFE_THREATENING" ] }, - "receiverBpn" : { - "type" : "string", - "example" : "BPN00001123123AS" + "receiverBpn": { + "type": "string", + "example": "BPN00001123123AS" }, - "asBuilt" : { - "type" : "boolean" + "asBuilt": { + "type": "boolean" } } }, - "QualityNotificationIdResponse" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "integer", - "format" : "int64", - "example" : 1 + "QualityNotificationIdResponse": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 } } }, - "UpdateQualityNotificationRequest" : { - "required" : [ + "UpdateQualityNotificationRequest": { + "required": [ "status" ], - "type" : "object", - "properties" : { - "status" : { - "type" : "string", - "description" : "The UpdateInvestigationStatus", - "enum" : [ + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The UpdateInvestigationStatus", + "enum": [ "ACKNOWLEDGED", "ACCEPTED", "DECLINED" ] }, - "reason" : { - "type" : "string", - "example" : "The reason." + "reason": { + "type": "string", + "example": "The reason." } } }, - "CloseQualityNotificationRequest" : { - "type" : "object", - "properties" : { - "reason" : { - "maxLength" : 1000, - "minLength" : 15, - "type" : "string", - "example" : "The reason." + "CloseQualityNotificationRequest": { + "type": "object", + "properties": { + "reason": { + "maxLength": 1000, + "minLength": 15, + "type": "string", + "example": "The reason." } } }, - "OwnPageable" : { - "type" : "object", - "properties" : { - "page" : { - "type" : "integer", - "format" : "int32" - }, - "size" : { - "type" : "integer", - "format" : "int32" - }, - "sort" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Content of Assets PageResults", - "example" : "manufacturerPartId,desc", - "items" : { - "type" : "string" + "OwnPageable": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sort": { + "maxItems": 2147483647, + "type": "array", + "description": "Content of Assets PageResults", + "example": "manufacturerPartId,desc", + "items": { + "type": "string" } } } }, - "PageableFilterRequest" : { - "type" : "object", - "properties" : { - "pageAble" : { - "$ref" : "#/components/schemas/OwnPageable" + "PageableFilterRequest": { + "type": "object", + "properties": { + "pageAble": { + "$ref": "#/components/schemas/OwnPageable" }, - "searchCriteria" : { - "$ref" : "#/components/schemas/SearchCriteriaRequestParam" + "searchCriteria": { + "$ref": "#/components/schemas/SearchCriteriaRequestParam" } } }, - "SearchCriteriaRequestParam" : { - "type" : "object", - "properties" : { - "filter" : { - "maxItems" : 2147483647, - "type" : "array", - "description" : "Filter Criteria", - "example" : "owner,EQUAL,OWN", - "items" : { - "type" : "string" + "SearchCriteriaRequestParam": { + "type": "object", + "properties": { + "filter": { + "maxItems": 2147483647, + "type": "array", + "description": "Filter Criteria", + "example": "owner,EQUAL,OWN", + "items": { + "type": "string" } } } }, - "InvestigationResponse" : { - "type" : "object", - "properties" : { - "id" : { - "maximum" : 255, - "minimum" : 0, - "maxLength" : 255, - "type" : "integer", - "format" : "int64", - "example" : 66 - }, - "status" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "CREATED", - "enum" : [ + "InvestigationResponse": { + "type": "object", + "properties": { + "id": { + "maximum": 255, + "minimum": 0, + "maxLength": 255, + "type": "integer", + "format": "int64", + "example": 66 + }, + "status": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "CREATED", + "enum": [ "CREATED", "SENT", "RECEIVED", @@ -7454,161 +7452,161 @@ "CLOSED" ] }, - "description" : { - "maxLength" : 1000, - "minLength" : 0, - "type" : "string", - "example" : "DescriptionText" - }, - "createdBy" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003AYRE" - }, - "createdByName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "createdDate" : { - "maxLength" : 50, - "minLength" : 0, - "type" : "string", - "example" : "2023-02-21T21:27:10.734950Z" - }, - "assetIds" : { - "maxItems" : 1000, - "minItems" : 0, - "type" : "array", - "example" : [ + "description": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "example": "DescriptionText" + }, + "createdBy": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003AYRE" + }, + "createdByName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "createdDate": { + "maxLength": 50, + "minLength": 0, + "type": "string", + "example": "2023-02-21T21:27:10.734950Z" + }, + "assetIds": { + "maxItems": 1000, + "minItems": 0, + "type": "array", + "example": [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd" ], - "items" : { - "type" : "string", - "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" + "items": { + "type": "string", + "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" } }, - "channel" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "SENDER", - "enum" : [ + "channel": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "SENDER", + "enum": [ "SENDER", "RECEIVER" ] }, - "reason" : { - "$ref" : "#/components/schemas/QualityNotificationReasonResponse" - }, - "sendTo" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003AYRE" - }, - "sendToName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "severity" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "MINOR", - "enum" : [ + "reason": { + "$ref": "#/components/schemas/QualityNotificationReasonResponse" + }, + "sendTo": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003AYRE" + }, + "sendToName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "severity": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "MINOR", + "enum": [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "targetDate" : { - "maxLength" : 50, - "minLength" : 0, - "type" : "string", - "example" : "2099-02-21T21:27:10.734950Z" + "targetDate": { + "maxLength": 50, + "minLength": 0, + "type": "string", + "example": "2099-02-21T21:27:10.734950Z" }, - "errorMessage" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "EDC not reachable" + "errorMessage": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "EDC not reachable" }, - "qualityNotificationMessageResponseList" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/QualityNotificationMessageResponse" + "qualityNotificationMessageResponseList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityNotificationMessageResponse" } } } }, - "QualityNotificationMessageResponse" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string" + "QualityNotificationMessageResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "createdBy" : { - "type" : "string" + "createdBy": { + "type": "string" }, - "createdByName" : { - "type" : "string" + "createdByName": { + "type": "string" }, - "sendTo" : { - "type" : "string" + "sendTo": { + "type": "string" }, - "sendToName" : { - "type" : "string" + "sendToName": { + "type": "string" }, - "edcUrl" : { - "type" : "string" + "edcUrl": { + "type": "string" }, - "contractAgreementId" : { - "type" : "string" + "contractAgreementId": { + "type": "string" }, - "notificationReferenceId" : { - "type" : "string" + "notificationReferenceId": { + "type": "string" }, - "targetDate" : { - "type" : "string", - "format" : "date-time" + "targetDate": { + "type": "string", + "format": "date-time" }, - "severity" : { - "type" : "string", - "enum" : [ + "severity": { + "type": "string", + "enum": [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "edcNotificationId" : { - "type" : "string" + "edcNotificationId": { + "type": "string" }, - "created" : { - "type" : "string", - "format" : "date-time" + "created": { + "type": "string", + "format": "date-time" }, - "updated" : { - "type" : "string", - "format" : "date-time" + "updated": { + "type": "string", + "format": "date-time" }, - "messageId" : { - "type" : "string" + "messageId": { + "type": "string" }, - "isInitial" : { - "type" : "boolean" + "isInitial": { + "type": "boolean" }, - "status" : { - "type" : "string", - "enum" : [ + "status": { + "type": "string", + "enum": [ "CREATED", "SENT", "RECEIVED", @@ -7619,51 +7617,51 @@ "CLOSED" ] }, - "errorMessage" : { - "type" : "string" + "errorMessage": { + "type": "string" } } }, - "QualityNotificationReasonResponse" : { - "type" : "object", - "properties" : { - "close" : { - "maxLength" : 1000, - "minLength" : 0, - "type" : "string", - "example" : "description of closing reason" - }, - "accept" : { - "maxLength" : 1000, - "minLength" : 0, - "type" : "string", - "example" : "description of accepting reason" - }, - "decline" : { - "maxLength" : 1000, - "minLength" : 0, - "type" : "string", - "example" : "description of declining reason" + "QualityNotificationReasonResponse": { + "type": "object", + "properties": { + "close": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "example": "description of closing reason" + }, + "accept": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "example": "description of accepting reason" + }, + "decline": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "example": "description of declining reason" } } }, - "CreateNotificationContractRequest" : { - "required" : [ + "CreateNotificationContractRequest": { + "required": [ "notificationMethod", "notificationType" ], - "type" : "object", - "properties" : { - "notificationType" : { - "type" : "string", - "enum" : [ + "type": "object", + "properties": { + "notificationType": { + "type": "string", + "enum": [ "QUALITY_INVESTIGATION", "QUALITY_ALERT" ] }, - "notificationMethod" : { - "type" : "string", - "enum" : [ + "notificationMethod": { + "type": "string", + "enum": [ "RECEIVE", "UPDATE", "RESOLVE" @@ -7671,284 +7669,284 @@ } } }, - "CreateNotificationContractResponse" : { - "type" : "object", - "properties" : { - "notificationAssetId" : { - "type" : "string", - "example" : "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" + "CreateNotificationContractResponse": { + "type": "object", + "properties": { + "notificationAssetId": { + "type": "string", + "example": "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" }, - "accessPolicyId" : { - "type" : "string", - "example" : "123" + "accessPolicyId": { + "type": "string", + "example": "123" }, - "contractDefinitionId" : { - "type" : "string", - "example" : "456" + "contractDefinitionId": { + "type": "string", + "example": "456" } } }, - "ContractResponse" : { - "type" : "object", - "properties" : { - "contractId" : { - "maxLength" : 255, - "type" : "string", - "example" : "66" - }, - "counterpartyAddress" : { - "maxLength" : 255, - "type" : "string", - "example" : "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp" - }, - "creationDate" : { - "maxLength" : 255, - "type" : "string", - "format" : "date-time", - "example" : "2023-02-21T21:27:10.73495Z" - }, - "endDate" : { - "maxLength" : 255, - "type" : "string", - "format" : "date-time", - "example" : "2023-02-21T21:27:10.73495Z" - }, - "state" : { - "maxLength" : 255, - "type" : "string", - "example" : "FINALIZED" - }, - "policy" : { - "maxLength" : 255, - "type" : "string", - "example" : "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}" + "ContractResponse": { + "type": "object", + "properties": { + "contractId": { + "maxLength": 255, + "type": "string", + "example": "66" + }, + "counterpartyAddress": { + "maxLength": 255, + "type": "string", + "example": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp" + }, + "creationDate": { + "maxLength": 255, + "type": "string", + "format": "date-time", + "example": "2023-02-21T21:27:10.73495Z" + }, + "endDate": { + "maxLength": 255, + "type": "string", + "format": "date-time", + "example": "2023-02-21T21:27:10.73495Z" + }, + "state": { + "maxLength": 255, + "type": "string", + "example": "FINALIZED" + }, + "policy": { + "maxLength": 255, + "type": "string", + "example": "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}" } } }, - "PageResultContractResponse" : { - "type" : "object", - "properties" : { - "content" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "description" : "Content of PageResults", - "items" : { - "$ref" : "#/components/schemas/ContractResponse" - } - }, - "page" : { - "type" : "integer", - "format" : "int32", - "example" : 1 - }, - "pageCount" : { - "type" : "integer", - "format" : "int32", - "example" : 15 - }, - "pageSize" : { - "type" : "integer", - "format" : "int32", - "example" : 10 - }, - "totalItems" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "PageResultContractResponse": { + "type": "object", + "properties": { + "content": { + "maxItems": 2147483647, + "minItems": 0, + "type": "array", + "description": "Content of PageResults", + "items": { + "$ref": "#/components/schemas/ContractResponse" + } + }, + "page": { + "type": "integer", + "format": "int32", + "example": 1 + }, + "pageCount": { + "type": "integer", + "format": "int32", + "example": 15 + }, + "pageSize": { + "type": "integer", + "format": "int32", + "example": 10 + }, + "totalItems": { + "type": "integer", + "format": "int64", + "example": 2 } } }, - "RegisterAssetRequest" : { - "required" : [ + "RegisterAssetRequest": { + "required": [ "assetIds", "policyId" ], - "type" : "object", - "properties" : { - "policyId" : { - "type" : "string", - "example" : "a644a7cb-3de5-493b-9259-f01db315a46e" + "type": "object", + "properties": { + "policyId": { + "type": "string", + "example": "a644a7cb-3de5-493b-9259-f01db315a46e" }, - "assetIds" : { - "type" : "array", - "items" : { - "type" : "string" + "assetIds": { + "type": "array", + "items": { + "type": "string" } } } }, - "SyncAssetsRequest" : { - "type" : "object", - "properties" : { - "globalAssetIds" : { - "maxItems" : 100, - "minItems" : 1, - "type" : "array", - "example" : [ + "SyncAssetsRequest": { + "type": "object", + "properties": { + "globalAssetIds": { + "maxItems": 100, + "minItems": 1, + "type": "array", + "example": [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" ], - "items" : { - "type" : "string", - "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\"]" + "items": { + "type": "string", + "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\"]" } } } }, - "GetDetailInformationRequest" : { - "type" : "object", - "properties" : { - "assetIds" : { - "maxLength" : 50, - "minLength" : 1, - "maxItems" : 50, - "minItems" : 1, - "type" : "array", - "example" : [ + "GetDetailInformationRequest": { + "type": "object", + "properties": { + "assetIds": { + "maxLength": 50, + "minLength": 1, + "maxItems": 50, + "minItems": 1, + "type": "array", + "example": [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd" ], - "items" : { - "maxLength" : 50, - "minLength" : 1, - "type" : "string", - "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\"]" + "items": { + "maxLength": 50, + "minLength": 1, + "type": "string", + "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\"]" } } } }, - "DescriptionsResponse" : { - "type" : "object", - "properties" : { - "id" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "urn:uuid:a4a26b9c-9460-4cc5-8645-85916b86adb0" - }, - "idShort" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "assembly-part-relationship" + "DescriptionsResponse": { + "type": "object", + "properties": { + "id": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "urn:uuid:a4a26b9c-9460-4cc5-8645-85916b86adb0" + }, + "idShort": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "assembly-part-relationship" } } }, - "DetailAspectDataAsBuiltResponse" : { - "type" : "object", - "properties" : { - "partId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "95657762-59" - }, - "customerPartId" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "01697F7-65" - }, - "nameAtCustomer" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Door front-left" - }, - "manufacturingCountry" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "DEU" - }, - "manufacturingDate" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "2022-02-04T13:48:54Z" + "DetailAspectDataAsBuiltResponse": { + "type": "object", + "properties": { + "partId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "95657762-59" + }, + "customerPartId": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "01697F7-65" + }, + "nameAtCustomer": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Door front-left" + }, + "manufacturingCountry": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "DEU" + }, + "manufacturingDate": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "2022-02-04T13:48:54Z" } } }, - "DetailAspectDataAsPlannedResponse" : { - "type" : "object", - "properties" : { - "validityPeriodFrom" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "2022-09-26T12:43:51.079Z" - }, - "validityPeriodTo" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "20232-07-13T12:00:00.000Z" + "DetailAspectDataAsPlannedResponse": { + "type": "object", + "properties": { + "validityPeriodFrom": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "2022-09-26T12:43:51.079Z" + }, + "validityPeriodTo": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "20232-07-13T12:00:00.000Z" } } }, - "DetailAspectDataResponse" : { - "type" : "object", - "oneOf" : [ + "DetailAspectDataResponse": { + "type": "object", + "oneOf": [ { - "$ref" : "#/components/schemas/DetailAspectDataAsBuiltResponse" + "$ref": "#/components/schemas/DetailAspectDataAsBuiltResponse" }, { - "$ref" : "#/components/schemas/DetailAspectDataAsPlannedResponse" + "$ref": "#/components/schemas/DetailAspectDataAsPlannedResponse" }, { - "$ref" : "#/components/schemas/PartSiteInformationAsPlannedResponse" + "$ref": "#/components/schemas/PartSiteInformationAsPlannedResponse" }, { - "$ref" : "#/components/schemas/DetailAspectDataTractionBatteryCodeResponse" + "$ref": "#/components/schemas/DetailAspectDataTractionBatteryCodeResponse" } ] }, - "DetailAspectDataTractionBatteryCodeResponse" : { - "type" : "object", - "properties" : { - "productType" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "pack" - }, - "tractionBatteryCode" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "X12MCPM27KLPCLX2M2382320" - }, - "subcomponents" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/DetailAspectDataTractionBatteryCodeSubcomponentResponse" + "DetailAspectDataTractionBatteryCodeResponse": { + "type": "object", + "properties": { + "productType": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "pack" + }, + "tractionBatteryCode": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "X12MCPM27KLPCLX2M2382320" + }, + "subcomponents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailAspectDataTractionBatteryCodeSubcomponentResponse" } } } }, - "DetailAspectDataTractionBatteryCodeSubcomponentResponse" : { - "type" : "object", - "properties" : { - "productType" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "pack" - }, - "tractionBatteryCode" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "X12MCPM27KLPCLX2M2382320" + "DetailAspectDataTractionBatteryCodeSubcomponentResponse": { + "type": "object", + "properties": { + "productType": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "pack" + }, + "tractionBatteryCode": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "X12MCPM27KLPCLX2M2382320" } } }, - "DetailAspectModelResponse" : { - "type" : "object", - "properties" : { - "type" : { - "type" : "string", - "example" : "PART_SITE_INFORMATION_AS_PLANNED", - "enum" : [ + "DetailAspectModelResponse": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "PART_SITE_INFORMATION_AS_PLANNED", + "enum": [ "AS_BUILT", "AS_PLANNED", "TRACTION_BATTERY_CODE", @@ -7958,49 +7956,49 @@ "PART_SITE_INFORMATION_AS_PLANNED" ] }, - "data" : { - "$ref" : "#/components/schemas/DetailAspectDataResponse" + "data": { + "$ref": "#/components/schemas/DetailAspectDataResponse" } } }, - "PartSiteInformationAsPlannedResponse" : { - "type" : "object", - "properties" : { - "functionValidUntil" : { - "type" : "string", - "example" : "2025-02-08T04:30:48.000Z" + "PartSiteInformationAsPlannedResponse": { + "type": "object", + "properties": { + "functionValidUntil": { + "type": "string", + "example": "2025-02-08T04:30:48.000Z" }, - "function" : { - "type" : "string", - "example" : "production" + "function": { + "type": "string", + "example": "production" }, - "functionValidFrom" : { - "type" : "string", - "example" : "2023-10-13T14:30:45+01:00" + "functionValidFrom": { + "type": "string", + "example": "2023-10-13T14:30:45+01:00" }, - "catenaXSiteId" : { - "type" : "string", - "example" : "urn:uuid:0fed587c-7ab4-4597-9841-1718e9693003" + "catenaXSiteId": { + "type": "string", + "example": "urn:uuid:0fed587c-7ab4-4597-9841-1718e9693003" } } }, - "AlertResponse" : { - "type" : "object", - "properties" : { - "id" : { - "maximum" : 255, - "minimum" : 0, - "maxLength" : 255, - "type" : "integer", - "format" : "int64", - "example" : 66 - }, - "status" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "CREATED", - "enum" : [ + "AlertResponse": { + "type": "object", + "properties": { + "id": { + "maximum": 255, + "minimum": 0, + "maxLength": 255, + "type": "integer", + "format": "int64", + "example": 66 + }, + "status": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "CREATED", + "enum": [ "CREATED", "SENT", "RECEIVED", @@ -8011,111 +8009,111 @@ "CLOSED" ] }, - "description" : { - "maxLength" : 1000, - "minLength" : 0, - "type" : "string", - "example" : "DescriptionText" - }, - "createdBy" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003AYRE" - }, - "createdByName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "createdDate" : { - "maxLength" : 50, - "minLength" : 0, - "type" : "string", - "example" : "2023-02-21T21:27:10.734950Z" - }, - "assetIds" : { - "maxItems" : 1000, - "minItems" : 0, - "type" : "array", - "example" : [ + "description": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "example": "DescriptionText" + }, + "createdBy": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003AYRE" + }, + "createdByName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "createdDate": { + "maxLength": 50, + "minLength": 0, + "type": "string", + "example": "2023-02-21T21:27:10.734950Z" + }, + "assetIds": { + "maxItems": 1000, + "minItems": 0, + "type": "array", + "example": [ "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd", "urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd" ], - "items" : { - "type" : "string", - "example" : "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" + "items": { + "type": "string", + "example": "[\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70528fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70529fcbd\",\"urn:uuid:ceb6b964-5779-49c1-b5e9-0ee70530fcbd\"]" } }, - "channel" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "SENDER", - "enum" : [ + "channel": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "SENDER", + "enum": [ "SENDER", "RECEIVER" ] }, - "reason" : { - "$ref" : "#/components/schemas/QualityNotificationReasonResponse" - }, - "sendTo" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "BPNL00000003AYRE" - }, - "sendToName" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "Tier C" - }, - "severity" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "MINOR", - "enum" : [ + "reason": { + "$ref": "#/components/schemas/QualityNotificationReasonResponse" + }, + "sendTo": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "BPNL00000003AYRE" + }, + "sendToName": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "Tier C" + }, + "severity": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "MINOR", + "enum": [ "MINOR", "MAJOR", "CRITICAL", "LIFE-THREATENING" ] }, - "targetDate" : { - "maxLength" : 50, - "minLength" : 0, - "type" : "string", - "example" : "2099-02-21T21:27:10.734950Z" + "targetDate": { + "maxLength": 50, + "minLength": 0, + "type": "string", + "example": "2099-02-21T21:27:10.734950Z" }, - "errorMessage" : { - "maxLength" : 255, - "minLength" : 0, - "type" : "string", - "example" : "EDC not reachable" + "errorMessage": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "example": "EDC not reachable" }, - "qualityNotificationMessageResponseList" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/QualityNotificationMessageResponse" + "qualityNotificationMessageResponseList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityNotificationMessageResponse" } } } }, - "UpdateAssetRequest" : { - "required" : [ + "UpdateAssetRequest": { + "required": [ "qualityType" ], - "type" : "object", - "properties" : { - "qualityType" : { - "type" : "string", - "example" : "Ok", - "enum" : [ + "type": "object", + "properties": { + "qualityType": { + "type": "string", + "example": "Ok", + "enum": [ "Ok", "Minor", "Major", @@ -8125,16 +8123,16 @@ } } }, - "ConstraintResponse" : { - "type" : "object", - "properties" : { - "leftOperand" : { - "type" : "string", - "example" : "PURPOSE" - }, - "operatorTypeResponse" : { - "type" : "string", - "enum" : [ + "ConstraintResponse": { + "type": "object", + "properties": { + "leftOperand": { + "type": "string", + "example": "PURPOSE" + }, + "operatorTypeResponse": { + "type": "string", + "enum": [ "EQ", "NEQ", "LT", @@ -8150,208 +8148,201 @@ "ISNONEOF" ] }, - "rightOperands" : { - "type" : "array", - "example" : "ID Trace 3.1", - "items" : { - "type" : "string", - "example" : "ID Trace 3.1" - } + "rightOperand": { + "type": "string", + "example": "ID Trace 3.1" } } }, - "ConstraintsResponse" : { - "type" : "object", - "properties" : { - "and" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/ConstraintResponse" + "ConstraintsResponse": { + "type": "object", + "properties": { + "and": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConstraintResponse" } }, - "or" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/ConstraintResponse" + "or": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConstraintResponse" } } } }, - "PermissionResponse" : { - "type" : "object", - "properties" : { - "action" : { - "type" : "string", - "example" : "USE", - "enum" : [ + "PermissionResponse": { + "type": "object", + "properties": { + "action": { + "type": "string", + "example": "USE", + "enum": [ "ACCESS", "USE" ] }, - "constraints" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/ConstraintsResponse" - } + "constraints": { + "$ref": "#/components/schemas/ConstraintsResponse" } } }, - "PolicyResponse" : { - "type" : "object", - "properties" : { - "policyId" : { - "type" : "string", - "example" : "5a00bb50-0253-405f-b9f1-1a3150b9d51d" + "PolicyResponse": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "example": "5a00bb50-0253-405f-b9f1-1a3150b9d51d" }, - "createdOn" : { - "type" : "string", - "format" : "date-time" + "createdOn": { + "type": "string", + "format": "date-time" }, - "validUntil" : { - "type" : "string", - "format" : "date-time" + "validUntil": { + "type": "string", + "format": "date-time" }, - "permissions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/PermissionResponse" + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionResponse" } } } }, - "DashboardResponse" : { - "type" : "object", - "properties" : { - "asBuiltCustomerParts" : { - "type" : "integer", - "format" : "int64", - "example" : 5 - }, - "asPlannedCustomerParts" : { - "type" : "integer", - "format" : "int64", - "example" : 10 - }, - "asBuiltSupplierParts" : { - "type" : "integer", - "format" : "int64", - "example" : 2 - }, - "asPlannedSupplierParts" : { - "type" : "integer", - "format" : "int64", - "example" : 3 - }, - "asBuiltOwnParts" : { - "type" : "integer", - "format" : "int64", - "example" : 1 - }, - "asPlannedOwnParts" : { - "type" : "integer", - "format" : "int64", - "example" : 1 - }, - "myPartsWithOpenAlerts" : { - "type" : "integer", - "format" : "int64", - "example" : 1 - }, - "myPartsWithOpenInvestigations" : { - "type" : "integer", - "format" : "int64", - "example" : 1 - }, - "supplierPartsWithOpenAlerts" : { - "type" : "integer", - "format" : "int64", - "example" : 1 - }, - "customerPartsWithOpenAlerts" : { - "type" : "integer", - "format" : "int64", - "example" : 1 - }, - "supplierPartsWithOpenInvestigations" : { - "type" : "integer", - "format" : "int64", - "example" : 2 - }, - "customerPartsWithOpenInvestigations" : { - "type" : "integer", - "format" : "int64", - "example" : 2 - }, - "receivedActiveAlerts" : { - "type" : "integer", - "format" : "int64", - "example" : 2 - }, - "receivedActiveInvestigations" : { - "type" : "integer", - "format" : "int64", - "example" : 2 - }, - "sentActiveAlerts" : { - "type" : "integer", - "format" : "int64", - "example" : 2 - }, - "sentActiveInvestigations" : { - "type" : "integer", - "format" : "int64", - "example" : 2 + "DashboardResponse": { + "type": "object", + "properties": { + "asBuiltCustomerParts": { + "type": "integer", + "format": "int64", + "example": 5 + }, + "asPlannedCustomerParts": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "asBuiltSupplierParts": { + "type": "integer", + "format": "int64", + "example": 2 + }, + "asPlannedSupplierParts": { + "type": "integer", + "format": "int64", + "example": 3 + }, + "asBuiltOwnParts": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "asPlannedOwnParts": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "myPartsWithOpenAlerts": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "myPartsWithOpenInvestigations": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "supplierPartsWithOpenAlerts": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "customerPartsWithOpenAlerts": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "supplierPartsWithOpenInvestigations": { + "type": "integer", + "format": "int64", + "example": 2 + }, + "customerPartsWithOpenInvestigations": { + "type": "integer", + "format": "int64", + "example": 2 + }, + "receivedActiveAlerts": { + "type": "integer", + "format": "int64", + "example": 2 + }, + "receivedActiveInvestigations": { + "type": "integer", + "format": "int64", + "example": 2 + }, + "sentActiveAlerts": { + "type": "integer", + "format": "int64", + "example": 2 + }, + "sentActiveInvestigations": { + "type": "integer", + "format": "int64", + "example": 2 } } }, - "ImportJobResponse" : { - "type" : "object", - "properties" : { - "importJobStatus" : { - "type" : "string", - "enum" : [ + "ImportJobResponse": { + "type": "object", + "properties": { + "importJobStatus": { + "type": "string", + "enum": [ "INITIALIZING", "RUNNING", "ERROR", "COMPLETED" ] }, - "importId" : { - "type" : "string", - "example" : "456a952e-05eb-40dc-a6f2-9c2cb9c1387f" + "importId": { + "type": "string", + "example": "456a952e-05eb-40dc-a6f2-9c2cb9c1387f" }, - "startedOn" : { - "maxLength" : 50, - "type" : "string", - "example" : "2099-02-21T21:27:10.734950Z" + "startedOn": { + "maxLength": 50, + "type": "string", + "example": "2099-02-21T21:27:10.734950Z" }, - "completedOn" : { - "maxLength" : 50, - "type" : "string", - "example" : "2099-02-21T21:27:10.734950Z" + "completedOn": { + "maxLength": 50, + "type": "string", + "example": "2099-02-21T21:27:10.734950Z" } } }, - "ImportReportResponse" : { - "type" : "object", - "properties" : { - "importJob" : { - "$ref" : "#/components/schemas/ImportJobResponse" + "ImportReportResponse": { + "type": "object", + "properties": { + "importJob": { + "$ref": "#/components/schemas/ImportJobResponse" }, - "importedAsset" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/ImportedAssetResponse" + "importedAsset": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportedAssetResponse" } } } }, - "ImportedAssetResponse" : { - "type" : "object", - "properties" : { - "importState" : { - "type" : "string", - "enum" : [ + "ImportedAssetResponse": { + "type": "object", + "properties": { + "importState": { + "type": "string", + "enum": [ "TRANSIENT", "PERSISTENT", "ERROR", @@ -8359,30 +8350,30 @@ "UNSET" ] }, - "catenaxId" : { - "type" : "string", - "example" : "urn:uuid:7eeeac86-7b69-444d-81e6-655d0f1513bd}" + "catenaxId": { + "type": "string", + "example": "urn:uuid:7eeeac86-7b69-444d-81e6-655d0f1513bd}" }, - "importedOn" : { - "maxLength" : 50, - "type" : "string", - "example" : "2099-02-21T21:27:10.734950Z" + "importedOn": { + "maxLength": 50, + "type": "string", + "example": "2099-02-21T21:27:10.734950Z" }, - "importMessage" : { - "type" : "string", - "example" : "Asset created successfully in transient state." + "importMessage": { + "type": "string", + "example": "Asset created successfully in transient state." } } } }, - "securitySchemes" : { - "oAuth2" : { - "type" : "oauth2", - "flows" : { - "clientCredentials" : { - "tokenUrl" : "localhost", - "scopes" : { - "profile email" : "" + "securitySchemes": { + "oAuth2": { + "type": "oauth2", + "flows": { + "clientCredentials": { + "tokenUrl": "localhost", + "scopes": { + "profile email": "" } } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java index c177b6215b..5f766b836f 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java @@ -50,7 +50,7 @@ public class ContractController { @Operation(operationId = "contracts", summary = "All contract agreements for all assets", - tags = {"getContracts"}, + tags = {"Contracts"}, description = "This endpoint returns all contract agreements for alls assets in Trace-X", security = @SecurityRequirement(name = "oAuth2", scopes = "profile email")) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Ok."), @@ -59,44 +59,44 @@ public class ContractController { description = "Bad request.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + schema = @Schema(implementation = ErrorResponse.class, example = "Bad request."))), @ApiResponse( responseCode = "401", description = "Authorization failed.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + schema = @Schema(implementation = ErrorResponse.class, example = "Authorization failed."))), @ApiResponse( responseCode = "403", description = "Forbidden.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + schema = @Schema(implementation = ErrorResponse.class, example = "Forbidden."))), @ApiResponse( responseCode = "404", description = "Not found.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + schema = @Schema(implementation = ErrorResponse.class, example = "Not found."))), @ApiResponse( responseCode = "415", - description = "Unsupported media type", + description = "Unsupported media type.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + schema = @Schema(implementation = ErrorResponse.class, example = "Unsupported media type."))), @ApiResponse( responseCode = "429", description = "Too many requests.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + schema = @Schema(implementation = ErrorResponse.class, example = "Too many requests."))), @ApiResponse( responseCode = "500", description = "Internal server error.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class)))}) + schema = @Schema(implementation = ErrorResponse.class, example = "Internal server error.")))}) @PostMapping public PageResult getContracts(@Valid @RequestBody PageableFilterRequest pageableFilterRequest) { PageResult contracts = contractService.getContracts(pageableFilterRequest); diff --git a/tx-models/src/main/java/assets/importpoc/ErrorResponse.java b/tx-models/src/main/java/assets/importpoc/ErrorResponse.java index e805a2779a..246fef480a 100644 --- a/tx-models/src/main/java/assets/importpoc/ErrorResponse.java +++ b/tx-models/src/main/java/assets/importpoc/ErrorResponse.java @@ -19,12 +19,10 @@ package assets.importpoc; -import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints.Size; public record ErrorResponse( - @Schema(example = "Access Denied") @Size(max = 1000) @Pattern(regexp = "^.*$", message = "Invalid message pattern") String message From f1495d6c7f9bf95bc5695250001edf301d3b1bfc Mon Sep 17 00:00:00 2001 From: Christian Rehm Date: Wed, 13 Mar 2024 12:02:45 +0100 Subject: [PATCH 76/87] chore(concept): #578 integrate feedback --- .../#578-consistent-null-values.md | 19 +++++++++--------- .../null-value-display-empty.png | Bin 82077 -> 0 bytes .../null-value-display.png | Bin 0 -> 497269 bytes .../null-value-filter.png | Bin 9747 -> 33589 bytes 4 files changed, 9 insertions(+), 10 deletions(-) delete mode 100644 docs/concept/#578-consistent-null-values/null-value-display-empty.png create mode 100644 docs/concept/#578-consistent-null-values/null-value-display.png diff --git a/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md b/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md index d1e86fbd47..78d8377290 100644 --- a/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md +++ b/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md @@ -29,11 +29,11 @@ These should be consistent throughout Trace-X. # Requirements - Whenever a string value is saved or updated in the database and during data consumption from IRS: - - [ ] Leading and trailing whitespace characters are trimmed. - - [ ] Empty strings ("") are all converted to null. -- [ ] Null values are shown *empty* in the frontend. -- [ ] When sorting columns, empty values are shown all the way on the bottom regardless of the sort order. -- [ ] Empty values can be filtered and searched for. They are shown as "(Blank)" (de: "(Leer)") when filtering for them and can be searched by inputting the same term. + - [ ] Leading and trailing whitespace characters are trimmed. + - [ ] Empty strings ("") are all converted to null. +- [ ] Null values are shown as a hyphen "-" in the frontend. +- [ ] When sorting columns, empty values are shown all the way at the top regardless of the sort order. +- [ ] Empty values can be filtered for. They are shown as "*empty field*" when filtering for them. This option is always shown at the top of the filter/search box regardless of what the user is searching for. - [ ] Leading and trailing whitespace characters don't count as mandatory values during user input. # Out of scope @@ -47,13 +47,12 @@ Whenever a string is saved or updated in the database and during data consumptio 3. Save/update value in database ### Frontend -Null values should be shown in the frontend as empty: +Null values should be shown in the frontend as a hyphen: -![null-value-display-empty.png](null-value-display-empty.png) +![null-value-display.png](null-value-display.png) -When sorting the values, empty ones should be always shown at the bottom regardless of the sort order. -Filtering and searching for empty values must be possible. In the filter box (Blank) (de: (Leer)) should be shown at the bottom. -To search for it, the user must type in the term "(Blank)" (de: (Leer)). +When sorting the values, empty ones should be always shown at the top regardless of the sort order. +Filtering for empty values must be possible. In the filter box "*empty field*" should always be shown at the top regardless of what the user is searching for. ![null-value-filter.png](null-value-filter.png) diff --git a/docs/concept/#578-consistent-null-values/null-value-display-empty.png b/docs/concept/#578-consistent-null-values/null-value-display-empty.png deleted file mode 100644 index 2cb87a989d4cf56baada29e80214f56bbcf91af5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82077 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 S22ToOml3czm5aFnLkzDw*& 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 S3sSiCwUxQug{t#c?)?vW{WpOC diff --git a/docs/concept/#578-consistent-null-values/null-value-display.png b/docs/concept/#578-consistent-null-values/null-value-display.png new file mode 100644 index 0000000000000000000000000000000000000000..561d0687a81e8358152569865afd9bc82a9b7068 GIT binary patch literal 497269 zcmeFZWmH?;x+q*)ti=ixx8f9cm*Vd3?(R-XaSiTL3KVzu;>C+Q6nBRN5(1ZZ@AHju z?*7hx$3Fk>kF1Q9G1px4aZi+rk~G>o!gsG;y+V_fkx+Z}3X|g1D|kv|#Ft;}7!Lq1 zUvTbf(qgZwCy9?>?W0IRrQiKhysb!%@+DMQ0N? z4zG4H{#(yq!l%{0bwSU*$}(~Qc+r;kmP$oe(@>L612lfYCWuRL4$kx6jRSw&?tTKi zA`g8phWwvgc6)p?BLCCHq3`=7sQ&ZCG!*~I3I4esvVz2acHqC3n^Iu?=Zmou|3g%~ z>eBB@^)2AUYMQuSC9Xpm!8esD4m76%pgT%cnC7$>q{ss zEBN#KU={c+o7ZIyaC>%dCcN<0pI(J*sXz@EcB-!oD~_*z4|hESQ~$Sb)qtHJ{rU3> zsgNA9&V9TmxDAIFON5fq;YqM4EE1zE@`Owla2dQGK^7PdoH85=J5kRt=J|OJq|_`e zoF*}GaS7czeDy~2oTvK6uzZD+Fpg7`B2k3)Z%xAgpec`9woO=-eovo#Uv&DWJ3^Ts zO>x+4>g`C{BJ59g0lT(*+=Wj4$(*IVx>Z-+Ix5K@ic+_BIc`h8no-^yfF3xTS!rSv zQbvBJ02&lWNp)1Dir_yTjfgxM%wNp3uUGHqL;bn_cS>x=xqrGBF8-XXaMS)fzGrVs z$Cs*1{Z`+-*TO;1hMi9_WIMx~0Nkm3z9?*Ek+_S%3;!%-p}^P5`2o1rc>n^Drw4l< zXo#}w`3#dmS4*s9E>3|4X-J_s@s4nKAvq$j4P-nzZ4>&&R=Z?Yv`j;+K;?78@?22Q z53K0Y8ole(;T&kk|I&QGxQR((T|Ay&P1qrBoY^wwLAit<=H-1Jpe%pJIi|J=u9mIy z6Ki_SAZra%TWxs8y*DC$*fju;H$+gUxuVB6Yr~(ZpYMk}pOeZZsOVi~iq%9v zzW*}3Bg&tfHh!wxH~Ia%@GNs% zp_~KVd0M(Ti66s{3+H_=-7ivH=}I83s97^iasy4VM-Sf-5erlS1_x|j0DIzh?+WHl zIvy$Y|1ud*wsvg6kY(6MLpioCw6R zuXwmyGVkWl6p4pk=RdC9GtcdB_!zSr4Q~#?PQZNKcs7deq*-e5~IYZ4-A0d3imX;>Jo_6>Hhk{)MvrZ zNv@sr(5;Kc7oJWF9XPo&Gc|<+pRe~14IvsZr>7+p&D#a)<^vpZ=dS)vrzJV_V2->G z389Qdzu37v)M0?0klFz>%CPKhFdBucV?}iDhI5UD-h=PWpAvQ=I_LV!BakSG$>JN^ z%fWsLh#@7ZcLSw&>%9B0m5kE5ByLjT za**&y-FApCwYeWFApmwlqv-1aE9HW=njfay-6#tgl!9nBL0wzfPi^34kxF{)b$e1_ z*85iTCqKEsIic$pVxF@7(_s?+H2QRY*?rmzRGFmtvz*(1eTQ*1eIn9}VeErDl_OkC zjX#YQm*Xp?5hbH!`&L>>5XPD3cMPBB2cc5R<&U$@;|sCgg+&Zk6j4ug-Lo6{-idbx zniAgdBdLWEBGxZz_i*?I1U?0j(Y#YN9@}Go4C+Y>-92mB9GVIOadbk@J6b(YaATz? zqX)lxO=?5aMLK(YbcFv#_@Z|7WhK7DM2l0VZ41;{3Ux;c)#$&eFn(8|vjco7WBedb zms(NEqkkCWyTLOG!PdOH@Dj-CG6L5PKawNC@|HwPW~GW3BYR0B+XtJw>R=z!QyA&iG)$ zxHPMh^)$C#E}U5pKQ-wWIh};<%x`nIX_YXs6%06S1^`&`ht+F)?Jg@0MV`~w}#4t9W&K=u@mVd*F{rvClh*an$*w~qwqTH zNCRT7KrMxHvSyx|-dx}lraMo;mM4B$+#!4E2_7yM|IKZ|=Ne_M^df-8)M6^vye(H# zQ_;EcdXG%L5OKE1!3HQo)3SLlXwhz@OKj!lpZv2cTv7j3k#5-?cc#Y;7-;=KD+%}G|SK5?Cpp=5pWUwn}pZ#7{)gnXbyqryw#!UPbS{7Cjmnn8ZPaIsgF z0ciB;T?cJwb~gEVMxPAsj+)f#WdmYnXW}g#(l{x7sJQ0d;+Wqq;a|cGtGK_!_SJN2 zw)y#{rvG(%KVnJ$+mhM0EvsRld82*0qs7FjA^0Yor#qh?&9T@~5wWagP-oA$r%QQM zE1Icr2}Km1JIubiKF~9(f{Loq_?jc#_(ELhqEtRcsR>6YHH5kqhFcUzDO816S?9o? zDaUaQxsJYHS3+rW!`%yb9jB)nBR+qk7lE?X;;hq-iB7yuY1nn zsF=pCS)Tak9pWjjVm}$yY?hCiliv)=?7)S9N5MyVy2XWR7Vw}G2~6qjx))ki^SI*C zL65==-ajM5XJSp%ilpFM7s2xFZzNK`>m%*Sy26dSeGpl4_`=jnrv4Q9NXfIh5tbd8xtPe`TIO(jj8fl`pqk3*sl+f-fZWOi=^M@)iJ)njxegqBD6GN*%SQr znfPiW@9FpY?%~)|zwNLcJf^LL)C3ZP?0Ju=5~Ckn-6x~HtM%&Y(?1t3_reON$?nA$ zuKLXijnMkFl%VG7$pRQ%6|p|m#U$>mkfArlz;aUVWIxmnrhsXg@9D1Q;?DgwPAivN zU(tGFNnm+zy1yWx*lV3;_S0z+^71D5!QzqJ{?cs_ZMC543M8$$MFn>Bh9GQxhMOfl zDlvBthDw%N$g7>n2#oa)bsRKVzJ|I~vNSygDAdH5-sv5TiR)%q8@0vYe z%@nnIUG`B8Ga@avXff3-q7cc|5CbWK-iw|b6WPqU7kRcE?MMR7kk9)Ymc8JQQ)$h* zEtTy;r;=c?wTM4YG>ohIGhi)zM)HAr%SMgU2jx%UGZ3j2s=!4VY1Oy~l@V)ITkvnS zw}R*bHX7G1#|}%KWg&sXlNtGYIe&HL*b zExJe~MM^>(VH6wCJK*K%EUgPQcmo9pim%TiIQO4f$^ho(A5)l0Do7+d?3em zBHBGui_2E>;^pZPhYzF-o7decApVD(()I1E+Y`a#?U}NR)ACnK0OnQwDMvAS#OC&f z_8E=_MWSBS4{Gw|rKO(_HwRZS#*bq167`LZ@VQD6**wm6n>}|6`uBfAFkB8MNm>n< zmyNZi&x94QpdH}9GH?GT!I?mt=1hq>a(IY>Diu)*ABVgaK;TdIWIb-|OXhvBz}E3& zcs~tYK>uXPD0}#N<~6f|^UfIo-gzdwjJ97ZARv|{9>b*+%M%rH=;6Q8-|!Ol#$)uz zz4}gSKte*gt#TYdRYNv%C5=RR2IP_-WHe|d(Lt?{k$@d~@#EX&^Mdb1u8C2ld3pJV zf(`sjNk5!>x~{Qo#W;PK{z7tLFt>GUpWRybN4jZ4ONjbTuy1QC81yCA&qOO#NRT&; ze|`Ay4{~8}%Jis-#^uj5x2;DrWHRO-Ca9+Frcho9pGK43H=F=2%72w!*QZ+VDMCR7guH_WLNS;RSnF6ZNg__VIm#hb`S2>^$o48RS~469aOdjtJEc8MrEK?ooW=XMG%5-aDh!C2 zGQ$NZc(wVJg})Ew3}_AnE7McTj*I8EIio~041R3$F+F6>=~GXs)U5^c&LqVVe^afY zAn~NwpDj#yD`!aUl+0glu4&e?Rmx;+PggX1sb7Q+qKig|Dk(ZGxUFc9w_EK8m4?#O zryXO=*&mydr;ZoJd2wL$EQeNga4h8*g)N^-eoT`tSP+xGE7Y274Widl5Bw3g9!zh( z7Juav4|S!APyQK~%xts6w5V==J?~$RwsSq_ueVl`;w~kAm(^K<_4AkiN=D?0xU626 z=4SlKEMTeTI?t{mI(WX7XUx~)tRwQAQSP}dvARh$QTR+Ydo_;U?3~U(fK;OM?OfIj z5Q{c`wG1MaDiHKu?rz@4DE6daUi7#sE}gjIxbnE*uI?Dg7iOBPDL|U;A|_8&2+^EC z@CDGBmlf|^^AX~-F8pd zX4q$A1X}J~R84<1-tSv7FFvmsPgH(EHg{o4GVHFgQgcl03jTI3S#c;qgCkC*Dq2l< zQ%HHEG6~>C8j6S7u349(YSvtxV9akU#;d}h6W#d0u4b*GZsW9qjdTFOeZ$tyawI2Z zaehVJQ|kt1+R@}j+6>*|1Ljmz7te#o_yu*IF(9S^U9Ri%V2s6P`U=_;QGdg`wo}u& z?vj^G4<=iINqbDfsXSx%2jVj3>pNFpyC+h?95Qxcq2=t@3pBNGgOf3C+q-o3J)yg@ zBfa%vrIn?MpyV42Kg(D>RgD`_p8(a2Tmp$?%|-!w-=rLHobbYNmG&edgSLe)vu7dG4w9UCze#ZgRfcV0?9~^oJwt(oL!#>?jsEq1hM-SNii9Br9-9UN<&TlO&H`Hrh9bR%^&BUYBF;H}`-}-jLb+tUu9g}tcv zrifSmxy>oY(iQ8X-X9Oh)`l-H@hQum@#a5Jc`}h~wE$&S!=ib&Ez(3-SNsYQxIpiPRh~k*zOqHgl zwj>2E9*^%wd*Rx#{Hb3HJFIubFEilPHroeNuS!<>hH5$Iw2J$e8k@aIP5Hj=G}dOw zw6$~(7l6}$%jWQdmF}F9h}~rI&%m|QhddS881=@8J862%D8EBVv$(tgWwS+!dW*PAJdZ@bEGvJ!Iz6c_i!>C-sU-6aOR2OwxxQFg z9}A;`y>S;ILRwEO(T+R*=e47bQxNL#InCEFMD}&@MvV>&r}mp?9ja|;ys~uM!%qXP|`_bO$^V@&XVrM{c)de8_&cYQW|Z1vgg$D$}5B9 z>)p=ofpNVaIe*R9=uC+r(VN-6yR&b{5Bq(rnPX+u5q-@qLikdu3nFApwvB}P{ zQ0Y~?(yOG_7D`L|5t2r}>LDW%0pXz2{tL3ILc0nz>g&XsJ9x-4)7*CkWC(GsZ$o6! zaXnsQdq9=3gza;oWxzvw%1!A?6WJL`W??zY9K_Lk`0b}TA3^@%IaiE>zQQ}$wa{Jr z{T^4ND@luPoT{~7-3fZEaXCA_k#hMFQ#7+(%L*Y$ZF zyt2}nezPZBymD(vW;Z-)q_oaqL1F`=JEKo2XVpDjTA8*7+rNlrWs~a*M{0NywkXRZ zQZAm@xOWs+y-nq`Fu>rG+L#?OQh#EC{Z5AJ>#y(_A?>&|-j$}-4Bd(9@A{{vNOoA2@$(uUIWasQ}v&h&KC=aG=COKXEr_=f3;TL57l z<1SUAL%8Is75XB~t-H1-~eTp=&oj=V5qPeK9QC&`ki`Cg93f@OiBPCon;Yc578=GEM(_$<=NIf(<*bM;Y{z z5(ft*d2^Lg$3}wj^|7a*xw~=zvIL(Nca1F(*<@@8szjf`4 zsaTxAfV<_T%j$b3ZUDVqTw2Z$r^%MAnio|UvSD!a&xnP`+|d6f@gtk{?O?F{L@4Q!#$v@8#u+2Os7G3$i+~4ko=3b5IMZi1&QLCD^g+& zC_x`?^CMEDAlj-bG)M?2(T*Ha1K(j#GrcZZ$QKjV)Nw!WkKO7aAECn;?Nkvd_6g`h z5oRM8ZXsAX&w?-e%bxE8gXftj*IDmSO&rl*<@sl|@}=XKk~M(!YgrrDIFlnqo{W86 zI&KKbrZgWxxZ@V$f^%MS{?)3^m5f62$%~`B=dnVELj{uk(b)RqDy?pC7y|1zN1dc(E9N>!82tGw=GeU3<7ir#K>opY-Az{gv zBV9vbc>_!{%|Y1nYHvqe5X)@P@BGjV+q|mulI&^s{AO6%Uf27w;K^^tw;ilPl1zBsmTr^mQQV=w1bZI;|My+c&WRA*oQR7a?uW2yKkQ7&ECJlI@ zG3kaZgzJ$u8KC;MNr{dFUo>C5E0GNkxu?-J{0%$O@6`hkjLVB5CvMj`bC z*OZ&0>IV-6BA{7Qu$?-!gN;3gL#l?zU~xd3l+v+!0>r|ia+bhW+t5t*C|iyl`Cu2} zaIzZ_HbYDt_1Y{>*v>GMX9Cd;OJukc%e_QSW#ovzi}^S;X^w?yaopC`ojW}hyrTxB zlG}?O7{_9fAFsq(t*rhglD z3;n!r)WhKFS4iQADerl75szz(Ax(c37HeKp9H%b3FWIFfT45w6d7P6btWaL39hjKj zMq^K-T|QFh7U!f7ox3#aW@PK+ms%+pGNao==fBQN(XJlLsi4p=Em%)nGCEfMv~NK& zvO$%W5GbLy!7yqhT4l~fx`TAk2#;U?gNU7`*i9B8>_gLu?mOZ&Z!Y4%w9^qjB8|LOp)5CtnqEV)@ibnl? zWqKZ`n&uyKo^yc=EP>=VhG%@5W@%cIL$ujRSCcZ?^DDo|vlCs@{ncebL7JHzReD&t zbIe%PT#QvmuI{~Ih8?%2lAv&UU)7SYPK96GRI3uNx)iG_a@Mf1+{om2iRi|Jm8hRp z0@oPF_-7!-@u^R0Cl!qLD{!{1mqiqf^3{@$*CskuN_9a1c%KLUiUSt5nD2PA= zGL3OLI<`3+!y;Hh;=Vt=Gb!-Nc`3x}3UzOhEO$GtDg*q`^I^A| zoex9)K0AGyYkJFHMvjIiLHyML*Zh;+5A0SnHT~yz6lo0KRGhy(U8?sKcSj7rq;d$q z?a-e?}@1KR;ai3vFd;zT3l2!hZQhYIIVX_Ja z!V!CW2&Y*JI(gl3s~3+S)DJeorp=`3jKzf=#QmWBPR8vop~O0PjQJ)eq>FDV6SDTV`s~|JCVEgN5vtFFrjmScft{b{ArKwxr<(uL*pb)jP zS@*^>MWqZ-&j(=5{~~2S_tXKSEv+^5+tmL&VC_BkFdas6j22yl%O{{hb zGhvZtYV;NTl|?L{Mn41zF>VKzDbqkpv{fsfSacSLa8DnvAH{}J_v*d_V>l@%Y!*9K zl^dCTB_cgvvJY@gyoaf|D+?FL3-nPb4(rW)J&_oQ{EqaI#7xP&K!zE*-hGEj-S%MC z(|OgHtoQ5L0~^;LtoAJ!c^Fy!ur3GLBN0v`SGBg5bbD8>X|xu-OdAL>F9}V#j%&L+ zDe4N*EBFPPK{>1^JX_1zA^MP?qzZPjVEWY8goE(JT0}I~+-yCaC=si1pLt*HbfabK zOZfzfa-LXfU<>Qe3J+fo_YAGv!lQ2BKMwNCts}l0BxXFpVlmbYaU70tYXItXki%@k z?48lPvJslU#MZ4Nt}YN0w@dm621Rk4&@B?;&)xi@eyy{)+*>us#pra=ZvpPNs~gE# z{jyve6KG5fa=;r|QHiO+2p2yqXfP^?lOkuXt2G$29bD-~s-VF;Wv4NnV$M+_x@~3^ z4E}ID$oMWQq0tke$LHXka2q$!umXvczUN_WIXy3Bx&cdn5j*Cj1{oDx; zE0Zx=?ZE9*=vQk()qb?oksve8i{RyCF@9sou6fCpl6_Y^q!27bl1%l?kCl^O=$_NK zeqhxRleJg^RHdqtrRj2m8SteAPep~z!ln*>hED*wVu-Y|;ou_By*d#5{P8zra3`d2 z&h#+3lQB5dX_m3!RZF?q1W$Ktbi_;Y!p4Y(*R*sNJSFx$U*~GQ7hXlzDmh>kX^6GV zB$Lv9l_{nx-_DlgAKMOYB(hAIg`?_M;UqBqhMmrB%X4)xrbim@?Ta^cYIh z8#zPb+Ed3q(~WR} zye~cU?v)9jKQ#vbej>Iyu&m+f0(z=z3{^*4Q3FkYdq7^)WAXwi0~n zYEOpeoL*N;VCVM2@i)CrB7M{O!?R6#x$Xk^Yb}L;qDA!xBd;c* zYZofmlH+zQmL$t3bK7}yC5W}@7<|c8gv&2l@K41|K=RVYia4vGc=fb+afSr>`4{!` zPh(OobIa&0W0464n~e6dv``^uR)(F~&xLwl49~^oi7Ku+%-%B8x2&gj-wZHBj&?D& zi2(2W1YBwi!Zs{IM$#oY8NeVZB**0)AqB+S)_n1Q7CnNr(WS+S*F_TWTV72;P=6Q! z5H5OLUW){PIF<5z5lgxgRd&b!k$(G-7kKX5`541+nbCsp$?`1i&bn zR7c8^OM1NW_A}M5?@;rE@7SNVZuRd6SHZPTXa#hhhZ`a@Nh(i#Q8J`Y=#tcgwld>+ z3N)tdnYB$#)KERzcVS;a&#ZH7l&N1NLB_|M$DXON17>wUZ8+`xKY3QuOOt>*f_VD> zCa5!e;Kok;U~p0!c<=oi263+C@Wk9Vf!o^t3~jtns)`KS045j$^MeF|&nN0Umt+7p zf{vT?_tS=Rq!O^{ll04x1D@JC_F#XGS)Z#e+nfMrgqyTi{4cKUkYxa9+}-EF`B^BB z?+&Z``J9$lq$|>~0WF)TqV;jw{{A+O%g40QkA=E&OwSnQ1MzJ+5pD5Df<0ynEWerMG2~~mp@qoS-yA4dcWBkEs!oe+!M5i_;irZxCP@A zSxXe$cH-!i*RFjLi46e&iim(f6hjNMx%CmY!j#b<(W3U{mXOe6v*B%@ek(^)Jm6}_ z^05SrXNt~LuxR+z$(ghUz!^8ivJs}}{f2p#WKBn}kI0+H#nKO5U~I8Y&=Y|yuO}GH z!epimQG(T-z;?t@BmUWQ9EA6e=r8Fr>(|VPC>gV;D{&g>;X{mYe9w2h)hjA-PNwee zDB3ijZyXTSnhz@D19k1~Q4EW;b&cI<5mP7?gQ0iJvJT@@eGGg1t3n#1t{-3wm**2E zTGj66PGqYK@L0=)a+%0-8=3>)l5dMu=1%L8OzY^x;am=Qfl3t>}OO)NxkiuTIWs&et;rt{?e3Ny$2yd93lJx2Ti+}M`i>~2JiP0MCGep?ac_VZ-{DFm@c8YI=Y*K zsjDYC%U2&YZ3~T9$j!4O>>-AX#?K$Ls};BQb7GSz5v}Rq@;y=V?kbjY+rmc#8Zz>9 z`@3C3eQ23MekDDU8_GBGu#!aUW`_;a^_3j30wE+7Q$9F>BcnC1f)r%H&b+BHX zur)aL-!`W>u6-G1yn=veerQcBErSbF6bmv?P3`PRMV=>g13YYBXVa9#0#SzI5FA+6 z`pY+B_e^jW0#N3);O@-cLp$_az5NL*7}S0&B1Bk{-C(6}KAc9UI7<~RiLs|kFO@}1 z)gkzEBW70)hgP^b$Z(_4JuS9xp)3iP}vMP0ON zTC_yq_x|oy?H5tnP@TE>CML=S5A*>nNnd3U9um%3m)Qu0H1AiT5;CQVO7a^l1t}6M za83pnugS_{Z$nS0;Ze-8XC?~hRr$Q2T`{T_ZtVS^E?)&D{RH|2Ho^0q7}d8`ZXZ_t zjRFE@Mx*^kuk6U zq3O${7_Gt`?Ip3`nd)s33M0`)f_x@Ow0YllDGahyIIq-a>#|JbqF(emH#2uc1OHes zVeL?LEv{x74^Orvt<1--baf++Rjk$Pv%@&s+qM%i978Qnpz^ikpkRHbyXh2!fO| zVWI-go>caK&9@w3Z+|vBfQ#?O|33e#w_7kSTjUvYL(mhvQR01s4SWG zat(!LyTmzn9;;co#`&jHZm{VImay-0x)11~zHYHe?l>Ez|)~HWi8AjOS z1LIGd2(qwnUV&`u$V;%N_`&!_WKxcw*Gu6kNS2jLsVFlQq(HkkXJDJ-u83hF1=jEJ z6^kb;Y{&Ozb)|td@y~{`GAV!GL+~g zh@}H_xDeuAJw+wokMulX+#gl}S(}O@KD`&EqP|!LvAwi^8a&@>wk?f zU+EI|dviBjAVds0KGasPCAjrDIYaR|q9xneKI6(TAcvnT2{~~#*#{lm14Y`Sp093E zh1=V|+Sy>+9=xtL?1~3ZZuIrF6XT)xJ8y>jUb$B)1;sNo*tfPiB(^($Zxo5zJCc1| zKN-6>4l*AYoPcK^B(!UTS98MdgbFOJuMUr%3wwDln#?I~?++M0{^^%}d^}}5?HD^m zc!{hg*`JnC-0xeQ$9v!FNc41sIv#~Aie&XJE7yD$xkHbQx!9TM>hQUl z3}0i_%~@)=e=on^R3~&Vl;8f>%-4*w_8kWpOhds(OiRIcn0hHW93o|f(auCty*6VS zC~j8R`X;Oh8?k{PW)(L>h@7fHm#Pr%UO~V1)X8)VbI`99&YLmX%>zYtk$!PeN!M&%L?CaEl#P8x^&;qw`TYU_enW*l><=gxXMP|LZt0|tl zx&Sh-f*u8yHhZ|PGbzJ4yqK`Sj8jxkELO{r!%|a3;`oPzbn~x2Jax2aYD;*`q^o-_ z-cs5ai7)ZK8S6Hf!VRTN5u?eLVmuuJjiTbxI{&ofDp+^24P+-S_bHAkgmN7Xf5`Di zT=Ri4p9k`X$oz~8@3czSIi6hqG(J9ZCy0ealPn{tAOlI;0uj^_MfPTmfBPL-n3H}o z&iLoX*tmDM7ze&j_d~hn01Um=OUqD-xAR3WPR&oe zslEoGx5ESatmB3uPS#{n^LUwAv9hG173lGM47HVtKh5fY?x9hpMpNdZ$~_RZ2A=WL zoKKoKZ&F^FzaELaHFd#uA_zfiAoA1JfKbJFaRDU+(UaGa8v0{QWQJCD23C>=23u%q z?U$sRwIrE|!UE6fJ@UKW!meMR)(LJ;pl2a@?sBLy8fOhZym)J)O$Zk5eA=USNDPMke2G+S$>sxSwv5Tr+5(d_VCK`-j6P2+mzmH=iCWV*&*Uyb7kK7C!>2(Kr9y|K(UTwSqAzPBCYvn295$7-Kn8l|P>Z@*zB{vzG}7A0Eq#bzL8FIADT z=A0sH+?4g$Tqo`urjF=P#VFd(U7%e4g_*POyP;er9T=t$w(b!ae})Zs>L06<0`1Ln zB@1)IdN3p8;PC5wfN(l(a#5(3#$hKCf0(8ZtE)Tf6G&%jt+PoL3PU;jfkU&*V%Q@X zR(7O#D)1ON+Nx!7QFtt%7A3PQtUf{ezPYmRdv-76oK%aET*oqSm!0jyjqEauC1&*4 zJ!;pVJAJeoz?g1eV@s8Fa;MwuSjSD+sf&Ry2q)7`_5+Y{z zdTFDWp010nl9N#DcU=h2^TyntkPHwm=)bef<~ELb_^@rnC(Q%b44>3iZv2? z8z?af>@8dn{TQ0CiC$v}Ox?p-YimI+?ERW1$4eb3*jCxUny>r^GDi=pQVKPF z5KWzuD^KSX5cvyasFNGS`yHo9o{3Yy@FnoP_r3WwMf%Uij~@S?yvTuO!8jrj0D|*l zfdmz8-p~z80GS8?{8~6KL8#*NS^Np7Re|SndAPGdPl9UGKOxd$k0l{e z0`{B}@m6}}j5|wlnR1j=t?Ng?tv3_Kb5#&VVNzekj($}d=pthHk@@eNxUDFXlKio& zm7ho%Se`j@p7(4!K~KJ&cUP7<&$oh;LAP)lK_^_DH(UO#owZS#0D@`-q%Z@_Dl_yu zJIn_;(jx_UxE2JCmXfPJb?2R)7dz6**A?!;f|hKH;GFA=*z>SKaJa9nY7ch#==d`2 zlb{q@E9{Tp&La}K+8&}*5*O0Hg9L!*|7pT2X1u~%Sv(!RTCmEs6&8d0crew~YMsXK z(f(5uu2i5&85wXjVflEIoP2*Dazl6488R@*XVAt0#JJF_wN(73!Tgen`=;yFzr(Y= zHcn&IRsVV&!tVE^dDgoCxF7fmfXcqdw&K&O4&*)jMt_hR<2zSeHE%|EQ1 zFad*wB)V8XLyvMCPI*aAdz?8tY7M!!Q6dIQvuE40;Df990fP2i!#RJWff;m0n<$y) z9tDYQrD3)M29sXmua@>W8xwr^j9w0*^0j-^X%*hTt1YIJPVjQvYtJuCop@rGEh)Wd znEUv=Niow^V^j%4%%jw$Y&1|JTfMi~m_Oop$&Jqp$(W7w{xPLUYQNp##T>b7Ip02~ zokfP`zF1A^Um+uVLJsF`i41eBgkG+!k zPV|3SFqAfDxnwBlA6bTxS}oHDp;&)-F% zE8?3e+>rs?{5g3$)~l9mPYDt~oph(4&U)$HOy5NK2euMB7oGZTTg)LF@C({hX^NJX zr%+!0O1S{s zcWSb@7U=QqSW~zK9DJ_cMo8Jqp+=JtwNo$UYoe=bN$h>Fx{a6L=aw)1v1kM}m<=7m zIjf^4{o3MP^Zj*l670km)GKOWtA_BjrNnMqtuejtVKTgtXX`==9Yt8%XH=HYP zh;PezZG5K3iMCL9Yn{+dEM};WhOst z>ffHANGdO+h83;cT?W^`;RCQ9Qj*4*nEN7}RM@-aoH8H^X%uo(X|s^mdmO^i^|INhsv$Z42<5RfLC#Jx{VWJvk+bEgsO&N*$ z?z6ttbjH>?6VdiR3GBqI`e<&Gd6f^ZMpF@`DDPO;TB|9!$X=|~)bweol0Q^l zmiHY(8vw!8cQDRS`(4wI(^Uzs10Mm%V9!{jC#9y zjONTYcQ0+dL#@C7VHQiB+V(aSW7bL`#?pmLUQAgWX@Z!v$bst3fe9QutJqHiH%ze> z&faTr1=^hCSgaq-I7_Wd`9+^ zvDxs*HvG4LJJ3BLK_v-B%prRgS_pa+*&gZ;>3cYtZFO@d;81VK$jtd!waVk-?f0%j ziR^n5Tyz|F`4RH9D3TyE5vbBjN64ua<}|Kcvz=P9*<1F!S>tN$MlfPT=>G$!(|2FD z^X}Gt$#}DO3+7664uIR`U^~REF~6Fmy%a!O3DE`b#Z9|B9(mB~%JwWu*1Q*6F6oC< zld>pEyV`Y!hh4sZnJ*}oCBYBFyvn*7_0PV~#>T$CY-&l!3xLau%Ky`)%(5+=&-iC_ zjyo3dO%Auv>4IYAS>;ZDlwzl+yF7FkYU=X_>hCA$IT;M_W{xKCH}p@qDpi*f-WOjo zkC@&1GI$<7j2Eik*^q_;XJOe6Hz# zr85=!ntky^`-L1BmA62pClnKk+JTMV>L*(HgJcreKQ}nPEzpu~BiT7Bz@QX@ahn z1>Aj})3KM9X9^bXK4y8D1O*{AB=g^&z3^L}$7}be*H&>sr_AGKfPI<;PyTVf{-tZ$ zt+$exseXgRC&=ehy%y{y%kKx)W|-4h0$;6*Qn((1UCt&1T5qO5^a&#ozVT%`9iBTD_W1E?bRM_6RV2lv_G>R| zyw0buXC@z@SMcRsjQmyj3NshlMm=H0MEtubni{K2__tCD8#!NtroIMrgj7oempc_2 z5fz5MbsSR+r8+lg8enUnJmD^Y6Ut4rl(>QEs;rNyFF#>wv)g?*!Y|DEl=a3;-y za7zVWY8`iB-^wIuiEZJCLUpvaA%JMX{-VElQ>=AH^ym;@yisLDvewNN&f1t4SnRHy zaK}V}vpLw_8%|*O(oM^n;3pdqW&CZ$#?*Z(mY{t8(AXyFsgdnG5|%ejbNAtO@t2x zLdeM1a?7dZ3TwB&IoP;Dma0wb9xVu{s+!6@xt^o>n zO@g}xx8Uw>g}ViJ2q`4EYawT4@7>*B?>wi!bM^l>T^IF0tuar zoV{!;C3qfN$?tA%dOZ9}is~=bQ1Of2%Cr+^#W_eC^SWen6aW0$4{BsE9?CicR|BR4pQ;%ih3%CWCv(Z zq^S1P$M=owxCwq|d>hATu|!_B0;(qQTpX zBbXwK4(eVHeLRs)-%rFi`b_&9rHS|Y*8#RzjW?^H@GfO9^ri~_mMb=jrgoJXa9B-3S9}WGA5uUE4gX6)AK>GBQRXxU zy5;}rea>9rw)M(6)sDyLWzGcex`T!>+Xv$+jW2{?4i8a|Q0Xt)L$;;b9UEh#P_;vy z&W$9_#M{RuWrWAOxS$@idnjRI{Om+42QsYK6_&JhJTuAMUQy+L@SYOw(?#&~yzE2#1x?V239CvuwKwDi_J3TVI zBhajEz7G~Dm4Q21Y94ouazR{X0(@M!K7Wu@8a&KSIPYk4BBZYu>gwAnUmHPkNSxMK z3#X{~>arFWxpg#oY10AWguTWXV7osA%qzV%P^jPo+0C-J)xI3G7A@a)Kb^SH7&A@g z32PsYqY|#|eQCyzjV-yg+ytKhZlR2h5fl>bam*&RI?2GDPhy}F2|#rL5x9)THUO{S z7*|u#SAjh+dzguCh0<#K!q#LaU?Z2ayT1H&Uh~J1+~x-M>W>4BCJc;>25xr5vZw6o z+8TXJx_I;le7DC>`P|6qDg}RrGcg?Wu7yu;Y_&~grwemdgcf|jxEVoV025RmUc63^ z?6h`R+X)=vf$d-;H-V=}sK_+tdiK^Y)Pkkh5Qkx*iCk9|yxigY{J5-wPPl5gYPOad zwU!z?wI4UGKa?0=&jz)X^>&9ArWy z+lxR|pR>$f|2_5ok-{n4i`*Bic-HShm7rNeU2YJ;+P4_4#eqt&l>5XbfbsLHAFr;4E63AgA_5GAHz^=aokXewQYRJjI_mM) zhD+0#sb@e~&0q$-C#BlpZK6HRj4~Ta97QfAG`@G`gcx*p{m%2`q%YC^5^S~H_$Yh& zv6)?vGQ9bvB#(eOG!*)z=?-rRgT%CcUtN3g6WHT12=?5HZA^tM<_dVSa6=65Q_%3D z){$SfloRkH^3644jp2}H6=4c9_3qbC&iR4kKa1h}0^lvYQ5B>mF<495A=Q3@dg#03 zFAmCJw%eyF3~z17qA#+RkUPH4LPz7o@%fSHa*NI`D~CgwzwKT`9l7c&N_#oad}o%> zr_ZwkOGK`=fbJH9rRWs!$+=e=jXO|)oOw}MF+-+Rqy9bD{AcPN*d`2AHhL}3t$7966_gt+=z5Wlz${9%UD{wCdM zkMWo#8`DafUGEP@xbzpVoIOnd=ln1C;2aC3C6J}D`6#bkuWuPho8KM-^-e6kQdOO; zXsOCtt~Uij(A>?)tsl@x=h3c1>=@jz8qB1-2#T{9z3e?%CSszH19x^wQP)9kQzL*c z?1ciHqletEmBe?Hgl~r&=!iFV+b2XV$1}XzP3}mt^g~rXuk;-342Y|hu+)rc8 zO97imTd(5#v}{V^ENtA|>8JW*Ttzx6Y~AC>tWB6*rX#WyI`{b2ZO+eyuJ3_*+AlH^_M4UiVvwYu^~r6)lKqtE zAgfNB)^MbZUoOFX`5#H_Co7?CotNI;Du&zO`GlNtC66HJF918}&Q;Ff|CTtio@QC$ zeRNoPx3k(_V+*(P7Ppa!g@>mXcV~_N_)1F95B?S4=#D=kZSX|2#P#-dS@j0Wsyv=0 z;MA`L^;Ond_Au*SVUOJ}TQ+dlepY5i$^P)tM(|W%#dF8)X9CwZV&vK}2O%B-5h{${ z-aV7y<=aQri%fhI#OJSnevbx_fDBrkS0Y=?@Cg@-ujXs8m`Cy}v8^(*K}7doA5HDq zCe()ni*OOQGK#7H((7BPoW%lgxipSwv*Cn8zY}x|Q#?rgy zrHKx#Vd(Z+EXbusE|y3S+vM!`=Y7I&`L!0h4C5;B7wcF0YSDDNQV#Xn32|{N4IRnS z-x+$X1}6xm_72(T1e$m~Z*8Y5ThZ+IpBssr4OTb?<4m=zcLx{e)bXb+`? zfx*z)fdmE;n&`nxMdfDlstH5WP3t_!4wl++52@B(MEqT1#Y<(H2g=DmX(W0e=z)VBEHG#pJoUxgd> zO4NRg5{2J7;J_44i4QWSDEEmA%AvYT{4ClQXlb+3kroLE<3Fvfp0lFIS`y4Ja+~6j zzh8az)8!5@zXvp1obK~|3G7~=0?hsVIZl}kSxWKO2@At9{mylr5B1(8N%llwL{nHG zCbx6)&z_Njq{9xIFCeZymV7jQj{}@kr9<+nHb3o3hVv*W+ClbY3Hi>Pztc6}XV~sU z873;lj9|Qe{p5E0hOLaAoPh(FX#OoKJUnJIF*i$8T~DnT1@WHxtDwNte#z3g6~H&- zf@5nbjb_ObY|92$ZGfhQR9(ThFC~=}Eb_c8mykuz4L)KY<*6(fJLeE6rvZF}f7n{` zOys+Xl5{y;H|ftNn_j1`ku@!+cW=Nq_;9>w)b8vpdp3Jm+Fr6M&do0;c5;yBb$gWc z?9_C-%bMh8!jX8#Cr^DnS+SGC_@EpvIWc?3*A90GMBB5TbEvB;uj*#ESZmArvO1o% z4PSeLkeZi2HTtV0S@M0se2i_fBDZ_%dL9o~Uk~k9;h*5PFNM-2Pvbe8gpJ*szS#0{ z!ay<;`s}^);$oO9QHfD(SJM1kg69>N-Bf6{ic{B1TLXhx|F{vsITu`j8k=vCdk-Fs zX9K%pcT%+c8V55sL{uMi+U-!_mvtVx6L{-nd^(<-&!J2 zlA!g@o;=*p&U|i$L@gImt&ptg;C92go>uw^++r9_ToF%;j~|rzU`Sy9^^UWs5I0iS zMRJ%PcA4UH?mXwC-txn>(S5;gBq!t?<_LIR4twtpu{swhrrK%sug?KHY`_f*c@y2@ zJTI&Rfqecl>`)lWSA3TygFgA?TvhG{-Q_@}jV*X_mg&dN`C>!8MQ2C{T#7f!S}8pX zvtCd46n5D=CVdNUM4-@hAz3%dV{|Z{m`@L5)BGiAv5c5KPG&1DUW_1%QboSn=BR(r$2kcTg#-uC6h? z(?WCElvIe%F#L8%(3F_>l3-~Qyri|zx9lX;0)SVQ@eu#8or=Fsiuc$8;mo>xM-0P? zE_g~ADJy30G2+{Jhm6^SiYmeOU;-3VHo6Qh=`B_o*o{0|Ja{1jbC`?0+g#sC-@6n* zpq%XQPvs^w)_E)6VesY7VndiLrUyP)%Gs-cdvPJ%jl!XBwa5@pTYS|O=h^Nn&uES( z*Z08QwxK@z4}B#cwBy3k)n#E&lB~VE>Gc z;#HW|y~bY_Yj-BZ6}r;_e)>KSIQ$>_$#WzcLNAiJjGed7j@F|*U@xq6$MuI0@_l44WM>~Oh@aP<< zaEY8}Kq0+Nm%*~IB}cc^3Sp7_O#B5(ApB2RLNo&Dnpmp+SlGisT*}oJv)tMbi>D}V zdX!}Nl=b@RY2B+2#!nu$d>R5*J>5}w7tL(TS|c-VZ@I4mafRBii%%=&_YmAKzSoV4 zv~dG9b?!^*^&Mu@MtJHSGdBeH`&u4XTZgW!`{n@P1eQ~h?Y3|I(RQv0(V2jSAityT?b1#XSYDnw!`Cxgjl7k6hOkw@&|gm5U1SW-=4H0wmfuz zt=_GOsY95bGt%UX20hbZ+2&?-yX0DNJJo5q9F?3~o)^uZoW74zxl`DM_C@{LmaOIh zuDHMjHNDqi!SgSNnXF&OOF^Y{6TZU1`_jb-Q^y~!bnMH{R+dz^6EKs;M`XU57oLLz z47?-)rNlP$d>5x75M|qw>^Jc1G7T8b=+VqV(&Gx2^G3@(;;M7rPn-{F&nOujyF-1k z_Q+A~(C}c->1W+rTPlbCnGDmiJRdV58tHysn z%DbM5mnY!Hp#H>mH(_nH!FPV%&6BOLZ zi=F-F0l$y}GFC!%ki|jNUlPy_>4Jb6Mmjd-w|v8*<}B z$+GtnUbcF&+F6*-fW9KpsaAildi>CImJ7^h#wkSDq2h^Lv#bv1m~}2L=-|32n!L5tHsneFS^Y&# z@vn2@!aHmtNH1v}wr@E=pi^3$(N%FOYjHAY_m3McYk8Zlg9zz1RAoQpR|yJnZWSgq z-#7QT7^tw^HJCr^a<8-)bR%tDvRcM~fGsojvG__v>Z)HMm>HxgYc&0bpAc6Po+pMC zEUo89 zstY_o;$H>hv0dkP+LZMGWX>uqlR4;H9fWAA=c^Yb?tMK$8kXD)&J zJx4o8S+Dn|Ex(o9WW6u!zw*r7*Lr@3dMk&EL!FH4(93SrWwoW6IHSEn^A3FOAC$&wFX%rk7JPynFC35^HhvFP@DL5-3D$ zS2h}TEl;DTt`*gk28v9DPFrr-L4E64IXNRyw9xA+w3#s^zkTraHhn_K%`_lriJ0^S z%Q*qR{(vc%@aQI%CrXeEVm|OHge>+wqL^a?C;4vs%b5!~3pq422#^(#x7r^5GQW;V zF%A?Fpc8h2s+<;kbXcyx{Ilmr9TNW#dj+FTfb7jAp`2$UDxF&+iA~A(!Jd?Fr2r=E z@au#j=-@AKqQ(*j4XtwtLcM+n*zxSy4Pz4bC(5&P5>lJ=_$pdniq}8K zi2lsUc(6bXsLD_a{=SGeb89Y!TfzOnx^guy%X5wsU%q+sXD(#z081kPjhA+X-JDH*&@KbDA}TF5zeKI&gBSu2>I;ZC=kZmXgJbQUc~% zB3v>aKr5hYuf0;MtmOy5dCrB=IWtT-tm8wXI>hxN4OMeT=_&^dcmD0`#gRUm-q{dO zNkBzq#b=*Wl9i5!qk0=?7oo)Zf?(JJ?Nn>%Tq@+#!#=gkk&lNd&Y@gcrtY$YKts?a z2ojcYw~52$+@jfR*A@azM`}z(EH*_tu+m(s-eyI%(Kj<9@_DF3^?^m8OxA_Wv@s2V zK(1SGsdww_4FZpmQ3DlWFHm#B-rc=OznK@m-AWiW@UVW;`kl{uMXN)|!vOW+g4==R z3U~aF(a6OIvF%!H=X`T3@#ZLDt_=o?(G8vHlT=(-J4QH;f_DJ{2&=8GD3w|3G5n)euAi0r~px>r6GR*iD4^ z>kPjGlYeK)jB)9R3o)9}YHy+s$uYxqgT3J5I&Y}>*-^z9sF)quWsP$81^?wG+Y@5k zi(3`EJ>jc5Yw{{54C{o)7go=LFA$c;(c`qA^yYe~Lv9e4o(FGhzI#PnsJ`(>=7!OW zQ9(HC7BAdOP?E&lp_oxr0Q--w;baWHSTz5ME-{LU6>H>i&!^3qcnrb6;$I6R1=?m< zzv5s1gnT*GD%*X}70ZZt;;lvMbGu@SABk!jep?}J8sYnV1GdtJAT0l&+bg7NX=F=n zuC|r)`50w~*l4J+V;6Sc;pM1_(w*u)r)o`Rz5-P6#56dj28s3PS?6Op0H}PLt8bW6 zfE=eB(#j76!KqWzYhCdj$jx>{!hHlw(n40HsATY%Lb73Hm??=f@pgx&V>x3c_Z-Pm zan(m9+JPGjDHXe_YeThBgs-xE+9>Y`I(Bk-Q+>7_N|w}x>taNzlG_J+ff9(Mz~vqB z=H;HdY@CSac3)(Pf2ve{c}JKk$L)Uos1t;?(pDX*#-vrLKLDV0D|X&}#=8EB@8B*p z3O21+E6!Zmk=B6cQ4N+NaJph>o=a+Fg4TU<&;6V&nzT!f9~goZ(E85P+X+XBov^?A zGfl2x19xs$qApy#@qtf8a>p`QXrj!Cqve!k+r`#Jbcf-z zav|pYTmRRMbaC%3hpS;Nmg}kt_bdcWllujyImEt-m;}xVkcb(_8&dq9n{^=I*x*N$ z{cJ!EH{6@p_cQ9q&nh5k;HM0EVo4_D9mh(Wz}pL!dw1J!@y>BM4Ak*u+FkQ{Es?wR zxS6sq(WC6liHWi&3p#8TdN*6?S!~M5l;{Rsi47ee(9`7LnDUX>+3h3b0;|FlvSWHS zyPuEVpRwfu26{|!7M0g{|4_2yj;)I|yijXHFM!m0?XMSxQ8eE=wc5cbT~ zo~X1$mp5FbJ>Y#il2Ki-&iL+Y8|U0FE5Q4@6I>hPo#yd?G~XEx>`8J0 zm5`l5M6EAli@kZ)b?3Iv6{Pz$lUn>r=`-}T@&kFt-(*o*sxK_}Q+?M-{&alv>}rJ1 zco&~X6!dl_sdxRHw$SLk<>H-h)-WkQW+u__;NA7j8S(Jw9N_S+qP_!QQg=rQ%9vyX zFMb3i@Zk-%=Dhp@8|>wEb)1~D>#i^e7p@lwyh|Fxs0C-woA;+~uem0QzdOj^r4Qxt zxu;T1sC%E_;XMX zKy|KAda~vAg$($an-l4tGJ4(*6a#n3r*$W>>rt|}N!)w=*v3*Eb#UF!92SpH*Mu9fCeh(l)q%NA z^%~?OMD~0}TY-EAbSGljvgW5AtT*3md{=8e*7|?A-J5)wdh9lYhn=yaFa$tH&_ZY_^Gptb7kpbz}T)RRjdRkB`T5hQD9euf3D6jbINx_vu}9Flw~`a zv$UktmEi*~I~TkkIr}`B_k7%=O|UKXs8R|6qWx@T;nBS5vsQP6xGzYm)kG=$Obt(@ zjb%;5JPq(nxhvUgp9hYF27QTU95`3<<|*Y`YANpXCv0ZnO*OyB>VLW6>Wk#Tk4hn; zJ2iyCOO51Jf^5kUsYn$jF@aLwja!UKj{i!5V$$u)siNuJr!U>K(YDz4j#$yg#EsuU zCy;kfJyq2|E4X6e=h*WW`k=!Wcjt7H#QULd@|R~Yhfo55BJT9=kaydCPdcs9W~^-t zEZuPnUGW&tHTeQ`s^Oh&kmD?{vK2@Iv+3NIk=ZslQU{Q4?Ze&6gXHMp%Ev=Cc6V7y z7T(j$P*PcC$0NSppXf5FH|)dzG@c#6(AAG~RrmZ(&a7_1CF>IJ(} zm^wbk3c{u(le!`0)Tyvz^-0rEz=$CHMH*>$><440a5s1YH$dF4g~_j) zlcJgu`v)jT1XcZ3*y={9qQ}I_L{7|C_$N14C8Xg=Aa{^wec(k!fN)o+=}g$yu?R1% zN9kX`=#*rx?0qHgE0CX34Mv&natf3b_51{x5(-HJ>iS_L+!X@+Xf}nPZ^v~7vf*&+0=@}li+FRbU=v=a&BXh60}TS1by*>pE-;72C}Lm>9C{ZWtQ)( z{m3z%$}m1H2Ipj>VwXBd@wlwL*jfuyK}T|nI^D%U<2Omm$M|B`k1gB3RTboSd(^Ne zMMY-rlB`L@K*b-A%T-BzhaM)Y#V&39oCWE<%l81wktNV@8gS7#_mpGFqk4&=+dPwQ%}cN?LhB? z2K==)GH;{Jb2!zXIS;dE)=zVmb?_bby(wT?0H`33k@#5kqth8oroq;qy+ukh@1D3N zl}k59UO7%4C7vJkzL>bk3Ts4s-1T{h`)$>%thCTztI~`x+d;=lI`Juzy-&1ujGb0-Ivor-n$?S*|h7`(zG`hntvQ`yA2h(cI!e`^Hl zgR1a{eRi{4gvonh>)A%`(M^UaEQnL){V~$}-V1;<0dhLrUdV^iRrV*b1F+3g(gK&a zNUqljHb15#nV`4R#fiyR$S!5Af!w-xtm$z^a%lpBa@zKr9C8_+05o()@8lRH%*^Km z71Y8SsS`XDTS`nI7#DV*VOj8j5G<^f#BYbDuDLzByHfctwh=QLFO{y1ICV& zU=H`s%y@Zni)DW>7$+t4R9#)W=VXVj&Sj>uvD&wglRuBE%hq4^r{kje>}il2W5s@% zD7BMH-zYPak)3c^wUHlpszljBjFA>zO=!QEz?`OT?|Lima7j|7MMS6ZC8<7pyU|kn zOjC`@sGjb8_e|d7Vm|s!XYIMFn`mi?Z_GX4QMzqi_&>Wj;BCjW%!Iy9iqKzWI=6oo z748;=xTrtB+B3Mo7ayNc0jcwQx6I{yv0QPZwBYM*VWrZ19YydfEVf)2^SGdVLqtxt zZmkOMdqwhE#iBuVuru`%pwjDbU zY&#Cl+Hr&Wd0%o+_U=Tw<6T%5Bq$+xY&(TXti)jQ zJ%%bw&v$2oj}=CJX6-hUe@ydVCBmxS=#PS@44J%)ek^`DPU;-(-8EN5Z)W6 zjL8`1u$rs)KRAOYC9>SY}mUOSG-NLDz@sw1hkW8tJ^m|w*fU-H9@TPTIqIfojmxk4# zJMe2*(&WaMMzcVj-cINRX}qElLtkw&Ud^E933{lIFOdssw3W`nc%MR>KU@-0xFSxb zF-C+d(Xoh@>;x-8(NjDq#9X zNF6G5rN~~!UQ?Vdn>t8kXsy}veMbtwkb4=;I3%z)NDzM~N=^-bd@5X;Z6&^$RgwXm!=Z?3$2+=PF>qCQ{`&G&Emh8{h&?myjF$O; zCRjS@yaB66456^4q|%c}xt2mW;S0=nzws#I!dI*veQa8MoZeb&R zA!pa-Omc0%1QcljDLQ4i@68?8?`NVt3{Xa7o-4FX8R=aZItyuMGGx&<>J8v=$j}+c zKC(`lT_8}sB*!;0dyU!_W}v%2W}Lc6M=MVk=KAJFWx*x^x@WO+O?K3uK12>1d9S@d z11*?2ct3NL5G+*%6mSU)6P{k(9z17yduX_*|4IH}gsJgT1FZYB)84w2@iaHQX{!Fq z1u5NbyMaqT%!24?4%mQ|21+8vl_F8kcv?Ij1sUjAmjmjZyv!sI{OO{@N{S&hJ`}J) zZ_W@;?Smv#dMi}!CzU08C|U(vxy&YB7KlP5w@ZH>rgv7p|MTe0Vt#^&&Clfq{~n}r zXn01eUo5r!numPGR7_OCIvG%<3;~61rTbtodp^LsZo><;4>7m-CHT;+wjC{9C9>}{ znAvWg(WZiq1ykKNc~h?knq9B6HMF&y$i5VQC9kZ;5gMv}pzZDX&y~rP7{NE9^5+#= ztznvjkusgW7ObJ}#i6QdgQ|T3?h)=hWkT&0v+V_O;*5kJ`%F7$Zg9A`>w$#QcEif9 zeFQR0sciM4tYw>QO?p!N2r~STEJeD=Ar-Xiq8k@2`@1Iq(nKm(b$nQtvD52x`phg! zGB@>Excv^G)IY+2Hq3qMMY%>~=?K_rf6rjm+E>SGp@#XfPeYJrVW_p<=yuIFhVEz- z{_iyh2D15GJ2zZ2+{km>9?_$!HGzuLBnzm|!Ba1!yVIx|E}Xw|H&*PwZ6}n=iivnl z;?!k0VFWfpB20Py^Kyx0k=$0YDoEOEx0dZ@gw5U`Gj$x(bAYU9Bx|az!0U6P`w>k(E`6kyicVSn&nyA##O-%mw1hHupFCL-)VVh1}L#3PkJV*nNpT z!5VC!Ook8{|D}DKfI1zrsH(fQDFf!>*TsV=$Y!+ zl@0D6g+f!i@y{((e)#ig?l*Poyu?O&$+4s2xDInK4i;$*w{MP&=vJVs)W~OI4er*4 zuH)#s=I9>05h>GnQ??W}R~YFF7aW>nohC0dW?h9_D(o&fGtx@ZWLpzf;a> zu_&f=G9R*J43-}1?{%Ot9Ws~JD~1U2C=ZCZo6Bg&g+9YLZC<-<=<|vlCe`>Lealle zRxvvsvo(!G%Ta{sK$OEt(A@UoKLXxVZ)H;wjbPNaYwuBR?%gh6)<-6v7}+@@jpV6$eg?Uab_ zwCS)K`mm3)q3G8AEuCtb!ojB8*O<(dchbR=K{d~PYoVw~!iM}+6mr1VJkK?{| zZO2!cSasP2XFDiHhIG%+Nr#?|N$oH@WGDvk!4!GcD7%~BN*9_H zZ)`#VEu8T}%dYEwP{EIMMELaaETsgCvkXy#n(jj0w1@^c{t9$(Zmc6CgcHg+Pa>`7 z+_$?`oZ}01%E8n)%h5TPAs!HWyID_SowNnYAY7Ars-dwp9baNLzgw_QxonD3`xdz| z2p6O6tbACwUg)V0MX+)mkSRcZ`KnP>_QG@nd1vDZ9e`R;O5C(?Uq-#p_?iHrz5HgG z@l?I6kP>xp))>`gJi2vFYLI7dmc@Lq>8)g~N08P*Ffo3%?b{34+M*J9{GsgVvu$4r zGBz$mCmSS*waCqAy8fooWdb@RjgS-Oag$2ubkXSfJBl5_>7dqbc3ljGJ2P}a{JDN zy!euF=y~eVmCDlZiOXoGL5=n2CM`q$9Argz6ZLd%?^O>JidKRA&hp;0zlx|JP_J>) zg(@`Ko6GOoZT^I2tDVd~XK*c7d-wtlH`stt;y;-$ANq#@lgf9@0hIjGdLDYnLp^}Q zYk-7`8b8XNM5PlOrzQ5W){i8&0F0sY1rtcGLUb$MD{fB%ZTi6jFZ|(QNJ#uYSNuwl z#RQ@?pYwtDGuxb7Kg$&tddW1ozd3dxDhKWBd6Bi=7<--5UM49MY&$-0)JF9e!ProI zS!VOu?W_yMho%Yt)6PRmOX@+DU=hf>c&hY?@8Swpl?{S9BNuP=}qBw>At#$3`l~+~s zm@j$=25a*!2F`Upn6(vyk|5#st>H4FUO!qa%4>2bMY6{yR(7Qcr+ia4s=j25$Y{_4 zx%Y+g!lSWJJ~&5rG}w(W?2q!N<*U~c3PQ75D8YI~FO`Q(f^8_`Y2p-OT(eaZT%`r2 zn2vqprQSr46u63{(N{{U{Rnn$4RKc)jdhsj-H>?)AdK@+#E)ZA6hJrlmLr_gnwsQP zC>x^G-~9Nhn;)#(%yb;vt!2M#FTRqXE)xd?ck3z2e#&Uvc}xDNi@mksI zQ@2i?D$S2Uky@@vls8Nc=;nxnKUb_&5~mz8FQyi}BD!S^Mfc=Sz03 zTwTWCY30u6jHsS-W_07)?*J1$##w4vc~vTdgRiL7;&z>fHlMn$a852fw<#~=y7#yw zEPASPQq_y5a-r)+0MDcJo-uee2Ni9XPmbWLp>bg`-=zV+vSO@+=P$9ZAC zTo1}@s7cgC%(Zx`#R)Ps8vf|>yY(y!qV{dL%t2*G18)OKw zN07kjv&Kv^Va2@)gf=S7)0@Y&QH{AZLrtuvo8CKtWjyFDMgphCCunarj@!PL{DR?f!JguAk38)H2R2bu8ku5NtM555cVMIJL8o1M z(2nk+;$^Dc;&b2fnNKr;RWpMND~da%7kO;;Br9Xe8AW!=cg4$-%J>U&;VSz|yNb1y zc?&dmybzb79452~w{_RQ!u1P96oHy#?!j%%;ZN)paEAeafy1Q~SC|>|T4Ss{l;nQM zr$b3TqdizDzczC68;On=gSvQI(g_Vr8l{kOC6zz-xIO9`kD0W%)u4DHJ|*Y!7W zZ_mGH-rP*XdHEjiMz&mVwkgbXL5cOyoWLq-=hBOMIxvH4@^f^kZ{R9%`e_ANuXxwj z0iuy%r$a(~YVL+M=(_HCet*@p(;@8?MrV0@J_O)6WA~MNxefc4YkHB;9u`+!>HpzA zQB#At-LV7!_ikNfSN3ufwLOeD^a(xqz*>$g(IVaOm_4`2O$0pO(eDboXdm*}p5Fw$Y9}c58#C!h2ue z%?@7mR%-IDng?DaUp<%|GBxb+p>eGG#5B(=aXM_R9BfOEIp*_EenO>|>#HN`LK{rRYL)@nQ@46_8~!_ILF~)-ti6Wd>&SqJIS5-#qNn6VG z-L=DqJgtV2bY_83Q24%`Y<(A~9KKTC=Ajwv=406k%D9(>99Y#0x-x7 z=5|C@r|P$j6(BTgpR>~n4zxU-CRDV|yPyvVa%MxF`?C4fhpU10(CA1#w*8DT==dZE z7-<3iRHuoV7&1l-<3QVo_VfuRIvX^>@75bP&bWtb7&RWRdB1Z~HLn3FapwBV(3!tC zHL2%wm*g-BZyvVMd$5FUjm>V4C77g)I;Y$nqiuzrYP#NL=aKuN1BYQ5Uw3;xuyXR3 zu5}RCelekA?$iOH;yRvu^WI;8=q%QQC+kYJYMq8~!1GlaDcp-j_tqx6T;OHXclAc~ z7bJqk?DZ|{1j%`~MN}wSeY5Ni>~+vRNk-U*5Z>PWpr?=i?ZY4&*&5WXU14I#l;bhQ zp%>IBHKhHv;r&-24aj6@LJ>u2!l3Q_kn`hsry#DOf1boBFGHOH-HqigJHhB~UR&906P#ChkWm#E%}}x`A{=~oESq4K z#~R5AGg(>)AJ7H*3Tv z_2K6G*k;_hX#{z-F(%DiT>5WWY(w8!4Z(^p8Q0ff@duWtTe)Ky`*SC!=NjtNi!~R0 z$$g0?Oi88&x=3v(3wvA4R^|H;_{oJxej%S!ucjWSs*$d`x3GPrOUB{8J(6m$?4bus zIM`b@zPe(#$BhZJ!o>`$dW(}^FKBwa)#<30`Y_?=Ux zcIsokk|AHsvV7&osY*bi>?5C|xl6C2rcyY#psK=+R#0jtMxK4K+I{y;0C%>ljv1sE z>A%=^1gU2{>~Og0xhzWR>okf#;P)VAIKu4R$blq7&rGpe)mr_2-dr@fudE*Kg&u`bx_|n z@vOjE1AKo@wV&LGKb{zWX0AU<;<@{jx=Kk7x_qOaP&N`Z>P|aEaN&Gjj=s6Zv)aJNlPM0H)HvI@rKzo&2qP{R>ro z9tS69Vc`JcJ8yVzB<^e3%5<$=UXql=s&s%^JqFz&eSIXHjK7*8kgkuhfgmga$?4-u zx2YW5rO^<%X>1c(aw@U4$15i%XHmr|#Y-g(9g59aBQMG~j@_qprOXZ@46{y82s?*GdplFBn-NB?_oA5B7kKfxH~yD!|0Uf2WG04xNx^^e=gGPuBqjSdc_}L!DnN~K2(3yjADV_zHvRRBBHTT;%|04Fszpu}KU3&EQVgARZir<9Ezb^i_%YV`0 zpMU+Amj5KhKmYjun~9DblQS}?|60!{l+~$%7GD1l3IhGHVt?0gu5|PAEvYFfe_CyT zxuSLg)^4~knV$_mCi+X52=K|fzm@#0SnhWqhCY|F=e zo65*TyhV(^c7EBXIem_Q=a`TAgA<`sd$>jK||v&4wM z3x^|R7HXvh`5NsTt?zr(S_}DqJ#|zZG5@I<@I26h!a~}2a&q1Vug;IofJcEFDwbDID-tZVg4p(tIXuGwB3(W@5F`znU&#w@rq~k-Dghr05)+7 zQvs7U^AYd0g;-;f)ueNPW_!DT+;Zh0+vjv~*dLF>2Rg7L`dtvSb6j4bV?vY2t6SQ$-^zIs!y=& zcNJ!Nfiyil@CE3xvXXW2nZut0wyPQSs^vZH4l5n@x7>VE*XPx-pl8%;C+p);fBj+R zj~(C9Mk4E%>oO}>*Ey~-7}X0Z+TV79@w|2u+6AU^MI5*VNm%rf5)xLpBgb0RzuJE< zW*2{LYGq=0f14vioDlyu857f?BlY?^XXyPO)Bj-F`+l>zs-r`AvEd*EPw6*yiZ9I- zr`UW_J3g*}f`T$HSCaFmf`;$`Pu;6Zm505)NJGZ@4~^BXX7)#i5C}+%6!EvWB<|J_ z)O}C5GW;(Zn1#F<2FUuW6C-{l5jGIW8Ycbc>hg5U)3(>we1dczeW^%gPsmm5UvuchkAYl=L*x>|m4VEr3Q4xZX# z1oLLb{J9ve#@NLvL`6kcWiW!htjuJjdV71Vg#IM_N9M@Cub7Ig`B150>9|d96J|y- z);8%sCUZ1B7b^7@5>AH6UdR47>ahJbfsnr>k$^55ZnQulCiHn5a&`ah^{R6GHPUg`pX5!~{cSb81Rmm#<}H8q zmyi4Vi~Vb&#LR#7w+&cyzZ(7P^WW(_`u~DD`-{wENwc?0C8lPkR@C-#W5X7v&ZC;; zJ1V_Iq##hK?pW2$XjcO%rQy!)w+H6HAF zjyJoUoRE~kxLJ-=|I4;)-}=oIrBCLyJ6U8TOPV&fDPGteRMycbiz$)-5}zy`O^*-8 z7!QZK-X;xReM@}K_nc#iKdW$CV^RDMA*`An_g;*Rn?Jj-^8e8FopDWN(YG_>s52-s zDu|-MC?XI9qy(g^^j?w>T0rR#ij;tK6$JqSrS}dY4Wxt;2&f21Zy`WvN(qoqqy&Ue zUYwctd++~d9v}ITbMLGJ! z{KjyN+Rcj*oV@1&$DhG%i)NUT@B`Jr50ttOl&IQcDMXX1G9 zC6tV`Nyf&bnAqQpA3uH?67iAqaz_65?GP?A5~e!*o5=T75?Lji4-#rqVoEek=7wU+ zn;#jBulE;Fr@eruTzNB1@fH4#plk>26&t;^E0Mo?B|lY%i&7 zYrJ)uFam*=rk1(^wSuCGXLy1_2N)cc4Hy*pCz{Ig6TAH%pFl+81-@7@Ao zc3OM>##-i~yag-6DEG3nH7wAm!OTo@HmTpZ(s^n_oHsE)$pCCA)Z=j#}M75*xe(DlcLtX%+yG67gc;u zR=>Lf<|bqCHnnr@7I0n&(LKT5D_Q`EyLSxS5T2bBwP&=f(NL*p39+*jLbIjIK%Nml^`Kc%xIK*TBGq zwOz;eN(A|-^F~{B^1YT5QqqmzhFPOFPP!M1T6wOl)WLqetEAxB>uf3Q8!PnMaza(r z*}&PcJu_^G!XZ#(Pp%Q*!G{?d8dz>+Ri=I$_`Q_+0z{Xj$|17Oa_kBN|1>dd%;EGC zeSi=n^2jA+xGp-$NK2Lu7W~Z4an8l%30Pnbl$n`PJ*BGZgPGLJZ5-jGLm)kZ*dWuUG zXd|#hRDI8b9Bue0>baz&f4|jS;}!NgGFn#AOi;rWaBa!tCF3$k-A)=FN4%v8l$CP8 zjlS7Gt%a?eD8^b$P>Jt()Uv$Cwv(N(8?!6hFK*#Brr+RI4o^gopZHA5lC8!rwepNw zY~|$Cv=@@c{2mWju3v{wbl^G+tR~#!7WjI8lmPF2?)^Ij<~p2@7CCvvO9UJoSyy;C z>387tCSHM6)m3Zu<`8)5r|FHg}$fiic> zuER%eVFSgpcU;A3(k)km^;st+&}emG@vn8H1$gKlrW#Jz3lT&vuJgFD*QQ(~e{}d{ za;$kmUe3_`QhxibQzTVj{(iYxN%5kn)D45>D|=`UG-%zpq7-OMb84 z{w$^m5B>d-JX0RdD@Pw0&i|4~^y z3^c!@adX6n5@yyIUTr4VcUP2HWEDqVJuzI(b9H6N7@nA^yDoa00_%VkB7nu_kX1D@ zr*!5D2I>*^T59$q=QW;+fw2&-QG`_jzG5z&<|B>REK%P7(o!+BIya5Jnnikr=wEV) z!ms>NqIs%&bOiSE_1|Oqy-X}Hz@x0HcHJZ*?Y04w(2{j6Te)UjUUTALYawL<9YYNR zj*?N8cR>tb8@jgLmc6z_Ed9zF*vg`GGf9Ap=fd^8ftw{NT;*$sKIJ5!~|~OpT!d=+g!pKYn%4YM)|e zTte8n&qy$Y??|ft6-Jx+{v)*9WYwBpPuIE4Ch6ny4LlVjM(4}lB=tF4-xUHR+12p6X&lN{w$wA-4A zo>rY^kQK=$qvT12m5)k*xm?8*i8s&ur4txk3)dD%BFiRh!|NMOV4-nnnwOcWMs&7v zD`GVU*+h&;&PXfGOyxl&B#et2GD8wx@3@r~Js^su06gesJ_dP(A7eRJ|G-UtQ$p;- zkHwfeIYj|UCb+^E_x7w+Q4@>KMudMQ}hCy2=&x)tjsU_> z!IB2aO+(X~eg&r81jtEh*Ol9lKL|Mcb%ol9@^jb5X#kJv`bsU~6Ocyo+aNJJh~ zmo)=Vntw{Yngq$ZlyBeH8AR1b)z0WZ?iVHy&K#zsr6I>YibD{6ZtdB-^3w(56k~QS zLRm8avKJ@TC5|yM)Xl6a6iB(mmtXuiT=0{IsEQaUT3$o9x5Cs$CnXaTO9JH;C1yT2 zc?tR%SOm^JpTWkaZ|noEXB%!!hNTykp~D1g^*oZ!VD3(jm$k3lO`+aI=i@D04W>4| zb&^{zoqjp_o0+{9W*>+pM6xY>>ae2!ft|kt=Pi7|m6wctfek6)1dCMHn+3{W0qE?Q zAq?MS60Ul1uN%Pc@rZ*#Ca<$|hS^Sp@;TZ}g7v0tR!un)v54o}5x7^`_V_Yng>nW@h{ zY1d=7kD!gb;h9P?akxSO(-LTqa#{74vfO{X%rm-GP6tqS=)BD5PaD+ZesQ$7vII}GXvUzr_?|9 zE8ctC+}vfL2X&r#wclO}$!jbCu4Ua5o&jBdo+ zsKFQjbeXZXTXPf6gTWrh8ZpQ=^^Jj;jh3z*o&PIlJ$3vyu~?|wc_R_EVFLNY6xp6N zoC;_Xi&~N0!|NgDVlR#vZ0m?+p!mflgkFV!kROYS2@pLL@9D-b8>N3)Yclt8J%?vsfXl< zEyNgg4#4_<3k)QPh#o|C`6@vMrt%LmED#AKUAzt8EFs@R@f^KZENwo|xHym=KFlr% zXbd%Vg&GNq325!Lnqu($?j^T>I9W4-#cLL0nsuk665##P60Y3D>lOuQx%IU}0kItaaVs;~Y!JP4CtM@Y8f4>EW2r!px$A^O0u9~a9;Q!Rl09eq zOznc6Yc4i|ZOw|Sz4(VI>$ue6D^Os(AKKpE*b#yUh+s|i;0gOd!K4g+SN5E9fPQ+m zo#`g$qqvJ_V$dV$N!SLd2_^999c$8t zS{*BcHMh7i(-^jQ!q;dvq_{C3N#RSv?8|dgVTk>x-IPPDAET3pbV9l*bk6 zN_0b^vj!zoie)&ffMuMA^TLI^ig=X#$fXqF`R_V=yz&L}HP#SIWxAqa^Z%Glrx5T>8%uciMRlH($n4f~R2(amr{ z*pz%NtYF#`fO9nqK7JP&89ZWcC2k}H<(=?~^L=oFBspAO6>}jch*?h#^@_{xCt$p> zS{}oPfZMlC?mHD&QkXI_3WZ07#=r)5aQU3)o>ob>bb$6=NiPl81NF4PmtQ(Zx5R^; zMBisay#iS|Q(Q!9Qpey2(>A0530o*wk_K!LbDutLAe}3#T3d z30Z^1G^#8kpbpj0V1Y0Yqpk9X*i~@+*ps&B{@cqIyu;WU-hspo1Ln=gaQQZW>y16VFTECnuKH~#=;!r$m_mT7btY` zp=-E(qrM z$Uf(ZYqhT3dKtP0l;&wY)Cf;-+5LKTbBDuBU%%My#tE)3i>T_+?3%exyi>kD5SZC3 zTGtRl8fS9#xuV~ov_@yV9B05`eR-a00jO^MvoaFAL6qLq!Hh23^AUoE)RyH(c;1mo zN}z*t9xT(b3Vc>un1cZN%mf%R!;atft*J_^C;PQ=Is&9SZ40IiDUUztw2aYkt+@?u zd^D($Rzrwq_Rt`HeR*?GZIf{ZtgeqO#7UYytw`v*rcyMOwc9QK9_l#kp<8i#a4;a= z^>CNGbaXNtXlPXCfwn!lyrFxB-Pp-8(r5EbGPgf8P!1}(+~*mnRopG=Y&hTriTLGq(gxwMy-4?k zNpd*JF9_#`$pDk5;ZL8>NhKQ_BO~K~?(H@Giypo$^#85JP_jUCZ@Jy>!z0*~HvDaH z1X#K1?z1WL3MU!}oO7W};N08&sSS5tHaAcdaBBYZ)52d)AQ(LsZ5sQi#yVY#5+Eg1 z5=P&R6d{l5f!cPHc^;e4Rg}@Aqx_?9rAHTNKDIV%oT`j@ZN8(K)F0%FACw0J|8 z#2tMiP~NRvWK^fcM>$x^h#voGIAaN6C&r(1I zHq=}B2i$O*`$w8Asx=eOgAF}%mZPsZdM#|9LmL$FtcpTC?#IMWMGyN%T|g+*KbX3B zf@kS=;^IOP<#6q)Lgf}ne!5Xq&d8{N(70R3a!`162j4D)*;*Qm} z?hC|tyWcY)kBN$jgU{!R$DEA?>xVo~3@H~mq`0+BjXR6p*yy`rd|xLi2(X!AWro9O zs1eM>QsOi4xlmh;TB)WA5%G@}(XfhdNq$b)9GKB*r`(%FbZiHoVU!$hgZ{5KyNBy_D`iip_q61+R<+}V$S{sy07s}VFWWdbb~i|@df#?Rm*28+|U5{ zJD{RFF+jb_`ngoH8L5n#dI|6J9o_C&U6sAttqOqIjGyQd^#mIQ=K6@z{BU-fb(tlU zHsr(lThI)ZQO>Jhu`i~1_BgiP7KwL=2Ys%*igOj2eNmZGdIvHq-y<{Eyvz*E;%~4u zE-X=zSwg#FoNu>T%v44-*V{?|ofM;c^_Dzz8D$Exk9;bHb3s&9PAgD;Tvzv1T3%XO z6V8G25_d4G)zjmNL#sL3{oRfx|7^BZVonNC}d3_tx~qo*DSOB z1|5t_f~q~yvJbPQ*2_)i<2*JQ^%Cpz3W9R4;p(7F9@o@k9U5>Sm)>R@UwNjEVevSSDvpPHPSMMt(&=95Xb!s zLP*MjmvMy$ZSc00S5>*O-9%#b%wWNQ)E;D~?2(JlqsYJ9CoTn|UZoKa4F%s-sx?=) zW1moV#UJf(5E_q@H|YfM07bwkP0{D>QAT3nbKsqghqtBW6p=@{DtK9-s{?j| z;HVAMIH|DJCxT=0W9DlevoeRvMT8XZaUWD6#A__}aIq7^Z}M%9a{%6|W%*05S>=X9 z+Q^d6V14~>qRcx0@=`OHMognO)Z*sr&P$972C~NvapF3d+6c*b5actPh@C3>e zAitMbCE*1&G%QGjN6xQZEM_?ifU@3vD!6xFJiW4gp!C&zYEp$#s2T(cDp-#G*}!tH zz8(b(3dZS00J%M7V-^Ux_XfN z_bUNeLExEb+z#z5aDgc*rD%Zk2|}<^5?6%NeZAKK+8%>6?Uq|Ju~vwcVFtm!RY$Td z2Ym&YR@&=oSFd9e#k)Nieta*=cBbOs`AuM4vWS$pb)C3kXRDaG&XvHfJ_%E^phzDn zDTuXMQRYq;X$Ax%QfKX|6^`(_W$>jWFbT~k#?PPL5ZE2b$y?kG8l4&QN#R0LDQ3_n=e zB+tAoV(UbkntNA&Y{gclb!%vxt`}92G;qym=<4qTo7|80Ve3w@nlA2p1ag)tZvUv1 z6Lgraa^SU2JKC9Y6Mt+P6p1`%<3Ef<9?tV+7R(lgKsu&CokWDL_oQgWH<>^Oj)E)-pjp3lng&eCTmQPGq+5-R0C`|@tMD%_ zdPe*|uu&H6;$S$GJvjO4DS^J3%)M|s0mH;24o?T|G;nXzZI3m>zbDKr8+nBnGnigW zui;g*u@fwKtxM%nZ-U-1p2sylWdc7O#4H)1)Gj2Oo)aWn|@W1{fz zew#zrRYT(DepJx$NFCm5MkMf4nlQ212%lo%*0Tix`=br1J2cCY?5?Owi}uc`^5cc2 zRerqk-jJ4Xc*_oK8{*piem1BV?p|h69_+P5Jl@RRA^JQRFTvBY*P#%d*LK=~AGpVP=K6w;2FeJy z2@hZ_=tO4ujtTT5pI{_xaAW{H6(ery=~?AA96BGgSF92O$4@`mKzLX)GIv(S@*}v{ zmlMO|rDzjC%+Gkv1=^?B(~NRpyN^ncL9g<-ZvWQkwAj_{9ex`YBL#&YH|G#Smh2n& z1KW6*t3$+maDy`kx~jo;Zq+e{5kR`?)r8|$*%CT*UFYT9?iqpY{;4skSoB?(`(;3# za68XP3I`B_ziYX{H;Q=NVTKDk4h`MhU{V;%w^r{4>I7Tc`KcD!u#zqoS#$A&Z){||OHN$f`8L(gJ}z{0bxP5IJ(*=Ah$@v_9W(eZZZ;e6Dw zR)0&a?p32edXRcf438ETm6kgx?@?m3bbOLGexWo ze4~2q5U|}K+%MJwU25wG+n70ux@3ejEfRlN>B-q2VJpDC=)g#xc7PVx^gajL`&=Ky za;g-b(jIRBh!y~~K($;e99rOnV%yu<;$)mY@9sDf_YSV^9~y<@0&Kp=saP<}Swp#~ z>gEPr)M|}ps2U9|K01YytJw`W%^9MqpCio+K zIGJ`X>-@MrzAK67=gt%gIxgYH(?%BYk5;uPJ{!&F+Uq)zIp4+8(%4U{ zjy;Oe$Go!R-O{~)s3{65`%N+e;TYt*k!OuEF!+`CTD8%0t z(_YGlo#-LGqHT(%(6Z3ai+vbp4Kwg0k~#8JCL1I>3H$z?c0&*go@>*47WP56Uknnu zUcZkUAEU}h-$Gn+A>7iVhDiC-7`0l4eFLbm+@_r}D0| z4Dr*k4y$`}=%LioR!kQ(oyyQyo6uph4{n0HUD)Zxu18{G;rb2j2+Yym{}=# z*Kl{kjWm8eC42*5DxzZo=!}Ly0&~%sjidqAJYMvbUW0QeTrF7g!_nr(H#1}F_}Q2V zu<>9%m1c^l9mOE*daxyUrLBXr=oZ|AEsx9h_VilO@lSR~9eZ8E zJTtYvy*rj$VNJ-`u-~_Q&(I%w%wh2@9`wp5+$?iHT~B2(7n_Xq`{UUjEv$J@ zIHfC%qTzIv>g-|PxSSzxV3ANArqsSM_3>a4x7Xj(B#Te)RRB9G?Erq4GMov*jJokn$QJhuk71-VdRZKXoGi z8DPo1G_(A-G_7`y-ooj7a184#s`V25j}1osq~j|k@;89@?aANL_7J&@IXC7mAR%VY zW}z`Ps&25Eqq+Ov@0EG@!s730mA}~%WR`qbZFuoqgBUkP|2b`5Q(0$(H}G<=zi>UsIfDQLN@Iz?p7=`-r4yN)9fU<{-bT|i1^EzUzQ!>vsP!a($m*k}FxfA{P z$Gde`D%bOnq5S_Y@MV~tg?~Tc`?>pnfezocB|Ca{*7f_7xj%dsYOCDTvQnqq z%Z&N^qy6u1%91J-jvH~7{2dngIR3Fo>|x`Di(6B#f&t<}a7=Bn$z zblc{GD?+dSF+;-Xf6UN&O*AWgU42D^XXd3;oKWXV5lhN?YbSJ9W=-|q)uWTDeDdGV z^+f4!AIRm~VHu#ZM&4hx;Ke+qdR?n}on?Slq=)K1OZ}fWFq2_M7yLg4@Ou}oW!KCh z+0jcipFXJJcKL#-TsLB>gj#lM|Cg5)4|pM8Ie_O*^aA<~AR*?jZhV~M%(5(Q>M}zl z=(`Dy=JyySz&)|H0*5d+`VttVm2gU{y_p(aPOTiy%-}OM(kephodLheLG`@8y)e&( zDJ%f-s!3;lw;a_L$IjSVbytL<%g0YwUnC!&29icGB;y#&M8=PV{hT!|d4 z2|tx06FAU0w+DgwUPUd%)+I8o$O8*IMd*RKxg*;vqhXHW8su2JFw-qxdzP?hV2M=Y zq3pDHlth0NO6@sonfEgz1@O7s#4xM?&7(LXe-|eS_x<^&_t3v%;WxiK9i7z1KYXuw z#Ao#yZ3V>V9dGqCOWXg+GAGY}oAbqhkgd9uhyk#yQRg=< zZ4zieqdv|M-r%0xpUdMatNb1iy3VR_d^w~g~o z1uKxq)99Tw@i-$fS;N=6E@-@QTpKDzSKrjwG`{O91-nS2ubc%9588=Izy@vP{GP08 zdV~ewRHiDSQ4-d}$}QR&#c3kAGQ&MCJlfS0)c@rbZtUTXs2Dl(Nsuv*$B2t<7LVdS zcm{|r@CLouyxe1;qc*~WN-zmZ$B5@P7gVPyapqVQqz;a&ioVOJ+VNF;RA?Gf-Z?kT z4r|~Ru6ySWX9itDJ_)hJ=q0Z#7BAg1as7%+mG4W2q^tRzg#^X3tQ&#G=PR;7)k;0W!*um%17tR0~gZ!zq-a*RLmWHHHmv| z1pjLPK8U{uXjQR(0ly6qZNcj;zyx?Q57_c1w#bXU+iw{D9uP0JN_5p6*Vn~TOq#^f z>`2z;Swmx=`$cY)C>fXD(WZ!&AuSe!E_(UzV7ciOpRl_4E`84N;+AuK7C#4b?9&Q# z%h$EDd-z>KZxHDJo@4uNC@plQ4v$A+vHG2zoopN&P;>KiJ3G7NoE%(xyXHh1m8!Sx zm3VmbM72ukPi@&xJq+7Vu@rH2-Pe%Hs2hoUU4v~Vt-Cj zbv4F%U9q!mqx2dsuWmA8;d}-vks{k0hTDvD?4m4!R@rIYMyCG771m1G^H+GvC}eUQ z6KB7@a{-_1EG#LYW|Ei!S-W#detNSGJg#y2Sjk zPrnKZ3JS|#w^>FlcU7RFj>q*1SPes!40sv;cUhbLrm3HPO8EI77jcY_Tb+qZpL6y- z@U%O6-O;gPyQQ2IJzl5Rt(~g)KQii!1+_ca_qngLGcqP7hLfLPLRD3DswLdEudi=& zd%GqjFL;`Y)vFM{?Zy?VVo$(g&`vq~zqYsI%NrNK*qi+Oz+ z7u{I8X7eo>x=Sj&v`%a^Gc4pI!Ncj16-zS?G*2x7gr5$~oxq4qjKUYA1$0064bEeM zz4K3RS+b3QGt0kk`)N2_3S;#`)3u>aQ#i)E-tg;Aw)$3dReP)OiDHf(4()1Jw+h4n z1D3b6cf4OXy+3kE{>e*`0`$Er<6mPoo6u7eax`X3kfCarV_dvqlqkN|c2$6^%qv>kT+d2} zy5(0J5|81lFeX7f>ZVA(9y+@w*Q zehN<7d$@#M;;RajoR)M6Hz_ytLs0)MKz+TM;Ho`2*z4q zyr*0qWQ$C9@gyH;4!oSHC;YJ$R6VU%TNlHaHK}WFhbNmRi*$VZRl_M2<2*3wN$htT z1}dzS^z8p8Pfh7+X@cR@=A53@rZXyg`}bXKW}J?wzFuE*+zlkh@*7OK5rVl8hj$py zUvG;3iF<&+tkpK*442oWbmKTRgTQXR9d&AS6p2Oy zN=i!stOGhcJUkK(XU$kEhX8ky?)9=JrtI)uRj(ZU-KQnYCEbeC!xiCsR}Xhe zAcQ%7OloDIL7xTv&Oljtsm}tHTSU3yff#S-8E)@>eYavHOe{sP%P$tE0 z5R){lWOe>q-%^v3@|sS}r9dcU)MgX*gg959Vl8FzK4*!R$n{B3!Lv2C-?me2AC^7; zXqub}LXn@D#91)kwGcsZ@__&&12fN{Cey?lTvzz=?}gh2evj%Bld+H-cXV4`9UizB zjzT$jsA$SoM0qCYnw9 z57W{ZN7BLbTuCKWl`3#W9x&_=iN$IrgIW=WUJTp9s>u6mjoJfJAfqL3pNX^ALeO^w zbT{;NUWPwRf8Gkhg_@Myg14}rLtrEhrM^0>T(Iju?$Cw_Zt#@m7;CGt!h z$jG5Skb_1zokT?xtnY`ZY;NtCvUC)M_Ml{#Ig&!Y&n|H;jq0o^LjhqZg)(iw?sayw zLGJ&2zjnEQl?jF)&7HQ~J<9V_xZ7){ZYt-g?DW|(VL!xCP+jCxQ13qTiRhny8W&XR z=-w8FItJ%?cnEbwaxMg#HmV+Qht}+P;F>QWlT0GI;EyJ2u-i`X()nykRiCJekj^s= z4?vm6u(5N*sbB(lM!IDGXV=F;k2c3m=+bzcO{hmNjVIH1^o5L!RK7PIK^iv4cFkHZ zEINn^b@Nm#a-p%c8ga^VZdaE;&d|5O`1rTbvO2@N^~<^8O>Cl;BNL;gsKH<3&IJQ7 zlBNL$=XG?F6oM3r-x}iUWLZbgSjuZS0z?5dDjZwMZ*y^^o?lYrcF-M`Q5(&c1`99~ zXAbkBu;lKJfv6;f#+fo?k15yn5Rv%&zTtPu32;pz>PFD>J?hs z>*nC14p}e&RI5ZN21nHxZ`kX*K5;QG0m8aO=wSHnr;pAPE5-PD51I!G>=9VN=HrVE zO-D7YxTmB+QFv$V!;8K=d6(-#Q+F9Mm|B!>38W1m(g|e&yH(XbDY=fTdFWG&gx6ww zJ=udxZy45Qmcy(uELCYWc^2>WSp=%-9gDV%l95&PGEl{QovuC2{AhU;5o!WojSZV< z{{GQf@~4Lyf1@Af%_}ppw^^f_Uk_5eBF9HrBbT>#H~tQa|8(?E*KhjzsN35YnVOoq zYY3E=m)GX8CUwI;RyMq=DK1uLl`({ny((Psr;xxSMEXMJ-h>g~JLz!QZn&$fNl*}> zsi}$ck3aIey1H7-!|eE~{cOVNXF`2jGWx;_KMyTjrTQmHNJ}vNS$8Z_)qi37w5)8i zmhO%|yxVo{IAlxX=0zT1BNJ4=JdEj%Kl--9&p5E6FI-M6mZiV@_F)K%s7h6qwr_E? zDI)T^eKvylJk9dVkuN1q$hvk%0x7kQMLWEA%e&=H%=71BD78TbJ#wg0DK(qAY`=vs zzr&OXR@@1mLu+yCuDw^iT!sloek%upu%=M0w7%Q{6wIn-`H+Lrbq2Hjl@LK#%PA}F zG6W(J@UkM^5sQM&hCprSosi0pv z@rsVTwMuFA;tu`&bnm|3RuHkpztLvqiD|HSFrc9x+`Br`_4;wr+%tB{Q6E1eYUbFo zpLi7MpVutDJHY9P6hw(gYs*(o6KE@F>GJzs!nomVRwYLnETGSq2hM5Y zj=l)sY>9@!2{y@UF3onV@x!|=s~sg#$kJC1vanTr0K$IMjJQ2BO`@psfn1zYD7ePn z>0B0QqVokdwLffxpUcQwBK8W^kgw}BFE7ws#i44R^&y_TL(6TUl_M1HtFr3@R9qx-Nn&?aORe*jaZq z)9|T(kmI$q{Xv;R@FvQZ@0nZ4c?>-hSo9m|BuKO+vpTkI-PgNvXh{kE^WxlokGq3H z4^r`Ka58*?inC-;^n$)3j|+F9xS@=9*G>lL;)z5aoG#e)MNxU4QvPa|EG-EE$2)dk zT2=C~6k4-n3N{$8stuEwp4yVli-?C)Mm1r>rzuYaOq}hbzyn>sf9uxuDtGD7>_rZ9hYw9(cF!L{jqL7L*OAw#q2Zr5xG$`@lR_< zZ@!psh__L()oY4VX^l}89}_o|Ehdo9+hw^@KZ(c>TF70ipj8h;5o_@+g&SmwEt%l^z_zgkDnmA|O%safb?c(SC~ZNQ zG;IYtY(C9}=vXuHE6cieql*jV7J4LcscfvrYR;M-;jrx7xlMY?(^ZwsN5kC-V992t zh7TM2eEhbPkzUDCG4v66*^20fD+UR8bfbt-w0D7zpZ_3C3x4&7hJLxIkwwXzWrI3; z#Nl6y;N=1UV-gnAxzPZ$`^eJlX7PD^ZB3_Wleru*HW^07SX8TAJfxvI%>pgUW*;=o z&#m2%gTs{86h&{|*3ED!;#t+MUz!{L~Zt*r}RzZR^lxKHQ| z78MoIR#w1TT2ZG?pY{;Coh315&=X44^Y_g={0R2FQJpcJ{5pNFuC5M)Lh0b~_}aYC z(9qhwbXWcJx~#M1*QOesMYTG6d+}3VhM#1GoF>wyCMVskx z;Y`P@j*P&}Jg1p-giNG6d-`3zki@kDwD=UF}>g}Sps@1Qw#i2c}lD>buKJ$EB1P`W)wr>%xNn9h1 zgM<+Cq?0);gc#b#H@uuAR6`#KadlsdY;+oboYo(0$fb zb#Wwn343z}Lkg|4qgJL6?e^TTI5XQK~WsMUmne8ZPMQhhgiFk>FI6sI~mo)(@z zI=V8*Z}eix-=UmxRd>WXJKwnOG;_8IFR`;SjbhMMDsv-z30G5)pFb*;FlUTs3lBL!x=@V-k$a4j5-*ngewn{oKqJ8*S#`_Zksg zD0Kz{8Ir+g_Xkbj?5p zKjiB6eTEvYJ_XP+vHh>jN1UFBicpN2?-#J0jWq-7H~kXveBsN(P@5@)v8#7E)wu&= zHC~pLcHnpPx-QWd4Xm#RyWRtiAQXb-3?}*o0e~X%{;sRKJ(1C6^a`AvS2wE`k#hMe z?#0+|f}dW9$co#X@7#;&2Y?WP&j|G46x(bpbK`dc*Lh@q`ei}&DAD&*2Jv#d^V}Cu zO=~K6^E}yzRs;_=-Xt*S)r0413t#PV0r$#oU_*KS_(LG?y@McaQ^)H+93|md}Xry@8ijcbf0se zpX|hCfiHPbD3q?gKG@N*Bq%u8qb@7m=MRv1Vq&75=*%6VJ6RKnNl9E+uDAwgH>lpa zrPK=`$=QLsV2Uq4)FWcfI|$g@lDa z*Y-LwdsL{!o~*fc8OaVYBlIivE#INZ7p&G7lK4feBZ8k+Ef-#1m&-)uGUt4QHl_^r zUDiEd+u9~Jp%v{bQQ(UaT}EdI#;4YotHsu7L!n-Ki!!Kp1Pfe>d<;8cxIHI}L22he zv>itdq30ID7E@)9R$!sqbcVv$3*r@#3JY8>%RU6ug~V5k@K009_$w63eW!m%yOcp8 z&oLL`n{O`WNWe#zuTp5K0(tuMyA8zqL>v$xB5Z2t{|pVlu+HKr{7vxO}wo zh?Sajn<;FT;eFjQH{&oEUN=T6B`u}k`->345(uWb#MZWc?a)NyrbM>!lUjTZb?qfe zCV92!qkYQ=5vV$Zf%`9|1&8`w7uNF-!}GXQKwV9ueX7r>&TxMXt3z~AxD{0=iuv$SsA;g)Y5e zc>f#}Ki4oq`5uGMdjLvy!5I~$oYwe_9K;Id@#a?NqZe1>f*3`RecS&<)pv)p*|+_7 zsk>E_8ZE_LHHxCGRa@;*d&CM=wf81QTB?eoW{ldz2vQ?PNVHVd-chk@Cn8piSijuQ z^Sr zUp;j4T-B;EqFh%>fZHNtQ;jDCkYSS0lS<2a0xj)Y+$etN9uZ(P<~M zo&tO37IJ5n#70p~di*er{_q~JZBie$M?En+35z{oEIpndj~>D}_jME9CUC;ou!R&) zYN!CBQlG<~X4+1-JgfIMqNMrJbM6fY*hg(sRpT`dc$e`bm{5{*2ZC;=>G_)7Zf?k~Ad_9gTG5m<mL9~E)QIFeasvpPuf4|E+9!tbagM?f0pd_LQP17jo1XdW!## zWFz=bKkJ{6kPu%#zf?+FUj4qfsHnrNWar5qZ@YADhn%Co|F~J5U9UtN3gzK&pMu;r zicadjEc_@izkPTJ@bRf7NQ&8tRSU2@<>iF-cQU=ryuxHWoSd3kOu>7tDq;nApGNZr z5$DqD>+7q(l{7Y*5eS6Fl}v7Wy^T*8Y>}QO7YVFcbzcWEH zPeg3dj{yL{wC?~?T3UKzFjuy5rMbEJH|C+FB&HE4bGp@x;rV(X5&G~iUp+#+WJ-K2mB zMby`JOoQ4P_3~f-01Kl*nqX#%x5(UTl)j@nX?|GWHe8*0i_#A|7(YbW#?C+}l_BOK%BECC70%_E!(>a|o9!`|#;y8{{kPm#}1=Jsz zJ$i#uD?uZG3{k|qgV;`x z?FVJpY^vf$?A%sW1W7xXihNW>?oiFxJ>v5g@dknFC&uY74w=GMz6M4#8lDX18JJl_ zTd-HO8eBExXYzL`wy|l~QUo4mZGmzD`Ylo1L{5xbd$7K!{7KeK$4z%$?$x@V$1QfW zhmEkxW=q~<35-wR{QP5Xi<1tYXeU!xCvy7Soqmm6x!Es> zymEi%9dm`qMXw-TSJ&9)WHDqbW=%3b8qwUn*9>!l{nDtHKS zPc;%A#%X52hT=7A1WO-TeWx1e)r>PU{l!cHyEjzL%k&&HTjE8JYvW#~w|p^=AFl2N85G+aXMcH`B+e`c%+7)tnW-gO7mYFJ z0APhr_duCn=WbY`lTJBs*ClNH%}>I^f41uP%YR`TX=5Jl&w#u_s5D#y zpXi#lJdg=lhSG6*n<Y|DBRE0M@A~+RJt6*FMt35(LTs<7D00@n>!AudHUYO@A1Hb0Ro8#8 z=)8;w{?~~Ulsy+mtC?rI3_bb(C-QImN0#Uh-Pn%;Cr^0qLGS-adzUHNbHV1P>}z3> zRekFRQ)XseA_ik-^)5CxD~9r}u7}W9KbSsdUZFSM^jZ2zYo!${@aX9Z5AEbZpE%CrLo*Dc(g}vA<4tM}v~NOn53FAkY{>X~d^{ zU-X9!^xOyt2xxT3R|L-mwr64b$4;mIDcAjVFBfC8Fig=$WHL6xZq)@UDlCj(j?e74 zBL+5p^189-apy~~UY&kq_KKr}!xW~EsWo$yxgM}b`mAddg3MG+b-xYX{K zOnWtaTrONHKHjjSm1L>p6H|VASp-S+R-a`Nc<^m+9|cp!_VQmMU4y%7qP4dT^oh-+S1IKPhwQ zWbU>1uLC5QD){(&E!$x-eg|z^Na`MbIjx}kRV&0W!|9;#@&G9n#FpoxGD8nMq9_X9 zR+GTLg;#x3A*i8Il|>Jm83L?<&l(TTeWC`BDg7pf0&aY3w^3yb3rV$^YBp5_)&qlT z!YdPh5q4X?0u?WoJkNH+sgHRkB5We<#AK^$7b!`cpUj8W##xCcLTWtF{vYSJNDje5 ze#D`GrCF}^iHZD;ChF4w`RBk~L`Ws#AiCbe)_Pbz>F;B8p1$vkZFC;s7db&;RY@Y< z&Jd@lXUa1r!xU+x%T0mCBn_m*q-%nqk$lw|NSA-eW>nsbo{Ind#=*uOc6SMYSZw0L znJ9fat*YPxsxmrI%&*Ns=5P;mITt!i6?{a%leb$ghRgCf#=oB=V?%cG=D=Ea`=>!g-d>>3sWGHyB${&~J$l5z)Zd#2)&O zohXI^MK2ca<<7LK2W=6?DrxZ~eZ>nUqE|aKEt_tN%*~SigPH=zt@*$1)bYK!jhS6` z5C3{te!fGkh-p7x22kvujvk8s%KV~V#*XVX5QHk)FHWCz#E4Eky5};FS_nlH{tu~fi5svns{KqS}<&|UYB6dkTsbx)Y<;Za6dw2LQ z_HVYV&mkQh zs#vp^25)UztqeE09ifu%jx7Vs&%=t#YNpSv)V)8$Ps3&drgzW>`7OmNYg>ZPeodIE zrWmCZi&@MfjbzGtySP(&em*l*vpRVqYxXqt>Mj>aq`kA8c<=B=Xrld^8oKc4QTt`bWFTZ??{BBUP2t~PZr{O<^ zQZzF^e{5#6fiDIrVVzq5U8nJtt+i;sAXt&lMd!zAPn^ij(c9wig9l z7Yj~g!X9|MUQ_|DsBjT_wkp*=)_%GjL?+RAZKUl{b!A-N*jm{mFL2pTo?M`{SUYx^ z-GpI5;`+VMOW(6wkzj|78=+jl&noU+%9k}%s${m#wMM#a#s|eF_s&2R?L4Y3pWUQ(77|1Bd`=49G-{TJTL6<={8 z!)#GvK7%lyFEkwLgP*@S@a2~|uz4MkL=(Gvd<1)20>`^{e za(YKD))!dDnxW7RWf3ibF$(I#Plc1du=i8@6n?SV@_zWLt3 zR+P*9m8>Ci(9wu+>nmuF)$yVh1-LySUj_vG`CY7Iol(+U*d+e)Vh8 zn?qKIPt$KKaan=E5eb7IehB@_o}mo7wG^#)Js}y_E5~=(TDITIuSed<0gx7{xm+$j zI3bQx13>nj7V@n)v9sN-d0dO)xt9m{Vhvfh5%*-4kjzDb0&71mtNhca&RGwn0nIe#OiL+SX_~)U-0OK-N!JSf zy>KZvaeX}NrGQthmVMPT;}uWVw9P=P?;(hr8=rfre^PScO0oT~sAgoUQZY_FCteg_ zf9}Mj+lyMD*g=(snCYpj3lXXpHy%tDi0iE}yV!2Xf{7m*FlgCTe5hO!H@aJb*Lwik z@@}IGo-D7JZ;SX)f^i;rGjABCnwdyFz7dG~%tp>I+b|bhYO&DO|K#$u-i$Wng?4;f z8UCFXc6qia{BU$7e6jgTQWd5!H)nr!RUQP+Az2(v*$}4dby};Z4+!&x^>ji0vd_&X zJzLiI$+}3CN2~7=qeSg8DDhohphMTOAm##U=~_pzt5Z!mVCxA;Nw4Orh2{=kH69eD z-0SQ8Snr~>x#{gc5jH1Jk(>-yPOy{eSrsTjERD{@IeD3{UQGvE=Pz67?oT$}3G&~B zCcS=mMhUSh+8@0S?B5tosJmyHnfM4lpFe^$GF3kjlI6F#VSIM;?&jEvj;9Rylx0@l zS0hV!w$ZmJMo1Oprjr&!qIdDe>tTAuv5GmU;8F+pyl?KiTv zgMnfo5h<51q4EF0hs#RmV=1noH<`rj{s_sZOU!#g^+N-GwbtDNtE7KBJ^oX17i7D` z9(cw{Z_T%hQU-Wl9-iMf)n69=D$W!=A~-yt2u&M{7$~Wm+A1$YJ|6qd$~7X9ShH_- zaoWDVzT;CtO8KrX@ZZ0gak5V4=Q5aTtM+@P4BOk;3x)j zE0>R1n9fcLi$K$EI``%N=Zp;K@UQ{pgDr-B|2Cf%hc^6pJnfz@@aid^@*OYnM531! ze?6COMLZ=*JPn%3c&FZ$akP7g0CS#8gh@CUiW?AiKi2SYCzvYqlNq0(QP=irOnqkYUX(yX$s1GLE;ETf711EqqtWPZf%}F$4IN5Z?c`P3vyVJJnOeS&xOg3GoX#< zSex+t@Xb+uMKo{H`)q1n4lxxr0^Yz_H_BBgXM9Yoe4})&YtRb+EC+gkl|`b%<84mc z=f}yc`a;n1<2{=5?oh#We`522{9ckJX%9SxlLsKW#jI>FJ6@jKR4umCaH*<*77u74+lVU@Vo%9jaW6TX*(+yq0Du@u7*09HkDzyU95y>NP5ie5^v!2)39Ym zp+d2y9d3(WDnLyKt#5soLb#FG$pgf>i9_&t;`wot*LoJjcJiDA@AH_qlBsn=*vvMl zun*;#TIMx@a93CS-QjsB`9t_Kz`-vmgi$`AwZBPVWY)qhVmD>(bj=pGUz4=5@D)Jx zv@X6l#s}^HEQ2rs#|6inzP>V${(k7cuHQb9*kn7dE6O#iJBY!BQ}3UF&-lYHE=~=G z+UxaTL7WqXsZIflr}sFfP%2i6WP=mBFDWW7qi6Q80mrKX1dB5j4{Vz@JDeZ)@)m{V z8&pD@gqg`(IHiBd7rBV!E9KRI@oiSVjyw$zuQKL;RuZ`w-J{VfmKK69@9@k`1%r|! zEuGTl6zsyUH`s}}G2?MloTlvIp7z|Xdfe}v|wnx-#Sz%KWImOOJMflWUNQhI`myDYiVf#zKI zn=62<*2|lY;UZ*Y-_RK{YzE#V%Kh?OE5tWo2a`ZxU#?rbv%<%pDRDIO`&EcTnh7z7?YJ=;2e%YTobK0)wN+n|eUe9K&PEG;o@h z&H-=kc|k>Y*te6I>e*JWUc(O;tf?G0xF_ytMc=pI%qPP(p3Mo}45eNPcQ2;fR4hrN zn;Xs3sX-FA>c5K4)bvcpIVpV&yQ7_MI8yy?ggUyK(&_%kNVwv%K_Rk}FzYq5n11~n^xDdQx?+#;TYlfGS`-BZdmCw?`#;jY zX5P8dADDTC(O4uUJG-*2P0lJLE^CV->}Y&0Ej@)1{rm54jpvS`{h+KmW@GEunEABi z_c1YGoATF<;VpUhDQ=eSrp%?gCt6MO{tP|+`)ODhO*-pRv4JQ+TAKQosJMzQM{&Hd zzt$N;@3wSlP{d(I#L<~lz;Z_Y==I(eMn7Ax_T5m_c0YK%UhHr=#SDH*79llCl|y-q z=M*SOd#KXoKes3Rd3#QNI)oox)E};SS=dlS)u(_q#XLM{NScTqRB!`K*dQjcZq=2D zO2LXs@pNrtty1D0iN;#ui47AK!w)(`6E-zN216xPCBxg-N)461zPMa!czc6%GMBI6 zwELdB!ldYWK$uXF{O-(No?rjd?)&!rAwy5|^4p7(A|#CZ4p+drA9EN6&Ck3`L zFk6E%epJpj845EtZCbS9PH_>!;5#Q`5Y7SR2UToU3(-rY-S-2aaGyp-8h9nDSTA~m z9T9xA$96ttE8*`DiEhjP_-2X=jMq_p=BSmH5tjb3M9V4A9WWfv<#Lc?>*~;fQstSV zni5Q;2b{*au!$|w=mL=ocvT)_6H<)Qh6*)k3*Bmc^B?IsX0B6q#CU6lt+JHD7=S!=Yuj;azm zZe@}VZ9YF8QXJy~pS3ww?S^eHv8FXBnuV&wIB(3Ao~c= z2^ZZM@{Fq2tr>REY7<|*qMc|_9dv%0Vgo+rjjpC2MmIPQ{BBFL5RZywZYr*W>)+qbhrB_#*Vr9$aAY zRdnLo#5%|xhMcZ}!T2-)dqILSB8HtAPA*%GS8`j8a2p%-y`qX02|e9uDYm7JbgsM= zYBiz^Jv&}J+*)JR9kVy58vx+E)EbLvA^(aVUT!Tz{Vk9~NvW&hA2s15#Zr}8cGFs~ z1d+5aCc1c_w8!HB9jQ1|un3TWdXMyCIYf6Zv-%6ru5#wiLUpdaIPahLl3eKWYHyz^6F~Hpe0XffU{HK^;XIot~UtT-SD$@(^jruBwi8Y3&5dss&PQc5TlX zZ)p4c7KMbb;MGZXxkADQgIPj?EyG1t1kS6su19^}9{*}5G z`B*t^@Y(lE?dNmoi={t{R@^D)cCniO^N#<#@qb^oe|@L%PVwU5<0CV=Y)&`ncPDaC zY#W3##zV%i?Yh%HUGajVqKC6?uCBYhj~{$j_xEq0^zJ6c#!EV{l*|c$CTmQ+y}yc9{8gaO!&^w#i&W*=hn%+r zYHD_f@hH9HO!@5o`|Ed&`r>!*d3k^jrv8f6(e%E;!NdLFLA*}6@4@C&_vWj(f8CYq zos;XK>j!px+#7_gQA8y-Ge_K5&95g^A~#3lm>Fa~gI=!Wc?FdUYD`dBA)Lk-!*}MK z&q$)i4UQU>anm(I!o-4Aea?~_wqYf_uqNleWIq`jkRd?yi|N#cHDLx)A{@$SVvt@+ z#>nw{O%;r^pTAT&fBphS$0XS4*1i!~n8sdGMQgmjCJM#PtA7xDR(v{VHya;g%0-H$ z6TMLK>y&icCO;OoVy{6Jsxa3%N1i`>pbQ_RCUjKNa4j`aT9FR^e z>E`wOegcQAxvgG)6~~FOKblMl*neh{bH6;?4Z2=@BbBsU5*?>ESD1l)ys|Z25X%)_ z@`8BFXqe2QEm%HW+Yz?nuw{tNBgC1v>#!G(rd#=sKt3)D&5)coW&6oR2dl)^@$@IkOQ+Ip< zDAW)c_$GrKoLtNQQY;2l^*u^qWcZcWmjmn3o_&-N*<{5%yX25xcuYsE7$IG(#Om4` z!0nieLGNX+wjUNkqq|&s7GHA+3J;h5Im5O)R-liTWI<~~DhO|VWQts!P+K3b=%t`g zPgs+r?&MyEfXp)kucU<0R{J&y^<|cHA{_>)#f6UsAJ3B^;1gKhiF@jGiXs1v_s2xg zzQ*-iV{67`ZhtCi1s_RQ4?<~V8vGJ|(nshPtJ7gd6K=%mDOS&%%B6GakN%YCBVqWX z_D3K~%t78syM2jn(>SFB@DgnTr<}Td&9da%&KzpZW>1D4;88)o-?I59#gSI`~u9DB{$*H2-;J!>*ek=}ohU zS4^F}v_%8yy<=Af{*_&>l!gfGQ9x4QxWBn76xorg@6baNw$0cYqv4VH? zteLEi=i#0zCCH|V%j{>e5T6(KB59DJWtJgo7MAR(1Vdjp_=d4Olwp&cyi$Ta8*L55)3Ah2$ z26;c=Ow?2AXtYhe4^jkSqWC|@^_3zrRmK{r4aW;w12dsocq46p1yL>95Fc!QW=X-i zJvO97nbnOwps%>>cvoP;?7lIgDNnR@23i!Uyh6M=8vFaWSLRE3m686c8(RS49N9a_ zxM{3RMx2AFZ%RSmzcMr2M65E6|x?Ic&X6g-n zIl*gDDJ)yyK4kWu*?R0ly}Tg*(#=>+k+jN=F+dA{y?;3&V-z`UYLHg7OQ1>PsJ9%6 zwTK(4F&H_9&6(Tm?ki_Jvqv2?!i_B~OX8mWVS;?FO0Vrk@V6R4aM}KN_1tU`)^*pA z#z8<@ML#=HhZcxiuM2Uf90>Y%9y7%Ly9h>ofAVDHF!!%>a#RHC?)Jj*zC3U)vKT1O zd6vsLHJkJ<$17Ho9K*}~^#30x|9eXObGTgZd`K-y&{}@c@d?-(=+c)VjDCNQ=iGbY z(z94O&BhnXv?;!y%cDv-c!&%4QoO8@{ymVA_vAz_#Vws@j4UjxI)g7>)1{<-J}Rb2 zJ0MTq*HP3c=r^3>I?D8n*`GI;cUSskeEz&|^qj@Dg3nJw=KDfzX4cl$gea51q)3mk zpx|FpX`+`hkn|if%Q|FZlbGNH>{9pfbm6S8} zc@eR2IwtGm@>VWq07a5fD+8DcZF&^E%B0IFV>0$rfBef-y+lysp|pJopMF-k-BN~Y zZ;?5NoM9n!i*CY3#K_FLpizVaM&;+|JoBk5`>E5r4B@=8uFEg7>mIA?NR~Y+t5Xu5 zElW>jg0*FsADxsb|!++%0 zn2>LxBqI)D&60A;dD#yh{aKebZEOtYXs_74+JhAjjx$TJDHy2eMzkMf_rlX~nY74*27S2(2pa@;Ln zZ#2_|hPhd8xI2EaQ(^e4)|j|mc!n7igX_-^qfp2 zJ&h{&HjMQPbZZwd2uY{BwY6_|~ob*KCGxyKZ!C}oIjteMJqtm^!L7@!U%hIS0PeOqnoH@v!AWaC%YwCfA6K%23V{n?vznXpUx^VPE;gOg{zZ6xx8fEk5? z`pLZpitp`Nub@9(Ings;z9e(@9ve%9GK>!7MrQFp7Opri2Muiw#}-dn`mM*kP6Un| z*OvuUFMm!9mXVg@(R`;vnMj`+=s-lq{&eXyaPz#hI&{EoxA2)-djUfGBoIJh!}CQ| zkNJkd$@XfPLP_% zEOfhk_U05wGjvoBHyW)iF_9)n^iFBim|Ih`{v_G`V{S>!q-`{jrJ}MBC?(H}*}Ho! z`kz|2`2G9;86S?iM4nzp?<(o3?ly6@HPtkStGJ?}i5X@RK{KXSiY4^oL-RY+jLBhl zGCuzJ*P-yw;2}5R9p6E0eSWIZdp_>%Uw0HRxun#zSoQ+E`v-i+RJY_z7QjmWbAoh6 zwMSeifbvcTST?Ctm^Z>bR%!$*6uOJc(*q+ zj0c%#M-0>5&~;9|_K@evBCldTyOgJivvawq)?W*kF5NJ4hJXUMW;XCra_lQRA2B6^0A+6)~R;$0T0Q1q#olz}j%y0l2oo6{x^#oM7}| z+&DVYHQhi>Bi#gT#Y-*a=DF^eU{$a0;#4yOyTH24YSLpifbX!4Ql^Ch4le5Y_WaHrRax1speQqrN8_vg@o`DmVie7)o71+S8ew33 zZj9B`uXO-_APns789}QR##x~awfN%#s%k9|!jOrGq_>16 z>!SRwIEWY`?D#rC&Qx%e76Sq#B_)P7Pfu6K4n!j@YIW`j$RdJ0vLlOpO?(bMjc3BY z%qC}_t?=mPu-1H>vE-;~FD?>m5u9(gtQh%jd9Ou_{gA^*%_9nsv(_z@RC&u4m^AsaLiQT=l5nSFy(r}DskA_>2gM5^sR z`TmgKZT$C6_EY;dWyz|Etq#|f`7}$A+&xd}(zxPjCgiuJE+;O~P*}M>b$H>>2mR6V ziarFNYrCL`R0XQuxGSUwi?+*<^gQ_ator4Nwv2z_)B!TWa=((WO0}{XJC3aAlvt@x zYLkAVEXGo0M2@X@CA-#0;6}3^##z;B>a^dlp}Ny8`0D%p=4)we2 zp(YlA))Ul`X$Xg!jwpyT=Cm~XnMdKO@Ly*BqYSy8?vp5HNkwmvPK!$`!gGg7I9pz0 zFUr2*fr6>SipKbCh&9A&5cjJKCfK~Nk%kq+H3u6BWKmfnVJ5PAj9f|Sow!rCq_}~dLzpr-?d*3U=k#W z$0zGs?qj9KE;4LQ%06zZZff3d9Ut2i`qV2+xMfL6J&OxKR70j#3W2ncA%Tc#Gu@o$ zD#rYJrr%z}^J&)H#!D))PK`AZwID{jnR zpXrH388h8AEm-2!Eow&Q_`|SP(_B+Ew0MA9$7UCsgkvT2Q&!c&0tpLlvv$JCnuJ!X z4?t-A50qO{V4i{mTy7|tA>0zI1<>P~Z1F2I9maC&$N$P{G^r6<+f8o}P{p(8jqOs2 zH3U!j4p_8m#54A$8H^Ww5P_RhEG)v>0JE0`ug!+Wb_;kpMKjzs-IG|~)napf)B#?k zqZEOu$CM)ep^WCgYX9BLZ=!**Pq))|a=A`hKU34l9dmkVjZ9$*tpGKZwRM)J6O;bP z8e?Xut#$RX$+F9vMA--mCgs)fU+2z;GM2|*&3PITh;R~jpD{U4S7&riAK*I_6=K~PWKEJM;6D>iqYL3JLvq)^w0Rx zSsb(1J`>N-WOv~q!`U8PcR#FyGmHyND7$w4;GBD(d}8a^ee2THLbN``{V4)OF4IJG zUp)Kg;_m&{aOZW?X9T@@^JaaxPz8OBgH_aKAINk5cgSB_lFgboBe~w`@k&$osA-~o zR{QVSUP+|T%=3q7yvfu8vy`ou=qMT{Tv?LTNcK5-bu)@v9WMc zQInQrhh^6L2O5d@cSf{dGidPl=xP3~oGTY4`j*&H&vQ-d<;#6u-pfbNht)c6Gv<62 z|7SE($otB&8Umo-_kD5atiPvchnMpm9r=ZPT4^|0DU?TG(Soc$yU)P>=0y45a~mgM zfq$`2jsl$J&HFd$>H-8!GB=Kkc1EzZ4ylq}apOOK>0%qYPC|(8X8k$D2SrN+$ z)>}$t6PS^KgL_k>2LcL`>eEG%LLfX#*H3;IC+*}>nwoWAzf{mf$xorR^n8$YH$C(E z%!DIwuW}vdlEK#JU%i_~m;bzUdB#u1cHS3$-UtdX;V=feG{y~@;Z#=wOl?t6j2o+o z-$BVU;{#`>88bBv4I!DpvcOHfadd+?N3XDfo?5ORu(>d$qh1DoJjW~DZ5n(KIf$7x z(2+{U0g;QxC2NUa40a5Y^7=@~uvTCb(sFznq=rb3?tLj+kUPDE5SFp=kv+hzC*K0f z0Lm-l#AGZNjvLiVku%<+a_4%}v=SMt<(uo5OZm18UiM3>sf9Fj{cxKvyr0|lyDFZ; z2tVIkKFdjDpNN1Nt(11Bf&L!B8&~})Y7zihH8iRdx5)uY7F28g6)QF9+SbvjqDDNc ziD{VfJ?fy7V1_#!OFOS8C)=JI7T7xk$oQ24b@NWkVS2idcz^Ej{DYs}LV=T)yZE^% zf%SQoBKiA2pBZQM+=!b+4!Fsh)ym#!a644s_zi&;ckh~7h5}1sA21I{A$^-Pf~MUj zrpzmGy^Id4xd6RI2MMW=;u(vzgh_!?{*Y&B$z{f*Cesz#?+83VJ}-CpxX8X&;E}=i z7D0(QWWIS}y%rFlkAJ;r$DzHuKD9cs)MNJ2{YxOn^UAbH5c9-7j!z||{d7QxR|Wz$ z7YGds-uD{8cuX_bKQwGT;1T5YXrKJ4l^(KWJAH%DUwj>5EnWRZ#U?9LIBt${1-~ch zRTV@~Ec$X<@7gx9mE$+r)?)YttVvZSM;@}BY;luEj(CO^C<(_GX`14uUo>2^sp`M1&>@2rADbGIZ-E9R`g z5KKcz!+!a6{bkf_b*13m>cIIdw*H~ItQ_k09agxrKJ<{Ye|##ACNK9$hU4~)WJ@<8 zQ{%M4B75q9-^Gegd4aO2b!qKq{6hVr9Z!nTarH;|huXRNvv2H}$?sPbQ{ikOSUkFG27jkr+b31-2hNS2v>%9coUJUg| z9XH-}$9 z<9escwRmL~;AyY$3-;6OtsvoHixLI{?Z2sC2t0m5{p@+L*20bNkFG&)uPdkAV1ZnZ ziVCgOx&3(W?Kgo4mn@}6B3Hir_4?0T@#l~xm!Hc5rPf8{*?r&JzAD0TaN zjQ!gNvf1kqaY*e>zw%cb?>cL!gaJL*qLr^woC3oqYcn%wZ?E?JeA4c4hTXyyi@$&6 zDfwLaMRW6J7&@`%1LZD+5gvXnzX9w4rCnp=p?hJQV*Ngx;w=Ad6?R!ctLl3mb&rzf zlMcVMQaZGg{P?05>li)_7umRzY0ypYaHOS9~x+ zeOS>w5kvoWURk=S`$yiLfDy@1olE)GvFlgEqa>Y6yc+a5j+lPm?3KnY+zB-vUM7F1 z;uv1X45vle1Z&TZui&Kq1#7(uzWj-hOGt zPNRse$cc$gyYZ6<%&aUDFF!UtTcMYvcj5GCer}|Cu*QZ&KDfFy18Xnt3nJ~$=};{q zaI-iwFMS9=5s*a8qYnxVXet{6fPvzP0q1Wi>Q6UJEbW}J56!QE zhvt{mnkI*Ah!*74oqavHRN_9ZO!(6B2qC?7iA0z)mmycIMF58{!MBp8=MOrsF0CZ2 z$e-^Y{X9?X)~+%7%xr+@)V{p* ze((ZT^7PFsH1`EC@00%wS38~8=I{esdV0TEc117GKyI43t{F$+xS3+BOsij1yP)nd zY57lxpnPQ5-mjCA8TqLedVRA{c?%6EqkR2Ffh8TfKND9y@*EXJ4USC0%^jsfQ;Gzeb@~s}yDeUo6pMgignG znSorHKIVz@)>XRZ^UYDwvRF$B%FFycYEBUeS(hwCRzK1>b1TL9M3}Q%{G!Q`a(}4-QGlh z^N;Mm*B3(|{w?+^cJJ!;B<=MmyMjv`ANAiRzUKG^x^2}PasB)%nI;s!d0!@Bm*@6_ zp6d!!H{`8%>Gnn4w94?qJ)7|ctPU0V`sdKcZoFkN$3LJ(QU|&6ER3L6UKL5m;o_>& zLT2D#cGfbFh((;DdCIT_ZP^*nR>4<_GyMRE98`bc8X7Sv3kvyBx% z-!j5qcX;>h`o@O4vFXm!+#W3>LbQ?Xv(J~KsK>e#f*+-`QBW_tOHnA#gMya-=0?2V z+V;27haJ4j|9FiHZ3S`l5|loP!| zn_T_+(LfjW2V?R~)PFxe`oiX)@BGci!BOoo-MF#vJqmpZaM;&C*S5{w9Hlfx$tb7> zwwh6LbkPgx@2<17x83D=zWTe?o?_4%Mu(q-T~55#`Sn+rIs5JH*l(lnjuWVW%fp)l3mj%^F6_YzjVBrST2i|_Njaxx5kuHe_+ezO(^;QUyU@_# zx(Xme|9mwRS9A*^drcP@?y~Y{{*2??+oLt`ty>hRe6k%p<2S#zq0hb`yN;Wtzi2$c z43#Nf{6_)7DfL|O*8FwbU;myz7wwkxyqY{ECn{>Uim;YB?X{BsIxQEqE`?(Ld(I8^ zc2d};tlpu%m)TrAO|j~`xdT=xJhno(VYi=98mLY^bZEu^dps>zNi@-QOY#h$@2?l4 z6q)li_v^cCR5HTU;v@#&wsOC%FNEjo$y+Nz27GPpqVM&JU!kE zfA{_x@uc%&C6ngLqSr;&m+9NDzORW$QduwjwQ@WtY~B)_N3@pTD*6QLLtT55`fkCP zvGR69t6k^yt{*>+Qs}m6P$CRBSP3$g!0CpOd77?s@@k}0L9{*#yrJH0QpEOe-WNZ& zQ+CfAkdmh-9rEZyVzH3E?6CI9ep0;eTi>)rSuka>=Y8j)i51+^J#y##xkJ9>Fc{(- zQzDTg>9NbZ*3;X&OC=$e*ncMl`}YMU8wCAE?3!t(O7M;L+{e$K=lQklTn{tK^YOL+ z$xnJNZD;+NAIq1 zrq}8fkMZ<19C>S5Xuo9S*&;TI?jq!O6IYmwf-?1rK<5gU=R1v7`duf+!R9wSp0|P% zeZzcP6b@FR6`d#31NK{v)pF@-?$5XOk=olMC=VMy{W>)x&||8uYYj|w{W>`;eQ#|D zT-tXDR9;ch;}j$5Ia5wW!*Y}-9Zqf-QZG=vG_>utpE_2o2arBn@~00#!r-1uUS&~_ zi2LQOrvX{5-TbVi!fwsKlv82@@R(y~weHt_nl@{_V|w5QU%2SeAZcKvcW<1kAQicD zqUpZKX#M$3WYp`KAkZvgD2VQqaDi&4EdYv?O%{G{2c8pxk37x_zPLrjpNw~P)i~rZCh9jqIGc-?mmZR>E10^ZDOeb?=08Z$yHlcx9dX`{ui{Qmd1oU`mboIuT$N=s35yx zj5U2^+~V!jTH08_uR|PrspJ*%LmS^4!d&oQl({3vKX>6s;9XgvfBTpIM&qGoBu)`z zOnQ3ykt0WLn3+AHz zJMUhe^j(pXcM`n%QQK{`wWGF>we+#r&ro@=^u;ui9_$a(4v5gDYuE`xU)A6AxS(ZH zCaXH;@hAsG;MAEjz~KG8R7pwqEDHQf07uCJMutqU)vLC@O-ztb_eX*SZjjqdlU)SD%k=dvp#HU-3Edd?wkq3?$=MtiaDXsT&BSx$pvgT#ETN@i06()!n zonlVJ(QDQQIF3D6sT-6KuitoEx^au1@j3M%w+9d20G$!VLzZu3!eW2L-&QVS4wNkX z6N;Fro4EEOYJq>d(;7WjEZkE4VBmxk)gTc=f-oPSWDI`UV)A1jCN1V@5%9P7cA>4; zq@pgiuosN*SUcS5f`$3dCNS|UOeV7mUB%DUnaLk`ES&wocr#AH;u#$!63DOF0h)>x zFjkFENO&~U5jWl#RACJ*Ha(T(jnsN!K?ovC^_7SZX^emf*Xg2U3)+e7Vd5CLFo_{sd#`>M}8tK~z|YUQ7eYnH|)^J-2> zl8kR{JTfz@4PLtocSwduX$I-+;jGBi-2zeF<&f5+hN)DZduqxWHr;& zG}mS0+BDGN#v+mM7qeLLH3yulP;Jrv4jBXOH?Y;B`Kfi2Qf6}j`ucB@cuurXqWYWb z*}fAwLGYC;qw(vKkN@#YmYQ#B!fv{Kvy$7u_9;9gH6&_X|77+*uum&jlo|ynmGCAL z`H=9^Jj>;VTV>)YS~nvqOf3s;P}oAYCEFTq=T$$rmvTPs=PAO{@5@r7x%L(&|FK^H z@1*ccdr+4C4LH6v?96;#K!3(L*yaS z)mS(F^=vB7_rTbMxHaWPvAFAKUmipG&}Y&}va6aINpha2IzaUxl*g0+ z4??PX3Fn(u%Yh;YjZp`TDxvh!(o#BFpg0#60@fF*v@pN{;eX4>4!r)JEeLmZ{FN%$ z{KhjUPep2$G!lI?EH%ovXpXDKQjFcT7^-9b&d^!@z5`wf7FjB_E_~7KnoLp%yChFk zAhHAeBjXgN6>n1*2T7Je$x&hBW^YKL-yX1`6i;QagbCdIBjzuTu|E!zax{4Bi>#o6 zre$=gInFntrR}IiewRc}K~=>cxpqluCmbfjX8Y=;IcmP-$Q1P$_$Mi= ziS$SW$!OKgvfnJ{xKpe@zK}_}<6)Fqo*Cmg9<1JPzi=nRAm41LQ)w>q2ftohmM|f!l|y<+V25GGQvt#0e~% zLgAEQ+e3)Jb3Q{iX>tJKG*t}%F_x5=@tOLBi8^;xpw@(auCQ1BsdWXk&II=t13 zB6IJA!nk0XWTFrbG-a+$QxEhgXchaNlsf+pF7Nzt`;Xph1eDT)I z@gO5bFJle_2SZBta*>!RW6x`6(+`5UpuX4z)rCUs(GoGu?HZxow`FaZYh9_?4 z+eE^Q7N}Yzne7>a>s`GZUNhO!nLX!Rk#|@rZx;|N@VWR+I&Y8q=FGCoJL%4Ea3g^< zrDcC-1XUv7DUk1h4}i^0uqfkw$SigcW6-Y8G-oVOC{&+?vnXRzL&YNcX)618K3@mK zO$d(NOZL>({#^I6Kl6;;zq<+lGDg*)Kb1@r-Q(}o8U085hN}|_p*#vZ?EcbFX}TSi zvMouua%W;gr64IJwsN=rKMW24y=!>Yg((O^w^g0RnB7#FQ*oE{`Shlu;m%pDi4or> zTdl^@bx>6P;6`53C!R+lqh=goDeMLRz!d-)7P_65Ny9jsv1^&D3keF&@MgHmEQlXF86H{i?$`6=aJ%SVo&W=;-V2 ztt>g|V|RJj9$#Ko+yjALg7r83(_xX|nGU&7_LQubPVxfM+Pug(F!F}hJU0tt4OS8Y ze+>Zh`xoI%3ST;~J1ud*XxE@9G@O=~odhPZ__Ov?n1xbf4r7Qu9t$^b$U5A!(%&n!1w?S$6R( zE{fKGpThFlC=NROUsa7mh~CAi1_u+#3L(aA_w^jgg?&FmS>xZLzq(pMYT^ zp|PtpjOA+X39fdb2G*x++9Yy8A;_@_yZi1m2*(CV=+>c~l71l}VT>O1l^QsW4 ze(y@8ck8APdyF|7Y2nPa`gH&4(9Vz%i|8CxRQE+;Fm!;x6}=?a$SrAlr`uJf@Lr+z z9kfpkbnrEARQkwc^%_pB8024xK^(iT@Q}^?s9C(BEH8~sGk2eD3f+n?lDWf^XlC|o zepOc!6cH<6dPvo4gd98(FzqG{<0gRQa3WAV{K$T+KnOzx@Ch!e-b;E7lT1Z?4#t(8 zqGV)|G;r>F0>os^dcr-j?ebl~U8wqt{k$JEFFwi`;$oA(7ISO7JD#dn^Ig#s7R-K- zDA}QM?U_3cQozqI?-v6f6QF4~qfPZVREu+U@)2cLp$Tuh3a>-XYe>ll;o*jhB_$8B z5jEXg1j{g#C1Ri9WVP67JpNJzb%Bfl);#T{Cxe1{5eCWGQXHJrzup_xio!=FsF3M> z3~=3?%Vavpjo2%Uicg?sE{f{975ce&&RphbJokR>fGvK-}b*Q(s0R&%8_Q% zHx%ENul|5w<Vjju`1pAzv8h_xjMo5pW_8H?Xdv{&1JJ6 zOyvJ3adhHA|A7Q`Ci2rAMj^$pM%~81ru|eMz3&u0Ut8jT0v><>|9GiR8@}u(kEI)W zddz@rUf*DN^J+so1~1lq9l;b~oo^yIn8HZAuVt_XAS|uaeo< z_g;pwtMI7EdteQ%m#ege-6Hggw%m2ZeN)>}KvAQNj$b!#k1r(@CJQlUS30ss(Q z4g$r}#Gjvn>eI5L2wI_rc{NA}ux^J%YZ=tO=92RZi`Rx>j^0L4P+tuNedHnLlDe00 zju~FYt5N<4cqqdR-H6NGh^tEGaP6;pBiwHm=7G~gg+0d{`-O5wrG=r*X0#K-L`~^W zQ0Y03lfcKQ8QSekJF}U0x{}_zZL#A+mYw^}@5XwnOMz!^V0jDY#g+qHztRI_ zT)_r%naN_i<(Q55%ge~FH1~BiRu4GQ7ni$Jj&;7ZaAG&jX}m-^c7_&*bDrxNa2R)K z^}~MXIYmQaC-RFeg+34r7y|+QUVWVwWSKFT)OKAurdjYJF9iqNTf9?P;yowXdfi~N zfAUony{Gw-6G7m>JxYU^Q%691YCP-Ln3HtGhqy_Gr-iUi7IViQlI50*y&Ts&wYnfu zTjmAe*GdwDyz$?C`^k z5Ddpbu=$24sTkTI+XtR)JmGXwS-C$OoN6LJCL1UiepEk6pd%Y;`@%K<0AFOdi|Ztq zk4da@c@^(&l-v750wrp>3Xq9*(;UMIpXkF;iW?trTpl}QbDZ}I$4XM zUBAE{m|KOHvbXeWzMrf?3hz9Q!b6y%tLnjtnx~T9l~$2&EaR-`k6TLhY7;kU{E{jB zCCbfljx_xpFzfehqaRLxxy)-hCd%{Z`Fk3nT!oz$tFVJtMN}~ds3iRX8MO*Rl{thy zDNKl_<}@xDXmT=0i^F0vkpXJl+7GG&$4}_KOXFuBpyZ@FF52X>e zM`0oBliLc?Vq|l(nAti7*}aoeUrpq_+130eRhqMTqHRU zRF*gbuNxpMP*4N28*EUA1H$Kdb`OUR9(ub=PISWK$Mmjv+~v@Aqg;Tfyw56&rjBuv zzr*@A`C!N-f|;*3U@pXB2_P@9^$p^%Kq#9}dM-;SUAn4Aw0S|dD-M6xEk=5F{%iKW zn@FoVS87?Z8t9$;X&G&<518hraPF(Gl6k!!tcnV&xWxc>l7X|0VCNZMIRkzuEIIQ- z^}&b$tb5MHNPE6NXa?MM1L`GId4+H$b`ktdR=EH498cq(iDr4xUc1KnIgR-oVQ`;L z*bC(#V_jGP|8vHKowJJ3%7^=3k4Z_bmps)5hrSnROS>5gDI#eFJXJFqJXciDeJVjq zo-bBvL2sT%Xwio~Iu}a?HG*h(2;=Gp;RXHZVXc@#mt>M$5y7086GCVo^TV>a0e;KD zr4z9JZ}s1!Jr;CnM`FJbu--8$Lb}DglanurwNTe{dXmnqB~SvCESqrxXGbU}YXs`n zvPE{c+^o2@mx155G(ksQCT8G3`)DG%z!$+E^jmjGghzw0Mn6wh5)#9G9r7aEEanyO z7dSm;8C%czP!lP!DVQjlGOc8S8i@l%L&B?VtSH4cdxc4e>jIKkYt94mO`0r%cYaBH z_u=3MN2EpA_?KI_km5M&KrNavG&0ECkkCesWE!EA8CMGkM=WWWMtih~r&uj}#O3Ir ztuby}n3oM~=SWkh2DM+`)CtGa)VE9Jn!rbr7kwB#kzG8k7)1xltS(-aDTF#b$1A0q zcjy&EOg`=kGDx>A?1Z=v;4eyxSE{D@FhQ&O{t1I$C0y*&ROc{z9g5rR3p}ovHmpwz#iNSUeW(2G3SE{ zH1h^hYQnG&|F2TV$AXwH(~+c)vr4m76HRFeyxl%3qbDoxC=2$w<~#v&;YA&#{d=A| ziwV5;_rvdW+mEyt-(pY5$>B~p>jHG0{uTD|iZJ>C*ixwfvadvY6u7>TbcKDKTR9VhSWaDoXLYl9Y z=&uWUbdNtya_1=oFg%+%*$}U|Eoj0$1^#POGU(`I(`zn76Zx20ZUK41Q>SvpbZ~4m zGf%VlDVyP_DK$PS<9rPM7Q5(_P9o<8rko(C2-V%@AS*R zy>&0dQMY9`E~)l_E^w>dPb#0bTj4o_G-zm#XgYv-{6YtAt0Q96PBuWz4MkNoFLIx{ zq$vuWE7Fd)m&Ww-FC25F%;iOlAY+sQVs-NErFVNoXSvCcz>G0WjMIX2?`01R+fDX2 z5A)P}S}MdDOTt^|hA;YMP;Su&-h!_OSR89|8lEF~I3u=sE0Iqf%Y7{V)|}LH2FAif zNK}-Zc~2wgnBy}tSihkK z>S9A2RUSYgZLh-uGNLrFd#QVz2mR(7%7~N zvw3gx&HY9GRvQVVBXzLmDOsDdPs@`RB!~5-Uqi#hV;ZYXC3-p@7#h^J8wm37z^T7T z7j}-cSixUU0FRrCqsL4<`E|tdxK-(ewKJc#_Q^_7><67YX>ORE{HTOQf@K7aH{6Wf zm}u`J%Gj)7b4pZmL(TB$b<{B;63s;I=5p0yusy1+AmXgMOcMS2NOxPg@WfY9Io(NP zR@%Mk2GpiEoe;{JBmwdpxujot!CqEqT<+*IoNj9XGM3O8ux{JJ z!zF(WD{V}c;jRJ}2!NA~#M|pxiDtJ~=!&xUkmlE<+n-cMaPQ29p~d$~t-(u1@Yu-8 z26`$9(MMekiT!i}!1M;+Us;&2N7GAvMy!bp3lk$d!i-Ql)kjDQA5CANf7ao56qe?J z15sUA37yg2PJ8^=`O@CJH#3yv|s*4~4k6QJSOK9OQRNy(nEQYg4KIF@)*Hddr;*mzM zc9;hmQZtZ)goMYd_dA4MKE###IKQ(n>G()(^^p~#J+qMNVBRZa4>i#R2C%m|2S56t z^9cxKXAJ~f+`0DioJfBJd%75${2&>S1BYz`KbPqA0D5gyIL@b&k08rsNT=7wP(npWw#7}=$Hzni zPXq1jz`M@Q7W28p1kg=ibNIaO;zJjAJcpo) z}UCjZRQkdDu&|tN6d5#msC#_SY&)eoZ(R^xu8j!uwy9*?{jK#Qbkt_QDh}%o!Hw z%LF2q_}Ml43HX(7{WIgY5|{VaB{Ke z$zu~RSawsQy;1p0aqOG~f%h$q=Q%FB(M%p6o&;Pu#98Byg{4N$i2RIUyA1p@2%&zm zhs(XMAz-m#9~hrGUbDpRS@uVv0hpW76O-hQdy1$xyh@f{0|>Pw~FXC&}3t3~HJT?cLC@588vy+a0ki0uto%y{KIP z2uswHqQ*mzL&FbI3Y-$Y-ByG$q*%SPVrRd z>0u-NbWRi`sBBrAu&>G6l^_BYf<^8Q&FW$KV{dtUb~5hHJe8_WzM1_wk<|zm5E#>g ztZUm{n$UwrvuO$yJz+xS}v?ySr4OX4h^!&hFRU$_1dXh5$D zMP#Izw8ob%kt)zsyd;J42vts{cHVQ`FX9h*UHhpLQWg_}= zGasRlaM!ygGE&jhhObQCFVPQ=HuZRdULZPihBImvC=O|u>E&Um9}7?;qKVAHt9GKCw&pE z$#Yr3FcoLx_)XBw)EAD70&vpN%0(gndS?@|%#&2jec)K0lWs3jKK3vVr?;%oz_kJ! zp9R)Bm>6Ay$G!z`Z}6=VOc?;@q+WmKemhX8k{tE60B5Vh;Cu_t+vMG0CEXyuw5)Sh zc#`gHx}0!}{qY@w&=WEc>aBvM+?HT@Aw6?xS!6dYAsA@o8*-pZ^zrO)#IO(Ay*LjT z!=t^YmN}B|b;iAqF#!J%dd&^Rb#ELzgycb^0g)fa=TAbvOuxypbiSz0i%pND4_-XV zZGk%j`kE{_n^Gy=l&q@Wd3#f`{i7Zhb+puisveYH^ScS))~4PP<=9{|osN9h{9@4E zV$7mwNS&BT+rvCcy+mXWZ_y+~<+X$k_lqFpPbwzrTB=U2DHv+Zu_pXD)tl_oiQNQ} zM{i&bhXCQSvubk?Xp8#1Ha%=XWYaP_7e?sHpLbz0fUE%M1$!97fG#ne+-$OtR$Gn* z@ONGsKXVpi!hz83;&K#3eG3`k^rA{I$XW-Fv#qrJibF)9U5WUR!UXKW24Mfw%k@n( zBiNBavE%xM?S3p*P}Kg?u(mxAeawtX(V_N;bjWh5@8W5LDP-k@4b zuUmuc%ivWd3G2N)YZx{zQ_ge08cuy2#o<0Yv}8ZF2F%A4VNECWjENgtg(A``W1(Ga zdC7CI7dzRLoDRSqrlOv7`W1 z_%RRQujUax>G8ePyw$i;;)Mbs#kg#8c5B~JqGMi+efpxa<vX2CpUkaE)2Q$HOpN_2g z309l2skA=<9~G*$ApK3ugM?6~(r|<(G8_yB4ihp)CN{obbzDX?J;sJ{)eg)Q9P7EH z3l{mVnRt|2e(uhwJuT0D3C44o3}L>&%BwgF2nU+^$~MQU6vo{`%Pp0yKz54@A_%oO<(Cv{ZnUt+%BTW(K0YpPuM4d?Q!%?g zED(4){AVv;dr`8WUR?HMKx}1YNxD;1Zjtout|yx+?R>>#Kjwt? z9t)@}KZr8a2!QUrasuymShr$M_HF8i$9|XuwB!4Zoz`TMF3gjHpM3DGU9m6#xzVrh zv7k+U(FTCc*9i>+`hfyW7kgZGgPC2jSS*bI@yV&M&-zki=yUE{vak*?-;ENcU+@+l z-n&QqWc$5NPm>J+btAybprR3hYQ$XYT^gJAC8rnB1P-z!O#~qv-m8G=oOZS$gpIKa znU!!1$&u|nAyFLjR4+m{Sqtc=yI9-1K-SagJX4tIIo<4|n9p2f-SK&CH{r;H*0Ly1 zw!nMQgr_yoxAF-_yTwTlv$u~1ZSwKl^qBa??Rln_@2-Q9KpFfrc7TLvHl$?CVIJQ= znd*bEy_XwIwE z-N_nT&~Q<4CfrTnkU#8Y)VkU;LYD+GeuE<|WZ{VaW1p_wte1m5Y*EL8{GfZrw?F}W z+6i1t!8s_LAF<)H@Fvq>E)g*VcYE$$oEePE^QUpJob3uPOS@CWr_b$tbAP};^0W50 zhI7b}BuBeb45G{_-_uBos7>`D-;aKh6k?GzpBeR0gkFx~Uc_h@>a;$$c0I=@aSlEt zHYQ!Sn7sD8sVt2DH%(QC&+%g9a#eIR-|Hlup(Ns`(F6haJo`P$-9y$jf@*XDeu$XYgE(zxt}&rn5WY_-DS>!`zf zR8OOjG95kf@u((;H3$9WsPk&!Sg7xNsp`DAiLPxd=^Z87`X~yuHX&Dq4GI4-G5pqh z@aNL<@-18J;=bN>NiDsLs59Cklf-U>E1to>?w=S?9JHQ(#u3?cbuW()$eN9O`D^m{~2@BjHiy z%JhGEdZ!vt(|P*ITj#L%WrYOBtP1t+B#E5eltj(PoPj87$MnVWBiblm+T}#AN=lIC z4OJj-wI#mFI9Ql$cH%FyLDIEHz93H=!dkgCAPL&1`eXkT=xTCuSuFgwB3dMJG5_KV zFjSD-8E4ZMVlQFU)#cjuejfax0n8@x{6Gfs;Lg#RY(cjt(Wccxphq<`QLz)C1gRn@ z5!5L4BMI7>$-}(GuFdm@0s$KYO62Eulf$LRgP06Ndj$CVb*a64EuTVF>ElkYT=|@| zPheyjcx}TRuM9#n2dXGr`MfVm5bU0JCa99CBNF;xq8}E2Ye7bJ50`+yggyjT0r^VN z{Dwqgllm`_@1+U_UTJ$>6j2#;d*a+rZiXCNhK|Hr0?)ySBk_Vtd*J?1>vUI@ zxhF|LAd^vDPn>UNTssOr;xl#e99Qy%ZE1J#J6R04PZkRKPSivwcKf^3lR zYfC_P)4KtA6g0=aSAx(=9fNm?{W4y!cIx4)5t6ou=sB`^+29n%6u}s$6p(@tEag4O zLKc#D`<^OA0$Bow2}>%Fy_geT{3+zQ5~UMi-b!yqdvxT&h76@O2btlA$!Y zLt1PU1TZ0w*dl-ifmUcm63$m^_p&WXU zH2orS9N%>vK3IHMZA$l|OOhW2%7o`@n@5gaSbhN~kUZjomyxhxC#DukbpbJmQyki; zSp-slFk8gDC#+R;?Zxg4XAxC|<=jMuY4SJbM|N}RB8CL?E}0q&H#?)Mv2^?OFJRY% z$Sy~!a%Az@<#}%FOnB$&uzr&a{h` zgUIjWYhB9H#ZW?XL%m?ly!Y;tBwbgoqJ}hB*R!N(4Vb7k6R|@&4Gh)EqFlBbuo487 zO^{d55kP8+9_E_GqJCp!FoXe#c2no+dJ}nic0b3u8im>h3g}R{a8E$ZU`Z=L5P{SP zXKP$iT{GhFKa$d~#YmQ#2@72s)wLGS$?oB09c$!{>a?cG2c&H5Kvt}1$6BRlKW`Z* zTOYH;Am~O!}N!tfAx3TZaw0UkL958=y2r4 zzQsGaV2?z19ZqczbCpF8-67vzELX3$?(w2tmw3z z#71Dg5o6`F1^s9BqS>%2wHzFi`nH0I+u*-35! zl9FDzp{>hTLIwG^Y0;CrX=-NUYtk+i~8yFY=# zG`Gh{IqUG}24gzmF)M)$r_{naSQ8d-EYdsp0gS2>r(cae%PUN2DqqO+`t#uydA+JQ z>O|A5bDS3 zTwC1t-TsHebm|x7>fb~CEir7HZmG;I#r=2b3bTEXXvV}pp1HP~b=n36xeciJUq8cn zmq}?5h`%-^rL$rR z%BJABAzHy{IUDolk#R*XCrooJzh%P@|q+|1#~n^ zp*j_RwKbqso#x9{5CLY>5tBRh6n_&IXoizTCaZ|1OPh>p5IQGIpx`Az`5uY52WVc8 zgwA!aQ$0iCEjaxKoTvfIji7IrF79AjEo;5GZs4jkC}Q zy36h1Hg(B>{@652E-ej1uj!Q)Exi70BbH0knk|5^ooVPoU$=$@eb*|)v=O)*YT9)k z<3kt=bXE4JghSG4;$x?(TDi84v+Vt~RSZKsEs?$SK^ z1brZF_>7STDxAsmPd13H8U)5S~JG) zAxjSdocD<5B(Xso=(f5~ZWXwJ5HdPIP5xj7xp>EYT0NLx6>~BmBaDwCD&EZt@w^a# zZq=w7;-F#Ma)$(~2?!0ONCyvYs1Dot3pnVa=_Vap}Nx6j~)6*a;l(VLYNFqF6j{k$FL-a9$gbQ}5>5zH{iip~#TXPi-ld zVu03Ct+R@~=_!b=S1!X2o7xP(cqD%qBzaIenAM(o9UfWi;3+)V5SF4+;x(E?lYBli zG|V+8Dwd#?d|?wzq1H(d(-cF$Jcb7ljha+IHH*3op^5T$H-|-eiI$O&PNLgPB zId+626CJ~HR?=eGLt|4-M(gt{i_7u_I!%#v9azYF>&sJQf0PYMJWzgRw6*cX-Tc86 zt1`V=v}GtEJgc?wz;czJae_Fz-!X7!_0-_+Cj3XAEq$_TaO}29)QO!F#3xCt-*wVh zx*ol!GLf2c8*)vgp;Z5)B9KD~2Ki?L_9Mv-G)CvgmBOOnI=cd|fj?irz4halY=K_X zA7TmLTP`dKN`CAAv4IwPdedp>X;)t3kD>XY(8D1`{ucel;rYGlx`~nSikokz-Rmqg zzyEkOooD;QJ_5P;&9=Ps&E=oZ?NGDZoiizmQ@4VGMpl-;94P>9alT{za`}YM(k(3D zoNcRXvhhl>4LZoELns+k4BuZ2V)?gthv<>u3iT1DURvUTYkgrq?8}F~tkeZ=zgnCK zj67`J*$J#zyNo$e<#=Nt?rY<r=f_hr;qrT z$vdONl536EDf&)+m)$qFvN9w4x61vq0)Cfn@(#YPWHzgejD*jUQf`*jy^AZbe&cz9 z#UUaHua+t}DO z=`{BNtA;~r&Xla0>0?j-L3roasEtIW2F**;ad;NhQe&?|?WpK(AlWRRR zeCJtN_q&_0l@D5V6@w98VLDG&P&YrlQ5_|3{#f~wx^N-!26M*3(Z9l6>s`csmC%D7 zkH_u`_o=wc7k>JL&kny#m9lgHyA?R&)9!dI!ohyE0`VsD^eAsL=APH$&fr+LTg&e3 zsL=nG|IB}Ra%lRlE}@~m%mo*(j^}X~z8gB07%EcwE^>54Xm~^sXm@2Z_HhCNb-p=2 zB)I^0u7QNat=|MbNUZiqpNzPcmBgQm=adujd89}PNb<$%PElXBT+EOJ;U4=KQvBZ) zUvhE*@l7$oi6{K`xk_H61?h80m9aksyoKjX48;?Cv~MRlED|MN%~L2xJllW0v_e0* z=y6q_?gZ{9nbun`&v9x)x;J>J(0Wtf3#?A-8G^Ac=q|X|_tXrMUJ_r#)uS70)N>)~ z%!fgl&^i8JbH0td!Lu)6oAFgi#4A+sq_9@kDMK;0;|+%1du}ZqTm6a)9NSypzda3# z4fi%?3qRGZPoD8v_cJTd@yITfw;!=29an$S#y>#l)EF`Uo3IjAHKlTl!Rwp(25(2! zJTA577U^LOtRe}(QiYRj!Cv&9}@7o0lEJ=0r8QG zM9^=3<Pw zCKX|>eRMUI%7Lkm$^1mM(d5{VJUypo@%8GaqBe&OzkRekx;Y)BOZtuHQrpBd+=Nc- z_i@gyj3%MfZAAeiZx`F$bm8S@YmU4D+@A_B%iMMS_ubl7G9S^!yLtJmK>KJ`h=hbVUyZ zD)vCuO)@utF>{aYmytC=Ge9`*Qs05hH`JTNS5(H6UMxfVQS}TQPruH2?$;aFX4-Wx!!> z2=ea={f)&D0j*JkbbOYFq`Mi@?@R2h6W3C7O%@E2TN$yuqo|6KRq8>1Y#4)d9c}6u zvw?3K?)M*`iwQ3N(JSm_tU8}2x2{W!*-Km<(sWIBBF}x_v#=`6H|S6d;C=1^F-T#M zgozrq#S;U^fyp!!c6G>I#k6dN*!e+$Loiu;77`5%{J(%@*k`=PfG;rfc$<=(xS~as zx+Hb`qXhit4C{>-!CMRW@V!c#fU&D> zQ!A#dr+BMrib*fu`%{!|7@X!4sNBe3uybyn{t&ZuGv_1u5=|baldgY%r+CjK!KH}W zBAThlZ`J+V38&gnz3u(BM?X+Ro!r)S_&z4P<`TQ1(3g&gz+fV{yaxNN+aQSNdYBeI zBzXn{M)0tX1m1(EgFI(>w#B!)8*reHpd(E3_o^R zj+8zOxZvjIQQ?B|PX>(e?Yt zS^+7m>(AZm-f0poT;4t7ZFI=OHAk*|@?5(+FkbEOaPQ@G4wKt)ayvA-%xGZy;dq_C z*~f0|kKb`hpHx3yz5lc2lV1^2w(j}6iaB5Oj;Zp^Ylbne&N^15Y$W_)6XL_aOY*hN z9+VnR|NLpZAtIqx;vHdn*z1iqlePJCI^1T_`hik}drfd9_Ld19p`cLshl5v<+e68L z<+rLf_oM!jt$qB+aqP-kuihKRGpipFtv$W8sVh%zzk8ar_-K6Y&hxq6#hMMLKfmV) zo>22F?XrAcQk}!0V?R{+2C&qoixvt5hSa>NRkl;q*Pc42XOXFxGK{{j^fY~OZ^3Dx zK)|7*-}dsznKkbG63INRQ&AMhOJ3uzFId3-jHHKuc?Da!cC+kVO@t1~D(THP5szU8 zHz%+tkw1NCydk8`rPh1o)yU5<#866EGWqyPHNkyRV;Hh6WS(*7tP0~!w>z|`hEVmcjwdiH_00Z8=`Ad zwU@uzf*(F~PD5jC&&Y?y8DTg+>AAf<`EI<5CvVWh7MXOnB`jbuIP=U$p+Gmgw2a>+ zPkl*Gf=|kyx;N~w6FE{+GcBuPFlvBtkMFfafEcIVv(C8ELUlE2mALMed4IUdW7aNqrV z47bH_Gh{aQSkC z7<*U1i#f(|cceY`@^WyS@}4wc^=lAorbIkRL@wlZM}h`qP6+%w%H65@!>_t~BO`+O zVg}ew7?}`waqdg8tiXsbHNnYy4wkEJ->0v6L5dbD_b;5lcffJTks#JIa4!_?q<#Bq zo3`QCSU2>|YRXsu^CZi%niF|NB444Hd+_L3$IKm69xEpLvy44cd$)oBes&Gk3PN6} zSrJGU9*MQagC1t&UN4kBMvlyK7L1KXQ_SGSVy&W5KGOS<2R^$F#E64P2whw(h}W96 zCQ@+lbd3^0_1dLRob|k;N~QQHt^EDyTXZ_#Tjqg7lH29JruRRUKjC?_!wwQ^ac=e5 zS-Tp~U+M#STGqgXGy;Afw;>YFt@6qmSZ}|>d39D-NV>-n?!SeL)f0*_#Ea>*o5oc! zy#QygHME|>m|mgi;)y-j;iP`S1+H15(=XOC8!;H$R-U9&zTdPQLVwrD_})j1u2Lzp z9V*xBCLTOpY--KsINb4>XoIrmWA@)sb`N58UPB9@Da6riiXAZ%7+t`U3{b9D+Ximw z&?M_98DgzlRr{1)QR1Ex;6pT3+ODrK*xRqw!S6QwgrOE0YYdR&!S?LLa%cuJI;?C zo>B2F+_lOwy)4B=x}f@SV}SJYTY+w*x!kQ5Jn$mYf_DOnM^1p-`Xm68*_YX|4C*|eoqs{;i zgsq$l6k#M$%-?KC(__aT)%!Dq20~3_cNv6SbVlqm&;RFGfCc)uz`!Q z>iS0be`LL9KvQeiwJTC0H7X*~MXDem(z|pJ0qIhsB8J|30uc}p=>no4U3%|QLy;=I z_g+E|5Fmt*ob3I)=lz~@zMsjjWM!?)anCvCHPpY3Ixe>^g3UD?&jN_xzHDtGGelF% zsK|zS`Wk?cfq_9lpOLSRQicXucPQ5F{v$%-8Nnn_EAJkm9U}iV@?EjtHuCA$s(<=^ z2{-o1G55{GEg=OF8i(28<(h*$p1jhp*c2|*ulHbAxq(+5^O)0ZYt*j!(e5M|Zvev{ zxSW*_w-lR%4H|g5*UdrFo0Z#qAdM3NSt`^&nmlbC3ht8#PJE@_OEj_Cq^vesd@PnP zXtY)|>JQoAy>{DIQf2MczldG!T1-u6moFo?aTtCRc8PLk9<5cD$j^AVBSt#4faCA9#8%=pSYcn$aU8J_!CS9A$E^ z*?3b;Aqd0Q+G#1bxYO3z|J{#BIiB?mIBvg7DyaEN)sIlzN=+sWeq_-?l*K$3dN70G zF7~5awnkPC_;zY zA#}o9#DjtBv1ZbcFeM3>@vo{LqMHdOqJcBFwQ01*z9^qb8^O$5=~nlZcvp`+zQ?_l3^$uUOIv0cb#&iA$iUg$wMN1&E3zPpB2GltIl{qB#zBFmVqP z6!V5A4dj&KnsuB~i!H}N$6H&H0?Rd~L|Oc`(0(w*Pf-<*4sUzKH5)E4{f^q9vE>W1 zY-A{{sBQ170BHmzHIukSCmF0Liw#~1lxN7sGc)Ibbce^jBs$oif8$}9=JT{&bPSF5 z`@47at~5q#bS|2SP8cr|I*ipgCGHf3Ih37mPZ!oMg6Q9<+vgsxzgWCea*+WsC|9`n zQOEf!LiEwX8Q1`#RUOksW_SI0+2QQdMUCCHnN#Fq+3$i^s%1ZOh2Rgex2>?xIe17B zwwjj`Uw>He_KqFW(b9?f#c>PW8u^}-dhbD_MP-%&UE{mfFu}Qk$~~H$SEHL(y8o6q zq}WVs^?z@g5(iewsE3zF!EtTNp$}S#dR)qmr0WUrm!WWisa@geTQdJgcge_C*G%s^ zsHmx7Xk^@;ekDDr4NZqF9k%7s>aXM5$+c(^oVq?Zh_|XaA?^^sV<%$9KCf6P_^hYROD!1u!RW zy%DB|DNBS$>~I9hVc)UKLK21E{i6kt=$qz>ZL~pPlK6L5tfZ`{ysxY6!N+eo;;uP@ zlhC0Xg!3TiL?ZcjNPsZl>$lsl=R z5p~Gqnb;2CT7`UsqQ*pf0G1WX3Vnj>hP#I=@cupR70eilb(g2FSp^-tY)@ALRA9f6 zn=||!<=KL}zgTT^EwQ2qluN4r&x}xbw+I@vkk7oCCZy3c5h)bTMvg~1{O~|KjU3R7 z5q5X&YJ!9SE9ArDz-jvPvK9C#tsMaVwQiNcCNsi)LUSHDJgN$}4VTW$XdPh<$b53a zz=PF+8t=NI{=G|9K9;tBiyxtz4~t%R0Y_GBl1R~#q$ehBKy*W{dyK0A9r85o!~0!t zjy|5!SEvru8y5~yieyH8M)27cdoiXY1*#@v?-tkee&1b`V!Ffq4C*_ z!+8R4r`&EQoBNf1v$Zw8Z&veWy@v-uz`9>&YNzK0)?X;YGJ*5j=80Ld&|j8^Qm}9^ zlAkxSrTgL|4V3>p1KFTq?}|mcffz7<1JZly!;hdx*r&V53nK&*G!r;9q)cf|EGI}* zu`Yl*rNW09BYfnOSHp=f-#f-TbyF%(rE_TY-dOKjjtYn4$&VOxq0hTN3EM>R9$|I6 z(=qW*P_1ri1~-ozemPdVU>CX{YiYbyFB#Gm)tp?8dxG3J+DT87R6Y-YJgH9qMpLf` zvAzvFVOjq>BP_(gAu$vslo7?TEQ9~4J9Td<BwA^x7u)C{AeZdEHOvO^7F*b@Tvo z2Sx6r2e643PFGiuoK-4+*i=S{I`NWW$blg!5u2=~Egt z*&m`FW88Ni4c?l|uA%MP-9Nk7mW6mHT&faspOwBRl zE;>znRu7pk)6w%@_@+}t@*5gWXLpO23uI`Xmx0xU z5Iz3)7^kn9aw0@8a*j z#22^zlrqf-|KMa`e;c{j{2HN<@`1M%8WFkP&NPRtduQLlaiO2qpOsSRE-#l}Y_BsFg&UkRD zq#ZUYQ{I}R(2NdU!oR86dYSes)F9jel`ph6UJn`pWJFJ`FzA^zaOi^VT`25!$}_@v zCrK*yn$>&f+!r99tV`>Y{+W=E3aFf`_O6=>BeT`t zP}E*D$({Ie{|pU&)UbYeAkk8*q1iark#9d54j)CwE{`R)JqYClO%ygl+-LQ^6;-YH zB+BkwQ2db46bX^A(?lDW#(tjYj=p179~knku4iv!$HTtaOTo=utF$bU*v`Wa-FdZA*Vj3nQSxJ>Xmud9kGq0v39h!8B42i@wBS%naf1~ zN2wHzJ`mb1Q1*0j?v-dB}7 z-dYJUDx|h&EBLXnos8W!!U_AE&kI6;C+}&ScPXgyRf2l-#7|ZJ+Jo1%F%mDd(^%3Q z38Aeei(g)g>uPNcP4@S`cAA5!^x5_GOFbz4^!?T#wMC9p*1Q+;Q;&=;TUNR@{l8Tt z=$hxe;P=APLe7mnne&U+^OeB`22) zi|9~vxuC=` z2yhoPv42`;tU)wPsX`Eb?h>S&r;-_=&mUtM&efEZl>_8~II_UI zINCPQTlg&n3Ru(ztH<`xS(2RBZeqD0^e&X~yb0;2(V>``aJA`m)7pqNnt`_H8LN_^8~U4MbsPw zpQBT&oR7W`3nG)Bji?5om>6f~J9U3qLaom49#dbYKXk@Wx*T&f04-6(cn1H+%Gdkh z!b>FCiXzq|u>>C6jo}5~f7h-)UR%RR%s(x$RPyh`ey_OgQ;MfTX6zk-7nNX6 zN%K}{!?4aO|Eu()H0tiMw*)33%l@6Z6!DpI_Mn>({zR_clt`F0%KUSl%Tv;tB3q^F-Y`_ghk0ci}{I^gK-$3PZoTt zV)5#7;zJ5l$Y|jdpI? z=csiw7on0*|D#@q`}^=hzTkUGme0^E;!zd^$J~d3Q4UV>EP;*wQYSP`z$aWjXe4|{ zEniQ8sNj$1P zqCVe?u0ODDGv8pi+)~%{RlfmxK#bY@$QstexwtZL1J%x>4hRU7K+$6!sAD?1n7yE= z{E*{(5GvJAJ7B1+oo&e@E;CGe;gWJo{50t}7#77we<0OD!!kqSNRNHp=vnA;sN?_| zQQv1Ab|HXF)%iX3fdL<&nbv(@xmw*i?@Nx*SjUvU1%C9B^zH?D|MQ5s>MrNFRIblN z5mF6*)&D&OzNj*+2xyoZU@inM`RiuTFqEfhhI?Lf_a&K68k&@*?7Gt>f7=^qh%9nI zIyPtU`{a*T7yA`T-)quIm2G;!+^Q{n6;qUro4QuHk!g8Q?~K^B8J355@7QaG4Q(Gz zv>v41W4@cEJr6_}PSQ<^iWOu()#~wanTXN8L$P$bymxVyudFdo5H8s+!=l~jC1tWH zb^K+%LZ66|xW@k4`(Q{u-+6bbT= ztp22x_HEXnGby_wZGZ%-S?8YUuhTVo=Wg?>*gGw-b8Y{eJp1NyrB|QI`h&;wtV6mq z1s@ZLkHo9PvD?c#U3Vfy{X810{+2BX0sOr#vBIIcj3pQN&20<_k7c?ZFXj-1nkK#| zy8i1|JC!kQS1zP!-dXEEX&+h=IT`fx*<_8#-2gXrCzIh_Y`m|{A1A{hXgw)y?T0SU&nRz|vAZ(RnIMSW2K%p|1TL2=_gp>JZK>K9s9 zZu%>9U4A;QeH_(SKur-LnO)^UKVe~>R}8L$3=2#&k8+^Ks+C3GI~JVZ1Klf}*pHq_ zh>=N8-#1i;H0=smzB;da?!=6R-;>%RWzp0!@`~IBK&025r?qRvr*<8GNbn39?&xdh zIQvW2R-b0ina36(Hgre@ElM9-Pe1lMa`W|WZb{BDD6LL9w~8Fu%i~~TpK5e3p2~C+%6Lu)$>^=txeaQ+Cin6 zF{PGW3g_2K92GH|&lCLWWkcrL_D!RiOae~!jgvWb-myzD#%DERdmlVP%KRKk^6u*< zL(aZ!+59CM%Lc>T zneQxSRiY|aU-jjhP-lMmRX(|Ur}vuqUMHCJ*!ONhqi3fx({j_&b#P_| zb@k%>GU6&sJuP`HS=FAa&|GH-U+R0VdUH7$y`O~!S5x-M_1$J)r!sA%vgT$e2?6YM%X{;-&^i2Q^*ufEi$dGm55ZcJ0|V_AG%N4$*R*kxw+n(} zKbHT=vZPU27jcVAAw(UxYb19Lq6v!R>hQTFAo}={Hyj>ZelwbxxjX+4+iHdMvPWDh zWus*COXQ6+SM=;a`BAqUzA~`z-ysamn~aM38JTJpvX8@^Y7c|dNZ2a#*Uoh{ zG?X4Dz*d-A0XPbx7bN$p0jdOV*r#i5EZ;WqYSW6x>inJ8T{udoRrte568P#xh0i9G z4a-gcG<-M|rqQ(TR2dsKtoksQGAdgTs(PphP=xOLRqFncXM*@0CYK$<(dpphqXI&L zNU)1#6Jc38G1PdA65@>hGO~8lD{G!KYL#A}{$Q+?GCf2W9YaETB6l5X4ApDxgmXNl zS{WYG#VF#D)Z|kfH@<^+C{gYFwwtED(ZiaixG?dXdn+uS$1b+3@`|?T!kTaxxk3Tu z@;%HdOLM!B*gvY0=nZ~Wo!yl&<71oCxdnzYIPXcgSYg_S8}4n0ADMag>5P&i{lQxa%edz1NdjJj_dJQG;wYwgvTv!UARFWYT}x;q-j}`ZsL!W%3r6E3Pro*81q+nUF;l!~24xz=GAQ z5U<;q8|mwKk^E6T1l^VwOtF7R0z8z{^nfquZp*6r^lg)S7D4AKg7ij@qE& zD~a~QUjeWjKe%m1&XAE8q$5Nbm2wlCh&L~>J!EFzhX(mtzrfO`aQZVElQH-D%jvQj4`D(CuGRLGyHXGD`Jb(#A(ztw;;q=AOBf`7iNGH+4_+Zd^@$me$Pe$m)$eQrfX{w;}1SU6QZxV)=xGv97 z$ie$sm&jW^$o;eM!t1jCI55{@+e3~?W|!sq5)_z~aecJBNAD6l_1#EV8nR>6q2aZx zznELyKm1~fRX08JeOL@ zM3{|MjqID;4??#lev^Z2(FN0D@3)>%o5L)K0A>8}X1)47K}7$~6B|y)sk+*BtIHb# zC*8812F-Q(TYTkJI@D>LMdcML%clg~P8)===@$QX!h@KSG^J-(8g~(?Ix{hi4Zk&s}4ONa+-N&*D78AG187&p0hz zNZ&t}KK*b^^1`ouziZo*ljj{fu2fb4zzl!GqFky@-<}Fe$ zpL#So`}q3zDkvMm5yzgd)9+4`@ru9C${#=3)Z!W28|+I_F#@|x_SedY3iBGt0OKdp zIZu%2vfY-;pK);oN$smk(wlMM*j9P^$%EO#>hKmXHRPiM%X*8ev2)%>XP?8$Xxoz3aHiU1F$#x>Ks#P*8+%!D&n!Y^fP-{VFE38S=IG4OiojD*uNYyvknzaQ-hK zLJ;8p5X2M^KI~yG9skV)ZN2H`8W++Cb9{6cKo(0Z3JSc;wF=*K zzT9eSr=__;%_yoN)Qk*Hha5^pvnee3JdEy?SEzGQAeH>w+0II1TlCO7ZUS5B9`;TV=c^y<8(HV7cofV!-Pe(VGg0lfOO5CTF)_-6tGS7g>)++zc8W62iLp9EJP z1nRTNW>E!=p+bb$m(gjm>hmOvs|hEv!*RBua#cNUx+DMe(SU&Fhku;k?Nx|ycCB1% z!4yYsfZA9VJm26+Q#%7G&Qp`eEoNAEyS_<5wt}lF4bYr55dqsWxM=D>TkonXQulLz zf8v=5z>)?R_^~z(1X2W2(R)9T2^ZKfy@~gu|1=yD+u?)eo_Twoi^zvNb(Ou7I8H#) zWfDQO{I-in00<9yQDoog$ct;#qC!3lcaDxVH3AV~Ke{dFIE#ZGaj4C4bm@B3J{k=X)OgggC z8ak@n3%Ke-FuV^}p)DyUybU-1dn_k?`}(82YvU)lAAp9yb_V3+k4lsn{49IU^GfKX zO9VkZ#WC_}KRemfL~>T~e!Ph%sXrrQW_aD>Biqg8eWx7o=-Y`MRD6P$C-AH~Fq;+3 zw%|_y?9f@xWt4Q7V7|1N5;_#$o|vwgS66laiK#pf5!@nQZ*M^&UD@E7X_apU3D`Lu zIGUB^U@8)s+S;M++u0l3Sy9LL~(57$7L$j!)DQ1;D$EnZXPkunCGT(Wz2{D(J{So(c_TOl!HmQqw@Euuz}G$ zDP=mzV@hfkF`bO)jAB3j4mp`7&9{-wFrYuES}l4aSnQZWm*3$0heuKAfPtHLcJ@>l zujJF`^Vt&iE@L#MK;YE=@p{c0z0A4~bo`eVIpz3V6Na(X{Q~ zsk0OXNS3@GII3Icb>4xxdlIC8} zP=BQZ3bk8shXn6OBc!MJVvO5~oV64fc#(};hb!dcFWK03lGwFcz%M-0+K&-G@6&%a;SkN=Z_(@96k4R(t_LIrEdw23? zG>(=%wjB`39<`olI-B1lc3)K2J4+_y(L%mGeq&{;%4>XRDmhall?e zea7S!M~?#nvu;*%)jW2-KR$cFpY;2~k1YX;v70U>bt*1KP>aNGLZ$_e*LfU_RHB~o z?Rr%;>ewBp$BH{-e}J7^)5cRxBJWU&dF~22&3fpRf}DtJii;bbHwAOsBV2H%8Liia zA9^xIjfX>}F3yaDRwIZL5PLo`SR*grRGOFQ+PnGk<+R~I4B-@voY+jW()C$9L+xCv z(1Wr{UmVaK^J&axexx%ObZN-+ooDPuInh)k<+0$N+8j+Hk}#G|#7G?PmLX`Hi(h@=sgToeh(BQDtH;zF3rv zph*Pe<8q?ymKx>dwA9B$N=7``Q^FI=q5?|cn7DkU8!fQ>iqXw<&A3J2R8r-5+l;G@bjpU-F&uQ zKMHOB+PF}J%SL*$Hu*=h)>ZcOOL4X2Cx3kd@9m@hb0tY1jGmk;z z+GhW}?LK#ZgC@X;TqVB~*Dsuc23CH%7yNj57yFO~txq4Q3(FM1vd=y0z0XDjit;|@ zkVI>x(TubyTF^Z6$edOv2y2wQH+0HOvGq_qkUZRfanx1$Qxak&TwFELYyl#zZ5b8R5%afwu#^m}*A0gXb4k z?_)G?um*iZzeigLM%?mhPx$=#7TdLRXClTzpB8-!UO+EhK%BBzuDL#3N&gwBp-`|) z`gN4;=H%}l5fq!5Z3ZkMF7~*$kUa2GP@IR4mxfzmdZ)t3f%ta%)r6OS><$`MXC|!8c5Iu7h=b`i(icalXsQpHTSo zr{V|iWGb6Rw$A-#uCioNo%H8fGgs|l*5KJ5Hyl+UX>;}yh{B9NVvTk#3m}aYK!zj1 zwt&_*ct2fLq_orRS2Rddi)>;j`C&VKFv5=~OqUd1I33h#AY@aCM;mccw$*pkw_R|| zusl~dSTAo=#|-@bUXCQJiwK7e5TOSp*&TW*s@h~;zP}adk>QTchyqltFC9D**=K*I z`#rLkXuUTSj@Y=#u+@^E%65Y-UVP^27qi#b-k$FBb|RLJX0YHhGET=03!;nx8?5)C z%wm@`*>Xlhgq0%q_rFmx{=vds!}(O0TbB>n?@5OUt0?Hvw1f>k&(F%4;qVC$vK{6s z&l0@L;0834qHTk!gA{2SDOy4Vy~riv1W@EPBY+`MB-L~79a_lT#4sb7^hhOw8WSqp z=*8;vTu9UvcpXxX3D1O3c1TGx8#JfZg${dH7|>2|^7eOfK`gV0gzUUDZU1 z-#R2MD3(CeI{hLAILc(O8V7rFcoOe^6k1qkn2IXVTBQ{yUXnDw@twe`t+Z~fBC~$- zV_A0nZs6|=GH8c`?I*I`b(j5H*nqeQ4MZ`qlQPedm_^4uPpT8Uf8=+0(6!?7yZlP+ z8C_2tK}%%Iq_Z?zmY+xRcuESY(30VeT&_1s18|!Uw9PAx+w~xH^$P0hltX)CwfAe! z798--KE)^F-uA~8^`h9pWYi`qH>FzGv@%^=suh-2SMoDg!V01bhg}kvMp@=`G`>9e zOf$X>_g5u&Cz4UC$&{jY>&8yAHHPZJWRIaJ5Nd$UY66e$ykeB*d70|N@(NXSBNTS7 zE`UbcP^Y%M;1K`tcxy!1h>q3pFvzy_HDf^oo{yXRwUYO^Fgv$y@Fv}Uy z(=}(6jjv3Khw`+fZ&$uDScVycpqPlT!TC&8rVIb`!1@@r&m#-Moo54Z`SMtWj4YNP zHvOf|zfft#_vE&nw3*~yyF{7g>1oyNwq+4Zr&Vh)-BjDDp2iy-0U2^v_hRgIUIt|w z`<@5%%TPR!Q(=oW&5j64tra@UjA2+I@Q&~F6 zj8@gF?&}xi2^l6j7)7I6e}`KxMQ8L@&PUlqjCp$`9=3BzKP>biMl`ONM( zNZ1CTrAw{ovjmQtj9vxmMb|^TD)*zF)qmn8sPU=&g>1T|pOnk>p!qd#K50HF0CD zHbt>|3w`TB2Gt?Tk>AMx{&$z$M$^kEE)61<(!u@+>Z!2!VY~H#;aZ<2}#%}O+daSrlZ_&ef-YHXkCq0$qL9>B>Ax=xp5fx zTu!;59R&fcn3;6VgO$gtaH8Uc+m3Q|_nlTv#>9g{Ns^8wuEVBB6s2r~#Syu{C(pXxuzyF8_Bzg`nJj7I-sgW`@U+nrH#9;ri^z3CZtUAGQdNC7ll` z?I2qhS^*;?ggOENb&+6OTJz7^UFq+pk-!SC#GdVky^JygL3+D?>fRA(_28q=l#tkK zYY-`@jTACIL`b>|a5|9{8p2gx5;v8-pFDVVUQ&bt$cl ze-D)3<{U#-sOuhpK5yKd@oWt-J~YUur0Ah1+7}w-AsBSUx9Qt?wrN+aQD;Uo)*ba( zECf2)%vCS|?NcTzRGF0^eyaqWLCMw!0}df$Lyp0$>;{A~>wd5#!eQMjD$659;J^tq z49{>3ql=?xtp}T45q>9peB?2B=qaw3@3fPxmt)hG4V3H`wR~Mb`rmhZLAoHpN8C5piPP4n50TP@nEluyw!Q zPN)ovMKWG(9t!td;@V=JuH0wWs0R#QUwby96g)65MKNX>^y{QzWjG72-iJcVd0rRd`y z8T~0~xg>8jzYQ(G`|k)`b8cN{MG%6}_?&t0an7-0H;l3`=WS$@>c+!Lq2CsQxQ zwhbXe=Ji|$Q!xmExq1nm2uSul$qTIj>^5wA{;0L^&fZtC0Nv30+U8jw!LS_7VY%{) zu)&efaZWD=6bet1za*_(J_F&l9T+kFZv-NBC(n!iO8Y<4%3m|)cb+wjW))GP-5wsz zYBp%iylP55o%jt4@&-hYfWl(NV1dG>O!cJ2m#7acGc|_gtAnrc*q-)f1XL*4w3GnOYk;JA<_DBg1L z3)1l{g0bsBK2ty>jNcPUnS$#(I-Bi*jU6q+bn&=L5^byM$vxd%GkYC=ZrA3pR+JE< zuxG(HN12i|zsaJK!in55D%GL%>{#5U4`wZ`onkSqM1Vp4UhA92n@bR*@ow#@PuhTc z-;DCcQvMdfU0-PGQHll3WQf^!Jcu?=Eh68ealrm5WV~qCViZPrP^UI3Q5r*NFhm#o@=|;H_C%4!U-3Wr>jMK%!2AprTImS{H12;?tcYLiDb4jZyIv3DwFwOa9<% z?ymfwh969G1jWx5GBTFt8gle3qv^d0i(c}ax+i|CFm37pJB(v)hjMN@C@V$|iF)rk z>sFVUZ19Qsmu63w5hg9^-rE*qqZ__SPOP~DUJ3Ua-SUn11;>SB3u2a77k|6zgv!+O zd7MhS9PUrAE+q8#3yf6e^dzOF6re2MzF1}|%TeX=%H9gAl3kYbyMEUdIyh}V45yLu zHqEG;E|1ygSXc@xei_Vt zpZ~SykFQ2J6_pB(oKL2gWk?$9trmOn%4q{Gx*kvM`Jl%NQ<|PwcueQpE?1t~w;ZH9 z8Gxs`4lbaW%eOK$HZEahR`8;{NYxkQ>4mi!@T|pEcD^R4`dtJK$CNt~8WHl$@P_}&LnS1uU_O#} zw#W5w-64N7B6+*>ZIWsAhn?DKt8v19k=FI80=_!%qG@^Oayw&MOQ_|SVhGtK%`Y^d zQNAn_&irR}1PE~ahv!d|-q@Kdm>Cvg^721;CMqBsT0nAO#wl1+viXVtE?*5L0eq3- zjgs5WlnDPOb>rMA)AFY!RBm6Mu=nDrg?#MgT9B%|G!k0=htPSzy1!Xa_)U_}FeiCy zNYRQ$mtc<|9z?TEZ0iDA0rG5s&SRNd+?#RF0MXY&twhe(F>Q~} zb9r@JNGy(7h|JLzBr19YSmRB>;|OFWvUH{=%M!~P-0AzRg>g4aC%73Ioyn#U-6n?R zKM$Fy51~0+HE2-bls$rPt6j;4E09@2zeL6i;d0g)B&j=&(-%ZXP6Y7tKC^h#FUlEr zFzlGA;%r78*9~a@w(9aGpYTF>pHE&{Mdj0Q_iFwMyduBzuZb;}9kF+U97DgG9{rUJ znsNX7_V>Y7YOgzqgYr}mWeYUr1f}+jrlWxO&%hCRc~TrvD+R;=Ndh9q%rxx)k?{fS zww*)P;f0;YAEj6Cc&#Y6fo#354A4~jVnmqUCZTR(t7Ca8P^6sj?v@N1!B#*+NPAsw z`bD-cq?ZoQ>X{stzlY6p8PPC>#`auauj*2F4{~un7mt^FPyeG6s2rv#AM#|)ML&j< zjQL~UPc6ZY@2d)rXf1k)E(laTtkMR(!hME|WX;_iE2zruTPu#_W$t={7qt6c>$5<_ zQ%@R)d#L-G&qjPo!XE&!zISETdOX-btPCs5B`qVu1FBz*o}Q!65R~1la_vh}2S}HV zFST@FpoKfv+y_va_~=__f%dr&F;?kYeu@gO$O1Z4Q+sKpB1g0R}A>EI^?A=?bJ7-fZ#3}*#4-0xcEi%QjzHjgNgJz>G_ z6hBRT;cyH7O>>1JQ05MKfHgCV0zzhesQRBr0L?h#gA(vYW$`>ZUMp_Vv;E?fW@ya2D(jkeeeVKJs_Rj+F7SzymImpO`CJTB z!`LX-3m{Xm0#w#mf$d&_7$9}vYqo^-98&R;yL@&jDXjJ*lSf8IgIBIEUvt4W;q?WUvlPf?}uWI;o3y-NSt;SzpB zj~5@$L!-xKthskCIPz?*(VUa{FGtHN7%=Nsk!K4?r#ZLZ7HJn33Xn!=0`QfKC2i@o z_gT?4lc|R6LQ7UtOAjI;SWZMbW7_p z`Xcf{I>k@jCTj|SE z($&VqhSv<2kH5%!XbL}GYJ79R+*NK`Fw*kFED5HpUbZw^N;Ayr+xSxA#1QhK{87iW z-NJ^esTURydB0W`2Q6GeNE4_RMr68RN-=jt<|rs#9f@* zD|f=p)M8mnm$6$Cn0y$9=XxKkFkU?@UmVY&j-e5E`@Nwju*AkKd8@yjm(Uhy>n6lk z0c2N&0ZOY43X&R~?d&w{ZUqU-(#-pB|93&8E&LycCGAFEyEzRZpO@xF6DX>ywJGE` zNsi=-C+)9xc2k<8wJTRPrdWjy;9Pt6>CKSjTR0r^g~nlf)?1o=K~U?0PsR5e47=M+ zxmwBRsh>&aZZWr)cOI>{3I&q3-dFsE3nT@MkUwd=$dL^XCKqo5ay|%BULIK?t3XPb>btHeqa(*r&;#|8QZDK>78xWfJMT6RL4^t+ydh_hVNfq@<*m!KTNh zNYIQ)J6q>6J0dv}d@J3(-GLi3jQsAySJaI}L9YcL zMv0UE@$3_uAr6+u3byjRiWSeKV~g@HjMcq~D4@@XlBdn=;t^eo90MXae~&9j#(2*> zx53AGAG53ihxGt8t35=v-VqwM^y$Ar_wuRQKi2dG;0Bkz5rS=?@9AZ4WuPURx!y!& zsv&Z8pa#3HSMQ?$1pd)4BxT0*OZR5S9~+# z$#IihkI1R0P_rVfJu!C^5BBe0aZkh!Zb162Pb(~k>KdQ>?lYYyfgksr)&xbbZ*nWH zBzEOhZwIq%ba0Q6U1Y`vFzvpsdLJQcEi+e)a)W>SDtio9nsjFy-B9e)QspyN} zr9dAEH_-nE?W9cqxz5WJ9vuVa3diQV@ zPY@SG@=UFt;N=~XW8k@Wph40foi2p>7{w!M{^%4p+wRrP zXmthm*{y@1P8f$o(7vMyLsf6-1Tx!;R@8MSK)zS_KMU7&YxsgU`c}BQOM-X82iwul;Qw6Ja3jnr4Ec=mc|AutRdm-c;7cxuE zc16ZETz8~f&i57&LAk#3(JJ?e>>K$Gj;&|bJ+Fn~kCj104honsxopdQp7lPD{i6ir zC$L?lKLf|1oeJ9iRNeDb+<@P2;U|E;IRcj)0RX2h1eAB^L~OkX3=G z<#W)OT3X~6L&uiy9e`R2N&imq$xG;}f6?9fbIdVUZQZmrY?j?;u*K_sL6)1QGm_GF zBLG+JBZ}}@ujMOM`C%neDhK|B-Rw70(1T&2Re{2yhVehPk49a^l(qGa_&HXnwJq-# z>Ha@ty$4WJZ5K7_D*_@-K(h1TbG-;tp z=)Dslp|{XNyLrFw`~N$4?#!9Vq|BUiCePV>J!`ME_Y{lnS`Pa}2LI?pKRb(Ld_{gu zUS?K&?!sLCbF034(F|A3MA27o6gy7sumxjj(#X8qV4K>5Yf2H|+p^@stO*I~)FOSf z=f2MLK$cy*q-CwWX2@s0A7Rgwtx2e6tLRO zDkTl33NP+^n@L^;TbgaSQW>99PQqAk~?#?Ytd&4*6YFW5Ao#(je#eN z$8E#-=P=O-qHC`0hAudoEY}_u=C_+P-nTtPJXBv`hOM|ja&vBvIS11p!y4dxkA2?m z|DxE@SM|(bH}Hpj{gv?AVZoW)2(ET}cxrpy)^=UJNdH>n+qRdjja!{i%sMZ(q#^^b zeYV=I=0hlv-Btm!dbCuINV~%$X`5VHh@iG2M2r1L|7EyJi2ZpOAtS)LFqgXD1C@Ln zkUqW;S3dn`1h;H(TULLIOa0;~o98rfgt≦kf`(<=onUj*42Fe$syF9|dalsp}NB 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