From cb1de743a9f27df54743556f9a38f913c740fa74 Mon Sep 17 00:00:00 2001 From: Liza K Date: Thu, 28 Jan 2021 16:17:02 +0200 Subject: [PATCH 01/85] Save all search sessions and then manage them based on their persisted state --- x-pack/plugins/data_enhanced/common/index.ts | 1 + .../common/search/session/types.ts | 22 +- x-pack/plugins/data_enhanced/config.ts | 3 +- .../public/search/sessions_mgmt/lib/api.ts | 13 +- .../public/search/sessions_mgmt/types.ts | 15 +- .../server/saved_objects/search_session.ts | 9 +- .../server/search/eql_search_strategy.test.ts | 2 - .../server/search/request_utils.ts | 2 +- .../session/check_running_sessions.test.ts | 436 ++++++++++---- .../search/session/check_running_sessions.ts | 152 +++-- .../server/search/session/monitoring_task.ts | 16 +- .../search/session/session_service.test.ts | 569 ++++++++---------- .../server/search/session/session_service.ts | 294 +++------ .../server/search/session/types.ts | 4 + 14 files changed, 839 insertions(+), 699 deletions(-) diff --git a/x-pack/plugins/data_enhanced/common/index.ts b/x-pack/plugins/data_enhanced/common/index.ts index 669c33230a34c..8c500ef21ffcf 100644 --- a/x-pack/plugins/data_enhanced/common/index.ts +++ b/x-pack/plugins/data_enhanced/common/index.ts @@ -5,6 +5,7 @@ */ export { + SEARCH_SESSION_TYPE, ENHANCED_ES_SEARCH_STRATEGY, EQL_SEARCH_STRATEGY, EqlRequestParams, diff --git a/x-pack/plugins/data_enhanced/common/search/session/types.ts b/x-pack/plugins/data_enhanced/common/search/session/types.ts index 9eefdf43aa245..6d07f4b731fae 100644 --- a/x-pack/plugins/data_enhanced/common/search/session/types.ts +++ b/x-pack/plugins/data_enhanced/common/search/session/types.ts @@ -6,19 +6,25 @@ import { SearchSessionStatus } from './'; +export const SEARCH_SESSION_TYPE = 'search-session'; export interface SearchSessionSavedObjectAttributes { + sessionId: string; /** * User-facing session name to be displayed in session management */ - name: string; + name?: string; /** * App that created the session. e.g 'discover' */ - appId: string; + appId?: string; /** * Creation time of the session */ created: string; + /** + * Last touch time of the session + */ + touched: string; /** * Expiration time of the session. Expiration itself is managed by Elasticsearch. */ @@ -30,22 +36,28 @@ export interface SearchSessionSavedObjectAttributes { /** * urlGeneratorId */ - urlGeneratorId: string; + urlGeneratorId?: string; /** * The application state that was used to create the session. * Should be used, for example, to re-load an expired search session. */ - initialState: Record; + initialState?: Record; /** * Application state that should be used to restore the session. * For example, relative dates are conveted to absolute ones. */ - restoreState: Record; + restoreState?: Record; /** * Mapping of search request hashes to their corresponsing info (async search id, etc.) */ idMapping: Record; + + /** + * This value is true if the session was actively stored by the user. If it is false, the session may be purged by the system. + */ + persisted: boolean; } + export interface SearchSessionRequestInfo { /** * ID of the async search request diff --git a/x-pack/plugins/data_enhanced/config.ts b/x-pack/plugins/data_enhanced/config.ts index 981c398019832..ca737d461e63d 100644 --- a/x-pack/plugins/data_enhanced/config.ts +++ b/x-pack/plugins/data_enhanced/config.ts @@ -12,7 +12,8 @@ export const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: false }), pageSize: schema.number({ defaultValue: 10000 }), trackingInterval: schema.duration({ defaultValue: '10s' }), - inMemTimeout: schema.duration({ defaultValue: '1m' }), + onScreenTimeout: schema.duration({ defaultValue: '10m' }), + notTouchedTimeout: schema.duration({ defaultValue: '1m' }), maxUpdateRetries: schema.number({ defaultValue: 3 }), defaultExpiration: schema.duration({ defaultValue: '7d' }), management: schema.object({ diff --git a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts index c6a3d088b3cda..a1bbda5dc7cb3 100644 --- a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts +++ b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts @@ -10,12 +10,12 @@ import moment from 'moment'; import { from, race, timer } from 'rxjs'; import { mapTo, tap } from 'rxjs/operators'; import type { SharePluginStart } from 'src/plugins/share/public'; -import { SessionsConfigSchema } from '../'; import type { ISessionsClient } from '../../../../../../../src/plugins/data/public'; -import type { SearchSessionSavedObjectAttributes } from '../../../../common'; -import { SearchSessionStatus } from '../../../../common/search'; +import { nodeBuilder } from '../../../../../../../src/plugins/data/common'; +import { SearchSessionStatus, SEARCH_SESSION_TYPE } from '../../../../common/search'; import { ACTION } from '../components/actions'; -import { UISession } from '../types'; +import { PersistedSearchSessionSavedObjectAttributes, UISession } from '../types'; +import { SessionsConfigSchema } from '..'; type UrlGeneratorsStart = SharePluginStart['urlGenerators']; @@ -48,7 +48,7 @@ async function getUrlFromState( // Helper: factory for a function to map server objects to UI objects const mapToUISession = (urls: UrlGeneratorsStart, config: SessionsConfigSchema) => async ( - savedObject: SavedObject + savedObject: SavedObject ): Promise => { const { name, @@ -110,6 +110,7 @@ export class SearchSessionsMgmtAPI { perPage: mgmtConfig.maxSessions, sortField: 'created', sortOrder: 'asc', + filter: nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.persisted`, 'true'), }) ); const timeout$ = timer(refreshTimeout.asMilliseconds()).pipe( @@ -129,7 +130,7 @@ export class SearchSessionsMgmtAPI { const result = await race(fetch$, timeout$).toPromise(); if (result && result.saved_objects) { const savedObjects = result.saved_objects as Array< - SavedObject + SavedObject >; return await Promise.all(savedObjects.map(mapToUISession(this.deps.urls, this.config))); } diff --git a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/types.ts b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/types.ts index 78b91f7ca8ac2..472cb6d91cb52 100644 --- a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/types.ts +++ b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/types.ts @@ -4,11 +4,24 @@ * you may not use this file except in compliance with the Elastic License. */ -import { SearchSessionStatus } from '../../../common'; +import { SearchSessionSavedObjectAttributes, SearchSessionStatus } from '../../../common'; import { ACTION } from './components/actions'; export const DATE_STRING_FORMAT = 'D MMM, YYYY, HH:mm:ss'; +/** + * Some properties are optional for a non-persisted Search Session. + * This interface makes them mandatory, because management only shows persisted search sessions. + */ +export interface PersistedSearchSessionSavedObjectAttributes + extends SearchSessionSavedObjectAttributes { + name: string; + appId: string; + urlGeneratorId: string; + initialState: Record; + restoreState: Record; +} + export interface UISession { id: string; name: string; diff --git a/x-pack/plugins/data_enhanced/server/saved_objects/search_session.ts b/x-pack/plugins/data_enhanced/server/saved_objects/search_session.ts index 4e75ffaeec69a..16472199de4d9 100644 --- a/x-pack/plugins/data_enhanced/server/saved_objects/search_session.ts +++ b/x-pack/plugins/data_enhanced/server/saved_objects/search_session.ts @@ -5,8 +5,7 @@ */ import { SavedObjectsType } from 'kibana/server'; - -export const SEARCH_SESSION_TYPE = 'search-session'; +import { SEARCH_SESSION_TYPE } from '../../common'; export const searchSessionMapping: SavedObjectsType = { name: SEARCH_SESSION_TYPE, @@ -14,6 +13,9 @@ export const searchSessionMapping: SavedObjectsType = { hidden: true, mappings: { properties: { + persisted: { + type: 'boolean', + }, sessionId: { type: 'keyword', }, @@ -26,6 +28,9 @@ export const searchSessionMapping: SavedObjectsType = { expires: { type: 'date', }, + touched: { + type: 'date', + }, status: { type: 'keyword', }, diff --git a/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.test.ts b/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.test.ts index f2d7725954a26..1670b1116eedb 100644 --- a/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.test.ts @@ -117,7 +117,6 @@ describe('EQL search strategy', () => { expect(request).toEqual( expect.objectContaining({ wait_for_completion_timeout: '100ms', - keep_alive: '1m', }) ); }); @@ -156,7 +155,6 @@ describe('EQL search strategy', () => { expect(request).toEqual( expect.objectContaining({ wait_for_completion_timeout: '5ms', - keep_alive: '1m', keep_on_completion: false, }) ); diff --git a/x-pack/plugins/data_enhanced/server/search/request_utils.ts b/x-pack/plugins/data_enhanced/server/search/request_utils.ts index f54ab2199c905..12e9c1e35ed52 100644 --- a/x-pack/plugins/data_enhanced/server/search/request_utils.ts +++ b/x-pack/plugins/data_enhanced/server/search/request_utils.ts @@ -42,6 +42,7 @@ export async function getDefaultAsyncSubmitParams( > > { return { + keep_alive: '7d', batched_reduce_size: 64, keep_on_completion: !!options.sessionId, // Always return an ID, even if the request completes quickly ...getDefaultAsyncGetParams(), @@ -58,7 +59,6 @@ export function getDefaultAsyncGetParams(): Pick< 'keep_alive' | 'wait_for_completion_timeout' > { return { - keep_alive: '1m', // Extend the TTL for this search request by one minute wait_for_completion_timeout: '100ms', // Wait up to 100ms for the response to return }; } diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts index 4334ab3bc2903..917663252bc8b 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts @@ -8,11 +8,22 @@ import { checkRunningSessions } from './check_running_sessions'; import { SearchSessionStatus, SearchSessionSavedObjectAttributes } from '../../../common'; import { savedObjectsClientMock } from '../../../../../../src/core/server/mocks'; import type { SavedObjectsClientContract } from 'kibana/server'; -import { SearchStatus } from './types'; +import { SearchSessionsConfig, SearchStatus } from './types'; +import moment from 'moment'; describe('getSearchStatus', () => { let mockClient: any; let savedObjectsClient: jest.Mocked; + const config: SearchSessionsConfig = { + enabled: true, + pageSize: 10000, + notTouchedTimeout: moment.duration(1, 'm'), + onScreenTimeout: moment.duration(5, 'm'), + maxUpdateRetries: 3, + defaultExpiration: moment.duration(7, 'd'), + trackingInterval: moment.duration(10, 's'), + management: {} as any, + }; const mockLogger: any = { debug: jest.fn(), warn: jest.fn(), @@ -29,163 +40,350 @@ describe('getSearchStatus', () => { }); test('does nothing if there are no open sessions', async () => { - savedObjectsClient.bulkUpdate = jest.fn(); savedObjectsClient.find.mockResolvedValue({ saved_objects: [], total: 0, } as any); - await checkRunningSessions(savedObjectsClient, mockClient, mockLogger); + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).not.toBeCalled(); }); - test('does nothing if there are no searchIds in the saved object', async () => { - savedObjectsClient.bulkUpdate = jest.fn(); - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [ + describe('delete', () => { + test('doesnt delete a persisted session', async () => { + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [ + { + id: '123', + attributes: { + persisted: true, + status: SearchSessionStatus.IN_PROGRESS, + created: moment().subtract(moment.duration(30, 'm')), + touched: moment().subtract(moment.duration(10, 'm')), + idMapping: {}, + }, + }, + ], + total: 1, + } as any); + await checkRunningSessions( { - attributes: { - idMapping: {}, + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + + expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).not.toBeCalled(); + }); + + test('doesnt delete a non persisted, recently touched session', async () => { + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [ + { + id: '123', + attributes: { + persisted: false, + status: SearchSessionStatus.IN_PROGRESS, + created: moment().subtract(moment.duration(3, 'm')), + touched: moment().subtract(moment.duration(10, 's')), + idMapping: {}, + }, }, + ], + total: 1, + } as any); + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, }, - ], - total: 1, - } as any); + config + ); - await checkRunningSessions(savedObjectsClient, mockClient, mockLogger); + expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).not.toBeCalled(); + }); - expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); - }); + test('doesnt delete a non persisted, completed session, within on screen time frame', async () => { + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [ + { + id: '123', + attributes: { + persisted: false, + status: SearchSessionStatus.COMPLETE, + created: moment().subtract(moment.duration(3, 'm')), + touched: moment().subtract(moment.duration(1, 'm')), + idMapping: { + 'search-hash': { + id: 'search-id', + strategy: 'cool', + status: SearchStatus.COMPLETE, + }, + }, + }, + }, + ], + total: 1, + } as any); + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + + expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).not.toBeCalled(); + }); - test('does nothing if the search is still running', async () => { - savedObjectsClient.bulkUpdate = jest.fn(); - const so = { - attributes: { - idMapping: { - 'search-hash': { - id: 'search-id', - strategy: 'cool', - status: SearchStatus.IN_PROGRESS, + test('deletes a non persisted, abandoned session', async () => { + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [ + { + id: '123', + attributes: { + persisted: false, + status: SearchSessionStatus.IN_PROGRESS, + created: moment().subtract(moment.duration(3, 'm')), + touched: moment().subtract(moment.duration(2, 'm')), + idMapping: {}, + }, }, + ], + total: 1, + } as any); + + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, }, - }, - }; - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [so], - total: 1, - } as any); + config + ); - mockClient.asyncSearch.status.mockResolvedValue({ - body: { - is_partial: true, - is_running: true, - }, + expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).toBeCalled(); }); - await checkRunningSessions(savedObjectsClient, mockClient, mockLogger); + test('deletes a completed, not persisted session', async () => { + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [ + { + id: '123', + attributes: { + persisted: false, + status: SearchSessionStatus.COMPLETE, + created: moment().subtract(moment.duration(30, 'm')), + touched: moment().subtract(moment.duration(5, 'm')), + idMapping: {}, + }, + }, + ], + total: 1, + } as any); + + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); - expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).toBeCalled(); + }); }); - test("doesn't re-check completed or errored searches", async () => { - savedObjectsClient.bulkUpdate = jest.fn(); - const so = { - attributes: { - idMapping: { - 'search-hash': { - id: 'search-id', - strategy: 'cool', - status: SearchStatus.COMPLETE, - }, - 'another-search-hash': { - id: 'search-id', - strategy: 'cool', - status: SearchStatus.ERROR, + describe('update', () => { + test('does nothing if the search is still running', async () => { + const so = { + id: '123', + attributes: { + persisted: false, + status: SearchSessionStatus.IN_PROGRESS, + created: moment().subtract(moment.duration(3, 'm')), + touched: moment().subtract(moment.duration(10, 's')), + idMapping: { + 'search-hash': { + id: 'search-id', + strategy: 'cool', + status: SearchStatus.IN_PROGRESS, + }, }, }, - }, - }; - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [so], - total: 1, - } as any); + }; + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [so], + total: 1, + } as any); - await checkRunningSessions(savedObjectsClient, mockClient, mockLogger); + mockClient.asyncSearch.status.mockResolvedValue({ + body: { + is_partial: true, + is_running: true, + }, + }); - expect(mockClient.asyncSearch.status).not.toBeCalled(); - }); + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); - test('updates to complete if the search is done', async () => { - savedObjectsClient.bulkUpdate = jest.fn(); - const so = { - attributes: { - idMapping: { - 'search-hash': { - id: 'search-id', - strategy: 'cool', - status: SearchStatus.IN_PROGRESS, + expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).not.toBeCalled(); + }); + + test("doesn't re-check completed or errored searches", async () => { + savedObjectsClient.bulkUpdate = jest.fn(); + savedObjectsClient.delete = jest.fn(); + const so = { + id: '123', + attributes: { + status: SearchSessionStatus.ERROR, + idMapping: { + 'search-hash': { + id: 'search-id', + strategy: 'cool', + status: SearchStatus.COMPLETE, + }, + 'another-search-hash': { + id: 'search-id', + strategy: 'cool', + status: SearchStatus.ERROR, + }, }, }, - }, - }; - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [so], - total: 1, - } as any); + }; + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [so], + total: 1, + } as any); - mockClient.asyncSearch.status.mockResolvedValue({ - body: { - is_partial: false, - is_running: false, - completion_status: 200, - }, + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + + expect(mockClient.asyncSearch.status).not.toBeCalled(); + expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).not.toBeCalled(); }); - await checkRunningSessions(savedObjectsClient, mockClient, mockLogger); + test('updates to complete if the search is done', async () => { + savedObjectsClient.bulkUpdate = jest.fn(); + const so = { + attributes: { + status: SearchSessionStatus.IN_PROGRESS, + idMapping: { + 'search-hash': { + id: 'search-id', + strategy: 'cool', + status: SearchStatus.IN_PROGRESS, + }, + }, + }, + }; + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [so], + total: 1, + } as any); - expect(mockClient.asyncSearch.status).toBeCalledWith({ id: 'search-id' }); - const [updateInput] = savedObjectsClient.bulkUpdate.mock.calls[0]; - const updatedAttributes = updateInput[0].attributes as SearchSessionSavedObjectAttributes; - expect(updatedAttributes.status).toBe(SearchSessionStatus.COMPLETE); - expect(updatedAttributes.idMapping['search-hash'].status).toBe(SearchStatus.COMPLETE); - expect(updatedAttributes.idMapping['search-hash'].error).toBeUndefined(); - }); + mockClient.asyncSearch.status.mockResolvedValue({ + body: { + is_partial: false, + is_running: false, + completion_status: 200, + }, + }); - test('updates to error if the search is errored', async () => { - savedObjectsClient.bulkUpdate = jest.fn(); - const so = { - attributes: { - idMapping: { - 'search-hash': { - id: 'search-id', - strategy: 'cool', - status: SearchStatus.IN_PROGRESS, - }, + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, }, - }, - }; - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [so], - total: 1, - } as any); + config + ); - mockClient.asyncSearch.status.mockResolvedValue({ - body: { - is_partial: false, - is_running: false, - completion_status: 500, - }, + expect(mockClient.asyncSearch.status).toBeCalledWith({ id: 'search-id' }); + const [updateInput] = savedObjectsClient.bulkUpdate.mock.calls[0]; + const updatedAttributes = updateInput[0].attributes as SearchSessionSavedObjectAttributes; + expect(updatedAttributes.status).toBe(SearchSessionStatus.COMPLETE); + expect(updatedAttributes.idMapping['search-hash'].status).toBe(SearchStatus.COMPLETE); + expect(updatedAttributes.idMapping['search-hash'].error).toBeUndefined(); + + expect(savedObjectsClient.delete).not.toBeCalled(); }); - await checkRunningSessions(savedObjectsClient, mockClient, mockLogger); - const [updateInput] = savedObjectsClient.bulkUpdate.mock.calls[0]; + test('updates to error if the search is errored', async () => { + savedObjectsClient.bulkUpdate = jest.fn(); + const so = { + attributes: { + idMapping: { + 'search-hash': { + id: 'search-id', + strategy: 'cool', + status: SearchStatus.IN_PROGRESS, + }, + }, + }, + }; + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [so], + total: 1, + } as any); - const updatedAttributes = updateInput[0].attributes as SearchSessionSavedObjectAttributes; - expect(updatedAttributes.status).toBe(SearchSessionStatus.ERROR); - expect(updatedAttributes.idMapping['search-hash'].status).toBe(SearchStatus.ERROR); - expect(updatedAttributes.idMapping['search-hash'].error).toBe( - 'Search completed with a 500 status' - ); + mockClient.asyncSearch.status.mockResolvedValue({ + body: { + is_partial: false, + is_running: false, + completion_status: 500, + }, + }); + + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + const [updateInput] = savedObjectsClient.bulkUpdate.mock.calls[0]; + + const updatedAttributes = updateInput[0].attributes as SearchSessionSavedObjectAttributes; + expect(updatedAttributes.status).toBe(SearchSessionStatus.ERROR); + expect(updatedAttributes.idMapping['search-hash'].status).toBe(SearchStatus.ERROR); + expect(updatedAttributes.idMapping['search-hash'].error).toBe( + 'Search completed with a 500 status' + ); + }); }); }); diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts index 71274e15e284d..3aba7af7b153e 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts @@ -10,28 +10,110 @@ import { SavedObjectsFindResult, SavedObjectsClientContract, } from 'kibana/server'; +import moment from 'moment'; +import { nodeBuilder } from '../../../../../../src/plugins/data/common'; import { SearchSessionStatus, SearchSessionSavedObjectAttributes, SearchSessionRequestInfo, + SEARCH_SESSION_TYPE, } from '../../../common'; -import { SEARCH_SESSION_TYPE } from '../../saved_objects'; import { getSearchStatus } from './get_search_status'; import { getSessionStatus } from './get_session_status'; -import { SearchStatus } from './types'; +import { SearchSessionsConfig, SearchStatus } from './types'; -export async function checkRunningSessions( - savedObjectsClient: SavedObjectsClientContract, +export interface CheckRunningSessionsDeps { + savedObjectsClient: SavedObjectsClientContract; + client: ElasticsearchClient; + logger: Logger; +} + +function checkNotPersistedSession( + session: SavedObjectsFindResult, + config: SearchSessionsConfig, + logger: Logger +) { + const curTime = moment(); + // Delete if a running session wasn't polled for in the last notTouchedTimeout OR if a completed session wasn't saved for within onScreenTimeout + return ( + (session.attributes.status === SearchSessionStatus.IN_PROGRESS && + curTime.diff(moment(session.attributes.touched), 'ms') > + config.notTouchedTimeout.asMilliseconds()) || + curTime.diff(moment(session.attributes.created), 'ms') > config.onScreenTimeout.asMilliseconds() + ); +} + +async function updateSessionStatus( + session: SavedObjectsFindResult, client: ElasticsearchClient, logger: Logger +) { + let sessionUpdated = false; + + // Check statuses of all running searches + await Promise.all( + Object.keys(session.attributes.idMapping).map(async (searchKey: string) => { + const updateSearchRequest = ( + currentStatus: Pick + ) => { + sessionUpdated = true; + session.attributes.idMapping[searchKey] = { + ...session.attributes.idMapping[searchKey], + ...currentStatus, + }; + }; + + const searchInfo = session.attributes.idMapping[searchKey]; + if (searchInfo.status === SearchStatus.IN_PROGRESS) { + try { + const currentStatus = await getSearchStatus(client, searchInfo.id); + + if (currentStatus.status !== searchInfo.status) { + logger.warn(`${currentStatus.status}`); + updateSearchRequest(currentStatus); + } + } catch (e) { + logger.error(e); + updateSearchRequest({ + status: SearchStatus.ERROR, + error: e.message || e.meta.error?.caused_by?.reason, + }); + } + } + }) + ); + + // And only then derive the session's status + const sessionStatus = getSessionStatus(session.attributes); + if (sessionStatus !== session.attributes.status) { + session.attributes.status = sessionStatus; + sessionUpdated = true; + } + + return sessionUpdated; +} + +export async function checkRunningSessions( + { savedObjectsClient, client, logger }: CheckRunningSessionsDeps, + config: SearchSessionsConfig ): Promise { try { + // TODO: take care of pagination const runningSearchSessionsResponse = await savedObjectsClient.find( { + perPage: config.pageSize, type: SEARCH_SESSION_TYPE, - search: SearchSessionStatus.IN_PROGRESS.toString(), - searchFields: ['status'], namespaces: ['*'], + filter: nodeBuilder.or([ + nodeBuilder.and([ + nodeBuilder.is( + `${SEARCH_SESSION_TYPE}.attributes.status`, + SearchSessionStatus.IN_PROGRESS.toString() + ), + nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.persisted`, 'true'), + ]), + nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.persisted`, 'false'), + ]), } ); @@ -41,61 +123,37 @@ export async function checkRunningSessions( const updatedSessions = new Array>(); - let sessionUpdated = false; - await Promise.all( runningSearchSessionsResponse.saved_objects.map(async (session) => { - // Check statuses of all running searches - await Promise.all( - Object.keys(session.attributes.idMapping).map(async (searchKey: string) => { - const updateSearchRequest = ( - currentStatus: Pick - ) => { - sessionUpdated = true; - session.attributes.idMapping[searchKey] = { - ...session.attributes.idMapping[searchKey], - ...currentStatus, - }; - }; - - const searchInfo = session.attributes.idMapping[searchKey]; - if (searchInfo.status === SearchStatus.IN_PROGRESS) { - try { - const currentStatus = await getSearchStatus(client, searchInfo.id); - - if (currentStatus.status !== SearchStatus.IN_PROGRESS) { - updateSearchRequest(currentStatus); - } - } catch (e) { - logger.error(e); - updateSearchRequest({ - status: SearchStatus.ERROR, - error: e.message || e.meta.error?.caused_by?.reason, - }); - } - } - }) - ); - - // And only then derive the session's status - const sessionStatus = getSessionStatus(session.attributes); - if (sessionStatus !== SearchSessionStatus.IN_PROGRESS) { - session.attributes.status = sessionStatus; - sessionUpdated = true; + const updated = await updateSessionStatus(session, client, logger); + let deleted = false; + + if (!session.attributes.persisted) { + if (checkNotPersistedSession(session, config, logger)) { + deleted = true; + // delete saved object to free up memory + // TODO: there's a potential rare edge case of deleting an object and then receiving a new trackId for that same session! + // Maybe we want to change state to deleted and cleanup later? + logger.debug(`Deleting stale session | ${session.id}`); + await savedObjectsClient.delete(SEARCH_SESSION_TYPE, session.id); + + // TODO cancel running search requests + } } - if (sessionUpdated) { + if (updated && !deleted) { updatedSessions.push(session); } }) ); + // Do a bulk update if (updatedSessions.length) { // If there's an error, we'll try again in the next iteration, so there's no need to check the output. const updatedResponse = await savedObjectsClient.bulkUpdate( updatedSessions ); - logger.debug(`Updated ${updatedResponse.saved_objects.length} background sessions`); + logger.debug(`Updated ${updatedResponse.saved_objects.length} search sessions`); } } catch (err) { logger.error(err); diff --git a/x-pack/plugins/data_enhanced/server/search/session/monitoring_task.ts b/x-pack/plugins/data_enhanced/server/search/session/monitoring_task.ts index 332e69b119bb6..7883086513f1b 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/monitoring_task.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/monitoring_task.ts @@ -14,10 +14,10 @@ import { } from '../../../../task_manager/server'; import { checkRunningSessions } from './check_running_sessions'; import { CoreSetup, SavedObjectsClient, Logger } from '../../../../../../src/core/server'; -import { SEARCH_SESSION_TYPE } from '../../saved_objects'; import { ConfigSchema } from '../../../config'; +import { SEARCH_SESSION_TYPE } from '../../../common'; -export const SEARCH_SESSIONS_TASK_TYPE = 'bg_monitor'; +export const SEARCH_SESSIONS_TASK_TYPE = 'search_sessions_monitor'; export const SEARCH_SESSIONS_TASK_ID = `data_enhanced_${SEARCH_SESSIONS_TASK_TYPE}`; interface SearchSessionTaskDeps { @@ -31,17 +31,21 @@ function searchSessionRunner(core: CoreSetup, { logger, config$ }: SearchSession return { async run() { const config = await config$.pipe(first()).toPromise(); + const sessionConfig = config.search.sessions; const [coreStart] = await core.getStartServices(); const internalRepo = coreStart.savedObjects.createInternalRepository([SEARCH_SESSION_TYPE]); const internalSavedObjectsClient = new SavedObjectsClient(internalRepo); await checkRunningSessions( - internalSavedObjectsClient, - coreStart.elasticsearch.client.asInternalUser, - logger + { + savedObjectsClient: internalSavedObjectsClient, + client: coreStart.elasticsearch.client.asInternalUser, + logger, + }, + sessionConfig ); return { - runAt: new Date(Date.now() + config.search.sessions.trackingInterval.asMilliseconds()), + runAt: new Date(Date.now() + sessionConfig.trackingInterval.asMilliseconds()), state: {}, }; }, diff --git a/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts b/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts index 1107ed8155080..10549b18f521a 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts @@ -5,21 +5,22 @@ */ import { BehaviorSubject, of } from 'rxjs'; -import type { SavedObject, SavedObjectsClientContract } from 'kibana/server'; +import { + SavedObject, + SavedObjectsClientContract, + SavedObjectsErrorHelpers, +} from '../../../../../../src/core/server'; import type { SearchStrategyDependencies } from '../../../../../../src/plugins/data/server'; import { savedObjectsClientMock } from '../../../../../../src/core/server/mocks'; -import { SearchSessionStatus } from '../../../common'; -import { SEARCH_SESSION_TYPE } from '../../saved_objects'; -import { SearchSessionDependencies, SearchSessionService, SessionInfo } from './session_service'; +import { SearchSessionStatus, SEARCH_SESSION_TYPE } from '../../../common'; +import { SearchSessionDependencies, SearchSessionService } from './session_service'; import { createRequestHash } from './utils'; import moment from 'moment'; import { coreMock } from 'src/core/server/mocks'; import { ConfigSchema } from '../../../config'; // @ts-ignore import { taskManagerMock } from '../../../../task_manager/server/mocks'; -import { SearchStatus } from './types'; -const INMEM_TRACKING_INTERVAL = 10000; const MAX_UPDATE_RETRIES = 3; const flushPromises = () => new Promise((resolve) => setImmediate(resolve)); @@ -28,67 +29,7 @@ describe('SearchSessionService', () => { let savedObjectsClient: jest.Mocked; let service: SearchSessionService; - const MOCK_SESSION_ID = 'session-id-mock'; - const MOCK_ASYNC_ID = '123456'; const MOCK_STRATEGY = 'ese'; - const MOCK_KEY_HASH = '608de49a4600dbb5b173492759792e4a'; - - const createMockInternalSavedObjectClient = ( - findSpy?: jest.SpyInstance, - bulkUpdateSpy?: jest.SpyInstance - ) => { - Object.defineProperty(service, 'internalSavedObjectsClient', { - get: () => { - const find = - findSpy || - (() => { - return { - saved_objects: [ - { - attributes: { - sessionId: MOCK_SESSION_ID, - idMapping: { - 'another-key': { - id: 'another-async-id', - strategy: 'another-strategy', - }, - }, - }, - id: MOCK_SESSION_ID, - version: '1', - }, - ], - }; - }); - - const bulkUpdate = - bulkUpdateSpy || - (() => { - return { - saved_objects: [], - }; - }); - return { - find, - bulkUpdate, - }; - }, - }); - }; - - const createMockIdMapping = ( - mapValues: any[], - insertTime?: moment.Moment, - retryCount?: number - ): Map => { - const fakeMap = new Map(); - fakeMap.set(MOCK_SESSION_ID, { - ids: new Map(mapValues), - insertTime: insertTime || moment(), - retryCount: retryCount || 0, - }); - return fakeMap; - }; const sessionId = 'd7170a35-7e2c-48d6-8dec-9a056721b489'; const mockSavedObject: SavedObject = { @@ -110,8 +51,9 @@ describe('SearchSessionService', () => { sessions: { enabled: true, pageSize: 10000, - inMemTimeout: moment.duration(1, 'm'), - maxUpdateRetries: 3, + notTouchedTimeout: moment.duration(1, 'm'), + onScreenTimeout: moment.duration(2, 'm'), + maxUpdateRetries: MAX_UPDATE_RETRIES, defaultExpiration: moment.duration(7, 'd'), trackingInterval: moment.duration(10, 's'), management: {} as any, @@ -126,7 +68,6 @@ describe('SearchSessionService', () => { service = new SearchSessionService(mockLogger, config$); const coreStart = coreMock.createStart(); const mockTaskManager = taskManagerMock.createStart(); - jest.useFakeTimers(); await flushPromises(); await service.start(coreStart, { taskManager: mockTaskManager, @@ -135,19 +76,6 @@ describe('SearchSessionService', () => { afterEach(() => { service.stop(); - jest.useRealTimers(); - }); - - it('search throws if `name` is not provided', () => { - expect(() => service.save(sessionId, {}, { savedObjectsClient })).rejects.toMatchInlineSnapshot( - `[Error: Name is required]` - ); - }); - - it('save throws if `name` is not provided', () => { - expect(() => service.save(sessionId, {}, { savedObjectsClient })).rejects.toMatchInlineSnapshot( - `[Error: Name is required]` - ); }); it('get calls saved objects client', async () => { @@ -182,7 +110,7 @@ describe('SearchSessionService', () => { }); }); - it('update calls saved objects client', async () => { + it('update calls saved objects client with added touch time', async () => { const mockUpdateSavedObject = { ...mockSavedObject, attributes: {}, @@ -193,11 +121,13 @@ describe('SearchSessionService', () => { const response = await service.update(sessionId, attributes, { savedObjectsClient }); expect(response).toBe(mockUpdateSavedObject); - expect(savedObjectsClient.update).toHaveBeenCalledWith( - SEARCH_SESSION_TYPE, - sessionId, - attributes - ); + + const [type, id, callAttributes] = savedObjectsClient.update.mock.calls[0]; + + expect(type).toBe(SEARCH_SESSION_TYPE); + expect(id).toBe(sessionId); + expect(callAttributes).toHaveProperty('name', attributes.name); + expect(callAttributes).toHaveProperty('touched'); }); it('delete calls saved objects client', async () => { @@ -256,17 +186,17 @@ describe('SearchSessionService', () => { spyGetId.mockRestore(); }); - it('calls `trackId` once if the response contains an `id` and not restoring', async () => { + it('calls `trackId` for every response, if the response contains an `id` and not restoring', async () => { const searchRequest = { params: {} }; const options = { sessionId, isStored: false, isRestore: false }; - const spyTrackId = jest.spyOn(service, 'trackId').mockResolvedValue(); + const spyTrackId = jest.spyOn(service, 'trackId'); mockSearch.mockReturnValueOnce(of({ id: 'my_id' }, { id: 'my_id' })); await service .search(mockStrategy, searchRequest, options, mockSearchDeps, mockDeps) .toPromise(); - expect(spyTrackId).toBeCalledTimes(1); + expect(spyTrackId).toBeCalledTimes(2); expect(spyTrackId).toBeCalledWith(searchRequest, 'my_id', options, {}); spyTrackId.mockRestore(); @@ -276,7 +206,7 @@ describe('SearchSessionService', () => { const searchRequest = { params: {} }; const options = { sessionId, isStored: true, isRestore: true }; const spyGetId = jest.spyOn(service, 'getId').mockResolvedValueOnce('my_id'); - const spyTrackId = jest.spyOn(service, 'trackId').mockResolvedValue(); + const spyTrackId = jest.spyOn(service, 'trackId'); mockSearch.mockReturnValueOnce(of({ id: 'my_id' })); await service @@ -291,84 +221,194 @@ describe('SearchSessionService', () => { }); describe('trackId', () => { - it('stores hash in memory when `isStored` is `false` for when `save` is called', async () => { + it('updates the saved object if search session already exists', async () => { const searchRequest = { params: {} }; const requestHash = createRequestHash(searchRequest.params); const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0'; - const isStored = false; - const name = 'my saved background search session'; - const appId = 'my_app_id'; - const urlGeneratorId = 'my_url_generator_id'; - const created = new Date().toISOString(); - const expires = new Date().toISOString(); - - const mockIdMapping = createMockIdMapping([]); - const setSpy = jest.fn(); - mockIdMapping.set = setSpy; - Object.defineProperty(service, 'sessionSearchMap', { - get: () => mockIdMapping, - }); + + const mockUpdateSavedObject = { + ...mockSavedObject, + attributes: {}, + }; + savedObjectsClient.update.mockResolvedValue(mockUpdateSavedObject); await service.trackId( searchRequest, searchId, - { sessionId, isStored, strategy: MOCK_STRATEGY }, + { sessionId, strategy: MOCK_STRATEGY }, { savedObjectsClient } ); - expect(savedObjectsClient.update).not.toHaveBeenCalled(); + expect(savedObjectsClient.update).toHaveBeenCalled(); + expect(savedObjectsClient.create).not.toHaveBeenCalled(); - await service.save( - sessionId, - { name, created, expires, appId, urlGeneratorId }, + const [type, id, callAttributes] = savedObjectsClient.update.mock.calls[0]; + expect(type).toBe(SEARCH_SESSION_TYPE); + expect(id).toBe(sessionId); + expect(callAttributes).toHaveProperty('idMapping', { + [requestHash]: { + id: searchId, + status: SearchSessionStatus.IN_PROGRESS, + strategy: MOCK_STRATEGY, + }, + }); + expect(callAttributes).toHaveProperty('touched'); + }); + + it('retries updating the saved object if there was a ES conflict 409', async () => { + const searchRequest = { params: {} }; + const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0'; + + const mockUpdateSavedObject = { + ...mockSavedObject, + attributes: {}, + }; + + let counter = 0; + + savedObjectsClient.update.mockImplementation(() => { + return new Promise((resolve, reject) => { + if (counter === 0) { + counter++; + reject(SavedObjectsErrorHelpers.createConflictError(SEARCH_SESSION_TYPE, searchId)); + } else { + resolve(mockUpdateSavedObject); + } + }); + }); + + await service.trackId( + searchRequest, + searchId, + { sessionId, strategy: MOCK_STRATEGY }, { savedObjectsClient } ); - expect(savedObjectsClient.create).toHaveBeenCalledWith( - SEARCH_SESSION_TYPE, - { - name, - created, - expires, - initialState: {}, - restoreState: {}, - status: SearchSessionStatus.IN_PROGRESS, - idMapping: {}, - appId, - urlGeneratorId, - sessionId, - }, - { id: sessionId } + expect(savedObjectsClient.update).toHaveBeenCalledTimes(2); + expect(savedObjectsClient.create).not.toHaveBeenCalled(); + }); + + it('retries updating the saved object if theres a ES conflict 409, but stops after MAX_RETRIES times', async () => { + const searchRequest = { params: {} }; + const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0'; + + savedObjectsClient.update.mockImplementation(() => { + return new Promise((resolve, reject) => { + reject(SavedObjectsErrorHelpers.createConflictError(SEARCH_SESSION_TYPE, searchId)); + }); + }); + + await service.trackId( + searchRequest, + searchId, + { sessionId, strategy: MOCK_STRATEGY }, + { savedObjectsClient } ); - const [setSessionId, setParams] = setSpy.mock.calls[0]; - expect(setParams.ids.get(requestHash).id).toBe(searchId); - expect(setParams.ids.get(requestHash).strategy).toBe(MOCK_STRATEGY); - expect(setSessionId).toBe(sessionId); + // Track ID doesn't throw errors even in cases of failure! + expect(savedObjectsClient.update).toHaveBeenCalledTimes(MAX_UPDATE_RETRIES); + expect(savedObjectsClient.create).not.toHaveBeenCalled(); }); - it('updates saved object when `isStored` is `true`', async () => { + it('creates the saved object in non persisted state, if search session doesnt exists', async () => { const searchRequest = { params: {} }; const requestHash = createRequestHash(searchRequest.params); const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0'; - const isStored = true; + + const mockCreatedSavedObject = { + ...mockSavedObject, + attributes: {}, + }; + + savedObjectsClient.update.mockRejectedValue( + SavedObjectsErrorHelpers.createGenericNotFoundError(sessionId) + ); + savedObjectsClient.create.mockResolvedValue(mockCreatedSavedObject); await service.trackId( searchRequest, searchId, - { sessionId, isStored, strategy: MOCK_STRATEGY }, + { sessionId, strategy: MOCK_STRATEGY }, { savedObjectsClient } ); - expect(savedObjectsClient.update).toHaveBeenCalledWith(SEARCH_SESSION_TYPE, sessionId, { - idMapping: { - [requestHash]: { - id: searchId, - strategy: MOCK_STRATEGY, - status: SearchStatus.IN_PROGRESS, - }, + expect(savedObjectsClient.update).toHaveBeenCalled(); + expect(savedObjectsClient.create).toHaveBeenCalled(); + + const [type, callAttributes, options] = savedObjectsClient.create.mock.calls[0]; + expect(type).toBe(SEARCH_SESSION_TYPE); + expect(options).toStrictEqual({ id: sessionId }); + expect(callAttributes).toHaveProperty('idMapping', { + [requestHash]: { + id: searchId, + status: SearchSessionStatus.IN_PROGRESS, + strategy: MOCK_STRATEGY, }, }); + expect(callAttributes).toHaveProperty('expires'); + expect(callAttributes).toHaveProperty('created'); + expect(callAttributes).toHaveProperty('touched'); + expect(callAttributes).toHaveProperty('sessionId', sessionId); + expect(callAttributes).toHaveProperty('persisted', false); + }); + + it('retries updating if update returned 404 and then update returned conflict 409 (first create race condition)', async () => { + const searchRequest = { params: {} }; + const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0'; + + const mockUpdateSavedObject = { + ...mockSavedObject, + attributes: {}, + }; + + let counter = 0; + + savedObjectsClient.update.mockImplementation(() => { + return new Promise((resolve, reject) => { + if (counter === 0) { + counter++; + reject(SavedObjectsErrorHelpers.createGenericNotFoundError(sessionId)); + } else { + resolve(mockUpdateSavedObject); + } + }); + }); + + savedObjectsClient.create.mockRejectedValue( + SavedObjectsErrorHelpers.createConflictError(SEARCH_SESSION_TYPE, searchId) + ); + + await service.trackId( + searchRequest, + searchId, + { sessionId, strategy: MOCK_STRATEGY }, + { savedObjectsClient } + ); + + expect(savedObjectsClient.update).toHaveBeenCalledTimes(2); + expect(savedObjectsClient.create).toHaveBeenCalledTimes(1); + }); + + it('retries everything at most MAX_RETRIES times', async () => { + const searchRequest = { params: {} }; + const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0'; + + savedObjectsClient.update.mockRejectedValue( + SavedObjectsErrorHelpers.createGenericNotFoundError(sessionId) + ); + savedObjectsClient.create.mockRejectedValue( + SavedObjectsErrorHelpers.createConflictError(SEARCH_SESSION_TYPE, searchId) + ); + + await service.trackId( + searchRequest, + searchId, + { sessionId, strategy: MOCK_STRATEGY }, + { savedObjectsClient } + ); + + expect(savedObjectsClient.update).toHaveBeenCalledTimes(MAX_UPDATE_RETRIES); + expect(savedObjectsClient.create).toHaveBeenCalledTimes(MAX_UPDATE_RETRIES); }); }); @@ -437,194 +477,95 @@ describe('SearchSessionService', () => { }); }); - describe('Monitor', () => { - it('schedules the next iteration', async () => { - const findSpy = jest.fn().mockResolvedValue({ saved_objects: [] }); - createMockInternalSavedObjectClient(findSpy); - - const mockIdMapping = createMockIdMapping( - [[MOCK_KEY_HASH, { id: MOCK_ASYNC_ID, strategy: MOCK_STRATEGY }]], - moment() + describe('save', () => { + it('save throws if `name` is not provided', () => { + expect(service.save(sessionId, {}, { savedObjectsClient })).rejects.toMatchInlineSnapshot( + `[Error: Name is required]` ); - - Object.defineProperty(service, 'sessionSearchMap', { - get: () => mockIdMapping, - }); - - jest.advanceTimersByTime(INMEM_TRACKING_INTERVAL); - expect(findSpy).toHaveBeenCalledTimes(1); - await flushPromises(); - - jest.advanceTimersByTime(INMEM_TRACKING_INTERVAL); - expect(findSpy).toHaveBeenCalledTimes(2); - }); - - it('should delete expired IDs', async () => { - const findSpy = jest.fn().mockResolvedValueOnce({ saved_objects: [] }); - createMockInternalSavedObjectClient(findSpy); - - const mockIdMapping = createMockIdMapping( - [[MOCK_KEY_HASH, { id: MOCK_ASYNC_ID, strategy: MOCK_STRATEGY }]], - moment().subtract(2, 'm') - ); - - const deleteSpy = jest.spyOn(mockIdMapping, 'delete'); - Object.defineProperty(service, 'sessionSearchMap', { - get: () => mockIdMapping, - }); - - // Get setInterval to fire - jest.advanceTimersByTime(INMEM_TRACKING_INTERVAL); - - expect(findSpy).not.toHaveBeenCalled(); - expect(deleteSpy).toHaveBeenCalledTimes(1); - }); - - it('should delete IDs that passed max retries', async () => { - const findSpy = jest.fn().mockResolvedValueOnce({ saved_objects: [] }); - createMockInternalSavedObjectClient(findSpy); - - const mockIdMapping = createMockIdMapping( - [[MOCK_KEY_HASH, { id: MOCK_ASYNC_ID, strategy: MOCK_STRATEGY }]], - moment(), - MAX_UPDATE_RETRIES - ); - - const deleteSpy = jest.spyOn(mockIdMapping, 'delete'); - Object.defineProperty(service, 'sessionSearchMap', { - get: () => mockIdMapping, - }); - - // Get setInterval to fire - jest.advanceTimersByTime(INMEM_TRACKING_INTERVAL); - - expect(findSpy).not.toHaveBeenCalled(); - expect(deleteSpy).toHaveBeenCalledTimes(1); }); - it('should not fetch when no IDs are mapped', async () => { - const findSpy = jest.fn().mockResolvedValueOnce({ saved_objects: [] }); - createMockInternalSavedObjectClient(findSpy); - - jest.advanceTimersByTime(INMEM_TRACKING_INTERVAL); - expect(findSpy).not.toHaveBeenCalled(); + it('save throws if `appId` is not provided', () => { + expect( + service.save(sessionId, { name: 'banana' }, { savedObjectsClient }) + ).rejects.toMatchInlineSnapshot(`[Error: AppId is required]`); }); - it('should try to fetch saved objects if some ids are mapped', async () => { - const mockIdMapping = createMockIdMapping([[MOCK_KEY_HASH, MOCK_ASYNC_ID]]); - Object.defineProperty(service, 'sessionSearchMap', { - get: () => mockIdMapping, - }); - - const findSpy = jest.fn().mockResolvedValueOnce({ saved_objects: [] }); - const bulkUpdateSpy = jest.fn().mockResolvedValueOnce({ saved_objects: [] }); - createMockInternalSavedObjectClient(findSpy, bulkUpdateSpy); - - jest.advanceTimersByTime(INMEM_TRACKING_INTERVAL); - expect(findSpy).toHaveBeenCalledTimes(1); - expect(bulkUpdateSpy).not.toHaveBeenCalled(); + it('save throws if `generator id` is not provided', () => { + expect( + service.save(sessionId, { name: 'banana', appId: 'nanana' }, { savedObjectsClient }) + ).rejects.toMatchInlineSnapshot(`[Error: UrlGeneratorId is required]`); }); - it('should update saved objects if they are found, and delete session on success', async () => { - const mockIdMapping = createMockIdMapping([[MOCK_KEY_HASH, MOCK_ASYNC_ID]], undefined, 1); - const mockMapDeleteSpy = jest.fn(); - const mockSessionDeleteSpy = jest.fn(); - mockIdMapping.delete = mockMapDeleteSpy; - mockIdMapping.get(MOCK_SESSION_ID)!.ids.delete = mockSessionDeleteSpy; - Object.defineProperty(service, 'sessionSearchMap', { - get: () => mockIdMapping, - }); - - const findSpy = jest.fn().mockResolvedValueOnce({ - saved_objects: [ - { - id: MOCK_SESSION_ID, - attributes: { - idMapping: { - b: 'c', - }, - }, - }, - ], - }); - const bulkUpdateSpy = jest.fn().mockResolvedValueOnce({ - saved_objects: [ - { - id: MOCK_SESSION_ID, - attributes: { - idMapping: { - b: 'c', - [MOCK_KEY_HASH]: { - id: MOCK_ASYNC_ID, - strategy: MOCK_STRATEGY, - }, - }, - }, - }, - ], - }); - createMockInternalSavedObjectClient(findSpy, bulkUpdateSpy); - - jest.advanceTimersByTime(INMEM_TRACKING_INTERVAL); + it('saving updates an existing saved object and persists it', async () => { + const mockUpdateSavedObject = { + ...mockSavedObject, + attributes: {}, + }; + savedObjectsClient.update.mockResolvedValue(mockUpdateSavedObject); - // Release timers to call check after test actions are done. - jest.useRealTimers(); - await new Promise((r) => setTimeout(r, 15)); + await service.save( + sessionId, + { + name: 'banana', + appId: 'nanana', + urlGeneratorId: 'panama', + }, + { savedObjectsClient } + ); - expect(findSpy).toHaveBeenCalledTimes(1); - expect(bulkUpdateSpy).toHaveBeenCalledTimes(1); - expect(mockSessionDeleteSpy).toHaveBeenCalledTimes(2); - expect(mockSessionDeleteSpy).toBeCalledWith('b'); - expect(mockSessionDeleteSpy).toBeCalledWith(MOCK_KEY_HASH); - expect(mockMapDeleteSpy).toBeCalledTimes(1); + expect(savedObjectsClient.update).toHaveBeenCalled(); + expect(savedObjectsClient.create).not.toHaveBeenCalled(); + + const [type, id, callAttributes] = savedObjectsClient.update.mock.calls[0]; + expect(type).toBe(SEARCH_SESSION_TYPE); + expect(id).toBe(sessionId); + expect(callAttributes).not.toHaveProperty('idMapping'); + expect(callAttributes).toHaveProperty('touched'); + expect(callAttributes).toHaveProperty('persisted', true); + expect(callAttributes).toHaveProperty('name', 'banana'); + expect(callAttributes).toHaveProperty('appId', 'nanana'); + expect(callAttributes).toHaveProperty('urlGeneratorId', 'panama'); + expect(callAttributes).toHaveProperty('initialState', {}); + expect(callAttributes).toHaveProperty('restoreState', {}); }); - it('should update saved objects if they are found, and increase retryCount on error', async () => { - const mockIdMapping = createMockIdMapping([[MOCK_KEY_HASH, MOCK_ASYNC_ID]]); - const mockMapDeleteSpy = jest.fn(); - const mockSessionDeleteSpy = jest.fn(); - mockIdMapping.delete = mockMapDeleteSpy; - mockIdMapping.get(MOCK_SESSION_ID)!.ids.delete = mockSessionDeleteSpy; - Object.defineProperty(service, 'sessionSearchMap', { - get: () => mockIdMapping, - }); - - const findSpy = jest.fn().mockResolvedValueOnce({ - saved_objects: [ - { - id: MOCK_SESSION_ID, - attributes: { - idMapping: { - b: { - id: 'c', - strategy: MOCK_STRATEGY, - }, - }, - }, - }, - ], - }); - const bulkUpdateSpy = jest.fn().mockResolvedValueOnce({ - saved_objects: [ - { - id: MOCK_SESSION_ID, - error: 'not ok', - }, - ], - }); - createMockInternalSavedObjectClient(findSpy, bulkUpdateSpy); + it('saving creates a new persisted saved object, if it did not exist', async () => { + const mockCreatedSavedObject = { + ...mockSavedObject, + attributes: {}, + }; - jest.advanceTimersByTime(INMEM_TRACKING_INTERVAL); + savedObjectsClient.update.mockRejectedValue( + SavedObjectsErrorHelpers.createGenericNotFoundError(sessionId) + ); + savedObjectsClient.create.mockResolvedValue(mockCreatedSavedObject); - // Release timers to call check after test actions are done. - jest.useRealTimers(); - await new Promise((r) => setTimeout(r, 15)); + await service.save( + sessionId, + { + name: 'banana', + appId: 'nanana', + urlGeneratorId: 'panama', + }, + { savedObjectsClient } + ); - expect(findSpy).toHaveBeenCalledTimes(1); - expect(bulkUpdateSpy).toHaveBeenCalledTimes(1); - expect(mockSessionDeleteSpy).not.toHaveBeenCalled(); - expect(mockMapDeleteSpy).not.toHaveBeenCalled(); - expect(mockIdMapping.get(MOCK_SESSION_ID)!.retryCount).toBe(1); + expect(savedObjectsClient.update).toHaveBeenCalledTimes(1); + expect(savedObjectsClient.create).toHaveBeenCalledTimes(1); + + const [type, callAttributes, options] = savedObjectsClient.create.mock.calls[0]; + expect(type).toBe(SEARCH_SESSION_TYPE); + expect(options?.id).toBe(sessionId); + expect(callAttributes).toHaveProperty('idMapping', {}); + expect(callAttributes).toHaveProperty('touched'); + expect(callAttributes).toHaveProperty('expires'); + expect(callAttributes).toHaveProperty('created'); + expect(callAttributes).toHaveProperty('persisted', true); + expect(callAttributes).toHaveProperty('name', 'banana'); + expect(callAttributes).toHaveProperty('appId', 'nanana'); + expect(callAttributes).toHaveProperty('urlGeneratorId', 'panama'); + expect(callAttributes).toHaveProperty('initialState', {}); + expect(callAttributes).toHaveProperty('restoreState', {}); }); }); }); diff --git a/x-pack/plugins/data_enhanced/server/search/session/session_service.ts b/x-pack/plugins/data_enhanced/server/search/session/session_service.ts index 794baa21e2f4c..1c5a857a630f6 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/session_service.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/session_service.ts @@ -4,27 +4,23 @@ * you may not use this file except in compliance with the Elastic License. */ -import moment, { Moment } from 'moment'; import { from, Observable } from 'rxjs'; -import { first, switchMap } from 'rxjs/operators'; +import { first, switchMap, tap } from 'rxjs/operators'; import { CoreStart, KibanaRequest, - SavedObjectsClient, SavedObjectsClientContract, Logger, - SavedObject, CoreSetup, - SavedObjectsBulkUpdateObject, SavedObjectsFindOptions, + SavedObjectsErrorHelpers, + SavedObjectsUpdateResponse, + SavedObject, } from '../../../../../../src/core/server'; import { IKibanaSearchRequest, IKibanaSearchResponse, ISearchOptions, - KueryNode, - nodeBuilder, - tapFirst, } from '../../../../../../src/plugins/data/common'; import { ISearchStrategy, @@ -37,25 +33,17 @@ import { } from '../../../../task_manager/server'; import { SearchSessionSavedObjectAttributes, - SearchSessionRequestInfo, SearchSessionStatus, + SEARCH_SESSION_TYPE, } from '../../../common'; -import { SEARCH_SESSION_TYPE } from '../../saved_objects'; import { createRequestHash } from './utils'; import { ConfigSchema } from '../../../config'; import { registerSearchSessionsTask, scheduleSearchSessionsTasks } from './monitoring_task'; -import { SearchStatus } from './types'; +import { SearchSessionsConfig, SearchStatus } from './types'; export interface SearchSessionDependencies { savedObjectsClient: SavedObjectsClientContract; } - -export interface SessionInfo { - insertTime: Moment; - retryCount: number; - ids: Map; -} - interface SetupDependencies { taskManager: TaskManagerSetupContract; } @@ -64,16 +52,10 @@ interface StartDependencies { taskManager: TaskManagerStartContract; } -type SearchSessionsConfig = ConfigSchema['search']['sessions']; - +function sleep(ms: number) { + return new Promise((r) => setTimeout(r, ms)); +} export class SearchSessionService implements ISessionService { - /** - * Map of sessionId to { [requestHash]: searchId } - * @private - */ - private sessionSearchMap = new Map(); - private internalSavedObjectsClient!: SavedObjectsClientContract; - private monitorTimer!: NodeJS.Timeout; private config!: SearchSessionsConfig; constructor( @@ -95,139 +77,14 @@ export class SearchSessionService implements ISessionService { return this.setupMonitoring(core, deps); } - public stop() { - this.sessionSearchMap.clear(); - clearTimeout(this.monitorTimer); - } + public stop() {} private setupMonitoring = async (core: CoreStart, deps: StartDependencies) => { if (this.config.enabled) { scheduleSearchSessionsTasks(deps.taskManager, this.logger, this.config.trackingInterval); - this.logger.debug(`setupMonitoring | Enabling monitoring`); - const internalRepo = core.savedObjects.createInternalRepository([SEARCH_SESSION_TYPE]); - this.internalSavedObjectsClient = new SavedObjectsClient(internalRepo); - this.monitorMappedIds(); } }; - /** - * Compiles a KQL Query to fetch sessions by ID. - * Done as a performance optimization workaround. - */ - private sessionIdsAsFilters(sessionIds: string[]): KueryNode { - return nodeBuilder.or( - sessionIds.map((id) => { - return nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.sessionId`, id); - }) - ); - } - - /** - * Gets all {@link SessionSavedObjectAttributes | Background Searches} that - * currently being tracked by the service. - * - * @remarks - * Uses `internalSavedObjectsClient` as this is called asynchronously, not within the - * context of a user's session. - */ - private async getAllMappedSavedObjects() { - const filter = this.sessionIdsAsFilters(Array.from(this.sessionSearchMap.keys())); - const res = await this.internalSavedObjectsClient.find({ - perPage: this.config.pageSize, // If there are more sessions in memory, they will be synced when some items are cleared out. - type: SEARCH_SESSION_TYPE, - filter, - namespaces: ['*'], - }); - this.logger.debug(`getAllMappedSavedObjects | Got ${res.saved_objects.length} items`); - return res.saved_objects; - } - - private clearSessions = async () => { - const curTime = moment(); - - this.sessionSearchMap.forEach((sessionInfo, sessionId) => { - if ( - moment.duration(curTime.diff(sessionInfo.insertTime)).asMilliseconds() > - this.config.inMemTimeout.asMilliseconds() - ) { - this.logger.debug(`clearSessions | Deleting expired session ${sessionId}`); - this.sessionSearchMap.delete(sessionId); - } else if (sessionInfo.retryCount >= this.config.maxUpdateRetries) { - this.logger.warn(`clearSessions | Deleting failed session ${sessionId}`); - this.sessionSearchMap.delete(sessionId); - } - }); - }; - - private async monitorMappedIds() { - this.monitorTimer = setTimeout(async () => { - try { - this.clearSessions(); - - if (!this.sessionSearchMap.size) return; - this.logger.debug(`monitorMappedIds | Map contains ${this.sessionSearchMap.size} items`); - - const savedSessions = await this.getAllMappedSavedObjects(); - const updatedSessions = await this.updateAllSavedObjects(savedSessions); - - updatedSessions.forEach((updatedSavedObject) => { - const sessionInfo = this.sessionSearchMap.get(updatedSavedObject.id)!; - if (updatedSavedObject.error) { - this.logger.warn( - `monitorMappedIds | update error ${JSON.stringify(updatedSavedObject.error) || ''}` - ); - // Retry next time - sessionInfo.retryCount++; - } else if (updatedSavedObject.attributes.idMapping) { - // Delete the ids that we just saved, avoiding a potential new ids being lost. - Object.keys(updatedSavedObject.attributes.idMapping).forEach((key) => { - sessionInfo.ids.delete(key); - }); - // If the session object is empty, delete it as well - if (!sessionInfo.ids.entries.length) { - this.sessionSearchMap.delete(updatedSavedObject.id); - } else { - sessionInfo.retryCount = 0; - } - } - }); - } catch (e) { - this.logger.error(`monitorMappedIds | Error while updating sessions. ${e}`); - } finally { - this.monitorMappedIds(); - } - }, this.config.trackingInterval.asMilliseconds()); - } - - private async updateAllSavedObjects( - activeMappingObjects: Array> - ) { - if (!activeMappingObjects.length) return []; - - this.logger.debug(`updateAllSavedObjects | Updating ${activeMappingObjects.length} items`); - const updatedSessions: Array< - SavedObjectsBulkUpdateObject - > = activeMappingObjects - .filter((so) => !so.error) - .map((sessionSavedObject) => { - const sessionInfo = this.sessionSearchMap.get(sessionSavedObject.id); - const idMapping = sessionInfo ? Object.fromEntries(sessionInfo.ids.entries()) : {}; - sessionSavedObject.attributes.idMapping = { - ...sessionSavedObject.attributes.idMapping, - ...idMapping, - }; - return { - ...sessionSavedObject, - namespace: sessionSavedObject.namespaces?.[0], - }; - }); - - const updateResults = await this.internalSavedObjectsClient.bulkUpdate( - updatedSessions - ); - return updateResults.saved_objects; - } - public search( strategy: ISearchStrategy, searchRequest: Request, @@ -246,53 +103,110 @@ export class SearchSessionService implements ISessionService { return from(getSearchRequest()).pipe( switchMap((request) => strategy.search(request, options, searchDeps)), - tapFirst((response) => { - if (searchRequest.id || !options.sessionId || !response.id || options.isRestore) return; + tap((response) => { + if (!options.sessionId || !response.id || options.isRestore) return; this.trackId(searchRequest, response.id, options, deps); }) ); } - // TODO: Generate the `userId` from the realm type/realm name/username + private updateOrCreate = async ( + sessionId: string, + attributes: Partial, + deps: SearchSessionDependencies, + retry: number = 1 + ): Promise< + | SavedObjectsUpdateResponse + | SavedObject + | undefined + > => { + this.logger.debug(`updateOrCreate | ${sessionId} | ${retry}`); + try { + return await this.update(sessionId, attributes, deps); + } catch (e) { + if (SavedObjectsErrorHelpers.isNotFoundError(e)) { + try { + this.logger.debug(`Object not found | ${sessionId}`); + return await this.create(sessionId, attributes, deps); + } catch (createError) { + if ( + SavedObjectsErrorHelpers.isConflictError(createError) && + retry < this.config.maxUpdateRetries + ) { + this.logger.debug(`Conflict error | ${sessionId}`); + // TODO: Randomize sleep + await sleep(100); + return await this.updateOrCreate(sessionId, attributes, deps, retry + 1); + } else { + this.logger.error(createError); + } + } + } else if ( + SavedObjectsErrorHelpers.isConflictError(e) && + retry < this.config.maxUpdateRetries + ) { + this.logger.debug(`Conflict error | ${sessionId}`); + await sleep(100); + return await this.updateOrCreate(sessionId, attributes, deps, retry + 1); + } else { + this.logger.error(e); + } + } + + return undefined; + }; + public save = async ( sessionId: string, { name, appId, - created = new Date().toISOString(), - expires = new Date(Date.now() + this.config.defaultExpiration.asMilliseconds()).toISOString(), - status = SearchSessionStatus.IN_PROGRESS, urlGeneratorId, initialState = {}, restoreState = {}, }: Partial, - { savedObjectsClient }: SearchSessionDependencies + deps: SearchSessionDependencies ) => { if (!name) throw new Error('Name is required'); if (!appId) throw new Error('AppId is required'); if (!urlGeneratorId) throw new Error('UrlGeneratorId is required'); - this.logger.debug(`save | ${sessionId}`); - - const attributes = { - name, - created, - expires, - status, - initialState, - restoreState, - idMapping: {}, - urlGeneratorId, - appId, + return this.updateOrCreate( sessionId, - }; - const session = await savedObjectsClient.create( + { + name, + appId, + urlGeneratorId, + initialState, + restoreState, + persisted: true, + }, + deps + ); + }; + + private create = ( + sessionId: string, + attributes: Partial, + { savedObjectsClient }: SearchSessionDependencies + ) => { + this.logger.debug(`create | ${sessionId}`); + return savedObjectsClient.create( SEARCH_SESSION_TYPE, - attributes, + { + sessionId, + status: SearchSessionStatus.IN_PROGRESS, + expires: new Date( + Date.now() + this.config.defaultExpiration.asMilliseconds() + ).toISOString(), + created: new Date().toISOString(), + touched: new Date().toISOString(), + idMapping: {}, + persisted: false, + ...attributes, + }, { id: sessionId } ); - - return session; }; // TODO: Throw an error if this session doesn't belong to this user @@ -325,7 +239,10 @@ export class SearchSessionService implements ISessionService { return savedObjectsClient.update( SEARCH_SESSION_TYPE, sessionId, - attributes + { + ...attributes, + touched: new Date().toISOString(), + } ); }; @@ -342,7 +259,7 @@ export class SearchSessionService implements ISessionService { public trackId = async ( searchRequest: IKibanaSearchRequest, searchId: string, - { sessionId, isStored, strategy }: ISearchOptions, + { sessionId, strategy }: ISearchOptions, deps: SearchSessionDependencies ) => { if (!sessionId || !searchId) return; @@ -354,22 +271,9 @@ export class SearchSessionService implements ISessionService { status: SearchStatus.IN_PROGRESS, }; - // If there is already a saved object for this session, update it to include this request/ID. - // Otherwise, just update the in-memory mapping for this session for when the session is saved. - if (isStored) { - const attributes = { - idMapping: { [requestHash]: searchInfo }, - }; - await this.update(sessionId, attributes, deps); - } else { - const map = this.sessionSearchMap.get(sessionId) ?? { - insertTime: moment(), - retryCount: 0, - ids: new Map(), - }; - map.ids.set(requestHash, searchInfo); - this.sessionSearchMap.set(sessionId, map); - } + const idMapping = { [requestHash]: searchInfo }; + + return this.updateOrCreate(sessionId, { idMapping }, deps); }; /** diff --git a/x-pack/plugins/data_enhanced/server/search/session/types.ts b/x-pack/plugins/data_enhanced/server/search/session/types.ts index c30e03f70d2dc..136c37942cb2e 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/types.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/types.ts @@ -4,8 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ +import { ConfigSchema } from '../../../config'; + export enum SearchStatus { IN_PROGRESS = 'in_progress', ERROR = 'error', COMPLETE = 'complete', } + +export type SearchSessionsConfig = ConfigSchema['search']['sessions']; From 2b3b90e454ce56fa7a11250dfc5a44d69c351cf1 Mon Sep 17 00:00:00 2001 From: Liza K Date: Thu, 28 Jan 2021 16:38:33 +0200 Subject: [PATCH 02/85] Get default search session expiration from config --- x-pack/plugins/data_enhanced/config.ts | 2 +- x-pack/plugins/data_enhanced/server/plugin.ts | 7 ++++++- .../server/search/es_search_strategy.ts | 14 ++++++++++---- .../data_enhanced/server/search/request_utils.ts | 4 +++- .../search/session/check_running_sessions.ts | 2 +- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/data_enhanced/config.ts b/x-pack/plugins/data_enhanced/config.ts index ca737d461e63d..7207d7e5131f9 100644 --- a/x-pack/plugins/data_enhanced/config.ts +++ b/x-pack/plugins/data_enhanced/config.ts @@ -12,7 +12,7 @@ export const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: false }), pageSize: schema.number({ defaultValue: 10000 }), trackingInterval: schema.duration({ defaultValue: '10s' }), - onScreenTimeout: schema.duration({ defaultValue: '10m' }), + onScreenTimeout: schema.duration({ defaultValue: '5m' }), notTouchedTimeout: schema.duration({ defaultValue: '1m' }), maxUpdateRetries: schema.number({ defaultValue: 3 }), defaultExpiration: schema.duration({ defaultValue: '7d' }), diff --git a/x-pack/plugins/data_enhanced/server/plugin.ts b/x-pack/plugins/data_enhanced/server/plugin.ts index cff0ee3efd738..834f1669e2d7e 100644 --- a/x-pack/plugins/data_enhanced/server/plugin.ts +++ b/x-pack/plugins/data_enhanced/server/plugin.ts @@ -5,6 +5,7 @@ */ import { CoreSetup, CoreStart, Logger, Plugin, PluginInitializerContext } from 'kibana/server'; +import { Observable } from 'rxjs'; import { TaskManagerSetupContract, TaskManagerStartContract } from '../../task_manager/server'; import { PluginSetup as DataPluginSetup, @@ -22,6 +23,7 @@ import { } from './search'; import { getUiSettings } from './ui_settings'; import type { DataEnhancedRequestHandlerContext } from './type'; +import { ConfigSchema } from '../config'; interface SetupDependencies { data: DataPluginSetup; @@ -37,9 +39,11 @@ export class EnhancedDataServerPlugin implements Plugin { private readonly logger: Logger; private sessionService!: SearchSessionService; + private config$: Observable; - constructor(private initializerContext: PluginInitializerContext) { + constructor(private initializerContext: PluginInitializerContext) { this.logger = initializerContext.logger.get('data_enhanced'); + this.config$ = this.initializerContext.config.create(); } public setup(core: CoreSetup, deps: SetupDependencies) { @@ -51,6 +55,7 @@ export class EnhancedDataServerPlugin deps.data.search.registerSearchStrategy( ENHANCED_ES_SEARCH_STRATEGY, enhancedEsSearchStrategyProvider( + this.config$, this.initializerContext.config.legacy.globalConfig$, this.logger, usage diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts index 54ed59b30952a..d02a028d803df 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts @@ -34,9 +34,11 @@ import { import { toAsyncKibanaSearchResponse } from './response_utils'; import { AsyncSearchResponse } from './types'; import { KbnServerError } from '../../../../../src/plugins/kibana_utils/server'; +import { ConfigSchema } from '../../config'; export const enhancedEsSearchStrategyProvider = ( - config$: Observable, + config$: Observable, + legacyConfig$: Observable, logger: Logger, usage?: SearchUsage ): ISearchStrategy => { @@ -52,9 +54,13 @@ export const enhancedEsSearchStrategyProvider = ( const client = esClient.asCurrentUser.asyncSearch; const search = async () => { + const config = await config$.pipe(first()).toPromise(); const params = id ? getDefaultAsyncGetParams() - : { ...(await getDefaultAsyncSubmitParams(uiSettingsClient, options)), ...request.params }; + : { + ...(await getDefaultAsyncSubmitParams(uiSettingsClient, config, options)), + ...request.params, + }; const promise = id ? client.get({ ...params, id }) : client.submit(params); @@ -79,12 +85,12 @@ export const enhancedEsSearchStrategyProvider = ( options: ISearchOptions, { esClient, uiSettingsClient }: SearchStrategyDependencies ): Promise { - const config = await config$.pipe(first()).toPromise(); + const legacyConfig = await legacyConfig$.pipe(first()).toPromise(); const { body, index, ...params } = request.params!; const method = 'POST'; const path = encodeURI(`/${index}/_rollup_search`); const querystring = { - ...getShardTimeout(config), + ...getShardTimeout(legacyConfig), ...(await getIgnoreThrottled(uiSettingsClient)), ...(await getDefaultSearchParams(uiSettingsClient)), ...params, diff --git a/x-pack/plugins/data_enhanced/server/search/request_utils.ts b/x-pack/plugins/data_enhanced/server/search/request_utils.ts index 12e9c1e35ed52..6f241bc863010 100644 --- a/x-pack/plugins/data_enhanced/server/search/request_utils.ts +++ b/x-pack/plugins/data_enhanced/server/search/request_utils.ts @@ -11,6 +11,7 @@ import { } from '@elastic/elasticsearch/api/requestParams'; import { ISearchOptions, UI_SETTINGS } from '../../../../../src/plugins/data/common'; import { getDefaultSearchParams } from '../../../../../src/plugins/data/server'; +import { ConfigSchema } from '../../config'; /** * @internal @@ -27,6 +28,7 @@ export async function getIgnoreThrottled( */ export async function getDefaultAsyncSubmitParams( uiSettingsClient: IUiSettingsClient, + config: ConfigSchema, options: ISearchOptions ): Promise< Pick< @@ -42,7 +44,7 @@ export async function getDefaultAsyncSubmitParams( > > { return { - keep_alive: '7d', + keep_alive: `${config.search.sessions.defaultExpiration.asMilliseconds()}ms`, batched_reduce_size: 64, keep_on_completion: !!options.sessionId, // Always return an ID, even if the request completes quickly ...getDefaultAsyncGetParams(), diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts index 3aba7af7b153e..2f59deffc313d 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts @@ -69,7 +69,7 @@ async function updateSessionStatus( const currentStatus = await getSearchStatus(client, searchInfo.id); if (currentStatus.status !== searchInfo.status) { - logger.warn(`${currentStatus.status}`); + logger.debug(`search ${searchInfo.id} | status changed to ${currentStatus.status}`); updateSearchRequest(currentStatus); } } catch (e) { From cd23cef302c25ea1306a0509e3b8359a549bc1aa Mon Sep 17 00:00:00 2001 From: Liza K Date: Thu, 28 Jan 2021 16:55:26 +0200 Subject: [PATCH 03/85] randomize sleep time --- .../server/search/session/session_service.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/session/session_service.ts b/x-pack/plugins/data_enhanced/server/search/session/session_service.ts index 1c5a857a630f6..33a557393e268 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/session_service.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/session_service.ts @@ -120,6 +120,13 @@ export class SearchSessionService implements ISessionService { | SavedObject | undefined > => { + const retryOnConflict = async (e: any) => { + this.logger.debug(`Conflict error | ${sessionId}`); + // Randomize sleep to spread updates out in case of conflicts + await sleep(100 + Math.random() * 50); + return await this.updateOrCreate(sessionId, attributes, deps, retry + 1); + }; + this.logger.debug(`updateOrCreate | ${sessionId} | ${retry}`); try { return await this.update(sessionId, attributes, deps); @@ -133,10 +140,7 @@ export class SearchSessionService implements ISessionService { SavedObjectsErrorHelpers.isConflictError(createError) && retry < this.config.maxUpdateRetries ) { - this.logger.debug(`Conflict error | ${sessionId}`); - // TODO: Randomize sleep - await sleep(100); - return await this.updateOrCreate(sessionId, attributes, deps, retry + 1); + return await retryOnConflict(createError); } else { this.logger.error(createError); } @@ -145,9 +149,7 @@ export class SearchSessionService implements ISessionService { SavedObjectsErrorHelpers.isConflictError(e) && retry < this.config.maxUpdateRetries ) { - this.logger.debug(`Conflict error | ${sessionId}`); - await sleep(100); - return await this.updateOrCreate(sessionId, attributes, deps, retry + 1); + return await retryOnConflict(e); } else { this.logger.error(e); } From 5f21181afd8cf62ff98e91b773b27c45017bf99a Mon Sep 17 00:00:00 2001 From: Liza K Date: Thu, 28 Jan 2021 17:29:50 +0200 Subject: [PATCH 04/85] fix test --- .../server/search/es_search_strategy.test.ts | 55 ++++++++++++++++--- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts index 3230895da7705..483cc61cbaa3e 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts @@ -7,6 +7,7 @@ import { enhancedEsSearchStrategyProvider } from './es_search_strategy'; import { BehaviorSubject } from 'rxjs'; import { SearchStrategyDependencies } from '../../../../../src/plugins/data/server/search'; +import moment from 'moment'; const mockAsyncResponse = { body: { @@ -56,7 +57,7 @@ describe('ES search strategy', () => { }, }, } as unknown) as SearchStrategyDependencies; - const mockConfig$ = new BehaviorSubject({ + const mockLegacyConfig$ = new BehaviorSubject({ elasticsearch: { shardTimeout: { asMilliseconds: () => { @@ -66,6 +67,16 @@ describe('ES search strategy', () => { }, }); + const mockConfig$ = new BehaviorSubject({ + search: { + sessions: { + defaultExpiration: () => { + return moment.duration('1', 'm'); + }, + }, + }, + }); + beforeEach(() => { mockApiCaller.mockClear(); mockGetCaller.mockClear(); @@ -74,7 +85,11 @@ describe('ES search strategy', () => { }); it('returns a strategy with `search and `cancel`', async () => { - const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); expect(typeof esSearch.search).toBe('function'); }); @@ -84,7 +99,11 @@ describe('ES search strategy', () => { mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); const params = { index: 'logstash-*', body: { query: {} } }; - const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); await esSearch.search({ params }, {}, mockDeps).toPromise(); @@ -98,7 +117,11 @@ describe('ES search strategy', () => { mockGetCaller.mockResolvedValueOnce(mockAsyncResponse); const params = { index: 'logstash-*', body: { query: {} } }; - const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); await esSearch.search({ id: 'foo', params }, {}, mockDeps).toPromise(); @@ -113,7 +136,11 @@ describe('ES search strategy', () => { mockApiCaller.mockResolvedValueOnce(mockRollupResponse); const params = { index: 'foo-程', body: {} }; - const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); await esSearch .search( @@ -136,7 +163,11 @@ describe('ES search strategy', () => { mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); const params = { index: 'foo-*', body: {} }; - const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); await esSearch.search({ params }, {}, mockDeps).toPromise(); @@ -152,7 +183,11 @@ describe('ES search strategy', () => { mockDeleteCaller.mockResolvedValueOnce(200); const id = 'some_id'; - const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); await esSearch.cancel!(id, {}, mockDeps); @@ -168,7 +203,11 @@ describe('ES search strategy', () => { const id = 'some_other_id'; const keepAlive = '1d'; - const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); await esSearch.extend!(id, keepAlive, {}, mockDeps); From cdcf56276d6503cbe8b0355a91250537f4b9bdf5 Mon Sep 17 00:00:00 2001 From: Liza K Date: Thu, 28 Jan 2021 18:42:42 +0200 Subject: [PATCH 05/85] fix test --- .../data_enhanced/server/search/es_search_strategy.test.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts index 483cc61cbaa3e..56baea0f1e23d 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts @@ -70,9 +70,7 @@ describe('ES search strategy', () => { const mockConfig$ = new BehaviorSubject({ search: { sessions: { - defaultExpiration: () => { - return moment.duration('1', 'm'); - }, + defaultExpiration: moment.duration('1', 'm'), }, }, }); @@ -129,7 +127,6 @@ describe('ES search strategy', () => { const request = mockGetCaller.mock.calls[0][0]; expect(request.id).toEqual('foo'); expect(request).toHaveProperty('wait_for_completion_timeout'); - expect(request).toHaveProperty('keep_alive'); }); it('calls the rollup API if the index is a rollup type', async () => { From 667c9d3c5dd3e6168673bdfd081c1cad99c29b7a Mon Sep 17 00:00:00 2001 From: Liza K Date: Thu, 28 Jan 2021 20:42:10 +0200 Subject: [PATCH 06/85] Make sure we poll, and dont persist, searches not in the context of a session --- .../server/search/es_search_strategy.ts | 2 +- .../server/search/request_utils.ts | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts index d02a028d803df..e393ed84a271b 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts @@ -56,7 +56,7 @@ export const enhancedEsSearchStrategyProvider = ( const search = async () => { const config = await config$.pipe(first()).toPromise(); const params = id - ? getDefaultAsyncGetParams() + ? getDefaultAsyncGetParams(options) : { ...(await getDefaultAsyncSubmitParams(uiSettingsClient, config, options)), ...request.params, diff --git a/x-pack/plugins/data_enhanced/server/search/request_utils.ts b/x-pack/plugins/data_enhanced/server/search/request_utils.ts index 6f241bc863010..da742f84629dc 100644 --- a/x-pack/plugins/data_enhanced/server/search/request_utils.ts +++ b/x-pack/plugins/data_enhanced/server/search/request_utils.ts @@ -33,6 +33,7 @@ export async function getDefaultAsyncSubmitParams( ): Promise< Pick< AsyncSearchSubmit, + | 'keep_alive' | 'batched_reduce_size' | 'keep_alive' | 'wait_for_completion_timeout' @@ -44,23 +45,32 @@ export async function getDefaultAsyncSubmitParams( > > { return { - keep_alive: `${config.search.sessions.defaultExpiration.asMilliseconds()}ms`, batched_reduce_size: 64, keep_on_completion: !!options.sessionId, // Always return an ID, even if the request completes quickly - ...getDefaultAsyncGetParams(), + ...getDefaultAsyncGetParams(options), ...(await getIgnoreThrottled(uiSettingsClient)), ...(await getDefaultSearchParams(uiSettingsClient)), + ...(options.sessionId + ? { + keep_alive: `${config.search.sessions.defaultExpiration.asMilliseconds()}ms`, + } + : {}), }; } /** @internal */ -export function getDefaultAsyncGetParams(): Pick< - AsyncSearchGet, - 'keep_alive' | 'wait_for_completion_timeout' -> { +export function getDefaultAsyncGetParams( + options: ISearchOptions +): Pick { return { wait_for_completion_timeout: '100ms', // Wait up to 100ms for the response to return + ...(options.sessionId + ? undefined + : { + keep_alive: '1m', + // We still need to do polling for searches not within the context of a search session + }), }; } From 763746b208a237457aacc9fff88f51b06d698beb Mon Sep 17 00:00:00 2001 From: Liza K Date: Thu, 28 Jan 2021 22:38:24 +0200 Subject: [PATCH 07/85] Added keepalive unit tests --- .../server/search/es_search_strategy.test.ts | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts index 56baea0f1e23d..f3e8189ca97a4 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts @@ -93,7 +93,7 @@ describe('ES search strategy', () => { }); describe('search', () => { - it('makes a POST request to async search with params when no ID is provided', async () => { + it('makes a POST request with params when no ID is provided', async () => { mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); const params = { index: 'logstash-*', body: { query: {} } }; @@ -109,6 +109,27 @@ describe('ES search strategy', () => { const request = mockSubmitCaller.mock.calls[0][0]; expect(request.index).toEqual(params.index); expect(request.body).toEqual(params.body); + expect(request).toHaveProperty('keep_alive', '1m'); + }); + + it('makes a POST request with params when sessionId is provided, with long keepalive', async () => { + mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); + + const params = { index: 'logstash-*', body: { query: {} } }; + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); + + await esSearch.search({ params }, { sessionId: '1' }, mockDeps).toPromise(); + + expect(mockSubmitCaller).toBeCalled(); + const request = mockSubmitCaller.mock.calls[0][0]; + expect(request.index).toEqual(params.index); + expect(request.body).toEqual(params.body); + + expect(request).toHaveProperty('keep_alive', '60000ms'); }); it('makes a GET request to async search with ID when ID is provided', async () => { @@ -127,6 +148,26 @@ describe('ES search strategy', () => { const request = mockGetCaller.mock.calls[0][0]; expect(request.id).toEqual('foo'); expect(request).toHaveProperty('wait_for_completion_timeout'); + expect(request).toHaveProperty('keep_alive', '1m'); + }); + + it('makes a GET request to async search without keepalive when session ID is provided', async () => { + mockGetCaller.mockResolvedValueOnce(mockAsyncResponse); + + const params = { index: 'logstash-*', body: { query: {} } }; + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); + + await esSearch.search({ id: 'foo', params }, { sessionId: '1' }, mockDeps).toPromise(); + + expect(mockGetCaller).toBeCalled(); + const request = mockGetCaller.mock.calls[0][0]; + expect(request.id).toEqual('foo'); + expect(request).toHaveProperty('wait_for_completion_timeout'); + expect(request).not.toHaveProperty('keep_alive'); }); it('calls the rollup API if the index is a rollup type', async () => { From 01f292deaadbecf3d7b3047a68360534b39067a7 Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Fri, 29 Jan 2021 10:06:51 +0100 Subject: [PATCH 08/85] fix ts --- .../data_enhanced/server/search/eql_search_strategy.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.ts b/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.ts index a0d4e9dcd19b9..f86cb1a0a349f 100644 --- a/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.ts +++ b/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.ts @@ -41,11 +41,11 @@ export const eqlSearchStrategyProvider = ( uiSettingsClient ); const params = id - ? getDefaultAsyncGetParams() + ? getDefaultAsyncGetParams(options) : { ...(await getIgnoreThrottled(uiSettingsClient)), ...defaultParams, - ...getDefaultAsyncGetParams(), + ...getDefaultAsyncGetParams(options), ...request.params, }; const promise = id From 2d75b963bc3a4b33c34400e6470fb7a6f2ad250e Mon Sep 17 00:00:00 2001 From: Liza K Date: Sun, 31 Jan 2021 12:46:08 +0200 Subject: [PATCH 09/85] code review @lukasolson --- .../data_enhanced/public/search/sessions_mgmt/lib/api.ts | 5 +++-- x-pack/plugins/data_enhanced/server/routes/session.ts | 6 +++++- x-pack/plugins/data_enhanced/server/search/request_utils.ts | 1 - .../server/search/session/check_running_sessions.ts | 4 ++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts index a1bbda5dc7cb3..6f1836ef98b11 100644 --- a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts +++ b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts @@ -10,7 +10,7 @@ import moment from 'moment'; import { from, race, timer } from 'rxjs'; import { mapTo, tap } from 'rxjs/operators'; import type { SharePluginStart } from 'src/plugins/share/public'; -import type { ISessionsClient } from '../../../../../../../src/plugins/data/public'; +import { esKuery, ISessionsClient } from '../../../../../../../src/plugins/data/public'; import { nodeBuilder } from '../../../../../../../src/plugins/data/common'; import { SearchSessionStatus, SEARCH_SESSION_TYPE } from '../../../../common/search'; import { ACTION } from '../components/actions'; @@ -110,7 +110,8 @@ export class SearchSessionsMgmtAPI { perPage: mgmtConfig.maxSessions, sortField: 'created', sortOrder: 'asc', - filter: nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.persisted`, 'true'), + searchFields: ['persisted'], + search: 'true', }) ); const timeout$ = timer(refreshTimeout.asMilliseconds()).pipe( diff --git a/x-pack/plugins/data_enhanced/server/routes/session.ts b/x-pack/plugins/data_enhanced/server/routes/session.ts index cbf683bd18fd2..1b9f65aab728d 100644 --- a/x-pack/plugins/data_enhanced/server/routes/session.ts +++ b/x-pack/plugins/data_enhanced/server/routes/session.ts @@ -91,11 +91,13 @@ export function registerSessionRoutes(router: DataEnhancedPluginRouter, logger: sortField: schema.maybe(schema.string()), sortOrder: schema.maybe(schema.string()), filter: schema.maybe(schema.string()), + searchFields: schema.arrayOf(schema.string()), + search: schema.string(), }), }, }, async (context, request, res) => { - const { page, perPage, sortField, sortOrder, filter } = request.body; + const { page, perPage, sortField, sortOrder, filter, searchFields, search } = request.body; try { const response = await context.search!.session.find({ page, @@ -103,6 +105,8 @@ export function registerSessionRoutes(router: DataEnhancedPluginRouter, logger: sortField, sortOrder, filter, + searchFields, + search, }); return res.ok({ diff --git a/x-pack/plugins/data_enhanced/server/search/request_utils.ts b/x-pack/plugins/data_enhanced/server/search/request_utils.ts index da742f84629dc..d9ef3ab3292c3 100644 --- a/x-pack/plugins/data_enhanced/server/search/request_utils.ts +++ b/x-pack/plugins/data_enhanced/server/search/request_utils.ts @@ -33,7 +33,6 @@ export async function getDefaultAsyncSubmitParams( ): Promise< Pick< AsyncSearchSubmit, - | 'keep_alive' | 'batched_reduce_size' | 'keep_alive' | 'wait_for_completion_timeout' diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts index 2f59deffc313d..07249fbba3336 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts @@ -28,7 +28,7 @@ export interface CheckRunningSessionsDeps { logger: Logger; } -function checkNotPersistedSession( +function isSessionStale( session: SavedObjectsFindResult, config: SearchSessionsConfig, logger: Logger @@ -129,7 +129,7 @@ export async function checkRunningSessions( let deleted = false; if (!session.attributes.persisted) { - if (checkNotPersistedSession(session, config, logger)) { + if (isSessionStale(session, config, logger)) { deleted = true; // delete saved object to free up memory // TODO: there's a potential rare edge case of deleting an object and then receiving a new trackId for that same session! From 1cd21fd4a100594cdcfe915bfb6505fd1c750d15 Mon Sep 17 00:00:00 2001 From: Liza K Date: Sun, 31 Jan 2021 14:03:56 +0200 Subject: [PATCH 10/85] ts --- .../data_enhanced/public/search/sessions_mgmt/lib/api.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts index 6f1836ef98b11..25c06d1d2e278 100644 --- a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts +++ b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/lib/api.ts @@ -10,9 +10,8 @@ import moment from 'moment'; import { from, race, timer } from 'rxjs'; import { mapTo, tap } from 'rxjs/operators'; import type { SharePluginStart } from 'src/plugins/share/public'; -import { esKuery, ISessionsClient } from '../../../../../../../src/plugins/data/public'; -import { nodeBuilder } from '../../../../../../../src/plugins/data/common'; -import { SearchSessionStatus, SEARCH_SESSION_TYPE } from '../../../../common/search'; +import { ISessionsClient } from '../../../../../../../src/plugins/data/public'; +import { SearchSessionStatus } from '../../../../common/search'; import { ACTION } from '../components/actions'; import { PersistedSearchSessionSavedObjectAttributes, UISession } from '../types'; import { SessionsConfigSchema } from '..'; From a9cc263ec825d0b6cdf9453cbca95d83182d7346 Mon Sep 17 00:00:00 2001 From: Liza K Date: Sun, 31 Jan 2021 18:10:34 +0200 Subject: [PATCH 11/85] More tests, rename onScreenTimeout to completedTimeout --- x-pack/plugins/data_enhanced/config.ts | 2 +- .../data_enhanced/server/routes/session.ts | 4 +- .../session/check_running_sessions.test.ts | 2 +- .../search/session/check_running_sessions.ts | 5 +- .../search/session/session_service.test.ts | 2 +- .../server/search/session/session_service.ts | 19 +- .../api_integration/apis/search/session.ts | 177 +++++++++++++++++- x-pack/test/api_integration/config.ts | 2 + .../async_search/send_to_background.ts | 1 + .../send_to_background_relative_time.ts | 31 +-- 10 files changed, 202 insertions(+), 43 deletions(-) diff --git a/x-pack/plugins/data_enhanced/config.ts b/x-pack/plugins/data_enhanced/config.ts index 7207d7e5131f9..27413b64e474b 100644 --- a/x-pack/plugins/data_enhanced/config.ts +++ b/x-pack/plugins/data_enhanced/config.ts @@ -12,7 +12,7 @@ export const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: false }), pageSize: schema.number({ defaultValue: 10000 }), trackingInterval: schema.duration({ defaultValue: '10s' }), - onScreenTimeout: schema.duration({ defaultValue: '5m' }), + completedTimeout: schema.duration({ defaultValue: '5m' }), notTouchedTimeout: schema.duration({ defaultValue: '1m' }), maxUpdateRetries: schema.number({ defaultValue: 3 }), defaultExpiration: schema.duration({ defaultValue: '7d' }), diff --git a/x-pack/plugins/data_enhanced/server/routes/session.ts b/x-pack/plugins/data_enhanced/server/routes/session.ts index 1b9f65aab728d..622d4d68413ca 100644 --- a/x-pack/plugins/data_enhanced/server/routes/session.ts +++ b/x-pack/plugins/data_enhanced/server/routes/session.ts @@ -91,8 +91,8 @@ export function registerSessionRoutes(router: DataEnhancedPluginRouter, logger: sortField: schema.maybe(schema.string()), sortOrder: schema.maybe(schema.string()), filter: schema.maybe(schema.string()), - searchFields: schema.arrayOf(schema.string()), - search: schema.string(), + searchFields: schema.maybe(schema.arrayOf(schema.string())), + search: schema.maybe(schema.string()), }), }, }, diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts index 917663252bc8b..ac00668ca7b69 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts @@ -18,7 +18,7 @@ describe('getSearchStatus', () => { enabled: true, pageSize: 10000, notTouchedTimeout: moment.duration(1, 'm'), - onScreenTimeout: moment.duration(5, 'm'), + completedTimeout: moment.duration(5, 'm'), maxUpdateRetries: 3, defaultExpiration: moment.duration(7, 'd'), trackingInterval: moment.duration(10, 's'), diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts index 07249fbba3336..4d5cd0a3231b7 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts @@ -34,12 +34,13 @@ function isSessionStale( logger: Logger ) { const curTime = moment(); - // Delete if a running session wasn't polled for in the last notTouchedTimeout OR if a completed session wasn't saved for within onScreenTimeout + // Delete if a running session wasn't polled for in the last notTouchedTimeout OR if a completed session wasn't saved for within onScreenTicompletedTimeoutmeout return ( (session.attributes.status === SearchSessionStatus.IN_PROGRESS && curTime.diff(moment(session.attributes.touched), 'ms') > config.notTouchedTimeout.asMilliseconds()) || - curTime.diff(moment(session.attributes.created), 'ms') > config.onScreenTimeout.asMilliseconds() + curTime.diff(moment(session.attributes.created), 'ms') > + config.completedTimeout.asMilliseconds() ); } diff --git a/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts b/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts index 10549b18f521a..8671c5c42a54c 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts @@ -52,7 +52,7 @@ describe('SearchSessionService', () => { enabled: true, pageSize: 10000, notTouchedTimeout: moment.duration(1, 'm'), - onScreenTimeout: moment.duration(2, 'm'), + completedTimeout: moment.duration(2, 'm'), maxUpdateRetries: MAX_UPDATE_RETRIES, defaultExpiration: moment.duration(7, 'd'), trackingInterval: moment.duration(10, 's'), diff --git a/x-pack/plugins/data_enhanced/server/search/session/session_service.ts b/x-pack/plugins/data_enhanced/server/search/session/session_service.ts index 33a557393e268..e6c2b60e4a79d 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/session_service.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/session_service.ts @@ -32,6 +32,7 @@ import { TaskManagerStartContract, } from '../../../../task_manager/server'; import { + SearchSessionRequestInfo, SearchSessionSavedObjectAttributes, SearchSessionStatus, SEARCH_SESSION_TYPE, @@ -266,14 +267,18 @@ export class SearchSessionService implements ISessionService { ) => { if (!sessionId || !searchId) return; this.logger.debug(`trackId | ${sessionId} | ${searchId}`); - const requestHash = createRequestHash(searchRequest.params); - const searchInfo = { - id: searchId, - strategy: strategy!, - status: SearchStatus.IN_PROGRESS, - }; - const idMapping = { [requestHash]: searchInfo }; + let idMapping: Record = {}; + + if (searchRequest.params) { + const requestHash = createRequestHash(searchRequest.params); + const searchInfo = { + id: searchId, + strategy: strategy!, + status: SearchStatus.IN_PROGRESS, + }; + idMapping = { [requestHash]: searchInfo }; + } return this.updateOrCreate(sessionId, { idMapping }, deps); }; diff --git a/x-pack/test/api_integration/apis/search/session.ts b/x-pack/test/api_integration/apis/search/session.ts index ee2e4337adc95..fed8b649becc6 100644 --- a/x-pack/test/api_integration/apis/search/session.ts +++ b/x-pack/test/api_integration/apis/search/session.ts @@ -12,6 +12,20 @@ export default function ({ getService }: FtrProviderContext) { describe('search session', () => { describe('session management', () => { + it('should fail to create a session with no name', async () => { + const sessionId = `my-session-${Math.random()}`; + await supertest + .post(`/internal/session`) + .set('kbn-xsrf', 'foo') + .send({ + sessionId, + appId: 'discover', + expires: '123', + urlGeneratorId: 'discover', + }) + .expect(400); + }); + it('should create and get a session', async () => { const sessionId = `my-session-${Math.random()}`; await supertest @@ -52,7 +66,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest.get(`/internal/session/${sessionId}`).set('kbn-xsrf', 'foo').expect(404); }); - it('should sync search ids into session', async () => { + it('should sync search ids into persisted session', async () => { const sessionId = `my-session-${Math.random()}`; // run search @@ -76,7 +90,7 @@ export default function ({ getService }: FtrProviderContext) { const { id: id1 } = searchRes1.body; - // create session + // persist session await supertest .post(`/internal/session`) .set('kbn-xsrf', 'foo') @@ -108,21 +122,170 @@ export default function ({ getService }: FtrProviderContext) { const { id: id2 } = searchRes2.body; - // wait 10 seconds for ids to be synced - // TODO: make the refresh interval dynamic, so we can speed it up! - await new Promise((resolve) => setTimeout(resolve, 10000)); - const resp = await supertest .get(`/internal/session/${sessionId}`) .set('kbn-xsrf', 'foo') .expect(200); - const { idMapping } = resp.body.attributes; + const { name, touched, created, persisted, idMapping } = resp.body.attributes; + expect(persisted).to.be(true); + expect(name).to.be('My Session'); + expect(touched).not.to.be(undefined); + expect(created).not.to.be(undefined); const idMappings = Object.values(idMapping).map((value: any) => value.id); expect(idMappings).to.contain(id1); expect(idMappings).to.contain(id2); }); }); + + it('should sync search ids into not persisted session', async () => { + const sessionId = `my-session-${Math.random()}`; + + // run search + const searchRes1 = await supertest + .post(`/internal/search/ese`) + .set('kbn-xsrf', 'foo') + .send({ + sessionId, + params: { + body: { + query: { + term: { + agent: '1', + }, + }, + }, + wait_for_completion_timeout: '1ms', + }, + }) + .expect(200); + + const { id: id1 } = searchRes1.body; + + // run search + const searchRes2 = await supertest + .post(`/internal/search/ese`) + .set('kbn-xsrf', 'foo') + .send({ + sessionId, + params: { + body: { + query: { + match_all: {}, + }, + }, + wait_for_completion_timeout: '1ms', + }, + }) + .expect(200); + + const { id: id2 } = searchRes2.body; + + const resp = await supertest + .get(`/internal/session/${sessionId}`) + .set('kbn-xsrf', 'foo') + .expect(200); + + const { appId, name, touched, created, persisted, idMapping } = resp.body.attributes; + expect(persisted).to.be(false); + expect(name).to.be(undefined); + expect(appId).to.be(undefined); + expect(touched).not.to.be(undefined); + expect(created).not.to.be(undefined); + + const idMappings = Object.values(idMapping).map((value: any) => value.id); + expect(idMappings).to.contain(id1); + expect(idMappings).to.contain(id2); + }); + + it('touched time updates when you poll on an search', async () => { + const sessionId = `my-session-${Math.random()}`; + + // run search + const searchRes1 = await supertest + .post(`/internal/search/ese`) + .set('kbn-xsrf', 'foo') + .send({ + sessionId, + params: { + body: { + query: { + term: { + agent: '1', + }, + }, + }, + wait_for_completion_timeout: '1ms', + }, + }) + .expect(200); + + const { id: id1 } = searchRes1.body; + + // it might take the session a moment to be created + await new Promise((resolve) => setTimeout(resolve, 1000)); + + const getSessionFirstTime = await supertest + .get(`/internal/session/${sessionId}`) + .set('kbn-xsrf', 'foo') + .expect(200); + + // poll on search + await supertest + .post(`/internal/search/ese/${id1}`) + .set('kbn-xsrf', 'foo') + .send({ + sessionId, + }) + .expect(200); + + const getSessionSecondTime = await supertest + .get(`/internal/session/${sessionId}`) + .set('kbn-xsrf', 'foo') + .expect(200); + + expect(getSessionFirstTime.body.attributes.sessionId).to.be.equal( + getSessionSecondTime.body.attributes.sessionId + ); + expect(getSessionFirstTime.body.attributes.touched).to.be.lessThan( + getSessionSecondTime.body.attributes.touched + ); + }); + + it('session is cleared by monitoring task if notTouchedTimeout expires', async () => { + const sessionId = `my-session-${Math.random()}`; + + // run search + const searchRes1 = await supertest + .post(`/internal/search/ese`) + .set('kbn-xsrf', 'foo') + .send({ + sessionId, + params: { + body: { + query: { + term: { + agent: '1', + }, + }, + }, + wait_for_completion_timeout: '1ms', + }, + }) + .expect(200); + + const { id: id1 } = searchRes1.body; + + // it might take the session a moment to be created + await new Promise((resolve) => setTimeout(resolve, 1000)); + + await supertest.get(`/internal/session/${sessionId}`).set('kbn-xsrf', 'foo').expect(200); + + // wait for session to expire due to completedTimeout (as if user stayed on screen and didn't save the search session) + await new Promise((resolve) => setTimeout(resolve, 20000)); + + await supertest.get(`/internal/session/${sessionId}`).set('kbn-xsrf', 'foo').expect(404); + }); }); } diff --git a/x-pack/test/api_integration/config.ts b/x-pack/test/api_integration/config.ts index 546b23ab4f26c..03d0634aada69 100644 --- a/x-pack/test/api_integration/config.ts +++ b/x-pack/test/api_integration/config.ts @@ -31,6 +31,8 @@ export async function getApiIntegrationConfig({ readConfigFile }: FtrConfigProvi '--xpack.fleet.enabled=true', '--xpack.fleet.agents.pollingRequestTimeout=5000', // 5 seconds '--xpack.data_enhanced.search.sessions.enabled=true', // enable WIP send to background UI + '--xpack.data_enhanced.search.sessions.completedTimeout=15s', // shorten completedTimeout for quicker testing + '--xpack.data_enhanced.search.sessions.trackingInterval=2s', // shorten trackingInterval for quicker testing ], }, esTestCluster: { diff --git a/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background.ts b/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background.ts index 7e878e763bfc1..6a4cfba513539 100644 --- a/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background.ts +++ b/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background.ts @@ -80,6 +80,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); // load URL to restore a saved session + // TODO: replace with clicking on "Re-run link" const url = await browser.getCurrentUrl(); const savedSessionURL = `${url}&searchSessionId=${savedSessionId}`; await browser.get(savedSessionURL); diff --git a/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background_relative_time.ts b/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background_relative_time.ts index 25291fd74b322..5d5cdb29523bd 100644 --- a/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background_relative_time.ts +++ b/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background_relative_time.ts @@ -19,13 +19,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'home', 'timePicker', 'maps', + 'searchSessionsManagement', ]); const dashboardPanelActions = getService('dashboardPanelActions'); const inspector = getService('inspector'); const pieChart = getService('pieChart'); const find = getService('find'); const dashboardExpect = getService('dashboardExpect'); - const browser = getService('browser'); const searchSessions = getService('searchSessions'); describe('send to background with relative time', () => { @@ -59,23 +59,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.timePicker.pauseAutoRefresh(); // sample data has auto-refresh on await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.dashboard.waitForRenderComplete(); - await checkSampleDashboardLoaded(); await searchSessions.expectState('completed'); await searchSessions.save(); await searchSessions.expectState('backgroundCompleted'); - const savedSessionId = await dashboardPanelActions.getSearchSessionIdByTitle( - '[Flights] Airline Carrier' - ); - const resolvedTimeRange = await getResolvedTimeRangeFromPanel('[Flights] Airline Carrier'); + + await checkSampleDashboardLoaded(); // load URL to restore a saved session - const url = await browser.getCurrentUrl(); - const savedSessionURL = `${url}&searchSessionId=${savedSessionId}` - .replace('now-24h', `'${resolvedTimeRange.gte}'`) - .replace('now', `'${resolvedTimeRange.lte}'`); - log.debug('Trying to restore session by URL:', savedSessionId); - await browser.get(savedSessionURL); + await PageObjects.searchSessionsManagement.goTo(); + const searchSessionList = await PageObjects.searchSessionsManagement.getList(); + + // navigate to dashboard + await searchSessionList[0].view(); + await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.dashboard.waitForRenderComplete(); await checkSampleDashboardLoaded(); @@ -87,16 +84,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // HELPERS - async function getResolvedTimeRangeFromPanel( - panelTitle: string - ): Promise<{ gte: string; lte: string }> { - await dashboardPanelActions.openInspectorByTitle(panelTitle); - await inspector.openInspectorRequestsView(); - await (await inspector.getOpenRequestDetailRequestButton()).click(); - const request = JSON.parse(await inspector.getCodeEditorValue()); - return request.query.bool.filter.find((f: any) => f.range).range.timestamp; - } - async function checkSampleDashboardLoaded() { log.debug('Checking no error labels'); await testSubjects.missingOrFail('embeddableErrorLabel'); From bfcbdb23c79ffa97f10f2145562a52fb0e752b33 Mon Sep 17 00:00:00 2001 From: Liza K Date: Sun, 31 Jan 2021 18:17:56 +0200 Subject: [PATCH 12/85] lint --- x-pack/test/api_integration/apis/search/session.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/x-pack/test/api_integration/apis/search/session.ts b/x-pack/test/api_integration/apis/search/session.ts index fed8b649becc6..d5649bacb1cb0 100644 --- a/x-pack/test/api_integration/apis/search/session.ts +++ b/x-pack/test/api_integration/apis/search/session.ts @@ -275,8 +275,6 @@ export default function ({ getService }: FtrProviderContext) { }) .expect(200); - const { id: id1 } = searchRes1.body; - // it might take the session a moment to be created await new Promise((resolve) => setTimeout(resolve, 1000)); From 9b914f6c22a2f7338766efd61c91a3584576a7a0 Mon Sep 17 00:00:00 2001 From: Liza K Date: Sun, 31 Jan 2021 18:20:06 +0200 Subject: [PATCH 13/85] lint --- x-pack/test/api_integration/apis/search/session.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/test/api_integration/apis/search/session.ts b/x-pack/test/api_integration/apis/search/session.ts index d5649bacb1cb0..691382222597a 100644 --- a/x-pack/test/api_integration/apis/search/session.ts +++ b/x-pack/test/api_integration/apis/search/session.ts @@ -257,7 +257,7 @@ export default function ({ getService }: FtrProviderContext) { const sessionId = `my-session-${Math.random()}`; // run search - const searchRes1 = await supertest + await supertest .post(`/internal/search/ese`) .set('kbn-xsrf', 'foo') .send({ From 7ab767d93cc16ac2ad70693e1aea6960d709a2b2 Mon Sep 17 00:00:00 2001 From: Liza K Date: Sun, 31 Jan 2021 19:56:34 +0200 Subject: [PATCH 14/85] Delete async seaches --- .../server/search/eql_search_strategy.ts | 3 +- .../session/check_running_sessions.test.ts | 85 ++++++++++++++++++- .../search/session/check_running_sessions.ts | 15 +++- .../server/search/session/session_service.ts | 3 +- 4 files changed, 99 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.ts b/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.ts index f86cb1a0a349f..65ce5bdf5255c 100644 --- a/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.ts +++ b/x-pack/plugins/data_enhanced/server/search/eql_search_strategy.ts @@ -22,7 +22,8 @@ export const eqlSearchStrategyProvider = ( logger: Logger ): ISearchStrategy => { async function cancelAsyncSearch(id: string, esClient: IScopedClusterClient) { - await esClient.asCurrentUser.asyncSearch.delete({ id }); + const client = esClient.asCurrentUser.eql; + await client.delete({ id }); } return { diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts index ac00668ca7b69..ebfa3575417b7 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts @@ -5,7 +5,12 @@ */ import { checkRunningSessions } from './check_running_sessions'; -import { SearchSessionStatus, SearchSessionSavedObjectAttributes } from '../../../common'; +import { + SearchSessionStatus, + SearchSessionSavedObjectAttributes, + ENHANCED_ES_SEARCH_STRATEGY, + EQL_SEARCH_STRATEGY, +} from '../../../common'; import { savedObjectsClientMock } from '../../../../../../src/core/server/mocks'; import type { SavedObjectsClientContract } from 'kibana/server'; import { SearchSessionsConfig, SearchStatus } from './types'; @@ -35,6 +40,11 @@ describe('getSearchStatus', () => { mockClient = { asyncSearch: { status: jest.fn(), + delete: jest.fn(), + }, + eql: { + status: jest.fn(), + delete: jest.fn(), }, }; }); @@ -162,7 +172,12 @@ describe('getSearchStatus', () => { status: SearchSessionStatus.IN_PROGRESS, created: moment().subtract(moment.duration(3, 'm')), touched: moment().subtract(moment.duration(2, 'm')), - idMapping: {}, + idMapping: { + 'map-key': { + strategy: ENHANCED_ES_SEARCH_STRATEGY, + id: 'async-id', + }, + }, }, }, ], @@ -180,9 +195,16 @@ describe('getSearchStatus', () => { expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); expect(savedObjectsClient.delete).toBeCalled(); + + expect(mockClient.asyncSearch.delete).toBeCalled(); + + const { id } = mockClient.asyncSearch.delete.mock.calls[0][0]; + expect(id).toBe('async-id'); }); test('deletes a completed, not persisted session', async () => { + mockClient.asyncSearch.delete = jest.fn().mockResolvedValue(true); + savedObjectsClient.find.mockResolvedValue({ saved_objects: [ { @@ -192,7 +214,59 @@ describe('getSearchStatus', () => { status: SearchSessionStatus.COMPLETE, created: moment().subtract(moment.duration(30, 'm')), touched: moment().subtract(moment.duration(5, 'm')), - idMapping: {}, + idMapping: { + 'map-key': { + strategy: ENHANCED_ES_SEARCH_STRATEGY, + id: 'async-id', + }, + 'eql-map-key': { + strategy: EQL_SEARCH_STRATEGY, + id: 'eql-async-id', + }, + }, + }, + }, + ], + total: 1, + } as any); + + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + + expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); + expect(savedObjectsClient.delete).toBeCalled(); + + expect(mockClient.asyncSearch.delete).toBeCalled(); + expect(mockClient.eql.delete).not.toBeCalled(); + + const { id } = mockClient.asyncSearch.delete.mock.calls[0][0]; + expect(id).toBe('async-id'); + }); + + test('ignores errors thrown while deleting async searches', async () => { + mockClient.asyncSearch.delete = jest.fn().mockRejectedValueOnce(false); + + savedObjectsClient.find.mockResolvedValue({ + saved_objects: [ + { + id: '123', + attributes: { + persisted: false, + status: SearchSessionStatus.COMPLETE, + created: moment().subtract(moment.duration(30, 'm')), + touched: moment().subtract(moment.duration(5, 'm')), + idMapping: { + 'map-key': { + strategy: ENHANCED_ES_SEARCH_STRATEGY, + id: 'async-id', + }, + }, }, }, ], @@ -210,6 +284,11 @@ describe('getSearchStatus', () => { expect(savedObjectsClient.bulkUpdate).not.toBeCalled(); expect(savedObjectsClient.delete).toBeCalled(); + + expect(mockClient.asyncSearch.delete).toBeCalled(); + + const { id } = mockClient.asyncSearch.delete.mock.calls[0][0]; + expect(id).toBe('async-id'); }); }); diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts index 4d5cd0a3231b7..5aea9c86d956c 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts @@ -17,6 +17,7 @@ import { SearchSessionSavedObjectAttributes, SearchSessionRequestInfo, SEARCH_SESSION_TYPE, + ENHANCED_ES_SEARCH_STRATEGY, } from '../../../common'; import { getSearchStatus } from './get_search_status'; import { getSessionStatus } from './get_session_status'; @@ -138,7 +139,19 @@ export async function checkRunningSessions( logger.debug(`Deleting stale session | ${session.id}`); await savedObjectsClient.delete(SEARCH_SESSION_TYPE, session.id); - // TODO cancel running search requests + // Send a delete request for each async search to ES + Object.keys(session.attributes.idMapping).map(async (searchKey: string) => { + const searchInfo = session.attributes.idMapping[searchKey]; + if (searchInfo.strategy === ENHANCED_ES_SEARCH_STRATEGY) { + try { + await client.asyncSearch.delete({ id: searchInfo.id }); + } catch (e) { + logger.debug( + `Error ignored while deleting async_search ${searchInfo.id}: ${e.message}` + ); + } + } + }); } } diff --git a/x-pack/plugins/data_enhanced/server/search/session/session_service.ts b/x-pack/plugins/data_enhanced/server/search/session/session_service.ts index e6c2b60e4a79d..c8a8b58de25bb 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/session_service.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/session_service.ts @@ -255,8 +255,7 @@ export class SearchSessionService implements ISessionService { }; /** - * Tracks the given search request/search ID in the saved session (if it exists). Otherwise, just - * store it in memory until a saved session exists. + * Tracks the given search request/search ID in the saved session. * @internal */ public trackId = async ( From 4f43096c64c4b27205ecd8fd3aecfd1426da6892 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Mon, 1 Feb 2021 10:28:49 +0100 Subject: [PATCH 15/85] [Fleet] Remove comments around experimental registry (#89830) The experimental registry was used for the 7.8 release but since then was not touched anymore. Because of this it should not show up in the code anymore even if it is commented out. --- .../plugins/fleet/server/services/epm/registry/registry_url.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/x-pack/plugins/fleet/server/services/epm/registry/registry_url.ts b/x-pack/plugins/fleet/server/services/epm/registry/registry_url.ts index efc25cc2efb5d..4f17a2b88670a 100644 --- a/x-pack/plugins/fleet/server/services/epm/registry/registry_url.ts +++ b/x-pack/plugins/fleet/server/services/epm/registry/registry_url.ts @@ -11,12 +11,10 @@ import { appContextService, licenseService } from '../../'; const PRODUCTION_REGISTRY_URL_CDN = 'https://epr.elastic.co'; // const STAGING_REGISTRY_URL_CDN = 'https://epr-staging.elastic.co'; -// const EXPERIMENTAL_REGISTRY_URL_CDN = 'https://epr-experimental.elastic.co/'; const SNAPSHOT_REGISTRY_URL_CDN = 'https://epr-snapshot.elastic.co'; // const PRODUCTION_REGISTRY_URL_NO_CDN = 'https://epr.ea-web.elastic.dev'; // const STAGING_REGISTRY_URL_NO_CDN = 'https://epr-staging.ea-web.elastic.dev'; -// const EXPERIMENTAL_REGISTRY_URL_NO_CDN = 'https://epr-experimental.ea-web.elastic.dev/'; // const SNAPSHOT_REGISTRY_URL_NO_CDN = 'https://epr-snapshot.ea-web.elastic.dev'; const getDefaultRegistryUrl = (): string => { From c2f53a96ebb6e4a5a9a8e4dcbbcde33aa4d1f20d Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Mon, 1 Feb 2021 10:40:38 +0100 Subject: [PATCH 16/85] [Search Sessions][Dashboard] Clear search session when navigating from dashboard route (#89749) --- src/plugins/dashboard/public/application/dashboard_app.tsx | 7 +++++++ .../apps/dashboard/async_search/send_to_background.ts | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/plugins/dashboard/public/application/dashboard_app.tsx b/src/plugins/dashboard/public/application/dashboard_app.tsx index 7ea181715717b..6955365ebca3f 100644 --- a/src/plugins/dashboard/public/application/dashboard_app.tsx +++ b/src/plugins/dashboard/public/application/dashboard_app.tsx @@ -265,6 +265,13 @@ export function DashboardApp({ }; }, [dashboardStateManager, dashboardContainer, onAppLeave, embeddable]); + // clear search session when leaving dashboard route + useEffect(() => { + return () => { + data.search.session.clear(); + }; + }, [data.search.session]); + return (
{savedDashboard && dashboardStateManager && dashboardContainer && viewMode && ( diff --git a/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background.ts b/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background.ts index 7e878e763bfc1..3e417551c3cb9 100644 --- a/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background.ts +++ b/x-pack/test/send_search_to_background_integration/tests/apps/dashboard/async_search/send_to_background.ts @@ -96,6 +96,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // should leave session state untouched await PageObjects.dashboard.switchToEditMode(); await searchSessions.expectState('restored'); + + // navigating to a listing page clears the session + await PageObjects.dashboard.gotoDashboardLandingPage(); + await searchSessions.missingOrFail(); }); }); } From f0717a0a79d8cb1c772a9039aa7796691aa78ea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Casper=20H=C3=BCbertz?= Date: Mon, 1 Feb 2021 10:54:08 +0100 Subject: [PATCH 17/85] [Observability] `ActionMenu` style fixes (#89547) * [Observability] Reduced space between title and subtitle * [Observability] Reduce margin between sections * [Observability] Reduce list item font size * [Observability] Remove spacer * [APM] Changes button style and label * [Logs] Changes the actions button label and style * [Logs] Fixes the overlap of actions button and close * Updated test and snapshot Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../CustomLinkMenuSection/index.tsx | 1 - .../TransactionActionMenu.test.tsx | 12 ++++++------ .../TransactionActionMenu/TransactionActionMenu.tsx | 8 ++++---- .../TransactionActionMenu.test.tsx.snap | 8 ++++---- .../log_entry_flyout/log_entry_actions_menu.tsx | 8 ++++---- .../logging/log_entry_flyout/log_entry_flyout.tsx | 2 +- .../public/components/shared/action_menu/index.tsx | 6 +++--- 7 files changed, 22 insertions(+), 23 deletions(-) diff --git a/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/CustomLinkMenuSection/index.tsx b/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/CustomLinkMenuSection/index.tsx index ae22718af8b57..43f566a93a89d 100644 --- a/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/CustomLinkMenuSection/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/CustomLinkMenuSection/index.tsx @@ -107,7 +107,6 @@ export function CustomLinkMenuSection({ - {i18n.translate( 'xpack.apm.transactionActionMenu.customLink.subtitle', diff --git a/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.test.tsx b/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.test.tsx index 48c863b460482..3141dc7a5f3c6 100644 --- a/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.test.tsx +++ b/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.test.tsx @@ -52,7 +52,7 @@ const renderTransaction = async (transaction: Record) => { } ); - fireEvent.click(rendered.getByText('Actions')); + fireEvent.click(rendered.getByText('Investigate')); return rendered; }; @@ -289,7 +289,7 @@ describe('TransactionActionMenu component', () => { }); const component = renderTransactionActionMenuWithLicense(license); act(() => { - fireEvent.click(component.getByText('Actions')); + fireEvent.click(component.getByText('Investigate')); }); expectTextsNotInDocument(component, ['Custom Links']); }); @@ -313,7 +313,7 @@ describe('TransactionActionMenu component', () => { { wrapper: Wrapper } ); act(() => { - fireEvent.click(component.getByText('Actions')); + fireEvent.click(component.getByText('Investigate')); }); expectTextsNotInDocument(component, ['Custom Links']); }); @@ -330,7 +330,7 @@ describe('TransactionActionMenu component', () => { }); const component = renderTransactionActionMenuWithLicense(license); act(() => { - fireEvent.click(component.getByText('Actions')); + fireEvent.click(component.getByText('Investigate')); }); expectTextsInDocument(component, ['Custom Links']); }); @@ -347,7 +347,7 @@ describe('TransactionActionMenu component', () => { }); const component = renderTransactionActionMenuWithLicense(license); act(() => { - fireEvent.click(component.getByText('Actions')); + fireEvent.click(component.getByText('Investigate')); }); expectTextsInDocument(component, ['Custom Links']); }); @@ -364,7 +364,7 @@ describe('TransactionActionMenu component', () => { }); const component = renderTransactionActionMenuWithLicense(license); act(() => { - fireEvent.click(component.getByText('Actions')); + fireEvent.click(component.getByText('Investigate')); }); expectTextsInDocument(component, ['Custom Links']); act(() => { diff --git a/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.tsx b/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.tsx index 312513db80886..22fa25f93b212 100644 --- a/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.tsx +++ b/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { EuiButtonEmpty } from '@elastic/eui'; +import { EuiButton } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useState } from 'react'; import { useLocation } from 'react-router-dom'; @@ -30,11 +30,11 @@ interface Props { function ActionMenuButton({ onClick }: { onClick: () => void }) { return ( - + {i18n.translate('xpack.apm.transactionActionMenu.actionsButtonLabel', { - defaultMessage: 'Actions', + defaultMessage: 'Investigate', })} - + ); } diff --git a/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/__snapshots__/TransactionActionMenu.test.tsx.snap b/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/__snapshots__/TransactionActionMenu.test.tsx.snap index fa6db645d28a8..ea33fb3c3df08 100644 --- a/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/__snapshots__/TransactionActionMenu.test.tsx.snap +++ b/x-pack/plugins/apm/public/components/shared/TransactionActionMenu/__snapshots__/TransactionActionMenu.test.tsx.snap @@ -10,20 +10,20 @@ exports[`TransactionActionMenu component matches the snapshot 1`] = ` class="euiPopover__anchor" > diff --git a/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.tsx b/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.tsx index aa3b4532e878e..9fef939733432 100644 --- a/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.tsx +++ b/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { EuiButtonEmpty, EuiContextMenuItem, EuiContextMenuPanel, EuiPopover } from '@elastic/eui'; +import { EuiButton, EuiContextMenuItem, EuiContextMenuPanel, EuiPopover } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import React, { useMemo } from 'react'; import { useVisibilityState } from '../../../utils/use_visibility_state'; @@ -67,7 +67,7 @@ export const LogEntryActionsMenu: React.FunctionComponent<{ - + } closePopover={hide} id="logEntryActionsMenu" diff --git a/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_flyout.tsx b/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_flyout.tsx index 5684d4068f3be..7d8ca95f9b93b 100644 --- a/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_flyout.tsx +++ b/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_flyout.tsx @@ -88,7 +88,7 @@ export const LogEntryFlyout = ({ ) : null} - + {logEntry ? : null} diff --git a/x-pack/plugins/observability/public/components/shared/action_menu/index.tsx b/x-pack/plugins/observability/public/components/shared/action_menu/index.tsx index 4819a0760d88a..af61f618a89b2 100644 --- a/x-pack/plugins/observability/public/components/shared/action_menu/index.tsx +++ b/x-pack/plugins/observability/public/components/shared/action_menu/index.tsx @@ -26,7 +26,7 @@ export function SectionTitle({ children }: { children?: ReactNode }) {
{children}
- + ); } @@ -55,7 +55,7 @@ export function SectionSpacer() { } export const Section = styled.div` - margin-bottom: 24px; + margin-bottom: 16px; &:last-of-type { margin-bottom: 0; } @@ -63,7 +63,7 @@ export const Section = styled.div` export type SectionLinkProps = EuiListGroupItemProps; export function SectionLink(props: SectionLinkProps) { - return ; + return ; } export function ActionMenuDivider() { From 84d49f11238c76c806b360a28f1d579dde38ab16 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Mon, 1 Feb 2021 11:03:44 +0100 Subject: [PATCH 18/85] [SOM] display invalid references in the relationship flyout (#88814) * return invalid relations and display them in SOM * add FTR test --- .../saved_objects_management/common/index.ts | 9 +- .../saved_objects_management/common/types.ts | 16 +- .../public/lib/get_relationships.test.ts | 9 +- .../public/lib/get_relationships.ts | 6 +- .../__snapshots__/relationships.test.tsx.snap | 1097 ++++++++++------- .../components/relationships.test.tsx | 265 ++-- .../components/relationships.tsx | 179 ++- .../saved_objects_management/public/types.ts | 9 +- .../server/lib/find_relationships.test.ts | 227 +++- .../server/lib/find_relationships.ts | 73 +- .../server/routes/relationships.ts | 4 +- .../saved_objects_management/server/types.ts | 9 +- .../saved_objects_management/relationships.ts | 106 +- .../saved_objects/relationships/data.json | 190 +++ .../saved_objects/relationships/data.json.gz | Bin 1385 -> 0 bytes .../saved_objects/relationships/mappings.json | 16 +- .../apps/saved_objects_management/index.ts | 1 + .../show_relationships.ts | 52 + .../show_relationships/data.json | 36 + .../show_relationships/mappings.json | 473 +++++++ .../management/saved_objects_page.ts | 16 + 21 files changed, 2058 insertions(+), 735 deletions(-) create mode 100644 test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/data.json delete mode 100644 test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/data.json.gz create mode 100644 test/functional/apps/saved_objects_management/show_relationships.ts create mode 100644 test/functional/fixtures/es_archiver/saved_objects_management/show_relationships/data.json create mode 100644 test/functional/fixtures/es_archiver/saved_objects_management/show_relationships/mappings.json diff --git a/src/plugins/saved_objects_management/common/index.ts b/src/plugins/saved_objects_management/common/index.ts index a8395e602979c..8850899e38958 100644 --- a/src/plugins/saved_objects_management/common/index.ts +++ b/src/plugins/saved_objects_management/common/index.ts @@ -6,4 +6,11 @@ * Public License, v 1. */ -export { SavedObjectRelation, SavedObjectWithMetadata, SavedObjectMetadata } from './types'; +export { + SavedObjectWithMetadata, + SavedObjectMetadata, + SavedObjectRelation, + SavedObjectRelationKind, + SavedObjectInvalidRelation, + SavedObjectGetRelationshipsResponse, +} from './types'; diff --git a/src/plugins/saved_objects_management/common/types.ts b/src/plugins/saved_objects_management/common/types.ts index 8618cf4332acf..e100dfc6b23e6 100644 --- a/src/plugins/saved_objects_management/common/types.ts +++ b/src/plugins/saved_objects_management/common/types.ts @@ -28,12 +28,26 @@ export type SavedObjectWithMetadata = SavedObject & { meta: SavedObjectMetadata; }; +export type SavedObjectRelationKind = 'child' | 'parent'; + /** * Represents a relation between two {@link SavedObject | saved object} */ export interface SavedObjectRelation { id: string; type: string; - relationship: 'child' | 'parent'; + relationship: SavedObjectRelationKind; meta: SavedObjectMetadata; } + +export interface SavedObjectInvalidRelation { + id: string; + type: string; + relationship: SavedObjectRelationKind; + error: string; +} + +export interface SavedObjectGetRelationshipsResponse { + relations: SavedObjectRelation[]; + invalidRelations: SavedObjectInvalidRelation[]; +} diff --git a/src/plugins/saved_objects_management/public/lib/get_relationships.test.ts b/src/plugins/saved_objects_management/public/lib/get_relationships.test.ts index b609fac67dac1..4454907f530fe 100644 --- a/src/plugins/saved_objects_management/public/lib/get_relationships.test.ts +++ b/src/plugins/saved_objects_management/public/lib/get_relationships.test.ts @@ -6,6 +6,7 @@ * Public License, v 1. */ +import { SavedObjectGetRelationshipsResponse } from '../types'; import { httpServiceMock } from '../../../../core/public/mocks'; import { getRelationships } from './get_relationships'; @@ -22,13 +23,17 @@ describe('getRelationships', () => { }); it('should handle successful responses', async () => { - httpMock.get.mockResolvedValue([1, 2]); + const serverResponse: SavedObjectGetRelationshipsResponse = { + relations: [], + invalidRelations: [], + }; + httpMock.get.mockResolvedValue(serverResponse); const response = await getRelationships(httpMock, 'dashboard', '1', [ 'search', 'index-pattern', ]); - expect(response).toEqual([1, 2]); + expect(response).toEqual(serverResponse); }); it('should handle errors', async () => { diff --git a/src/plugins/saved_objects_management/public/lib/get_relationships.ts b/src/plugins/saved_objects_management/public/lib/get_relationships.ts index 0eb97e1052fa4..69aeb6fbf580b 100644 --- a/src/plugins/saved_objects_management/public/lib/get_relationships.ts +++ b/src/plugins/saved_objects_management/public/lib/get_relationships.ts @@ -8,19 +8,19 @@ import { HttpStart } from 'src/core/public'; import { get } from 'lodash'; -import { SavedObjectRelation } from '../types'; +import { SavedObjectGetRelationshipsResponse } from '../types'; export async function getRelationships( http: HttpStart, type: string, id: string, savedObjectTypes: string[] -): Promise { +): Promise { const url = `/api/kibana/management/saved_objects/relationships/${encodeURIComponent( type )}/${encodeURIComponent(id)}`; try { - return await http.get(url, { + return await http.get(url, { query: { savedObjectTypes, }, diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/relationships.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/relationships.test.tsx.snap index 15e5cb89b622c..c39263f304249 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/relationships.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/relationships.test.tsx.snap @@ -28,133 +28,131 @@ exports[`Relationships should render dashboards normally 1`] = ` -
- -

- Here are the saved objects related to MyDashboard. Deleting this dashboard affects its parent objects, but not its children. -

-
- - +

+ Here are the saved objects related to MyDashboard. Deleting this dashboard affects its parent objects, but not its children. +

+ + + -
+ } + tableLayout="fixed" + />
`; @@ -231,138 +229,315 @@ exports[`Relationships should render index patterns normally 1`] = ` -
- -

- Here are the saved objects related to MyIndexPattern*. Deleting this index-pattern affects its parent objects, but not its children. -

-
- - +

+ Here are the saved objects related to MyIndexPattern*. Deleting this index-pattern affects its parent objects, but not its children. +

+ + + + + +`; + +exports[`Relationships should render invalid relations 1`] = ` + + + +

+ + + +    + MyIndexPattern* +

+
+
+ + + + + + +

+ Here are the saved objects related to MyIndexPattern*. Deleting this index-pattern affects its parent objects, but not its children. +

+
+ + -
+ } + tableLayout="fixed" + />
`; @@ -395,138 +570,136 @@ exports[`Relationships should render searches normally 1`] = ` -
- -

- Here are the saved objects related to MySearch. Deleting this search affects its parent objects, but not its children. -

-
- - +

+ Here are the saved objects related to MySearch. Deleting this search affects its parent objects, but not its children. +

+ + + -
+ } + tableLayout="fixed" + />
`; @@ -559,133 +732,131 @@ exports[`Relationships should render visualizations normally 1`] = ` -
- -

- Here are the saved objects related to MyViz. Deleting this visualization affects its parent objects, but not its children. -

-
- - +

+ Here are the saved objects related to MyViz. Deleting this visualization affects its parent objects, but not its children. +

+ + + -
+ } + tableLayout="fixed" + />
`; diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.test.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.test.tsx index 72a4b0f2788fa..e590520193bba 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.test.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.test.tsx @@ -25,36 +25,39 @@ describe('Relationships', () => { goInspectObject: () => {}, canGoInApp: () => true, basePath: httpServiceMock.createSetupContract().basePath, - getRelationships: jest.fn().mockImplementation(() => [ - { - type: 'search', - id: '1', - relationship: 'parent', - meta: { - editUrl: '/management/kibana/objects/savedSearches/1', - icon: 'search', - inAppUrl: { - path: '/app/discover#//1', - uiCapabilitiesPath: 'discover.show', + getRelationships: jest.fn().mockImplementation(() => ({ + relations: [ + { + type: 'search', + id: '1', + relationship: 'parent', + meta: { + editUrl: '/management/kibana/objects/savedSearches/1', + icon: 'search', + inAppUrl: { + path: '/app/discover#//1', + uiCapabilitiesPath: 'discover.show', + }, + title: 'My Search Title', }, - title: 'My Search Title', }, - }, - { - type: 'visualization', - id: '2', - relationship: 'parent', - meta: { - editUrl: '/management/kibana/objects/savedVisualizations/2', - icon: 'visualizeApp', - inAppUrl: { - path: '/app/visualize#/edit/2', - uiCapabilitiesPath: 'visualize.show', + { + type: 'visualization', + id: '2', + relationship: 'parent', + meta: { + editUrl: '/management/kibana/objects/savedVisualizations/2', + icon: 'visualizeApp', + inAppUrl: { + path: '/app/visualize#/edit/2', + uiCapabilitiesPath: 'visualize.show', + }, + title: 'My Visualization Title', }, - title: 'My Visualization Title', }, - }, - ]), + ], + invalidRelations: [], + })), savedObject: { id: '1', type: 'index-pattern', @@ -92,36 +95,39 @@ describe('Relationships', () => { goInspectObject: () => {}, canGoInApp: () => true, basePath: httpServiceMock.createSetupContract().basePath, - getRelationships: jest.fn().mockImplementation(() => [ - { - type: 'index-pattern', - id: '1', - relationship: 'child', - meta: { - editUrl: '/management/kibana/indexPatterns/patterns/1', - icon: 'indexPatternApp', - inAppUrl: { - path: '/app/management/kibana/indexPatterns/patterns/1', - uiCapabilitiesPath: 'management.kibana.indexPatterns', + getRelationships: jest.fn().mockImplementation(() => ({ + relations: [ + { + type: 'index-pattern', + id: '1', + relationship: 'child', + meta: { + editUrl: '/management/kibana/indexPatterns/patterns/1', + icon: 'indexPatternApp', + inAppUrl: { + path: '/app/management/kibana/indexPatterns/patterns/1', + uiCapabilitiesPath: 'management.kibana.indexPatterns', + }, + title: 'My Index Pattern', }, - title: 'My Index Pattern', }, - }, - { - type: 'visualization', - id: '2', - relationship: 'parent', - meta: { - editUrl: '/management/kibana/objects/savedVisualizations/2', - icon: 'visualizeApp', - inAppUrl: { - path: '/app/visualize#/edit/2', - uiCapabilitiesPath: 'visualize.show', + { + type: 'visualization', + id: '2', + relationship: 'parent', + meta: { + editUrl: '/management/kibana/objects/savedVisualizations/2', + icon: 'visualizeApp', + inAppUrl: { + path: '/app/visualize#/edit/2', + uiCapabilitiesPath: 'visualize.show', + }, + title: 'My Visualization Title', }, - title: 'My Visualization Title', }, - }, - ]), + ], + invalidRelations: [], + })), savedObject: { id: '1', type: 'search', @@ -159,36 +165,39 @@ describe('Relationships', () => { goInspectObject: () => {}, canGoInApp: () => true, basePath: httpServiceMock.createSetupContract().basePath, - getRelationships: jest.fn().mockImplementation(() => [ - { - type: 'dashboard', - id: '1', - relationship: 'parent', - meta: { - editUrl: '/management/kibana/objects/savedDashboards/1', - icon: 'dashboardApp', - inAppUrl: { - path: '/app/kibana#/dashboard/1', - uiCapabilitiesPath: 'dashboard.show', + getRelationships: jest.fn().mockImplementation(() => ({ + relations: [ + { + type: 'dashboard', + id: '1', + relationship: 'parent', + meta: { + editUrl: '/management/kibana/objects/savedDashboards/1', + icon: 'dashboardApp', + inAppUrl: { + path: '/app/kibana#/dashboard/1', + uiCapabilitiesPath: 'dashboard.show', + }, + title: 'My Dashboard 1', }, - title: 'My Dashboard 1', }, - }, - { - type: 'dashboard', - id: '2', - relationship: 'parent', - meta: { - editUrl: '/management/kibana/objects/savedDashboards/2', - icon: 'dashboardApp', - inAppUrl: { - path: '/app/kibana#/dashboard/2', - uiCapabilitiesPath: 'dashboard.show', + { + type: 'dashboard', + id: '2', + relationship: 'parent', + meta: { + editUrl: '/management/kibana/objects/savedDashboards/2', + icon: 'dashboardApp', + inAppUrl: { + path: '/app/kibana#/dashboard/2', + uiCapabilitiesPath: 'dashboard.show', + }, + title: 'My Dashboard 2', }, - title: 'My Dashboard 2', }, - }, - ]), + ], + invalidRelations: [], + })), savedObject: { id: '1', type: 'visualization', @@ -226,36 +235,39 @@ describe('Relationships', () => { goInspectObject: () => {}, canGoInApp: () => true, basePath: httpServiceMock.createSetupContract().basePath, - getRelationships: jest.fn().mockImplementation(() => [ - { - type: 'visualization', - id: '1', - relationship: 'child', - meta: { - editUrl: '/management/kibana/objects/savedVisualizations/1', - icon: 'visualizeApp', - inAppUrl: { - path: '/app/visualize#/edit/1', - uiCapabilitiesPath: 'visualize.show', + getRelationships: jest.fn().mockImplementation(() => ({ + relations: [ + { + type: 'visualization', + id: '1', + relationship: 'child', + meta: { + editUrl: '/management/kibana/objects/savedVisualizations/1', + icon: 'visualizeApp', + inAppUrl: { + path: '/app/visualize#/edit/1', + uiCapabilitiesPath: 'visualize.show', + }, + title: 'My Visualization Title 1', }, - title: 'My Visualization Title 1', }, - }, - { - type: 'visualization', - id: '2', - relationship: 'child', - meta: { - editUrl: '/management/kibana/objects/savedVisualizations/2', - icon: 'visualizeApp', - inAppUrl: { - path: '/app/visualize#/edit/2', - uiCapabilitiesPath: 'visualize.show', + { + type: 'visualization', + id: '2', + relationship: 'child', + meta: { + editUrl: '/management/kibana/objects/savedVisualizations/2', + icon: 'visualizeApp', + inAppUrl: { + path: '/app/visualize#/edit/2', + uiCapabilitiesPath: 'visualize.show', + }, + title: 'My Visualization Title 2', }, - title: 'My Visualization Title 2', }, - }, - ]), + ], + invalidRelations: [], + })), savedObject: { id: '1', type: 'dashboard', @@ -324,4 +336,49 @@ describe('Relationships', () => { expect(props.getRelationships).toHaveBeenCalled(); expect(component).toMatchSnapshot(); }); + + it('should render invalid relations', async () => { + const props: RelationshipsProps = { + goInspectObject: () => {}, + canGoInApp: () => true, + basePath: httpServiceMock.createSetupContract().basePath, + getRelationships: jest.fn().mockImplementation(() => ({ + relations: [], + invalidRelations: [ + { + id: '1', + type: 'dashboard', + relationship: 'child', + error: 'Saved object [dashboard/1] not found', + }, + ], + })), + savedObject: { + id: '1', + type: 'index-pattern', + attributes: {}, + references: [], + meta: { + title: 'MyIndexPattern*', + icon: 'indexPatternApp', + editUrl: '#/management/kibana/indexPatterns/patterns/1', + inAppUrl: { + path: '/management/kibana/indexPatterns/patterns/1', + uiCapabilitiesPath: 'management.kibana.indexPatterns', + }, + }, + }, + close: jest.fn(), + }; + + const component = shallowWithI18nProvider(); + + // Ensure all promises resolve + await new Promise((resolve) => process.nextTick(resolve)); + // Ensure the state changes are reflected + component.update(); + + expect(props.getRelationships).toHaveBeenCalled(); + expect(component).toMatchSnapshot(); + }); }); diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx index 2d62699b6f1f2..aee61f7bc9c7a 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx @@ -26,11 +26,17 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { IBasePath } from 'src/core/public'; import { getDefaultTitle, getSavedObjectLabel } from '../../../lib'; -import { SavedObjectWithMetadata, SavedObjectRelation } from '../../../types'; +import { + SavedObjectWithMetadata, + SavedObjectRelationKind, + SavedObjectRelation, + SavedObjectInvalidRelation, + SavedObjectGetRelationshipsResponse, +} from '../../../types'; export interface RelationshipsProps { basePath: IBasePath; - getRelationships: (type: string, id: string) => Promise; + getRelationships: (type: string, id: string) => Promise; savedObject: SavedObjectWithMetadata; close: () => void; goInspectObject: (obj: SavedObjectWithMetadata) => void; @@ -38,17 +44,47 @@ export interface RelationshipsProps { } export interface RelationshipsState { - relationships: SavedObjectRelation[]; + relations: SavedObjectRelation[]; + invalidRelations: SavedObjectInvalidRelation[]; isLoading: boolean; error?: string; } +const relationshipColumn = { + field: 'relationship', + name: i18n.translate('savedObjectsManagement.objectsTable.relationships.columnRelationshipName', { + defaultMessage: 'Direct relationship', + }), + dataType: 'string', + sortable: false, + width: '125px', + 'data-test-subj': 'directRelationship', + render: (relationship: SavedObjectRelationKind) => { + return ( + + {relationship === 'parent' ? ( + + ) : ( + + )} + + ); + }, +}; + export class Relationships extends Component { constructor(props: RelationshipsProps) { super(props); this.state = { - relationships: [], + relations: [], + invalidRelations: [], isLoading: false, error: undefined, }; @@ -70,8 +106,11 @@ export class Relationships extends Component + + + ({ + 'data-test-subj': `invalidRelationshipsTableRow`, + })} + /> + + + ); + } + + renderRelationshipsTable() { + const { goInspectObject, basePath, savedObject } = this.props; + const { relations, isLoading, error } = this.state; if (error) { return this.renderError(); @@ -137,39 +250,7 @@ export class Relationships extends Component { - if (relationship === 'parent') { - return ( - - - - ); - } - if (relationship === 'child') { - return ( - - - - ); - } - }, - }, + relationshipColumn, { field: 'meta.title', name: i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTitleName', { @@ -224,7 +305,7 @@ export class Relationships extends Component [ + relations.map((relationship) => [ relationship.type, { value: relationship.type, @@ -277,7 +358,7 @@ export class Relationships extends Component + <>

{i18n.translate( @@ -296,7 +377,7 @@ export class Relationships extends Component -

+ ); } @@ -328,8 +409,10 @@ export class Relationships extends Component - - {this.renderRelationships()} + + {this.renderInvalidRelationship()} + {this.renderRelationshipsTable()} + ); } diff --git a/src/plugins/saved_objects_management/public/types.ts b/src/plugins/saved_objects_management/public/types.ts index 37f239227475d..cdfa3c43e5af2 100644 --- a/src/plugins/saved_objects_management/public/types.ts +++ b/src/plugins/saved_objects_management/public/types.ts @@ -6,4 +6,11 @@ * Public License, v 1. */ -export { SavedObjectMetadata, SavedObjectWithMetadata, SavedObjectRelation } from '../common'; +export { + SavedObjectMetadata, + SavedObjectWithMetadata, + SavedObjectRelationKind, + SavedObjectRelation, + SavedObjectInvalidRelation, + SavedObjectGetRelationshipsResponse, +} from '../common'; diff --git a/src/plugins/saved_objects_management/server/lib/find_relationships.test.ts b/src/plugins/saved_objects_management/server/lib/find_relationships.test.ts index 631faf0c23c98..416be7d7e7426 100644 --- a/src/plugins/saved_objects_management/server/lib/find_relationships.test.ts +++ b/src/plugins/saved_objects_management/server/lib/find_relationships.test.ts @@ -6,10 +6,35 @@ * Public License, v 1. */ +import type { SavedObject, SavedObjectError } from 'src/core/types'; +import type { SavedObjectsFindResponse } from 'src/core/server'; import { findRelationships } from './find_relationships'; import { managementMock } from '../services/management.mock'; import { savedObjectsClientMock } from '../../../../core/server/mocks'; +const createObj = (parts: Partial>): SavedObject => ({ + id: 'id', + type: 'type', + attributes: {}, + references: [], + ...parts, +}); + +const createFindResponse = (objs: SavedObject[]): SavedObjectsFindResponse => ({ + saved_objects: objs.map((obj) => ({ ...obj, score: 1 })), + total: objs.length, + per_page: 20, + page: 1, +}); + +const createError = (parts: Partial): SavedObjectError => ({ + error: 'error', + message: 'message', + metadata: {}, + statusCode: 404, + ...parts, +}); + describe('findRelationships', () => { let savedObjectsClient: ReturnType; let managementService: ReturnType; @@ -19,7 +44,7 @@ describe('findRelationships', () => { managementService = managementMock.create(); }); - it('returns the child and parent references of the object', async () => { + it('calls the savedObjectClient APIs with the correct parameters', async () => { const type = 'dashboard'; const id = 'some-id'; const references = [ @@ -36,46 +61,35 @@ describe('findRelationships', () => { ]; const referenceTypes = ['some-type', 'another-type']; - savedObjectsClient.get.mockResolvedValue({ - id, - type, - attributes: {}, - references, - }); - + savedObjectsClient.get.mockResolvedValue( + createObj({ + id, + type, + references, + }) + ); savedObjectsClient.bulkGet.mockResolvedValue({ saved_objects: [ - { + createObj({ type: 'some-type', id: 'ref-1', - attributes: {}, - references: [], - }, - { + }), + createObj({ type: 'another-type', id: 'ref-2', - attributes: {}, - references: [], - }, + }), ], }); - - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [ - { + savedObjectsClient.find.mockResolvedValue( + createFindResponse([ + createObj({ type: 'parent-type', id: 'parent-id', - attributes: {}, - score: 1, - references: [], - }, - ], - total: 1, - per_page: 20, - page: 1, - }); + }), + ]) + ); - const relationships = await findRelationships({ + await findRelationships({ type, id, size: 20, @@ -101,8 +115,63 @@ describe('findRelationships', () => { perPage: 20, type: referenceTypes, }); + }); + + it('returns the child and parent references of the object', async () => { + const type = 'dashboard'; + const id = 'some-id'; + const references = [ + { + type: 'some-type', + id: 'ref-1', + name: 'ref 1', + }, + { + type: 'another-type', + id: 'ref-2', + name: 'ref 2', + }, + ]; + const referenceTypes = ['some-type', 'another-type']; + + savedObjectsClient.get.mockResolvedValue( + createObj({ + id, + type, + references, + }) + ); + savedObjectsClient.bulkGet.mockResolvedValue({ + saved_objects: [ + createObj({ + type: 'some-type', + id: 'ref-1', + }), + createObj({ + type: 'another-type', + id: 'ref-2', + }), + ], + }); + savedObjectsClient.find.mockResolvedValue( + createFindResponse([ + createObj({ + type: 'parent-type', + id: 'parent-id', + }), + ]) + ); + + const { relations, invalidRelations } = await findRelationships({ + type, + id, + size: 20, + client: savedObjectsClient, + referenceTypes, + savedObjectsManagement: managementService, + }); - expect(relationships).toEqual([ + expect(relations).toEqual([ { id: 'ref-1', relationship: 'child', @@ -122,6 +191,70 @@ describe('findRelationships', () => { meta: expect.any(Object), }, ]); + expect(invalidRelations).toHaveLength(0); + }); + + it('returns the invalid relations', async () => { + const type = 'dashboard'; + const id = 'some-id'; + const references = [ + { + type: 'some-type', + id: 'ref-1', + name: 'ref 1', + }, + { + type: 'another-type', + id: 'ref-2', + name: 'ref 2', + }, + ]; + const referenceTypes = ['some-type', 'another-type']; + + savedObjectsClient.get.mockResolvedValue( + createObj({ + id, + type, + references, + }) + ); + const ref1Error = createError({ message: 'Not found' }); + savedObjectsClient.bulkGet.mockResolvedValue({ + saved_objects: [ + createObj({ + type: 'some-type', + id: 'ref-1', + error: ref1Error, + }), + createObj({ + type: 'another-type', + id: 'ref-2', + }), + ], + }); + savedObjectsClient.find.mockResolvedValue(createFindResponse([])); + + const { relations, invalidRelations } = await findRelationships({ + type, + id, + size: 20, + client: savedObjectsClient, + referenceTypes, + savedObjectsManagement: managementService, + }); + + expect(relations).toEqual([ + { + id: 'ref-2', + relationship: 'child', + type: 'another-type', + meta: expect.any(Object), + }, + ]); + + expect(invalidRelations).toEqual([ + { type: 'some-type', id: 'ref-1', relationship: 'child', error: ref1Error.message }, + ]); }); it('uses the management service to consolidate the relationship objects', async () => { @@ -144,32 +277,24 @@ describe('findRelationships', () => { uiCapabilitiesPath: 'uiCapabilitiesPath', }); - savedObjectsClient.get.mockResolvedValue({ - id, - type, - attributes: {}, - references, - }); - + savedObjectsClient.get.mockResolvedValue( + createObj({ + id, + type, + references, + }) + ); savedObjectsClient.bulkGet.mockResolvedValue({ saved_objects: [ - { + createObj({ type: 'some-type', id: 'ref-1', - attributes: {}, - references: [], - }, + }), ], }); + savedObjectsClient.find.mockResolvedValue(createFindResponse([])); - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [], - total: 0, - per_page: 20, - page: 1, - }); - - const relationships = await findRelationships({ + const { relations } = await findRelationships({ type, id, size: 20, @@ -183,7 +308,7 @@ describe('findRelationships', () => { expect(managementService.getEditUrl).toHaveBeenCalledTimes(1); expect(managementService.getInAppUrl).toHaveBeenCalledTimes(1); - expect(relationships).toEqual([ + expect(relations).toEqual([ { id: 'ref-1', relationship: 'child', diff --git a/src/plugins/saved_objects_management/server/lib/find_relationships.ts b/src/plugins/saved_objects_management/server/lib/find_relationships.ts index 0ceef484196a3..bc6568e73c4e2 100644 --- a/src/plugins/saved_objects_management/server/lib/find_relationships.ts +++ b/src/plugins/saved_objects_management/server/lib/find_relationships.ts @@ -9,7 +9,11 @@ import { SavedObjectsClientContract } from 'src/core/server'; import { injectMetaAttributes } from './inject_meta_attributes'; import { ISavedObjectsManagement } from '../services'; -import { SavedObjectRelation, SavedObjectWithMetadata } from '../types'; +import { + SavedObjectInvalidRelation, + SavedObjectWithMetadata, + SavedObjectGetRelationshipsResponse, +} from '../types'; export async function findRelationships({ type, @@ -25,17 +29,19 @@ export async function findRelationships({ client: SavedObjectsClientContract; referenceTypes: string[]; savedObjectsManagement: ISavedObjectsManagement; -}): Promise { +}): Promise { const { references = [] } = await client.get(type, id); // Use a map to avoid duplicates, it does happen but have a different "name" in the reference - const referencedToBulkGetOpts = new Map( - references.map((ref) => [`${ref.type}:${ref.id}`, { id: ref.id, type: ref.type }]) - ); + const childrenReferences = [ + ...new Map( + references.map((ref) => [`${ref.type}:${ref.id}`, { id: ref.id, type: ref.type }]) + ).values(), + ]; const [childReferencesResponse, parentReferencesResponse] = await Promise.all([ - referencedToBulkGetOpts.size > 0 - ? client.bulkGet([...referencedToBulkGetOpts.values()]) + childrenReferences.length > 0 + ? client.bulkGet(childrenReferences) : Promise.resolve({ saved_objects: [] }), client.find({ hasReference: { type, id }, @@ -44,28 +50,37 @@ export async function findRelationships({ }), ]); - return childReferencesResponse.saved_objects - .map((obj) => injectMetaAttributes(obj, savedObjectsManagement)) - .map(extractCommonProperties) - .map( - (obj) => - ({ - ...obj, - relationship: 'child', - } as SavedObjectRelation) - ) - .concat( - parentReferencesResponse.saved_objects - .map((obj) => injectMetaAttributes(obj, savedObjectsManagement)) - .map(extractCommonProperties) - .map( - (obj) => - ({ - ...obj, - relationship: 'parent', - } as SavedObjectRelation) - ) - ); + const invalidRelations: SavedObjectInvalidRelation[] = childReferencesResponse.saved_objects + .filter((obj) => Boolean(obj.error)) + .map((obj) => ({ + id: obj.id, + type: obj.type, + relationship: 'child', + error: obj.error!.message, + })); + + const relations = [ + ...childReferencesResponse.saved_objects + .filter((obj) => !obj.error) + .map((obj) => injectMetaAttributes(obj, savedObjectsManagement)) + .map(extractCommonProperties) + .map((obj) => ({ + ...obj, + relationship: 'child' as const, + })), + ...parentReferencesResponse.saved_objects + .map((obj) => injectMetaAttributes(obj, savedObjectsManagement)) + .map(extractCommonProperties) + .map((obj) => ({ + ...obj, + relationship: 'parent' as const, + })), + ]; + + return { + relations, + invalidRelations, + }; } function extractCommonProperties(savedObject: SavedObjectWithMetadata) { diff --git a/src/plugins/saved_objects_management/server/routes/relationships.ts b/src/plugins/saved_objects_management/server/routes/relationships.ts index 3a52c973fde8d..5417ff2926120 100644 --- a/src/plugins/saved_objects_management/server/routes/relationships.ts +++ b/src/plugins/saved_objects_management/server/routes/relationships.ts @@ -38,7 +38,7 @@ export const registerRelationshipsRoute = ( ? req.query.savedObjectTypes : [req.query.savedObjectTypes]; - const relations = await findRelationships({ + const findRelationsResponse = await findRelationships({ type, id, client, @@ -48,7 +48,7 @@ export const registerRelationshipsRoute = ( }); return res.ok({ - body: relations, + body: findRelationsResponse, }); }) ); diff --git a/src/plugins/saved_objects_management/server/types.ts b/src/plugins/saved_objects_management/server/types.ts index 710bb5db7d1cb..562970d2d2dcd 100644 --- a/src/plugins/saved_objects_management/server/types.ts +++ b/src/plugins/saved_objects_management/server/types.ts @@ -12,4 +12,11 @@ export interface SavedObjectsManagementPluginSetup {} // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface SavedObjectsManagementPluginStart {} -export { SavedObjectMetadata, SavedObjectWithMetadata, SavedObjectRelation } from '../common'; +export { + SavedObjectMetadata, + SavedObjectWithMetadata, + SavedObjectRelationKind, + SavedObjectRelation, + SavedObjectInvalidRelation, + SavedObjectGetRelationshipsResponse, +} from '../common'; diff --git a/test/api_integration/apis/saved_objects_management/relationships.ts b/test/api_integration/apis/saved_objects_management/relationships.ts index 185c6ded01de4..6dea461f790e8 100644 --- a/test/api_integration/apis/saved_objects_management/relationships.ts +++ b/test/api_integration/apis/saved_objects_management/relationships.ts @@ -14,23 +14,32 @@ export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); - const responseSchema = schema.arrayOf( - schema.object({ - id: schema.string(), - type: schema.string(), - relationship: schema.oneOf([schema.literal('parent'), schema.literal('child')]), - meta: schema.object({ - title: schema.string(), - icon: schema.string(), - editUrl: schema.string(), - inAppUrl: schema.object({ - path: schema.string(), - uiCapabilitiesPath: schema.string(), - }), - namespaceType: schema.string(), + const relationSchema = schema.object({ + id: schema.string(), + type: schema.string(), + relationship: schema.oneOf([schema.literal('parent'), schema.literal('child')]), + meta: schema.object({ + title: schema.string(), + icon: schema.string(), + editUrl: schema.string(), + inAppUrl: schema.object({ + path: schema.string(), + uiCapabilitiesPath: schema.string(), }), - }) - ); + namespaceType: schema.string(), + }), + }); + const invalidRelationSchema = schema.object({ + id: schema.string(), + type: schema.string(), + relationship: schema.oneOf([schema.literal('parent'), schema.literal('child')]), + error: schema.string(), + }); + + const responseSchema = schema.object({ + relations: schema.arrayOf(relationSchema), + invalidRelations: schema.arrayOf(invalidRelationSchema), + }); describe('relationships', () => { before(async () => { @@ -64,7 +73,7 @@ export default function ({ getService }: FtrProviderContext) { .get(relationshipsUrl('search', '960372e0-3224-11e8-a572-ffca06da1357')) .expect(200); - expect(resp.body).to.eql([ + expect(resp.body.relations).to.eql([ { id: '8963ca30-3224-11e8-a572-ffca06da1357', type: 'index-pattern', @@ -108,7 +117,7 @@ export default function ({ getService }: FtrProviderContext) { ) .expect(200); - expect(resp.body).to.eql([ + expect(resp.body.relations).to.eql([ { id: '8963ca30-3224-11e8-a572-ffca06da1357', type: 'index-pattern', @@ -145,8 +154,7 @@ export default function ({ getService }: FtrProviderContext) { ]); }); - // TODO: https://github.com/elastic/kibana/issues/19713 causes this test to fail. - it.skip('should return 404 if search finds no results', async () => { + it('should return 404 if search finds no results', async () => { await supertest .get(relationshipsUrl('search', 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')) .expect(404); @@ -169,7 +177,7 @@ export default function ({ getService }: FtrProviderContext) { .get(relationshipsUrl('dashboard', 'b70c7ae0-3224-11e8-a572-ffca06da1357')) .expect(200); - expect(resp.body).to.eql([ + expect(resp.body.relations).to.eql([ { id: 'add810b0-3224-11e8-a572-ffca06da1357', type: 'visualization', @@ -210,7 +218,7 @@ export default function ({ getService }: FtrProviderContext) { .get(relationshipsUrl('dashboard', 'b70c7ae0-3224-11e8-a572-ffca06da1357', ['search'])) .expect(200); - expect(resp.body).to.eql([ + expect(resp.body.relations).to.eql([ { id: 'add810b0-3224-11e8-a572-ffca06da1357', type: 'visualization', @@ -246,8 +254,7 @@ export default function ({ getService }: FtrProviderContext) { ]); }); - // TODO: https://github.com/elastic/kibana/issues/19713 causes this test to fail. - it.skip('should return 404 if dashboard finds no results', async () => { + it('should return 404 if dashboard finds no results', async () => { await supertest .get(relationshipsUrl('dashboard', 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')) .expect(404); @@ -270,7 +277,7 @@ export default function ({ getService }: FtrProviderContext) { .get(relationshipsUrl('visualization', 'a42c0580-3224-11e8-a572-ffca06da1357')) .expect(200); - expect(resp.body).to.eql([ + expect(resp.body.relations).to.eql([ { id: '960372e0-3224-11e8-a572-ffca06da1357', type: 'search', @@ -313,7 +320,7 @@ export default function ({ getService }: FtrProviderContext) { ) .expect(200); - expect(resp.body).to.eql([ + expect(resp.body.relations).to.eql([ { id: '960372e0-3224-11e8-a572-ffca06da1357', type: 'search', @@ -356,7 +363,7 @@ export default function ({ getService }: FtrProviderContext) { .get(relationshipsUrl('index-pattern', '8963ca30-3224-11e8-a572-ffca06da1357')) .expect(200); - expect(resp.body).to.eql([ + expect(resp.body.relations).to.eql([ { id: '960372e0-3224-11e8-a572-ffca06da1357', type: 'search', @@ -399,7 +406,7 @@ export default function ({ getService }: FtrProviderContext) { ) .expect(200); - expect(resp.body).to.eql([ + expect(resp.body.relations).to.eql([ { id: '960372e0-3224-11e8-a572-ffca06da1357', type: 'search', @@ -425,5 +432,48 @@ export default function ({ getService }: FtrProviderContext) { .expect(404); }); }); + + describe('invalid references', () => { + it('should validate the response schema', async () => { + const resp = await supertest.get(relationshipsUrl('dashboard', 'invalid-refs')).expect(200); + + expect(() => { + responseSchema.validate(resp.body); + }).not.to.throwError(); + }); + + it('should return the invalid relations', async () => { + const resp = await supertest.get(relationshipsUrl('dashboard', 'invalid-refs')).expect(200); + + expect(resp.body).to.eql({ + invalidRelations: [ + { + error: 'Saved object [visualization/invalid-vis] not found', + id: 'invalid-vis', + relationship: 'child', + type: 'visualization', + }, + ], + relations: [ + { + id: 'add810b0-3224-11e8-a572-ffca06da1357', + meta: { + editUrl: + '/management/kibana/objects/savedVisualizations/add810b0-3224-11e8-a572-ffca06da1357', + icon: 'visualizeApp', + inAppUrl: { + path: '/app/visualize#/edit/add810b0-3224-11e8-a572-ffca06da1357', + uiCapabilitiesPath: 'visualize.show', + }, + namespaceType: 'single', + title: 'Visualization', + }, + relationship: 'child', + type: 'visualization', + }, + ], + }); + }); + }); }); } diff --git a/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/data.json b/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/data.json new file mode 100644 index 0000000000000..21d84c4b55e55 --- /dev/null +++ b/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/data.json @@ -0,0 +1,190 @@ +{ + "type": "doc", + "value": { + "index": ".kibana", + "id": "timelion-sheet:190f3e90-2ec3-11e8-ba48-69fc4e41e1f6", + "source": { + "type": "timelion-sheet", + "updated_at": "2018-03-23T17:53:30.872Z", + "timelion-sheet": { + "title": "New TimeLion Sheet", + "hits": 0, + "description": "", + "timelion_sheet": [ + ".es(*)" + ], + "timelion_interval": "auto", + "timelion_chart_height": 275, + "timelion_columns": 2, + "timelion_rows": 2, + "version": 1 + } + } + } +} + +{ + "type": "doc", + "value": { + "index": ".kibana", + "id": "index-pattern:8963ca30-3224-11e8-a572-ffca06da1357", + "source": { + "type": "index-pattern", + "updated_at": "2018-03-28T01:08:34.290Z", + "index-pattern": { + "title": "saved_objects*", + "fields": "[{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]" + } + } + } +} + +{ + "type": "doc", + "value": { + "index": ".kibana", + "id": "config:7.0.0-alpha1", + "source": { + "type": "config", + "updated_at": "2018-03-28T01:08:39.248Z", + "config": { + "buildNum": 8467, + "telemetry:optIn": false, + "defaultIndex": "8963ca30-3224-11e8-a572-ffca06da1357" + } + } + } +} + +{ + "type": "doc", + "value": { + "index": ".kibana", + "id": "search:960372e0-3224-11e8-a572-ffca06da1357", + "source": { + "type": "search", + "updated_at": "2018-03-28T01:08:55.182Z", + "search": { + "title": "OneRecord", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "_score", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"8963ca30-3224-11e8-a572-ffca06da1357\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"id:3\",\"language\":\"lucene\"},\"filter\":[]}" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "index": ".kibana", + "id": "visualization:a42c0580-3224-11e8-a572-ffca06da1357", + "source": { + "type": "visualization", + "updated_at": "2018-03-28T01:09:18.936Z", + "visualization": { + "title": "VisualizationFromSavedSearch", + "visState": "{\"title\":\"VisualizationFromSavedSearch\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "960372e0-3224-11e8-a572-ffca06da1357", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "index": ".kibana", + "id": "visualization:add810b0-3224-11e8-a572-ffca06da1357", + "source": { + "type": "visualization", + "updated_at": "2018-03-28T01:09:35.163Z", + "visualization": { + "title": "Visualization", + "visState": "{\"title\":\"Visualization\",\"type\":\"metric\",\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}}]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"8963ca30-3224-11e8-a572-ffca06da1357\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "index": ".kibana", + "id": "dashboard:b70c7ae0-3224-11e8-a572-ffca06da1357", + "source": { + "type": "dashboard", + "updated_at": "2018-03-28T01:09:50.606Z", + "dashboard": { + "title": "Dashboard", + "hits": 0, + "description": "", + "panelsJSON": "[{\"gridData\":{\"w\":24,\"h\":15,\"x\":0,\"y\":0,\"i\":\"1\"},\"version\":\"7.0.0-alpha1\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"id\":\"add810b0-3224-11e8-a572-ffca06da1357\",\"embeddableConfig\":{}},{\"gridData\":{\"w\":24,\"h\":15,\"x\":24,\"y\":0,\"i\":\"2\"},\"version\":\"7.0.0-alpha1\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"id\":\"a42c0580-3224-11e8-a572-ffca06da1357\",\"embeddableConfig\":{}}]", + "optionsJSON": "{\"darkTheme\":false,\"useMargins\":true,\"hidePanelTitles\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[],\"highlightAll\":true,\"version\":true}" + } + } + } + } +} + +{ + "type": "doc", + "value": { + "index": ".kibana", + "id": "dashboard:invalid-refs", + "source": { + "type": "dashboard", + "updated_at": "2018-03-28T01:09:50.606Z", + "dashboard": { + "title": "Dashboard", + "hits": 0, + "description": "", + "panelsJSON": "[]", + "optionsJSON": "{}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "references": [ + { + "type":"visualization", + "id": "add810b0-3224-11e8-a572-ffca06da1357", + "name": "valid-ref" + }, + { + "type":"visualization", + "id": "invalid-vis", + "name": "missing-ref" + } + ] + } + } +} diff --git a/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/data.json.gz b/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/data.json.gz deleted file mode 100644 index 0834567abb66b663079894089ed4edd91f1cf0b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1385 zcmV-v1(y0BiwFP!000026V+JVZ`(Eyf6rfGXfIn48~X5vthb^?hYW2R#6}+$2LUCX zWv;U5QB=~@(Eq+8C0mrECGvtGnI97Qcs$m8BGZD22gy7Lt@`B_*dyDA^hk#?yYb0+4|-wU-`D?Y;|<*LNK7`ym-mNf3G{|YrRCa=-?zQK>&=}>F!BP=9{3aY&szV$ zPJNPIlZig;9PWB^RQ!yJy;cWFiU@hL0v4~-Deh#{s>PFhohtX;wq?QZ4%co$WMx=R zB`i*Me~Xji3UJ=YzUfFYxa+g~mtVvi|tywT)oz%*<= zi5GuvJAv&7-f-YfZ38b&GwpE6$Sqpr;a?ER?46mNC4+>j8?~;s3o9jSSXjZrx?yx- zoi4PmT98S>(pbwPo~IIpHa?f20#pu`B*{RDfCx-=n5d0XmXn12Br5R%8M=`@ z@}CLbhRu!`o(7ITn0jLa!%Z{oQ2u7>C=%5$m^G`Xv^A4>dX;v)U*G*>2Ab4gu{Me} zM38k>=5_<(qRgYC8^Ma-UEr+BNOFnerr8g01%b(;?7c$HXSju=v5wVInk;MUtU_j* zCkZZ7CJ@;r!j!0}OwPF^iD5>n@1OECDm!PsE@6e8M;)dHHPzB^$?- z?M*kg6|9LCDn4e>!6g(0Le;qIoaw7Jstj+xx-H}8jtv+;9r-G&Q+TF9egr4K5YHH8 z{cqgx2rs+_6Hw|qcK9kx;9)l#d(UBl<4eC;>#aD)Dx!4Gc_P`ynCU3}3^AnU?AK;z z_gIkzW>#XJzi?{K$aw~rhyXB&0jqKX zJa<^$+w06QBYQBm%~_*1(atU(9~^P?Z)F>jVs-73tAHE}MnB@)V3{9PZthSGn5rm8 z`0%4D)BEZ_+u^=w44ezge2uHHjc1+h!Q(X9?e+ojRVCGh^vkNlw_r+D<$ciabY&Ht zc8p0&nnAh82jzARs>4kCNKn^i4!O>3W>hF8;`(&bg?DMtAR@76`}lotR1KQp@| diff --git a/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/mappings.json b/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/mappings.json index c670508247b1a..6dd4d198e0f67 100644 --- a/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/mappings.json +++ b/test/api_integration/fixtures/es_archiver/management/saved_objects/relationships/mappings.json @@ -12,6 +12,20 @@ "mappings": { "dynamic": "strict", "properties": { + "references": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, "config": { "dynamic": "true", "properties": { @@ -280,4 +294,4 @@ } } } -} \ No newline at end of file +} diff --git a/test/functional/apps/saved_objects_management/index.ts b/test/functional/apps/saved_objects_management/index.ts index 9491661de73ef..5e4eaefb7e9d1 100644 --- a/test/functional/apps/saved_objects_management/index.ts +++ b/test/functional/apps/saved_objects_management/index.ts @@ -12,5 +12,6 @@ export default function savedObjectsManagementApp({ loadTestFile }: FtrProviderC describe('saved objects management', function savedObjectsManagementAppTestSuite() { this.tags('ciGroup7'); loadTestFile(require.resolve('./edit_saved_object')); + loadTestFile(require.resolve('./show_relationships')); }); } diff --git a/test/functional/apps/saved_objects_management/show_relationships.ts b/test/functional/apps/saved_objects_management/show_relationships.ts new file mode 100644 index 0000000000000..6f3fb5a4973e2 --- /dev/null +++ b/test/functional/apps/saved_objects_management/show_relationships.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * and the Server Side Public License, v 1; you may not use this file except in + * compliance with, at your election, the Elastic License or the Server Side + * Public License, v 1. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const PageObjects = getPageObjects(['common', 'settings', 'savedObjects']); + + describe('saved objects relationships flyout', () => { + beforeEach(async () => { + await esArchiver.load('saved_objects_management/show_relationships'); + }); + + afterEach(async () => { + await esArchiver.unload('saved_objects_management/show_relationships'); + }); + + it('displays the invalid references', async () => { + await PageObjects.settings.navigateTo(); + await PageObjects.settings.clickKibanaSavedObjects(); + + const objects = await PageObjects.savedObjects.getRowTitles(); + expect(objects.includes('Dashboard with missing refs')).to.be(true); + + await PageObjects.savedObjects.clickRelationshipsByTitle('Dashboard with missing refs'); + + const invalidRelations = await PageObjects.savedObjects.getInvalidRelations(); + + expect(invalidRelations).to.eql([ + { + error: 'Saved object [visualization/missing-vis-ref] not found', + id: 'missing-vis-ref', + relationship: 'Child', + type: 'visualization', + }, + { + error: 'Saved object [dashboard/missing-dashboard-ref] not found', + id: 'missing-dashboard-ref', + relationship: 'Child', + type: 'dashboard', + }, + ]); + }); + }); +} diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/show_relationships/data.json b/test/functional/fixtures/es_archiver/saved_objects_management/show_relationships/data.json new file mode 100644 index 0000000000000..4d5b969a3c931 --- /dev/null +++ b/test/functional/fixtures/es_archiver/saved_objects_management/show_relationships/data.json @@ -0,0 +1,36 @@ +{ + "type": "doc", + "value": { + "index": ".kibana", + "type": "doc", + "id": "dashboard:dash-with-missing-refs", + "source": { + "dashboard": { + "title": "Dashboard with missing refs", + "hits": 0, + "description": "", + "panelsJSON": "[]", + "optionsJSON": "{}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "type": "dashboard", + "references": [ + { + "type": "visualization", + "id": "missing-vis-ref", + "name": "some missing ref" + }, + { + "type": "dashboard", + "id": "missing-dashboard-ref", + "name": "some other missing ref" + } + ], + "updated_at": "2019-01-22T19:32:47.232Z" + } + } +} diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/show_relationships/mappings.json b/test/functional/fixtures/es_archiver/saved_objects_management/show_relationships/mappings.json new file mode 100644 index 0000000000000..d53e6c96e883e --- /dev/null +++ b/test/functional/fixtures/es_archiver/saved_objects_management/show_relationships/mappings.json @@ -0,0 +1,473 @@ +{ + "type": "index", + "value": { + "index": ".kibana", + "settings": { + "index": { + "number_of_shards": "1", + "auto_expand_replicas": "0-1", + "number_of_replicas": "0" + } + }, + "mappings": { + "dynamic": "strict", + "properties": { + "references": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "apm-telemetry": { + "properties": { + "has_any_services": { + "type": "boolean" + }, + "services_per_agent": { + "properties": { + "go": { + "type": "long", + "null_value": 0 + }, + "java": { + "type": "long", + "null_value": 0 + }, + "js-base": { + "type": "long", + "null_value": 0 + }, + "nodejs": { + "type": "long", + "null_value": 0 + }, + "python": { + "type": "long", + "null_value": 0 + }, + "ruby": { + "type": "long", + "null_value": 0 + } + } + } + } + }, + "canvas-workpad": { + "dynamic": "false", + "properties": { + "@created": { + "type": "date" + }, + "@timestamp": { + "type": "date" + }, + "id": { + "type": "text", + "index": false + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword" + } + } + } + } + }, + "config": { + "dynamic": "true", + "properties": { + "accessibility:disableAnimations": { + "type": "boolean" + }, + "buildNum": { + "type": "keyword" + }, + "dateFormat:tz": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "defaultIndex": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "telemetry:optIn": { + "type": "boolean" + } + } + }, + "dashboard": { + "properties": { + "description": { + "type": "text" + }, + "hits": { + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "optionsJSON": { + "type": "text" + }, + "panelsJSON": { + "type": "text" + }, + "refreshInterval": { + "properties": { + "display": { + "type": "keyword" + }, + "pause": { + "type": "boolean" + }, + "section": { + "type": "integer" + }, + "value": { + "type": "integer" + } + } + }, + "timeFrom": { + "type": "keyword" + }, + "timeRestore": { + "type": "boolean" + }, + "timeTo": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "uiStateJSON": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "map": { + "properties": { + "bounds": { + "type": "geo_shape", + "tree": "quadtree" + }, + "description": { + "type": "text" + }, + "layerListJSON": { + "type": "text" + }, + "mapStateJSON": { + "type": "text" + }, + "title": { + "type": "text" + }, + "uiStateJSON": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "graph-workspace": { + "properties": { + "description": { + "type": "text" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "numLinks": { + "type": "integer" + }, + "numVertices": { + "type": "integer" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + }, + "wsState": { + "type": "text" + } + } + }, + "index-pattern": { + "properties": { + "fieldFormatMap": { + "type": "text" + }, + "fields": { + "type": "text" + }, + "intervalName": { + "type": "keyword" + }, + "notExpandable": { + "type": "boolean" + }, + "sourceFilters": { + "type": "text" + }, + "timeFieldName": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "type": { + "type": "keyword" + }, + "typeMeta": { + "type": "keyword" + } + } + }, + "kql-telemetry": { + "properties": { + "optInCount": { + "type": "long" + }, + "optOutCount": { + "type": "long" + } + } + }, + "migrationVersion": { + "dynamic": "true", + "properties": { + "index-pattern": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "space": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "namespace": { + "type": "keyword" + }, + "search": { + "properties": { + "columns": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "hits": { + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "sort": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "server": { + "properties": { + "uuid": { + "type": "keyword" + } + } + }, + "space": { + "properties": { + "_reserved": { + "type": "boolean" + }, + "color": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "disabledFeatures": { + "type": "keyword" + }, + "initials": { + "type": "keyword" + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 2048 + } + } + } + } + }, + "spaceId": { + "type": "keyword" + }, + "telemetry": { + "properties": { + "enabled": { + "type": "boolean" + } + } + }, + "timelion-sheet": { + "properties": { + "description": { + "type": "text" + }, + "hits": { + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "timelion_chart_height": { + "type": "integer" + }, + "timelion_columns": { + "type": "integer" + }, + "timelion_interval": { + "type": "keyword" + }, + "timelion_other_interval": { + "type": "keyword" + }, + "timelion_rows": { + "type": "integer" + }, + "timelion_sheet": { + "type": "text" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "url": { + "properties": { + "accessCount": { + "type": "long" + }, + "accessDate": { + "type": "date" + }, + "createDate": { + "type": "date" + }, + "url": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 2048 + } + } + } + } + }, + "visualization": { + "properties": { + "description": { + "type": "text" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "savedSearchId": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "uiStateJSON": { + "type": "text" + }, + "version": { + "type": "integer" + }, + "visState": { + "type": "text" + } + } + } + } + } + } +} diff --git a/test/functional/page_objects/management/saved_objects_page.ts b/test/functional/page_objects/management/saved_objects_page.ts index 1cdf76ad58ef0..cf162f12df9d9 100644 --- a/test/functional/page_objects/management/saved_objects_page.ts +++ b/test/functional/page_objects/management/saved_objects_page.ts @@ -257,6 +257,22 @@ export function SavedObjectsPageProvider({ getService, getPageObjects }: FtrProv }); } + async getInvalidRelations() { + const rows = await testSubjects.findAll('invalidRelationshipsTableRow'); + return mapAsync(rows, async (row) => { + const objectType = await row.findByTestSubject('relationshipsObjectType'); + const objectId = await row.findByTestSubject('relationshipsObjectId'); + const relationship = await row.findByTestSubject('directRelationship'); + const error = await row.findByTestSubject('relationshipsError'); + return { + type: await objectType.getVisibleText(), + id: await objectId.getVisibleText(), + relationship: await relationship.getVisibleText(), + error: await error.getVisibleText(), + }; + }); + } + async getTableSummary() { const table = await testSubjects.find('savedObjectsTable'); const $ = await table.parseDomContent(); From 61a51b568481abfba41f71781d24acfd4f65c7ee Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Mon, 1 Feb 2021 11:14:46 +0100 Subject: [PATCH 19/85] [ILM] New copy for rollover and small refactor for timeline (#89422) * refactor timeline and relative ms calculation logic for easier use outside of edit_policy section * further refactor, move child component to own file in timeline, and clean up public API for relative timing calculation * added copy to call out variation in timing (slop) introduced by rollover * use separate copy for timeline * remove unused import * fix unresolved merge * implement copy feedback * added component integration for showing/hiding hot phase icon on timeline Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../edit_policy/edit_policy.helpers.tsx | 1 + .../edit_policy/edit_policy.test.ts | 8 + .../components/phases/hot_phase/hot_phase.tsx | 5 + .../components/timeline/components/index.ts | 7 + .../components/timeline_phase_text.tsx | 28 ++ .../edit_policy/components/timeline/index.ts | 2 +- .../timeline/timeline.container.tsx | 33 +++ .../components/timeline/timeline.scss | 4 + .../components/timeline/timeline.tsx | 252 ++++++++++-------- .../sections/edit_policy/i18n_texts.ts | 7 + ...absolute_timing_to_relative_timing.test.ts | 9 +- .../lib/absolute_timing_to_relative_timing.ts | 78 +++--- .../sections/edit_policy/lib/index.ts | 5 +- 13 files changed, 288 insertions(+), 151 deletions(-) create mode 100644 x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/components/index.ts create mode 100644 x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/components/timeline_phase_text.tsx create mode 100644 x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.container.tsx diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/edit_policy.helpers.tsx b/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/edit_policy.helpers.tsx index 64b654b030236..d9256ec916ec8 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/edit_policy.helpers.tsx +++ b/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/edit_policy.helpers.tsx @@ -251,6 +251,7 @@ export const setup = async (arg?: { appServicesContext: Partial exists('timelineHotPhaseRolloverToolTip'), hasHotPhase: () => exists('ilmTimelineHotPhase'), hasWarmPhase: () => exists('ilmTimelineWarmPhase'), hasColdPhase: () => exists('ilmTimelineColdPhase'), diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/edit_policy.test.ts b/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/edit_policy.test.ts index bb96e8b4df239..05793a4bed581 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/edit_policy.test.ts +++ b/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/edit_policy.test.ts @@ -843,5 +843,13 @@ describe('', () => { expect(actions.timeline.hasColdPhase()).toBe(true); expect(actions.timeline.hasDeletePhase()).toBe(true); }); + + test('show and hide rollover indicator on timeline', async () => { + const { actions } = testBed; + expect(actions.timeline.hasRolloverIndicator()).toBe(true); + await actions.hot.toggleDefaultRollover(false); + await actions.hot.toggleRollover(false); + expect(actions.timeline.hasRolloverIndicator()).toBe(false); + }); }); }); diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/phases/hot_phase/hot_phase.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/phases/hot_phase/hot_phase.tsx index fb7c9a80acba0..02de47f8c56ef 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/phases/hot_phase/hot_phase.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/phases/hot_phase/hot_phase.tsx @@ -16,6 +16,7 @@ import { EuiTextColor, EuiSwitch, EuiIconTip, + EuiIcon, } from '@elastic/eui'; import { useFormData, UseField, SelectField, NumericField } from '../../../../../../shared_imports'; @@ -80,6 +81,10 @@ export const HotPhase: FunctionComponent = () => {

+ +   + {i18nTexts.editPolicy.rolloverOffsetsHotPhaseTiming} + path={isUsingDefaultRolloverPath}> {(field) => ( <> diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/components/index.ts b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/components/index.ts new file mode 100644 index 0000000000000..1c9d5e1abc316 --- /dev/null +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/components/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { TimelinePhaseText } from './timeline_phase_text'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/components/timeline_phase_text.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/components/timeline_phase_text.tsx new file mode 100644 index 0000000000000..a44e0f2407c52 --- /dev/null +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/components/timeline_phase_text.tsx @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent, ReactNode } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; + +export const TimelinePhaseText: FunctionComponent<{ + phaseName: ReactNode | string; + durationInPhase?: ReactNode | string; +}> = ({ phaseName, durationInPhase }) => ( + + + + {phaseName} + + + + {typeof durationInPhase === 'string' ? ( + {durationInPhase} + ) : ( + durationInPhase + )} + + +); diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/index.ts b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/index.ts index 4664429db37d7..7bcaa6584edf0 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/index.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/index.ts @@ -3,4 +3,4 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -export { Timeline } from './timeline'; +export { Timeline } from './timeline.container'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.container.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.container.tsx new file mode 100644 index 0000000000000..75f53fcb25091 --- /dev/null +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.container.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent } from 'react'; + +import { useFormData } from '../../../../../shared_imports'; + +import { formDataToAbsoluteTimings } from '../../lib'; + +import { useConfigurationIssues } from '../../form'; + +import { FormInternal } from '../../types'; + +import { Timeline as ViewComponent } from './timeline'; + +export const Timeline: FunctionComponent = () => { + const [formData] = useFormData(); + const timings = formDataToAbsoluteTimings(formData); + const { isUsingRollover } = useConfigurationIssues(); + return ( + + ); +}; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.scss b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.scss index 452221a29a991..7d65d2cd6b212 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.scss +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.scss @@ -84,4 +84,8 @@ $ilmDeletePhaseColor: shadeOrTint($euiColorVis5, 40%, 40%); background-color: $euiColorVis1; } } + + &__rolloverIcon { + display: inline-block; + } } diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.tsx index 40bab9c676de2..2e2db88e1384d 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/timeline/timeline.tsx @@ -4,9 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ import { i18n } from '@kbn/i18n'; -import React, { FunctionComponent, useMemo } from 'react'; +import React, { FunctionComponent, memo } from 'react'; import { - EuiText, EuiIcon, EuiIconProps, EuiFlexGroup, @@ -16,18 +15,19 @@ import { } from '@elastic/eui'; import { PhasesExceptDelete } from '../../../../../../common/types'; -import { useFormData } from '../../../../../shared_imports'; - -import { FormInternal } from '../../types'; import { - calculateRelativeTimingMs, + calculateRelativeFromAbsoluteMilliseconds, normalizeTimingsToHumanReadable, PhaseAgeInMilliseconds, + AbsoluteTimings, } from '../../lib'; import './timeline.scss'; import { InfinityIconSvg } from './infinity_icon.svg'; +import { TimelinePhaseText } from './components'; + +const exists = (v: unknown) => v != null; const InfinityIcon: FunctionComponent> = (props) => ( @@ -56,6 +56,13 @@ const i18nTexts = { hotPhase: i18n.translate('xpack.indexLifecycleMgmt.timeline.hotPhaseSectionTitle', { defaultMessage: 'Hot phase', }), + rolloverTooltip: i18n.translate( + 'xpack.indexLifecycleMgmt.timeline.hotPhaseRolloverToolTipContent', + { + defaultMessage: + 'How long it takes to reach the rollover criteria in the hot phase can vary. Data moves to the next phase when the time since rollover reaches the minimum age.', + } + ), warmPhase: i18n.translate('xpack.indexLifecycleMgmt.timeline.warmPhaseSectionTitle', { defaultMessage: 'Warm phase', }), @@ -88,121 +95,136 @@ const calculateWidths = (inputs: PhaseAgeInMilliseconds) => { }; }; -const TimelinePhaseText: FunctionComponent<{ - phaseName: string; - durationInPhase?: React.ReactNode | string; -}> = ({ phaseName, durationInPhase }) => ( - - - - {phaseName} - - - - {typeof durationInPhase === 'string' ? ( - {durationInPhase} - ) : ( - durationInPhase - )} - - -); - -export const Timeline: FunctionComponent = () => { - const [formData] = useFormData(); - - const phaseTimingInMs = useMemo(() => { - return calculateRelativeTimingMs(formData); - }, [formData]); +interface Props { + hasDeletePhase: boolean; + /** + * For now we assume the hot phase does not have a min age + */ + hotPhaseMinAge: undefined; + isUsingRollover: boolean; + warmPhaseMinAge?: string; + coldPhaseMinAge?: string; + deletePhaseMinAge?: string; +} - const humanReadableTimings = useMemo(() => normalizeTimingsToHumanReadable(phaseTimingInMs), [ - phaseTimingInMs, - ]); - - const widths = calculateWidths(phaseTimingInMs); - - const getDurationInPhaseContent = (phase: PhasesExceptDelete): string | React.ReactNode => - phaseTimingInMs.phases[phase] === Infinity ? ( - - ) : ( - humanReadableTimings[phase] - ); - - return ( - - - -

- {i18n.translate('xpack.indexLifecycleMgmt.timeline.title', { - defaultMessage: 'Policy Timeline', - })} -

-
-
- -
{ - if (el) { - el.style.setProperty('--ilm-timeline-hot-phase-width', widths.hot); - el.style.setProperty('--ilm-timeline-warm-phase-width', widths.warm ?? null); - el.style.setProperty('--ilm-timeline-cold-phase-width', widths.cold ?? null); - } - }} - > - - -
- {/* These are the actual color bars for the timeline */} -
-
- -
- {formData._meta?.warm.enabled && ( +/** + * Display a timeline given ILM policy phase information. This component is re-usable and memo-ized + * and should not rely directly on any application-specific context. + */ +export const Timeline: FunctionComponent = memo( + ({ hasDeletePhase, isUsingRollover, ...phasesMinAge }) => { + const absoluteTimings: AbsoluteTimings = { + hot: { min_age: phasesMinAge.hotPhaseMinAge }, + warm: phasesMinAge.warmPhaseMinAge ? { min_age: phasesMinAge.warmPhaseMinAge } : undefined, + cold: phasesMinAge.coldPhaseMinAge ? { min_age: phasesMinAge.coldPhaseMinAge } : undefined, + delete: phasesMinAge.deletePhaseMinAge + ? { min_age: phasesMinAge.deletePhaseMinAge } + : undefined, + }; + + const phaseAgeInMilliseconds = calculateRelativeFromAbsoluteMilliseconds(absoluteTimings); + const humanReadableTimings = normalizeTimingsToHumanReadable(phaseAgeInMilliseconds); + + const widths = calculateWidths(phaseAgeInMilliseconds); + + const getDurationInPhaseContent = (phase: PhasesExceptDelete): string | React.ReactNode => + phaseAgeInMilliseconds.phases[phase] === Infinity ? ( + + ) : ( + humanReadableTimings[phase] + ); + + return ( + + + +

+ {i18n.translate('xpack.indexLifecycleMgmt.timeline.title', { + defaultMessage: 'Policy Timeline', + })} +

+
+
+ +
{ + if (el) { + el.style.setProperty('--ilm-timeline-hot-phase-width', widths.hot); + el.style.setProperty('--ilm-timeline-warm-phase-width', widths.warm ?? null); + el.style.setProperty('--ilm-timeline-cold-phase-width', widths.cold ?? null); + } + }} + > + + +
+ {/* These are the actual color bars for the timeline */}
-
+
+ {i18nTexts.hotPhase} +   +
+ +
+ + ) : ( + i18nTexts.hotPhase + ) + } + durationInPhase={getDurationInPhaseContent('hot')} />
- )} - {formData._meta?.cold.enabled && ( + {exists(phaseAgeInMilliseconds.phases.warm) && ( +
+
+ +
+ )} + {exists(phaseAgeInMilliseconds.phases.cold) && ( +
+
+ +
+ )} +
+ + {hasDeletePhase && ( +
-
- +
- )} -
-
- {formData._meta?.delete.enabled && ( - -
- -
-
- )} - -
- - - ); -}; + + )} + +
+ + + ); + } +); diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/i18n_texts.ts b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/i18n_texts.ts index 71085a6d7a2b8..cf8c92b8333d0 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/i18n_texts.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/i18n_texts.ts @@ -11,6 +11,13 @@ export const i18nTexts = { shrinkLabel: i18n.translate('xpack.indexLifecycleMgmt.shrink.indexFieldLabel', { defaultMessage: 'Shrink index', }), + rolloverOffsetsHotPhaseTiming: i18n.translate( + 'xpack.indexLifecycleMgmt.rollover.rolloverOffsetsPhaseTimingDescription', + { + defaultMessage: + 'How long it takes to reach the rollover criteria in the hot phase can vary. Data moves to the next phase when the time since rollover reaches the minimum age.', + } + ), searchableSnapshotInHotPhase: { searchableSnapshotDisallowed: { calloutTitle: i18n.translate( diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/absolute_timing_to_relative_timing.test.ts b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/absolute_timing_to_relative_timing.test.ts index 28910871fa33b..405de2b55a2f7 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/absolute_timing_to_relative_timing.test.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/absolute_timing_to_relative_timing.test.ts @@ -4,13 +4,20 @@ * you may not use this file except in compliance with the Elastic License. */ +import { flow } from 'fp-ts/function'; import { deserializer } from '../form'; import { + formDataToAbsoluteTimings, + calculateRelativeFromAbsoluteMilliseconds, absoluteTimingToRelativeTiming, - calculateRelativeTimingMs, } from './absolute_timing_to_relative_timing'; +export const calculateRelativeTimingMs = flow( + formDataToAbsoluteTimings, + calculateRelativeFromAbsoluteMilliseconds +); + describe('Conversion of absolute policy timing to relative timing', () => { describe('calculateRelativeTimingMs', () => { describe('policy that never deletes data (keep forever)', () => { diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/absolute_timing_to_relative_timing.ts b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/absolute_timing_to_relative_timing.ts index 2f37608b2d7ae..a44863b2f1ce2 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/absolute_timing_to_relative_timing.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/absolute_timing_to_relative_timing.ts @@ -14,16 +14,21 @@ * * This code converts the absolute timings to _relative_ timings of the form: 30 days in hot phase, * 40 days in warm phase then forever in cold phase. + * + * All functions exported from this file can be viewed as utilities for working with form data and + * other defined interfaces to calculate the relative amount of time data will spend in a phase. */ import moment from 'moment'; -import { flow } from 'fp-ts/lib/function'; import { i18n } from '@kbn/i18n'; +import { flow } from 'fp-ts/function'; import { splitSizeAndUnits } from '../../../lib/policies'; import { FormInternal } from '../types'; +/* -===- Private functions and types -===- */ + type MinAgePhase = 'warm' | 'cold' | 'delete'; type Phase = 'hot' | MinAgePhase; @@ -43,7 +48,34 @@ const i18nTexts = { }), }; -interface AbsoluteTimings { +const phaseOrder: Phase[] = ['hot', 'warm', 'cold', 'delete']; + +const getMinAge = (phase: MinAgePhase, formData: FormInternal) => ({ + min_age: formData.phases?.[phase]?.min_age + ? formData.phases[phase]!.min_age! + formData._meta[phase].minAgeUnit + : '0ms', +}); + +/** + * See https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math + * for all date math values. ILM policies also support "micros" and "nanos". + */ +const getPhaseMinAgeInMilliseconds = (phase: { min_age: string }): number => { + let milliseconds: number; + const { units, size } = splitSizeAndUnits(phase.min_age); + if (units === 'micros') { + milliseconds = parseInt(size, 10) / 1e3; + } else if (units === 'nanos') { + milliseconds = parseInt(size, 10) / 1e6; + } else { + milliseconds = moment.duration(size, units as any).asMilliseconds(); + } + return milliseconds; +}; + +/* -===- Public functions and types -===- */ + +export interface AbsoluteTimings { hot: { min_age: undefined; }; @@ -67,16 +99,7 @@ export interface PhaseAgeInMilliseconds { }; } -const phaseOrder: Phase[] = ['hot', 'warm', 'cold', 'delete']; - -const getMinAge = (phase: MinAgePhase, formData: FormInternal) => ({ - min_age: - formData.phases && formData.phases[phase]?.min_age - ? formData.phases[phase]!.min_age! + formData._meta[phase].minAgeUnit - : '0ms', -}); - -const formDataToAbsoluteTimings = (formData: FormInternal): AbsoluteTimings => { +export const formDataToAbsoluteTimings = (formData: FormInternal): AbsoluteTimings => { const { _meta } = formData; if (!_meta) { return { hot: { min_age: undefined } }; @@ -89,28 +112,13 @@ const formDataToAbsoluteTimings = (formData: FormInternal): AbsoluteTimings => { }; }; -/** - * See https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math - * for all date math values. ILM policies also support "micros" and "nanos". - */ -const getPhaseMinAgeInMilliseconds = (phase: { min_age: string }): number => { - let milliseconds: number; - const { units, size } = splitSizeAndUnits(phase.min_age); - if (units === 'micros') { - milliseconds = parseInt(size, 10) / 1e3; - } else if (units === 'nanos') { - milliseconds = parseInt(size, 10) / 1e6; - } else { - milliseconds = moment.duration(size, units as any).asMilliseconds(); - } - return milliseconds; -}; - /** * Given a set of phase minimum age absolute timings, like hot phase 0ms and warm phase 3d, work out * the number of milliseconds data will reside in phase. */ -const calculateMilliseconds = (inputs: AbsoluteTimings): PhaseAgeInMilliseconds => { +export const calculateRelativeFromAbsoluteMilliseconds = ( + inputs: AbsoluteTimings +): PhaseAgeInMilliseconds => { return phaseOrder.reduce( (acc, phaseName, idx) => { // Delete does not have an age associated with it @@ -152,6 +160,8 @@ const calculateMilliseconds = (inputs: AbsoluteTimings): PhaseAgeInMilliseconds ); }; +export type RelativePhaseTimingInMs = ReturnType; + const millisecondsToDays = (milliseconds?: number): string | undefined => { if (milliseconds == null) { return; @@ -177,10 +187,12 @@ export const normalizeTimingsToHumanReadable = ({ }; }; -export const calculateRelativeTimingMs = flow(formDataToAbsoluteTimings, calculateMilliseconds); - +/** + * Given {@link FormInternal}, extract the min_age values for each phase and calculate + * human readable strings for communicating how long data will remain in a phase. + */ export const absoluteTimingToRelativeTiming = flow( formDataToAbsoluteTimings, - calculateMilliseconds, + calculateRelativeFromAbsoluteMilliseconds, normalizeTimingsToHumanReadable ); diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/index.ts b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/index.ts index 9593fcc810a6f..a9372c99a72fc 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/index.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/lib/index.ts @@ -6,7 +6,10 @@ export { absoluteTimingToRelativeTiming, - calculateRelativeTimingMs, + calculateRelativeFromAbsoluteMilliseconds, normalizeTimingsToHumanReadable, + formDataToAbsoluteTimings, + AbsoluteTimings, PhaseAgeInMilliseconds, + RelativePhaseTimingInMs, } from './absolute_timing_to_relative_timing'; From 19b1f46611d05a9e494b1fe107bf103d417a0456 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Mon, 1 Feb 2021 12:43:06 +0200 Subject: [PATCH 20/85] Fixes flakiness on timelion suggestions (#89538) * Fixes flakiness on timelion suggestions * Improvements * Remove flakiness Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- test/functional/apps/timelion/_expression_typeahead.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/functional/apps/timelion/_expression_typeahead.js b/test/functional/apps/timelion/_expression_typeahead.js index 744f8de15e767..3db5cb48dd38b 100644 --- a/test/functional/apps/timelion/_expression_typeahead.js +++ b/test/functional/apps/timelion/_expression_typeahead.js @@ -75,18 +75,18 @@ export default function ({ getPageObjects }) { await PageObjects.timelion.updateExpression(',split'); await PageObjects.timelion.clickSuggestion(); const suggestions = await PageObjects.timelion.getSuggestionItemsText(); - expect(suggestions.length).to.eql(51); + expect(suggestions.length).not.to.eql(0); expect(suggestions[0].includes('@message.raw')).to.eql(true); - await PageObjects.timelion.clickSuggestion(10, 2000); + await PageObjects.timelion.clickSuggestion(10); }); it('should show field suggestions for metric argument when index pattern set', async () => { await PageObjects.timelion.updateExpression(',metric'); await PageObjects.timelion.clickSuggestion(); await PageObjects.timelion.updateExpression('avg:'); - await PageObjects.timelion.clickSuggestion(0, 2000); + await PageObjects.timelion.clickSuggestion(0); const suggestions = await PageObjects.timelion.getSuggestionItemsText(); - expect(suggestions.length).to.eql(2); + expect(suggestions.length).not.to.eql(0); expect(suggestions[0].includes('avg:bytes')).to.eql(true); }); }); From e31b6a8c91e88741238bddc90147a825444640eb Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Mon, 1 Feb 2021 11:52:57 +0100 Subject: [PATCH 21/85] [Lens] Add smoke test for lens in canvas (#88657) --- x-pack/test/functional/apps/canvas/index.js | 1 + x-pack/test/functional/apps/canvas/lens.ts | 30 ++ x-pack/test/functional/config.js | 1 + .../es_archives/canvas/lens/data.json | 190 ++++++++ .../es_archives/canvas/lens/mappings.json | 409 ++++++++++++++++++ 5 files changed, 631 insertions(+) create mode 100644 x-pack/test/functional/apps/canvas/lens.ts create mode 100644 x-pack/test/functional/es_archives/canvas/lens/data.json create mode 100644 x-pack/test/functional/es_archives/canvas/lens/mappings.json diff --git a/x-pack/test/functional/apps/canvas/index.js b/x-pack/test/functional/apps/canvas/index.js index b7031cf0e55da..d5f7540f48c83 100644 --- a/x-pack/test/functional/apps/canvas/index.js +++ b/x-pack/test/functional/apps/canvas/index.js @@ -26,6 +26,7 @@ export default function canvasApp({ loadTestFile, getService }) { loadTestFile(require.resolve('./custom_elements')); loadTestFile(require.resolve('./feature_controls/canvas_security')); loadTestFile(require.resolve('./feature_controls/canvas_spaces')); + loadTestFile(require.resolve('./lens')); loadTestFile(require.resolve('./reports')); }); } diff --git a/x-pack/test/functional/apps/canvas/lens.ts b/x-pack/test/functional/apps/canvas/lens.ts new file mode 100644 index 0000000000000..e74795de6c7ea --- /dev/null +++ b/x-pack/test/functional/apps/canvas/lens.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function canvasLensTest({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects(['canvas', 'common', 'header', 'lens']); + const esArchiver = getService('esArchiver'); + + describe('lens in canvas', function () { + before(async () => { + await esArchiver.load('canvas/lens'); + // open canvas home + await PageObjects.common.navigateToApp('canvas'); + // load test workpad + await PageObjects.common.navigateToApp('canvas', { + hash: '/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1', + }); + }); + + it('renders lens visualization', async () => { + await PageObjects.header.waitUntilLoadingHasFinished(); + + await PageObjects.lens.assertMetric('Maximum of bytes', '16,788'); + }); + }); +} diff --git a/x-pack/test/functional/config.js b/x-pack/test/functional/config.js index 1815942a06a9a..fc508f8477ebe 100644 --- a/x-pack/test/functional/config.js +++ b/x-pack/test/functional/config.js @@ -232,6 +232,7 @@ export default async function ({ readConfigFile }) { { feature: { canvas: ['all'], + visualize: ['all'], }, spaces: ['*'], }, diff --git a/x-pack/test/functional/es_archives/canvas/lens/data.json b/x-pack/test/functional/es_archives/canvas/lens/data.json new file mode 100644 index 0000000000000..dca7d31d71082 --- /dev/null +++ b/x-pack/test/functional/es_archives/canvas/lens/data.json @@ -0,0 +1,190 @@ +{ + "type": "doc", + "value": { + "id": "space:default", + "index": ".kibana_1", + "source": { + "space": { + "_reserved": true, + "color": "#00bfb3", + "description": "This is your default space!", + "name": "Default" + }, + "type": "space", + "updated_at": "2018-11-06T18:20:26.703Z" + } + } +} + +{ + "type": "doc", + "value": { + "id": "canvas-workpad:workpad-1705f884-6224-47de-ba49-ca224fe6ec31", + "index": ".kibana_1", + "source": { + "canvas-workpad": { + "@created": "2018-11-19T19:17:12.646Z", + "@timestamp": "2018-11-19T19:36:28.499Z", + "assets": { + }, + "colors": [ + "#37988d", + "#c19628", + "#b83c6f", + "#3f9939", + "#1785b0", + "#ca5f35", + "#45bdb0", + "#f2bc33", + "#e74b8b", + "#4fbf48", + "#1ea6dc", + "#fd7643", + "#72cec3", + "#f5cc5d", + "#ec77a8", + "#7acf74", + "#4cbce4", + "#fd986f", + "#a1ded7", + "#f8dd91", + "#f2a4c5", + "#a6dfa2", + "#86d2ed", + "#fdba9f", + "#000000", + "#444444", + "#777777", + "#BBBBBB", + "#FFFFFF", + "rgba(255,255,255,0)" + ], + "height": 920, + "id": "workpad-1705f884-6224-47de-ba49-ca224fe6ec31", + "isWriteable": true, + "name": "Test Workpad", + "page": 0, + "pages": [ + { + "elements": [ + { + "expression": "savedLens id=\"my-lens-vis\" timerange={timerange from=\"2014-01-01\" to=\"2018-01-01\"}", + "id": "element-8f64a10a-01f3-4a71-a682-5b627cbe4d0e", + "position": { + "angle": 0, + "height": 238, + "left": 33.5, + "top": 20, + "width": 338 + } + } + ], + "id": "page-c38cd459-10fe-45f9-847b-2cbd7ec74319", + "style": { + "background": "#fff" + }, + "transition": { + } + } + ], + "width": 840 + }, + "type": "canvas-workpad", + "updated_at": "2018-11-19T19:36:28.511Z" + } + } +} + +{ + "type": "doc", + "value": { + "id": "lens:my-lens-vis", + "index": ".kibana_1", + "source": { + "lens": { + "expression": "", + "state": { + "datasourceMetaData": { + "filterableIndexPatterns": [ + { + "id": "logstash-lens", + "title": "logstash-lens" + } + ] + }, + "datasourceStates": { + "indexpattern": { + "currentIndexPatternId": "logstash-lens", + "layers": { + "c61a8afb-a185-4fae-a064-fb3846f6c451": { + "columnOrder": [ + "2cd09808-3915-49f4-b3b0-82767eba23f7" + ], + "columns": { + "2cd09808-3915-49f4-b3b0-82767eba23f7": { + "dataType": "number", + "isBucketed": false, + "label": "Maximum of bytes", + "operationType": "max", + "scale": "ratio", + "sourceField": "bytes" + } + }, + "indexPatternId": "logstash-lens" + } + } + } + }, + "filters": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "2cd09808-3915-49f4-b3b0-82767eba23f7", + "layerId": "c61a8afb-a185-4fae-a064-fb3846f6c451" + } + }, + "title": "Artistpreviouslyknownaslens", + "visualizationType": "lnsMetric" + }, + "references": [], + "type": "lens", + "updated_at": "2019-10-16T00:28:08.979Z" + } + } +} + +{ + "type": "doc", + "value": { + "index": "logstash-lens", + "id": "1", + "source": { + "@timestamp": "2015-09-20T02:00:00.000Z", + "bytes": 16788 + } + } +} + +{ + "type": "doc", + "value": { + "id": "index-pattern:logstash-lens", + "index": ".kibana_1", + "source": { + "index-pattern" : { + "title" : "logstash-lens", + "timeFieldName" : "@timestamp", + "fields" : "[]" + }, + "type" : "index-pattern", + "references" : [ ], + "migrationVersion" : { + "index-pattern" : "7.6.0" + }, + "updated_at" : "2020-08-19T08:39:09.998Z" + }, + "type": "_doc" + } +} \ No newline at end of file diff --git a/x-pack/test/functional/es_archives/canvas/lens/mappings.json b/x-pack/test/functional/es_archives/canvas/lens/mappings.json new file mode 100644 index 0000000000000..811bfaaae0d2c --- /dev/null +++ b/x-pack/test/functional/es_archives/canvas/lens/mappings.json @@ -0,0 +1,409 @@ +{ + "type": "index", + "value": { + "aliases": { + ".kibana": { + } + }, + "index": ".kibana_1", + "mappings": { + "dynamic": "strict", + "properties": { + "canvas-workpad": { + "dynamic": "false", + "properties": { + "@created": { + "type": "date" + }, + "@timestamp": { + "type": "date" + }, + "id": { + "index": false, + "type": "text" + }, + "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "config": { + "dynamic": "true", + "properties": { + "buildNum": { + "type": "keyword" + } + } + }, + "references": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "dashboard": { + "properties": { + "description": { + "type": "text" + }, + "hits": { + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "optionsJSON": { + "type": "text" + }, + "panelsJSON": { + "type": "text" + }, + "refreshInterval": { + "properties": { + "display": { + "type": "keyword" + }, + "pause": { + "type": "boolean" + }, + "section": { + "type": "integer" + }, + "value": { + "type": "integer" + } + } + }, + "timeFrom": { + "type": "keyword" + }, + "timeRestore": { + "type": "boolean" + }, + "timeTo": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "uiStateJSON": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "graph-workspace": { + "properties": { + "description": { + "type": "text" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "numLinks": { + "type": "integer" + }, + "numVertices": { + "type": "integer" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + }, + "wsState": { + "type": "text" + } + } + }, + "index-pattern": { + "properties": { + "fieldFormatMap": { + "type": "text" + }, + "fields": { + "type": "text" + }, + "intervalName": { + "type": "keyword" + }, + "notExpandable": { + "type": "boolean" + }, + "sourceFilters": { + "type": "text" + }, + "timeFieldName": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "type": { + "type": "keyword" + }, + "typeMeta": { + "type": "keyword" + } + } + }, + "lens": { + "properties": { + "expression": { + "index": false, + "type": "keyword" + }, + "state": { + "type": "flattened" + }, + "title": { + "type": "text" + }, + "visualizationType": { + "type": "keyword" + } + } + }, + "kql-telemetry": { + "properties": { + "optInCount": { + "type": "long" + }, + "optOutCount": { + "type": "long" + } + } + }, + "migrationVersion": { + "dynamic": "true", + "type": "object" + }, + "namespace": { + "type": "keyword" + }, + "search": { + "properties": { + "columns": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "hits": { + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "sort": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "server": { + "properties": { + "uuid": { + "type": "keyword" + } + } + }, + "space": { + "properties": { + "_reserved": { + "type": "boolean" + }, + "color": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "initials": { + "type": "keyword" + }, + "disabledFeatures": { + "type": "keyword" + }, + "name": { + "fields": { + "keyword": { + "ignore_above": 2048, + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "telemetry": { + "properties": { + "enabled": { + "type": "boolean" + } + } + }, + "timelion-sheet": { + "properties": { + "description": { + "type": "text" + }, + "hits": { + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "timelion_chart_height": { + "type": "integer" + }, + "timelion_columns": { + "type": "integer" + }, + "timelion_interval": { + "type": "keyword" + }, + "timelion_other_interval": { + "type": "keyword" + }, + "timelion_rows": { + "type": "integer" + }, + "timelion_sheet": { + "type": "text" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "url": { + "properties": { + "accessCount": { + "type": "long" + }, + "accessDate": { + "type": "date" + }, + "createDate": { + "type": "date" + }, + "url": { + "fields": { + "keyword": { + "ignore_above": 2048, + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "visualization": { + "properties": { + "description": { + "type": "text" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "savedSearchId": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "uiStateJSON": { + "type": "text" + }, + "version": { + "type": "integer" + }, + "visState": { + "type": "text" + } + } + } + } + }, + "settings": { + "index": { + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} + +{ + "type": "index", + "value": { + "index": "logstash-lens", + "mappings": { + "properties": { + "@timestamp": { + "type": "date" + }, + "bytes": { + "type": "float" + } + } + }, + "settings": { + "index": { + "number_of_shards": "1", + "number_of_replicas": "0" + } + } + } +} \ No newline at end of file From 1b8c3c1dcc5c077a61d3c66511a525157374f4f7 Mon Sep 17 00:00:00 2001 From: Marta Bondyra Date: Mon, 1 Feb 2021 11:54:16 +0100 Subject: [PATCH 22/85] [Lens] Refactor reorder drag and drop (#88578) --- test/functional/services/common/browser.ts | 2 +- .../__snapshots__/drag_drop.test.tsx.snap | 24 +- .../lens/public/drag_drop/drag_drop.scss | 11 +- .../lens/public/drag_drop/drag_drop.test.tsx | 443 ++++++--- .../lens/public/drag_drop/drag_drop.tsx | 892 +++++++++++------- .../lens/public/drag_drop/providers.tsx | 222 ++++- .../plugins/lens/public/drag_drop/readme.md | 4 +- .../config_panel/config_panel.test.tsx | 8 + .../config_panel/config_panel.tsx | 63 +- .../config_panel/dimension_button.tsx | 66 ++ .../draggable_dimension_button.tsx | 110 +++ .../config_panel/empty_dimension_button.tsx | 97 ++ .../config_panel/layer_panel.scss | 8 +- .../config_panel/layer_panel.test.tsx | 199 ++-- .../editor_frame/config_panel/layer_panel.tsx | 511 ++++------ .../config_panel/remove_layer_button.tsx | 60 ++ .../editor_frame/config_panel/types.ts | 26 +- .../editor_frame/data_panel_wrapper.tsx | 6 +- .../editor_frame/editor_frame.test.tsx | 24 +- .../editor_frame/editor_frame.tsx | 12 +- .../editor_frame/suggestion_helpers.ts | 4 +- .../workspace_panel/workspace_panel.test.tsx | 12 +- .../workspace_panel/workspace_panel.tsx | 16 +- .../datapanel.test.tsx | 15 +- .../indexpattern_datasource/datapanel.tsx | 27 +- .../dimension_panel/droppable.test.ts | 7 + .../dimension_panel/droppable.ts | 189 ++-- .../field_item.test.tsx | 2 + .../indexpattern_datasource/field_item.tsx | 18 +- .../indexpattern_datasource/field_list.tsx | 11 +- .../fields_accordion.test.tsx | 1 + .../fields_accordion.tsx | 105 ++- .../indexpattern_datasource/indexpattern.tsx | 4 +- .../public/indexpattern_datasource/mocks.ts | 5 + x-pack/plugins/lens/public/types.ts | 8 +- .../xy_visualization/xy_config_panel.tsx | 10 +- .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../test/functional/page_objects/lens_page.ts | 2 +- 39 files changed, 2074 insertions(+), 1152 deletions(-) create mode 100644 x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/dimension_button.tsx create mode 100644 x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/draggable_dimension_button.tsx create mode 100644 x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/empty_dimension_button.tsx create mode 100644 x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/remove_layer_button.tsx diff --git a/test/functional/services/common/browser.ts b/test/functional/services/common/browser.ts index 635fde6dad720..4a7e82d5b42c0 100644 --- a/test/functional/services/common/browser.ts +++ b/test/functional/services/common/browser.ts @@ -289,13 +289,13 @@ export async function BrowserProvider({ getService }: FtrProviderContext) { } const origin = document.querySelector(arguments[0]); - const target = document.querySelector(arguments[1]); const dragStartEvent = createEvent('dragstart'); dispatchEvent(origin, dragStartEvent); setTimeout(() => { const dropEvent = createEvent('drop'); + const target = document.querySelector(arguments[1]); dispatchEvent(target, dropEvent, dragStartEvent.dataTransfer); const dragEndEvent = createEvent('dragend'); dispatchEvent(origin, dragEndEvent, dropEvent.dataTransfer); diff --git a/x-pack/plugins/lens/public/drag_drop/__snapshots__/drag_drop.test.tsx.snap b/x-pack/plugins/lens/public/drag_drop/__snapshots__/drag_drop.test.tsx.snap index dc53f3a2bc2a7..6423a9f6190a7 100644 --- a/x-pack/plugins/lens/public/drag_drop/__snapshots__/drag_drop.test.tsx.snap +++ b/x-pack/plugins/lens/public/drag_drop/__snapshots__/drag_drop.test.tsx.snap @@ -13,10 +13,8 @@ exports[`DragDrop items that have droppable=false get special styling when anoth +
+ +
`; diff --git a/x-pack/plugins/lens/public/drag_drop/drag_drop.scss b/x-pack/plugins/lens/public/drag_drop/drag_drop.scss index ded0b4552a4e5..d0a4019055d57 100644 --- a/x-pack/plugins/lens/public/drag_drop/drag_drop.scss +++ b/x-pack/plugins/lens/public/drag_drop/drag_drop.scss @@ -52,7 +52,7 @@ } } -.lnsDragDrop__reorderableContainer { +.lnsDragDrop__container { position: relative; } @@ -63,11 +63,18 @@ height: calc(100% + #{$lnsLayerPanelDimensionMargin}); } -.lnsDragDrop-isReorderable { +.lnsDragDrop-translatableDrop { + transform: translateY(0); transition: transform $euiAnimSpeedFast ease-in-out; pointer-events: none; } +.lnsDragDrop-translatableDrag { + transform: translateY(0); + transition: transform $euiAnimSpeedFast ease-in-out; + position: relative; +} + // Draggable item when it is moving .lnsDragDrop-isHidden { opacity: 0; diff --git a/x-pack/plugins/lens/public/drag_drop/drag_drop.test.tsx b/x-pack/plugins/lens/public/drag_drop/drag_drop.test.tsx index 07b489d29ad06..9e1583b0c6e81 100644 --- a/x-pack/plugins/lens/public/drag_drop/drag_drop.test.tsx +++ b/x-pack/plugins/lens/public/drag_drop/drag_drop.test.tsx @@ -6,11 +6,33 @@ import React from 'react'; import { render, mount } from 'enzyme'; -import { DragDrop, ReorderableDragDrop, DropToHandler, DropHandler } from './drag_drop'; -import { ChildDragDropProvider, ReorderProvider } from './providers'; +import { DragDrop, DropHandler } from './drag_drop'; +import { + ChildDragDropProvider, + DragContextState, + ReorderProvider, + DragDropIdentifier, + ActiveDropTarget, +} from './providers'; +import { act } from 'react-dom/test-utils'; jest.useFakeTimers(); +const defaultContext = { + dragging: undefined, + setDragging: jest.fn(), + setActiveDropTarget: () => {}, + activeDropTarget: undefined, + keyboardMode: false, + setKeyboardMode: () => {}, + setA11yMessage: jest.fn(), +}; + +const dataTransfer = { + setData: jest.fn(), + getData: jest.fn(), +}; + describe('DragDrop', () => { const value = { id: '1', label: 'hello' }; test('renders if nothing is being dragged', () => { @@ -26,7 +48,7 @@ describe('DragDrop', () => { test('dragover calls preventDefault if droppable is true', () => { const preventDefault = jest.fn(); const component = mount( - + ); @@ -39,7 +61,7 @@ describe('DragDrop', () => { test('dragover does not call preventDefault if droppable is false', () => { const preventDefault = jest.fn(); const component = mount( - + ); @@ -51,13 +73,9 @@ describe('DragDrop', () => { test('dragstart sets dragging in the context', async () => { const setDragging = jest.fn(); - const dataTransfer = { - setData: jest.fn(), - getData: jest.fn(), - }; const component = mount( - + @@ -79,7 +97,11 @@ describe('DragDrop', () => { const onDrop = jest.fn(); const component = mount( - + @@ -93,7 +115,7 @@ describe('DragDrop', () => { expect(preventDefault).toBeCalled(); expect(stopPropagation).toBeCalled(); expect(setDragging).toBeCalledWith(undefined); - expect(onDrop).toBeCalledWith({ id: '2', label: 'hi' }); + expect(onDrop).toBeCalledWith({ id: '2', label: 'hi' }, { id: '1', label: 'hello' }); }); test('drop function is not called on droppable=false', async () => { @@ -103,7 +125,7 @@ describe('DragDrop', () => { const onDrop = jest.fn(); const component = mount( - + @@ -127,6 +149,7 @@ describe('DragDrop', () => { throw x; }} droppable + value={value} > @@ -137,11 +160,11 @@ describe('DragDrop', () => { test('items that have droppable=false get special styling when another item is dragged', () => { const component = mount( - {}}> + - {}} droppable={false}> + {}} droppable={false} value={{ id: '2' }}> @@ -153,17 +176,25 @@ describe('DragDrop', () => { test('additional styles are reflected in the className until drop', () => { let dragging: { id: '1' } | undefined; const getAdditionalClasses = jest.fn().mockReturnValue('additional'); + let activeDropTarget; + const component = mount( { dragging = { id: '1' }; }} + setActiveDropTarget={(val) => { + activeDropTarget = { activeDropTarget: val }; + }} + activeDropTarget={activeDropTarget} > {}} droppable getAdditionalClassesOnEnter={getAdditionalClasses} @@ -173,10 +204,6 @@ describe('DragDrop', () => { ); - const dataTransfer = { - setData: jest.fn(), - getData: jest.fn(), - }; component .find('[data-test-subj="lnsDragDrop"]') .first() @@ -184,40 +211,91 @@ describe('DragDrop', () => { jest.runAllTimers(); component.find('[data-test-subj="lnsDragDrop"]').at(1).simulate('dragover'); - expect(component.find('.additional')).toHaveLength(1); - - component.find('[data-test-subj="lnsDragDrop"]').at(1).simulate('dragleave'); + component.find('[data-test-subj="lnsDragDrop"]').at(1).simulate('drop'); expect(component.find('.additional')).toHaveLength(0); + }); + + test('additional enter styles are reflected in the className until dragleave', () => { + let dragging: { id: '1' } | undefined; + const getAdditionalClasses = jest.fn().mockReturnValue('additional'); + const setActiveDropTarget = jest.fn(); + + const component = mount( + { + dragging = { id: '1' }; + }} + setActiveDropTarget={setActiveDropTarget} + activeDropTarget={ + ({ activeDropTarget: value } as unknown) as DragContextState['activeDropTarget'] + } + keyboardMode={false} + setKeyboardMode={(keyboardMode) => true} + > + + + + {}} + droppable + getAdditionalClassesOnEnter={getAdditionalClasses} + > + + + + ); + + component + .find('[data-test-subj="lnsDragDrop"]') + .first() + .simulate('dragstart', { dataTransfer }); + jest.runAllTimers(); component.find('[data-test-subj="lnsDragDrop"]').at(1).simulate('dragover'); - component.find('[data-test-subj="lnsDragDrop"]').at(1).simulate('drop'); - expect(component.find('.additional')).toHaveLength(0); + expect(component.find('.additional')).toHaveLength(1); + + component.find('[data-test-subj="lnsDragDrop"]').at(1).simulate('dragleave'); + expect(setActiveDropTarget).toBeCalledWith(undefined); }); describe('reordering', () => { const mountComponent = ( - dragging: { id: '1' } | undefined, - onDrop: DropHandler = jest.fn(), - dropTo: DropToHandler = jest.fn() - ) => - mount( - { - dragging = { id: '1' }; - }} - > + dragContext: Partial | undefined, + onDrop: DropHandler = jest.fn() + ) => { + let dragging = dragContext?.dragging; + let keyboardMode = !!dragContext?.keyboardMode; + let activeDropTarget = dragContext?.activeDropTarget; + const baseContext = { + dragging, + setDragging: (val?: DragDropIdentifier) => { + dragging = val; + }, + keyboardMode, + setKeyboardMode: jest.fn((mode) => { + keyboardMode = mode; + }), + setActiveDropTarget: (target?: DragDropIdentifier) => { + activeDropTarget = { activeDropTarget: target } as ActiveDropTarget; + }, + activeDropTarget, + setA11yMessage: jest.fn(), + }; + return mount( + 1 @@ -227,12 +305,11 @@ describe('DragDrop', () => { droppable dragType="reorder" dropType="reorder" - itemsInGroup={['1', '2', '3']} + reorderableGroup={[{ id: '1' }, { id: '2' }, { id: '3' }]} value={{ id: '2', }} onDrop={onDrop} - dropTo={dropTo} > 2 @@ -242,132 +319,270 @@ describe('DragDrop', () => { droppable dragType="reorder" dropType="reorder" - itemsInGroup={['1', '2', '3']} + reorderableGroup={[{ id: '1' }, { id: '2' }, { id: '3' }]} value={{ id: '3', }} onDrop={onDrop} - dropTo={dropTo} > 3 ); - test(`ReorderableDragDrop component doesn't appear for groups of 1 or less`, () => { - let dragging; - const component = mount( - { - dragging = { id: '1' }; - }} - > - - -
- - - - ); - expect(component.find(ReorderableDragDrop)).toHaveLength(0); - }); - test(`Reorderable component renders properly`, () => { + }; + test(`Inactive reorderable group renders properly`, () => { const component = mountComponent(undefined, jest.fn()); - expect(component.find(ReorderableDragDrop)).toHaveLength(3); + expect(component.find('.lnsDragDrop-reorderable')).toHaveLength(3); }); - test(`Elements between dragged and drop get extra class to show the reorder effect when dragging`, () => { - const component = mountComponent({ id: '1' }, jest.fn()); - const dataTransfer = { - setData: jest.fn(), - getData: jest.fn(), - }; - component - .find(ReorderableDragDrop) - .first() - .find('[data-test-subj="lnsDragDrop"]') - .simulate('dragstart', { dataTransfer }); - jest.runAllTimers(); - component.find('[data-test-subj="lnsDragDrop-reorderableDrop"]').at(2).simulate('dragover'); + test(`Reorderable group with lifted element renders properly`, () => { + const setDragging = jest.fn(); + const setA11yMessage = jest.fn(); + const component = mountComponent( + { dragging: { id: '1' }, setA11yMessage, setDragging }, + jest.fn() + ); + act(() => { + component + .find('[data-test-subj="lnsDragDrop"]') + .first() + .simulate('dragstart', { dataTransfer }); + jest.runAllTimers(); + }); + + expect(setDragging).toBeCalledWith({ id: '1' }); + expect(setA11yMessage).toBeCalledWith('You have lifted an item 1 in position 1'); + expect( + component + .find('[data-test-subj="lnsDragDrop-reorderableGroup"]') + .hasClass('lnsDragDrop-isActiveGroup') + ).toEqual(true); + }); + + test(`Reordered elements get extra styles to show the reorder effect when dragging`, () => { + const component = mountComponent({ dragging: { id: '1' } }, jest.fn()); + + act(() => { + component + .find('[data-test-subj="lnsDragDrop"]') + .first() + .simulate('dragstart', { dataTransfer }); + jest.runAllTimers(); + }); + + component + .find('[data-test-subj="lnsDragDrop-reorderableDropLayer"]') + .at(1) + .simulate('dragover'); expect( component.find('[data-test-subj="lnsDragDrop-reorderableDrag"]').at(0).prop('style') - ).toEqual({}); + ).toEqual(undefined); expect( - component.find('[data-test-subj="lnsDragDrop-reorderableDrag"]').at(1).prop('style') + component.find('[data-test-subj="lnsDragDrop-translatableDrop"]').at(0).prop('style') ).toEqual({ - transform: 'translateY(-40px)', + transform: 'translateY(-8px)', }); expect( - component.find('[data-test-subj="lnsDragDrop-reorderableDrag"]').at(2).prop('style') + component.find('[data-test-subj="lnsDragDrop-translatableDrop"]').at(1).prop('style') ).toEqual({ - transform: 'translateY(-40px)', + transform: 'translateY(-8px)', }); - component.find('[data-test-subj="lnsDragDrop-reorderableDrop"]').at(2).simulate('dragleave'); + component + .find('[data-test-subj="lnsDragDrop-reorderableDropLayer"]') + .at(1) + .simulate('dragleave'); expect( - component.find('[data-test-subj="lnsDragDrop-reorderableDrag"]').at(1).prop('style') - ).toEqual({}); + component.find('[data-test-subj="lnsDragDrop-reorderableDrag"]').at(0).prop('style') + ).toEqual(undefined); expect( - component.find('[data-test-subj="lnsDragDrop-reorderableDrag"]').at(2).prop('style') - ).toEqual({}); + component.find('[data-test-subj="lnsDragDrop-translatableDrop"]').at(1).prop('style') + ).toEqual(undefined); }); + test(`Dropping an item runs onDrop function`, () => { + const setDragging = jest.fn(); + const setA11yMessage = jest.fn(); const preventDefault = jest.fn(); const stopPropagation = jest.fn(); const onDrop = jest.fn(); - const component = mountComponent({ id: '1' }, onDrop); + const component = mountComponent( + { dragging: { id: '1' }, setA11yMessage, setDragging }, + onDrop + ); component - .find('[data-test-subj="lnsDragDrop-reorderableDrop"]') + .find('[data-test-subj="lnsDragDrop-reorderableDropLayer"]') .at(1) .simulate('drop', { preventDefault, stopPropagation }); + jest.runAllTimers(); + + expect(setA11yMessage).toBeCalledWith( + 'You have dropped the item. You have moved the item from position 1 to positon 3' + ); expect(preventDefault).toBeCalled(); expect(stopPropagation).toBeCalled(); - expect(onDrop).toBeCalledWith({ id: '1' }); + expect(onDrop).toBeCalledWith({ id: '1' }, { id: '3' }); }); - test(`Keyboard navigation: user can reorder an element`, () => { + + test(`Keyboard navigation: user can drop element to an activeDropTarget`, () => { const onDrop = jest.fn(); - const dropTo = jest.fn(); - const component = mountComponent({ id: '1' }, onDrop, dropTo); + const component = mountComponent( + { + dragging: { id: '1' }, + activeDropTarget: { activeDropTarget: { id: '3' } } as ActiveDropTarget, + keyboardMode: true, + }, + onDrop + ); const keyboardHandler = component - .find(ReorderableDragDrop) - .at(1) - .find('[data-test-subj="lnsDragDrop-keyboardHandler"]'); + .find('[data-test-subj="lnsDragDrop-keyboardHandler"]') + .simulate('focus'); + + act(() => { + keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); + keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); + keyboardHandler.simulate('keydown', { key: 'Enter' }); + }); + expect(onDrop).toBeCalledWith({ id: '1' }, { id: '3' }); + }); + + test(`Keyboard Navigation: Reordered elements get extra styles to show the reorder effect`, () => { + const setA11yMessage = jest.fn(); + const component = mountComponent( + { dragging: { id: '1' }, keyboardMode: true, setA11yMessage }, + jest.fn() + ); + const keyboardHandler = component.find('[data-test-subj="lnsDragDrop-keyboardHandler"]'); keyboardHandler.simulate('keydown', { key: 'Space' }); keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); - expect(dropTo).toBeCalledWith('3'); - keyboardHandler.simulate('keydown', { key: 'ArrowUp' }); - expect(dropTo).toBeCalledWith('1'); + expect( + component.find('[data-test-subj="lnsDragDrop-reorderableDrag"]').at(0).prop('style') + ).toEqual({ + transform: 'translateY(+8px)', + }); + expect( + component.find('[data-test-subj="lnsDragDrop-translatableDrop"]').at(0).prop('style') + ).toEqual({ + transform: 'translateY(-40px)', + }); + expect( + component.find('[data-test-subj="lnsDragDrop-translatableDrop"]').at(1).prop('style') + ).toEqual(undefined); + expect(setA11yMessage).toBeCalledWith( + 'You have moved the item 1 from position 1 to position 2' + ); + + component + .find('[data-test-subj="lnsDragDrop-reorderableDropLayer"]') + .at(1) + .simulate('dragleave'); + expect( + component.find('[data-test-subj="lnsDragDrop-reorderableDrag"]').at(0).prop('style') + ).toEqual(undefined); + expect( + component.find('[data-test-subj="lnsDragDrop-translatableDrop"]').at(1).prop('style') + ).toEqual(undefined); }); + test(`Keyboard Navigation: User cannot move an element outside of the group`, () => { const onDrop = jest.fn(); - const dropTo = jest.fn(); - const component = mountComponent({ id: '1' }, onDrop, dropTo); - const keyboardHandler = component - .find(ReorderableDragDrop) - .first() - .find('[data-test-subj="lnsDragDrop-keyboardHandler"]'); + const setActiveDropTarget = jest.fn(); + const setA11yMessage = jest.fn(); + const component = mountComponent( + { dragging: { id: '1' }, keyboardMode: true, setActiveDropTarget, setA11yMessage }, + onDrop + ); + const keyboardHandler = component.find('[data-test-subj="lnsDragDrop-keyboardHandler"]'); keyboardHandler.simulate('keydown', { key: 'Space' }); keyboardHandler.simulate('keydown', { key: 'ArrowUp' }); - expect(dropTo).not.toHaveBeenCalled(); + expect(setActiveDropTarget).not.toHaveBeenCalled(); + keyboardHandler.simulate('keydown', { key: 'Space' }); keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); - expect(dropTo).toBeCalledWith('2'); + + expect(setActiveDropTarget).toBeCalledWith({ id: '2' }); + expect(setA11yMessage).toBeCalledWith( + 'You have moved the item 1 from position 1 to position 2' + ); + }); + + test(`Keyboard Navigation: User cannot drop element to itself`, () => { + const setActiveDropTarget = jest.fn(); + const setA11yMessage = jest.fn(); + const component = mount( + + + + 1 + + + 2 + + + + ); + const keyboardHandler = component.find('[data-test-subj="lnsDragDrop-keyboardHandler"]'); + + keyboardHandler.simulate('keydown', { key: 'Space' }); + keyboardHandler.simulate('keydown', { key: 'ArrowUp' }); + expect(setActiveDropTarget).toBeCalledWith({ id: '1' }); + expect(setA11yMessage).toBeCalledWith('You have moved back the item 1 to position 1'); + }); + + test(`Keyboard Navigation: Doesn't call onDrop when movement is cancelled`, () => { + const setA11yMessage = jest.fn(); + const onDrop = jest.fn(); + + const component = mountComponent({ dragging: { id: '1' }, setA11yMessage }, onDrop); + const keyboardHandler = component.find('[data-test-subj="lnsDragDrop-keyboardHandler"]'); + keyboardHandler.simulate('keydown', { key: 'Space' }); + keyboardHandler.simulate('keydown', { key: 'Escape' }); + + jest.runAllTimers(); + + expect(onDrop).not.toHaveBeenCalled(); + expect(setA11yMessage).toBeCalledWith( + 'Movement cancelled. The item has returned to its starting position 1' + ); + keyboardHandler.simulate('keydown', { key: 'Space' }); + keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); + keyboardHandler.simulate('blur'); + + expect(onDrop).not.toHaveBeenCalled(); + expect(setA11yMessage).toBeCalledWith( + 'Movement cancelled. The item has returned to its starting position 1' + ); }); }); }); diff --git a/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx b/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx index 32facbf8e84a8..2dbcfab8d5738 100644 --- a/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx +++ b/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx @@ -5,11 +5,17 @@ */ import './drag_drop.scss'; -import React, { useState, useContext, useEffect } from 'react'; +import React, { useContext, useEffect, memo } from 'react'; import classNames from 'classnames'; import { keys, EuiScreenReaderOnly } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { DragContext, DragContextState, ReorderContext, ReorderState } from './providers'; +import { + DragDropIdentifier, + DragContext, + DragContextState, + ReorderContext, + ReorderState, + reorderAnnouncements, +} from './providers'; import { trackUiEvent } from '../lens_ui_telemetry'; export type DroppableEvent = React.DragEvent; @@ -17,12 +23,7 @@ export type DroppableEvent = React.DragEvent; /** * A function that handles a drop event. */ -export type DropHandler = (item: unknown) => void; - -/** - * A function that handles a dropTo event. - */ -export type DropToHandler = (dropTargetId: string) => void; +export type DropHandler = (dropped: DragDropIdentifier, dropTarget: DragDropIdentifier) => void; /** * The base props to the DragDrop component. @@ -32,24 +33,20 @@ interface BaseProps { * The CSS class(es) for the root element. */ className?: string; - /** - * The event handler that fires when this item - * is dropped to the one with passed id - * + * The label for accessibility */ - dropTo?: DropToHandler; + label?: string; + /** * The event handler that fires when an item * is dropped onto this DragDrop component. */ onDrop?: DropHandler; /** - * The value associated with this item, if it is draggable. - * If this component is dragged, this will be the value of - * "dragging" in the root drag/drop context. + * The value associated with this item. */ - value?: DragContextState['dragging']; + value: DragDropIdentifier; /** * Optional comparison function to check whether a value is the dragged one @@ -60,7 +57,10 @@ interface BaseProps { * The React element which will be passed the draggable handlers */ children: React.ReactElement; - + /** + * Indicates whether or not this component is draggable. + */ + draggable?: boolean; /** * Indicates whether or not the currently dragged item * can be dropped onto this component. @@ -75,12 +75,12 @@ interface BaseProps { /** * The optional test subject associated with this DOM element. */ - 'data-test-subj'?: string; + dataTestSubj?: string; /** * items belonging to the same group that can be reordered */ - itemsInGroup?: string[]; + reorderableGroup?: DragDropIdentifier[]; /** * Indicates to the user whether the currently dragged item @@ -93,34 +93,46 @@ interface BaseProps { * replace something that is existing or add a new one */ dropType?: 'add' | 'replace' | 'reorder'; + + /** + * temporary flag to exclude the draggable elements that don't have keyboard nav yet. To be removed along with the feature development + */ + noKeyboardSupportYet?: boolean; } /** * The props for a draggable instance of that component. */ -interface DraggableProps extends BaseProps { - /** - * Indicates whether or not this component is draggable. - */ - draggable: true; +interface DragInnerProps extends BaseProps { /** * The label, which should be attached to the drag event, and which will e.g. * be used if the element will be dropped into a text field. */ - label: string; + label?: string; + isDragging: boolean; + keyboardMode: boolean; + setKeyboardMode: DragContextState['setKeyboardMode']; + setDragging: DragContextState['setDragging']; + setActiveDropTarget: DragContextState['setActiveDropTarget']; + setA11yMessage: DragContextState['setA11yMessage']; + activeDropTarget: DragContextState['activeDropTarget']; + onDragStart?: ( + target?: + | DroppableEvent['currentTarget'] + | React.KeyboardEvent['currentTarget'] + ) => void; + onDragEnd?: () => void; + extraKeyboardHandler?: (e: React.KeyboardEvent) => void; } /** * The props for a non-draggable instance of that component. */ -interface NonDraggableProps extends BaseProps { - /** - * Indicates whether or not this component is draggable. - */ - draggable?: false; -} +interface DropInnerProps extends BaseProps, DragContextState { + isDragging: boolean; -type Props = DraggableProps | NonDraggableProps; + isNotDroppable: boolean; +} /** * A draggable / droppable item. Items can be both draggable and droppable at @@ -129,40 +141,189 @@ type Props = DraggableProps | NonDraggableProps; * @param props */ -export const DragDrop = (props: Props) => { - const { dragging, setDragging } = useContext(DragContext); - const { value, draggable, droppable, isValueEqual } = props; +const lnsLayerPanelDimensionMargin = 8; - return ( - { + const { + dragging, + setDragging, + keyboardMode, + setKeyboardMode, + activeDropTarget, + setActiveDropTarget, + setA11yMessage, + } = useContext(DragContext); + + const { value, draggable, droppable, reorderableGroup } = props; + + const isDragging = !!(draggable && value.id === dragging?.id); + + const dragProps = { + ...props, + isDragging, + keyboardMode: isDragging ? keyboardMode : false, // optimization to not rerender all dragging components + activeDropTarget: isDragging ? activeDropTarget : undefined, // optimization to not rerender all dragging components + setKeyboardMode, + setDragging, + setActiveDropTarget, + setA11yMessage, + }; + + const dropProps = { + ...props, + setKeyboardMode, + keyboardMode, + dragging, + setDragging, + activeDropTarget, + setActiveDropTarget, + isDragging, + setA11yMessage, + isNotDroppable: + // If the configuration has provided a droppable flag, but this particular item is not + // droppable, then it should be less prominent. Ignores items that are both + // draggable and drop targets + !!(droppable === false && dragging && value.id !== dragging.id), + }; + + if (draggable && !droppable) { + if (reorderableGroup && reorderableGroup.length > 1) { + return ( + + ); + } else { + return ; + } + } + if ( + reorderableGroup && + reorderableGroup.length > 1 && + reorderableGroup?.some((i) => i.id === value.id) + ) { + return ; + } + return ; +}; + +const DragInner = memo(function DragDropInner({ + dataTestSubj, + className, + value, + children, + setDragging, + setKeyboardMode, + setActiveDropTarget, + label = '', + keyboardMode, + isDragging, + activeDropTarget, + onDrop, + dragType, + onDragStart, + onDragEnd, + extraKeyboardHandler, + noKeyboardSupportYet, +}: DragInnerProps) { + const dragStart = (e?: DroppableEvent | React.KeyboardEvent) => { + // Setting stopPropgagation causes Chrome failures, so + // we are manually checking if we've already handled this + // in a nested child, and doing nothing if so... + if (e && 'dataTransfer' in e && e.dataTransfer.getData('text')) { + return; + } + + // We only can reach the dragStart method if the element is draggable, + // so we know we have DraggableProps if we reach this code. + if (e && 'dataTransfer' in e) { + e.dataTransfer.setData('text', label); + } + + // Chrome causes issues if you try to render from within a + // dragStart event, so we drop a setTimeout to avoid that. + + const currentTarget = e?.currentTarget; + setTimeout(() => { + setDragging(value); + if (onDragStart) { + onDragStart(currentTarget); } - isNotDroppable={ - // If the configuration has provided a droppable flag, but this particular item is not - // droppable, then it should be less prominent. Ignores items that are both - // draggable and drop targets - droppable === false && Boolean(dragging) && value !== dragging + }); + }; + + const dragEnd = (e?: DroppableEvent) => { + e?.stopPropagation(); + setDragging(undefined); + setActiveDropTarget(undefined); + setKeyboardMode(false); + if (onDragEnd) { + onDragEnd(); + } + }; + + const dropToActiveDropTarget = () => { + if (isDragging && activeDropTarget?.activeDropTarget) { + trackUiEvent('drop_total'); + if (onDrop) { + onDrop(value, activeDropTarget.activeDropTarget); } - /> + } + }; + + return ( +
+ {!noKeyboardSupportYet && ( + +
); -}; +}); -const DragDropInner = React.memo(function DragDropInner( - props: Props & - DragContextState & { - isDragging: boolean; - isNotDroppable: boolean; - } -) { - const [state, setState] = useState({ - isActive: false, - dragEnterClassNames: '', - }); +const DropInner = memo(function DropInner(props: DropInnerProps) { const { + dataTestSubj, className, onDrop, value, @@ -175,10 +336,16 @@ const DragDropInner = React.memo(function DragDropInner( isNotDroppable, dragType = 'copy', dropType = 'add', - dropTo, - itemsInGroup, + keyboardMode, + setKeyboardMode, + activeDropTarget, + setActiveDropTarget, + getAdditionalClassesOnEnter, } = props; + const activeDropTargetMatches = + activeDropTarget?.activeDropTarget && activeDropTarget.activeDropTarget.id === value.id; + const isMoveDragging = isDragging && dragType === 'move'; const classes = classNames( @@ -186,339 +353,364 @@ const DragDropInner = React.memo(function DragDropInner( { 'lnsDragDrop-isDraggable': draggable, 'lnsDragDrop-isDragging': isDragging, - 'lnsDragDrop-isHidden': isMoveDragging, + 'lnsDragDrop-isHidden': isMoveDragging && !keyboardMode, 'lnsDragDrop-isDroppable': !draggable, 'lnsDragDrop-isDropTarget': droppable && dragType !== 'reorder', - 'lnsDragDrop-isActiveDropTarget': droppable && state.isActive && dragType !== 'reorder', + 'lnsDragDrop-isActiveDropTarget': + droppable && activeDropTargetMatches && dragType !== 'reorder', 'lnsDragDrop-isNotDroppable': !isMoveDragging && isNotDroppable, - 'lnsDragDrop-isReplacing': droppable && state.isActive && dropType === 'replace', + 'lnsDragDrop-isReplacing': droppable && activeDropTargetMatches && dropType === 'replace', }, - state.dragEnterClassNames - ); - - const dragStart = (e: DroppableEvent) => { - // Setting stopPropgagation causes Chrome failures, so - // we are manually checking if we've already handled this - // in a nested child, and doing nothing if so... - if (e.dataTransfer.getData('text')) { - return; + getAdditionalClassesOnEnter && { + [getAdditionalClassesOnEnter()]: activeDropTargetMatches, } - - // We only can reach the dragStart method if the element is draggable, - // so we know we have DraggableProps if we reach this code. - e.dataTransfer.setData('text', (props as DraggableProps).label); - - // Chrome causes issues if you try to render from within a - // dragStart event, so we drop a setTimeout to avoid that. - setState({ ...state }); - setTimeout(() => setDragging(value)); - }; - - const dragEnd = (e: DroppableEvent) => { - e.stopPropagation(); - setDragging(undefined); - }; + ); const dragOver = (e: DroppableEvent) => { if (!droppable) { return; } - e.preventDefault(); // An optimization to prevent a bunch of React churn. - if (!state.isActive) { - setState({ - ...state, - isActive: true, - dragEnterClassNames: props.getAdditionalClassesOnEnter - ? props.getAdditionalClassesOnEnter() - : '', - }); + // todo: replace with custom function ? + if (!activeDropTargetMatches) { + setActiveDropTarget(value); } }; const dragLeave = () => { - setState({ ...state, isActive: false, dragEnterClassNames: '' }); + setActiveDropTarget(undefined); }; - const drop = (e: DroppableEvent) => { + const drop = (e: DroppableEvent | React.KeyboardEvent) => { e.preventDefault(); e.stopPropagation(); - setState({ ...state, isActive: false, dragEnterClassNames: '' }); - setDragging(undefined); - - if (onDrop && droppable) { + if (onDrop && droppable && dragging) { trackUiEvent('drop_total'); - onDrop(dragging); + onDrop(dragging, value); } + setActiveDropTarget(undefined); + setDragging(undefined); + setKeyboardMode(false); }; + return ( + <> + {React.cloneElement(children, { + 'data-test-subj': dataTestSubj || 'lnsDragDrop', + className: classNames(children.props.className, classes, className), + onDragOver: dragOver, + onDragLeave: dragLeave, + onDrop: drop, + draggable, + })} + + ); +}); - const isReorderDragging = !!(dragging && itemsInGroup?.includes(dragging.id)); +const ReorderableDrag = memo(function ReorderableDrag( + props: DragInnerProps & { reorderableGroup: DragDropIdentifier[]; dragging?: DragDropIdentifier } +) { + const { + reorderState: { isReorderOn, reorderedItems, direction }, + setReorderState, + } = useContext(ReorderContext); - if ( - draggable && - itemsInGroup?.length && - itemsInGroup.length > 1 && - value?.id && - dropTo && - (!dragging || isReorderDragging) - ) { - const { label } = props as DraggableProps; - return ( - - {children} - - ); - } - return React.cloneElement(children, { - 'data-test-subj': props['data-test-subj'] || 'lnsDragDrop', - className: classNames(children.props.className, classes, className), - onDragOver: dragOver, - onDragLeave: dragLeave, - onDrop: drop, - draggable, - onDragEnd: dragEnd, - onDragStart: dragStart, - }); -}); + const { + value, + setActiveDropTarget, + label = '', + keyboardMode, + isDragging, + activeDropTarget, + reorderableGroup, + onDrop, + setA11yMessage, + } = props; -const getKeyboardReorderMessageMoved = ( - itemLabel: string, - position: number, - prevPosition: number -) => - i18n.translate('xpack.lens.dragDrop.elementMoved', { - defaultMessage: `You have moved the item {itemLabel} from position {prevPosition} to position {position}`, - values: { - itemLabel, - position, - prevPosition, - }, - }); - -const getKeyboardReorderMessageLifted = (itemLabel: string, position: number) => - i18n.translate('xpack.lens.dragDrop.elementLifted', { - defaultMessage: `You have lifted an item {itemLabel} in position {position}`, - values: { - itemLabel, - position, - }, - }); + const currentIndex = reorderableGroup.findIndex((i) => i.id === value.id); + + const isFocusInGroup = keyboardMode + ? isDragging && + (!activeDropTarget?.activeDropTarget || + reorderableGroup.some((i) => i.id === activeDropTarget?.activeDropTarget?.id)) + : isDragging; + + useEffect(() => { + setReorderState((s: ReorderState) => ({ + ...s, + isReorderOn: isFocusInGroup, + })); + }, [setReorderState, isFocusInGroup]); + + const onReorderableDragStart = ( + currentTarget?: + | DroppableEvent['currentTarget'] + | React.KeyboardEvent['currentTarget'] + ) => { + if (currentTarget) { + const height = currentTarget.offsetHeight + lnsLayerPanelDimensionMargin; + setReorderState((s: ReorderState) => ({ + ...s, + draggingHeight: height, + })); + } -const lnsLayerPanelDimensionMargin = 8; + setA11yMessage(reorderAnnouncements.lifted(label, currentIndex + 1)); + }; -export const ReorderableDragDrop = ({ - draggingProps, - dropProps, - children, - label, - dropTo, - className, - dataTestSubj, -}: { - draggingProps: { - className: string; - draggable: Props['draggable']; - onDragEnd: (e: DroppableEvent) => void; - onDragStart: (e: DroppableEvent) => void; - isReorderDragging: boolean; + const onReorderableDragEnd = () => { + resetReorderState(); + setA11yMessage(reorderAnnouncements.cancelled(currentIndex + 1)); }; - dropProps: { - onDrop: (e: DroppableEvent) => void; - onDragOver: (e: DroppableEvent) => void; - onDragLeave: () => void; - dragging: DragContextState['dragging']; - droppable: DraggableProps['droppable']; - itemsInGroup: string[]; - id: string; - isActive: boolean; + + const onReorderableDrop = (dragging: DragDropIdentifier, target: DragDropIdentifier) => { + if (onDrop) { + onDrop(dragging, target); + const targetIndex = reorderableGroup.findIndex( + (i) => i.id === activeDropTarget?.activeDropTarget?.id + ); + + resetReorderState(); + setA11yMessage(reorderAnnouncements.dropped(targetIndex + 1, currentIndex + 1)); + } }; - children: React.ReactElement; - label: string; - dropTo: DropToHandler; - className?: string; - dataTestSubj: string; -}) => { - const { itemsInGroup, dragging, id, droppable } = dropProps; - const { reorderState, setReorderState } = useContext(ReorderContext); - const { isReorderOn, reorderedItems, draggingHeight, direction, groupId } = reorderState; - const currentIndex = itemsInGroup.indexOf(id); + const resetReorderState = () => + setReorderState((s: ReorderState) => ({ + ...s, + reorderedItems: [], + })); + + const extraKeyboardHandler = (e: React.KeyboardEvent) => { + if (isReorderOn && keyboardMode) { + e.stopPropagation(); + e.preventDefault(); + let activeDropTargetIndex = reorderableGroup.findIndex((i) => i.id === value.id); + if (activeDropTarget?.activeDropTarget) { + const index = reorderableGroup.findIndex( + (i) => i.id === activeDropTarget.activeDropTarget?.id + ); + if (index !== -1) activeDropTargetIndex = index; + } + if (keys.ARROW_DOWN === e.key) { + if (activeDropTargetIndex < reorderableGroup.length - 1) { + setA11yMessage( + reorderAnnouncements.moved(label, activeDropTargetIndex + 2, currentIndex + 1) + ); + onReorderableDragOver(reorderableGroup[activeDropTargetIndex + 1]); + } + } else if (keys.ARROW_UP === e.key) { + if (activeDropTargetIndex > 0) { + setA11yMessage( + reorderAnnouncements.moved(label, activeDropTargetIndex, currentIndex + 1) + ); + + onReorderableDragOver(reorderableGroup[activeDropTargetIndex - 1]); + } + } + } + }; - useEffect( - () => + const onReorderableDragOver = (target: DragDropIdentifier) => { + let droppingIndex = currentIndex; + if (keyboardMode && 'id' in target) { + setActiveDropTarget(target); + droppingIndex = reorderableGroup.findIndex((i) => i.id === target.id); + } + const draggingIndex = reorderableGroup.findIndex((i) => i.id === value?.id); + if (draggingIndex === -1) { + return; + } + + if (draggingIndex === droppingIndex) { setReorderState((s: ReorderState) => ({ ...s, - isReorderOn: draggingProps.isReorderDragging, - })), - [draggingProps.isReorderDragging, setReorderState] - ); + reorderedItems: [], + })); + } + + setReorderState((s: ReorderState) => + draggingIndex < droppingIndex + ? { + ...s, + reorderedItems: reorderableGroup.slice(draggingIndex + 1, droppingIndex + 1), + direction: '-', + } + : { + ...s, + reorderedItems: reorderableGroup.slice(droppingIndex, draggingIndex), + direction: '+', + } + ); + }; + + const areItemsReordered = isDragging && keyboardMode && reorderedItems.length; return (
- -
+ ); +}); + +const ReorderableDrop = memo(function ReorderableDrop( + props: DropInnerProps & { reorderableGroup: DragDropIdentifier[] } +) { + const { + onDrop, + value, + droppable, + dragging, + setDragging, + setKeyboardMode, + activeDropTarget, + setActiveDropTarget, + reorderableGroup, + setA11yMessage, + } = props; + + const currentIndex = reorderableGroup.findIndex((i) => i.id === value.id); + const activeDropTargetMatches = + activeDropTarget?.activeDropTarget && activeDropTarget.activeDropTarget.id === value.id; + + const { + reorderState: { isReorderOn, reorderedItems, draggingHeight, direction }, + setReorderState, + } = useContext(ReorderContext); + + const heightRef = React.useRef(null); + + const isReordered = + isReorderOn && reorderedItems.some((el) => el.id === value.id) && reorderedItems.length; + + useEffect(() => { + if (isReordered && heightRef.current?.clientHeight) { + setReorderState((s) => ({ + ...s, + reorderedItems: s.reorderedItems.map((el) => + el.id === value.id + ? { + ...el, + height: heightRef.current?.clientHeight, } - } - }} - /> - - {React.cloneElement(children, { - ['data-test-subj']: 'lnsDragDrop-reorderableDrag', - draggable: draggingProps.draggable, - onDragEnd: draggingProps.onDragEnd, - onDragStart: (e: DroppableEvent) => { - const height = e.currentTarget.offsetHeight + lnsLayerPanelDimensionMargin; - setReorderState((s: ReorderState) => ({ + : el + ), + })); + } + }, [isReordered, setReorderState, value.id]); + + const onReorderableDragOver = (e: DroppableEvent) => { + if (!droppable) { + return; + } + e.preventDefault(); + + // An optimization to prevent a bunch of React churn. + // todo: replace with custom function ? + if (!activeDropTargetMatches) { + setActiveDropTarget(value); + } + + const draggingIndex = reorderableGroup.findIndex((i) => i.id === dragging?.id); + + if (!dragging || draggingIndex === -1) { + return; + } + const droppingIndex = currentIndex; + if (draggingIndex === droppingIndex) { + setReorderState((s: ReorderState) => ({ + ...s, + reorderedItems: [], + })); + } + + setReorderState((s: ReorderState) => + draggingIndex < droppingIndex + ? { ...s, - draggingHeight: height, - })); - draggingProps.onDragStart(e); - }, - className: classNames( - draggingProps.className, - { - 'lnsDragDrop-isKeyboardModeActive': isReorderOn, - }, - { - 'lnsDragDrop-isReorderable': draggingProps.isReorderDragging, + reorderedItems: reorderableGroup.slice(draggingIndex + 1, droppingIndex + 1), + direction: '-', } - ), - style: reorderedItems.includes(id) - ? { - transform: `translateY(${direction}${draggingHeight}px)`, - } - : {}, - })} + : { + ...s, + reorderedItems: reorderableGroup.slice(droppingIndex, draggingIndex), + direction: '+', + } + ); + }; + + const onReorderableDrop = (e: DroppableEvent) => { + e.preventDefault(); + e.stopPropagation(); + + setActiveDropTarget(undefined); + setDragging(undefined); + setKeyboardMode(false); + + if (onDrop && droppable && dragging) { + trackUiEvent('drop_total'); + + onDrop(dragging, value); + const draggingIndex = reorderableGroup.findIndex((i) => i.id === dragging.id); + // setTimeout ensures it will run after dragEnd messaging + setTimeout(() => + setA11yMessage(reorderAnnouncements.dropped(currentIndex + 1, draggingIndex + 1)) + ); + } + }; + + return ( +
i.id === value.id) + ? { + transform: `translateY(${direction}${draggingHeight}px)`, + } + : undefined + } + ref={heightRef} + data-test-subj="lnsDragDrop-translatableDrop" + className="lnsDragDrop-translatableDrop lnsDragDrop-reorderable" + > + +
+ +
{ - dropProps.onDrop(e); - setReorderState((s: ReorderState) => ({ - ...s, - reorderedItems: [], - })); - }} - onDragOver={(e: DroppableEvent) => { - if (!droppable) { - return; - } - dropProps.onDragOver(e); - if (!dropProps.isActive) { - if (!dragging) { - return; - } - const draggingIndex = itemsInGroup.indexOf(dragging.id); - const droppingIndex = currentIndex; - if (draggingIndex === droppingIndex) { - setReorderState((s: ReorderState) => ({ - ...s, - reorderedItems: [], - })); - } - - setReorderState((s: ReorderState) => - draggingIndex < droppingIndex - ? { - ...s, - reorderedItems: itemsInGroup.slice(draggingIndex + 1, droppingIndex + 1), - direction: '-', - } - : { - ...s, - reorderedItems: itemsInGroup.slice(droppingIndex, draggingIndex), - direction: '+', - } - ); - } - }} + onDrop={onReorderableDrop} + onDragOver={onReorderableDragOver} onDragLeave={() => { - dropProps.onDragLeave(); setReorderState((s: ReorderState) => ({ ...s, reorderedItems: [], @@ -527,4 +719,4 @@ export const ReorderableDragDrop = ({ />
); -}; +}); diff --git a/x-pack/plugins/lens/public/drag_drop/providers.tsx b/x-pack/plugins/lens/public/drag_drop/providers.tsx index 5e0fc648454ad..86ff5054520af 100644 --- a/x-pack/plugins/lens/public/drag_drop/providers.tsx +++ b/x-pack/plugins/lens/public/drag_drop/providers.tsx @@ -9,12 +9,13 @@ import classNames from 'classnames'; import { EuiScreenReaderOnly, EuiPortal } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -export type Dragging = - | (Record & { - id: string; - }) - | undefined; +export type DragDropIdentifier = Record & { + id: string; +}; +export interface ActiveDropTarget { + activeDropTarget?: DragDropIdentifier; +} /** * The shape of the drag / drop context. */ @@ -22,12 +23,26 @@ export interface DragContextState { /** * The item being dragged or undefined. */ - dragging: Dragging; + dragging?: DragDropIdentifier; + /** + * keyboard mode + */ + keyboardMode: boolean; + /** + * keyboard mode + */ + setKeyboardMode: (mode: boolean) => void; /** * Set the item being dragged. */ - setDragging: (dragging: Dragging) => void; + setDragging: (dragging?: DragDropIdentifier) => void; + + activeDropTarget?: ActiveDropTarget; + + setActiveDropTarget: (newTarget?: DragDropIdentifier) => void; + + setA11yMessage: (message: string) => void; } /** @@ -38,28 +53,52 @@ export interface DragContextState { export const DragContext = React.createContext({ dragging: undefined, setDragging: () => {}, + keyboardMode: false, + setKeyboardMode: () => {}, + activeDropTarget: undefined, + setActiveDropTarget: () => {}, + setA11yMessage: () => {}, }); /** * The argument to DragDropProvider. */ export interface ProviderProps { + /** + * keyboard mode + */ + keyboardMode: boolean; + /** + * keyboard mode + */ + setKeyboardMode: (mode: boolean) => void; + /** + * Set the item being dragged. + */ /** * The item being dragged. If unspecified, the provider will * behave as if it is the root provider. */ - dragging: Dragging; + dragging?: DragDropIdentifier; /** * Sets the item being dragged. If unspecified, the provider * will behave as if it is the root provider. */ - setDragging: (dragging: Dragging) => void; + setDragging: (dragging?: DragDropIdentifier) => void; + + activeDropTarget?: { + activeDropTarget?: DragDropIdentifier; + }; + + setActiveDropTarget: (newTarget?: DragDropIdentifier) => void; /** * The React children. */ children: React.ReactNode; + + setA11yMessage: (message: string) => void; } /** @@ -70,15 +109,60 @@ export interface ProviderProps { * @param props */ export function RootDragDropProvider({ children }: { children: React.ReactNode }) { - const [state, setState] = useState<{ dragging: Dragging }>({ + const [draggingState, setDraggingState] = useState<{ dragging?: DragDropIdentifier }>({ dragging: undefined, }); - const setDragging = useMemo(() => (dragging: Dragging) => setState({ dragging }), [setState]); + const [keyboardModeState, setKeyboardModeState] = useState(false); + const [a11yMessageState, setA11yMessageState] = useState(''); + const [activeDropTargetState, setActiveDropTargetState] = useState<{ + activeDropTarget?: DragDropIdentifier; + }>({ + activeDropTarget: undefined, + }); + + const setDragging = useMemo( + () => (dragging?: DragDropIdentifier) => setDraggingState({ dragging }), + [setDraggingState] + ); + + const setA11yMessage = useMemo(() => (message: string) => setA11yMessageState(message), [ + setA11yMessageState, + ]); + + const setActiveDropTarget = useMemo( + () => (activeDropTarget?: DragDropIdentifier) => + setActiveDropTargetState((s) => ({ ...s, activeDropTarget })), + [setActiveDropTargetState] + ); return ( - - {children} - +
+ + {children} + + + +
+

+ {a11yMessageState} +

+

+ {i18n.translate('xpack.lens.dragDrop.keyboardInstructions', { + defaultMessage: `Press enter or space to start reordering the dimension group. When dragging, use arrow keys to reorder. Press enter or space again to finish.`, + })} +

+
+
+
+
); } @@ -89,8 +173,36 @@ export function RootDragDropProvider({ children }: { children: React.ReactNode } * * @param props */ -export function ChildDragDropProvider({ dragging, setDragging, children }: ProviderProps) { - const value = useMemo(() => ({ dragging, setDragging }), [setDragging, dragging]); +export function ChildDragDropProvider({ + dragging, + setDragging, + setKeyboardMode, + keyboardMode, + activeDropTarget, + setActiveDropTarget, + setA11yMessage, + children, +}: ProviderProps) { + const value = useMemo( + () => ({ + setKeyboardMode, + keyboardMode, + dragging, + setDragging, + activeDropTarget, + setActiveDropTarget, + setA11yMessage, + }), + [ + setDragging, + dragging, + activeDropTarget, + setActiveDropTarget, + setKeyboardMode, + keyboardMode, + setA11yMessage, + ] + ); return {children}; } @@ -98,7 +210,7 @@ export interface ReorderState { /** * Ids of the elements that are translated up or down */ - reorderedItems: string[]; + reorderedItems: DragDropIdentifier[]; /** * Direction of the move of dragged element in the reordered list @@ -112,10 +224,6 @@ export interface ReorderState { * indicates that user is in keyboard mode */ isReorderOn: boolean; - /** - * aria-live message for changes in reordering - */ - keyboardReorderMessage: string; /** * reorder group needed for screen reader aria-described-by attribute */ @@ -135,7 +243,6 @@ export const ReorderContext = React.createContext({ direction: '-', draggingHeight: 40, isReorderOn: false, - keyboardReorderMessage: '', groupId: '', }, setReorderState: () => () => {}, @@ -155,33 +262,70 @@ export function ReorderProvider({ direction: '-', draggingHeight: 40, isReorderOn: false, - keyboardReorderMessage: '', groupId: id, }); const setReorderState = useMemo(() => (dispatch: SetReorderStateDispatch) => setState(dispatch), [ setState, ]); - return ( -
+
1, + })} + > {children} - - -
-

- {state.keyboardReorderMessage} -

-

- {i18n.translate('xpack.lens.dragDrop.reorderInstructions', { - defaultMessage: `Press space bar to start a drag. When dragging, use arrow keys to reorder. Press space bar again to finish.`, - })} -

-
-
-
); } + +export const reorderAnnouncements = { + moved: (itemLabel: string, position: number, prevPosition: number) => { + return prevPosition === position + ? i18n.translate('xpack.lens.dragDrop.elementMovedBack', { + defaultMessage: `You have moved back the item {itemLabel} to position {prevPosition}`, + values: { + itemLabel, + prevPosition, + }, + }) + : i18n.translate('xpack.lens.dragDrop.elementMoved', { + defaultMessage: `You have moved the item {itemLabel} from position {prevPosition} to position {position}`, + values: { + itemLabel, + position, + prevPosition, + }, + }); + }, + + lifted: (itemLabel: string, position: number) => + i18n.translate('xpack.lens.dragDrop.elementLifted', { + defaultMessage: `You have lifted an item {itemLabel} in position {position}`, + values: { + itemLabel, + position, + }, + }), + + cancelled: (position: number) => + i18n.translate('xpack.lens.dragDrop.abortMessageReorder', { + defaultMessage: + 'Movement cancelled. The item has returned to its starting position {position}', + values: { + position, + }, + }), + dropped: (position: number, prevPosition: number) => + i18n.translate('xpack.lens.dragDrop.dropMessageReorder', { + defaultMessage: + 'You have dropped the item. You have moved the item from position {prevPosition} to positon {position}', + values: { + position, + prevPosition, + }, + }), +}; diff --git a/x-pack/plugins/lens/public/drag_drop/readme.md b/x-pack/plugins/lens/public/drag_drop/readme.md index 1e812c7adac27..e48564a074986 100644 --- a/x-pack/plugins/lens/public/drag_drop/readme.md +++ b/x-pack/plugins/lens/public/drag_drop/readme.md @@ -30,7 +30,7 @@ In your child application, place a `ChildDragDropProvider` at the root of that, This enables your child application to share the same drag / drop context as the root application. -## Dragging +## DragDropIdentifier An item can be both draggable and droppable at the same time, but for simplicity's sake, we'll treat these two cases separately. @@ -88,7 +88,7 @@ The children `DragDrop` components must have props defined as in the example: droppable dragType="reorder" dropType="reorder" - itemsInGroup={fields.map((f) => f.id)} // consists ids of all reorderable elements in the group, eg. ['3', '5', '1'] + reorderableGroup={fields} // consists all reorderable elements in the group, eg. [{id:'3'}, {id:'5'}, {id:'1'}] value={{ id: f.id, }} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx index 70c4fb5567226..0ebcb5bb07482 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx @@ -92,6 +92,14 @@ describe('ConfigPanel', () => { mockDatasource = createMockDatasource('ds1'); }); + // in what case is this test needed? + it('should fail to render layerPanels if the public API is out of date', () => { + const props = getDefaultProps(); + props.framePublicAPI.datasourceLayers = {}; + const component = mountWithIntl(); + expect(component.find(LayerPanel).exists()).toBe(false); + }); + describe('focus behavior when adding or removing layers', () => { it('should focus the only layer when resetting the layer', () => { const component = mountWithIntl(); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx index ec1a5c226d351..67c8a6b5e4abc 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx @@ -134,37 +134,42 @@ export function LayerPanels( [dispatch] ); + const datasourcePublicAPIs = props.framePublicAPI.datasourceLayers; + return ( - {layerIds.map((layerId, index) => ( - { - dispatch({ - type: 'UPDATE_STATE', - subType: 'REMOVE_OR_CLEAR_LAYER', - updater: (state) => - removeLayer({ - activeVisualization, - layerId, - trackUiEvent, - datasourceMap, - state, - }), - }); - removeLayerRef(layerId); - }} - /> - ))} + {layerIds.map((layerId, layerIndex) => + datasourcePublicAPIs[layerId] ? ( + { + dispatch({ + type: 'UPDATE_STATE', + subType: 'REMOVE_OR_CLEAR_LAYER', + updater: (state) => + removeLayer({ + activeVisualization, + layerId, + trackUiEvent, + datasourceMap, + state, + }), + }); + removeLayerRef(layerId); + }} + /> + ) : null + )} {activeVisualization.appendLayer && visualizationState && ( + i18n.translate('xpack.lens.configure.editConfig', { + defaultMessage: 'Edit {label} configuration', + values: { label }, + }); + +export function DimensionButton({ + group, + children, + onClick, + onRemoveClick, + accessorConfig, + label, +}: { + group: VisualizationDimensionGroupConfig; + children: React.ReactElement; + onClick: (id: string) => void; + onRemoveClick: (id: string) => void; + accessorConfig: AccessorConfig; + label: string; +}) { + return ( + <> + onClick(accessorConfig.columnId)} + aria-label={triggerLinkA11yText(label)} + title={triggerLinkA11yText(label)} + > + {children} + + onRemoveClick(accessorConfig.columnId)} + /> + + + ); +} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/draggable_dimension_button.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/draggable_dimension_button.tsx new file mode 100644 index 0000000000000..8de57cb43b16f --- /dev/null +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/draggable_dimension_button.tsx @@ -0,0 +1,110 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useMemo } from 'react'; +import { DragDrop, DragDropIdentifier, DragContextState } from '../../../drag_drop'; +import { Datasource, VisualizationDimensionGroupConfig, isDraggedOperation } from '../../../types'; +import { LayerDatasourceDropProps } from './types'; + +const isFromTheSameGroup = (el1: DragDropIdentifier, el2?: DragDropIdentifier) => + el2 && isDraggedOperation(el2) && el1.groupId === el2.groupId && el1.columnId !== el2.columnId; + +const isSelf = (el1: DragDropIdentifier, el2?: DragDropIdentifier) => + isDraggedOperation(el2) && el1.columnId === el2.columnId; + +export function DraggableDimensionButton({ + layerId, + label, + accessorIndex, + groupIndex, + layerIndex, + columnId, + group, + onDrop, + children, + dragDropContext, + layerDatasourceDropProps, + layerDatasource, +}: { + dragDropContext: DragContextState; + layerId: string; + groupIndex: number; + layerIndex: number; + onDrop: (droppedItem: DragDropIdentifier, dropTarget: DragDropIdentifier) => void; + group: VisualizationDimensionGroupConfig; + label: string; + children: React.ReactElement; + layerDatasource: Datasource; + layerDatasourceDropProps: LayerDatasourceDropProps; + accessorIndex: number; + columnId: string; +}) { + const value = useMemo(() => { + return { + columnId, + groupId: group.groupId, + layerId, + id: columnId, + }; + }, [columnId, group.groupId, layerId]); + + const { dragging } = dragDropContext; + + const isCurrentGroup = group.groupId === dragging?.groupId; + const isOperationDragged = isDraggedOperation(dragging); + const canHandleDrop = + Boolean(dragDropContext.dragging) && + layerDatasource.canHandleDrop({ + ...layerDatasourceDropProps, + columnId, + filterOperations: group.filterOperations, + }); + + const dragType = isSelf(value, dragging) + ? 'move' + : isOperationDragged && isCurrentGroup + ? 'reorder' + : 'copy'; + + const dropType = isOperationDragged ? (!isCurrentGroup ? 'replace' : 'reorder') : 'add'; + + const isCompatibleFromOtherGroup = !isCurrentGroup && canHandleDrop; + + const isDroppable = isOperationDragged + ? dragType === 'reorder' + ? isFromTheSameGroup(value, dragging) + : isCompatibleFromOtherGroup + : canHandleDrop; + + const reorderableGroup = useMemo( + () => + group.accessors.map((a) => ({ + columnId: a.columnId, + id: a.columnId, + groupId: group.groupId, + layerId, + })), + [group, layerId] + ); + + return ( +
+ 1 ? reorderableGroup : undefined} + value={value} + label={label} + droppable={dragging && isDroppable} + onDrop={onDrop} + > + {children} + +
+ ); +} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/empty_dimension_button.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/empty_dimension_button.tsx new file mode 100644 index 0000000000000..88e1663d0b49c --- /dev/null +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/empty_dimension_button.tsx @@ -0,0 +1,97 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useMemo } from 'react'; +import { EuiButtonEmpty } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { i18n } from '@kbn/i18n'; +import { generateId } from '../../../id_generator'; +import { DragDrop, DragDropIdentifier, DragContextState } from '../../../drag_drop'; +import { Datasource, VisualizationDimensionGroupConfig, isDraggedOperation } from '../../../types'; +import { LayerDatasourceDropProps } from './types'; + +export function EmptyDimensionButton({ + dragDropContext, + group, + layerDatasource, + layerDatasourceDropProps, + layerId, + groupIndex, + layerIndex, + onClick, + onDrop, +}: { + dragDropContext: DragContextState; + layerId: string; + groupIndex: number; + layerIndex: number; + onClick: (id: string) => void; + onDrop: (droppedItem: DragDropIdentifier, dropTarget: DragDropIdentifier) => void; + group: VisualizationDimensionGroupConfig; + + layerDatasource: Datasource; + layerDatasourceDropProps: LayerDatasourceDropProps; +}) { + const handleDrop = (droppedItem: DragDropIdentifier) => onDrop(droppedItem, value); + + const value = useMemo(() => { + const newId = generateId(); + return { + columnId: newId, + groupId: group.groupId, + layerId, + isNew: true, + id: newId, + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [group.accessors.length, group.groupId, layerId]); + + return ( +
+ +
+ { + onClick(value.columnId); + }} + > + + +
+
+
+ ); +} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss index 2ed91b962ff11..ec4c2adba8fd7 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss @@ -76,6 +76,7 @@ .lnsLayerPanel__dimensionContainer { margin: 0 $euiSizeS $euiSizeS; + position: relative; &:last-child { margin-bottom: 0; @@ -127,12 +128,13 @@ } } -.lnsLayerPanel__dimensionLink { +// Added .lnsLayerPanel__dimension specificity required for animation style override +.lnsLayerPanel__dimension .lnsLayerPanel__dimensionLink { width: 100%; &:focus { - background-color: transparent !important; // sass-lint:disable-line no-important - outline: none !important; // sass-lint:disable-line no-important + background-color: transparent; + animation: none !important; // sass-lint:disable-line no-important } &:focus .lnsLayerPanel__triggerTextLabel, diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx index cab07150b6d56..d93cbbb58835e 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx @@ -12,7 +12,7 @@ import { createMockDatasource, DatasourceMock, } from '../../mocks'; -import { ChildDragDropProvider, DroppableEvent } from '../../../drag_drop'; +import { ChildDragDropProvider, DroppableEvent, DragDrop } from '../../../drag_drop'; import { EuiFormRow } from '@elastic/eui'; import { mountWithIntl } from '@kbn/test/jest'; import { Visualization } from '../../../types'; @@ -22,9 +22,20 @@ import { generateId } from '../../../id_generator'; jest.mock('../../../id_generator'); +const defaultContext = { + dragging: undefined, + setDragging: jest.fn(), + setActiveDropTarget: () => {}, + activeDropTarget: undefined, + keyboardMode: false, + setKeyboardMode: () => {}, + setA11yMessage: jest.fn(), +}; + describe('LayerPanel', () => { let mockVisualization: jest.Mocked; let mockVisualization2: jest.Mocked; + let mockDatasource: DatasourceMock; function getDefaultProps() { @@ -34,11 +45,7 @@ describe('LayerPanel', () => { }; return { layerId: 'first', - activeVisualizationId: 'vis1', - visualizationMap: { - vis1: mockVisualization, - vis2: mockVisualization2, - }, + activeVisualization: mockVisualization, activeDatasourceId: 'ds1', datasourceMap: { ds1: mockDatasource, @@ -58,7 +65,7 @@ describe('LayerPanel', () => { onRemoveLayer: jest.fn(), dispatch: jest.fn(), core: coreMock.createStart(), - index: 0, + layerIndex: 0, setLayerRef: jest.fn(), }; } @@ -92,20 +99,6 @@ describe('LayerPanel', () => { mockDatasource = createMockDatasource('ds1'); }); - it('should fail to render if the public API is out of date', () => { - const props = getDefaultProps(); - props.framePublicAPI.datasourceLayers = {}; - const component = mountWithIntl(); - expect(component.isEmptyRender()).toBe(true); - }); - - it('should fail to render if the active visualization is missing', () => { - const component = mountWithIntl( - - ); - expect(component.isEmptyRender()).toBe(true); - }); - describe('layer reset and remove', () => { it('should show the reset button when single layer', () => { const component = mountWithIntl(); @@ -147,8 +140,7 @@ describe('LayerPanel', () => { }); const component = mountWithIntl(); - - const group = component.find('DragDrop[data-test-subj="lnsGroup"]'); + const group = component.find('.lnsLayerPanel__dimensionContainer[data-test-subj="lnsGroup"]'); expect(group).toHaveLength(1); }); @@ -167,8 +159,7 @@ describe('LayerPanel', () => { }); const component = mountWithIntl(); - - const group = component.find('DragDrop[data-test-subj="lnsGroup"]'); + const group = component.find('.lnsLayerPanel__dimensionContainer[data-test-subj="lnsGroup"]'); expect(group).toHaveLength(1); }); @@ -231,50 +222,6 @@ describe('LayerPanel', () => { expect(panel.props.children).toHaveLength(2); }); - it('should keep the DimensionContainer open when configuring a new dimension', () => { - /** - * The ID generation system for new dimensions has been messy before, so - * this tests that the ID used in the first render is used to keep the container - * open in future renders - */ - (generateId as jest.Mock).mockReturnValueOnce(`newid`); - (generateId as jest.Mock).mockReturnValueOnce(`bad`); - mockVisualization.getConfiguration.mockReturnValueOnce({ - groups: [ - { - groupLabel: 'A', - groupId: 'a', - accessors: [], - filterOperations: () => true, - supportsMoreColumns: true, - dataTestSubj: 'lnsGroup', - }, - ], - }); - // Normally the configuration would change in response to a state update, - // but this test is updating it directly - mockVisualization.getConfiguration.mockReturnValueOnce({ - groups: [ - { - groupLabel: 'A', - groupId: 'a', - accessors: [{ columnId: 'newid' }], - filterOperations: () => true, - supportsMoreColumns: false, - dataTestSubj: 'lnsGroup', - }, - ], - }); - - const component = mountWithIntl(); - act(() => { - component.find('[data-test-subj="lns-empty-dimension"]').first().simulate('click'); - }); - component.update(); - - expect(component.find('EuiFlyoutHeader').exists()).toBe(true); - }); - it('should not update the visualization if the datasource is incomplete', () => { (generateId as jest.Mock).mockReturnValueOnce(`newid`); const updateAll = jest.fn(); @@ -338,6 +285,50 @@ describe('LayerPanel', () => { expect(updateAll).toHaveBeenCalled(); }); + it('should keep the DimensionContainer open when configuring a new dimension', () => { + /** + * The ID generation system for new dimensions has been messy before, so + * this tests that the ID used in the first render is used to keep the container + * open in future renders + */ + (generateId as jest.Mock).mockReturnValueOnce(`newid`); + (generateId as jest.Mock).mockReturnValueOnce(`bad`); + mockVisualization.getConfiguration.mockReturnValueOnce({ + groups: [ + { + groupLabel: 'A', + groupId: 'a', + accessors: [], + filterOperations: () => true, + supportsMoreColumns: true, + dataTestSubj: 'lnsGroup', + }, + ], + }); + // Normally the configuration would change in response to a state update, + // but this test is updating it directly + mockVisualization.getConfiguration.mockReturnValueOnce({ + groups: [ + { + groupLabel: 'A', + groupId: 'a', + accessors: [{ columnId: 'newid' }], + filterOperations: () => true, + supportsMoreColumns: false, + dataTestSubj: 'lnsGroup', + }, + ], + }); + + const component = mountWithIntl(); + act(() => { + component.find('[data-test-subj="lns-empty-dimension"]').first().simulate('click'); + }); + component.update(); + + expect(component.find('EuiFlyoutHeader').exists()).toBe(true); + }); + it('should close the DimensionContainer when the active visualization changes', () => { /** * The ID generation system for new dimensions has been messy before, so @@ -361,7 +352,7 @@ describe('LayerPanel', () => { }); // Normally the configuration would change in response to a state update, // but this test is updating it directly - mockVisualization.getConfiguration.mockReturnValueOnce({ + mockVisualization.getConfiguration.mockReturnValue({ groups: [ { groupLabel: 'A', @@ -382,7 +373,7 @@ describe('LayerPanel', () => { component.update(); expect(component.find('EuiFlyoutHeader').exists()).toBe(true); act(() => { - component.setProps({ activeVisualizationId: 'vis2' }); + component.setProps({ activeVisualization: mockVisualization2 }); }); component.update(); expect(component.find('EuiFlyoutHeader').exists()).toBe(false); @@ -452,7 +443,7 @@ describe('LayerPanel', () => { const draggingField = { field: { name: 'dragged' }, indexPatternId: 'a', id: '1' }; const component = mountWithIntl( - + ); @@ -465,7 +456,7 @@ describe('LayerPanel', () => { }) ); - component.find('DragDrop[data-test-subj="lnsGroup"]').first().simulate('drop'); + component.find('[data-test-subj="lnsGroup"] DragDrop').first().simulate('drop'); expect(mockDatasource.onDrop).toHaveBeenCalledWith( expect.objectContaining({ @@ -495,7 +486,7 @@ describe('LayerPanel', () => { const draggingField = { field: { name: 'dragged' }, indexPatternId: 'a', id: '1' }; const component = mountWithIntl( - + ); @@ -505,10 +496,14 @@ describe('LayerPanel', () => { ); expect( - component.find('DragDrop[data-test-subj="lnsGroup"]').first().prop('droppable') + component.find('[data-test-subj="lnsGroup"] DragDrop').first().prop('droppable') ).toEqual(false); - component.find('DragDrop[data-test-subj="lnsGroup"]').first().simulate('drop'); + component + .find('[data-test-subj="lnsGroup"] DragDrop') + .first() + .find('.lnsLayerPanel__dimension') + .simulate('drop'); expect(mockDatasource.onDrop).not.toHaveBeenCalled(); }); @@ -542,12 +537,11 @@ describe('LayerPanel', () => { const draggingOperation = { layerId: 'first', columnId: 'a', groupId: 'a', id: 'a' }; const component = mountWithIntl( - + ); - expect(mockDatasource.canHandleDrop).toHaveBeenCalledTimes(2); expect(mockDatasource.canHandleDrop).toHaveBeenCalledWith( expect.objectContaining({ dragDropContext: expect.objectContaining({ @@ -557,7 +551,7 @@ describe('LayerPanel', () => { ); // Simulate drop on the pre-populated dimension - component.find('DragDrop[data-test-subj="lnsGroupB"]').at(0).simulate('drop'); + component.find('[data-test-subj="lnsGroupB"] DragDrop').at(0).simulate('drop'); expect(mockDatasource.onDrop).toHaveBeenCalledWith( expect.objectContaining({ columnId: 'b', @@ -568,7 +562,7 @@ describe('LayerPanel', () => { ); // Simulate drop on the empty dimension - component.find('DragDrop[data-test-subj="lnsGroupB"]').at(1).simulate('drop'); + component.find('[data-test-subj="lnsGroupB"] DragDrop').at(1).simulate('drop'); expect(mockDatasource.onDrop).toHaveBeenCalledWith( expect.objectContaining({ columnId: 'newid', @@ -596,18 +590,55 @@ describe('LayerPanel', () => { const draggingOperation = { layerId: 'first', columnId: 'a', groupId: 'a', id: 'a' }; const component = mountWithIntl( - + + + + ); + + component.find(DragDrop).at(1).prop('onDrop')!(draggingOperation, { + layerId: 'first', + columnId: 'b', + groupId: 'a', + id: 'b', + }); + expect(mockDatasource.onDrop).toHaveBeenCalledWith( + expect.objectContaining({ + groupId: 'a', + droppedItem: draggingOperation, + }) + ); + }); + + it('should copy when dropping on empty slot in the same group', () => { + mockVisualization.getConfiguration.mockReturnValue({ + groups: [ + { + groupLabel: 'A', + groupId: 'a', + accessors: [{ columnId: 'a' }, { columnId: 'b' }], + filterOperations: () => true, + supportsMoreColumns: true, + dataTestSubj: 'lnsGroup', + }, + ], + }); + + const draggingOperation = { layerId: 'first', columnId: 'a', groupId: 'a', id: 'a' }; + + const component = mountWithIntl( + ); - expect(mockDatasource.canHandleDrop).not.toHaveBeenCalled(); - component.find('DragDrop[data-test-subj="lnsGroup"]').at(1).prop('onDrop')!( + component.find('[data-test-subj="lnsGroup"] DragDrop').at(2).prop('onDrop')!( (draggingOperation as unknown) as DroppableEvent ); expect(mockDatasource.onDrop).toHaveBeenCalledWith( expect.objectContaining({ - isReorder: true, + groupId: 'a', + droppedItem: draggingOperation, + isNew: true, }) ); }); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx index 999f75686b1cb..a1b13878851ee 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx @@ -5,66 +5,35 @@ */ import './layer_panel.scss'; -import React, { useContext, useState, useEffect } from 'react'; -import { - EuiPanel, - EuiSpacer, - EuiButtonIcon, - EuiFlexGroup, - EuiFlexItem, - EuiButtonEmpty, - EuiFormRow, - EuiLink, -} from '@elastic/eui'; +import React, { useContext, useState, useEffect, useMemo, useCallback } from 'react'; +import { EuiPanel, EuiSpacer, EuiFlexGroup, EuiFlexItem, EuiFormRow } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n/react'; import { NativeRenderer } from '../../../native_renderer'; -import { StateSetter, isDraggedOperation } from '../../../types'; -import { DragContext, DragDrop, ChildDragDropProvider, ReorderProvider } from '../../../drag_drop'; +import { StateSetter, Visualization } from '../../../types'; +import { + DragContext, + DragDropIdentifier, + ChildDragDropProvider, + ReorderProvider, +} from '../../../drag_drop'; import { LayerSettings } from './layer_settings'; import { trackUiEvent } from '../../../lens_ui_telemetry'; -import { generateId } from '../../../id_generator'; -import { ConfigPanelWrapperProps, ActiveDimensionState } from './types'; +import { LayerPanelProps, ActiveDimensionState } from './types'; import { DimensionContainer } from './dimension_container'; -import { ColorIndicator } from './color_indicator'; -import { PaletteIndicator } from './palette_indicator'; - -const triggerLinkA11yText = (label: string) => - i18n.translate('xpack.lens.configure.editConfig', { - defaultMessage: 'Click to edit configuration for {label} or drag to move', - values: { label }, - }); +import { RemoveLayerButton } from './remove_layer_button'; +import { EmptyDimensionButton } from './empty_dimension_button'; +import { DimensionButton } from './dimension_button'; +import { DraggableDimensionButton } from './draggable_dimension_button'; const initialActiveDimensionState = { isNew: false, }; -function isConfiguration( - value: unknown -): value is { columnId: string; groupId: string; layerId: string } { - return ( - Boolean(value) && - typeof value === 'object' && - 'columnId' in value! && - 'groupId' in value && - 'layerId' in value - ); -} - -function isSameConfiguration(config1: unknown, config2: unknown) { - return ( - isConfiguration(config1) && - isConfiguration(config2) && - config1.columnId === config2.columnId && - config1.groupId === config2.groupId && - config1.layerId === config2.layerId - ); -} - export function LayerPanel( - props: Exclude & { + props: Exclude & { + activeVisualization: Visualization; layerId: string; - index: number; + layerIndex: number; isOnlyLayer: boolean; updateVisualization: StateSetter; updateDatasource: (datasourceId: string, newState: unknown) => void; @@ -82,26 +51,25 @@ export function LayerPanel( initialActiveDimensionState ); - const { framePublicAPI, layerId, isOnlyLayer, onRemoveLayer, setLayerRef, index } = props; + const { + framePublicAPI, + layerId, + isOnlyLayer, + onRemoveLayer, + setLayerRef, + layerIndex, + activeVisualization, + updateVisualization, + updateDatasource, + } = props; const datasourcePublicAPI = framePublicAPI.datasourceLayers[layerId]; useEffect(() => { setActiveDimension(initialActiveDimensionState); - }, [props.activeVisualizationId]); + }, [activeVisualization.id]); - const setLayerRefMemoized = React.useCallback((el) => setLayerRef(layerId, el), [ - layerId, - setLayerRef, - ]); + const setLayerRefMemoized = useCallback((el) => setLayerRef(layerId, el), [layerId, setLayerRef]); - if ( - !datasourcePublicAPI || - !props.activeVisualizationId || - !props.visualizationMap[props.activeVisualizationId] - ) { - return null; - } - const activeVisualization = props.visualizationMap[props.activeVisualizationId]; const layerVisualizationConfigProps = { layerId, dragDropContext, @@ -110,18 +78,23 @@ export function LayerPanel( dateRange: props.framePublicAPI.dateRange, activeData: props.framePublicAPI.activeData, }; + const datasourceId = datasourcePublicAPI.datasourceId; const layerDatasourceState = props.datasourceStates[datasourceId].state; - const layerDatasource = props.datasourceMap[datasourceId]; - const layerDatasourceDropProps = { - layerId, - dragDropContext, - state: layerDatasourceState, - setState: (newState: unknown) => { - props.updateDatasource(datasourceId, newState); - }, - }; + const layerDatasourceDropProps = useMemo( + () => ({ + layerId, + dragDropContext, + state: layerDatasourceState, + setState: (newState: unknown) => { + updateDatasource(datasourceId, newState); + }, + }), + [layerId, dragDropContext, layerDatasourceState, datasourceId, updateDatasource] + ); + + const layerDatasource = props.datasourceMap[datasourceId]; const layerDatasourceConfigProps = { ...layerDatasourceDropProps, @@ -135,10 +108,68 @@ export function LayerPanel( const { activeId, activeGroup } = activeDimension; const columnLabelMap = layerDatasource.uniqueLabels(layerDatasourceConfigProps.state); + + const { setDimension, removeDimension } = activeVisualization; + const layerDatasourceOnDrop = layerDatasource.onDrop; + + const onDrop = useMemo(() => { + return (droppedItem: DragDropIdentifier, targetItem: DragDropIdentifier) => { + const { columnId, groupId, layerId: targetLayerId, isNew } = (targetItem as unknown) as { + groupId: string; + columnId: string; + layerId: string; + isNew?: boolean; + }; + + const filterOperations = + groups.find(({ groupId: gId }) => gId === targetItem.groupId)?.filterOperations || + (() => false); + + const dropResult = layerDatasourceOnDrop({ + ...layerDatasourceDropProps, + droppedItem, + columnId, + groupId, + layerId: targetLayerId, + isNew, + filterOperations, + }); + if (dropResult) { + updateVisualization( + setDimension({ + columnId, + groupId, + layerId: targetLayerId, + prevState: props.visualizationState, + }) + ); + + if (typeof dropResult === 'object') { + // When a column is moved, we delete the reference to the old + updateVisualization( + removeDimension({ + columnId: dropResult.deleted, + layerId: targetLayerId, + prevState: props.visualizationState, + }) + ); + } + } + }; + }, [ + groups, + layerDatasourceOnDrop, + props.visualizationState, + updateVisualization, + setDimension, + removeDimension, + layerDatasourceDropProps, + ]); + return (
- + - {groups.map((group) => { - const newId = generateId(); + {groups.map((group, groupIndex) => { const isMissing = !isEmptyLayer && group.required && group.accessors.length === 0; - return ( <> - - {group.accessors.map((accessorConfig) => { - const accessor = accessorConfig.columnId; - const { dragging } = dragDropContext; - const dragType = - isDraggedOperation(dragging) && accessor === dragging.columnId - ? 'move' - : isDraggedOperation(dragging) && group.groupId === dragging.groupId - ? 'reorder' - : 'copy'; - - const dropType = isDraggedOperation(dragging) - ? group.groupId !== dragging.groupId - ? 'replace' - : 'reorder' - : 'add'; - - const isFromCompatibleGroup = - dragging?.groupId !== group.groupId && - layerDatasource.canHandleDrop({ - ...layerDatasourceDropProps, - columnId: accessor, - filterOperations: group.filterOperations, - }); - - const isFromTheSameGroup = - isDraggedOperation(dragging) && - dragging.groupId === group.groupId && - dragging.columnId !== accessor; - - const isDroppable = isDraggedOperation(dragging) - ? dragType === 'reorder' - ? isFromTheSameGroup - : isFromCompatibleGroup - : layerDatasource.canHandleDrop({ - ...layerDatasourceDropProps, - columnId: accessor, - filterOperations: group.filterOperations, - }); + + {group.accessors.map((accessorConfig, accessorIndex) => { + const { columnId } = accessorConfig; return ( - - typeof a === 'string' ? a : a.columnId - )} - className={'lnsLayerPanel__dimensionContainer'} - value={{ - columnId: accessor, - groupId: group.groupId, - layerId, - id: accessor, - }} - isValueEqual={isSameConfiguration} - label={columnLabelMap[accessor]} - droppable={dragging && isDroppable} - dropTo={(dropTargetId: string) => { - layerDatasource.onDrop({ - isReorder: true, - ...layerDatasourceDropProps, - droppedItem: { - columnId: accessor, - groupId: group.groupId, - layerId, - id: accessor, - }, - columnId: dropTargetId, - filterOperations: group.filterOperations, - }); - }} - onDrop={(droppedItem) => { - const isReorder = - isDraggedOperation(droppedItem) && - droppedItem.groupId === group.groupId && - droppedItem.columnId !== accessor; - - const dropResult = layerDatasource.onDrop({ - isReorder, - ...layerDatasourceDropProps, - droppedItem, - columnId: accessor, - filterOperations: group.filterOperations, - }); - if (typeof dropResult === 'object') { - // When a column is moved, we delete the reference to the old - props.updateVisualization( - activeVisualization.removeDimension({ - layerId, - columnId: dropResult.deleted, - prevState: props.visualizationState, - }) - ); - } - }} +
- { - if (activeId) { - setActiveDimension(initialActiveDimensionState); - } else { - setActiveDimension({ - isNew: false, - activeGroup: group, - activeId: accessor, - }); - } + { + setActiveDimension({ + isNew: false, + activeGroup: group, + activeId: id, + }); }} - aria-label={triggerLinkA11yText(columnLabelMap[accessor])} - title={triggerLinkA11yText(columnLabelMap[accessor])} - > - - - - - { + onRemoveClick={(id: string) => { trackUiEvent('indexpattern_dimension_removed'); props.updateAll( datasourceId, layerDatasource.removeColumn({ layerId, - columnId: accessor, + columnId: id, prevState: layerDatasourceState, }), activeVisualization.removeDimension({ layerId, - columnId: accessor, + columnId: id, prevState: props.visualizationState, }) ); }} - /> - + > + +
-
+ ); })}
{group.supportsMoreColumns ? ( -
- { - const dropResult = layerDatasource.onDrop({ - ...layerDatasourceDropProps, - droppedItem, - columnId: newId, - filterOperations: group.filterOperations, - }); - if (dropResult) { - props.updateVisualization( - activeVisualization.setDimension({ - layerId, - groupId: group.groupId, - columnId: newId, - prevState: props.visualizationState, - }) - ); - - if (typeof dropResult === 'object') { - // When a column is moved, we delete the reference to the old - props.updateVisualization( - activeVisualization.removeDimension({ - layerId, - columnId: dropResult.deleted, - prevState: props.visualizationState, - }) - ); - } - } - }} - > -
- { - if (activeId) { - setActiveDimension(initialActiveDimensionState); - } else { - setActiveDimension({ - isNew: true, - activeGroup: group, - activeId: newId, - }); - } - }} - > - - -
-
-
+ { + setActiveDimension({ + activeGroup: group, + activeId: id, + isNew: true, + }); + }} + onDrop={onDrop} + /> ) : null}
@@ -572,44 +426,11 @@ export function LayerPanel( - { - // If we don't blur the remove / clear button, it remains focused - // which is a strange UX in this case. e.target.blur doesn't work - // due to who knows what, but probably event re-writing. Additionally, - // activeElement does not have blur so, we need to do some casting + safeguards. - const el = (document.activeElement as unknown) as { blur: () => void }; - - if (el?.blur) { - el.blur(); - } - - onRemoveLayer(); - }} - > - {isOnlyLayer - ? i18n.translate('xpack.lens.resetLayer', { - defaultMessage: 'Reset layer', - }) - : i18n.translate('xpack.lens.deleteLayer', { - defaultMessage: `Delete layer`, - })} - +
diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/remove_layer_button.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/remove_layer_button.tsx new file mode 100644 index 0000000000000..526e2fcefe19d --- /dev/null +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/remove_layer_button.tsx @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { EuiButtonEmpty } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +export function RemoveLayerButton({ + onRemoveLayer, + layerIndex, + isOnlyLayer, +}: { + onRemoveLayer: () => void; + layerIndex: number; + isOnlyLayer: boolean; +}) { + return ( + { + // If we don't blur the remove / clear button, it remains focused + // which is a strange UX in this case. e.target.blur doesn't work + // due to who knows what, but probably event re-writing. Additionally, + // activeElement does not have blur so, we need to do some casting + safeguards. + const el = (document.activeElement as unknown) as { blur: () => void }; + + if (el?.blur) { + el.blur(); + } + + onRemoveLayer(); + }} + > + {isOnlyLayer + ? i18n.translate('xpack.lens.resetLayer', { + defaultMessage: 'Reset layer', + }) + : i18n.translate('xpack.lens.deleteLayer', { + defaultMessage: `Delete layer`, + })} + + ); +} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/types.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/types.ts index c172c6da6848c..0a53fc741c207 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/types.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/types.ts @@ -12,7 +12,7 @@ import { DatasourceDimensionEditorProps, VisualizationDimensionGroupConfig, } from '../../../types'; - +import { DragContextState } from '../../../drag_drop'; export interface ConfigPanelWrapperProps { activeDatasourceId: string; visualizationState: unknown; @@ -31,6 +31,30 @@ export interface ConfigPanelWrapperProps { core: DatasourceDimensionEditorProps['core']; } +export interface LayerPanelProps { + activeDatasourceId: string; + visualizationState: unknown; + datasourceMap: Record; + activeVisualization: Visualization; + dispatch: (action: Action) => void; + framePublicAPI: FramePublicAPI; + datasourceStates: Record< + string, + { + isLoading: boolean; + state: unknown; + } + >; + core: DatasourceDimensionEditorProps['core']; +} + +export interface LayerDatasourceDropProps { + layerId: string; + dragDropContext: DragContextState; + state: unknown; + setState: (newState: unknown) => void; +} + export interface ActiveDimensionState { isNew: boolean; activeId?: string; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx index 69bdff0151f6c..c45dc82a3aeb2 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx @@ -11,7 +11,7 @@ import { i18n } from '@kbn/i18n'; import { EuiPopover, EuiButtonIcon, EuiContextMenuPanel, EuiContextMenuItem } from '@elastic/eui'; import { NativeRenderer } from '../../native_renderer'; import { Action } from './state_management'; -import { DragContext, Dragging } from '../../drag_drop'; +import { DragContext, DragDropIdentifier } from '../../drag_drop'; import { StateSetter, FramePublicAPI, DatasourceDataPanelProps, Datasource } from '../../types'; import { Query, Filter } from '../../../../../../src/plugins/data/public'; @@ -26,8 +26,8 @@ interface DataPanelWrapperProps { query: Query; dateRange: FramePublicAPI['dateRange']; filters: Filter[]; - dropOntoWorkspace: (field: Dragging) => void; - hasSuggestionForField: (field: Dragging) => boolean; + dropOntoWorkspace: (field: DragDropIdentifier) => void; + hasSuggestionForField: (field: DragDropIdentifier) => boolean; } export const DataPanelWrapper = memo((props: DataPanelWrapperProps) => { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx index c0728bd030a0a..7daf1ebb17b97 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx @@ -1338,10 +1338,14 @@ describe('editor_frame', () => { instance.update(); act(() => { - instance.find(DragDrop).filter('[data-test-subj="mockVisA"]').prop('onDrop')!({ - indexPatternId: '1', - field: {}, - }); + instance.find('[data-test-subj="mockVisA"]').find(DragDrop).prop('onDrop')!( + { + indexPatternId: '1', + field: {}, + id: '1', + }, + { id: 'lnsWorkspace' } + ); }); expect(mockVisualization2.getConfiguration).toHaveBeenCalledWith( @@ -1435,10 +1439,14 @@ describe('editor_frame', () => { instance.update(); act(() => { - instance.find(DragDrop).filter('[data-test-subj="lnsWorkspace"]').prop('onDrop')!({ - indexPatternId: '1', - field: {}, - }); + instance.find(DragDrop).filter('[dataTestSubj="lnsWorkspace"]').prop('onDrop')!( + { + indexPatternId: '1', + field: {}, + id: '1', + }, + { id: 'lnsWorkspace' } + ); }); expect(mockVisualization3.getConfiguration).toHaveBeenCalledWith( diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx index b6df0caa07577..c3412c32c2184 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useEffect, useReducer, useState } from 'react'; +import React, { useEffect, useReducer, useState, useCallback } from 'react'; import { CoreSetup, CoreStart } from 'kibana/public'; import { PaletteRegistry } from 'src/plugins/charts/public'; import { ReactExpressionRendererType } from '../../../../../../src/plugins/expressions/public'; @@ -16,7 +16,7 @@ import { FrameLayout } from './frame_layout'; import { SuggestionPanel } from './suggestion_panel'; import { WorkspacePanel } from './workspace_panel'; import { Document } from '../../persistence/saved_object_store'; -import { Dragging, RootDragDropProvider } from '../../drag_drop'; +import { DragDropIdentifier, RootDragDropProvider } from '../../drag_drop'; import { getSavedObjectFormat } from './save'; import { generateId } from '../../id_generator'; import { Filter, Query, SavedQuery } from '../../../../../../src/plugins/data/public'; @@ -260,7 +260,7 @@ export function EditorFrame(props: EditorFrameProps) { ); const getSuggestionForField = React.useCallback( - (field: Dragging) => { + (field: DragDropIdentifier) => { const { activeDatasourceId, datasourceStates } = state; const activeVisualizationId = state.visualization.activeId; const visualizationState = state.visualization.state; @@ -290,12 +290,12 @@ export function EditorFrame(props: EditorFrameProps) { ] ); - const hasSuggestionForField = React.useCallback( - (field: Dragging) => getSuggestionForField(field) !== undefined, + const hasSuggestionForField = useCallback( + (field: DragDropIdentifier) => getSuggestionForField(field) !== undefined, [getSuggestionForField] ); - const dropOntoWorkspace = React.useCallback( + const dropOntoWorkspace = useCallback( (field) => { const suggestion = getSuggestionForField(field); if (suggestion) { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts index 5cdc5ce592497..95dbf8264c588 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts @@ -19,7 +19,7 @@ import { DatasourcePublicAPI, } from '../../types'; import { Action } from './state_management'; -import { Dragging } from '../../drag_drop'; +import { DragDropIdentifier } from '../../drag_drop'; export interface Suggestion { visualizationId: string; @@ -231,7 +231,7 @@ export function getTopSuggestionForField( visualizationState: unknown, datasource: Datasource, datasourceStates: Record, - field: Dragging + field: DragDropIdentifier ) { const hasData = Object.values(datasourceLayers).some( (datasourceLayer) => datasourceLayer.getTableSpec().length > 0 diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx index ddb2640d50d59..2f94d8e65dce6 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx @@ -784,7 +784,15 @@ describe('workspace_panel', () => { function initComponent(draggingContext = draggedField) { instance = mount( - {}}> + {}} + setActiveDropTarget={() => {}} + activeDropTarget={undefined} + keyboardMode={false} + setKeyboardMode={() => {}} + setA11yMessage={() => {}} + > { }); initComponent(); - instance.find(DragDrop).prop('onDrop')!(draggedField); + instance.find(DragDrop).prop('onDrop')!(draggedField, { id: 'lnsWorkspace' }); expect(mockDispatch).toHaveBeenCalledWith({ type: 'SWITCH_VISUALIZATION', diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx index 5fc7b80a3d0ce..0c1fa932da09c 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx @@ -39,7 +39,7 @@ import { isLensFilterEvent, isLensEditEvent, } from '../../../types'; -import { DragDrop, DragContext, Dragging } from '../../../drag_drop'; +import { DragDrop, DragContext, DragDropIdentifier } from '../../../drag_drop'; import { Suggestion, switchToSuggestion } from '../suggestion_helpers'; import { buildExpression } from '../expression_helpers'; import { debouncedComponent } from '../../../debounced_component'; @@ -75,7 +75,7 @@ export interface WorkspacePanelProps { plugins: { uiActions?: UiActionsStart; data: DataPublicPluginStart }; title?: string; visualizeTriggerFieldContext?: VisualizeFieldContext; - getSuggestionForField: (field: Dragging) => Suggestion | undefined; + getSuggestionForField: (field: DragDropIdentifier) => Suggestion | undefined; } interface WorkspaceState { @@ -83,8 +83,10 @@ interface WorkspaceState { expandError: boolean; } +const workspaceDropValue = { id: 'lnsWorkspace' }; + // Exported for testing purposes only. -export function WorkspacePanel({ +export const WorkspacePanel = React.memo(function WorkspacePanel({ activeDatasourceId, activeVisualizationId, visualizationMap, @@ -102,7 +104,8 @@ export function WorkspacePanel({ }: WorkspacePanelProps) { const dragDropContext = useContext(DragContext); - const suggestionForDraggedField = getSuggestionForField(dragDropContext.dragging); + const suggestionForDraggedField = + dragDropContext.dragging && getSuggestionForField(dragDropContext.dragging); const [localState, setLocalState] = useState({ expressionBuildError: undefined, @@ -296,10 +299,11 @@ export function WorkspacePanel({ >
{renderVisualization()} @@ -308,7 +312,7 @@ export function WorkspacePanel({ ); -} +}); export const InnerVisualizationWrapper = ({ expression, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx index 8e41abf23e934..794ccd6936c90 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx @@ -278,7 +278,10 @@ describe('IndexPattern Data Panel', () => { {...defaultProps} state={state} setState={setStateSpy} - dragDropContext={{ dragging: { id: '1' }, setDragging: () => {} }} + dragDropContext={{ + ...createMockedDragDropContext(), + dragging: { id: '1' }, + }} /> ); @@ -297,7 +300,10 @@ describe('IndexPattern Data Panel', () => { indexPatterns: {}, }} setState={jest.fn()} - dragDropContext={{ dragging: { id: '1' }, setDragging: () => {} }} + dragDropContext={{ + ...createMockedDragDropContext(), + dragging: { id: '1' }, + }} changeIndexPattern={jest.fn()} /> ); @@ -329,7 +335,10 @@ describe('IndexPattern Data Panel', () => { ...defaultProps, changeIndexPattern: jest.fn(), setState, - dragDropContext: { dragging: { id: '1' }, setDragging: () => {} }, + dragDropContext: { + ...createMockedDragDropContext(), + dragging: { id: '1' }, + }, dateRange: { fromDate: '2019-01-01', toDate: '2020-01-01' }, state: { indexPatternRefs: [], diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx index 4031cae548a10..c3dbcdc3e0573 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx @@ -426,6 +426,23 @@ export const InnerIndexPatternDataPanel = function InnerIndexPatternDataPanel({ ); }, [unfilteredFieldGroups, localState.nameFilter, localState.typeFilter]); + const checkFieldExists = useCallback( + (field) => + field.type === 'document' || + fieldExists(existingFields, currentIndexPattern.title, field.name), + [existingFields, currentIndexPattern.title] + ); + + const { nameFilter, typeFilter } = localState; + + const filter = useMemo( + () => ({ + nameFilter, + typeFilter, + }), + [nameFilter, typeFilter] + ); + const fieldProps = useMemo( () => ({ core, @@ -586,17 +603,11 @@ export const InnerIndexPatternDataPanel = function InnerIndexPatternDataPanel({ - field.type === 'document' || - fieldExists(existingFields, currentIndexPattern.title, field.name) - } + exists={checkFieldExists} fieldProps={fieldProps} fieldGroups={fieldGroups} hasSyncedExistingFields={!!hasSyncedExistingFields} - filter={{ - nameFilter: localState.nameFilter, - typeFilter: localState.typeFilter, - }} + filter={filter} currentIndexPatternId={currentIndexPatternId} existenceFetchFailed={existenceFetchFailed} existFieldsInIndex={!!allFields.length} diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable.test.ts index 6be03a92a445e..477f14848c08e 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable.test.ts @@ -316,6 +316,7 @@ describe('IndexPatternDimensionEditorPanel', () => { droppedItem: dragging, columnId: 'col2', filterOperations: (op: OperationMetadata) => op.dataType === 'number', + groupId: '1', }); expect(setState).toBeCalledTimes(1); @@ -352,6 +353,7 @@ describe('IndexPatternDimensionEditorPanel', () => { droppedItem: dragging, columnId: 'col2', filterOperations: (op: OperationMetadata) => op.isBucketed, + groupId: '1', }); expect(setState).toBeCalledTimes(1); @@ -387,6 +389,7 @@ describe('IndexPatternDimensionEditorPanel', () => { }, droppedItem: dragging, filterOperations: (op: OperationMetadata) => op.dataType === 'number', + groupId: '1', }); expect(setState).toBeCalledTimes(1); @@ -438,6 +441,7 @@ describe('IndexPatternDimensionEditorPanel', () => { }, }, }, + groupId: '1', }); expect(setState).toBeCalledTimes(1); @@ -473,6 +477,7 @@ describe('IndexPatternDimensionEditorPanel', () => { }, droppedItem: dragging, columnId: 'col2', + groupId: '1', }); expect(setState).toBeCalledTimes(1); @@ -538,6 +543,7 @@ describe('IndexPatternDimensionEditorPanel', () => { }, droppedItem: dragging, state: testState, + groupId: '1', }); expect(setState).toBeCalledTimes(1); @@ -600,6 +606,7 @@ describe('IndexPatternDimensionEditorPanel', () => { droppedItem: dragging, state: testState, filterOperations: (op: OperationMetadata) => op.dataType === 'number', + groupId: 'a', }; const stateWithColumnOrder = (columnOrder: string[]) => { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable.ts b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable.ts index e4eabafc6938e..0308d5e9103bf 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable.ts @@ -8,6 +8,7 @@ import { DatasourceDimensionDropProps, DatasourceDimensionDropHandlerProps, isDraggedOperation, + DraggedOperation, } from '../../types'; import { IndexPatternColumn } from '../indexpattern'; import { insertOrReplaceColumn } from '../operations'; @@ -15,7 +16,15 @@ import { mergeLayer } from '../state_helpers'; import { hasField, isDraggedField } from '../utils'; import { IndexPatternPrivateState, IndexPatternField } from '../types'; import { trackUiEvent } from '../../lens_ui_telemetry'; -import { getOperationSupportMatrix } from './operation_support'; +import { getOperationSupportMatrix, OperationSupportMatrix } from './operation_support'; + +type DropHandlerProps = Pick< + DatasourceDimensionDropHandlerProps, + 'columnId' | 'setState' | 'state' | 'layerId' | 'droppedItem' +> & { + droppedItem: T; + operationSupportMatrix: OperationSupportMatrix; +}; export function canHandleDrop(props: DatasourceDimensionDropProps) { const operationSupportMatrix = getOperationSupportMatrix(props); @@ -29,11 +38,11 @@ export function canHandleDrop(props: DatasourceDimensionDropProps) { - const operationSupportMatrix = getOperationSupportMatrix(props); - const { setState, state, layerId, columnId, droppedItem } = props; - - if (isDraggedOperation(droppedItem) && props.isReorder) { - const dropEl = columnId; +const onReorderDrop = ({ columnId, setState, state, layerId, droppedItem }: DropHandlerProps) => { + setState( + mergeLayer({ + state, + layerId, + newLayer: { + columnOrder: reorderElements( + state.layers[layerId].columnOrder, + columnId, + droppedItem.columnId + ), + }, + }) + ); - setState( - mergeLayer({ - state, - layerId, - newLayer: { - columnOrder: reorderElements( - state.layers[layerId].columnOrder, - dropEl, - droppedItem.columnId - ), - }, - }) - ); - - return true; + return true; +}; + +const onMoveDropToCompatibleGroup = ({ + columnId, + setState, + state, + layerId, + droppedItem, +}: DropHandlerProps) => { + const layer = state.layers[layerId]; + const op = { ...layer.columns[droppedItem.columnId] }; + const newColumns = { ...layer.columns }; + delete newColumns[droppedItem.columnId]; + newColumns[columnId] = op; + + const newColumnOrder = [...layer.columnOrder]; + const oldIndex = newColumnOrder.findIndex((c) => c === droppedItem.columnId); + const newIndex = newColumnOrder.findIndex((c) => c === columnId); + + if (newIndex === -1) { + newColumnOrder[oldIndex] = columnId; + } else { + newColumnOrder.splice(oldIndex, 1); } + // Time to replace + setState( + mergeLayer({ + state, + layerId, + newLayer: { + columnOrder: newColumnOrder, + columns: newColumns, + }, + }) + ); + return { deleted: droppedItem.columnId }; +}; + +const onFieldDrop = ({ + columnId, + setState, + state, + layerId, + droppedItem, + operationSupportMatrix, +}: DropHandlerProps) => { function hasOperationForField(field: IndexPatternField) { return Boolean(operationSupportMatrix.operationByField[field.name]); } - if (isDraggedOperation(droppedItem) && droppedItem.layerId === layerId) { - const layer = state.layers[layerId]; - const op = { ...layer.columns[droppedItem.columnId] }; - if (!props.filterOperations(op)) { - return false; - } - - const newColumns = { ...layer.columns }; - delete newColumns[droppedItem.columnId]; - newColumns[columnId] = op; - - const newColumnOrder = [...layer.columnOrder]; - const oldIndex = newColumnOrder.findIndex((c) => c === droppedItem.columnId); - const newIndex = newColumnOrder.findIndex((c) => c === columnId); - - if (newIndex === -1) { - newColumnOrder[oldIndex] = columnId; - } else { - newColumnOrder.splice(oldIndex, 1); - } - - // Time to replace - setState( - mergeLayer({ - state, - layerId, - newLayer: { - columnOrder: newColumnOrder, - columns: newColumns, - }, - }) - ); - return { deleted: droppedItem.columnId }; - } - if (!isDraggedField(droppedItem) || !hasOperationForField(droppedItem.field)) { // TODO: What do we do if we couldn't find a column? return false; } + // dragged field, not operation + const operationsForNewField = operationSupportMatrix.operationByField[droppedItem.field.name]; if (!operationsForNewField || operationsForNewField.size === 0) { @@ -159,6 +174,56 @@ export function onDrop(props: DatasourceDimensionDropHandlerProps columns.length); trackUiEvent(hasData ? 'drop_non_empty' : 'drop_empty'); setState(mergeLayer({ state, layerId, newLayer })); - return true; +}; + +export function onDrop(props: DatasourceDimensionDropHandlerProps) { + const operationSupportMatrix = getOperationSupportMatrix(props); + const { setState, state, droppedItem, columnId, layerId, groupId, isNew } = props; + + if (!isDraggedOperation(droppedItem)) { + return onFieldDrop({ + columnId, + setState, + state, + layerId, + droppedItem, + operationSupportMatrix, + }); + } + const isExistingFromSameGroup = + droppedItem.groupId === groupId && droppedItem.columnId !== columnId && !isNew; + + // reorder in the same group + if (isExistingFromSameGroup) { + return onReorderDrop({ + columnId, + setState, + state, + layerId, + droppedItem, + operationSupportMatrix, + }); + } + + // replace or move to compatible group + const isFromOtherGroup = droppedItem.groupId !== groupId && droppedItem.layerId === layerId; + + if (isFromOtherGroup) { + const layer = state.layers[layerId]; + const op = { ...layer.columns[droppedItem.columnId] }; + + if (props.filterOperations(op)) { + return onMoveDropToCompatibleGroup({ + columnId, + setState, + state, + layerId, + droppedItem, + operationSupportMatrix, + }); + } + } + + return false; } diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.test.tsx index 1019b2c33e0e5..881e7a7228762 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.test.tsx @@ -95,6 +95,8 @@ describe('IndexPattern Field Item', () => { }, exists: true, chartsThemeService, + groupIndex: 0, + itemIndex: 0, dropOntoWorkspace: () => {}, hasSuggestionForField: () => false, }; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx index 740b557b668b7..ff335a0da56ee 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx @@ -6,7 +6,7 @@ import './field_item.scss'; -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useState, useMemo } from 'react'; import DateMath from '@elastic/datemath'; import { EuiButtonGroup, @@ -48,7 +48,7 @@ import { import { FieldButton } from '../../../../../src/plugins/kibana_react/public'; import { ChartsPluginSetup } from '../../../../../src/plugins/charts/public'; import { DraggedField } from './indexpattern'; -import { DragDrop, Dragging } from '../drag_drop'; +import { DragDrop, DragDropIdentifier } from '../drag_drop'; import { DatasourceDataPanelProps, DataType } from '../types'; import { BucketedAggregation, FieldStatsResponse } from '../../common'; import { IndexPattern, IndexPatternField } from './types'; @@ -69,6 +69,8 @@ export interface FieldItemProps { chartsThemeService: ChartsPluginSetup['theme']; filters: Filter[]; hideDetails?: boolean; + itemIndex: number; + groupIndex: number; dropOntoWorkspace: DatasourceDataPanelProps['dropOntoWorkspace']; hasSuggestionForField: DatasourceDataPanelProps['hasSuggestionForField']; } @@ -106,7 +108,7 @@ export const InnerFieldItem = function InnerFieldItem(props: FieldItemProps) { const [infoIsOpen, setOpen] = useState(false); const dropOntoWorkspaceAndClose = useCallback( - (droppedField: Dragging) => { + (droppedField: DragDropIdentifier) => { dropOntoWorkspace(droppedField); setOpen(false); }, @@ -163,10 +165,11 @@ export const InnerFieldItem = function InnerFieldItem(props: FieldItemProps) { } } - const value = React.useMemo( + const value = useMemo( () => ({ field, indexPatternId: indexPattern.id, id: field.name } as DraggedField), [field, indexPattern.id] ); + const lensFieldIcon = ; const lensInfoIcon = ( ('.application') || undefined} button={ allFieldCount + fields.length, 0); } -export function FieldList({ +export const FieldList = React.memo(function FieldList({ exists, fieldGroups, existenceFetchFailed, @@ -135,13 +135,15 @@ export function FieldList({ {Object.entries(fieldGroups) .filter(([, { showInAccordion }]) => !showInAccordion) .flatMap(([, { fields }]) => - fields.map((field) => ( + fields.map((field, index) => ( @@ -151,7 +153,7 @@ export function FieldList({ {Object.entries(fieldGroups) .filter(([, { showInAccordion }]) => showInAccordion) - .map(([key, fieldGroup]) => ( + .map(([key, fieldGroup], index) => ( { setAccordionState((s) => ({ ...s, @@ -198,4 +201,4 @@ export function FieldList({
); -} +}); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.test.tsx index e2f615217bb4a..dca3de24014bc 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.test.tsx @@ -72,6 +72,7 @@ describe('Fields Accordion', () => { fieldProps, renderCallout:
Callout
, exists: () => true, + groupIndex: 0, dropOntoWorkspace: () => {}, hasSuggestionForField: () => false, }; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.tsx index 11adf1a128c1b..11710ffa18068 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/fields_accordion.tsx @@ -5,7 +5,7 @@ */ import './datapanel.scss'; -import React, { memo, useCallback } from 'react'; +import React, { memo, useCallback, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiText, @@ -50,11 +50,12 @@ export interface FieldsAccordionProps { exists: (field: IndexPatternField) => boolean; showExistenceFetchError?: boolean; hideDetails?: boolean; + groupIndex: number; dropOntoWorkspace: DatasourceDataPanelProps['dropOntoWorkspace']; hasSuggestionForField: DatasourceDataPanelProps['hasSuggestionForField']; } -export const InnerFieldsAccordion = function InnerFieldsAccordion({ +export const FieldsAccordion = memo(function InnerFieldsAccordion({ initialIsOpen, onToggle, id, @@ -69,28 +70,72 @@ export const InnerFieldsAccordion = function InnerFieldsAccordion({ exists, hideDetails, showExistenceFetchError, + groupIndex, dropOntoWorkspace, hasSuggestionForField, }: FieldsAccordionProps) { const renderField = useCallback( - (field: IndexPatternField) => ( + (field: IndexPatternField, index) => ( ), - [fieldProps, exists, hideDetails, dropOntoWorkspace, hasSuggestionForField] + [fieldProps, exists, hideDetails, dropOntoWorkspace, hasSuggestionForField, groupIndex] ); - const titleClassname = classNames({ - // eslint-disable-next-line @typescript-eslint/naming-convention - lnsInnerIndexPatternDataPanel__titleTooltip: !!helpTooltip, - }); + const renderButton = useMemo(() => { + const titleClassname = classNames({ + // eslint-disable-next-line @typescript-eslint/naming-convention + lnsInnerIndexPatternDataPanel__titleTooltip: !!helpTooltip, + }); + return ( + + {label} + {!!helpTooltip && ( + + )} + + ); + }, [label, helpTooltip]); + + const extraAction = useMemo(() => { + return showExistenceFetchError ? ( + + ) : hasLoaded ? ( + + {fieldsCount} + + ) : ( + + ); + }, [showExistenceFetchError, hasLoaded, isFiltered, fieldsCount]); return ( - {label} - {!!helpTooltip && ( - - )} - - } - extraAction={ - showExistenceFetchError ? ( - - ) : hasLoaded ? ( - - {fieldsCount} - - ) : ( - - ) - } + buttonContent={renderButton} + extraAction={extraAction} > {hasLoaded && @@ -148,6 +157,4 @@ export const InnerFieldsAccordion = function InnerFieldsAccordion({ ))} ); -}; - -export const FieldsAccordion = memo(InnerFieldsAccordion); +}); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx index e51cd36156d1b..c309212eed164 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx @@ -51,11 +51,11 @@ import { mergeLayer } from './state_helpers'; import { Datasource, StateSetter } from '../types'; import { ChartsPluginSetup } from '../../../../../src/plugins/charts/public'; import { deleteColumn, isReferenced } from './operations'; -import { Dragging } from '../drag_drop/providers'; +import { DragDropIdentifier } from '../drag_drop/providers'; export { OperationType, IndexPatternColumn, deleteColumn } from './operations'; -export type DraggedField = Dragging & { +export type DraggedField = DragDropIdentifier & { field: IndexPatternField; indexPatternId: string; }; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts b/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts index 4aea9e8ac67a9..67ddbe8c45ab7 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts @@ -247,5 +247,10 @@ export function createMockedDragDropContext(): jest.Mocked { return { dragging: undefined, setDragging: jest.fn(), + activeDropTarget: undefined, + setActiveDropTarget: jest.fn(), + keyboardMode: false, + setKeyboardMode: jest.fn(), + setA11yMessage: jest.fn(), }; } diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index 907ef3a700ce6..8f202faeb9ee8 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -16,7 +16,7 @@ import { Datatable, SerializedFieldFormat, } from '../../../../src/plugins/expressions/public'; -import { DragContextState, Dragging } from './drag_drop'; +import { DragContextState, DragDropIdentifier } from './drag_drop'; import { Document } from './persistence'; import { DateRange } from '../common'; import { Query, Filter, SavedQuery, IFieldFormat } from '../../../../src/plugins/data/public'; @@ -226,8 +226,8 @@ export interface DatasourceDataPanelProps { query: Query; dateRange: DateRange; filters: Filter[]; - dropOntoWorkspace: (field: Dragging) => void; - hasSuggestionForField: (field: Dragging) => boolean; + dropOntoWorkspace: (field: DragDropIdentifier) => void; + hasSuggestionForField: (field: DragDropIdentifier) => boolean; } interface SharedDimensionProps { @@ -301,6 +301,8 @@ export type DatasourceDimensionDropProps = SharedDimensionProps & { export type DatasourceDimensionDropHandlerProps = DatasourceDimensionDropProps & { droppedItem: unknown; + groupId: string; + isNew?: boolean; }; export type DataType = 'document' | 'string' | 'number' | 'date' | 'boolean' | 'ip'; diff --git a/x-pack/plugins/lens/public/xy_visualization/xy_config_panel.tsx b/x-pack/plugins/lens/public/xy_visualization/xy_config_panel.tsx index b8bca09bb353c..91fa2f5921d2f 100644 --- a/x-pack/plugins/lens/public/xy_visualization/xy_config_panel.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/xy_config_panel.tsx @@ -5,7 +5,7 @@ */ import './xy_config_panel.scss'; -import React, { useMemo, useState } from 'react'; +import React, { useMemo, useState, memo } from 'react'; import { i18n } from '@kbn/i18n'; import { Position } from '@elastic/charts'; import { debounce } from 'lodash'; @@ -179,8 +179,7 @@ function getValueLabelDisableReason({ defaultMessage: 'This setting cannot be changed on stacked or percentage bar charts', }); } - -export function XyToolbar(props: VisualizationToolbarProps) { +export const XyToolbar = memo(function XyToolbar(props: VisualizationToolbarProps) { const { state, setState, frame } = props; const hasNonBarSeries = state?.layers.some(({ seriesType }) => @@ -485,7 +484,8 @@ export function XyToolbar(props: VisualizationToolbarProps) { ); -} +}); + const idPrefix = htmlIdGenerator()(); export function DimensionEditor( @@ -653,7 +653,7 @@ const ColorPicker = ({ } }; - const updateColorInState: EuiColorPickerProps['onChange'] = React.useMemo( + const updateColorInState: EuiColorPickerProps['onChange'] = useMemo( () => debounce((text, output) => { const newYConfigs = [...(layer.yConfig || [])]; diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index d0634d6cd87a2..b50a7092e108d 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -11188,7 +11188,6 @@ "xpack.lens.discover.visualizeFieldLegend": "Visualize フィールド", "xpack.lens.dragDrop.elementLifted": "位置 {position} のアイテム {itemLabel} を持ち上げました。", "xpack.lens.dragDrop.elementMoved": "位置 {prevPosition} から位置 {position} までアイテム {itemLabel} を移動しました", - "xpack.lens.dragDrop.reorderInstructions": "スペースバーを押すと、ドラッグを開始します。ドラッグするときには、矢印キーで並べ替えることができます。もう一度スペースバーを押すと終了します。", "xpack.lens.editLayerSettings": "レイヤー設定を編集", "xpack.lens.editLayerSettingsChartType": "レイヤー設定を編集、{chartType}", "xpack.lens.editorFrame.buildExpressionError": "グラフの準備中に予期しないエラーが発生しました", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 4ca6d11aa8940..a93b2c78690c1 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -11217,7 +11217,6 @@ "xpack.lens.discover.visualizeFieldLegend": "可视化字段", "xpack.lens.dragDrop.elementLifted": "您已将项目 {itemLabel} 提升到位置 {position}", "xpack.lens.dragDrop.elementMoved": "您已将项目 {itemLabel} 从位置 {prevPosition} 移到位置 {position}", - "xpack.lens.dragDrop.reorderInstructions": "按空格键开始拖动。拖动时,使用方向键重新排序。再次按空格键结束操作。", "xpack.lens.editLayerSettings": "编辑图层设置", "xpack.lens.editLayerSettingsChartType": "编辑图层设置 {chartType}", "xpack.lens.editorFrame.buildExpressionError": "准备图表时发生意外错误", diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index dabead6ffbdad..17f9fb036129a 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -202,7 +202,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }) .lnsDragDrop`; const dropping = `[data-test-subj='${dimension}']:nth-of-type(${ endIndex + 1 - }) [data-test-subj='lnsDragDrop-reorderableDrop'`; + }) [data-test-subj='lnsDragDrop-reorderableDropLayer'`; await browser.html5DragAndDrop(dragging, dropping); await PageObjects.header.waitUntilLoadingHasFinished(); }, From d924604e64031fa7cff5245f64391a97437a1b48 Mon Sep 17 00:00:00 2001 From: Liza K Date: Mon, 1 Feb 2021 13:12:33 +0200 Subject: [PATCH 23/85] Support saved object pagination Fix get search status tests --- .../session/check_running_sessions.test.ts | 102 ++++++++++- .../search/session/check_running_sessions.ts | 164 +++++++++++------- .../search/session/get_search_status.test.ts | 30 ++-- .../search/session/get_search_status.ts | 49 ++++-- 4 files changed, 247 insertions(+), 98 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts index ebfa3575417b7..4acf9f2a84daf 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts @@ -21,7 +21,7 @@ describe('getSearchStatus', () => { let savedObjectsClient: jest.Mocked; const config: SearchSessionsConfig = { enabled: true, - pageSize: 10000, + pageSize: 5, notTouchedTimeout: moment.duration(1, 'm'), completedTimeout: moment.duration(5, 'm'), maxUpdateRetries: 3, @@ -35,6 +35,14 @@ describe('getSearchStatus', () => { error: jest.fn(), }; + const emptySO = { + persisted: false, + status: SearchSessionStatus.IN_PROGRESS, + created: moment().subtract(moment.duration(3, 'm')), + touched: moment().subtract(moment.duration(10, 's')), + idMapping: {}, + }; + beforeEach(() => { savedObjectsClient = savedObjectsClientMock.create(); mockClient = { @@ -68,6 +76,98 @@ describe('getSearchStatus', () => { expect(savedObjectsClient.delete).not.toBeCalled(); }); + describe('pagination', () => { + test('fetches one page if not objects exist', async () => { + savedObjectsClient.find.mockResolvedValueOnce({ + saved_objects: [], + total: 0, + } as any); + + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + + expect(savedObjectsClient.find).toHaveBeenCalledTimes(1); + }); + + test('fetches one page if less than page size object are returned', async () => { + savedObjectsClient.find.mockResolvedValueOnce({ + saved_objects: [emptySO, emptySO], + total: 5, + } as any); + + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + + expect(savedObjectsClient.find).toHaveBeenCalledTimes(1); + }); + + test('fetches two pages if exactly page size objects are returned', async () => { + let i = 0; + savedObjectsClient.find.mockImplementation(() => { + return new Promise((resolve) => { + resolve({ + saved_objects: i++ === 0 ? [emptySO, emptySO, emptySO, emptySO, emptySO] : [], + total: 5, + page: i, + } as any); + }); + }); + + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + + expect(savedObjectsClient.find).toHaveBeenCalledTimes(2); + + // validate that page number increases + const { page: page1 } = savedObjectsClient.find.mock.calls[0][0]; + const { page: page2 } = savedObjectsClient.find.mock.calls[1][0]; + expect(page1).toBe(1); + expect(page2).toBe(2); + }); + + test('fetches two pages if page size +1 objects are returned', async () => { + let i = 0; + savedObjectsClient.find.mockImplementation(() => { + return new Promise((resolve) => { + resolve({ + saved_objects: i++ === 0 ? [emptySO, emptySO, emptySO, emptySO, emptySO] : [emptySO], + total: 5, + page: i, + } as any); + }); + }); + + await checkRunningSessions( + { + savedObjectsClient, + client: mockClient, + logger: mockLogger, + }, + config + ); + + expect(savedObjectsClient.find).toHaveBeenCalledTimes(2); + }); + }); + describe('delete', () => { test('doesnt delete a persisted session', async () => { savedObjectsClient.find.mockResolvedValue({ diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts index 5aea9c86d956c..9d7f322012e47 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts @@ -11,6 +11,8 @@ import { SavedObjectsClientContract, } from 'kibana/server'; import moment from 'moment'; +import { EMPTY, from } from 'rxjs'; +import { expand, mergeMap } from 'rxjs/operators'; import { nodeBuilder } from '../../../../../../src/plugins/data/common'; import { SearchSessionStatus, @@ -95,80 +97,108 @@ async function updateSessionStatus( return sessionUpdated; } +function getSavedSearchSessionsPage$( + { savedObjectsClient, logger }: CheckRunningSessionsDeps, + config: SearchSessionsConfig, + page: number +) { + logger.debug(`Fetching saved search sessions page ${page}`); + return from( + savedObjectsClient.find({ + page, + perPage: config.pageSize, + type: SEARCH_SESSION_TYPE, + namespaces: ['*'], + filter: nodeBuilder.or([ + nodeBuilder.and([ + nodeBuilder.is( + `${SEARCH_SESSION_TYPE}.attributes.status`, + SearchSessionStatus.IN_PROGRESS.toString() + ), + nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.persisted`, 'true'), + ]), + nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.persisted`, 'false'), + ]), + }) + ); +} + +function getAllSavedSearchSessions$(deps: CheckRunningSessionsDeps, config: SearchSessionsConfig) { + return getSavedSearchSessionsPage$(deps, config, 1).pipe( + expand((result) => { + if (!result || !result.saved_objects || result.saved_objects.length < config.pageSize) + return EMPTY; + else { + return getSavedSearchSessionsPage$(deps, config, result.page + 1); + } + }) + ); +} + export async function checkRunningSessions( - { savedObjectsClient, client, logger }: CheckRunningSessionsDeps, + deps: CheckRunningSessionsDeps, config: SearchSessionsConfig ): Promise { + const { logger, client, savedObjectsClient } = deps; try { - // TODO: take care of pagination - const runningSearchSessionsResponse = await savedObjectsClient.find( - { - perPage: config.pageSize, - type: SEARCH_SESSION_TYPE, - namespaces: ['*'], - filter: nodeBuilder.or([ - nodeBuilder.and([ - nodeBuilder.is( - `${SEARCH_SESSION_TYPE}.attributes.status`, - SearchSessionStatus.IN_PROGRESS.toString() - ), - nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.persisted`, 'true'), - ]), - nodeBuilder.is(`${SEARCH_SESSION_TYPE}.attributes.persisted`, 'false'), - ]), - } - ); - - if (!runningSearchSessionsResponse.total) return; - - logger.debug(`Found ${runningSearchSessionsResponse.total} running sessions`); - - const updatedSessions = new Array>(); - - await Promise.all( - runningSearchSessionsResponse.saved_objects.map(async (session) => { - const updated = await updateSessionStatus(session, client, logger); - let deleted = false; - - if (!session.attributes.persisted) { - if (isSessionStale(session, config, logger)) { - deleted = true; - // delete saved object to free up memory - // TODO: there's a potential rare edge case of deleting an object and then receiving a new trackId for that same session! - // Maybe we want to change state to deleted and cleanup later? - logger.debug(`Deleting stale session | ${session.id}`); - await savedObjectsClient.delete(SEARCH_SESSION_TYPE, session.id); - - // Send a delete request for each async search to ES - Object.keys(session.attributes.idMapping).map(async (searchKey: string) => { - const searchInfo = session.attributes.idMapping[searchKey]; - if (searchInfo.strategy === ENHANCED_ES_SEARCH_STRATEGY) { - try { - await client.asyncSearch.delete({ id: searchInfo.id }); - } catch (e) { - logger.debug( - `Error ignored while deleting async_search ${searchInfo.id}: ${e.message}` - ); + await getAllSavedSearchSessions$(deps, config) + .pipe( + mergeMap(async (runningSearchSessionsResponse) => { + if (!runningSearchSessionsResponse.total) return; + + logger.debug(`Found ${runningSearchSessionsResponse.total} running sessions`); + + const updatedSessions = new Array< + SavedObjectsFindResult + >(); + + await Promise.all( + runningSearchSessionsResponse.saved_objects.map(async (session) => { + const updated = await updateSessionStatus(session, client, logger); + let deleted = false; + + if (!session.attributes.persisted) { + if (isSessionStale(session, config, logger)) { + deleted = true; + // delete saved object to free up memory + // TODO: there's a potential rare edge case of deleting an object and then receiving a new trackId for that same session! + // Maybe we want to change state to deleted and cleanup later? + logger.debug(`Deleting stale session | ${session.id}`); + await savedObjectsClient.delete(SEARCH_SESSION_TYPE, session.id); + + // Send a delete request for each async search to ES + Object.keys(session.attributes.idMapping).map(async (searchKey: string) => { + const searchInfo = session.attributes.idMapping[searchKey]; + if (searchInfo.strategy === ENHANCED_ES_SEARCH_STRATEGY) { + try { + await client.asyncSearch.delete({ id: searchInfo.id }); + } catch (e) { + logger.debug( + `Error ignored while deleting async_search ${searchInfo.id}: ${e.message}` + ); + } + } + }); } } - }); - } - } - if (updated && !deleted) { - updatedSessions.push(session); - } - }) - ); - - // Do a bulk update - if (updatedSessions.length) { - // If there's an error, we'll try again in the next iteration, so there's no need to check the output. - const updatedResponse = await savedObjectsClient.bulkUpdate( - updatedSessions - ); - logger.debug(`Updated ${updatedResponse.saved_objects.length} search sessions`); - } + if (updated && !deleted) { + updatedSessions.push(session); + } + }) + ); + + // Do a bulk update + if (updatedSessions.length) { + // If there's an error, we'll try again in the next iteration, so there's no need to check the output. + const updatedResponse = await savedObjectsClient.bulkUpdate( + updatedSessions + ); + logger.debug(`Updated ${updatedResponse.saved_objects.length} search sessions`); + } + }) + ) + .toPromise(); } catch (err) { logger.error(err); } diff --git a/x-pack/plugins/data_enhanced/server/search/session/get_search_status.test.ts b/x-pack/plugins/data_enhanced/server/search/session/get_search_status.test.ts index e66ce613b71d9..c4eef0b3ddbb3 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/get_search_status.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/get_search_status.test.ts @@ -17,7 +17,7 @@ describe('getSearchStatus', () => { }; }); - test('returns an error status if search is partial and not running', () => { + test('returns an error status if search is partial and not running', async () => { mockClient.asyncSearch.status.mockResolvedValue({ body: { is_partial: true, @@ -25,10 +25,11 @@ describe('getSearchStatus', () => { completion_status: 200, }, }); - expect(getSearchStatus(mockClient, '123')).resolves.toBe(SearchStatus.ERROR); + const res = await getSearchStatus(mockClient, '123'); + expect(res.status).toBe(SearchStatus.ERROR); }); - test('returns an error status if completion_status is an error', () => { + test('returns an error status if completion_status is an error', async () => { mockClient.asyncSearch.status.mockResolvedValue({ body: { is_partial: false, @@ -36,10 +37,11 @@ describe('getSearchStatus', () => { completion_status: 500, }, }); - expect(getSearchStatus(mockClient, '123')).resolves.toBe(SearchStatus.ERROR); + const res = await getSearchStatus(mockClient, '123'); + expect(res.status).toBe(SearchStatus.ERROR); }); - test('returns an error status if gets an ES error', () => { + test('returns an error status if gets an ES error', async () => { mockClient.asyncSearch.status.mockResolvedValue({ error: { root_cause: { @@ -47,15 +49,17 @@ describe('getSearchStatus', () => { }, }, }); - expect(getSearchStatus(mockClient, '123')).resolves.toBe(SearchStatus.ERROR); + const res = await getSearchStatus(mockClient, '123'); + expect(res.status).toBe(SearchStatus.ERROR); }); - test('returns an error status throws', () => { + test('returns an error status throws', async () => { mockClient.asyncSearch.status.mockRejectedValue(new Error('O_o')); - expect(getSearchStatus(mockClient, '123')).resolves.toBe(SearchStatus.ERROR); + const res = await getSearchStatus(mockClient, '123'); + expect(res.status).toBe(SearchStatus.ERROR); }); - test('returns a complete status', () => { + test('returns a complete status', async () => { mockClient.asyncSearch.status.mockResolvedValue({ body: { is_partial: false, @@ -63,10 +67,11 @@ describe('getSearchStatus', () => { completion_status: 200, }, }); - expect(getSearchStatus(mockClient, '123')).resolves.toBe(SearchStatus.COMPLETE); + const res = await getSearchStatus(mockClient, '123'); + expect(res.status).toBe(SearchStatus.COMPLETE); }); - test('returns a running status otherwise', () => { + test('returns a running status otherwise', async () => { mockClient.asyncSearch.status.mockResolvedValue({ body: { is_partial: false, @@ -74,6 +79,7 @@ describe('getSearchStatus', () => { completion_status: undefined, }, }); - expect(getSearchStatus(mockClient, '123')).resolves.toBe(SearchStatus.IN_PROGRESS); + const res = await getSearchStatus(mockClient, '123'); + expect(res.status).toBe(SearchStatus.IN_PROGRESS); }); }); diff --git a/x-pack/plugins/data_enhanced/server/search/session/get_search_status.ts b/x-pack/plugins/data_enhanced/server/search/session/get_search_status.ts index e2b5fc0157b37..3e93ae4e056c7 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/get_search_status.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/get_search_status.ts @@ -16,27 +16,40 @@ export async function getSearchStatus( asyncId: string ): Promise> { // TODO: Handle strategies other than the default one - const apiResponse: ApiResponse = await client.asyncSearch.status({ - id: asyncId, - }); - const response = apiResponse.body; - if ((response.is_partial && !response.is_running) || response.completion_status >= 400) { + try { + const apiResponse: ApiResponse = await client.asyncSearch.status({ + id: asyncId, + }); + const response = apiResponse.body; + if ((response.is_partial && !response.is_running) || response.completion_status >= 400) { + return { + status: SearchStatus.ERROR, + error: i18n.translate('xpack.data.search.statusError', { + defaultMessage: `Search completed with a {errorCode} status`, + values: { errorCode: response.completion_status }, + }), + }; + } else if (!response.is_partial && !response.is_running) { + return { + status: SearchStatus.COMPLETE, + error: undefined, + }; + } else { + return { + status: SearchStatus.IN_PROGRESS, + error: undefined, + }; + } + } catch (e) { return { status: SearchStatus.ERROR, - error: i18n.translate('xpack.data.search.statusError', { - defaultMessage: `Search completed with a {errorCode} status`, - values: { errorCode: response.completion_status }, + error: i18n.translate('xpack.data.search.statusThrow', { + defaultMessage: `Search status threw an error {message} ({errorCode}) status`, + values: { + message: e.message, + errorCode: e.statusCode || 500, + }, }), }; - } else if (!response.is_partial && !response.is_running) { - return { - status: SearchStatus.COMPLETE, - error: undefined, - }; - } else { - return { - status: SearchStatus.IN_PROGRESS, - error: undefined, - }; } } From 48a90fbfca36b910ad9c7caa7a1ab31d7fb4fc85 Mon Sep 17 00:00:00 2001 From: Liza K Date: Mon, 1 Feb 2021 13:17:54 +0200 Subject: [PATCH 24/85] better PersistedSearchSessionSavedObjectAttributes ts --- .../public/search/sessions_mgmt/types.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/types.ts b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/types.ts index 472cb6d91cb52..3b0159a1e8faa 100644 --- a/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/types.ts +++ b/x-pack/plugins/data_enhanced/public/search/sessions_mgmt/types.ts @@ -13,14 +13,13 @@ export const DATE_STRING_FORMAT = 'D MMM, YYYY, HH:mm:ss'; * Some properties are optional for a non-persisted Search Session. * This interface makes them mandatory, because management only shows persisted search sessions. */ -export interface PersistedSearchSessionSavedObjectAttributes - extends SearchSessionSavedObjectAttributes { - name: string; - appId: string; - urlGeneratorId: string; - initialState: Record; - restoreState: Record; -} +export type PersistedSearchSessionSavedObjectAttributes = SearchSessionSavedObjectAttributes & + Required< + Pick< + SearchSessionSavedObjectAttributes, + 'name' | 'appId' | 'urlGeneratorId' | 'initialState' | 'restoreState' + > + >; export interface UISession { id: string; From de99c739a92e13701beb86a2901a543563021019 Mon Sep 17 00:00:00 2001 From: Liza K Date: Mon, 1 Feb 2021 13:23:25 +0200 Subject: [PATCH 25/85] test titles --- .../server/search/es_search_strategy.test.ts | 200 +++++++++--------- 1 file changed, 102 insertions(+), 98 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts index 3b44b6e25fdc9..98238f50fa059 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts @@ -97,126 +97,130 @@ describe('ES search strategy', () => { }); describe('search', () => { - it('makes a POST request with params when no ID is provided', async () => { - mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); + describe('no sessionId', () => { + it('makes a POST request with params when no ID provided', async () => { + mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); - const params = { index: 'logstash-*', body: { query: {} } }; - const esSearch = await enhancedEsSearchStrategyProvider( - mockConfig$, - mockLegacyConfig$, - mockLogger - ); + const params = { index: 'logstash-*', body: { query: {} } }; + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); - await esSearch.search({ params }, {}, mockDeps).toPromise(); + await esSearch.search({ params }, {}, mockDeps).toPromise(); - expect(mockSubmitCaller).toBeCalled(); - const request = mockSubmitCaller.mock.calls[0][0]; - expect(request.index).toEqual(params.index); - expect(request.body).toEqual(params.body); - expect(request).toHaveProperty('keep_alive', '1m'); - }); + expect(mockSubmitCaller).toBeCalled(); + const request = mockSubmitCaller.mock.calls[0][0]; + expect(request.index).toEqual(params.index); + expect(request.body).toEqual(params.body); + expect(request).toHaveProperty('keep_alive', '1m'); + }); - it('makes a POST request with params when sessionId is provided, with long keepalive', async () => { - mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); + it('makes a GET request to async search with ID', async () => { + mockGetCaller.mockResolvedValueOnce(mockAsyncResponse); - const params = { index: 'logstash-*', body: { query: {} } }; - const esSearch = await enhancedEsSearchStrategyProvider( - mockConfig$, - mockLegacyConfig$, - mockLogger - ); + const params = { index: 'logstash-*', body: { query: {} } }; + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); - await esSearch.search({ params }, { sessionId: '1' }, mockDeps).toPromise(); + await esSearch.search({ id: 'foo', params }, {}, mockDeps).toPromise(); - expect(mockSubmitCaller).toBeCalled(); - const request = mockSubmitCaller.mock.calls[0][0]; - expect(request.index).toEqual(params.index); - expect(request.body).toEqual(params.body); + expect(mockGetCaller).toBeCalled(); + const request = mockGetCaller.mock.calls[0][0]; + expect(request.id).toEqual('foo'); + expect(request).toHaveProperty('wait_for_completion_timeout'); + expect(request).toHaveProperty('keep_alive', '1m'); + }); - expect(request).toHaveProperty('keep_alive', '60000ms'); - }); + it('sets wait_for_completion_timeout and keep_alive in the request', async () => { + mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); - it('makes a GET request to async search with ID when ID is provided', async () => { - mockGetCaller.mockResolvedValueOnce(mockAsyncResponse); + const params = { index: 'foo-*', body: {} }; + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); - const params = { index: 'logstash-*', body: { query: {} } }; - const esSearch = await enhancedEsSearchStrategyProvider( - mockConfig$, - mockLegacyConfig$, - mockLogger - ); + await esSearch.search({ params }, {}, mockDeps).toPromise(); - await esSearch.search({ id: 'foo', params }, {}, mockDeps).toPromise(); + expect(mockSubmitCaller).toBeCalled(); + const request = mockSubmitCaller.mock.calls[0][0]; + expect(request).toHaveProperty('wait_for_completion_timeout'); + expect(request).toHaveProperty('keep_alive'); + }); - expect(mockGetCaller).toBeCalled(); - const request = mockGetCaller.mock.calls[0][0]; - expect(request.id).toEqual('foo'); - expect(request).toHaveProperty('wait_for_completion_timeout'); - expect(request).toHaveProperty('keep_alive', '1m'); + it('calls the rollup API if the index is a rollup type', async () => { + mockApiCaller.mockResolvedValueOnce(mockRollupResponse); + + const params = { index: 'foo-程', body: {} }; + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); + + await esSearch + .search( + { + indexType: 'rollup', + params, + }, + {}, + mockDeps + ) + .toPromise(); + + expect(mockApiCaller).toBeCalled(); + const { method, path } = mockApiCaller.mock.calls[0][0]; + expect(method).toBe('POST'); + expect(path).toBe('/foo-%E7%A8%8B/_rollup_search'); + }); }); - it('makes a GET request to async search without keepalive when session ID is provided', async () => { - mockGetCaller.mockResolvedValueOnce(mockAsyncResponse); - - const params = { index: 'logstash-*', body: { query: {} } }; - const esSearch = await enhancedEsSearchStrategyProvider( - mockConfig$, - mockLegacyConfig$, - mockLogger - ); - - await esSearch.search({ id: 'foo', params }, { sessionId: '1' }, mockDeps).toPromise(); + describe('with sessionId', () => { + it('makes a POST request with params (long keepalive)', async () => { + mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); - expect(mockGetCaller).toBeCalled(); - const request = mockGetCaller.mock.calls[0][0]; - expect(request.id).toEqual('foo'); - expect(request).toHaveProperty('wait_for_completion_timeout'); - expect(request).not.toHaveProperty('keep_alive'); - }); + const params = { index: 'logstash-*', body: { query: {} } }; + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); - it('calls the rollup API if the index is a rollup type', async () => { - mockApiCaller.mockResolvedValueOnce(mockRollupResponse); + await esSearch.search({ params }, { sessionId: '1' }, mockDeps).toPromise(); - const params = { index: 'foo-程', body: {} }; - const esSearch = await enhancedEsSearchStrategyProvider( - mockConfig$, - mockLegacyConfig$, - mockLogger - ); + expect(mockSubmitCaller).toBeCalled(); + const request = mockSubmitCaller.mock.calls[0][0]; + expect(request.index).toEqual(params.index); + expect(request.body).toEqual(params.body); - await esSearch - .search( - { - indexType: 'rollup', - params, - }, - {}, - mockDeps - ) - .toPromise(); - - expect(mockApiCaller).toBeCalled(); - const { method, path } = mockApiCaller.mock.calls[0][0]; - expect(method).toBe('POST'); - expect(path).toBe('/foo-%E7%A8%8B/_rollup_search'); - }); + expect(request).toHaveProperty('keep_alive', '60000ms'); + }); - it('sets wait_for_completion_timeout and keep_alive in the request', async () => { - mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); + it('makes a GET request to async search without keepalive', async () => { + mockGetCaller.mockResolvedValueOnce(mockAsyncResponse); - const params = { index: 'foo-*', body: {} }; - const esSearch = await enhancedEsSearchStrategyProvider( - mockConfig$, - mockLegacyConfig$, - mockLogger - ); + const params = { index: 'logstash-*', body: { query: {} } }; + const esSearch = await enhancedEsSearchStrategyProvider( + mockConfig$, + mockLegacyConfig$, + mockLogger + ); - await esSearch.search({ params }, {}, mockDeps).toPromise(); + await esSearch.search({ id: 'foo', params }, { sessionId: '1' }, mockDeps).toPromise(); - expect(mockSubmitCaller).toBeCalled(); - const request = mockSubmitCaller.mock.calls[0][0]; - expect(request).toHaveProperty('wait_for_completion_timeout'); - expect(request).toHaveProperty('keep_alive'); + expect(mockGetCaller).toBeCalled(); + const request = mockGetCaller.mock.calls[0][0]; + expect(request.id).toEqual('foo'); + expect(request).toHaveProperty('wait_for_completion_timeout'); + expect(request).not.toHaveProperty('keep_alive'); + }); }); it('throws normalized error if ResponseError is thrown', async () => { From fb19aab307fb80740b60fbd4a0861e75380e96f9 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Mon, 1 Feb 2021 12:30:58 +0100 Subject: [PATCH 26/85] [ML] Data Frame Analytics: Adds scatterplot matrix to regression/classification results pages. (#88353) - Adds support for scatterplot matrices to regression/classification results pages - Lazy loads the scatterplot matrix including Vega code using Suspense. The approach is taken from the Kibana Vega plugin, creating this separate bundle means you'll load the 600kb+ Vega code only on pages where actually needed and not e.g. already on the analytics job list. Note for reviews: The file scatterplot_matrix_view.tsx did not change besides the default export, it just shows up as a new file because of the refactoring to support lazy loading. - Adds support for analytics configuration that use the excludes instead of includes field list. - Adds the field used for color legends to tooltips. --- .../components/scatterplot_matrix/index.ts | 2 + .../scatterplot_matrix/scatterplot_matrix.tsx | 319 +---------------- .../scatterplot_matrix_loading.tsx | 19 ++ .../scatterplot_matrix_vega_lite_spec.test.ts | 1 + .../scatterplot_matrix_vega_lite_spec.ts | 11 +- ...trix.scss => scatterplot_matrix_view.scss} | 0 .../scatterplot_matrix_view.tsx | 323 ++++++++++++++++++ .../use_scatterplot_field_options.ts | 50 +++ .../get_scatterplot_matrix_legend_type.ts | 22 ++ .../data_frame_analytics/common/index.ts | 1 + .../common/use_results_view_config.ts | 6 + .../configuration_step_form.tsx | 16 +- .../expandable_section_splom.tsx | 13 +- .../exploration_page_wrapper.tsx | 41 ++- .../outlier_exploration.tsx | 15 +- .../translations/translations/ja-JP.json | 4 +- .../translations/translations/zh-CN.json | 4 +- .../classification_creation.ts | 21 ++ .../outlier_detection_creation.ts | 31 ++ .../regression_creation.ts | 20 ++ .../functional/services/canvas_element.ts | 10 +- .../ml/data_frame_analytics_scatterplot.ts | 40 +++ x-pack/test/functional/services/ml/index.ts | 5 + 23 files changed, 629 insertions(+), 345 deletions(-) create mode 100644 x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_loading.tsx rename x-pack/plugins/ml/public/application/components/scatterplot_matrix/{scatterplot_matrix.scss => scatterplot_matrix_view.scss} (100%) create mode 100644 x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_view.tsx create mode 100644 x-pack/plugins/ml/public/application/components/scatterplot_matrix/use_scatterplot_field_options.ts create mode 100644 x-pack/plugins/ml/public/application/data_frame_analytics/common/get_scatterplot_matrix_legend_type.ts create mode 100644 x-pack/test/functional/services/ml/data_frame_analytics_scatterplot.ts diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/index.ts b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/index.ts index 4f564dde8cb43..903fe5b6ed985 100644 --- a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/index.ts +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/index.ts @@ -4,5 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +export { useScatterplotFieldOptions } from './use_scatterplot_field_options'; export { LEGEND_TYPES } from './scatterplot_matrix_vega_lite_spec'; export { ScatterplotMatrix } from './scatterplot_matrix'; +export type { ScatterplotMatrixViewProps as ScatterplotMatrixProps } from './scatterplot_matrix_view'; diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.tsx b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.tsx index b1ee9afb17788..a90fe924b91ac 100644 --- a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.tsx +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.tsx @@ -4,316 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useMemo, useEffect, useState, FC } from 'react'; +import React, { FC, Suspense } from 'react'; -// There is still an issue with Vega Lite's typings with the strict mode Kibana is using. -// @ts-ignore -import { compile } from 'vega-lite/build-es5/vega-lite'; -import { parse, View, Warn } from 'vega'; -import { Handler } from 'vega-tooltip'; +import type { ScatterplotMatrixViewProps } from './scatterplot_matrix_view'; +import { ScatterplotMatrixLoading } from './scatterplot_matrix_loading'; -import { - htmlIdGenerator, - EuiComboBox, - EuiComboBoxOptionOption, - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiLoadingSpinner, - EuiSelect, - EuiSpacer, - EuiSwitch, - EuiText, -} from '@elastic/eui'; +const ScatterplotMatrixLazy = React.lazy(() => import('./scatterplot_matrix_view')); -import { i18n } from '@kbn/i18n'; - -import type { SearchResponse7 } from '../../../../common/types/es_client'; - -import { useMlApiContext } from '../../contexts/kibana'; - -import { getProcessedFields } from '../data_grid'; -import { useCurrentEuiTheme } from '../color_range_legend'; - -import { - getScatterplotMatrixVegaLiteSpec, - LegendType, - OUTLIER_SCORE_FIELD, -} from './scatterplot_matrix_vega_lite_spec'; - -import './scatterplot_matrix.scss'; - -const SCATTERPLOT_MATRIX_DEFAULT_FIELDS = 4; -const SCATTERPLOT_MATRIX_DEFAULT_FETCH_SIZE = 1000; -const SCATTERPLOT_MATRIX_DEFAULT_FETCH_MIN_SIZE = 1; -const SCATTERPLOT_MATRIX_DEFAULT_FETCH_MAX_SIZE = 10000; - -const TOGGLE_ON = i18n.translate('xpack.ml.splom.toggleOn', { - defaultMessage: 'On', -}); -const TOGGLE_OFF = i18n.translate('xpack.ml.splom.toggleOff', { - defaultMessage: 'Off', -}); - -const sampleSizeOptions = [100, 1000, 10000].map((d) => ({ value: d, text: '' + d })); - -interface ScatterplotMatrixProps { - fields: string[]; - index: string; - resultsField?: string; - color?: string; - legendType?: LegendType; -} - -export const ScatterplotMatrix: FC = ({ - fields: allFields, - index, - resultsField, - color, - legendType, -}) => { - const { esSearch } = useMlApiContext(); - - // dynamicSize is optionally used for outlier charts where the scatterplot marks - // are sized according to outlier_score - const [dynamicSize, setDynamicSize] = useState(false); - - // used to give the use the option to customize the fields used for the matrix axes - const [fields, setFields] = useState([]); - - useEffect(() => { - const defaultFields = - allFields.length > SCATTERPLOT_MATRIX_DEFAULT_FIELDS - ? allFields.slice(0, SCATTERPLOT_MATRIX_DEFAULT_FIELDS) - : allFields; - setFields(defaultFields); - }, [allFields]); - - // the amount of documents to be fetched - const [fetchSize, setFetchSize] = useState(SCATTERPLOT_MATRIX_DEFAULT_FETCH_SIZE); - // flag to add a random score to the ES query to fetch documents - const [randomizeQuery, setRandomizeQuery] = useState(false); - - const [isLoading, setIsLoading] = useState(false); - - // contains the fetched documents and columns to be passed on to the Vega spec. - const [splom, setSplom] = useState<{ items: any[]; columns: string[] } | undefined>(); - - // formats the array of field names for EuiComboBox - const fieldOptions = useMemo( - () => - allFields.map((d) => ({ - label: d, - })), - [allFields] - ); - - const fieldsOnChange = (newFields: EuiComboBoxOptionOption[]) => { - setFields(newFields.map((d) => d.label)); - }; - - const fetchSizeOnChange = (e: React.ChangeEvent) => { - setFetchSize( - Math.min( - Math.max(parseInt(e.target.value, 10), SCATTERPLOT_MATRIX_DEFAULT_FETCH_MIN_SIZE), - SCATTERPLOT_MATRIX_DEFAULT_FETCH_MAX_SIZE - ) - ); - }; - - const randomizeQueryOnChange = () => { - setRandomizeQuery(!randomizeQuery); - }; - - const dynamicSizeOnChange = () => { - setDynamicSize(!dynamicSize); - }; - - const { euiTheme } = useCurrentEuiTheme(); - - useEffect(() => { - async function fetchSplom(options: { didCancel: boolean }) { - setIsLoading(true); - try { - const queryFields = [ - ...fields, - ...(color !== undefined ? [color] : []), - ...(legendType !== undefined ? [] : [`${resultsField}.${OUTLIER_SCORE_FIELD}`]), - ]; - - const query = randomizeQuery - ? { - function_score: { - random_score: { seed: 10, field: '_seq_no' }, - }, - } - : { match_all: {} }; - - const resp: SearchResponse7 = await esSearch({ - index, - body: { - fields: queryFields, - _source: false, - query, - from: 0, - size: fetchSize, - }, - }); - - if (!options.didCancel) { - const items = resp.hits.hits.map((d) => - getProcessedFields(d.fields, (key: string) => - key.startsWith(`${resultsField}.feature_importance`) - ) - ); - - setSplom({ columns: fields, items }); - setIsLoading(false); - } - } catch (e) { - // TODO error handling - setIsLoading(false); - } - } - - const options = { didCancel: false }; - fetchSplom(options); - return () => { - options.didCancel = true; - }; - // stringify the fields array, otherwise the comparator will trigger on new but identical instances. - }, [fetchSize, JSON.stringify(fields), index, randomizeQuery, resultsField]); - - const htmlId = useMemo(() => htmlIdGenerator()(), []); - - useEffect(() => { - if (splom === undefined) { - return; - } - - const { items, columns } = splom; - - const values = - resultsField !== undefined - ? items - : items.map((d) => { - d[`${resultsField}.${OUTLIER_SCORE_FIELD}`] = 0; - return d; - }); - - const vegaSpec = getScatterplotMatrixVegaLiteSpec( - values, - columns, - euiTheme, - resultsField, - color, - legendType, - dynamicSize - ); - - const vgSpec = compile(vegaSpec).spec; - - const view = new View(parse(vgSpec)) - .logLevel(Warn) - .renderer('canvas') - .tooltip(new Handler().call) - .initialize(`#${htmlId}`); - - view.runAsync(); // evaluate and render the view - }, [resultsField, splom, color, legendType, dynamicSize]); - - return ( - <> - {splom === undefined ? ( - - - - - - ) : ( - <> - - - - ({ - label: d, - }))} - onChange={fieldsOnChange} - isClearable={true} - data-test-subj="mlScatterplotMatrixFieldsComboBox" - /> - - - - - - - - - - - - - {resultsField !== undefined && legendType === undefined && ( - - - - - - )} - - -
- - )} - - ); -}; +export const ScatterplotMatrix: FC = (props) => ( + }> + + +); diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_loading.tsx b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_loading.tsx new file mode 100644 index 0000000000000..ccd4153769e9c --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_loading.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; + +import { EuiLoadingSpinner, EuiSpacer, EuiText } from '@elastic/eui'; + +export const ScatterplotMatrixLoading = () => { + return ( + + + + + + ); +}; diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.test.ts b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.test.ts index dd467161ff489..eada64b7a03ca 100644 --- a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.test.ts +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.test.ts @@ -163,6 +163,7 @@ describe('getScatterplotMatrixVegaLiteSpec()', () => { type: 'nominal', }); expect(vegaLiteSpec.spec.encoding.tooltip).toEqual([ + { field: 'the-color-field', type: 'nominal' }, { field: 'x', type: 'quantitative' }, { field: 'y', type: 'quantitative' }, ]); diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.ts b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.ts index 9e0834dd8b922..c943e5d1b06e3 100644 --- a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.ts +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.ts @@ -35,6 +35,8 @@ export const getColorSpec = ( color?: string, legendType?: LegendType ) => { + // For outlier detection result pages coloring is done based on a threshold. + // This returns a Vega spec using a conditional to return the color. if (outliers) { return { condition: { @@ -45,6 +47,8 @@ export const getColorSpec = ( }; } + // Based on the type of the color field, + // this returns either a continuous or categorical color spec. if (color !== undefined && legendType !== undefined) { return { field: color, @@ -80,6 +84,8 @@ export const getScatterplotMatrixVegaLiteSpec = ( }); } + const colorSpec = getColorSpec(euiTheme, outliers, color, legendType); + return { $schema: 'https://vega.github.io/schema/vega-lite/v4.17.0.json', background: 'transparent', @@ -115,10 +121,10 @@ export const getScatterplotMatrixVegaLiteSpec = ( : { type: 'circle', opacity: 0.75, size: 8 }), }, encoding: { - color: getColorSpec(euiTheme, outliers, color, legendType), + color: colorSpec, ...(dynamicSize ? { - stroke: getColorSpec(euiTheme, outliers, color, legendType), + stroke: colorSpec, opacity: { condition: { value: 1, @@ -163,6 +169,7 @@ export const getScatterplotMatrixVegaLiteSpec = ( scale: { zero: false }, }, tooltip: [ + ...(color !== undefined ? [{ type: colorSpec.type, field: color }] : []), ...columns.map((d) => ({ type: LEGEND_TYPES.QUANTITATIVE, field: d })), ...(outliers ? [{ type: LEGEND_TYPES.QUANTITATIVE, field: OUTLIER_SCORE_FIELD, format: '.3f' }] diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.scss b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_view.scss similarity index 100% rename from x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.scss rename to x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_view.scss diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_view.tsx b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_view.tsx new file mode 100644 index 0000000000000..0c065c1154a98 --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_view.tsx @@ -0,0 +1,323 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useMemo, useEffect, useState, FC } from 'react'; + +// There is still an issue with Vega Lite's typings with the strict mode Kibana is using. +// @ts-ignore +import { compile } from 'vega-lite/build-es5/vega-lite'; +import { parse, View, Warn } from 'vega'; +import { Handler } from 'vega-tooltip'; + +import { + htmlIdGenerator, + EuiComboBox, + EuiComboBoxOptionOption, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiSelect, + EuiSwitch, +} from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +import type { SearchResponse7 } from '../../../../common/types/es_client'; +import type { ResultsSearchQuery } from '../../data_frame_analytics/common/analytics'; + +import { useMlApiContext } from '../../contexts/kibana'; + +import { getProcessedFields } from '../data_grid'; +import { useCurrentEuiTheme } from '../color_range_legend'; + +import { ScatterplotMatrixLoading } from './scatterplot_matrix_loading'; + +import { + getScatterplotMatrixVegaLiteSpec, + LegendType, + OUTLIER_SCORE_FIELD, +} from './scatterplot_matrix_vega_lite_spec'; + +import './scatterplot_matrix_view.scss'; + +const SCATTERPLOT_MATRIX_DEFAULT_FIELDS = 4; +const SCATTERPLOT_MATRIX_DEFAULT_FETCH_SIZE = 1000; +const SCATTERPLOT_MATRIX_DEFAULT_FETCH_MIN_SIZE = 1; +const SCATTERPLOT_MATRIX_DEFAULT_FETCH_MAX_SIZE = 10000; + +const TOGGLE_ON = i18n.translate('xpack.ml.splom.toggleOn', { + defaultMessage: 'On', +}); +const TOGGLE_OFF = i18n.translate('xpack.ml.splom.toggleOff', { + defaultMessage: 'Off', +}); + +const sampleSizeOptions = [100, 1000, 10000].map((d) => ({ value: d, text: '' + d })); + +export interface ScatterplotMatrixViewProps { + fields: string[]; + index: string; + resultsField?: string; + color?: string; + legendType?: LegendType; + searchQuery?: ResultsSearchQuery; +} + +export const ScatterplotMatrixView: FC = ({ + fields: allFields, + index, + resultsField, + color, + legendType, + searchQuery, +}) => { + const { esSearch } = useMlApiContext(); + + // dynamicSize is optionally used for outlier charts where the scatterplot marks + // are sized according to outlier_score + const [dynamicSize, setDynamicSize] = useState(false); + + // used to give the use the option to customize the fields used for the matrix axes + const [fields, setFields] = useState([]); + + useEffect(() => { + const defaultFields = + allFields.length > SCATTERPLOT_MATRIX_DEFAULT_FIELDS + ? allFields.slice(0, SCATTERPLOT_MATRIX_DEFAULT_FIELDS) + : allFields; + setFields(defaultFields); + }, [allFields]); + + // the amount of documents to be fetched + const [fetchSize, setFetchSize] = useState(SCATTERPLOT_MATRIX_DEFAULT_FETCH_SIZE); + // flag to add a random score to the ES query to fetch documents + const [randomizeQuery, setRandomizeQuery] = useState(false); + + const [isLoading, setIsLoading] = useState(false); + + // contains the fetched documents and columns to be passed on to the Vega spec. + const [splom, setSplom] = useState<{ items: any[]; columns: string[] } | undefined>(); + + // formats the array of field names for EuiComboBox + const fieldOptions = useMemo( + () => + allFields.map((d) => ({ + label: d, + })), + [allFields] + ); + + const fieldsOnChange = (newFields: EuiComboBoxOptionOption[]) => { + setFields(newFields.map((d) => d.label)); + }; + + const fetchSizeOnChange = (e: React.ChangeEvent) => { + setFetchSize( + Math.min( + Math.max(parseInt(e.target.value, 10), SCATTERPLOT_MATRIX_DEFAULT_FETCH_MIN_SIZE), + SCATTERPLOT_MATRIX_DEFAULT_FETCH_MAX_SIZE + ) + ); + }; + + const randomizeQueryOnChange = () => { + setRandomizeQuery(!randomizeQuery); + }; + + const dynamicSizeOnChange = () => { + setDynamicSize(!dynamicSize); + }; + + const { euiTheme } = useCurrentEuiTheme(); + + useEffect(() => { + async function fetchSplom(options: { didCancel: boolean }) { + setIsLoading(true); + try { + const queryFields = [ + ...fields, + ...(color !== undefined ? [color] : []), + ...(legendType !== undefined ? [] : [`${resultsField}.${OUTLIER_SCORE_FIELD}`]), + ]; + + const queryFallback = searchQuery !== undefined ? searchQuery : { match_all: {} }; + const query = randomizeQuery + ? { + function_score: { + query: queryFallback, + random_score: { seed: 10, field: '_seq_no' }, + }, + } + : queryFallback; + + const resp: SearchResponse7 = await esSearch({ + index, + body: { + fields: queryFields, + _source: false, + query, + from: 0, + size: fetchSize, + }, + }); + + if (!options.didCancel) { + const items = resp.hits.hits.map((d) => + getProcessedFields(d.fields, (key: string) => + key.startsWith(`${resultsField}.feature_importance`) + ) + ); + + setSplom({ columns: fields, items }); + setIsLoading(false); + } + } catch (e) { + // TODO error handling + setIsLoading(false); + } + } + + const options = { didCancel: false }; + fetchSplom(options); + return () => { + options.didCancel = true; + }; + // stringify the fields array and search, otherwise the comparator will trigger on new but identical instances. + }, [fetchSize, JSON.stringify({ fields, searchQuery }), index, randomizeQuery, resultsField]); + + const htmlId = useMemo(() => htmlIdGenerator()(), []); + + useEffect(() => { + if (splom === undefined) { + return; + } + + const { items, columns } = splom; + + const values = + resultsField !== undefined + ? items + : items.map((d) => { + d[`${resultsField}.${OUTLIER_SCORE_FIELD}`] = 0; + return d; + }); + + const vegaSpec = getScatterplotMatrixVegaLiteSpec( + values, + columns, + euiTheme, + resultsField, + color, + legendType, + dynamicSize + ); + + const vgSpec = compile(vegaSpec).spec; + + const view = new View(parse(vgSpec)) + .logLevel(Warn) + .renderer('canvas') + .tooltip(new Handler().call) + .initialize(`#${htmlId}`); + + view.runAsync(); // evaluate and render the view + }, [resultsField, splom, color, legendType, dynamicSize]); + + return ( + <> + {splom === undefined ? ( + + ) : ( + <> + + + + ({ + label: d, + }))} + onChange={fieldsOnChange} + isClearable={true} + data-test-subj="mlScatterplotMatrixFieldsComboBox" + /> + + + + + + + + + + + + + {resultsField !== undefined && legendType === undefined && ( + + + + + + )} + + +
+ + )} + + ); +}; + +// required for dynamic import using React.lazy() +// eslint-disable-next-line import/no-default-export +export default ScatterplotMatrixView; diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/use_scatterplot_field_options.ts b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/use_scatterplot_field_options.ts new file mode 100644 index 0000000000000..f5eedbc03951f --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/use_scatterplot_field_options.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useMemo } from 'react'; + +import type { IndexPattern } from '../../../../../../../src/plugins/data/public'; + +import { ML__INCREMENTAL_ID } from '../../data_frame_analytics/common/fields'; + +export const useScatterplotFieldOptions = ( + indexPattern?: IndexPattern, + includes?: string[], + excludes?: string[], + resultsField = '' +): string[] => { + return useMemo(() => { + const fields: string[] = []; + + if (indexPattern === undefined || includes === undefined) { + return fields; + } + + if (includes.length > 1) { + fields.push( + ...includes.filter((d) => + indexPattern.fields.some((f) => f.name === d && f.type === 'number') + ) + ); + } else { + fields.push( + ...indexPattern.fields + .filter( + (f) => + f.type === 'number' && + !indexPattern.metaFields.includes(f.name) && + !f.name.startsWith(`${resultsField}.`) && + f.name !== ML__INCREMENTAL_ID + ) + .map((f) => f.name) + ); + } + + return Array.isArray(excludes) && excludes.length > 0 + ? fields.filter((f) => !excludes.includes(f)) + : fields; + }, [indexPattern, includes, excludes]); +}; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/common/get_scatterplot_matrix_legend_type.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/common/get_scatterplot_matrix_legend_type.ts new file mode 100644 index 0000000000000..8850d42577bd9 --- /dev/null +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/common/get_scatterplot_matrix_legend_type.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { ANALYSIS_CONFIG_TYPE } from './analytics'; + +import { AnalyticsJobType } from '../pages/analytics_management/hooks/use_create_analytics_form/state'; + +import { LEGEND_TYPES } from '../../components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec'; + +export const getScatterplotMatrixLegendType = (jobType: AnalyticsJobType | 'unknown') => { + switch (jobType) { + case ANALYSIS_CONFIG_TYPE.CLASSIFICATION: + return LEGEND_TYPES.NOMINAL; + case ANALYSIS_CONFIG_TYPE.REGRESSION: + return LEGEND_TYPES.QUANTITATIVE; + default: + return undefined; + } +}; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/common/index.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/common/index.ts index 7ba3e910ddd32..d03f73ad13575 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/common/index.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/common/index.ts @@ -41,6 +41,7 @@ export { export { getIndexData } from './get_index_data'; export { getIndexFields } from './get_index_fields'; +export { getScatterplotMatrixLegendType } from './get_scatterplot_matrix_legend_type'; export { useResultsViewConfig } from './use_results_view_config'; export { DataFrameAnalyticsConfig } from '../../../../common/types/data_frame_analytics'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/common/use_results_view_config.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/common/use_results_view_config.ts index 185513f75a12c..361a1262a59f8 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/common/use_results_view_config.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/common/use_results_view_config.ts @@ -102,6 +102,12 @@ export const useResultsViewConfig = (jobId: string) => { try { indexP = await mlContext.indexPatterns.get(destIndexPatternId); + + // Force refreshing the fields list here because a user directly coming + // from the job creation wizard might land on the page without the + // index pattern being fully initialized because it was created + // before the analytics job populated the destination index. + await mlContext.indexPatterns.refreshFields(indexP); } catch (e) { indexP = undefined; } diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx index a5991f77e88e2..4b86f5ca12896 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx @@ -27,10 +27,10 @@ import { TRAINING_PERCENT_MAX, FieldSelectionItem, } from '../../../../common/analytics'; +import { getScatterplotMatrixLegendType } from '../../../../common/get_scatterplot_matrix_legend_type'; import { CreateAnalyticsStepProps } from '../../../analytics_management/hooks/use_create_analytics_form'; import { Messages } from '../shared'; import { - AnalyticsJobType, DEFAULT_MODEL_MEMORY_LIMIT, State, } from '../../../analytics_management/hooks/use_create_analytics_form/state'; @@ -51,18 +51,7 @@ import { SEARCH_QUERY_LANGUAGE } from '../../../../../../../common/constants/sea import { ExplorationQueryBarProps } from '../../../analytics_exploration/components/exploration_query_bar/exploration_query_bar'; import { Query } from '../../../../../../../../../../src/plugins/data/common/query'; -import { LEGEND_TYPES, ScatterplotMatrix } from '../../../../../components/scatterplot_matrix'; - -const getScatterplotMatrixLegendType = (jobType: AnalyticsJobType) => { - switch (jobType) { - case ANALYSIS_CONFIG_TYPE.CLASSIFICATION: - return LEGEND_TYPES.NOMINAL; - case ANALYSIS_CONFIG_TYPE.REGRESSION: - return LEGEND_TYPES.QUANTITATIVE; - default: - return undefined; - } -}; +import { ScatterplotMatrix } from '../../../../../components/scatterplot_matrix'; const requiredFieldsErrorText = i18n.translate( 'xpack.ml.dataframe.analytics.createWizard.requiredFieldsErrorMessage', @@ -498,6 +487,7 @@ export const ConfigurationStepForm: FC = ({ : undefined } legendType={getScatterplotMatrixLegendType(jobType)} + searchQuery={jobConfigQuery} /> diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/expandable_section/expandable_section_splom.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/expandable_section/expandable_section_splom.tsx index 5ec8963e0fc25..8c51c95d7fd63 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/expandable_section/expandable_section_splom.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/expandable_section/expandable_section_splom.tsx @@ -12,17 +12,14 @@ import { FormattedMessage } from '@kbn/i18n/react'; import { EuiHorizontalRule, EuiSpacer } from '@elastic/eui'; -import { ScatterplotMatrix } from '../../../../../components/scatterplot_matrix'; +import { + ScatterplotMatrix, + ScatterplotMatrixProps, +} from '../../../../../components/scatterplot_matrix'; import { ExpandableSection } from './expandable_section'; -interface ExpandableSectionSplomProps { - fields: string[]; - index: string; - resultsField?: string; -} - -export const ExpandableSectionSplom: FC = (props) => { +export const ExpandableSectionSplom: FC = (props) => { const splomSectionHeaderItems = undefined; const splomSectionContent = ( <> diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_page_wrapper/exploration_page_wrapper.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_page_wrapper/exploration_page_wrapper.tsx index 1329644322f33..46715af0ef0cb 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_page_wrapper/exploration_page_wrapper.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_page_wrapper/exploration_page_wrapper.tsx @@ -9,16 +9,21 @@ import React, { FC, useCallback, useState } from 'react'; import { EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiPanel, EuiSpacer, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { getAnalysisType, getDependentVar } from '../../../../../../../common/util/analytics_utils'; + +import { useScatterplotFieldOptions } from '../../../../../components/scatterplot_matrix'; + import { defaultSearchQuery, + getScatterplotMatrixLegendType, useResultsViewConfig, DataFrameAnalyticsConfig, } from '../../../../common'; -import { ResultsSearchQuery } from '../../../../common/analytics'; +import { ResultsSearchQuery, ANALYSIS_CONFIG_TYPE } from '../../../../common/analytics'; import { DataFrameTaskStateType } from '../../../analytics_management/components/analytics_list/common'; -import { ExpandableSectionAnalytics } from '../expandable_section'; +import { ExpandableSectionAnalytics, ExpandableSectionSplom } from '../expandable_section'; import { ExplorationResultsTable } from '../exploration_results_table'; import { ExplorationQueryBar } from '../exploration_query_bar'; import { JobConfigErrorCallout } from '../job_config_error_callout'; @@ -99,6 +104,14 @@ export const ExplorationPageWrapper: FC = ({ language: pageUrlState.queryLanguage, }; + const resultsField = jobConfig?.dest.results_field ?? ''; + const scatterplotFieldOptions = useScatterplotFieldOptions( + indexPattern, + jobConfig?.analyzed_fields.includes, + jobConfig?.analyzed_fields.excludes, + resultsField + ); + if (indexPatternErrorMessage !== undefined) { return ( @@ -125,6 +138,9 @@ export const ExplorationPageWrapper: FC = ({ ); } + const jobType = + jobConfig && jobConfig.analysis ? getAnalysisType(jobConfig?.analysis) : undefined; + return ( <> {typeof jobConfig?.description !== 'undefined' && ( @@ -179,6 +195,27 @@ export const ExplorationPageWrapper: FC = ({ )} + {isLoadingJobConfig === true && jobConfig === undefined && } + {isLoadingJobConfig === false && + jobConfig !== undefined && + isInitialized === true && + typeof jobConfig?.id === 'string' && + scatterplotFieldOptions.length > 1 && + typeof jobConfig?.analysis !== 'undefined' && ( + + )} + {isLoadingJobConfig === true && jobConfig === undefined && } {isLoadingJobConfig === false && jobConfig !== undefined && diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/outlier_exploration/outlier_exploration.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/outlier_exploration/outlier_exploration.tsx index 26eee9bc95d73..7e11e0bd97015 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/outlier_exploration/outlier_exploration.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/outlier_exploration/outlier_exploration.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useState, FC, useCallback } from 'react'; +import React, { useCallback, useState, FC } from 'react'; import { EuiCallOut, EuiPanel, EuiSpacer, EuiText } from '@elastic/eui'; @@ -15,6 +15,7 @@ import { COLOR_RANGE, COLOR_RANGE_SCALE, } from '../../../../../components/color_range_legend'; +import { useScatterplotFieldOptions } from '../../../../../components/scatterplot_matrix'; import { SavedSearchQuery } from '../../../../../contexts/ml'; import { defaultSearchQuery, isOutlierAnalysis, useResultsViewConfig } from '../../../../common'; @@ -90,6 +91,13 @@ export const OutlierExploration: FC = React.memo(({ jobId }) = (d) => d.id === `${resultsField}.${FEATURE_INFLUENCE}.feature_name` ) === -1; + const scatterplotFieldOptions = useScatterplotFieldOptions( + indexPattern, + jobConfig?.analyzed_fields.includes, + jobConfig?.analyzed_fields.excludes, + resultsField + ); + if (indexPatternErrorMessage !== undefined) { return ( @@ -126,11 +134,12 @@ export const OutlierExploration: FC = React.memo(({ jobId }) = )} {typeof jobConfig?.id === 'string' && } - {typeof jobConfig?.id === 'string' && jobConfig?.analyzed_fields.includes.length > 1 && ( + {typeof jobConfig?.id === 'string' && scatterplotFieldOptions.length > 1 && ( )} {showLegacyFeatureInfluenceFormatCallout && ( diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index b50a7092e108d..4369cbf35594d 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -14209,8 +14209,8 @@ "xpack.ml.splom.dynamicSizeLabel": "動的サイズ", "xpack.ml.splom.fieldSelectionLabel": "フィールド", "xpack.ml.splom.fieldSelectionPlaceholder": "フィールドを選択", - "xpack.ml.splom.RandomScoringLabel": "ランダムスコアリング", - "xpack.ml.splom.SampleSizeLabel": "サンプルサイズ", + "xpack.ml.splom.randomScoringLabel": "ランダムスコアリング", + "xpack.ml.splom.sampleSizeLabel": "サンプルサイズ", "xpack.ml.splom.toggleOff": "オフ", "xpack.ml.splom.toggleOn": "オン", "xpack.ml.splomSpec.outlierScoreThresholdName": "異常スコアしきい値:", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index a93b2c78690c1..d2504c8752c05 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -14248,8 +14248,8 @@ "xpack.ml.splom.dynamicSizeLabel": "动态大小", "xpack.ml.splom.fieldSelectionLabel": "字段", "xpack.ml.splom.fieldSelectionPlaceholder": "选择字段", - "xpack.ml.splom.RandomScoringLabel": "随机评分", - "xpack.ml.splom.SampleSizeLabel": "样例大小", + "xpack.ml.splom.randomScoringLabel": "随机评分", + "xpack.ml.splom.sampleSizeLabel": "样例大小", "xpack.ml.splom.toggleOff": "关闭", "xpack.ml.splom.toggleOn": "开启", "xpack.ml.splomSpec.outlierScoreThresholdName": "离群值分数阈值:", diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts index 6b42306c08c92..b0f1e316e626a 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts @@ -40,6 +40,17 @@ export default function ({ getService }: FtrProviderContext) { modelMemory: '60mb', createIndexPattern: true, expected: { + scatterplotMatrixColorStats: [ + // background + { key: '#000000', value: 94 }, + // tick/grid/axis + { key: '#DDDDDD', value: 1 }, + { key: '#D3DAE6', value: 1 }, + { key: '#F5F7FA', value: 1 }, + // scatterplot circles + { key: '#6A717D', value: 1 }, + { key: '#54B39A', value: 1 }, + ], row: { type: 'classification', status: 'stopped', @@ -89,6 +100,12 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('displays the include fields selection'); await ml.dataFrameAnalyticsCreation.assertIncludeFieldsSelectionExists(); + await ml.testExecution.logTestStep('displays the scatterplot matrix'); + await ml.dataFrameAnalyticsScatterplot.assertScatterplotMatrix( + 'mlAnalyticsCreateJobWizardScatterplotMatrixFormRow', + testData.expected.scatterplotMatrixColorStats + ); + await ml.testExecution.logTestStep('continues to the additional options step'); await ml.dataFrameAnalyticsCreation.continueToAdditionalOptionsStep(); @@ -207,6 +224,10 @@ export default function ({ getService }: FtrProviderContext) { await ml.dataFrameAnalyticsResults.assertResultsTableExists(); await ml.dataFrameAnalyticsResults.assertResultsTableTrainingFiltersExist(); await ml.dataFrameAnalyticsResults.assertResultsTableNotEmpty(); + await ml.dataFrameAnalyticsScatterplot.assertScatterplotMatrix( + 'mlDFExpandableSection-splom', + testData.expected.scatterplotMatrixColorStats + ); }); it('displays the analytics job in the map view', async () => { diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts index 53daa0cae2522..419239d1d15ca 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts @@ -49,6 +49,27 @@ export default function ({ getService }: FtrProviderContext) { { chartAvailable: true, id: 'Exterior2nd', legend: '3 categories' }, { chartAvailable: true, id: 'Fireplaces', legend: '0 - 3' }, ], + scatterplotMatrixColorStatsWizard: [ + // background + { key: '#000000', value: 91 }, + // tick/grid/axis + { key: '#6A717D', value: 2 }, + { key: '#F5F7FA', value: 2 }, + { key: '#D3DAE6', value: 1 }, + // scatterplot circles + { key: '#54B399', value: 1 }, + { key: '#54B39A', value: 1 }, + ], + scatterplotMatrixColorStatsResults: [ + // background + { key: '#000000', value: 91 }, + // tick/grid/axis, grey markers + // the red outlier color is not above the 1% threshold. + { key: '#6A717D', value: 2 }, + { key: '#98A2B3', value: 1 }, + { key: '#F5F7FA', value: 2 }, + { key: '#D3DAE6', value: 1 }, + ], row: { type: 'outlier_detection', status: 'stopped', @@ -105,6 +126,12 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('displays the include fields selection'); await ml.dataFrameAnalyticsCreation.assertIncludeFieldsSelectionExists(); + await ml.testExecution.logTestStep('displays the scatterplot matrix'); + await ml.dataFrameAnalyticsScatterplot.assertScatterplotMatrix( + 'mlAnalyticsCreateJobWizardScatterplotMatrixFormRow', + testData.expected.scatterplotMatrixColorStatsWizard + ); + await ml.testExecution.logTestStep('continues to the additional options step'); await ml.dataFrameAnalyticsCreation.continueToAdditionalOptionsStep(); @@ -221,6 +248,10 @@ export default function ({ getService }: FtrProviderContext) { await ml.dataFrameAnalyticsResults.assertOutlierTablePanelExists(); await ml.dataFrameAnalyticsResults.assertResultsTableExists(); await ml.dataFrameAnalyticsResults.assertResultsTableNotEmpty(); + await ml.dataFrameAnalyticsScatterplot.assertScatterplotMatrix( + 'mlDFExpandableSection-splom', + testData.expected.scatterplotMatrixColorStatsResults + ); }); it('displays the analytics job in the map view', async () => { diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts index fef22fcebc3ed..f1d19a82caa9b 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts @@ -39,6 +39,16 @@ export default function ({ getService }: FtrProviderContext) { modelMemory: '20mb', createIndexPattern: true, expected: { + scatterplotMatrixColorStats: [ + // background + { key: '#000000', value: 80 }, + // tick/grid/axis + { key: '#6A717D', value: 1 }, + { key: '#F5F7FA', value: 2 }, + { key: '#D3DAE6', value: 1 }, + // because a continuous color scale is used for the scatterplot circles, + // none of the generated colors is above the 1% threshold. + ], row: { type: 'regression', status: 'stopped', @@ -89,6 +99,12 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('displays the include fields selection'); await ml.dataFrameAnalyticsCreation.assertIncludeFieldsSelectionExists(); + await ml.testExecution.logTestStep('displays the scatterplot matrix'); + await ml.dataFrameAnalyticsScatterplot.assertScatterplotMatrix( + 'mlAnalyticsCreateJobWizardScatterplotMatrixFormRow', + testData.expected.scatterplotMatrixColorStats + ); + await ml.testExecution.logTestStep('continues to the additional options step'); await ml.dataFrameAnalyticsCreation.continueToAdditionalOptionsStep(); @@ -207,6 +223,10 @@ export default function ({ getService }: FtrProviderContext) { await ml.dataFrameAnalyticsResults.assertResultsTableExists(); await ml.dataFrameAnalyticsResults.assertResultsTableTrainingFiltersExist(); await ml.dataFrameAnalyticsResults.assertResultsTableNotEmpty(); + await ml.dataFrameAnalyticsScatterplot.assertScatterplotMatrix( + 'mlDFExpandableSection-splom', + testData.expected.scatterplotMatrixColorStats + ); }); it('displays the analytics job in the map view', async () => { diff --git a/x-pack/test/functional/services/canvas_element.ts b/x-pack/test/functional/services/canvas_element.ts index e2a42c5dc43c3..08ac38d970225 100644 --- a/x-pack/test/functional/services/canvas_element.ts +++ b/x-pack/test/functional/services/canvas_element.ts @@ -43,9 +43,13 @@ export async function CanvasElementProvider({ getService }: FtrProviderContext) public async getImageData(selector: string): Promise { return await driver.executeScript( ` - const el = document.querySelector('${selector}'); - const ctx = el.getContext('2d'); - return ctx.getImageData(0, 0, el.width, el.height).data; + try { + const el = document.querySelector('${selector}'); + const ctx = el.getContext('2d'); + return ctx.getImageData(0, 0, el.width, el.height).data; + } catch(e) { + return []; + } ` ); } diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_scatterplot.ts b/x-pack/test/functional/services/ml/data_frame_analytics_scatterplot.ts new file mode 100644 index 0000000000000..3472e5079c79a --- /dev/null +++ b/x-pack/test/functional/services/ml/data_frame_analytics_scatterplot.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../ftr_provider_context'; + +export function MachineLearningDataFrameAnalyticsScatterplotProvider({ + getService, +}: FtrProviderContext) { + const canvasElement = getService('canvasElement'); + const testSubjects = getService('testSubjects'); + + return new (class AnalyticsScatterplot { + public async assertScatterplotMatrix( + dataTestSubj: string, + expectedColorStats: Array<{ + key: string; + value: number; + }> + ) { + await testSubjects.existOrFail(dataTestSubj); + await testSubjects.existOrFail('mlScatterplotMatrix'); + + const actualColorStats = await canvasElement.getColorStats( + `[data-test-subj="mlScatterplotMatrix"] canvas`, + expectedColorStats, + 1 + ); + expect(actualColorStats.every((d) => d.withinTolerance)).to.eql( + true, + `Color stats for scatterplot matrix should be within tolerance. Expected: '${JSON.stringify( + expectedColorStats + )}' (got '${JSON.stringify(actualColorStats)}')` + ); + } + })(); +} diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index c1a9ac304dd69..aa87bc5dc4772 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -17,6 +17,7 @@ import { MachineLearningDataFrameAnalyticsProvider } from './data_frame_analytic import { MachineLearningDataFrameAnalyticsCreationProvider } from './data_frame_analytics_creation'; import { MachineLearningDataFrameAnalyticsEditProvider } from './data_frame_analytics_edit'; import { MachineLearningDataFrameAnalyticsResultsProvider } from './data_frame_analytics_results'; +import { MachineLearningDataFrameAnalyticsScatterplotProvider } from './data_frame_analytics_scatterplot'; import { MachineLearningDataFrameAnalyticsMapProvider } from './data_frame_analytics_map'; import { MachineLearningDataFrameAnalyticsTableProvider } from './data_frame_analytics_table'; import { MachineLearningDataVisualizerProvider } from './data_visualizer'; @@ -63,6 +64,9 @@ export function MachineLearningProvider(context: FtrProviderContext) { const dataFrameAnalyticsResults = MachineLearningDataFrameAnalyticsResultsProvider(context); const dataFrameAnalyticsMap = MachineLearningDataFrameAnalyticsMapProvider(context); const dataFrameAnalyticsTable = MachineLearningDataFrameAnalyticsTableProvider(context); + const dataFrameAnalyticsScatterplot = MachineLearningDataFrameAnalyticsScatterplotProvider( + context + ); const dataVisualizer = MachineLearningDataVisualizerProvider(context); const dataVisualizerTable = MachineLearningDataVisualizerTableProvider(context, commonUI); @@ -105,6 +109,7 @@ export function MachineLearningProvider(context: FtrProviderContext) { dataFrameAnalyticsResults, dataFrameAnalyticsMap, dataFrameAnalyticsTable, + dataFrameAnalyticsScatterplot, dataVisualizer, dataVisualizerFileBased, dataVisualizerIndexBased, From 53637d01580b4016b110e290f80283eae35b1408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20G=C3=B3mez?= Date: Mon, 1 Feb 2021 14:48:30 +0100 Subject: [PATCH 27/85] [Logs UI] as a kibana embeddable (#88618) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-optimizer/limits.yml | 2 +- x-pack/plugins/infra/kibana.json | 2 +- .../public/components/log_stream/index.ts | 7 ++ .../log_stream/lazy_log_stream_wrapper.tsx | 4 +- .../log_stream/{index.tsx => log_stream.tsx} | 3 +- .../log_stream/log_stream_embeddable.tsx | 91 +++++++++++++++++++ .../log_stream_embeddable_factory.ts | 37 ++++++++ .../containers/logs/log_stream/index.ts | 22 ++++- x-pack/plugins/infra/public/plugin.ts | 9 ++ x-pack/plugins/infra/public/types.ts | 2 + 10 files changed, 169 insertions(+), 10 deletions(-) create mode 100644 x-pack/plugins/infra/public/components/log_stream/index.ts rename x-pack/plugins/infra/public/components/log_stream/{index.tsx => log_stream.tsx} (98%) create mode 100644 x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable.tsx create mode 100644 x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable_factory.ts diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index a13976d148738..794503656ba04 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -34,7 +34,7 @@ pageLoadAssetSize: indexLifecycleManagement: 107090 indexManagement: 140608 indexPatternManagement: 154222 - infra: 197873 + infra: 204800 fleet: 415829 ingestPipelines: 58003 inputControlVis: 172675 diff --git a/x-pack/plugins/infra/kibana.json b/x-pack/plugins/infra/kibana.json index e84767f4931ca..d1fa83793d1dd 100644 --- a/x-pack/plugins/infra/kibana.json +++ b/x-pack/plugins/infra/kibana.json @@ -6,7 +6,7 @@ "features", "usageCollection", "spaces", - + "embeddable", "data", "dataEnhanced", "visTypeTimeseries", diff --git a/x-pack/plugins/infra/public/components/log_stream/index.ts b/x-pack/plugins/infra/public/components/log_stream/index.ts new file mode 100644 index 0000000000000..6abb292f919d9 --- /dev/null +++ b/x-pack/plugins/infra/public/components/log_stream/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export * from './log_stream'; diff --git a/x-pack/plugins/infra/public/components/log_stream/lazy_log_stream_wrapper.tsx b/x-pack/plugins/infra/public/components/log_stream/lazy_log_stream_wrapper.tsx index 65433aab15716..13eb6431f97a3 100644 --- a/x-pack/plugins/infra/public/components/log_stream/lazy_log_stream_wrapper.tsx +++ b/x-pack/plugins/infra/public/components/log_stream/lazy_log_stream_wrapper.tsx @@ -5,9 +5,9 @@ */ import React from 'react'; -import type { LogStreamProps } from './'; +import type { LogStreamProps } from './log_stream'; -const LazyLogStream = React.lazy(() => import('./')); +const LazyLogStream = React.lazy(() => import('./log_stream')); export const LazyLogStreamWrapper: React.FC = (props) => ( }> diff --git a/x-pack/plugins/infra/public/components/log_stream/index.tsx b/x-pack/plugins/infra/public/components/log_stream/log_stream.tsx similarity index 98% rename from x-pack/plugins/infra/public/components/log_stream/index.tsx rename to x-pack/plugins/infra/public/components/log_stream/log_stream.tsx index b485a21221af2..b7410fda6f6fd 100644 --- a/x-pack/plugins/infra/public/components/log_stream/index.tsx +++ b/x-pack/plugins/infra/public/components/log_stream/log_stream.tsx @@ -17,6 +17,7 @@ import { useLogStream } from '../../containers/logs/log_stream'; import { ScrollableLogTextStreamView } from '../logging/log_text_stream'; import { LogColumnRenderConfiguration } from '../../utils/log_column_render_configuration'; import { JsonValue } from '../../../../../../src/plugins/kibana_utils/common'; +import { Query } from '../../../../../../src/plugins/data/common'; const PAGE_THRESHOLD = 2; @@ -55,7 +56,7 @@ export interface LogStreamProps { sourceId?: string; startTimestamp: number; endTimestamp: number; - query?: string; + query?: string | Query; center?: LogEntryCursor; highlight?: string; height?: string | number; diff --git a/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable.tsx b/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable.tsx new file mode 100644 index 0000000000000..0d6dfc50960f9 --- /dev/null +++ b/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable.tsx @@ -0,0 +1,91 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { CoreStart } from 'kibana/public'; + +import { I18nProvider } from '@kbn/i18n/react'; +import { KibanaContextProvider } from '../../../../../../src/plugins/kibana_react/public'; +import { EuiThemeProvider } from '../../../../../../src/plugins/kibana_react/common'; +import { Query, TimeRange } from '../../../../../../src/plugins/data/public'; +import { + Embeddable, + EmbeddableInput, + IContainer, +} from '../../../../../../src/plugins/embeddable/public'; +import { datemathToEpochMillis } from '../../utils/datemath'; +import { LazyLogStreamWrapper } from './lazy_log_stream_wrapper'; + +export const LOG_STREAM_EMBEDDABLE = 'LOG_STREAM_EMBEDDABLE'; + +export interface LogStreamEmbeddableInput extends EmbeddableInput { + timeRange: TimeRange; + query: Query; +} + +export class LogStreamEmbeddable extends Embeddable { + public readonly type = LOG_STREAM_EMBEDDABLE; + private node?: HTMLElement; + + constructor( + private services: CoreStart, + initialInput: LogStreamEmbeddableInput, + parent?: IContainer + ) { + super(initialInput, {}, parent); + } + + public render(node: HTMLElement) { + if (this.node) { + ReactDOM.unmountComponentAtNode(this.node); + } + this.node = node; + + this.renderComponent(); + } + + public reload() { + this.renderComponent(); + } + + public destroy() { + super.destroy(); + if (this.node) { + ReactDOM.unmountComponentAtNode(this.node); + } + } + + private renderComponent() { + if (!this.node) { + return; + } + + const startTimestamp = datemathToEpochMillis(this.input.timeRange.from); + const endTimestamp = datemathToEpochMillis(this.input.timeRange.to); + + if (!startTimestamp || !endTimestamp) { + return; + } + + ReactDOM.render( + + + +
+ +
+
+
+
, + this.node + ); + } +} diff --git a/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable_factory.ts b/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable_factory.ts new file mode 100644 index 0000000000000..f4d1b83a07593 --- /dev/null +++ b/x-pack/plugins/infra/public/components/log_stream/log_stream_embeddable_factory.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { CoreStart } from 'kibana/public'; +import { + EmbeddableFactoryDefinition, + IContainer, +} from '../../../../../../src/plugins/embeddable/public'; +import { + LogStreamEmbeddable, + LOG_STREAM_EMBEDDABLE, + LogStreamEmbeddableInput, +} from './log_stream_embeddable'; + +export class LogStreamEmbeddableFactoryDefinition + implements EmbeddableFactoryDefinition { + public readonly type = LOG_STREAM_EMBEDDABLE; + + constructor(private getCoreServices: () => Promise) {} + + public async isEditable() { + const { application } = await this.getCoreServices(); + return application.capabilities.logs.save as boolean; + } + + public async create(initialInput: LogStreamEmbeddableInput, parent?: IContainer) { + const services = await this.getCoreServices(); + return new LogStreamEmbeddable(services, initialInput, parent); + } + + public getDisplayName() { + return 'Log stream'; + } +} diff --git a/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts b/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts index da7176125dae4..1d9a7a1b1d777 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts @@ -7,7 +7,7 @@ import { useMemo, useEffect } from 'react'; import useSetState from 'react-use/lib/useSetState'; import usePrevious from 'react-use/lib/usePrevious'; -import { esKuery } from '../../../../../../../src/plugins/data/public'; +import { esKuery, esQuery, Query } from '../../../../../../../src/plugins/data/public'; import { fetchLogEntries } from '../log_entries/api/fetch_log_entries'; import { useTrackedPromise } from '../../../utils/use_tracked_promise'; import { LogEntryCursor, LogEntry } from '../../../../common/log_entry'; @@ -18,7 +18,7 @@ interface LogStreamProps { sourceId: string; startTimestamp: number; endTimestamp: number; - query?: string; + query?: string | Query; center?: LogEntryCursor; columns?: LogSourceConfigurationProperties['logColumns']; } @@ -84,9 +84,21 @@ export function useLogStream({ }, [prevEndTimestamp, endTimestamp, setState]); const parsedQuery = useMemo(() => { - return query - ? JSON.stringify(esKuery.toElasticsearchQuery(esKuery.fromKueryExpression(query))) - : null; + if (!query) { + return null; + } + + let q; + + if (typeof query === 'string') { + q = esKuery.toElasticsearchQuery(esKuery.fromKueryExpression(query)); + } else if (query.language === 'kuery') { + q = esKuery.toElasticsearchQuery(esKuery.fromKueryExpression(query.query as string)); + } else if (query.language === 'lucene') { + q = esQuery.luceneStringToDsl(query.query as string); + } + + return JSON.stringify(q); }, [query]); // Callbacks diff --git a/x-pack/plugins/infra/public/plugin.ts b/x-pack/plugins/infra/public/plugin.ts index 2bbd0067642c0..809046ee1e17b 100644 --- a/x-pack/plugins/infra/public/plugin.ts +++ b/x-pack/plugins/infra/public/plugin.ts @@ -19,6 +19,8 @@ import { } from './types'; import { getLogsHasDataFetcher, getLogsOverviewDataFetcher } from './utils/logs_overview_fetchers'; import { createMetricsHasData, createMetricsFetchData } from './metrics_overview_fetchers'; +import { LOG_STREAM_EMBEDDABLE } from './components/log_stream/log_stream_embeddable'; +import { LogStreamEmbeddableFactoryDefinition } from './components/log_stream/log_stream_embeddable_factory'; export class Plugin implements InfraClientPluginClass { constructor(_context: PluginInitializerContext) {} @@ -46,6 +48,13 @@ export class Plugin implements InfraClientPluginClass { }); } + const getCoreServices = async () => (await core.getStartServices())[0]; + + pluginsSetup.embeddable.registerEmbeddableFactory( + LOG_STREAM_EMBEDDABLE, + new LogStreamEmbeddableFactoryDefinition(getCoreServices) + ); + core.application.register({ id: 'logs', title: i18n.translate('xpack.infra.logs.pluginTitle', { diff --git a/x-pack/plugins/infra/public/types.ts b/x-pack/plugins/infra/public/types.ts index f1052672978d5..037cfa4b7eb2d 100644 --- a/x-pack/plugins/infra/public/types.ts +++ b/x-pack/plugins/infra/public/types.ts @@ -7,6 +7,7 @@ import type { CoreSetup, CoreStart, Plugin as PluginClass } from 'kibana/public'; import type { DataPublicPluginStart } from '../../../../src/plugins/data/public'; import type { HomePublicPluginSetup } from '../../../../src/plugins/home/public'; +import type { EmbeddableSetup } from '../../../../src/plugins/embeddable/public'; import type { UsageCollectionSetup, UsageCollectionStart, @@ -33,6 +34,7 @@ export interface InfraClientSetupDeps { observability: ObservabilityPluginSetup; triggersActionsUi: TriggersAndActionsUIPublicPluginSetup; usageCollection: UsageCollectionSetup; + embeddable: EmbeddableSetup; } export interface InfraClientStartDeps { From 3255f905c0ac8e8f7a639ea95858fec6bac07cf9 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Mon, 1 Feb 2021 15:14:17 +0100 Subject: [PATCH 28/85] [APM] Remove value_count aggregations (#89408) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../get_transaction_error_rate.ts | 4 +- .../index.ts | 31 +++++--------- .../lib/helpers/transaction_error_rate.ts | 41 +++++-------------- .../get_transaction_coordinates.ts | 16 +------- .../get_service_map_service_node_info.test.ts | 4 +- .../get_service_map_service_node_info.ts | 9 +--- .../__snapshots__/queries.test.ts.snap | 27 ------------ .../get_service_instance_transaction_stats.ts | 29 +++++-------- ..._timeseries_data_for_transaction_groups.ts | 6 ++- .../get_transaction_groups_for_page.ts | 9 ++-- .../merge_transaction_group_data.ts | 8 +--- .../get_service_transaction_stats.ts | 14 ++----- .../__snapshots__/queries.test.ts.snap | 10 ----- .../lib/transaction_groups/get_error_rate.ts | 10 ++++- .../get_transaction_group_stats.ts | 9 +--- .../get_throughput_charts/index.ts | 6 --- .../get_throughput_charts/transform.ts | 4 +- 17 files changed, 63 insertions(+), 174 deletions(-) diff --git a/x-pack/plugins/apm/server/lib/alerts/chart_preview/get_transaction_error_rate.ts b/x-pack/plugins/apm/server/lib/alerts/chart_preview/get_transaction_error_rate.ts index fae43ef148cfa..f6ddb15cbffa9 100644 --- a/x-pack/plugins/apm/server/lib/alerts/chart_preview/get_transaction_error_rate.ts +++ b/x-pack/plugins/apm/server/lib/alerts/chart_preview/get_transaction_error_rate.ts @@ -44,9 +44,7 @@ export async function getTransactionErrorRateChartPreview({ }, }; - const outcomes = getOutcomeAggregation({ - searchAggregatedTransactions: false, - }); + const outcomes = getOutcomeAggregation(); const { intervalString } = getBucketSize({ start, end, numBuckets: 20 }); diff --git a/x-pack/plugins/apm/server/lib/correlations/get_correlations_for_failed_transactions/index.ts b/x-pack/plugins/apm/server/lib/correlations/get_correlations_for_failed_transactions/index.ts index 64d9ebb192eb3..9ecf201ede1b7 100644 --- a/x-pack/plugins/apm/server/lib/correlations/get_correlations_for_failed_transactions/index.ts +++ b/x-pack/plugins/apm/server/lib/correlations/get_correlations_for_failed_transactions/index.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { isEmpty, omit } from 'lodash'; +import { isEmpty, omit, merge } from 'lodash'; import { EventOutcome } from '../../../../common/event_outcome'; import { processSignificantTermAggs, @@ -134,8 +134,7 @@ export async function getErrorRateTimeSeries({ extended_bounds: { min: start, max: end }, }, aggs: { - // TODO: add support for metrics - outcomes: getOutcomeAggregation({ searchAggregatedTransactions: false }), + outcomes: getOutcomeAggregation(), }, }; @@ -147,13 +146,12 @@ export async function getErrorRateTimeSeries({ }; return acc; }, - {} as Record< - string, - { + {} as { + [key: string]: { filter: AggregationOptionsByType['filter']; aggs: { timeseries: typeof timeseriesAgg }; - } - > + }; + } ); const params = { @@ -162,32 +160,25 @@ export async function getErrorRateTimeSeries({ body: { size: 0, query: { bool: { filter: backgroundFilters } }, - aggs: { - // overall aggs - timeseries: timeseriesAgg, - - // per term aggs - ...perTermAggs, - }, + aggs: merge({ timeseries: timeseriesAgg }, perTermAggs), }, }; const response = await apmEventClient.search(params); - type Agg = NonNullable; + const { aggregations } = response; - if (!response.aggregations) { + if (!aggregations) { return {}; } return { overall: { timeseries: getTransactionErrorRateTimeSeries( - response.aggregations.timeseries.buckets + aggregations.timeseries.buckets ), }, significantTerms: topSigTerms.map((topSig, index) => { - // @ts-expect-error - const agg = response.aggregations[`term_${index}`] as Agg; + const agg = aggregations[`term_${index}`]!; return { ...topSig, diff --git a/x-pack/plugins/apm/server/lib/helpers/transaction_error_rate.ts b/x-pack/plugins/apm/server/lib/helpers/transaction_error_rate.ts index 876fc6b822213..2d041006e0e27 100644 --- a/x-pack/plugins/apm/server/lib/helpers/transaction_error_rate.ts +++ b/x-pack/plugins/apm/server/lib/helpers/transaction_error_rate.ts @@ -10,40 +10,21 @@ import { AggregationOptionsByType, AggregationResultOf, } from '../../../../../typings/elasticsearch/aggregations'; -import { getTransactionDurationFieldForAggregatedTransactions } from './aggregated_transactions'; -export function getOutcomeAggregation({ - searchAggregatedTransactions, -}: { - searchAggregatedTransactions: boolean; -}) { - return { - terms: { - field: EVENT_OUTCOME, - include: [EventOutcome.failure, EventOutcome.success], - }, - aggs: { - // simply using the doc count to get the number of requests is not possible for transaction metrics (histograms) - // to work around this we get the number of transactions by counting the number of latency values - count: { - value_count: { - field: getTransactionDurationFieldForAggregatedTransactions( - searchAggregatedTransactions - ), - }, - }, - }, - }; -} +export const getOutcomeAggregation = () => ({ + terms: { + field: EVENT_OUTCOME, + include: [EventOutcome.failure, EventOutcome.success], + }, +}); + +type OutcomeAggregation = ReturnType; export function calculateTransactionErrorPercentage( - outcomeResponse: AggregationResultOf< - ReturnType, - {} - > + outcomeResponse: AggregationResultOf ) { const outcomes = Object.fromEntries( - outcomeResponse.buckets.map(({ key, count }) => [key, count.value]) + outcomeResponse.buckets.map(({ key, doc_count: count }) => [key, count]) ); const failedTransactions = outcomes[EventOutcome.failure] ?? 0; @@ -56,7 +37,7 @@ export function getTransactionErrorRateTimeSeries( buckets: AggregationResultOf< { date_histogram: AggregationOptionsByType['date_histogram']; - aggs: { outcomes: ReturnType }; + aggs: { outcomes: OutcomeAggregation }; }, {} >['buckets'] diff --git a/x-pack/plugins/apm/server/lib/observability_overview/get_transaction_coordinates.ts b/x-pack/plugins/apm/server/lib/observability_overview/get_transaction_coordinates.ts index 5531944fc7180..fa4bf6144fb6f 100644 --- a/x-pack/plugins/apm/server/lib/observability_overview/get_transaction_coordinates.ts +++ b/x-pack/plugins/apm/server/lib/observability_overview/get_transaction_coordinates.ts @@ -11,10 +11,7 @@ import { rangeFilter } from '../../../common/utils/range_filter'; import { Coordinates } from '../../../../observability/typings/common'; import { Setup, SetupTimeRange } from '../helpers/setup_request'; -import { - getProcessorEventForAggregatedTransactions, - getTransactionDurationFieldForAggregatedTransactions, -} from '../helpers/aggregated_transactions'; +import { getProcessorEventForAggregatedTransactions } from '../helpers/aggregated_transactions'; export async function getTransactionCoordinates({ setup, @@ -49,15 +46,6 @@ export async function getTransactionCoordinates({ fixed_interval: bucketSize, min_doc_count: 0, }, - aggs: { - count: { - value_count: { - field: getTransactionDurationFieldForAggregatedTransactions( - searchAggregatedTransactions - ), - }, - }, - }, }, }, }, @@ -68,7 +56,7 @@ export async function getTransactionCoordinates({ return ( aggregations?.distribution.buckets.map((bucket) => ({ x: bucket.key, - y: bucket.count.value / deltaAsMinutes, + y: bucket.doc_count / deltaAsMinutes, })) || [] ); } diff --git a/x-pack/plugins/apm/server/lib/service_map/get_service_map_service_node_info.test.ts b/x-pack/plugins/apm/server/lib/service_map/get_service_map_service_node_info.test.ts index f7ca40ef1052c..173de796d47e4 100644 --- a/x-pack/plugins/apm/server/lib/service_map/get_service_map_service_node_info.test.ts +++ b/x-pack/plugins/apm/server/lib/service_map/get_service_map_service_node_info.test.ts @@ -52,8 +52,10 @@ describe('getServiceMapServiceNodeInfo', () => { apmEventClient: { search: () => Promise.resolve({ + hits: { + total: { value: 1 }, + }, aggregations: { - count: { value: 1 }, duration: { value: null }, avgCpuUsage: { value: null }, avgMemoryUsage: { value: null }, diff --git a/x-pack/plugins/apm/server/lib/service_map/get_service_map_service_node_info.ts b/x-pack/plugins/apm/server/lib/service_map/get_service_map_service_node_info.ts index 82d339686f7ec..4fe9a1a75d43f 100644 --- a/x-pack/plugins/apm/server/lib/service_map/get_service_map_service_node_info.ts +++ b/x-pack/plugins/apm/server/lib/service_map/get_service_map_service_node_info.ts @@ -162,19 +162,12 @@ async function getTransactionStats({ ), }, }, - count: { - value_count: { - field: getTransactionDurationFieldForAggregatedTransactions( - searchAggregatedTransactions - ), - }, - }, }, }, }; const response = await apmEventClient.search(params); - const totalRequests = response.aggregations?.count.value ?? 0; + const totalRequests = response.hits.total.value; return { avgTransactionDuration: response.aggregations?.duration.value ?? null, diff --git a/x-pack/plugins/apm/server/lib/services/__snapshots__/queries.test.ts.snap b/x-pack/plugins/apm/server/lib/services/__snapshots__/queries.test.ts.snap index 21402e4c8dac0..239b909e1572c 100644 --- a/x-pack/plugins/apm/server/lib/services/__snapshots__/queries.test.ts.snap +++ b/x-pack/plugins/apm/server/lib/services/__snapshots__/queries.test.ts.snap @@ -122,13 +122,6 @@ Array [ }, }, "outcomes": Object { - "aggs": Object { - "count": Object { - "value_count": Object { - "field": "transaction.duration.us", - }, - }, - }, "terms": Object { "field": "event.outcome", "include": Array [ @@ -137,11 +130,6 @@ Array [ ], }, }, - "real_document_count": Object { - "value_count": Object { - "field": "transaction.duration.us", - }, - }, "timeseries": Object { "aggs": Object { "avg_duration": Object { @@ -150,13 +138,6 @@ Array [ }, }, "outcomes": Object { - "aggs": Object { - "count": Object { - "value_count": Object { - "field": "transaction.duration.us", - }, - }, - }, "terms": Object { "field": "event.outcome", "include": Array [ @@ -165,11 +146,6 @@ Array [ ], }, }, - "real_document_count": Object { - "value_count": Object { - "field": "transaction.duration.us", - }, - }, }, "date_histogram": Object { "extended_bounds": Object { @@ -184,9 +160,6 @@ Array [ }, "terms": Object { "field": "transaction.type", - "order": Object { - "real_document_count": "desc", - }, }, }, }, diff --git a/x-pack/plugins/apm/server/lib/services/get_service_instances/get_service_instance_transaction_stats.ts b/x-pack/plugins/apm/server/lib/services/get_service_instances/get_service_instance_transaction_stats.ts index 5880b5cbc9546..c5e5269c4409e 100644 --- a/x-pack/plugins/apm/server/lib/services/get_service_instances/get_service_instance_transaction_stats.ts +++ b/x-pack/plugins/apm/server/lib/services/get_service_instances/get_service_instance_transaction_stats.ts @@ -30,18 +30,17 @@ export async function getServiceInstanceTransactionStats({ }: ServiceInstanceParams) { const { apmEventClient, start, end, esFilter } = setup; - const { intervalString } = getBucketSize({ start, end, numBuckets }); + const { intervalString, bucketSize } = getBucketSize({ + start, + end, + numBuckets, + }); const field = getTransactionDurationFieldForAggregatedTransactions( searchAggregatedTransactions ); const subAggs = { - count: { - value_count: { - field, - }, - }, avg_transaction_duration: { avg: { field, @@ -53,13 +52,6 @@ export async function getServiceInstanceTransactionStats({ [EVENT_OUTCOME]: EventOutcome.failure, }, }, - aggs: { - count: { - value_count: { - field, - }, - }, - }, }, }; @@ -113,12 +105,13 @@ export async function getServiceInstanceTransactionStats({ }); const deltaAsMinutes = (end - start) / 60 / 1000; + const bucketSizeInMinutes = bucketSize / 60; return ( response.aggregations?.[SERVICE_NODE_NAME].buckets.map( (serviceNodeBucket) => { const { - count, + doc_count: count, avg_transaction_duration: avgTransactionDuration, key, failures, @@ -128,17 +121,17 @@ export async function getServiceInstanceTransactionStats({ return { serviceNodeName: String(key), errorRate: { - value: failures.count.value / count.value, + value: failures.doc_count / count, timeseries: timeseries.buckets.map((dateBucket) => ({ x: dateBucket.key, - y: dateBucket.failures.count.value / dateBucket.count.value, + y: dateBucket.failures.doc_count / dateBucket.doc_count, })), }, throughput: { - value: count.value / deltaAsMinutes, + value: count / deltaAsMinutes, timeseries: timeseries.buckets.map((dateBucket) => ({ x: dateBucket.key, - y: dateBucket.count.value / deltaAsMinutes, + y: dateBucket.doc_count / bucketSizeInMinutes, })), }, latency: { diff --git a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_timeseries_data_for_transaction_groups.ts b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_timeseries_data_for_transaction_groups.ts index 937155bc31602..745535f261673 100644 --- a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_timeseries_data_for_transaction_groups.ts +++ b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_timeseries_data_for_transaction_groups.ts @@ -17,6 +17,7 @@ import { import { ESFilter } from '../../../../../../typings/elasticsearch'; import { + getDocumentTypeFilterForAggregatedTransactions, getProcessorEventForAggregatedTransactions, getTransactionDurationFieldForAggregatedTransactions, } from '../../helpers/aggregated_transactions'; @@ -76,6 +77,9 @@ export async function getTimeseriesDataForTransactionGroups({ { term: { [SERVICE_NAME]: serviceName } }, { term: { [TRANSACTION_TYPE]: transactionType } }, { range: rangeFilter(start, end) }, + ...getDocumentTypeFilterForAggregatedTransactions( + searchAggregatedTransactions + ), ...esFilter, ], }, @@ -99,10 +103,8 @@ export async function getTimeseriesDataForTransactionGroups({ }, aggs: { ...getLatencyAggregation(latencyAggregationType, field), - transaction_count: { value_count: { field } }, [EVENT_OUTCOME]: { filter: { term: { [EVENT_OUTCOME]: EventOutcome.failure } }, - aggs: { transaction_count: { value_count: { field } } }, }, }, }, diff --git a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_transaction_groups_for_page.ts b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_transaction_groups_for_page.ts index ccccf946512dd..400c896e380b4 100644 --- a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_transaction_groups_for_page.ts +++ b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_transaction_groups_for_page.ts @@ -99,10 +99,8 @@ export async function getTransactionGroupsForPage({ }, aggs: { ...getLatencyAggregation(latencyAggregationType, field), - transaction_count: { value_count: { field } }, [EVENT_OUTCOME]: { filter: { term: { [EVENT_OUTCOME]: EventOutcome.failure } }, - aggs: { transaction_count: { value_count: { field } } }, }, }, }, @@ -113,9 +111,8 @@ export async function getTransactionGroupsForPage({ const transactionGroups = response.aggregations?.transaction_groups.buckets.map((bucket) => { const errorRate = - bucket.transaction_count.value > 0 - ? (bucket[EVENT_OUTCOME].transaction_count.value ?? 0) / - bucket.transaction_count.value + bucket.doc_count > 0 + ? bucket[EVENT_OUTCOME].doc_count / bucket.doc_count : null; return { @@ -124,7 +121,7 @@ export async function getTransactionGroupsForPage({ latencyAggregationType, aggregation: bucket.latency, }), - throughput: bucket.transaction_count.value / deltaAsMinutes, + throughput: bucket.doc_count / deltaAsMinutes, errorRate, }; }) ?? []; diff --git a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/merge_transaction_group_data.ts b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/merge_transaction_group_data.ts index a8794e3c09a40..b0b1cb09dd784 100644 --- a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/merge_transaction_group_data.ts +++ b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/merge_transaction_group_data.ts @@ -52,18 +52,14 @@ export function mergeTransactionGroupData({ ...acc.throughput, timeseries: acc.throughput.timeseries.concat({ x: point.key, - y: point.transaction_count.value / deltaAsMinutes, + y: point.doc_count / deltaAsMinutes, }), }, errorRate: { ...acc.errorRate, timeseries: acc.errorRate.timeseries.concat({ x: point.key, - y: - point.transaction_count.value > 0 - ? (point[EVENT_OUTCOME].transaction_count.value ?? 0) / - point.transaction_count.value - : null, + y: point[EVENT_OUTCOME].doc_count / point.doc_count, }), }, }; diff --git a/x-pack/plugins/apm/server/lib/services/get_services/get_service_transaction_stats.ts b/x-pack/plugins/apm/server/lib/services/get_services/get_service_transaction_stats.ts index 0ee7080dc0834..efbc30169d178 100644 --- a/x-pack/plugins/apm/server/lib/services/get_services/get_service_transaction_stats.ts +++ b/x-pack/plugins/apm/server/lib/services/get_services/get_service_transaction_stats.ts @@ -51,16 +51,9 @@ export async function getServiceTransactionStats({ }: AggregationParams) { const { apmEventClient, start, end, esFilter } = setup; - const outcomes = getOutcomeAggregation({ searchAggregatedTransactions }); + const outcomes = getOutcomeAggregation(); const metrics = { - real_document_count: { - value_count: { - field: getTransactionDurationFieldForAggregatedTransactions( - searchAggregatedTransactions - ), - }, - }, avg_duration: { avg: { field: getTransactionDurationFieldForAggregatedTransactions( @@ -102,7 +95,6 @@ export async function getServiceTransactionStats({ transactionType: { terms: { field: TRANSACTION_TYPE, - order: { real_document_count: 'desc' }, }, aggs: { ...metrics, @@ -180,14 +172,14 @@ export async function getServiceTransactionStats({ }, transactionsPerMinute: { value: calculateAvgDuration({ - value: topTransactionTypeBucket.real_document_count.value, + value: topTransactionTypeBucket.doc_count, deltaAsMinutes, }), timeseries: topTransactionTypeBucket.timeseries.buckets.map( (dateBucket) => ({ x: dateBucket.key, y: calculateAvgDuration({ - value: dateBucket.real_document_count.value, + value: dateBucket.doc_count, deltaAsMinutes, }), }) diff --git a/x-pack/plugins/apm/server/lib/transaction_groups/__snapshots__/queries.test.ts.snap b/x-pack/plugins/apm/server/lib/transaction_groups/__snapshots__/queries.test.ts.snap index c678e7db711b6..89069d74bacf8 100644 --- a/x-pack/plugins/apm/server/lib/transaction_groups/__snapshots__/queries.test.ts.snap +++ b/x-pack/plugins/apm/server/lib/transaction_groups/__snapshots__/queries.test.ts.snap @@ -12,11 +12,6 @@ Array [ "aggs": Object { "transaction_groups": Object { "aggs": Object { - "count": Object { - "value_count": Object { - "field": "transaction.duration.us", - }, - }, "transaction_type": Object { "top_hits": Object { "_source": Array [ @@ -226,11 +221,6 @@ Array [ "aggs": Object { "transaction_groups": Object { "aggs": Object { - "count": Object { - "value_count": Object { - "field": "transaction.duration.us", - }, - }, "transaction_type": Object { "top_hits": Object { "_source": Array [ diff --git a/x-pack/plugins/apm/server/lib/transaction_groups/get_error_rate.ts b/x-pack/plugins/apm/server/lib/transaction_groups/get_error_rate.ts index dfd11203b87f1..a2388dddc7fd4 100644 --- a/x-pack/plugins/apm/server/lib/transaction_groups/get_error_rate.ts +++ b/x-pack/plugins/apm/server/lib/transaction_groups/get_error_rate.ts @@ -14,7 +14,10 @@ import { } from '../../../common/elasticsearch_fieldnames'; import { EventOutcome } from '../../../common/event_outcome'; import { rangeFilter } from '../../../common/utils/range_filter'; -import { getProcessorEventForAggregatedTransactions } from '../helpers/aggregated_transactions'; +import { + getDocumentTypeFilterForAggregatedTransactions, + getProcessorEventForAggregatedTransactions, +} from '../helpers/aggregated_transactions'; import { getBucketSize } from '../helpers/get_bucket_size'; import { Setup, SetupTimeRange } from '../helpers/setup_request'; import { @@ -55,12 +58,15 @@ export async function getErrorRate({ { terms: { [EVENT_OUTCOME]: [EventOutcome.failure, EventOutcome.success] }, }, + ...getDocumentTypeFilterForAggregatedTransactions( + searchAggregatedTransactions + ), ...transactionNamefilter, ...transactionTypefilter, ...esFilter, ]; - const outcomes = getOutcomeAggregation({ searchAggregatedTransactions }); + const outcomes = getOutcomeAggregation(); const params = { apm: { diff --git a/x-pack/plugins/apm/server/lib/transaction_groups/get_transaction_group_stats.ts b/x-pack/plugins/apm/server/lib/transaction_groups/get_transaction_group_stats.ts index cfd3540446172..dba58cecad79b 100644 --- a/x-pack/plugins/apm/server/lib/transaction_groups/get_transaction_group_stats.ts +++ b/x-pack/plugins/apm/server/lib/transaction_groups/get_transaction_group_stats.ts @@ -66,13 +66,6 @@ export async function getCounts({ searchAggregatedTransactions, }: MetricParams) { const params = mergeRequestWithAggs(request, { - count: { - value_count: { - field: getTransactionDurationFieldForAggregatedTransactions( - searchAggregatedTransactions - ), - }, - }, transaction_type: { top_hits: { size: 1, @@ -92,7 +85,7 @@ export async function getCounts({ return { key: bucket.key as BucketKey, - count: bucket.count.value, + count: bucket.doc_count, transactionType: source.transaction.type, }; }); diff --git a/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/index.ts b/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/index.ts index be374ccfe3400..8dfb0a9f65878 100644 --- a/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/index.ts +++ b/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/index.ts @@ -15,7 +15,6 @@ import { rangeFilter } from '../../../../common/utils/range_filter'; import { getDocumentTypeFilterForAggregatedTransactions, getProcessorEventForAggregatedTransactions, - getTransactionDurationFieldForAggregatedTransactions, } from '../../../lib/helpers/aggregated_transactions'; import { getBucketSize } from '../../../lib/helpers/get_bucket_size'; import { Setup, SetupTimeRange } from '../../../lib/helpers/setup_request'; @@ -56,10 +55,6 @@ async function searchThroughput({ filter.push({ term: { [TRANSACTION_NAME]: transactionName } }); } - const field = getTransactionDurationFieldForAggregatedTransactions( - searchAggregatedTransactions - ); - const params = { apm: { events: [ @@ -82,7 +77,6 @@ async function searchThroughput({ min_doc_count: 0, extended_bounds: { min: start, max: end }, }, - aggs: { count: { value_count: { field } } }, }, }, }, diff --git a/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/transform.ts b/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/transform.ts index a12e36c0e9de4..7e43a0d76f70a 100644 --- a/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/transform.ts +++ b/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/transform.ts @@ -25,7 +25,7 @@ export function getThroughputBuckets({ return { x: bucket.key, // divide by minutes - y: bucket.count.value / (bucketSize / 60), + y: bucket.doc_count / (bucketSize / 60), }; }); @@ -34,7 +34,7 @@ export function getThroughputBuckets({ resultKey === '' ? NOT_AVAILABLE_LABEL : (resultKey as string); const docCountTotal = timeseries.buckets - .map((bucket) => bucket.count.value) + .map((bucket) => bucket.doc_count) .reduce((a, b) => a + b, 0); // calculate average throughput From c66124e1703c817a728d6417e5a985be5c10d68e Mon Sep 17 00:00:00 2001 From: Marco Liberati Date: Mon, 1 Feb 2021 15:25:16 +0100 Subject: [PATCH 29/85] [Lens] Make Lens intervals default value adapt to histogram:maxBars Advanced Setting changes (#89305) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../indexpattern_datasource/indexpattern.tsx | 2 +- .../definitions/date_histogram.test.tsx | 10 ++-- .../definitions/filters/filters.test.tsx | 7 ++- .../operations/definitions/index.ts | 6 ++- .../definitions/last_value.test.tsx | 7 ++- .../definitions/percentile.test.tsx | 7 ++- .../definitions/ranges/range_editor.tsx | 11 +---- .../definitions/ranges/ranges.test.tsx | 49 +++++++++---------- .../operations/definitions/ranges/ranges.tsx | 8 +-- .../definitions/terms/terms.test.tsx | 13 +++-- .../indexpattern_datasource/to_expression.ts | 15 ++++-- 11 files changed, 75 insertions(+), 60 deletions(-) diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx index c309212eed164..7f77a7ce199b6 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx @@ -167,7 +167,7 @@ export function getIndexPatternDatasource({ }); }, - toExpression, + toExpression: (state, layerId) => toExpression(state, layerId, uiSettings), renderDataPanel( domElement: Element, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx index abd033c0db4cf..22275533b9554 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx @@ -83,9 +83,11 @@ const indexPattern2: IndexPattern = { ]), }; +const uiSettingsMock = {} as IUiSettingsClient; + const defaultOptions = { storage: {} as IStorageWrapper, - uiSettings: {} as IUiSettingsClient, + uiSettings: uiSettingsMock, savedObjectsClient: {} as SavedObjectsClientContract, dateRange: { fromDate: 'now-1y', @@ -200,7 +202,8 @@ describe('date_histogram', () => { layer.columns.col1 as DateHistogramIndexPatternColumn, 'col1', indexPattern1, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( expect.objectContaining({ @@ -252,7 +255,8 @@ describe('date_histogram', () => { }, ]), }, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( expect.objectContaining({ diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filters.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filters.test.tsx index 86767fbc8b469..3657013fa0bfa 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filters.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/filters/filters.test.tsx @@ -16,9 +16,11 @@ import type { IndexPatternLayer } from '../../../types'; import { createMockedIndexPattern } from '../../../mocks'; import { FilterPopover } from './filter_popover'; +const uiSettingsMock = {} as IUiSettingsClient; + const defaultProps = { storage: {} as IStorageWrapper, - uiSettings: {} as IUiSettingsClient, + uiSettings: uiSettingsMock, savedObjectsClient: {} as SavedObjectsClientContract, dateRange: { fromDate: 'now-1d', toDate: 'now' }, data: dataPluginMock.createStartContract(), @@ -84,7 +86,8 @@ describe('filters', () => { layer.columns.col1 as FiltersIndexPatternColumn, 'col1', createMockedIndexPattern(), - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( expect.objectContaining({ diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts index 1cdaff53c5458..0c0aa34bb40b3 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts @@ -239,7 +239,8 @@ interface FieldlessOperationDefinition { column: C, columnId: string, indexPattern: IndexPattern, - layer: IndexPatternLayer + layer: IndexPatternLayer, + uiSettings: IUiSettingsClient ) => ExpressionAstFunction; } @@ -283,7 +284,8 @@ interface FieldBasedOperationDefinition { column: C, columnId: string, indexPattern: IndexPattern, - layer: IndexPatternLayer + layer: IndexPatternLayer, + uiSettings: IUiSettingsClient ) => ExpressionAstFunction; /** * Optional function to return the suffix used for ES bucket paths and esaggs column id. diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/last_value.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/last_value.test.tsx index 96b12a714e613..8d5ab50770111 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/last_value.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/last_value.test.tsx @@ -15,9 +15,11 @@ import { LastValueIndexPatternColumn } from './last_value'; import { lastValueOperation } from './index'; import type { IndexPattern, IndexPatternLayer } from '../../types'; +const uiSettingsMock = {} as IUiSettingsClient; + const defaultProps = { storage: {} as IStorageWrapper, - uiSettings: {} as IUiSettingsClient, + uiSettings: uiSettingsMock, savedObjectsClient: {} as SavedObjectsClientContract, dateRange: { fromDate: 'now-1d', toDate: 'now' }, data: dataPluginMock.createStartContract(), @@ -70,7 +72,8 @@ describe('last_value', () => { { ...lastValueColumn, params: { ...lastValueColumn.params } }, 'col1', {} as IndexPattern, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( expect.objectContaining({ diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.test.tsx index c22eec62ea1ab..a340e17121e90 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.test.tsx @@ -17,9 +17,11 @@ import { EuiFieldNumber } from '@elastic/eui'; import { act } from 'react-dom/test-utils'; import { EuiFormRow } from '@elastic/eui'; +const uiSettingsMock = {} as IUiSettingsClient; + const defaultProps = { storage: {} as IStorageWrapper, - uiSettings: {} as IUiSettingsClient, + uiSettings: uiSettingsMock, savedObjectsClient: {} as SavedObjectsClientContract, dateRange: { fromDate: 'now-1d', toDate: 'now' }, data: dataPluginMock.createStartContract(), @@ -72,7 +74,8 @@ describe('percentile', () => { percentileColumn, 'col1', {} as IndexPattern, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( expect.objectContaining({ diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/ranges/range_editor.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/ranges/range_editor.tsx index ad5c146ff6624..d9698252177b0 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/ranges/range_editor.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/ranges/range_editor.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { @@ -190,15 +190,6 @@ export const RangeEditor = ({ }) => { const [isAdvancedEditor, toggleAdvancedEditor] = useState(params.type === MODES.Range); - // if the maxBars in the params is set to auto refresh it with the default value only on bootstrap - useEffect(() => { - if (!isAdvancedEditor) { - if (params.maxBars !== maxBars) { - setParam('maxBars', maxBars); - } - } - }, [maxBars, params.maxBars, setParam, isAdvancedEditor]); - if (isAdvancedEditor) { return ( & React.MouseEvent; +// need this for MAX_HISTOGRAM value +const uiSettingsMock = ({ + get: jest.fn().mockReturnValue(100), +} as unknown) as IUiSettingsClient; + const sourceField = 'MyField'; const defaultOptions = { storage: {} as IStorageWrapper, - // need this for MAX_HISTOGRAM value - uiSettings: ({ - get: () => 100, - } as unknown) as IUiSettingsClient, + uiSettings: uiSettingsMock, savedObjectsClient: {} as SavedObjectsClientContract, dateRange: { fromDate: 'now-1y', @@ -143,7 +145,8 @@ describe('ranges', () => { layer.columns.col1 as RangeIndexPatternColumn, 'col1', {} as IndexPattern, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toMatchInlineSnapshot(` Object { @@ -166,6 +169,9 @@ describe('ranges', () => { "interval": Array [ "auto", ], + "maxBars": Array [ + 49.5, + ], "min_doc_count": Array [ false, ], @@ -186,7 +192,8 @@ describe('ranges', () => { layer.columns.col1 as RangeIndexPatternColumn, 'col1', {} as IndexPattern, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( @@ -206,7 +213,8 @@ describe('ranges', () => { layer.columns.col1 as RangeIndexPatternColumn, 'col1', {} as IndexPattern, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( @@ -226,7 +234,8 @@ describe('ranges', () => { layer.columns.col1 as RangeIndexPatternColumn, 'col1', {} as IndexPattern, - layer + layer, + uiSettingsMock ); expect((esAggsFn as { arguments: unknown }).arguments).toEqual( @@ -275,7 +284,7 @@ describe('ranges', () => { it('should start update the state with the default maxBars value', () => { const updateLayerSpy = jest.fn(); - mount( + const instance = mount( { /> ); - expect(updateLayerSpy).toHaveBeenCalledWith({ - ...layer, - columns: { - ...layer.columns, - col1: { - ...layer.columns.col1, - params: { - ...layer.columns.col1.params, - maxBars: GRANULARITY_DEFAULT_VALUE, - }, - }, - }, - }); + expect(instance.find(EuiRange).prop('value')).toEqual(String(GRANULARITY_DEFAULT_VALUE)); }); it('should update state when changing Max bars number', () => { @@ -313,8 +310,6 @@ describe('ranges', () => { /> ); - // There's a useEffect in the component that updates the value on bootstrap - // because there's a debouncer, wait a bit before calling onChange act(() => { jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); @@ -358,8 +353,6 @@ describe('ranges', () => { /> ); - // There's a useEffect in the component that updates the value on bootstrap - // because there's a debouncer, wait a bit before calling onChange act(() => { jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); // minus button @@ -368,6 +361,7 @@ describe('ranges', () => { .find('button') .prop('onClick')!({} as ReactMouseEvent); jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); + instance.update(); }); expect(updateLayerSpy).toHaveBeenCalledWith({ @@ -391,6 +385,7 @@ describe('ranges', () => { .find('button') .prop('onClick')!({} as ReactMouseEvent); jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); + instance.update(); }); expect(updateLayerSpy).toHaveBeenCalledWith({ @@ -788,7 +783,7 @@ describe('ranges', () => { instance.find(EuiLink).first().prop('onClick')!({} as ReactMouseEvent); }); - expect(updateLayerSpy.mock.calls[1][0].columns.col1.params.format).toEqual({ + expect(updateLayerSpy.mock.calls[0][0].columns.col1.params.format).toEqual({ id: 'custom', params: { decimals: 3 }, }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/ranges/ranges.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/ranges/ranges.tsx index aa5cc8255a584..d8622a5aedf7d 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/ranges/ranges.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/ranges/ranges.tsx @@ -132,7 +132,7 @@ export const rangeOperation: OperationDefinition { + toEsAggsFn: (column, columnId, indexPattern, layer, uiSettings) => { const { sourceField, params } = column; if (params.type === MODES.Range) { return buildExpressionFunction('aggRange', { @@ -158,13 +158,15 @@ export const rangeOperation: OperationDefinition('aggHistogram', { id: columnId, enabled: true, schema: 'segment', field: sourceField, - // fallback to 0 in case of empty string - maxBars: params.maxBars === AUTO_BARS ? undefined : params.maxBars, + maxBars: params.maxBars === AUTO_BARS ? maxBarsDefaultValue : params.maxBars, interval: 'auto', has_extended_bounds: false, min_doc_count: false, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx index d60992bda2e2a..3e25e127b37f4 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx @@ -17,9 +17,11 @@ import type { TermsIndexPatternColumn } from '.'; import { termsOperation } from '../index'; import { IndexPattern, IndexPatternLayer } from '../../../types'; +const uiSettingsMock = {} as IUiSettingsClient; + const defaultProps = { storage: {} as IStorageWrapper, - uiSettings: {} as IUiSettingsClient, + uiSettings: uiSettingsMock, savedObjectsClient: {} as SavedObjectsClientContract, dateRange: { fromDate: 'now-1d', toDate: 'now' }, data: dataPluginMock.createStartContract(), @@ -66,7 +68,8 @@ describe('terms', () => { { ...termsColumn, params: { ...termsColumn.params, otherBucket: true } }, 'col1', {} as IndexPattern, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( expect.objectContaining({ @@ -89,7 +92,8 @@ describe('terms', () => { }, 'col1', {} as IndexPattern, - layer + layer, + uiSettingsMock ); expect(esAggsFn).toEqual( expect.objectContaining({ @@ -129,7 +133,8 @@ describe('terms', () => { }, }, }, - } + }, + uiSettingsMock ); expect(esAggsFn).toEqual( expect.objectContaining({ diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts b/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts index 38f51f24aae7d..c9ee77a9f5e15 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import type { IUiSettingsClient } from 'kibana/public'; import { EsaggsExpressionFunctionDefinition, IndexPatternLoadExpressionFunctionDefinition, @@ -24,7 +25,8 @@ import { getEsAggsSuffix } from './operations/definitions/helpers'; function getExpressionForLayer( layer: IndexPatternLayer, - indexPattern: IndexPattern + indexPattern: IndexPattern, + uiSettings: IUiSettingsClient ): ExpressionAstExpression | null { const { columns, columnOrder } = layer; if (columnOrder.length === 0) { @@ -44,7 +46,7 @@ function getExpressionForLayer( aggs.push( buildExpression({ type: 'expression', - chain: [def.toEsAggsFn(col, colId, indexPattern, layer)], + chain: [def.toEsAggsFn(col, colId, indexPattern, layer, uiSettings)], }) ); } @@ -184,11 +186,16 @@ function getExpressionForLayer( return null; } -export function toExpression(state: IndexPatternPrivateState, layerId: string) { +export function toExpression( + state: IndexPatternPrivateState, + layerId: string, + uiSettings: IUiSettingsClient +) { if (state.layers[layerId]) { return getExpressionForLayer( state.layers[layerId], - state.indexPatterns[state.layers[layerId].indexPatternId] + state.indexPatterns[state.layers[layerId].indexPatternId], + uiSettings ); } From 03636a07fe23ef80b46d3f0a6958f7164abc4138 Mon Sep 17 00:00:00 2001 From: Rudolf Meijering Date: Mon, 1 Feb 2021 15:46:16 +0100 Subject: [PATCH 30/85] Migrations v2: don't auto-create indices + FTR/esArchiver support (#85778) * Migrations V2 on by default * esArchiver delete migrations v2 indices * Fix saved_objects_management api_integration tests * Try to fix v2 migrations for pre-release builds * esArchiver delete auto-created v2 migration indices like .kibana_8.0.0 * Try to fix v2 migrations for pre-release builds * Use require_alias to prevent auto-created saved objects index * Wrap SO routes until core logs all internal errors * Fix api_integration tests requiring an empty kibana index * Delete corrupt saved object from lens archives * Update docs * Fix ui_settings tests * Fix core jest tests * Fix type errors * Fix accessibility tests * Fix plugin functional tests * Fix api_integration tests after merging in master * Fix plugin functional tests #2 * EsArchiver: Don't reset ui settings after the .kibana index was deleted * Fix functional management/visualize tests * Fix oss security functional tests * EsArchiver clean task manager indices to fix alerting api integration tests * migrationsv2 correctly handle unknown saved object type mappings * Revert "Try to fix v2 migrations for pre-release builds" This reverts commit a1a1567501d528a087c4d8de2a10f90a9878f845. * Revert "Try to fix v2 migrations for pre-release builds" This reverts commit a9a935558c4e5a08f5e9c3d40c1acad3cb54eda7. * Re-enable v2 migrations in tests after merging in master * Try to fix async dashboard functional test * Restore UiSettings defaults after emptyKibanaIndex() * Review feedback: rename test to match behaviour --- ...orhelpers.createindexaliasnotfounderror.md | 22 ++ ...helpers.decorateindexaliasnotfounderror.md | 23 ++ ...savedobjectserrorhelpers.isgeneralerror.md | 22 ++ ...in-core-server.savedobjectserrorhelpers.md | 3 + .../src/actions/empty_kibana_index.ts | 3 +- packages/kbn-es-archiver/src/es_archiver.ts | 2 +- .../src/lib/indices/kibana_index.ts | 8 +- .../saved_objects/migrationsv2/model.test.ts | 202 +++++++++++++++--- .../saved_objects/migrationsv2/model.ts | 20 +- .../saved_objects/routes/bulk_create.ts | 3 +- .../server/saved_objects/routes/bulk_get.ts | 3 +- .../saved_objects/routes/bulk_update.ts | 3 +- .../server/saved_objects/routes/create.ts | 3 +- .../server/saved_objects/routes/delete.ts | 3 +- .../server/saved_objects/routes/export.ts | 4 +- src/core/server/saved_objects/routes/find.ts | 3 +- src/core/server/saved_objects/routes/get.ts | 3 +- .../server/saved_objects/routes/import.ts | 4 +- .../server/saved_objects/routes/migrate.ts | 3 +- .../routes/resolve_import_errors.ts | 5 +- .../server/saved_objects/routes/update.ts | 3 +- .../server/saved_objects/routes/utils.test.ts | 75 +++++++ src/core/server/saved_objects/routes/utils.ts | 34 ++- .../service/lib/decorate_es_error.test.ts | 21 ++ .../service/lib/decorate_es_error.ts | 6 + .../saved_objects/service/lib/errors.ts | 17 ++ .../service/lib/repository.test.js | 9 +- .../saved_objects/service/lib/repository.ts | 33 ++- src/core/server/server.api.md | 6 + .../integration_tests/doc_exists.ts | 6 +- .../integration_tests/doc_missing.ts | 6 +- .../doc_missing_and_index_read_only.ts | 12 +- .../integration_tests/index.test.ts | 13 +- .../integration_tests/lib/servers.ts | 3 - src/core/test_helpers/kbn_server.ts | 2 +- test/accessibility/apps/kibana_overview.ts | 3 +- test/api_integration/apis/home/sample_data.ts | 4 + .../apis/saved_objects/bulk_create.ts | 44 ++-- .../apis/saved_objects/bulk_get.ts | 2 +- .../apis/saved_objects/bulk_update.ts | 16 +- .../apis/saved_objects/create.ts | 48 +---- .../apis/saved_objects/delete.ts | 2 +- .../apis/saved_objects/export.ts | 2 +- .../apis/saved_objects/find.ts | 14 +- .../api_integration/apis/saved_objects/get.ts | 2 +- .../saved_objects/resolve_import_errors.ts | 54 ++++- .../apis/saved_objects/update.ts | 13 +- .../apis/saved_objects_management/find.ts | 4 +- .../apis/saved_objects_management/get.ts | 2 +- test/api_integration/apis/search/search.ts | 1 + test/api_integration/apis/telemetry/opt_in.ts | 3 + .../apis/telemetry/telemetry_local.ts | 1 + .../apis/ui_counters/ui_counters.ts | 5 + .../apis/ui_metric/ui_metric.ts | 5 + test/common/config.js | 2 - .../kibana_server/extend_es_archiver.js | 4 +- .../apps/management/_import_objects.ts | 5 +- .../apps/management/_index_pattern_filter.js | 3 +- .../apps/management/_index_patterns_empty.ts | 3 +- .../management/_mgmt_import_saved_objects.js | 3 +- .../apps/management/_test_huge_fields.js | 1 + test/functional/apps/management/index.ts | 2 - .../input_control_vis/input_control_range.ts | 2 - .../test_suites/core_plugins/applications.ts | 2 + .../test_suites/data_plugin/index_patterns.ts | 4 + .../import_warnings.ts | 7 +- .../insecure_cluster_warning.ts | 1 + .../tests/alerting/index.ts | 4 - .../apps/dashboard/_async_dashboard.ts | 2 + .../es_archives/visualize/default/data.json | 24 +-- .../reporting_without_security.config.ts | 1 - 71 files changed, 645 insertions(+), 238 deletions(-) create mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md new file mode 100644 index 0000000000000..2b897db7bba4c --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createIndexAliasNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md) + +## SavedObjectsErrorHelpers.createIndexAliasNotFoundError() method + +Signature: + +```typescript +static createIndexAliasNotFoundError(alias: string): DecoratedError; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| alias | string | | + +Returns: + +`DecoratedError` + diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md new file mode 100644 index 0000000000000..c7e10fc42ead1 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateIndexAliasNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md) + +## SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError() method + +Signature: + +```typescript +static decorateIndexAliasNotFoundError(error: Error, alias: string): DecoratedError; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| error | Error | | +| alias | string | | + +Returns: + +`DecoratedError` + diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md new file mode 100644 index 0000000000000..4b4ede2f77a7e --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isGeneralError](./kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md) + +## SavedObjectsErrorHelpers.isGeneralError() method + +Signature: + +```typescript +static isGeneralError(error: Error | DecoratedError): boolean; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| error | Error | DecoratedError | | + +Returns: + +`boolean` + diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md index 9b69012ed5f12..2dc78f2df3a83 100644 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md @@ -18,6 +18,7 @@ export declare class SavedObjectsErrorHelpers | [createBadRequestError(reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md) | static | | | [createConflictError(type, id, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md) | static | | | [createGenericNotFoundError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md) | static | | +| [createIndexAliasNotFoundError(alias)](./kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md) | static | | | [createInvalidVersionError(versionInput)](./kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md) | static | | | [createTooManyRequestsError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md) | static | | | [createUnsupportedTypeError(type)](./kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md) | static | | @@ -27,6 +28,7 @@ export declare class SavedObjectsErrorHelpers | [decorateEsUnavailableError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md) | static | | | [decorateForbiddenError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md) | static | | | [decorateGeneralError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md) | static | | +| [decorateIndexAliasNotFoundError(error, alias)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md) | static | | | [decorateNotAuthorizedError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md) | static | | | [decorateRequestEntityTooLargeError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md) | static | | | [decorateTooManyRequestsError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md) | static | | @@ -35,6 +37,7 @@ export declare class SavedObjectsErrorHelpers | [isEsCannotExecuteScriptError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md) | static | | | [isEsUnavailableError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md) | static | | | [isForbiddenError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md) | static | | +| [isGeneralError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md) | static | | | [isInvalidVersionError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md) | static | | | [isNotAuthorizedError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md) | static | | | [isNotFoundError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md) | static | | diff --git a/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts b/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts index 56c75c5aca419..6272d6ba00ee8 100644 --- a/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts +++ b/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts @@ -25,5 +25,6 @@ export async function emptyKibanaIndexAction({ await cleanKibanaIndices({ client, stats, log, kibanaPluginIds }); await migrateKibanaIndex({ client, kbnClient }); - return stats; + stats.createdIndex('.kibana'); + return stats.toJSON(); } diff --git a/packages/kbn-es-archiver/src/es_archiver.ts b/packages/kbn-es-archiver/src/es_archiver.ts index f101c5d6867f1..8601dedad0e27 100644 --- a/packages/kbn-es-archiver/src/es_archiver.ts +++ b/packages/kbn-es-archiver/src/es_archiver.ts @@ -155,7 +155,7 @@ export class EsArchiver { * @return Promise */ async emptyKibanaIndex() { - await emptyKibanaIndexAction({ + return await emptyKibanaIndexAction({ client: this.client, log: this.log, kbnClient: this.kbnClient, diff --git a/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts b/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts index 0459a4301cf6b..91c0bd8343a36 100644 --- a/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts +++ b/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts @@ -76,7 +76,9 @@ export async function migrateKibanaIndex({ */ async function fetchKibanaIndices(client: Client) { const kibanaIndices = await client.cat.indices({ index: '.kibana*', format: 'json' }); - const isKibanaIndex = (index: string) => /^\.kibana(:?_\d*)?$/.test(index); + const isKibanaIndex = (index: string) => + /^\.kibana(:?_\d*)?$/.test(index) || + /^\.kibana(_task_manager)?_(pre)?\d+\.\d+\.\d+/.test(index); return kibanaIndices.map((x: { index: string }) => x.index).filter(isKibanaIndex); } @@ -103,7 +105,7 @@ export async function cleanKibanaIndices({ while (true) { const resp = await client.deleteByQuery({ - index: `.kibana`, + index: `.kibana,.kibana_task_manager`, body: { query: { bool: { @@ -115,7 +117,7 @@ export async function cleanKibanaIndices({ }, }, }, - ignore: [409], + ignore: [404, 409], }); if (resp.total !== resp.deleted) { diff --git a/src/core/server/saved_objects/migrationsv2/model.test.ts b/src/core/server/saved_objects/migrationsv2/model.test.ts index d5ab85c54a728..a9aa69960b1c2 100644 --- a/src/core/server/saved_objects/migrationsv2/model.test.ts +++ b/src/core/server/saved_objects/migrationsv2/model.test.ts @@ -182,6 +182,21 @@ describe('migrations v2 model', () => { versionAlias: '.kibana_7.11.0', versionIndex: '.kibana_7.11.0_001', }; + const mappingsWithUnknownType = { + properties: { + disabled_saved_object_type: { + properties: { + value: { type: 'keyword' }, + }, + }, + }, + _meta: { + migrationMappingPropertyHashes: { + disabled_saved_object_type: '7997cf5a56cc02bdc9c93361bde732b0', + }, + }, + }; + test('INIT -> OUTDATED_DOCUMENTS_SEARCH if .kibana is already pointing to the target index', () => { const res: ResponseType<'INIT'> = Either.right({ '.kibana_7.11.0_001': { @@ -189,38 +204,27 @@ describe('migrations v2 model', () => { '.kibana': {}, '.kibana_7.11.0': {}, }, - mappings: { - properties: { - disabled_saved_object_type: { - properties: { - value: { type: 'keyword' }, - }, - }, - }, - _meta: { - migrationMappingPropertyHashes: { - disabled_saved_object_type: '7997cf5a56cc02bdc9c93361bde732b0', - }, - }, - }, + mappings: mappingsWithUnknownType, settings: {}, }, }); const newState = model(initState, res); expect(newState.controlState).toEqual('OUTDATED_DOCUMENTS_SEARCH'); + // This snapshot asserts that we merge the + // migrationMappingPropertyHashes of the existing index, but we leave + // the mappings for the disabled_saved_object_type untouched. There + // might be another Kibana instance that knows about this type and + // needs these mappings in place. expect(newState.targetIndexMappings).toMatchInlineSnapshot(` Object { "_meta": Object { "migrationMappingPropertyHashes": Object { + "disabled_saved_object_type": "7997cf5a56cc02bdc9c93361bde732b0", "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", }, }, "properties": Object { - "disabled_saved_object_type": Object { - "dynamic": false, - "properties": Object {}, - }, "new_saved_object_type": Object { "properties": Object { "value": Object { @@ -271,7 +275,7 @@ describe('migrations v2 model', () => { '.kibana': {}, '.kibana_7.12.0': {}, }, - mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, + mappings: mappingsWithUnknownType, settings: {}, }, '.kibana_7.11.0_001': { @@ -288,12 +292,37 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('.kibana_7.invalid.0_001'), targetIndex: '.kibana_7.11.0_001', }); + // This snapshot asserts that we disable the unknown saved object + // type. Because it's mappings are disabled, we also don't copy the + // `_meta.migrationMappingPropertyHashes` for the disabled type. + expect(newState.targetIndexMappings).toMatchInlineSnapshot(` + Object { + "_meta": Object { + "migrationMappingPropertyHashes": Object { + "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", + }, + }, + "properties": Object { + "disabled_saved_object_type": Object { + "dynamic": false, + "properties": Object {}, + }, + "new_saved_object_type": Object { + "properties": Object { + "value": Object { + "type": "text", + }, + }, + }, + }, + } + `); }); test('INIT -> SET_SOURCE_WRITE_BLOCK when migrating from a v2 migrations index (>= 7.11.0)', () => { const res: ResponseType<'INIT'> = Either.right({ '.kibana_7.11.0_001': { aliases: { '.kibana': {}, '.kibana_7.11.0': {} }, - mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, + mappings: mappingsWithUnknownType, settings: {}, }, '.kibana_3': { @@ -319,6 +348,31 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('.kibana_7.11.0_001'), targetIndex: '.kibana_7.12.0_001', }); + // This snapshot asserts that we disable the unknown saved object + // type. Because it's mappings are disabled, we also don't copy the + // `_meta.migrationMappingPropertyHashes` for the disabled type. + expect(newState.targetIndexMappings).toMatchInlineSnapshot(` + Object { + "_meta": Object { + "migrationMappingPropertyHashes": Object { + "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", + }, + }, + "properties": Object { + "disabled_saved_object_type": Object { + "dynamic": false, + "properties": Object {}, + }, + "new_saved_object_type": Object { + "properties": Object { + "value": Object { + "type": "text", + }, + }, + }, + }, + } + `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); @@ -328,7 +382,7 @@ describe('migrations v2 model', () => { aliases: { '.kibana': {}, }, - mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, + mappings: mappingsWithUnknownType, settings: {}, }, }); @@ -339,6 +393,31 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('.kibana_3'), targetIndex: '.kibana_7.11.0_001', }); + // This snapshot asserts that we disable the unknown saved object + // type. Because it's mappings are disabled, we also don't copy the + // `_meta.migrationMappingPropertyHashes` for the disabled type. + expect(newState.targetIndexMappings).toMatchInlineSnapshot(` + Object { + "_meta": Object { + "migrationMappingPropertyHashes": Object { + "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", + }, + }, + "properties": Object { + "disabled_saved_object_type": Object { + "dynamic": false, + "properties": Object {}, + }, + "new_saved_object_type": Object { + "properties": Object { + "value": Object { + "type": "text", + }, + }, + }, + }, + } + `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); @@ -346,7 +425,7 @@ describe('migrations v2 model', () => { const res: ResponseType<'INIT'> = Either.right({ '.kibana': { aliases: {}, - mappings: { properties: {}, _meta: {} }, + mappings: mappingsWithUnknownType, settings: {}, }, }); @@ -357,6 +436,31 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('.kibana_pre6.5.0_001'), targetIndex: '.kibana_7.11.0_001', }); + // This snapshot asserts that we disable the unknown saved object + // type. Because it's mappings are disabled, we also don't copy the + // `_meta.migrationMappingPropertyHashes` for the disabled type. + expect(newState.targetIndexMappings).toMatchInlineSnapshot(` + Object { + "_meta": Object { + "migrationMappingPropertyHashes": Object { + "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", + }, + }, + "properties": Object { + "disabled_saved_object_type": Object { + "dynamic": false, + "properties": Object {}, + }, + "new_saved_object_type": Object { + "properties": Object { + "value": Object { + "type": "text", + }, + }, + }, + }, + } + `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); @@ -366,7 +470,7 @@ describe('migrations v2 model', () => { aliases: { 'my-saved-objects': {}, }, - mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, + mappings: mappingsWithUnknownType, settings: {}, }, }); @@ -386,6 +490,31 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('my-saved-objects_3'), targetIndex: 'my-saved-objects_7.11.0_001', }); + // This snapshot asserts that we disable the unknown saved object + // type. Because it's mappings are disabled, we also don't copy the + // `_meta.migrationMappingPropertyHashes` for the disabled type. + expect(newState.targetIndexMappings).toMatchInlineSnapshot(` + Object { + "_meta": Object { + "migrationMappingPropertyHashes": Object { + "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", + }, + }, + "properties": Object { + "disabled_saved_object_type": Object { + "dynamic": false, + "properties": Object {}, + }, + "new_saved_object_type": Object { + "properties": Object { + "value": Object { + "type": "text", + }, + }, + }, + }, + } + `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); @@ -395,7 +524,7 @@ describe('migrations v2 model', () => { aliases: { 'my-saved-objects': {}, }, - mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, + mappings: mappingsWithUnknownType, settings: {}, }, }); @@ -416,6 +545,31 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('my-saved-objects_7.11.0'), targetIndex: 'my-saved-objects_7.12.0_001', }); + // This snapshot asserts that we disable the unknown saved object + // type. Because it's mappings are disabled, we also don't copy the + // `_meta.migrationMappingPropertyHashes` for the disabled type. + expect(newState.targetIndexMappings).toMatchInlineSnapshot(` + Object { + "_meta": Object { + "migrationMappingPropertyHashes": Object { + "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", + }, + }, + "properties": Object { + "disabled_saved_object_type": Object { + "dynamic": false, + "properties": Object {}, + }, + "new_saved_object_type": Object { + "properties": Object { + "value": Object { + "type": "text", + }, + }, + }, + }, + } + `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); diff --git a/src/core/server/saved_objects/migrationsv2/model.ts b/src/core/server/saved_objects/migrationsv2/model.ts index 1119edde8e268..3556bb611bb67 100644 --- a/src/core/server/saved_objects/migrationsv2/model.ts +++ b/src/core/server/saved_objects/migrationsv2/model.ts @@ -60,13 +60,13 @@ function throwBadResponse(state: State, res: any): never { * Merge the _meta.migrationMappingPropertyHashes mappings of an index with * the given target mappings. * - * @remarks Mapping updates are commutative (deeply merged) by Elasticsearch, - * except for the _meta key. The source index we're migrating from might - * contain documents created by a plugin that is disabled in the Kibana - * instance performing this migration. We merge the - * _meta.migrationMappingPropertyHashes mappings from the source index into - * the targetMappings to ensure that any `migrationPropertyHashes` for - * disabled plugins aren't lost. + * @remarks When another instance already completed a migration, the existing + * target index might contain documents and mappings created by a plugin that + * is disabled in the current Kibana instance performing this migration. + * Mapping updates are commutative (deeply merged) by Elasticsearch, except + * for the `_meta` key. By merging the `_meta.migrationMappingPropertyHashes` + * mappings from the existing target index index into the targetMappings we + * ensure that any `migrationPropertyHashes` for disabled plugins aren't lost. * * Right now we don't use these `migrationPropertyHashes` but it could be used * in the future to detect if mappings were changed. If mappings weren't @@ -209,7 +209,7 @@ export const model = (currentState: State, resW: ResponseType): // index sourceIndex: Option.none, targetIndex: `${stateP.indexPrefix}_${stateP.kibanaVersion}_001`, - targetIndexMappings: disableUnknownTypeMappingFields( + targetIndexMappings: mergeMigrationMappingPropertyHashes( stateP.targetIndexMappings, indices[aliases[stateP.currentAlias]].mappings ), @@ -242,7 +242,7 @@ export const model = (currentState: State, resW: ResponseType): controlState: 'SET_SOURCE_WRITE_BLOCK', sourceIndex: Option.some(source) as Option.Some, targetIndex: target, - targetIndexMappings: mergeMigrationMappingPropertyHashes( + targetIndexMappings: disableUnknownTypeMappingFields( stateP.targetIndexMappings, indices[source].mappings ), @@ -279,7 +279,7 @@ export const model = (currentState: State, resW: ResponseType): controlState: 'LEGACY_SET_WRITE_BLOCK', sourceIndex: Option.some(legacyReindexTarget) as Option.Some, targetIndex: target, - targetIndexMappings: mergeMigrationMappingPropertyHashes( + targetIndexMappings: disableUnknownTypeMappingFields( stateP.targetIndexMappings, indices[stateP.legacyIndex].mappings ), diff --git a/src/core/server/saved_objects/routes/bulk_create.ts b/src/core/server/saved_objects/routes/bulk_create.ts index 6d57eaa3777e6..b85747985e523 100644 --- a/src/core/server/saved_objects/routes/bulk_create.ts +++ b/src/core/server/saved_objects/routes/bulk_create.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; +import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -44,7 +45,7 @@ export const registerBulkCreateRoute = (router: IRouter, { coreUsageData }: Rout ), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const { overwrite } = req.query; const usageStatsClient = coreUsageData.getClient(); diff --git a/src/core/server/saved_objects/routes/bulk_get.ts b/src/core/server/saved_objects/routes/bulk_get.ts index a260301633668..580bf26a4e529 100644 --- a/src/core/server/saved_objects/routes/bulk_get.ts +++ b/src/core/server/saved_objects/routes/bulk_get.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; +import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -28,7 +29,7 @@ export const registerBulkGetRoute = (router: IRouter, { coreUsageData }: RouteDe ), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const usageStatsClient = coreUsageData.getClient(); usageStatsClient.incrementSavedObjectsBulkGet({ request: req }).catch(() => {}); diff --git a/src/core/server/saved_objects/routes/bulk_update.ts b/src/core/server/saved_objects/routes/bulk_update.ts index f9b8d4a2f567f..e592adc72a244 100644 --- a/src/core/server/saved_objects/routes/bulk_update.ts +++ b/src/core/server/saved_objects/routes/bulk_update.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; +import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -39,7 +40,7 @@ export const registerBulkUpdateRoute = (router: IRouter, { coreUsageData }: Rout ), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const usageStatsClient = coreUsageData.getClient(); usageStatsClient.incrementSavedObjectsBulkUpdate({ request: req }).catch(() => {}); diff --git a/src/core/server/saved_objects/routes/create.ts b/src/core/server/saved_objects/routes/create.ts index fd256abac3526..f6043ca96398d 100644 --- a/src/core/server/saved_objects/routes/create.ts +++ b/src/core/server/saved_objects/routes/create.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; +import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -43,7 +44,7 @@ export const registerCreateRoute = (router: IRouter, { coreUsageData }: RouteDep }), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const { type, id } = req.params; const { overwrite } = req.query; const { diff --git a/src/core/server/saved_objects/routes/delete.ts b/src/core/server/saved_objects/routes/delete.ts index a7846c3dc845b..b127f64b74a0c 100644 --- a/src/core/server/saved_objects/routes/delete.ts +++ b/src/core/server/saved_objects/routes/delete.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; +import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -28,7 +29,7 @@ export const registerDeleteRoute = (router: IRouter, { coreUsageData }: RouteDep }), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const { type, id } = req.params; const { force } = req.query; diff --git a/src/core/server/saved_objects/routes/export.ts b/src/core/server/saved_objects/routes/export.ts index 9b40855afec2e..f064cf1ca0ec1 100644 --- a/src/core/server/saved_objects/routes/export.ts +++ b/src/core/server/saved_objects/routes/export.ts @@ -18,7 +18,7 @@ import { SavedObjectsExportByObjectOptions, SavedObjectsExportError, } from '../export'; -import { validateTypes, validateObjects } from './utils'; +import { validateTypes, validateObjects, catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { config: SavedObjectConfig; @@ -163,7 +163,7 @@ export const registerExportRoute = ( }), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const cleaned = cleanOptions(req.body); const supportedTypes = context.core.savedObjects.typeRegistry .getImportableAndExportableTypes() diff --git a/src/core/server/saved_objects/routes/find.ts b/src/core/server/saved_objects/routes/find.ts index 747070e54e5ad..c814fd310dc52 100644 --- a/src/core/server/saved_objects/routes/find.ts +++ b/src/core/server/saved_objects/routes/find.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; +import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -49,7 +50,7 @@ export const registerFindRoute = (router: IRouter, { coreUsageData }: RouteDepen }), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const query = req.query; const namespaces = diff --git a/src/core/server/saved_objects/routes/get.ts b/src/core/server/saved_objects/routes/get.ts index c66a11dcf0cdd..2dd812f35cefd 100644 --- a/src/core/server/saved_objects/routes/get.ts +++ b/src/core/server/saved_objects/routes/get.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; +import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -25,7 +26,7 @@ export const registerGetRoute = (router: IRouter, { coreUsageData }: RouteDepend }), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const { type, id } = req.params; const usageStatsClient = coreUsageData.getClient(); diff --git a/src/core/server/saved_objects/routes/import.ts b/src/core/server/saved_objects/routes/import.ts index 6c4c759460ce3..5fd132acafbed 100644 --- a/src/core/server/saved_objects/routes/import.ts +++ b/src/core/server/saved_objects/routes/import.ts @@ -13,7 +13,7 @@ import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; import { SavedObjectConfig } from '../saved_objects_config'; import { SavedObjectsImportError } from '../import'; -import { createSavedObjectsStreamFromNdJson } from './utils'; +import { catchAndReturnBoomErrors, createSavedObjectsStreamFromNdJson } from './utils'; interface RouteDependencies { config: SavedObjectConfig; @@ -61,7 +61,7 @@ export const registerImportRoute = ( }), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const { overwrite, createNewCopies } = req.query; const usageStatsClient = coreUsageData.getClient(); diff --git a/src/core/server/saved_objects/routes/migrate.ts b/src/core/server/saved_objects/routes/migrate.ts index 8b347d4725b08..7c2f4bfb06710 100644 --- a/src/core/server/saved_objects/routes/migrate.ts +++ b/src/core/server/saved_objects/routes/migrate.ts @@ -8,6 +8,7 @@ import { IRouter } from '../../http'; import { IKibanaMigrator } from '../migrations'; +import { catchAndReturnBoomErrors } from './utils'; export const registerMigrateRoute = ( router: IRouter, @@ -21,7 +22,7 @@ export const registerMigrateRoute = ( tags: ['access:migrateSavedObjects'], }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const migrator = await migratorPromise; await migrator.runMigrations({ rerun: true }); return res.ok({ diff --git a/src/core/server/saved_objects/routes/resolve_import_errors.ts b/src/core/server/saved_objects/routes/resolve_import_errors.ts index 0cf976c30b311..6f0a3d028baf9 100644 --- a/src/core/server/saved_objects/routes/resolve_import_errors.ts +++ b/src/core/server/saved_objects/routes/resolve_import_errors.ts @@ -13,8 +13,7 @@ import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; import { SavedObjectConfig } from '../saved_objects_config'; import { SavedObjectsImportError } from '../import'; -import { createSavedObjectsStreamFromNdJson } from './utils'; - +import { catchAndReturnBoomErrors, createSavedObjectsStreamFromNdJson } from './utils'; interface RouteDependencies { config: SavedObjectConfig; coreUsageData: CoreUsageDataSetup; @@ -69,7 +68,7 @@ export const registerResolveImportErrorsRoute = ( }), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const { createNewCopies } = req.query; const usageStatsClient = coreUsageData.getClient(); diff --git a/src/core/server/saved_objects/routes/update.ts b/src/core/server/saved_objects/routes/update.ts index 17cfd438d47bf..dbc69f743df76 100644 --- a/src/core/server/saved_objects/routes/update.ts +++ b/src/core/server/saved_objects/routes/update.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; +import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -38,7 +39,7 @@ export const registerUpdateRoute = (router: IRouter, { coreUsageData }: RouteDep }), }, }, - router.handleLegacyErrors(async (context, req, res) => { + catchAndReturnBoomErrors(async (context, req, res) => { const { type, id } = req.params; const { attributes, version, references } = req.body; const options = { version, references }; diff --git a/src/core/server/saved_objects/routes/utils.test.ts b/src/core/server/saved_objects/routes/utils.test.ts index ade7b03f6a8c2..1d7e86e288b18 100644 --- a/src/core/server/saved_objects/routes/utils.test.ts +++ b/src/core/server/saved_objects/routes/utils.test.ts @@ -9,6 +9,15 @@ import { createSavedObjectsStreamFromNdJson, validateTypes, validateObjects } from './utils'; import { Readable } from 'stream'; import { createPromiseFromStreams, createConcatStream } from '@kbn/utils'; +import { catchAndReturnBoomErrors } from './utils'; +import Boom from '@hapi/boom'; +import { + KibanaRequest, + RequestHandler, + RequestHandlerContext, + KibanaResponseFactory, + kibanaResponseFactory, +} from '../../'; async function readStreamToCompletion(stream: Readable) { return createPromiseFromStreams([stream, createConcatStream([])]); @@ -143,3 +152,69 @@ describe('validateObjects', () => { ).toBeUndefined(); }); }); + +describe('catchAndReturnBoomErrors', () => { + let context: RequestHandlerContext; + let request: KibanaRequest; + let response: KibanaResponseFactory; + + const createHandler = (handler: () => any): RequestHandler => () => { + return handler(); + }; + + beforeEach(() => { + context = {} as any; + request = {} as any; + response = kibanaResponseFactory; + }); + + it('should pass-though call parameters to the handler', async () => { + const handler = jest.fn(); + const wrapped = catchAndReturnBoomErrors(handler); + await wrapped(context, request, response); + expect(handler).toHaveBeenCalledWith(context, request, response); + }); + + it('should pass-though result from the handler', async () => { + const handler = createHandler(() => { + return 'handler-response'; + }); + const wrapped = catchAndReturnBoomErrors(handler); + const result = await wrapped(context, request, response); + expect(result).toBe('handler-response'); + }); + + it('should intercept and convert thrown Boom errors', async () => { + const handler = createHandler(() => { + throw Boom.notFound('not there'); + }); + const wrapped = catchAndReturnBoomErrors(handler); + const result = await wrapped(context, request, response); + expect(result.status).toBe(404); + expect(result.payload).toEqual({ + error: 'Not Found', + message: 'not there', + statusCode: 404, + }); + }); + + it('should re-throw non-Boom errors', async () => { + const handler = createHandler(() => { + throw new Error('something went bad'); + }); + const wrapped = catchAndReturnBoomErrors(handler); + await expect(wrapped(context, request, response)).rejects.toMatchInlineSnapshot( + `[Error: something went bad]` + ); + }); + + it('should re-throw Boom internal/500 errors', async () => { + const handler = createHandler(() => { + throw Boom.internal(); + }); + const wrapped = catchAndReturnBoomErrors(handler); + await expect(wrapped(context, request, response)).rejects.toMatchInlineSnapshot( + `[Error: Internal Server Error]` + ); + }); +}); diff --git a/src/core/server/saved_objects/routes/utils.ts b/src/core/server/saved_objects/routes/utils.ts index b9e7df48a4b4c..269f3f0698561 100644 --- a/src/core/server/saved_objects/routes/utils.ts +++ b/src/core/server/saved_objects/routes/utils.ts @@ -7,7 +7,11 @@ */ import { Readable } from 'stream'; -import { SavedObject, SavedObjectsExportResultDetails } from 'src/core/server'; +import { + RequestHandlerWrapper, + SavedObject, + SavedObjectsExportResultDetails, +} from 'src/core/server'; import { createSplitStream, createMapStream, @@ -16,6 +20,7 @@ import { createListStream, createConcatStream, } from '@kbn/utils'; +import Boom from '@hapi/boom'; export async function createSavedObjectsStreamFromNdJson(ndJsonStream: Readable) { const savedObjects = await createPromiseFromStreams([ @@ -52,3 +57,30 @@ export function validateObjects( .join(', ')}`; } } + +/** + * Catches errors thrown by saved object route handlers and returns an error + * with the payload and statusCode of the boom error. + * + * This is very close to the core `router.handleLegacyErrors` except that it + * throws internal errors (statusCode: 500) so that the internal error's + * message get logged by Core. + * + * TODO: Remove once https://github.com/elastic/kibana/issues/65291 is fixed. + */ +export const catchAndReturnBoomErrors: RequestHandlerWrapper = (handler) => { + return async (context, request, response) => { + try { + return await handler(context, request, response); + } catch (e) { + if (Boom.isBoom(e) && e.output.statusCode !== 500) { + return response.customError({ + body: e.output.payload, + statusCode: e.output.statusCode, + headers: e.output.headers as { [key: string]: string }, + }); + } + throw e; + } + }; +}; diff --git a/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts b/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts index cc497ca6348b8..da1ebec2c0f7d 100644 --- a/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts +++ b/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts @@ -109,6 +109,27 @@ describe('savedObjectsClient/decorateEsError', () => { expect(SavedObjectsErrorHelpers.isNotFoundError(genericError)).toBe(true); }); + it('if saved objects index does not exist makes NotFound a SavedObjectsClient/generalError', () => { + const error = new esErrors.ResponseError( + elasticsearchClientMock.createApiResponse({ + statusCode: 404, + body: { + error: { + reason: + 'no such index [.kibana_8.0.0] and [require_alias] request flag is [true] and [.kibana_8.0.0] is not an alias', + }, + }, + }) + ); + expect(SavedObjectsErrorHelpers.isGeneralError(error)).toBe(false); + const genericError = decorateEsError(error); + expect(genericError.message).toEqual( + `Saved object index alias [.kibana_8.0.0] not found: Response Error` + ); + expect(genericError.output.statusCode).toBe(500); + expect(SavedObjectsErrorHelpers.isGeneralError(error)).toBe(true); + }); + it('makes BadRequest a SavedObjectsClient/BadRequest error', () => { const error = new esErrors.ResponseError( elasticsearchClientMock.createApiResponse({ statusCode: 400 }) diff --git a/src/core/server/saved_objects/service/lib/decorate_es_error.ts b/src/core/server/saved_objects/service/lib/decorate_es_error.ts index 40f18c9c94c25..aabca2d602cb3 100644 --- a/src/core/server/saved_objects/service/lib/decorate_es_error.ts +++ b/src/core/server/saved_objects/service/lib/decorate_es_error.ts @@ -63,6 +63,12 @@ export function decorateEsError(error: EsErrors) { } if (responseErrors.isNotFound(error.statusCode)) { + const match = error?.meta?.body?.error?.reason?.match( + /no such index \[(.+)\] and \[require_alias\] request flag is \[true\] and \[.+\] is not an alias/ + ); + if (match?.length > 0) { + return SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError(error, match[1]); + } return SavedObjectsErrorHelpers.createGenericNotFoundError(); } diff --git a/src/core/server/saved_objects/service/lib/errors.ts b/src/core/server/saved_objects/service/lib/errors.ts index f216e72efbcf8..c348196aaba21 100644 --- a/src/core/server/saved_objects/service/lib/errors.ts +++ b/src/core/server/saved_objects/service/lib/errors.ts @@ -135,6 +135,19 @@ export class SavedObjectsErrorHelpers { return decorate(Boom.notFound(), CODE_NOT_FOUND, 404); } + public static createIndexAliasNotFoundError(alias: string) { + return SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError(Boom.internal(), alias); + } + + public static decorateIndexAliasNotFoundError(error: Error, alias: string) { + return decorate( + error, + CODE_GENERAL_ERROR, + 500, + `Saved object index alias [${alias}] not found` + ); + } + public static isNotFoundError(error: Error | DecoratedError) { return isSavedObjectsClientError(error) && error[code] === CODE_NOT_FOUND; } @@ -185,4 +198,8 @@ export class SavedObjectsErrorHelpers { public static decorateGeneralError(error: Error, reason?: string) { return decorate(error, CODE_GENERAL_ERROR, 500, reason); } + + public static isGeneralError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_GENERAL_ERROR; + } } diff --git a/src/core/server/saved_objects/service/lib/repository.test.js b/src/core/server/saved_objects/service/lib/repository.test.js index 216e1c4bd2d3c..68fdea0f9eb25 100644 --- a/src/core/server/saved_objects/service/lib/repository.test.js +++ b/src/core/server/saved_objects/service/lib/repository.test.js @@ -18,6 +18,7 @@ import { DocumentMigrator } from '../../migrations/core/document_migrator'; import { mockKibanaMigrator } from '../../migrations/kibana/kibana_migrator.mock'; import { elasticsearchClientMock } from '../../../elasticsearch/client/mocks'; import { esKuery } from '../../es_query'; +import { errors as EsErrors } from '@elastic/elasticsearch'; const { nodeTypes } = esKuery; jest.mock('./search_dsl/search_dsl', () => ({ getSearchDsl: jest.fn() })); @@ -4341,8 +4342,14 @@ describe('SavedObjectsRepository', () => { }); it(`throws when ES is unable to find the document during update`, async () => { + const notFoundError = new EsErrors.ResponseError( + elasticsearchClientMock.createApiResponse({ + statusCode: 404, + body: { error: { type: 'es_type', reason: 'es_reason' } }, + }) + ); client.update.mockResolvedValueOnce( - elasticsearchClientMock.createSuccessTransportRequestPromise({}, { statusCode: 404 }) + elasticsearchClientMock.createErrorTransportRequestPromise(notFoundError) ); await expectNotFoundError(type, id); expect(client.update).toHaveBeenCalledTimes(1); diff --git a/src/core/server/saved_objects/service/lib/repository.ts b/src/core/server/saved_objects/service/lib/repository.ts index 2993d4234bd2e..da80971635a93 100644 --- a/src/core/server/saved_objects/service/lib/repository.ts +++ b/src/core/server/saved_objects/service/lib/repository.ts @@ -299,6 +299,7 @@ export class SavedObjectsRepository { refresh, body: raw._source, ...(overwrite && version ? decodeRequestVersion(version) : {}), + require_alias: true, }; const { body } = @@ -469,6 +470,7 @@ export class SavedObjectsRepository { const bulkResponse = bulkCreateParams.length ? await this.client.bulk({ refresh, + require_alias: true, body: bulkCreateParams, }) : undefined; @@ -1117,8 +1119,8 @@ export class SavedObjectsRepository { ...(Array.isArray(references) && { references }), }; - const { body, statusCode } = await this.client.update( - { + const { body } = await this.client + .update({ id: this._serializer.generateRawId(namespace, type, id), index: this.getIndexForType(type), ...getExpectedVersionProperties(version, preflightResult), @@ -1128,14 +1130,15 @@ export class SavedObjectsRepository { doc, }, _source_includes: ['namespace', 'namespaces', 'originId'], - }, - { ignore: [404] } - ); - - if (statusCode === 404) { - // see "404s from missing index" above - throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id); - } + require_alias: true, + }) + .catch((err) => { + if (SavedObjectsErrorHelpers.isNotFoundError(err)) { + // see "404s from missing index" above + throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id); + } + throw err; + }); const { originId } = body.get._source; let namespaces = []; @@ -1496,6 +1499,7 @@ export class SavedObjectsRepository { refresh, body: bulkUpdateParams, _source_includes: ['originId'], + require_alias: true, }) : undefined; @@ -1712,6 +1716,7 @@ export class SavedObjectsRepository { id: raw._id, index: this.getIndexForType(type), refresh, + require_alias: true, _source: 'true', body: { script: { @@ -1933,12 +1938,18 @@ export class SavedObjectsRepository { } } -function getBulkOperationError(error: { type: string; reason?: string }, type: string, id: string) { +function getBulkOperationError( + error: { type: string; reason?: string; index?: string }, + type: string, + id: string +) { switch (error.type) { case 'version_conflict_engine_exception': return errorContent(SavedObjectsErrorHelpers.createConflictError(type, id)); case 'document_missing_exception': return errorContent(SavedObjectsErrorHelpers.createGenericNotFoundError(type, id)); + case 'index_not_found_exception': + return errorContent(SavedObjectsErrorHelpers.createIndexAliasNotFoundError(error.index!)); default: return { message: error.reason || JSON.stringify(error), diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index aadd16bde0ee6..9d5114e645f6e 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -2336,6 +2336,8 @@ export class SavedObjectsErrorHelpers { // (undocumented) static createGenericNotFoundError(type?: string | null, id?: string | null): DecoratedError; // (undocumented) + static createIndexAliasNotFoundError(alias: string): DecoratedError; + // (undocumented) static createInvalidVersionError(versionInput?: string): DecoratedError; // (undocumented) static createTooManyRequestsError(type: string, id: string): DecoratedError; @@ -2354,6 +2356,8 @@ export class SavedObjectsErrorHelpers { // (undocumented) static decorateGeneralError(error: Error, reason?: string): DecoratedError; // (undocumented) + static decorateIndexAliasNotFoundError(error: Error, alias: string): DecoratedError; + // (undocumented) static decorateNotAuthorizedError(error: Error, reason?: string): DecoratedError; // (undocumented) static decorateRequestEntityTooLargeError(error: Error, reason?: string): DecoratedError; @@ -2370,6 +2374,8 @@ export class SavedObjectsErrorHelpers { // (undocumented) static isForbiddenError(error: Error | DecoratedError): boolean; // (undocumented) + static isGeneralError(error: Error | DecoratedError): boolean; + // (undocumented) static isInvalidVersionError(error: Error | DecoratedError): boolean; // (undocumented) static isNotAuthorizedError(error: Error | DecoratedError): boolean; diff --git a/src/core/server/ui_settings/integration_tests/doc_exists.ts b/src/core/server/ui_settings/integration_tests/doc_exists.ts index aa6f98ddf2d03..d100b89af9609 100644 --- a/src/core/server/ui_settings/integration_tests/doc_exists.ts +++ b/src/core/server/ui_settings/integration_tests/doc_exists.ts @@ -8,7 +8,7 @@ import { getServices, chance } from './lib'; -export function docExistsSuite() { +export const docExistsSuite = (savedObjectsIndex: string) => () => { async function setup(options: any = {}) { const { initialSettings } = options; @@ -16,7 +16,7 @@ export function docExistsSuite() { // delete the kibana index to ensure we start fresh await callCluster('deleteByQuery', { - index: kbnServer.config.get('kibana.index'), + index: savedObjectsIndex, body: { conflicts: 'proceed', query: { match_all: {} }, @@ -212,4 +212,4 @@ export function docExistsSuite() { }); }); }); -} +}; diff --git a/src/core/server/ui_settings/integration_tests/doc_missing.ts b/src/core/server/ui_settings/integration_tests/doc_missing.ts index 501976e3823f1..822ffe398b87d 100644 --- a/src/core/server/ui_settings/integration_tests/doc_missing.ts +++ b/src/core/server/ui_settings/integration_tests/doc_missing.ts @@ -8,7 +8,7 @@ import { getServices, chance } from './lib'; -export function docMissingSuite() { +export const docMissingSuite = (savedObjectsIndex: string) => () => { // ensure the kibana index has no documents beforeEach(async () => { const { kbnServer, callCluster } = getServices(); @@ -22,7 +22,7 @@ export function docMissingSuite() { // delete all docs from kibana index to ensure savedConfig is not found await callCluster('deleteByQuery', { - index: kbnServer.config.get('kibana.index'), + index: savedObjectsIndex, body: { query: { match_all: {} }, }, @@ -136,4 +136,4 @@ export function docMissingSuite() { }); }); }); -} +}; diff --git a/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts b/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts index b2ff1b2f1d4ab..997d51e36abdc 100644 --- a/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts +++ b/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts @@ -8,7 +8,7 @@ import { getServices, chance } from './lib'; -export function docMissingAndIndexReadOnlySuite() { +export const docMissingAndIndexReadOnlySuite = (savedObjectsIndex: string) => () => { // ensure the kibana index has no documents beforeEach(async () => { const { kbnServer, callCluster } = getServices(); @@ -22,7 +22,7 @@ export function docMissingAndIndexReadOnlySuite() { // delete all docs from kibana index to ensure savedConfig is not found await callCluster('deleteByQuery', { - index: kbnServer.config.get('kibana.index'), + index: savedObjectsIndex, body: { query: { match_all: {} }, }, @@ -30,7 +30,7 @@ export function docMissingAndIndexReadOnlySuite() { // set the index to read only await callCluster('indices.putSettings', { - index: kbnServer.config.get('kibana.index'), + index: savedObjectsIndex, body: { index: { blocks: { @@ -42,11 +42,11 @@ export function docMissingAndIndexReadOnlySuite() { }); afterEach(async () => { - const { kbnServer, callCluster } = getServices(); + const { callCluster } = getServices(); // disable the read only block await callCluster('indices.putSettings', { - index: kbnServer.config.get('kibana.index'), + index: savedObjectsIndex, body: { index: { blocks: { @@ -142,4 +142,4 @@ export function docMissingAndIndexReadOnlySuite() { }); }); }); -} +}; diff --git a/src/core/server/ui_settings/integration_tests/index.test.ts b/src/core/server/ui_settings/integration_tests/index.test.ts index f415f1d73de7d..e27e6c4e46874 100644 --- a/src/core/server/ui_settings/integration_tests/index.test.ts +++ b/src/core/server/ui_settings/integration_tests/index.test.ts @@ -6,20 +6,25 @@ * Public License, v 1. */ +import { Env } from '@kbn/config'; +import { REPO_ROOT } from '@kbn/dev-utils'; +import { getEnvOptions } from '@kbn/config/target/mocks'; import { startServers, stopServers } from './lib'; - import { docExistsSuite } from './doc_exists'; import { docMissingSuite } from './doc_missing'; import { docMissingAndIndexReadOnlySuite } from './doc_missing_and_index_read_only'; +const kibanaVersion = Env.createDefault(REPO_ROOT, getEnvOptions()).packageInfo.version; +const savedObjectIndex = `.kibana_${kibanaVersion}_001`; + describe('uiSettings/routes', function () { jest.setTimeout(10000); beforeAll(startServers); /* eslint-disable jest/valid-describe */ - describe('doc missing', docMissingSuite); - describe('doc missing and index readonly', docMissingAndIndexReadOnlySuite); - describe('doc exists', docExistsSuite); + describe('doc missing', docMissingSuite(savedObjectIndex)); + describe('doc missing and index readonly', docMissingAndIndexReadOnlySuite(savedObjectIndex)); + describe('doc exists', docExistsSuite(savedObjectIndex)); /* eslint-enable jest/valid-describe */ afterAll(stopServers); }); diff --git a/src/core/server/ui_settings/integration_tests/lib/servers.ts b/src/core/server/ui_settings/integration_tests/lib/servers.ts index b5198b19007d0..f181272030ae1 100644 --- a/src/core/server/ui_settings/integration_tests/lib/servers.ts +++ b/src/core/server/ui_settings/integration_tests/lib/servers.ts @@ -37,9 +37,6 @@ export async function startServers() { adjustTimeout: (t) => jest.setTimeout(t), settings: { kbn: { - migrations: { - enableV2: false, - }, uiSettings: { overrides: { foo: 'bar', diff --git a/src/core/test_helpers/kbn_server.ts b/src/core/test_helpers/kbn_server.ts index 0007e1fcca0a5..6fe6819a0981a 100644 --- a/src/core/test_helpers/kbn_server.ts +++ b/src/core/test_helpers/kbn_server.ts @@ -40,7 +40,7 @@ const DEFAULTS_SETTINGS = { }, logging: { silent: true }, plugins: {}, - migrations: { skip: true }, + migrations: { skip: false }, }; const DEFAULT_SETTINGS_WITH_CORE_PLUGINS = { diff --git a/test/accessibility/apps/kibana_overview.ts b/test/accessibility/apps/kibana_overview.ts index c26a042b10e72..eb0b54ad07aa7 100644 --- a/test/accessibility/apps/kibana_overview.ts +++ b/test/accessibility/apps/kibana_overview.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); before(async () => { - await esArchiver.load('empty_kibana'); + await esArchiver.emptyKibanaIndex(); await PageObjects.common.navigateToApp('kibanaOverview'); }); @@ -25,7 +25,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { useActualUrl: true, }); await PageObjects.home.removeSampleDataSet('flights'); - await esArchiver.unload('empty_kibana'); }); it('Getting started view', async () => { diff --git a/test/api_integration/apis/home/sample_data.ts b/test/api_integration/apis/home/sample_data.ts index 042aff1375267..ebda93b12dc20 100644 --- a/test/api_integration/apis/home/sample_data.ts +++ b/test/api_integration/apis/home/sample_data.ts @@ -11,11 +11,15 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); const es = getService('es'); const MILLISECOND_IN_WEEK = 1000 * 60 * 60 * 24 * 7; describe('sample data apis', () => { + before(async () => { + await esArchiver.emptyKibanaIndex(); + }); describe('list', () => { it('should return list of sample data sets with installed status', async () => { const resp = await supertest.get(`/api/sample_data`).set('kbn-xsrf', 'kibana').expect(200); diff --git a/test/api_integration/apis/saved_objects/bulk_create.ts b/test/api_integration/apis/saved_objects/bulk_create.ts index a548172365b07..d7cdee16214a8 100644 --- a/test/api_integration/apis/saved_objects/bulk_create.ts +++ b/test/api_integration/apis/saved_objects/bulk_create.ts @@ -97,10 +97,11 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); - it('should return 200 with individual responses', async () => + it('should return 200 with errors', async () => { + await new Promise((resolve) => setTimeout(resolve, 2000)); await supertest .post('/api/saved_objects/_bulk_create') .send(BULK_REQUESTS) @@ -109,38 +110,27 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.body).to.eql({ saved_objects: [ { - type: 'visualization', - id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - updated_at: resp.body.saved_objects[0].updated_at, - version: resp.body.saved_objects[0].version, - attributes: { - title: 'An existing visualization', - }, - references: [], - namespaces: ['default'], - migrationVersion: { - visualization: resp.body.saved_objects[0].migrationVersion.visualization, + id: BULK_REQUESTS[0].id, + type: BULK_REQUESTS[0].type, + error: { + error: 'Internal Server Error', + message: 'An internal server error occurred', + statusCode: 500, }, - coreMigrationVersion: KIBANA_VERSION, // updated from 1.2.3 to the latest kibana version }, { - type: 'dashboard', - id: 'a01b2f57-fcfd-4864-b735-09e28f0d815e', - updated_at: resp.body.saved_objects[1].updated_at, - version: resp.body.saved_objects[1].version, - attributes: { - title: 'A great new dashboard', - }, - references: [], - namespaces: ['default'], - migrationVersion: { - dashboard: resp.body.saved_objects[1].migrationVersion.dashboard, + id: BULK_REQUESTS[1].id, + type: BULK_REQUESTS[1].type, + error: { + error: 'Internal Server Error', + message: 'An internal server error occurred', + statusCode: 500, }, - coreMigrationVersion: KIBANA_VERSION, }, ], }); - })); + }); + }); }); }); } diff --git a/test/api_integration/apis/saved_objects/bulk_get.ts b/test/api_integration/apis/saved_objects/bulk_get.ts index 46631225f8e8a..b9536843d30c9 100644 --- a/test/api_integration/apis/saved_objects/bulk_get.ts +++ b/test/api_integration/apis/saved_objects/bulk_get.ts @@ -108,7 +108,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); it('should return 200 with individual responses', async () => diff --git a/test/api_integration/apis/saved_objects/bulk_update.ts b/test/api_integration/apis/saved_objects/bulk_update.ts index 5a2496b6dde81..2cf3ade406a93 100644 --- a/test/api_integration/apis/saved_objects/bulk_update.ts +++ b/test/api_integration/apis/saved_objects/bulk_update.ts @@ -235,10 +235,10 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); - it('should return generic 404', async () => { + it('should return 200 with errors', async () => { const response = await supertest .put(`/api/saved_objects/_bulk_update`) .send([ @@ -267,9 +267,9 @@ export default function ({ getService }: FtrProviderContext) { id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', type: 'visualization', error: { - statusCode: 404, - error: 'Not Found', - message: 'Saved object [visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab] not found', + statusCode: 500, + error: 'Internal Server Error', + message: 'An internal server error occurred', }, }); @@ -277,9 +277,9 @@ export default function ({ getService }: FtrProviderContext) { id: 'be3733a0-9efe-11e7-acb3-3dab96693fab', type: 'dashboard', error: { - statusCode: 404, - error: 'Not Found', - message: 'Saved object [dashboard/be3733a0-9efe-11e7-acb3-3dab96693fab] not found', + statusCode: 500, + error: 'Internal Server Error', + message: 'An internal server error occurred', }, }); }); diff --git a/test/api_integration/apis/saved_objects/create.ts b/test/api_integration/apis/saved_objects/create.ts index 551e082630e8f..833cb127d0023 100644 --- a/test/api_integration/apis/saved_objects/create.ts +++ b/test/api_integration/apis/saved_objects/create.ts @@ -82,10 +82,10 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); - it('should return 200 and create kibana index', async () => { + it('should return 500 and not auto-create saved objects index', async () => { await supertest .post(`/api/saved_objects/visualization`) .send({ @@ -93,50 +93,16 @@ export default function ({ getService }: FtrProviderContext) { title: 'My favorite vis', }, }) - .expect(200) + .expect(500) .then((resp) => { - // loose uuid validation - expect(resp.body) - .to.have.property('id') - .match(/^[0-9a-f-]{36}$/); - - // loose ISO8601 UTC time with milliseconds validation - expect(resp.body) - .to.have.property('updated_at') - .match(/^[\d-]{10}T[\d:\.]{12}Z$/); - expect(resp.body).to.eql({ - id: resp.body.id, - type: 'visualization', - migrationVersion: resp.body.migrationVersion, - coreMigrationVersion: KIBANA_VERSION, - updated_at: resp.body.updated_at, - version: resp.body.version, - attributes: { - title: 'My favorite vis', - }, - references: [], - namespaces: ['default'], + error: 'Internal Server Error', + message: 'An internal server error occurred.', + statusCode: 500, }); - expect(resp.body.migrationVersion).to.be.ok(); }); - expect((await es.indices.exists({ index: '.kibana' })).body).to.be(true); - }); - - it('result should have the latest coreMigrationVersion', async () => { - await supertest - .post(`/api/saved_objects/visualization`) - .send({ - attributes: { - title: 'My favorite vis', - }, - coreMigrationVersion: '1.2.3', - }) - .expect(200) - .then((resp) => { - expect(resp.body.coreMigrationVersion).to.eql(KIBANA_VERSION); - }); + expect((await es.indices.exists({ index: '.kibana' })).body).to.be(false); }); }); }); diff --git a/test/api_integration/apis/saved_objects/delete.ts b/test/api_integration/apis/saved_objects/delete.ts index 9ba51b4b91468..d2dd4454bdf1e 100644 --- a/test/api_integration/apis/saved_objects/delete.ts +++ b/test/api_integration/apis/saved_objects/delete.ts @@ -44,7 +44,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); it('returns generic 404 when kibana index is missing', async () => diff --git a/test/api_integration/apis/saved_objects/export.ts b/test/api_integration/apis/saved_objects/export.ts index a45191f24d872..c0d5430070951 100644 --- a/test/api_integration/apis/saved_objects/export.ts +++ b/test/api_integration/apis/saved_objects/export.ts @@ -534,7 +534,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); it('should return empty response', async () => { diff --git a/test/api_integration/apis/saved_objects/find.ts b/test/api_integration/apis/saved_objects/find.ts index 7aa4de86baa69..5f549dc6c5780 100644 --- a/test/api_integration/apis/saved_objects/find.ts +++ b/test/api_integration/apis/saved_objects/find.ts @@ -40,7 +40,7 @@ export default function ({ getService }: FtrProviderContext) { { type: 'visualization', id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - version: 'WzIsMV0=', + version: 'WzE4LDJd', attributes: { title: 'Count of requests', }, @@ -137,7 +137,7 @@ export default function ({ getService }: FtrProviderContext) { { type: 'visualization', id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - version: 'WzIsMV0=', + version: 'WzE4LDJd', attributes: { title: 'Count of requests', }, @@ -174,7 +174,7 @@ export default function ({ getService }: FtrProviderContext) { { type: 'visualization', id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - version: 'WzIsMV0=', + version: 'WzE4LDJd', attributes: { title: 'Count of requests', }, @@ -209,7 +209,7 @@ export default function ({ getService }: FtrProviderContext) { score: 0, type: 'visualization', updated_at: '2017-09-21T18:51:23.794Z', - version: 'WzYsMV0=', + version: 'WzIyLDJd', }, ], }); @@ -256,7 +256,7 @@ export default function ({ getService }: FtrProviderContext) { migrationVersion: resp.body.saved_objects[0].migrationVersion, coreMigrationVersion: KIBANA_VERSION, updated_at: '2017-09-21T18:51:23.794Z', - version: 'WzIsMV0=', + version: 'WzE4LDJd', }, ], }); @@ -426,11 +426,11 @@ export default function ({ getService }: FtrProviderContext) { })); }); - describe.skip('without kibana index', () => { + describe('without kibana index', () => { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); it('should return 200 with empty response', async () => diff --git a/test/api_integration/apis/saved_objects/get.ts b/test/api_integration/apis/saved_objects/get.ts index ff47b9df218dc..9bb6e32004c81 100644 --- a/test/api_integration/apis/saved_objects/get.ts +++ b/test/api_integration/apis/saved_objects/get.ts @@ -78,7 +78,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); it('should return basic 404 without mentioning index', async () => diff --git a/test/api_integration/apis/saved_objects/resolve_import_errors.ts b/test/api_integration/apis/saved_objects/resolve_import_errors.ts index 3686c46b229b1..042741476bb8e 100644 --- a/test/api_integration/apis/saved_objects/resolve_import_errors.ts +++ b/test/api_integration/apis/saved_objects/resolve_import_errors.ts @@ -13,6 +13,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); + const es = getService('legacyEs'); describe('resolve_import_errors', () => { // mock success results including metadata @@ -34,7 +35,14 @@ export default function ({ getService }: FtrProviderContext) { describe('without kibana index', () => { // Cleanup data that got created in import - after(() => esArchiver.unload('saved_objects/basic')); + before( + async () => + // just in case the kibana server has recreated it + await es.indices.delete({ + index: '.kibana*', + ignore: [404], + }) + ); it('should return 200 and import nothing when empty parameters are passed in', async () => { await supertest @@ -51,7 +59,7 @@ export default function ({ getService }: FtrProviderContext) { }); }); - it('should return 200 and import everything when overwrite parameters contains all objects', async () => { + it('should return 200 with internal server errors', async () => { await supertest .post('/api/saved_objects/_resolve_import_errors') .field( @@ -78,12 +86,42 @@ export default function ({ getService }: FtrProviderContext) { .expect(200) .then((resp) => { expect(resp.body).to.eql({ - success: true, - successCount: 3, - successResults: [ - { ...indexPattern, overwrite: true }, - { ...visualization, overwrite: true }, - { ...dashboard, overwrite: true }, + successCount: 0, + success: false, + errors: [ + { + ...indexPattern, + ...{ title: indexPattern.meta.title }, + overwrite: true, + error: { + statusCode: 500, + error: 'Internal Server Error', + message: 'An internal server error occurred', + type: 'unknown', + }, + }, + { + ...visualization, + ...{ title: visualization.meta.title }, + overwrite: true, + error: { + statusCode: 500, + error: 'Internal Server Error', + message: 'An internal server error occurred', + type: 'unknown', + }, + }, + { + ...dashboard, + ...{ title: dashboard.meta.title }, + overwrite: true, + error: { + statusCode: 500, + error: 'Internal Server Error', + message: 'An internal server error occurred', + type: 'unknown', + }, + }, ], warnings: [], }); diff --git a/test/api_integration/apis/saved_objects/update.ts b/test/api_integration/apis/saved_objects/update.ts index d5346e82ce98c..da7285a430fdd 100644 --- a/test/api_integration/apis/saved_objects/update.ts +++ b/test/api_integration/apis/saved_objects/update.ts @@ -121,10 +121,10 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); - it('should return generic 404', async () => + it('should return 500', async () => await supertest .put(`/api/saved_objects/visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab`) .send({ @@ -132,13 +132,12 @@ export default function ({ getService }: FtrProviderContext) { title: 'My second favorite vis', }, }) - .expect(404) + .expect(500) .then((resp) => { expect(resp.body).eql({ - statusCode: 404, - error: 'Not Found', - message: - 'Saved object [visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab] not found', + statusCode: 500, + error: 'Internal Server Error', + message: 'An internal server error occurred.', }); })); }); diff --git a/test/api_integration/apis/saved_objects_management/find.ts b/test/api_integration/apis/saved_objects_management/find.ts index acc01c73de674..8453b542903a4 100644 --- a/test/api_integration/apis/saved_objects_management/find.ts +++ b/test/api_integration/apis/saved_objects_management/find.ts @@ -42,7 +42,7 @@ export default function ({ getService }: FtrProviderContext) { { type: 'visualization', id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - version: 'WzIsMV0=', + version: 'WzE4LDJd', attributes: { title: 'Count of requests', }, @@ -184,7 +184,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); it('should return 200 with empty response', async () => diff --git a/test/api_integration/apis/saved_objects_management/get.ts b/test/api_integration/apis/saved_objects_management/get.ts index bc05d7e392bb9..70e1faa9fd22b 100644 --- a/test/api_integration/apis/saved_objects_management/get.ts +++ b/test/api_integration/apis/saved_objects_management/get.ts @@ -45,7 +45,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) ); it('should return 404 for object that no longer exists', async () => diff --git a/test/api_integration/apis/search/search.ts b/test/api_integration/apis/search/search.ts index 155705f81fa8a..e43c449309306 100644 --- a/test/api_integration/apis/search/search.ts +++ b/test/api_integration/apis/search/search.ts @@ -17,6 +17,7 @@ export default function ({ getService }: FtrProviderContext) { describe('search', () => { before(async () => { + await esArchiver.emptyKibanaIndex(); await esArchiver.loadIfNeeded('../../../functional/fixtures/es_archiver/logstash_functional'); }); diff --git a/test/api_integration/apis/telemetry/opt_in.ts b/test/api_integration/apis/telemetry/opt_in.ts index f03b33e61965e..ba5f46c38211f 100644 --- a/test/api_integration/apis/telemetry/opt_in.ts +++ b/test/api_integration/apis/telemetry/opt_in.ts @@ -14,10 +14,13 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function optInTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); + const esArchiver = getService('esArchiver'); + describe('/api/telemetry/v2/optIn API', () => { let defaultAttributes: TelemetrySavedObjectAttributes; let kibanaVersion: any; before(async () => { + await esArchiver.emptyKibanaIndex(); const kibanaVersionAccessor = kibanaServer.version; kibanaVersion = await kibanaVersionAccessor.get(); defaultAttributes = diff --git a/test/api_integration/apis/telemetry/telemetry_local.ts b/test/api_integration/apis/telemetry/telemetry_local.ts index 25d29a807bdad..650846015a4a2 100644 --- a/test/api_integration/apis/telemetry/telemetry_local.ts +++ b/test/api_integration/apis/telemetry/telemetry_local.ts @@ -177,6 +177,7 @@ export default function ({ getService }: FtrProviderContext) { describe('basic behaviour', () => { let savedObjectIds: string[] = []; before('create application usage entries', async () => { + await esArchiver.emptyKibanaIndex(); savedObjectIds = await Promise.all([ createSavedObject(), createSavedObject('appView1'), diff --git a/test/api_integration/apis/ui_counters/ui_counters.ts b/test/api_integration/apis/ui_counters/ui_counters.ts index 1cf16fe433bf9..8d60c79c9698d 100644 --- a/test/api_integration/apis/ui_counters/ui_counters.ts +++ b/test/api_integration/apis/ui_counters/ui_counters.ts @@ -13,6 +13,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); const es = getService('es'); const createUiCounterEvent = (eventName: string, type: UiCounterMetricType, count = 1) => ({ @@ -23,6 +24,10 @@ export default function ({ getService }: FtrProviderContext) { }); describe('UI Counters API', () => { + before(async () => { + await esArchiver.emptyKibanaIndex(); + }); + const dayDate = moment().format('DDMMYYYY'); it('stores ui counter events in savedObjects', async () => { diff --git a/test/api_integration/apis/ui_metric/ui_metric.ts b/test/api_integration/apis/ui_metric/ui_metric.ts index d330cb037d1a1..e3b3b2ec4c542 100644 --- a/test/api_integration/apis/ui_metric/ui_metric.ts +++ b/test/api_integration/apis/ui_metric/ui_metric.ts @@ -13,6 +13,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); const es = getService('es'); const createStatsMetric = ( @@ -34,6 +35,10 @@ export default function ({ getService }: FtrProviderContext) { }); describe('ui_metric savedObject data', () => { + before(async () => { + await esArchiver.emptyKibanaIndex(); + }); + it('increments the count field in the document defined by the {app}/{action_type} path', async () => { const reportManager = new ReportManager(); const uiStatsMetric = createStatsMetric('myEvent'); diff --git a/test/common/config.js b/test/common/config.js index b6d12444b7017..8a42e6c87b214 100644 --- a/test/common/config.js +++ b/test/common/config.js @@ -61,8 +61,6 @@ export default function () { ...(!!process.env.CODE_COVERAGE ? [`--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'coverage')}`] : []), - // Disable v2 migrations in tests for now - '--migrations.enableV2=false', ], }, services, diff --git a/test/common/services/kibana_server/extend_es_archiver.js b/test/common/services/kibana_server/extend_es_archiver.js index 5390b43a87187..1d76bc4473767 100644 --- a/test/common/services/kibana_server/extend_es_archiver.js +++ b/test/common/services/kibana_server/extend_es_archiver.js @@ -6,7 +6,7 @@ * Public License, v 1. */ -const ES_ARCHIVER_LOAD_METHODS = ['load', 'loadIfNeeded', 'unload']; +const ES_ARCHIVER_LOAD_METHODS = ['load', 'loadIfNeeded', 'unload', 'emptyKibanaIndex']; const KIBANA_INDEX = '.kibana'; export function extendEsArchiver({ esArchiver, kibanaServer, retry, defaults }) { @@ -25,7 +25,7 @@ export function extendEsArchiver({ esArchiver, kibanaServer, retry, defaults }) const statsKeys = Object.keys(stats); const kibanaKeys = statsKeys.filter( // this also matches stats keys like '.kibana_1' and '.kibana_2,.kibana_1' - (key) => key.includes(KIBANA_INDEX) && (stats[key].created || stats[key].deleted) + (key) => key.includes(KIBANA_INDEX) && stats[key].created ); // if the kibana index was created by the esArchiver then update the uiSettings diff --git a/test/functional/apps/management/_import_objects.ts b/test/functional/apps/management/_import_objects.ts index 754406938e47b..e18f2a7485444 100644 --- a/test/functional/apps/management/_import_objects.ts +++ b/test/functional/apps/management/_import_objects.ts @@ -27,9 +27,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe.skip('import objects', function describeIndexTests() { describe('.ndjson file', () => { beforeEach(async function () { + await esArchiver.load('management'); await kibanaServer.uiSettings.replace({}); await PageObjects.settings.navigateTo(); - await esArchiver.load('management'); await PageObjects.settings.clickKibanaSavedObjects(); }); @@ -213,10 +213,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('.json file', () => { beforeEach(async function () { - // delete .kibana index and then wait for Kibana to re-create it + await esArchiver.load('saved_objects_imports'); await kibanaServer.uiSettings.replace({}); await PageObjects.settings.navigateTo(); - await esArchiver.load('saved_objects_imports'); await PageObjects.settings.clickKibanaSavedObjects(); }); diff --git a/test/functional/apps/management/_index_pattern_filter.js b/test/functional/apps/management/_index_pattern_filter.js index eae53682b6ccf..91ea13348d611 100644 --- a/test/functional/apps/management/_index_pattern_filter.js +++ b/test/functional/apps/management/_index_pattern_filter.js @@ -12,10 +12,11 @@ export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); const PageObjects = getPageObjects(['settings']); + const esArchiver = getService('esArchiver'); describe('index pattern filter', function describeIndexTests() { before(async function () { - // delete .kibana index and then wait for Kibana to re-create it + await esArchiver.emptyKibanaIndex(); await kibanaServer.uiSettings.replace({}); await PageObjects.settings.navigateTo(); await PageObjects.settings.clickKibanaIndexPatterns(); diff --git a/test/functional/apps/management/_index_patterns_empty.ts b/test/functional/apps/management/_index_patterns_empty.ts index 3b89e05d4b582..4e86de6d70653 100644 --- a/test/functional/apps/management/_index_patterns_empty.ts +++ b/test/functional/apps/management/_index_patterns_empty.ts @@ -19,7 +19,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('index pattern empty view', () => { before(async () => { - await esArchiver.load('empty_kibana'); + await esArchiver.emptyKibanaIndex(); await esArchiver.unload('logstash_functional'); await esArchiver.unload('makelogs'); await kibanaServer.uiSettings.replace({}); @@ -27,7 +27,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); after(async () => { - await esArchiver.unload('empty_kibana'); await esArchiver.loadIfNeeded('makelogs'); // @ts-expect-error await es.transport.request({ diff --git a/test/functional/apps/management/_mgmt_import_saved_objects.js b/test/functional/apps/management/_mgmt_import_saved_objects.js index 45a18d5932764..87eca2c7a5a65 100644 --- a/test/functional/apps/management/_mgmt_import_saved_objects.js +++ b/test/functional/apps/management/_mgmt_import_saved_objects.js @@ -18,14 +18,13 @@ export default function ({ getService, getPageObjects }) { describe('mgmt saved objects', function describeIndexTests() { beforeEach(async function () { - await esArchiver.load('empty_kibana'); + await esArchiver.emptyKibanaIndex(); await esArchiver.load('discover'); await PageObjects.settings.navigateTo(); }); afterEach(async function () { await esArchiver.unload('discover'); - await esArchiver.load('empty_kibana'); }); it('should import saved objects mgmt', async function () { diff --git a/test/functional/apps/management/_test_huge_fields.js b/test/functional/apps/management/_test_huge_fields.js index 2ab619276d2b9..c1fca31e695cb 100644 --- a/test/functional/apps/management/_test_huge_fields.js +++ b/test/functional/apps/management/_test_huge_fields.js @@ -20,6 +20,7 @@ export default function ({ getService, getPageObjects }) { const EXPECTED_FIELD_COUNT = '10006'; before(async function () { await security.testUser.setRoles(['kibana_admin', 'test_testhuge_reader']); + await esArchiver.emptyKibanaIndex(); await esArchiver.loadIfNeeded('large_fields'); await PageObjects.settings.createIndexPattern('testhuge', 'date'); }); diff --git a/test/functional/apps/management/index.ts b/test/functional/apps/management/index.ts index ca89853875027..06e652f9f3e59 100644 --- a/test/functional/apps/management/index.ts +++ b/test/functional/apps/management/index.ts @@ -14,13 +14,11 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { describe('management', function () { before(async () => { await esArchiver.unload('logstash_functional'); - await esArchiver.load('empty_kibana'); await esArchiver.loadIfNeeded('makelogs'); }); after(async () => { await esArchiver.unload('makelogs'); - await esArchiver.unload('empty_kibana'); }); describe('', function () { diff --git a/test/functional/apps/visualize/input_control_vis/input_control_range.ts b/test/functional/apps/visualize/input_control_vis/input_control_range.ts index 9b48e78246b37..613b1a162eb63 100644 --- a/test/functional/apps/visualize/input_control_vis/input_control_range.ts +++ b/test/functional/apps/visualize/input_control_vis/input_control_range.ts @@ -12,7 +12,6 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const kibanaServer = getService('kibanaServer'); const find = getService('find'); const security = getService('security'); const { visualize, visEditor } = getPageObjects(['visualize', 'visEditor']); @@ -53,7 +52,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.loadIfNeeded('logstash_functional'); await esArchiver.loadIfNeeded('long_window_logstash'); await esArchiver.load('visualize'); - await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); await security.testUser.restoreDefaults(); }); }); diff --git a/test/plugin_functional/test_suites/core_plugins/applications.ts b/test/plugin_functional/test_suites/core_plugins/applications.ts index e72d032f63469..52924d8c93280 100644 --- a/test/plugin_functional/test_suites/core_plugins/applications.ts +++ b/test/plugin_functional/test_suites/core_plugins/applications.ts @@ -19,6 +19,7 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide const find = getService('find'); const retry = getService('retry'); const deployment = getService('deployment'); + const esArchiver = getService('esArchiver'); const loadingScreenNotShown = async () => expect(await testSubjects.exists('kbnLoadingMessage')).to.be(false); @@ -50,6 +51,7 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide describe('ui applications', function describeIndexTests() { before(async () => { + await esArchiver.emptyKibanaIndex(); await PageObjects.common.navigateToApp('foo'); }); diff --git a/test/plugin_functional/test_suites/data_plugin/index_patterns.ts b/test/plugin_functional/test_suites/data_plugin/index_patterns.ts index ba12e2df16d41..0cd53a5e1b764 100644 --- a/test/plugin_functional/test_suites/data_plugin/index_patterns.ts +++ b/test/plugin_functional/test_suites/data_plugin/index_patterns.ts @@ -12,8 +12,12 @@ import '../../plugins/core_provider_plugin/types'; export default function ({ getService }: PluginFunctionalProviderContext) { const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); describe('index patterns', function () { + before(async () => { + await esArchiver.emptyKibanaIndex(); + }); let indexPatternId = ''; it('can create an index pattern', async () => { diff --git a/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts b/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts index 71663b19b35cb..b60e4b4a1d8b7 100644 --- a/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts +++ b/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts @@ -10,10 +10,15 @@ import path from 'path'; import expect from '@kbn/expect'; import { PluginFunctionalProviderContext } from '../../services'; -export default function ({ getPageObjects }: PluginFunctionalProviderContext) { +export default function ({ getPageObjects, getService }: PluginFunctionalProviderContext) { const PageObjects = getPageObjects(['common', 'settings', 'header', 'savedObjects']); + const esArchiver = getService('esArchiver'); describe('import warnings', () => { + before(async () => { + await esArchiver.emptyKibanaIndex(); + }); + beforeEach(async () => { await PageObjects.settings.navigateTo(); await PageObjects.settings.clickKibanaSavedObjects(); diff --git a/test/security_functional/insecure_cluster_warning.ts b/test/security_functional/insecure_cluster_warning.ts index 181c4cf2b46b7..2f7656b743a51 100644 --- a/test/security_functional/insecure_cluster_warning.ts +++ b/test/security_functional/insecure_cluster_warning.ts @@ -31,6 +31,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await browser.setLocalStorageItem('insecureClusterWarningVisibility', ''); await esArchiver.unload('hamlet'); + await esArchiver.emptyKibanaIndex(); }); it('should not warn when the cluster contains no user data', async () => { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts index 8ed979a171169..2a256266697e6 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts @@ -11,10 +11,6 @@ import { setupSpacesAndUsers, tearDown } from '..'; export default function alertingTests({ loadTestFile, getService }: FtrProviderContext) { describe('Alerts', () => { describe('legacy alerts', () => { - before(async () => { - await setupSpacesAndUsers(getService); - }); - after(async () => { await tearDown(getService); }); diff --git a/x-pack/test/functional/apps/dashboard/_async_dashboard.ts b/x-pack/test/functional/apps/dashboard/_async_dashboard.ts index 8851c83dea1ff..fceccb4609bd7 100644 --- a/x-pack/test/functional/apps/dashboard/_async_dashboard.ts +++ b/x-pack/test/functional/apps/dashboard/_async_dashboard.ts @@ -12,6 +12,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); + const esArchiver = getService('esArchiver'); const log = getService('log'); const pieChart = getService('pieChart'); const find = getService('find'); @@ -29,6 +30,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('sample data dashboard', function describeIndexTests() { before(async () => { + await esArchiver.emptyKibanaIndex(); await PageObjects.common.sleep(5000); await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, diff --git a/x-pack/test/functional/es_archives/visualize/default/data.json b/x-pack/test/functional/es_archives/visualize/default/data.json index fe29bad0fa381..26b033e28b4da 100644 --- a/x-pack/test/functional/es_archives/visualize/default/data.json +++ b/x-pack/test/functional/es_archives/visualize/default/data.json @@ -125,26 +125,8 @@ { "type": "doc", "value": { - "id": "custom-space:index-pattern:metricbeat-*", - "index": ".kibana_1", - "source": { - "index-pattern": { - "fieldFormatMap": "{\"aerospike.namespace.device.available.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.device.free.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.device.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.device.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.free.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.memory.used.data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.index.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.sindex.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"aws.rds.disk_usage.bin_log.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.free_local_storage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.free_storage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.freeable_memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.latency.commit\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.ddl\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.dml\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.insert\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.read\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.select\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.update\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.write\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.replica_lag.sec\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.swap_usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.volume_used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_daily_storage.bucket.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.downloaded.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.latency.first_byte.ms\":{\"id\":\"duration\",\"params\":{}},\"aws.s3_request.latency.total_request.ms\":{\"id\":\"duration\",\"params\":{}},\"aws.s3_request.requests.select_returned.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.requests.select_scanned.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.uploaded.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.sqs.oldest_message_age.sec\":{\"id\":\"duration\",\"params\":{}},\"aws.sqs.sent_message_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.degraded.ratio\":{\"id\":\"percent\",\"params\":{}},\"ceph.cluster_status.misplace.ratio\":{\"id\":\"percent\",\"params\":{}},\"ceph.cluster_status.pg.avail_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.data_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.total_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.used_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.traffic.read_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.traffic.write_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.log.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.misc.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.sst.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.total.byte\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.used.byte\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.used.pct\":{\"id\":\"percent\",\"params\":{}},\"ceph.pool_disk.stats.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.pool_disk.stats.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"client.bytes\":{\"id\":\"bytes\",\"params\":{}},\"client.nat.port\":{\"id\":\"string\",\"params\":{}},\"client.port\":{\"id\":\"string\",\"params\":{}},\"coredns.stats.dns.request.duration.ns.sum\":{\"id\":\"duration\",\"params\":{}},\"couchbase.bucket.data.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.disk.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.quota.ram.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.quota.use.pct\":{\"id\":\"percent\",\"params\":{}},\"couchbase.cluster.hdd.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.quota.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.used.by_data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.total.per_node.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.total.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.used.per_node.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.used.by_data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.couch.docs.data_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.couch.docs.disk_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.mcd_memory.allocated.bytes\":{\"id\":\"bytes\",\"params\":{}},\"destination.bytes\":{\"id\":\"bytes\",\"params\":{}},\"destination.nat.port\":{\"id\":\"string\",\"params\":{}},\"destination.port\":{\"id\":\"string\",\"params\":{}},\"docker.cpu.core.*.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.kernel.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.system.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.user.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.diskio.summary.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.commit.peak\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.commit.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.limit\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.private_working_set.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.rss.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.memory.rss.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.usage.max\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.usage.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.memory.usage.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.inbound.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.outbound.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.primaries.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.primaries.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.total.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.total.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.total.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.total.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.heap.init.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.heap.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.nonheap.init.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.nonheap.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.indices.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.disk.mvcc_db_total_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.memory.go_memstats_alloc.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.network.client_grpc_received.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.network.client_grpc_sent.bytes\":{\"id\":\"bytes\",\"params\":{}},\"event.duration\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"nanoseconds\",\"outputFormat\":\"asMilliseconds\",\"outputPrecision\":1}},\"event.sequence\":{\"id\":\"string\",\"params\":{}},\"event.severity\":{\"id\":\"string\",\"params\":{}},\"golang.heap.allocations.active\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.allocated\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.idle\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.total\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.gc.next_gc_limit\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.obtained\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.released\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.stack\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.total\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.info.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"haproxy.info.memory.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.info.ssl.frontend.session_reuse.pct\":{\"id\":\"percent\",\"params\":{}},\"haproxy.stat.compressor.bypassed.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.response.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.throttle.pct\":{\"id\":\"percent\",\"params\":{}},\"http.request.body.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.request.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.body.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.status_code\":{\"id\":\"string\",\"params\":{}},\"kibana.stats.process.memory.heap.size_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kibana.stats.process.memory.heap.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kibana.stats.process.memory.heap.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.cpu.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.cpu.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.logs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.logs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.logs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.request.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.memory.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.allocatable.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.network.rx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.network.tx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.cpu.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.cpu.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.working_set.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.network.rx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.network.tx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.avg_obj_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.data_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.extent_free_list.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.file_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.index_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.storage_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.replstatus.headroom.max\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.headroom.min\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.lag.max\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.lag.min\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.oplog.size.allocated\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.replstatus.oplog.size.used\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.extra_info.heap_usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.dirty.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.maximum.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.max_file_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mysql.status.bytes.received\":{\"id\":\"bytes\",\"params\":{}},\"mysql.status.bytes.sent\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.cpu\":{\"id\":\"percent\",\"params\":{}},\"nats.stats.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.mem.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.uptime\":{\"id\":\"duration\",\"params\":{}},\"nats.subscriptions.cache.hit_rate\":{\"id\":\"percent\",\"params\":{}},\"network.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"process.pgid\":{\"id\":\"string\",\"params\":{}},\"process.pid\":{\"id\":\"string\",\"params\":{}},\"process.ppid\":{\"id\":\"string\",\"params\":{}},\"process.thread.id\":{\"id\":\"string\",\"params\":{}},\"rabbitmq.connection.frame_max\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.disk.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.disk.free.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.gc.reclaimed.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.io.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.io.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.mem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.queue.consumers.utilisation.pct\":{\"id\":\"percent\",\"params\":{}},\"rabbitmq.queue.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.active\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.allocated\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.fragmentation.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.resident\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.fragmentation.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.max.value\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.dataset\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.lua\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.peak\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.rss\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.value\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.buffer.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.copy_on_write.last_size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.rewrite.buffer.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.rewrite.current_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.aof.rewrite.last_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.aof.size.base\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.size.current\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.rdb.bgsave.current_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.rdb.bgsave.last_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.rdb.copy_on_write.last_size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.replication.backlog.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.replication.master.last_io_seconds_ago\":{\"id\":\"duration\",\"params\":{}},\"redis.info.replication.master.sync.last_io_seconds_ago\":{\"id\":\"duration\",\"params\":{}},\"redis.info.replication.master.sync.left_bytes\":{\"id\":\"bytes\",\"params\":{}},\"server.bytes\":{\"id\":\"bytes\",\"params\":{}},\"server.nat.port\":{\"id\":\"string\",\"params\":{}},\"server.port\":{\"id\":\"string\",\"params\":{}},\"source.bytes\":{\"id\":\"bytes\",\"params\":{}},\"source.nat.port\":{\"id\":\"string\",\"params\":{}},\"source.port\":{\"id\":\"string\",\"params\":{}},\"system.core.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.iowait.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.irq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.nice.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.softirq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.steal.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.system.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.user.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.idle.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.iowait.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.iowait.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.irq.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.irq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.nice.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.nice.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.softirq.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.softirq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.steal.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.steal.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.system.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.system.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.total.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.user.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.user.pct\":{\"id\":\"percent\",\"params\":{}},\"system.diskio.iostat.read.per_sec.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.iostat.write.per_sec.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.entropy.pct\":{\"id\":\"percent\",\"params\":{}},\"system.filesystem.available\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.free\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.total\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.fsstat.total_size.free\":{\"id\":\"bytes\",\"params\":{}},\"system.fsstat.total_size.total\":{\"id\":\"bytes\",\"params\":{}},\"system.fsstat.total_size.used\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.default_size\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.free\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.reserved\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.surplus\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.total\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.swap.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.total\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.total\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.blkio.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.active_anon.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.active_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.cache.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.hierarchical_memory_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.hierarchical_memsw_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.inactive_anon.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.inactive_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.mapped_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.rss_huge.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.swap.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.unevictable.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cpu.total.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.memory.rss.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.memory.share\":{\"id\":\"bytes\",\"params\":{}},\"system.process.memory.size\":{\"id\":\"bytes\",\"params\":{}},\"system.socket.summary.tcp.memory\":{\"id\":\"bytes\",\"params\":{}},\"system.socket.summary.udp.memory\":{\"id\":\"bytes\",\"params\":{}},\"system.uptime.duration.ms\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"milliseconds\"}},\"url.port\":{\"id\":\"string\",\"params\":{}},\"vsphere.datastore.capacity.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.used.pct\":{\"id\":\"percent\",\"params\":{}},\"vsphere.host.memory.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.host.memory.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.host.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.free.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.total.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.used.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.used.host.bytes\":{\"id\":\"bytes\",\"params\":{}},\"windows.service.uptime.ms\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"milliseconds\"}}}", - "timeFieldName": "@timestamp", - "title": "metricbeat-*" - }, - "migrationVersion": { - "index-pattern": "7.6.0" - }, - "type": "index-pattern", - "updated_at": "2020-01-22T15:34:59.061Z" - } - } -} - -{ - "type": "doc", - "value": { + "index": ".kibana", + "type": "doc", "id": "index-pattern:logstash-*", "index": ".kibana_1", "source": { @@ -297,4 +279,4 @@ "updated_at": "2019-07-17T17:54:26.378Z" } } -} \ No newline at end of file +} diff --git a/x-pack/test/reporting_api_integration/reporting_without_security.config.ts b/x-pack/test/reporting_api_integration/reporting_without_security.config.ts index 11182bbcdb3b0..4a95a15169b59 100644 --- a/x-pack/test/reporting_api_integration/reporting_without_security.config.ts +++ b/x-pack/test/reporting_api_integration/reporting_without_security.config.ts @@ -32,7 +32,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { kbnTestServer: { ...apiConfig.get('kbnTestServer'), serverArgs: [ - `--migrations.enableV2=false`, `--elasticsearch.hosts=${formatUrl(esTestConfig.getUrlParts())}`, `--logging.json=false`, `--server.maxPayloadBytes=1679958`, From 688b918888a4d9956652394ad09b65b05a63a27e Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Mon, 1 Feb 2021 16:00:48 +0100 Subject: [PATCH 31/85] migrate legacy_export plugin to tsproject ref (#89858) --- src/plugins/legacy_export/tsconfig.json | 16 ++++++++++++++++ test/tsconfig.json | 8 +++++++- tsconfig.json | 2 ++ tsconfig.refs.json | 3 ++- x-pack/test/tsconfig.json | 5 +++-- x-pack/tsconfig.json | 11 ++++++----- 6 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 src/plugins/legacy_export/tsconfig.json diff --git a/src/plugins/legacy_export/tsconfig.json b/src/plugins/legacy_export/tsconfig.json new file mode 100644 index 0000000000000..ec006d492499e --- /dev/null +++ b/src/plugins/legacy_export/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true + }, + "include": [ + "server/**/*", + ], + "references": [ + { "path": "../../core/tsconfig.json" } + ] +} diff --git a/test/tsconfig.json b/test/tsconfig.json index c8e6e69586ca0..4df74f526077e 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -4,7 +4,12 @@ "incremental": false, "types": ["node", "flot"] }, - "include": ["**/*", "../typings/elastic__node_crypto.d.ts", "typings/**/*", "../packages/kbn-test/types/ftr_globals/**/*"], + "include": [ + "**/*", + "../typings/elastic__node_crypto.d.ts", + "typings/**/*", + "../packages/kbn-test/types/ftr_globals/**/*" + ], "exclude": ["plugin_functional/plugins/**/*", "interpreter_functional/plugins/**/*"], "references": [ { "path": "../src/core/tsconfig.json" }, @@ -34,5 +39,6 @@ { "path": "../src/plugins/ui_actions/tsconfig.json" }, { "path": "../src/plugins/url_forwarding/tsconfig.json" }, { "path": "../src/plugins/usage_collection/tsconfig.json" }, + { "path": "../src/plugins/legacy_export/tsconfig.json" } ] } diff --git a/tsconfig.json b/tsconfig.json index d8fb2804242bc..ee46e075f2df1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,6 +27,7 @@ "src/plugins/kibana_react/**/*", "src/plugins/kibana_usage_collection/**/*", "src/plugins/kibana_utils/**/*", + "src/plugins/legacy_export/**/*", "src/plugins/management/**/*", "src/plugins/maps_legacy/**/*", "src/plugins/navigation/**/*", @@ -85,6 +86,7 @@ { "path": "./src/plugins/kibana_react/tsconfig.json" }, { "path": "./src/plugins/kibana_usage_collection/tsconfig.json" }, { "path": "./src/plugins/kibana_utils/tsconfig.json" }, + { "path": "./src/plugins/legacy_export/tsconfig.json" }, { "path": "./src/plugins/management/tsconfig.json" }, { "path": "./src/plugins/maps_legacy/tsconfig.json" }, { "path": "./src/plugins/navigation/tsconfig.json" }, diff --git a/tsconfig.refs.json b/tsconfig.refs.json index 9a65b385b7820..16c5b6c116998 100644 --- a/tsconfig.refs.json +++ b/tsconfig.refs.json @@ -20,6 +20,7 @@ { "path": "./src/plugins/kibana_react/tsconfig.json" }, { "path": "./src/plugins/kibana_usage_collection/tsconfig.json" }, { "path": "./src/plugins/kibana_utils/tsconfig.json" }, + { "path": "./src/plugins/legacy_export/tsconfig.json" }, { "path": "./src/plugins/management/tsconfig.json" }, { "path": "./src/plugins/maps_legacy/tsconfig.json" }, { "path": "./src/plugins/navigation/tsconfig.json" }, @@ -51,6 +52,6 @@ { "path": "./src/plugins/vis_type_vega/tsconfig.json" }, { "path": "./src/plugins/vis_type_xy/tsconfig.json" }, { "path": "./src/plugins/visualizations/tsconfig.json" }, - { "path": "./src/plugins/visualize/tsconfig.json" }, + { "path": "./src/plugins/visualize/tsconfig.json" } ] } diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 5232af0dd304b..12cd2896faaa8 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -24,6 +24,7 @@ { "path": "../../src/plugins/kibana_react/tsconfig.json" }, { "path": "../../src/plugins/kibana_usage_collection/tsconfig.json" }, { "path": "../../src/plugins/kibana_utils/tsconfig.json" }, + { "path": "../../src/plugins/legacy_export/tsconfig.json" }, { "path": "../../src/plugins/navigation/tsconfig.json" }, { "path": "../../src/plugins/newsfeed/tsconfig.json" }, { "path": "../../src/plugins/saved_objects/tsconfig.json" }, @@ -36,8 +37,8 @@ { "path": "../../src/plugins/ui_actions/tsconfig.json" }, { "path": "../../src/plugins/url_forwarding/tsconfig.json" }, - { "path": "../plugins/actions/tsconfig.json"}, - { "path": "../plugins/alerts/tsconfig.json"}, + { "path": "../plugins/actions/tsconfig.json" }, + { "path": "../plugins/alerts/tsconfig.json" }, { "path": "../plugins/console_extensions/tsconfig.json" }, { "path": "../plugins/data_enhanced/tsconfig.json" }, { "path": "../plugins/enterprise_search/tsconfig.json" }, diff --git a/x-pack/tsconfig.json b/x-pack/tsconfig.json index 1be6b5cf84cda..85e285f3c83ac 100644 --- a/x-pack/tsconfig.json +++ b/x-pack/tsconfig.json @@ -67,6 +67,7 @@ { "path": "../src/plugins/kibana_react/tsconfig.json" }, { "path": "../src/plugins/kibana_usage_collection/tsconfig.json" }, { "path": "../src/plugins/kibana_utils/tsconfig.json" }, + { "path": "../src/plugins/legacy_export/tsconfig.json" }, { "path": "../src/plugins/management/tsconfig.json" }, { "path": "../src/plugins/navigation/tsconfig.json" }, { "path": "../src/plugins/newsfeed/tsconfig.json" }, @@ -82,8 +83,8 @@ { "path": "../src/plugins/ui_actions/tsconfig.json" }, { "path": "../src/plugins/url_forwarding/tsconfig.json" }, { "path": "../src/plugins/usage_collection/tsconfig.json" }, - { "path": "./plugins/actions/tsconfig.json"}, - { "path": "./plugins/alerts/tsconfig.json"}, + { "path": "./plugins/actions/tsconfig.json" }, + { "path": "./plugins/alerts/tsconfig.json" }, { "path": "./plugins/beats_management/tsconfig.json" }, { "path": "./plugins/canvas/tsconfig.json" }, { "path": "./plugins/cloud/tsconfig.json" }, @@ -110,12 +111,12 @@ { "path": "./plugins/searchprofiler/tsconfig.json" }, { "path": "./plugins/security/tsconfig.json" }, { "path": "./plugins/spaces/tsconfig.json" }, - { "path": "./plugins/stack_alerts/tsconfig.json"}, + { "path": "./plugins/stack_alerts/tsconfig.json" }, { "path": "./plugins/task_manager/tsconfig.json" }, { "path": "./plugins/telemetry_collection_xpack/tsconfig.json" }, { "path": "./plugins/translations/tsconfig.json" }, - { "path": "./plugins/triggers_actions_ui/tsconfig.json"}, + { "path": "./plugins/triggers_actions_ui/tsconfig.json" }, { "path": "./plugins/ui_actions_enhanced/tsconfig.json" }, - { "path": "./plugins/watcher/tsconfig.json" }, + { "path": "./plugins/watcher/tsconfig.json" } ] } From 57453f1709970b2bdf219b5bef8f408fb0a9ec41 Mon Sep 17 00:00:00 2001 From: ymao1 Date: Mon, 1 Feb 2021 10:17:59 -0500 Subject: [PATCH 32/85] Some fixes from backport (#89746) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../stack_alerts/common/build_sorted_events_query.ts | 4 ++-- .../server/alert_types/es_query/alert_type.ts | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/stack_alerts/common/build_sorted_events_query.ts b/x-pack/plugins/stack_alerts/common/build_sorted_events_query.ts index 92425433bf814..b9a65cf1a7489 100644 --- a/x-pack/plugins/stack_alerts/common/build_sorted_events_query.ts +++ b/x-pack/plugins/stack_alerts/common/build_sorted_events_query.ts @@ -87,7 +87,7 @@ export const buildSortedEventsQuery = ({ ...searchQuery.body, search_after: [searchAfterSortId], }, - }; + } as ESSearchRequest; } - return searchQuery; + return searchQuery as ESSearchRequest; }; diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/alert_type.ts b/x-pack/plugins/stack_alerts/server/alert_types/es_query/alert_type.ts index b8190340c4d68..a0da622a73cee 100644 --- a/x-pack/plugins/stack_alerts/server/alert_types/es_query/alert_type.ts +++ b/x-pack/plugins/stack_alerts/server/alert_types/es_query/alert_type.ts @@ -175,7 +175,17 @@ export function getAlertType( { bool: { must_not: [ - { bool: { filter: [{ range: { [params.timeField]: { lte: timestamp } } }] } }, + { + bool: { + filter: [ + { + range: { + [params.timeField]: { lte: new Date(timestamp).toISOString() }, + }, + }, + ], + }, + }, ], }, }, From 19332c097a3849b52aafd17970566d4808f0f1e9 Mon Sep 17 00:00:00 2001 From: Josh Dover <1813008+joshdover@users.noreply.github.com> Date: Mon, 1 Feb 2021 16:40:25 +0100 Subject: [PATCH 33/85] Deprecate and remove usages of elasticsearch.logQueries (#89296) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- ...n-core-server.elasticsearchclientconfig.md | 2 +- ...e-server.elasticsearchconfig.logqueries.md | 13 -- ...-plugin-core-server.elasticsearchconfig.md | 1 - ...erver.legacyclusterclient._constructor_.md | 3 +- ...-plugin-core-server.legacyclusterclient.md | 2 +- ...-server.legacyelasticsearchclientconfig.md | 2 +- docs/setup/settings.asciidoc | 2 +- .../client/client_config.test.ts | 1 - .../elasticsearch/client/client_config.ts | 1 - .../client/cluster_client.test.ts | 84 ++++++--- .../elasticsearch/client/cluster_client.ts | 5 +- .../client/configure_client.test.ts | 174 +++--------------- .../elasticsearch/client/configure_client.ts | 14 +- .../elasticsearch_config.test.ts | 1 - .../elasticsearch/elasticsearch_config.ts | 11 +- .../elasticsearch_service.test.ts | 12 +- .../elasticsearch/elasticsearch_service.ts | 6 +- .../legacy/cluster_client.test.ts | 91 ++++++--- .../elasticsearch/legacy/cluster_client.ts | 5 +- .../elasticsearch_client_config.test.ts | 99 +++------- .../legacy/elasticsearch_client_config.ts | 14 +- src/core/server/server.api.md | 7 +- .../server/es_client/instantiate_client.ts | 1 - 23 files changed, 216 insertions(+), 335 deletions(-) delete mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.logqueries.md diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchclientconfig.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchclientconfig.md index 1ba359e81b9c6..a854e5ddad19a 100644 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchclientconfig.md +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchclientconfig.md @@ -9,7 +9,7 @@ Configuration options to be used to create a [cluster client](./kibana-plugin-co Signature: ```typescript -export declare type ElasticsearchClientConfig = Pick & { +export declare type ElasticsearchClientConfig = Pick & { pingTimeout?: ElasticsearchConfig['pingTimeout'] | ClientOptions['pingTimeout']; requestTimeout?: ElasticsearchConfig['requestTimeout'] | ClientOptions['requestTimeout']; ssl?: Partial; diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.logqueries.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.logqueries.md deleted file mode 100644 index 001fb7bfeeb97..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.logqueries.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchConfig](./kibana-plugin-core-server.elasticsearchconfig.md) > [logQueries](./kibana-plugin-core-server.elasticsearchconfig.logqueries.md) - -## ElasticsearchConfig.logQueries property - -Specifies whether all queries to the client should be logged (status code, method, query etc.). - -Signature: - -```typescript -readonly logQueries: boolean; -``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.md index 5ec3ce7f41859..d87ea63d59b8d 100644 --- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.md +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchconfig.md @@ -27,7 +27,6 @@ export declare class ElasticsearchConfig | [healthCheckDelay](./kibana-plugin-core-server.elasticsearchconfig.healthcheckdelay.md) | | Duration | The interval between health check requests Kibana sends to the Elasticsearch. | | [hosts](./kibana-plugin-core-server.elasticsearchconfig.hosts.md) | | string[] | Hosts that the client will connect to. If sniffing is enabled, this list will be used as seeds to discover the rest of your cluster. | | [ignoreVersionMismatch](./kibana-plugin-core-server.elasticsearchconfig.ignoreversionmismatch.md) | | boolean | Whether to allow kibana to connect to a non-compatible elasticsearch node. | -| [logQueries](./kibana-plugin-core-server.elasticsearchconfig.logqueries.md) | | boolean | Specifies whether all queries to the client should be logged (status code, method, query etc.). | | [password](./kibana-plugin-core-server.elasticsearchconfig.password.md) | | string | If Elasticsearch is protected with basic authentication, this setting provides the password that the Kibana server uses to perform its administrative functions. | | [pingTimeout](./kibana-plugin-core-server.elasticsearchconfig.pingtimeout.md) | | Duration | Timeout after which PING HTTP request will be aborted and retried. | | [requestHeadersWhitelist](./kibana-plugin-core-server.elasticsearchconfig.requestheaderswhitelist.md) | | string[] | List of Kibana client-side headers to send to Elasticsearch when request scoped cluster client is used. If this is an empty array then \*no\* client-side will be sent. | diff --git a/docs/development/core/server/kibana-plugin-core-server.legacyclusterclient._constructor_.md b/docs/development/core/server/kibana-plugin-core-server.legacyclusterclient._constructor_.md index 823f34bd7dd23..ed2763d980279 100644 --- a/docs/development/core/server/kibana-plugin-core-server.legacyclusterclient._constructor_.md +++ b/docs/development/core/server/kibana-plugin-core-server.legacyclusterclient._constructor_.md @@ -9,7 +9,7 @@ Constructs a new instance of the `LegacyClusterClient` class Signature: ```typescript -constructor(config: LegacyElasticsearchClientConfig, log: Logger, getAuthHeaders?: GetAuthHeaders); +constructor(config: LegacyElasticsearchClientConfig, log: Logger, type: string, getAuthHeaders?: GetAuthHeaders); ``` ## Parameters @@ -18,5 +18,6 @@ constructor(config: LegacyElasticsearchClientConfig, log: Logger, getAuthHeaders | --- | --- | --- | | config | LegacyElasticsearchClientConfig | | | log | Logger | | +| type | string | | | getAuthHeaders | GetAuthHeaders | | diff --git a/docs/development/core/server/kibana-plugin-core-server.legacyclusterclient.md b/docs/development/core/server/kibana-plugin-core-server.legacyclusterclient.md index d24aeb44ca86a..0872e5ba7c219 100644 --- a/docs/development/core/server/kibana-plugin-core-server.legacyclusterclient.md +++ b/docs/development/core/server/kibana-plugin-core-server.legacyclusterclient.md @@ -21,7 +21,7 @@ export declare class LegacyClusterClient implements ILegacyClusterClient | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(config, log, getAuthHeaders)](./kibana-plugin-core-server.legacyclusterclient._constructor_.md) | | Constructs a new instance of the LegacyClusterClient class | +| [(constructor)(config, log, type, getAuthHeaders)](./kibana-plugin-core-server.legacyclusterclient._constructor_.md) | | Constructs a new instance of the LegacyClusterClient class | ## Properties diff --git a/docs/development/core/server/kibana-plugin-core-server.legacyelasticsearchclientconfig.md b/docs/development/core/server/kibana-plugin-core-server.legacyelasticsearchclientconfig.md index 78f7bf582d355..b028a09bee453 100644 --- a/docs/development/core/server/kibana-plugin-core-server.legacyelasticsearchclientconfig.md +++ b/docs/development/core/server/kibana-plugin-core-server.legacyelasticsearchclientconfig.md @@ -11,7 +11,7 @@ Signature: ```typescript -export declare type LegacyElasticsearchClientConfig = Pick & Pick & { +export declare type LegacyElasticsearchClientConfig = Pick & Pick & { pingTimeout?: ElasticsearchConfig['pingTimeout'] | ConfigOptions['pingTimeout']; requestTimeout?: ElasticsearchConfig['requestTimeout'] | ConfigOptions['requestTimeout']; sniffInterval?: ElasticsearchConfig['sniffInterval'] | ConfigOptions['sniffInterval']; diff --git a/docs/setup/settings.asciidoc b/docs/setup/settings.asciidoc index 26f095c59c644..ecdb41c897b12 100644 --- a/docs/setup/settings.asciidoc +++ b/docs/setup/settings.asciidoc @@ -59,7 +59,7 @@ To enable SSL/TLS for outbound connections to {es}, use the `https` protocol in this setting. | `elasticsearch.logQueries:` - | Log queries sent to {es}. Requires <> set to `true`. + | *deprecated* This setting is no longer used and will get removed in Kibana 8.0. Instead, set <> to `true` This is useful for seeing the query DSL generated by applications that currently do not have an inspector, for example Timelion and Monitoring. *Default: `false`* diff --git a/src/core/server/elasticsearch/client/client_config.test.ts b/src/core/server/elasticsearch/client/client_config.test.ts index 57bc7407a9a0f..768d165d5f8be 100644 --- a/src/core/server/elasticsearch/client/client_config.test.ts +++ b/src/core/server/elasticsearch/client/client_config.test.ts @@ -15,7 +15,6 @@ const createConfig = ( ): ElasticsearchClientConfig => { return { customHeaders: {}, - logQueries: false, sniffOnStart: false, sniffOnConnectionFault: false, sniffInterval: false, diff --git a/src/core/server/elasticsearch/client/client_config.ts b/src/core/server/elasticsearch/client/client_config.ts index 5762ef16704a5..01d2222a45e3a 100644 --- a/src/core/server/elasticsearch/client/client_config.ts +++ b/src/core/server/elasticsearch/client/client_config.ts @@ -22,7 +22,6 @@ import { DEFAULT_HEADERS } from '../default_headers'; export type ElasticsearchClientConfig = Pick< ElasticsearchConfig, | 'customHeaders' - | 'logQueries' | 'sniffOnStart' | 'sniffOnConnectionFault' | 'requestHeadersWhitelist' diff --git a/src/core/server/elasticsearch/client/cluster_client.test.ts b/src/core/server/elasticsearch/client/cluster_client.test.ts index b94bf08f1185b..1d6d373ec185c 100644 --- a/src/core/server/elasticsearch/client/cluster_client.test.ts +++ b/src/core/server/elasticsearch/client/cluster_client.test.ts @@ -19,7 +19,6 @@ const createConfig = ( parts: Partial = {} ): ElasticsearchClientConfig => { return { - logQueries: false, sniffOnStart: false, sniffOnConnectionFault: false, sniffInterval: false, @@ -57,16 +56,25 @@ describe('ClusterClient', () => { it('creates a single internal and scoped client during initialization', () => { const config = createConfig(); - new ClusterClient(config, logger, getAuthHeaders); + new ClusterClient(config, logger, 'custom-type', getAuthHeaders); expect(configureClientMock).toHaveBeenCalledTimes(2); - expect(configureClientMock).toHaveBeenCalledWith(config, { logger }); - expect(configureClientMock).toHaveBeenCalledWith(config, { logger, scoped: true }); + expect(configureClientMock).toHaveBeenCalledWith(config, { logger, type: 'custom-type' }); + expect(configureClientMock).toHaveBeenCalledWith(config, { + logger, + type: 'custom-type', + scoped: true, + }); }); describe('#asInternalUser', () => { it('returns the internal client', () => { - const clusterClient = new ClusterClient(createConfig(), logger, getAuthHeaders); + const clusterClient = new ClusterClient( + createConfig(), + logger, + 'custom-type', + getAuthHeaders + ); expect(clusterClient.asInternalUser).toBe(internalClient); }); @@ -74,7 +82,12 @@ describe('ClusterClient', () => { describe('#asScoped', () => { it('returns a scoped cluster client bound to the request', () => { - const clusterClient = new ClusterClient(createConfig(), logger, getAuthHeaders); + const clusterClient = new ClusterClient( + createConfig(), + logger, + 'custom-type', + getAuthHeaders + ); const request = httpServerMock.createKibanaRequest(); const scopedClusterClient = clusterClient.asScoped(request); @@ -87,7 +100,12 @@ describe('ClusterClient', () => { }); it('returns a distinct scoped cluster client on each call', () => { - const clusterClient = new ClusterClient(createConfig(), logger, getAuthHeaders); + const clusterClient = new ClusterClient( + createConfig(), + logger, + 'custom-type', + getAuthHeaders + ); const request = httpServerMock.createKibanaRequest(); const scopedClusterClient1 = clusterClient.asScoped(request); @@ -105,7 +123,7 @@ describe('ClusterClient', () => { }); getAuthHeaders.mockReturnValue({}); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({ headers: { foo: 'bar', @@ -130,7 +148,7 @@ describe('ClusterClient', () => { other: 'nope', }); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({}); clusterClient.asScoped(request); @@ -150,7 +168,7 @@ describe('ClusterClient', () => { other: 'nope', }); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({ headers: { authorization: 'override', @@ -175,7 +193,7 @@ describe('ClusterClient', () => { }); getAuthHeaders.mockReturnValue({}); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({}); clusterClient.asScoped(request); @@ -195,7 +213,7 @@ describe('ClusterClient', () => { const config = createConfig(); getAuthHeaders.mockReturnValue({}); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({ kibanaRequestState: { requestId: 'my-fake-id', requestUuid: 'ignore-this-id' }, }); @@ -223,7 +241,7 @@ describe('ClusterClient', () => { foo: 'auth', }); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({}); clusterClient.asScoped(request); @@ -249,7 +267,7 @@ describe('ClusterClient', () => { }); getAuthHeaders.mockReturnValue({}); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({ headers: { foo: 'request' }, }); @@ -276,7 +294,7 @@ describe('ClusterClient', () => { }); getAuthHeaders.mockReturnValue({}); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest(); clusterClient.asScoped(request); @@ -297,7 +315,7 @@ describe('ClusterClient', () => { }); getAuthHeaders.mockReturnValue({}); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({ headers: { [headerKey]: 'foo' }, }); @@ -321,7 +339,7 @@ describe('ClusterClient', () => { }); getAuthHeaders.mockReturnValue({}); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = httpServerMock.createKibanaRequest({ headers: { foo: 'request' }, kibanaRequestState: { requestId: 'from request', requestUuid: 'ignore-this-id' }, @@ -344,7 +362,7 @@ describe('ClusterClient', () => { }); getAuthHeaders.mockReturnValue({}); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = { headers: { authorization: 'auth', @@ -368,7 +386,7 @@ describe('ClusterClient', () => { authorization: 'auth', }); - const clusterClient = new ClusterClient(config, logger, getAuthHeaders); + const clusterClient = new ClusterClient(config, logger, 'custom-type', getAuthHeaders); const request = { headers: { foo: 'bar', @@ -387,7 +405,12 @@ describe('ClusterClient', () => { describe('#close', () => { it('closes both underlying clients', async () => { - const clusterClient = new ClusterClient(createConfig(), logger, getAuthHeaders); + const clusterClient = new ClusterClient( + createConfig(), + logger, + 'custom-type', + getAuthHeaders + ); await clusterClient.close(); @@ -398,7 +421,12 @@ describe('ClusterClient', () => { it('waits for both clients to close', async (done) => { expect.assertions(4); - const clusterClient = new ClusterClient(createConfig(), logger, getAuthHeaders); + const clusterClient = new ClusterClient( + createConfig(), + logger, + 'custom-type', + getAuthHeaders + ); let internalClientClosed = false; let scopedClientClosed = false; @@ -436,7 +464,12 @@ describe('ClusterClient', () => { }); it('return a rejected promise is any client rejects', async () => { - const clusterClient = new ClusterClient(createConfig(), logger, getAuthHeaders); + const clusterClient = new ClusterClient( + createConfig(), + logger, + 'custom-type', + getAuthHeaders + ); internalClient.close.mockRejectedValue(new Error('error closing client')); @@ -446,7 +479,12 @@ describe('ClusterClient', () => { }); it('does nothing after the first call', async () => { - const clusterClient = new ClusterClient(createConfig(), logger, getAuthHeaders); + const clusterClient = new ClusterClient( + createConfig(), + logger, + 'custom-type', + getAuthHeaders + ); await clusterClient.close(); diff --git a/src/core/server/elasticsearch/client/cluster_client.ts b/src/core/server/elasticsearch/client/cluster_client.ts index 87d59e7417aa9..7e6a7f8ae53e6 100644 --- a/src/core/server/elasticsearch/client/cluster_client.ts +++ b/src/core/server/elasticsearch/client/cluster_client.ts @@ -60,10 +60,11 @@ export class ClusterClient implements ICustomClusterClient { constructor( private readonly config: ElasticsearchClientConfig, logger: Logger, + type: string, private readonly getAuthHeaders: GetAuthHeaders = noop ) { - this.asInternalUser = configureClient(config, { logger }); - this.rootScopedClient = configureClient(config, { logger, scoped: true }); + this.asInternalUser = configureClient(config, { logger, type }); + this.rootScopedClient = configureClient(config, { logger, type, scoped: true }); } asScoped(request: ScopeableRequest) { diff --git a/src/core/server/elasticsearch/client/configure_client.test.ts b/src/core/server/elasticsearch/client/configure_client.test.ts index 3486c210de1f9..548dc44aa4965 100644 --- a/src/core/server/elasticsearch/client/configure_client.test.ts +++ b/src/core/server/elasticsearch/client/configure_client.test.ts @@ -76,14 +76,14 @@ describe('configureClient', () => { }); it('calls `parseClientOptions` with the correct parameters', () => { - configureClient(config, { logger, scoped: false }); + configureClient(config, { logger, type: 'test', scoped: false }); expect(parseClientOptionsMock).toHaveBeenCalledTimes(1); expect(parseClientOptionsMock).toHaveBeenCalledWith(config, false); parseClientOptionsMock.mockClear(); - configureClient(config, { logger, scoped: true }); + configureClient(config, { logger, type: 'test', scoped: true }); expect(parseClientOptionsMock).toHaveBeenCalledTimes(1); expect(parseClientOptionsMock).toHaveBeenCalledWith(config, true); @@ -95,7 +95,7 @@ describe('configureClient', () => { }; parseClientOptionsMock.mockReturnValue(parsedOptions); - const client = configureClient(config, { logger, scoped: false }); + const client = configureClient(config, { logger, type: 'test', scoped: false }); expect(ClientMock).toHaveBeenCalledTimes(1); expect(ClientMock).toHaveBeenCalledWith(parsedOptions); @@ -103,7 +103,7 @@ describe('configureClient', () => { }); it('listens to client on `response` events', () => { - const client = configureClient(config, { logger, scoped: false }); + const client = configureClient(config, { logger, type: 'test', scoped: false }); expect(client.on).toHaveBeenCalledTimes(1); expect(client.on).toHaveBeenCalledWith('response', expect.any(Function)); @@ -122,38 +122,15 @@ describe('configureClient', () => { }, }); } - describe('does not log whrn "logQueries: false"', () => { - it('response', () => { - const client = configureClient(config, { logger, scoped: false }); - const response = createResponseWithBody({ - seq_no_primary_term: true, - query: { - term: { user: 'kimchy' }, - }, - }); - - client.emit('response', null, response); - expect(loggingSystemMock.collect(logger).debug).toHaveLength(0); - }); - - it('error', () => { - const client = configureClient(config, { logger, scoped: false }); - - const response = createApiResponse({ body: {} }); - client.emit('response', new errors.TimeoutError('message', response), response); - expect(loggingSystemMock.collect(logger).error).toHaveLength(0); + describe('logs each query', () => { + it('creates a query logger context based on the `type` parameter', () => { + configureClient(createFakeConfig(), { logger, type: 'test123' }); + expect(logger.get).toHaveBeenCalledWith('query', 'test123'); }); - }); - describe('logs each queries if `logQueries` is true', () => { it('when request body is an object', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createResponseWithBody({ seq_no_primary_term: true, @@ -169,23 +146,13 @@ describe('configureClient', () => { "200 GET /foo?hello=dolly {\\"seq_no_primary_term\\":true,\\"query\\":{\\"term\\":{\\"user\\":\\"kimchy\\"}}}", - Object { - "tags": Array [ - "query", - ], - }, ], ] `); }); it('when request body is a string', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createResponseWithBody( JSON.stringify({ @@ -203,23 +170,13 @@ describe('configureClient', () => { "200 GET /foo?hello=dolly {\\"seq_no_primary_term\\":true,\\"query\\":{\\"term\\":{\\"user\\":\\"kimchy\\"}}}", - Object { - "tags": Array [ - "query", - ], - }, ], ] `); }); it('when request body is a buffer', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createResponseWithBody( Buffer.from( @@ -239,23 +196,13 @@ describe('configureClient', () => { "200 GET /foo?hello=dolly [buffer]", - Object { - "tags": Array [ - "query", - ], - }, ], ] `); }); it('when request body is a readable stream', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createResponseWithBody( Readable.from( @@ -275,23 +222,13 @@ describe('configureClient', () => { "200 GET /foo?hello=dolly [stream]", - Object { - "tags": Array [ - "query", - ], - }, ], ] `); }); it('when request body is not defined', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createResponseWithBody(); @@ -301,23 +238,13 @@ describe('configureClient', () => { Array [ "200 GET /foo?hello=dolly", - Object { - "tags": Array [ - "query", - ], - }, ], ] `); }); it('properly encode queries', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createApiResponse({ body: {}, @@ -336,23 +263,13 @@ describe('configureClient', () => { Array [ "200 GET /foo?city=M%C3%BCnich", - Object { - "tags": Array [ - "query", - ], - }, ], ] `); }); - it('logs queries even in case of errors if `logQueries` is true', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + it('logs queries even in case of errors', () => { + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createApiResponse({ statusCode: 500, @@ -375,7 +292,7 @@ describe('configureClient', () => { }); client.emit('response', new errors.ResponseError(response), response); - expect(loggingSystemMock.collect(logger).error).toMatchInlineSnapshot(` + expect(loggingSystemMock.collect(logger).debug).toMatchInlineSnapshot(` Array [ Array [ "500 @@ -386,40 +303,13 @@ describe('configureClient', () => { `); }); - it('does not log queries if `logQueries` is false', () => { - const client = configureClient( - createFakeConfig({ - logQueries: false, - }), - { logger, scoped: false } - ); - - const response = createApiResponse({ - body: {}, - statusCode: 200, - params: { - method: 'GET', - path: '/foo', - }, - }); - - client.emit('response', null, response); - - expect(logger.debug).not.toHaveBeenCalled(); - }); - - it('logs error when the client emits an @elastic/elasticsearch error', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + it('logs debug when the client emits an @elastic/elasticsearch error', () => { + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createApiResponse({ body: {} }); client.emit('response', new errors.TimeoutError('message', response), response); - expect(loggingSystemMock.collect(logger).error).toMatchInlineSnapshot(` + expect(loggingSystemMock.collect(logger).debug).toMatchInlineSnapshot(` Array [ Array [ "[TimeoutError]: message", @@ -428,13 +318,8 @@ describe('configureClient', () => { `); }); - it('logs error when the client emits an ResponseError returned by elasticsearch', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + it('logs debug when the client emits an ResponseError returned by elasticsearch', () => { + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); const response = createApiResponse({ statusCode: 400, @@ -453,7 +338,7 @@ describe('configureClient', () => { }); client.emit('response', new errors.ResponseError(response), response); - expect(loggingSystemMock.collect(logger).error).toMatchInlineSnapshot(` + expect(loggingSystemMock.collect(logger).debug).toMatchInlineSnapshot(` Array [ Array [ "400 @@ -464,12 +349,7 @@ describe('configureClient', () => { }); it('logs default error info when the error response body is empty', () => { - const client = configureClient( - createFakeConfig({ - logQueries: true, - }), - { logger, scoped: false } - ); + const client = configureClient(createFakeConfig(), { logger, type: 'test', scoped: false }); let response = createApiResponse({ statusCode: 400, @@ -484,7 +364,7 @@ describe('configureClient', () => { }); client.emit('response', new errors.ResponseError(response), response); - expect(loggingSystemMock.collect(logger).error).toMatchInlineSnapshot(` + expect(loggingSystemMock.collect(logger).debug).toMatchInlineSnapshot(` Array [ Array [ "400 @@ -493,7 +373,7 @@ describe('configureClient', () => { ] `); - logger.error.mockClear(); + logger.debug.mockClear(); response = createApiResponse({ statusCode: 400, @@ -506,7 +386,7 @@ describe('configureClient', () => { }); client.emit('response', new errors.ResponseError(response), response); - expect(loggingSystemMock.collect(logger).error).toMatchInlineSnapshot(` + expect(loggingSystemMock.collect(logger).debug).toMatchInlineSnapshot(` Array [ Array [ "400 diff --git a/src/core/server/elasticsearch/client/configure_client.ts b/src/core/server/elasticsearch/client/configure_client.ts index 00cbd1958d817..bac792d1293a6 100644 --- a/src/core/server/elasticsearch/client/configure_client.ts +++ b/src/core/server/elasticsearch/client/configure_client.ts @@ -15,12 +15,12 @@ import { parseClientOptions, ElasticsearchClientConfig } from './client_config'; export const configureClient = ( config: ElasticsearchClientConfig, - { logger, scoped = false }: { logger: Logger; scoped?: boolean } + { logger, type, scoped = false }: { logger: Logger; type: string; scoped?: boolean } ): Client => { const clientOptions = parseClientOptions(config, scoped); const client = new Client(clientOptions); - addLogging(client, logger, config.logQueries); + addLogging(client, logger.get('query', type)); return client; }; @@ -67,15 +67,13 @@ function getResponseMessage(event: RequestEvent): string { return `${event.statusCode}\n${params.method} ${url}${body}`; } -const addLogging = (client: Client, logger: Logger, logQueries: boolean) => { +const addLogging = (client: Client, logger: Logger) => { client.on('response', (error, event) => { - if (event && logQueries) { + if (event) { if (error) { - logger.error(getErrorMessage(error, event)); + logger.debug(getErrorMessage(error, event)); } else { - logger.debug(getResponseMessage(event), { - tags: ['query'], - }); + logger.debug(getResponseMessage(event)); } } }); diff --git a/src/core/server/elasticsearch/elasticsearch_config.test.ts b/src/core/server/elasticsearch/elasticsearch_config.test.ts index 803733fddb71c..e76de913a9d91 100644 --- a/src/core/server/elasticsearch/elasticsearch_config.test.ts +++ b/src/core/server/elasticsearch/elasticsearch_config.test.ts @@ -47,7 +47,6 @@ test('set correct defaults', () => { "http://localhost:9200", ], "ignoreVersionMismatch": false, - "logQueries": false, "password": undefined, "pingTimeout": "PT30S", "requestHeadersWhitelist": Array [ diff --git a/src/core/server/elasticsearch/elasticsearch_config.ts b/src/core/server/elasticsearch/elasticsearch_config.ts index b90ae2609f1e3..afda47ca8851b 100644 --- a/src/core/server/elasticsearch/elasticsearch_config.ts +++ b/src/core/server/elasticsearch/elasticsearch_config.ts @@ -133,6 +133,10 @@ const deprecations: ConfigDeprecationProvider = () => [ log( `Setting [${fromPath}.ssl.certificate] without [${fromPath}.ssl.key] is deprecated. This has no effect, you should use both settings to enable TLS client authentication to Elasticsearch.` ); + } else if (es.logQueries === true) { + log( + `Setting [${fromPath}.logQueries] is deprecated and no longer used. You should set the log level to "debug" for the "elasticsearch.queries" context in "logging.loggers" or use "logging.verbose: true".` + ); } return settings; }, @@ -164,12 +168,6 @@ export class ElasticsearchConfig { */ public readonly apiVersion: string; - /** - * Specifies whether all queries to the client should be logged (status code, - * method, query etc.). - */ - public readonly logQueries: boolean; - /** * Hosts that the client will connect to. If sniffing is enabled, this list will * be used as seeds to discover the rest of your cluster. @@ -248,7 +246,6 @@ export class ElasticsearchConfig { constructor(rawConfig: ElasticsearchConfigType) { this.ignoreVersionMismatch = rawConfig.ignoreVersionMismatch; this.apiVersion = rawConfig.apiVersion; - this.logQueries = rawConfig.logQueries; this.hosts = Array.isArray(rawConfig.hosts) ? rawConfig.hosts : [rawConfig.hosts]; this.requestHeadersWhitelist = Array.isArray(rawConfig.requestHeadersWhitelist) ? rawConfig.requestHeadersWhitelist diff --git a/src/core/server/elasticsearch/elasticsearch_service.test.ts b/src/core/server/elasticsearch/elasticsearch_service.test.ts index a6d966b346072..3129ccfb5a67e 100644 --- a/src/core/server/elasticsearch/elasticsearch_service.test.ts +++ b/src/core/server/elasticsearch/elasticsearch_service.test.ts @@ -92,14 +92,15 @@ describe('#setup', () => { // reset all mocks called during setup phase MockLegacyClusterClient.mockClear(); - const customConfig = { logQueries: true }; + const customConfig = { keepAlive: true }; const clusterClient = setupContract.legacy.createClient('some-custom-type', customConfig); expect(clusterClient).toBe(mockLegacyClusterClientInstance); expect(MockLegacyClusterClient).toHaveBeenCalledWith( expect.objectContaining(customConfig), - expect.objectContaining({ context: ['elasticsearch', 'some-custom-type'] }), + expect.objectContaining({ context: ['elasticsearch'] }), + 'some-custom-type', expect.any(Function) ); }); @@ -267,7 +268,7 @@ describe('#start', () => { // reset all mocks called during setup phase MockClusterClient.mockClear(); - const customConfig = { logQueries: true }; + const customConfig = { keepAlive: true }; const clusterClient = startContract.createClient('custom-type', customConfig); expect(clusterClient).toBe(mockClusterClientInstance); @@ -275,7 +276,8 @@ describe('#start', () => { expect(MockClusterClient).toHaveBeenCalledTimes(1); expect(MockClusterClient).toHaveBeenCalledWith( expect.objectContaining(customConfig), - expect.objectContaining({ context: ['elasticsearch', 'custom-type'] }), + expect.objectContaining({ context: ['elasticsearch'] }), + 'custom-type', expect.any(Function) ); }); @@ -286,7 +288,7 @@ describe('#start', () => { // reset all mocks called during setup phase MockClusterClient.mockClear(); - const customConfig = { logQueries: true }; + const customConfig = { keepAlive: true }; startContract.createClient('custom-type', customConfig); startContract.createClient('another-type', customConfig); diff --git a/src/core/server/elasticsearch/elasticsearch_service.ts b/src/core/server/elasticsearch/elasticsearch_service.ts index 2d97f6e5c3121..fd3d546bb77b9 100644 --- a/src/core/server/elasticsearch/elasticsearch_service.ts +++ b/src/core/server/elasticsearch/elasticsearch_service.ts @@ -126,7 +126,8 @@ export class ElasticsearchService private createClusterClient(type: string, config: ElasticsearchClientConfig) { return new ClusterClient( config, - this.coreContext.logger.get('elasticsearch', type), + this.coreContext.logger.get('elasticsearch'), + type, this.getAuthHeaders ); } @@ -134,7 +135,8 @@ export class ElasticsearchService private createLegacyClusterClient(type: string, config: LegacyElasticsearchClientConfig) { return new LegacyClusterClient( config, - this.coreContext.logger.get('elasticsearch', type), + this.coreContext.logger.get('elasticsearch'), + type, this.getAuthHeaders ); } diff --git a/src/core/server/elasticsearch/legacy/cluster_client.test.ts b/src/core/server/elasticsearch/legacy/cluster_client.test.ts index 97a49cd9eb9f4..177181608bee9 100644 --- a/src/core/server/elasticsearch/legacy/cluster_client.test.ts +++ b/src/core/server/elasticsearch/legacy/cluster_client.test.ts @@ -31,11 +31,15 @@ test('#constructor creates client with parsed config', () => { const mockEsConfig = { apiVersion: 'es-version' } as any; const mockLogger = logger.get(); - const clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger); + const clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type'); expect(clusterClient).toBeDefined(); expect(mockParseElasticsearchClientConfig).toHaveBeenCalledTimes(1); - expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith(mockEsConfig, mockLogger); + expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith( + mockEsConfig, + mockLogger, + 'custom-type' + ); expect(MockClient).toHaveBeenCalledTimes(1); expect(MockClient).toHaveBeenCalledWith(mockEsClientConfig); @@ -57,7 +61,11 @@ describe('#callAsInternalUser', () => { }; MockClient.mockImplementation(() => mockEsClientInstance); - clusterClient = new LegacyClusterClient({ apiVersion: 'es-version' } as any, logger.get()); + clusterClient = new LegacyClusterClient( + { apiVersion: 'es-version' } as any, + logger.get(), + 'custom-type' + ); }); test('fails if cluster client is closed', async () => { @@ -226,7 +234,7 @@ describe('#asScoped', () => { requestHeadersWhitelist: ['one', 'two'], } as any; - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type'); jest.clearAllMocks(); }); @@ -237,10 +245,15 @@ describe('#asScoped', () => { expect(firstScopedClusterClient).toBeDefined(); expect(mockParseElasticsearchClientConfig).toHaveBeenCalledTimes(1); - expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith(mockEsConfig, mockLogger, { - auth: false, - ignoreCertAndKey: true, - }); + expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith( + mockEsConfig, + mockLogger, + 'custom-type', + { + auth: false, + ignoreCertAndKey: true, + } + ); expect(MockClient).toHaveBeenCalledTimes(1); expect(MockClient).toHaveBeenCalledWith( @@ -261,42 +274,57 @@ describe('#asScoped', () => { test('properly configures `ignoreCertAndKey` for various configurations', () => { // Config without SSL. - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type'); mockParseElasticsearchClientConfig.mockClear(); clusterClient.asScoped(httpServerMock.createRawRequest({ headers: { one: '1' } })); expect(mockParseElasticsearchClientConfig).toHaveBeenCalledTimes(1); - expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith(mockEsConfig, mockLogger, { - auth: false, - ignoreCertAndKey: true, - }); + expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith( + mockEsConfig, + mockLogger, + 'custom-type', + { + auth: false, + ignoreCertAndKey: true, + } + ); // Config ssl.alwaysPresentCertificate === false mockEsConfig = { ...mockEsConfig, ssl: { alwaysPresentCertificate: false } } as any; - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type'); mockParseElasticsearchClientConfig.mockClear(); clusterClient.asScoped(httpServerMock.createRawRequest({ headers: { one: '1' } })); expect(mockParseElasticsearchClientConfig).toHaveBeenCalledTimes(1); - expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith(mockEsConfig, mockLogger, { - auth: false, - ignoreCertAndKey: true, - }); + expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith( + mockEsConfig, + mockLogger, + 'custom-type', + { + auth: false, + ignoreCertAndKey: true, + } + ); // Config ssl.alwaysPresentCertificate === true mockEsConfig = { ...mockEsConfig, ssl: { alwaysPresentCertificate: true } } as any; - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type'); mockParseElasticsearchClientConfig.mockClear(); clusterClient.asScoped(httpServerMock.createRawRequest({ headers: { one: '1' } })); expect(mockParseElasticsearchClientConfig).toHaveBeenCalledTimes(1); - expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith(mockEsConfig, mockLogger, { - auth: false, - ignoreCertAndKey: false, - }); + expect(mockParseElasticsearchClientConfig).toHaveBeenLastCalledWith( + mockEsConfig, + mockLogger, + 'custom-type', + { + auth: false, + ignoreCertAndKey: false, + } + ); }); test('passes only filtered headers to the scoped cluster client', () => { @@ -345,7 +373,7 @@ describe('#asScoped', () => { }); test('does not fail when scope to not defined request', async () => { - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type'); clusterClient.asScoped(); expect(MockScopedClusterClient).toHaveBeenCalledTimes(1); expect(MockScopedClusterClient).toHaveBeenCalledWith( @@ -356,7 +384,7 @@ describe('#asScoped', () => { }); test('does not fail when scope to a request without headers', async () => { - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type'); clusterClient.asScoped({} as any); expect(MockScopedClusterClient).toHaveBeenCalledTimes(1); expect(MockScopedClusterClient).toHaveBeenCalledWith( @@ -367,7 +395,7 @@ describe('#asScoped', () => { }); test('calls getAuthHeaders and filters results for a real request', async () => { - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, () => ({ + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type', () => ({ one: '1', three: '3', })); @@ -381,7 +409,9 @@ describe('#asScoped', () => { }); test('getAuthHeaders results rewrite extends a request headers', async () => { - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, () => ({ one: 'foo' })); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type', () => ({ + one: 'foo', + })); clusterClient.asScoped(httpServerMock.createRawRequest({ headers: { one: '1', two: '2' } })); expect(MockScopedClusterClient).toHaveBeenCalledTimes(1); expect(MockScopedClusterClient).toHaveBeenCalledWith( @@ -392,7 +422,7 @@ describe('#asScoped', () => { }); test("doesn't call getAuthHeaders for a fake request", async () => { - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, () => ({})); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type', () => ({})); clusterClient.asScoped({ headers: { one: 'foo' } }); expect(MockScopedClusterClient).toHaveBeenCalledTimes(1); @@ -404,7 +434,7 @@ describe('#asScoped', () => { }); test('filters a fake request headers', async () => { - clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger); + clusterClient = new LegacyClusterClient(mockEsConfig, mockLogger, 'custom-type'); clusterClient.asScoped({ headers: { one: '1', two: '2', three: '3' } }); expect(MockScopedClusterClient).toHaveBeenCalledTimes(1); @@ -431,7 +461,8 @@ describe('#close', () => { clusterClient = new LegacyClusterClient( { apiVersion: 'es-version', requestHeadersWhitelist: [] } as any, - logger.get() + logger.get(), + 'custom-type' ); }); diff --git a/src/core/server/elasticsearch/legacy/cluster_client.ts b/src/core/server/elasticsearch/legacy/cluster_client.ts index 9cac713920331..64e1382fee201 100644 --- a/src/core/server/elasticsearch/legacy/cluster_client.ts +++ b/src/core/server/elasticsearch/legacy/cluster_client.ts @@ -121,9 +121,10 @@ export class LegacyClusterClient implements ILegacyClusterClient { constructor( private readonly config: LegacyElasticsearchClientConfig, private readonly log: Logger, + private readonly type: string, private readonly getAuthHeaders: GetAuthHeaders = noop ) { - this.client = new Client(parseElasticsearchClientConfig(config, log)); + this.client = new Client(parseElasticsearchClientConfig(config, log, type)); } /** @@ -186,7 +187,7 @@ export class LegacyClusterClient implements ILegacyClusterClient { // between all scoped client instances. if (this.scopedClient === undefined) { this.scopedClient = new Client( - parseElasticsearchClientConfig(this.config, this.log, { + parseElasticsearchClientConfig(this.config, this.log, this.type, { auth: false, ignoreCertAndKey: !this.config.ssl || !this.config.ssl.alwaysPresentCertificate, }) diff --git a/src/core/server/elasticsearch/legacy/elasticsearch_client_config.test.ts b/src/core/server/elasticsearch/legacy/elasticsearch_client_config.test.ts index 5dac353c1094c..6c79f2c568caa 100644 --- a/src/core/server/elasticsearch/legacy/elasticsearch_client_config.test.ts +++ b/src/core/server/elasticsearch/legacy/elasticsearch_client_config.test.ts @@ -22,13 +22,13 @@ test('parses minimally specified config', () => { { apiVersion: 'master', customHeaders: { xsrf: 'something' }, - logQueries: false, sniffOnStart: false, sniffOnConnectionFault: false, hosts: ['http://localhost/elasticsearch'], requestHeadersWhitelist: [], }, - logger.get() + logger.get(), + 'custom-type' ) ).toMatchInlineSnapshot(` Object { @@ -58,7 +58,6 @@ test('parses fully specified config', () => { const elasticsearchConfig: LegacyElasticsearchClientConfig = { apiVersion: 'v7.0.0', customHeaders: { xsrf: 'something' }, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: [ @@ -84,7 +83,8 @@ test('parses fully specified config', () => { const elasticsearchClientConfig = parseElasticsearchClientConfig( elasticsearchConfig, - logger.get() + logger.get(), + 'custom-type' ); // Check that original references aren't used. @@ -163,7 +163,6 @@ test('parses config timeouts of moment.Duration type', () => { { apiVersion: 'master', customHeaders: { xsrf: 'something' }, - logQueries: false, sniffOnStart: false, sniffOnConnectionFault: false, pingTimeout: duration(100, 'ms'), @@ -172,7 +171,8 @@ test('parses config timeouts of moment.Duration type', () => { hosts: ['http://localhost:9200/elasticsearch'], requestHeadersWhitelist: [], }, - logger.get() + logger.get(), + 'custom-type' ) ).toMatchInlineSnapshot(` Object { @@ -208,7 +208,6 @@ describe('#auth', () => { { apiVersion: 'v7.0.0', customHeaders: { xsrf: 'something' }, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: ['http://user:password@localhost/elasticsearch', 'https://es.local'], @@ -217,6 +216,7 @@ describe('#auth', () => { requestHeadersWhitelist: [], }, logger.get(), + 'custom-type', { auth: false } ) ).toMatchInlineSnapshot(` @@ -260,7 +260,6 @@ describe('#auth', () => { { apiVersion: 'v7.0.0', customHeaders: { xsrf: 'something' }, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: ['https://es.local'], @@ -268,6 +267,7 @@ describe('#auth', () => { password: 'changeme', }, logger.get(), + 'custom-type', { auth: true } ) ).toMatchInlineSnapshot(` @@ -300,7 +300,6 @@ describe('#auth', () => { { apiVersion: 'v7.0.0', customHeaders: { xsrf: 'something' }, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: ['https://es.local'], @@ -308,6 +307,7 @@ describe('#auth', () => { username: 'elastic', }, logger.get(), + 'custom-type', { auth: true } ) ).toMatchInlineSnapshot(` @@ -342,13 +342,13 @@ describe('#customHeaders', () => { { apiVersion: 'master', customHeaders: { [headerKey]: 'foo' }, - logQueries: false, sniffOnStart: false, sniffOnConnectionFault: false, hosts: ['http://localhost/elasticsearch'], requestHeadersWhitelist: [], }, - logger.get() + logger.get(), + 'custom-type' ); expect(parsedConfig.hosts[0].headers).toEqual({ [headerKey]: 'foo', @@ -357,62 +357,18 @@ describe('#customHeaders', () => { }); describe('#log', () => { - test('default logger with #logQueries = false', () => { + test('default logger', () => { const parsedConfig = parseElasticsearchClientConfig( { apiVersion: 'master', customHeaders: { xsrf: 'something' }, - logQueries: false, sniffOnStart: false, sniffOnConnectionFault: false, hosts: ['http://localhost/elasticsearch'], requestHeadersWhitelist: [], }, - logger.get() - ); - - const esLogger = new parsedConfig.log(); - esLogger.error('some-error'); - esLogger.warning('some-warning'); - esLogger.trace('some-trace'); - esLogger.info('some-info'); - esLogger.debug('some-debug'); - - expect(typeof esLogger.close).toBe('function'); - - expect(loggingSystemMock.collect(logger)).toMatchInlineSnapshot(` - Object { - "debug": Array [], - "error": Array [ - Array [ - "some-error", - ], - ], - "fatal": Array [], - "info": Array [], - "log": Array [], - "trace": Array [], - "warn": Array [ - Array [ - "some-warning", - ], - ], - } - `); - }); - - test('default logger with #logQueries = true', () => { - const parsedConfig = parseElasticsearchClientConfig( - { - apiVersion: 'master', - customHeaders: { xsrf: 'something' }, - logQueries: true, - sniffOnStart: false, - sniffOnConnectionFault: false, - hosts: ['http://localhost/elasticsearch'], - requestHeadersWhitelist: [], - }, - logger.get() + logger.get(), + 'custom-type' ); const esLogger = new parsedConfig.log(); @@ -433,11 +389,6 @@ describe('#log', () => { "304 METHOD /some-path ?query=2", - Object { - "tags": Array [ - "query", - ], - }, ], ], "error": Array [ @@ -465,14 +416,14 @@ describe('#log', () => { { apiVersion: 'master', customHeaders: { xsrf: 'something' }, - logQueries: true, sniffOnStart: false, sniffOnConnectionFault: false, hosts: ['http://localhost/elasticsearch'], requestHeadersWhitelist: [], log: customLogger, }, - logger.get() + logger.get(), + 'custom-type' ); expect(parsedConfig.log).toBe(customLogger); @@ -486,14 +437,14 @@ describe('#ssl', () => { { apiVersion: 'v7.0.0', customHeaders: {}, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: ['https://es.local'], requestHeadersWhitelist: [], ssl: { verificationMode: 'none' }, }, - logger.get() + logger.get(), + 'custom-type' ) ).toMatchInlineSnapshot(` Object { @@ -527,14 +478,14 @@ describe('#ssl', () => { { apiVersion: 'v7.0.0', customHeaders: {}, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: ['https://es.local'], requestHeadersWhitelist: [], ssl: { verificationMode: 'certificate' }, }, - logger.get() + logger.get(), + 'custom-type' ); // `checkServerIdentity` shouldn't check hostname when verificationMode is certificate. @@ -576,14 +527,14 @@ describe('#ssl', () => { { apiVersion: 'v7.0.0', customHeaders: {}, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: ['https://es.local'], requestHeadersWhitelist: [], ssl: { verificationMode: 'full' }, }, - logger.get() + logger.get(), + 'custom-type' ) ).toMatchInlineSnapshot(` Object { @@ -618,14 +569,14 @@ describe('#ssl', () => { { apiVersion: 'v7.0.0', customHeaders: {}, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: ['https://es.local'], requestHeadersWhitelist: [], ssl: { verificationMode: 'misspelled' as any }, }, - logger.get() + logger.get(), + 'custom-type' ) ).toThrowErrorMatchingInlineSnapshot(`"Unknown ssl verificationMode: misspelled"`); }); @@ -636,7 +587,6 @@ describe('#ssl', () => { { apiVersion: 'v7.0.0', customHeaders: {}, - logQueries: true, sniffOnStart: true, sniffOnConnectionFault: true, hosts: ['https://es.local'], @@ -651,6 +601,7 @@ describe('#ssl', () => { }, }, logger.get(), + 'custom-type', { ignoreCertAndKey: true } ) ).toMatchInlineSnapshot(` diff --git a/src/core/server/elasticsearch/legacy/elasticsearch_client_config.ts b/src/core/server/elasticsearch/legacy/elasticsearch_client_config.ts index ecd2e30097060..66b6046e4516d 100644 --- a/src/core/server/elasticsearch/legacy/elasticsearch_client_config.ts +++ b/src/core/server/elasticsearch/legacy/elasticsearch_client_config.ts @@ -29,7 +29,6 @@ export type LegacyElasticsearchClientConfig = Pick & { +export type ElasticsearchClientConfig = Pick & { pingTimeout?: ElasticsearchConfig['pingTimeout'] | ClientOptions['pingTimeout']; requestTimeout?: ElasticsearchConfig['requestTimeout'] | ClientOptions['requestTimeout']; ssl?: Partial; @@ -859,7 +859,6 @@ export class ElasticsearchConfig { readonly healthCheckDelay: Duration; readonly hosts: string[]; readonly ignoreVersionMismatch: boolean; - readonly logQueries: boolean; readonly password?: string; readonly pingTimeout: Duration; readonly requestHeadersWhitelist: string[]; @@ -1531,7 +1530,7 @@ export interface LegacyCallAPIOptions { // @public @deprecated export class LegacyClusterClient implements ILegacyClusterClient { - constructor(config: LegacyElasticsearchClientConfig, log: Logger, getAuthHeaders?: GetAuthHeaders); + constructor(config: LegacyElasticsearchClientConfig, log: Logger, type: string, getAuthHeaders?: GetAuthHeaders); asScoped(request?: ScopeableRequest): ILegacyScopedClusterClient; // @deprecated callAsInternalUser: LegacyAPICaller; @@ -1553,7 +1552,7 @@ export interface LegacyConfig { } // @public @deprecated (undocumented) -export type LegacyElasticsearchClientConfig = Pick & Pick & { +export type LegacyElasticsearchClientConfig = Pick & Pick & { pingTimeout?: ElasticsearchConfig['pingTimeout'] | ConfigOptions['pingTimeout']; requestTimeout?: ElasticsearchConfig['requestTimeout'] | ConfigOptions['requestTimeout']; sniffInterval?: ElasticsearchConfig['sniffInterval'] | ConfigOptions['sniffInterval']; diff --git a/x-pack/plugins/monitoring/server/es_client/instantiate_client.ts b/x-pack/plugins/monitoring/server/es_client/instantiate_client.ts index 734caa7374686..3336e65da2b11 100644 --- a/x-pack/plugins/monitoring/server/es_client/instantiate_client.ts +++ b/x-pack/plugins/monitoring/server/es_client/instantiate_client.ts @@ -30,7 +30,6 @@ export function instantiateClient( const cluster = createClient('monitoring', { ...(isMonitoringCluster ? elasticsearchConfig : {}), plugins: [monitoringBulk, monitoringEndpointDisableWatches], - logQueries: Boolean(elasticsearchConfig.logQueries), } as ESClusterConfig); const configSource = isMonitoringCluster ? 'monitoring' : 'production'; From 178637ce296eb2932c431d5bb3fef78846bcdc65 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Mon, 1 Feb 2021 16:19:56 +0000 Subject: [PATCH 34/85] [ML] Fixing saved object authorization check when security is disabled (#89850) * [ML] Fixing saved object authorization check when security is disabled * updating to use mode.useRbacForRequest for check --- x-pack/plugins/ml/server/saved_objects/authorization.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/x-pack/plugins/ml/server/saved_objects/authorization.ts b/x-pack/plugins/ml/server/saved_objects/authorization.ts index 958ee2091f11e..9afc479c32d7d 100644 --- a/x-pack/plugins/ml/server/saved_objects/authorization.ts +++ b/x-pack/plugins/ml/server/saved_objects/authorization.ts @@ -10,6 +10,15 @@ import { ML_SAVED_OBJECT_TYPE } from '../../common/types/saved_objects'; export function authorizationProvider(authorization: SecurityPluginSetup['authz']) { async function authorizationCheck(request: KibanaRequest) { + const shouldAuthorizeRequest = authorization?.mode.useRbacForRequest(request) ?? false; + + if (shouldAuthorizeRequest === false) { + return { + canCreateGlobally: true, + canCreateAtSpace: true, + }; + } + const checkPrivilegesWithRequest = authorization.checkPrivilegesWithRequest(request); // Checking privileges "dynamically" will check against the current space, if spaces are enabled. // If spaces are disabled, then this will check privileges globally instead. From 9f4dae82c59ad9d355f3d666f4af84c82781624e Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Mon, 1 Feb 2021 16:35:37 +0000 Subject: [PATCH 35/85] [Security Solution] Push new case to the connector when created (#89131) * init push case * fix connectorToUpdate * add unit test * revert change * remove useEffect after case created * add unit test * add cancel flag * update unit test Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/create/form_context.test.tsx | 121 +++++++++++++----- .../cases/components/create/form_context.tsx | 36 ++++-- .../cases/containers/use_post_case.test.tsx | 15 ++- .../public/cases/containers/use_post_case.tsx | 73 +++++------ 4 files changed, 154 insertions(+), 91 deletions(-) diff --git a/x-pack/plugins/security_solution/public/cases/components/create/form_context.test.tsx b/x-pack/plugins/security_solution/public/cases/components/create/form_context.test.tsx index f3b47f756bce9..1b4df7730cc8b 100644 --- a/x-pack/plugins/security_solution/public/cases/components/create/form_context.test.tsx +++ b/x-pack/plugins/security_solution/public/cases/components/create/form_context.test.tsx @@ -33,8 +33,13 @@ import { import { FormContext } from './form_context'; import { CreateCaseForm } from './form'; import { SubmitCaseButton } from './submit_button'; +import { usePostPushToService } from '../../containers/use_post_push_to_service'; +import { noop } from 'lodash/fp'; + +const sampleId = 'case-id'; jest.mock('../../containers/use_post_case'); +jest.mock('../../containers/use_post_push_to_service'); jest.mock('../../containers/use_get_tags'); jest.mock('../../containers/configure/use_connectors'); jest.mock('../../containers/configure/use_configure'); @@ -48,19 +53,28 @@ jest.mock('../settings/jira/use_get_issues'); const useConnectorsMock = useConnectors as jest.Mock; const useCaseConfigureMock = useCaseConfigure as jest.Mock; const usePostCaseMock = usePostCase as jest.Mock; +const usePostPushToServiceMock = usePostPushToService as jest.Mock; const useGetIncidentTypesMock = useGetIncidentTypes as jest.Mock; const useGetSeverityMock = useGetSeverity as jest.Mock; const useGetIssueTypesMock = useGetIssueTypes as jest.Mock; const useGetFieldsByIssueTypeMock = useGetFieldsByIssueType as jest.Mock; const postCase = jest.fn(); +const postPushToService = jest.fn(); const defaultPostCase = { isLoading: false, isError: false, - caseData: null, postCase, }; +const defaultPostPushToService = { + serviceData: null, + pushedCaseData: null, + isLoading: false, + isError: false, + postPushToService, +}; + const fillForm = (wrapper: ReactWrapper) => { wrapper .find(`[data-test-subj="caseTitle"] input`) @@ -85,7 +99,12 @@ describe('Create case', () => { beforeEach(() => { jest.resetAllMocks(); + postCase.mockResolvedValue({ + id: sampleId, + ...sampleData, + }); usePostCaseMock.mockImplementation(() => defaultPostCase); + usePostPushToServiceMock.mockImplementation(() => defaultPostPushToService); useConnectorsMock.mockReturnValue(sampleConnectorData); useCaseConfigureMock.mockImplementation(() => useCaseConfigureResponse); useGetIncidentTypesMock.mockReturnValue(useGetIncidentTypesResponse); @@ -163,25 +182,6 @@ describe('Create case', () => { ); }); - it('should redirect to new case when caseData is there', async () => { - const sampleId = 'case-id'; - usePostCaseMock.mockImplementation(() => ({ - ...defaultPostCase, - caseData: { id: sampleId }, - })); - - mount( - - - - - - - ); - - await waitFor(() => expect(onFormSubmitSuccess).toHaveBeenCalledWith({ id: 'case-id' })); - }); - it('it should select the default connector set in the configuration', async () => { useCaseConfigureMock.mockImplementation(() => ({ ...useCaseConfigureResponse, @@ -258,12 +258,15 @@ describe('Create case', () => { fillForm(wrapper); wrapper.find(`[data-test-subj="create-case-submit"]`).first().simulate('click'); - await waitFor(() => expect(postCase).toBeCalledWith(sampleData)); + await waitFor(() => { + expect(postCase).toBeCalledWith(sampleData); + expect(postPushToService).not.toHaveBeenCalled(); + }); }); }); describe('Step 2 - Connector Fields', () => { - it(`it should submit a Jira connector`, async () => { + it(`it should submit and push to Jira connector`, async () => { useConnectorsMock.mockReturnValue({ ...sampleConnectorData, connectors: connectorsMock, @@ -304,7 +307,7 @@ describe('Create case', () => { wrapper.find(`[data-test-subj="create-case-submit"]`).first().simulate('click'); - await waitFor(() => + await waitFor(() => { expect(postCase).toBeCalledWith({ ...sampleData, connector: { @@ -313,11 +316,27 @@ describe('Create case', () => { type: '.jira', fields: { issueType: '10007', parent: null, priority: '2' }, }, - }) - ); + }); + expect(postPushToService).toHaveBeenCalledWith({ + caseId: sampleId, + caseServices: {}, + connector: { + id: 'jira-1', + name: 'Jira', + type: '.jira', + fields: { issueType: '10007', parent: null, priority: '2' }, + }, + alerts: {}, + updateCase: noop, + }); + expect(onFormSubmitSuccess).toHaveBeenCalledWith({ + id: sampleId, + ...sampleData, + }); + }); }); - it(`it should submit a resilient connector`, async () => { + it(`it should submit and push to resilient connector`, async () => { useConnectorsMock.mockReturnValue({ ...sampleConnectorData, connectors: connectorsMock, @@ -359,7 +378,7 @@ describe('Create case', () => { wrapper.find(`[data-test-subj="create-case-submit"]`).first().simulate('click'); - await waitFor(() => + await waitFor(() => { expect(postCase).toBeCalledWith({ ...sampleData, connector: { @@ -368,11 +387,29 @@ describe('Create case', () => { type: '.resilient', fields: { incidentTypes: ['19'], severityCode: '4' }, }, - }) - ); + }); + + expect(postPushToService).toHaveBeenCalledWith({ + caseId: sampleId, + caseServices: {}, + connector: { + id: 'resilient-2', + name: 'My Connector 2', + type: '.resilient', + fields: { incidentTypes: ['19'], severityCode: '4' }, + }, + alerts: {}, + updateCase: noop, + }); + + expect(onFormSubmitSuccess).toHaveBeenCalledWith({ + id: sampleId, + ...sampleData, + }); + }); }); - it(`it should submit a servicenow connector`, async () => { + it(`it should submit and push to servicenow connector`, async () => { useConnectorsMock.mockReturnValue({ ...sampleConnectorData, connectors: connectorsMock, @@ -404,7 +441,7 @@ describe('Create case', () => { wrapper.find(`[data-test-subj="create-case-submit"]`).first().simulate('click'); - await waitFor(() => + await waitFor(() => { expect(postCase).toBeCalledWith({ ...sampleData, connector: { @@ -413,8 +450,26 @@ describe('Create case', () => { type: '.servicenow', fields: { impact: '2', severity: '2', urgency: '2' }, }, - }) - ); + }); + + expect(postPushToService).toHaveBeenCalledWith({ + caseId: sampleId, + caseServices: {}, + connector: { + id: 'servicenow-1', + name: 'My Connector', + type: '.servicenow', + fields: { impact: '2', severity: '2', urgency: '2' }, + }, + alerts: {}, + updateCase: noop, + }); + + expect(onFormSubmitSuccess).toHaveBeenCalledWith({ + id: sampleId, + ...sampleData, + }); + }); }); }); }); diff --git a/x-pack/plugins/security_solution/public/cases/components/create/form_context.tsx b/x-pack/plugins/security_solution/public/cases/components/create/form_context.tsx index 4315011ac8df1..03e03d853878c 100644 --- a/x-pack/plugins/security_solution/public/cases/components/create/form_context.tsx +++ b/x-pack/plugins/security_solution/public/cases/components/create/form_context.tsx @@ -3,9 +3,8 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - import React, { useCallback, useEffect, useMemo } from 'react'; - +import { noop } from 'lodash/fp'; import { schema, FormProps } from './schema'; import { Form, useForm } from '../../../shared_imports'; import { @@ -14,6 +13,8 @@ import { normalizeActionConnector, } from '../configure_cases/utils'; import { usePostCase } from '../../containers/use_post_case'; +import { usePostPushToService } from '../../containers/use_post_push_to_service'; + import { useConnectors } from '../../containers/configure/use_connectors'; import { useCaseConfigure } from '../../containers/configure/use_configure'; import { Case } from '../../containers/types'; @@ -34,7 +35,9 @@ interface Props { export const FormContext: React.FC = ({ children, onSuccess }) => { const { connectors } = useConnectors(); const { connector: configurationConnector } = useCaseConfigure(); - const { caseData, postCase } = usePostCase(); + const { postCase } = usePostCase(); + const { postPushToService } = usePostPushToService(); + const connectorId = useMemo( () => connectors.some((connector) => connector.id === configurationConnector.id) @@ -50,18 +53,33 @@ export const FormContext: React.FC = ({ children, onSuccess }) => { ) => { if (isValid) { const caseConnector = getConnectorById(dataConnectorId, connectors); + const connectorToUpdate = caseConnector ? normalizeActionConnector(caseConnector, fields) : getNoneConnector(); - await postCase({ + const updatedCase = await postCase({ ...dataWithoutConnectorId, connector: connectorToUpdate, settings: { syncAlerts }, }); + + if (updatedCase?.id && dataConnectorId !== 'none') { + await postPushToService({ + caseId: updatedCase.id, + caseServices: {}, + connector: connectorToUpdate, + alerts: {}, + updateCase: noop, + }); + } + + if (onSuccess && updatedCase) { + onSuccess(updatedCase); + } } }, - [postCase, connectors] + [connectors, postCase, onSuccess, postPushToService] ); const { form } = useForm({ @@ -70,18 +88,10 @@ export const FormContext: React.FC = ({ children, onSuccess }) => { schema, onSubmit: submitCase, }); - const { setFieldValue } = form; - // Set the selected connector to the configuration connector useEffect(() => setFieldValue('connectorId', connectorId), [connectorId, setFieldValue]); - useEffect(() => { - if (caseData && onSuccess) { - onSuccess(caseData); - } - }, [caseData, onSuccess]); - return
{children}
; }; diff --git a/x-pack/plugins/security_solution/public/cases/containers/use_post_case.test.tsx b/x-pack/plugins/security_solution/public/cases/containers/use_post_case.test.tsx index 8e8432d0d190c..bd57f57713e08 100644 --- a/x-pack/plugins/security_solution/public/cases/containers/use_post_case.test.tsx +++ b/x-pack/plugins/security_solution/public/cases/containers/use_post_case.test.tsx @@ -6,9 +6,9 @@ import { renderHook, act } from '@testing-library/react-hooks'; import { usePostCase, UsePostCase } from './use_post_case'; -import { basicCasePost } from './mock'; import * as api from './api'; import { ConnectorTypes } from '../../../../case/common/api/connectors'; +import { basicCasePost } from './mock'; jest.mock('./api'); @@ -40,7 +40,6 @@ describe('usePostCase', () => { expect(result.current).toEqual({ isLoading: false, isError: false, - caseData: null, postCase: result.current.postCase, }); }); @@ -59,6 +58,16 @@ describe('usePostCase', () => { }); }); + it('calls postCase with correct result', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => usePostCase()); + await waitForNextUpdate(); + + const postData = await result.current.postCase(samplePost); + expect(postData).toEqual(basicCasePost); + }); + }); + it('post case', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => usePostCase()); @@ -66,7 +75,6 @@ describe('usePostCase', () => { result.current.postCase(samplePost); await waitForNextUpdate(); expect(result.current).toEqual({ - caseData: basicCasePost, isLoading: false, isError: false, postCase: result.current.postCase, @@ -96,7 +104,6 @@ describe('usePostCase', () => { result.current.postCase(samplePost); expect(result.current).toEqual({ - caseData: null, isLoading: false, isError: true, postCase: result.current.postCase, diff --git a/x-pack/plugins/security_solution/public/cases/containers/use_post_case.tsx b/x-pack/plugins/security_solution/public/cases/containers/use_post_case.tsx index 3ca78dfe75c80..c98446effe47d 100644 --- a/x-pack/plugins/security_solution/public/cases/containers/use_post_case.tsx +++ b/x-pack/plugins/security_solution/public/cases/containers/use_post_case.tsx @@ -3,25 +3,17 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - -import { useReducer, useCallback } from 'react'; - +import { useReducer, useCallback, useRef, useEffect } from 'react'; import { CasePostRequest } from '../../../../case/common/api'; import { errorToToaster, useStateToaster } from '../../common/components/toasters'; import { postCase } from './api'; import * as i18n from './translations'; import { Case } from './types'; - interface NewCaseState { - caseData: Case | null; isLoading: boolean; isError: boolean; } -type Action = - | { type: 'FETCH_INIT' } - | { type: 'FETCH_SUCCESS'; payload: Case } - | { type: 'FETCH_FAILURE' }; - +type Action = { type: 'FETCH_INIT' } | { type: 'FETCH_SUCCESS' } | { type: 'FETCH_FAILURE' }; const dataFetchReducer = (state: NewCaseState, action: Action): NewCaseState => { switch (action.type) { case 'FETCH_INIT': @@ -35,7 +27,6 @@ const dataFetchReducer = (state: NewCaseState, action: Action): NewCaseState => ...state, isLoading: false, isError: false, - caseData: action.payload ?? null, }; case 'FETCH_FAILURE': return { @@ -47,47 +38,47 @@ const dataFetchReducer = (state: NewCaseState, action: Action): NewCaseState => return state; } }; - export interface UsePostCase extends NewCaseState { - postCase: (data: CasePostRequest) => Promise<() => void>; + postCase: (data: CasePostRequest) => Promise; } export const usePostCase = (): UsePostCase => { const [state, dispatch] = useReducer(dataFetchReducer, { isLoading: false, isError: false, - caseData: null, }); const [, dispatchToaster] = useStateToaster(); - - const postMyCase = useCallback(async (data: CasePostRequest) => { - let cancel = false; - const abortCtrl = new AbortController(); - - try { - dispatch({ type: 'FETCH_INIT' }); - const response = await postCase(data, abortCtrl.signal); - if (!cancel) { - dispatch({ - type: 'FETCH_SUCCESS', - payload: response, - }); + const cancel = useRef(false); + const abortCtrl = useRef(new AbortController()); + const postMyCase = useCallback( + async (data: CasePostRequest) => { + try { + dispatch({ type: 'FETCH_INIT' }); + abortCtrl.current.abort(); + cancel.current = false; + abortCtrl.current = new AbortController(); + const response = await postCase(data, abortCtrl.current.signal); + if (!cancel.current) { + dispatch({ type: 'FETCH_SUCCESS' }); + } + return response; + } catch (error) { + if (!cancel.current) { + errorToToaster({ + title: i18n.ERROR_TITLE, + error: error.body && error.body.message ? new Error(error.body.message) : error, + dispatchToaster, + }); + dispatch({ type: 'FETCH_FAILURE' }); + } } - } catch (error) { - if (!cancel) { - errorToToaster({ - title: i18n.ERROR_TITLE, - error: error.body && error.body.message ? new Error(error.body.message) : error, - dispatchToaster, - }); - dispatch({ type: 'FETCH_FAILURE' }); - } - } + }, + [dispatchToaster] + ); + useEffect(() => { return () => { - abortCtrl.abort(); - cancel = true; + abortCtrl.current.abort(); + cancel.current = true; }; - // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - return { ...state, postCase: postMyCase }; }; From 8701ac85d32c39a8c40f38cdf103aa55c97d0ee4 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Mon, 1 Feb 2021 09:36:49 -0700 Subject: [PATCH 36/85] Deprecate CSV job type (#89794) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/reporting/common/constants.ts | 13 +++++++++---- .../components/reporting_panel_content.tsx | 8 ++++++-- .../panel_actions/get_csv_panel_action.tsx | 3 +-- .../register_csv_reporting.tsx | 9 ++++++--- .../server/export_types/csv/create_job.ts | 14 +++++++++----- .../server/export_types/csv/execute_job.test.ts | 4 ++-- .../server/export_types/csv/execute_job.ts | 8 ++++---- .../csv/generate_csv/field_format_map.test.ts | 4 ++-- .../csv/generate_csv/field_format_map.ts | 4 ++-- .../export_types/csv/generate_csv/index.ts | 4 ++-- .../reporting/server/export_types/csv/index.ts | 8 ++++---- .../reporting/server/export_types/csv/types.d.ts | 16 ++++++++-------- .../csv_from_savedobject/lib/get_data_source.ts | 6 +++--- .../server/routes/lib/get_document_payload.ts | 4 ++-- .../server/usage/decorate_range_stats.ts | 4 ++-- 15 files changed, 62 insertions(+), 47 deletions(-) diff --git a/x-pack/plugins/reporting/common/constants.ts b/x-pack/plugins/reporting/common/constants.ts index 16e40bab65a46..882387184ba9c 100644 --- a/x-pack/plugins/reporting/common/constants.ts +++ b/x-pack/plugins/reporting/common/constants.ts @@ -56,14 +56,19 @@ export const LAYOUT_TYPES = { }; // Export Type Definitions -export const CSV_REPORT_TYPE = 'CSV'; export const PDF_REPORT_TYPE = 'printablePdf'; -export const PNG_REPORT_TYPE = 'PNG'; - export const PDF_JOB_TYPE = 'printable_pdf'; + +export const PNG_REPORT_TYPE = 'PNG'; export const PNG_JOB_TYPE = 'PNG'; -export const CSV_JOB_TYPE = 'csv'; + export const CSV_FROM_SAVEDOBJECT_JOB_TYPE = 'csv_from_savedobject'; + +// This is deprecated because it lacks support for runtime fields +// but the extension points are still needed for pre-existing scripted automation, until 8.0 +export const CSV_REPORT_TYPE_DEPRECATED = 'CSV'; +export const CSV_JOB_TYPE_DEPRECATED = 'csv'; + export const USES_HEADLESS_JOB_TYPES = [PDF_JOB_TYPE, PNG_JOB_TYPE]; // Licenses diff --git a/x-pack/plugins/reporting/public/components/reporting_panel_content.tsx b/x-pack/plugins/reporting/public/components/reporting_panel_content.tsx index bbdc2e1aebe77..bafb5d7a68630 100644 --- a/x-pack/plugins/reporting/public/components/reporting_panel_content.tsx +++ b/x-pack/plugins/reporting/public/components/reporting_panel_content.tsx @@ -10,7 +10,11 @@ import React, { Component, ReactElement } from 'react'; import { ToastsSetup } from 'src/core/public'; import url from 'url'; import { toMountPoint } from '../../../../../src/plugins/kibana_react/public'; -import { CSV_REPORT_TYPE, PDF_REPORT_TYPE, PNG_REPORT_TYPE } from '../../common/constants'; +import { + CSV_REPORT_TYPE_DEPRECATED, + PDF_REPORT_TYPE, + PNG_REPORT_TYPE, +} from '../../common/constants'; import { BaseParams } from '../../common/types'; import { ReportingAPIClient } from '../lib/reporting_api_client'; @@ -173,7 +177,7 @@ class ReportingPanelContentUi extends Component { case PDF_REPORT_TYPE: return 'PDF'; case 'csv': - return CSV_REPORT_TYPE; + return CSV_REPORT_TYPE_DEPRECATED; case 'png': return PNG_REPORT_TYPE; default: diff --git a/x-pack/plugins/reporting/public/panel_actions/get_csv_panel_action.tsx b/x-pack/plugins/reporting/public/panel_actions/get_csv_panel_action.tsx index 9a4832b114e40..49c0eaaa2960d 100644 --- a/x-pack/plugins/reporting/public/panel_actions/get_csv_panel_action.tsx +++ b/x-pack/plugins/reporting/public/panel_actions/get_csv_panel_action.tsx @@ -103,7 +103,6 @@ export class GetCsvReportPanelAction implements ActionDefinition const kibanaTimezone = this.core.uiSettings.get('dateFormat:tz'); const id = `search:${embeddable.getSavedSearch().id}`; - const filename = embeddable.getSavedSearch().title; const timezone = kibanaTimezone === 'Browser' ? moment.tz.guess() : kibanaTimezone; const fromTime = dateMath.parse(from); const toTime = dateMath.parse(to, { roundUp: true }); @@ -140,7 +139,7 @@ export class GetCsvReportPanelAction implements ActionDefinition .then((rawResponse: string) => { this.isDownloading = false; - const download = `${filename}.csv`; + const download = `${embeddable.getSavedSearch().title}.csv`; const blob = new Blob([rawResponse], { type: 'text/csv;charset=utf-8;' }); // Hack for IE11 Support diff --git a/x-pack/plugins/reporting/public/share_context_menu/register_csv_reporting.tsx b/x-pack/plugins/reporting/public/share_context_menu/register_csv_reporting.tsx index 7126762c0f4ee..4659952eef720 100644 --- a/x-pack/plugins/reporting/public/share_context_menu/register_csv_reporting.tsx +++ b/x-pack/plugins/reporting/public/share_context_menu/register_csv_reporting.tsx @@ -10,7 +10,10 @@ import React from 'react'; import { IUiSettingsClient, ToastsSetup } from 'src/core/public'; import { ShareContext } from '../../../../../src/plugins/share/public'; import { LicensingPluginSetup } from '../../../licensing/public'; -import { JobParamsCSV, SearchRequest } from '../../server/export_types/csv/types'; +import { + JobParamsDeprecatedCSV, + SearchRequestDeprecatedCSV, +} from '../../server/export_types/csv/types'; import { ReportingPanelContent } from '../components/reporting_panel_content_lazy'; import { checkLicense } from '../lib/license_check'; import { ReportingAPIClient } from '../lib/reporting_api_client'; @@ -59,12 +62,12 @@ export const csvReportingProvider = ({ return []; } - const jobParams: JobParamsCSV = { + const jobParams: JobParamsDeprecatedCSV = { browserTimezone, objectType, title: sharingData.title as string, indexPatternId: sharingData.indexPatternId as string, - searchRequest: sharingData.searchRequest as SearchRequest, + searchRequest: sharingData.searchRequest as SearchRequestDeprecatedCSV, fields: sharingData.fields as string[], metaFields: sharingData.metaFields as string[], conflictedTypesFields: sharingData.conflictedTypesFields as string[], diff --git a/x-pack/plugins/reporting/server/export_types/csv/create_job.ts b/x-pack/plugins/reporting/server/export_types/csv/create_job.ts index f0f72a0bc9965..e704f9650b7a8 100644 --- a/x-pack/plugins/reporting/server/export_types/csv/create_job.ts +++ b/x-pack/plugins/reporting/server/export_types/csv/create_job.ts @@ -4,15 +4,19 @@ * you may not use this file except in compliance with the Elastic License. */ -import { CSV_JOB_TYPE } from '../../../common/constants'; +import { CSV_JOB_TYPE_DEPRECATED } from '../../../common/constants'; import { cryptoFactory } from '../../lib'; import { CreateJobFn, CreateJobFnFactory } from '../../types'; -import { IndexPatternSavedObject, JobParamsCSV, TaskPayloadCSV } from './types'; +import { + IndexPatternSavedObjectDeprecatedCSV, + JobParamsDeprecatedCSV, + TaskPayloadDeprecatedCSV, +} from './types'; export const createJobFnFactory: CreateJobFnFactory< - CreateJobFn + CreateJobFn > = function createJobFactoryFn(reporting, parentLogger) { - const logger = parentLogger.clone([CSV_JOB_TYPE, 'create-job']); + const logger = parentLogger.clone([CSV_JOB_TYPE_DEPRECATED, 'create-job']); const config = reporting.getConfig(); const crypto = cryptoFactory(config.get('encryptionKey')); @@ -24,7 +28,7 @@ export const createJobFnFactory: CreateJobFnFactory< const indexPatternSavedObject = ((await savedObjectsClient.get( 'index-pattern', jobParams.indexPatternId - )) as unknown) as IndexPatternSavedObject; // FIXME + )) as unknown) as IndexPatternSavedObjectDeprecatedCSV; return { headers: serializedEncryptedHeaders, diff --git a/x-pack/plugins/reporting/server/export_types/csv/execute_job.test.ts b/x-pack/plugins/reporting/server/export_types/csv/execute_job.test.ts index ea65262c090ee..098a90959f8a7 100644 --- a/x-pack/plugins/reporting/server/export_types/csv/execute_job.test.ts +++ b/x-pack/plugins/reporting/server/export_types/csv/execute_job.test.ts @@ -22,7 +22,7 @@ import { LevelLogger } from '../../lib'; import { setFieldFormats } from '../../services'; import { createMockReportingCore } from '../../test_helpers'; import { runTaskFnFactory } from './execute_job'; -import { TaskPayloadCSV } from './types'; +import { TaskPayloadDeprecatedCSV } from './types'; const delay = (ms: number) => new Promise((resolve) => setTimeout(() => resolve(), ms)); @@ -31,7 +31,7 @@ const getRandomScrollId = () => { return puid.generate(); }; -const getBasePayload = (baseObj: any) => baseObj as TaskPayloadCSV; +const getBasePayload = (baseObj: any) => baseObj as TaskPayloadDeprecatedCSV; describe('CSV Execute Job', function () { const encryptionKey = 'testEncryptionKey'; diff --git a/x-pack/plugins/reporting/server/export_types/csv/execute_job.ts b/x-pack/plugins/reporting/server/export_types/csv/execute_job.ts index 6b4dd48583efe..cb321b7573701 100644 --- a/x-pack/plugins/reporting/server/export_types/csv/execute_job.ts +++ b/x-pack/plugins/reporting/server/export_types/csv/execute_job.ts @@ -4,20 +4,20 @@ * you may not use this file except in compliance with the Elastic License. */ -import { CONTENT_TYPE_CSV, CSV_JOB_TYPE } from '../../../common/constants'; +import { CONTENT_TYPE_CSV, CSV_JOB_TYPE_DEPRECATED } from '../../../common/constants'; import { RunTaskFn, RunTaskFnFactory } from '../../types'; import { decryptJobHeaders } from '../common'; import { createGenerateCsv } from './generate_csv'; -import { TaskPayloadCSV } from './types'; +import { TaskPayloadDeprecatedCSV } from './types'; export const runTaskFnFactory: RunTaskFnFactory< - RunTaskFn + RunTaskFn > = function executeJobFactoryFn(reporting, parentLogger) { const config = reporting.getConfig(); return async function runTask(jobId, job, cancellationToken) { const elasticsearch = reporting.getElasticsearchService(); - const logger = parentLogger.clone([CSV_JOB_TYPE, 'execute-job', jobId]); + const logger = parentLogger.clone([CSV_JOB_TYPE_DEPRECATED, 'execute-job', jobId]); const generateCsv = createGenerateCsv(logger); const encryptionKey = config.get('encryptionKey'); diff --git a/x-pack/plugins/reporting/server/export_types/csv/generate_csv/field_format_map.test.ts b/x-pack/plugins/reporting/server/export_types/csv/generate_csv/field_format_map.test.ts index 4cb8de5810584..0c74e3aa54b0e 100644 --- a/x-pack/plugins/reporting/server/export_types/csv/generate_csv/field_format_map.test.ts +++ b/x-pack/plugins/reporting/server/export_types/csv/generate_csv/field_format_map.test.ts @@ -6,13 +6,13 @@ import expect from '@kbn/expect'; import { fieldFormats, FieldFormatsGetConfigFn, UI_SETTINGS } from 'src/plugins/data/server'; -import { IndexPatternSavedObject } from '../types'; +import { IndexPatternSavedObjectDeprecatedCSV } from '../types'; import { fieldFormatMapFactory } from './field_format_map'; type ConfigValue = { number: { id: string; params: {} } } | string; describe('field format map', function () { - const indexPatternSavedObject: IndexPatternSavedObject = { + const indexPatternSavedObject: IndexPatternSavedObjectDeprecatedCSV = { timeFieldName: '@timestamp', title: 'logstash-*', attributes: { diff --git a/x-pack/plugins/reporting/server/export_types/csv/generate_csv/field_format_map.ts b/x-pack/plugins/reporting/server/export_types/csv/generate_csv/field_format_map.ts index e01fee530fc65..c05dc7d3fd75f 100644 --- a/x-pack/plugins/reporting/server/export_types/csv/generate_csv/field_format_map.ts +++ b/x-pack/plugins/reporting/server/export_types/csv/generate_csv/field_format_map.ts @@ -7,7 +7,7 @@ import _ from 'lodash'; import { FieldFormat } from 'src/plugins/data/common'; import { FieldFormatConfig, IFieldFormatsRegistry } from 'src/plugins/data/server'; -import { IndexPatternSavedObject } from '../types'; +import { IndexPatternSavedObjectDeprecatedCSV } from '../types'; /** * Create a map of FieldFormat instances for index pattern fields @@ -17,7 +17,7 @@ import { IndexPatternSavedObject } from '../types'; * @return {Map} key: field name, value: FieldFormat instance */ export function fieldFormatMapFactory( - indexPatternSavedObject: IndexPatternSavedObject, + indexPatternSavedObject: IndexPatternSavedObjectDeprecatedCSV, fieldFormatsRegistry: IFieldFormatsRegistry, timezone: string | undefined ) { diff --git a/x-pack/plugins/reporting/server/export_types/csv/generate_csv/index.ts b/x-pack/plugins/reporting/server/export_types/csv/generate_csv/index.ts index 2f6df9cd67a75..ee09f3904678c 100644 --- a/x-pack/plugins/reporting/server/export_types/csv/generate_csv/index.ts +++ b/x-pack/plugins/reporting/server/export_types/csv/generate_csv/index.ts @@ -12,7 +12,7 @@ import { CSV_BOM_CHARS } from '../../../../common/constants'; import { byteSizeValueToNumber } from '../../../../common/schema_utils'; import { LevelLogger } from '../../../lib'; import { getFieldFormats } from '../../../services'; -import { IndexPatternSavedObject, SavedSearchGeneratorResult } from '../types'; +import { IndexPatternSavedObjectDeprecatedCSV, SavedSearchGeneratorResult } from '../types'; import { checkIfRowsHaveFormulas } from './check_cells_for_formulas'; import { createEscapeValue } from './escape_value'; import { fieldFormatMapFactory } from './field_format_map'; @@ -39,7 +39,7 @@ interface SearchRequest { export interface GenerateCsvParams { browserTimezone?: string; searchRequest: SearchRequest; - indexPatternSavedObject: IndexPatternSavedObject; + indexPatternSavedObject: IndexPatternSavedObjectDeprecatedCSV; fields: string[]; metaFields: string[]; conflictedTypesFields: string[]; diff --git a/x-pack/plugins/reporting/server/export_types/csv/index.ts b/x-pack/plugins/reporting/server/export_types/csv/index.ts index f7b7ff5709fe6..23f4b879eb140 100644 --- a/x-pack/plugins/reporting/server/export_types/csv/index.ts +++ b/x-pack/plugins/reporting/server/export_types/csv/index.ts @@ -5,7 +5,7 @@ */ import { - CSV_JOB_TYPE as jobType, + CSV_JOB_TYPE_DEPRECATED as jobType, LICENSE_TYPE_BASIC, LICENSE_TYPE_ENTERPRISE, LICENSE_TYPE_GOLD, @@ -17,11 +17,11 @@ import { CreateJobFn, ExportTypeDefinition, RunTaskFn } from '../../types'; import { createJobFnFactory } from './create_job'; import { runTaskFnFactory } from './execute_job'; import { metadata } from './metadata'; -import { JobParamsCSV, TaskPayloadCSV } from './types'; +import { JobParamsDeprecatedCSV, TaskPayloadDeprecatedCSV } from './types'; export const getExportType = (): ExportTypeDefinition< - CreateJobFn, - RunTaskFn + CreateJobFn, + RunTaskFn > => ({ ...metadata, jobType, diff --git a/x-pack/plugins/reporting/server/export_types/csv/types.d.ts b/x-pack/plugins/reporting/server/export_types/csv/types.d.ts index 78615a0e7b72c..dd0b37a17a2ff 100644 --- a/x-pack/plugins/reporting/server/export_types/csv/types.d.ts +++ b/x-pack/plugins/reporting/server/export_types/csv/types.d.ts @@ -8,7 +8,7 @@ import { BaseParams, BasePayload } from '../../types'; export type RawValue = string | object | null | undefined; -export interface IndexPatternSavedObject { +export interface IndexPatternSavedObjectDeprecatedCSV { title: string; timeFieldName: string; fields?: any[]; @@ -18,25 +18,25 @@ export interface IndexPatternSavedObject { }; } -interface BaseParamsCSV { - searchRequest: SearchRequest; +interface BaseParamsDeprecatedCSV { + searchRequest: SearchRequestDeprecatedCSV; fields: string[]; metaFields: string[]; conflictedTypesFields: string[]; } -export type JobParamsCSV = BaseParamsCSV & +export type JobParamsDeprecatedCSV = BaseParamsDeprecatedCSV & BaseParams & { indexPatternId: string; }; // CSV create job method converts indexPatternID to indexPatternSavedObject -export type TaskPayloadCSV = BaseParamsCSV & +export type TaskPayloadDeprecatedCSV = BaseParamsDeprecatedCSV & BasePayload & { - indexPatternSavedObject: IndexPatternSavedObject; + indexPatternSavedObject: IndexPatternSavedObjectDeprecatedCSV; }; -export interface SearchRequest { +export interface SearchRequestDeprecatedCSV { index: string; body: | { @@ -66,7 +66,7 @@ export interface SearchRequest { | any; } -type FormatsMap = Map< +type FormatsMapDeprecatedCSV = Map< string, { id: string; diff --git a/x-pack/plugins/reporting/server/export_types/csv_from_savedobject/lib/get_data_source.ts b/x-pack/plugins/reporting/server/export_types/csv_from_savedobject/lib/get_data_source.ts index e3631b9c89724..fa983c5af639c 100644 --- a/x-pack/plugins/reporting/server/export_types/csv_from_savedobject/lib/get_data_source.ts +++ b/x-pack/plugins/reporting/server/export_types/csv_from_savedobject/lib/get_data_source.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { IndexPatternSavedObject } from '../../csv/types'; +import { IndexPatternSavedObjectDeprecatedCSV } from '../../csv/types'; import { SavedObjectReference, SavedSearchObjectAttributesJSON, SearchSource } from '../types'; export async function getDataSource( @@ -12,10 +12,10 @@ export async function getDataSource( indexPatternId?: string, savedSearchObjectId?: string ): Promise<{ - indexPatternSavedObject: IndexPatternSavedObject; + indexPatternSavedObject: IndexPatternSavedObjectDeprecatedCSV; searchSource: SearchSource | null; }> { - let indexPatternSavedObject: IndexPatternSavedObject; + let indexPatternSavedObject: IndexPatternSavedObjectDeprecatedCSV; let searchSource: SearchSource | null = null; if (savedSearchObjectId) { diff --git a/x-pack/plugins/reporting/server/routes/lib/get_document_payload.ts b/x-pack/plugins/reporting/server/routes/lib/get_document_payload.ts index 7706aa9d650c7..641ce6e48a1f3 100644 --- a/x-pack/plugins/reporting/server/routes/lib/get_document_payload.ts +++ b/x-pack/plugins/reporting/server/routes/lib/get_document_payload.ts @@ -7,7 +7,7 @@ // @ts-ignore import contentDisposition from 'content-disposition'; import { get } from 'lodash'; -import { CSV_JOB_TYPE } from '../../../common/constants'; +import { CSV_JOB_TYPE_DEPRECATED } from '../../../common/constants'; import { ExportTypesRegistry, statuses } from '../../lib'; import { ReportDocument } from '../../lib/store'; import { TaskRunResult } from '../../lib/tasks'; @@ -33,7 +33,7 @@ const getTitle = (exportType: ExportTypeDefinition, title?: string): string => const getReportingHeaders = (output: TaskRunResult, exportType: ExportTypeDefinition) => { const metaDataHeaders: Record = {}; - if (exportType.jobType === CSV_JOB_TYPE) { + if (exportType.jobType === CSV_JOB_TYPE_DEPRECATED) { const csvContainsFormulas = get(output, 'csv_contains_formulas', false); const maxSizedReach = get(output, 'max_size_reached', false); diff --git a/x-pack/plugins/reporting/server/usage/decorate_range_stats.ts b/x-pack/plugins/reporting/server/usage/decorate_range_stats.ts index 30befcf291a54..8d69d75f66212 100644 --- a/x-pack/plugins/reporting/server/usage/decorate_range_stats.ts +++ b/x-pack/plugins/reporting/server/usage/decorate_range_stats.ts @@ -5,7 +5,7 @@ */ import { uniq } from 'lodash'; -import { CSV_JOB_TYPE, PDF_JOB_TYPE, PNG_JOB_TYPE } from '../../common/constants'; +import { CSV_JOB_TYPE_DEPRECATED, PDF_JOB_TYPE, PNG_JOB_TYPE } from '../../common/constants'; import { AvailableTotal, ExportType, FeatureAvailabilityMap, RangeStats } from './types'; function getForFeature( @@ -54,7 +54,7 @@ export const decorateRangeStats = ( // combine the known types with any unknown type found in reporting data const keysBasic = uniq([ - CSV_JOB_TYPE, + CSV_JOB_TYPE_DEPRECATED, PNG_JOB_TYPE, ...Object.keys(rangeStatsBasic), ]) as ExportType[]; From e4c344ada604781e8cd0f484a190bb022843a3d9 Mon Sep 17 00:00:00 2001 From: Patrick Mueller Date: Mon, 1 Feb 2021 12:22:29 -0500 Subject: [PATCH 37/85] [data] change KQL node builder to not generate recursive and/or clauses (#89345) resolves https://github.com/elastic/kibana/issues/88367 Prior to this PR, the KQL node_builder code was using recursion to generate "and" & "or" expressions. Eg, `and(foo1=bar1, foo2=bar2, foo3=bar3)` would be generated as if was specified as `and(foo1=bar1, and(foo2=bar2, foo3=bar3))`. Calls to the builder with long lists of expressions would generate nested JSON as deep as the lists are long. This is problematic, as Elasticsearch is changing the default limit on nested bools to 20 levels, and alerting already generates nested bools greater than that limit. See: https://github.com/elastic/elasticsearch/issues/55303 This PR changes the generated shape of above, so that all the nodes are at the same level, instead of the previous "recursive" treatment. --- packages/kbn-es/src/cluster.js | 2 +- .../src/integration_tests/cluster.test.js | 8 +- .../kuery/node_types/node_builder.test.ts | 280 +++++++++++ .../es_query/kuery/node_types/node_builder.ts | 10 +- .../alerts_authorization.test.ts.snap | 316 ++++++++++++ .../alerts_authorization_kuery.test.ts.snap | 448 ++++++++++++++++++ .../alerts_authorization.test.ts | 17 +- .../alerts_authorization_kuery.test.ts | 40 +- 8 files changed, 1086 insertions(+), 35 deletions(-) create mode 100644 src/plugins/data/common/es_query/kuery/node_types/node_builder.test.ts create mode 100644 x-pack/plugins/alerts/server/authorization/__snapshots__/alerts_authorization.test.ts.snap create mode 100644 x-pack/plugins/alerts/server/authorization/__snapshots__/alerts_authorization_kuery.test.ts.snap diff --git a/packages/kbn-es/src/cluster.js b/packages/kbn-es/src/cluster.js index f554dd8a1b8e5..5948e9ecececc 100644 --- a/packages/kbn-es/src/cluster.js +++ b/packages/kbn-es/src/cluster.js @@ -246,7 +246,7 @@ exports.Cluster = class Cluster { this._log.info(chalk.bold('Starting')); this._log.indent(4); - const esArgs = ['indices.query.bool.max_nested_depth=100'].concat(options.esArgs || []); + const esArgs = options.esArgs || []; // Add to esArgs if ssl is enabled if (this._ssl) { diff --git a/packages/kbn-es/src/integration_tests/cluster.test.js b/packages/kbn-es/src/integration_tests/cluster.test.js index c1adc84ddc954..684667355852d 100644 --- a/packages/kbn-es/src/integration_tests/cluster.test.js +++ b/packages/kbn-es/src/integration_tests/cluster.test.js @@ -264,9 +264,7 @@ describe('#start(installPath)', () => { expect(extractConfigFiles.mock.calls).toMatchInlineSnapshot(` Array [ Array [ - Array [ - "indices.query.bool.max_nested_depth=100", - ], + Array [], undefined, Object { "log": , @@ -342,9 +340,7 @@ describe('#run()', () => { expect(extractConfigFiles.mock.calls).toMatchInlineSnapshot(` Array [ Array [ - Array [ - "indices.query.bool.max_nested_depth=100", - ], + Array [], undefined, Object { "log": , diff --git a/src/plugins/data/common/es_query/kuery/node_types/node_builder.test.ts b/src/plugins/data/common/es_query/kuery/node_types/node_builder.test.ts new file mode 100644 index 0000000000000..df78d68aaef48 --- /dev/null +++ b/src/plugins/data/common/es_query/kuery/node_types/node_builder.test.ts @@ -0,0 +1,280 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * and the Server Side Public License, v 1; you may not use this file except in + * compliance with, at your election, the Elastic License or the Server Side + * Public License, v 1. + */ + +import { nodeBuilder } from './node_builder'; +import { toElasticsearchQuery } from '../index'; + +describe('nodeBuilder', () => { + describe('is method', () => { + test('string value', () => { + const nodes = nodeBuilder.is('foo', 'bar'); + const query = toElasticsearchQuery(nodes); + expect(query).toMatchInlineSnapshot(` + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo": "bar", + }, + }, + ], + }, + } + `); + }); + + test('KueryNode value', () => { + const literalValue = { + type: 'literal' as 'literal', + value: 'bar', + }; + const nodes = nodeBuilder.is('foo', literalValue); + const query = toElasticsearchQuery(nodes); + expect(query).toMatchInlineSnapshot(` + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo": "bar", + }, + }, + ], + }, + } + `); + }); + }); + + describe('and method', () => { + test('single clause', () => { + const nodes = [nodeBuilder.is('foo', 'bar')]; + const query = toElasticsearchQuery(nodeBuilder.and(nodes)); + expect(query).toMatchInlineSnapshot(` + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo": "bar", + }, + }, + ], + }, + } + `); + }); + + test('two clauses', () => { + const nodes = [nodeBuilder.is('foo1', 'bar1'), nodeBuilder.is('foo2', 'bar2')]; + const query = toElasticsearchQuery(nodeBuilder.and(nodes)); + expect(query).toMatchInlineSnapshot(` + Object { + "bool": Object { + "filter": Array [ + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo1": "bar1", + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo2": "bar2", + }, + }, + ], + }, + }, + ], + }, + } + `); + }); + + test('three clauses', () => { + const nodes = [ + nodeBuilder.is('foo1', 'bar1'), + nodeBuilder.is('foo2', 'bar2'), + nodeBuilder.is('foo3', 'bar3'), + ]; + const query = toElasticsearchQuery(nodeBuilder.and(nodes)); + expect(query).toMatchInlineSnapshot(` + Object { + "bool": Object { + "filter": Array [ + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo1": "bar1", + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo2": "bar2", + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo3": "bar3", + }, + }, + ], + }, + }, + ], + }, + } + `); + }); + }); + + describe('or method', () => { + test('single clause', () => { + const nodes = [nodeBuilder.is('foo', 'bar')]; + const query = toElasticsearchQuery(nodeBuilder.or(nodes)); + expect(query).toMatchInlineSnapshot(` + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo": "bar", + }, + }, + ], + }, + } + `); + }); + + test('two clauses', () => { + const nodes = [nodeBuilder.is('foo1', 'bar1'), nodeBuilder.is('foo2', 'bar2')]; + const query = toElasticsearchQuery(nodeBuilder.or(nodes)); + expect(query).toMatchInlineSnapshot(` + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo1": "bar1", + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo2": "bar2", + }, + }, + ], + }, + }, + ], + }, + } + `); + }); + + test('three clauses', () => { + const nodes = [ + nodeBuilder.is('foo1', 'bar1'), + nodeBuilder.is('foo2', 'bar2'), + nodeBuilder.is('foo3', 'bar3'), + ]; + const query = toElasticsearchQuery(nodeBuilder.or(nodes)); + expect(query).toMatchInlineSnapshot(` + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo1": "bar1", + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo2": "bar2", + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match": Object { + "foo3": "bar3", + }, + }, + ], + }, + }, + ], + }, + } + `); + }); + }); +}); diff --git a/src/plugins/data/common/es_query/kuery/node_types/node_builder.ts b/src/plugins/data/common/es_query/kuery/node_types/node_builder.ts index a72c7f2db41a8..6da9c3aa293ef 100644 --- a/src/plugins/data/common/es_query/kuery/node_types/node_builder.ts +++ b/src/plugins/data/common/es_query/kuery/node_types/node_builder.ts @@ -16,12 +16,10 @@ export const nodeBuilder = { nodeTypes.literal.buildNode(false), ]); }, - or: ([first, ...args]: KueryNode[]): KueryNode => { - return args.length ? nodeTypes.function.buildNode('or', [first, nodeBuilder.or(args)]) : first; + or: (nodes: KueryNode[]): KueryNode => { + return nodes.length > 1 ? nodeTypes.function.buildNode('or', nodes) : nodes[0]; }, - and: ([first, ...args]: KueryNode[]): KueryNode => { - return args.length - ? nodeTypes.function.buildNode('and', [first, nodeBuilder.and(args)]) - : first; + and: (nodes: KueryNode[]): KueryNode => { + return nodes.length > 1 ? nodeTypes.function.buildNode('and', nodes) : nodes[0]; }, }; diff --git a/x-pack/plugins/alerts/server/authorization/__snapshots__/alerts_authorization.test.ts.snap b/x-pack/plugins/alerts/server/authorization/__snapshots__/alerts_authorization.test.ts.snap new file mode 100644 index 0000000000000..f9a28dc3eb119 --- /dev/null +++ b/x-pack/plugins/alerts/server/authorization/__snapshots__/alerts_authorization.test.ts.snap @@ -0,0 +1,316 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AlertsAuthorization getFindAuthorizationFilter creates a filter based on the privileged types 1`] = ` +Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.alertTypeId", + }, + Object { + "type": "literal", + "value": "myAppAlertType", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "alerts", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myOtherApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myAppWithSubFeature", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "or", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.alertTypeId", + }, + Object { + "type": "literal", + "value": "myOtherAppAlertType", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "alerts", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myOtherApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myAppWithSubFeature", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "or", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.alertTypeId", + }, + Object { + "type": "literal", + "value": "mySecondAppAlertType", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "alerts", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myOtherApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myAppWithSubFeature", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "or", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + ], + "function": "or", + "type": "function", +} +`; diff --git a/x-pack/plugins/alerts/server/authorization/__snapshots__/alerts_authorization_kuery.test.ts.snap b/x-pack/plugins/alerts/server/authorization/__snapshots__/alerts_authorization_kuery.test.ts.snap new file mode 100644 index 0000000000000..de01a7b27ef05 --- /dev/null +++ b/x-pack/plugins/alerts/server/authorization/__snapshots__/alerts_authorization_kuery.test.ts.snap @@ -0,0 +1,448 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`asFiltersByAlertTypeAndConsumer constructs filter for multiple alert types across authorized consumer 1`] = ` +Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.alertTypeId", + }, + Object { + "type": "literal", + "value": "myAppAlertType", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "alerts", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myOtherApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myAppWithSubFeature", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "or", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.alertTypeId", + }, + Object { + "type": "literal", + "value": "myOtherAppAlertType", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "alerts", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myOtherApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myAppWithSubFeature", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "or", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.alertTypeId", + }, + Object { + "type": "literal", + "value": "mySecondAppAlertType", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "alerts", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myOtherApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myAppWithSubFeature", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "or", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + ], + "function": "or", + "type": "function", +} +`; + +exports[`asFiltersByAlertTypeAndConsumer constructs filter for single alert type with multiple authorized consumer 1`] = ` +Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.alertTypeId", + }, + Object { + "type": "literal", + "value": "myAppAlertType", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "alerts", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myOtherApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "or", + "type": "function", + }, + ], + "function": "and", + "type": "function", +} +`; + +exports[`asFiltersByAlertTypeAndConsumer constructs filter for single alert type with single authorized consumer 1`] = ` +Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.alertTypeId", + }, + Object { + "type": "literal", + "value": "myAppAlertType", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "alert.attributes.consumer", + }, + Object { + "type": "literal", + "value": "myApp", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "and", + "type": "function", +} +`; diff --git a/x-pack/plugins/alerts/server/authorization/alerts_authorization.test.ts b/x-pack/plugins/alerts/server/authorization/alerts_authorization.test.ts index a7d9421073483..fc895f3e308f4 100644 --- a/x-pack/plugins/alerts/server/authorization/alerts_authorization.test.ts +++ b/x-pack/plugins/alerts/server/authorization/alerts_authorization.test.ts @@ -6,7 +6,6 @@ import { KibanaRequest } from 'kibana/server'; import { alertTypeRegistryMock } from '../alert_type_registry.mock'; import { securityMock } from '../../../../plugins/security/server/mocks'; -import { esKuery } from '../../../../../src/plugins/data/server'; import { PluginStartContract as FeaturesStartContract, KibanaFeature, @@ -627,11 +626,17 @@ describe('AlertsAuthorization', () => { }); alertTypeRegistry.list.mockReturnValue(setOfAlertTypes); - expect((await alertAuthorization.getFindAuthorizationFilter()).filter).toEqual( - esKuery.fromKueryExpression( - `((alert.attributes.alertTypeId:myAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (alert.attributes.alertTypeId:myOtherAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (alert.attributes.alertTypeId:mySecondAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)))` - ) - ); + // TODO: once issue https://github.com/elastic/kibana/issues/89473 is + // resolved, we can start using this code again, instead of toMatchSnapshot(): + // + // expect((await alertAuthorization.getFindAuthorizationFilter()).filter).toEqual( + // esKuery.fromKueryExpression( + // `((alert.attributes.alertTypeId:myAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (alert.attributes.alertTypeId:myOtherAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (alert.attributes.alertTypeId:mySecondAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)))` + // ) + // ); + + // This code is the replacement code for above + expect((await alertAuthorization.getFindAuthorizationFilter()).filter).toMatchSnapshot(); expect(auditLogger.alertsAuthorizationSuccess).not.toHaveBeenCalled(); }); diff --git a/x-pack/plugins/alerts/server/authorization/alerts_authorization_kuery.test.ts b/x-pack/plugins/alerts/server/authorization/alerts_authorization_kuery.test.ts index 8249047c0ef39..3d80ff0273db7 100644 --- a/x-pack/plugins/alerts/server/authorization/alerts_authorization_kuery.test.ts +++ b/x-pack/plugins/alerts/server/authorization/alerts_authorization_kuery.test.ts @@ -3,7 +3,6 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { esKuery } from '../../../../../src/plugins/data/server'; import { RecoveredActionGroup } from '../../common'; import { asFiltersByAlertTypeAndConsumer, @@ -30,11 +29,14 @@ describe('asFiltersByAlertTypeAndConsumer', () => { }, ]) ) - ).toEqual( - esKuery.fromKueryExpression( - `((alert.attributes.alertTypeId:myAppAlertType and alert.attributes.consumer:(myApp)))` - ) - ); + ).toMatchSnapshot(); + // TODO: once issue https://github.com/elastic/kibana/issues/89473 is + // resolved, we can start using this code again instead of toMatchSnapshot() + // ).toEqual( + // esKuery.fromKueryExpression( + // `((alert.attributes.alertTypeId:myAppAlertType and alert.attributes.consumer:(myApp)))` + // ) + // ); }); test('constructs filter for single alert type with multiple authorized consumer', async () => { @@ -58,11 +60,14 @@ describe('asFiltersByAlertTypeAndConsumer', () => { }, ]) ) - ).toEqual( - esKuery.fromKueryExpression( - `((alert.attributes.alertTypeId:myAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp)))` - ) - ); + ).toMatchSnapshot(); + // TODO: once issue https://github.com/elastic/kibana/issues/89473 is + // resolved, we can start using this code again, instead of toMatchSnapshot(): + // ).toEqual( + // esKuery.fromKueryExpression( + // `((alert.attributes.alertTypeId:myAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp)))` + // ) + // ); }); test('constructs filter for multiple alert types across authorized consumer', async () => { @@ -119,11 +124,14 @@ describe('asFiltersByAlertTypeAndConsumer', () => { }, ]) ) - ).toEqual( - esKuery.fromKueryExpression( - `((alert.attributes.alertTypeId:myAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (alert.attributes.alertTypeId:myOtherAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (alert.attributes.alertTypeId:mySecondAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)))` - ) - ); + ).toMatchSnapshot(); + // TODO: once issue https://github.com/elastic/kibana/issues/89473 is + // resolved, we can start using this code again, instead of toMatchSnapshot(): + // ).toEqual( + // esKuery.fromKueryExpression( + // `((alert.attributes.alertTypeId:myAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (alert.attributes.alertTypeId:myOtherAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)) or (alert.attributes.alertTypeId:mySecondAppAlertType and alert.attributes.consumer:(alerts or myApp or myOtherApp or myAppWithSubFeature)))` + // ) + // ); }); }); From cb16a5c042d34facb22563aeda09a789f0c95943 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Mon, 1 Feb 2021 09:24:12 -0800 Subject: [PATCH 38/85] [Fleet] Update data streams mappings directly instead of against backing indices (#89660) * Update data streams mappings directly instead of querying for backing indices, update integration tests to test with multiple namespaces * Add flag to only update mappings of the current write index Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../epm/elasticsearch/template/template.ts | 99 ++++-------- .../apis/epm/data_stream.ts | 148 ++++++++++-------- 2 files changed, 112 insertions(+), 135 deletions(-) diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts index e1fa2a0b18b59..95f9997645176 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts @@ -11,7 +11,6 @@ import { TemplateRef, IndexTemplate, IndexTemplateMappings, - DataType, } from '../../../../types'; import { getRegistryDataStreamAssetBaseName } from '../index'; @@ -26,8 +25,8 @@ interface MultiFields { export interface IndexTemplateMapping { [key: string]: any; } -export interface CurrentIndex { - indexName: string; +export interface CurrentDataStream { + dataStreamName: string; indexTemplate: IndexTemplate; } const DEFAULT_SCALING_FACTOR = 1000; @@ -348,33 +347,31 @@ export const updateCurrentWriteIndices = async ( ): Promise => { if (!templates.length) return; - const allIndices = await queryIndicesFromTemplates(callCluster, templates); + const allIndices = await queryDataStreamsFromTemplates(callCluster, templates); if (!allIndices.length) return; - return updateAllIndices(allIndices, callCluster); + return updateAllDataStreams(allIndices, callCluster); }; -function isCurrentIndex(item: CurrentIndex[] | undefined): item is CurrentIndex[] { +function isCurrentDataStream(item: CurrentDataStream[] | undefined): item is CurrentDataStream[] { return item !== undefined; } -const queryIndicesFromTemplates = async ( +const queryDataStreamsFromTemplates = async ( callCluster: CallESAsCurrentUser, templates: TemplateRef[] -): Promise => { - const indexPromises = templates.map((template) => { - return getIndices(callCluster, template); +): Promise => { + const dataStreamPromises = templates.map((template) => { + return getDataStreams(callCluster, template); }); - const indexObjects = await Promise.all(indexPromises); - return indexObjects.filter(isCurrentIndex).flat(); + const dataStreamObjects = await Promise.all(dataStreamPromises); + return dataStreamObjects.filter(isCurrentDataStream).flat(); }; -const getIndices = async ( +const getDataStreams = async ( callCluster: CallESAsCurrentUser, template: TemplateRef -): Promise => { +): Promise => { const { templateName, indexTemplate } = template; - // Until ES provides a way to update mappings of a data stream - // get the last index of the data stream, which is the current write index const res = await callCluster('transport.request', { method: 'GET', path: `/_data_stream/${templateName}-*`, @@ -382,26 +379,28 @@ const getIndices = async ( const dataStreams = res.data_streams; if (!dataStreams.length) return; return dataStreams.map((dataStream: any) => ({ - indexName: dataStream.indices[dataStream.indices.length - 1].index_name, + dataStreamName: dataStream.name, indexTemplate, })); }; -const updateAllIndices = async ( - indexNameWithTemplates: CurrentIndex[], +const updateAllDataStreams = async ( + indexNameWithTemplates: CurrentDataStream[], callCluster: CallESAsCurrentUser ): Promise => { - const updateIndexPromises = indexNameWithTemplates.map(({ indexName, indexTemplate }) => { - return updateExistingIndex({ indexName, callCluster, indexTemplate }); - }); - await Promise.all(updateIndexPromises); + const updatedataStreamPromises = indexNameWithTemplates.map( + ({ dataStreamName, indexTemplate }) => { + return updateExistingDataStream({ dataStreamName, callCluster, indexTemplate }); + } + ); + await Promise.all(updatedataStreamPromises); }; -const updateExistingIndex = async ({ - indexName, +const updateExistingDataStream = async ({ + dataStreamName, callCluster, indexTemplate, }: { - indexName: string; + dataStreamName: string; callCluster: CallESAsCurrentUser; indexTemplate: IndexTemplate; }) => { @@ -416,53 +415,13 @@ const updateExistingIndex = async ({ // try to update the mappings first try { await callCluster('indices.putMapping', { - index: indexName, + index: dataStreamName, body: mappings, + write_index_only: true, }); // if update fails, rollover data stream } catch (err) { try { - // get the data_stream values to compose datastream name - const searchDataStreamFieldsResponse = await callCluster('search', { - index: indexTemplate.index_patterns[0], - body: { - size: 1, - _source: ['data_stream.namespace', 'data_stream.type', 'data_stream.dataset'], - query: { - bool: { - filter: [ - { - exists: { - field: 'data_stream.type', - }, - }, - { - exists: { - field: 'data_stream.dataset', - }, - }, - { - exists: { - field: 'data_stream.namespace', - }, - }, - ], - }, - }, - }, - }); - if (searchDataStreamFieldsResponse.hits.total.value === 0) - throw new Error('data_stream fields are missing from datastream indices'); - const { - dataset, - namespace, - type, - }: { - dataset: string; - namespace: string; - type: DataType; - } = searchDataStreamFieldsResponse.hits.hits[0]._source.data_stream; - const dataStreamName = `${type}-${dataset}-${namespace}`; const path = `/${dataStreamName}/_rollover`; await callCluster('transport.request', { method: 'POST', @@ -478,10 +437,10 @@ const updateExistingIndex = async ({ if (!settings.index.default_pipeline) return; try { await callCluster('indices.putSettings', { - index: indexName, + index: dataStreamName, body: { index: { default_pipeline: settings.index.default_pipeline } }, }); } catch (err) { - throw new Error(`could not update index template settings for ${indexName}`); + throw new Error(`could not update index template settings for ${dataStreamName}`); } }; diff --git a/x-pack/test/fleet_api_integration/apis/epm/data_stream.ts b/x-pack/test/fleet_api_integration/apis/epm/data_stream.ts index 574ff6dd615ad..a43f51a1655e5 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/data_stream.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/data_stream.ts @@ -12,8 +12,6 @@ export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const es = getService('es'); - const dockerServers = getService('dockerServers'); - const server = dockerServers.get('registry'); const pkgName = 'datastreams'; const pkgVersion = '0.1.0'; const pkgUpdateVersion = '0.2.0'; @@ -21,6 +19,7 @@ export default function (providerContext: FtrProviderContext) { const pkgUpdateKey = `${pkgName}-${pkgUpdateVersion}`; const logsTemplateName = `logs-${pkgName}.test_logs`; const metricsTemplateName = `metrics-${pkgName}.test_metrics`; + const namespaces = ['default', 'foo', 'bar']; const uninstallPackage = async (pkg: string) => { await supertest.delete(`/api/fleet/epm/packages/${pkg}`).set('kbn-xsrf', 'xxxx'); @@ -35,86 +34,105 @@ export default function (providerContext: FtrProviderContext) { describe('datastreams', async () => { skipIfNoDockerRegistry(providerContext); + beforeEach(async () => { await installPackage(pkgKey); - await es.transport.request({ - method: 'POST', - path: `/${logsTemplateName}-default/_doc`, - body: { - '@timestamp': '2015-01-01', - logs_test_name: 'test', - data_stream: { - dataset: `${pkgName}.test_logs`, - namespace: 'default', - type: 'logs', - }, - }, - }); - await es.transport.request({ - method: 'POST', - path: `/${metricsTemplateName}-default/_doc`, - body: { - '@timestamp': '2015-01-01', - logs_test_name: 'test', - data_stream: { - dataset: `${pkgName}.test_metrics`, - namespace: 'default', - type: 'metrics', - }, - }, - }); + await Promise.all( + namespaces.map(async (namespace) => { + const createLogsRequest = es.transport.request({ + method: 'POST', + path: `/${logsTemplateName}-${namespace}/_doc`, + body: { + '@timestamp': '2015-01-01', + logs_test_name: 'test', + data_stream: { + dataset: `${pkgName}.test_logs`, + namespace, + type: 'logs', + }, + }, + }); + const createMetricsRequest = es.transport.request({ + method: 'POST', + path: `/${metricsTemplateName}-${namespace}/_doc`, + body: { + '@timestamp': '2015-01-01', + logs_test_name: 'test', + data_stream: { + dataset: `${pkgName}.test_metrics`, + namespace, + type: 'metrics', + }, + }, + }); + return Promise.all([createLogsRequest, createMetricsRequest]); + }) + ); }); + afterEach(async () => { - if (!server.enabled) return; - await es.transport.request({ - method: 'DELETE', - path: `/_data_stream/${logsTemplateName}-default`, - }); - await es.transport.request({ - method: 'DELETE', - path: `/_data_stream/${metricsTemplateName}-default`, - }); + await Promise.all( + namespaces.map(async (namespace) => { + const deleteLogsRequest = es.transport.request({ + method: 'DELETE', + path: `/_data_stream/${logsTemplateName}-${namespace}`, + }); + const deleteMetricsRequest = es.transport.request({ + method: 'DELETE', + path: `/_data_stream/${metricsTemplateName}-${namespace}`, + }); + return Promise.all([deleteLogsRequest, deleteMetricsRequest]); + }) + ); await uninstallPackage(pkgKey); await uninstallPackage(pkgUpdateKey); }); + it('should list the logs and metrics datastream', async function () { - const resLogsDatastream = await es.transport.request({ - method: 'GET', - path: `/_data_stream/${logsTemplateName}-default`, - }); - const resMetricsDatastream = await es.transport.request({ - method: 'GET', - path: `/_data_stream/${metricsTemplateName}-default`, + namespaces.forEach(async (namespace) => { + const resLogsDatastream = await es.transport.request({ + method: 'GET', + path: `/_data_stream/${logsTemplateName}-${namespace}`, + }); + const resMetricsDatastream = await es.transport.request({ + method: 'GET', + path: `/_data_stream/${metricsTemplateName}-${namespace}`, + }); + expect(resLogsDatastream.body.data_streams.length).equal(1); + expect(resLogsDatastream.body.data_streams[0].indices.length).equal(1); + expect(resMetricsDatastream.body.data_streams.length).equal(1); + expect(resMetricsDatastream.body.data_streams[0].indices.length).equal(1); }); - expect(resLogsDatastream.body.data_streams.length).equal(1); - expect(resLogsDatastream.body.data_streams[0].indices.length).equal(1); - expect(resMetricsDatastream.body.data_streams.length).equal(1); - expect(resMetricsDatastream.body.data_streams[0].indices.length).equal(1); }); it('after update, it should have rolled over logs datastream because mappings are not compatible and not metrics', async function () { await installPackage(pkgUpdateKey); - const resLogsDatastream = await es.transport.request({ - method: 'GET', - path: `/_data_stream/${logsTemplateName}-default`, - }); - const resMetricsDatastream = await es.transport.request({ - method: 'GET', - path: `/_data_stream/${metricsTemplateName}-default`, + namespaces.forEach(async (namespace) => { + const resLogsDatastream = await es.transport.request({ + method: 'GET', + path: `/_data_stream/${logsTemplateName}-${namespace}`, + }); + const resMetricsDatastream = await es.transport.request({ + method: 'GET', + path: `/_data_stream/${metricsTemplateName}-${namespace}`, + }); + expect(resLogsDatastream.body.data_streams[0].indices.length).equal(2); + expect(resMetricsDatastream.body.data_streams[0].indices.length).equal(1); }); - expect(resLogsDatastream.body.data_streams[0].indices.length).equal(2); - expect(resMetricsDatastream.body.data_streams[0].indices.length).equal(1); }); + it('should be able to upgrade a package after a rollover', async function () { - await es.transport.request({ - method: 'POST', - path: `/${logsTemplateName}-default/_rollover`, - }); - const resLogsDatastream = await es.transport.request({ - method: 'GET', - path: `/_data_stream/${logsTemplateName}-default`, + namespaces.forEach(async (namespace) => { + await es.transport.request({ + method: 'POST', + path: `/${logsTemplateName}-${namespace}/_rollover`, + }); + const resLogsDatastream = await es.transport.request({ + method: 'GET', + path: `/_data_stream/${logsTemplateName}-${namespace}`, + }); + expect(resLogsDatastream.body.data_streams[0].indices.length).equal(2); }); - expect(resLogsDatastream.body.data_streams[0].indices.length).equal(2); await installPackage(pkgUpdateKey); }); }); From 9787911c5fa23acc096ad925bd2b6b883c38877b Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Mon, 1 Feb 2021 10:26:33 -0700 Subject: [PATCH 39/85] Migrates ingest_pipelines to a TS project ref (#89505) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../add_docs_accordion.scss} | 0 .../add_docs_accordion.tsx} | 2 +- .../index.ts | 2 +- .../tab_documents/tab_documents.tsx | 2 +- x-pack/plugins/ingest_pipelines/tsconfig.json | 28 +++++++++++++++++++ x-pack/test/tsconfig.json | 1 + x-pack/tsconfig.json | 6 ++++ x-pack/tsconfig.refs.json | 11 ++++++++ 8 files changed, 49 insertions(+), 3 deletions(-) rename x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/{add_documents_accordion/add_documents_accordion.scss => add_docs_accordion/add_docs_accordion.scss} (100%) rename x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/{add_documents_accordion/add_documents_accordion.tsx => add_docs_accordion/add_docs_accordion.tsx} (98%) rename x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/{add_documents_accordion => add_docs_accordion}/index.ts (78%) create mode 100644 x-pack/plugins/ingest_pipelines/tsconfig.json diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.scss b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_docs_accordion/add_docs_accordion.scss similarity index 100% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.scss rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_docs_accordion/add_docs_accordion.scss diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_docs_accordion/add_docs_accordion.tsx similarity index 98% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.tsx rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_docs_accordion/add_docs_accordion.tsx index 9519d849e5d90..cbbd032f25b3d 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_docs_accordion/add_docs_accordion.tsx @@ -15,7 +15,7 @@ import { useKibana } from '../../../../../../../../shared_imports'; import { useIsMounted } from '../../../../../use_is_mounted'; import { AddDocumentForm } from '../add_document_form'; -import './add_documents_accordion.scss'; +import './add_docs_accordion.scss'; const DISCOVER_URL_GENERATOR_ID = 'DISCOVER_APP_URL_GENERATOR'; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/index.ts b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_docs_accordion/index.ts similarity index 78% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/index.ts rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_docs_accordion/index.ts index cb00ec640b5a6..5f7939690fa55 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/index.ts +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_docs_accordion/index.ts @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { AddDocumentsAccordion } from './add_documents_accordion'; +export { AddDocumentsAccordion } from './add_docs_accordion'; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.tsx index 6888f947b8606..dccc343e9359c 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.tsx @@ -23,7 +23,7 @@ import { Form, } from '../../../../../../../shared_imports'; import { Document } from '../../../../types'; -import { AddDocumentsAccordion } from './add_documents_accordion'; +import { AddDocumentsAccordion } from './add_docs_accordion'; import { ResetDocumentsModal } from './reset_documents_modal'; import './tab_documents.scss'; diff --git a/x-pack/plugins/ingest_pipelines/tsconfig.json b/x-pack/plugins/ingest_pipelines/tsconfig.json new file mode 100644 index 0000000000000..5d78992600e81 --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/tsconfig.json @@ -0,0 +1,28 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true + }, + "include": [ + "common/**/*", + "public/**/*", + "server/**/*", + "__jest__/**/*", + "../../typings/**/*" + ], + "references": [ + { "path": "../../../src/core/tsconfig.json" }, + { "path": "../licensing/tsconfig.json" }, + { "path": "../features/tsconfig.json" }, + { "path": "../security/tsconfig.json" }, + { "path": "../../../src/plugins/es_ui_shared/tsconfig.json"}, + { "path": "../../../src/plugins/kibana_react/tsconfig.json"}, + { "path": "../../../src/plugins/management/tsconfig.json"}, + { "path": "../../../src/plugins/share/tsconfig.json"}, + { "path": "../../../src/plugins/usage_collection/tsconfig.json"}, + ] +} diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 12cd2896faaa8..783315b36efaf 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -61,6 +61,7 @@ { "path": "../plugins/cloud/tsconfig.json" }, { "path": "../plugins/saved_objects_tagging/tsconfig.json" }, { "path": "../plugins/global_search_bar/tsconfig.json" }, + { "path": "../plugins/ingest_pipelines/tsconfig.json" }, { "path": "../plugins/license_management/tsconfig.json" }, { "path": "../plugins/painless_lab/tsconfig.json" }, { "path": "../plugins/watcher/tsconfig.json" } diff --git a/x-pack/tsconfig.json b/x-pack/tsconfig.json index 85e285f3c83ac..c93bc2c5bd181 100644 --- a/x-pack/tsconfig.json +++ b/x-pack/tsconfig.json @@ -40,6 +40,7 @@ "plugins/cloud/**/*", "plugins/saved_objects_tagging/**/*", "plugins/global_search_bar/**/*", + "plugins/ingest_pipelines/**/*", "plugins/license_management/**/*", "plugins/painless_lab/**/*", "plugins/watcher/**/*", @@ -115,6 +116,11 @@ { "path": "./plugins/task_manager/tsconfig.json" }, { "path": "./plugins/telemetry_collection_xpack/tsconfig.json" }, { "path": "./plugins/translations/tsconfig.json" }, + { "path": "./plugins/triggers_actions_ui/tsconfig.json"}, + { "path": "./plugins/stack_alerts/tsconfig.json"}, + { "path": "./plugins/ingest_pipelines/tsconfig.json"}, + { "path": "./plugins/license_management/tsconfig.json" }, + { "path": "./plugins/painless_lab/tsconfig.json" }, { "path": "./plugins/triggers_actions_ui/tsconfig.json" }, { "path": "./plugins/ui_actions_enhanced/tsconfig.json" }, { "path": "./plugins/watcher/tsconfig.json" } diff --git a/x-pack/tsconfig.refs.json b/x-pack/tsconfig.refs.json index ed209cd241586..eff35147a1da9 100644 --- a/x-pack/tsconfig.refs.json +++ b/x-pack/tsconfig.refs.json @@ -36,6 +36,17 @@ { "path": "./plugins/telemetry_collection_xpack/tsconfig.json" }, { "path": "./plugins/translations/tsconfig.json" }, { "path": "./plugins/triggers_actions_ui/tsconfig.json"}, + { "path": "./plugins/spaces/tsconfig.json" }, + { "path": "./plugins/security/tsconfig.json" }, + { "path": "./plugins/stack_alerts/tsconfig.json"}, + { "path": "./plugins/encrypted_saved_objects/tsconfig.json" }, + { "path": "./plugins/beats_management/tsconfig.json" }, + { "path": "./plugins/cloud/tsconfig.json" }, + { "path": "./plugins/saved_objects_tagging/tsconfig.json" }, + { "path": "./plugins/global_search_bar/tsconfig.json" }, + { "path": "./plugins/ingest_pipelines/tsconfig.json" }, + { "path": "./plugins/license_management/tsconfig.json" }, + { "path": "./plugins/painless_lab/tsconfig.json" }, { "path": "./plugins/ui_actions_enhanced/tsconfig.json" }, { "path": "./plugins/watcher/tsconfig.json" } ] From 16500d89c247f8ab3c773fe901b7f3743587e1b9 Mon Sep 17 00:00:00 2001 From: Sandra Gonzales Date: Mon, 1 Feb 2021 12:27:36 -0500 Subject: [PATCH 40/85] [Metrics UI] remove middle number in legend and adjust calculation of max number (#89020) * get midpoint of max and min instead of half of max number * remove middle tick from stepped gradient legend * use value instead of max values to calculate bounds Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../waffle/stepped_gradient_legend.tsx | 5 ++--- .../lib/calculate_bounds_from_nodes.test.ts | 4 ++-- .../lib/calculate_bounds_from_nodes.ts | 18 ++++++------------ 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/stepped_gradient_legend.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/stepped_gradient_legend.tsx index ed34a32012bd2..71cfab79ba0cc 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/stepped_gradient_legend.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/stepped_gradient_legend.tsx @@ -16,13 +16,12 @@ interface Props { bounds: InfraWaffleMapBounds; formatter: InfraFormatter; } - +type TickValue = 0 | 1; export const SteppedGradientLegend: React.FC = ({ legend, bounds, formatter }) => { return ( - @@ -39,7 +38,7 @@ export const SteppedGradientLegend: React.FC = ({ legend, bounds, formatt interface TickProps { bounds: InfraWaffleMapBounds; - value: number; + value: TickValue; formatter: InfraFormatter; } diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/calculate_bounds_from_nodes.test.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/calculate_bounds_from_nodes.test.ts index 49f4b56532936..9f1c2f90635a3 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/calculate_bounds_from_nodes.test.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/calculate_bounds_from_nodes.test.ts @@ -37,14 +37,14 @@ describe('calculateBoundsFromNodes', () => { const bounds = calculateBoundsFromNodes(nodes); expect(bounds).toEqual({ min: 0.2, - max: 1.5, + max: 0.5, }); }); it('should have a minimum of 0 for only a single node', () => { const bounds = calculateBoundsFromNodes([nodes[0]]); expect(bounds).toEqual({ min: 0, - max: 1.5, + max: 0.5, }); }); it('should return zero for empty nodes', () => { diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/calculate_bounds_from_nodes.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/calculate_bounds_from_nodes.ts index 6eb64971efbd7..ff1093a795a10 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/calculate_bounds_from_nodes.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/calculate_bounds_from_nodes.ts @@ -9,23 +9,17 @@ import { SnapshotNode } from '../../../../../common/http_api/snapshot_api'; import { InfraWaffleMapBounds } from '../../../../lib/lib'; export const calculateBoundsFromNodes = (nodes: SnapshotNode[]): InfraWaffleMapBounds => { - const maxValues = nodes.map((node) => { + const values = nodes.map((node) => { const metric = first(node.metrics); - if (!metric) return 0; - return metric.max; - }); - const minValues = nodes.map((node) => { - const metric = first(node.metrics); - if (!metric) return 0; - return metric.value; + return !metric || !metric.value ? 0 : metric.value; }); // if there is only one value then we need to set the bottom range to zero for min // otherwise the legend will look silly since both values are the same for top and // bottom. - if (minValues.length === 1) { - minValues.unshift(0); + if (values.length === 1) { + values.unshift(0); } - const maxValue = max(maxValues) || 0; - const minValue = min(minValues) || 0; + const maxValue = max(values) || 0; + const minValue = min(values) || 0; return { min: isFinite(minValue) ? minValue : 0, max: isFinite(maxValue) ? maxValue : 0 }; }; From 391ab72be158217b266b25b163ceaf12eb0f9581 Mon Sep 17 00:00:00 2001 From: Thomas Neirynck Date: Mon, 1 Feb 2021 12:43:03 -0500 Subject: [PATCH 41/85] [Maps] Add table source for choropleth mapping (#89263) --- .../VisitorBreakdownMap/useLayerList.ts | 5 +- x-pack/plugins/maps/common/constants.ts | 1 + .../layer_descriptor_types.ts | 4 +- .../source_descriptor_types.ts | 24 +- .../migrations/add_type_to_termjoin.test.ts | 45 ++++ .../common/migrations/add_type_to_termjoin.ts | 48 ++++ ...{geojson_file_field.ts => inline_field.ts} | 7 +- .../public/classes/joins/inner_join.test.js | 2 + .../maps/public/classes/joins/inner_join.ts | 50 ++-- .../maps/public/classes/layers/layer.test.ts | 10 +- .../maps/public/classes/layers/layer.tsx | 14 +- .../layers/vector_layer/vector_layer.tsx | 9 +- .../sources/es_agg_source/es_agg_source.ts | 6 - .../sources/es_term_source/es_term_source.ts | 10 +- .../geojson_file_source.ts | 14 +- .../classes/sources/table_source/index.ts | 7 + .../sources/table_source/table_source.test.ts | 200 ++++++++++++++++ .../sources/table_source/table_source.ts | 218 ++++++++++++++++++ .../classes/sources/term_join_source/index.ts | 7 + .../term_join_source/term_join_source.ts | 33 +++ .../properties/dynamic_style_property.tsx | 2 +- .../classes/styles/vector/vector_style.tsx | 8 +- .../layer_panel/join_editor/join_editor.tsx | 34 +-- .../layer_panel/join_editor/resources/join.js | 2 + .../sample_data/ecommerce_saved_objects.js | 4 + .../sample_data/web_logs_saved_objects.js | 1 + .../maps/server/saved_objects/migrations.js | 9 + .../api_integration/apis/maps/migrations.js | 2 +- 28 files changed, 708 insertions(+), 68 deletions(-) create mode 100644 x-pack/plugins/maps/common/migrations/add_type_to_termjoin.test.ts create mode 100644 x-pack/plugins/maps/common/migrations/add_type_to_termjoin.ts rename x-pack/plugins/maps/public/classes/fields/{geojson_file_field.ts => inline_field.ts} (80%) create mode 100644 x-pack/plugins/maps/public/classes/sources/table_source/index.ts create mode 100644 x-pack/plugins/maps/public/classes/sources/table_source/table_source.test.ts create mode 100644 x-pack/plugins/maps/public/classes/sources/table_source/table_source.ts create mode 100644 x-pack/plugins/maps/public/classes/sources/term_join_source/index.ts create mode 100644 x-pack/plugins/maps/public/classes/sources/term_join_source/term_join_source.ts diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdownMap/useLayerList.ts b/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdownMap/useLayerList.ts index c8bbe599ca44f..3ff6686138e9a 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdownMap/useLayerList.ts +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdownMap/useLayerList.ts @@ -16,6 +16,7 @@ import { COLOR_MAP_TYPE, FIELD_ORIGIN, LABEL_BORDER_SIZES, + SOURCE_TYPES, STYLE_TYPE, SYMBOLIZE_AS_TYPES, } from '../../../../../../maps/common/constants'; @@ -29,7 +30,7 @@ import { import { TRANSACTION_PAGE_LOAD } from '../../../../../common/transaction_types'; const ES_TERM_SOURCE_COUNTRY: ESTermSourceDescriptor = { - type: 'ES_TERM_SOURCE', + type: SOURCE_TYPES.ES_TERM_SOURCE, id: '3657625d-17b0-41ef-99ba-3a2b2938655c', indexPatternTitle: 'apm-*', term: 'client.geo.country_iso_code', @@ -46,7 +47,7 @@ const ES_TERM_SOURCE_COUNTRY: ESTermSourceDescriptor = { }; const ES_TERM_SOURCE_REGION: ESTermSourceDescriptor = { - type: 'ES_TERM_SOURCE', + type: SOURCE_TYPES.ES_TERM_SOURCE, id: 'e62a1b9c-d7ff-4fd4-a0f6-0fdc44bb9e41', indexPatternTitle: 'apm-*', term: 'client.geo.region_iso_code', diff --git a/x-pack/plugins/maps/common/constants.ts b/x-pack/plugins/maps/common/constants.ts index b86d48bfccdab..c8db433a37235 100644 --- a/x-pack/plugins/maps/common/constants.ts +++ b/x-pack/plugins/maps/common/constants.ts @@ -85,6 +85,7 @@ export enum SOURCE_TYPES { REGIONMAP_FILE = 'REGIONMAP_FILE', GEOJSON_FILE = 'GEOJSON_FILE', MVT_SINGLE_LAYER = 'MVT_SINGLE_LAYER', + TABLE_SOURCE = 'TABLE_SOURCE', } export enum FIELD_ORIGIN { diff --git a/x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts b/x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts index b67f05cb169fd..65cc145e20c89 100644 --- a/x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts +++ b/x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts @@ -8,11 +8,11 @@ import { Query } from 'src/plugins/data/public'; import { StyleDescriptor, VectorStyleDescriptor } from './style_property_descriptor_types'; import { DataRequestDescriptor } from './data_request_descriptor_types'; -import { AbstractSourceDescriptor, ESTermSourceDescriptor } from './source_descriptor_types'; +import { AbstractSourceDescriptor, TermJoinSourceDescriptor } from './source_descriptor_types'; export type JoinDescriptor = { leftField?: string; - right: ESTermSourceDescriptor; + right: TermJoinSourceDescriptor; }; export type LayerDescriptor = { diff --git a/x-pack/plugins/maps/common/descriptor_types/source_descriptor_types.ts b/x-pack/plugins/maps/common/descriptor_types/source_descriptor_types.ts index b849b42429cf6..dca7ae766f375 100644 --- a/x-pack/plugins/maps/common/descriptor_types/source_descriptor_types.ts +++ b/x-pack/plugins/maps/common/descriptor_types/source_descriptor_types.ts @@ -8,7 +8,14 @@ import { FeatureCollection } from 'geojson'; import { Query } from 'src/plugins/data/public'; import { SortDirection } from 'src/plugins/data/common/search'; -import { AGG_TYPE, GRID_RESOLUTION, RENDER_AS, SCALING_TYPES, MVT_FIELD_TYPE } from '../constants'; +import { + AGG_TYPE, + GRID_RESOLUTION, + RENDER_AS, + SCALING_TYPES, + MVT_FIELD_TYPE, + SOURCE_TYPES, +} from '../constants'; export type AttributionDescriptor = { attributionText?: string; @@ -105,6 +112,7 @@ export type ESTermSourceDescriptor = AbstractESAggSourceDescriptor & { term: string; // term field name whereQuery?: Query; size?: number; + type: SOURCE_TYPES.ES_TERM_SOURCE; }; export type KibanaRegionmapSourceDescriptor = AbstractSourceDescriptor & { @@ -156,14 +164,24 @@ export type TiledSingleLayerVectorSourceDescriptor = AbstractSourceDescriptor & tooltipProperties: string[]; }; -export type GeoJsonFileFieldDescriptor = { +export type InlineFieldDescriptor = { name: string; type: 'string' | 'number'; }; export type GeojsonFileSourceDescriptor = { - __fields?: GeoJsonFileFieldDescriptor[]; + __fields?: InlineFieldDescriptor[]; __featureCollection: FeatureCollection; name: string; type: string; }; + +export type TableSourceDescriptor = { + id: string; + type: SOURCE_TYPES.TABLE_SOURCE; + __rows: Array<{ [key: string]: string | number }>; + __columns: InlineFieldDescriptor[]; + term: string; +}; + +export type TermJoinSourceDescriptor = ESTermSourceDescriptor | TableSourceDescriptor; diff --git a/x-pack/plugins/maps/common/migrations/add_type_to_termjoin.test.ts b/x-pack/plugins/maps/common/migrations/add_type_to_termjoin.test.ts new file mode 100644 index 0000000000000..c9ab4b00d8923 --- /dev/null +++ b/x-pack/plugins/maps/common/migrations/add_type_to_termjoin.test.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { addTypeToTermJoin } from './add_type_to_termjoin'; +import { LAYER_TYPE, SOURCE_TYPES } from '../constants'; +import { LayerDescriptor } from '../descriptor_types'; + +describe('addTypeToTermJoin', () => { + test('Should handle missing type attribute', () => { + const layerListJSON = JSON.stringify(([ + { + type: LAYER_TYPE.VECTOR, + joins: [ + { + right: {}, + }, + { + right: { + type: SOURCE_TYPES.TABLE_SOURCE, + }, + }, + { + right: { + type: SOURCE_TYPES.ES_TERM_SOURCE, + }, + }, + ], + }, + ] as unknown) as LayerDescriptor[]); + + const attributes = { + title: 'my map', + layerListJSON, + }; + + const { layerListJSON: migratedLayerListJSON } = addTypeToTermJoin({ attributes }); + const migratedLayerList = JSON.parse(migratedLayerListJSON!); + expect(migratedLayerList[0].joins[0].right.type).toEqual(SOURCE_TYPES.ES_TERM_SOURCE); + expect(migratedLayerList[0].joins[1].right.type).toEqual(SOURCE_TYPES.TABLE_SOURCE); + expect(migratedLayerList[0].joins[2].right.type).toEqual(SOURCE_TYPES.ES_TERM_SOURCE); + }); +}); diff --git a/x-pack/plugins/maps/common/migrations/add_type_to_termjoin.ts b/x-pack/plugins/maps/common/migrations/add_type_to_termjoin.ts new file mode 100644 index 0000000000000..84e13eb6c3947 --- /dev/null +++ b/x-pack/plugins/maps/common/migrations/add_type_to_termjoin.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { MapSavedObjectAttributes } from '../map_saved_object_type'; +import { JoinDescriptor, LayerDescriptor } from '../descriptor_types'; +import { LAYER_TYPE, SOURCE_TYPES } from '../constants'; + +// enforce type property on joins. It's possible older saved-objects do not have this correctly filled in +// e.g. sample-data was missing the right.type field. +// This is just to be safe. +export function addTypeToTermJoin({ + attributes, +}: { + attributes: MapSavedObjectAttributes; +}): MapSavedObjectAttributes { + if (!attributes || !attributes.layerListJSON) { + return attributes; + } + + const layerList: LayerDescriptor[] = JSON.parse(attributes.layerListJSON); + + layerList.forEach((layer: LayerDescriptor) => { + if (layer.type !== LAYER_TYPE.VECTOR) { + return; + } + + if (!layer.joins) { + return; + } + layer.joins.forEach((join: JoinDescriptor) => { + if (!join.right) { + return; + } + + if (typeof join.right.type === 'undefined') { + join.right.type = SOURCE_TYPES.ES_TERM_SOURCE; + } + }); + }); + + return { + ...attributes, + layerListJSON: JSON.stringify(layerList), + }; +} diff --git a/x-pack/plugins/maps/public/classes/fields/geojson_file_field.ts b/x-pack/plugins/maps/public/classes/fields/inline_field.ts similarity index 80% rename from x-pack/plugins/maps/public/classes/fields/geojson_file_field.ts rename to x-pack/plugins/maps/public/classes/fields/inline_field.ts index ae42b09d491c5..287edbd07cce8 100644 --- a/x-pack/plugins/maps/public/classes/fields/geojson_file_field.ts +++ b/x-pack/plugins/maps/public/classes/fields/inline_field.ts @@ -7,10 +7,9 @@ import { FIELD_ORIGIN } from '../../../common/constants'; import { IField, AbstractField } from './field'; import { IVectorSource } from '../sources/vector_source'; -import { GeoJsonFileSource } from '../sources/geojson_file_source'; -export class GeoJsonFileField extends AbstractField implements IField { - private readonly _source: GeoJsonFileSource; +export class InlineField extends AbstractField implements IField { + private readonly _source: T; private readonly _dataType: string; constructor({ @@ -20,7 +19,7 @@ export class GeoJsonFileField extends AbstractField implements IField { dataType, }: { fieldName: string; - source: GeoJsonFileSource; + source: T; origin: FIELD_ORIGIN; dataType: string; }) { diff --git a/x-pack/plugins/maps/public/classes/joins/inner_join.test.js b/x-pack/plugins/maps/public/classes/joins/inner_join.test.js index ca40ab1ea7db7..bca5954e73d7b 100644 --- a/x-pack/plugins/maps/public/classes/joins/inner_join.test.js +++ b/x-pack/plugins/maps/public/classes/joins/inner_join.test.js @@ -5,11 +5,13 @@ */ import { InnerJoin } from './inner_join'; +import { SOURCE_TYPES } from '../../../common/constants'; jest.mock('../../kibana_services', () => {}); jest.mock('../layers/vector_layer/vector_layer', () => {}); const rightSource = { + type: SOURCE_TYPES.ES_TERM_SOURCE, id: 'd3625663-5b34-4d50-a784-0d743f676a0c', indexPatternId: '90943e30-9a47-11e8-b64d-95841ca0b247', indexPatternTitle: 'kibana_sample_data_logs', diff --git a/x-pack/plugins/maps/public/classes/joins/inner_join.ts b/x-pack/plugins/maps/public/classes/joins/inner_join.ts index 32bd767aa94d8..95e163709dff9 100644 --- a/x-pack/plugins/maps/public/classes/joins/inner_join.ts +++ b/x-pack/plugins/maps/public/classes/joins/inner_join.ts @@ -9,29 +9,51 @@ import { Feature, GeoJsonProperties } from 'geojson'; import { ESTermSource } from '../sources/es_term_source'; import { getComputedFieldNamePrefix } from '../styles/vector/style_util'; import { - META_DATA_REQUEST_ID_SUFFIX, FORMATTERS_DATA_REQUEST_ID_SUFFIX, + META_DATA_REQUEST_ID_SUFFIX, + SOURCE_TYPES, } from '../../../common/constants'; -import { JoinDescriptor } from '../../../common/descriptor_types'; +import { + ESTermSourceDescriptor, + JoinDescriptor, + TableSourceDescriptor, + TermJoinSourceDescriptor, +} from '../../../common/descriptor_types'; import { IVectorSource } from '../sources/vector_source'; import { IField } from '../fields/field'; import { PropertiesMap } from '../../../common/elasticsearch_util'; +import { ITermJoinSource } from '../sources/term_join_source'; +import { TableSource } from '../sources/table_source'; +import { Adapters } from '../../../../../../src/plugins/inspector/common/adapters'; + +function createJoinTermSource( + descriptor: Partial | undefined, + inspectorAdapters: Adapters | undefined +): ITermJoinSource | undefined { + if (!descriptor) { + return; + } + + if ( + descriptor.type === SOURCE_TYPES.ES_TERM_SOURCE && + 'indexPatternId' in descriptor && + 'term' in descriptor + ) { + return new ESTermSource(descriptor as ESTermSourceDescriptor, inspectorAdapters); + } else if (descriptor.type === SOURCE_TYPES.TABLE_SOURCE) { + return new TableSource(descriptor as TableSourceDescriptor, inspectorAdapters); + } +} export class InnerJoin { private readonly _descriptor: JoinDescriptor; - private readonly _rightSource?: ESTermSource; + private readonly _rightSource?: ITermJoinSource; private readonly _leftField?: IField; constructor(joinDescriptor: JoinDescriptor, leftSource: IVectorSource) { this._descriptor = joinDescriptor; const inspectorAdapters = leftSource.getInspectorAdapters(); - if ( - joinDescriptor.right && - 'indexPatternId' in joinDescriptor.right && - 'term' in joinDescriptor.right - ) { - this._rightSource = new ESTermSource(joinDescriptor.right, inspectorAdapters); - } + this._rightSource = createJoinTermSource(this._descriptor.right, inspectorAdapters); this._leftField = joinDescriptor.leftField ? leftSource.createField({ fieldName: joinDescriptor.leftField }) : undefined; @@ -47,8 +69,8 @@ export class InnerJoin { return this._leftField && this._rightSource ? this._rightSource.hasCompleteConfig() : false; } - getJoinFields() { - return this._rightSource ? this._rightSource.getMetricFields() : []; + getJoinFields(): IField[] { + return this._rightSource ? this._rightSource.getRightFields() : []; } // Source request id must be static and unique because the re-fetch logic uses the id to locate the previous request. @@ -77,7 +99,7 @@ export class InnerJoin { if (!feature.properties || !this._leftField || !this._rightSource) { return false; } - const rightMetricFields = this._rightSource.getMetricFields(); + const rightMetricFields: IField[] = this._rightSource.getRightFields(); // delete feature properties added by previous join for (let j = 0; j < rightMetricFields.length; j++) { const metricPropertyKey = rightMetricFields[j].getName(); @@ -106,7 +128,7 @@ export class InnerJoin { } } - getRightJoinSource(): ESTermSource { + getRightJoinSource(): ITermJoinSource { if (!this._rightSource) { throw new Error('Cannot get rightSource from InnerJoin with incomplete config'); } diff --git a/x-pack/plugins/maps/public/classes/layers/layer.test.ts b/x-pack/plugins/maps/public/classes/layers/layer.test.ts index e669ddf13e5ac..d8e6a4906a63a 100644 --- a/x-pack/plugins/maps/public/classes/layers/layer.test.ts +++ b/x-pack/plugins/maps/public/classes/layers/layer.test.ts @@ -7,7 +7,13 @@ import { AbstractLayer } from './layer'; import { ISource } from '../sources/source'; -import { AGG_TYPE, FIELD_ORIGIN, LAYER_STYLE_TYPE, VECTOR_STYLES } from '../../../common/constants'; +import { + AGG_TYPE, + FIELD_ORIGIN, + LAYER_STYLE_TYPE, + SOURCE_TYPES, + VECTOR_STYLES, +} from '../../../common/constants'; import { ESTermSourceDescriptor, VectorStyleDescriptor } from '../../../common/descriptor_types'; import { getDefaultDynamicProperties } from '../styles/vector/vector_style_defaults'; @@ -73,7 +79,7 @@ describe('cloneDescriptor', () => { indexPatternTitle: 'logs-*', metrics: [{ type: AGG_TYPE.COUNT }], term: 'myTermField', - type: 'joinSource', + type: SOURCE_TYPES.ES_TERM_SOURCE, applyGlobalQuery: true, applyGlobalTime: true, }, diff --git a/x-pack/plugins/maps/public/classes/layers/layer.tsx b/x-pack/plugins/maps/public/classes/layers/layer.tsx index fe13e4f0ac2f6..1596c392e8d63 100644 --- a/x-pack/plugins/maps/public/classes/layers/layer.tsx +++ b/x-pack/plugins/maps/public/classes/layers/layer.tsx @@ -20,11 +20,13 @@ import { MB_SOURCE_ID_LAYER_ID_PREFIX_DELIMITER, MIN_ZOOM, SOURCE_DATA_REQUEST_ID, + SOURCE_TYPES, STYLE_TYPE, } from '../../../common/constants'; import { copyPersistentState } from '../../reducers/util'; import { AggDescriptor, + ESTermSourceDescriptor, JoinDescriptor, LayerDescriptor, MapExtent, @@ -158,6 +160,14 @@ export class AbstractLayer implements ILayer { if (clonedDescriptor.joins) { clonedDescriptor.joins.forEach((joinDescriptor: JoinDescriptor) => { + if (joinDescriptor.right && joinDescriptor.right.type === SOURCE_TYPES.TABLE_SOURCE) { + throw new Error( + 'Cannot clone table-source. Should only be used in MapEmbeddable, not in UX' + ); + } + const termSourceDescriptor: ESTermSourceDescriptor = joinDescriptor.right as ESTermSourceDescriptor; + + // todo: must tie this to generic thing const originalJoinId = joinDescriptor.right.id!; // right.id is uuid used to track requests in inspector @@ -166,8 +176,8 @@ export class AbstractLayer implements ILayer { // Update all data driven styling properties using join fields if (clonedDescriptor.style && 'properties' in clonedDescriptor.style) { const metrics = - joinDescriptor.right.metrics && joinDescriptor.right.metrics.length - ? joinDescriptor.right.metrics + termSourceDescriptor.metrics && termSourceDescriptor.metrics.length + ? termSourceDescriptor.metrics : [{ type: AGG_TYPE.COUNT }]; metrics.forEach((metricsDescriptor: AggDescriptor) => { const originalJoinKey = getJoinAggKey({ diff --git a/x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.tsx b/x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.tsx index 2304bb277da49..e3a80a4c9eb5d 100644 --- a/x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.tsx +++ b/x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.tsx @@ -63,6 +63,7 @@ import { ITooltipProperty } from '../../tooltips/tooltip_property'; import { IDynamicStyleProperty } from '../../styles/vector/properties/dynamic_style_property'; import { IESSource } from '../../sources/es_source'; import { PropertiesMap } from '../../../../common/elasticsearch_util'; +import { ITermJoinSource } from '../../sources/term_join_source'; interface SourceResult { refreshed: boolean; @@ -574,7 +575,7 @@ export class VectorLayer extends AbstractLayer { dynamicStyleProps: this.getCurrentStyle() .getDynamicPropertiesArray() .filter((dynamicStyleProp) => { - const matchingField = joinSource.getMetricFieldForName(dynamicStyleProp.getFieldName()); + const matchingField = joinSource.getFieldByName(dynamicStyleProp.getFieldName()); return ( dynamicStyleProp.getFieldOrigin() === FIELD_ORIGIN.JOIN && !!matchingField && @@ -599,7 +600,7 @@ export class VectorLayer extends AbstractLayer { }: { dataRequestId: string; dynamicStyleProps: Array>; - source: IVectorSource; + source: IVectorSource | ITermJoinSource; sourceQuery?: MapQuery; style: IVectorStyle; } & DataRequestContext) { @@ -679,7 +680,7 @@ export class VectorLayer extends AbstractLayer { fields: style .getDynamicPropertiesArray() .filter((dynamicStyleProp) => { - const matchingField = joinSource.getMetricFieldForName(dynamicStyleProp.getFieldName()); + const matchingField = joinSource.getFieldByName(dynamicStyleProp.getFieldName()); return dynamicStyleProp.getFieldOrigin() === FIELD_ORIGIN.JOIN && !!matchingField; }) .map((dynamicStyleProp) => { @@ -699,7 +700,7 @@ export class VectorLayer extends AbstractLayer { }: { dataRequestId: string; fields: IField[]; - source: IVectorSource; + source: IVectorSource | ITermJoinSource; } & DataRequestContext) { if (fields.length === 0) { return; diff --git a/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts b/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts index 77177dd47a166..5cb299ac33ff8 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts @@ -23,7 +23,6 @@ export interface IESAggSource extends IESSource { getAggKey(aggType: AGG_TYPE, fieldName: string): string; getAggLabel(aggType: AGG_TYPE, fieldLabel: string): string; getMetricFields(): IESAggField[]; - hasMatchingMetricField(fieldName: string): boolean; getMetricFieldForName(fieldName: string): IESAggField | null; getValueAggsDsl(indexPattern: IndexPattern): { [key: string]: unknown }; } @@ -74,11 +73,6 @@ export abstract class AbstractESAggSource extends AbstractESSource implements IE throw new Error('Cannot create a new field from just a fieldname for an es_agg_source.'); } - hasMatchingMetricField(fieldName: string): boolean { - const matchingField = this.getMetricFieldForName(fieldName); - return !!matchingField; - } - getMetricFieldForName(fieldName: string): IESAggField | null { const targetMetricField = this.getMetricFields().find((metricField: IESAggField) => { return metricField.getName() === fieldName; diff --git a/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts b/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts index 235e8e3a651ee..c7107964568c9 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts @@ -30,6 +30,8 @@ import { import { Adapters } from '../../../../../../../src/plugins/inspector/common/adapters'; import { PropertiesMap } from '../../../../common/elasticsearch_util'; import { isValidStringConfig } from '../../util/valid_string_config'; +import { ITermJoinSource } from '../term_join_source/term_join_source'; +import { IField } from '../../fields/field'; const TERMS_AGG_NAME = 'join'; const TERMS_BUCKET_KEYS_TO_IGNORE = ['key', 'doc_count']; @@ -47,7 +49,7 @@ export function extractPropertiesMap(rawEsData: any, countPropertyName: string): return propertiesMap; } -export class ESTermSource extends AbstractESAggSource { +export class ESTermSource extends AbstractESAggSource implements ITermJoinSource { static type = SOURCE_TYPES.ES_TERM_SOURCE; static createDescriptor(descriptor: Partial): ESTermSourceDescriptor { @@ -79,7 +81,7 @@ export class ESTermSource extends AbstractESAggSource { }); } - hasCompleteConfig() { + hasCompleteConfig(): boolean { return _.has(this._descriptor, 'indexPatternId') && _.has(this._descriptor, 'term'); } @@ -174,4 +176,8 @@ export class ESTermSource extends AbstractESAggSource { } : null; } + + getRightFields(): IField[] { + return this.getMetricFields(); + } } diff --git a/x-pack/plugins/maps/public/classes/sources/geojson_file_source/geojson_file_source.ts b/x-pack/plugins/maps/public/classes/sources/geojson_file_source/geojson_file_source.ts index 69d84dc65d382..35464b24185d0 100644 --- a/x-pack/plugins/maps/public/classes/sources/geojson_file_source/geojson_file_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/geojson_file_source/geojson_file_source.ts @@ -8,15 +8,15 @@ import { Feature, FeatureCollection } from 'geojson'; import { AbstractVectorSource, BoundsFilters, GeoJsonWithMeta } from '../vector_source'; import { EMPTY_FEATURE_COLLECTION, FIELD_ORIGIN, SOURCE_TYPES } from '../../../../common/constants'; import { - GeoJsonFileFieldDescriptor, + InlineFieldDescriptor, GeojsonFileSourceDescriptor, MapExtent, } from '../../../../common/descriptor_types'; import { registerSource } from '../source_registry'; import { IField } from '../../fields/field'; import { getFeatureCollectionBounds } from '../../util/get_feature_collection_bounds'; -import { GeoJsonFileField } from '../../fields/geojson_file_field'; import { Adapters } from '../../../../../../../src/plugins/inspector/common/adapters'; +import { InlineField } from '../../fields/inline_field'; function getFeatureCollection( geoJson: Feature | FeatureCollection | null | undefined @@ -56,14 +56,14 @@ export class GeoJsonFileSource extends AbstractVectorSource { super(normalizedDescriptor, inspectorAdapters); } - _getFields(): GeoJsonFileFieldDescriptor[] { + _getFields(): InlineFieldDescriptor[] { const fields = (this._descriptor as GeojsonFileSourceDescriptor).__fields; return fields ? fields : []; } createField({ fieldName }: { fieldName: string }): IField { const fields = this._getFields(); - const descriptor: GeoJsonFileFieldDescriptor | undefined = fields.find((field) => { + const descriptor: InlineFieldDescriptor | undefined = fields.find((field) => { return field.name === fieldName; }); @@ -74,7 +74,7 @@ export class GeoJsonFileSource extends AbstractVectorSource { )} ` ); } - return new GeoJsonFileField({ + return new InlineField({ fieldName: descriptor.name, source: this, origin: FIELD_ORIGIN.SOURCE, @@ -84,8 +84,8 @@ export class GeoJsonFileSource extends AbstractVectorSource { async getFields(): Promise { const fields = this._getFields(); - return fields.map((field: GeoJsonFileFieldDescriptor) => { - return new GeoJsonFileField({ + return fields.map((field: InlineFieldDescriptor) => { + return new InlineField({ fieldName: field.name, source: this, origin: FIELD_ORIGIN.SOURCE, diff --git a/x-pack/plugins/maps/public/classes/sources/table_source/index.ts b/x-pack/plugins/maps/public/classes/sources/table_source/index.ts new file mode 100644 index 0000000000000..7258e6b464cd0 --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/table_source/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { TableSource } from './table_source'; diff --git a/x-pack/plugins/maps/public/classes/sources/table_source/table_source.test.ts b/x-pack/plugins/maps/public/classes/sources/table_source/table_source.test.ts new file mode 100644 index 0000000000000..9409eefa4ae07 --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/table_source/table_source.test.ts @@ -0,0 +1,200 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { TableSource } from './table_source'; +import { FIELD_ORIGIN } from '../../../../common/constants'; +import { + MapFilters, + MapQuery, + VectorJoinSourceRequestMeta, + VectorSourceSyncMeta, +} from '../../../../common/descriptor_types'; + +describe('TableSource', () => { + describe('getName', () => { + it('should get default display name', async () => { + const tableSource = new TableSource({}); + expect((await tableSource.getDisplayName()).startsWith('table source')).toBe(true); + }); + }); + + describe('getPropertiesMap', () => { + it('should roll up results', async () => { + const tableSource = new TableSource({ + term: 'iso', + __rows: [ + { + iso: 'US', + population: 100, + }, + { + iso: 'CN', + population: 400, + foo: 'bar', // ignore this prop, not defined in `__columns` + }, + { + // ignore this row, cannot be joined + population: 400, + }, + { + // row ignored since it's not first row with key 'US' + iso: 'US', + population: -1, + }, + ], + __columns: [ + { + name: 'iso', + type: 'string', + }, + { + name: 'population', + type: 'number', + }, + ], + }); + + const propertiesMap = await tableSource.getPropertiesMap( + ({} as unknown) as VectorJoinSourceRequestMeta, + 'a', + 'b', + () => {} + ); + + expect(propertiesMap.size).toEqual(2); + expect(propertiesMap.get('US')).toEqual({ + population: 100, + }); + expect(propertiesMap.get('CN')).toEqual({ + population: 400, + }); + }); + }); + + describe('getTermField', () => { + it('should throw when no match', async () => { + const tableSource = new TableSource({ + term: 'foobar', + __columns: [ + { + name: 'iso', + type: 'string', + }, + { + name: 'population', + type: 'number', + }, + ], + }); + + expect(() => { + tableSource.getTermField(); + }).toThrow(); + }); + + it('should return field', async () => { + const tableSource = new TableSource({ + term: 'iso', + __columns: [ + { + name: 'iso', + type: 'string', + }, + { + name: 'population', + type: 'number', + }, + ], + }); + + const termField = tableSource.getTermField(); + expect(termField.getName()).toEqual('iso'); + expect(await termField.getDataType()).toEqual('string'); + }); + }); + + describe('getRightFields', () => { + it('should return columns', async () => { + const tableSource = new TableSource({ + term: 'foobar', + __columns: [ + { + name: 'iso', + type: 'string', + }, + { + name: 'population', + type: 'number', + }, + ], + }); + + const rightFields = tableSource.getRightFields(); + expect(rightFields[0].getName()).toEqual('iso'); + expect(await rightFields[0].getDataType()).toEqual('string'); + expect(rightFields[0].getOrigin()).toEqual(FIELD_ORIGIN.JOIN); + expect(rightFields[0].getSource()).toEqual(tableSource); + + expect(rightFields[1].getName()).toEqual('population'); + expect(await rightFields[1].getDataType()).toEqual('number'); + expect(rightFields[1].getOrigin()).toEqual(FIELD_ORIGIN.JOIN); + expect(rightFields[1].getSource()).toEqual(tableSource); + }); + }); + + describe('getFieldByName', () => { + it('should return columns', async () => { + const tableSource = new TableSource({ + term: 'foobar', + __columns: [ + { + name: 'iso', + type: 'string', + }, + { + name: 'population', + type: 'number', + }, + ], + }); + + const field = tableSource.getFieldByName('iso'); + expect(field!.getName()).toEqual('iso'); + expect(await field!.getDataType()).toEqual('string'); + expect(field!.getOrigin()).toEqual(FIELD_ORIGIN.JOIN); + expect(field!.getSource()).toEqual(tableSource); + }); + }); + + describe('getGeoJsonWithMeta', () => { + it('should throw - not implemented', async () => { + const tableSource = new TableSource({}); + + let didThrow = false; + try { + await tableSource.getGeoJsonWithMeta( + 'foobar', + ({} as unknown) as MapFilters & { + applyGlobalQuery: boolean; + applyGlobalTime: boolean; + fieldNames: string[]; + geogridPrecision?: number; + sourceQuery?: MapQuery; + sourceMeta: VectorSourceSyncMeta; + }, + () => {}, + () => { + return false; + } + ); + } catch (e) { + didThrow = true; + } finally { + expect(didThrow).toBe(true); + } + }); + }); +}); diff --git a/x-pack/plugins/maps/public/classes/sources/table_source/table_source.ts b/x-pack/plugins/maps/public/classes/sources/table_source/table_source.ts new file mode 100644 index 0000000000000..d157c4f5df60a --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/table_source/table_source.ts @@ -0,0 +1,218 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import uuid from 'uuid'; +import { FIELD_ORIGIN, SOURCE_TYPES, VECTOR_SHAPE_TYPE } from '../../../../common/constants'; +import { + MapExtent, + MapFilters, + MapQuery, + TableSourceDescriptor, + VectorJoinSourceRequestMeta, + VectorSourceSyncMeta, +} from '../../../../common/descriptor_types'; +import { Adapters } from '../../../../../../../src/plugins/inspector/common/adapters'; +import { ITermJoinSource } from '../term_join_source'; +import { BucketProperties, PropertiesMap } from '../../../../common/elasticsearch_util'; +import { IField } from '../../fields/field'; +import { Query } from '../../../../../../../src/plugins/data/common/query'; +import { + AbstractVectorSource, + BoundsFilters, + GeoJsonWithMeta, + IVectorSource, + SourceTooltipConfig, +} from '../vector_source'; +import { DataRequest } from '../../util/data_request'; +import { InlineField } from '../../fields/inline_field'; + +export class TableSource extends AbstractVectorSource implements ITermJoinSource, IVectorSource { + static type = SOURCE_TYPES.TABLE_SOURCE; + + static createDescriptor(descriptor: Partial): TableSourceDescriptor { + return { + type: SOURCE_TYPES.TABLE_SOURCE, + __rows: descriptor.__rows || [], + __columns: descriptor.__columns || [], + term: descriptor.term || '', + id: descriptor.id || uuid(), + }; + } + + readonly _descriptor: TableSourceDescriptor; + + constructor(descriptor: Partial, inspectorAdapters?: Adapters) { + const sourceDescriptor = TableSource.createDescriptor(descriptor); + super(sourceDescriptor, inspectorAdapters); + this._descriptor = sourceDescriptor; + } + + async getDisplayName(): Promise { + // no need to localize. this is never rendered. + return `table source ${uuid()}`; + } + + getSyncMeta(): VectorSourceSyncMeta | null { + return null; + } + + async getPropertiesMap( + searchFilters: VectorJoinSourceRequestMeta, + leftSourceName: string, + leftFieldName: string, + registerCancelCallback: (callback: () => void) => void + ): Promise { + const propertiesMap: PropertiesMap = new Map(); + + const fieldNames = await this.getFieldNames(); + + for (let i = 0; i < this._descriptor.__rows.length; i++) { + const row: { [key: string]: string | number } = this._descriptor.__rows[i]; + let propKey: string | number | undefined; + const props: { [key: string]: string | number } = {}; + for (const key in row) { + if (row.hasOwnProperty(key)) { + if (key === this._descriptor.term && row[key]) { + propKey = row[key]; + } + if (fieldNames.indexOf(key) >= 0 && key !== this._descriptor.term) { + props[key] = row[key]; + } + } + } + if (propKey && !propertiesMap.has(propKey.toString())) { + // If propKey is not a primary key in the table, this will favor the first match + propertiesMap.set(propKey.toString(), props); + } + } + + return propertiesMap; + } + + getTermField(): IField { + const column = this._descriptor.__columns.find((c) => { + return c.name === this._descriptor.term; + }); + + if (!column) { + throw new Error( + `Cannot find column for ${this._descriptor.term} in ${JSON.stringify( + this._descriptor.__columns + )}` + ); + } + + return new InlineField({ + fieldName: column.name, + source: this, + origin: FIELD_ORIGIN.JOIN, + dataType: column.type, + }); + } + + getWhereQuery(): Query | undefined { + return undefined; + } + + hasCompleteConfig(): boolean { + return true; + } + + getId(): string { + return this._descriptor.id; + } + + getRightFields(): IField[] { + return this._descriptor.__columns.map((column) => { + return new InlineField({ + fieldName: column.name, + source: this, + origin: FIELD_ORIGIN.JOIN, + dataType: column.type, + }); + }); + } + + getFieldNames(): string[] { + return this._descriptor.__columns.map((column) => { + return column.name; + }); + } + + canFormatFeatureProperties(): boolean { + return false; + } + + createField({ fieldName }: { fieldName: string }): IField { + const field = this.getFieldByName(fieldName); + if (!field) { + throw new Error(`Cannot find field for ${fieldName}`); + } + return field; + } + + async getBoundsForFilters( + boundsFilters: BoundsFilters, + registerCancelCallback: (callback: () => void) => void + ): Promise { + return null; + } + + getFieldByName(fieldName: string): IField | null { + const column = this._descriptor.__columns.find((c) => { + return c.name === fieldName; + }); + + if (!column) { + return null; + } + + return new InlineField({ + fieldName: column.name, + source: this, + origin: FIELD_ORIGIN.JOIN, + dataType: column.type, + }); + } + + getFields(): Promise { + throw new Error('must implement'); + } + + // The below is the IVectorSource interface. + // Could be useful to implement, e.g. to preview raw csv data + async getGeoJsonWithMeta( + layerName: string, + searchFilters: MapFilters & { + applyGlobalQuery: boolean; + applyGlobalTime: boolean; + fieldNames: string[]; + geogridPrecision?: number; + sourceQuery?: MapQuery; + sourceMeta: VectorSourceSyncMeta; + }, + registerCancelCallback: (callback: () => void) => void, + isRequestStillActive: () => boolean + ): Promise { + throw new Error('TableSource cannot return GeoJson'); + } + + async getLeftJoinFields(): Promise { + throw new Error('TableSource cannot be used as a left-layer in a term join'); + } + + getSourceTooltipContent(sourceDataRequest?: DataRequest): SourceTooltipConfig { + throw new Error('must add tooltip content'); + } + + async getSupportedShapeTypes(): Promise { + return []; + } + + isBoundsAware(): boolean { + return false; + } +} diff --git a/x-pack/plugins/maps/public/classes/sources/term_join_source/index.ts b/x-pack/plugins/maps/public/classes/sources/term_join_source/index.ts new file mode 100644 index 0000000000000..1879d64d3b207 --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/term_join_source/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { ITermJoinSource } from './term_join_source'; diff --git a/x-pack/plugins/maps/public/classes/sources/term_join_source/term_join_source.ts b/x-pack/plugins/maps/public/classes/sources/term_join_source/term_join_source.ts new file mode 100644 index 0000000000000..534ac9f200362 --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/term_join_source/term_join_source.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { GeoJsonProperties } from 'geojson'; +import { IField } from '../../fields/field'; +import { Query } from '../../../../../../../src/plugins/data/common/query'; +import { + VectorJoinSourceRequestMeta, + VectorSourceSyncMeta, +} from '../../../../common/descriptor_types'; +import { PropertiesMap } from '../../../../common/elasticsearch_util'; +import { ITooltipProperty } from '../../tooltips/tooltip_property'; +import { ISource } from '../source'; + +export interface ITermJoinSource extends ISource { + hasCompleteConfig(): boolean; + getTermField(): IField; + getWhereQuery(): Query | undefined; + getPropertiesMap( + searchFilters: VectorJoinSourceRequestMeta, + leftSourceName: string, + leftFieldName: string, + registerCancelCallback: (callback: () => void) => void + ): Promise; + getSyncMeta(): VectorSourceSyncMeta | null; + getId(): string; + getRightFields(): IField[]; + getTooltipProperties(properties: GeoJsonProperties): Promise; + getFieldByName(fieldName: string): IField | null; +} diff --git a/x-pack/plugins/maps/public/classes/styles/vector/properties/dynamic_style_property.tsx b/x-pack/plugins/maps/public/classes/styles/vector/properties/dynamic_style_property.tsx index 882247e375ddc..96494a346e625 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/properties/dynamic_style_property.tsx +++ b/x-pack/plugins/maps/public/classes/styles/vector/properties/dynamic_style_property.tsx @@ -97,7 +97,7 @@ export class DynamicStyleProperty } const join = this._layer.getValidJoins().find((validJoin: InnerJoin) => { - return validJoin.getRightJoinSource().hasMatchingMetricField(fieldName); + return !!validJoin.getRightJoinSource().getFieldByName(fieldName); }); return join ? join.getSourceMetaDataRequestId() : null; } diff --git a/x-pack/plugins/maps/public/classes/styles/vector/vector_style.tsx b/x-pack/plugins/maps/public/classes/styles/vector/vector_style.tsx index 9bf4cafd66407..126f19b7012f8 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/vector_style.tsx +++ b/x-pack/plugins/maps/public/classes/styles/vector/vector_style.tsx @@ -620,7 +620,7 @@ export class VectorStyle implements IVectorStyle { dataRequestId = SOURCE_FORMATTERS_DATA_REQUEST_ID; } else { const targetJoin = this._layer.getValidJoins().find((join) => { - return join.getRightJoinSource().hasMatchingMetricField(fieldName); + return !!join.getRightJoinSource().getFieldByName(fieldName); }); if (targetJoin) { dataRequestId = targetJoin.getSourceFormattersDataRequestId(); @@ -841,7 +841,7 @@ export class VectorStyle implements IVectorStyle { this._iconOrientationProperty.syncIconRotationWithMb(symbolLayerId, mbMap); } - _makeField(fieldDescriptor?: StylePropertyField) { + _makeField(fieldDescriptor?: StylePropertyField): IField | null { if (!fieldDescriptor || !fieldDescriptor.name) { return null; } @@ -852,10 +852,10 @@ export class VectorStyle implements IVectorStyle { return this._source.getFieldByName(fieldDescriptor.name); } else if (fieldDescriptor.origin === FIELD_ORIGIN.JOIN) { const targetJoin = this._layer.getValidJoins().find((join) => { - return join.getRightJoinSource().hasMatchingMetricField(fieldDescriptor.name); + return !!join.getRightJoinSource().getFieldByName(fieldDescriptor.name); }); return targetJoin - ? targetJoin.getRightJoinSource().getMetricFieldForName(fieldDescriptor.name) + ? targetJoin.getRightJoinSource().getFieldByName(fieldDescriptor.name) : null; } else { throw new Error(`Unknown origin-type ${fieldDescriptor.origin}`); diff --git a/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/join_editor.tsx b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/join_editor.tsx index d47f130d4ede3..ce5c0ed5fdcad 100644 --- a/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/join_editor.tsx +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/join_editor.tsx @@ -5,7 +5,6 @@ */ import React, { Fragment } from 'react'; -import _ from 'lodash'; import uuid from 'uuid/v4'; import { @@ -24,6 +23,7 @@ import { Join } from './resources/join'; import { ILayer } from '../../../classes/layers/layer'; import { JoinDescriptor } from '../../../../common/descriptor_types'; import { IField } from '../../../classes/fields/field'; +import { SOURCE_TYPES } from '../../../../common/constants'; export interface Props { joins: JoinDescriptor[]; @@ -44,19 +44,25 @@ export function JoinEditor({ joins, layer, onChange, leftJoinFields, layerDispla onChange(layer, [...joins.slice(0, index), ...joins.slice(index + 1)]); }; - return ( - - - - - ); + if (joinDescriptor.right.type === SOURCE_TYPES.TABLE_SOURCE) { + throw new Error( + 'PEBKAC - Table sources cannot be edited in the UX and should only be used in MapEmbeddable' + ); + } else { + return ( + + + + + ); + } }); }; diff --git a/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js index 507b32fa39fd8..a46b27b62a19e 100644 --- a/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js @@ -17,6 +17,7 @@ import { GlobalTimeCheckbox } from '../../../../components/global_time_checkbox' import { indexPatterns } from '../../../../../../../../src/plugins/data/public'; import { getIndexPatternService } from '../../../../kibana_services'; +import { SOURCE_TYPES } from '../../../../../common/constants'; export class Join extends Component { state = { @@ -85,6 +86,7 @@ export class Join extends Component { ...restOfRight, indexPatternId, indexPatternTitle, + type: SOURCE_TYPES.ES_TERM_SOURCE, }, }); }; diff --git a/x-pack/plugins/maps/server/sample_data/ecommerce_saved_objects.js b/x-pack/plugins/maps/server/sample_data/ecommerce_saved_objects.js index a3dbf8b1438fa..d1aa044676e00 100644 --- a/x-pack/plugins/maps/server/sample_data/ecommerce_saved_objects.js +++ b/x-pack/plugins/maps/server/sample_data/ecommerce_saved_objects.js @@ -70,6 +70,7 @@ const layerList = [ { leftField: 'iso2', right: { + type: 'ES_TERM_SOURCE', id: '741db9c6-8ebb-4ea9-9885-b6b4ac019d14', indexPatternTitle: 'kibana_sample_data_ecommerce', term: 'geoip.country_iso_code', @@ -134,6 +135,7 @@ const layerList = [ { leftField: 'name', right: { + type: 'ES_TERM_SOURCE', id: '30a0ec24-49b6-476a-b4ed-6c1636333695', indexPatternTitle: 'kibana_sample_data_ecommerce', term: 'geoip.region_name', @@ -198,6 +200,7 @@ const layerList = [ { leftField: 'label_en', right: { + type: 'ES_TERM_SOURCE', id: 'e325c9da-73fa-4b3b-8b59-364b99370826', indexPatternTitle: 'kibana_sample_data_ecommerce', term: 'geoip.region_name', @@ -262,6 +265,7 @@ const layerList = [ { leftField: 'label_en', right: { + type: 'ES_TERM_SOURCE', id: '612d805d-8533-43a9-ac0e-cbf51fe63dcd', indexPatternTitle: 'kibana_sample_data_ecommerce', term: 'geoip.region_name', diff --git a/x-pack/plugins/maps/server/sample_data/web_logs_saved_objects.js b/x-pack/plugins/maps/server/sample_data/web_logs_saved_objects.js index ec445567de21c..010f06e00ca3f 100644 --- a/x-pack/plugins/maps/server/sample_data/web_logs_saved_objects.js +++ b/x-pack/plugins/maps/server/sample_data/web_logs_saved_objects.js @@ -70,6 +70,7 @@ const layerList = [ { leftField: 'iso2', right: { + type: 'ES_TERM_SOURCE', id: '673ff994-fc75-4c67-909b-69fcb0e1060e', indexPatternTitle: 'kibana_sample_data_logs', term: 'geo.src', diff --git a/x-pack/plugins/maps/server/saved_objects/migrations.js b/x-pack/plugins/maps/server/saved_objects/migrations.js index 653f07772ee58..346bc5eff1657 100644 --- a/x-pack/plugins/maps/server/saved_objects/migrations.js +++ b/x-pack/plugins/maps/server/saved_objects/migrations.js @@ -14,6 +14,7 @@ import { migrateUseTopHitsToScalingType } from '../../common/migrations/scaling_ import { migrateJoinAggKey } from '../../common/migrations/join_agg_key'; import { removeBoundsFromSavedObject } from '../../common/migrations/remove_bounds'; import { setDefaultAutoFitToBounds } from '../../common/migrations/set_default_auto_fit_to_bounds'; +import { addTypeToTermJoin } from '../../common/migrations/add_type_to_termjoin'; export const migrations = { map: { @@ -79,6 +80,14 @@ export const migrations = { '7.10.0': (doc) => { const attributes = setDefaultAutoFitToBounds(doc); + return { + ...doc, + attributes, + }; + }, + '7.12.0': (doc) => { + const attributes = addTypeToTermJoin(doc); + return { ...doc, attributes, diff --git a/x-pack/test/api_integration/apis/maps/migrations.js b/x-pack/test/api_integration/apis/maps/migrations.js index b634e7117e607..9f9082c959ca5 100644 --- a/x-pack/test/api_integration/apis/maps/migrations.js +++ b/x-pack/test/api_integration/apis/maps/migrations.js @@ -41,7 +41,7 @@ export default function ({ getService }) { type: 'index-pattern', }, ]); - expect(resp.body.migrationVersion).to.eql({ map: '7.10.0' }); + expect(resp.body.migrationVersion).to.eql({ map: '7.12.0' }); expect(resp.body.attributes.layerListJSON.includes('indexPatternRefName')).to.be(true); }); }); From 4380c49d386367e4af343602f3b3baaf6bdd9dd5 Mon Sep 17 00:00:00 2001 From: Mikhail Shustov Date: Mon, 1 Feb 2021 19:32:55 +0100 Subject: [PATCH 42/85] remove type dependency between index_management and fleet (#89699) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../client_integration/home/data_streams_tab.test.ts | 2 +- .../index_management/public/application/app_context.tsx | 5 ++--- .../public/application/mount_management_section.ts | 5 ++--- .../sections/home/data_stream_list/data_stream_list.tsx | 4 ++-- x-pack/plugins/index_management/public/plugin.ts | 2 +- x-pack/plugins/index_management/public/types.ts | 3 +-- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts index 87f5408f6ca42..3221054839865 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts +++ b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts @@ -71,7 +71,7 @@ describe('Data Streams tab', () => { test('when Fleet is enabled, links to Fleet', async () => { testBed = await setup({ - plugins: { fleet: { hi: 'ok' } }, + plugins: { isFleetEnabled: true }, }); await act(async () => { diff --git a/x-pack/plugins/index_management/public/application/app_context.tsx b/x-pack/plugins/index_management/public/application/app_context.tsx index 91bcfe5ed55c0..4e5164562207d 100644 --- a/x-pack/plugins/index_management/public/application/app_context.tsx +++ b/x-pack/plugins/index_management/public/application/app_context.tsx @@ -8,9 +8,8 @@ import React, { createContext, useContext } from 'react'; import { ScopedHistory } from 'kibana/public'; import { ManagementAppMountParams } from 'src/plugins/management/public'; import { UsageCollectionSetup } from 'src/plugins/usage_collection/public'; -import { CoreSetup, CoreStart } from '../../../../../src/core/public'; -import { FleetSetup } from '../../../fleet/public'; +import { CoreSetup, CoreStart } from '../../../../../src/core/public'; import { UiMetricService, NotificationService, HttpService } from './services'; import { ExtensionsService } from '../services'; import { SharePluginStart } from '../../../../../src/plugins/share/public'; @@ -24,7 +23,7 @@ export interface AppDependencies { }; plugins: { usageCollection: UsageCollectionSetup; - fleet?: FleetSetup; + isFleetEnabled: boolean; }; services: { uiMetricService: UiMetricService; diff --git a/x-pack/plugins/index_management/public/application/mount_management_section.ts b/x-pack/plugins/index_management/public/application/mount_management_section.ts index b94718c14d3aa..f4136a977df1a 100644 --- a/x-pack/plugins/index_management/public/application/mount_management_section.ts +++ b/x-pack/plugins/index_management/public/application/mount_management_section.ts @@ -9,7 +9,6 @@ import { CoreSetup } from 'src/core/public'; import { ManagementAppMountParams } from 'src/plugins/management/public/'; import { UsageCollectionSetup } from 'src/plugins/usage_collection/public'; -import { FleetSetup } from '../../../fleet/public'; import { UIM_APP_NAME } from '../../common/constants'; import { PLUGIN } from '../../common/constants/plugin'; import { ExtensionsService } from '../services'; @@ -50,7 +49,7 @@ export async function mountManagementSection( usageCollection: UsageCollectionSetup, params: ManagementAppMountParams, extensionsService: ExtensionsService, - fleet?: FleetSetup + isFleetEnabled: boolean ) { const { element, setBreadcrumbs, history } = params; const [core, startDependencies] = await coreSetup.getStartServices(); @@ -80,7 +79,7 @@ export async function mountManagementSection( }, plugins: { usageCollection, - fleet, + isFleetEnabled, }, services: { httpService, notificationService, uiMetricService, extensionsService }, history, diff --git a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_list.tsx b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_list.tsx index 64d874c76afb3..07eccd23d9f44 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_list.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_list.tsx @@ -52,7 +52,7 @@ export const DataStreamList: React.FunctionComponent {' ' /* We need this space to separate these two sentences. */} - {fleet ? ( + {isFleetEnabled ? ( Date: Mon, 1 Feb 2021 11:43:38 -0700 Subject: [PATCH 43/85] [jenkins/prs] report docs changes url in PR comments (#89454) Co-authored-by: spalger Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- vars/githubPr.groovy | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/vars/githubPr.groovy b/vars/githubPr.groovy index 546a6785ac2f4..5224aa7463d79 100644 --- a/vars/githubPr.groovy +++ b/vars/githubPr.groovy @@ -182,12 +182,14 @@ def getNextCommentMessage(previousCommentInfo = [:], isFinal = false) { ## :green_heart: Build Succeeded * [continuous-integration/kibana-ci/pull-request](${env.BUILD_URL}) * Commit: ${getCommitHash()} + ${getDocsChangesLink()} """ } else if(status == 'UNSTABLE') { def message = """ ## :yellow_heart: Build succeeded, but was flaky * [continuous-integration/kibana-ci/pull-request](${env.BUILD_URL}) * Commit: ${getCommitHash()} + ${getDocsChangesLink()} """.stripIndent() def failures = retryable.getFlakyFailures() @@ -204,6 +206,7 @@ def getNextCommentMessage(previousCommentInfo = [:], isFinal = false) { * Commit: ${getCommitHash()} * [Pipeline Steps](${env.BUILD_URL}flowGraphTable) (look for red circles / failed steps) * [Interpreting CI Failures](https://www.elastic.co/guide/en/kibana/current/interpreting-ci-failures.html) + ${getDocsChangesLink()} """ } @@ -292,6 +295,21 @@ def getCommitHash() { return env.ghprbActualCommit } +def getDocsChangesLink() { + def url = "https://kibana_${env.ghprbPullId}.docs-preview.app.elstc.co/diff" + + try { + // httpRequest throws on status codes >400 and failures + httpRequest([ method: "GET", url: url ]) + return "* [Documentation Changes](${url})" + } catch (ex) { + print "Failed to reach ${url}" + buildUtils.printStacktrace(ex) + } + + return "" +} + def getFailedSteps() { return jenkinsApi.getFailedSteps()?.findAll { step -> step.displayName != 'Check out from version control' From 51cfa90dc5a387c88a3b66bfa04a3d6580614b5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20C=C3=B4t=C3=A9?= Date: Mon, 1 Feb 2021 14:00:33 -0500 Subject: [PATCH 44/85] Add support for custom alert ids (#89814) * Add support for custom alert ids * UUID v4 also supported * Change ESO custom id error message * Update api integration test * Use errors.createBadRequestError --- .../server/alerts_client/alerts_client.ts | 3 +- .../server/alerts_client/tests/create.test.ts | 67 +++++++++++++++++ .../alerts/server/routes/create.test.ts | 73 ++++++++++++++++++- x-pack/plugins/alerts/server/routes/create.ts | 9 ++- ...ypted_saved_objects_client_wrapper.test.ts | 8 +- .../encrypted_saved_objects_client_wrapper.ts | 44 +++++------ .../spaces_only/tests/alerting/create.ts | 69 ++++++++++++++++++ 7 files changed, 244 insertions(+), 29 deletions(-) diff --git a/x-pack/plugins/alerts/server/alerts_client/alerts_client.ts b/x-pack/plugins/alerts/server/alerts_client/alerts_client.ts index 457079229de94..569b54f21f906 100644 --- a/x-pack/plugins/alerts/server/alerts_client/alerts_client.ts +++ b/x-pack/plugins/alerts/server/alerts_client/alerts_client.ts @@ -149,6 +149,7 @@ export interface CreateOptions { | 'executionStatus' > & { actions: NormalizedAlertAction[] }; options?: { + id?: string; migrationVersion?: Record; }; } @@ -226,7 +227,7 @@ export class AlertsClient { data, options, }: CreateOptions): Promise> { - const id = SavedObjectsUtils.generateId(); + const id = options?.id || SavedObjectsUtils.generateId(); try { await this.authorization.ensureAuthorized( diff --git a/x-pack/plugins/alerts/server/alerts_client/tests/create.test.ts b/x-pack/plugins/alerts/server/alerts_client/tests/create.test.ts index 0424a1295c9b9..2e3dac76f72e5 100644 --- a/x-pack/plugins/alerts/server/alerts_client/tests/create.test.ts +++ b/x-pack/plugins/alerts/server/alerts_client/tests/create.test.ts @@ -462,6 +462,73 @@ describe('create()', () => { expect(actionsClient.isActionTypeEnabled).toHaveBeenCalledWith('test', { notifyUsage: true }); }); + test('creates an alert with a custom id', async () => { + const data = getMockData(); + const createdAttributes = { + ...data, + alertTypeId: '123', + schedule: { interval: '10s' }, + params: { + bar: true, + }, + createdAt: '2019-02-12T21:01:22.479Z', + createdBy: 'elastic', + updatedBy: 'elastic', + updatedAt: '2019-02-12T21:01:22.479Z', + muteAll: false, + mutedInstanceIds: [], + actions: [ + { + group: 'default', + actionRef: 'action_0', + actionTypeId: 'test', + params: { + foo: true, + }, + }, + ], + }; + unsecuredSavedObjectsClient.create.mockResolvedValueOnce({ + id: '123', + type: 'alert', + attributes: createdAttributes, + references: [ + { + name: 'action_0', + type: 'action', + id: '1', + }, + ], + }); + taskManager.schedule.mockResolvedValueOnce({ + id: 'task-123', + taskType: 'alerting:123', + scheduledAt: new Date(), + attempts: 1, + status: TaskStatus.Idle, + runAt: new Date(), + startedAt: null, + retryAt: null, + state: {}, + params: {}, + ownerId: null, + }); + const result = await alertsClient.create({ data, options: { id: '123' } }); + expect(result.id).toEqual('123'); + expect(unsecuredSavedObjectsClient.create.mock.calls[0][2]).toMatchInlineSnapshot(` + Object { + "id": "123", + "references": Array [ + Object { + "id": "1", + "name": "action_0", + "type": "action", + }, + ], + } + `); + }); + test('creates an alert with multiple actions', async () => { const data = getMockData({ actions: [ diff --git a/x-pack/plugins/alerts/server/routes/create.test.ts b/x-pack/plugins/alerts/server/routes/create.test.ts index fc531821f25b6..d0e21ac99a264 100644 --- a/x-pack/plugins/alerts/server/routes/create.test.ts +++ b/x-pack/plugins/alerts/server/routes/create.test.ts @@ -82,7 +82,7 @@ describe('createAlertRoute', () => { const [config, handler] = router.post.mock.calls[0]; - expect(config.path).toMatchInlineSnapshot(`"/api/alerts/alert"`); + expect(config.path).toMatchInlineSnapshot(`"/api/alerts/alert/{id?}"`); alertsClient.create.mockResolvedValueOnce(createResult); @@ -125,6 +125,9 @@ describe('createAlertRoute', () => { ], "throttle": "30s", }, + "options": Object { + "id": undefined, + }, }, ] `); @@ -134,6 +137,74 @@ describe('createAlertRoute', () => { }); }); + it('allows providing a custom id', async () => { + const expectedResult = { + ...createResult, + id: 'custom-id', + }; + const licenseState = licenseStateMock.create(); + const router = httpServiceMock.createRouter(); + + createAlertRoute(router, licenseState); + + const [config, handler] = router.post.mock.calls[0]; + + expect(config.path).toMatchInlineSnapshot(`"/api/alerts/alert/{id?}"`); + + alertsClient.create.mockResolvedValueOnce(expectedResult); + + const [context, req, res] = mockHandlerArguments( + { alertsClient }, + { + params: { id: 'custom-id' }, + body: mockedAlert, + }, + ['ok'] + ); + + expect(await handler(context, req, res)).toEqual({ body: expectedResult }); + + expect(alertsClient.create).toHaveBeenCalledTimes(1); + expect(alertsClient.create.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "data": Object { + "actions": Array [ + Object { + "group": "default", + "id": "2", + "params": Object { + "foo": true, + }, + }, + ], + "alertTypeId": "1", + "consumer": "bar", + "name": "abc", + "notifyWhen": "onActionGroupChange", + "params": Object { + "bar": true, + }, + "schedule": Object { + "interval": "10s", + }, + "tags": Array [ + "foo", + ], + "throttle": "30s", + }, + "options": Object { + "id": "custom-id", + }, + }, + ] + `); + + expect(res.ok).toHaveBeenCalledWith({ + body: expectedResult, + }); + }); + it('ensures the license allows creating alerts', async () => { const licenseState = licenseStateMock.create(); const router = httpServiceMock.createRouter(); diff --git a/x-pack/plugins/alerts/server/routes/create.ts b/x-pack/plugins/alerts/server/routes/create.ts index 2b6735d9063df..46151893baef5 100644 --- a/x-pack/plugins/alerts/server/routes/create.ts +++ b/x-pack/plugins/alerts/server/routes/create.ts @@ -45,8 +45,13 @@ export const bodySchema = schema.object({ export const createAlertRoute = (router: AlertingRouter, licenseState: ILicenseState) => { router.post( { - path: `${BASE_ALERT_API_PATH}/alert`, + path: `${BASE_ALERT_API_PATH}/alert/{id?}`, validate: { + params: schema.maybe( + schema.object({ + id: schema.maybe(schema.string()), + }) + ), body: bodySchema, }, }, @@ -59,10 +64,12 @@ export const createAlertRoute = (router: AlertingRouter, licenseState: ILicenseS } const alertsClient = context.alerting.getAlertsClient(); const alert = req.body; + const params = req.params; const notifyWhen = alert?.notifyWhen ? (alert.notifyWhen as AlertNotifyWhenType) : null; try { const alertRes: Alert = await alertsClient.create({ data: { ...alert, notifyWhen }, + options: { id: params?.id }, }); return res.ok({ body: alertRes, diff --git a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/encrypted_saved_objects_client_wrapper.test.ts b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/encrypted_saved_objects_client_wrapper.test.ts index 90700f8fa7521..7ec700607f3e0 100644 --- a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/encrypted_saved_objects_client_wrapper.test.ts +++ b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/encrypted_saved_objects_client_wrapper.test.ts @@ -83,11 +83,11 @@ describe('#create', () => { expect(mockBaseClient.create).toHaveBeenCalledWith('unknown-type', attributes, options); }); - it('fails if type is registered and ID is specified', async () => { + it('fails if type is registered and non-UUID ID is specified', async () => { const attributes = { attrOne: 'one', attrSecret: 'secret', attrThree: 'three' }; await expect(wrapper.create('known-type', attributes, { id: 'some-id' })).rejects.toThrowError( - 'Predefined IDs are not allowed for saved objects with encrypted attributes, unless the ID has been generated using `SavedObjectsUtils.generateId`.' + 'Predefined IDs are not allowed for saved objects with encrypted attributes unless the ID is a UUID.' ); expect(mockBaseClient.create).not.toHaveBeenCalled(); @@ -310,7 +310,7 @@ describe('#bulkCreate', () => { ); }); - it('fails if ID is specified for registered type', async () => { + it('fails if non-UUID ID is specified for registered type', async () => { const attributes = { attrOne: 'one', attrSecret: 'secret', attrThree: 'three' }; const bulkCreateParams = [ @@ -319,7 +319,7 @@ describe('#bulkCreate', () => { ]; await expect(wrapper.bulkCreate(bulkCreateParams)).rejects.toThrowError( - 'Predefined IDs are not allowed for saved objects with encrypted attributes, unless the ID has been generated using `SavedObjectsUtils.generateId`.' + 'Predefined IDs are not allowed for saved objects with encrypted attributes unless the ID is a UUID.' ); expect(mockBaseClient.bulkCreate).not.toHaveBeenCalled(); diff --git a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/encrypted_saved_objects_client_wrapper.ts b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/encrypted_saved_objects_client_wrapper.ts index c3008a8e86505..21475f6a4f5d2 100644 --- a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/encrypted_saved_objects_client_wrapper.ts +++ b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/encrypted_saved_objects_client_wrapper.ts @@ -59,7 +59,7 @@ export class EncryptedSavedObjectsClientWrapper implements SavedObjectsClientCon return await this.options.baseClient.create(type, attributes, options); } - const id = getValidId(options.id, options.version, options.overwrite); + const id = this.getValidId(options.id, options.version, options.overwrite); const namespace = getDescriptorNamespace( this.options.baseTypeRegistry, type, @@ -93,7 +93,7 @@ export class EncryptedSavedObjectsClientWrapper implements SavedObjectsClientCon return object; } - const id = getValidId(object.id, object.version, options?.overwrite); + const id = this.getValidId(object.id, object.version, options?.overwrite); const namespace = getDescriptorNamespace( this.options.baseTypeRegistry, object.type, @@ -307,27 +307,27 @@ export class EncryptedSavedObjectsClientWrapper implements SavedObjectsClientCon return response; } -} -// Saved objects with encrypted attributes should have IDs that are hard to guess especially -// since IDs are part of the AAD used during encryption, that's why we control them within this -// wrapper and don't allow consumers to specify their own IDs directly unless overwriting the original document. -function getValidId( - id: string | undefined, - version: string | undefined, - overwrite: boolean | undefined -) { - if (id) { - // only allow a specified ID if we're overwriting an existing ESO with a Version - // this helps us ensure that the document really was previously created using ESO - // and not being used to get around the specified ID limitation - const canSpecifyID = (overwrite && version) || SavedObjectsUtils.isRandomId(id); - if (!canSpecifyID) { - throw new Error( - 'Predefined IDs are not allowed for saved objects with encrypted attributes, unless the ID has been generated using `SavedObjectsUtils.generateId`.' - ); + // Saved objects with encrypted attributes should have IDs that are hard to guess especially + // since IDs are part of the AAD used during encryption, that's why we control them within this + // wrapper and don't allow consumers to specify their own IDs directly unless overwriting the original document. + private getValidId( + id: string | undefined, + version: string | undefined, + overwrite: boolean | undefined + ) { + if (id) { + // only allow a specified ID if we're overwriting an existing ESO with a Version + // this helps us ensure that the document really was previously created using ESO + // and not being used to get around the specified ID limitation + const canSpecifyID = (overwrite && version) || SavedObjectsUtils.isRandomId(id); + if (!canSpecifyID) { + throw this.errors.createBadRequestError( + 'Predefined IDs are not allowed for saved objects with encrypted attributes unless the ID is a UUID.' + ); + } + return id; } - return id; + return SavedObjectsUtils.generateId(); } - return SavedObjectsUtils.generateId(); } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts index 8bf0a2a0f034f..7e25707c10c78 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts @@ -111,6 +111,75 @@ export default function createAlertTests({ getService }: FtrProviderContext) { }); }); + it('should allow providing custom saved object ids (uuid v1)', async () => { + const customId = '09570bb0-6299-11eb-8fde-9fe5ce6ea450'; + const response = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${customId}`) + .set('kbn-xsrf', 'foo') + .send(getTestAlertData()); + + expect(response.status).to.eql(200); + objectRemover.add(Spaces.space1.id, response.body.id, 'alert', 'alerts'); + expect(response.body.id).to.eql(customId); + // Ensure AAD isn't broken + await checkAAD({ + supertest, + spaceId: Spaces.space1.id, + type: 'alert', + id: customId, + }); + }); + + it('should allow providing custom saved object ids (uuid v4)', async () => { + const customId = 'b3bc6d83-3192-4ffd-9702-ad4fb88617ba'; + const response = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${customId}`) + .set('kbn-xsrf', 'foo') + .send(getTestAlertData()); + + expect(response.status).to.eql(200); + objectRemover.add(Spaces.space1.id, response.body.id, 'alert', 'alerts'); + expect(response.body.id).to.eql(customId); + // Ensure AAD isn't broken + await checkAAD({ + supertest, + spaceId: Spaces.space1.id, + type: 'alert', + id: customId, + }); + }); + + it('should not allow providing simple custom ids (non uuid)', async () => { + const customId = '1'; + const response = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${customId}`) + .set('kbn-xsrf', 'foo') + .send(getTestAlertData()); + + expect(response.status).to.eql(400); + expect(response.body).to.eql({ + statusCode: 400, + error: 'Bad Request', + message: + 'Predefined IDs are not allowed for saved objects with encrypted attributes unless the ID is a UUID.: Bad Request', + }); + }); + + it('should return 409 when document with id already exists', async () => { + const customId = '5031f8f0-629a-11eb-b500-d1931a8e5df7'; + const createdAlertResponse = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${customId}`) + .set('kbn-xsrf', 'foo') + .send(getTestAlertData()) + .expect(200); + objectRemover.add(Spaces.space1.id, createdAlertResponse.body.id, 'alert', 'alerts'); + await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${customId}`) + .set('kbn-xsrf', 'foo') + .send(getTestAlertData()) + .expect(409); + }); + it('should handle create alert request appropriately when consumer is unknown', async () => { const response = await supertest .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert`) From 2f54078aedc376c04de76990e7d5e2187da8fd6f Mon Sep 17 00:00:00 2001 From: Quynh Nguyen <43350163+qn895@users.noreply.github.com> Date: Mon, 1 Feb 2021 13:06:37 -0600 Subject: [PATCH 45/85] [ML] Update cloning for jobs to use exclude_generated (#88898) --- .../anomaly_detection_jobs/combined_job.ts | 11 ---- .../pages/analytics_creation/page.tsx | 2 +- .../action_clone/clone_action_name.tsx | 3 - .../jobs/jobs_list/components/utils.js | 59 ++++++++++++----- .../preconfigured_job_redirect.ts | 14 ++-- .../jobs/new_job/pages/new_job/page.tsx | 8 +-- .../application/services/job_service.d.ts | 6 +- .../application/services/job_service.js | 66 +++---------------- .../ml_api_service/data_frame_analytics.ts | 3 +- .../services/ml_api_service/jobs.ts | 11 ++++ .../ml/server/models/job_service/datafeeds.ts | 44 +++++++++++++ .../ml/server/models/job_service/jobs.ts | 27 +++++++- x-pack/plugins/ml/server/routes/apidoc.json | 1 + .../ml/server/routes/data_frame_analytics.ts | 9 ++- .../plugins/ml/server/routes/job_service.ts | 34 ++++++++++ .../routes/schemas/data_analytics_schema.ts | 7 ++ .../routes/schemas/job_service_schema.ts | 5 ++ 17 files changed, 206 insertions(+), 104 deletions(-) diff --git a/x-pack/plugins/ml/common/types/anomaly_detection_jobs/combined_job.ts b/x-pack/plugins/ml/common/types/anomaly_detection_jobs/combined_job.ts index 42dee46e71fd6..dba7d006da282 100644 --- a/x-pack/plugins/ml/common/types/anomaly_detection_jobs/combined_job.ts +++ b/x-pack/plugins/ml/common/types/anomaly_detection_jobs/combined_job.ts @@ -4,7 +4,6 @@ * you may not use this file except in compliance with the Elastic License. */ -import { cloneDeep } from 'lodash'; import { Datafeed } from './datafeed'; import { DatafeedStats } from './datafeed_stats'; import { Job } from './job'; @@ -25,16 +24,6 @@ export interface CombinedJobWithStats extends JobWithStats { datafeed_config: DatafeedWithStats; } -export function expandCombinedJobConfig(combinedJob: CombinedJob) { - const combinedJobClone = cloneDeep(combinedJob); - const job = combinedJobClone; - const datafeed = combinedJobClone.datafeed_config; - // @ts-expect-error - delete job.datafeed_config; - - return { job, datafeed }; -} - export function isCombinedJobWithStats(arg: any): arg is CombinedJobWithStats { return typeof arg.job_id === 'string'; } diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/page.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/page.tsx index e72af6a0e30c2..2cd7223027566 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/page.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/page.tsx @@ -62,7 +62,7 @@ export const Page: FC = ({ jobId }) => { if (currentIndexPattern) { (async function () { if (jobId !== undefined) { - const analyticsConfigs = await ml.dataFrameAnalytics.getDataFrameAnalytics(jobId); + const analyticsConfigs = await ml.dataFrameAnalytics.getDataFrameAnalytics(jobId, true); if ( Array.isArray(analyticsConfigs.data_frame_analytics) && analyticsConfigs.data_frame_analytics.length > 0 diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx index b1592d51874c7..72c6f5a9eca99 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx @@ -310,9 +310,6 @@ export type CloneDataFrameAnalyticsConfig = Omit< */ export function extractCloningConfig({ id, - version, - // eslint-disable-next-line @typescript-eslint/naming-convention - create_time, ...configToClone }: DeepReadonly): CloneDataFrameAnalyticsConfig { return (cloneDeep({ diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js index 338222e3ac4a2..0e2fee70c748a 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js @@ -36,6 +36,23 @@ export function loadFullJob(jobId) { }); } +export function loadJobForCloning(jobId) { + return new Promise((resolve, reject) => { + ml.jobs + .jobForCloning(jobId) + .then((resp) => { + if (resp) { + resolve(resp); + } else { + throw new Error(`Could not find job ${jobId}`); + } + }) + .catch((error) => { + reject(error); + }); + }); +} + export function isStartable(jobs) { return jobs.some( (j) => j.datafeedState === DATAFEED_STATE.STOPPED && j.jobState !== JOB_STATE.CLOSING @@ -180,31 +197,38 @@ function showResults(resp, action) { export async function cloneJob(jobId) { try { - const job = await loadFullJob(jobId); - if (job.custom_settings && job.custom_settings.created_by) { + const [{ job: cloneableJob, datafeed }, originalJob] = await Promise.all([ + loadJobForCloning(jobId), + loadFullJob(jobId, false), + ]); + if (cloneableJob !== undefined && originalJob?.custom_settings?.created_by !== undefined) { // if the job is from a wizards, i.e. contains a created_by property // use tempJobCloningObjects to temporarily store the job - mlJobService.tempJobCloningObjects.job = job; + mlJobService.tempJobCloningObjects.createdBy = originalJob?.custom_settings?.created_by; + mlJobService.tempJobCloningObjects.job = cloneableJob; if ( - job.data_counts.earliest_record_timestamp !== undefined && - job.data_counts.latest_record_timestamp !== undefined && - job.data_counts.latest_bucket_timestamp !== undefined + originalJob.data_counts.earliest_record_timestamp !== undefined && + originalJob.data_counts.latest_record_timestamp !== undefined && + originalJob.data_counts.latest_bucket_timestamp !== undefined ) { // if the job has run before, use the earliest and latest record timestamp // as the cloned job's time range - let start = job.data_counts.earliest_record_timestamp; - let end = job.data_counts.latest_record_timestamp; + let start = originalJob.data_counts.earliest_record_timestamp; + let end = originalJob.data_counts.latest_record_timestamp; - if (job.datafeed_config.aggregations !== undefined) { + if (originalJob.datafeed_config.aggregations !== undefined) { // if the datafeed uses aggregations the earliest and latest record timestamps may not be the same // as the start and end of the data in the index. - const bucketSpanMs = parseInterval(job.analysis_config.bucket_span).asMilliseconds(); + const bucketSpanMs = parseInterval( + originalJob.analysis_config.bucket_span + ).asMilliseconds(); // round down to the start of the nearest bucket start = - Math.floor(job.data_counts.earliest_record_timestamp / bucketSpanMs) * bucketSpanMs; + Math.floor(originalJob.data_counts.earliest_record_timestamp / bucketSpanMs) * + bucketSpanMs; // use latest_bucket_timestamp and add two bucket spans minus one ms - end = job.data_counts.latest_bucket_timestamp + bucketSpanMs * 2 - 1; + end = originalJob.data_counts.latest_bucket_timestamp + bucketSpanMs * 2 - 1; } mlJobService.tempJobCloningObjects.start = start; @@ -212,12 +236,17 @@ export async function cloneJob(jobId) { } } else { // otherwise use the tempJobCloningObjects - mlJobService.tempJobCloningObjects.job = job; + mlJobService.tempJobCloningObjects.job = cloneableJob; + // resets the createdBy field in case it still retains previous settings + mlJobService.tempJobCloningObjects.createdBy = undefined; + } + if (datafeed !== undefined) { + mlJobService.tempJobCloningObjects.datafeed = datafeed; } - if (job.calendars) { + if (originalJob.calendars) { mlJobService.tempJobCloningObjects.calendars = await mlCalendarService.fetchCalendarsByIds( - job.calendars + originalJob.calendars ); } diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/preconfigured_job_redirect.ts b/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/preconfigured_job_redirect.ts index cedaaa3b5dfaa..18992e5cbf5d8 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/preconfigured_job_redirect.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/preconfigured_job_redirect.ts @@ -8,7 +8,7 @@ import { ApplicationStart } from 'kibana/public'; import { IndexPatternsContract } from '../../../../../../../../../src/plugins/data/public'; import { mlJobService } from '../../../../services/job_service'; import { loadIndexPatterns, getIndexPatternIdFromName } from '../../../../util/index_utils'; -import { CombinedJob } from '../../../../../../common/types/anomaly_detection_jobs'; +import { Datafeed, Job } from '../../../../../../common/types/anomaly_detection_jobs'; import { CREATED_BY_LABEL, JOB_TYPE } from '../../../../../../common/constants/new_job'; export async function preConfiguredJobRedirect( @@ -16,11 +16,11 @@ export async function preConfiguredJobRedirect( basePath: string, navigateToUrl: ApplicationStart['navigateToUrl'] ) { - const { job } = mlJobService.tempJobCloningObjects; - if (job) { + const { createdBy, job, datafeed } = mlJobService.tempJobCloningObjects; + if (job && datafeed) { try { await loadIndexPatterns(indexPatterns); - const redirectUrl = getWizardUrlFromCloningJob(job); + const redirectUrl = getWizardUrlFromCloningJob(createdBy, job, datafeed); await navigateToUrl(`${basePath}/app/ml/${redirectUrl}`); return Promise.reject(); } catch (error) { @@ -33,8 +33,8 @@ export async function preConfiguredJobRedirect( } } -function getWizardUrlFromCloningJob(job: CombinedJob) { - const created = job?.custom_settings?.created_by; +function getWizardUrlFromCloningJob(createdBy: string | undefined, job: Job, datafeed: Datafeed) { + const created = createdBy; let page = ''; switch (created) { @@ -55,7 +55,7 @@ function getWizardUrlFromCloningJob(job: CombinedJob) { break; } - const indexPatternId = getIndexPatternIdFromName(job.datafeed_config.indices.join()); + const indexPatternId = getIndexPatternIdFromName(datafeed.indices.join()); return `jobs/new_job/${page}?index=${indexPatternId}&_g=()`; } diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/new_job/page.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/new_job/page.tsx index 8f7f93763fdd6..a196934610855 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/new_job/page.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/new_job/page.tsx @@ -37,7 +37,6 @@ import { useMlContext } from '../../../../contexts/ml'; import { getTimeFilterRange } from '../../../../components/full_time_range_selector'; import { getTimeBucketsFromCache } from '../../../../util/time_buckets'; import { ExistingJobsAndGroups, mlJobService } from '../../../../services/job_service'; -import { expandCombinedJobConfig } from '../../../../../../common/types/anomaly_detection_jobs'; import { newJobCapsService } from '../../../../services/new_job_capabilities_service'; import { EVENT_RATE_FIELD_ID } from '../../../../../../common/types/fields'; import { getNewJobDefaults } from '../../../../services/ml_server_info'; @@ -74,10 +73,11 @@ export const Page: FC = ({ existingJobsAndGroups, jobType }) => { if (mlJobService.tempJobCloningObjects.job !== undefined) { // cloning a job - const clonedJob = mlJobService.cloneJob(mlJobService.tempJobCloningObjects.job); - const { job, datafeed } = expandCombinedJobConfig(clonedJob); + const clonedJob = mlJobService.tempJobCloningObjects.job; + const clonedDatafeed = mlJobService.cloneDatafeed(mlJobService.tempJobCloningObjects.datafeed); + initCategorizationSettings(); - jobCreator.cloneFromExistingJob(job, datafeed); + jobCreator.cloneFromExistingJob(clonedJob, clonedDatafeed); // if we're not skipping the time range, this is a standard job clone, so wipe the jobId if (mlJobService.tempJobCloningObjects.skipTimeRangeStep === false) { diff --git a/x-pack/plugins/ml/public/application/services/job_service.d.ts b/x-pack/plugins/ml/public/application/services/job_service.d.ts index 30b2ec044285a..0bf40bc0dad77 100644 --- a/x-pack/plugins/ml/public/application/services/job_service.d.ts +++ b/x-pack/plugins/ml/public/application/services/job_service.d.ts @@ -6,7 +6,7 @@ import { SearchResponse } from 'elasticsearch'; import { TimeRange } from 'src/plugins/data/common/query/timefilter/types'; -import { CombinedJob } from '../../../common/types/anomaly_detection_jobs'; +import { CombinedJob, Datafeed } from '../../../common/types/anomaly_detection_jobs'; import { Calendar } from '../../../common/types/calendars'; export interface ExistingJobsAndGroups { @@ -18,6 +18,8 @@ declare interface JobService { jobs: CombinedJob[]; createResultsUrlForJobs: (jobs: any[], target: string, timeRange?: TimeRange) => string; tempJobCloningObjects: { + createdBy?: string; + datafeed?: Datafeed; job: any; skipTimeRangeStep: boolean; start?: number; @@ -26,7 +28,7 @@ declare interface JobService { }; skipTimeRangeStep: boolean; saveNewJob(job: any): Promise; - cloneJob(job: any): any; + cloneDatafeed(datafeed: any): Datafeed; openJob(jobId: string): Promise; saveNewDatafeed(datafeedConfig: any, jobId: string): Promise; startDatafeed( diff --git a/x-pack/plugins/ml/public/application/services/job_service.js b/x-pack/plugins/ml/public/application/services/job_service.js index 5f504e4665500..06f1aea3e6e1e 100644 --- a/x-pack/plugins/ml/public/application/services/job_service.js +++ b/x-pack/plugins/ml/public/application/services/job_service.js @@ -28,6 +28,8 @@ class JobService { // if populated when loading the job management page, the start datafeed modal // is automatically opened. this.tempJobCloningObjects = { + createdBy: undefined, + datafeed: undefined, job: undefined, skipTimeRangeStep: false, start: undefined, @@ -325,67 +327,15 @@ class JobService { return ml.addJob({ jobId: job.job_id, job }).then(func).catch(func); } - cloneJob(job) { - // create a deep copy of a job object - // also remove items from the job which are set by the server and not needed - // in the future this formatting could be optional - const tempJob = cloneDeep(job); - - // remove all of the items which should not be copied - // such as counts, state and times - delete tempJob.state; - delete tempJob.job_version; - delete tempJob.data_counts; - delete tempJob.create_time; - delete tempJob.finished_time; - delete tempJob.last_data_time; - delete tempJob.model_size_stats; - delete tempJob.node; - delete tempJob.average_bucket_processing_time_ms; - delete tempJob.model_snapshot_id; - delete tempJob.open_time; - delete tempJob.established_model_memory; - delete tempJob.calendars; - delete tempJob.timing_stats; - delete tempJob.forecasts_stats; - delete tempJob.assignment_explanation; - - delete tempJob.analysis_config.use_per_partition_normalization; - - each(tempJob.analysis_config.detectors, (d) => { - delete d.detector_index; - }); + cloneDatafeed(datafeed) { + const tempDatafeed = cloneDeep(datafeed); // remove parts of the datafeed config which should not be copied - if (tempJob.datafeed_config) { - delete tempJob.datafeed_config.datafeed_id; - delete tempJob.datafeed_config.job_id; - delete tempJob.datafeed_config.state; - delete tempJob.datafeed_config.node; - delete tempJob.datafeed_config.timing_stats; - delete tempJob.datafeed_config.assignment_explanation; - - // remove query_delay if it's between 60s and 120s - // the back-end produces a random value between 60 and 120 and so - // by deleting it, the back-end will produce a new random value - if (tempJob.datafeed_config.query_delay) { - const interval = parseInterval(tempJob.datafeed_config.query_delay); - if (interval !== null) { - const queryDelay = interval.asSeconds(); - if (queryDelay > 60 && queryDelay < 120) { - delete tempJob.datafeed_config.query_delay; - } - } - } + if (tempDatafeed) { + delete tempDatafeed.datafeed_id; + delete tempDatafeed.job_id; } - - // when jumping from a wizard to the advanced job creation, - // the wizard's created_by information should be stripped. - if (tempJob.custom_settings && tempJob.custom_settings.created_by) { - delete tempJob.custom_settings.created_by; - } - - return tempJob; + return tempDatafeed; } // find a job based on the id diff --git a/x-pack/plugins/ml/public/application/services/ml_api_service/data_frame_analytics.ts b/x-pack/plugins/ml/public/application/services/ml_api_service/data_frame_analytics.ts index 7b246e557d7a5..98a8e4c9cbf2d 100644 --- a/x-pack/plugins/ml/public/application/services/ml_api_service/data_frame_analytics.ts +++ b/x-pack/plugins/ml/public/application/services/ml_api_service/data_frame_analytics.ts @@ -52,11 +52,12 @@ interface JobsExistsResponse { } export const dataFrameAnalytics = { - getDataFrameAnalytics(analyticsId?: string) { + getDataFrameAnalytics(analyticsId?: string, excludeGenerated?: boolean) { const analyticsIdString = analyticsId !== undefined ? `/${analyticsId}` : ''; return http({ path: `${basePath()}/data_frame/analytics${analyticsIdString}`, method: 'GET', + ...(excludeGenerated ? { query: { excludeGenerated } } : {}), }); }, getDataFrameAnalyticsStats(analyticsId?: string) { diff --git a/x-pack/plugins/ml/public/application/services/ml_api_service/jobs.ts b/x-pack/plugins/ml/public/application/services/ml_api_service/jobs.ts index 10e035103dbec..67aaf6b557168 100644 --- a/x-pack/plugins/ml/public/application/services/ml_api_service/jobs.ts +++ b/x-pack/plugins/ml/public/application/services/ml_api_service/jobs.ts @@ -13,6 +13,8 @@ import { MlJobWithTimeRange, MlSummaryJobs, CombinedJobWithStats, + Job, + Datafeed, } from '../../../../common/types/anomaly_detection_jobs'; import { JobMessage } from '../../../../common/types/audit_message'; import { AggFieldNamePair } from '../../../../common/types/fields'; @@ -48,6 +50,15 @@ export const jobsApiProvider = (httpService: HttpService) => ({ }); }, + jobForCloning(jobId: string) { + const body = JSON.stringify({ jobId }); + return httpService.http<{ job?: Job; datafeed?: Datafeed } | undefined>({ + path: `${basePath()}/jobs/job_for_cloning`, + method: 'POST', + body, + }); + }, + jobs(jobIds: string[]) { const body = JSON.stringify({ jobIds }); return httpService.http({ diff --git a/x-pack/plugins/ml/server/models/job_service/datafeeds.ts b/x-pack/plugins/ml/server/models/job_service/datafeeds.ts index e144da0ae0800..b0c942647227c 100644 --- a/x-pack/plugins/ml/server/models/job_service/datafeeds.ts +++ b/x-pack/plugins/ml/server/models/job_service/datafeeds.ts @@ -160,11 +160,55 @@ export function datafeedsProvider(mlClient: MlClient) { }, {} as { [id: string]: string }); } + async function getDatafeedByJobId( + jobId: string, + excludeGenerated?: boolean + ): Promise { + async function findDatafeed() { + // if the job was doesn't use the standard datafeedId format + // get all the datafeeds and match it with the jobId + const { + body: { datafeeds }, + } = await mlClient.getDatafeeds( + excludeGenerated ? { exclude_generated: true } : {} + ); + for (const result of datafeeds) { + if (result.job_id === jobId) { + return result; + } + } + } + // if the job was created by the wizard, + // then we can assume it uses the standard format of the datafeedId + const assumedDefaultDatafeedId = `datafeed-${jobId}`; + try { + const { + body: { datafeeds: datafeedsResults }, + } = await mlClient.getDatafeeds({ + datafeed_id: assumedDefaultDatafeedId, + ...(excludeGenerated ? { exclude_generated: true } : {}), + }); + if ( + Array.isArray(datafeedsResults) && + datafeedsResults.length === 1 && + datafeedsResults[0].job_id === jobId + ) { + return datafeedsResults[0]; + } else { + return await findDatafeed(); + } + } catch (e) { + // if assumedDefaultDatafeedId does not exist, ES will throw an error + return await findDatafeed(); + } + } + return { forceStartDatafeeds, stopDatafeeds, forceDeleteDatafeed, getDatafeedIdsByJobId, getJobIdsByDatafeedId, + getDatafeedByJobId, }; } diff --git a/x-pack/plugins/ml/server/models/job_service/jobs.ts b/x-pack/plugins/ml/server/models/job_service/jobs.ts index d47a1d4b4892d..6ab4af63004b4 100644 --- a/x-pack/plugins/ml/server/models/job_service/jobs.ts +++ b/x-pack/plugins/ml/server/models/job_service/jobs.ts @@ -18,6 +18,8 @@ import { AuditMessage, DatafeedWithStats, CombinedJobWithStats, + Datafeed, + Job, } from '../../../common/types/anomaly_detection_jobs'; import { MlJobsResponse, @@ -47,7 +49,9 @@ interface Results { export function jobsProvider(client: IScopedClusterClient, mlClient: MlClient) { const { asInternalUser } = client; - const { forceDeleteDatafeed, getDatafeedIdsByJobId } = datafeedsProvider(mlClient); + const { forceDeleteDatafeed, getDatafeedIdsByJobId, getDatafeedByJobId } = datafeedsProvider( + mlClient + ); const { getAuditMessagesSummary } = jobAuditMessagesProvider(client, mlClient); const { getLatestBucketTimestampByJob } = resultsServiceProvider(mlClient); const calMngr = new CalendarManager(mlClient); @@ -257,6 +261,25 @@ export function jobsProvider(client: IScopedClusterClient, mlClient: MlClient) { return { jobs, jobsMap }; } + async function getJobForCloning(jobId: string) { + const [{ body: jobResults }, datafeedResult] = await Promise.all([ + mlClient.getJobs({ job_id: jobId, exclude_generated: true }), + getDatafeedByJobId(jobId, true), + ]); + const result: { datafeed?: Datafeed; job?: Job } = { job: undefined, datafeed: undefined }; + if (datafeedResult && datafeedResult.job_id === jobId) { + result.datafeed = datafeedResult; + } + + if (jobResults && jobResults.jobs) { + const job = jobResults.jobs.find((j) => j.job_id === jobId); + if (job) { + result.job = job; + } + } + return result; + } + async function createFullJobsList(jobIds: string[] = []) { const jobs: CombinedJobWithStats[] = []; const groups: { [jobId: string]: string[] } = {}; @@ -265,6 +288,7 @@ export function jobsProvider(client: IScopedClusterClient, mlClient: MlClient) { const globalCalendars: string[] = []; const jobIdsString = jobIds.join(); + const [ { body: jobResults }, { body: jobStatsResults }, @@ -502,6 +526,7 @@ export function jobsProvider(client: IScopedClusterClient, mlClient: MlClient) { forceStopAndCloseJob, jobsSummary, jobsWithTimerange, + getJobForCloning, createFullJobsList, deletingJobTasks, jobsExist, diff --git a/x-pack/plugins/ml/server/routes/apidoc.json b/x-pack/plugins/ml/server/routes/apidoc.json index 015ec6e4ec9c0..5dc9a3107af86 100644 --- a/x-pack/plugins/ml/server/routes/apidoc.json +++ b/x-pack/plugins/ml/server/routes/apidoc.json @@ -73,6 +73,7 @@ "CloseJobs", "JobsSummary", "JobsWithTimeRange", + "GetJobForCloning", "CreateFullJobsList", "GetAllGroups", "JobsExist", diff --git a/x-pack/plugins/ml/server/routes/data_frame_analytics.ts b/x-pack/plugins/ml/server/routes/data_frame_analytics.ts index 0abba7a429aea..4d504f4f2ef20 100644 --- a/x-pack/plugins/ml/server/routes/data_frame_analytics.ts +++ b/x-pack/plugins/ml/server/routes/data_frame_analytics.ts @@ -19,6 +19,7 @@ import { stopsDataFrameAnalyticsJobQuerySchema, deleteDataFrameAnalyticsJobSchema, jobsExistSchema, + analyticsQuerySchema, } from './schemas/data_analytics_schema'; import { GetAnalyticsMapArgs, ExtendAnalyticsMapArgs } from '../models/data_frame_analytics/types'; import { IndexPatternHandler } from '../models/data_frame_analytics/index_patterns'; @@ -102,7 +103,9 @@ export function dataFrameAnalyticsRoutes({ router, mlLicense, routeGuard }: Rout }, routeGuard.fullLicenseAPIGuard(async ({ mlClient, response }) => { try { - const { body } = await mlClient.getDataFrameAnalytics({ size: 1000 }); + const { body } = await mlClient.getDataFrameAnalytics({ + size: 1000, + }); return response.ok({ body, }); @@ -126,6 +129,7 @@ export function dataFrameAnalyticsRoutes({ router, mlLicense, routeGuard }: Rout path: '/api/ml/data_frame/analytics/{analyticsId}', validate: { params: analyticsIdSchema, + query: analyticsQuerySchema, }, options: { tags: ['access:ml:canGetDataFrameAnalytics'], @@ -134,8 +138,11 @@ export function dataFrameAnalyticsRoutes({ router, mlLicense, routeGuard }: Rout routeGuard.fullLicenseAPIGuard(async ({ mlClient, request, response }) => { try { const { analyticsId } = request.params; + const { excludeGenerated } = request.query; + const { body } = await mlClient.getDataFrameAnalytics({ id: analyticsId, + ...(excludeGenerated ? { exclude_generated: true } : {}), }); return response.ok({ body, diff --git a/x-pack/plugins/ml/server/routes/job_service.ts b/x-pack/plugins/ml/server/routes/job_service.ts index c067d9ce0abbc..a72e942e987aa 100644 --- a/x-pack/plugins/ml/server/routes/job_service.ts +++ b/x-pack/plugins/ml/server/routes/job_service.ts @@ -272,6 +272,40 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { }) ); + /** + * @apiGroup JobService + * + * @api {post} /api/ml/jobs/job_for_cloning Get job for cloning + * @apiName GetJobForCloning + * @apiDescription Get the job configuration with auto generated fields excluded for cloning + * + * @apiSchema (body) jobIdSchema + */ + router.post( + { + path: '/api/ml/jobs/job_for_cloning', + validate: { + body: jobIdSchema, + }, + options: { + tags: ['access:ml:canGetJobs'], + }, + }, + routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response }) => { + try { + const { getJobForCloning } = jobServiceProvider(client, mlClient); + const { jobId } = request.body; + + const resp = await getJobForCloning(jobId); + return response.ok({ + body: resp, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); + /** * @apiGroup JobService * diff --git a/x-pack/plugins/ml/server/routes/schemas/data_analytics_schema.ts b/x-pack/plugins/ml/server/routes/schemas/data_analytics_schema.ts index cf52d1cb27433..0f965cf500b86 100644 --- a/x-pack/plugins/ml/server/routes/schemas/data_analytics_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/data_analytics_schema.ts @@ -64,6 +64,13 @@ export const analyticsIdSchema = schema.object({ analyticsId: schema.string(), }); +export const analyticsQuerySchema = schema.object({ + /** + * Analytics Query + */ + excludeGenerated: schema.maybe(schema.boolean()), +}); + export const deleteDataFrameAnalyticsJobSchema = schema.object({ /** * Analytics Destination Index diff --git a/x-pack/plugins/ml/server/routes/schemas/job_service_schema.ts b/x-pack/plugins/ml/server/routes/schemas/job_service_schema.ts index 583c9c41727ea..56094a4950a0c 100644 --- a/x-pack/plugins/ml/server/routes/schemas/job_service_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/job_service_schema.ts @@ -39,6 +39,11 @@ export const forceStartDatafeedSchema = schema.object({ end: schema.maybe(schema.number()), }); +export const jobIdSchema = schema.object({ + /** Optional list of job IDs. */ + jobIds: schema.maybe(schema.string()), +}); + export const jobIdsSchema = schema.object({ /** Optional list of job IDs. */ jobIds: schema.maybe(schema.arrayOf(schema.maybe(schema.string()))), From 5c96da1e201a94adffea611a0606b7faed5e34c0 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Mon, 1 Feb 2021 12:24:07 -0700 Subject: [PATCH 46/85] Migrate indexPatternManagement to TS project ref (#89759) --- .../index_pattern_management/tsconfig.json | 22 +++++++++++++++++++ test/tsconfig.json | 1 + tsconfig.json | 2 ++ tsconfig.refs.json | 3 ++- x-pack/test/tsconfig.json | 1 + x-pack/tsconfig.json | 5 +++-- 6 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/plugins/index_pattern_management/tsconfig.json diff --git a/src/plugins/index_pattern_management/tsconfig.json b/src/plugins/index_pattern_management/tsconfig.json new file mode 100644 index 0000000000000..4dca1634fddb6 --- /dev/null +++ b/src/plugins/index_pattern_management/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true + }, + "include": [ + "public/**/*", + "server/**/*", + ], + "references": [ + { "path": "../../core/tsconfig.json" }, + { "path": "../data/tsconfig.json" }, + { "path": "../management/tsconfig.json" }, + { "path": "../url_forwarding/tsconfig.json" }, + { "path": "../kibana_react/tsconfig.json" }, + { "path": "../kibana_utils/tsconfig.json" }, + ] +} diff --git a/test/tsconfig.json b/test/tsconfig.json index 4df74f526077e..1dc58f7b25c24 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -39,6 +39,7 @@ { "path": "../src/plugins/ui_actions/tsconfig.json" }, { "path": "../src/plugins/url_forwarding/tsconfig.json" }, { "path": "../src/plugins/usage_collection/tsconfig.json" }, + { "path": "../src/plugins/index_pattern_management/tsconfig.json" }, { "path": "../src/plugins/legacy_export/tsconfig.json" } ] } diff --git a/tsconfig.json b/tsconfig.json index ee46e075f2df1..21760919c89e9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -59,6 +59,7 @@ "src/plugins/vis_type_xy/**/*", "src/plugins/visualizations/**/*", "src/plugins/visualize/**/*", + "src/plugins/index_pattern_management/**/*", // In the build we actually exclude **/public/**/* from this config so that // we can run the TSC on both this and the .browser version of this config // file, but if we did it during development IDEs would not be able to find @@ -117,5 +118,6 @@ { "path": "./src/plugins/vis_type_xy/tsconfig.json" }, { "path": "./src/plugins/visualizations/tsconfig.json" }, { "path": "./src/plugins/visualize/tsconfig.json" }, + { "path": "./src/plugins/index_pattern_management/tsconfig.json" }, ] } diff --git a/tsconfig.refs.json b/tsconfig.refs.json index 16c5b6c116998..1d08e764709ca 100644 --- a/tsconfig.refs.json +++ b/tsconfig.refs.json @@ -52,6 +52,7 @@ { "path": "./src/plugins/vis_type_vega/tsconfig.json" }, { "path": "./src/plugins/vis_type_xy/tsconfig.json" }, { "path": "./src/plugins/visualizations/tsconfig.json" }, - { "path": "./src/plugins/visualize/tsconfig.json" } + { "path": "./src/plugins/visualize/tsconfig.json" }, + { "path": "./src/plugins/index_pattern_management/tsconfig.json" }, ] } diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 783315b36efaf..4c77a12c5c01a 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -36,6 +36,7 @@ { "path": "../../src/plugins/usage_collection/tsconfig.json" }, { "path": "../../src/plugins/ui_actions/tsconfig.json" }, { "path": "../../src/plugins/url_forwarding/tsconfig.json" }, + { "path": "../../src/plugins/index_pattern_management/tsconfig.json" }, { "path": "../plugins/actions/tsconfig.json" }, { "path": "../plugins/alerts/tsconfig.json" }, diff --git a/x-pack/tsconfig.json b/x-pack/tsconfig.json index c93bc2c5bd181..7ff1e10e8a58b 100644 --- a/x-pack/tsconfig.json +++ b/x-pack/tsconfig.json @@ -84,8 +84,9 @@ { "path": "../src/plugins/ui_actions/tsconfig.json" }, { "path": "../src/plugins/url_forwarding/tsconfig.json" }, { "path": "../src/plugins/usage_collection/tsconfig.json" }, - { "path": "./plugins/actions/tsconfig.json" }, - { "path": "./plugins/alerts/tsconfig.json" }, + { "path": "../src/plugins/index_pattern_management/tsconfig.json" }, + { "path": "./plugins/actions/tsconfig.json"}, + { "path": "./plugins/alerts/tsconfig.json"}, { "path": "./plugins/beats_management/tsconfig.json" }, { "path": "./plugins/canvas/tsconfig.json" }, { "path": "./plugins/cloud/tsconfig.json" }, From 6ea588968733e3eb360221e50a1de2711000e871 Mon Sep 17 00:00:00 2001 From: Alison Goryachev Date: Mon, 1 Feb 2021 14:47:43 -0500 Subject: [PATCH 47/85] [Upgrade Assistant] Use kibana version value from core context (#89774) --- .../upgrade_assistant/common/version.ts | 13 --- .../public/application/app.tsx | 4 +- .../public/application/app_context.tsx | 7 ++ .../components/latest_minor_banner.tsx | 9 +- .../application/components/tabs.test.tsx | 7 ++ .../tabs/checkup/checkup_tab.test.tsx | 8 ++ .../components/tabs/checkup/checkup_tab.tsx | 7 +- .../components/tabs/overview/index.tsx | 85 ++++++++++--------- .../components/tabs/overview/steps.tsx | 23 ++--- .../application/mount_management_section.ts | 5 +- .../upgrade_assistant/public/plugin.ts | 19 ++++- .../server/lib/__fixtures__/version.ts | 20 +++++ .../server/lib/es_version_precheck.test.ts | 40 +++++---- .../server/lib/es_version_precheck.ts | 12 +-- .../lib/reindexing/index_settings.test.ts | 38 ++++++--- .../server/lib/reindexing/index_settings.ts | 9 +- .../lib/reindexing/reindex_actions.test.ts | 30 ++++--- .../lib/reindexing/reindex_service.test.ts | 31 ++++--- .../upgrade_assistant/server/lib/version.ts | 33 +++++++ .../upgrade_assistant/server/plugin.ts | 8 +- 20 files changed, 267 insertions(+), 141 deletions(-) delete mode 100644 x-pack/plugins/upgrade_assistant/common/version.ts create mode 100644 x-pack/plugins/upgrade_assistant/server/lib/__fixtures__/version.ts create mode 100644 x-pack/plugins/upgrade_assistant/server/lib/version.ts diff --git a/x-pack/plugins/upgrade_assistant/common/version.ts b/x-pack/plugins/upgrade_assistant/common/version.ts deleted file mode 100644 index 231614dc38c6d..0000000000000 --- a/x-pack/plugins/upgrade_assistant/common/version.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import SemVer from 'semver/classes/semver'; -import pkg from '../../../../package.json'; - -export const CURRENT_VERSION = new SemVer(pkg.version as string); -export const CURRENT_MAJOR_VERSION = CURRENT_VERSION.major; -export const NEXT_MAJOR_VERSION = CURRENT_VERSION.major + 1; -export const PREV_MAJOR_VERSION = CURRENT_VERSION.major - 1; diff --git a/x-pack/plugins/upgrade_assistant/public/application/app.tsx b/x-pack/plugins/upgrade_assistant/public/application/app.tsx index 2b245bceceb6c..38e8b9d31d773 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/app.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/app.tsx @@ -8,7 +8,6 @@ import React from 'react'; import { I18nStart } from 'src/core/public'; import { EuiPageHeader, EuiPageHeaderSection, EuiTitle } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { NEXT_MAJOR_VERSION } from '../../common/version'; import { UpgradeAssistantTabs } from './components/tabs'; import { AppContextProvider, ContextValue, AppContext } from './app_context'; @@ -17,6 +16,7 @@ export interface AppDependencies extends ContextValue { } export const RootComponent = ({ i18n, ...contextValue }: AppDependencies) => { + const { nextMajor } = contextValue.kibanaVersionInfo; return ( @@ -28,7 +28,7 @@ export const RootComponent = ({ i18n, ...contextValue }: AppDependencies) => { diff --git a/x-pack/plugins/upgrade_assistant/public/application/app_context.tsx b/x-pack/plugins/upgrade_assistant/public/application/app_context.tsx index 11c88a52ea24e..865f134713779 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/app_context.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/app_context.tsx @@ -6,10 +6,17 @@ import { DocLinksStart, HttpSetup } from 'src/core/public'; import React, { createContext, useContext } from 'react'; +export interface KibanaVersionContext { + currentMajor: number; + prevMajor: number; + nextMajor: number; +} + export interface ContextValue { http: HttpSetup; isCloudEnabled: boolean; docLinks: DocLinksStart; + kibanaVersionInfo: KibanaVersionContext; } export const AppContext = createContext({} as any); diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/latest_minor_banner.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/latest_minor_banner.tsx index d9ec183231739..5d0df54dd532c 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/components/latest_minor_banner.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/components/latest_minor_banner.tsx @@ -9,15 +9,16 @@ import React from 'react'; import { EuiCallOut, EuiLink } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { CURRENT_MAJOR_VERSION, NEXT_MAJOR_VERSION } from '../../../common/version'; import { useAppContext } from '../app_context'; export const LatestMinorBanner: React.FunctionComponent = () => { - const { docLinks } = useAppContext(); + const { docLinks, kibanaVersionInfo } = useAppContext(); const { ELASTIC_WEBSITE_URL } = docLinks; const esDocBasePath = `${ELASTIC_WEBSITE_URL}guide/en/elasticsearch/reference`; + const { currentMajor, nextMajor } = kibanaVersionInfo; + return ( { /> ), - nextEsVersion: `${NEXT_MAJOR_VERSION}.x`, - currentEsVersion: `${CURRENT_MAJOR_VERSION}.x`, + nextEsVersion: `${nextMajor}.x`, + currentEsVersion: `${currentMajor}.x`, }} />

diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/tabs.test.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/tabs.test.tsx index 6a99bd24ef26b..600e764afd32b 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/components/tabs.test.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/components/tabs.test.tsx @@ -5,6 +5,7 @@ */ import React from 'react'; +import SemVer from 'semver/classes/semver'; import { mountWithIntl } from '@kbn/test/jest'; import { httpServiceMock } from 'src/core/public/mocks'; import { UpgradeAssistantTabs } from './tabs'; @@ -16,6 +17,7 @@ import { OverviewTab } from './tabs/overview'; const promisesToResolve = () => new Promise((resolve) => setTimeout(resolve, 0)); const mockHttp = httpServiceMock.createSetupContract(); +const mockKibanaVersion = new SemVer('8.0.0'); jest.mock('../app_context', () => { return { @@ -25,6 +27,11 @@ jest.mock('../app_context', () => { DOC_LINK_VERSION: 'current', ELASTIC_WEBSITE_URL: 'https://www.elastic.co/', }, + kibanaVersionInfo: { + currentMajor: mockKibanaVersion.major, + prevMajor: mockKibanaVersion.major - 1, + nextMajor: mockKibanaVersion.major + 1, + }, }; }, }; diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/tabs/checkup/checkup_tab.test.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/tabs/checkup/checkup_tab.test.tsx index 3a1e042a3aa5f..65dc9c25dacbd 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/components/tabs/checkup/checkup_tab.test.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/components/tabs/checkup/checkup_tab.test.tsx @@ -6,6 +6,7 @@ import { shallow } from 'enzyme'; import React from 'react'; +import SemVer from 'semver/classes/semver'; import { LoadingState } from '../../types'; import AssistanceData from '../__fixtures__/checkup_api_response.json'; @@ -20,6 +21,8 @@ const defaultProps = { setSelectedTabIndex: jest.fn(), }; +const mockKibanaVersion = new SemVer('8.0.0'); + jest.mock('../../../app_context', () => { return { useAppContext: () => { @@ -28,6 +31,11 @@ jest.mock('../../../app_context', () => { DOC_LINK_VERSION: 'current', ELASTIC_WEBSITE_URL: 'https://www.elastic.co/', }, + kibanaVersionInfo: { + currentMajor: mockKibanaVersion.major, + prevMajor: mockKibanaVersion.major - 1, + nextMajor: mockKibanaVersion.major + 1, + }, }; }, }; diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/tabs/checkup/checkup_tab.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/tabs/checkup/checkup_tab.tsx index 02cbc87483e55..4fa4dafb55ff5 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/components/tabs/checkup/checkup_tab.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/components/tabs/checkup/checkup_tab.tsx @@ -18,7 +18,6 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { NEXT_MAJOR_VERSION } from '../../../../../common/version'; import { LoadingErrorBanner } from '../../error_banner'; import { useAppContext } from '../../../app_context'; import { @@ -53,11 +52,13 @@ export const CheckupTab: FunctionComponent = ({ const [search, setSearch] = useState(''); const [currentGroupBy, setCurrentGroupBy] = useState(GroupByOption.message); - const { docLinks } = useAppContext(); + const { docLinks, kibanaVersionInfo } = useAppContext(); const { DOC_LINK_VERSION, ELASTIC_WEBSITE_URL } = docLinks; const esDocBasePath = `${ELASTIC_WEBSITE_URL}guide/en/elasticsearch/reference/${DOC_LINK_VERSION}`; + const { nextMajor } = kibanaVersionInfo; + const changeFilter = (filter: LevelFilterOption) => { setCurrentFilter(filter); }; @@ -99,7 +100,7 @@ export const CheckupTab: FunctionComponent = ({ defaultMessage="These {strongCheckupLabel} issues need your attention. Resolve them before upgrading to Elasticsearch {nextEsVersion}." values={{ strongCheckupLabel: {checkupLabel}, - nextEsVersion: `${NEXT_MAJOR_VERSION}.x`, + nextEsVersion: `${nextMajor}.x`, }} />

diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/tabs/overview/index.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/tabs/overview/index.tsx index 8789927167766..d7a30bf2e6a5e 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/components/tabs/overview/index.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/components/tabs/overview/index.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { Fragment, FunctionComponent } from 'react'; +import React, { FunctionComponent } from 'react'; import { EuiFlexGroup, @@ -17,54 +17,59 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { NEXT_MAJOR_VERSION } from '../../../../../common/version'; +import { useAppContext } from '../../../app_context'; import { LoadingErrorBanner } from '../../error_banner'; import { LoadingState, UpgradeAssistantTabProps } from '../../types'; import { Steps } from './steps'; -export const OverviewTab: FunctionComponent = (props) => ( - - +export const OverviewTab: FunctionComponent = (props) => { + const { kibanaVersionInfo } = useAppContext(); + const { nextMajor } = kibanaVersionInfo; - -

- -

-
+ values={{ + nextEsVersion: `${nextMajor}.x`, + }} + /> +

+ - + - {props.alertBanner && ( - - {props.alertBanner} + {props.alertBanner && ( + <> + {props.alertBanner} - - - )} + + + )} - - - {props.loadingState === LoadingState.Success && } + + + {props.loadingState === LoadingState.Success && } - {props.loadingState === LoadingState.Loading && ( - - - - - - )} + {props.loadingState === LoadingState.Loading && ( + + + + + + )} - {props.loadingState === LoadingState.Error && ( - - )} - - -
-); + {props.loadingState === LoadingState.Error && ( + + )} + + + + ); +}; diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/tabs/overview/steps.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/tabs/overview/steps.tsx index dd392f6d1b294..d81e709768065 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/components/tabs/overview/steps.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/components/tabs/overview/steps.tsx @@ -19,22 +19,21 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { CURRENT_MAJOR_VERSION, NEXT_MAJOR_VERSION } from '../../../../../common/version'; import { UpgradeAssistantTabProps } from '../../types'; import { DeprecationLoggingToggle } from './deprecation_logging_toggle'; import { useAppContext } from '../../../app_context'; // Leaving these here even if unused so they are picked up for i18n static analysis // Keep this until last minor release (when next major is also released). -const WAIT_FOR_RELEASE_STEP = { +const WAIT_FOR_RELEASE_STEP = (majorVersion: number, nextMajorVersion: number) => ({ title: i18n.translate('xpack.upgradeAssistant.overviewTab.steps.waitForReleaseStep.stepTitle', { defaultMessage: 'Wait for the Elasticsearch {nextEsVersion} release', values: { - nextEsVersion: `${NEXT_MAJOR_VERSION}.0`, + nextEsVersion: `${nextMajorVersion}.0`, }, }), children: ( - + <>

-
+ ), -}; +}); // Swap in this step for the one above it on the last minor release. // @ts-ignore @@ -100,11 +99,13 @@ export const Steps: FunctionComponent = ({ }, {} as { [checkupType: string]: number }); // Uncomment when START_UPGRADE_STEP is in use! - const { docLinks, http /* , isCloudEnabled */ } = useAppContext(); + const { kibanaVersionInfo, docLinks, http /* , isCloudEnabled */ } = useAppContext(); const { DOC_LINK_VERSION, ELASTIC_WEBSITE_URL } = docLinks; const esDocBasePath = `${ELASTIC_WEBSITE_URL}guide/en/elasticsearch/reference/${DOC_LINK_VERSION}`; + const { currentMajor, nextMajor } = kibanaVersionInfo; + return ( = ({ /> ), - nextEsVersion: `${NEXT_MAJOR_VERSION}.0`, + nextEsVersion: `${nextMajor}.0`, }} />

@@ -278,7 +279,7 @@ export const Steps: FunctionComponent = ({ }, // Swap in START_UPGRADE_STEP on the last minor release. - WAIT_FOR_RELEASE_STEP, + WAIT_FOR_RELEASE_STEP(currentMajor, nextMajor), // START_UPGRADE_STEP(isCloudEnabled, esDocBasePath), ]} /> diff --git a/x-pack/plugins/upgrade_assistant/public/application/mount_management_section.ts b/x-pack/plugins/upgrade_assistant/public/application/mount_management_section.ts index c0124d52e45d7..906bf8f6c0709 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/mount_management_section.ts +++ b/x-pack/plugins/upgrade_assistant/public/application/mount_management_section.ts @@ -6,11 +6,13 @@ import { CoreSetup } from 'src/core/public'; import { ManagementAppMountParams } from '../../../../../src/plugins/management/public'; import { renderApp } from './render_app'; +import { KibanaVersionContext } from './app_context'; export async function mountManagementSection( coreSetup: CoreSetup, isCloudEnabled: boolean, - params: ManagementAppMountParams + params: ManagementAppMountParams, + kibanaVersionInfo: KibanaVersionContext ) { const [{ i18n, docLinks }] = await coreSetup.getStartServices(); return renderApp({ @@ -19,5 +21,6 @@ export async function mountManagementSection( http: coreSetup.http, i18n, docLinks, + kibanaVersionInfo, }); } diff --git a/x-pack/plugins/upgrade_assistant/public/plugin.ts b/x-pack/plugins/upgrade_assistant/public/plugin.ts index 98f1b8351b88b..4bbb79cdd83b8 100644 --- a/x-pack/plugins/upgrade_assistant/public/plugin.ts +++ b/x-pack/plugins/upgrade_assistant/public/plugin.ts @@ -4,13 +4,13 @@ * you may not use this file except in compliance with the Elastic License. */ +import SemVer from 'semver/classes/semver'; import { i18n } from '@kbn/i18n'; import { Plugin, CoreSetup, PluginInitializerContext } from 'src/core/public'; import { CloudSetup } from '../../cloud/public'; import { ManagementSetup } from '../../../../src/plugins/management/public'; -import { NEXT_MAJOR_VERSION } from '../common/version'; import { Config } from '../common/config'; interface Dependencies { @@ -29,10 +29,17 @@ export class UpgradeAssistantUIPlugin implements Plugin { const appRegistrar = management.sections.section.stack; const isCloudEnabled = Boolean(cloud?.isCloudEnabled); + const kibanaVersion = new SemVer(this.ctx.env.packageInfo.version); + + const kibanaVersionInfo = { + currentMajor: kibanaVersion.major, + prevMajor: kibanaVersion.major - 1, + nextMajor: kibanaVersion.major + 1, + }; const pluginName = i18n.translate('xpack.upgradeAssistant.appTitle', { defaultMessage: '{version} Upgrade Assistant', - values: { version: `${NEXT_MAJOR_VERSION}.0` }, + values: { version: `${kibanaVersionInfo.nextMajor}.0` }, }); appRegistrar.registerApp({ @@ -47,8 +54,14 @@ export class UpgradeAssistantUIPlugin implements Plugin { } = coreStart; docTitle.change(pluginName); + const { mountManagementSection } = await import('./application/mount_management_section'); - const unmountAppCallback = await mountManagementSection(coreSetup, isCloudEnabled, params); + const unmountAppCallback = await mountManagementSection( + coreSetup, + isCloudEnabled, + params, + kibanaVersionInfo + ); return () => { docTitle.reset(); diff --git a/x-pack/plugins/upgrade_assistant/server/lib/__fixtures__/version.ts b/x-pack/plugins/upgrade_assistant/server/lib/__fixtures__/version.ts new file mode 100644 index 0000000000000..f08f449bbdae9 --- /dev/null +++ b/x-pack/plugins/upgrade_assistant/server/lib/__fixtures__/version.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { SemVer } from 'semver'; + +export const MOCK_VERSION_STRING = '8.0.0'; + +export const getMockVersionInfo = (versionString = MOCK_VERSION_STRING) => { + const currentVersion = new SemVer(versionString); + const currentMajor = currentVersion.major; + + return { + currentVersion, + currentMajor, + prevMajor: currentMajor - 1, + nextMajor: currentMajor + 1, + }; +}; diff --git a/x-pack/plugins/upgrade_assistant/server/lib/es_version_precheck.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/es_version_precheck.test.ts index 2310f993ce27d..74ec268d71e84 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/es_version_precheck.test.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/es_version_precheck.test.ts @@ -7,12 +7,16 @@ import { SemVer } from 'semver'; import { IScopedClusterClient, kibanaResponseFactory } from 'src/core/server'; import { xpackMocks } from '../../../../mocks'; -import { CURRENT_VERSION } from '../../common/version'; +import { MOCK_VERSION_STRING, getMockVersionInfo } from './__fixtures__/version'; + import { esVersionCheck, getAllNodeVersions, verifyAllMatchKibanaVersion, } from './es_version_precheck'; +import { versionService } from './version'; + +const { currentMajor, currentVersion } = getMockVersionInfo(); describe('getAllNodeVersions', () => { it('returns a list of unique node versions', async () => { @@ -41,25 +45,25 @@ describe('getAllNodeVersions', () => { describe('verifyAllMatchKibanaVersion', () => { it('detects higher version nodes', () => { - const result = verifyAllMatchKibanaVersion([new SemVer('99999.0.0')]); + const result = verifyAllMatchKibanaVersion([new SemVer('99999.0.0')], currentMajor); expect(result.allNodesMatch).toBe(false); expect(result.allNodesUpgraded).toBe(true); }); it('detects lower version nodes', () => { - const result = verifyAllMatchKibanaVersion([new SemVer('0.0.0')]); + const result = verifyAllMatchKibanaVersion([new SemVer('0.0.0')], currentMajor); expect(result.allNodesMatch).toBe(false); expect(result.allNodesUpgraded).toBe(true); }); it('detects if all are on same major correctly', () => { const versions = [ - CURRENT_VERSION, - CURRENT_VERSION.inc('minor'), - CURRENT_VERSION.inc('minor').inc('minor'), + currentVersion, + currentVersion.inc('minor'), + currentVersion.inc('minor').inc('minor'), ]; - const result = verifyAllMatchKibanaVersion(versions); + const result = verifyAllMatchKibanaVersion(versions, currentMajor); expect(result.allNodesMatch).toBe(true); expect(result.allNodesUpgraded).toBe(false); }); @@ -67,17 +71,21 @@ describe('verifyAllMatchKibanaVersion', () => { it('detects partial matches', () => { const versions = [ new SemVer('0.0.0'), - CURRENT_VERSION.inc('minor'), - CURRENT_VERSION.inc('minor').inc('minor'), + currentVersion.inc('minor'), + currentVersion.inc('minor').inc('minor'), ]; - const result = verifyAllMatchKibanaVersion(versions); + const result = verifyAllMatchKibanaVersion(versions, currentMajor); expect(result.allNodesMatch).toBe(false); expect(result.allNodesUpgraded).toBe(false); }); }); describe('EsVersionPrecheck', () => { + beforeEach(() => { + versionService.setup(MOCK_VERSION_STRING); + }); + it('returns a 403 when callCluster fails with a 403', async () => { const fakeCall = jest.fn().mockRejectedValue({ statusCode: 403 }); @@ -107,8 +115,8 @@ describe('EsVersionPrecheck', () => { info: jest.fn().mockResolvedValue({ body: { nodes: { - node1: { version: CURRENT_VERSION.raw }, - node2: { version: new SemVer(CURRENT_VERSION.raw).inc('major').raw }, + node1: { version: currentVersion.raw }, + node2: { version: new SemVer(currentVersion.raw).inc('major').raw }, }, }, }), @@ -132,8 +140,8 @@ describe('EsVersionPrecheck', () => { info: jest.fn().mockResolvedValue({ body: { nodes: { - node1: { version: new SemVer(CURRENT_VERSION.raw).inc('major').raw }, - node2: { version: new SemVer(CURRENT_VERSION.raw).inc('major').raw }, + node1: { version: new SemVer(currentVersion.raw).inc('major').raw }, + node2: { version: new SemVer(currentVersion.raw).inc('major').raw }, }, }, }), @@ -157,8 +165,8 @@ describe('EsVersionPrecheck', () => { info: jest.fn().mockResolvedValue({ body: { nodes: { - node1: { version: CURRENT_VERSION.raw }, - node2: { version: CURRENT_VERSION.raw }, + node1: { version: currentVersion.raw }, + node2: { version: currentVersion.raw }, }, }, }), diff --git a/x-pack/plugins/upgrade_assistant/server/lib/es_version_precheck.ts b/x-pack/plugins/upgrade_assistant/server/lib/es_version_precheck.ts index be6c4f5ff0230..c308334c6cb08 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/es_version_precheck.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/es_version_precheck.ts @@ -13,7 +13,7 @@ import { RequestHandler, RequestHandlerContext, } from 'src/core/server'; -import { CURRENT_VERSION } from '../../common/version'; +import { versionService } from './version'; interface Nodes { nodes: { @@ -39,14 +39,14 @@ export const getAllNodeVersions = async (adminClient: IScopedClusterClient) => { .map((version) => new SemVer(version)); }; -export const verifyAllMatchKibanaVersion = (allNodeVersions: SemVer[]) => { +export const verifyAllMatchKibanaVersion = (allNodeVersions: SemVer[], majorVersion: number) => { // Determine if all nodes in the cluster are running the same major version as Kibana. const numDifferentVersion = allNodeVersions.filter( - (esNodeVersion) => esNodeVersion.major !== CURRENT_VERSION.major + (esNodeVersion) => esNodeVersion.major !== majorVersion ).length; const numSameVersion = allNodeVersions.filter( - (esNodeVersion) => esNodeVersion.major === CURRENT_VERSION.major + (esNodeVersion) => esNodeVersion.major === majorVersion ).length; if (numDifferentVersion) { @@ -83,7 +83,9 @@ export const esVersionCheck = async ( throw e; } - const result = verifyAllMatchKibanaVersion(allNodeVersions); + const majorVersion = versionService.getMajorVersion(); + + const result = verifyAllMatchKibanaVersion(allNodeVersions, majorVersion); if (!result.allNodesMatch) { return response.customError({ // 426 means "Upgrade Required" and is used when semver compatibility is not met. diff --git a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/index_settings.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/index_settings.test.ts index 9ec06b72f02e2..2111b77422f3e 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/index_settings.test.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/index_settings.test.ts @@ -4,7 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import { CURRENT_MAJOR_VERSION, PREV_MAJOR_VERSION } from '../../../common/version'; +import { versionService } from '../version'; +import { MOCK_VERSION_STRING, getMockVersionInfo } from '../__fixtures__/version'; + import { generateNewIndexName, getReindexWarnings, @@ -12,6 +14,8 @@ import { transformFlatSettings, } from './index_settings'; +const { currentMajor, prevMajor } = getMockVersionInfo(); + describe('transformFlatSettings', () => { it('does not blow up for empty mappings', () => { expect( @@ -56,6 +60,10 @@ describe('transformFlatSettings', () => { }); describe('sourceNameForIndex', () => { + beforeEach(() => { + versionService.setup(MOCK_VERSION_STRING); + }); + it('parses internal indices', () => { expect(sourceNameForIndex('.myInternalIndex')).toEqual('.myInternalIndex'); }); @@ -69,42 +77,46 @@ describe('sourceNameForIndex', () => { expect(sourceNameForIndex('.myInternalIndex-reindexed-v5')).toEqual('.myInternalIndex'); }); - it('replaces reindexed-v${PREV_MAJOR_VERSION} with reindexed-v${CURRENT_MAJOR_VERSION} in newIndexName', () => { - expect(sourceNameForIndex(`reindexed-v${PREV_MAJOR_VERSION}-myIndex`)).toEqual('myIndex'); - expect(sourceNameForIndex(`.reindexed-v${PREV_MAJOR_VERSION}-myInternalIndex`)).toEqual( + it(`replaces reindexed-v${prevMajor} with reindexed-v${currentMajor} in newIndexName`, () => { + expect(sourceNameForIndex(`reindexed-v${prevMajor}-myIndex`)).toEqual('myIndex'); + expect(sourceNameForIndex(`.reindexed-v${prevMajor}-myInternalIndex`)).toEqual( '.myInternalIndex' ); }); }); describe('generateNewIndexName', () => { + beforeEach(() => { + versionService.setup(MOCK_VERSION_STRING); + }); + it('parses internal indices', () => { expect(generateNewIndexName('.myInternalIndex')).toEqual( - `.reindexed-v${CURRENT_MAJOR_VERSION}-myInternalIndex` + `.reindexed-v${currentMajor}-myInternalIndex` ); }); it('parses non-internal indices', () => { - expect(generateNewIndexName('myIndex')).toEqual(`reindexed-v${CURRENT_MAJOR_VERSION}-myIndex`); + expect(generateNewIndexName('myIndex')).toEqual(`reindexed-v${currentMajor}-myIndex`); }); it('excludes appended v5 reindexing string from generateNewIndexName', () => { expect(generateNewIndexName('myIndex-reindexed-v5')).toEqual( - `reindexed-v${CURRENT_MAJOR_VERSION}-myIndex` + `reindexed-v${currentMajor}-myIndex` ); expect(generateNewIndexName('.myInternalIndex-reindexed-v5')).toEqual( - `.reindexed-v${CURRENT_MAJOR_VERSION}-myInternalIndex` + `.reindexed-v${currentMajor}-myInternalIndex` ); }); - it('replaces reindexed-v${PREV_MAJOR_VERSION} with reindexed-v${CURRENT_MAJOR_VERSION} in generateNewIndexName', () => { - expect(generateNewIndexName(`reindexed-v${PREV_MAJOR_VERSION}-myIndex`)).toEqual( - `reindexed-v${CURRENT_MAJOR_VERSION}-myIndex` + it(`replaces reindexed-v${prevMajor} with reindexed-v${currentMajor} in generateNewIndexName`, () => { + expect(generateNewIndexName(`reindexed-v${prevMajor}-myIndex`)).toEqual( + `reindexed-v${currentMajor}-myIndex` ); - expect(generateNewIndexName(`.reindexed-v${PREV_MAJOR_VERSION}-myInternalIndex`)).toEqual( - `.reindexed-v${CURRENT_MAJOR_VERSION}-myInternalIndex` + expect(generateNewIndexName(`.reindexed-v${prevMajor}-myInternalIndex`)).toEqual( + `.reindexed-v${currentMajor}-myInternalIndex` ); }); }); diff --git a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/index_settings.ts b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/index_settings.ts index 5722a6c29b68f..b632bbfa1faec 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/index_settings.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/index_settings.ts @@ -6,7 +6,7 @@ import { flow, omit } from 'lodash'; import { ReindexWarning } from '../../../common/types'; -import { CURRENT_MAJOR_VERSION, PREV_MAJOR_VERSION } from '../../../common/version'; +import { versionService } from '../version'; import { FlatSettings } from './types'; export interface ParsedIndexName { @@ -44,7 +44,10 @@ export const sourceNameForIndex = (indexName: string): string => { // in 5.6 the upgrade assistant appended to the index, in 6.7+ we prepend to // avoid conflicts with index patterns/templates/etc - const reindexedMatcher = new RegExp(`(-reindexed-v5$|reindexed-v${PREV_MAJOR_VERSION}-)`, 'g'); + const reindexedMatcher = new RegExp( + `(-reindexed-v5$|reindexed-v${versionService.getPrevMajorVersion()}-)`, + 'g' + ); const cleanBaseName = baseName.replace(reindexedMatcher, ''); return `${internal}${cleanBaseName}`; @@ -58,7 +61,7 @@ export const sourceNameForIndex = (indexName: string): string => { */ export const generateNewIndexName = (indexName: string): string => { const sourceName = sourceNameForIndex(indexName); - const currentVersion = `reindexed-v${CURRENT_MAJOR_VERSION}`; + const currentVersion = `reindexed-v${versionService.getMajorVersion()}`; return indexName.startsWith('.') ? `.${currentVersion}-${sourceName.substr(1)}` diff --git a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.test.ts index d059c03bcecb1..713ba3a54178a 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.test.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.test.ts @@ -17,8 +17,11 @@ import { ReindexStatus, ReindexStep, } from '../../../common/types'; -import { CURRENT_MAJOR_VERSION, PREV_MAJOR_VERSION } from '../../../common/version'; +import { versionService } from '../version'; import { LOCK_WINDOW, ReindexActions, reindexActionsFactory } from './reindex_actions'; +import { MOCK_VERSION_STRING, getMockVersionInfo } from '../__fixtures__/version'; + +const { currentMajor, prevMajor } = getMockVersionInfo(); describe('ReindexActions', () => { let client: jest.Mocked; @@ -47,13 +50,16 @@ describe('ReindexActions', () => { }); describe('createReindexOp', () => { - beforeEach(() => client.create.mockResolvedValue()); + beforeEach(() => { + versionService.setup(MOCK_VERSION_STRING); + client.create.mockResolvedValue(); + }); - it(`prepends reindexed-v${CURRENT_MAJOR_VERSION} to new name`, async () => { + it(`prepends reindexed-v${currentMajor} to new name`, async () => { await actions.createReindexOp('myIndex'); expect(client.create).toHaveBeenCalledWith(REINDEX_OP_TYPE, { indexName: 'myIndex', - newIndexName: `reindexed-v${CURRENT_MAJOR_VERSION}-myIndex`, + newIndexName: `reindexed-v${currentMajor}-myIndex`, reindexOptions: undefined, status: ReindexStatus.inProgress, lastCompletedStep: ReindexStep.created, @@ -65,11 +71,11 @@ describe('ReindexActions', () => { }); }); - it(`prepends reindexed-v${CURRENT_MAJOR_VERSION} to new name, preserving leading period`, async () => { + it(`prepends reindexed-v${currentMajor} to new name, preserving leading period`, async () => { await actions.createReindexOp('.internalIndex'); expect(client.create).toHaveBeenCalledWith(REINDEX_OP_TYPE, { indexName: '.internalIndex', - newIndexName: `.reindexed-v${CURRENT_MAJOR_VERSION}-internalIndex`, + newIndexName: `.reindexed-v${currentMajor}-internalIndex`, reindexOptions: undefined, status: ReindexStatus.inProgress, lastCompletedStep: ReindexStep.created, @@ -82,12 +88,12 @@ describe('ReindexActions', () => { }); // in v5.6, the upgrade assistant appended to the index name instead of prepending - it(`prepends reindexed-v${CURRENT_MAJOR_VERSION}- and removes reindex appended in v5`, async () => { + it(`prepends reindexed-v${currentMajor}- and removes reindex appended in v5`, async () => { const indexName = 'myIndex-reindexed-v5'; await actions.createReindexOp(indexName); expect(client.create).toHaveBeenCalledWith(REINDEX_OP_TYPE, { indexName, - newIndexName: `reindexed-v${CURRENT_MAJOR_VERSION}-myIndex`, + newIndexName: `reindexed-v${currentMajor}-myIndex`, reindexOptions: undefined, status: ReindexStatus.inProgress, lastCompletedStep: ReindexStep.created, @@ -99,11 +105,11 @@ describe('ReindexActions', () => { }); }); - it(`replaces reindexed-v${PREV_MAJOR_VERSION} with reindexed-v${CURRENT_MAJOR_VERSION}`, async () => { - await actions.createReindexOp(`reindexed-v${PREV_MAJOR_VERSION}-myIndex`); + it(`replaces reindexed-v${prevMajor} with reindexed-v${currentMajor}`, async () => { + await actions.createReindexOp(`reindexed-v${prevMajor}-myIndex`); expect(client.create).toHaveBeenCalledWith(REINDEX_OP_TYPE, { - indexName: `reindexed-v${PREV_MAJOR_VERSION}-myIndex`, - newIndexName: `reindexed-v${CURRENT_MAJOR_VERSION}-myIndex`, + indexName: `reindexed-v${prevMajor}-myIndex`, + newIndexName: `reindexed-v${currentMajor}-myIndex`, reindexOptions: undefined, status: ReindexStatus.inProgress, lastCompletedStep: ReindexStep.created, diff --git a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts index 8a7033c1594da..b34f26be6e99c 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts @@ -18,11 +18,12 @@ import { ReindexStatus, ReindexStep, } from '../../../common/types'; -import { CURRENT_MAJOR_VERSION, PREV_MAJOR_VERSION } from '../../../common/version'; import { licensingMock } from '../../../../licensing/server/mocks'; import { LicensingPluginSetup } from '../../../../licensing/server'; +import { MOCK_VERSION_STRING, getMockVersionInfo } from '../__fixtures__/version'; import { esIndicesStateCheck } from '../es_indices_state_check'; +import { versionService } from '../version'; import { isMlIndex, @@ -36,6 +37,8 @@ const asApiResponse = (body: T): RequestEvent => body, } as RequestEvent); +const { currentMajor, prevMajor } = getMockVersionInfo(); + describe('reindexService', () => { let actions: jest.Mocked; let clusterClient: ScopedClusterClientMock; @@ -82,6 +85,8 @@ describe('reindexService', () => { log, licensingPluginSetup ); + + versionService.setup(MOCK_VERSION_STRING); }); describe('hasRequiredPrivileges', () => { @@ -107,7 +112,7 @@ describe('reindexService', () => { cluster: ['manage'], index: [ { - names: ['anIndex', `reindexed-v${CURRENT_MAJOR_VERSION}-anIndex`], + names: ['anIndex', `reindexed-v${currentMajor}-anIndex`], allow_restricted_indices: true, privileges: ['all'], }, @@ -131,7 +136,7 @@ describe('reindexService', () => { cluster: ['manage', 'manage_ml'], index: [ { - names: ['.ml-anomalies', `.reindexed-v${CURRENT_MAJOR_VERSION}-ml-anomalies`], + names: ['.ml-anomalies', `.reindexed-v${currentMajor}-ml-anomalies`], allow_restricted_indices: true, privileges: ['all'], }, @@ -149,9 +154,7 @@ describe('reindexService', () => { asApiResponse({ has_all_requested: true }) ); - const hasRequired = await service.hasRequiredPrivileges( - `reindexed-v${PREV_MAJOR_VERSION}-anIndex` - ); + const hasRequired = await service.hasRequiredPrivileges(`reindexed-v${prevMajor}-anIndex`); expect(hasRequired).toBe(true); expect(clusterClient.asCurrentUser.security.hasPrivileges).toHaveBeenCalledWith({ body: { @@ -159,8 +162,8 @@ describe('reindexService', () => { index: [ { names: [ - `reindexed-v${PREV_MAJOR_VERSION}-anIndex`, - `reindexed-v${CURRENT_MAJOR_VERSION}-anIndex`, + `reindexed-v${prevMajor}-anIndex`, + `reindexed-v${currentMajor}-anIndex`, 'anIndex', ], allow_restricted_indices: true, @@ -188,7 +191,7 @@ describe('reindexService', () => { cluster: ['manage', 'manage_watcher'], index: [ { - names: ['.watches', `.reindexed-v${CURRENT_MAJOR_VERSION}-watches`], + names: ['.watches', `.reindexed-v${currentMajor}-watches`], allow_restricted_indices: true, privileges: ['all'], }, @@ -497,9 +500,9 @@ describe('reindexService', () => { }); it('is true for ML re-indexed indices', () => { - expect(isMlIndex(`.reindexed-v${PREV_MAJOR_VERSION}-ml-state`)).toBe(true); - expect(isMlIndex(`.reindexed-v${PREV_MAJOR_VERSION}-ml-anomalies`)).toBe(true); - expect(isMlIndex(`.reindexed-v${PREV_MAJOR_VERSION}-ml-config`)).toBe(true); + expect(isMlIndex(`.reindexed-v${prevMajor}-ml-state`)).toBe(true); + expect(isMlIndex(`.reindexed-v${prevMajor}-ml-anomalies`)).toBe(true); + expect(isMlIndex(`.reindexed-v${prevMajor}-ml-config`)).toBe(true); }); }); @@ -514,8 +517,8 @@ describe('reindexService', () => { }); it('is true for watcher re-indexed indices', () => { - expect(isWatcherIndex(`.reindexed-v${PREV_MAJOR_VERSION}-watches`)).toBe(true); - expect(isWatcherIndex(`.reindexed-v${PREV_MAJOR_VERSION}-triggered-watches`)).toBe(true); + expect(isWatcherIndex(`.reindexed-v${prevMajor}-watches`)).toBe(true); + expect(isWatcherIndex(`.reindexed-v${prevMajor}-triggered-watches`)).toBe(true); }); }); diff --git a/x-pack/plugins/upgrade_assistant/server/lib/version.ts b/x-pack/plugins/upgrade_assistant/server/lib/version.ts new file mode 100644 index 0000000000000..f33200d215638 --- /dev/null +++ b/x-pack/plugins/upgrade_assistant/server/lib/version.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import SemVer from 'semver/classes/semver'; + +export class Version { + private version!: SemVer; + + public setup(version: string) { + this.version = new SemVer(version); + } + + public getCurrentVersion() { + return this.version; + } + + public getMajorVersion() { + return this.version?.major; + } + + public getNextMajorVersion() { + return this.version?.major + 1; + } + + public getPrevMajorVersion() { + return this.version?.major - 1; + } +} + +export const versionService = new Version(); diff --git a/x-pack/plugins/upgrade_assistant/server/plugin.ts b/x-pack/plugins/upgrade_assistant/server/plugin.ts index 9ef0f250da8ef..ea3677d01423b 100644 --- a/x-pack/plugins/upgrade_assistant/server/plugin.ts +++ b/x-pack/plugins/upgrade_assistant/server/plugin.ts @@ -22,6 +22,7 @@ import { LicensingPluginSetup } from '../../licensing/server'; import { CredentialStore, credentialStoreFactory } from './lib/reindexing/credential_store'; import { ReindexWorker } from './lib/reindexing'; import { registerUpgradeAssistantUsageCollector } from './lib/telemetry'; +import { versionService } from './lib/version'; import { registerClusterCheckupRoutes } from './routes/cluster_checkup'; import { registerDeprecationLoggingRoutes } from './routes/deprecation_logging'; import { registerReindexIndicesRoutes, createReindexWorker } from './routes/reindex_indices'; @@ -40,6 +41,7 @@ interface PluginsSetup { export class UpgradeAssistantServerPlugin implements Plugin { private readonly logger: Logger; private readonly credentialStore: CredentialStore; + private readonly kibanaVersion: string; // Properties set at setup private licensing?: LicensingPluginSetup; @@ -48,9 +50,10 @@ export class UpgradeAssistantServerPlugin implements Plugin { private savedObjectsServiceStart?: SavedObjectsServiceStart; private worker?: ReindexWorker; - constructor({ logger }: PluginInitializerContext) { + constructor({ logger, env }: PluginInitializerContext) { this.logger = logger.get(); this.credentialStore = credentialStoreFactory(); + this.kibanaVersion = env.packageInfo.version; } private getWorker() { @@ -98,6 +101,9 @@ export class UpgradeAssistantServerPlugin implements Plugin { licensing, }; + // Initialize version service with current kibana version + versionService.setup(this.kibanaVersion); + registerClusterCheckupRoutes(dependencies); registerDeprecationLoggingRoutes(dependencies); registerReindexIndicesRoutes(dependencies, this.getWorker.bind(this)); From 07f8e48692520dbfd9c5d8d51cf43c7035f8282f Mon Sep 17 00:00:00 2001 From: Oliver Gupte Date: Mon, 1 Feb 2021 12:05:56 -0800 Subject: [PATCH 48/85] [APM] Consolidate various throughput calculations to a utility function (#89486) (#89578) --- .../lib/helpers/calculate_throughput.ts | 16 +++++++++++++ .../get_transaction_coordinates.ts | 5 ++-- .../get_service_dependencies/index.ts | 15 ++++++++---- .../get_service_instance_transaction_stats.ts | 4 ++-- .../get_transaction_groups_for_page.ts | 9 +++++--- .../merge_transaction_group_data.ts | 9 +++++--- .../get_service_transaction_stats.ts | 23 ++++++------------- .../apm/server/lib/services/get_throughput.ts | 12 +++++----- .../get_throughput_charts/index.ts | 6 ++--- .../get_throughput_charts/transform.ts | 9 +++++--- 10 files changed, 63 insertions(+), 45 deletions(-) create mode 100644 x-pack/plugins/apm/server/lib/helpers/calculate_throughput.ts diff --git a/x-pack/plugins/apm/server/lib/helpers/calculate_throughput.ts b/x-pack/plugins/apm/server/lib/helpers/calculate_throughput.ts new file mode 100644 index 0000000000000..7fcbe9e798188 --- /dev/null +++ b/x-pack/plugins/apm/server/lib/helpers/calculate_throughput.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { SetupTimeRange } from './setup_request'; + +export function calculateThroughput({ + start, + end, + value, +}: SetupTimeRange & { value: number }) { + const durationAsMinutes = (end - start) / 1000 / 60; + return value / durationAsMinutes; +} diff --git a/x-pack/plugins/apm/server/lib/observability_overview/get_transaction_coordinates.ts b/x-pack/plugins/apm/server/lib/observability_overview/get_transaction_coordinates.ts index fa4bf6144fb6f..f844a6ce1c345 100644 --- a/x-pack/plugins/apm/server/lib/observability_overview/get_transaction_coordinates.ts +++ b/x-pack/plugins/apm/server/lib/observability_overview/get_transaction_coordinates.ts @@ -12,6 +12,7 @@ import { rangeFilter } from '../../../common/utils/range_filter'; import { Coordinates } from '../../../../observability/typings/common'; import { Setup, SetupTimeRange } from '../helpers/setup_request'; import { getProcessorEventForAggregatedTransactions } from '../helpers/aggregated_transactions'; +import { calculateThroughput } from '../helpers/calculate_throughput'; export async function getTransactionCoordinates({ setup, @@ -51,12 +52,10 @@ export async function getTransactionCoordinates({ }, }); - const deltaAsMinutes = (end - start) / 1000 / 60; - return ( aggregations?.distribution.buckets.map((bucket) => ({ x: bucket.key, - y: bucket.doc_count / deltaAsMinutes, + y: calculateThroughput({ start, end, value: bucket.doc_count }), })) || [] ); } diff --git a/x-pack/plugins/apm/server/lib/services/get_service_dependencies/index.ts b/x-pack/plugins/apm/server/lib/services/get_service_dependencies/index.ts index 0ac881aeac00e..2b209f8f6a80a 100644 --- a/x-pack/plugins/apm/server/lib/services/get_service_dependencies/index.ts +++ b/x-pack/plugins/apm/server/lib/services/get_service_dependencies/index.ts @@ -13,6 +13,7 @@ import { joinByKey } from '../../../../common/utils/join_by_key'; import { Setup, SetupTimeRange } from '../../helpers/setup_request'; import { getMetrics } from './get_metrics'; import { getDestinationMap } from './get_destination_map'; +import { calculateThroughput } from '../../helpers/calculate_throughput'; export type ServiceDependencyItem = { name: string; @@ -51,7 +52,6 @@ export async function getServiceDependencies({ numBuckets: number; }): Promise { const { start, end } = setup; - const [allMetrics, destinationMap] = await Promise.all([ getMetrics({ setup, @@ -134,8 +134,6 @@ export async function getServiceDependencies({ } ); - const deltaAsMinutes = (end - start) / 60 / 1000; - const destMetrics = { latency: { value: @@ -150,11 +148,18 @@ export async function getServiceDependencies({ throughput: { value: mergedMetrics.value.count > 0 - ? mergedMetrics.value.count / deltaAsMinutes + ? calculateThroughput({ + start, + end, + value: mergedMetrics.value.count, + }) : null, timeseries: mergedMetrics.timeseries.map((point) => ({ x: point.x, - y: point.count > 0 ? point.count / deltaAsMinutes : null, + y: + point.count > 0 + ? calculateThroughput({ start, end, value: point.count }) + : null, })), }, errorRate: { diff --git a/x-pack/plugins/apm/server/lib/services/get_service_instances/get_service_instance_transaction_stats.ts b/x-pack/plugins/apm/server/lib/services/get_service_instances/get_service_instance_transaction_stats.ts index c5e5269c4409e..118fbc64146a7 100644 --- a/x-pack/plugins/apm/server/lib/services/get_service_instances/get_service_instance_transaction_stats.ts +++ b/x-pack/plugins/apm/server/lib/services/get_service_instances/get_service_instance_transaction_stats.ts @@ -19,6 +19,7 @@ import { getProcessorEventForAggregatedTransactions, getTransactionDurationFieldForAggregatedTransactions, } from '../../helpers/aggregated_transactions'; +import { calculateThroughput } from '../../helpers/calculate_throughput'; export async function getServiceInstanceTransactionStats({ setup, @@ -104,7 +105,6 @@ export async function getServiceInstanceTransactionStats({ }, }); - const deltaAsMinutes = (end - start) / 60 / 1000; const bucketSizeInMinutes = bucketSize / 60; return ( @@ -128,7 +128,7 @@ export async function getServiceInstanceTransactionStats({ })), }, throughput: { - value: count / deltaAsMinutes, + value: calculateThroughput({ start, end, value: count }), timeseries: timeseries.buckets.map((dateBucket) => ({ x: dateBucket.key, y: dateBucket.doc_count / bucketSizeInMinutes, diff --git a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_transaction_groups_for_page.ts b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_transaction_groups_for_page.ts index 400c896e380b4..77642c1f3d65f 100644 --- a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_transaction_groups_for_page.ts +++ b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/get_transaction_groups_for_page.ts @@ -25,6 +25,7 @@ import { getLatencyAggregation, getLatencyValue, } from '../../helpers/latency_aggregation_type'; +import { calculateThroughput } from '../../helpers/calculate_throughput'; export type ServiceOverviewTransactionGroupSortField = | 'name' @@ -64,8 +65,6 @@ export async function getTransactionGroupsForPage({ transactionType: string; latencyAggregationType: LatencyAggregationType; }) { - const deltaAsMinutes = (end - start) / 1000 / 60; - const field = getTransactionDurationFieldForAggregatedTransactions( searchAggregatedTransactions ); @@ -121,7 +120,11 @@ export async function getTransactionGroupsForPage({ latencyAggregationType, aggregation: bucket.latency, }), - throughput: bucket.doc_count / deltaAsMinutes, + throughput: calculateThroughput({ + start, + end, + value: bucket.doc_count, + }), errorRate, }; }) ?? []; diff --git a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/merge_transaction_group_data.ts b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/merge_transaction_group_data.ts index b0b1cb09dd784..4b8b1aabbbbcc 100644 --- a/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/merge_transaction_group_data.ts +++ b/x-pack/plugins/apm/server/lib/services/get_service_transaction_groups/merge_transaction_group_data.ts @@ -6,6 +6,7 @@ import { EVENT_OUTCOME } from '../../../../common/elasticsearch_fieldnames'; import { LatencyAggregationType } from '../../../../common/latency_aggregation_types'; +import { calculateThroughput } from '../../helpers/calculate_throughput'; import { getLatencyValue } from '../../helpers/latency_aggregation_type'; import { TransactionGroupTimeseriesData } from './get_timeseries_data_for_transaction_groups'; import { TransactionGroupWithoutTimeseriesData } from './get_transaction_groups_for_page'; @@ -25,8 +26,6 @@ export function mergeTransactionGroupData({ latencyAggregationType: LatencyAggregationType; transactionType: string; }) { - const deltaAsMinutes = (end - start) / 1000 / 60; - return transactionGroups.map((transactionGroup) => { const groupBucket = timeseriesData.find( ({ key }) => key === transactionGroup.name @@ -52,7 +51,11 @@ export function mergeTransactionGroupData({ ...acc.throughput, timeseries: acc.throughput.timeseries.concat({ x: point.key, - y: point.doc_count / deltaAsMinutes, + y: calculateThroughput({ + start, + end, + value: point.doc_count, + }), }), }, errorRate: { diff --git a/x-pack/plugins/apm/server/lib/services/get_services/get_service_transaction_stats.ts b/x-pack/plugins/apm/server/lib/services/get_services/get_service_transaction_stats.ts index efbc30169d178..d7cd13317fd73 100644 --- a/x-pack/plugins/apm/server/lib/services/get_services/get_service_transaction_stats.ts +++ b/x-pack/plugins/apm/server/lib/services/get_services/get_service_transaction_stats.ts @@ -22,6 +22,7 @@ import { getTransactionDurationFieldForAggregatedTransactions, } from '../../helpers/aggregated_transactions'; import { getBucketSize } from '../../helpers/get_bucket_size'; +import { calculateThroughput } from '../../helpers/calculate_throughput'; import { calculateTransactionErrorPercentage, getOutcomeAggregation, @@ -35,16 +36,6 @@ interface AggregationParams { const MAX_NUMBER_OF_SERVICES = 500; -function calculateAvgDuration({ - value, - deltaAsMinutes, -}: { - value: number; - deltaAsMinutes: number; -}) { - return value / deltaAsMinutes; -} - export async function getServiceTransactionStats({ setup, searchAggregatedTransactions, @@ -131,8 +122,6 @@ export async function getServiceTransactionStats({ }, }); - const deltaAsMinutes = (setup.end - setup.start) / 1000 / 60; - return ( response.aggregations?.services.buckets.map((bucket) => { const topTransactionTypeBucket = @@ -171,16 +160,18 @@ export async function getServiceTransactionStats({ ), }, transactionsPerMinute: { - value: calculateAvgDuration({ + value: calculateThroughput({ + start, + end, value: topTransactionTypeBucket.doc_count, - deltaAsMinutes, }), timeseries: topTransactionTypeBucket.timeseries.buckets.map( (dateBucket) => ({ x: dateBucket.key, - y: calculateAvgDuration({ + y: calculateThroughput({ + start, + end, value: dateBucket.doc_count, - deltaAsMinutes, }), }) ), diff --git a/x-pack/plugins/apm/server/lib/services/get_throughput.ts b/x-pack/plugins/apm/server/lib/services/get_throughput.ts index bde826a568da9..15ecc88a019db 100644 --- a/x-pack/plugins/apm/server/lib/services/get_throughput.ts +++ b/x-pack/plugins/apm/server/lib/services/get_throughput.ts @@ -16,6 +16,7 @@ import { getProcessorEventForAggregatedTransactions, } from '../helpers/aggregated_transactions'; import { getBucketSize } from '../helpers/get_bucket_size'; +import { calculateThroughput } from '../helpers/calculate_throughput'; import { Setup, SetupTimeRange } from '../helpers/setup_request'; interface Options { @@ -27,16 +28,15 @@ interface Options { type ESResponse = PromiseReturnType; -function transform(response: ESResponse, options: Options) { - const { end, start } = options.setup; - const deltaAsMinutes = (end - start) / 1000 / 60; +function transform(options: Options, response: ESResponse) { if (response.hits.total.value === 0) { return []; } + const { start, end } = options.setup; const buckets = response.aggregations?.throughput.buckets ?? []; - return buckets.map(({ key: x, doc_count: y }) => ({ + return buckets.map(({ key: x, doc_count: value }) => ({ x, - y: y / deltaAsMinutes, + y: calculateThroughput({ start, end, value }), })); } @@ -87,6 +87,6 @@ async function fetcher({ export async function getThroughput(options: Options) { return { - throughput: transform(await fetcher(options), options), + throughput: transform(options, await fetcher(options)), }; } diff --git a/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/index.ts b/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/index.ts index 8dfb0a9f65878..dda6573ea93ef 100644 --- a/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/index.ts +++ b/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/index.ts @@ -100,9 +100,7 @@ export async function getThroughputCharts({ setup: Setup & SetupTimeRange; searchAggregatedTransactions: boolean; }) { - const { start, end } = setup; - const { bucketSize, intervalString } = getBucketSize({ start, end }); - const durationAsMinutes = (end - start) / 1000 / 60; + const { bucketSize, intervalString } = getBucketSize(setup); const response = await searchThroughput({ serviceName, @@ -117,7 +115,7 @@ export async function getThroughputCharts({ throughputTimeseries: getThroughputBuckets({ throughputResultBuckets: response.aggregations?.throughput.buckets, bucketSize, - durationAsMinutes, + setupTimeRange: setup, }), }; } diff --git a/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/transform.ts b/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/transform.ts index 7e43a0d76f70a..35d1b0e901dee 100644 --- a/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/transform.ts +++ b/x-pack/plugins/apm/server/lib/transactions/get_throughput_charts/transform.ts @@ -7,18 +7,21 @@ import { sortBy } from 'lodash'; import { NOT_AVAILABLE_LABEL } from '../../../../common/i18n'; import { ThroughputChartsResponse } from '.'; +import { calculateThroughput } from '../../helpers/calculate_throughput'; +import { SetupTimeRange } from '../../helpers/setup_request'; type ThroughputResultBuckets = Required['aggregations']['throughput']['buckets']; export function getThroughputBuckets({ throughputResultBuckets = [], bucketSize, - durationAsMinutes, + setupTimeRange, }: { throughputResultBuckets?: ThroughputResultBuckets; bucketSize: number; - durationAsMinutes: number; + setupTimeRange: SetupTimeRange; }) { + const { start, end } = setupTimeRange; const buckets = throughputResultBuckets.map( ({ key: resultKey, timeseries }) => { const dataPoints = timeseries.buckets.map((bucket) => { @@ -38,7 +41,7 @@ export function getThroughputBuckets({ .reduce((a, b) => a + b, 0); // calculate average throughput - const avg = docCountTotal / durationAsMinutes; + const avg = calculateThroughput({ start, end, value: docCountTotal }); return { key, dataPoints, avg }; } From 5884daeba518cf702cccbabac5cc0d5756f80a2c Mon Sep 17 00:00:00 2001 From: Nathan L Smith Date: Mon, 1 Feb 2021 14:09:33 -0600 Subject: [PATCH 49/85] Remove circular dependecy between apm and infra (#89739) * Move `getTraceUrl` in the APM plugin to `getApmTraceUrl` in the observability plugin and use that instead in infra. * Remove unused APM plugin depenency in infra. * Use `pathname` instead of `hash` in infra to apm link to avoid unnecessary redirect. --- .../shared/Links/apm/ExternalLinks.test.ts | 26 ------------------- x-pack/plugins/apm/public/index.ts | 1 - x-pack/plugins/infra/kibana.json | 9 +------ .../log_entry_actions_menu.tsx | 4 +-- .../lib/adapters/framework/adapter_types.ts | 2 -- x-pack/plugins/observability/public/index.ts | 1 + .../public/utils/get_apm_trace_url.test.ts | 14 ++++++++++ .../public/utils/get_apm_trace_url.ts} | 11 +++----- 8 files changed, 22 insertions(+), 46 deletions(-) delete mode 100644 x-pack/plugins/apm/public/components/shared/Links/apm/ExternalLinks.test.ts create mode 100644 x-pack/plugins/observability/public/utils/get_apm_trace_url.test.ts rename x-pack/plugins/{apm/public/components/shared/Links/apm/ExternalLinks.ts => observability/public/utils/get_apm_trace_url.ts} (69%) diff --git a/x-pack/plugins/apm/public/components/shared/Links/apm/ExternalLinks.test.ts b/x-pack/plugins/apm/public/components/shared/Links/apm/ExternalLinks.test.ts deleted file mode 100644 index 1f772e0734404..0000000000000 --- a/x-pack/plugins/apm/public/components/shared/Links/apm/ExternalLinks.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import { getTraceUrl } from './ExternalLinks'; - -jest.mock('../../../app/Main/route_config/index.tsx', () => ({ - routes: [ - { - name: 'link_to_trace', - path: '/link-to/trace/:traceId', - }, - ], -})); - -describe('ExternalLinks', () => { - afterAll(() => { - jest.clearAllMocks(); - }); - it('trace link', () => { - expect( - getTraceUrl({ traceId: 'foo', rangeFrom: '123', rangeTo: '456' }) - ).toEqual('/link-to/trace/foo?rangeFrom=123&rangeTo=456'); - }); -}); diff --git a/x-pack/plugins/apm/public/index.ts b/x-pack/plugins/apm/public/index.ts index 40992d7b58e65..d7a8573f2080b 100644 --- a/x-pack/plugins/apm/public/index.ts +++ b/x-pack/plugins/apm/public/index.ts @@ -22,4 +22,3 @@ export const plugin: PluginInitializer = ( ) => new ApmPlugin(pluginInitializerContext); export { ApmPluginSetup, ApmPluginStart }; -export { getTraceUrl } from './components/shared/Links/apm/ExternalLinks'; diff --git a/x-pack/plugins/infra/kibana.json b/x-pack/plugins/infra/kibana.json index d1fa83793d1dd..327cb674de00b 100644 --- a/x-pack/plugins/infra/kibana.json +++ b/x-pack/plugins/infra/kibana.json @@ -17,12 +17,5 @@ "server": true, "ui": true, "configPath": ["xpack", "infra"], - "requiredBundles": [ - "observability", - "licenseManagement", - "kibanaUtils", - "kibanaReact", - "apm", - "home" - ] + "requiredBundles": ["observability", "licenseManagement", "kibanaUtils", "kibanaReact", "home"] } diff --git a/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.tsx b/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.tsx index 9fef939733432..6de2fa2029e4b 100644 --- a/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.tsx +++ b/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.tsx @@ -8,7 +8,7 @@ import { EuiButton, EuiContextMenuItem, EuiContextMenuPanel, EuiPopover } from ' import { FormattedMessage } from '@kbn/i18n/react'; import React, { useMemo } from 'react'; import { useVisibilityState } from '../../../utils/use_visibility_state'; -import { getTraceUrl } from '../../../../../apm/public'; +import { getApmTraceUrl } from '../../../../../observability/public'; import { useLinkProps, LinkDescriptor } from '../../../hooks/use_link_props'; import { LogEntry } from '../../../../common/search_strategies/log_entries/log_entry'; @@ -136,6 +136,6 @@ const getAPMLink = (logEntry: LogEntry): LinkDescriptor | undefined => { return { app: 'apm', - hash: getTraceUrl({ traceId, rangeFrom, rangeTo }), + pathname: getApmTraceUrl({ traceId, rangeFrom, rangeTo }), }; }; diff --git a/x-pack/plugins/infra/server/lib/adapters/framework/adapter_types.ts b/x-pack/plugins/infra/server/lib/adapters/framework/adapter_types.ts index 705d7bf34c1c6..a682500e5af18 100644 --- a/x-pack/plugins/infra/server/lib/adapters/framework/adapter_types.ts +++ b/x-pack/plugins/infra/server/lib/adapters/framework/adapter_types.ts @@ -14,7 +14,6 @@ import { } from '../../../../../../../src/plugins/data/server'; import { HomeServerPluginSetup } from '../../../../../../../src/plugins/home/server'; import { VisTypeTimeseriesSetup } from '../../../../../../../src/plugins/vis_type_timeseries/server'; -import { APMPluginSetup } from '../../../../../../plugins/apm/server'; import { PluginSetupContract as FeaturesPluginSetup } from '../../../../../../plugins/features/server'; import { SpacesPluginSetup } from '../../../../../../plugins/spaces/server'; import { PluginSetupContract as AlertingPluginContract } from '../../../../../alerts/server'; @@ -28,7 +27,6 @@ export interface InfraServerPluginSetupDeps { usageCollection: UsageCollectionSetup; visTypeTimeseries: VisTypeTimeseriesSetup; features: FeaturesPluginSetup; - apm: APMPluginSetup; alerts: AlertingPluginContract; ml?: MlPluginSetup; } diff --git a/x-pack/plugins/observability/public/index.ts b/x-pack/plugins/observability/public/index.ts index c052541956c13..49dc298d9a9b0 100644 --- a/x-pack/plugins/observability/public/index.ts +++ b/x-pack/plugins/observability/public/index.ts @@ -33,3 +33,4 @@ export * from './typings'; export { useChartTheme } from './hooks/use_chart_theme'; export { useTheme } from './hooks/use_theme'; +export { getApmTraceUrl } from './utils/get_apm_trace_url'; diff --git a/x-pack/plugins/observability/public/utils/get_apm_trace_url.test.ts b/x-pack/plugins/observability/public/utils/get_apm_trace_url.test.ts new file mode 100644 index 0000000000000..14ede0d3a114e --- /dev/null +++ b/x-pack/plugins/observability/public/utils/get_apm_trace_url.test.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { getApmTraceUrl } from './get_apm_trace_url'; + +describe('getApmTraceUrl', () => { + it('returns a trace url', () => { + expect(getApmTraceUrl({ traceId: 'foo', rangeFrom: '123', rangeTo: '456' })).toEqual( + '/link-to/trace/foo?rangeFrom=123&rangeTo=456' + ); + }); +}); diff --git a/x-pack/plugins/apm/public/components/shared/Links/apm/ExternalLinks.ts b/x-pack/plugins/observability/public/utils/get_apm_trace_url.ts similarity index 69% rename from x-pack/plugins/apm/public/components/shared/Links/apm/ExternalLinks.ts rename to x-pack/plugins/observability/public/utils/get_apm_trace_url.ts index 819c6eafe80b4..e60ec10e45a86 100644 --- a/x-pack/plugins/apm/public/components/shared/Links/apm/ExternalLinks.ts +++ b/x-pack/plugins/observability/public/utils/get_apm_trace_url.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -export const getTraceUrl = ({ +export function getApmTraceUrl({ traceId, rangeFrom, rangeTo, @@ -12,9 +12,6 @@ export const getTraceUrl = ({ traceId: string; rangeFrom: string; rangeTo: string; -}) => { - return ( - `/link-to/trace/${traceId}?` + - new URLSearchParams({ rangeFrom, rangeTo }).toString() - ); -}; +}) { + return `/link-to/trace/${traceId}?` + new URLSearchParams({ rangeFrom, rangeTo }).toString(); +} From d981391410a147dc8575d5ddca35d39f00d244a0 Mon Sep 17 00:00:00 2001 From: Bhavya RM Date: Mon, 1 Feb 2021 15:21:54 -0500 Subject: [PATCH 50/85] Addressing skipped a11y test on home with new data test subjects and redesign (#86531) a11y tests for home page under default distribution --- .../collapsible_nav.test.tsx.snap | 6 ++ .../header/__snapshots__/header.test.tsx.snap | 3 + .../chrome/ui/header/collapsible_nav.tsx | 1 + .../__snapshots__/add_data.test.tsx.snap | 1 + .../components/add_data/add_data.tsx | 1 + .../components/tutorial_directory.js | 4 +- .../overview_page_header.test.tsx.snap | 1 + .../overview_page_header.tsx | 3 + x-pack/test/accessibility/apps/home.ts | 69 ++++++++++--------- 9 files changed, 57 insertions(+), 32 deletions(-) diff --git a/src/core/public/chrome/ui/header/__snapshots__/collapsible_nav.test.tsx.snap b/src/core/public/chrome/ui/header/__snapshots__/collapsible_nav.test.tsx.snap index c836686ec602b..80e23a32ca557 100644 --- a/src/core/public/chrome/ui/header/__snapshots__/collapsible_nav.test.tsx.snap +++ b/src/core/public/chrome/ui/header/__snapshots__/collapsible_nav.test.tsx.snap @@ -543,6 +543,7 @@ exports[`CollapsibleNav renders links grouped by category 1`] = ` listItems={ Array [ Object { + "data-test-subj": "homeLink", "href": "/", "iconType": "home", "label": "Home", @@ -564,6 +565,7 @@ exports[`CollapsibleNav renders links grouped by category 1`] = ` > { if (isModifiedOrPrevented(event)) { return; diff --git a/src/plugins/home/public/application/components/add_data/__snapshots__/add_data.test.tsx.snap b/src/plugins/home/public/application/components/add_data/__snapshots__/add_data.test.tsx.snap index e7136ac817249..5724d46fca10c 100644 --- a/src/plugins/home/public/application/components/add_data/__snapshots__/add_data.test.tsx.snap +++ b/src/plugins/home/public/application/components/add_data/__snapshots__/add_data.test.tsx.snap @@ -32,6 +32,7 @@ exports[`AddData render 1`] = `
= ({ addBasePath, features }) => {
{ return this.tabs.map((tab, index) => ( this.onSelectedTabChanged(tab.id)} isSelected={tab.id === this.state.selectedTabId} key={index} @@ -203,7 +205,7 @@ class TutorialDirectoryUi extends React.Component { }) .map((tutorial) => { return ( - + = ({ = ({ = ({ { + describe('Kibana Home', () => { before(async () => { await PageObjects.common.navigateToApp('home'); }); @@ -23,64 +21,74 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await a11y.testAppSnapshot(); }); - it('all plugins view page meets a11y requirements', async () => { - await PageObjects.home.clickAllKibanaPlugins(); + it('Kibana overview page meets a11y requirements ', async () => { + await testSubjects.click('homSolutionPanel homSolutionPanel_kibana'); await a11y.testAppSnapshot(); }); - it('visualize & explore details tab meets a11y requirements', async () => { - await PageObjects.home.clickVisualizeExplorePlugins(); + it('toggle side nav meets a11y requirements', async () => { + await testSubjects.click('toggleNavButton'); await a11y.testAppSnapshot(); }); - it('administrative detail tab meets a11y requirements', async () => { - await PageObjects.home.clickAdminPlugin(); + it('Enterprise search overview page meets a11y requirements ', async () => { + await testSubjects.click('homeLink'); + await testSubjects.click('homSolutionPanel homSolutionPanel_enterpriseSearch'); await a11y.testAppSnapshot(); }); - it('navigating to console app from administration tab meets a11y requirements', async () => { - await PageObjects.home.clickOnConsole(); - // wait till dev tools app is loaded (lazy loading the bundle) - await retry.waitFor( - 'switched to dev tools', - async () => (await globalNav.getLastBreadcrumb()) === 'Dev Tools' - ); + it('Observability overview page meets a11y requirements ', async () => { + await testSubjects.click('toggleNavButton'); + await testSubjects.click('homeLink'); + await testSubjects.click('homSolutionPanel homSolutionPanel_observability'); await a11y.testAppSnapshot(); }); - it('navigating back to home page from console meets a11y requirements', async () => { - await PageObjects.home.clickOnLogo(); + it('Security overview page meets a11y requirements ', async () => { + await testSubjects.click('toggleNavButton'); + await testSubjects.click('homeLink'); + await testSubjects.click('homSolutionPanel homSolutionPanel_securitySolution'); await a11y.testAppSnapshot(); }); - it('click on Add logs panel to open all log examples page meets a11y requirements ', async () => { - await PageObjects.home.clickOnAddData(); + it('Add data page meets a11y requirements ', async () => { + await testSubjects.click('toggleNavButton'); + await testSubjects.click('homeLink'); + await testSubjects.click('homeAddData'); await a11y.testAppSnapshot(); }); - it('click on ActiveMQ logs panel to open tutorial meets a11y requirements', async () => { - await PageObjects.home.clickOnLogsTutorial(); + it('Sample data page meets a11y requirements ', async () => { + await testSubjects.click('homeTab-sampleData'); await a11y.testAppSnapshot(); }); - it('click on cloud tutorial meets a11y requirements', async () => { - await PageObjects.home.clickOnCloudTutorial(); + it('click on Add logs panel to open all log examples page meets a11y requirements ', async () => { + await testSubjects.click('sampleDataSetCardlogs'); + await a11y.testAppSnapshot(); + }); + + it('click on ActiveMQ logs panel to open tutorial meets a11y requirements', async () => { + await testSubjects.click('homeTab-all'); + await testSubjects.click('homeSynopsisLinkactivemqlogs'); await a11y.testAppSnapshot(); }); - it('click on side nav to see all the side nav menu', async () => { - await PageObjects.home.clickOnLogo(); - await PageObjects.home.clickOnToggleNavButton(); + it('click on cloud tutorial meets a11y requirements', async () => { + await testSubjects.click('onCloudTutorial'); await a11y.testAppSnapshot(); }); it('Dock the side nav', async () => { + await testSubjects.click('toggleNavButton'); await PageObjects.home.dockTheSideNav(); await a11y.testAppSnapshot(); }); it('click on collapse on observability in side nav to test a11y of collapse button', async () => { - await PageObjects.home.collapseObservabibilitySideNav(); + await find.clickByCssSelector( + '[data-test-subj="collapsibleNavGroup-observability"] .euiCollapsibleNavGroup__title' + ); await a11y.testAppSnapshot(); }); @@ -91,8 +99,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('passes with searchbox open', async () => { - await PageObjects.common.navigateToApp('home'); - await testSubjects.click('header-search'); + await testSubjects.click('nav-search-popover'); await a11y.testAppSnapshot(); }); }); From 7b06c130872f1f60155378d4cc31123ee78a715a Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Mon, 1 Feb 2021 15:31:21 -0500 Subject: [PATCH 51/85] Prevent autocompleting the username field (#88682) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/login_form/__snapshots__/login_form.test.tsx.snap | 1 + .../authentication/login/components/login_form/login_form.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/x-pack/plugins/security/public/authentication/login/components/login_form/__snapshots__/login_form.test.tsx.snap b/x-pack/plugins/security/public/authentication/login/components/login_form/__snapshots__/login_form.test.tsx.snap index 99780542b97f4..d6eb4c20b8003 100644 --- a/x-pack/plugins/security/public/authentication/login/components/login_form/__snapshots__/login_form.test.tsx.snap +++ b/x-pack/plugins/security/public/authentication/login/components/login_form/__snapshots__/login_form.test.tsx.snap @@ -128,6 +128,7 @@ exports[`LoginForm renders as expected 1`] = ` > { {...this.validator.validateUsername(this.state.username)} > Date: Mon, 1 Feb 2021 15:36:25 -0500 Subject: [PATCH 52/85] [Upgrade Assistant] Fix getFlatSettings() request (#89616) --- .../server/lib/reindexing/reindex_actions.test.ts | 4 ++-- .../server/lib/reindexing/reindex_actions.ts | 2 +- .../server/lib/reindexing/reindex_service.test.ts | 4 ++-- .../upgrade_assistant/reindexing.js | 2 ++ 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.test.ts index 713ba3a54178a..9a6ac4030e051 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.test.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.test.ts @@ -297,7 +297,7 @@ describe('ReindexActions', () => { } as RequestEvent); it('returns flat settings', async () => { - clusterClient.asCurrentUser.indices.getSettings.mockResolvedValueOnce( + clusterClient.asCurrentUser.indices.get.mockResolvedValueOnce( asApiResponse({ myIndex: { settings: { 'index.mySetting': '1' }, @@ -312,7 +312,7 @@ describe('ReindexActions', () => { }); it('returns null if index does not exist', async () => { - clusterClient.asCurrentUser.indices.getSettings.mockResolvedValueOnce(asApiResponse({})); + clusterClient.asCurrentUser.indices.get.mockResolvedValueOnce(asApiResponse({})); await expect(actions.getFlatSettings('myIndex')).resolves.toBeNull(); }); }); diff --git a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.ts b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.ts index 611ab3c92b72b..653bf8336255b 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_actions.ts @@ -236,7 +236,7 @@ export const reindexActionsFactory = ( }, async getFlatSettings(indexName: string) { - const { body: flatSettings } = await esClient.indices.getSettings<{ + const { body: flatSettings } = await esClient.indices.get<{ [indexName: string]: FlatSettings; }>({ index: indexName, diff --git a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts index b34f26be6e99c..29c8207a5f284 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts @@ -832,7 +832,7 @@ describe('reindexService', () => { }); it('fails if create index is not acknowledged', async () => { - clusterClient.asCurrentUser.indices.getSettings.mockResolvedValueOnce( + clusterClient.asCurrentUser.indices.get.mockResolvedValueOnce( asApiResponse({ myIndex: settingsMappings }) ); @@ -847,7 +847,7 @@ describe('reindexService', () => { }); it('fails if create index fails', async () => { - clusterClient.asCurrentUser.indices.getSettings.mockResolvedValueOnce( + clusterClient.asCurrentUser.indices.get.mockResolvedValueOnce( asApiResponse({ myIndex: settingsMappings }) ); diff --git a/x-pack/test/upgrade_assistant_integration/upgrade_assistant/reindexing.js b/x-pack/test/upgrade_assistant_integration/upgrade_assistant/reindexing.js index f57d2184d4b8d..c70b90b384d13 100644 --- a/x-pack/test/upgrade_assistant_integration/upgrade_assistant/reindexing.js +++ b/x-pack/test/upgrade_assistant_integration/upgrade_assistant/reindexing.js @@ -71,6 +71,8 @@ export default function ({ getService }) { expect(indexSummary[newIndexName]).to.be.an('object'); // The original index name is aliased to the new one expect(indexSummary[newIndexName].aliases.dummydata).to.be.an('object'); + // Verify mappings exist on new index + expect(indexSummary[newIndexName].mappings.properties).to.be.an('object'); // The number of documents in the new index matches what we expect expect((await es.count({ index: lastState.newIndexName })).body.count).to.be(3); From 2498f5719fcea591a3cd592ccac3bc9aa3576464 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Mon, 1 Feb 2021 22:33:50 +0100 Subject: [PATCH 53/85] [load testing] add env vars to pass simulations and repo rootPath (#89544) * [load testing] add env vars to pass simulations and repo rootPath * pass simulation to sript as argument * export GATLING_SIMULATIONS * fix export * add validation --- test/scripts/jenkins_build_load_testing.sh | 13 ++++- x-pack/test/load/runner.ts | 63 +++++++++++++++++++--- 2 files changed, 67 insertions(+), 9 deletions(-) diff --git a/test/scripts/jenkins_build_load_testing.sh b/test/scripts/jenkins_build_load_testing.sh index aeb584b106498..659321f1d3975 100755 --- a/test/scripts/jenkins_build_load_testing.sh +++ b/test/scripts/jenkins_build_load_testing.sh @@ -1,5 +1,13 @@ #!/usr/bin/env bash +while getopts s: flag +do + case "${flag}" in + s) simulations=${OPTARG};; + esac +done +echo "Simulation classes: $simulations"; + cd "$KIBANA_DIR" source src/dev/ci_setup/setup_env.sh @@ -25,6 +33,7 @@ echo " -> test setup" source test/scripts/jenkins_test_setup_xpack.sh echo " -> run gatling load testing" +export GATLING_SIMULATIONS="$simulations" node scripts/functional_tests \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --config test/load/config.ts + --kibana-install-dir "$KIBANA_INSTALL_DIR" \ + --config test/load/config.ts diff --git a/x-pack/test/load/runner.ts b/x-pack/test/load/runner.ts index e9a1cadfddc55..52448a6b32a99 100644 --- a/x-pack/test/load/runner.ts +++ b/x-pack/test/load/runner.ts @@ -7,23 +7,57 @@ import { withProcRunner } from '@kbn/dev-utils'; import { resolve } from 'path'; import { REPO_ROOT } from '@kbn/utils'; +import Fs from 'fs'; +import { createFlagError } from '@kbn/dev-utils'; import { FtrProviderContext } from './../functional/ftr_provider_context'; +const baseSimulationPath = 'src/test/scala/org/kibanaLoadTest/simulation'; +const simulationPackage = 'org.kibanaLoadTest.simulation'; +const simulationFIleExtension = '.scala'; +const gatlingProjectRootPath: string = + process.env.GATLING_PROJECT_PATH || resolve(REPO_ROOT, '../kibana-load-testing'); +const simulationEntry: string = process.env.GATLING_SIMULATIONS || 'DemoJourney'; + +if (!Fs.existsSync(gatlingProjectRootPath)) { + throw createFlagError( + `Incorrect path to load testing project: '${gatlingProjectRootPath}'\n + Clone 'elastic/kibana-load-testing' and set path using 'GATLING_PROJECT_PATH' env var` + ); +} + +const dropEmptyLines = (s: string) => s.split(',').filter((i) => i.length > 0); +const simulationClasses = dropEmptyLines(simulationEntry); +const simulationsRootPath = resolve(gatlingProjectRootPath, baseSimulationPath); + +simulationClasses.map((className) => { + const simulationClassPath = resolve( + simulationsRootPath, + className.replace('.', '/') + simulationFIleExtension + ); + if (!Fs.existsSync(simulationClassPath)) { + throw createFlagError(`Simulation class is not found: '${simulationClassPath}'`); + } +}); + +/** + * + * GatlingTestRunner is used to run load simulation against local Kibana instance + * + * Use GATLING_SIMULATIONS to pass comma-separated class names + * Use GATLING_PROJECT_PATH to override path to 'kibana-load-testing' project + */ export async function GatlingTestRunner({ getService }: FtrProviderContext) { const log = getService('log'); - const gatlingProjectRootPath = resolve(REPO_ROOT, '../kibana-load-testing'); await withProcRunner(log, async (procs) => { - await procs.run('gatling', { + await procs.run('mvn: clean compile', { cmd: 'mvn', args: [ - 'clean', - '-q', + '-Dmaven.wagon.http.retryHandler.count=3', '-Dmaven.test.failure.ignore=true', - 'compile', - 'gatling:test', '-q', - '-Dgatling.simulationClass=org.kibanaLoadTest.simulation.DemoJourney', + 'clean', + 'compile', ], cwd: gatlingProjectRootPath, env: { @@ -31,5 +65,20 @@ export async function GatlingTestRunner({ getService }: FtrProviderContext) { }, wait: true, }); + for (const simulationClass of simulationClasses) { + await procs.run('gatling: test', { + cmd: 'mvn', + args: [ + 'gatling:test', + '-q', + `-Dgatling.simulationClass=${simulationPackage}.${simulationClass}`, + ], + cwd: gatlingProjectRootPath, + env: { + ...process.env, + }, + wait: true, + }); + } }); } From da28bd214cce0f397018b3ece97bf5e65f932bc3 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Mon, 1 Feb 2021 15:05:42 -0700 Subject: [PATCH 54/85] TS project refs: Migrates grokdebugger (#89652) --- x-pack/plugins/grokdebugger/tsconfig.json | 24 +++++++++++++++++++++++ x-pack/test/tsconfig.json | 1 + x-pack/tsconfig.json | 2 ++ x-pack/tsconfig.refs.json | 1 + 4 files changed, 28 insertions(+) create mode 100644 x-pack/plugins/grokdebugger/tsconfig.json diff --git a/x-pack/plugins/grokdebugger/tsconfig.json b/x-pack/plugins/grokdebugger/tsconfig.json new file mode 100644 index 0000000000000..34cf8d74c0024 --- /dev/null +++ b/x-pack/plugins/grokdebugger/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true + }, + "include": [ + "common/**/*", + "public/**/*", + "server/**/*", + "../../typings/**/*", + ], + "references": [ + { "path": "../../../src/core/tsconfig.json" }, + { "path": "../../../src/plugins/dev_tools/tsconfig.json"}, + { "path": "../../../src/plugins/home/tsconfig.json"}, + { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, + { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, + { "path": "../licensing/tsconfig.json" } + ] +} diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 4c77a12c5c01a..a4d7b1a870c38 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -64,6 +64,7 @@ { "path": "../plugins/global_search_bar/tsconfig.json" }, { "path": "../plugins/ingest_pipelines/tsconfig.json" }, { "path": "../plugins/license_management/tsconfig.json" }, + { "path": "../plugins/grokdebugger/tsconfig.json" }, { "path": "../plugins/painless_lab/tsconfig.json" }, { "path": "../plugins/watcher/tsconfig.json" } ] diff --git a/x-pack/tsconfig.json b/x-pack/tsconfig.json index 7ff1e10e8a58b..19633b6a887e8 100644 --- a/x-pack/tsconfig.json +++ b/x-pack/tsconfig.json @@ -44,6 +44,7 @@ "plugins/license_management/**/*", "plugins/painless_lab/**/*", "plugins/watcher/**/*", + "plugins/grokdebugger/**/*", "test/**/*" ], "compilerOptions": { @@ -119,6 +120,7 @@ { "path": "./plugins/translations/tsconfig.json" }, { "path": "./plugins/triggers_actions_ui/tsconfig.json"}, { "path": "./plugins/stack_alerts/tsconfig.json"}, + { "path": "./plugins/grokdebugger/tsconfig.json" }, { "path": "./plugins/ingest_pipelines/tsconfig.json"}, { "path": "./plugins/license_management/tsconfig.json" }, { "path": "./plugins/painless_lab/tsconfig.json" }, diff --git a/x-pack/tsconfig.refs.json b/x-pack/tsconfig.refs.json index eff35147a1da9..b6c4f63f34c11 100644 --- a/x-pack/tsconfig.refs.json +++ b/x-pack/tsconfig.refs.json @@ -44,6 +44,7 @@ { "path": "./plugins/cloud/tsconfig.json" }, { "path": "./plugins/saved_objects_tagging/tsconfig.json" }, { "path": "./plugins/global_search_bar/tsconfig.json" }, + { "path": "./plugins/grokdebugger/tsconfig.json" }, { "path": "./plugins/ingest_pipelines/tsconfig.json" }, { "path": "./plugins/license_management/tsconfig.json" }, { "path": "./plugins/painless_lab/tsconfig.json" }, From 3c0d30cbfd6864ec7ceca60c8b5ef59d76ce2917 Mon Sep 17 00:00:00 2001 From: Kevin Qualters <56408403+kqualters-elastic@users.noreply.github.com> Date: Mon, 1 Feb 2021 17:34:57 -0500 Subject: [PATCH 55/85] Add --ssl flag to make resolver generator use ssl with kbn and elasticsearch clients (#89873) --- .../endpoint/resolver_generator_script.ts | 46 ++++++++++++++----- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/security_solution/scripts/endpoint/resolver_generator_script.ts b/x-pack/plugins/security_solution/scripts/endpoint/resolver_generator_script.ts index 9ad094086b632..de0cec3c06033 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/resolver_generator_script.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/resolver_generator_script.ts @@ -5,9 +5,10 @@ */ /* eslint-disable no-console */ import yargs from 'yargs'; +import fs from 'fs'; import { Client, ClientOptions } from '@elastic/elasticsearch'; import { ResponseError } from '@elastic/elasticsearch/lib/errors'; -import { KbnClient, ToolingLog } from '@kbn/dev-utils'; +import { KbnClient, ToolingLog, CA_CERT_PATH } from '@kbn/dev-utils'; import { AxiosResponse } from 'axios'; import { indexHostsAndAlerts } from '../../common/endpoint/index_data'; import { ANCESTRY_LIMIT, EndpointDocGenerator } from '../../common/endpoint/generate_data'; @@ -202,15 +203,41 @@ async function main() { type: 'boolean', default: false, }, + ssl: { + alias: 'ssl', + describe: 'Use https for elasticsearch and kbn clients', + type: 'boolean', + default: false, + }, }).argv; + let ca: Buffer; + let kbnClient: KbnClientWithApiKeySupport; + let clientOptions: ClientOptions; - const kbnClient = new KbnClientWithApiKeySupport({ - log: new ToolingLog({ - level: 'info', - writeTo: process.stdout, - }), - url: argv.kibana, - }); + if (argv.ssl) { + ca = fs.readFileSync(CA_CERT_PATH); + const url = argv.kibana.replace('http:', 'https:'); + const node = argv.node.replace('http:', 'https:'); + kbnClient = new KbnClientWithApiKeySupport({ + log: new ToolingLog({ + level: 'info', + writeTo: process.stdout, + }), + url, + certificateAuthorities: [ca], + }); + clientOptions = { node, ssl: { ca: [ca] } }; + } else { + kbnClient = new KbnClientWithApiKeySupport({ + log: new ToolingLog({ + level: 'info', + writeTo: process.stdout, + }), + url: argv.kibana, + }); + clientOptions = { node: argv.node }; + } + const client = new Client(clientOptions); try { await doIngestSetup(kbnClient); @@ -219,9 +246,6 @@ async function main() { process.exit(1); } - const clientOptions: ClientOptions = { node: argv.node }; - const client = new Client(clientOptions); - if (argv.delete) { await deleteIndices( [argv.eventIndex, argv.metadataIndex, argv.policyIndex, argv.alertIndex], From 6cf1951b535a44bf45c61390cef426f40f57b21d Mon Sep 17 00:00:00 2001 From: Spencer Date: Mon, 1 Feb 2021 15:51:00 -0700 Subject: [PATCH 56/85] [esArchiver] log when migrations complete and we're done loading data (#89938) Co-authored-by: spalger --- packages/kbn-es-archiver/src/actions/load.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/kbn-es-archiver/src/actions/load.ts b/packages/kbn-es-archiver/src/actions/load.ts index 8afd7d79a98f7..c32496ad42694 100644 --- a/packages/kbn-es-archiver/src/actions/load.ts +++ b/packages/kbn-es-archiver/src/actions/load.ts @@ -98,9 +98,11 @@ export async function loadAction({ // If we affected the Kibana index, we need to ensure it's migrated... if (Object.keys(result).some((k) => k.startsWith('.kibana'))) { await migrateKibanaIndex({ client, kbnClient }); + log.debug('[%s] Migrated Kibana index after loading Kibana data', name); if (kibanaPluginIds.includes('spaces')) { await createDefaultSpace({ client, index: '.kibana' }); + log.debug('[%s] Ensured that default space exists in .kibana', name); } } From 0d5554591fbcbfd4def04ace0760dbaa2f277a72 Mon Sep 17 00:00:00 2001 From: Scotty Bollinger Date: Mon, 1 Feb 2021 16:55:00 -0600 Subject: [PATCH 57/85] [Workplace Search] Add remaining i18n support for the Content Sources tree (#89910) * Add i18n for Org Sources Refactored a bit as well. - Removed unnecessary variable declarations for constants. - Removed empty strings for optional props passed to ContentSection * Add i18n for private sources * Add router i18n * Add i18n to SourcesView * Fix duplicate IDd Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../views/content_sources/constants.ts | 154 ++++++++++++++++++ .../content_sources/organization_sources.tsx | 25 ++- .../views/content_sources/private_sources.tsx | 57 ++++--- .../views/content_sources/source_router.tsx | 16 +- .../views/content_sources/sources_view.tsx | 57 +++++-- 5 files changed, 247 insertions(+), 62 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/constants.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/constants.ts index 48b8a06b2549c..5e106a7f42f57 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/constants.ts @@ -311,3 +311,157 @@ export const SOURCE_NAME_LABEL = i18n.translate( defaultMessage: 'Source name', } ); + +export const ORG_SOURCES_LINK = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.org.link', + { + defaultMessage: 'Add an organization content source', + } +); + +export const ORG_SOURCES_HEADER_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.org.title', + { + defaultMessage: 'Organization sources', + } +); + +export const ORG_SOURCES_HEADER_DESCRIPTION = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.org.description', + { + defaultMessage: + 'Organization sources are available to the entire organization and can be assigned to specific user groups.', + } +); + +export const PRIVATE_LINK_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.link', + { + defaultMessage: 'Add a private content source', + } +); + +export const PRIVATE_CAN_CREATE_PAGE_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.canCreate.title', + { + defaultMessage: 'Manage private content sources', + } +); + +export const PRIVATE_VIEW_ONLY_PAGE_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.vewOnly.title', + { + defaultMessage: 'Review Group Sources', + } +); + +export const PRIVATE_VIEW_ONLY_PAGE_DESCRIPTION = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.vewOnly.description', + { + defaultMessage: 'Review the status of all sources shared with your Group.', + } +); + +export const PRIVATE_CAN_CREATE_PAGE_DESCRIPTION = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.canCreate.description', + { + defaultMessage: + 'Review the status of all connected private sources, and manage private sources for your account.', + } +); + +export const PRIVATE_HEADER_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.header.title', + { + defaultMessage: 'My private content sources', + } +); + +export const PRIVATE_HEADER_DESCRIPTION = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.header.description', + { + defaultMessage: 'Private content sources are available only to you.', + } +); + +export const PRIVATE_SHARED_SOURCES_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.privateShared.header.title', + { + defaultMessage: 'Shared content sources', + } +); + +export const PRIVATE_EMPTY_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.private.empty.title', + { + defaultMessage: 'You have no private sources', + } +); +export const SHARED_EMPTY_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.shared.empty.title', + { + defaultMessage: 'No content source available', + } +); + +export const SHARED_EMPTY_DESCRIPTION = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.shared.empty.description', + { + defaultMessage: + 'Once content sources are shared with you, they will be displayed here, and available via the search experience.', + } +); + +export const AND = i18n.translate('xpack.enterpriseSearch.workplaceSearch.and', { + defaultMessage: 'and', +}); + +export const LICENSE_CALLOUT_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.licenseCallout.title', + { + defaultMessage: 'Private Sources are no longer available', + } +); + +export const LICENSE_CALLOUT_DESCRIPTION = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.licenseCallout.description', + { + defaultMessage: 'Contact your search experience administrator for more information.', + } +); + +export const SOURCE_DISABLED_CALLOUT_TITLE = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.sourceDisabled.title', + { + defaultMessage: 'Content source is disabled', + } +); + +export const SOURCE_DISABLED_CALLOUT_DESCRIPTION = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.sourceDisabled.description', + { + defaultMessage: + 'Your organization’s license level has changed. Your data is safe, but document-level permissions are no longer supported and searching of this source has been disabled. Upgrade to a Platinum license to re-enable this source.', + } +); + +export const SOURCE_DISABLED_CALLOUT_BUTTON = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.sourceDisabled.button', + { + defaultMessage: 'Explore Platinum license', + } +); + +export const DOCUMENT_PERMISSIONS_LINK = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.documentPermissionsLink', + { + defaultMessage: 'Learn more about document-level permission configuration', + } +); + +export const UNDERSTAND_BUTTON = i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sources.understandButton', + { + defaultMessage: 'I understand', + } +); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/organization_sources.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/organization_sources.tsx index fdb536dd79771..3081301fe0a9f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/organization_sources.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/organization_sources.tsx @@ -12,6 +12,12 @@ import { Link, Redirect } from 'react-router-dom'; import { EuiButton } from '@elastic/eui'; import { ADD_SOURCE_PATH, getSourcesPath } from '../../routes'; +import { + ORG_SOURCES_LINK, + ORG_SOURCES_HEADER_TITLE, + ORG_SOURCES_HEADER_DESCRIPTION, +} from './constants'; + import { Loading } from '../../../shared/loading'; import { ContentSection } from '../../components/shared/content_section'; import { SourcesTable } from '../../components/shared/sources_table'; @@ -21,11 +27,6 @@ import { SourcesLogic } from './sources_logic'; import { SourcesView } from './sources_view'; -const ORG_LINK_TITLE = 'Add an organization content source'; -const ORG_HEADER_TITLE = 'Organization sources'; -const ORG_HEADER_DESCRIPTION = - 'Organization sources are available to the entire organization and can be assigned to specific user groups.'; - export const OrganizationSources: React.FC = () => { const { initializeSources, setSourceSearchability, resetSourcesState } = useActions(SourcesLogic); @@ -40,28 +41,22 @@ export const OrganizationSources: React.FC = () => { if (contentSources.length === 0) return ; - const linkTitle = ORG_LINK_TITLE; - const headerTitle = ORG_HEADER_TITLE; - const headerDescription = ORG_HEADER_DESCRIPTION; - const sectionTitle = ''; - const sectionDescription = ''; - return ( - {linkTitle} + {ORG_SOURCES_LINK} } - description={headerDescription} + description={ORG_SOURCES_HEADER_DESCRIPTION} alignItems="flexStart" /> - + { const { hasPlatinumLicense } = useValues(LicensingLogic); const { initializeSources, setSourceSearchability, resetSourcesState } = useActions(SourcesLogic); @@ -112,7 +119,7 @@ export const PrivateSources: React.FC = () => { - You have no private sources} /> + {PRIVATE_EMPTY_TITLE}} /> @@ -124,13 +131,8 @@ export const PrivateSources: React.FC = () => { No content source available} - body={ -

- Once content sources are shared with you, they will be displayed here, and available - via the search experience. -

- } + title={

{SHARED_EMPTY_TITLE}

} + body={

{SHARED_EMPTY_DESCRIPTION}

} /> @@ -140,16 +142,21 @@ export const PrivateSources: React.FC = () => { const hasPrivateSources = privateContentSources?.length > 0; const privateSources = hasPrivateSources ? privateSourcesTable : privateSourcesEmptyState; - const groupsSentence = `${groups.slice(0, groups.length - 1).join(', ')}, and ${groups.slice( + const groupsSentence = `${groups.slice(0, groups.length - 1).join(', ')}, ${AND} ${groups.slice( -1 )}`; const sharedSources = ( @@ -157,8 +164,8 @@ export const PrivateSources: React.FC = () => { const licenseCallout = ( <> - -

Contact your search experience administrator for more information.

+ +

{LICENSE_CALLOUT_DESCRIPTION}

diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/source_router.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/source_router.tsx index f46743778a168..67995a4920925 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/source_router.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/source_router.tsx @@ -17,6 +17,12 @@ import { SendWorkplaceSearchTelemetry as SendTelemetry } from '../../../shared/t import { NAV } from '../../constants'; +import { + SOURCE_DISABLED_CALLOUT_TITLE, + SOURCE_DISABLED_CALLOUT_DESCRIPTION, + SOURCE_DISABLED_CALLOUT_BUTTON, +} from './constants'; + import { ENT_SEARCH_LICENSE_MANAGEMENT, REINDEX_JOB_PATH, @@ -80,14 +86,10 @@ export const SourceRouter: React.FC = () => { const callout = ( <> - -

- Your organization’s license level has changed. Your data is safe, but document-level - permissions are no longer supported and searching of this source has been disabled. - Upgrade to a Platinum license to re-enable this source. -

+ +

{SOURCE_DISABLED_CALLOUT_DESCRIPTION}

- Explore Platinum license + {SOURCE_DISABLED_CALLOUT_BUTTON}
diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/sources_view.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/sources_view.tsx index 9e6c8f5b7319e..f8a2d345c8513 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/sources_view.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/sources_view.tsx @@ -8,6 +8,9 @@ import React from 'react'; import { useActions, useValues } from 'kea'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n/react'; + import { EuiButton, EuiLink, @@ -27,6 +30,12 @@ import { SourceIcon } from '../../components/shared/source_icon'; import { EXTERNAL_IDENTITIES_DOCS_URL, DOCUMENT_PERMISSIONS_DOCS_URL } from '../../routes'; +import { + EXTERNAL_IDENTITIES_LINK, + DOCUMENT_PERMISSIONS_LINK, + UNDERSTAND_BUTTON, +} from './constants'; + import { SourcesLogic } from './sources_logic'; interface SourcesViewProps { @@ -59,35 +68,53 @@ export const SourcesView: React.FC = ({ children }) => { - {addedSourceName} requires additional configuration + + {i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.sourcesView.modal.heading', + { + defaultMessage: '{addedSourceName} requires additional configuration', + values: { addedSourceName }, + } + )} +

- {addedSourceName} has been successfully connected and initial content synchronization - is already underway. Since you have elected to synchronize document-level permission - information, you must now provide user and group mappings using the  - - External Identities API - - . + + {EXTERNAL_IDENTITIES_LINK} + + ), + }} + />

- Documents will not be searchable from Workplace Search until user and group mappings - have been configured.  - - Learn more about document-level permission configuration - - . + + {DOCUMENT_PERMISSIONS_LINK} + + ), + }} + />

- I understand + {UNDERSTAND_BUTTON} From 69752fab376bb8ef5fbce0ef28f9d7a5dfaa9388 Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Mon, 1 Feb 2021 23:09:53 +0000 Subject: [PATCH 58/85] [Security Solution] Remove focustrap (#89905) * remove focustrap * remove focustrap Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/notes/add_note/index.tsx | 45 +++++++++---------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/x-pack/plugins/security_solution/public/timelines/components/notes/add_note/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/notes/add_note/index.tsx index 92e0ac757cc39..10e8ca42f35ae 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/notes/add_note/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/notes/add_note/index.tsx @@ -9,7 +9,6 @@ import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, - EuiFocusTrap, EuiScreenReaderOnly, } from '@elastic/eui'; import React, { useCallback } from 'react'; @@ -83,31 +82,29 @@ export const AddNote = React.memo<{ return ( - -
- -

{i18n.YOU_ARE_EDITING_A_NOTE}

-
- - - {onCancelAddNote != null ? ( - - - - ) : null} +
+ +

{i18n.YOU_ARE_EDITING_A_NOTE}

+
+ + + {onCancelAddNote != null ? ( - - {i18n.ADD_NOTE} - + - -
- + ) : null} + + + {i18n.ADD_NOTE} + + +
+
); }); From af6ed3f55649561c659b49023d9ff111649d9bf3 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 16:49:27 -0700 Subject: [PATCH 59/85] skip flaky suite (#86952) --- .../security_and_spaces/tests/alerting/rbac_legacy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/rbac_legacy.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/rbac_legacy.ts index 2b25c82cc92e5..a0db084cd903d 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/rbac_legacy.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/rbac_legacy.ts @@ -28,7 +28,8 @@ export default function alertTests({ getService }: FtrProviderContext) { superuser: 'b384be60-ec53-4b26-857e-0253ee55b277', }; - describe('alerts', () => { + // FLAKY: https://github.com/elastic/kibana/issues/86952 + describe.skip('alerts', () => { const authorizationIndex = '.kibana-test-authorization'; const objectRemover = new ObjectRemover(supertest); From 2b0053ab6f627933dbc41d03320af427007aec35 Mon Sep 17 00:00:00 2001 From: Kent Marten <65553677+kmartastic@users.noreply.github.com> Date: Mon, 1 Feb 2021 16:02:20 -0800 Subject: [PATCH 60/85] [Maps] Change 'create multi-layer map' title to be use-case focused (#89520) * [maps] Top hits per entity--change to title to use recent, minor edits * Updated TopHitsPerEntity title and description to use the term relevant * Change create multi-layer map tutorial title to be use-case driven * reverting change to TopHits topic * Updated title of getting started with maps tutorial * Updated title of getting started with maps tutorial Co-authored-by: Kent Marten Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- docs/maps/maps-getting-started.asciidoc | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/maps/maps-getting-started.asciidoc b/docs/maps/maps-getting-started.asciidoc index 32a81c8e65f56..609a133c92ad1 100644 --- a/docs/maps/maps-getting-started.asciidoc +++ b/docs/maps/maps-getting-started.asciidoc @@ -1,15 +1,11 @@ [role="xpack"] [[maps-getting-started]] -== Create a map with multiple layers and data sources - -++++ -Create a multilayer map -++++ +== Build a map to compare metrics by country or region If you are new to **Maps**, this tutorial is a good place to start. It guides you through the common steps for working with your location data. -You'll learn to: +You will learn to: - Create a map with multiple layers and data sources - Use symbols, colors, and labels to style data values From 29e3886bcdaeb066bd9678552fb57715243800a0 Mon Sep 17 00:00:00 2001 From: Lukas Olson Date: Mon, 1 Feb 2021 17:06:32 -0700 Subject: [PATCH 61/85] [data.search] Allow search response to follow new hits format (#88115) * [data.search] Allow search response to follow new hits format * Update docs * Fix types * Fix types * Doc updates * Remove declare module * Remove declare module Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- ...a-public.isearchoptions.legacyhitstotal.md | 13 ++++ ...ugin-plugins-data-public.isearchoptions.md | 1 + ...ugins-data-server.iscopedsessionservice.md | 18 +++++ ...ata-server.iscopedsessionservice.search.md | 11 +++ ...a-server.isearchoptions.legacyhitstotal.md | 13 ++++ ...ugin-plugins-data-server.isearchoptions.md | 1 + .../kibana-plugin-plugins-data-server.md | 1 + src/plugins/data/common/search/types.ts | 7 ++ src/plugins/data/public/public.api.md | 1 + src/plugins/data/server/index.ts | 1 + .../search/es_search/es_search_strategy.ts | 7 +- .../search/es_search/response_utils.test.ts | 77 ++++++++++++++++++- .../server/search/es_search/response_utils.ts | 18 +++++ src/plugins/data/server/search/index.ts | 1 - .../data/server/search/routes/bsearch.ts | 11 +-- .../data/server/search/routes/call_msearch.ts | 3 +- .../data/server/search/routes/index.ts | 1 - .../data/server/search/routes/search.ts | 20 ++--- .../search/routes/shim_hits_total.test.ts | 58 -------------- .../server/search/routes/shim_hits_total.ts | 22 ------ .../data/server/search/search_service.ts | 6 +- src/plugins/data/server/server.api.md | 45 ++++++----- .../server/search/es_search_strategy.ts | 6 +- .../security_solution/index.ts | 2 +- .../server/search_strategy/timeline/index.ts | 2 +- 25 files changed, 213 insertions(+), 133 deletions(-) create mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.isearchoptions.legacyhitstotal.md create mode 100644 docs/development/plugins/data/server/kibana-plugin-plugins-data-server.iscopedsessionservice.md create mode 100644 docs/development/plugins/data/server/kibana-plugin-plugins-data-server.iscopedsessionservice.search.md create mode 100644 docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchoptions.legacyhitstotal.md delete mode 100644 src/plugins/data/server/search/routes/shim_hits_total.test.ts delete mode 100644 src/plugins/data/server/search/routes/shim_hits_total.ts diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.isearchoptions.legacyhitstotal.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.isearchoptions.legacyhitstotal.md new file mode 100644 index 0000000000000..937e20a7a9579 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.isearchoptions.legacyhitstotal.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [ISearchOptions](./kibana-plugin-plugins-data-public.isearchoptions.md) > [legacyHitsTotal](./kibana-plugin-plugins-data-public.isearchoptions.legacyhitstotal.md) + +## ISearchOptions.legacyHitsTotal property + +Request the legacy format for the total number of hits. If sending `rest_total_hits_as_int` to something other than `true`, this should be set to `false`. + +Signature: + +```typescript +legacyHitsTotal?: boolean; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.isearchoptions.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.isearchoptions.md index 5acd837495dac..fc2767cd0231f 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.isearchoptions.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.isearchoptions.md @@ -17,6 +17,7 @@ export interface ISearchOptions | [abortSignal](./kibana-plugin-plugins-data-public.isearchoptions.abortsignal.md) | AbortSignal | An AbortSignal that allows the caller of search to abort a search request. | | [isRestore](./kibana-plugin-plugins-data-public.isearchoptions.isrestore.md) | boolean | Whether the session is restored (i.e. search requests should re-use the stored search IDs, rather than starting from scratch) | | [isStored](./kibana-plugin-plugins-data-public.isearchoptions.isstored.md) | boolean | Whether the session is already saved (i.e. sent to background) | +| [legacyHitsTotal](./kibana-plugin-plugins-data-public.isearchoptions.legacyhitstotal.md) | boolean | Request the legacy format for the total number of hits. If sending rest_total_hits_as_int to something other than true, this should be set to false. | | [sessionId](./kibana-plugin-plugins-data-public.isearchoptions.sessionid.md) | string | A session ID, grouping multiple search requests into a single session. | | [strategy](./kibana-plugin-plugins-data-public.isearchoptions.strategy.md) | string | Use this option to force using a specific server side search strategy. Leave empty to use the default strategy. | diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.iscopedsessionservice.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.iscopedsessionservice.md new file mode 100644 index 0000000000000..eaac671b9a182 --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.iscopedsessionservice.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IScopedSessionService](./kibana-plugin-plugins-data-server.iscopedsessionservice.md) + +## IScopedSessionService interface + +Signature: + +```typescript +export interface IScopedSessionService +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [search](./kibana-plugin-plugins-data-server.iscopedsessionservice.search.md) | <Request extends IKibanaSearchRequest, Response extends IKibanaSearchResponse>(strategy: ISearchStrategy<Request, Response>, ...args: Parameters<ISearchStrategy<Request, Response>['search']>) => Observable<Response> | | + diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.iscopedsessionservice.search.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.iscopedsessionservice.search.md new file mode 100644 index 0000000000000..d58a9fd9f3761 --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.iscopedsessionservice.search.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IScopedSessionService](./kibana-plugin-plugins-data-server.iscopedsessionservice.md) > [search](./kibana-plugin-plugins-data-server.iscopedsessionservice.search.md) + +## IScopedSessionService.search property + +Signature: + +```typescript +search: (strategy: ISearchStrategy, ...args: Parameters['search']>) => Observable; +``` diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchoptions.legacyhitstotal.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchoptions.legacyhitstotal.md new file mode 100644 index 0000000000000..59b8b2c6b446f --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchoptions.legacyhitstotal.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [ISearchOptions](./kibana-plugin-plugins-data-server.isearchoptions.md) > [legacyHitsTotal](./kibana-plugin-plugins-data-server.isearchoptions.legacyhitstotal.md) + +## ISearchOptions.legacyHitsTotal property + +Request the legacy format for the total number of hits. If sending `rest_total_hits_as_int` to something other than `true`, this should be set to `false`. + +Signature: + +```typescript +legacyHitsTotal?: boolean; +``` diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchoptions.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchoptions.md index 85847e1c61d25..9de351b2b9019 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchoptions.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchoptions.md @@ -17,6 +17,7 @@ export interface ISearchOptions | [abortSignal](./kibana-plugin-plugins-data-server.isearchoptions.abortsignal.md) | AbortSignal | An AbortSignal that allows the caller of search to abort a search request. | | [isRestore](./kibana-plugin-plugins-data-server.isearchoptions.isrestore.md) | boolean | Whether the session is restored (i.e. search requests should re-use the stored search IDs, rather than starting from scratch) | | [isStored](./kibana-plugin-plugins-data-server.isearchoptions.isstored.md) | boolean | Whether the session is already saved (i.e. sent to background) | +| [legacyHitsTotal](./kibana-plugin-plugins-data-server.isearchoptions.legacyhitstotal.md) | boolean | Request the legacy format for the total number of hits. If sending rest_total_hits_as_int to something other than true, this should be set to false. | | [sessionId](./kibana-plugin-plugins-data-server.isearchoptions.sessionid.md) | string | A session ID, grouping multiple search requests into a single session. | | [strategy](./kibana-plugin-plugins-data-server.isearchoptions.strategy.md) | string | Use this option to force using a specific server side search strategy. Leave empty to use the default strategy. | diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md index 84c7875c26ce8..27a386a714fc1 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md @@ -53,6 +53,7 @@ | [IFieldSubType](./kibana-plugin-plugins-data-server.ifieldsubtype.md) | | | [IFieldType](./kibana-plugin-plugins-data-server.ifieldtype.md) | | | [IndexPatternAttributes](./kibana-plugin-plugins-data-server.indexpatternattributes.md) | Interface for an index pattern saved object | +| [IScopedSessionService](./kibana-plugin-plugins-data-server.iscopedsessionservice.md) | | | [ISearchOptions](./kibana-plugin-plugins-data-server.isearchoptions.md) | | | [ISearchSetup](./kibana-plugin-plugins-data-server.isearchsetup.md) | | | [ISearchStart](./kibana-plugin-plugins-data-server.isearchstart.md) | | diff --git a/src/plugins/data/common/search/types.ts b/src/plugins/data/common/search/types.ts index c1293f4415458..38e963591f25c 100644 --- a/src/plugins/data/common/search/types.ts +++ b/src/plugins/data/common/search/types.ts @@ -84,11 +84,18 @@ export interface ISearchOptions { * An `AbortSignal` that allows the caller of `search` to abort a search request. */ abortSignal?: AbortSignal; + /** * Use this option to force using a specific server side search strategy. Leave empty to use the default strategy. */ strategy?: string; + /** + * Request the legacy format for the total number of hits. If sending `rest_total_hits_as_int` to + * something other than `true`, this should be set to `false`. + */ + legacyHitsTotal?: boolean; + /** * A session ID, grouping multiple search requests into a single session. */ diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index f533af2db9672..4f197dd43a83e 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -1641,6 +1641,7 @@ export interface ISearchOptions { abortSignal?: AbortSignal; isRestore?: boolean; isStored?: boolean; + legacyHitsTotal?: boolean; sessionId?: string; strategy?: string; } diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts index 27af11674d061..370ff180fa562 100644 --- a/src/plugins/data/server/index.ts +++ b/src/plugins/data/server/index.ts @@ -235,6 +235,7 @@ export { SearchUsage, SessionService, ISessionService, + IScopedSessionService, DataApiRequestHandlerContext, DataRequestHandlerContext, } from './search'; diff --git a/src/plugins/data/server/search/es_search/es_search_strategy.ts b/src/plugins/data/server/search/es_search/es_search_strategy.ts index c176a50627b92..2d9b16ac8b00b 100644 --- a/src/plugins/data/server/search/es_search/es_search_strategy.ts +++ b/src/plugins/data/server/search/es_search/es_search_strategy.ts @@ -13,7 +13,7 @@ import type { Logger, SharedGlobalConfig } from 'kibana/server'; import type { ISearchStrategy } from '../types'; import type { SearchUsage } from '../collectors'; import { getDefaultSearchParams, getShardTimeout, shimAbortSignal } from './request_utils'; -import { toKibanaSearchResponse } from './response_utils'; +import { shimHitsTotal, toKibanaSearchResponse } from './response_utils'; import { searchUsageObserver } from '../collectors/usage'; import { getKbnServerError, KbnServerError } from '../../../../kibana_utils/server'; @@ -29,7 +29,7 @@ export const esSearchStrategyProvider = ( * @throws `KbnServerError` * @returns `Observable>` */ - search: (request, { abortSignal }, { esClient, uiSettingsClient }) => { + search: (request, { abortSignal, ...options }, { esClient, uiSettingsClient }) => { // Only default index pattern type is supported here. // See data_enhanced for other type support. if (request.indexType) { @@ -46,7 +46,8 @@ export const esSearchStrategyProvider = ( }; const promise = esClient.asCurrentUser.search>(params); const { body } = await shimAbortSignal(promise, abortSignal); - return toKibanaSearchResponse(body); + const response = shimHitsTotal(body, options); + return toKibanaSearchResponse(response); } catch (e) { throw getKbnServerError(e); } diff --git a/src/plugins/data/server/search/es_search/response_utils.test.ts b/src/plugins/data/server/search/es_search/response_utils.test.ts index 8c973b92c7ffe..7cb5705ecf8ef 100644 --- a/src/plugins/data/server/search/es_search/response_utils.test.ts +++ b/src/plugins/data/server/search/es_search/response_utils.test.ts @@ -6,7 +6,7 @@ * Public License, v 1. */ -import { getTotalLoaded, toKibanaSearchResponse } from './response_utils'; +import { getTotalLoaded, toKibanaSearchResponse, shimHitsTotal } from './response_utils'; import { SearchResponse } from 'elasticsearch'; describe('response utils', () => { @@ -55,4 +55,79 @@ describe('response utils', () => { }); }); }); + + describe('shimHitsTotal', () => { + test('returns the total if it is already numeric', () => { + const result = shimHitsTotal({ + hits: { + total: 5, + }, + } as any); + expect(result).toEqual({ + hits: { + total: 5, + }, + }); + }); + + test('returns the total if it is inside `value`', () => { + const result = shimHitsTotal({ + hits: { + total: { + value: 5, + }, + }, + } as any); + expect(result).toEqual({ + hits: { + total: 5, + }, + }); + }); + + test('returns other properties from the response', () => { + const result = shimHitsTotal({ + _shards: {}, + hits: { + hits: [], + total: { + value: 5, + }, + }, + } as any); + expect(result).toEqual({ + _shards: {}, + hits: { + hits: [], + total: 5, + }, + }); + }); + + test('returns the response as-is if `legacyHitsTotal` is `false`', () => { + const result = shimHitsTotal( + { + _shards: {}, + hits: { + hits: [], + total: { + value: 5, + relation: 'eq', + }, + }, + } as any, + { legacyHitsTotal: false } + ); + expect(result).toEqual({ + _shards: {}, + hits: { + hits: [], + total: { + value: 5, + relation: 'eq', + }, + }, + }); + }); + }); }); diff --git a/src/plugins/data/server/search/es_search/response_utils.ts b/src/plugins/data/server/search/es_search/response_utils.ts index d4fa14866fd97..3417f24cf420a 100644 --- a/src/plugins/data/server/search/es_search/response_utils.ts +++ b/src/plugins/data/server/search/es_search/response_utils.ts @@ -7,6 +7,7 @@ */ import { SearchResponse } from 'elasticsearch'; +import { ISearchOptions } from '../../../common'; /** * Get the `total`/`loaded` for this response (see `IKibanaSearchResponse`). Note that `skipped` is @@ -31,3 +32,20 @@ export function toKibanaSearchResponse(rawResponse: SearchResponse) { ...getTotalLoaded(rawResponse), }; } + +/** + * Temporary workaround until https://github.com/elastic/kibana/issues/26356 is addressed. + * Since we are setting `track_total_hits` in the request, `hits.total` will be an object + * containing the `value`. + * + * @internal + */ +export function shimHitsTotal( + response: SearchResponse, + { legacyHitsTotal = true }: ISearchOptions = {} +) { + if (!legacyHitsTotal) return response; + const total = (response.hits?.total as any)?.value ?? response.hits?.total; + const hits = { ...response.hits, total }; + return { ...response, hits }; +} diff --git a/src/plugins/data/server/search/index.ts b/src/plugins/data/server/search/index.ts index a333424110065..301b0989b5183 100644 --- a/src/plugins/data/server/search/index.ts +++ b/src/plugins/data/server/search/index.ts @@ -10,5 +10,4 @@ export * from './types'; export * from './es_search'; export { usageProvider, SearchUsage, searchUsageObserver } from './collectors'; export * from './aggs'; -export { shimHitsTotal } from './routes'; export * from './session'; diff --git a/src/plugins/data/server/search/routes/bsearch.ts b/src/plugins/data/server/search/routes/bsearch.ts index e30b7bdaa8402..ba96726b787c0 100644 --- a/src/plugins/data/server/search/routes/bsearch.ts +++ b/src/plugins/data/server/search/routes/bsearch.ts @@ -6,7 +6,7 @@ * Public License, v 1. */ -import { catchError, first, map } from 'rxjs/operators'; +import { catchError, first } from 'rxjs/operators'; import { CoreStart, KibanaRequest } from 'src/core/server'; import { BfetchServerSetup } from 'src/plugins/bfetch/server'; import { @@ -15,7 +15,6 @@ import { ISearchClient, ISearchOptions, } from '../../../common/search'; -import { shimHitsTotal } from './shim_hits_total'; type GetScopedProider = (coreStart: CoreStart) => (request: KibanaRequest) => ISearchClient; @@ -40,14 +39,6 @@ export function registerBsearchRoute( .search(requestData, options) .pipe( first(), - map((response) => { - return { - ...response, - ...{ - rawResponse: shimHitsTotal(response.rawResponse), - }, - }; - }), catchError((err) => { // Re-throw as object, to get attributes passed to the client // eslint-disable-next-line no-throw-literal diff --git a/src/plugins/data/server/search/routes/call_msearch.ts b/src/plugins/data/server/search/routes/call_msearch.ts index fc30e2f29c3ef..e6ff5f454079b 100644 --- a/src/plugins/data/server/search/routes/call_msearch.ts +++ b/src/plugins/data/server/search/routes/call_msearch.ts @@ -12,9 +12,8 @@ import { SearchResponse } from 'elasticsearch'; import { IUiSettingsClient, IScopedClusterClient, SharedGlobalConfig } from 'src/core/server'; import type { MsearchRequestBody, MsearchResponse } from '../../../common/search/search_source'; -import { shimHitsTotal } from './shim_hits_total'; import { getKbnServerError } from '../../../../kibana_utils/server'; -import { getShardTimeout, getDefaultSearchParams, shimAbortSignal } from '..'; +import { getShardTimeout, getDefaultSearchParams, shimAbortSignal, shimHitsTotal } from '..'; /** @internal */ export function convertRequestBody( diff --git a/src/plugins/data/server/search/routes/index.ts b/src/plugins/data/server/search/routes/index.ts index ea20240f6ae19..25e0353fb4a27 100644 --- a/src/plugins/data/server/search/routes/index.ts +++ b/src/plugins/data/server/search/routes/index.ts @@ -9,4 +9,3 @@ export * from './call_msearch'; export * from './msearch'; export * from './search'; -export * from './shim_hits_total'; diff --git a/src/plugins/data/server/search/routes/search.ts b/src/plugins/data/server/search/routes/search.ts index 6d2da4c1e63dd..e556e3ca49ec2 100644 --- a/src/plugins/data/server/search/routes/search.ts +++ b/src/plugins/data/server/search/routes/search.ts @@ -9,7 +9,6 @@ import { first } from 'rxjs/operators'; import { schema } from '@kbn/config-schema'; import { getRequestAbortedSignal } from '../../lib'; -import { shimHitsTotal } from './shim_hits_total'; import { reportServerError } from '../../../../kibana_utils/server'; import type { DataPluginRouter } from '../types'; @@ -27,6 +26,7 @@ export function registerSearchRoute(router: DataPluginRouter): void { body: schema.object( { + legacyHitsTotal: schema.maybe(schema.boolean()), sessionId: schema.maybe(schema.string()), isStored: schema.maybe(schema.boolean()), isRestore: schema.maybe(schema.boolean()), @@ -36,7 +36,13 @@ export function registerSearchRoute(router: DataPluginRouter): void { }, }, async (context, request, res) => { - const { sessionId, isStored, isRestore, ...searchRequest } = request.body; + const { + legacyHitsTotal = true, + sessionId, + isStored, + isRestore, + ...searchRequest + } = request.body; const { strategy, id } = request.params; const abortSignal = getRequestAbortedSignal(request.events.aborted$); @@ -47,6 +53,7 @@ export function registerSearchRoute(router: DataPluginRouter): void { { abortSignal, strategy, + legacyHitsTotal, sessionId, isStored, isRestore, @@ -55,14 +62,7 @@ export function registerSearchRoute(router: DataPluginRouter): void { .pipe(first()) .toPromise(); - return res.ok({ - body: { - ...response, - ...{ - rawResponse: shimHitsTotal(response.rawResponse), - }, - }, - }); + return res.ok({ body: response }); } catch (err) { return reportServerError(res, err); } diff --git a/src/plugins/data/server/search/routes/shim_hits_total.test.ts b/src/plugins/data/server/search/routes/shim_hits_total.test.ts deleted file mode 100644 index 6dcd7c3ff6c70..0000000000000 --- a/src/plugins/data/server/search/routes/shim_hits_total.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * and the Server Side Public License, v 1; you may not use this file except in - * compliance with, at your election, the Elastic License or the Server Side - * Public License, v 1. - */ - -import { shimHitsTotal } from './shim_hits_total'; - -describe('shimHitsTotal', () => { - test('returns the total if it is already numeric', () => { - const result = shimHitsTotal({ - hits: { - total: 5, - }, - } as any); - expect(result).toEqual({ - hits: { - total: 5, - }, - }); - }); - - test('returns the total if it is inside `value`', () => { - const result = shimHitsTotal({ - hits: { - total: { - value: 5, - }, - }, - } as any); - expect(result).toEqual({ - hits: { - total: 5, - }, - }); - }); - - test('returns other properties from the response', () => { - const result = shimHitsTotal({ - _shards: {}, - hits: { - hits: [], - total: { - value: 5, - }, - }, - } as any); - expect(result).toEqual({ - _shards: {}, - hits: { - hits: [], - total: 5, - }, - }); - }); -}); diff --git a/src/plugins/data/server/search/routes/shim_hits_total.ts b/src/plugins/data/server/search/routes/shim_hits_total.ts deleted file mode 100644 index 4b56d6394e0db..0000000000000 --- a/src/plugins/data/server/search/routes/shim_hits_total.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * and the Server Side Public License, v 1; you may not use this file except in - * compliance with, at your election, the Elastic License or the Server Side - * Public License, v 1. - */ - -import { SearchResponse } from 'elasticsearch'; - -/** - * Temporary workaround until https://github.com/elastic/kibana/issues/26356 is addressed. - * Since we are setting `track_total_hits` in the request, `hits.total` will be an object - * containing the `value`. - * - * @internal - */ -export function shimHitsTotal(response: SearchResponse) { - const total = (response.hits?.total as any)?.value ?? response.hits?.total; - const hits = { ...response.hits, total }; - return { ...response, hits }; -} diff --git a/src/plugins/data/server/search/search_service.ts b/src/plugins/data/server/search/search_service.ts index 63593bbe84a08..e9f0edbd4d6c4 100644 --- a/src/plugins/data/server/search/search_service.ts +++ b/src/plugins/data/server/search/search_service.ts @@ -34,7 +34,7 @@ import { AggsService } from './aggs'; import { FieldFormatsStart } from '../field_formats'; import { IndexPatternsServiceStart } from '../index_patterns'; -import { getCallMsearch, registerMsearchRoute, registerSearchRoute, shimHitsTotal } from './routes'; +import { getCallMsearch, registerMsearchRoute, registerSearchRoute } from './routes'; import { ES_SEARCH_STRATEGY, esSearchStrategyProvider } from './es_search'; import { DataPluginStart } from '../plugin'; import { UsageCollectionSetup } from '../../../usage_collection/server'; @@ -62,7 +62,7 @@ import { } from '../../common/search/aggs/buckets/shard_delay'; import { aggShardDelay } from '../../common/search/aggs/buckets/shard_delay_fn'; import { ConfigSchema } from '../../config'; -import { SessionService, IScopedSessionService, ISessionService } from './session'; +import { IScopedSessionService, ISessionService, SessionService } from './session'; import { KbnServerError } from '../../../kibana_utils/server'; import { registerBsearchRoute } from './routes/bsearch'; @@ -209,7 +209,7 @@ export class SearchService implements Plugin { const searchSourceDependencies: SearchSourceDependencies = { getConfig: (key: string): T => uiSettingsCache[key], search: asScoped(request).search, - onResponse: (req, res) => shimHitsTotal(res), + onResponse: (req, res) => res, legacy: { callMsearch: getCallMsearch({ esClient, diff --git a/src/plugins/data/server/server.api.md b/src/plugins/data/server/server.api.md index 9789f3354e9ef..635428f298ab2 100644 --- a/src/plugins/data/server/server.api.md +++ b/src/plugins/data/server/server.api.md @@ -310,8 +310,6 @@ export const config: PluginConfigDescriptor; // // @public (undocumented) export interface DataApiRequestHandlerContext extends ISearchClient { - // Warning: (ae-forgotten-export) The symbol "IScopedSessionService" needs to be exported by the entry point index.d.ts - // // (undocumented) session: IScopedSessionService; } @@ -912,6 +910,16 @@ export class IndexPatternsService implements Plugin_3(strategy: ISearchStrategy, ...args: Parameters['search']>) => Observable; +} + // Warning: (ae-missing-release-tag) "ISearchOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -919,6 +927,7 @@ export interface ISearchOptions { abortSignal?: AbortSignal; isRestore?: boolean; isStored?: boolean; + legacyHitsTotal?: boolean; sessionId?: string; strategy?: string; } @@ -1284,7 +1293,7 @@ export class SessionService implements ISessionService { export const shimAbortSignal: (promise: TransportRequestPromise, signal?: AbortSignal | undefined) => TransportRequestPromise; // @internal -export function shimHitsTotal(response: SearchResponse): { +export function shimHitsTotal(response: SearchResponse, { legacyHitsTotal }?: ISearchOptions): { hits: { total: any; max_score: number; @@ -1293,7 +1302,7 @@ export function shimHitsTotal(response: SearchResponse): { _type: string; _id: string; _score: number; - _source: any; + _source: unknown; _version?: number | undefined; _explanation?: import("elasticsearch").Explanation | undefined; fields?: any; @@ -1426,20 +1435,20 @@ export function usageProvider(core: CoreSetup_2): SearchUsage; // src/plugins/data/server/index.ts:100:26 - (ae-forgotten-export) The symbol "TruncateFormat" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index.ts:126:27 - (ae-forgotten-export) The symbol "isFilterable" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index.ts:126:27 - (ae-forgotten-export) The symbol "isNestedField" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:243:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:243:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:243:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:243:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:245:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:246:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:255:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:256:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:257:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:261:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:262:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:266:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:269:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:270:1 - (ae-forgotten-export) The symbol "calcAutoIntervalLessThan" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:244:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:244:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:244:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:244:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:246:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:247:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:256:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:257:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:258:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:262:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:263:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:267:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:270:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:271:1 - (ae-forgotten-export) The symbol "calcAutoIntervalLessThan" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index_patterns/index_patterns_service.ts:59:14 - (ae-forgotten-export) The symbol "IndexPatternsService" needs to be exported by the entry point index.d.ts // src/plugins/data/server/plugin.ts:79:74 - (ae-forgotten-export) The symbol "DataEnhancements" needs to be exported by the entry point index.d.ts // src/plugins/data/server/search/types.ts:103:5 - (ae-forgotten-export) The symbol "ISearchStartSearchSource" needs to be exported by the entry point index.d.ts diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts index 694d9807b5a4d..dc1fa13d32e27 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts @@ -23,6 +23,7 @@ import { getTotalLoaded, searchUsageObserver, shimAbortSignal, + shimHitsTotal, } from '../../../../../src/plugins/data/server'; import type { IAsyncSearchOptions } from '../../common'; import { pollSearch } from '../../common'; @@ -63,7 +64,8 @@ export const enhancedEsSearchStrategyProvider = ( ? client.get({ ...params, id }) : client.submit(params); const { body } = await shimAbortSignal(promise, options.abortSignal); - return toAsyncKibanaSearchResponse(body); + const response = shimHitsTotal(body.response, options); + return toAsyncKibanaSearchResponse({ ...body, response }); }; const cancel = async () => { @@ -108,7 +110,7 @@ export const enhancedEsSearchStrategyProvider = ( const esResponse = await shimAbortSignal(promise, options?.abortSignal); const response = esResponse.body as SearchResponse; return { - rawResponse: response, + rawResponse: shimHitsTotal(response, options), ...getTotalLoaded(response), }; } catch (e) { diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/index.ts index 8b2cce01cf07a..d25f1aaccc5e7 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/index.ts @@ -37,7 +37,7 @@ export const securitySolutionSearchStrategyProvider = Date: Mon, 1 Feb 2021 17:45:24 -0700 Subject: [PATCH 62/85] Revert "Enable v2 so migrations, disable in FTR tests (#89297)" This reverts commit c8afae8a5120850565ae3fa7f9db460a3f7be653. --- src/core/server/saved_objects/saved_objects_config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/server/saved_objects/saved_objects_config.ts b/src/core/server/saved_objects/saved_objects_config.ts index 0885a52078f5c..82db64daf2bd3 100644 --- a/src/core/server/saved_objects/saved_objects_config.ts +++ b/src/core/server/saved_objects/saved_objects_config.ts @@ -18,7 +18,7 @@ export const savedObjectsMigrationConfig = { pollInterval: schema.number({ defaultValue: 1500 }), skip: schema.boolean({ defaultValue: false }), // TODO migrationsV2: remove/deprecate once we release migrations v2 - enableV2: schema.boolean({ defaultValue: true }), + enableV2: schema.boolean({ defaultValue: false }), }), }; From e0513457658b3c913112d5e7d7dd3c5ada604a59 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 17:45:54 -0700 Subject: [PATCH 63/85] Revert "Revert "Enable v2 so migrations, disable in FTR tests (#89297)"" This reverts commit 850c03c3a812267b2a553fed23c8505eebddb9ac. --- src/core/server/saved_objects/saved_objects_config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/server/saved_objects/saved_objects_config.ts b/src/core/server/saved_objects/saved_objects_config.ts index 82db64daf2bd3..0885a52078f5c 100644 --- a/src/core/server/saved_objects/saved_objects_config.ts +++ b/src/core/server/saved_objects/saved_objects_config.ts @@ -18,7 +18,7 @@ export const savedObjectsMigrationConfig = { pollInterval: schema.number({ defaultValue: 1500 }), skip: schema.boolean({ defaultValue: false }), // TODO migrationsV2: remove/deprecate once we release migrations v2 - enableV2: schema.boolean({ defaultValue: false }), + enableV2: schema.boolean({ defaultValue: true }), }), }; From f97958043f3e037e5e94daa432a7e71caa4b1ba7 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 17:46:45 -0700 Subject: [PATCH 64/85] Revert "Migrations v2: don't auto-create indices + FTR/esArchiver support (#85778)" This reverts commit 03636a07fe23ef80b46d3f0a6958f7164abc4138. --- ...orhelpers.createindexaliasnotfounderror.md | 22 -- ...helpers.decorateindexaliasnotfounderror.md | 23 -- ...savedobjectserrorhelpers.isgeneralerror.md | 22 -- ...in-core-server.savedobjectserrorhelpers.md | 3 - .../src/actions/empty_kibana_index.ts | 3 +- packages/kbn-es-archiver/src/es_archiver.ts | 2 +- .../src/lib/indices/kibana_index.ts | 8 +- .../saved_objects/migrationsv2/model.test.ts | 202 +++--------------- .../saved_objects/migrationsv2/model.ts | 20 +- .../saved_objects/routes/bulk_create.ts | 3 +- .../server/saved_objects/routes/bulk_get.ts | 3 +- .../saved_objects/routes/bulk_update.ts | 3 +- .../server/saved_objects/routes/create.ts | 3 +- .../server/saved_objects/routes/delete.ts | 3 +- .../server/saved_objects/routes/export.ts | 4 +- src/core/server/saved_objects/routes/find.ts | 3 +- src/core/server/saved_objects/routes/get.ts | 3 +- .../server/saved_objects/routes/import.ts | 4 +- .../server/saved_objects/routes/migrate.ts | 3 +- .../routes/resolve_import_errors.ts | 5 +- .../server/saved_objects/routes/update.ts | 3 +- .../server/saved_objects/routes/utils.test.ts | 75 ------- src/core/server/saved_objects/routes/utils.ts | 34 +-- .../service/lib/decorate_es_error.test.ts | 21 -- .../service/lib/decorate_es_error.ts | 6 - .../saved_objects/service/lib/errors.ts | 17 -- .../service/lib/repository.test.js | 9 +- .../saved_objects/service/lib/repository.ts | 33 +-- src/core/server/server.api.md | 6 - .../integration_tests/doc_exists.ts | 6 +- .../integration_tests/doc_missing.ts | 6 +- .../doc_missing_and_index_read_only.ts | 12 +- .../integration_tests/index.test.ts | 13 +- .../integration_tests/lib/servers.ts | 3 + src/core/test_helpers/kbn_server.ts | 2 +- test/accessibility/apps/kibana_overview.ts | 3 +- test/api_integration/apis/home/sample_data.ts | 4 - .../apis/saved_objects/bulk_create.ts | 44 ++-- .../apis/saved_objects/bulk_get.ts | 2 +- .../apis/saved_objects/bulk_update.ts | 16 +- .../apis/saved_objects/create.ts | 48 ++++- .../apis/saved_objects/delete.ts | 2 +- .../apis/saved_objects/export.ts | 2 +- .../apis/saved_objects/find.ts | 14 +- .../api_integration/apis/saved_objects/get.ts | 2 +- .../saved_objects/resolve_import_errors.ts | 54 +---- .../apis/saved_objects/update.ts | 13 +- .../apis/saved_objects_management/find.ts | 4 +- .../apis/saved_objects_management/get.ts | 2 +- test/api_integration/apis/search/search.ts | 1 - test/api_integration/apis/telemetry/opt_in.ts | 3 - .../apis/telemetry/telemetry_local.ts | 1 - .../apis/ui_counters/ui_counters.ts | 5 - .../apis/ui_metric/ui_metric.ts | 5 - test/common/config.js | 2 + .../kibana_server/extend_es_archiver.js | 4 +- .../apps/management/_import_objects.ts | 5 +- .../apps/management/_index_pattern_filter.js | 3 +- .../apps/management/_index_patterns_empty.ts | 3 +- .../management/_mgmt_import_saved_objects.js | 3 +- .../apps/management/_test_huge_fields.js | 1 - test/functional/apps/management/index.ts | 2 + .../input_control_vis/input_control_range.ts | 2 + .../test_suites/core_plugins/applications.ts | 2 - .../test_suites/data_plugin/index_patterns.ts | 4 - .../import_warnings.ts | 7 +- .../insecure_cluster_warning.ts | 1 - .../tests/alerting/index.ts | 4 + .../apps/dashboard/_async_dashboard.ts | 2 - .../es_archives/visualize/default/data.json | 24 ++- .../reporting_without_security.config.ts | 1 + 71 files changed, 238 insertions(+), 645 deletions(-) delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md delete mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md deleted file mode 100644 index 2b897db7bba4c..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [createIndexAliasNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md) - -## SavedObjectsErrorHelpers.createIndexAliasNotFoundError() method - -Signature: - -```typescript -static createIndexAliasNotFoundError(alias: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| alias | string | | - -Returns: - -`DecoratedError` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md deleted file mode 100644 index c7e10fc42ead1..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [decorateIndexAliasNotFoundError](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md) - -## SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError() method - -Signature: - -```typescript -static decorateIndexAliasNotFoundError(error: Error, alias: string): DecoratedError; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | -| alias | string | | - -Returns: - -`DecoratedError` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md deleted file mode 100644 index 4b4ede2f77a7e..0000000000000 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsErrorHelpers](./kibana-plugin-core-server.savedobjectserrorhelpers.md) > [isGeneralError](./kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md) - -## SavedObjectsErrorHelpers.isGeneralError() method - -Signature: - -```typescript -static isGeneralError(error: Error | DecoratedError): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | DecoratedError | | - -Returns: - -`boolean` - diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md index 2dc78f2df3a83..9b69012ed5f12 100644 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectserrorhelpers.md @@ -18,7 +18,6 @@ export declare class SavedObjectsErrorHelpers | [createBadRequestError(reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.createbadrequesterror.md) | static | | | [createConflictError(type, id, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.createconflicterror.md) | static | | | [createGenericNotFoundError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.creategenericnotfounderror.md) | static | | -| [createIndexAliasNotFoundError(alias)](./kibana-plugin-core-server.savedobjectserrorhelpers.createindexaliasnotfounderror.md) | static | | | [createInvalidVersionError(versionInput)](./kibana-plugin-core-server.savedobjectserrorhelpers.createinvalidversionerror.md) | static | | | [createTooManyRequestsError(type, id)](./kibana-plugin-core-server.savedobjectserrorhelpers.createtoomanyrequestserror.md) | static | | | [createUnsupportedTypeError(type)](./kibana-plugin-core-server.savedobjectserrorhelpers.createunsupportedtypeerror.md) | static | | @@ -28,7 +27,6 @@ export declare class SavedObjectsErrorHelpers | [decorateEsUnavailableError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateesunavailableerror.md) | static | | | [decorateForbiddenError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateforbiddenerror.md) | static | | | [decorateGeneralError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorategeneralerror.md) | static | | -| [decorateIndexAliasNotFoundError(error, alias)](./kibana-plugin-core-server.savedobjectserrorhelpers.decorateindexaliasnotfounderror.md) | static | | | [decorateNotAuthorizedError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratenotauthorizederror.md) | static | | | [decorateRequestEntityTooLargeError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoraterequestentitytoolargeerror.md) | static | | | [decorateTooManyRequestsError(error, reason)](./kibana-plugin-core-server.savedobjectserrorhelpers.decoratetoomanyrequestserror.md) | static | | @@ -37,7 +35,6 @@ export declare class SavedObjectsErrorHelpers | [isEsCannotExecuteScriptError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isescannotexecutescripterror.md) | static | | | [isEsUnavailableError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isesunavailableerror.md) | static | | | [isForbiddenError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isforbiddenerror.md) | static | | -| [isGeneralError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isgeneralerror.md) | static | | | [isInvalidVersionError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isinvalidversionerror.md) | static | | | [isNotAuthorizedError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotauthorizederror.md) | static | | | [isNotFoundError(error)](./kibana-plugin-core-server.savedobjectserrorhelpers.isnotfounderror.md) | static | | diff --git a/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts b/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts index 6272d6ba00ee8..56c75c5aca419 100644 --- a/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts +++ b/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts @@ -25,6 +25,5 @@ export async function emptyKibanaIndexAction({ await cleanKibanaIndices({ client, stats, log, kibanaPluginIds }); await migrateKibanaIndex({ client, kbnClient }); - stats.createdIndex('.kibana'); - return stats.toJSON(); + return stats; } diff --git a/packages/kbn-es-archiver/src/es_archiver.ts b/packages/kbn-es-archiver/src/es_archiver.ts index 8601dedad0e27..f101c5d6867f1 100644 --- a/packages/kbn-es-archiver/src/es_archiver.ts +++ b/packages/kbn-es-archiver/src/es_archiver.ts @@ -155,7 +155,7 @@ export class EsArchiver { * @return Promise */ async emptyKibanaIndex() { - return await emptyKibanaIndexAction({ + await emptyKibanaIndexAction({ client: this.client, log: this.log, kbnClient: this.kbnClient, diff --git a/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts b/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts index 91c0bd8343a36..0459a4301cf6b 100644 --- a/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts +++ b/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts @@ -76,9 +76,7 @@ export async function migrateKibanaIndex({ */ async function fetchKibanaIndices(client: Client) { const kibanaIndices = await client.cat.indices({ index: '.kibana*', format: 'json' }); - const isKibanaIndex = (index: string) => - /^\.kibana(:?_\d*)?$/.test(index) || - /^\.kibana(_task_manager)?_(pre)?\d+\.\d+\.\d+/.test(index); + const isKibanaIndex = (index: string) => /^\.kibana(:?_\d*)?$/.test(index); return kibanaIndices.map((x: { index: string }) => x.index).filter(isKibanaIndex); } @@ -105,7 +103,7 @@ export async function cleanKibanaIndices({ while (true) { const resp = await client.deleteByQuery({ - index: `.kibana,.kibana_task_manager`, + index: `.kibana`, body: { query: { bool: { @@ -117,7 +115,7 @@ export async function cleanKibanaIndices({ }, }, }, - ignore: [404, 409], + ignore: [409], }); if (resp.total !== resp.deleted) { diff --git a/src/core/server/saved_objects/migrationsv2/model.test.ts b/src/core/server/saved_objects/migrationsv2/model.test.ts index a9aa69960b1c2..d5ab85c54a728 100644 --- a/src/core/server/saved_objects/migrationsv2/model.test.ts +++ b/src/core/server/saved_objects/migrationsv2/model.test.ts @@ -182,21 +182,6 @@ describe('migrations v2 model', () => { versionAlias: '.kibana_7.11.0', versionIndex: '.kibana_7.11.0_001', }; - const mappingsWithUnknownType = { - properties: { - disabled_saved_object_type: { - properties: { - value: { type: 'keyword' }, - }, - }, - }, - _meta: { - migrationMappingPropertyHashes: { - disabled_saved_object_type: '7997cf5a56cc02bdc9c93361bde732b0', - }, - }, - }; - test('INIT -> OUTDATED_DOCUMENTS_SEARCH if .kibana is already pointing to the target index', () => { const res: ResponseType<'INIT'> = Either.right({ '.kibana_7.11.0_001': { @@ -204,27 +189,38 @@ describe('migrations v2 model', () => { '.kibana': {}, '.kibana_7.11.0': {}, }, - mappings: mappingsWithUnknownType, + mappings: { + properties: { + disabled_saved_object_type: { + properties: { + value: { type: 'keyword' }, + }, + }, + }, + _meta: { + migrationMappingPropertyHashes: { + disabled_saved_object_type: '7997cf5a56cc02bdc9c93361bde732b0', + }, + }, + }, settings: {}, }, }); const newState = model(initState, res); expect(newState.controlState).toEqual('OUTDATED_DOCUMENTS_SEARCH'); - // This snapshot asserts that we merge the - // migrationMappingPropertyHashes of the existing index, but we leave - // the mappings for the disabled_saved_object_type untouched. There - // might be another Kibana instance that knows about this type and - // needs these mappings in place. expect(newState.targetIndexMappings).toMatchInlineSnapshot(` Object { "_meta": Object { "migrationMappingPropertyHashes": Object { - "disabled_saved_object_type": "7997cf5a56cc02bdc9c93361bde732b0", "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", }, }, "properties": Object { + "disabled_saved_object_type": Object { + "dynamic": false, + "properties": Object {}, + }, "new_saved_object_type": Object { "properties": Object { "value": Object { @@ -275,7 +271,7 @@ describe('migrations v2 model', () => { '.kibana': {}, '.kibana_7.12.0': {}, }, - mappings: mappingsWithUnknownType, + mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, settings: {}, }, '.kibana_7.11.0_001': { @@ -292,37 +288,12 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('.kibana_7.invalid.0_001'), targetIndex: '.kibana_7.11.0_001', }); - // This snapshot asserts that we disable the unknown saved object - // type. Because it's mappings are disabled, we also don't copy the - // `_meta.migrationMappingPropertyHashes` for the disabled type. - expect(newState.targetIndexMappings).toMatchInlineSnapshot(` - Object { - "_meta": Object { - "migrationMappingPropertyHashes": Object { - "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", - }, - }, - "properties": Object { - "disabled_saved_object_type": Object { - "dynamic": false, - "properties": Object {}, - }, - "new_saved_object_type": Object { - "properties": Object { - "value": Object { - "type": "text", - }, - }, - }, - }, - } - `); }); test('INIT -> SET_SOURCE_WRITE_BLOCK when migrating from a v2 migrations index (>= 7.11.0)', () => { const res: ResponseType<'INIT'> = Either.right({ '.kibana_7.11.0_001': { aliases: { '.kibana': {}, '.kibana_7.11.0': {} }, - mappings: mappingsWithUnknownType, + mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, settings: {}, }, '.kibana_3': { @@ -348,31 +319,6 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('.kibana_7.11.0_001'), targetIndex: '.kibana_7.12.0_001', }); - // This snapshot asserts that we disable the unknown saved object - // type. Because it's mappings are disabled, we also don't copy the - // `_meta.migrationMappingPropertyHashes` for the disabled type. - expect(newState.targetIndexMappings).toMatchInlineSnapshot(` - Object { - "_meta": Object { - "migrationMappingPropertyHashes": Object { - "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", - }, - }, - "properties": Object { - "disabled_saved_object_type": Object { - "dynamic": false, - "properties": Object {}, - }, - "new_saved_object_type": Object { - "properties": Object { - "value": Object { - "type": "text", - }, - }, - }, - }, - } - `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); @@ -382,7 +328,7 @@ describe('migrations v2 model', () => { aliases: { '.kibana': {}, }, - mappings: mappingsWithUnknownType, + mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, settings: {}, }, }); @@ -393,31 +339,6 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('.kibana_3'), targetIndex: '.kibana_7.11.0_001', }); - // This snapshot asserts that we disable the unknown saved object - // type. Because it's mappings are disabled, we also don't copy the - // `_meta.migrationMappingPropertyHashes` for the disabled type. - expect(newState.targetIndexMappings).toMatchInlineSnapshot(` - Object { - "_meta": Object { - "migrationMappingPropertyHashes": Object { - "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", - }, - }, - "properties": Object { - "disabled_saved_object_type": Object { - "dynamic": false, - "properties": Object {}, - }, - "new_saved_object_type": Object { - "properties": Object { - "value": Object { - "type": "text", - }, - }, - }, - }, - } - `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); @@ -425,7 +346,7 @@ describe('migrations v2 model', () => { const res: ResponseType<'INIT'> = Either.right({ '.kibana': { aliases: {}, - mappings: mappingsWithUnknownType, + mappings: { properties: {}, _meta: {} }, settings: {}, }, }); @@ -436,31 +357,6 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('.kibana_pre6.5.0_001'), targetIndex: '.kibana_7.11.0_001', }); - // This snapshot asserts that we disable the unknown saved object - // type. Because it's mappings are disabled, we also don't copy the - // `_meta.migrationMappingPropertyHashes` for the disabled type. - expect(newState.targetIndexMappings).toMatchInlineSnapshot(` - Object { - "_meta": Object { - "migrationMappingPropertyHashes": Object { - "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", - }, - }, - "properties": Object { - "disabled_saved_object_type": Object { - "dynamic": false, - "properties": Object {}, - }, - "new_saved_object_type": Object { - "properties": Object { - "value": Object { - "type": "text", - }, - }, - }, - }, - } - `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); @@ -470,7 +366,7 @@ describe('migrations v2 model', () => { aliases: { 'my-saved-objects': {}, }, - mappings: mappingsWithUnknownType, + mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, settings: {}, }, }); @@ -490,31 +386,6 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('my-saved-objects_3'), targetIndex: 'my-saved-objects_7.11.0_001', }); - // This snapshot asserts that we disable the unknown saved object - // type. Because it's mappings are disabled, we also don't copy the - // `_meta.migrationMappingPropertyHashes` for the disabled type. - expect(newState.targetIndexMappings).toMatchInlineSnapshot(` - Object { - "_meta": Object { - "migrationMappingPropertyHashes": Object { - "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", - }, - }, - "properties": Object { - "disabled_saved_object_type": Object { - "dynamic": false, - "properties": Object {}, - }, - "new_saved_object_type": Object { - "properties": Object { - "value": Object { - "type": "text", - }, - }, - }, - }, - } - `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); @@ -524,7 +395,7 @@ describe('migrations v2 model', () => { aliases: { 'my-saved-objects': {}, }, - mappings: mappingsWithUnknownType, + mappings: { properties: {}, _meta: { migrationMappingPropertyHashes: {} } }, settings: {}, }, }); @@ -545,31 +416,6 @@ describe('migrations v2 model', () => { sourceIndex: Option.some('my-saved-objects_7.11.0'), targetIndex: 'my-saved-objects_7.12.0_001', }); - // This snapshot asserts that we disable the unknown saved object - // type. Because it's mappings are disabled, we also don't copy the - // `_meta.migrationMappingPropertyHashes` for the disabled type. - expect(newState.targetIndexMappings).toMatchInlineSnapshot(` - Object { - "_meta": Object { - "migrationMappingPropertyHashes": Object { - "new_saved_object_type": "4a11183eee21e6fbad864f7a30b39ad0", - }, - }, - "properties": Object { - "disabled_saved_object_type": Object { - "dynamic": false, - "properties": Object {}, - }, - "new_saved_object_type": Object { - "properties": Object { - "value": Object { - "type": "text", - }, - }, - }, - }, - } - `); expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); diff --git a/src/core/server/saved_objects/migrationsv2/model.ts b/src/core/server/saved_objects/migrationsv2/model.ts index 3556bb611bb67..1119edde8e268 100644 --- a/src/core/server/saved_objects/migrationsv2/model.ts +++ b/src/core/server/saved_objects/migrationsv2/model.ts @@ -60,13 +60,13 @@ function throwBadResponse(state: State, res: any): never { * Merge the _meta.migrationMappingPropertyHashes mappings of an index with * the given target mappings. * - * @remarks When another instance already completed a migration, the existing - * target index might contain documents and mappings created by a plugin that - * is disabled in the current Kibana instance performing this migration. - * Mapping updates are commutative (deeply merged) by Elasticsearch, except - * for the `_meta` key. By merging the `_meta.migrationMappingPropertyHashes` - * mappings from the existing target index index into the targetMappings we - * ensure that any `migrationPropertyHashes` for disabled plugins aren't lost. + * @remarks Mapping updates are commutative (deeply merged) by Elasticsearch, + * except for the _meta key. The source index we're migrating from might + * contain documents created by a plugin that is disabled in the Kibana + * instance performing this migration. We merge the + * _meta.migrationMappingPropertyHashes mappings from the source index into + * the targetMappings to ensure that any `migrationPropertyHashes` for + * disabled plugins aren't lost. * * Right now we don't use these `migrationPropertyHashes` but it could be used * in the future to detect if mappings were changed. If mappings weren't @@ -209,7 +209,7 @@ export const model = (currentState: State, resW: ResponseType): // index sourceIndex: Option.none, targetIndex: `${stateP.indexPrefix}_${stateP.kibanaVersion}_001`, - targetIndexMappings: mergeMigrationMappingPropertyHashes( + targetIndexMappings: disableUnknownTypeMappingFields( stateP.targetIndexMappings, indices[aliases[stateP.currentAlias]].mappings ), @@ -242,7 +242,7 @@ export const model = (currentState: State, resW: ResponseType): controlState: 'SET_SOURCE_WRITE_BLOCK', sourceIndex: Option.some(source) as Option.Some, targetIndex: target, - targetIndexMappings: disableUnknownTypeMappingFields( + targetIndexMappings: mergeMigrationMappingPropertyHashes( stateP.targetIndexMappings, indices[source].mappings ), @@ -279,7 +279,7 @@ export const model = (currentState: State, resW: ResponseType): controlState: 'LEGACY_SET_WRITE_BLOCK', sourceIndex: Option.some(legacyReindexTarget) as Option.Some, targetIndex: target, - targetIndexMappings: disableUnknownTypeMappingFields( + targetIndexMappings: mergeMigrationMappingPropertyHashes( stateP.targetIndexMappings, indices[stateP.legacyIndex].mappings ), diff --git a/src/core/server/saved_objects/routes/bulk_create.ts b/src/core/server/saved_objects/routes/bulk_create.ts index b85747985e523..6d57eaa3777e6 100644 --- a/src/core/server/saved_objects/routes/bulk_create.ts +++ b/src/core/server/saved_objects/routes/bulk_create.ts @@ -9,7 +9,6 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; -import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -45,7 +44,7 @@ export const registerBulkCreateRoute = (router: IRouter, { coreUsageData }: Rout ), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const { overwrite } = req.query; const usageStatsClient = coreUsageData.getClient(); diff --git a/src/core/server/saved_objects/routes/bulk_get.ts b/src/core/server/saved_objects/routes/bulk_get.ts index 580bf26a4e529..a260301633668 100644 --- a/src/core/server/saved_objects/routes/bulk_get.ts +++ b/src/core/server/saved_objects/routes/bulk_get.ts @@ -9,7 +9,6 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; -import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -29,7 +28,7 @@ export const registerBulkGetRoute = (router: IRouter, { coreUsageData }: RouteDe ), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const usageStatsClient = coreUsageData.getClient(); usageStatsClient.incrementSavedObjectsBulkGet({ request: req }).catch(() => {}); diff --git a/src/core/server/saved_objects/routes/bulk_update.ts b/src/core/server/saved_objects/routes/bulk_update.ts index e592adc72a244..f9b8d4a2f567f 100644 --- a/src/core/server/saved_objects/routes/bulk_update.ts +++ b/src/core/server/saved_objects/routes/bulk_update.ts @@ -9,7 +9,6 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; -import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -40,7 +39,7 @@ export const registerBulkUpdateRoute = (router: IRouter, { coreUsageData }: Rout ), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const usageStatsClient = coreUsageData.getClient(); usageStatsClient.incrementSavedObjectsBulkUpdate({ request: req }).catch(() => {}); diff --git a/src/core/server/saved_objects/routes/create.ts b/src/core/server/saved_objects/routes/create.ts index f6043ca96398d..fd256abac3526 100644 --- a/src/core/server/saved_objects/routes/create.ts +++ b/src/core/server/saved_objects/routes/create.ts @@ -9,7 +9,6 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; -import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -44,7 +43,7 @@ export const registerCreateRoute = (router: IRouter, { coreUsageData }: RouteDep }), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const { type, id } = req.params; const { overwrite } = req.query; const { diff --git a/src/core/server/saved_objects/routes/delete.ts b/src/core/server/saved_objects/routes/delete.ts index b127f64b74a0c..a7846c3dc845b 100644 --- a/src/core/server/saved_objects/routes/delete.ts +++ b/src/core/server/saved_objects/routes/delete.ts @@ -9,7 +9,6 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; -import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -29,7 +28,7 @@ export const registerDeleteRoute = (router: IRouter, { coreUsageData }: RouteDep }), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const { type, id } = req.params; const { force } = req.query; diff --git a/src/core/server/saved_objects/routes/export.ts b/src/core/server/saved_objects/routes/export.ts index f064cf1ca0ec1..9b40855afec2e 100644 --- a/src/core/server/saved_objects/routes/export.ts +++ b/src/core/server/saved_objects/routes/export.ts @@ -18,7 +18,7 @@ import { SavedObjectsExportByObjectOptions, SavedObjectsExportError, } from '../export'; -import { validateTypes, validateObjects, catchAndReturnBoomErrors } from './utils'; +import { validateTypes, validateObjects } from './utils'; interface RouteDependencies { config: SavedObjectConfig; @@ -163,7 +163,7 @@ export const registerExportRoute = ( }), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const cleaned = cleanOptions(req.body); const supportedTypes = context.core.savedObjects.typeRegistry .getImportableAndExportableTypes() diff --git a/src/core/server/saved_objects/routes/find.ts b/src/core/server/saved_objects/routes/find.ts index c814fd310dc52..747070e54e5ad 100644 --- a/src/core/server/saved_objects/routes/find.ts +++ b/src/core/server/saved_objects/routes/find.ts @@ -9,7 +9,6 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; -import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -50,7 +49,7 @@ export const registerFindRoute = (router: IRouter, { coreUsageData }: RouteDepen }), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const query = req.query; const namespaces = diff --git a/src/core/server/saved_objects/routes/get.ts b/src/core/server/saved_objects/routes/get.ts index 2dd812f35cefd..c66a11dcf0cdd 100644 --- a/src/core/server/saved_objects/routes/get.ts +++ b/src/core/server/saved_objects/routes/get.ts @@ -9,7 +9,6 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; -import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -26,7 +25,7 @@ export const registerGetRoute = (router: IRouter, { coreUsageData }: RouteDepend }), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const { type, id } = req.params; const usageStatsClient = coreUsageData.getClient(); diff --git a/src/core/server/saved_objects/routes/import.ts b/src/core/server/saved_objects/routes/import.ts index 5fd132acafbed..6c4c759460ce3 100644 --- a/src/core/server/saved_objects/routes/import.ts +++ b/src/core/server/saved_objects/routes/import.ts @@ -13,7 +13,7 @@ import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; import { SavedObjectConfig } from '../saved_objects_config'; import { SavedObjectsImportError } from '../import'; -import { catchAndReturnBoomErrors, createSavedObjectsStreamFromNdJson } from './utils'; +import { createSavedObjectsStreamFromNdJson } from './utils'; interface RouteDependencies { config: SavedObjectConfig; @@ -61,7 +61,7 @@ export const registerImportRoute = ( }), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const { overwrite, createNewCopies } = req.query; const usageStatsClient = coreUsageData.getClient(); diff --git a/src/core/server/saved_objects/routes/migrate.ts b/src/core/server/saved_objects/routes/migrate.ts index 7c2f4bfb06710..8b347d4725b08 100644 --- a/src/core/server/saved_objects/routes/migrate.ts +++ b/src/core/server/saved_objects/routes/migrate.ts @@ -8,7 +8,6 @@ import { IRouter } from '../../http'; import { IKibanaMigrator } from '../migrations'; -import { catchAndReturnBoomErrors } from './utils'; export const registerMigrateRoute = ( router: IRouter, @@ -22,7 +21,7 @@ export const registerMigrateRoute = ( tags: ['access:migrateSavedObjects'], }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const migrator = await migratorPromise; await migrator.runMigrations({ rerun: true }); return res.ok({ diff --git a/src/core/server/saved_objects/routes/resolve_import_errors.ts b/src/core/server/saved_objects/routes/resolve_import_errors.ts index 6f0a3d028baf9..0cf976c30b311 100644 --- a/src/core/server/saved_objects/routes/resolve_import_errors.ts +++ b/src/core/server/saved_objects/routes/resolve_import_errors.ts @@ -13,7 +13,8 @@ import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; import { SavedObjectConfig } from '../saved_objects_config'; import { SavedObjectsImportError } from '../import'; -import { catchAndReturnBoomErrors, createSavedObjectsStreamFromNdJson } from './utils'; +import { createSavedObjectsStreamFromNdJson } from './utils'; + interface RouteDependencies { config: SavedObjectConfig; coreUsageData: CoreUsageDataSetup; @@ -68,7 +69,7 @@ export const registerResolveImportErrorsRoute = ( }), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const { createNewCopies } = req.query; const usageStatsClient = coreUsageData.getClient(); diff --git a/src/core/server/saved_objects/routes/update.ts b/src/core/server/saved_objects/routes/update.ts index dbc69f743df76..17cfd438d47bf 100644 --- a/src/core/server/saved_objects/routes/update.ts +++ b/src/core/server/saved_objects/routes/update.ts @@ -9,7 +9,6 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from '../../http'; import { CoreUsageDataSetup } from '../../core_usage_data'; -import { catchAndReturnBoomErrors } from './utils'; interface RouteDependencies { coreUsageData: CoreUsageDataSetup; @@ -39,7 +38,7 @@ export const registerUpdateRoute = (router: IRouter, { coreUsageData }: RouteDep }), }, }, - catchAndReturnBoomErrors(async (context, req, res) => { + router.handleLegacyErrors(async (context, req, res) => { const { type, id } = req.params; const { attributes, version, references } = req.body; const options = { version, references }; diff --git a/src/core/server/saved_objects/routes/utils.test.ts b/src/core/server/saved_objects/routes/utils.test.ts index 1d7e86e288b18..ade7b03f6a8c2 100644 --- a/src/core/server/saved_objects/routes/utils.test.ts +++ b/src/core/server/saved_objects/routes/utils.test.ts @@ -9,15 +9,6 @@ import { createSavedObjectsStreamFromNdJson, validateTypes, validateObjects } from './utils'; import { Readable } from 'stream'; import { createPromiseFromStreams, createConcatStream } from '@kbn/utils'; -import { catchAndReturnBoomErrors } from './utils'; -import Boom from '@hapi/boom'; -import { - KibanaRequest, - RequestHandler, - RequestHandlerContext, - KibanaResponseFactory, - kibanaResponseFactory, -} from '../../'; async function readStreamToCompletion(stream: Readable) { return createPromiseFromStreams([stream, createConcatStream([])]); @@ -152,69 +143,3 @@ describe('validateObjects', () => { ).toBeUndefined(); }); }); - -describe('catchAndReturnBoomErrors', () => { - let context: RequestHandlerContext; - let request: KibanaRequest; - let response: KibanaResponseFactory; - - const createHandler = (handler: () => any): RequestHandler => () => { - return handler(); - }; - - beforeEach(() => { - context = {} as any; - request = {} as any; - response = kibanaResponseFactory; - }); - - it('should pass-though call parameters to the handler', async () => { - const handler = jest.fn(); - const wrapped = catchAndReturnBoomErrors(handler); - await wrapped(context, request, response); - expect(handler).toHaveBeenCalledWith(context, request, response); - }); - - it('should pass-though result from the handler', async () => { - const handler = createHandler(() => { - return 'handler-response'; - }); - const wrapped = catchAndReturnBoomErrors(handler); - const result = await wrapped(context, request, response); - expect(result).toBe('handler-response'); - }); - - it('should intercept and convert thrown Boom errors', async () => { - const handler = createHandler(() => { - throw Boom.notFound('not there'); - }); - const wrapped = catchAndReturnBoomErrors(handler); - const result = await wrapped(context, request, response); - expect(result.status).toBe(404); - expect(result.payload).toEqual({ - error: 'Not Found', - message: 'not there', - statusCode: 404, - }); - }); - - it('should re-throw non-Boom errors', async () => { - const handler = createHandler(() => { - throw new Error('something went bad'); - }); - const wrapped = catchAndReturnBoomErrors(handler); - await expect(wrapped(context, request, response)).rejects.toMatchInlineSnapshot( - `[Error: something went bad]` - ); - }); - - it('should re-throw Boom internal/500 errors', async () => { - const handler = createHandler(() => { - throw Boom.internal(); - }); - const wrapped = catchAndReturnBoomErrors(handler); - await expect(wrapped(context, request, response)).rejects.toMatchInlineSnapshot( - `[Error: Internal Server Error]` - ); - }); -}); diff --git a/src/core/server/saved_objects/routes/utils.ts b/src/core/server/saved_objects/routes/utils.ts index 269f3f0698561..b9e7df48a4b4c 100644 --- a/src/core/server/saved_objects/routes/utils.ts +++ b/src/core/server/saved_objects/routes/utils.ts @@ -7,11 +7,7 @@ */ import { Readable } from 'stream'; -import { - RequestHandlerWrapper, - SavedObject, - SavedObjectsExportResultDetails, -} from 'src/core/server'; +import { SavedObject, SavedObjectsExportResultDetails } from 'src/core/server'; import { createSplitStream, createMapStream, @@ -20,7 +16,6 @@ import { createListStream, createConcatStream, } from '@kbn/utils'; -import Boom from '@hapi/boom'; export async function createSavedObjectsStreamFromNdJson(ndJsonStream: Readable) { const savedObjects = await createPromiseFromStreams([ @@ -57,30 +52,3 @@ export function validateObjects( .join(', ')}`; } } - -/** - * Catches errors thrown by saved object route handlers and returns an error - * with the payload and statusCode of the boom error. - * - * This is very close to the core `router.handleLegacyErrors` except that it - * throws internal errors (statusCode: 500) so that the internal error's - * message get logged by Core. - * - * TODO: Remove once https://github.com/elastic/kibana/issues/65291 is fixed. - */ -export const catchAndReturnBoomErrors: RequestHandlerWrapper = (handler) => { - return async (context, request, response) => { - try { - return await handler(context, request, response); - } catch (e) { - if (Boom.isBoom(e) && e.output.statusCode !== 500) { - return response.customError({ - body: e.output.payload, - statusCode: e.output.statusCode, - headers: e.output.headers as { [key: string]: string }, - }); - } - throw e; - } - }; -}; diff --git a/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts b/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts index da1ebec2c0f7d..cc497ca6348b8 100644 --- a/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts +++ b/src/core/server/saved_objects/service/lib/decorate_es_error.test.ts @@ -109,27 +109,6 @@ describe('savedObjectsClient/decorateEsError', () => { expect(SavedObjectsErrorHelpers.isNotFoundError(genericError)).toBe(true); }); - it('if saved objects index does not exist makes NotFound a SavedObjectsClient/generalError', () => { - const error = new esErrors.ResponseError( - elasticsearchClientMock.createApiResponse({ - statusCode: 404, - body: { - error: { - reason: - 'no such index [.kibana_8.0.0] and [require_alias] request flag is [true] and [.kibana_8.0.0] is not an alias', - }, - }, - }) - ); - expect(SavedObjectsErrorHelpers.isGeneralError(error)).toBe(false); - const genericError = decorateEsError(error); - expect(genericError.message).toEqual( - `Saved object index alias [.kibana_8.0.0] not found: Response Error` - ); - expect(genericError.output.statusCode).toBe(500); - expect(SavedObjectsErrorHelpers.isGeneralError(error)).toBe(true); - }); - it('makes BadRequest a SavedObjectsClient/BadRequest error', () => { const error = new esErrors.ResponseError( elasticsearchClientMock.createApiResponse({ statusCode: 400 }) diff --git a/src/core/server/saved_objects/service/lib/decorate_es_error.ts b/src/core/server/saved_objects/service/lib/decorate_es_error.ts index aabca2d602cb3..40f18c9c94c25 100644 --- a/src/core/server/saved_objects/service/lib/decorate_es_error.ts +++ b/src/core/server/saved_objects/service/lib/decorate_es_error.ts @@ -63,12 +63,6 @@ export function decorateEsError(error: EsErrors) { } if (responseErrors.isNotFound(error.statusCode)) { - const match = error?.meta?.body?.error?.reason?.match( - /no such index \[(.+)\] and \[require_alias\] request flag is \[true\] and \[.+\] is not an alias/ - ); - if (match?.length > 0) { - return SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError(error, match[1]); - } return SavedObjectsErrorHelpers.createGenericNotFoundError(); } diff --git a/src/core/server/saved_objects/service/lib/errors.ts b/src/core/server/saved_objects/service/lib/errors.ts index c348196aaba21..f216e72efbcf8 100644 --- a/src/core/server/saved_objects/service/lib/errors.ts +++ b/src/core/server/saved_objects/service/lib/errors.ts @@ -135,19 +135,6 @@ export class SavedObjectsErrorHelpers { return decorate(Boom.notFound(), CODE_NOT_FOUND, 404); } - public static createIndexAliasNotFoundError(alias: string) { - return SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError(Boom.internal(), alias); - } - - public static decorateIndexAliasNotFoundError(error: Error, alias: string) { - return decorate( - error, - CODE_GENERAL_ERROR, - 500, - `Saved object index alias [${alias}] not found` - ); - } - public static isNotFoundError(error: Error | DecoratedError) { return isSavedObjectsClientError(error) && error[code] === CODE_NOT_FOUND; } @@ -198,8 +185,4 @@ export class SavedObjectsErrorHelpers { public static decorateGeneralError(error: Error, reason?: string) { return decorate(error, CODE_GENERAL_ERROR, 500, reason); } - - public static isGeneralError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_GENERAL_ERROR; - } } diff --git a/src/core/server/saved_objects/service/lib/repository.test.js b/src/core/server/saved_objects/service/lib/repository.test.js index 68fdea0f9eb25..216e1c4bd2d3c 100644 --- a/src/core/server/saved_objects/service/lib/repository.test.js +++ b/src/core/server/saved_objects/service/lib/repository.test.js @@ -18,7 +18,6 @@ import { DocumentMigrator } from '../../migrations/core/document_migrator'; import { mockKibanaMigrator } from '../../migrations/kibana/kibana_migrator.mock'; import { elasticsearchClientMock } from '../../../elasticsearch/client/mocks'; import { esKuery } from '../../es_query'; -import { errors as EsErrors } from '@elastic/elasticsearch'; const { nodeTypes } = esKuery; jest.mock('./search_dsl/search_dsl', () => ({ getSearchDsl: jest.fn() })); @@ -4342,14 +4341,8 @@ describe('SavedObjectsRepository', () => { }); it(`throws when ES is unable to find the document during update`, async () => { - const notFoundError = new EsErrors.ResponseError( - elasticsearchClientMock.createApiResponse({ - statusCode: 404, - body: { error: { type: 'es_type', reason: 'es_reason' } }, - }) - ); client.update.mockResolvedValueOnce( - elasticsearchClientMock.createErrorTransportRequestPromise(notFoundError) + elasticsearchClientMock.createSuccessTransportRequestPromise({}, { statusCode: 404 }) ); await expectNotFoundError(type, id); expect(client.update).toHaveBeenCalledTimes(1); diff --git a/src/core/server/saved_objects/service/lib/repository.ts b/src/core/server/saved_objects/service/lib/repository.ts index da80971635a93..2993d4234bd2e 100644 --- a/src/core/server/saved_objects/service/lib/repository.ts +++ b/src/core/server/saved_objects/service/lib/repository.ts @@ -299,7 +299,6 @@ export class SavedObjectsRepository { refresh, body: raw._source, ...(overwrite && version ? decodeRequestVersion(version) : {}), - require_alias: true, }; const { body } = @@ -470,7 +469,6 @@ export class SavedObjectsRepository { const bulkResponse = bulkCreateParams.length ? await this.client.bulk({ refresh, - require_alias: true, body: bulkCreateParams, }) : undefined; @@ -1119,8 +1117,8 @@ export class SavedObjectsRepository { ...(Array.isArray(references) && { references }), }; - const { body } = await this.client - .update({ + const { body, statusCode } = await this.client.update( + { id: this._serializer.generateRawId(namespace, type, id), index: this.getIndexForType(type), ...getExpectedVersionProperties(version, preflightResult), @@ -1130,15 +1128,14 @@ export class SavedObjectsRepository { doc, }, _source_includes: ['namespace', 'namespaces', 'originId'], - require_alias: true, - }) - .catch((err) => { - if (SavedObjectsErrorHelpers.isNotFoundError(err)) { - // see "404s from missing index" above - throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id); - } - throw err; - }); + }, + { ignore: [404] } + ); + + if (statusCode === 404) { + // see "404s from missing index" above + throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id); + } const { originId } = body.get._source; let namespaces = []; @@ -1499,7 +1496,6 @@ export class SavedObjectsRepository { refresh, body: bulkUpdateParams, _source_includes: ['originId'], - require_alias: true, }) : undefined; @@ -1716,7 +1712,6 @@ export class SavedObjectsRepository { id: raw._id, index: this.getIndexForType(type), refresh, - require_alias: true, _source: 'true', body: { script: { @@ -1938,18 +1933,12 @@ export class SavedObjectsRepository { } } -function getBulkOperationError( - error: { type: string; reason?: string; index?: string }, - type: string, - id: string -) { +function getBulkOperationError(error: { type: string; reason?: string }, type: string, id: string) { switch (error.type) { case 'version_conflict_engine_exception': return errorContent(SavedObjectsErrorHelpers.createConflictError(type, id)); case 'document_missing_exception': return errorContent(SavedObjectsErrorHelpers.createGenericNotFoundError(type, id)); - case 'index_not_found_exception': - return errorContent(SavedObjectsErrorHelpers.createIndexAliasNotFoundError(error.index!)); default: return { message: error.reason || JSON.stringify(error), diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index f3191c5625f8d..40a12290be31b 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -2335,8 +2335,6 @@ export class SavedObjectsErrorHelpers { // (undocumented) static createGenericNotFoundError(type?: string | null, id?: string | null): DecoratedError; // (undocumented) - static createIndexAliasNotFoundError(alias: string): DecoratedError; - // (undocumented) static createInvalidVersionError(versionInput?: string): DecoratedError; // (undocumented) static createTooManyRequestsError(type: string, id: string): DecoratedError; @@ -2355,8 +2353,6 @@ export class SavedObjectsErrorHelpers { // (undocumented) static decorateGeneralError(error: Error, reason?: string): DecoratedError; // (undocumented) - static decorateIndexAliasNotFoundError(error: Error, alias: string): DecoratedError; - // (undocumented) static decorateNotAuthorizedError(error: Error, reason?: string): DecoratedError; // (undocumented) static decorateRequestEntityTooLargeError(error: Error, reason?: string): DecoratedError; @@ -2373,8 +2369,6 @@ export class SavedObjectsErrorHelpers { // (undocumented) static isForbiddenError(error: Error | DecoratedError): boolean; // (undocumented) - static isGeneralError(error: Error | DecoratedError): boolean; - // (undocumented) static isInvalidVersionError(error: Error | DecoratedError): boolean; // (undocumented) static isNotAuthorizedError(error: Error | DecoratedError): boolean; diff --git a/src/core/server/ui_settings/integration_tests/doc_exists.ts b/src/core/server/ui_settings/integration_tests/doc_exists.ts index d100b89af9609..aa6f98ddf2d03 100644 --- a/src/core/server/ui_settings/integration_tests/doc_exists.ts +++ b/src/core/server/ui_settings/integration_tests/doc_exists.ts @@ -8,7 +8,7 @@ import { getServices, chance } from './lib'; -export const docExistsSuite = (savedObjectsIndex: string) => () => { +export function docExistsSuite() { async function setup(options: any = {}) { const { initialSettings } = options; @@ -16,7 +16,7 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { // delete the kibana index to ensure we start fresh await callCluster('deleteByQuery', { - index: savedObjectsIndex, + index: kbnServer.config.get('kibana.index'), body: { conflicts: 'proceed', query: { match_all: {} }, @@ -212,4 +212,4 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { }); }); }); -}; +} diff --git a/src/core/server/ui_settings/integration_tests/doc_missing.ts b/src/core/server/ui_settings/integration_tests/doc_missing.ts index 822ffe398b87d..501976e3823f1 100644 --- a/src/core/server/ui_settings/integration_tests/doc_missing.ts +++ b/src/core/server/ui_settings/integration_tests/doc_missing.ts @@ -8,7 +8,7 @@ import { getServices, chance } from './lib'; -export const docMissingSuite = (savedObjectsIndex: string) => () => { +export function docMissingSuite() { // ensure the kibana index has no documents beforeEach(async () => { const { kbnServer, callCluster } = getServices(); @@ -22,7 +22,7 @@ export const docMissingSuite = (savedObjectsIndex: string) => () => { // delete all docs from kibana index to ensure savedConfig is not found await callCluster('deleteByQuery', { - index: savedObjectsIndex, + index: kbnServer.config.get('kibana.index'), body: { query: { match_all: {} }, }, @@ -136,4 +136,4 @@ export const docMissingSuite = (savedObjectsIndex: string) => () => { }); }); }); -}; +} diff --git a/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts b/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts index 997d51e36abdc..b2ff1b2f1d4ab 100644 --- a/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts +++ b/src/core/server/ui_settings/integration_tests/doc_missing_and_index_read_only.ts @@ -8,7 +8,7 @@ import { getServices, chance } from './lib'; -export const docMissingAndIndexReadOnlySuite = (savedObjectsIndex: string) => () => { +export function docMissingAndIndexReadOnlySuite() { // ensure the kibana index has no documents beforeEach(async () => { const { kbnServer, callCluster } = getServices(); @@ -22,7 +22,7 @@ export const docMissingAndIndexReadOnlySuite = (savedObjectsIndex: string) => () // delete all docs from kibana index to ensure savedConfig is not found await callCluster('deleteByQuery', { - index: savedObjectsIndex, + index: kbnServer.config.get('kibana.index'), body: { query: { match_all: {} }, }, @@ -30,7 +30,7 @@ export const docMissingAndIndexReadOnlySuite = (savedObjectsIndex: string) => () // set the index to read only await callCluster('indices.putSettings', { - index: savedObjectsIndex, + index: kbnServer.config.get('kibana.index'), body: { index: { blocks: { @@ -42,11 +42,11 @@ export const docMissingAndIndexReadOnlySuite = (savedObjectsIndex: string) => () }); afterEach(async () => { - const { callCluster } = getServices(); + const { kbnServer, callCluster } = getServices(); // disable the read only block await callCluster('indices.putSettings', { - index: savedObjectsIndex, + index: kbnServer.config.get('kibana.index'), body: { index: { blocks: { @@ -142,4 +142,4 @@ export const docMissingAndIndexReadOnlySuite = (savedObjectsIndex: string) => () }); }); }); -}; +} diff --git a/src/core/server/ui_settings/integration_tests/index.test.ts b/src/core/server/ui_settings/integration_tests/index.test.ts index e27e6c4e46874..f415f1d73de7d 100644 --- a/src/core/server/ui_settings/integration_tests/index.test.ts +++ b/src/core/server/ui_settings/integration_tests/index.test.ts @@ -6,25 +6,20 @@ * Public License, v 1. */ -import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/dev-utils'; -import { getEnvOptions } from '@kbn/config/target/mocks'; import { startServers, stopServers } from './lib'; + import { docExistsSuite } from './doc_exists'; import { docMissingSuite } from './doc_missing'; import { docMissingAndIndexReadOnlySuite } from './doc_missing_and_index_read_only'; -const kibanaVersion = Env.createDefault(REPO_ROOT, getEnvOptions()).packageInfo.version; -const savedObjectIndex = `.kibana_${kibanaVersion}_001`; - describe('uiSettings/routes', function () { jest.setTimeout(10000); beforeAll(startServers); /* eslint-disable jest/valid-describe */ - describe('doc missing', docMissingSuite(savedObjectIndex)); - describe('doc missing and index readonly', docMissingAndIndexReadOnlySuite(savedObjectIndex)); - describe('doc exists', docExistsSuite(savedObjectIndex)); + describe('doc missing', docMissingSuite); + describe('doc missing and index readonly', docMissingAndIndexReadOnlySuite); + describe('doc exists', docExistsSuite); /* eslint-enable jest/valid-describe */ afterAll(stopServers); }); diff --git a/src/core/server/ui_settings/integration_tests/lib/servers.ts b/src/core/server/ui_settings/integration_tests/lib/servers.ts index f181272030ae1..b5198b19007d0 100644 --- a/src/core/server/ui_settings/integration_tests/lib/servers.ts +++ b/src/core/server/ui_settings/integration_tests/lib/servers.ts @@ -37,6 +37,9 @@ export async function startServers() { adjustTimeout: (t) => jest.setTimeout(t), settings: { kbn: { + migrations: { + enableV2: false, + }, uiSettings: { overrides: { foo: 'bar', diff --git a/src/core/test_helpers/kbn_server.ts b/src/core/test_helpers/kbn_server.ts index 6fe6819a0981a..0007e1fcca0a5 100644 --- a/src/core/test_helpers/kbn_server.ts +++ b/src/core/test_helpers/kbn_server.ts @@ -40,7 +40,7 @@ const DEFAULTS_SETTINGS = { }, logging: { silent: true }, plugins: {}, - migrations: { skip: false }, + migrations: { skip: true }, }; const DEFAULT_SETTINGS_WITH_CORE_PLUGINS = { diff --git a/test/accessibility/apps/kibana_overview.ts b/test/accessibility/apps/kibana_overview.ts index eb0b54ad07aa7..c26a042b10e72 100644 --- a/test/accessibility/apps/kibana_overview.ts +++ b/test/accessibility/apps/kibana_overview.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); before(async () => { - await esArchiver.emptyKibanaIndex(); + await esArchiver.load('empty_kibana'); await PageObjects.common.navigateToApp('kibanaOverview'); }); @@ -25,6 +25,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { useActualUrl: true, }); await PageObjects.home.removeSampleDataSet('flights'); + await esArchiver.unload('empty_kibana'); }); it('Getting started view', async () => { diff --git a/test/api_integration/apis/home/sample_data.ts b/test/api_integration/apis/home/sample_data.ts index ebda93b12dc20..042aff1375267 100644 --- a/test/api_integration/apis/home/sample_data.ts +++ b/test/api_integration/apis/home/sample_data.ts @@ -11,15 +11,11 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); - const esArchiver = getService('esArchiver'); const es = getService('es'); const MILLISECOND_IN_WEEK = 1000 * 60 * 60 * 24 * 7; describe('sample data apis', () => { - before(async () => { - await esArchiver.emptyKibanaIndex(); - }); describe('list', () => { it('should return list of sample data sets with installed status', async () => { const resp = await supertest.get(`/api/sample_data`).set('kbn-xsrf', 'kibana').expect(200); diff --git a/test/api_integration/apis/saved_objects/bulk_create.ts b/test/api_integration/apis/saved_objects/bulk_create.ts index d7cdee16214a8..a548172365b07 100644 --- a/test/api_integration/apis/saved_objects/bulk_create.ts +++ b/test/api_integration/apis/saved_objects/bulk_create.ts @@ -97,11 +97,10 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); - it('should return 200 with errors', async () => { - await new Promise((resolve) => setTimeout(resolve, 2000)); + it('should return 200 with individual responses', async () => await supertest .post('/api/saved_objects/_bulk_create') .send(BULK_REQUESTS) @@ -110,27 +109,38 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.body).to.eql({ saved_objects: [ { - id: BULK_REQUESTS[0].id, - type: BULK_REQUESTS[0].type, - error: { - error: 'Internal Server Error', - message: 'An internal server error occurred', - statusCode: 500, + type: 'visualization', + id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', + updated_at: resp.body.saved_objects[0].updated_at, + version: resp.body.saved_objects[0].version, + attributes: { + title: 'An existing visualization', + }, + references: [], + namespaces: ['default'], + migrationVersion: { + visualization: resp.body.saved_objects[0].migrationVersion.visualization, }, + coreMigrationVersion: KIBANA_VERSION, // updated from 1.2.3 to the latest kibana version }, { - id: BULK_REQUESTS[1].id, - type: BULK_REQUESTS[1].type, - error: { - error: 'Internal Server Error', - message: 'An internal server error occurred', - statusCode: 500, + type: 'dashboard', + id: 'a01b2f57-fcfd-4864-b735-09e28f0d815e', + updated_at: resp.body.saved_objects[1].updated_at, + version: resp.body.saved_objects[1].version, + attributes: { + title: 'A great new dashboard', }, + references: [], + namespaces: ['default'], + migrationVersion: { + dashboard: resp.body.saved_objects[1].migrationVersion.dashboard, + }, + coreMigrationVersion: KIBANA_VERSION, }, ], }); - }); - }); + })); }); }); } diff --git a/test/api_integration/apis/saved_objects/bulk_get.ts b/test/api_integration/apis/saved_objects/bulk_get.ts index b9536843d30c9..46631225f8e8a 100644 --- a/test/api_integration/apis/saved_objects/bulk_get.ts +++ b/test/api_integration/apis/saved_objects/bulk_get.ts @@ -108,7 +108,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); it('should return 200 with individual responses', async () => diff --git a/test/api_integration/apis/saved_objects/bulk_update.ts b/test/api_integration/apis/saved_objects/bulk_update.ts index 2cf3ade406a93..5a2496b6dde81 100644 --- a/test/api_integration/apis/saved_objects/bulk_update.ts +++ b/test/api_integration/apis/saved_objects/bulk_update.ts @@ -235,10 +235,10 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); - it('should return 200 with errors', async () => { + it('should return generic 404', async () => { const response = await supertest .put(`/api/saved_objects/_bulk_update`) .send([ @@ -267,9 +267,9 @@ export default function ({ getService }: FtrProviderContext) { id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', type: 'visualization', error: { - statusCode: 500, - error: 'Internal Server Error', - message: 'An internal server error occurred', + statusCode: 404, + error: 'Not Found', + message: 'Saved object [visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab] not found', }, }); @@ -277,9 +277,9 @@ export default function ({ getService }: FtrProviderContext) { id: 'be3733a0-9efe-11e7-acb3-3dab96693fab', type: 'dashboard', error: { - statusCode: 500, - error: 'Internal Server Error', - message: 'An internal server error occurred', + statusCode: 404, + error: 'Not Found', + message: 'Saved object [dashboard/be3733a0-9efe-11e7-acb3-3dab96693fab] not found', }, }); }); diff --git a/test/api_integration/apis/saved_objects/create.ts b/test/api_integration/apis/saved_objects/create.ts index 833cb127d0023..551e082630e8f 100644 --- a/test/api_integration/apis/saved_objects/create.ts +++ b/test/api_integration/apis/saved_objects/create.ts @@ -82,10 +82,10 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); - it('should return 500 and not auto-create saved objects index', async () => { + it('should return 200 and create kibana index', async () => { await supertest .post(`/api/saved_objects/visualization`) .send({ @@ -93,16 +93,50 @@ export default function ({ getService }: FtrProviderContext) { title: 'My favorite vis', }, }) - .expect(500) + .expect(200) .then((resp) => { + // loose uuid validation + expect(resp.body) + .to.have.property('id') + .match(/^[0-9a-f-]{36}$/); + + // loose ISO8601 UTC time with milliseconds validation + expect(resp.body) + .to.have.property('updated_at') + .match(/^[\d-]{10}T[\d:\.]{12}Z$/); + expect(resp.body).to.eql({ - error: 'Internal Server Error', - message: 'An internal server error occurred.', - statusCode: 500, + id: resp.body.id, + type: 'visualization', + migrationVersion: resp.body.migrationVersion, + coreMigrationVersion: KIBANA_VERSION, + updated_at: resp.body.updated_at, + version: resp.body.version, + attributes: { + title: 'My favorite vis', + }, + references: [], + namespaces: ['default'], }); + expect(resp.body.migrationVersion).to.be.ok(); }); - expect((await es.indices.exists({ index: '.kibana' })).body).to.be(false); + expect((await es.indices.exists({ index: '.kibana' })).body).to.be(true); + }); + + it('result should have the latest coreMigrationVersion', async () => { + await supertest + .post(`/api/saved_objects/visualization`) + .send({ + attributes: { + title: 'My favorite vis', + }, + coreMigrationVersion: '1.2.3', + }) + .expect(200) + .then((resp) => { + expect(resp.body.coreMigrationVersion).to.eql(KIBANA_VERSION); + }); }); }); }); diff --git a/test/api_integration/apis/saved_objects/delete.ts b/test/api_integration/apis/saved_objects/delete.ts index d2dd4454bdf1e..9ba51b4b91468 100644 --- a/test/api_integration/apis/saved_objects/delete.ts +++ b/test/api_integration/apis/saved_objects/delete.ts @@ -44,7 +44,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); it('returns generic 404 when kibana index is missing', async () => diff --git a/test/api_integration/apis/saved_objects/export.ts b/test/api_integration/apis/saved_objects/export.ts index c0d5430070951..a45191f24d872 100644 --- a/test/api_integration/apis/saved_objects/export.ts +++ b/test/api_integration/apis/saved_objects/export.ts @@ -534,7 +534,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); it('should return empty response', async () => { diff --git a/test/api_integration/apis/saved_objects/find.ts b/test/api_integration/apis/saved_objects/find.ts index 5f549dc6c5780..7aa4de86baa69 100644 --- a/test/api_integration/apis/saved_objects/find.ts +++ b/test/api_integration/apis/saved_objects/find.ts @@ -40,7 +40,7 @@ export default function ({ getService }: FtrProviderContext) { { type: 'visualization', id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - version: 'WzE4LDJd', + version: 'WzIsMV0=', attributes: { title: 'Count of requests', }, @@ -137,7 +137,7 @@ export default function ({ getService }: FtrProviderContext) { { type: 'visualization', id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - version: 'WzE4LDJd', + version: 'WzIsMV0=', attributes: { title: 'Count of requests', }, @@ -174,7 +174,7 @@ export default function ({ getService }: FtrProviderContext) { { type: 'visualization', id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - version: 'WzE4LDJd', + version: 'WzIsMV0=', attributes: { title: 'Count of requests', }, @@ -209,7 +209,7 @@ export default function ({ getService }: FtrProviderContext) { score: 0, type: 'visualization', updated_at: '2017-09-21T18:51:23.794Z', - version: 'WzIyLDJd', + version: 'WzYsMV0=', }, ], }); @@ -256,7 +256,7 @@ export default function ({ getService }: FtrProviderContext) { migrationVersion: resp.body.saved_objects[0].migrationVersion, coreMigrationVersion: KIBANA_VERSION, updated_at: '2017-09-21T18:51:23.794Z', - version: 'WzE4LDJd', + version: 'WzIsMV0=', }, ], }); @@ -426,11 +426,11 @@ export default function ({ getService }: FtrProviderContext) { })); }); - describe('without kibana index', () => { + describe.skip('without kibana index', () => { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); it('should return 200 with empty response', async () => diff --git a/test/api_integration/apis/saved_objects/get.ts b/test/api_integration/apis/saved_objects/get.ts index 9bb6e32004c81..ff47b9df218dc 100644 --- a/test/api_integration/apis/saved_objects/get.ts +++ b/test/api_integration/apis/saved_objects/get.ts @@ -78,7 +78,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); it('should return basic 404 without mentioning index', async () => diff --git a/test/api_integration/apis/saved_objects/resolve_import_errors.ts b/test/api_integration/apis/saved_objects/resolve_import_errors.ts index 042741476bb8e..3686c46b229b1 100644 --- a/test/api_integration/apis/saved_objects/resolve_import_errors.ts +++ b/test/api_integration/apis/saved_objects/resolve_import_errors.ts @@ -13,7 +13,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); - const es = getService('legacyEs'); describe('resolve_import_errors', () => { // mock success results including metadata @@ -35,14 +34,7 @@ export default function ({ getService }: FtrProviderContext) { describe('without kibana index', () => { // Cleanup data that got created in import - before( - async () => - // just in case the kibana server has recreated it - await es.indices.delete({ - index: '.kibana*', - ignore: [404], - }) - ); + after(() => esArchiver.unload('saved_objects/basic')); it('should return 200 and import nothing when empty parameters are passed in', async () => { await supertest @@ -59,7 +51,7 @@ export default function ({ getService }: FtrProviderContext) { }); }); - it('should return 200 with internal server errors', async () => { + it('should return 200 and import everything when overwrite parameters contains all objects', async () => { await supertest .post('/api/saved_objects/_resolve_import_errors') .field( @@ -86,42 +78,12 @@ export default function ({ getService }: FtrProviderContext) { .expect(200) .then((resp) => { expect(resp.body).to.eql({ - successCount: 0, - success: false, - errors: [ - { - ...indexPattern, - ...{ title: indexPattern.meta.title }, - overwrite: true, - error: { - statusCode: 500, - error: 'Internal Server Error', - message: 'An internal server error occurred', - type: 'unknown', - }, - }, - { - ...visualization, - ...{ title: visualization.meta.title }, - overwrite: true, - error: { - statusCode: 500, - error: 'Internal Server Error', - message: 'An internal server error occurred', - type: 'unknown', - }, - }, - { - ...dashboard, - ...{ title: dashboard.meta.title }, - overwrite: true, - error: { - statusCode: 500, - error: 'Internal Server Error', - message: 'An internal server error occurred', - type: 'unknown', - }, - }, + success: true, + successCount: 3, + successResults: [ + { ...indexPattern, overwrite: true }, + { ...visualization, overwrite: true }, + { ...dashboard, overwrite: true }, ], warnings: [], }); diff --git a/test/api_integration/apis/saved_objects/update.ts b/test/api_integration/apis/saved_objects/update.ts index da7285a430fdd..d5346e82ce98c 100644 --- a/test/api_integration/apis/saved_objects/update.ts +++ b/test/api_integration/apis/saved_objects/update.ts @@ -121,10 +121,10 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); - it('should return 500', async () => + it('should return generic 404', async () => await supertest .put(`/api/saved_objects/visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab`) .send({ @@ -132,12 +132,13 @@ export default function ({ getService }: FtrProviderContext) { title: 'My second favorite vis', }, }) - .expect(500) + .expect(404) .then((resp) => { expect(resp.body).eql({ - statusCode: 500, - error: 'Internal Server Error', - message: 'An internal server error occurred.', + statusCode: 404, + error: 'Not Found', + message: + 'Saved object [visualization/dd7caf20-9efd-11e7-acb3-3dab96693fab] not found', }); })); }); diff --git a/test/api_integration/apis/saved_objects_management/find.ts b/test/api_integration/apis/saved_objects_management/find.ts index 8453b542903a4..acc01c73de674 100644 --- a/test/api_integration/apis/saved_objects_management/find.ts +++ b/test/api_integration/apis/saved_objects_management/find.ts @@ -42,7 +42,7 @@ export default function ({ getService }: FtrProviderContext) { { type: 'visualization', id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', - version: 'WzE4LDJd', + version: 'WzIsMV0=', attributes: { title: 'Count of requests', }, @@ -184,7 +184,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); it('should return 200 with empty response', async () => diff --git a/test/api_integration/apis/saved_objects_management/get.ts b/test/api_integration/apis/saved_objects_management/get.ts index 70e1faa9fd22b..bc05d7e392bb9 100644 --- a/test/api_integration/apis/saved_objects_management/get.ts +++ b/test/api_integration/apis/saved_objects_management/get.ts @@ -45,7 +45,7 @@ export default function ({ getService }: FtrProviderContext) { before( async () => // just in case the kibana server has recreated it - await es.indices.delete({ index: '.kibana*' }, { ignore: [404] }) + await es.indices.delete({ index: '.kibana' }, { ignore: [404] }) ); it('should return 404 for object that no longer exists', async () => diff --git a/test/api_integration/apis/search/search.ts b/test/api_integration/apis/search/search.ts index e43c449309306..155705f81fa8a 100644 --- a/test/api_integration/apis/search/search.ts +++ b/test/api_integration/apis/search/search.ts @@ -17,7 +17,6 @@ export default function ({ getService }: FtrProviderContext) { describe('search', () => { before(async () => { - await esArchiver.emptyKibanaIndex(); await esArchiver.loadIfNeeded('../../../functional/fixtures/es_archiver/logstash_functional'); }); diff --git a/test/api_integration/apis/telemetry/opt_in.ts b/test/api_integration/apis/telemetry/opt_in.ts index ba5f46c38211f..f03b33e61965e 100644 --- a/test/api_integration/apis/telemetry/opt_in.ts +++ b/test/api_integration/apis/telemetry/opt_in.ts @@ -14,13 +14,10 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function optInTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); - const esArchiver = getService('esArchiver'); - describe('/api/telemetry/v2/optIn API', () => { let defaultAttributes: TelemetrySavedObjectAttributes; let kibanaVersion: any; before(async () => { - await esArchiver.emptyKibanaIndex(); const kibanaVersionAccessor = kibanaServer.version; kibanaVersion = await kibanaVersionAccessor.get(); defaultAttributes = diff --git a/test/api_integration/apis/telemetry/telemetry_local.ts b/test/api_integration/apis/telemetry/telemetry_local.ts index 650846015a4a2..25d29a807bdad 100644 --- a/test/api_integration/apis/telemetry/telemetry_local.ts +++ b/test/api_integration/apis/telemetry/telemetry_local.ts @@ -177,7 +177,6 @@ export default function ({ getService }: FtrProviderContext) { describe('basic behaviour', () => { let savedObjectIds: string[] = []; before('create application usage entries', async () => { - await esArchiver.emptyKibanaIndex(); savedObjectIds = await Promise.all([ createSavedObject(), createSavedObject('appView1'), diff --git a/test/api_integration/apis/ui_counters/ui_counters.ts b/test/api_integration/apis/ui_counters/ui_counters.ts index 8d60c79c9698d..1cf16fe433bf9 100644 --- a/test/api_integration/apis/ui_counters/ui_counters.ts +++ b/test/api_integration/apis/ui_counters/ui_counters.ts @@ -13,7 +13,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); - const esArchiver = getService('esArchiver'); const es = getService('es'); const createUiCounterEvent = (eventName: string, type: UiCounterMetricType, count = 1) => ({ @@ -24,10 +23,6 @@ export default function ({ getService }: FtrProviderContext) { }); describe('UI Counters API', () => { - before(async () => { - await esArchiver.emptyKibanaIndex(); - }); - const dayDate = moment().format('DDMMYYYY'); it('stores ui counter events in savedObjects', async () => { diff --git a/test/api_integration/apis/ui_metric/ui_metric.ts b/test/api_integration/apis/ui_metric/ui_metric.ts index e3b3b2ec4c542..d330cb037d1a1 100644 --- a/test/api_integration/apis/ui_metric/ui_metric.ts +++ b/test/api_integration/apis/ui_metric/ui_metric.ts @@ -13,7 +13,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); - const esArchiver = getService('esArchiver'); const es = getService('es'); const createStatsMetric = ( @@ -35,10 +34,6 @@ export default function ({ getService }: FtrProviderContext) { }); describe('ui_metric savedObject data', () => { - before(async () => { - await esArchiver.emptyKibanaIndex(); - }); - it('increments the count field in the document defined by the {app}/{action_type} path', async () => { const reportManager = new ReportManager(); const uiStatsMetric = createStatsMetric('myEvent'); diff --git a/test/common/config.js b/test/common/config.js index 8a42e6c87b214..b6d12444b7017 100644 --- a/test/common/config.js +++ b/test/common/config.js @@ -61,6 +61,8 @@ export default function () { ...(!!process.env.CODE_COVERAGE ? [`--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'coverage')}`] : []), + // Disable v2 migrations in tests for now + '--migrations.enableV2=false', ], }, services, diff --git a/test/common/services/kibana_server/extend_es_archiver.js b/test/common/services/kibana_server/extend_es_archiver.js index 1d76bc4473767..5390b43a87187 100644 --- a/test/common/services/kibana_server/extend_es_archiver.js +++ b/test/common/services/kibana_server/extend_es_archiver.js @@ -6,7 +6,7 @@ * Public License, v 1. */ -const ES_ARCHIVER_LOAD_METHODS = ['load', 'loadIfNeeded', 'unload', 'emptyKibanaIndex']; +const ES_ARCHIVER_LOAD_METHODS = ['load', 'loadIfNeeded', 'unload']; const KIBANA_INDEX = '.kibana'; export function extendEsArchiver({ esArchiver, kibanaServer, retry, defaults }) { @@ -25,7 +25,7 @@ export function extendEsArchiver({ esArchiver, kibanaServer, retry, defaults }) const statsKeys = Object.keys(stats); const kibanaKeys = statsKeys.filter( // this also matches stats keys like '.kibana_1' and '.kibana_2,.kibana_1' - (key) => key.includes(KIBANA_INDEX) && stats[key].created + (key) => key.includes(KIBANA_INDEX) && (stats[key].created || stats[key].deleted) ); // if the kibana index was created by the esArchiver then update the uiSettings diff --git a/test/functional/apps/management/_import_objects.ts b/test/functional/apps/management/_import_objects.ts index e18f2a7485444..754406938e47b 100644 --- a/test/functional/apps/management/_import_objects.ts +++ b/test/functional/apps/management/_import_objects.ts @@ -27,9 +27,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe.skip('import objects', function describeIndexTests() { describe('.ndjson file', () => { beforeEach(async function () { - await esArchiver.load('management'); await kibanaServer.uiSettings.replace({}); await PageObjects.settings.navigateTo(); + await esArchiver.load('management'); await PageObjects.settings.clickKibanaSavedObjects(); }); @@ -213,9 +213,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('.json file', () => { beforeEach(async function () { - await esArchiver.load('saved_objects_imports'); + // delete .kibana index and then wait for Kibana to re-create it await kibanaServer.uiSettings.replace({}); await PageObjects.settings.navigateTo(); + await esArchiver.load('saved_objects_imports'); await PageObjects.settings.clickKibanaSavedObjects(); }); diff --git a/test/functional/apps/management/_index_pattern_filter.js b/test/functional/apps/management/_index_pattern_filter.js index 91ea13348d611..eae53682b6ccf 100644 --- a/test/functional/apps/management/_index_pattern_filter.js +++ b/test/functional/apps/management/_index_pattern_filter.js @@ -12,11 +12,10 @@ export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); const PageObjects = getPageObjects(['settings']); - const esArchiver = getService('esArchiver'); describe('index pattern filter', function describeIndexTests() { before(async function () { - await esArchiver.emptyKibanaIndex(); + // delete .kibana index and then wait for Kibana to re-create it await kibanaServer.uiSettings.replace({}); await PageObjects.settings.navigateTo(); await PageObjects.settings.clickKibanaIndexPatterns(); diff --git a/test/functional/apps/management/_index_patterns_empty.ts b/test/functional/apps/management/_index_patterns_empty.ts index 4e86de6d70653..3b89e05d4b582 100644 --- a/test/functional/apps/management/_index_patterns_empty.ts +++ b/test/functional/apps/management/_index_patterns_empty.ts @@ -19,7 +19,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('index pattern empty view', () => { before(async () => { - await esArchiver.emptyKibanaIndex(); + await esArchiver.load('empty_kibana'); await esArchiver.unload('logstash_functional'); await esArchiver.unload('makelogs'); await kibanaServer.uiSettings.replace({}); @@ -27,6 +27,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); after(async () => { + await esArchiver.unload('empty_kibana'); await esArchiver.loadIfNeeded('makelogs'); // @ts-expect-error await es.transport.request({ diff --git a/test/functional/apps/management/_mgmt_import_saved_objects.js b/test/functional/apps/management/_mgmt_import_saved_objects.js index 87eca2c7a5a65..45a18d5932764 100644 --- a/test/functional/apps/management/_mgmt_import_saved_objects.js +++ b/test/functional/apps/management/_mgmt_import_saved_objects.js @@ -18,13 +18,14 @@ export default function ({ getService, getPageObjects }) { describe('mgmt saved objects', function describeIndexTests() { beforeEach(async function () { - await esArchiver.emptyKibanaIndex(); + await esArchiver.load('empty_kibana'); await esArchiver.load('discover'); await PageObjects.settings.navigateTo(); }); afterEach(async function () { await esArchiver.unload('discover'); + await esArchiver.load('empty_kibana'); }); it('should import saved objects mgmt', async function () { diff --git a/test/functional/apps/management/_test_huge_fields.js b/test/functional/apps/management/_test_huge_fields.js index c1fca31e695cb..2ab619276d2b9 100644 --- a/test/functional/apps/management/_test_huge_fields.js +++ b/test/functional/apps/management/_test_huge_fields.js @@ -20,7 +20,6 @@ export default function ({ getService, getPageObjects }) { const EXPECTED_FIELD_COUNT = '10006'; before(async function () { await security.testUser.setRoles(['kibana_admin', 'test_testhuge_reader']); - await esArchiver.emptyKibanaIndex(); await esArchiver.loadIfNeeded('large_fields'); await PageObjects.settings.createIndexPattern('testhuge', 'date'); }); diff --git a/test/functional/apps/management/index.ts b/test/functional/apps/management/index.ts index 06e652f9f3e59..ca89853875027 100644 --- a/test/functional/apps/management/index.ts +++ b/test/functional/apps/management/index.ts @@ -14,11 +14,13 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { describe('management', function () { before(async () => { await esArchiver.unload('logstash_functional'); + await esArchiver.load('empty_kibana'); await esArchiver.loadIfNeeded('makelogs'); }); after(async () => { await esArchiver.unload('makelogs'); + await esArchiver.unload('empty_kibana'); }); describe('', function () { diff --git a/test/functional/apps/visualize/input_control_vis/input_control_range.ts b/test/functional/apps/visualize/input_control_vis/input_control_range.ts index 613b1a162eb63..9b48e78246b37 100644 --- a/test/functional/apps/visualize/input_control_vis/input_control_range.ts +++ b/test/functional/apps/visualize/input_control_vis/input_control_range.ts @@ -12,6 +12,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); const find = getService('find'); const security = getService('security'); const { visualize, visEditor } = getPageObjects(['visualize', 'visEditor']); @@ -52,6 +53,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.loadIfNeeded('logstash_functional'); await esArchiver.loadIfNeeded('long_window_logstash'); await esArchiver.load('visualize'); + await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); await security.testUser.restoreDefaults(); }); }); diff --git a/test/plugin_functional/test_suites/core_plugins/applications.ts b/test/plugin_functional/test_suites/core_plugins/applications.ts index 52924d8c93280..e72d032f63469 100644 --- a/test/plugin_functional/test_suites/core_plugins/applications.ts +++ b/test/plugin_functional/test_suites/core_plugins/applications.ts @@ -19,7 +19,6 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide const find = getService('find'); const retry = getService('retry'); const deployment = getService('deployment'); - const esArchiver = getService('esArchiver'); const loadingScreenNotShown = async () => expect(await testSubjects.exists('kbnLoadingMessage')).to.be(false); @@ -51,7 +50,6 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide describe('ui applications', function describeIndexTests() { before(async () => { - await esArchiver.emptyKibanaIndex(); await PageObjects.common.navigateToApp('foo'); }); diff --git a/test/plugin_functional/test_suites/data_plugin/index_patterns.ts b/test/plugin_functional/test_suites/data_plugin/index_patterns.ts index 0cd53a5e1b764..ba12e2df16d41 100644 --- a/test/plugin_functional/test_suites/data_plugin/index_patterns.ts +++ b/test/plugin_functional/test_suites/data_plugin/index_patterns.ts @@ -12,12 +12,8 @@ import '../../plugins/core_provider_plugin/types'; export default function ({ getService }: PluginFunctionalProviderContext) { const supertest = getService('supertest'); - const esArchiver = getService('esArchiver'); describe('index patterns', function () { - before(async () => { - await esArchiver.emptyKibanaIndex(); - }); let indexPatternId = ''; it('can create an index pattern', async () => { diff --git a/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts b/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts index b60e4b4a1d8b7..71663b19b35cb 100644 --- a/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts +++ b/test/plugin_functional/test_suites/saved_objects_management/import_warnings.ts @@ -10,15 +10,10 @@ import path from 'path'; import expect from '@kbn/expect'; import { PluginFunctionalProviderContext } from '../../services'; -export default function ({ getPageObjects, getService }: PluginFunctionalProviderContext) { +export default function ({ getPageObjects }: PluginFunctionalProviderContext) { const PageObjects = getPageObjects(['common', 'settings', 'header', 'savedObjects']); - const esArchiver = getService('esArchiver'); describe('import warnings', () => { - before(async () => { - await esArchiver.emptyKibanaIndex(); - }); - beforeEach(async () => { await PageObjects.settings.navigateTo(); await PageObjects.settings.clickKibanaSavedObjects(); diff --git a/test/security_functional/insecure_cluster_warning.ts b/test/security_functional/insecure_cluster_warning.ts index 2f7656b743a51..181c4cf2b46b7 100644 --- a/test/security_functional/insecure_cluster_warning.ts +++ b/test/security_functional/insecure_cluster_warning.ts @@ -31,7 +31,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await browser.setLocalStorageItem('insecureClusterWarningVisibility', ''); await esArchiver.unload('hamlet'); - await esArchiver.emptyKibanaIndex(); }); it('should not warn when the cluster contains no user data', async () => { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts index 2a256266697e6..8ed979a171169 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts @@ -11,6 +11,10 @@ import { setupSpacesAndUsers, tearDown } from '..'; export default function alertingTests({ loadTestFile, getService }: FtrProviderContext) { describe('Alerts', () => { describe('legacy alerts', () => { + before(async () => { + await setupSpacesAndUsers(getService); + }); + after(async () => { await tearDown(getService); }); diff --git a/x-pack/test/functional/apps/dashboard/_async_dashboard.ts b/x-pack/test/functional/apps/dashboard/_async_dashboard.ts index fceccb4609bd7..8851c83dea1ff 100644 --- a/x-pack/test/functional/apps/dashboard/_async_dashboard.ts +++ b/x-pack/test/functional/apps/dashboard/_async_dashboard.ts @@ -12,7 +12,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); - const esArchiver = getService('esArchiver'); const log = getService('log'); const pieChart = getService('pieChart'); const find = getService('find'); @@ -30,7 +29,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('sample data dashboard', function describeIndexTests() { before(async () => { - await esArchiver.emptyKibanaIndex(); await PageObjects.common.sleep(5000); await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, diff --git a/x-pack/test/functional/es_archives/visualize/default/data.json b/x-pack/test/functional/es_archives/visualize/default/data.json index 26b033e28b4da..fe29bad0fa381 100644 --- a/x-pack/test/functional/es_archives/visualize/default/data.json +++ b/x-pack/test/functional/es_archives/visualize/default/data.json @@ -125,8 +125,26 @@ { "type": "doc", "value": { - "index": ".kibana", - "type": "doc", + "id": "custom-space:index-pattern:metricbeat-*", + "index": ".kibana_1", + "source": { + "index-pattern": { + "fieldFormatMap": "{\"aerospike.namespace.device.available.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.device.free.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.device.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.device.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.free.pct\":{\"id\":\"percent\",\"params\":{}},\"aerospike.namespace.memory.used.data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.index.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.sindex.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aerospike.namespace.memory.used.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.ec2.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"aws.rds.disk_usage.bin_log.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.free_local_storage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.free_storage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.freeable_memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.latency.commit\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.ddl\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.dml\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.insert\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.read\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.select\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.update\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.latency.write\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.replica_lag.sec\":{\"id\":\"duration\",\"params\":{}},\"aws.rds.swap_usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.rds.volume_used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_daily_storage.bucket.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.downloaded.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.latency.first_byte.ms\":{\"id\":\"duration\",\"params\":{}},\"aws.s3_request.latency.total_request.ms\":{\"id\":\"duration\",\"params\":{}},\"aws.s3_request.requests.select_returned.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.requests.select_scanned.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.s3_request.uploaded.bytes\":{\"id\":\"bytes\",\"params\":{}},\"aws.sqs.oldest_message_age.sec\":{\"id\":\"duration\",\"params\":{}},\"aws.sqs.sent_message_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_disk.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.degraded.ratio\":{\"id\":\"percent\",\"params\":{}},\"ceph.cluster_status.misplace.ratio\":{\"id\":\"percent\",\"params\":{}},\"ceph.cluster_status.pg.avail_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.data_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.total_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.pg.used_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.traffic.read_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.cluster_status.traffic.write_bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.log.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.misc.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.sst.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.monitor_health.store_stats.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.total.byte\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.used.byte\":{\"id\":\"bytes\",\"params\":{}},\"ceph.osd_df.used.pct\":{\"id\":\"percent\",\"params\":{}},\"ceph.pool_disk.stats.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"ceph.pool_disk.stats.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"client.bytes\":{\"id\":\"bytes\",\"params\":{}},\"client.nat.port\":{\"id\":\"string\",\"params\":{}},\"client.port\":{\"id\":\"string\",\"params\":{}},\"coredns.stats.dns.request.duration.ns.sum\":{\"id\":\"duration\",\"params\":{}},\"couchbase.bucket.data.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.disk.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.quota.ram.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.bucket.quota.use.pct\":{\"id\":\"percent\",\"params\":{}},\"couchbase.cluster.hdd.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.quota.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.used.by_data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.hdd.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.total.per_node.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.total.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.used.per_node.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.quota.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.used.by_data.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.cluster.ram.used.value.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.couch.docs.data_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.couch.docs.disk_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"couchbase.node.mcd_memory.allocated.bytes\":{\"id\":\"bytes\",\"params\":{}},\"destination.bytes\":{\"id\":\"bytes\",\"params\":{}},\"destination.nat.port\":{\"id\":\"string\",\"params\":{}},\"destination.port\":{\"id\":\"string\",\"params\":{}},\"docker.cpu.core.*.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.kernel.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.system.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.cpu.user.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.diskio.summary.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.commit.peak\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.commit.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.limit\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.private_working_set.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.rss.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.memory.rss.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.usage.max\":{\"id\":\"bytes\",\"params\":{}},\"docker.memory.usage.pct\":{\"id\":\"percent\",\"params\":{}},\"docker.memory.usage.total\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.inbound.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"docker.network.outbound.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.primaries.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.primaries.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.total.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.summary.total.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.total.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.index.total.store.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.heap.init.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.heap.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.nonheap.init.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.jvm.memory.nonheap.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.fs.summary.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.indices.segments.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.old.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.survivor.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.peak.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.peak_max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"elasticsearch.node.stats.jvm.mem.pools.young.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.disk.mvcc_db_total_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.memory.go_memstats_alloc.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.network.client_grpc_received.bytes\":{\"id\":\"bytes\",\"params\":{}},\"etcd.network.client_grpc_sent.bytes\":{\"id\":\"bytes\",\"params\":{}},\"event.duration\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"nanoseconds\",\"outputFormat\":\"asMilliseconds\",\"outputPrecision\":1}},\"event.sequence\":{\"id\":\"string\",\"params\":{}},\"event.severity\":{\"id\":\"string\",\"params\":{}},\"golang.heap.allocations.active\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.allocated\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.idle\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.allocations.total\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.gc.next_gc_limit\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.obtained\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.released\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.stack\":{\"id\":\"bytes\",\"params\":{}},\"golang.heap.system.total\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.info.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"haproxy.info.memory.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.info.ssl.frontend.session_reuse.pct\":{\"id\":\"percent\",\"params\":{}},\"haproxy.stat.compressor.bypassed.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.compressor.response.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"haproxy.stat.throttle.pct\":{\"id\":\"percent\",\"params\":{}},\"http.request.body.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.request.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.body.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.bytes\":{\"id\":\"bytes\",\"params\":{}},\"http.response.status_code\":{\"id\":\"string\",\"params\":{}},\"kibana.stats.process.memory.heap.size_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kibana.stats.process.memory.heap.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kibana.stats.process.memory.heap.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.apiserver.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.cpu.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.cpu.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.logs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.logs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.logs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.request.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.memory.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.memory.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.container.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.container.rootfs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.controllermanager.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.fs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.allocatable.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.network.rx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.network.tx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.node.runtime.imagefs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.cpu.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.cpu.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.memory.usage.limit.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.usage.node.pct\":{\"id\":\"percent\",\"params\":{}},\"kubernetes.pod.memory.working_set.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.network.rx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.pod.network.tx.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.proxy.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.http.request.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.http.response.size.bytes.sum\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.process.memory.resident.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.scheduler.process.memory.virtual.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.system.memory.workingset.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.available.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.capacity.bytes\":{\"id\":\"bytes\",\"params\":{}},\"kubernetes.volume.fs.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.avg_obj_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.data_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.extent_free_list.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.file_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.index_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.dbstats.storage_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.replstatus.headroom.max\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.headroom.min\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.lag.max\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.lag.min\":{\"id\":\"duration\",\"params\":{}},\"mongodb.replstatus.oplog.size.allocated\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.replstatus.oplog.size.used\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.extra_info.heap_usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.dirty.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.maximum.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.cache.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.max_file_size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mongodb.status.wired_tiger.log.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"mysql.status.bytes.received\":{\"id\":\"bytes\",\"params\":{}},\"mysql.status.bytes.sent\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.cpu\":{\"id\":\"percent\",\"params\":{}},\"nats.stats.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.mem.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"nats.stats.uptime\":{\"id\":\"duration\",\"params\":{}},\"nats.subscriptions.cache.hit_rate\":{\"id\":\"percent\",\"params\":{}},\"network.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.data_file.size.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"oracle.tablespace.space.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"process.pgid\":{\"id\":\"string\",\"params\":{}},\"process.pid\":{\"id\":\"string\",\"params\":{}},\"process.ppid\":{\"id\":\"string\",\"params\":{}},\"process.thread.id\":{\"id\":\"string\",\"params\":{}},\"rabbitmq.connection.frame_max\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.disk.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.disk.free.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.gc.reclaimed.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.io.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.io.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.node.mem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"rabbitmq.queue.consumers.utilisation.pct\":{\"id\":\"percent\",\"params\":{}},\"rabbitmq.queue.memory.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.active\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.allocated\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.fragmentation.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.resident\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.allocator_stats.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.fragmentation.bytes\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.max.value\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.dataset\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.lua\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.peak\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.rss\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.memory.used.value\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.buffer.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.copy_on_write.last_size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.rewrite.buffer.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.rewrite.current_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.aof.rewrite.last_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.aof.size.base\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.aof.size.current\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.persistence.rdb.bgsave.current_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.rdb.bgsave.last_time.sec\":{\"id\":\"duration\",\"params\":{}},\"redis.info.persistence.rdb.copy_on_write.last_size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.replication.backlog.size\":{\"id\":\"bytes\",\"params\":{}},\"redis.info.replication.master.last_io_seconds_ago\":{\"id\":\"duration\",\"params\":{}},\"redis.info.replication.master.sync.last_io_seconds_ago\":{\"id\":\"duration\",\"params\":{}},\"redis.info.replication.master.sync.left_bytes\":{\"id\":\"bytes\",\"params\":{}},\"server.bytes\":{\"id\":\"bytes\",\"params\":{}},\"server.nat.port\":{\"id\":\"string\",\"params\":{}},\"server.port\":{\"id\":\"string\",\"params\":{}},\"source.bytes\":{\"id\":\"bytes\",\"params\":{}},\"source.nat.port\":{\"id\":\"string\",\"params\":{}},\"source.port\":{\"id\":\"string\",\"params\":{}},\"system.core.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.iowait.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.irq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.nice.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.softirq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.steal.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.system.pct\":{\"id\":\"percent\",\"params\":{}},\"system.core.user.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.idle.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.idle.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.iowait.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.iowait.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.irq.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.irq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.nice.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.nice.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.softirq.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.softirq.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.steal.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.steal.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.system.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.system.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.total.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.user.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.cpu.user.pct\":{\"id\":\"percent\",\"params\":{}},\"system.diskio.iostat.read.per_sec.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.iostat.write.per_sec.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.read.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.diskio.write.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.entropy.pct\":{\"id\":\"percent\",\"params\":{}},\"system.filesystem.available\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.free\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.total\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.filesystem.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.fsstat.total_size.free\":{\"id\":\"bytes\",\"params\":{}},\"system.fsstat.total_size.total\":{\"id\":\"bytes\",\"params\":{}},\"system.fsstat.total_size.used\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.actual.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.default_size\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.free\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.reserved\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.surplus\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.total\":{\"id\":\"number\",\"params\":{}},\"system.memory.hugepages.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.hugepages.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.swap.free\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.total\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.swap.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.memory.total\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.memory.used.pct\":{\"id\":\"percent\",\"params\":{}},\"system.network.in.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.network.out.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.blkio.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.kmem_tcp.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.mem.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.usage.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.memsw.usage.max.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.active_anon.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.active_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.cache.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.hierarchical_memory_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.hierarchical_memsw_limit.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.inactive_anon.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.inactive_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.mapped_file.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.rss_huge.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.swap.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cgroup.memory.stats.unevictable.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.cpu.total.norm.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.cpu.total.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.memory.rss.bytes\":{\"id\":\"bytes\",\"params\":{}},\"system.process.memory.rss.pct\":{\"id\":\"percent\",\"params\":{}},\"system.process.memory.share\":{\"id\":\"bytes\",\"params\":{}},\"system.process.memory.size\":{\"id\":\"bytes\",\"params\":{}},\"system.socket.summary.tcp.memory\":{\"id\":\"bytes\",\"params\":{}},\"system.socket.summary.udp.memory\":{\"id\":\"bytes\",\"params\":{}},\"system.uptime.duration.ms\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"milliseconds\"}},\"url.port\":{\"id\":\"string\",\"params\":{}},\"vsphere.datastore.capacity.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.datastore.capacity.used.pct\":{\"id\":\"percent\",\"params\":{}},\"vsphere.host.memory.free.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.host.memory.total.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.host.memory.used.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.free.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.total.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.used.guest.bytes\":{\"id\":\"bytes\",\"params\":{}},\"vsphere.virtualmachine.memory.used.host.bytes\":{\"id\":\"bytes\",\"params\":{}},\"windows.service.uptime.ms\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"milliseconds\"}}}", + "timeFieldName": "@timestamp", + "title": "metricbeat-*" + }, + "migrationVersion": { + "index-pattern": "7.6.0" + }, + "type": "index-pattern", + "updated_at": "2020-01-22T15:34:59.061Z" + } + } +} + +{ + "type": "doc", + "value": { "id": "index-pattern:logstash-*", "index": ".kibana_1", "source": { @@ -279,4 +297,4 @@ "updated_at": "2019-07-17T17:54:26.378Z" } } -} +} \ No newline at end of file diff --git a/x-pack/test/reporting_api_integration/reporting_without_security.config.ts b/x-pack/test/reporting_api_integration/reporting_without_security.config.ts index 4a95a15169b59..11182bbcdb3b0 100644 --- a/x-pack/test/reporting_api_integration/reporting_without_security.config.ts +++ b/x-pack/test/reporting_api_integration/reporting_without_security.config.ts @@ -32,6 +32,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { kbnTestServer: { ...apiConfig.get('kbnTestServer'), serverArgs: [ + `--migrations.enableV2=false`, `--elasticsearch.hosts=${formatUrl(esTestConfig.getUrlParts())}`, `--logging.json=false`, `--server.maxPayloadBytes=1679958`, From 541637993f9da787d5a6e1f7eb04da5d84915e1b Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 17:52:53 -0700 Subject: [PATCH 65/85] move skip to higher level (#86952) --- .../security_and_spaces/tests/alerting/index.ts | 3 ++- .../security_and_spaces/tests/alerting/rbac_legacy.ts | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts index 8ed979a171169..e1502b496f77e 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts @@ -10,7 +10,8 @@ import { setupSpacesAndUsers, tearDown } from '..'; // eslint-disable-next-line import/no-default-export export default function alertingTests({ loadTestFile, getService }: FtrProviderContext) { describe('Alerts', () => { - describe('legacy alerts', () => { + // FLAKY: https://github.com/elastic/kibana/issues/86952 + describe.skip('legacy alerts', () => { before(async () => { await setupSpacesAndUsers(getService); }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/rbac_legacy.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/rbac_legacy.ts index a0db084cd903d..2b25c82cc92e5 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/rbac_legacy.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/rbac_legacy.ts @@ -28,8 +28,7 @@ export default function alertTests({ getService }: FtrProviderContext) { superuser: 'b384be60-ec53-4b26-857e-0253ee55b277', }; - // FLAKY: https://github.com/elastic/kibana/issues/86952 - describe.skip('alerts', () => { + describe('alerts', () => { const authorizationIndex = '.kibana-test-authorization'; const objectRemover = new ObjectRemover(supertest); From f91d7bf188a1935a40f1a06a83f3921f8109ebf0 Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Mon, 1 Feb 2021 17:03:14 -0800 Subject: [PATCH 66/85] docs: APM 7.11 updates (#89789) --- docs/apm/images/apm-services-overview.png | Bin 270296 -> 280219 bytes docs/apm/images/apm-traces.png | Bin 325206 -> 278649 bytes docs/apm/images/apm-transactions-overview.png | Bin 807333 -> 672365 bytes docs/apm/images/traffic-transactions.png | Bin 395228 -> 276609 bytes docs/apm/service-overview.asciidoc | 7 +++-- docs/apm/transactions.asciidoc | 10 +++---- docs/apm/troubleshooting.asciidoc | 26 ++++++++++++++---- 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/docs/apm/images/apm-services-overview.png b/docs/apm/images/apm-services-overview.png index 85b441d47f0c2fda4358d00b683a36ea52bd96e6..3a56d597abfb799b52ad6645f810b9b30d86e56c 100644 GIT binary patch literal 280219 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 z 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

O)#H4 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

1E%9-^#w@2TBSVYh{vw8j&5$)ER@4WPazZ zYf4}X8~jkZXC&D(?PuqG`53KjKNbGY7<~Ws(GcPDC;EehUsexUF;_{do#}$c>X%q|DK)xAHN$2<;|L4xN_eJS^oU~=~lGPY~>js zcPE=nR6cA#`{Eh9c3SFpH)Li{hL)Y2t-)kl9ahPD=YF=zC$Q@)n#J0}8Bg!&+{<*p z`B_cz_K~XEH{R0Of?mQ&Cg{p}_w*_`vQ;wfEDZi`Ff3$XgPXameAp}&# zudqk5e;;y?k#Tl`s1);mgX;HR{W~N=*;o;I^gv**W|=;~BdHT1sG!)%zZ>*#DF5%W seg_8w(^b literal 270296 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[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 diff --git a/docs/apm/images/apm-traces.png b/docs/apm/images/apm-traces.png index 97e801606c613d659ab261853cea8b011703ae10..ed15423b42c511b6feb5e10bb05103578c67e7d6 100644 GIT binary patch literal 278649 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 Z{tt{l#;KhF5bFQ{002ovPDHLkV1kIi4u=2$ literal 325206 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�ob)^h&ffTo@?d-`%y%~1!uLtvTTeh7&!t1nI?_GA{VmYxA zhqa1%G`ArVl928b;=!&_tXiFE&pQ;w5r=^tk;3J28~b&Lc|wRHn2_2RY2m!FrIBEj zB5WH@{g@QPyoQ(AV9N)tztB&qZ!0yCXc&eG%gCb?^orDz{YgP3mGam$-w%<;vF<>0`WB<@DrAesKkc3cB z&hl5Vm}k~!UxJ{N*I3PpDoZP16fnaL-p%%x#isz275G3%;UNm&>zjI%xZa)uOW#_dK71nsdFa%EG>Hzn;Uc z5x(WT&R%L9eyd0AZOuUPiOX@uJWo_8ow~+y$$7YO8r`qzBS*+=GOkiDokp5_Cj)LW zv$)*}m&Dg_b6<32in7kOUeoSbI*`WAs*VwlPF4xSF#5rVIlKK}PA+ZVL9jiVZ->dy zCU=I`+0!S#>#bRCm09&S>2cVGdY)yPBW$)g-jpQ{o=-#k1gO?M5o`QGCBc>kwtmh1 z8FqI8N6tIV>!BR2Zg_!~Ls;1GYW=roj}69wEFS`RYTuj=tg1WoCff)Zr+`X80*95owN4s z&&HLKJF)y~3og=|8v^ncemr_*TD-a5dSzmej;|;!LY*-q(#E6*-7^g zsvnU#;715(dBXHJ&?uT!<(7tx`KgX*bHNQp$hAud|fxk1Z`hy=tD2FI4=NeP-shQM(<>mMJJd zXi5y{OEiupR3l3gzt?iL@Cngj+rHIDem1V3e4MsmThYsnI~&)FDs~T_bxE?6M6QHi zl8(OmNoH@IYnSonf$$=u{?aKNfu(e{h77T~kLMfZvM$zKGvKz5mx^5jea$S(6bo-22pDk`!BEzI06^RJw-o@e>%0Yr1CabtVEqnBC@ht<0zQ-_;77N zu24cTg_3h}Le=h-vEOuDA~(Y~Eu)Nqc=+qxH?~rR_6suR$}c^T1kGO0QNp0tO+zEv z+3F3m2zW_WKNH{EHT~{QrIY(Pb+9UBlo4wt@{-5ghf{N-TfAZyX|i;Y3ZLU_cm$O@ zTxlVVQ8kjhaV&*y!^&}TrWZ+YD2<09rSW)NTy^&OqqP2*{(`+9?0oYm5T-dwAZXH7 zmzu@kboe`#*!xoKSMeB?o%L(QJ?MuLl0GQac_ZS8vB5IJNVq zasA8vk`pwhw>NcFFRP^}r*+>8N~j(-2B+?+k>C%6omm_@zNAzvWfuq#m<>`LsOwN1 z#fo>&QD=0~bolPmhGJ#||8~LLi;A1_bHUzFLtGpXjj+bH3k?~d?DQIVdQOl|a^PeA zl5TOH@=$28rpMd1a_3F^RqB4Lbsb1- z^!*GN|Fz1a(bcuWzx`NU`b^Z0aeC)R#`PL$W~8$1J(jdLHLYi(d+dv>m((*mwGqDi zI4h&vh6xzJ-SFhA8{B=I{n<)rBUrM_J=v!nuF|~shA%yMokVmQWFqo3vH79Bb5J~Hbn5<@4wRZ02}0czlWGDKcmm^gZ$7mKvvnAGhhKAz0}ABZWs zMr&=ru3xC|e|WD6Ki?JwOL3P6h`ycG^0?7RWOh>_96Wcdu;xCjpPhvrak4QGTmO+D zf!1nPx?nLds!x;ssZW<_WuA}S?03EulioVmePHnF1(Kz9V?riF3P+7R>LhYsio-%( z+Vy#qw0@Op_ZWoRNH89d_!-GB@^dwiEg^~tcv4$m1a#frUbwLu)9H%-ouOQpk5-VG zyKLnEB=&D=lPGd`n+@(4+{xSm3%D$@J>OKSmCKs0_tErD4hmy}$eb$57#?>=^I}rE z?fPOlQ!A>S7vSpMl=)_RM;Dn0t?dSa79P9*&fvwwdKuXv-QV zS%85r9paubPZN#HqTVHWem%As$>s9Vrk4(}(+IZp`Y@^K?z_T;eFsHe+Qkt#YMtR- zEIN5$VQbgIa;IN|e5($|&8S?tu5|B4#GWHo<@^!^yP5MXd_dE~!Ma#%q6(6bm0}vg zr2>U8iG6&qjXWE^ZQ{Hp=AByFD$tTljPOq^4sK)m)ZE`UD5X)~zo^oY=6q`cMZ_mr%3(lOeZ zwm2sk&hWf=vS1HER)~NE8glT=z{=JkwktBqlnGhXd_V(em4!kKH*R+HM$;8g@?OTK zr&WKh)m+E_GOSG;&&wRY{}aor0l-}nCbK?foBZODk~#f*x}u(}T=g?|Cd|rITr@7_ z7f7l}qr=lHiTHz>=`4D+WWQAz?^!;F85WP;{d#UCa@M{Tn=0cToo03Rt>g=5HYZj! z<7PMx!Cc{9znsni8UrO(=7tneNj3Z38IAlVa&c@ZQ6$2s(vzPvQR)=uqU>1rm}U$PwZ6T zsNFL*aHkQ~UV4%I{6`aiGX-4Y6$QSU8iFy0|E_%d??emwF%|Fn+!;G3h#%9C3_S(7 z;V(yK8-Ufz`3!k_S*4tahZ4Q(xu~TD+>KR3!wj+a9R5u1!m-m=eD( zpRGE%f{ZpuilpezO)aMmiVL&8oQE9&@@k@^*(^T!xhcTKHj}7VR@`-!Gmv*q?X$1E zs1AQ7+?3}{!4KvSv6yEReId$kBSpPZblDizDYzQ1WZzBse)Fk+JgmyHKnk)oT4cb| z+O$qY@g!4V0f*YAB|dLnF;C(ZxJklzFa!c%PO|N0rP%v-YZGjC-&74GTCJlWy??PA z1%%a}!2*cySdIBa_}$cXuMO1}#*-e+@gryO_WOxfV)%XOWeJle(=Vc-h`WX4wcj-^@#^ zma!dM-%Fy+FooXiy&py$n%?$aoB)QQFH; znIf3@KF}{pM2{%=##6Z1_vW2IbUc+1`p#EeQ#@TJ)XvA_$sc zPwdB5ir~&jPf-qGwN#yp6`=b=3RB9uVVv z0$2FaLo7&$=rH-B53}0U6{+>(&l_v6XRoeHLS35G;GG&4o`Xe6K|;EV+{V=VuUc}< zB%i>e5=2sNbLF8P73hzb2Y*8Zl40hlX|Bw&jrNJQrptzi2I4*$0t>Mf`fj_+9(T>s zub7Q9SIw65L+fr=kEXTyhjp^xVB1b1n!hqdITb8^Wqunxm@YPoB=x&PwgZC5;oXv| zMh5R{>xMZkL-W0<2wFVeIJ9Jo$4TW%ClLjplUF2B>n*xyaXF>|loI%`vbFx$l#SMF zJVpzdA*%|t#$D}<#Sx{Fjf1LX(Qgeen{%Yg^A>Pt|g0QfoZG#Y#qLF$<22w&;>Y|&|TUn#TSV~09Fg!7ikyIFlEO&_H z3`T|664aHQ?M)8s36WoM4{qNc4lk2hYv1uvD{PEd`WB3kgWjDLD#K{cDKG9(+Ef0# zVP9#Q!P@~$Xnk<7fI$8^C@BJ~BkFTv32WGO9c@ZcelS@;3p3;Xj!; z4cJ`5S#AJ>Qn++d7FA!8F3p|+OtuIx)ju2QJi+ziy3Q^Ar+*X8vOmgnJ_n}w_{5QGV#@1a9y65nv;}NImv!pF^)beo` zm)>u_PYE(liR)&W=H(H@0$C|z9YcPTpU2o=zs2G=N*jIGl>qcgO@|vOG;-0DgKEHo z^*5PLz_Dm)tZk^keEAjI#{l91syEqO@4x$ad~N~`0by^YK8CB?5y>(QI{~w(lp+6D zKPxt3Te59pA%^+$A@`3s9uaae!nJ@j&U0#7@X%|EEn>vv51~nq_U8MSIc?e?? zitel{^yr87=4Y?=+y&3!le|L1(?-h2M< z8)J_>9KgGr?^<)sHP@Wad?w&WSDSGKw@W+^ukmSj2Coo!X?I@9R#L)XP20teM7~G` zlY88x7BQ@Y|w&@+Q%bv_q1$8U0)BaBqy zmWub%qd2%rGcc9Otz2TJ*v+fF!T47KEDrN+t7n$|?ylwxzF?biY5{{Bw}N=1W2t7X z07Gqf_d7hPI?I{<@>w{AH6QOP#jZmQ_0CaSWK=hr4$IWrV z(#Y+0frdt{G!}zGRwN4Gr9S>n;<+M8RxHdZTqN^?k1UbdFs5Vs-AUjlO@o8a%i^Q5 zVn^#kqkDmj2yichQAQ?zmS}z#!r&za_-$i|yk@AaPF@ywRZ!t-1MV07HxHzYcO9;y zOIws+&6=z6sMISJE;g?Iy2%nHA=j1>m5s1XjH`F-eeEh+UERZym&a${G5D^jDq9ow zgChY*J~acY%g_;aSc}dpkHr^j*#a!wcm3)Qi7u_C51Xqj7S%Vrpwmw-1>8ruqB+rX zYrYa^!YQ!tR=ZUfIhJ-I%~V@}b0l%%2NGZRI%&4zB6_nG+K5_*1-HAkMKEIr`@#Wf zv9>{S?^Xb4%Bk2QKWP9@yEE66xNnG1=9n$%P`mcsQ~x9!s50oAaai0gt{Y-gY`qBl_HoZ<$a5QwGo=wU~j#9v> z1$K1?i0FYBVBw^@hL>EPM6|}`$sTnC_5p{^U7dcOdwz@3r=wTN{l8M$fcSIbgSm0a zCO(m{LbRa4mmXgGY(3v<);$qj3RO#}P9{8FLGP^Z*qy&4-lz-D1SwGh%fREUP2hQR z;$$*8`SSs!A?@IEMOnkS9}MK4EduGQ}M%JR>`NboB5D?i;Nkls>|ffAeI& z>&`NXf86p>oJtv=b->eV&$luXi35wjx+PG*Rs#7e#iBAfMA&89M2#zr%oIh={sSz2 zy~pelrYB+JA7G^tS9~`2Y-x8{Y&NZYgaOwsF1}VI@J_p#BBzmVboIe9k$=Z?u3#<_ zYnd3v_7}e20AGH4EL_JiUn(SYu0|)b~wqSG8gP>vR=*4K3 zf*W1J*T5b%^{jM{RZ}1cLa1|yc`%ADN*o&05D@crtgc|%)Gc4ckkNnNV*Ty-J{xZ(+3oHVl8=yC zx;NN+hx_8=;sr5zD)SbPHu)ZM=Qp#oNU6#&Y)!uCJmY8);s#!HB}c zx^=`rzI?06eznW)M_Y?xxuAM$Hr{K#_{gm8E%rGs{fi4dk_LcMsyT;)$p4g~)>VQ? z6q3rGTWXSynhky>iT}9Jm2py>L*a$M z+fS6x=-a*&#)PlCMKV{}8}@1Jn2+`y3!8u)S2IQcFQwb8-fLHHOWQc-JoTc70L$`I z4&l(|fE$o)BAxS9r;MJt0FbcEKw^Wl(A{T%c^i@`TR{gBS;OU_5l^Lkmx8n$Jf-(T z5(aP4KJ_~V=S=x+owV%PhC-lx`x*G&aKZ59$(Jf%M%u!@^#SKqpAvOAd~S1Nc@N(m zzNIK6N^y9n7Wn|HQ|9f#qB(}LiNU;`j^w%WjcoII2f?t|GzB<=GQBV+i{%ux1%8_v zeJU-@asw`38*DV?At2O6Y>G1ZB36NPMU+jr(@`7bDEs#K%i2JUVCY=h!dQ;o4iV*A z4koYDkBCTH^F@8ZzdPVl~gyC3>$!v}McKqvg=E~I;Ns|~sF*7rZ*0s;}RJBf?OD@k82D5BDu7-Zn``o{z(;i`U^;~p>k z)8I^uH?g1bxIt}2`L=^6$bNi_B(GI(a-w&KvEk>Rxzff(8#8QG=|L-on=3UuFRx;T zHo%~2zSk(@C(K{ATe+svWNP`V76%i|7 z`(Jo_RGgY2ug1q6e8rmcOu2gX4qI%6-jv!PP?>7k~+RqX^9bjgiYFv3!WNIwjZ)w&c6BZ!j1pyf!QYs_VsDZ-uV?A1{__=FaQv z1)ckBSHvgW8EsuN;)mmNywdOSAeM@wJu_olN7FhmAENMcX(N*Ust2F>4Zby(*Ye)y z?Zqu}k{{0a&KAW6&Pp0@`FlLBjz7P6 zQwT5VxB^%QPXITG_xkjPaWOB~w_uDn5_So}6<7x_g~B^~p|NJiJiV4DqkaTHR)C~r zJPf6d?HzEfKA`kAmgT!WuEcg;dw1t=9d6CXV>u@bO9}w3G=B7c!i^wqq1CEOe`@Ub zmD?jsb?-RzQQet;wEI^*6k%Mt1cE3joAgUhMGtqkHu((*jn-XvK5hvp69D)|Pge1J zgg~9|0Wq5t{g=Pvr%j0R#M>eeQG5Wz_trWBmf&7_<5Ncg>e8Ee&xbFBJ-#z7)=@_! zIL-(^!<`l1K`6iTU7Cp$$WyR?7ID=>!!wn7FYY7>Q;MZA8Z7A&*1c;b!w;8_7t5%lo4 z8ncLREGDHI!%5QasM3lrmBglHBOD2jA6b6RrO$>8r-~ZcA9?M}(oKoB@cT+=&P|?d ziNPOrpj+E+bDLDs-hJC}HsNv)Y&c!-IBDqP6seTBqX^jDKH=@IwH@w~ZDr)s zE!@3ZBHA#`?JS?YqZl_B-^z|>G^GQZmFf5kl>>c&j-Aw8{a4F_%>tn9M(Tx z&)T@7jgFhE3;ecq4qXe0oItAUUe+-7jpxTs!*#a=5g!l~2t&J@agU6@?-Cj2V&Q#R z0-(O`$e6F-c+IjV&JecCJ8JmkzK3;8Zd0wPbL2N1U5FY03A0xKOa|rOFd0Wu>%Eyb zKE(UMSRoVu8rMKUsy0{JWmSaHNf)>*VQ%jMSk-Xq5xs^glh{qN%EgKU=pl49440vI zzw!2mRFZy(CgQaql3M9CB~StyId+$?qfuXs#LX}$(X>6LoG1_j{~%YE&t@f?|6|NHv=JQkB518w zurX+FrX(H*aY{D*o$My&!;#Su{hsQ6^H6Ljm$hJxaiAJ{?O>VA_b6K;TC_53>sP2o zn0gXy&%BR&fL|Cv$VD+-u>cSVoZrne7!AAInf9C=+ni_z;;La$h!X>?8r2qmebcqA z7aqLVhzu!BW0$-{t9BH(`e3wr}7l!U(m^hJEAo(wypvG}P|cv1Am(^Wg-&D~BS zi3yvGlJq6rh`LBXuo!`m_gX=&uxkcOsgQ$)zHd)Ccao@B*SXCrvCF|Cb-z_{jn)9ZGY4G#aezWF8 zq~@f<=9Cys`M_B}ks9S|ID|PY);k+t4>5%$e zE!lu@?j}xf=1@zTx!p`K>o`rMHW#9f0;yrJZoH@04--F4?;1%YAzcqIvci#frahyF z&V>7h1AE|lnOllyN8<6W7lRoaKVe=)=s-;)NjMEPrnO=9I43VkD-k>0ju*!(AjtNS zoFK4C`E4O?%P{_>g`3Qs&Zqie5lo~#Q@-r3V8`67JFOT=Nox~?S&Ol7r`i&Qtz_T& z1Wpkw$ds#Am?_C~v9`KWB8@SdGt>Z@Ig2p+>pl*{>Yn{*w=r;hk8NIT#kT8vU$;^r z>ChecxR-o~!;ceB2Z_Qp8D<_b>0c^4C9Qb&SAG#+GgCi#=)&%13Vsf1E^ee#_V+%5 zY-1$sD$D@6h^9=x-pg9w{y36IFGb-Xz~C^)Kczaml31TH#$z^yQ- zA+9-nE=Hzpqq5<}#_J6RGXVzp^5-aI=8j&x3PW_JmKxM$*nKIow@O~gfj^$@F+ywz z0urXtGX^U22OO@nU}%r~DuX)dHYws4@mDW3uhvf(xtT3^oDV*8tM7AYvy6iS$?OQ@ zVBzF{e|$D6K-y=WBlD$SRMLJ&sYr*8?r)yg6tJ7;ue`tHivSMn=lpd~1kbT0y;o=T zz~+@Anz_kzpf@%d=Cu(eJN43)+N>1tnfZ5`;2Af=-P+Rv?lU)@qkI^*NU3HsX`r>8SHl8rm#xd19BN z`?^dQ_CX+C!ke+Ee{Jv`{5K#ka?F&WfrAgn9{g=LXH)1|%VUlAgeO9sKi$VU#Xv#q zWe?&fmgzzz1IO7q{nAS2>3{-_B?GTK^><+2V;nuw=)Hu{)jvRscFQ)sh_j%Se*a#C zJW+PmKwRP}&-MKSlxFd{SOn z?HPAxB~dQz*nld-4QuBnEX4hZ&f(%BlMT?tRL=TH?sA+qVeyqI9nA+b-N@SBJV4L3 zYL%zTrzuve2OM$!DzOeY=FLh1pNj3_o;ud9oOCSy86ctSjGjq_unguM`*s=P?hs}; z=DXh+g0=L6p{=C#0RuzqN6b z92U4p`sn|G`J?~y*)>8Qp0i+heEx(YX}ew=wKeTjEtu?^YjVg#}1EO#l6|4_ViUE z6!wAUq$ottJxMMV4mz7lQ4Yg(+T}Hr&8h_@w4;?r+0vlm{75V4cjV|7m~~m^pDLEr zacM9>mslYozmnr{5cEFzCArAF>8KuDLriK0KqhKUpPr zFGHnvFNf>YVyHLOa4d?x3blwT#yH(({^*} zzd2f#g;G#2)i`fFZjjMI&&>Tn0kIFw`L+z*M5j7agk0rl`MfMmf^xI-IxUCBY*xrq z`c&?1nrskVO)$)qW7+V$ubkYXNva9&QrdU{(jRB>-8yPGlPl6!vJyIiC(Jh_E9zD#RO>Qkdg zhK|KY#7Wq}>cyZPiCPf#IE4-H@W(BD(lI8V2MhWQz6Shp%Lc@^q6FzLeY@F+d*u%Xf1s{jCLZORGc>35lWEZ zh~Z+KJ#g_pl|Gt8$kpYxKJak&^$D3W!t3A89PCg7K5ZowARyYRIe)sz-g@Eo27opR zL_7TcrN0==-}C>gzenlwp$TvN!)88!X}}2<6{;@w1!7Tt{KP)_VyeSbM=mGQs35#l zeinWv(f|6N_=~~TOKl_y2yS@3P$MvU#X@=mrGv4N^=d-uDE zegPIZ6(*Yd+4((3|NA#TJG>*5lgb&)X|~Q1Mf^_i+jb-p7Wt2y_bY}b$if|XAPU$# z@Vk@f35$Hjx!Iq2Q_a19H;&b+X1JK4bQwmiyFmNv@#8BKOh9hmZ`xSF?_iRNR=WVs zcPw%Lf6d~55X2hpzfKlnpXa2&VT0<^JXi$O*s>Dwv)Y=om_L{{aq0{9e}s$KEX7)gM|=?`&O~H?-&f`3<53Vh=AU10z%J9mClO;LU0m6Uw{(^P_(quNDIU4q2s@zn8iX z+{gl}#v+SG$tCnp1?qr|fA3%bfw){Skq_ zEb#yIrN}{cK$*cOj+)}c-&F^QFmzPgJFI^w%mXChNMK?W;J>f@79o-h(89I4a_oOR zkUwlf(!E(>pgLc2+n|~(p zf8Sa6zwKm$DPk?AvDf{&$H7j?I8^vA|2lvF?v#TlVaA9uC^m%@5Zh-;4tUKeK2dX$ ze>g*Jds4uYvrfBHwy-IwD*=Xe)x;or`PYN~KZ^zGhY8e=5Ijf*6R1uS7`BeHVi)%x z3dC;?gTk6We_R7(CxE~n37|r&%juQ<|5=2;?l87bfC{mpy^#~X-%@(O%8%!M^Z3UL zAFKncm?(qXPtp5vK%{^`LhxPY|5P4wfbt#~2<}DLZ*37y;WvL8yn+&W|DG_j^tV5m zU)nlcDutb5NhZX6K8PnIg#6xa4X`Dc7gi_w$8!$5QkdgEtNAlfH)1EN&xel=G0*<) zvGH%!Z=)mTM;Ot3kdpViMjw>HA5;0a-|XLW@ID+^J*J+xH@^jdCjkTmu}j00{U3dN zs9>f(^nrTv?jk(Z5?>e0X(UH@u1x0ULZA? zKx$%fH~)0Wg3(}Wjh5BM3fpk}+%O&I#1PH|bI%XH~pBh+N*jm%#W3%2H*p)}HE!RO+8SxJ$`TlhK>(u^A z1}6HKJKWc+e>x5m?0A0O)!+AfbHc&gPY_=BKeqP#u)ga_=rCCdlUS} zZ$X$6P{kw!{W%Wtst*8WiUE@tBWr;7Z|MgA0PHw1x~OpcZLYll z&AL3YCQ=~YrfAoP{VX^SHelYPVaxw}GC#nz-quL159?APVNt};r_4l4;*%c?^W_o zhkCE``~xsmVb}aiT<4bv@#Rj-SjEPsI*0X2lU9qZ%;@mzBhz*Xw%2_wBJu%DIl4z#(>*%J#&}WR+fzt zph$_LHyoWBWvS^PwLY1-Ggyn~GMpb4%T|pn9&PHoQGMmK`pReDkpP#L(z;PccV)Zo ztM0$ILv3IiHyE9O(K>2NDu*E@APY9uv@r!)Jcn5hf(kb6JVB)klJ8a z{LgJNuoQyz(tlmjg8@WM1HV0hxn_2lroS*;Vlru zKnxTF|B^<*PUNzaOavGbWCKA()88F@Dgs~XuK64@Z%srkuZLOS;aJTx%;&o2eR)%S z@l-JfbSIBB+l{!VUcdUe>GYN&&!loOpZILit=4WJrB0&lI zW5B)Hs}fW~<~b8FXMnM1 zP{fDDL{SPr3WI~NBnY@11$h&HCE_HK?g7ON*;@6ZQxoq_wjC-gZ=Tp~*5A18dqVK* zgz}mfO8mIB%Sw%TMS*SHNe35(Ll@g}^JGhQxk0hs_Hl1Ab(T2*sdR7rc2>Ist7;nW z-4~fUIhw2YGVF=q>jgmHkTxGb^tyaRVa?{lq!!iX7XfC^{P-Ro)ovsbgq~9#1phgv z-+KdZ^({m3FGypcyZl|LPV{Z1=VykN8?Nkf+GxILRMX44Z0R_5X-{AS5hGFi!i{`p zoIjMFz2zohK-b-=(id3l>(f4?-$>xHiT1uA(>8w=Tng|5cGF#}bnMHsrSVe@FOeO5 zTUj)i2=BPmbDv#_+Abv*{&$c7Bm&qUQA|BrD$7nuA7L3lPkaU5KLt$VdjcPfyy4Gh z-7=_SrTmkM2G{$ociD=u4I1#FIco@LyE_}3PM61cE-f}F9InR+*mR0-yFU`X$i3CW z1X!L(blsVBjn%94YUb?Z8uX?Ufy)mF0a2^|Fm1eWj9)h8QY>sJPbMY3DEL22HRuyga`F9vEKZCM$o&KXP=^1; zxkQgFe3$oA2FhX+O?$We`E|IpuzRVNWp7q8&r`5;dVG@ZZHIt*m0@f2MvEJCRMu5} z;wO3y|8Yif0ptx>6`6rtE=ioQKUUS4%WI2o`gT%cm{h;@QpEFew$}aT%P3XjU^aE+SdWSB3CT3=Kmvic1G&W6~;EFZ_4l*hT+Zx>&HRf>T9>dwH6zeRsBgP zpso*lhlcajb2BAAW>TWdPnRV42|&4xBj^So1JNEPa3cTQ8RB6_@tOa4ciPTYtA4|< zH%cOk0&TAa*`lqflQ{=(yh%EdIfplG5@R5UMoqaDTGwI4jX`kOd=RZL7|CCh=seNG zet(+D!ij1{a28S3wixt6V_c4KAKUATw#a;Gi9RiJ=qi;?Vpm1xKK!~+>&3r>ltJ0P z9jm+Jx_8Wfg@BG9m6z%%OUd^KjqFo#+2y8fW>d0IYt?EnwCmv!M2xnzHI|3sN>D2Y z|7)jwwFfv!&+_**OI!3SmwA!ukd_DscT$H_Fnao1)Tw#gPR1mNq@RN$cvOj{Yr<39 zzF(fa1Or_~n604F5&*4z0=EvPX02uPPYbRs@^Q_o@2iKm2rX`1KuybF^M_f-l*cP$ z4GyN_lk{a zI6jfL-S}xhe$KJYXWV*X&jW-%n-qQb_@*URu(vKN=E0HIcKm6P+8w1@Spi=<0VnwU zvN!(h^eJSjo%FZ_NNgSgCF;(EPbsdO&WKESO;fJje(|N83NN@B08}~GhX5I$B8G8{ zjYVis0c8cIHleJc3{kKO#9G*KtUJU3`- zd*=x$CpRpLlc|2t4Y2zG057)UJ5dg7nYd}Ybq=XDQm?@mDmg$+=ZTPslMDVT$-&3O zwEmtn_rm!IX+rK!%dv(4%IyK@E2#<~i3XS1H4f2~q(1a*3Cb(#~Fz@;+2LMpMnk zWxOY37e@uH8G$!`JCY|nx2|WroEZLEAd^6>C#d*^j|;!Q#5|L~(%|x#fyZNUuG5He ztvqUeo9V2uH40Iw-(R3T9FyZKa{FjfVY7;pCvo1gc_OOT8%-Gx!1WGz&^Fp3G^$tH zjW)U?r7}{~YNb`ZeSl=%qz`_bOm4TJr&T^a;zJ3McnPk#hBoe>RBwb$6S?WA9b5_2 z?o7u1fl&(;zGQerz~d<0TIVpS-D@~oLvUzomX;3i1&oLew~zxJCw_6WL9H}fM+Ngl zPE(%;=pQDnPaixFX1U)%PnIeq?{|<7Bj8-4`E@e*!YT0K-(MJf&ZS^%eZ$ll#*ox7 zf^U>s9BK54WSbA}8uqJL@S8?^U)MM=eTzDxm;;*46!nEbrnbUtflPTbwoUhVFS!J1 zT2}a0mYdsFpUO#Y;U=3ZmZpnbax?i-B*{cd6cm~r)wUYZmRrgXr%+`)9BF4OlkyJ6cpD%#z$}ErOoXlQm?Q_dM10-Wos@H?720yPtuog13 z(@z9gZuq^J@`iOA3TJV4D-9w{zSiiKz8@l;(%+vjICfbq_kxUishuRt5a{(fAK^Ve zD8PDce$4YxbFM5jyBSKneXG?t9Kh6e@^TV&Aa9)7w=sR%qx#DG^cLV$Hr+{i7+=fg z5(So_IxF01@@TfH?e{QWM_#EcFq3wkRMnca=GA(-+XN(6W5@1vMi_M3LS||7cAbcL zDJ7!Gf9x*b4*rfLTkjxEp$qDi0NbIqP5t}cfO>XDx>Q zn5VoBe43b{&6u7yT^%;uGdeX5HCMh z5Zd1Uh2Fvt?uW&ylBoCB{bj8P=9(Q(c->u@NMgsMVtP(>w80R#q zr6mzBS&J#PV-OuXzn{T{I}rmcJK%r>Hu<;b6B{$-KV^enTD*kto*WIg&Ww0o{ecCa zcL_*`*84z`h};i6=`2tBt#2L-c>r1Az1YtC)4a|EUJx@la5TXwFnpXrgP1|5i80*u zTOV}Ri$AsW&UXlF(~Vf(#jd1F3eV+e{nU-=TTE}_>!2pUS-0Q54kW{WV=}eU+Gjj?BRLNy&FRs}Gat-BEWe$vY+n z*X4jOs@o8%GV85TFtv6~l59H~VZ{NwS7)7@N&uZ6X$MV(;lRD`Nh=TsOH2UQ z;QOT1*k4QbC*d>0Y6(AED!E&Eo-s4ao5`ukXh@H@2MFj;6T1uViR8Vw=>P;)R%7+tl1yDp9S}m2*8RrHqO%rNSnp zc|hRiw@eY-nym48>?3p_4_YL^)S5cmn4iQ*fbdnD3SxLZu5kRO~+1j36;YRcg;>_@#?`LB+L~ZRtU0Eem*UH zM$H*>A7~15N*6T`!iw)M@`)k@T}CDLjR~XY5+60T-P#;{{FroC>0Y~2NA|wE{zs6J zDfbJt@2kC|mJ!W&?O!J<^v|dX-due`_Vt8E=9#da*DWw?#GI3I{PK%Ffu_WLs{W(# zGwa!u3iEi{W~j3n^E<+-!c%XSSJAIOZd$E1r7#;73`ZIt_jhFjz?*h6CC}wJk5T;@ zRgZJ|pW}xnXSNi*(}Lz|6+41K({Yj2KotupApG1m&-`*PVOMQMo=Z=fsg*c5Ogy3b zk^%308eMzsh^>!?7h93t6b#S3W;k(o%`rMP;=0J=1muuayFE`TQ@JRPjv%)E zJ7|PVL2x6G4b#;3sY3Xs2=1af#W6i{ZI*doJc7UF6_#KA5B_vJi|#ooV$)IIL4;tf zFb9qFof3^r9lV)qq*l8`KL{UwRIik0eA?~lpwiQbVJSaFj_mcP>M}74HJCa&kxFO9TnkBsHA_^x2Ew!Hc4E1L`96O*I; zo@8$E54u+*4y8@08%%qTF|-)w_Bx&I^RK?PeVe7Rzt)S^OC>QU(p2;4_KYlJ-8;Iv zruA$LHBb;#fe)7WbFyCY)HoOxF!;V|tN4Jf`5X;64PKp!Kdz;~|E)m5NVv96eoXo>#H|IHr z9t%`!L+k(p3UK-<%f9ERmYM-b=f~@fNhFBV-HpZh_{#f>q?_Qxrn(IXk|&7h6eE)u7}m!l+q`IvC}FJ`dQ4?fqU6^2UHEY^Qm z?=;If8uZ({L#jd{WM6@pSt=tG2GiH}f`JS!otrYHzSmQ?(j)F^1zBgMl zs_${Q1~A^=^n{xcbbkd1ks@UflCx%aJgSZ;Nr|;yWp&d?#SNGiKEC$@Ym6~y|S1!Z1?ZIe2mfb;GnlB8lZ^@zM1b$_S3|wn@3u*!*DwL)#owgX@b;W zznW8e;OpTPI&1_4f*#=%EPf4HYAKLdHO@(ChzOGoF675POWCyh;+RrJ#suBtaxl;P z5+&ZemPQr157D>NHJf=J3DkZzx%}J=!-Z%HzG;=sIDSwfS`Y3=<(i^_KK+T)Ie6SAfoqvj>PB5)lk)tz`3{&7R zs`|4k?rl?5a2XEi^vMiqf!fa6)8G)P_rhTgUoBAvtAumrRZh+*ISo<76$9*lJ>x!12NB3CXUzLwhbG z97m(W)SN^LshoCgFu+97?-wuLDDnB3NMkCco zAtqJL^JbknQmsbXQVD=}{<#+y9qARg*LA3p z9OU2-FBncR&m>$NM3G}mtMeU+^w|8Ig&a_b``AUGz^g)Y$K0|Afa%B)TX zNARZR#4CxB$N82hqxg)T6c|lPBOcPmg(}qD4u->#n@bJuSYkFL6HE=qSI)b!(L}jS)OqszWOgO)+s% z{_(~gEGz4En9qumky!BXCNWPQgCRU0X2*G~UQ@oPXk4N^GfJrI)K@&bJiAjtxh~1$3$9-){LSZd|RH5&Duf z-x${}1s2(bQu`br3Ily3>Fw6(KOb!{PysDTPntn~-Ns78ghYsfoIx=#-pBo{d|bli zc#krRpH&$wW;5TX!JS%$eX0&xLh}sTOSg;J>SlDu?NY>k2#@FYM+EdCho3$lKck6> zB_wimyzK1D5DLm^yfmju*I{qFAvp7*zzUXtx14VP(~L{Wg94M{wXLrMCi=BMy=*1{ z1qV_ri+nAd(3wyXLMB+ugt%QczGx{Dlzx$lt>BYCO{rtr(Qg4XDV%_IQY_Mv9j35X zKuwIy&)%Edm*Fyeup|1N3<2V;_gygtf^zP28~TXCK=UG$y$usg+)m%3C#s0i!~=`j zVsCt?l39z6HMWDNiNjs8gdKbH+oi~auLn*L-0^oPXnMYH#C#u#Sq%gb|ANi-$c3U`W>pBVV45r&wK_7Oux zYp7_uZ1e2UyKp2DrP;OH3m85jTis3m3Onp-UnE!nk$KM6`$q&LwNI_2;3ljqa#}s1 z&g|@;9^=b=tY+Qx+P7s`qh)E5dU$K;6xn|;r;&bKQ?Id3PMyxzcG54ux*1E3?AunE zlZS3(T%r{Nz)RyFe42k0wc^LPe5I1_z)t*Px$KJD`=!yh*>>fDK}qm!RrD+#wxM;9 zzf?BBjLzwPN}m!?{<2okKzYAXI;gSRHMO`m#~>B;(mk+fvlHyaegp;IioEpd#R*R0 ztcxqe?jwH-RVLjP=_{Wac)2aT^>&~~Vti-L$BfKB8*%uP-G(;gWAKk9cDa}6>U-?% zE8GG3$Gu|Frf0L&jk4_Ty2=^YU#%qU!Y|aR?lP%R9pv*aV%E4-HyG{h;8>6W-fWm( zIZ^PVBN_zdV2~4(ZoJj$P>J9s+d%{Bx;dI3X4~dv8fIVA zb!M(^AOe3b>65`;Q6P^Q+}4o{;#C_iGME_daky2Zi51$gpwz4jeDToi6jj1q_*0D^ z!wbP|G^P*9Qy3;ACmSf9lQ+w9ky<8IZL>csrg}_YW$Ku8A?tsshonRO@mU2@$p7tL0Aq@L~~Ks zy=3Wnv-ri=3|(LJ(%^D9ypsMMq@nKxBqv5e^_-VXYvYr+}BZ1b)i(d6Un-{}=l z0X)D~Ndr{+{w}r9Ur?~30RHs;%=gnM`v8_(Ak&~N2!tHcYxG$ z=HkW?XrN;_)~PNyh3G>qXf#7A;P2Y=NH6G_R*960rex_5W>Mn#U!h*-_YN`uq{4MNtynG=so z`PiYa^M)I2_s!d>sZ|QO7``W#X9UJ0KD%%`y9J*teDGCC`_VKtNn==Kf++_yl+207 znoY7lEk+j5ZE09AAKRuY(7jVp%8q}B89XDsD{C~EN(uC2{Hb2^+3DbO#EsJ zYzUSyii^zE8?&EMjpzb`0n?Q&k;hxUEv+*c=X>sB=>1R7zL?=Q6iOb zkH}h&6m#k2L_=^?fyy_~PP(il7`sYI7sB`Tk`&^`|wVOX3myT^E1Abs->X0K!W76|h^`iIgfm;OmYP?P7 z8bxA>U&YFu8MVyADQGFhx-MYiw+mDkAU9f21`BCMEGz}vTTBX#SDx`yYEpwkWmZ^f zQv_skxJ0@HgT@P4XNiCJ=r7LRi5@*7QKeMwm}gl zDekC`@5CY!s+zQEH=-2g@b6f3q=z1F^Ez3Z&&PzBUe}eUa2jPpTvJCZQfC?vz}M#muwt6RW`+ocTH&wbxH^>kpKg}(@LiDUN!3c z4t$SV@a=Au%P_SGv-zi?_FoN;Z;n_AqA*%eIe(IbHe#Mnd-xmAd&oAGw0E|az!xI& znT}3NO=b&5fWtSht}rCOKgEmQet&P`0$wsek;E6NnJ%IeeJ_9FZAb77TZdVc;j8Y! zpQ(`<9NW%`%+E`D>l(Kq=OxA;%(d*Nukb^L)Oqg+Y-&7;se-6lu8M{^NbQs5_Ieg= z_CyKh+-xvvqUrkV7llpXTsjW}`%sJmS4 zRmJ14jxFkEY&FH|9veO5Jy>@b3Y!7xi`*$(&6L(UZ%jU8>3imNCTu!wtxVt3`6qK- zX+Eo1VABwP3owHe6;3n6opO9YiTTL?z5n5ORjWHB6q`Xoz{<0D{W&QT`PIX_K!<*h z7N>3GZMhA49)o(@CBc_fhWB{sD-mLDz}-#;y|_*Dx{Z84Zw-=bF6XUQO7t>egSEx*j9P$|G8Rz)ke$GE>)w%aK za{1^bh#RoHU)~%<>c@QjCAR_UkE6>W_+e)-yuKD-Xn1$~NO5CAw4pa)q=Q^{f$Oep zAKFvbyUInYb=(mRt>$Mj`}x(2GQ8ML!`V5Y_7kjj^n)`}1;KCV&083PDFNqkrq9LK z7?{uc9@S@)9K@45*VpH$o4tWv>hkCXq?P9A1B&nnNvAYPPFZZUUXA?%#?)>NL66l> z`lRoE;;&gOc2A)W?51(M6+e0%QB0)2LCo$XOFU`t&tz+zN+kKqyqUWyEnueGKiGRYw^T7);1}#95y}q zg}j0S?62BIUhAI5MC~x`f0pa^z@aaQUT8c5`1>W^LF139^&}0SEBi$ojf4weM3cPGDus`$ zd5#`C=-&7^)0)=&wUHlmSU1=i8>&EBmQ*XEV~MN4-sG5qPky|k#T7A5G`~6c+F>Y^cd?*`#ir_=CmOSYKC-tkz0%d6JsTu|;ZJht{TbAYNIF}k3XQTlZ;(pjE!C=j z)g>7-`K6h6`xT@w?&nSozx{j?IGk#v>a`T2010BXNF<$RZ9JW3P2wvO`gv&l7gnoS z^*%7rfjQQ5cIHY5Oa`LUF04D=neC|5{uTACx^5gOo?oee6lM1#@c32x%szE)*nvpSxqQ!J{KgxW3~5QG@>vsn?*W}*Y%19C>ysOJA%++aFKDxcPKvQ@hKGZ z*+k%Z)1luQ^$GXJ(S=dl#wCRPwBX#dAOkgf-ZWr))E5t-^g2{4#&XWQI~^1)lM1W- zvdy~wu+AOeEI$;IIoq6;!=cs6+@aTCe65u+Bh)YnEU@dvp`poQMiIJ+MMoP?v-H-=_UlSX z{#v0%v`GnKP7q`1274SnM@4_zEe}{Jmy6+L(8hC%jjP-LL)lkARoSguE25;dAkvK} zAc%BHNP~2Pij;Kc1}RDDl#=f5mhSHE?r!+khI7t6-+#xr=X_&07>K?vYp;0LQ*+L1 zd(n*G<|}KhlYof$JpvZabqyqe#>2Y+aDM*T4D+4J**ry?^?d;N8QKo{Nd?4#D~&RD z%g6wAZHBO&iOCsaE~+u6VCUzssUgGr+Cslqfa1$H-Ht175{U}s8Nf2$(0Y1CBfNzv zTa#okq$~7rXnS6^hDv3~#K&~1zvuV{F#mJ&hjlteSc4{;BU`2K3Rkvw4ffbL*?m=bkFxD$fF?XCegR+=-?MSYm%m!n}1ji zm`B6@d=K#K@WZvaF?pN-Xw>cb4^~faczXNH-^?y@SlcRo8_irPi?Vx2!?e?M!*16H zWWr{>$qwUI0y?LASZ?dYUDl>4J8z%?*LT=|Fd|73K2EezGQ9&7d|`t61|`#PuMy{nW}L}1QT`&4sjQl=cX8S6+f?9lA(ui z&Imm|Vcdv_20Pf>kwkmO1<8t-Je-4~g@PkYZo}mjED@!zR`H4QSuJY~X9TTade5`L9s_-j(8^e{ZL}i`?$@-+ z15a$onGUzHsU{>tOmB-5P2uobic2mZA9@vwRFF=%vXBu9Mxke^SDW+u`UZLC51L{# zH3+#6eb6%^zZ}z{wvkkQ;A1*JeEHfY##EXpH}IKUKBC<^WQnOC=>rOL$E_=7!@pMZ` zmyg4m?1}jDozBmfl5Ig}K&k0ayjW75+4wp1lJ8xoZOqae)o`dI$?>$7e1sriM8b38 z>44G`?HZ7#@MRq<4yE~|oDTyilcETHC07+NJpG)<&x=CBhB1{F-yW=%H`%%&rG{do z!z!0I0FYMhva4po?LK`&|fws8{51+{8V8a`(mJ0 z9j~{v%I22j>5H0_&Q!;D8f-+`gV4+Tq$?ws8^YduGF^EZ4pivHf=E5I*XC|2d-CVw z+e0&EFWqBL4YxXqr^U@)Z_gU!5azCiz#=SgysNvoP{mDXu&tb?0_biyX6#DE1}gENxpbMfkYRIfbNk5MixBXC)N z5Fqxsk#JSA+>Li`H(zdfs%REcduv_zwI`YYOE-%6$&bXq<*JsY~LuhXgOc(M~|eIaW-J z&B(eLxGabz0=In(=KSw9`uA&!zqi%Y4Sk*GejqZ)D}_uJpzc`AX3tO!j_%mR99$ja z3KPE&UefjD1(|~_gOeX_PO%2{L<=M`()m|+8oK%)f#l7k?!txd(i)h)~ z4BXBll#s_po613Vev8HPZHyAX{R)kyfAOEleRwPx{XA1lV=JI$Hec&_59zF z!t^(8sAZU5s_nmssN+24Vt)Fh?POWog zNGJKMk0@)@nel(4_G}BGx((Nnz{_<0X&HrJhl;+s;PDpHP{i?b7*T-YB(fCLRA^Od z)3O|yzj>t{2BV_@2XGB^E|WW5aq!8#?J3>08bQ4*-~n0$i|?%XRDc%2hD7{H*jIZd zt$a$;50DzCkMJjET0$amx{jL0?ABZ5ayd7@j8FH!YrxbG?984DhjlEcsE$h3U+{nU ziYNf*#3`QI8<`_0iP-{K0fGdmUpGg#2NLBuVzr6N*jA@3^vd1=$OO-)a7W}RozSJM>5 zau$JT`YbPb7Q+ClIfM|alJmnz|Nmdf1gF&!3x@K z3bK>32zXmq+I>qeOZ-CFef$og8Teh|JBSuO>{$Wq%-hd*K=LMGn0^sr9|WcaqU=1v zbaz?r#n11WzWT;aErg^)Z|{B>j~{SoUZHUYT&hK8NbkE*ZEb3C+G=O7$Y*D;*&(A9 z?wnCCGjes11bFPp@_-6KiBKE?_ZareiPpuu97S$?{P{Ld%lU(+`fu%P(um=A%*F>O zg3{hng}i)qYu@nX5{ZFGcnK$%7fb6swHdqy3AV>tf2`@2TlBL~xd8VqZiBLBweamy zCE^i43@sXaxgUx-b82uRwwu9WDewOEgPu;_*Of_~0Q-~UrQsgUI3PMe5G`>XJf5P} zt(&}CwoxsesP1R8P4(=Uf27xGj82lM*pB2<1}A# zL&eOug&%ra(b|Rww^p4yZ$qV0Z?jp97%aac37GK+*k0ySp6XhHbko>q9gB&6**Y5@ zO8dn$6_*Xsn#S(<_o(~O%H}8U_`z^V5`{pVY+c;%hStl<+1{9UQWvPtvrkW*(n@8D zS_tl>3O@Iuf+`JSZNi@bLN3bTZ$pDd78O%nhAz}ooOL&|O4}0|uV!x^35l_)l0q2s z%dlQ4$mJ2SnhJj#HTpdYR0?{^uU9Yii!<;iaaHmo*RUDSPKg|+CE`~je zvw=duO?r&SgyX(y<%`t)Xf>bRYhnJkyCam*Zs0lKx$)-`$30$O-Kf80v3IuN zC*Hu`|DwxceDzA=SLu+elwqFQ4gZ^wHk0wn8i1FP0FFE9<;k`p8)*^`9!>A6gJfRS z?Vom|qewG$hwcDh3XQ39Zh6De43kvxQ1HN6sFv2?N)FI8fs3s(y+IZUB5hNK%%CEr zDDJwj*YRI6gWTZL8snQ!{u+6+;+_$$YB@^Gy=J|L>koM@08~G4DHvKxz=Z$FiF2_sV9Cg6c#q9(i){rq%jI&}-FF8C_Z#dL?qH@Gd%(L3`oT z2~f{H-R2+$RgHn2iATeoh-lU0>kG}kK=7{*i2{Ilzm^jYLNy8;TbnwiDC^&0^7S7q zcSL4??*xo8qG8{xtO$Tc!TNCbD$po!h#5WY)B;R1AO%XHS*y#Bl{!P~l761+1OFiY zC*lR<3sLfUtv_cT1KfoqKJF=#1E|7ILuELRH2PM!@2_!if8U7|M55mFezc%@K^1$u z8Od?D9D-SHa)C%e_OP;)wkRbuIgTYn;j)%LUf1E?>~J*3kI^*#Idxu%rE=J}hanpH zmFF)eeWGq!e#;kH%qr6=`Mq{Y$9)uTdOlgP>-T!vNiO`_vg;+E z*OA#SmRTu()fb{wYKk9@%HAZ~73b1y5|r|iAsX#nfQwMY=8x$4b|2exllAcN23ayE z>*EH7y?!~=&Z~fqwfrHpV$xzxfgs_@TlSomt0WE2!8Hwv6Q-V|#YyaE?ypf_){~g7 z-V_xYkBYR8V;h;$^`7S!CriFy-_M~%D|y_iaap!YWF=31kxN6)C8GyxonE#wia8)t z@tf2Gi;&O?Z2)g8(AqCMv$+I(T(XAYXPh@S;A46A zewD|IWM$jJJ`0gy7hBVQ?x4MJbx3o}ib*MdIlr2Rq3wPBw%*oY!o>IJL&D{l%aBT< zE+v~k6)PX}B$m^Xl`E(mf4P&R)g-UXHBVa1S$m$Wubupuo?SYj@3at2_y0V|k^Rc)R{) zp8C@9$h1A01y#WcWb@i=54>XrN(_XS{lg_rh*+s#DO^!&`o*SiE|BbbeSQRK3i|-W zywGx(({D3@a*2X}mgn#$i(&Y~N1kh?pxs$^Cv|qstWg@P0mBQ)ESomeVnSAmn*^xh zg~dCc%X4qMgW*=7-S@)^n=qkNV_DTO`jTs*cx31Zlw6ToDu|1tN#Xk#gjtVL2-yB%j-mCIVoDJM50r!qZg}Ho(Vs-{k z+Wz@;mad{5rBvYJaW98+82zv=jmB4AR|__7%t&EkO3d%k7m>YGdeSBH`TG2Qx2MtD zykdtCc&m)jjv7fkj@f^mG}>YuJFRAKrH z7Af1u%rrORsxo%FZ67{8^$C6HcB4s43bFxH92vt&*H^0G!uXw-8|yUY zC|oH%ky&JzCd?|{ppTJZ;trBHkR0(OU+{pR*-w&javq0?m7Mho&3GcT*$}k2!gl;OF10pe#tjt1UL6 zK=ep0;R~qUXXku}$`aT;v7-CP0dp#|-X?uL#QM)Eht+-9v_Vq*}J6Wk<1q8)|oUtY5i*Zo($tmBZojr;vsyf^6>fF^EEzP1*Ub$1d zDy|hHPzDXAc4|BQWOEzz>`QGD`;K5)uf8hs`b=G&(d6*}HcQo}Gn2NbxMr26t|##B zCNouox+Y9{?HxJbQIB5`zrXlr9|IJ?R;H9J3oPptD{bq>WyHZd#+po z{}t zG=DM-TzbKtsA6K<@?evw$z(;2O2Kl$l75WpGSl(rUbKM(5k z*V^?Bzjqh8Jw{sE=HrDE_|9YTF|nuHO>;hR0(fH;5Z8gX`Bii5zu2}u5j)f5b|y{6 zjj*D(AwT-6mlN4@?U;V~%6s1-1#ww32-^DubP%j=&Q}XVspb3IjYo=u{v-@*^1;v1 z3~L;Z6S+45-#;^200h}6b6BT3Aqt}64sEk&O`YmY$#7R|UGSvOzs%69V1o@kMFtH3 zzEE$Dn8=;xYWRQZG_XBGzO-EW)E-2pn!f<_Oxg~fWm(-UcodN<7yi~0sHgeCNS5qi zWD8t5E8$s@k7+LU2r%?0Z$NYfi#}Fv=IeLkSiLn-qS`=;Rs$-Db2FbbD)$%0>olca z$`730wi_yHP1&G1aeu5-g^|9jN*UJ-X?ePovtqK*?d1q9+5N&@tx>w8>YPEEn1Z{@ zjY3ai@Bcc9h*YJO9o_@*4K!G`au?J#4ZID76?mv3qwVh(1jMT+GZ<+=T1b({t7zqf zdK)(vpCok?Rb`uXxFU7{9L7CUB%L7LV1i#`+Yf*$p0x9a(coaRMzYk5A_3d;iEG6+ zmyig{85|=Y;dv_AO{>Xetofa~-9-HFS6;B_lGmvi&#`5Uic)JpG0t5C4s{ZD2=}{+ zix{PVjPQN?y%)FcjVDLEL1E6r401k1gS{|tlXRy zwqaHu`)wS%yUqdCWKYvk(}5#VG;9B;+p4b;5lW!JW&)~jFf(|t(noC5SKN-ljuJ^J zP`N$|fA$6yZHx3AQ_qzx=GJtlI4e%oP)KPop7sb?gvn^)lYUv_NpP+9<3(#KcxH6U z%dTdF%C)Km>e%dy z@JrP8rV7ji{mx9ngx1w3^q`rQgemKyTpKo%TeVeDt>@& z4o`X!+`E^==d_+mms6YP_8RZYFRFqJb$b(~(w%iL_Q zoGkoV|5U@EHE1C1qmdd&9kc}8%G6#P>%6J&5)%Z}_1|VqDXr3!i&ir})+9kD{xB3n zszzW=3*Wm5>9LSrelD|{Lk`mJB~+hM-`HNDc(uV@pY-9lLz3Xlxmra+&qv8P>jrL3 z`}N1`V>i>EV3evfgg12z(KbkvO-GGu9AlFEYIDu$Jt8TcuIA_~$F4#BtQURS>2~{T zdkouNr$(A&Y`6yG$pt*pNRD#ioo2$#MInC|y*ek=b5Bev$&U2i+CV|y@bSi>9fhB> z*}IM7a&J)29wA@@)y6KMP4xK}NZWxc^EBo=IwmiDG!ewHWL@Ok9JmChS39-=lse9NL>CCtR@R7}lJ?M>by3vkUvRl!gbww-PgIpB# zwsd3;8!Wd4B}p1p+rsW^-(1yeE_q~`fjH_I0zb<&PfkP))JQ=J!fqxFrlhRXNxF5c zYL}|#I^kpe6{Adzp2t7Z4@Ip+QJZ&eL6Ark1WFt60O2`++`qt>5knNHsdy7{*FJy` zWvXt51)>Rt{7e1YCAw}EP|*a3#`i9R(IU-pB2;9vbcW2wPn`GvoCMfYJ&-A!7@X7HL7FufUgBb+eWo)mN z_FrlrG788oJlM(}n`mh1XW|pHToWFBdd`<~n#n~VPX5g|<_)%L*Qnh9c2wQ@o5E(X zttb5-wU!yb!DiY3g#;0V1`RoXA4-XJC2@0I5o6}#gDalVFt;^CA*Kp_J#7&*`cgWe zkl^|&>zQc2f&!ZnGj$Z%nB%V=o!q)bPQ3$D&MY{Ey(mpto$x!0E1L9+QpG}ep5a!`93z|331X^;1h*E={m-K;S#%U(6GP-Q%{bO z>!v&{_P9!6>*G=SDzgoRpIJ@8NP9_<@Ci1Yv+zyJ_6Nk4z6#Q4Bzf=pc}TgxuG*p}Y39eY zv)EyffmH~N2Vn^J(}VHu#v1>BzT;4N+LTUu7 zhx_LmKJHJ^)zDH=WWrYpeG=HC2OL_=Z6F`XdJNLSJKE)GB;Y_Suoz0XY09@9jy}m9 ziq<%MG=Ca-US(xxats3-BR;L~IpOS9pA~CJ-+$h2p_uY*H>Ky@c+!l8Op!2lnuK1@ ztQVp{*~@v`q{#-ez3;5-X`6yDtPZtomOsh9S^Ez2zd|F(iTtUs6!*hK8 z^Ee;ALpuJBK1q0P2eaI2Gn_ZjhR<67lTw@*S8i~H^vj^eHtYpnk20>V-@0094_|57OV9VM@zG5#hr!=O{i7A zWYrLWac6V7a{t5wLaxy*QiobnPCe^8OjVHZ1C(Jj?^KEC50I6|&h1PXHV~=Gmer$| z$I3sn{0Lr!e{By|hP1#rwa>>P`*D!C=!rj=CF+f@BaUL^qA^>1;xFkw`_#5zW8M>U z8i%wTPUEBTVMZABO!WgRmO9MY2sfWO$?n4^hyrBr!QJ;wWPF0q8Us|B;ooWuLN3&l zy|g=gGo2NKBDt->`c$O^&au`4q161Y(PPD^qQWu}-}^yS>W|<_Fw}9Y$-0W05Lu@J zv>BGs+_lA4Z(Y*rxTnso)6GKPADvcW@TS<4yQo#$^CRtvkC}!B=wByRpM~x=@*X}S zT&8^Qs7S2)jh6LNe-`)r%lxi?K0HZID-dV6v;{SWqelTcs607G>kwxw{tt0 zI!eNudD5U2%p*j@H4=XsFF)^&%KC*tt`Z0f9_d#teMUCrcUN6_N+I*(li_}8QqS|L zFC476zf8B*3>F;d+YdY5_r4mRZH+<^=<^iE8=>yh-onWxqi;QK_+-+3l?So|)l-<Uf=rmYgB zW`0T0Ji%m7bagPa((IsN#R;MCPs3N0(wC-%T@;QSEy*MzTSD^A8s&mr)gUMdi1}uB zGw}4>xSQKWZ!j6b$oHcB(~l3IbSD~yaduiw1qB;wQk5%ODSXWvn<4hsJ0YUf)va=) zC|+p!;|O1tL_55P%A@$QkOWgU*a=UGXU4 zxXw5}p9}{(fq}RroMfHZWl0>Mxh_{mmU_cgcd<^RGaXJD)k`%U7yNcfWLTK{f{B1{(=y$}{ukc#i22I9z zL(yKenF55cx%&$(GLlsR2rULO@g`2eyG~QO%q70*6*gP)tGGM!D{A#60S>+u+C^_&|rdooYgBY<`_-&5w^*qi`3k zzR$9pD=g?6t0y_TZ_4jE5^YTpY!L*Arusk32H9~TqxSYUMCGddw6D}3MP(Nrrg_#l z_;eE7!2k2-4;PhbSuN)5q04Lv!F|j?@q6nB^imckCWZzK3+R81-{nD-z}w#51MNc0-ZGcKdfSMhgD@~bc$GSicETUVr^(X=mhnUITsX!^14AiNm z3mDS{k+&;?>o$t1AN)KrPCw{l<8vSWdiFx-N_Tfs!?SZEFx7)xqL5>i1XcshKI+J9 z@k-^jZt1kxWIu+sb(@8adXdphV~ZHE54&lKJBPL~!j~rIFpG0|k8Nh-G(~zA`JudF zlZrnH*zIC}(vgOU%D?knAtmVjhILtdL&5DN={+Zo=$%E2W~6$o-#R^5Y(vj6+LP4W zYwZNGfYuQBG1E9a7S*aQ4Nom{fxex-mGnoaJvto;jD001wdURUSu0qpDLl2N3URg8 zbv3HG1f%e|=c7Cb<_O0aUWo^3hfX2AI9EHxhbkE#=cLz_>GJ{{(lc1TuH-T5uM`i(ej9diZos{mI|lr&&=ftLks zElua)>$+!tERTlrYKVsb^Y5r6dY47|!E1@_^#wypy`080BBth8oifk8l z6o-#y$~#Dy@*?_>a=)YTRWvFkNvR@x?X>{R2|XHprJw{_WNGG6XsAMNs0)TaTn~iu zs6-vd*!QPqdqyK!t1o6J-N5E8O`4=vcdg94+cW~qJFonS^!&c((W=B300+cA#WYcp zzL$($Sb6!UbbD%|a3SQNG}9o>A|kglS=(W0a`@8K`;_=2ghKO)zWjd1r$nA|SH3+s zPY!tD)*9I%S#jMHZBG(7)w0Wk3|)FnJszom_IO?_D;AnGSyrWn_JP>Goo>beI85V; zO_J(UUjnDT@i{{d`w1(d?rVuEJkmUaY2C*pDc2NU0wfm=W5fzYm?zRqiYo7)n*j|8 z@>~F5`&!i#w5~(CdT&#rGG8Dt^MTCeSs>SsC3J4#k zGAP}D^{zwPE0d#|y)D;7@|(7B)5=g`Ewc7SPEKm&^phr)efy+qJ(yctI}1^Qa70dc zdKa^)imcQ<@W#T*q^PkzNy@b0dadT0)aIqjs1xxw{C74HH;x6X2&W+@9bEQx7||@a zr5{+15g*klRz&)%UU_!SIHt zMM~yn3jL#W&(2EB2R$Hu0e?LpI9?N&b~o{x=4uFSHx&nY*bnMc7^JUQt;6&xP^4$j zpZQ#Oltg1to$yaQMTJS{ZNK_n_SnrdXA*K&je>q{dQ~3$^0+ZBF_HH=5!rRp%~><} z);QzML_6ljJ}ib;#buS_wkBI9A49zCA+9O`YE#1c5Dy1aVb#y^AMoqnCr*Q8BPhlj z_sO#mX_145YQ)j32{B9B66=wdj| zIGbXAtW+~_xCLSxnNYXPEm~hP9beI!Idf<3z}ZHTcp#d^zf)g$bNmo}=d%?Lzi8gd zXs0~3_6hzK)vd^Z=b~6ksQ1-~Q1oRGvJ|{eJ=Q5FzM^eURbUJ13e}LEmE`mw7ORkfu0_QtLl&be3ko$}OPWbGP`(NDa zCUQV<8Z}g9`WwK7XwhnrrVEiUycl7x5CoFC9tteF+?Xx74sDcib_uOX5x-dRAG@>u z(BC%aLTuzU-F!G+I@wa4%{}C-^-a_qFFth zr-UA@COPnp`#)D}A8FX%=W^S9ir z{xVVj`WXNFn?JsP@*Mm(wps_MB9scW#0;N77!ak z9pE=>!}9t8gOMd*07mp-bA7q~J{R^s?$*D%UjP36A1(@D9k`miWAC51Pm!oifU{nr zZ^}gp<$9&;VGsDP8KX%(!I**?!)opedhWa+phA1l+_zBqNTDOjcXTN#yIos&(3K$+ z29<*nQ>pwoA31J6>%*Q|$W<_lYDc7>TkC&MzKr$|`hg!1M*rit#e-iyuiF}azhr;o zD;frHIr&MO?j!(+U4)^X;>n->x%PkKMZWs8T0-fqEq_T6B0+bo010%u651C& z{kS_s^LYxRays)?Xlo zE;sQ7l-K#9`(=RFT@?Dyt^c1-?OZ)D7i(^BaqtoD?geTXR3KdMNZgVxGFN|Znf}J0 z*j>^rbi9rrw%dQ!J`;+?t9@zqr!COpA}{#TJRnbGzebWriQeI`cJVX%RxllonerZy zgbkeq?7=p-|9(O4|0lc)m`#!gUl{IoD(?~L-fwXA;;0io{hM2tSDXsyUPL-Q**k;I z=NvawG=SS>)%foorZ2G2)7->#c(*Qd^>@~fg$f`2?+)k)YQ~SE#0c-!Mc^gW`eguW z@xMEu#OGi@Nn`G2<N>%#f7|*IL#^NYm}mZXS==uVpr7*(`61fh9ncOQ zcybrdekT&TRlhJp-*a+xxb}D7LmC0rKBzOI=KkoMf%!@&dee2krT)f7a;bve^HmRm z)bBUCJM@Hp)@{N5yS9cLO$98{k8rHbdw*m~9{hDiK4#1BZ=T8Tu#RArHr(9s?uT#+ zRb)8zVLJU6bM&2U`_JP;!-VqtW9r7XibH)aROp%!eHWQS`_FdauNEYc7Cf1>J#_E~ z`s7?aATeKad^YT7mY1c7v|!37wr9cVDJO4WiV{8yE`m@{gwas5Kp1Xi>FvD zHupM1pTKLs37g(uUw`L4Hc&UvCjOW5Ap|rDA3N2X7+O z43M=1VXdl>CCK%_}KUNk0t4zWe>9ShADWp%wY4~{mJ`RL;fFM zJ#{B{LVqxIFAO9OChAGtsb}tN`MKsC&1I)TQ-b>HN5~K|Q*q1MS`W zOUZDfp@4JSCu(;xB)GBW&G30=l9O-I{y|RN0FS_-XnB z|5RA4YEPZfFOTG?9;`$kQ&?q&_U}>K3E#c#9M(y#NOB}^7Hfkb?6tJ`!D{d3P@Vnp zFTdw(6XPdk!2oItjl!Lqp(#wSRM?ZPb6IA?sn;CVSFcZ39r!rv{E;TE(p3H=wmjK0gjO9xB#QjTjgiS8Xj>eP zI5QfKdl`pZ0`T_bcUEc8Kz4IWJwe-=FAnbWg%2W=~%jh_C( zAl9d_*-@+a-#g_w5x#!XZFR#UODS4vsO&oY`N{qMYJ>d%x$qFLrOidGC>8cR*%gkR z7>><^(yLEc;jvEMD8xC?1voP3l-GS(0oNjs8t{#H9br7};6SLHt0vWvPx9!#w1U0AXHpnIbB9u3d-l^~r)IdxPKCuJ02_w#B#BhEk2*z-MGZxF)8n5IETh-5pZSqAK}iO zaXAOV6#v#;o(t3OY%&wf4FDr=M+o4D)oNonVvkIYs>wy3vnW9T6omvq{s{=V8Z2jD z8QmThGvOa3z4f=_>ZG=r_KY>k6_9{&j<4H*ckbklmwpl6f&LEFJ?Vd3Bo_y$@8j@* zE!gJ0iyrwSozuHHdIIx^n~>(MPFFweN^dkJkRz~E>5VPpwLd*qGRadd5?E;RUJSjP z5FLzivqjAexs=ivE(b|slvpM+KWxtzFEFVfv`MXggV9E_MlX*wvW$HA)Ed@{lnqL)jds1u6J)K$(oq=i&vpne)MVdW1k~iW zaH*_c6MS;Bx8PR!PSyIZ z7&P{^gI@1sfw&`?ttiV}8RHLvFhWwA;pRkiBmBPz@+)rNgpa7p?ZF{ zkLl`!ZqKMuZR<2S`B=|prAwL3VJ9Y8ELs8Np|2tOqgHu~wo)-ysu+|XTcat%ntbuD z9)BpVusck>@myqTc!7Ue@8(IaKahM;Us+|6XLMw7wkJI;^!wVb4m;&bOB+`xf@_ruoM?ef@1SN4+GB*9vZY@CxgT**-uPxqf zt=TtXX((ebn1r9*d$+Y&(njaH{<*0Jskr_ND-BAK;3k@5_2zTa#UJdso`eTcy;`mQ zn?Cx(Yzy?iyiKI0pstxq`un-IAT6019WJi1(aqr?n_2z&w|oEWlJ3nEMAEqk^{{E& z)bMpU23&g-5c}Or4p@C^01Vgub6L)n3b_5+X451^HsmsfR%w%V#|!}=+Zg7|f8{u~ z7xdbSh35w5PTQ|1(zhT-tj2X>W=}Y5SG7%);E_xG8e()sXhpuZp5X+ z5r{a03z$5AEBwy4{{u}k#3{u9UQ7ZkwL6a@QsMy*a}Y4*$4S>K-M33Cw8unxtv!e^ zxvL#f51XZFx+g7#xzEhA-mcJD9kgZ9>oy)ne$pSUw-^8g+Vj&y4i#GoOg;^v4d@mnVUiqR3DN-S`uDk@0F} zGCM(!EK4c?M0VPiS^mhRktz|NbNSZll>+rE+8N_SBGG702XD_mvZ+q=nvm-pYaT{z zTd(OtLD`pzrG9B>djQwZsJr8MrvMRaT5a;q;cetxkwXA?pgwiiuts;&|!Z94Mh>>@O=g55-6ezUZ zHw1_&oL^N^DU*0>k02x!j}s?tuE>jYZ;7j%XDzBqsq1;2*86SUK@8Ln?m7vOlCnRIj!Y4J>2gwWr&VSIJ z1>1)lR-7#$c_j0D+AQ_^;VwmJT4(G&5Bb{oqq`?}->!e#%|Dn-h?%N4d(PrTk4I;C z-a&=UqJ!Wj0AbkfM~KTq*`%-@dgbAy?^>1jtaP8#$%(7b6fB3+P9B}6;11Tx^y;|s zwAJsrNyhRFUH`FBj1rph#gIo<@X@?&FtakBHx5;s zbSr+6gB@_tfVhM3mJ+InTGr0G?@@|)v1daK-G%v!o2>| zMDDd`+M_LbnBNqDS6LP=F^RdFo6c5&-6Zpqgfo}nc1F&aO?2pID6z)ewcF%RXE*;x zhbFtdT`UKD7RE6jS0DIugdhsWlP3UWhnA(H-tuqpgsZ;YqmbGJ)R5e)f<}3Gglw+L z0c{+**+BlZo1o+lJDk-@$jt^K`k4j7>Q8oSe4+4SZ%EH$o3c+o7lja+SXRnSIZ0yq zBhw(Q^deWb1xE$-8Dp`?y<{6x*)zIPbh(%23i_H{Wg4jZ{$|thHI@>lPA$Hessj{K z)To}OKYwXi5k1<$(H*Wc?5G$w*kK^vLOR7_WuZbbrCYC8b#AaHdZX6o0U>CdKR<0; zJ+5Iem>_rR&8jl1QE6QLS182$0H)L}P_YE?*dW1D80+@9dbl;&<<+Q&0p^eHtc)JF z@5OQ%3*5`4yv2Oyip5I(X${*y0ZT|*(|-Inv&1ULzB%-IcQ@gemwrPhNY@77S;otNSuY@R+L6s^(VCWZ$-A4Wu5c zrnV_BJao=r3_G@tWq+6KhEb0~aFQ{5enN#Ns3hZMcb!7C;*>{Vux(!6Un;jFTV=gn zS_Bz!a2gY&k+W^4Lj58WgNGYNz1~hmG`gS=k66Y+thO^)Ri%i22=(5GJJ47y&%B1R zkAD#6)j8N5md%ENO9oM+`YiwQ(tP6xcl+dL@39{)qp&ONexqaciiU3lBaoWdIsD?f z{@P&V^#OpH4&+|L`I`=fe)h&e)#*8#Xf?YkexVv|!*O11`lYP?!rd%hbZ3f0DB8Si zkr_dNc%o&>t)p*05(?AVn=Fu^g~BOW&y~EG;`|A8aq0qX_570UXeau=ba1Z*4vK zL07RDSG2|trdQ-4;X6S9yF8G{Fersc@y$?)#3euf$Q$%B0(dWSWpf{jlRwj zSHfRvdkgIf;_M}uFVVkkT;U(kmI++kh5D*xvA)ryx(J{3g8X?{yO>e4w#ZW5sV&#C zHMJLaojX5Mpp;;OMkpM2|9Oc{Cw9t3oNJOgeE2U$7xgiK`Ad)nyX|XX%(8=~AyzTJ zdBA8!vcd+WTJ+S{;?wn~SDbcv>mobiePi&mq zXPt60Hy0hOAafV4&j%#SneoDV=E-8pI=8i^&-LFyVtb}-`*7(`lu4!R^#O4bZOe~7 ztD~!FXlLZXYJsn$V#Qmkh`7Afr?!Nir`&V3{_)aXAG)Vg^0eN5ANAFZI5ptWVqP}Z z%#&=rbC2$_7<*z5T+!i$0*U>y<+CcQKbC*Tmra-fFvV9;WPU{bx>?)YjpUi>*B377 zfQ*y(lTx7ogEtOO91tByj^V2Nm*~KD5$Mkc%!6q$O@$q`*KotNqv;T5H&U1H2a7H> zj#Kn?=hl_Txa^`4ikV81H1af5Qk-DD<5@|xS|x*lM$%>>YGpA_x#ce=!!up~j|F3$ zf^uFRJ_lPxy=#GGrbA4UVbC}R?cJ}hgsjmQM*7B1cY}TOK1t2nWPnTV8v2;2!BOpFLrKiOHPX zI$vIT=`Tw~vmTKo_uQU*@;%n%`Qd5^bIz~L3T}%PKSb%Hg~;t@~x!7OQLV9 zQcLfTjtYO}0XRu#%g^YN$!v6g{}*h+h}gC>Ojd+@(a2p|>J-Kjahw%bm76Tv<~Dnu z`gV&8H2tu;knY-X1mt0A>`_DQcwP@Rwn8|yJ2-ANKl^7Go^MR(<0W!U04Y;IVd@sot>th1`knTf;Z^!7T=4CA^@YR3+DFe@ z2U|==aEjj{jIQ@gZ@ot#Eo;>KQE5P7;MfD`UKVfVUJjal6GRIAt{d3JeT0SYH8SgW4;a)l=VqLjDPxz_QFfoF~cO(J9JUEQUbWr)|FNk?b)L=Au)AFbi<#P$>kqxm{yQfArD#GO=j}cxP zU5QHSgGS4ElCg$Do6MzPijAv_?Ldxqc-BiykvO{&J$~$#68~C#q}Nj*si44 z4$IBsHt>l_p;Z%H@p-shl9eU{QHJehy*nZT6^#x3yqs@7o-KW76?@PB z5BhQ8xo%FEas1N3Q*U5MvB!i!FA|og#P6#&wG(XZY)au#J|t-&r#H*}|CoF0 zsH)m^4^$DPq*Fpbq)S4&L!=u-x3Ip3#$PrTG^48LkhGos*FHrWO`zNUrs%{{OH#{Y-@J^nvg zKNJ}M-{(U}KDrlQXW9-0)E9Zpk5Q9B?N8<Cb8YAB7}nFK!1ymotls(N-5#%PXk-gXl1~%9*%97q_&J>sknE;)p3WT~vOa}R!MQQu7 z^p+16zX~d`otMbMet!G9f3cZbYJK(ogL6&N`DID@2!%2-At&wJn32%avzDj(2Q?4O z;rx=XEqBK0RMRxSetkQN?Tn+$;PB4;)R&(aFWwvHCrH^vNd<|@)-@>RVC%s2vIv3E z#8Dn7E;mf+K&mzT4w_DyTum?liVH=@dHRF*G-)3@FAiYL_JP52kVF{(hHd}=!2cfX zN{;H5cE?Q@=zVE6){L-(?p;g42Lc-IOH{HZRuXdl(=*i6oZB+e`xXPD(bR$iJraGbeoVG$s(1B2T3MOtsO)LS28S)ydF< zBOY}TiclK@&A42hBym||BIvJNe*!h4F22!EEE46&;c_jy+T1PC(|yP$x_GJDi<7xI zVv5VLG(&U5B0ts=Dt2&vby|0&w>~35T(@5xd3>I0 zmkmO1$_|UgB=Y{a;ISOxTDcr@IN|oHIl64oOow{iFbmydx_j?MU|A^sMy&N9pQ*}7 zQE{u$!7nFVu8^N^yye*Fqfm)s`XU8V1}(9YYF1H<<{R3YvQa!F)E0qKc2IxuEDMns zriwij$G65P4Uu|XIx*=>Ad{41TGK}X#) zO8E&v>#MT4UQQyLuO2xJn$e-zyF+U~%Gr9kizakhPRs1vSFVlO^($9|gLa-l^-vH= zQKMoP&)EqQqq4$7nU+*Ux)pSZ5?MyMkxL*<54G1zU^3!?I6g>amGyhNYA5*8|WTK&G}teIov4JoQmjRi3HEjc~nAg4b<<~h=Y z)OfMR_Gl?gIxygn0yqedb&gZQ{}b_BkuFK^Mwb7-jlVBe-w2zoaF*Df@EF6~G607A zuwsBCfi_mLru%PpF?6eh-1?cWH*+ucSUE*%+ol9HN8Ev9tbP>clIF*(jRBER1w2B7D6z2dZZ!g0n1tvOZD3ZK*=Eq(dP2DFBcNSu~^8qz%U|X|C zbjaAfc?V&8a4{PuD;WLVG(3I09c+PZ*=&n=H9zK3h8#r}y7yFGv9;0dd6f{AupXjI z(=v0+Kx9?dZNHx#2HcD<=y202+P^pRe+J=un`rFJTY-?Q9CHC5ho6K&hZo|{Ha)RfLcJrx)Y zg7%_nY4>BTytGZiAiv2+X1MXjXLFl`YP34QR(jp4nEip_al~{@HuahMw!g|!>U71I zu%RK_C#70D!}tW@MSCs&oac>3_B2_-rDBo_L`JfaTV&d1?2eVBr|RRyiRkCgIbIOn z-lRN~J78PN+bI~C$upQ7w zCiEL#oJWCYjIMXcUiPl?iP^_;J83dD_LorwnL91$G+qkYiEz8yzfyvdZzz=O?(T_p zVaRoDDtu1`jwy4=OGegm{D9QC8?I_7SLZ(Kj^>Z>43TlFU`@=U0ve87CdY88iVot#(!?X*+eb2<*P@=M%H&E|=; zcV*+}bmC$wBJZls^wxMk7W8bCiq}1(-6(x)BQ^nLFSxI!Td(xoj9ECnvm?43Y;kqL ztKArK#l1sCU`FbDVZSB6g4DO8wD(K`^~uxUmnc-7qt!{r7$)%h3-|_BKYA}malq5gpO;_8FhEHyTZkp`EGt=o2q3j4k1R5ALZ zV}vu~FQua3m|d!9S=-6et;1!5Vz=?*62=dkj_boP_r!!o zwnpW|L8Tw^7l&NV&*$9n+y=h4UxxW)ltheDNVd6PC-nSe?+LVlsphNQbO#$CK3W0d z3UqC@>(Z4RIGq);71SUc23o=)g)B*()hoj_0FPHJeD5};-?PdX#SwYYw3BcnXMTK3 z7^87|7xDEI@%Gx<%|V-&oy-X$LsOO9AU-kb8I3^2vq$nCB0Yr@))@K9Kl+X+>gy9Y zPtQ(NI4P)Mu23zxBTf9Z+323@cSw0DWc=%LIR4gtw4TRQ{RdH6b^6ze#UsJ3zeFN; zO5X-0y}OH?G$@v>MtYC4BeH3Ntrs`a%XZ*{`x(46Z-R{kB08KMP?|j9c-?jdv`G(e zDDohlDl#Do_b>A+g=&!JBhS+(v2a*qqgIqjkmgW4G^X8Zd>KffWlxx3R>Rw%?vb)jl6mNYkT<5fscyHdNrT>>pq&JJs6 zQOlp9oE&~bqR5za$T?_K%>+zhXrccDT2T{UpUfd}D+CIvJ5+)?GRp);#j8k3N0( za9S@!N`11@)ET7Id_#n2WM0Rwr#$ncG&cbzw$Jgv|5wND){0S%BrmMuFQ1^@`EL5; zbz2Sgih0asp=6hQn@)8tvz`5qCS1JDP%pL&stRT~3@O4Fwhi|4TXw~-5!1udQ4E{D<&ebMB6cPHO7gT&7_ zzCZR$;rs2pO~Eu9VN>XN3YdWncKj~9$519cFxX&_qf>v=Vc;XhzJ?g@92jbuH&v^X z*7Ht?9f^yJ2>h6Swkiqkbp89sK1PR)VcEdL;shRTc5Z;_CtB-8*5SH#T?Eqr0*1%f34|TO+RCEnAnb{P-1fzS^Na@d^`8m01ut-FQBOSdagp zzEy0wlXK50^j)~iK{}G+do~fX(J7jb%*CfB1Yxa4S204)^DvUaGl4^%2IFw3W#;lk ziE5z+q;Uaa7F5}y4OdzqEuWe8?M6Q0&3SmLt4m_t$=#xWTb?D!fyd3ei>&iO2EHQ) z^`^{JZ2xNj*w6+J&1vZ^HXA*84kvskj=IPH1RA(pg`PmkO;ix0+V#U`L8!OL2rU@N zuZW|l)Vo7Aw^TqLF$e9^Z+G{^LNmwJm%pDDwQ_qTaYOQjNfFKvlpHeAg3-KHZGxd- z^Oz)DZ6X=ZF1ugqfqJ{z$6WVj8?|z^)cFO`rP~Pb3a7*bpGHj=$p~Pa$}=a%guKA$ zIPo{}_4@=;_n6e~dJoG{lvNFg>9viG{b?15@YV0JXG{659=e#`m(tVf#rDXxNR3ew zaz2FNeV-!@>VvA=!XL!fsp4=we?k(*%$4`)Y)kr8D31$Qf(<<){}h=5&X0Sm4{$6V z)$lB;qn&!p6z>)cy(qOPsOv8yieRYhB5>EUJF2X&^pED&y{cey)h|D=2V?J=VqC=w z`ArZts3GX7UaFF6A#C59BuapBG7lQd_9PrU%~Y0Pw+=z}&bPlv(O$V#&#vkjc^QJ* zv_QHZbR2E$;EXzS81S?gef(($PkS zH;YrBsb}ZNd5v&BHg@J^648Jcw)fLOA@rGc_VjmEOGNR9oeO0F`@Z<77f4y`5TJWEthr^%;Jm!5i$rGE#+l8J!iaCU>F16h5||ei|(} z*ayd>FASGfad-(bD6P>nIUEI?5BMTk)O^EqjPKV+!74agxu2?B?P@=3Oy-A@l|ZMv z-d-V0uIF2%m@9(x8QrSwcd%$CVphiIPF$Uv2MPI!P5sdD0Tv|*ZjPpz$aU_&wjMnb zcHF}5$G_Qun{UKm;M}O3`>gt9Fx@33;~>^8KETMN|LK5FymSmivHV(7k-SFg5!#wXxG-d(s!AoVQpJ;QTc3fZ4U_ zNCE*E_m~eDNhiQaGB;KHHj;=u6;FQ~Njiv;#Q66AGLmw0Jmr?Y!fjuv^KBPrpP4eb z7b}H_JLuM1rrxfW5h8J*TUr zN_lT*P_4hj2xhcqni%O-%qW|R@DE!IpwtVTG*6-dC5_2DaI=7aZj)?IoYD(+V+h-9 z3iem4zWMlhQkvA38|)DuEV_5CT6IBv#BI&VQdf|~m4O~=JtZKAty#ZOCAb>EdX+q*{mT(eU5Wbz`K%fat0uj?IUsG>{bRE{PQ@??L#j1+i1rsGHDh zbH4l{cdG5K46*#fEJ%wievN4^ONCGQWH#U3)+?8JxOSg19}(!;hgdY;fQ@H2&PtLc z(0_Tgs3jE5>4^4Q%N1t5p8~P_8PTC)OZ}tTGqv2Je<;(Z45~8a!S;^jE2SgvspWkE zuK{(DdFFT7Ocp=uU$$Izt-BT>3ab>We+WP)tN5J5>U_Q}1DunRFE=*;QU8v zr18&|EPI^|B{vm`x&EloEFo~r@{+S*ASPA%@R#}9b{1*xBNng>HCnb7OnL`$TTdi~ z%+_UqLWL~BH}twPxQO;JcQMm1z)_-U1`_KZ?T?OD9wGPGI{l#K;VMrl-)g4SF}uf#_352F=ar{>Rdv??ylP%8&V^SihYn()hsnv8E0i zd%q|VB71hks0IihAfgxTdHrSe=w^Z^>PB0@aA20z@4&E$1rusGg?+~0cuRAK$Sb!| z@6}AZM65}I<%*$-Rdft}vQT#f$9r+PwU1x0f}*L%wtHe@fDEwsO2>=xf;{lg9R_DrW&7}#qfl~9t`x{1mv}_U zdwTgtH}-_e`kH45-?SDl$we`^>18k|-}1F}#kj(?eFn!Ng+8CjsocmnHF;{^z< zXP%O!um;_~4n1ZoovEBZ%HgMU;y~i(IFH(0vAk@!{yp(iBRo)P_wr#qZp~~^a=f|C^_pZXx4)Gm5GGm@A1?kBqSmMa z^=%BT?(&;R-`-T3lvmjb!r?`OGeH^9=|?M_q}WcrNchTtw{=z$&3r0*T*qJWdBa{Y zPo5*=`zIaIa`6_DorHsMVcf zg7^|<(>=~A)ZLLBsnpXg_mX^@jR6g6tEeOxBIptgJZ?U8l9X@H?2&^(;MvTmbCw#1<>~^R4vJ7onv$cI`^PE-%Wgh+a*1WqSf zUZ{%@F7jm$$69;~9h$^c!*}rVRTh%YFPI!C77SHUE)^{9=%L8oHE!fM0 z??2)iq%(1-fUt3#^zL;Q)#`~mh!`5?XRgT3z!%50) z2N!qI^4M0;qu!n6NXqBtRF6!kHplHL{IJ!?%q0rdT*x_lHO4G^=BimXeG+?+JGOck z^P0lTQvpi(_7c} z+o;xWkk?(DM!yJXR7ku*^9HZ};!(+aXu&8mvml8tOb;+TLmqS8*{xM?NNPLD?Fzmf46JJSKOT9HIOiJxLvvZgmq(WV@YIr!5<6J4?u>1x@S{AQBvsIi7 zb7=lW(;i9AgIwe{n_3j*wpNw1KXdw&6_AGpn)Z7NlY}JX3yfLi1hgN`)uNggC6T_i zMsbRz?$f^lFJf(hRLAbXU&9eFq=*}Xm`f{ra|bF#pCrEd1xL|=ZOtX3X`HxZsJ$q0 z&iCj9y<*FJa+JWeK$1o&S07QNTd--0nIix7FPQY*bzrO(%ht4sA}YqA$vx z43K3G-zQ#144sn&hLLLy>}`S@fKWS~G5zv{P*gjX5%E`~N4d38;#nen7e6@5F82y=2I+2~l=o}LPhdz;4GXAX<$nmi8!#)Esbh;rL z!@=$x_+qp~&W7r8bq@e`I7-%U*Xg*1!bv;3dTBT`fKk4ys8Y!+@$P+zazzObC6P0$ zR3irG$#V&mf|rN(O13|T(_zXfMFLmt*Xpe{59Lg!KpA}tCGIfoA%qe|#TwOK*Jni3 z6I}MjB4Z%sh@EYeLAgE7?*@)e*k8>T>c%YxkAYd{7f-!%Uk8xEdGdcC9V+ZBuCUud z=GgtdOcwBwQLm2M8;3ztb}79o_U-nqqL4fJHqzwxTDQ*qkjYS zXGl)lE(dK9r}~nMyy-R*9c)-8TcID2PTjk9 zygzrNSR`nt>ZdUYd%9zCksfi+Gq8QLmIS`o9Pgir;;?y6a&dWXdyC|GM>W@{k*cxKL?Q#2~Qh z`3)7bQdit)VJ-J%sHNA-YL)RjUNOl}vz4C1^l#vWI}3P)2(sfMf#DEp0Ls`spP)ZC zYqC7Die0Z#luWgbV0)6ty)b=!$8@tFSad0p>W+mGu%Af~ zgF2ce?DM$o))>t=+!Lyj>-8|L{7<(EZSZIIi#9ts1pG-(;2AS{*}y(4dciUwq3gV3 zt_d*dV}84-O%~kIV|FSUHZBfT67Zq}3Clm4Lhz%}MqS=68Gadk< zju*sbecnjsxiP4*E9%#wow8Fv=>)vYT4clzL74QEB4Mz|uds`RZ47=`(lc{KY(dG< z%iPVejb?~ah(|NQXf)U-Raq=ZHAyA3i!i;otzi_}Yl{~D*u6&ksZcHFIho`S&;3BZ zF`zRgn?y*|3avd5OQ9x#K4QgCR1Uklq$Vu1GR{)thWE_j^!n`c_0H+b>&gXGs+cu< z!wa#q=Ba9u^(ni6xmb3keB}V(z%G8VNOw9x=XuN(ZhdbnAo#*O+ng60KiMOC$2u0G z5xqT@Cw8>lo&`)jO*fz!$JI>-B07bJx=KYQ@Y*#Wo7{pHEWQ&ho@Tje_=w-V9|}!q@9kJ1z_SA8na>wxx_X;%?tEmOHs<~Cq_}q336JW;+8(S z^!#BYZHN{wgK}Am1f4GV6dszNI1{bLQLe`CUf%}guGZbm^gQVEg{++`0KTNoxtw=P z-3RB=3twotzf2mqcMAc+V{?BYpibw#*(WxIesy}cx`}HM;%fk0rBjlJaBh& zk*zze@?g8#8GU)J;hKFM^dfPxHjxh_jK4V&z9iu~DvvoU_mdU7ZS(oTo$1V&yc^Ln zXL}G%HubU#wa3HCL8y>#NX*3R*gM|O2yPE|4)xR{e}xs+bK?G2dGV!ilwO+^TjeIx zrway6Jna{T?oYoTU|B6szUH~w0I;6fkrz({D$*ZCU%0sx|54H{p#ZVxefqCZPXd2b zYa1Iux#$3qU#uZczp)_hy23A*4+QIAwaU}?kzqj3@asfwjwt4w@wH#F8OsZJojRIR zcGvWkiLU&HDuX*BJf`|@LAgYSi9gfpR^fM(Togs-e4pEdst7{zDU*ni<~lz4sa>(vI*a?mtL6$`N~XAE`soWVZG#Wf}vm`r^U%Qcu{QLLYMUt1VtUKsy~zj6(* zOD2TOMM#aq%Ne1Q?4N%ARa^>WNN|_d{N8nmleyoD+xMEsIdK)oo-|8m&=RcI>K(m7 zRB!dM<6}W{=+c$Lc4yX-ezp@}^P$9wVr{o%oSmo&nOZ>Z^|dR}@Xg-+joc@fP2WE2 zj{WnMSjF@Sa@9`2AD(|ma3C`7`qgB7HJ{Iv(Ar0Gyb&GBT=M zt7zj##&raM#~A(8;l&`#NvL7Z8k9>FVo*qQ>{F|T?K>U9M<)yLvzn7V_t8zYbZ2z^ z2IH8?IcuT-xHE{n`pcZonBw};vsr7wCwUZPsB3<8aXudvYSXst9Fs2kQL!FqjO&QmT#VwS>CT6sb$HN1<9q%Yar!F*(5#OyNChBX{=@VY#^E4 zp>0|#xJ7F$)5*P1pEe-Z86|Z~in@k8NwvS>OXvM#{G4#Xlt6huotI~E!##=^ie$Yo z_caP2e>Lcv(}gHzGmR3+79+k&n9PPRs(pJ>5R<^CWf+J3?5a!zpdp7{EBjAr>J(0QvPaN`jY zO}n)hLByudV$`GP=Dy$WTiVdb@o@*4EycWA0e8KZ`ym_c|Vx~VDUZyNPA@M91Q|-^<+a2Y+RqY_^M@o@~yQseb(tp5;Pmv6

u-zu5#v&CFNH~Q?d}F;m)f$cTUpRMoZad**mYhO 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∋ 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

s)W}8-GRr`m|MOVJfWysS$lrG0SQb!YK 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

4j38F zE9LUo23*@2+km+li-vo*L#;uI-BZUP34CLr6>*FgXxx1Gbi@y_1cC6dG2ayT-KI@6 z>y8m1$W)ga;Yl)iH#H!J`4)$BbMF#S@krQVn8@l!qSlb^%B)kdsx;X0uv2Dkkdd4| zEhSC4ncMx}#NyZ3r2k6M7Ap%Oh2IMvU}|=R0Qa`@o+aics5Pv2FjXBjKI zcwwy6)#iqsNVV{nSD^N5rs4@>ZdIwkAe;WpWyC-i^cJi={v; z?Xf%>`{pAmjIm&9I;RU(b&-u`xJ7E|tHvTs^|yWg%23#>D?i%GgD>VRvKHt*Ox#{g z=gz|e6V`%@!Xra>>)#-4uJkujV()K&l{I|-k!X!h^8>;6U8kvtC);9&OVt$ozMy%& zG*LV^C&vr(o)>sh@!xN6hBX{dLd`3kB1M=YyCsH|PcEY|sdE=#BG}BqSMYj-G$aBG zRbTplILT+66RiazEKc{;Xa0>&3-zj$DLEbeTk=JUx@}g!b0%@G7R(}qDN8tYdPzjy&|Eoe&hnYQznKQJ*dXfSOvw&0& zFS&XUY`_4|FjzsFFL)0VE-*QRwi0X!nXDGs3fa%D6{C_&Xhsdd(5A(vfWV`S0l&%f zt=Q%<(6$=?^#K5SyCI#rYJU9!GAqFsvd=eoG;5oExk65+7iY{<5{LH@t8ZDHSDq~ zewF;L=?TtJ4ZU7f`Nf#HhqC9Bw?b!IjTrd`y8(56`3>8MY+i0o`hh8ny$(%$FnI4M zFKG*aq0RwSAdY}jJQ%@lh6KWy>+Kk61yDcYv4=XYn`^2M z0(1C|15Mn@c#j64A|QD}I^1P(*drX>Oz{-9s#qP&dBd7|tDqFr`4~olnDu5#plBaF zh`@-hxxxg*s>8^^&|)=!bTJw_J`j!`mcHKF{qEo_QW(K;@@iUg^`;7pp(SPKLXJ`k z!2;p$rT!M^*i*tjHQ1@&q(oMCCbIZJik|vB62yPUhb`1{qZkA$JDzV*dfw4kk$&n*$!t42xF-XBHtc3t9cX<@K)!hs;2hgs46sL(7vu zK^Bh#z7#vtIZO5yUK=Mu&_X(^!`Us$p#gt9;Iq?$e3gOaB7Z|oz0cX|tQRDv=7f^+ z3(F;;Rtjb0+hg+!kd{OwETiR|rHvaDbBDZe%f~@#DA4~3MIRRVK}`YTR%O%$DL=#z z7*KBIgZk}O|MJZ#uR|iN5Sra@5b|*sbL^-6hZYzph{+B;Dyoov&f^AoXnXLxm9*An z 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∾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

s%>;LzSAStpb$thYV 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]yo6+uv5ByG2j=%~!c2_4+nYJ22I z`0-V?ON`Q}d%utUs03;?T*}pW>d#|k<49;)ouLYx4+o1YLB1_;iEv83LCnKwe7PIq z1T4$%m3?ZggD{o7c8%Va*mMS)6)m0q~ zh3ggo$gs#LTrlMK1Er{TbOxyJAU5ITe^3V!7{cjXMI!nkJ4pL6}@V7rn`_Q*7 zAW#4`<=5_ykZP8(hNc(ORA`Rbc|NGEL9V3m%TVf@G5yN#(d zD5_CiEZTu5v}CvqslWbp`txz-U55oFsD%pawt)=fcj0_wL!9WqgANUQmYvA_f@NHQ zG)uhoL*uG*t$Wh`RV0DWxJ0#4BPO%78I3H%jdmd~`|v(L2+*KDim5eCv$*UyA0_qp z&;4@S7Eg2;y*)*T2HkUZp0yxk75)&nu#vMx88@k3v8q$648Oad*|>3Yz?9HaeCF-{ z`An6mrAEg&Pen`M=WhjquTK0zdV1y@rKASd{7fRxw(+zr9bxM|HtQ-e!*ageC8DBy z-_t!g@v`{#H73!N>6F=bzrb`qZjI%+3J-g-aQrcWcfGmO`vW$|40DO{~ft+tY!arn?H zPWB2h$`ecA)fMxA27%GRnih0O176|bi(ZPt-bVr{8J4Z!MC_De4TpqM%h6QNJHD|B zL?|shaW0ymC0XZg$Q1?IHTb*49;k=!hCnz&8_`htnl%y=n(dR!@^b7ND#0g*@riHf zKQF4N_g4y=Z*oDxL{^#t$KKK{if^HNCm?^Yk)ZZ(n%(B4weGk-X~Moa6r@6j+|15IjFMWIc6U!&7MQhW zxr;=PXr{lEqY7YTnwksy!b80PRG=7wl`O@QpkKMn^6n_yOeasEsBA3~PukC%rYU^u z^5zpxbSM;!8U4sc)1N=VvA1Z2X#FWNw@j;qveNWnAQ{O7ZK&x2N3!|wNf68{VLGcr z5~gbL-2pb|doL)xxLg{2wQ;XV47Hh8G1ULs-KQamnlgCd($*1F@{taxwOK2P1AE{Z zNBQbVQznb=ETFa)yFSr`qFBlbBs)IB)ISheM14H33<70x&@kJG7R&wij`}>MCF$i$ zyL^rTJsL+ndqhsduIG>&Ympv-j#Ykih_&&0 zYMC%DW|g_Y%|in+QV4t6JHS+2v}=ZMYNKpem?&yHsqBM~EKNU|ycb>fd+33PR{TSv z9vGsWX?gS;eYRQ7bbftZKTe#RM^%8vtolQ65oivH_pKHiC1acQAlTYn$<)R^h_FU~ zPLJHvyv-V3>FrD(Fw@>_-Mo2Ynoe|3N$28*KlU?)_jmNg*?R*oe}{-w+xLG#Pr#F4 zHvRAC802^FgYrtA!uI-uF$v4p?rc$$35x?4?4U|TOreqoDf(23{OI4r!Jm&<$r zoH$=C<9Vl2T`SiRmH@4X(3xqXbK!GX{a@E0q7$5z7Egcjkpf;md`!ZS&ds6qvcK=U zvY`zd$f9V%u7RBP6Y@tey#1NxlH9Jq?|%+Z83`u~*}Ap2HJx5P(75APLI-~FuRYkI zSHlY+#c_5|emz~tZxJ*^K*W!S0S@6sHO8@A;|%d4k6S>w{6u0+!CQqw-ldV+h`k_| z)4g0ujDoPA@2I*rqG4!AP2!AybekXi^0Z-tNq9y(v1tvMl!Ot_T(*d2$o@R3XC~$R zO=BAs20!fx67=Np{wqR<3YV<|-a%AKb%o_YgP(Y(PdbRx*JUQ|V@Q=+0x!Zvc=*CqH)X9ppulu@|E~Cr>x2AXe!)MIUn|)De}2J%|Kk^QHd3MMfFeK^#X*+{9i2Ff-|JkPWbFVLg$xmjh7A}1kA>Ki5`@hZAGT@ytv3nMX{mfafN$E`Y85`T)`FUxkvQWROP`5&KW%4~- z#BK2(Q4OY3xK)7$4VfO|nB#vm_uOHXQk$It>0P|1u#2x7HMqW>2Wcb?7D*wgkk9V| zGIYO3NQLE%1=GqX>FG%n3elGddRH0E(~tu9p<2}%MFu0SS}aVU4h%xDQ{GQ}WC_>! z4@-kGEIl2ISN!x@%!lGDjGBa zTZ8Lr9F-{#(nB+Ey_R584a02O9CswIBdY;G|# zZJ&2#6WC1^8(~3!hMAUvl;M?eBIS8pU|#ks;_pM9t*puSoict+H!9B?GC>X0(_La> zV7PyHNikKkvBF_eq8f$a1kzE&)@MHEA&2eQrJfan8QKK+pE-Co?f_R2{r;$*&b)h2 zUbgQ$G;pJI2<&*!SesU9Todcdw)Y?Glf5Nlzng6(u9B=(5k@zszn*#iD57IuBO2#F ziM8whe#@o;vkja4Iuli>NKvW0sYi~2dEzS)wdwCZF)Q%e83x<=;HKdxjOpXWKVg2g ziLe*s6kz(4s5RA^^o^9I1C!u-sx3oxgL~ZixDn3(@TVaifJ@&wZE>2F@-9js%{f>cgYqX#H@6JiJ z0ja&wmgqlfFvMa1AcG=GpeGv1Daf~^EwpZOdt8BdS9cW;Q#3;-%x_#80Tf@@^rj%~ zC@U(6ok?;C<1`=`$l>`@tkK~7WXU{@apPpDIiHi`tFo>iGEA6kA(`vk-RfSXpt@dG zc|W$$S(_+i%dFm%cu)0c$;FM%*1<}V)f5i`C zh;||;iZi`>4XKZJV}+$JW2LoSPYLeks!8Y8vJ5KkEFnM^K1ud>)nI3ey{NK=tx`8h z@y+XeMOk>g0hSU5rlh*x7v3m!w*&DlC`FzgR*UIf2vAD?t#b;hqg#>lo$(-2RJUS{ zWIT9!1SO9v`OhmfX!B$wqC@`s zEynSvzuHXm0=h2k8gFAOWr18!sP3jG^lb3e?RyNkF?YRR$#^j(m~S>Any`H0;0f>L zH$ABQrc#NCC$u|t^H>)=I~Y0Ue0tSq@2;)Mfg6P)jcCwoAZOdhK}5}%9edYUBWoaZ z^qUY;LSTNwpE63MTNLQS-7_ihdieN8T9$l|TrI$@1dEwRSpS1Ku_of*tKylG+Hs#S z&!lM6!rFW_?h0EvlPII*QL1mW0JX++EY97o4SpfW;P#leeIdT4y$$D(!AJgXT9Vbb zneTJap{$gcLE*vI^MZ1GqqB`RILiFy+jly@AAXW1V~kq$!le`13i^97dfXnHM+G#1 z_kJ}4N12GvMn;RorllH%+#0Gg203BMdwt-7AukNj@EtvVh{)@J8vSr*3|M@7pf6D# zX2P&4AvkD0mw%x`sdTZeJ+*QqoHSuwY(w|zDPAUzpar>5VXdQng$U;a*n}q$RWl%D zrbjZjxLB}~gRr3J$dip)1_7@fsIicKyDpx{NopFl0foUEi5ODJ<*6{Z*zbc3#kQIf zmd0Om4)b&4d-kbihTE)gg@uAzk*o@^wF}IKwDpFBZ-IJQr9)$lh$-sYgxd6iECsR9 z0?r6v$ZTM_H*z*rd>us}wWU)Lq4mUfx!#Lo&ww;jCLM`L^Yqy2lB0+PUL<|Gy&WBW zSE#8f5)cDK>oC9_exe%?U7lUES;r-8BM)o@#YeEqd{p-79AJH4BQP(XxVu7UW|~Yb zH?AnPU-A~3<+wJ|*qu{|M}EmTq^Fggkfp^coDbgy4ZN?ep-Wpi0W)+hv;d8z-AgPzBokZ)$BGQf2<9NPKH?wD zg_AZcaRAvGOYFKNj~a&9A00K85q7^d+mc!qTF6>2`?t)+qlD8LHQ!D1E|brOddMKf zRWNe&rKvWh1MZ9LaRt)fR(Pn|SXJI0vku;%U{}MF*v$ucsNEF{=4v*~jUy$=Hz5VR zS!#~weV}(y-%B-#hX6iD3Ro3Ehx1ZHa*oXUl%q z^4$47)1^&GPP1kD-m_^2Vb%C@y-!Ii_SIqo}%8F*Ic^n0MDj$Jn{LUH=)Dz38M1zOJ}%{OK{-k&gvlGCZRpswD}q6ywE6xHrJ%=>oLuXhQd$P=e1mJM?fNV_K(x?U;# zgfKiGHaH0umzt04iPVK!wVUsEnqc+tZHGqQa_N|Zu9E|E1ATxe=G)%Qs{qrH)o!a@ zj-lt~MwA^8R)5l{c3V5X?m<}noKK!wm_1zaM*sKik`-V?6>vTDIfmC%YpHy+apA(TmBiC8CnIUD2*Lrkn3Oa zy$zRa#xm-SN0K=e=~Yv?&jMVsv6a)G_Dk>5lN_a-+|XYWR{V2fe*PQmvZMJm>;rD1 z8Ms=VU^yTBDUUjtBKeeEGFN&|?763p0tl_SEr7-*?Tt3QRjh<)&4gXzJz=sX7_Uj>Mvm*Eek;l%hwuf*S*n5tb8LM3 zJdjMqE2U9IJEp`QSgA;G+7=Zgjs61CD9za*JVMt?W*f;-no%ShcsZ*fwnSL*fO z{6K>NU9d;bNw@sin8JYojZBdiF^!S8A8PCzB)A~ZK1P_tS;LiSt%LA0TK#GPfBC*< zkro`PUs&930MEK#1AnnwzuV*%+sURl`br-Ls#XZB7kxz{bCY0M!lYf7z5xwaEr)vY z?kW?vHIL)lJ~jqam^{csq)^x}lc&;3(eM^COpACtrC)1Snu47FIi4rpZx5Z%Z zAt)d28!Ac5{e%+6{mdz`nbUmyyffn$Fy)u-oOG}y385ZqEDx6@9mvnUk0>W3EmmPc2JXt=on&7v!63elT(sRU*C-?nz66NbfIej^nuVUz48cPqLvNam**vvBCL%)>!_j?9&}Mn9Vrfq^<)TjZAFO~~O3pv+PxS(K@TSbrH^v^DfNhHR}J=tS_ z?XUD-QY?g4R|OZ_BZA6<53@HHfn^#F=MY%Ai0Ckfm6W>S3cNv6`=gOrclyne4pwVv z^7}D!|mRhaTTV{T70*+O9 z;T$qNhWmw&6!Qd@oPW|I;*sF8p~B1! zO9dZICzFL&@tieGprcSt~o)~!o5L$xD+i>FJ!3sgOLUuw3*A_sbG8c?d4HKn^8$Wbow zAqn1R)vM5dn$Xfna1G?!tG*P9K=Vb6qY-`aBgdd%t)1L5RK%94S$Caj_{8_QN-f&Uet0fF>Q%pbn4%BnxO7J|7|^6SDZ;K>9tp5h;%{E zqy)AABv1pT!7}(iy7%phc=fhx=5XUilScoK88mUnnaGU20A18w7Ir5H)k>YM(l2&O z@YS}sH#K-qwlI+6)twJBH5N?EwYBFbnfTG}+8Q`buStdmZvUtK@+W ztuNI8=`q^V_MnaeK9^X{0xz^lutXb_U!sPZB}jGMU}F zfwz%xNQ8M8q-n5=6mU1CL(dR_#^p=I}>Glaie&-GJchG@+Br0x# zsE8+R*Hm$8&pz=d=mdAMxQMZQ{E?Vou|I|2;e-$np?IY$I{s=QRQz$|F24)QD2x7@8^=vVBd4WnJxd|3wP@D#5!cY@3>? ziR#;-&7;QC=TGyk`W6rdbJiW1$l?fdaEvhZOYMtEZ0r{S!Zx@w7z^iR1f}HjrX?ol z4ALT47j948>*1oFoPUoWiO|UKk?MZCx(u6#ej=C_{&{f8wO?w^Iv^{TlkT-!r1hJ} zE&4z)3}%95nynEN%T<@kxH&r!^S7o%F5Bk8hJc~G4}ES%rkA23A}~_;Q+KJYE5etsV^0oeFQ8?VHu*AO$tRv-U&Lz@HpDmm){;&3WMfnA`)zO7Gby{==Z(7P zVKYN1_DzmZjFC{SUwocD8|MO-McQvo5{L&D=$;(SfROt;<9lS~J9_S&Fu%hKBm85f zRg6s-@t}mkZ`OTZ^qC@1&y$x%Ix0Vwgo#}U6p@wV3flvAX&uZd&0ZRl_%)-a`A&R+ zVvW1p_`Tf*m!dbRG9Zg}b-5%ff)`3TX7STeu~!vMZoWY+`9pyZQGM$m}83>PE> zCN(#fb0oW21j(Y&Ak0Rpy}eprtOl~B&mdfc{3CYF2@A60Xk!t~jtR_Y(3tyONDy*z z*&pw;Mk%b#oZ%NS4b$DmXjLiThbDB+vp8=(-p@A6{es;d!!1kK_?-*JW9?a zlWh}#ZQ&UclS6X<{;~fCy#C^X^pB<)5~0P{&%c3z8PAlI^P0(BXz4h9FlAc0-?tUb3XliyqudH* zDB3%nw)RfSVY^xw<2k#RBi^V7|8x_EtQ|WcWsW&1EV=oVJ)oXRzCeWa`@A3w(8E+8 zKhon9DqcCE>Ar_6Tu{YZaWOY^{nT$1XPU4!Mr(K@LH->F@?{?4qO1ln<(bCT#84I`=0z)R}EfE`Y#nj z6c|xC;oD>XcgUD)bYRZAZN09&=-Ya95UKOuZ~~*C`Lb@KZ3=|NK^gRV5ho#9_3pl!NIgb zsi|m(*$=x~CoB=6OZp;qB&qy2c+`cBi+(96O`pi-rCEA^G_sUj|IpJ*DC8^u8NWj8 z($Gmk@=TOw6X?XC&}yYGeSt>j^leTaJN|L*fZ=#aIKj7^37u(x3f-E1K0R`*jc+iF z)yRRE837t&f&7UmkFe$Xoes7wa&Q{2z~(@~M&cx1S{^H`zcK)W!@+19d{6Fid|WAA z9#oARgMaoVV>q(k`BQJ{Oy2znSE;pBebp$WjMdUmC*_mq2sfbYe<4?@Q0rZ~Mc+By z+l|0uf^Xpp(?KXNXe-y?b=Oqnsu~XCfndZJl7wZQ1Q)h3Ej)R~S?lVv*d^@dZ8OtM ze16!YG~J)m0SwZj7q$z=YDH5vU;;LG8rbl~#ahY%g9CPB5Z4Rl8QYdCFkg-h&%8Nn z;}%`r7JCP*IjCD?pwKrC@K-eYxLJejBdC#{l4K(rZ2;C&Pk7EF&)Ic*AC7|-ZOkE$ zYlqW}Q$Rp6+=T@h0)`pts6t5fR{U`q0YRkf*(APHwyIgFwmgo?*Zgfg;|(O~ndjOM zf=Nr@R#wq`&dB&A1su^)=adpcdwEDo+p^djj-2(o;eZhG zBGqg1D4jtY$zZpJ&ioo*9FXuyVgB(ioZ{66JUy=X^eqHw#{w@*-1=WAjcLiwGFXoL zm-YOP`voJ{ft`sc(rZZitTmtT=dm~Z=}c{GxG|x2rIY%Df)7L;p#8KI_ry%yIh_ba z)>7Rk5!n|7LJq?trC5v}+SK*!QID1-|Y03L?n_)_8A_{vc* zgcx4>LrI@$DT8d}wsnk#(N%zDY>6?&Gd{?+AneSoCAgS!)5x12@psv3UL8BuTTY9s zee~$RZ^Kb5?q)*xkY<7K)@6d=RFxt@X&75Cd zJgTR_ z1iBYu&?27|9=g6$(0a3f|0?~`zz;9cOL^xfTL2jwI%2+y=&P-U^kxP^Lp z;v8h#f`!U@sdAFNBUZZ~tM?I!#Y!dR9@OS0LqmP9)~S&D=Y6R*v&Q4uc;=BS4>}Yy zYPLu}q6|;hmnsaaHOgysPl_U3hKVNt3@;zfiV)bjoSKmOe~bP#Hb~zh!#^~dZC9ou zKnF+!cX;U$IL(lN&{lc}-lC!Z){6c=Q-Ye0Nai2G8b3FDPud1T2@?o0ucN}WI<3qt zbNFFFXkE`8HzJOiCuw)7{C!58^Dekcxy=dodn`$vW*?5}U9PQJ_Dchf+*}RF!p%!- z)pCsVe_02r*QsI1u4P2)LM@H*MvHY0v`1Ufgb$u;Gsb*sp1vVTQy@uu8o?3X{4JKk zSP!7XB%=g{5PO95o%Vd7$d(|BoJaa4zc`_AT{aR-fdWB9vVT*WcAYjEuVKQjqBxkj zGid&^Z3SP3%+c=S7&clK@O^t@ZFSyai(BGPd>*7*AtfaJRd31U@j& z$|s+ZR%?8kV%UBMYycxx(8}n$Fe4H+nj{u78xS-H2r_KGhb3gFUN_k-14K;^GwEmi zGJ~A&2{CR*ME#SjWTrNfO88>&>G*mI5+VQWIh<1n~ zahj={z0F-ui}QRWwW8us^3jry+<40H_%vl@5CW@!sCZP<(;nHNtF10Zq=iSg$gO+_ ztL!UDe3zp5@fkfmK0Xt!$k7LW%v-+Kg?WW86K7F#S$r@M5?EpmxjSq z#bOh@H|Xi(@R?cBbSSw&eeO7?e5x;_N(&kk?;B%Q{`iN22asbDk5^RYpri7>j|hqY zAquk56D?qU5q~vpjKb$RaVvxK7imV4=k|WXa~rD(Xeqk82$(9ve0ecoOEWbVzxI-; zIbNC-)o)!)=$I7y`oFrf^=&0N2SR@gjs8rJI=;%5Sdj#l+r~3cp&Sq20a=GciVJdu zEFCu5TpXm0)!J-{C#qiZuJVv!7Ecp1JCEW4XO2yJ+gOPI`hYYHcF)A>Css7}yhS{6 zdV?t4e=piGsD@)iZrzll>NcVNjslQVQSH5 zA9DBARqELs9Y37*yNI27^?E`MY6D>P7I+R0rA9v@Xr_}B3s6z<$^0vzN2402&Cm9b>viSK|&Ql#4R2Z$)Z}BbXb3J(($?>;0 zg*8Fq5#67O2V~5cyEtyRVdny^qEe#+`C zm9C-31wXc{MeLSgSHM2{$C>W$b=gMFkVIsjm2pZ(k_F3xXImO7>yUP~*R2j_YY*qN zNg#b#QWd=9e;T4SuHLnj&6R5Y3=zVorE7n(S8yJ=4!ChVaq_bPsEtiT|nR%79+~zgy1ur zn66iSQF~x~X}caL0ylme=F4?~c`WTkEE9au-CHQLJ7{|2a{K!4t0h?T+d&kZ^!HVc zrk!LcI{s-+Te9%DH46^5B2O_5Dod|^Mr1vLQ*U8{vKHLWC(&Sz;cE8pbkR7B5S*q+ZlF?)H zjWW0CFfHxdlz-Es;@z$-g@qEvn?7eNDBoX2oYL_V4&}kBj9ZajKq}K|*sf?+&*kML zA23?LEsRDFmDO!|Se!SEOiT*j_7F#aP|>5^we6DuXtL^%>k=hYd5xm_ObGIMOgJ0R z=vD7jpQIMY1%jo(v(lcNVG6#Db;L>;iBxfuKLwf0O2fM+D|_F4(y6a$RCUa84>8~0 zO8$;ax8%vI6EOUu zObe<5(D`IP4z{OGT{D|Oq*(m=gwe~VT@Q^w9jW{mja4QLOsp14bN$ELWrD7r-qhNE zn?;w}zE3IsP~T=D*M49(9gw^sTJ?g%sVZv{>MLVz9~Y-CqANH=G(`yFNZ@@gBY==32z{@CtD!P zTs*E49LCKKnPV&Z)7_^fVbQQ^Uox~g>UwQ9!6fxGwuEyw2>;{1aSeC@hs5lxW;Eyx zF6K#q6sxb)d&&evc<8(_I^v@Cj2h-@rtBmU6pTEnH}@s>FeW?1EBKMO%~tXB(mi1n z(6A(~RUzV@)k5z;cH}&C@usEGK%wiN{FjOahNOhl$2KO5C&9P($s1njFSb*d4JB_Y zF+p{8tYo7e{ew5AcoX2w=+$w2+s#Xv;(*{IAZ`@=p&N>3#fMk6Pwb*0o9O73~EQUf|qi#94?q#*sL=x?p<#F;G zza5-#{WT?-Nk>zXoL z(F2AA<$=4sZU3Vre7Bo}C5J%|Z&Q{+=%RwccCeN&d*R`)5#&HBaY{ zm_uchCCM|l`vG;dszLoDn^+jS{dj6T;~3SAxo?;RdoG5@Z_=zz18Cf6712q13iJBJ zzo6+@@k+tEIo%To9Kz4=0pM5OHf1@JvgC=i@)M z(fmSyik+l)%i!x|i6XG)ZC4-2t=)Yj>zu#f=2Pe5jlK$7@s*~5nt@B%pARAm`_&T?sEDr4M+?}o6E;ze} zOV_5nm`iHL-oRu8=s)}{;=79f(qNMRcQqJP5DVKzCZ(!*T6rKrqfBE;hoBWO1f^=D z#N$SnEHLS>TQ$!bVh>*+{B`o$a0^U=3Q!>@WvV!K7@)%sigVq~FWWs{1ArXnHTSuo z!#I-fd+oj>M~oKQAWpJrPf_x+HBb(PRE&`3EJ0@lRN`G&51~CPf)Y$uD(oxgJI@^N zCiYQ_ap&{7)hXwG+o_3A>5(u?Q!BiG$f1u55~Hi4iAOU1s+{b4;#LHJOywLv!FEvz zP02ZMb4s@C29Fqyh$)$=KU&{i-rzs@lg$NM_^@)Hq%Y;li`DOWaQJ@Wxx zHGZ#2Z1Cb3QAaDIATeR^ErQjV9P{0v!C)jkF{L*C= zfduZB3L7){GzfVrhGX1I`fv(bkU84FV~ zJ~bCCp0a}>)IzKeG(5Nviy#{DeDT;TQ`chz9*wf!;V45n{7RL8$t#?b&_wtg`rE^X z*vT}*Hv6U~r}utNc$iqYc@|w5mQ_GDGK$*Ylb|PX&!krv3_;A(eSH#AR`!&Z5QbIM zIV6h&T7LQRT&B$~NdcQ~llyK$HKEUUprK-a%gs_MH=Q-2hGUPqJ+6;XEeWx*np$qf zV;IwwZ5%p(>{OeOfzLsTXbOR4lbJH<6B5JknJ;@#2@ylt0+GI=P>q@${tk-(&t)}~ zC+y`{i#ZSOJQ$Wt&WSJ&CUZ(gCTshaI;=Xpj;C|+;<919^LYm<&jmU}L$}m5FMH%e zIoXAVzsDs2xFLm??zAEt=J=F@*t5&Ay{Kj?9R2$PBm@80tF==T&slh;1v z&q&g;8`rfHvWCB7N4!=udq5|vV-Wb++Mo6jjSxwvUuU?2@7Q!C$?ogFW}?SUXhSya zaNd@YE{lt^pZuM(Hz*X+HX~J!NS#0v=6g@6`3_zcJ+C@7lS(Pk0a@D6S=FrG7mbJo zyIg;r3LVq2?R{L`3;6CY4Yd&`oI1jxe^GG_BiBk3CI&p)`6}I?!Rr9_!|K1Z0s{OB zb&*ch84Y9E;v5^^OHLlcT>@*CJT3y2CHQ{Zjt9 zEv>=#o}a&GyiM0-YB3BU^22>4&y&uqwdsePCwcqlDAat5@Q)}wRdHVhgE~W_e@CuK z;*GGT>%l@Mum3T_*aSgHY&O}YeXSk5F1`dxz%3!e>c>aG-(P%l*1IuA3zvT0twrvc z^eO#B=hF^e`xWzplk;i%Y1sAgiRI5aFoZPma|#lP+E20)MA<+s5Bo|&sXJE*8ttwRR2~jy6PAcN{@h&> z41JM39DL90;{gum&RqARb{ zCK38|48vFHGE*eczt(G@6Lix?;ep9E@!Hd!J zH+M1j{W>$-HOI=m6cF#Uuh_dg1KCGBDY<&vN`dbR2pw(J(k;4hEq8CXA=UV75Wb^1 z4DSan#oZm!F9ZK;gx(Z50`cYzyZWd{@svFv{XRK*z(lvz=ci2>t-%W z%ZZY)8R%+uG|ua|*L}j6MxZ;%bC{$4mI9Xg=#GXG@z?lNY zxs=x%rYjR6qDO8e0+EmpcW!cW`q>$&6;`j&o6C`>LABw}Z{U*=az7v=8-|iJ<`UT#i2uuVe~&SYvLaVrzeCVC*R{D_!pAbjS|tyD z2Q;n3BKhJZ^z$UC_lp!o=qtm>$EI5-RC0&Sudih67BA;oO|Ct(FJ&$!`>COl>dR}9 zz3Q(?Iw+Q@WssfWGoRS^3}PQuq)xFEju!F`z*1ppyA@t9&}$%bgE}}3Nbar}DorGO zMDGFGn^EO><@sz+pO8^7l$zp#R$g9#3k8y{Ya`k|#6|E-p*Ec@B;#pig8acf+J!|z zlu<&2X-EM0df#b3|M6BX%-DCq@ddJ48(9;}w*nIu+xKkBDDd}9!1C)}9K&X3H8}J$ z2h=d=zkxh6TQusWvJqI6*0M}bE^Ks_KPrHkX1qCDv7{*+Olt>tq9~lnA zP$=JBj=CLP!o`hFFf;&%D|Iw5Eu%rhpc}>4%Ow^F%nsxZf-F+Bk> zGQsCh{M1pt3AJpB5yPzn8SqcBm}r^|ja*vHnrfhU!Q2ins<_uXMa*cW=1opovx=;J zd`W};L7Kj^obBreoV6V&0(zrrze0=Zz{r?TRld8l#>(Okxs1|=0K$}n^u!k2WKzq} zSVu7(Ikblmh2klq3%^QrVb=nfY_aOPZ!`nUtBRqGZ2ecw6(B=@@9is;G$@g;Zcina zZ+sAJ`n`wN6(>$g&#*Fup;YKHSAL`A?H!)EqO< zOv4kVM5IT)bjn1|EukePqg9LGtf;CKE9nd0I~ zvLEAV#VPfy!U^6NoA39BLJPM3K)$S#>k90@w%#(fGBK;sIN8qdwfIOOlxC zMp`~X0_L+~RFa%WOZ9$id!FT1kWis3J zvB7YVuJE`re1re-{Qpk~V7n6u`xsED6^2wTD3Q%jtp}P$17>DSz2u7eL@A z3=0H#lKfq$kFjjkZj8p-$q6D3&aPE}M}6lprz{Q~1Rmpl69VXYrFM;OV6W)RRr)8P z^P9)WJ=&#S+4_eTe^u=(k zJ3DxA5TOX@q^R@KCg`XT#6kqP+Enbd^Cv!7xjInAaN*EG})F(t9_0C zmPfxk^~rokV`eJ@7--W51%k9=kU?#$vfR|BYa@a=G2?<)bH{PE(8r zBoUptRYN;wBjxAp9?j<%`_* z#6K_BWNA0@efpC=li4*!?_!Y>F%#=Xm9(I&XY=HmmV7R{ybBMr7Sdc=d)Ss zMLd|;2*gyAF=;0<{sD_KrK8u}^s_zcKKsv&pUYXwQ|@r0p~S;Yf@406vXqGVfGvG5 z3a_)-I1&3l4lZeQ&1CB7w@qTe=x8Y*^3eJQfsMXzDkIue&y)>--KJ=QF~z z>z^jYrBI?1dJeZ2^j_7)08jdd0T}sP>b8>qCE(W5u5i#r?n$9Cghx-?&SS=*m!{7u z{6crvgfrRBL%U#(Fm9x*vyzSXM22S`EbL~?3nD3mvnM7111!y(+KL1iaDggTy|~m~ z8NCA6{1QdDf~4DcbNWfqg7!arJFl6L&2laMMxlPmZT`XO{15J+E(s#tt&&UQv#+A* zLS4%;qi-Fxzy&y=&Y%88(&x_l?ZPQ9?2Ni*44hgY%QELCUT5e0-ho|NPyl== zN;1DG+rQ1;>2yC@&{=t$=pj4~qh}uBhYIQ3G+YWszrm^q-Af+wF{-iH`CWwy;k=0X zy=C(@pGoI;0_8gt5Awk#V5ZM$7Dg4l&&#^Q&U>`AmzNLJ&5Tjy@F(Q298c9W&mq5Z z9F9U1#%txAOl?IC!ebjB1-=1DIidn0xJEo@{~Tam^qxUT0%hz}w%bHpEti8WCA#n# zLw1^K_>$;Vjoa>H`VW3ks10V)?kOvp`g$0vl`)o> zlZT$ROngsX3J4u$s+HlepC4#lrD;cY#nCpQ86b7;6e=YL(B zH4kl_lVV3VFaqv&j{ffH!+mggz>+t@` za_%NcR^(RwDbIN9A!(26_$3Dmrk(lg^wHu!?o3S}vh}~{&IEcr9qshC=K_-bCsXO{ zZoBrFZC@A`4w3`9(%+p`cspB;uwWEj+)$qU&3EYZlI4}tyUz(&y5DcGjsJ$S2)R!Z zpg<1j4fZ`Lal90%$Sh0fpK`+08pcO}NVRjGqChw}#nbzSGl4??i)*mDVy907(kU7& zO5Imk59pAM{NnGwB0BQ#ojGtX(x8!7KD>hA5yQM%44KDN@)qNK+t*u8(r$ivewkAl zME)%|r&1u4o@|sIxt?i+=695Q0<@)Dbf?=UdeoKgQ5d)ATbj7y+G(pPYu>Y0)pdS0 zw`VX8G|X4MwQzBbM*V2a_E4F$kth3YJ5f9EE=w;-y#extB>^vV4fU0*Y#jJr!7$(G z8RqjRWo~LC>HnISOgw*qg>bmlw?Cb_(#1m9PcgJ-*#xt{?ly@4f`%5Q>!0L}xH3lm z7P$@c2&LpCz=N49+@1A+Uh}8mKbbDCDLLsBpw&EOCfUOauda?#yK?sJ30cJYAZ0Br zUD3y%N>is#i@m>{sZ{bd~K{bfp{@x@1D>A8P;3I;yY8Y-s^TGqh z=`Hp)5YWkqO^0A=)^u*Pb7_BB(~KL*dQQ#usqiUllmTX-iJ}k3$D;Up5Lhju1>img z8GT0P;^iY=MW7Xh2Wufe0`m*T3aT~MQNEp|%c6optHv~cffoRT9cU;*}hOrCh!2irL@B1lmLYUvTr?~kij_^AaWGC!=G&6xAsT9350 z23oK<#^nX)-+v16R7Jw0riHE_?t0g>Ny&EXiX7G;gX}M7Rr4$un+8JLApVwy50US8 znGc-~mDTVtt(7xuHZ&{eptLQ4)Wm!ret3~buHAqN+_4XJ-t3OW07i*l?@MRw zyX2&;l0v=I`M&(Lz!Y|B#GzVyfQ7VGp0Et9`_^MJZZS!c2oMZrpTBy6RI9+*J_XbI ze8>nD9;5%xcM(CZQ*(>i(=NW5AO!skn8=QztoG2PUMzw8UA0IHY+hj!rt{ zQ*j1U!rdnlowSC>SeH7~y?YRP0%!5t0h=V>7uTOH0?|V9FvAL^gt;Ons43iCzE0hX z_XXX5Kc2a)1mGTsqJvoUb*{by+r2}7)j1_UTI2JV)9aPRe*X)@tZnQY=w?ErJ}1mp zC*tFL!H4W#W!VFl?tn{KiCnN3ooiSG=p#}nG{_cgwt^KIxy{_rabNJwd~Yb0lBTIq z*?ed5y~q3)LYF`{&-Wa8?1%XhgbuU;eanb{0;|RbZ zfWtBOtQHm2CPuS0G4w8)U>RY9<)S;P*;NHPXYs&2{|G>%i z(Bl5OoxmJr=7>xbQ>CGt$h+Cddpb~);ERoarq;s&2jNEnx;Ql)7nKpUz9xZh+*4g{ zr)aB_eoLike{Yx|zILS|>-E7S&IkRYCGhGzESj!64h9`MK3<#S=zxwwEEyWJPp4fp z_P+4?jLcHDR~#ts3QUk$r-!~c)U4sZMR;lyE8BUu3U#MGz0)J+NQM>bc63zC^BNJ^ zRFO4*&}7og=`+0{_k%RDVbF|FZA-1=%3uOS@KPRiwZ?%mQ-zf_xdZ(hI{LmR0+XhG zIwWPO@2W{e?8vF0PkAaCzQ~_W5)dBi16TWk6e~P-jWw)c)mlMQB%eez=v4R&pR3EgyZB>!vJ=d)ltCGbjfX&g)F0pWHt@ zm^u?fl9N?nJOe{czCPIOl#N2`B$pT%i>?J7x4t!pw$}q|Nwp*afLW{(;W)pL+0`Fy z^bJf%6&gBIcjng)45O3HNd)vc)y-|pZ_eq9R*I~?Vrg|jQM~+}v0a2LQmQ`v77^Gl zUW4kjoZ(&0Hg(gjY-^HrVtv``O2~EBhM1#j4hW7PwZ*~_TGTPg%MDwc)n*%sJE&n?&FP@tQ(XPJp&lf4|1+=1$~QPS`GZxT0Tq$;MA&7#^W}Yl28d~ zAbWfL?1>xI%Bo=f6{*qCzPcUL;zXCgxTR{=HGzp&zzq*#;m<|pYCMV~!(S+uVs#3f zN;)9iIHGYmqqs_ZJ#f$Pc3ELWNpm%qz}iHb`pEpj$<+VMyN~cS&^>X`3C=!=+DpB*lF^aFeGk00#Z^*aoko)W5r-fMT3O#NHr#LRW|Q@u zETcIwKc(tXk5qr%yLtC0%F?4AXBsj55xuWV^0R0B8&HlTABHRAkAp+rCl)EgTDzWK zj3xEiq;(&E#z7UhnN`=3xalCAaDR7sorSk9>RI`S{5JUu zdglkq$0s$?eXj6VCNP54>%JL#B>+o26*yjsz`0;I-X7z*?iR2Fad9=42T|Y^jMvvJ zJ}P%Z!j;(rZ&k?!<{d(Nf$uf)^2)!TZL#UwV*=ym_LgzZ@Yw?YZ+F0e&MC}!{^h@A znBafC4EHW1HX;LX>qN=2{NSY*KE~3j_+RUXMuT8!JJ=jnbch@5tP#P$R$gb6Bv*LZ zBKP>Ls{XQqpDiOfD=-TUc+E?4ie;NH->5BCOhPnB$5$36EXnH}ETr}KRakTu0oij^ zsRxFzxC|P+EN-dfywrA|$=a@}J+dafwe+Y2hkhQ#ji1+&t>3mJjMq8C%3j%^_0`Xl66(L{J8bnD>CeWpKZl}I>$O{a^-5mZ zzrw-CEV*`6!2rC|T@?TW*w~$uSkyYCymp{0`dHA8#7T8{HyAS6IV_@OlemxuN+ z(%2QZq-dJ@C0`Mu^2UFytiY3Z-YX5eB?3NJeGS>g$g z09^Tr)ofy&rb@0$hxsNm%X52YgE~B28rN1?IY4z#-LSgZU+QjRPzS{pHCRetOsQ0L zbi|5xx-5TJsswPq=nQR+NF_>T-p;R?XKLrSj0L4wXtQ(*!M?t)RoWjcx>n)xa9xRr zUqoTUoSn>ZHN>l`IGockAxB*PkFH(L{==H15w@+Sp`+2E9NvIXM@X%!-mf5Mn@_|$ z-&b5_(0~QvR*ibsN44;M)}Bq!moGuFxE>axT^l73u=9(W3>@Vd^kwx`Wo;yFPye7t zc7La{ACKQ>zixCl-L*H|^R6lz*NnhE6%Jjc^8K#1)fJ&<$FC;fR3K0l^(n6r^zpUX zAQDscXc{-$|B7Y(vnHxJ_=ax2aYC`n&x;Ie$d@_zpgj3AT>L)auD+M+Ub1T^uo2j> zVqkIOJuK0Vga#(TPWOAbOoXSLx{Q`(D)#9}J4Q}3PK;J)m4#4+NSDDdUnpxpjg~fL zUiy=R9(vxcF+DzbIFAR{qvlu1?;S*ty;o%KbafG(9eqK*(~y+e(RL3m1o@(>GLUhV zskA358zQ&c9x)2I5di6HA>DAk4jAwl3xCbtpio}y&SMHfCN7E?&d~MsGF3vr z4FC1oShF<3>f$j@tTJBWi2#+4DwbRPFX60cx4v|Rc6}{1RS|A~Kf-@kb)(e`5rilI zaiuqEnRvY1qo@p8U*`wY)70y zn{-2aOXRs&dQZ=ZoN~&D0`@EB9lN>DP#E8)mhAgk`?X9NPnpGltXF%_b*zS9ZK3kC z{9kgixm8fC%0fXNr$dJ90e0Q%0u2lghluE(hAec9k!d45$_hqR_ff&FoCUN2PExp4 zR~$Nr5iI6(D!78=T_TVLf&{V*S-9nY@qiYs2H_sgd=i6y+Xb!|t+Z88#37w^clz*3 z1<4J+r(c{Z3}(ODhO(Sqoj~~-SPLvZVQVnp@^ms#saxX`PI8XsJsfzD{^IW`RR@o0 z^^J#wPCnqv7`wjj9<;n`QGI8|et6!4$fj+&y_W=uZHKm*a(9YwO@GV($KcmKVE5fG@a<*_D7Kd$LUWrc9~nLN5LX@S}l8stKtcg|MZ z?nY?qn^b8IP3yNw2@ME39eNQ0D1fH(u2(&23wQ(muXQnXs&*5Mnf<>yiuA@qzuW2G@^aN!m>hJx4kgvSHmwqP?K*{B_}U@Q`<*2TS3#v8xewf`93i-Dz%}pNxT6CLH2s(-w9*l zsx+v=!dDqsep3X6`<3m!2IYTF%5W&1@Cg&0*hTrhnZaNE@M1|EF6Of{;z0Iolk&(z z$p7&V7I|a3ab!v%n1;xuraYPZ;j9S0FVVjbY{A zW;y24SyG`!>A-rJs64Oi2XT@Ruk_IhQnRB$N<9k~YgHEYY@&s51bwVf;nJl_WjUpD zdXA`|*(G!=qM!vSp3#~W!4CxLYu995WuI(AS&;D-@=s=Cpn3dexm6x;>6#kA{=HU6 z=n0)M^GaoQo3hBA$O94%oqvkT(N$m8H9I$s#N#_Dbj)$+8*JJDJSaOcszeyA%ASY6 zSDl61(0#n+Z!wAJJFuNim-NvHjgFp@*BUYoarNc~7>}=snXz)+;yL9@bS`TX~tj1+mG0+#1 z2n63mZDSJ&N8U{{ghf;X%B) z^u6of=@q_+&3ijrpP)*K{K(`!6_BbW;O|(#CslW)Mg!=$uzTn6KC!qz7KC(5e>9oF zpiR0d=S>!p?A<)PyjBs?nDC!%w~*?Wgqp%I>(a)%%*j|ks}iisi|2h*HE(m&m{j=M z!6=Z+E^W86$c-&@FWVWvnm+yJfqG7l^`c2LOt4Yg@ajS!?7A<%@BoeKgjPpL zg_X<`5V?;uD_fBD=b{LV^VrILM_oU3k5l-B^J&A-e-T z&HRrU>p!OSf5Zv;bm^~_U+6S@OLV`OA)~z;y965chpP^O_Zqr35vE@Rqnww2#wOJs zU>l>#FD%0B{CcLuL1p(5XVRW$B|$eSw>|M>fvB;lkT2%`XP19@pGr!c;+g~j z9(}Qkryz>x_u|JIht$Oqjs2U!alDxmC<|`=r<<5?aOG;i!B9*Xc+HoQdr?#=(_81h zbsN^~NPrTnck3eU(w`S3yxX{Ynoe=#@YR1v0|&%7ZI~6F;=I43w5ByKtXFriK&|5p zAcq+ZC=qjyxy)=YkT3Qh7Ewuc*L3NrGG%iRc3Y2==_**Nce;1xOaOeYj z9(b97F)ep@l@PQb-88R*@}n&lMc*M)s%s&dl;8tO-_W8SkPbrNTZCN!$e&ZND}SCo z1C2Tl??Hb9o~BpKNF+zm9#$|1TSQ@;}*7z1p*a zW;tMTASHjj^tOa|)Cnu?Z~4W1ZsmVi0MW=0)92w`ka6x%&5kMxv0Y1xeqK`K4Llkx zv%IifFsdIOE)y`T-~6q!E~pX4%ke`FAB+GZ(bo8SsYnu!$0E!G2;G%?;HUOW=Dyh( zQ1bo3(%8wqjrc638l`IQQ|8b7a4ih@3}CBn&`)#c3U!zeFzwAz7axP;c^+Ew%=7G_V2^oy)?jBlSP!QqX%K}UO@Z zg}xULF94dMf|r<$#gam)Kbt=snvQVf6M$9gJkGoQS0WsiUu0nu9;R*EBWZq~b~qVA zx<5QEBmzmVltOW%!=vj|e$={H+`a0?l**|?BtKIUWBw*zrMnxJtz{J5B;&HXR{NYN zzrd2DZTvVXk{v(PR^w6<%w%LV%&m4O0~`NjSCHdB9vWTcu};)e=B@&VkOdFs?Cb_0 zD0O0N@Dm*W94`3RH7iU4GYjsvuWX8^HBDxJc^gz4YUfjDrcoj`_y>mi1h|77vVE-w zKU0}eCycC_tT;JMhP-@%)U`qHD}S7*D_4|c>R!z-lb{n|f5e53jL!KmS$FkC|NB=X zRV~y9(|Z#Ng^llZ?MnuKR8~+js$^(2H>n<-hwd2?q6%n}0Y-<3gB}FK5gSI5LK~yn zBop-{UNqd~uR7cwt|Kw|FWNqTJe35el7SG2sxn9MaTiAKK37k&w9dlnm+)*G{jW*` z_SIAIUgl_OR60y6D3Xj>T<&LUtw!-N@!z~J81_WvB^^HvgzPzpjoO(PIBuZQI!PRI zNuVuE?<~s3s`I6WwjsMv$XD^~fY>*+Zjp@M{WnuOrhwAHkbRE`J{zOBZB#K=gi$1; zinVz7ZXL)b~$ipY=Ca!)@A3%inw)}x$->W^n5d1gnqzoNs# zmMUcoS%ws?Ks34f28q$o28t@#ImNE}LVUY#m7qfM4qujPK~fCJ{ryy7b42<( zQ-o2?o-FK(UB8&3l^$$b70Mp~UfCv0Y8r(78rA?J&i#Y!PfWqgaIcL!EIVF7)~n0+3}gX}0FNx1_+wC?$A*$O2dL^t8ok%QT9k zWd9ZoBUXSh{)dOXVaF_WlMI!D~{gxEH>`w&FpnKt+&c1oD z4Smn_2w*HB)B6hFlVHj*^kbB{_be?jZlMws`L62_6P+60am(nTzl76+13?VS!0X2uWxT#73^#g zQ_knhl?frBXg>lHTzbLpfFgdnI*gn<>e$3dsE zeVW)Kf7cx26n{!Q?QfbLC3|ATXZw(GGRaw(GS9F7B2WT6BKk$Qe}{pJuGXOk{Nznr zo?HIkLLH*V3pd)=%eq?Us;dMG-bK%K%f=1K;DSR1J>&9cYg+yfZSsFoq9IEhaP=G@ zrmc$(FO%IKRA(fxCp>s$NPR;&#{Eq_p%$3{m5WhIiBFYfLI!Yfj)QM`e%@g#zIbT% znfLZ?@Wn2n;7~QzV=HSasS$MHJy}(Z zp@v2M=g8pF{?Icni9D!n+neL;09U>C4yQf|3zgJ|B?bXm=d0}fkXEa0058h0MPzkC zh(kGbWEJ${kM;z<&$FG+mKe9fbkyR2skCRKq=4m->k}pG&yUxwL0(!`^>HxO-&Uw$ zSuJoK`x44%3Nc-zRx#N_xEXuZ-G9Oo{rj$LIz@1~!_97tbZAqmV-2AuaMmSbESyn0 z%8)Es#QHWUW3(jqn6Xs3ry#4zS;J^|bFF>J4^>M zm&f4Fhr=*C@6|kQU?&5oblW9RZvO#e*McaNDPm8lkmGB zAhU5Z`%IxtFiPa#>*tIdT8I$fSFD>*k}gLZ*V)h@B9idZfkj%6^YVj}^u=X&vVXmu zn@7*RG>O-3!+vX`%+B{6Hr-CA07790=bw>o^~*AtP&$|c$_)TNERe-`BT(`8I=8th zUC-+3^)ZTksq3gD9UdQLxFlWQ-IlNMDs$w44CW@R@Qx`TKS>+3wGG{7&E5g^&IJi zUl^x8UE>z{e?na*3Aoby#JiZDK%f&xch={VahAO$%k9S*8g$Ib?a3xn8RHwpTz6|e zaxNc447;0pD6G%=R3j&td^qjT7q`see-&pdepAI>Lw zq@#7lyd>PpK=cc&Yv#@IrIOGukYaVF+QU)L*s>rVStod&b$Ra70ug|#@AYtkJVY@` z!%d5WL3EwiuYk?@sr7CG+X3s0Yu44E$FJ4XBZ=WM*U~z2edq@TXmy8N?hxOkcY%T~ zS$&1 zkFTDT#_yc;c{?JxhW@5q;GpNNQGnWV_E&5_!eQopK4>xse*0sDN;c~EWV9s~UXprt zSGzF$c&#bI=h8Rqg?o6b3YdDXU`2~QHw5y+Qp=5SB7q}Kv|1LohAb|HqFyy+MwS3Z zINkF4l2}}qvtTO|+4j`UGCKO}wHv8%0LM8XL;MP5+BXpJ%iI0QDNN4p=|CSe#y%TYF>U%<0Q&8m*O5l*RVTD{=BuTv@7n046Fe6fO6cFyAaJc9jk#P($Yy^q_ z{VPq_%3y6tmdjaY?2F)#zk!FPrzA$Y-eO$Zl5Y0GrF{Oi@ZACaDFgc9!CEjv3YFdo ziQ6ZGtifGD4mP(`P~|@Pz#o(tjP4qrMznjTk$cqzidXRjsen&UbnnnX+?Mm6v*`1S z4d~0}Miu%ZM<~=I7H|8ovX4dEiVfECycOpAt5&2YBA&|YPdIR%N6qssR*m}H#)pAl zr^!vWe{XO@aSa7+UR$o;JVPxix$soEGVxp=n?CJXeMji;=!H3dxVQKNF$qC1fj5hL zk~4m6D37eyJ?$VtUm(FPWS;*dp7lMph8j)m_nDgmvxX*mP;p1$KVI znclU4Efsfj{Lg9wB@$W{wa#uYN>;CyK`aYe)%7=jWML!TMH9*InCYCI9K_|Ik7P!R zfMajo%9INxyyG2PLZp*^)(0(@Sk+b|_Tn=y(PtO+8I=#0{I$aG7}fAC5~t7dSUXX9 zkA90coM^h-Zj`zW+=~dGl;js9t0E?urpb7-*l0CRFMIhtHFbLuI)03omY~$#9!Dnb ziH0bXQJ1v(6O-i1o^DXLl)s|t6OYUl?&T7sA!vM9+dqwdAV1Uc_P6r@b9pSD_Jt*x zdQ8Rtv5)N#^jZqD^O&xg9Y1vgAX_--0Wu&?d9L{hOuz)z*0A#Fj$rHvL|b%xPD~Od zXOM&JiptgKL9H3U2eN0tHuPelJYHmyX-0;~k=0$2&@dnz1;`EEt5UtkSD)krD*`M6 zX-kh10O;YEC4JGH!i5t(bCav4PbGC|fVGp!KKU+RTCsZ(o2*7GJs}&c#B~^r>U0UV zxhTQ?eBOjm+{22o>=E99YCo$1WLGVf@Uwl_`4#mvQ=pQ_Ouv5nMAKtQFX2Sdm?SQBd`R=IPxLku_28oXa z)Ab-8wCpk;`$}Ul#{gCg_tY z$zbG?9)GPnw`wCAxfP=%R+H%x<$WWgU9!*Wm@GqdfFc)wCdfHWA$Q#f;o=^XPh{68 z?~Q=iTN*8j`w49XuD`S)@!&aGg+>H3Hi>53`5@-nv&j0M3}F^>1ONFEQ3_#Z{?|Hq zUAS#OyVh%S%JmH=gdrkBU_krDAF;Sb>vGo7r03B{2qIql>~S|~cFAM9o2P+fb45k~ zEq=|pSfpXLJ9M!{NB6v;poQ6dmSC0B?IO0n+HRfvvC4fr|Ai$3@P1Me!aq5qUuESmqt@;W~SyZofho;*c-<dO(?DQ2JM=YDI) zTbLq1P{}u_K!%^8?uT=*DJlI<>(3Y#r^G27xx6(#g!6eEJsTqLT<+Ra`SB(Tiegas zV^t>p@g>C4Ebcdr5}eUXF13GoJ~rFeIJsED>2OdU`pWafx`-!H4Fj%BNPo7}Dc!vt z!HvbKYyC%$^ygTZC0ApvDrNe1QxVy70<-zC=M1B$+=pa$sf@se6_)lfmc+6^84TXV zttNU0MuOxC5>!g7N@CIO7!yEAvg4e9%{Yj{tu0E5Ev2#Qqy@2ftTbGhg(3L3z(` zF~K`N1Ulk@NI03pi>&jL72BzVD0)UEa^DD?=kj5Fl&_t?T~eraH!gfb`46ygI1dzI z0W_v3jC7MXO)X!|j*goE_j*X@_fxz~s0Ea%nZqDrl(w~^CO$OXC%ThmfF z)H7|YL?S#Wej$wCY)IRC3j#gwT`{dv#L|ps+U`iU|t|u)VF>2Q-;f1cHUAze2*^ zt=5TDr^AE4Fy*c*v(#Y`B$^$GJMbD<{!34rV{vx2F!BE2FK?CsT=SwBKPf5of7C|c#Ly8+v2#;?l4~)WL8XnXe47r)Dy zg-9;+Z>a$hO(c5-Q_>4N75xXZ+3hz@@nL(-|4NOBJ&3p;HXD(RM^r667@3E$?0M_n z$G;%&rVP@+teL;?il5pJ`O8mu=;F;DW%D28N`(p|rx?_ED2~&}~S=|NOpd|t|kcG{Ru`3%Hf#ERgYSoDEcird@67;6MY!`rou;YP< z4;!@dWRLf50tdtzXVg(e zWAnw=dB&CoOMP+_a$*lZl`U>ZQ;SNa29`O4p}S%3EmuC}aKeJj+W_{oD6tr-qn>jZ&IJJ@y8Q4oUZxiWKog-sicf`r#G z!O95og`)S1@vnEy7YCO){j{s z@N3!5nA5KA`DO$gHm52T?TNDLir8D9GbT-iA+sh6pJ+jfwu-?W6i#~6iD5;%S+*3X z{ktQugY3KuMa4WW#G}M0?WAM4AjRd#!w>Ykr?Pa8r)TB}qi!kHY&0O>qj^K%J?qY? z^SM}XwKBpfHywGuBp~zBuM2>wmM`Kxn70jtP52`$Y$4os2%xH6OL$m_uAbHINIwn& zfEM@0DYQBk*0?TGc5G&t@v}%4&5;}h$xINriYfh43~yCWK+cN~1B;iAe_an^H=i7h zzB?`dW40iXaL)ay-3mR>)Z%Z4HLAXmZTUgdHumn`x2j@CclF-sfB%GTXVN?a*K6mE z3QGHTb`h9j%V8)FXz5Zh|?)c7F*Gtneje@MS&NJ{ib8$Li*ey}pL2}HJ zQf?z<)G`^;K{IbdbVY%U(7U+t1p9Wmm=T*2WT|HyG-w$=Yq3&MF#^$`EMVZ~@~~zR z<{nTK?AQ|hT3JY*B(qhX<)@RkXVf^XI%*I&a8*{cBQ0Xa}aTGiIrzT_c0 zX-|hWVCaK@$LAVi#!=)u65UOkTK`ShwK@w}l06*nf2if|I8Pfc_3#n&cGI?t;w)hP{ znN=il6v8RTg+MbR^UZ#)VAX`3FQRQ9xN$Xx1zaDPA^Dr0XW>;$X3Rrr!~l3D{4_B= zr8~L`(Ud@Wj3DzT_RFW?t)Emqjj)W2PLGW!-me!`W_y+`M6JNCXZT@u)nD5q)W$gt zq&zM~Pw=GyyB5>7PH5AJEV}@VQt7GfNq3$W2Qi;n$>FXZq ze=qUd`j%w{u;O5NFqW#(X!d_3f&X{e|4)S_Ge-DL&Xu@z zLAEYlHeCKF=Lwe)Z4@B z-|%OB(*Tm*Y07FWNSjRT-{FM9Ph{mTKa{x`icXMxevO&By~n%!owoJBBnb`nX%y|q z!bx}Ts)rXxJuCa8>hD`gaBwUmjp#9`JX`cHjHbk@8eU!x|DHK8Gv{_^?QN4Fg4;l? z`|G4e8BFr9XLzAJ9}YHCKwhE#lV<8^>RQN_cozYJ!z)_YNnd~tsSIjft||MskFkMy zdDk=MDOB`Oe!Pc^hH!J?lHSj>&bH@=s}}5s=>_>@Qn7^ z*E3JvWC0%N+C|4GpRLH11~uT=IQ!qv9?FPVEa5q5R7|(yfL6u7rk}n;)j$4C&+%f* z5>jUDuy?s4CKxxoBxgoqgb10XZb>{#)i3+n76FMcvc;x9*3D(BSjK+8;Uwa5O?G0L z7Yhs5<8a6#ZO+Z5EtH_llA1dyGhu$()_&e067iiCZ${rT6siNfv*cexp<%B)u}|b7 z?nC9dDc_3sGQyy(l?rHP6|%74VW&x^c&K3jTvftBQJMG`6m$E--{w|t?us^#<1uZ{@&7t z2%hPW@l&9=ppR6=MmLEn3tAS9<$x=pHf6+0wy222oIm>**C(fEK4UYV%Qd^K9iE(= z*9zSXdLI>{8=4OU@B9i|0#QNQFd=Z^OO_yw!Ov=@<}8S3THzReW;gC|GM}OXAgbvr z5!2s3vQ;#d;fW7pWmCpl{JuxOIP*ZY@dLTt2?kbyvWS(Y#BvC1_&`1z+(Q{E$ z2h*Aa^QMVwg>qVdY?2-irhJw1J}Qc-Lv&83)R3H^{`r4cd&{n<`*&}c7`l7tl9C#F z=oslP=@Lmv8M5}e}E(PiCZs~i@bN~0c_Vw`I>v{n^8P@ms9mglrkS&&1Yvk$`06-!)EY?}*~_ zS>^0641WgXEK0NtJC+nL-d9lM_%x!EXMUJlR!OjVYIW|Uf?d`S4ct{D30wdA+OvMa z2p<0k|D3bDe5d+0-&Sx^xLvmDBBRimo?QP|rC=K)tEihY2UMS|aHk$94}vmd!mR+x z&j)6@U7u=sfcIm&{%7KaSo{f`MXT`tsoU+-(L;`l+)w^e-Sv&Y@35!|#doe~Pk*WN zla_P%nK!oTM!$K*d;_4GmRCKFAiog{=t$_28N73=N|~YdKX%`$Gvlu_32^~^Un$XB zkL#@PTQ}eHm${lrw<+A@=RyppP#W`k@?#>j3-iCub{fU^BdKie;e;mu+S+?FbZE~+ z_PH}7IQ{DXY`G^ld~~vV9xzciQ>+AnmJAOa|2sCj5Ov|hm1;74*`nbUum!TdWvvzL zUkV?tw-&`i49fraaBYKP_KBL)b*_5vw+y6_m;xZXZGZ1x+;T%BVA|-$UO!3HbSD_3 z2N5*`{)R$SL0BTzx&6CXn>!JqRM^%>OeP_}pjrI<6-baL`_gj5wrio(!y}8Q1hH-e ziBtQ5&ojZ^+zDfQZWZ*g@H`SG2JgGKT=EEJPvuy0o&al_)lcQU*?~S@cduhkO>k)? z9#q+LgLl>olE1~DBvyUI_q-$gO1=6w5eqNycjq3(cZT{z)7)q`mf|3XNS@<%qU0u3 zscv($+ect6%1%h zj5mtP0J^N7R6URu7!3@Oz1n=to(dqq4&(Xhbrqp^pXw+J^}r0C=5r=vyEZtbMGO~& z$M{!A=lS#2y$aKiMtK)sh~#iFnakHsPtGzSNh>r4UsHMadlXd#cpWqcHP&lMks;FZ zl|7elQ;05>?8(WY@HlUaJ)2^+GICg8-S-)g1PINj(PfJXYCcPsUSQ`Bd31^~qW0u| z2}qgij%VMDoZMGI(0@)rxS*JJsca+6vg(puO~w$zH)l18IX31#1z0-oYqd^Ii@s+B zieUD#K4_2fq?ngB4nCn+=SjOXI+5gu=}1ghSc?$( zl5|z|3VsHM?|gj)?;NRQBB6!}`gSlmC^Z^Un?%f^K!|jrEp5l5u7iKa)syB+Hbdm6 z4wFIWE%XcLlddA+G*Ng?G!#VRX^hnglO{>K2+ek;o(RbE{)m;o^GD_T*QvJ8@My6M zAJ)N}g~ggTXiQ3`Iw$nqlSycT8S`ep4GYdy2$afZWm=-~vmY<3og)kGUNP|Hly@C^ z1Ql@3bHlJHfcsba#>r7jZNzG8YyD};369ve81&<)ci0fnRcft>j&esg*~{=Y z#>P2q#QK`Qn$#m5ns-*Bk?Av`OS1tA?TkhB%M@VAPY&O4jZ4Equs1F!4E05fQ}K(*L254Spt?lo^6K}(smSL7T|h(pL`16&8U z?jo?9P*-5u6tL2^I0*D!d>89SmpqZ~Av2fr=G8%(RK)6K+ngcaoJ^IYcuu{GGgW1? zt@uuiJNVfUaT=Uy%gyOo8E^hIb3#uV@j`Adr$w?$1C51b`QU$R&lo?o1bCsinb~!HZJ-*%);6uQMZ-qZaug}zs6k>@2&5Mc-`TuCHG0*c{BMS_xgry6{5J-SkW!>ZpteiZ%p+;@>8Nkm3NtGDpf=Y&HA8sO$k z9dp{(blsEwe{5@i{*RUQpAD8f7wH@q_!C}S(^6Su6{Z(jr~;6S91R-b#WPyw;J>Fs zdvH6$M8gs?Obab!7}l0G=b6OsxgAko+cayS3l^HD(E_s*aHbJw>aw!_duL_($tM@C>9Lwgj<<2wL8HLF#4XE_!`AN9n0NS}wY=Iqe*Jl>Zzq}si>*25HGJl*Cw9sqH&l*Vm zh=NJPX!D&@P(v)06V3ZwBB)LB@ozReemjh4yhSSiW(_tpf!ZnuCDUbpiX$$0958c*|D$HOKYxkH;qn|>id=#KaefIgXMM=dtTaE+ zq1LKE!p_w$NKTBJ{3+b>cDBM{S6{gC(w+r&v4?6g7ZLlNM0b}b6B_-dryDkv!)T0~odUn>r+#5dSi%*b@xJjo4cLKV{l4Hbl6zrl>BSp^DGoO*7Y zoTB3paqvyc!h`T5fbz@JqY7pNaqLc6-00Z3KYU#WbkHEQ76Lym;q+<^51Ao%f|LN2 z#(hlx_fWP~z#xpWgC`^awvkvVOCUW{J6$0?b6kIDYT}tDr6R;Qe0(&rL50bLl4P0; zOHO4{Fo=YBXuRC)z)f2V#9p&QhlbBXP%7~su7MO(xsb(1OAQ z4k~nyxSX7&iu;5&Irit8*xYt78Q${uTNv=Z?@&4zLm;+nVl3K}TktS2VR2xx{{{z) z&Wj03nd;%Uds~Tuq+grHR2-i8O<*hp2vkBPbrQ*W+tCwwS}f}Jd#PN7d&6@~ZxHlx z0+onOZC&5<%9tm*tPw5zMqRyd^8_fyD6yUO4dMFNj2VBzX51Inn#yIfOIuo+IJ_=o zy{pVZ*aY@B^+0ZK0*aFz9_K05h1s2;Od`meUmi2rv3FdCFF7XuOA%sKsQD^Ao7imr zKIL6#RlgGep|p0^5}ql)2(MI3+vlV69cjoaZ^Q>ahbHTUY#6}iaG%jQm#OYRXFlHI zU$Y_A4dWjf@V=Sg**T>k?ML^4^LC)RB)fer4v4Rs_0tcGrZ+Kca zd$M(Zj+%Z{OCZ@=h@(;Q9P1fWQBK9%xi2((!6vM zM9Nl0P{5U+&1g-s;?sz$ICS3Ih?|ZlBykdyY==M-Qus`TW4i9vGT#$W*Ii2v{O+HE z-k>+;tAxY=Q=WLKCuSbe%AW8s`P;N9LCwEUaZpmhcUpD&mKHMMj7H!wBOOQtx{_W5 zh3|t;H=k6&e^5UPcs+$;n);f;tD)ZC-%B>qZ!p@9UC3(*c)dLJ!o^oO%csY^9wD_@ z=6mxP{KOG=5d;OkjN(zMk{ZCl)&D{0uYJ*`TR}v=dm2}s6Zlbn=3`zOxefg+XI_>2 zwKoA1Uf#g4Sj&S=g#P9%^zU_NjRi-FtgAHqlaeD=UqOd@Ek1MEA2)*3=ObHJ2!opNRjn zku7Ze``vCGuKTt9nd1s$HYkHM{1IbNo zWG5^s!#i{IV`1uyXV7(ru#bN;F<7_)|9tIxZs}p~p4{ibb9#&pVmC3GLxwQ!yxB5U zkXOCF$$d_n6Tb=g_$w|u&^#C29)pyLM?0ogFTFscX62|HZw$JR>F!0WCkgpP(G2fW z3uwY8+Vn7P|0O%E0{+S@mH$P4TeSISZPvR8{Yw!wn;)W`rx8i+{Fs9pBJ?!xB#Gdi zLJ^Q)Eu>$(mv3HEB*-o!&mFx_my8q+A3qlZXB*?G8tH#4Q@dgenWm8m81Q3!y)r6o zEyB6|L*F6R+p$#w)me1Ys2R_MaN;uM%^RQ|RTd5#&%!{+-gCK~(W!Gx?{SRTAaXdI zaA1L^9Tq*tz3c9v_VHFluk)ku&qNSPyt0C zHJ5iCHq<|{>x&64MEXQb=NbZ{Q7gEuOg9%9sT!XtJ~C#;yqH7lZTVO1^qNW@Uj1wO zp7|#{oYc zp$ebbx!2`11Kob8MSbNSRfVTA5x%czQvlVUn+FvpWU+vtBdE(Ve%|&`2UH$$a}0=5-l`;&fgR=8pf>VWFG62<*iH&hYM#2v=El3Fohn;P5YCs z-y`NT?rl}homp7KY{#5L05dXW{tUYJzakL{!_=GW6_zdCeIXK;z{dakHMjL+Ws`Pj zb&9=fWi26+4ADr#gvcJ?Bq;m#9e40_a*oUNwK--y*Brx@&xz>o>YYjy2zTIoFuBv= z`g@v>G2nqHesWmH?E;(vfH$hF-|Nn-buIVo+;D8@9V~J6 zQCghi+j(dqCp91mZYUPk9He~Jrk@dsb(-4autEbgG|P`z^;`;Hr*GT@2&_wF{d`cL z@x(IM-`=~keTVNE;k!o07XfG*^>w(}e4kO;m;wCCuy=QJi`Q*#Xb^sQ>&tU(8*a|Z ztXv6G`p=&Zx2=Y%Ikf!@FO=?O*Vtld(oVKmNdW*zgDvybC&o!$Sqk)LNL>{f zTc;5K^6gvHT2L19EQTTljJf!{vK1#hI&^&e4&5S-XI7k`A)?OQ!te1y_G)uIUKko6 zMi>`p$*-Bo07|ED$p}&k(5lZxL$x_O zyTRY|z;MT`t_2fVkyWtPIxXQX)ps2gDer7u3-@>H?+HU1*P4;=WWJdKuU=CPbG;O6{S(a9V|a<=@IFuz10vuAWG;DSE{?n$G%{hsAnNAd<=_&@)rWLL5!YkN z1{JJi_-T-s+`?#2mqfj9o(zZnTRH^M zF@h(%Ba2_YWD{I)CTHY-A);MO7GwN6LUm@%6D?LQZD3CWms~RZZmL~1Iq`?Z?^~?w zBK=g_X=o|U+YZ(&WA4oA4uyY#k)=22m$P)NUPx64cMsz=$Q8DoQYS=5F;W?$`+Eg2$w; zvDk+&FWMVopR=2!-k-`!5Z_aP&*_x3hhXVd6oO@|dWSa5sb|*>iXsFnp8Oz3aw-~! zqQF}PBdD6{_xt$k8$yU_$hE2@N3ekNX=q^<2WLngNGA{7IOj8?c}KF}iprR&L1)G| z_x<%Dp6~kUO;-l~dYvfC0F_ej6k}MMdIjvY(CgibodA{kg|#nrWkH;rEXiKSKR0jK z>Cd(ot30q(zbnYtIf_(bO9b!pI2%fY6#4}$qGOXh+<(55kUQe@n`NX@1oOA&nwK&L zPYh9p7Uuik0aoaR#IU-YW)J;vcloS~{)VojaOXcZdb}D1B#mA~%ppRK0iXS0Wh`p( zn-y88#Gl_w!TFx1saat^_|Pk_vooeu1o3laZYlkT@6r5+?-6sPR#*M^y#7f2t*cuD z{x@jF)K;AT7u%zNg8Sn?hcm8+(x<8GRNE#4`-7tv^!rROLdeOEz74nsY)5 zfsOV_1;_#JgxNA2J;X?W6wFqub_jWu{@i%5>&92v2KfaGAu?qg3byC zx&xc~7WFSOyzBX2^@`4a9v<5WNnr7$`Q;FNR}bK8LcfwlNB7#>`ldX?exipukW*z! zy1B&?&ZC~rg`8`Ci2jFWBnBz3Y%V|ZY~!ALe@{_JAJIv!G#HEuJm<<0`|zQ-())+& zM30Z=?!*=qmZ@)Jc%nA`vPtq@8&46~2xHAo7-*k;v9U7(fj2I)WU3BcK1R;!Qs$J;chc6^ZSB#k~lNsBeFrPG2<=rotL#Cg+aq_(#Hs?5Ae39 zhWId9Z#+~Bw`UQgXq#$^iR!D@;T)SKgqUb6n&*w5b(`+I(x;YA z6`*B7A3wE*`5pbW+*E@Ghz4s&B1$5LfBI%kfX_V2iZB|I{8ndX|6{RLN{~5OBOZrC zm9j1z@pG3Iyl*L)lFOJ8pwzf&SmJ?VVCQNe)E1+B0e85J`AmyMIi1XGSae#xRG6S) zUuXS_PPQY-4fL!PYvu`-kh!on-5n}|OWAvyjZO}Ra_Q?EW7)4=KM-no(^C@oqK7t? zq`0Y$J0e&Gd3T>$~ zZA4OE^r1$NWVJI@j_tRO-Bq=e6OXt0uOHRU7{zdfRS?1BSc-*$s#7{B)qo5;m6m~`Ce zX@;Ah3aqb7++54r(OLpXWZ*f-@3UNcqFZL(GBcF>zr_W8Tf=Vq+`q|Nun(Ib zw~<(}Bx-tIq@~*E<6FT_XZ)8X0w zX1NpG((_L}FAY+$_Ta#I^5(Aj>;c($&)?|R)R4`YeY?5ne{Wp*|7SO@ocSKdW>lQK z%-?|HZ=AREZ_ipnnl8*13Q3O&f~OMfVzI_S>;y9sA;|%9L=*`buFt6(O*f6psem?N zMX$?s?t2pO?>^T6?Lrjij<@Yi?CCQR>XHF~)Z`OOrK?s71F~tCzh?tdGaCbbn@~dV zT@x7wM7k6_PHnVfu-m6Xt@ct%JfJ(3QseG%=^n3nI`=Fu6bn0j(`J={Jf$X+eUF69 z_3Y(8sZH#;aNPAJF9ND^QOx=~8jH#Om;G^96Kh#S=p8k5E4xj+BB&Z3pHJw*t2;G+ zxJ+0RUHgYw?C;H-KZx)x{)y?V!}If#A$U2~%I5vO&SDOd{GAN%{tkDA36g!zlR= z+e9}J>WBlOgcMVp@UPb7=q6u_ZiimU@Bz&Cjjew26l}mlx~#-#2Wz+E3#&+JdjIN* z#>O@Y?lWNe(MyfTX1&k(t5%=8p&3v*5}%e3k@9RyjL$QHmIb3%m>lcx$n<7K8C>=G z(FGOT_RBlGlFX8QNC$v1GG9^b7FuFEIYMxU$><(d;uZNqewOL|S3XDv+G;)CzxKM)-{`xR)LeATL!8+oPUZ<~%6>;&cjrqnayj2%u>QPcDY6xLTN(aeOiyIp^+PHDa&Nr zECR@m3?Zuqo$?L7q%87L7;`kfwBvcGo#0O}tORw~Tf$fuM%49-q=2Ix1hc4=rHJ3oKH>QJQp)Te?fvD)4b^iWpv zqdVL+tM4AO@j?0V3g{C){!A+J==`IvYZ9>H+{YIeZEm|?!!LG39&RDkjvl^4@T8Cv1-*|Bt|^Ttx-S8TzOv4M_DxZa#mPxv4?C%BQRA40o4(o)6hKgM zU5}SKug=~1{Uo@SMtgh9n2P*IW77sTu^hpSk+AUenUu-cIf=+!^OCeJMb?u*jBl*{0mX`=?i$(Kt9ouG zGL$o6=2`jkVTaD1f?D{292vgyDZKmT!-FG_E-zlzFHY9g5O|=`rBR%RAN@P%w9TxF zii;StxWpM#y%L)N4h9jRRWe@P9;`Z1F?N~?lOUv?t@SQip2edQBdF!)MGnkeB-;5) zxU4S4;^_sYse(AK-Rxc+S$jbS^KUq(IoRQ1lU%t=uJ@pD;R9lu#)tE@ z15n5@4N8;JR>9EuyvcuO0r+M(d1C;oP2unSI&5-AByP(2D>0p{jfzy?XNH_NN&70S z?-V%in12OUAy{wjAipFNIV~~1|4yDD^L2-xGxknyl+XkIOzofz;y2P$Z&hnPbebWC zr&0C(aYySGk!e4Y--4}uj&YK6#FYLl9nB(?$(%U!0oUFUF9$!b`vXp(-U4+qQZgVp=gzJ&d>ayVQ9$ZRf68l_vdCpG_A-^2A{eb9bO~ORLDr9Nzf_r13PCWb>%XPk4 z<>(hreS4}EGw^jzQJA*95}ZtkYyLU50QT{9obVmnTG`%ccpQi69z$m5KvVXW{eesZ!H z{B8OudpDBg3kxr3Cx756$#fL_h!4H`_V~KRj11o=8cCHATGYn36sDMugONo?aS^SV zZ_elDwDwd#vEUQz@0=6)#7NRbv@YJvl{#s@oqCM8PV&qhK{v9m; z^JEB4*{=5yX%5h_P};pFn$$OrwNQIo6W5&TTQis#q`k^5Ju5@}c)be$wOo5;(A87~ zo6pop%7v9DL{|NN2WLv7nXqD{)*i4tmlKnVmE0cGQemqq%+d8=fbFNNxsW1#mw9w- z?|(bD>=Pb`M)7^ChY@}lCo3rb72VfYvEHjL=?6GXL35(DQ2y~-7%}{7C4g72F*`K5 z@#G~z0``{z8N!E`y{F_D8j#}1)uk%&lHQRTvC)#kS-c|Z^v;-*M)$$7bfVr{UGJwMpQ!y)YQwM-pDv2%5{WGiV*x+oy|6*1}8U=fc2%}KN zVqP`_yR)$xJWgeY`c252HGQmLNL5uFPi}r3pIROQjY(boTXD4~ zJGR-Fq`<6}$h~{vRy=7WC*e#@y~^zeH~jJDKzBg5U?Y-RCXmeVBM0TYonq64DhmU2 zfS6z?Nf*w&nfZIU5$BPXAYozHN^#J)utWzRyzfcphOek87Vjp*L^~~V#P;P7RmLxK z6bf*WSY4)Y`MyN+T%3|b=?a;^oDwRD=mMz1_BjBMFvuP>Klc^4u(r%sZbEGT;tTM= zsW3^YUXVKy$fFEBe3l5?pECdibr=ns9bweKK}-3e^4g-*!nLqD~)70v&31X>4%?7vi>(9gh_Q59-+}-DyOWNcq2Px;%Y4T(|Bgb-6F^ zjq&ayb(J9p3V6tsPOkJtJLCeEA67Kh99iJtbq^VE)+kA+VYGL zAW6lLyLk>`632-t(ASr(a`m?9AHUJ2)NA2UlO(Y@Ral@BURJU0}&2fwwiiw>v3#_dyw1q($omf8eL zO1$rQtGwHNW1I>dwIcyVb4e~Or0!K)be*u1u}a}3nuDIdImnmYZ+;oX6vr2|loG9X z9lbhpErhDyQAaV?|3ucMb>AL}Mq;r! z1*}9(NwQIQVY}5NvBER^&$c?(@weeZhk@!tHI5p;Cm}Ad$3yOXj#!8 z%WIS8`~6e&@Q*Sf$>ybcB|T+eWS2_9gJ6kR z^Av98!2G&Zam#eGC@B_`x0*mOjMJ+^HjO|3Ytxyukd-eq*}Q0X#HQ2Mx=2c6Ur(Zp z!ub*IA97Q`(>FbhTM4`ybb>ATgYX?l;>YIW$iY(@u!+E_TJ-R7ec_rzef^L^%BUtZ ziG+XdG*aFF)twgHM4XX;|2Fez5PG;vC6ys%KPLP6`~?Q4FKxnQ(EEfb#`2#PNvs5Q zUOs}rzi0d0!ebx~alj3CR29;9Ypu`GWB|FprP=igTI%o#+P?NQX%&fjw$L6Y zBov1Gr|Zs2;~&@0KB6Bk*AJ?E3+iUbM?TBRX~Ri3@xZ_1`^e-R_Bt#L^ID38d&ue?<71G7O%}e9Qi{V{8V9LI>gp(Wq zWQP5d%f*8cE?;oti`JneWzz^#vGzf>Rc!C zQlZhNJ)B8WdQ-ye!^600{2pSCJi~|PgQ>1>zP4ckfYtY!Z|F81GzH`ab|&H2aHVVh zbjgkzp{7dQFxJfG{56&lTx?1~&%-&6fk!|>gj(ur5w~p8P)qCsUo-Sy$NG@Q z7rGC=4Jlj!glxluViM#gsvZE3C(};^QPQ75CwIW^$&0W*XTj^jDA@f-i8(Strdagc zyQRJa@E|gvhT7m{+Y-}U*D?Cub;P8*I}#C|b&7{hHlcm=QIDsd)%HU6t?c4*J)V3F*@qk@W+&|0r`0Tbu6N zq?ew)q7n6~dHpHb<*?A{cqhw*XxDD-wtJL&@Mr2>FM6&u(b5zK+Q~0E9Rh)6U(4|X zXp$BAFs@BkL5zsTN-JOVzNp*eg||+Q<$r5%YYE2SNtIVFgc3LGD6ctZ*TIF;_4TYe zEi)e_Mvmb_o9Yr@;Z^;I2VTQI@xnQ8F|VqU|@kqR0>;c5w5z^ofr%uR{`Ft4S0+>}vN^L;*OStSdEotU0blu{FBOaI*bJ?m(xGri@$QgJE+Z-h-%x5+_Vh^$5BCaod`Uvs6jP_0&PR zFqMc@V)%*B^!@oKcG}ow19u3O0=^$Fc+afh8h3j#JjXE7>>xIGa$zEy=vN zzbo+O#S$(?K_|B-FMFB@>d1o++L)Z+(a60KGxv8ZG+JF6hz_~;m#GCcakxIW0V}P$ zU6XV}!G-_uX1qw^^azMG80NYN{oj~Ka~>^Rjca}0aQKh#4^*m5&AZc}%2*M|8Oi6+ zqhOODI2gJUX05Qteh6%>nf?g6sxtE@S;r_ym1<1GF4>sR`YyZfEfc-Hh%6kjcd5oi}^m)6-?exwR={3<$zGOJYD=SPTaB&w5Ma`Ja{GbPV%8TeNxR;o7tYS zJe%hG6%ImHD0mG4`0MYER80@0Ouf>Sk=LNDAxSq&abiz+{q8 z(hC;)kPx*_K~D)ht}1w;BUg%cQOi|t>$)Nh^kJ+}wQF+60{SBs-j5mVO`~HxDu-e@ z84-T8cjrN9fh5O}W}5v~Q)+h7!JGhFl|!%~1h+(Z{t($G8?!AUaDG87c-<)0&4Vb~ zYB}ZrgJgEsr3k^U(Q4!;fN|?Iu1gxICe^U@v5<4Nc*hvG)-8>yjQdtx4lWSfK{kBF z!o04cNrI_W^i*Y4k5{pYe8vn;a+p2${LQMcvN(Coi;*|7DByYlxEXKLieGx%Yi?-4 zr}j_YYnMb#=Pam?iP6gUD+4wQPyEPVxmT4elpq^b;&1yHQS?Rpv>$NhcL3Nn%`vF{ z#XV4B+~$0_lzqWQaD_2spA*=C^tKE|ugb%s#S_<5B6+%tP@%MJzVS%$?xIayMvu9POtFIGp z!^CHCck;F$xZ^ENsP-9=v@;F5P<&ReI zoeO$p;oGann-@c4y^2P<-BI<#sk8A7n~OLd^G??P$~Cd+tlzt2-*pNuw2*U5fQn8& zM@Y9!2jRkCz2KAY7ziG6()L<}=L0WVPb%y?Op%`dMc|8w%OIXlf7b%d3SbGCyg}*P zD!jC0*py%WtJ%-TIWki3wpfZL6sUHqRf}c4DW-LS9xk}EIbGsN#l{k=9LX3(Fi{fN zLWrG9KgZlmkB;p%Kjz`+X#TrN^ z(|TU2U5QLx&_2OKlJ>wNl4Lqvio2!=klfe&fjj`5!y#>C^4~+?=jG$j?~o_ldOrz3 zak6U-rh+nhD1y2*^|Jh`_g$BUB(>|qshVY?RN+Q}Qe$gQi%!lrj$ZWj&pX-hQV6T2 z9o?UzS>fR^Mxv7g%lmm#(Yd!JQ;K9de27HI-Q$xXFD5?N?y)DrnilwW#g!egHXlaZq>_v}GXzv(aFaGzH3=*^0F zeBi$7!hRU}CXIXcFH(tI%Tm^dWKr10-j!WEek9W`{lScfVMfZvIii+s5B>yp^Llw% zP)dAZsyrXviMmYZP?`Zs?C-Co7VGXj@9=26Kv4IbHXfsh-a#yl#Mau0rPglryBoIZ zeeX_Ye7Wkw$q(MFl?qYrjN1)X%O~Ep42C(}-yr=m#*f=8@_QLHav_32kNl>A z7b8h_N~SgKkBIuzEP?lNm|Mh^4hb1*dd?me-#_3Yde)nKif1m|c`r!42A2xWbC#Jv zbTKYrB4kUg7+85;Ws#FC-)5~wD$H&yoDxCbg4ph;yw;Cjzu$SaK5RpsLF3Ui2J|3c zTzw;dF)B{Q$o(C9H`jiKjgP&3c_sGcZNwf`3&Ow&8R#lo{bB8cTkk)N^e-{Epl)5m zkqc@lIF72UJcu5?*R$^-OZ;%Nc`&3jA@Y66 zl5EnSgemMQiM5_Dbuj-7h&Mftm;#Y5K{HH(oQts#7A(?k4S5X|wA3Ys<$)bDx$>z@`o8Gk7Tsb3XuDPfJbnblXc z!vQOJZR^(Wt6$-YO&Z!Ph~mxrI%#k7W54R<(}J59c=&(YO22H9Ljwg+1(sFn)Csi2 zYW-Q3^>fB`HR#rpUH}(^dET`*$%E>91z`ZWp>)Fvr4+yK-Jf;D zyA(}x=U6}jW%@-L)1LOb+)jul2lb7WGK z)Z7n?Ur9i}2HliwwKa*{%N#`L2?z2n6=?Ak{9=9rrCAetOJ@FOi+k}Pt@<8@5 z=y9^(>5$pF2yuqU@I}Z!+}zgHCw$sw+B-LSL|` z`U8k>FDO0!P$ge(6RrQ}j`x{Zno%chmqR0wk4zzj#9Wjwi#oYZAPenX&$)Kp^!epN z#FGnL18XHoM7NQor?eIg;Q1wnLB?VgdFc>9+xHX85l$iXI3^R)_1GA!XSA4gP0r3@ z#G2JeZ)34LZA1x+wE5IvT3-&_#wgE;n4iL(qT-kgMrzFK=q6yC`-;tZ6yQPbb#D=i ziZX&%ix=(?g!EO*Z%pFyVV;dqyl8WN$M&l2C(#`Wioy@2L2AA4CEc$n03r;-eSGV3 z2b)ii*PUe{Nf;Quc6a}1jC-Omik1prk!Wd;x+H+TB`))n^{f%YJD!vTYCmZgguuOO zT8sU|gr~P+HP?*~ue&FYUo+38|5sR;@jqcRql8W!T@MuXMQPt+<$5R zo9V|$@`w9BcDQ+N&ilvV<}!0u%XgjkyK1)L7OyCaa1${T6>a)pVw@|_Lv<*SFncav zgmisWMhgud^w-9$vgCbIJ|PC78$x`V23(d_o^=uPU)!3VBP8~0dO-vO@Rnf>A21~z z*Y)cKQMjIu1upyC0J(@VHpVmuACti20|t5_xb-}!!i+PpWSdP-%(#6~!L>e<5Kg(C zD!GtC{zx4uE5t@Ge*4d~g~qwl zZ*S7u8tBykF(`D~(~u9fkK9BDS3exyi08>J>J@_$3v`&mk__$Sq&+B@MX9QzIubH&*o2&3e=uE3+$1 z^X}no-iVB%-LI(gsW=SmrJN9Q*eqs^&B$WqE0G!*1u?M6coYn#Tk9Wf9ww4+S7K;er1CIDyrh{x~)8B*b~4q^W8A^5SXsAtEuQ4N7gs`2y!I z35=n#CSYNM(&xecpYH;-iAY!N?>eppK{Ke_`d@QBS7&6SHnNwHGNI>|9 zetFyI2BMcvB+`<9AOPbS3baRmi>W`?@9(Rv<8?W~j*)x93A(xrgi~Xf^qJKT8C>7L zy~SE8Rs&>VcVE+MzfjXqFu-Q0}6~WwRl&sEvLo--u>{U8qxk~n7qm8bi2PCZn`5YZWa6f zZ&J&DnF%J;g745Rw<7Wjb|s%D1kk3KZ3^$JUd+_Cl8_@m^d-?A+5HE8r^S`^)@^~7rs-&&U5*o+Tk~Jy-=qTI%)JsvQ+#D&&6i75%N2}p3UpPbPkhm@l7F%N$g2{4?n9f|edynHOg*;mKB*LN|m1GV003j=z$X(A5 z%7Ph=sbOqeS_>zZ$zVXBVE|9WwHa2CsXy zGO%>!Mu>=WhoJWATYF;YDE&k-51ibL{z1_jxL958s87>B5Js)3-oIgei+j;kByc}~AFGQi`29bbPR z$2V2;4hUq&0$)9+5~$!cnGekrpF_E{wC7|Bi$XTFx!{mTcvp)0zRhJhS+f%CPZa=4 z^&aq~C^ukX6ON=$W z`cfH91u>Hhopj3nD2sDO8i3RWj4_pgb4i;l5l)RdR}7Ky zZtPLdaqG`N4KiWgWL_TSX^BSG^)w4Rq zklje*AC1=crYLeGbg*Kk0=P!ZvO^wY#%qLKn=nXp(!@F1aRO`_6rZ3gn{N44SdfIH zGWoF;QrM@m5BSH(^orfpndMu=N^_VCcz@geknKdEq?a&y{#ds9z5K_KQ!-vVt^o)_ zqaVNz)19wVv=o(kP+`j&3D5bV$@>CW1I}84p{OH(aQ|FcuujOD&ff_e^j3C@;Q44poh6Xl$$Cm*sOhQT0Z(zV%x2WvTJMC~GUcTDU z(4&nbj}o0*mStw=scfX~K*J>sH)KdDe&Uj zUY|_{$z=R@ph#G^N<_N`mMnm;P=#=Euw#)1S?`D_-rcp_a9DzaC-pDy!ESK z#1E3MSA8;Q6ps3XQq6o(wYWN{F=8rZ%u5f2@~;6(utFaS9J`qRdQ<3#^dJHNM|*DR z{5^0%&52qwhn@jfIJ+b4tX`OLb_j{Szy>K#4fyktT0CLns@{(n^Fl^h*5%(%59g0{(c`%7@Ph0a+rb{LvM~?Jr31way^u31!IbYzEe;WG zPCl^|?(;Ll79RS+6ec_}sR~1TzOn%|KN8^aC!{oiWrFw2MIDv{P(e&O@!x-DO z6Csaj48l4-HhxD-wP2<{Ke2CW#-Uqy{CFvhDb~H~`g1<2IHD^&yGXpZM z#y&AQxwcCHj>f5_U*QrYsTN1N#bmNF_Gu#BMD*REajlO%efnJ!sju#FfF$(b_>Hqp zXedwvKdI5IA-Pk0$gH~M`Q-vDV%eoW2y5w}C3s>Roy&G}t=#j24ShT_lRdzuM(loj z#CngE#>$lQVf>W;*mE1bm1mUZx-AS}pRt3OFz)?&9};G89h{f7G+|ywz?4LE^UJmJ zczZ@&Y%-o0sMJZXnJeO&&|T#`Cd;#A9G~3=xez*EB;59Pvfk_(%5_qF%+0=*R{cXdrcnzyp1eC#Abr z=OXK{-oU)*=Sah$;UmNccC#g9dqz->O#P52SwIvh;ddUQze+f`FSAeePU@q2d!Ca7 zIaV{%66+$t`~)4saRB2wl)TgfrQeDEwm+;4KBMdLjm5Ne4PpYn(}5x#pNw&(HGA+ePHPh`rqv7CNuKS)^m zYJaxMiUuNJq{x|t6!$Vae^@!Q{iuO&DK?d?4U3_08jDgOOM;?nsNjn#Bt8+{e|$q7 z3hzXKsuknKCr7fdWqZS>xd2OuoaLY*u`YEYFc!Z8(OFmAMSv@K?3kV$7=}p3l^(nd3 zP#4iUse_uOH6P+^Vs2vsy{ z<>|0b%hfN3FKKEiSS0i;!J^LU?OktV-107c6BYvIIQQu;S~Ob;;;@et#V*S-YZs0X z+%m133j2`q-d}n&JNeNZ93Ji4@)w|77vj1b5g_Z6#KVSE^Q>kk&2T!AoNsdJKKYx*Gg(E)e-bD@$p7Me=aH0wg zkS6GOC4+~Uu7c~EuFypZ=Jq{2Z!Vtr(!j2VFVYyF;0XXMXb?hjA~Yy|?i$=S@?OQL zpJXeMWRprwNG>aHLcIYr=5GPp)3GkQT|~StO-^b00-;Q*)uf~+!2ZwQUk1_vxCmS$ zy-7RsaS*IVOBTJC89De|GnHq!BScwH5?on*J-nYhqXC1lC9s{;K8~2&2h6x<6iguD2!gBdDOv7wK_f^`5z;q~Nq0`V~&_QCF zBrvKlNle>u5{HGM;d^#itk%01mUCK`xB#@Eh60?UP_0ePdTO_JxoNT2+gpD86|Io< z?KOGgRN(bVRH^-7H&?La5yR##{HCNo8=P>qKs;(nT#J{5EEPMYkoS|paZg$YGlsle zrMO9GyP~r6d*}=g-lWoO)Z{2KdMv3qMHmmCTrnbhZfa02W?L)^GYjmib5x0m5mlFH zEOK-^#^KOtSf3E;%Sk0ek!HtBC~@<*k7V!!?=hdRFU(MF;uFj{;EE*|_awFy9f>~1 zSt4c0P>e7qK4~;`fS7Z_^S0m+1L3CYYnjOLjDq792*w$Q@pwb||= z2YL;?sv|`=r6qeQLwW8?5As1;#_m&fO0Q=t*5)fa>erbc;!`{G>jb`bq+G%Ab+^+V z=5nb_vpTnhU{FIsZq|7IJ%gMb1;W7I3U{H>3|(KIe4B5vB;2M0gEKc*6~@l+1Zabk z%-y(yMPK>%r?i8h|9kLzUhA=*e(~#vj2eH13JfH@TZTf8Yng13ttJFu*g{;KE6m?* z02x#p8b0<(O2HOI`s<5ZQdUq-t?skQW%V9PB`a^)xS{93OLKcDwQ;wYTluuxnzwTD~X;o&I)B zQx>{3Z!|ushCXfYZpMDhgY66?7dS-gYsv!R109~e;d*{PQA%@iZe3Ljkj*!bY!NJ(G(=@Ny` z>Z6c3c2Jpt;O>OH67jA=3ftCouJ$$i-O38q+YkcQso+i)Z5c5pIj3p`f5Eb4osejJOE#!kn_ zjnR)t8?VgTk+kUfwYs#!l;QUd!MJ$p*G;3#U`)dO`8MXgTitzZ|A-W%ZUYTcF*T_6 z_NHr2fG&jP8-6HU4}?Y`DK-7*0`ftVKqnczOJG8?>kX~O7rd;qs#aHil8~STpQAaG z1M*^*{9(cZgzw89X2c&{OFla{fH;xEBb*?L#!Ml-7@;S>R)GdeeA(mY*5+Gp7$=5D zXjr0(575INVWhf=WolrX@|Uq66?2qjeNNiAU391Dovgi>Zf*Qss*@Re6)ShhvVTMO zZV8y7e!m#RiUGSYCRI|-VRllO*%MD#dWrSm?~7aoZ!HS~(1_G$61o1@nLw!SPsKI; zD^yL$4Uf)5R)#A}+|QJf*qC@BhiTdKU5`u*r%HSjp||!bB?dm;MK@Y3=|juX{smyh z8xRv1XtUvsN*H)(qS94Ck0V?5`5a&A2ys7j)Nc@?wCuclgt4Liyn` zk9k3C=t0W%nG9=PaXzSTLW9apFodb$$FG>h7A4I_X6txsLhW|o;M`qijExZ_pxoV2 zW%7Ozain_q`p&0-5x6{ZGR#oTF+4DLryXb34$BczA|Zef=1%s+mAMe83cH2oe#VayMUu=r%~CkRM_{9*Ry6WOVg$I+iI_gK7C zv5xJsuO%0du>!B3HL-cdEOI7$G4u7FGZaWBJRN)RzebxNXI1Z!C643DY?p56A`=ZU{y0xpAOZ8ksbSS;`RPMY z0wX`3{8#5}IEHb-xiocW)$3RtDlXM{Fnfle*a>ay2t(9M>2zFBxiRrf&qCZi^#s)G zslotVhvA3#Rh^D8=ESg$J5QKV40QRg!s$@Tk|4BUA{tesJw6}8P+Oc5*S$8WT8E`N zBW~OD9Z@@NoIt`P_}pFy7~oHeE4;7$2s{Sn)$nxAAd#vm~(j`mYXX{yZmJiy+f*cT-$F((+OD3{pb!Rd+2z@`v)Q zC3VyD?#l`zlk;=Mx*|dh6?9}@v*P`~TegHEV!Hhh`nKx5+SZYtXYNdth#rD3zmB<& zp3FS3jb21u7SS*3jY>?RV~QI7mi^yM|zgvH0mCi%eJ{HZvX-*D0oM^cai(d=hV%=AZq zxq(Wk!}uA2(`?+cEz7u?_zJJW%a@j)i9YwzB4gvSeXc#_2ZGg2gaqMVXmmiR+t@~8 z?#V}7;(}pU5gk7x*ndnw^ubynq_zs%+YeH7mqF~baRWz!K3)x4mhbO6HyabRZjEkK zvMw>?vAm#c-CyOC9M3|M80x1tFiPevqm2;)hgtktL4x92A;JwGXU#6W|F4r=_c1c% z^9UsIad%kquUw5JOen$f=Re&wbwxxt$zaz<#j6A|ETpm+1<6nKV1XpU|@{_ZcQ2 zhl=btYWbz*QspRK9v-4Stv2pB)86EwSR7L>@eDmguZooFV}>dh=#yVIkkt*b;Iw?H zHP>-JO|iO?h&rG>Q?jL4iytu=f)OJQ`l=uo#@k%$i3?2SwIC5{VCJ^Bq|F+bA{;2> z6?c1AjAxJ$iF=Z?CS7Bm^OE+esBX-Sb~1Ct4#;cr@Fz#@&C==8 zpmgvj6h;=DFw|g@lEb}|>qG(-omqjoQtRaKAMFS`wSqfINT2C)H|!t7aAix*od3 z&aF=*oQK{$O9^g>L~1eNc{YNS?@##m7~r7+Z+`6S_U{T-iDFcu?ijD|o1Xm42RGg7 zmVi<>X$Bf1N~UQ>9JsWBC$t_0l*Bck!_tkUwmShl$|IsRY40QoFn95<(#1$&cxok% zvzC3+sM<3j@XpAxKCb=(ujKQK#zAQz)ZVosFDn;ez1>?H)}3-XKN`$mI<(o=IuPFWF~vA56|#Gs|3F@V)gS zQzt^v5`eMIyUP2tDYvAu4g&m7T#lumu>DYhl5wllfhtzVLrfXM#Om>d8&<6`Ym11Zf=5NoRNu+x_WdiY&!4{EZrVG+3!p2_fTJMJ7P za=4ZUjQDq!^Otc(I|Lb7IjTrm!WL)}SD<*8=S|GrYH5C@6A0 zY$_gRZWsxrLJfXQU}zrfkKSIVh5zV&jIUjv4{=aOWb>m1 zF|H-6Iws6K^aLO_m1V>LHUeWs(BcI&pInP1vA|sIVJZGUx=jpfY#10Jfo9Yis!@sf zr+C`|l$vx8rHfxaxksZ@C|)sHZJ5-w_F|u8e}%fZYXhi%BZn)d zKQ58LyM&2h$`kv|kcHAMsmCy(76-u^SxB#@!l!KF|WR&vy_eV|9{F$XT65DBZ*X-%knOrbvSc4|FTcUyB z3CqKB+`q;A9d6uJ6Rf1$IJE5w8I{D0tPHxkMFbF6gf%_2$jf=iKpg)X5^GFHlLR)n ztW{MOQp__F^P_o_ENG^L?sV6Up=U|DZ)6Y-FvnmFmfX-bURCe|(x}0>Loe~T-SRPB z4j|ulf_eJ~Jnp{Lc$8eQwuDT-il^I|Z+Y3D@a zmE)04F6f4_oV~&fJZ=H2p4JFUU4AMksr&f9uR4;S9|)e@a`NVN0#cbVs4z)vyD`hw zezn9}Rq>SPIYJ{Z6$OryzzfeV75CRivTEd1>A&>ztWtc8vl5xW+;wL8_305nkvRTx z22Y1U5m+2(d>F;DLO;uFH@dr6#qFGVAml91iD{7K7s?c1a+COiX>^d7n;gE1%-NV7 zm`lh;lv%N{pD>j~q z)&KOWg*Rk~b>A2kPd0bwCN**Uz}2ydXLev}!e|Iq2I zlET|W+=!4S}>te7j~PujFC(88j`$P!nr$#qCL^+_-1RF=%EpZ zK^cpjXM}{Vs*C^w01G>M(tcz%B9LWFxkMA}ol^gj4? z6+q4mZOySy%xnDXtZiU9WO&*82cdj#%xcxrR5rwb-WPUVw--?G+K=S}WWQCZfz&a; z2{ECYZ)t%R$)ef`_zPe%0V;0niy;$GDG`f^vx9s+KnH?RRlDw}A`uEn*~2BXL#|!2 z#Vq1Gvsgs2xs4A1arSRyO8m1B+~$R%A?p!Z?RpEbxVy%}w4w_sE)6aORwN%)>GP9< zA#}{u^jGP6bCSPPS$362{Hz{YL}H)RI;dL|<)C=6oub}F8$36fKNL6+TG(3w%THx6 zJ&B36Vu4}jnzEeJ^`2GxCC<%=+aE6A*l0)2mL}5ERTnh*;|^($oW(f_04ssDS~bH; zpC&FE`7u|^l(@9O;hG;RTBk>bo86ols2FtVHt2kkpj?eSN$YoVrk?X8%F!$NEK4K7 z-3)>vLt1O`5tpRbyy$87VZdr7TcK}Nh>oLO{$^eos%1Q|vM@2(>mRpv=1#5>6#yX|d)9X(wmYV6Kp|DLf zP>1^EgbWX>HlqEbHpI3b#V{VP`r#n?7<{GPi_R;n4rd}H@LB0z8$jG@>yZ987QYSM zfN3kzH*RidRjuN6hXh*~i;a)j=bw{`ZfbCY5m-Dn#fF6v{LB4wfx|zlYhX7vw5B_c z($mzo1>bAu2nKpqpqAS+KESC&GDQ(c;0eIgmQ)%4R-N2&m|q%10&^d6;4H(CQ*A(j zN3-cwetm#uWxvbW*%rrEaHAzICjObpG@DH5ds?91kjBI72)Em6Rn`jVK*}bf$U#Gm zvCt)yLr4$k(VtJ_`>)s}=HY%fMrS$0LA1hyQWk&bTqcOe%`Kiwlob53BX$Mz?WT5B zP#G=4JkUy}+oya+Zsa37T0zmBQ3TR6Y$VJOb+tyL(@ZjO$Zy_Dy|tB;U1He3U)f!&=H5YqTW||&tKP5l|+m8rEO>d3$oB$wL6(WKA zhs*v+`$#`QA2(XSD#cz?8>B+d5D-SIV|uDG=rLo?&o{-Qk(Tsh_~$Hu4NuJ^Gw2wx z+c^U<(fK^)M1~AlzeDn$hk<^)8)@qf(3}QTf17#n~4% zc$`FoPwLP5+EbjP1SOp1e!BE70s&`)9;{=-360ELI!(!s+K(f>u~=M|rqQOg0TX=O zz5a0CD+-P?z!->Mxt{h7=z=ONzkchS%ea8EMNawfCky$d0b=FpY{=#cbR*mzsU{qW zoWt&Ni`6%p$2J|+4bnQy-dSytjl&of=`S4KNJ=d-bLJhd$VMgl65`9`zr}#RUSN`M zOF2v-<8$iipw%Hc0a%`6vf|J^6fkE{Z^KBV|7NddDriCW+dI2}V~=cv{VgWp{UatJ z#M#ke8kN|Eh~rX#Q)K!=i%{a1qL=t}A9l!5y_SG%db9s#2e|}7U;u3l;0nvU0DV$Q zjSc^Z^MH9Q&la!mGj(5Je7!zY7_j2|IumB5O7G_W+cY7mM^) zc69@sLGU)92OMY_sllF@prTG$3rq{Wp;)a!S0`Y6ku$7sE6SF%!=3r@>Jz9IZvA;+pf{ zIzfOwtnmlfBfYmpR81aV8&p%Oeu20|0#(C1%edP27;DSZAzN8d7CcKJ)`0>oK@>*g zBrv3BD7;IOf0$7KxO_?j5f2Y!Pw+d!<1GGGvfjy39H>9=DeAw&Cnim7-1yX}(8z~_ zGR_0^U^CrU2vo9)pe~^<`kxxdE`Ht^pru7Tl&?Oe()LB4J%KsdTZ zrBpXH{STM+6Li=3+V{dSq3 zU!`*q8W16D+8gXne)GlM|EhR#g3g@@gwH3e7_!{?2jxz+{FqW|%~&lf!-!~LyG1Sp zA&zVP2$c6V#3)wTe=!9x5FH=F#DvHDz*HWz3b^!bahww_R|VO z-Wy(Rs7TmQ`=1qeNp;o&@Qn)>-82<36ZP*Er`9Y~L;#m3uq*m>dBb##m?HpfG4@Mb z6QqWd9;?Mc3VPDPnH*s)iSD2O&NCcHt70?GKTVwN|Ix&$xs+=~sETW5g~{mJQO6`U z{A#N->1Fi1C|gwZU|cJvtpTF+|5E{ieCK8Zf;$*<9L{8DGJt`s2M#YJ;tQ=`ZKe4j zVm@!UkaRESNbthWJz_)a_cyhw#4E6VmjBevd86r%yTDWJ)=1_Db{G7vn+1kR!feO~ zELutp)hOn-jqfbk$r!`BE3QrZgTq&fAv5FuVPM^fsKD>f{=B{BikY7WoXG#y9s+`L znS;uaS&ocZ-+%s24KJtb+5xL%6&gB2j|VhUSBnCpf8Nwz zXmefj`JH+OhMJ4*Pl?4V*qP6b1vtV0aAGmdDa_a=F|1EjdL2=iQu`vBgvR4WZ@gb2 z)_1x;siL!^n_PFPPA-eB@i8G)D=;?!S|c12^q+TB6e%bGBk)82mD)Xn=I1`4pxtS` z;^!lg@yDk&9i`Xhi8(l4KwiTz<_G+;%%j}^FN^L zi$A#PoLC1DG0f4n%ip&hjLz;Q_3={nGM}=rk|ybVX=IG$Ox!wFwz5C#SMYv-B8Pry zhU$#WA$oFbRNhAVYw{`37Yhi85-h}YR;~X@J!DXBQlj6b4Eg_$QbuBERsKEA&0B$F zQl)Ie;cA}P@&V!ZTvV7CQu#+ZObnxg$YuJ1`hVWSZx5SErR07_!3zu1gz_1oCp4`C zS4+clX(^q!R}s}Fh#V{D{5G3=;Rh6Pj@v&pkU*+@F1&KZZ96DsUDQUFmEWOH9MuW; ze2<6lr>q)%GM&D!2fs^%RpPMez}eeAGb>y3mO+=70OETtKMj2ktn7{_OuAG7sP@+j zN`vm<8S?uPEdHp>%u$%bNT7*==cAK=xBCMD(_x%i5cfY13k<5T{Rx=!&;Lun{QDGH z@wN@vy!RsA3#-(7VMOUyZoASu*2?AZo1Zs3&WToGJ8_t{;+ z!!`qVgwHfv#`$Vue0+TOhm3Eb>-uP~F9uz~2M3bZH#eJu0$;Gx(k$<{_D_{Tr?Q{7 z?!KL-)7IFHiE(~9!2bIA7kPz&8*|l$^Y=hD&A?o=U}acT&{j%79a=+*V^#dO!2A6n z5O^g2ufTIokAiSon;Yz5kls9WLcz_JLTmb<#IwHnfju$ju|vYhhDuGWu<`+Y3(H1u zccqKm=m3QL99o82aNuzwfmH4Fb9qL?b0-lzn;Uyx`7dnEcLd4GlES)}q@gud)2_JG znt+xLLvBbaWMLqK;eP0D92%;!V1)uLPi3r!$!^$~)71vywIgU}R}J-?Bb)&xMt)e= z;clN;xe<7)vf{9}CQw!c87xL@J67BieHsmHvlCvs^~u>?#B7ud%tidL{WNxG;KGwF zwB4D4jGqN>mhG_?aJ|A1jc0He@4@tU-WysaJS~~w2|7q|dA|*9eCp}tx?eRv{iHs$ zxht^P3Rc~91Hx{r8$&x^4Y<#NZ{GJ42WMx4cU@0vnN&0b25+zM{9jh0hK9$xeO?#N z;!?3g&OEPVpy8oEC9|y~0mYb6XqXYaJ>+-bn^zPR{(Iol{t5h{|7YOO*qnUlQEEG3 zcD%3@S6%;5Q2D|tY&MKYk!_VAUsxHp^c@iyzerY}F*P{5mS;>Z(b8-NbWQB|qGs@3-&tmd zITJN-aeWJLs6ytzOMq}kDNn0K`JAcfOwYohrn_|GAaa^-JKifsZW!12?S+@{T9x^v z?1}>{3Ci}Wf&d+(EEkOBQ}@;_?xRlr?)ggDJ6CJH&u`nyunD^PsDF**M20&EYiL)p zA1`+hPITTw+O2ugGw8RBYVpU2xX2NBUt~zsUiN13g{AMgYa1966rW*{ z{rFN@?ekuN{{=SaYxMv}*X@^rLfK;(fMmKLMtCBF@+$!ChhLz7TIk!bV z^ZRXcH;Mn>GA;M$KweAug16skI@(T=g&O^6>#y=qYF#O#-2j(G<1nJQHTkFS)JWp{?;8fD0i=40(!-hst{3s@)KRBt2DqRJPfkGlBjGQXx! z>W7_RF9eRiSPca?Q0%9O)&D<4SpcP2=G&O|*~?S@6-UeWal5jyHCE55!?* zuT}a~=lP14N)K2hS9MRwRQpUZ*zPOhVC--$eaTZY2ouW$15hqRoa`7lthaGXSn%33 zgnYz?hbO9oN-JSVvp*Di&?!34o3e?RSVz*lzA+_!&j;q(q1!9TP5@QPi^}VQ_qyBlyaLht zV(?98&c3kg#~lHuzX_$h(&7Vlg=Qys;cn9B&0P+MlerX=zDF5~_AEdL_*9^rgFHzO ztj2$0BEbH|{jC$E=K@aMe}`KkON(9=!T5AQRUV&rkQ`HW%>N+T&yzA7Qj3Po06*68 zDzvMv)w~T;%ruLP5^)^0At*ZVT&uw(#?`*W?A&ceZe9Z@sXMm2n7;%EP7RME@zNTH zY9+m&h(HkgR>h41@a{T8JLj#y#mGqdM%8~e?t!ar56Wsoq}nt$@*a;JiR$S1eC{D2 z#vT;*#?Ix3sKBd!6D4=Q#P}LII?C#KRDP#48xR(AyonrK7dyw;O(-`Y-!K^w8IaJ` z`W`{w@$||Uq2>aKgW7k*Ib~68PVcg~^YNkW^vuE~dVLc}^P<^>t~XDk2s&(2Ek zn&vr|+Wf|(keTeND+V;S8LJEn{(b9m5B~PEhc+Cf$Z2(4F}CPaSH06M-;5V?R({?{ zb`HMAG0!JUfas9o^1(oJQJ71aHEj+YaI$1rb}GPnxfTntOT8r{o{?9TYt|s*;DwzjpF8Db0#WZYuMRc9f0b zrpSyzs;a%5N{v|=@p5*1acY=TbK;D75lH#KdcoZL<>BqTU*?bvU!7@7NqEj5NAZ$T~+Lu=n0|JeJ;JT7R3`S-!Alv<0>SnmNf&32vr~4u#yj86* zgR9)d_r1KflG;KM!|fF;^)WE`_*)q5WSPbP)xNvfMwWi$;2ORbcWGJ2PDcErMV3D@ zOYp}Oy~W}a?0BE}fyOW*98psKlgZ?v!Du4WjN|QOv-3TOUyN2r0dM|Gb2Q9v32jOMD)H zM6q=0xkGn+!CgtsSho7~D-6o;h_WgexqnHR8sYHCPX_b_==Wm= z6=tN-0`7#hXZc=S@1`KIh|Oo3SyL!+*3kZHXy42^r>qxWoPI#@{DIjlZfpMEBlft; ze>zy$+78BeU*i2n)Y)&x1miBzNM00Z?_c{2rlzNh0`t|--CqkeHiR@ZILt8iwoVn+ zBSX)b2KUl^u0&ghZN#&OWrZQ0MDtAqrgTe8(E*N>0&c~#Qd?aHx+z4Qnv@zjnyRVS zq=Ne|;S8`4a|}SGnPiN0FuTNqLt4H3M7sFSqm%zoIs5;la)V$-D8Y{h?_z$>-4Kv6 z5!ma$0v=`k7Ew^~3E}jJzm9j{`SllPmb1Oa0b-pWSQ_A*o?m{%x#a+RNp=itZ2|QY zbt~S`c><0M+g5RDky$D*w+cGiM@wOiy5?Rhh=D*IA5J)4!$w@vbFYT&a!v!f0qack zrOG^!XZ0sPIUR-2npm^2@CZ`ThsJCzeA82_;IUOG5mS8lO$U{gcZ{V`dXdWtK9MYE z&q6_QZmbzWYRvV(ahFMVv^_Z{Eezf&8I=^IfV61DcBlOGY#E7W5&5zA!E?KhVPW8L zhIQR1u(VPg=3tS4-Es-xz_v>94pA47;!a8(Fm(!Hz;R8FUCqL)w{*x+2*E_J2nT7HLa1&awrrW^3CW!{o z($VS>+7wS#e6SVxuRZ`E9)iK3d0C5zhafpoZ42q`ilaim5x?24bG{{7pl0RZNk?EH z!`>%!jKi)UAC}`y1T}78@Vnvqs_?Ebx4k|wzt2RL$fe~=?^94q*G7e{XL5}12=C}vAp+I@14x)wCrB~x9Hw|pn)fz z2_RzeY6N__#dc_ZTO>IAHb|P#<{fR`wcW0LG#ek|vFrSVw&1z{>6*dA z30x!LH|&F{=(wrNsE7&9aUJdP+Ew++m)UfM7|({UaN;XS4PQkD`XsEgJUv_ZuqL^8 zvAKKpK`U(=uN=Gw^U~sW1jp<`gveTFWsE5Y0BGW@K|or(w|3nUtV@p&YVesH70W)4 z>0r~{vW#J+hcTX&z&)!sRiJu#aOo8luzvhmYmaL zX8VxQp4%Cv(t(Sn%Tx;$YG!p=D`MCE7-_0rY6#<+8x|q~R~Y42Zwr}Kp_ zfv6D{w)-U?&jqa_0Nno@=la(Vo&mnUQT?s@e?j#>=2bkxbxXbX(Wwya^n16WM&y+6 zJ0VqYR`%0vV{&iqp=tnUl#Cfq3$HV({>b>IO26+B0<_Y2PPduZ6X&O(TT&-;(sU_Bd3M@RhIVM9 z;h>qvOO&pXDXk`~-Rf6iqbm+@;-j)^;-XK5cFgWheSeLgtMH7NISF{bv~}fl=E7t@ z%+h}|+|=ET)=<%jF?iim0*AmkpG4}E>w55>`x@ENalczlDCDNV*!lKT16e-z0r5R| zv=9Fi?CINcactbz@WHnSP-$sez&Q4$==x{V?my!)f8yaD8RWMda#HtyTMEv}l^vh4 ztfbn9deM?NkHO@quHFuwF{Ep-(UVH*)jbrPIIr!W4hamQ8hd&ttHJ|Hi0_&^_gKnU zEUk~_Revk+$C(^(BG&xRv@K1YGA4%VTQQ;6UkrPc?Nx$|v+91iI?}9$3Zi;TUebf| z4&1bT6_*%(KUWK27#BOINU!5nnWRNZPKxi%+*Nn$lQ)GOrW{ty0*EXvL5{`_cE_2G zWRA~?-+~eG1R4p?Ji}Kx?htiEHv6|f#ClGR_1isuPo{%Cso)J9;A5n6$hV?vVRh1+ z1t|{-T!QRJuTUkC@FAamKb3{k)osO|chaw}>T{0uog`K`)#;n<>%=g?^MSo&A{_@m z3DLtBm&%8kZ)L2qo;iW51Z%SvU#lJU3!8-!iM($0y2vC}exjtw5!`S-EHIYuu2aA_ zrn?_3-_fNbwwGlJKP;!zAL{)2o{B<{l?UO8Xu<_>OQU5uAYO9{n zvVj>GurHk~jZY9E&~)5t;R3vmZWvY$Jc)G z5Qqw$l!95MKj6}LOW-2scuBo=3UE~ z(l_iBKBVi*i3-+~^_n`co1;D8PvaU5A2y-7u^V!Rd{DtDxRq+2IjGeOp`o<@tg30} z%4kvx-_~6Vtv@}BQj_K}<$Ufk>-9WAoD^It$<;GLN-&ZIilg{up4@2J)?CiKG1NTzj+Y$Zw3}H5z90kcPmR$8@+^#R zz(smav+S29RDM7gQSEr5ytxF0!|IE_iUV*?KeL?e(9uJ>Sp`pJ|16*+5CMY|c-oJOZKwNtlz0WMJi8KkuL-X>RmzRE&U zdo4MT^t_R|BO=$*-*Xm@|Jz&rk9Z&g_XL0%&?sCr{#&C^m$M7ErQ}yNR&+gwl{1^# z!g;hKTWFHpv472l<{V%)1FW7YbOx3v@SL97LsDSu^oPA-?|Tu^RZgpn_KI~HKqqC* zd+h5{yq|u7m4|OBXFf{qv(Hbu^=RW{LOQgjMz0T@qOgZbFN)WRwpFUKd?AB0Zthie z47ovqRWVkQQNRN|z)z{$GTX&2?{}S<9ZyrYHPAr_a`G0^^MJhLqvD1c{$VftoJR}A z`1K;2tH5RMDJHhf3hbmS_vcYyQh#Iesd`O<5$J`q-plaecE4~#G7Uyv+siEC93p0( z*fbZL(FMizT|<28#T`w73v!Ui{^UO3pvxL~xM;H&#I%-2$A7xm2R7JQRXlu$z?|le zZ^;K?TY2x)N)%Fv9(%Oq6T7|JQqvc0yL%@II(l}kveC#>6>swKI8$boyXvxu^8FK5 zwy9D{U;do7P-I{I^Bn;`#ky4^3C#y#6_LlMrzw+TFVeM=z6N{NZB5h*`*AaIcmZ;hg))$l#|NNAETuP6tOw1!oLANdm>W<1aQhQ)J zqu&mfWX~4~(ppqQ#mdU85k~KU_ao`Z2tEv|zWOoT>8bS9Fn7EB=H8=Z<)OhUpD^rz zWH^f}C~)!k^ODOR6V3X4BR3+Le;+c(*@uGar(;zPmAe})cb+NF1G(ZHMo#u5&b5e= zO!D!j`k`d8xpo3d2UoW|t~V%5CJwcqvuH>qwpyxL4bS3a2A>mtwC{~mw1p;~qP0t5 zTb&#M6U`oo0$rC8$U$TzUm4t-T^Z^BQX31d+6X(yl7d^ZUn^y9>pngI?Q(9L)06*4 zOaHeY3_rm9!TEUqNnroOTB^6<6&l~-l1IV0LXm&d`Z={RmzVs};6+Uot3s97XbzO{ z#fa_3SL|KpVk3jE?vllxw%5XA->iBFi~SoWANpmI%5l33nP3}4&lI&ZugdMngk+${ zVyAqVIB-gWq3q9?+xRt$9K|g<$jyGEGBk!o$-M4uY0quVanK@B)Ph?VGs7UMGD$-i=gaT?C@mwhU%#rbVs#zBqDs*VzYHqG z9~8*DFnO)Ox|~ z#QlQOR936Q#RNE3hu-V|aK@W120pJIREK$-sw2d)K}C|MY&aD~~9s4Z$>l0XECq@|Lnim)ja&V1o zxOFX!ZKL}dPG&AD??U)C(;1Ebpn0DOs5;0hHOg+Fc5|8!%x0i`jbbGmHw}&o+oKl| zRb<2?^fbEMJXaU3(eZp`x`;+&WF`*LOFfaN+-tw6BV4v(efNUYt_g-K{NJ9Ew|T_u>x4y;yN~cX!ty z#e!RLcXzkRch1b3e`d~qHMhCQ%F23^{n&oCu7b0Xu-&PIuf%*RrL+cKVm<5$JOKvg zrZp1srM7}sj$Zdh5agEfl~^-b)ETQ6Z!9A%Ph7oQQam|d()Yo(dU=5cQ zebqH9DC9#Ns}eX_!Re-$R%~+C9>P;&C-n}|xy};ybxjBN+eENvSy6yt`8?L9PZJpQ|BVk8FJnx!`=Qn~1~M z`?4D~XfkK(OT;|5rkp3XCb2N)STnMuahyJS+Np}C^>}x_@j-tyPY`F~`wteC5{*D( z^sjcVk+S*Dh*TsQ^oGu~PQFv3iR3m zp_)729tn6J@91J(rl*f%|IzGi(o6MI)K>=;a_gJtwy9@7QSQ5P&X_JP;4Yr9kID=ZZ?T2B39uXzo4= zcA?STk1D*hFCS?NX-nJ>jqNOqga+k8c72xVaaG%Fa>B8bx>&Hq*EG~C?s#B2Z!o#+ zI@{(q$6!P$AsZwUD`9?*CiF52A>a|#(TF>)@bIHmmaW&QiN}8iw@n|~*(2Ahpo4|0 zjP(oSzZJUwFSOkTKe#yr$>=Gh@DhYrccbY;9JtfJ%wb~KL~pUQRiZ{S7^&?lp`Qmo zfxRSQbi6F66jip@a1C=~@-j@luW&!)0~>a$UqynrNpoTn$U_&0TKCdf`Vm>eZra37 zjMNl9z4r}{u(IK`&U=TfP~%!;;gSB!-{;*qaLKLjfMi=mzh_{gD-Qulws$@n)+otqQ%-s58;)n~vGXn=NbR=H zK57|K1%&>h}YZmHs}7%+(hknz8&39u=AHJZjlUcD%BC5_mb(`{8DUyIAJ>o}+WP zd9JWKCebq{NYs@&a*kunOK{Lteb{X!`nTSSXMXTGuA0Ww>xgt+=@}6Oz~tS>{9*eL zw|s_%8%#j)N#)?tU}@qu?E$VH5>`ysleEk^&Vqtiy$1p=h&)pQd1*u#m{A#W>uUQe zo8EXeX>$VoXJbBCN14RleM(3nc14H0>(Lx%o|-(3PEezui>7y?`4ROrf-eDI{;dI+ zPRf(({x=i4Bkte24rCqSKW|@J*~=m5Q{p!54~3Rm4Z(lJD*KxLhlsD14-!xJgG5E7 zFoWYfsd!o)!XQB(k-{;CKMy|;^~;)GLNnxCW9ltfL(zYk$KBB~B-Ad#h55~W={TeC7Vxc$?M zIblSL6Fk7Wurb;z!r^jbvPoR5f!TAx>4EdgO(-~yo@w$dm2*u6al{io$YD!t?(&H3 z>r0YXoEL0U$#`cUkTQwy0tcCd0TwC)asV? zaa()p*x0|A(TgmGrU!z$(psuje`Xo&Te!IVP~V=N%T~$VDVIDkIWxzr^J3u9@K~Dq z`G8t{ZLQ%b5JdIP)H@@dCCc-{lWnINGjY$(G&`|)Q;BH7!aH_1n<0drX!9XlaegYN zqyUj#+lu@p4t*WDY0}$|l4phgE0>pHARseZ%te{KajxvSw&VpHQs%}*q#5$U>B~)v3?h&OSL}Muuwxq6Uo6mm%3NRYzW+zaII9(k z(}%^ElO21;4#!{A%!ntaQ0rvFO8O$>J-;3ebsIMm3RL>>QSju}!E3!vhr3A$=Q7Z#+N!RxB=RF@cLaa8z1FEN>MOacVCV`jir zq4iK8i>v;25(IrtsCt*v^isP6`^Gx0e#Dkf6XP2FmFyIzU89GH*oY*n@lqhtugtB4 z!?L@2VMpcH){R)Sdw}D3=CO9D#?T9-O+$R_7D-=%*lXdLi1gGfooYNHjxE*_WzP@U z|5ybJ_z`_YrZFY-X(Aj7Di10W{8!8TPy%Zjk`u<03TOSV{FUJTcu~fB7&2r{is}8* z8j$fvi+Z~9tT(5}o}J#&+%03X>`(lck4eO$iyU}V1Y471kd129UmW+9w~-tt@?#Xl z0)vdMVwme%^st|cCwKUq*TQKGmwr&WT$mupx|ErI*1EbPOvLkab9-!P%r1)A4jrfA z4wT_5B2vqoC}pCP({*n5$n9y(jrImcW&Er(MXGI`fh3ab_>9hd8~MSJ9OALPK)J^RfE83`V?JT?>CnpYM46|MXY&+wR* zK1VB@0RpuPnb9ylwSmeXLh~2lzEH7vPpVN0UVZ*^pC07_Z`ZTGxWHo->;AZpzxm)vmdp{3TJh|P-Tc)Lg_Q5y0h?!gL@>< zi^XT}`3_h>g=3KXr-Bib_r0WYP%sAwdjAIn)?x;cN!lmTFXV^2IsuPJroL8%k=%Ylvix4&xbljo}$)t8uqt;Fw74_ zt?OK_#GKgqT2EG9;V(`tgm*uv&&=|sqa=u zppElcPG!rAtsSl|oijW(k<6VyFTwy}wJEPs{&V^(cS~xOs#W4LV|!QKGb1gI?jW2j=SR9x$m}=*V&$xjah3ZOfqDX z^!t8z`r&TW$e?n=UWXU!f{zF7c!x1AIU39F{_zu8B8V=%Z$vG`v>E{B@~KQJwULY& z%u@#_E#{cRg9L^wqR88Z#tc z-zMY(F1(p(1*)&Tsk0@*N#5Z*?Wb&UXU&)?XeZAztq5K_d+s}5?vc;i$G@`{)GoOF z%@n*Jiu{{8(T~8=ywgfL$?p>SP2#fAO_ES&Csu45Li+yM>BJ{B8)p8mcIAKhP52Mf z{EHc$Le@?GBQyMlNfbg;<@MYwFH9W*cV5cu7#v~-B|BYr9P)eIt*#+OCr?A8$1q;h z96FiyoOvf{a0|VmQBV7LhgX)~z}Oj3E>e2;sc z4zYX@#jKBQ+>~M1DbKHHn&C~bpCYG{*LF%qawf*WJY4wB^)Hm;Md-pWlQ+T8AKQ07 zFb4AaZ6DTmcqOo5j~xlIMOvxXPEfe2)1fY=g6%adaJZb4NV)CMjZJkcVEveA`1F;c zJb1I!M99`SznIm6d0#Y4i-mE535HjrA+o(pY}*wlW)gMzdDlbV%2Y{4*kWyp@{car%s4H)*qE2bV5X|AkFSl_DXgq2(zu@#Cir7Mbi;kYglC|SYN8}&>)`k~VOth|? zGDPZHH85BkBhxjvUaPC?@2Q&z&*yKr(+D^hPUg4v3|1nTp#=~booZ-BoT5nS`;T$; zJQ)|R%%eXnZDTt~|G-MsM#n~Ky%%Urmd&ufMi2<9FMHNSoX2WlXgvumZ7+Ju|7=e)O;)S8M(l&6~V&zUN;4nt_V!_x103 z@!4|*A?j22uiYl)WyQu_-&rLA{le;3lukGHwh`8l=IZ4)^rdD&rAKHHO4XK&DsbNs zZ??8mwQr0b2EmT$w-P;9($vn@dd=3QI=8r0vfCs`t221DX?KXX%;E%A-+m-|D3N>E zMp@H*_&yZ7`c=uMPef)7^eNfeG2QH&dd)*(|JE47I&f?Q7i_wE`Sq3yq20MIoetSg z)FQ)d{dRr4=xQCtOK40TuPVIau~!3n1W(=`z{$rzc6zrh9De4Z;jGBv9UQ^vSD9~b}XI8PA zh%R3;;|H$oAKtI7>ZHnN0(_<8p~T3qFrp9|fSo2}qx{I-;QX}I{t-(GB5@2gMu<^E zf-poy^?5_EX$SIpmxy@1Mv_D-p<(mBV!fZ*4dRlW=!S>wnVo;7Y@kC*ly|fCg7J}U zHGUU}bjE#E8ZWZTYkox0it5VGNNkaE=TdrbMRG5vZg6`ne=l5FX<;T3;Dl(1! zi!+ei*d4H24%;#n(obPdvm;80IHqAeuo<)%%5@B8EeEy+Ae(I>AiFJ6Cud@5#`KY^ zY5w3)99-IX+PUU|Cemtx_zlv0CSULU`*oPMkaFIoVHF0Mk#jUA`;3i$|E5$#<2hy4 z@Lk)UnpG368dS*7T$$mny~u>)?}Jld0_W3OdemD+h5ssF&~`}U`0lqUH5 zH|Cw41AENrUE-m%1G3TjoP!wtV2PO(*l2Fuh;%1oQVw;`MiiT%Wc;L|J%AIgd zbcbFd9UPE#&#&(xDW4%&xCs>0q|fD6|Jhp&T2^4XnHO1c%j~LzWlgHdm z0=+0V@@Esq9|pnW>_sI#bVZ9r9ho5Fe4yEh**=4ZG=`Lb2L_cOK27}B>$0gZ{JN;V zRfUWH)de6H{{TNw%B|L z5(~N-TjySUcvRl`1r??v^t%56A#}tRIEAcY8Y%ej&F94T#K^qsFC@UBo7v2PL%YaF z_V2NE2`I9r_|IeO#rJL;Mz)N?s;^LToM%6S>VqWkJ6tRoT^Nr6PJLB-Tie-Fb$eTT z+ff>&I2P2$7$%Aj6vAKPoCq9Ehn{@TEz0)g74ApxJa7EONY7k|%kSU@iQSKG1qYQo>J0H_U> z=eGTor*nayC7+>kKCU%*M1wS2TtN4Gq#+*?9+fWQ4V2_&)sOE|=(8(HZo^bi8ndyA z*b=INqa!8ut#qlFwpSbS!sTCP%fsf{yG5?Q__x1=zt;mBz0@n-9@DV824=rM^0qHe z1%$TUC6X7)_mFpEPxT%{+XBjBNOqa7NZbH(1p&O6C!8bA?fpWyD)CYCNxqK_rPX!% z{$Z#nN{GQ@aNW9;K=RLqrNn6$b<_mTSl{Dn+5TSYxi;K@#QK37T)k?_*@|$Yk4-Tu zI~1s7Q8C+rO8sEOUig|}q{7xAE8fKSwRRu>SrI{3I$`MS9Y$r*vLCmwaAjjiz;C)` zMxL+=`PTTb3yAdDI5jO2gDVAB2wekV*`@Z|za{}C6l07Ud8Y0jRUJim+I1FOj}bGJ z@mZL@Fur+0t)yhS_ZrgoS~}#-%%ja%QMJ8u>FG#j9r^z z4wk{0o&i|qgoAwiY**mi_b-#lO~0@5ShrJn3$NgAEmoV)+q{o)HN8LFUJF`vIL|J9 zJ8hZOOfGN?lzoskxL!j=US(kJFw_}b$n_HflJP%LGO;3U5uc-rc9aBH6W&J+csZR4 zAW0WCwTZM9n*!Ekp5Oa(9>22tKt-@nF0d3Gw%yT3++VT2(TLpy6zL#g={2YkHlKtS zM-dmtBqGLGw8@^rEhJcReNf}wOqW5VVp?nnPb*on;QTzRq>kb~K)g`5>@1e*qHOs;Lc%zW?>y1QE zt>O)?_U^acgddUQd7$viqdfc%mluppq8x$KmBwY8g_>d2GL3O;CXMbcMYO06RHPO}pdQA7^Mf9-yj&sR7-BJa3zl&QIhg<*xI-CYti<3wd~EvkL%i2p7A8@j#Izuc17%(Rj~U!PY8y9GhRlL1*^-|3gdiS zsNQYFIv46)v$b0tBbOW8%Ng}L4jhu>1=qX&yxPtkHL~pEo3$WegIm4auOF&UGM!FW zi=8U9j$KX`cEO3vrwk0bS$wVWg(GObfmIxe_x1AgZ8M3?$_#srTFXoI^Jn3lYF!yB zJ0pp5_uiWL=I?V1#i!upIEDalB16l|W4_??66oEpu{<)pnJ$`sKFl&8sL}kofxUh_ z+p6#^+=^LSZNdzEtmRb96p*c|*S;e|H`D3)$yveVMDUiQ9q+y#8C3MV*zQ_=q;g_a z;2rDI=(Pd);&l&|`gO$~C9l}{P4|_2VqBl^g0Av2z-gTL78zC{OJAH{bC!7AWr@Mq z)HXX^FJo`ZjqeQ0?~}E!GUBW2(`8X{2ngsTO8m^n;DkLL&>5F|!|}H%8=dW@Q{Dv9 zV6%=NK{mx>C_q|k=6&h z66jw|hGjh2if2R}@83UqOKHYXnhLh^GT1GY&7c`|qES+t${%1vgD=8rV zpu~nc9tfLN?a%JywYGIJI9A|SN0dp#NBsCgTJ-xNkgeo`bsqiA^5a$EO?vxWv?7Sd z6@TtrdT_kwGNnYK@}~*Iq5smsV&6>NndiZzdf-%px8MA1YC=;+q8?3GaB*9O;y+G~=`4 zGNr7~RqBeKme#x&FKvfx)Lzt&s8_i}TwBeRPzWY@bx16|UXerI*0O#!q%4s!4J0$+ z4L9LjC-@a-t-~aJRsBaM1?Vx$LwZkQ*IHt?aI(-*SBBILU@+TMT)$>D z7vJ+tgzhO4q3};-grDP1`2RCeH?YQ_zS%~otEfbgy!I0(8ci+*5=R;8bf)b-e6t0` z6a5az{RmeXI$;9yUN(6tgW_R8(RkI5{viX;LfX8WMWfQ{-Nw+9W2+IQxJRWz?T5@J zJC>zDcmpK_b>WvsjAThCm*@67E=_!~>Ac!qIMp%$AUTUw3s&M{*2!1JuF_iCk0)pCxEVnr?-<1l?oK=#MD2Hc!47!0i1~wgDEHA1aIJ} z`9pA?Y{(U<3Dj?8`CONLVddD(o$$Xr61y1aw4|2wsn=k<-UJN)Ex7!g66D$M5BoW} z))FO;nKH!-dm^e6jzu|=k_y~MAL6L zb5DZrc1}El0c1S`{#GpHHhbe92YIWRqXcZVo+@iUALtq5-)!Za7TVCM!>+oyY|FC)Nd1=YUp7*r=h&noWpuC5*?&9mMv%|U|QXC5N3WL_Y zPNdbj^mW)TgM-7?s}u?b2{(dsG#wn?;|Fu37J}x{ z5&s)`yg%9JKlJcl)}mx}mx>U#)Yo2wKGh+t+|KLljavif>o#M$hv{cb+a?guWMY|l z*xiSA_5$wL(zbX({>CuhI`4b-f62^0j={e>AGvk4Z*=_Kv?*9+0hUgLyv7%fvBvl{ z>^IBlVyC}0BT;y~=f81ko}udqNSATK;%nEhgK(`@?K*18#qw{>qGo04J&t3ig#MHo=+X2TH z;FiMU*+s}^-jWy!%0Pk+W$7%)FW06$F0v18esD*#WoI5g&&|o?A)m>cJLl!?Ere8c ze*iyXpB1KMGmhmHwd7*i-0l-7`)t7LTDPvD+c1;GazBl|>^xrFyEvmOoqcSH(R~}W zW*f5++d#xlXWn&P!70Csgmm2Os>-3S%|%y;w-o%|+hKi2=3-9N@$@A$)P8Am@tAf~8hYAitE^kp6ZDqlw_i@P5{=S( z?|vmEpY)^C&FxDB)h%}M->RjypAO-F9MoUz8iQW-CZsajWqtDG$_vaaC2m(vc^^Hm zpfKjN`5)uParF(l6V{Vd&vmw2F4x=bXkQHcia}BEw^r>eZQ^7g4bIy^&9?V*l$0ZP zO*2>d<2~pZqi2c%jDV0R7n$U0X$MJziE>Z9Edq`Tv-Q~K8MD#aI{)FX}Gt~U_f zd;B~AZeDRKEZ5ApEbAuUF6+uhcX8TdwvQ0&n5$Nv(XI3{W5R7H98qhF7I^LLHUqt) z`2SJYotn#>+Zip%X;8p@6tLdmvh8?be|uFxUn{NEdHi92SchHC&O&M)p84zEdERCo zQLhpYdp4R+LhS|h<`Fdiw9uPMOVX(j&Lkat{K;6|Cz(mFt(Q#4*L(K5-43+ociV78 zB5=~LzQ&<{Ge1abUnor_oKE!KiT=a`M)W<2Z1bMTU}aE=KFP)zfeO{tQFu zY2|3@?V7*jVP89B*z;lsx-Zpka7#7*7}Feex|~+cOENik{_N?gaPE}#X)Ku=&m)fq zcbzp0=91|5em8v@3<|?%y={XMlm7E3YP4V));G#$SNfHmPlj_nTd2G#;39O~C<=5n z#S8KnGRr^!EZqU%gHZ`Sw80(|1`-EI%bTR8$Yi2*d;`lbMc+!>6jdE>UwAX- zkfZt~q$if-o9^4LV8Kpth!&D&ngmccaU5OyU`*e0ZFJ3dzmA^8aEo@+al=b5k*Ng7 zO;YHjY;z){C(j6VDP4)oQe6lWz$8@bXHF*xy-E}fwNgd!n3ph$vt%oF-1uqo@60ZX z4vkj|C6cDBhWZsga!)>epKgfjP%k=&gDt^BMp6~au=bZ~nuh0hRn}>yj1DquGRC{` zkof4)+=%z*i#3}fEvYPHfR0~!pf4JMNx;>yX;4^^wIepYF}XPeV{oM~_3zsVdQOL;6P~sM&anc(xT$C-BghKhe=2s%2)M|rz z*tfJ30R9U?_ut@9Qi2w-b=l5pugllX`Ul`yf>o6Wk~?dV>{ENZVRsuLjn@Y7ZFk9U zwCtxh)tqv^V`v-IbKaSj$|=e2=%?Cj^i$X6-F1GvaJ!rrbW6TQtH+%a(RpuZrc9l0_BSCE2=<@_5J^+YifzhRdQ`wWp@hjTh1u`@@?*EL z_kM>K_}wRY(WFRFg-UHqD)~X>(}%eYF1(NH<$Nec-tT(6T#!RBGhZsJ8rDyW*q+@> zd;q?6A41;&eN58;@Zf{DV(Yc2rG(Y$6C!DF6tzZc*^-N;Wp@(W0J1_QmDV zoyTp0uGdFOLiwk?e}jvRn>?Of`QKl5)a2fx(=R#!VXg3vpKFO=Mg7qv5Oq@NxC?cc z)ryjKzizS9!(qp7kue0-qDVqNV5;UVHJ0J8w3-~F-Ov55wwb;`>LDAOu>8@U|8%oS z3&YGjNlCW9$Gp5+6Kibq<>5+(H)uwjcfCs2b0x$ZAWIHj!rM50 z=VZO&Ftv%XhM^mpK^fpF^ilRC3Xgxh8*4giuE4Ni=Erc;cYlQ$IA3{Ol;2C(@mC}$ zCKR}ZU$6uyQ2|?o!V>ODh$GQUDve<^w)&!s#>2m zgbI{lbpbTcKXSlHNe-*w$t?4MH^oIHaD1O&MK2v>e}W!u^-Cjm9rhb6&lpr0?10Gj zObkjw7{VG9l}@IA?{ye!PTJEl5Wd?^b%d7FwK(pjCBb|WYh&rccoSJY) zs*7{$Lcw-TW7kpx_Kjxqfwyi>QP`bn5*yz{T%q#}cVt~gVf$|T68bot-*yKV)s;-z z+1^P=8IR`H-D#6@CJwQE5 z$&hkLTPP;y%N`Dzj;5U_efVSH@;4R!5=VVa;_FkUA!V21^79l2*60TnR3R=+n~(k9 z3=DDD-0Trb@Z4}4b*6FDUvp2Vi!2ayVMCzbiUt8e;vazG*chb5h{5uIU!moXXc7_3 zH1%Y&KQE8Xv=Ypg@3M52=++7F@b8Zvus6ik{`#SqSTqLneN)>fajb$9k>97_EoB*0GA#rw)W{G1b+;0sF3VsN0GA@{02!843# z{(z5Xwbe>0>Tv<$;aJQ$DW_3IDV>s9tieG?HV*!Q3}FGO2vnvRi&G=_TbyM zU*}HytUvXUuuT1>p06i9XQQBuIw%@tn5F#8?a^i%two+!^ zJKXm%7Qp$v;3$wk)9@(6&+Va*3=gT{d9OV?rPl$W=eWd`MYjojL^QeIcfX!=v=#TJ zk5cc+s#%xP7@5K2lnN3Zi+ftCbc%bIn7Tg|$WBXR6cRAz1@wk$P1gIq3*UElHm5wf z6_k0^WW4O(Dm{B&XLdCKB5Yy}=q%H#J1+gbCwjxRpmlJ|I;Xg{_DMYpnwJ#KyXHv0 zmam7}0_(H3~9VD4!dPUJ(~O3X*LfHEmp0Am@^y;`;~)7XBaf$>3@JPyx7Zwtbl;}GXL1MMR9YjA>>ep&7yEBh3Kp57 z)0L&{iDI3FdU^yL%0jzsmr9`?$3oC~N;mVO23SdHx)+m+dFIc%RZ&h+s%`)w@Lian zy~M{NH2OLSap@GftFfjNK+ss_@mJ;f#qdLYm#(xyH?AKNL`!BSx|=N?wmp|Xr*7lO z*Gu{`ZQa8sRgU8i0NOFg$qVdXwss@6xRi*{*}@|f-W)ns%bxN??QZ>?-7%xto(vweldOe!14Eb#uf8;G?H zTv_cj3f|TKNMDm^5sGB)crj^qmb6H@g3}Y?XNE@}>o2~wx#Nvya>C0n9O%I%B%5m~ z!*RYTEz|l%%LgVp58!1l@vBD~@E5>3H7oe43Y`luh1%I?&;gU>7!A%odJ(*%H9%8= zq{!P9ZJTbc5c-cY?T!)zR!c8@+}2%?<)Rp9g0&1%)r4wpGlg%FK9edjW2sOL#hibc z1~kqqxUJ7hUj`MX(eE@Q2-jj6?iISIpLOUJS+_XLW2z*yOKQ#~k5s(Omq%(JxZf6c z+3`;u7m`fURw=Jb@(U?`ECeRNKeE8;9eJb&R^5M}aN>JD)%-drBz+`M7E>bqwdo?b z?t$R;tAxtL;eJ^5;uOH`-P^Pa=4yHnf2Z7vv8W$i@0H`PyJCP`%1bE>#sJVmOfznB zdeG|OXiSNy$kyOy%0x@w*l@RVixK%77@RD@@R9VqHH!9CSjefg_FN~za>RngcX6r8 zvU#u|u5GN6ue^gnr%^Kv@KbGt zaa(l>8(fcPVz`a>2#aFi-s9aG$Dtq*7QeF&rd-Sf@1Rlz<|DVZwku+iVL-HN2P>*%^^93f>A$3(S_&H^xa`Ye^Hz_bi9m3 zIIpn@jPg31yVsdxz+QQET{p6bCQ;Q2V)T8Cyhl}f>4RxTQ26*}JxH~Be4ZXR@7?Jc zbgxh2Tsyz^1RSh9AZa`2lmk1C&K1RI=>q3FT~~iHohqj5_`aS-%W_=!d)gwB3YH6E zz~9T!KViTp)>O;pc(SqoZG`d$tmfRPfNX7C2bt&pNE57~al`x$oi>E>&+hgU?gxrk z!azCbsIYY!Q5e8~S}noI`vb3$o&>d(CoBC3=*T3$t%dv_GkwvkK@BrFEm%U(38;P5 z&P2dSl(J3;t6MUsjfYF}W**wh;2bN2UtD7e9lml%GsvcnsShwnXxeXJgIjgjZj_5Z z#%;1XO>rCaO9V~1_>CYp@Rt->Ax3q^M7{bK062iaKYlf!_%=MDY4`msn{_D6KrB89 z!Ui~<-?&>Wmay@up*-< z>+=&uE~M)3%zHDlfLT^FfbAV;Sk7+~C4oWLb@Rc*ka1HJ`u;NAPdxq=K>T1jx`1dK zDYEZ!w!l*HU9!d4piJ{x#DqYF0&NXfh~N-7a%{iJ15Kl~G(Y=1_3dn_kr3qsMrfUi zgKb0HPuD;YeIy=-d)m&<0VNMTD`cW16iOT#5*9_+SR8+|MrbhP?FzIxhV!i*gSilj zv8Gkwx&_-s^UV)G5aJ=0Lv(?*V0m=)`S4C8yA6V%P<{h>+DFtDPZ7`wj#izXkc zAT13E+njNZ8_2$|N>RG~wJ_r)-oV*UR6qN*@v{${(VKi1l0j$}QsZ0$mZ*O|@Ep$4 znh_9MvsjC=YYGnNr@fI9D7aGZ8zi_`ef!0Ew!+DrM-p)STyu^K-w1O!gL4u6@EBb< zJ@nx3pw#!|9A!iJV>`hLjv|XbNPl{o*5?I(c^(Y9t7)jMy8U5o7Tb?2Do)@huIa97 z=~pLw6mq>YR{7<`8krzZ7yT9Wwy`DWT?TIA*#(oCdHDl*v=UzoeOMV!A*7#DPMua6 z1?~$>Q|H^!$ZXPaIyAk7=EhgoH45#~X~{=?8L^}wJisfLj%VwO)9S?=pr(6AO zmv?h&{qQ>VHnmAE9LrHUHOa{Vb#_LN>xNzIRwH-Tc-2hYuK4VAzn^ROnrorOeWs`q zI<}k&Mihi;jm(57yPWim34;Wt7jCu-xLj#Vx=hj`J^+6A*_3Ox*v7dZ5_Mh5L+C2* z(DT^kCw%6&pQtnpI-KBm%PxY0=hAfzDpzkdZDG0y$Uw%+_$>4WC?Mv`ejjz$pW^m; z4C81zfZ~2Oj2sLI%VmlHbV&5z2!8O2-aMy~L$fjS#{jsve14LhExXd#8Eou*eZMcZCl2Kk*u7eaf3FJ?op{kb zjCxcVc+w#augiM5hS@8ouP@GWpTg1OdmHrZ8~kCoG&AuwakX)-AW-3w^7V@S5(L8& zv$oIYuN!r246%W#PQqxT_J#Nmws`E1_JzE*HfCA3w_E$T@zVI3IVbRp;*TZn&udxB zbnkH0Yw~K|5Z!y{jbsP%2?zqIQic#5zj=^h z$rq%ER3~A-V5oo^GNZ5I5{qL94uwk%kziYP6oyqke}esBlgTT-kGiTbR-W~7BL~6I zLnv0)W-#v@HuFYVa#jwW217a|aq5M24VW7Z>$&?4-qcq0VMcDI%RVI9-!Jjo8tq)K z8u)nyzREiNxiN9X;;CJ$SwfV2D0+JhQ9*t|qnj%N(F5y(@5YMoR)lV0l@X2==>_gY zh@3U8tWY6a^&Fz?{CxkbT4dU6CMOw*ZC){}x!P;l5&PI;*C!G*e@3Xr$fQ+Vc{H*+ zy!3rX;1Z<3ga9OxXmpGx`}nep54k?kblV8uDaN~{S9)ffapg|;(t-)d`3Q|K#8y_? znNQVfaU}FiFo_5^nTOO!G~!30NW))a(nwA3o-}(_u#ilt-lft0LemUW0XgaUoy~Ai zF^{H!1Kj_h(A#P3H?=!)TqwX~OajhXYF3pFJ01kt4N6Es*i!Wy0rV?;x+6UzlB&%X zIMXQrQ0xVdm1`cht1K7@&2($tM-`MMsAhT-NoSjVa7(h1YT*5F_qe{`ewAEp)y?!u zbreyY=@ZPTM*8r%z{oQ6%Ol)DbU%5wOT#BJt*cRO$ygn9{X~QaLX>f=lf=cl@F&JA zYNDhL0|#Wm$Y{ASKbk{VZxZFCZVPuAH7T3s63Fy`c|X^#ekwz(5=kV~Ua-aqu25|8 zI3nDxP_i7MF4S|ci|AVK?M0?DeF-^oQ;n4a3Q6vyP!l+qnEop*F%j?-2o&EJKVT}rle7I8)e>&q*Lf7>Ld|i z{8(IVSqag_c%#ly;Ry1`M z7Hg%}saVC5q+z(ne9+J_7V)HZo3`~UoDAR!&;(e?`97cj+z)T|;O+nXk*WYpq*UA(rfoT`lspow8O1Ovba za6aOtTzYfsd*|Aqsyd$K6-&}bqnl6kzH#aR#z0)SHJGyR)E{^Aa-e{UddN7;9Mp}f zzjpl00}SZ=2#~T1rE%u(^oA4sQx5hXgpkBw@nLF}vI1M+4TfmNxa<&Mv*a_YfCoxZ zV%TAmg(drNJ;3e{Icghzk|vY=GHToay|YkY>Qs)nZ&myy8XK%mT#ZG&zXctxQ3G-} z%LY;oZ9*~-;YDQ^`nPw!$}w>MhEqL<^GL2_bM^1BWdJ-thtpuFDxC;jLir`Wu_TO4f-sVSP&$*rz@0WAgEL)|Az-||kVdQC z1N#xwhNG5#1zTskRN~L*z;wg2FQSVf#^Qx*{}p3vqguRNPMxz~Dd9&aly-g?!bx}< z{XDx&SNN4UYJ5`wcn!lpw4v}!DIBih4*omej|Duap-L1ss#9Q(105Ke0@D1yPMg?v zLG>K<4Enxdtd{r*oYS|P4|U%50aFAY%XkF_fczb~8@VQw;p&73`9aFqKGja4;ZrZp zM1mt-Hysqxk;)z7buqU>>K0(Gd3*>J{9t55 z53FwWE35Dncr1KD&S472F-In;%9rbWelvqt`m&dM9?Jd{D?oau?#|R81}l_72PZ$- zxf?r8zQJUI&u*YRn_7ySK)D^OZP&(t5=`?!>s{j&ec*vg1Ek2&Z>Bnf7t$8J#QMtk ze(BD{ZsdS+VT*RFJ+C*%zo>y~?oo3`Yt8@cR7olsDNqbh#2O2@#nMN*(2`*Q6+{-! z5_dF@zKy0Ne+yS|-#(2ll-6NK30BgBAR|;lyLuo)id{tPy4(IIE8GZDyyDno3|MX7%-#ZWSidS5Z3{U;IA7cTn@GmTl){*^i@>8^Pt>?JFdr z0@Nw>2sLkomFD%Q#vHqy2fvC3<0GVP-`QExmghY-Jg_$u_t{G4GXL8Ue^KyRb@)0W z6I!481tA%C(}hLdQ6}HFJON@5I=g^!j^N|I=y1G30`j&Ij@F|<;xinc$>pHn+nwY? zmPW%bhR@!F;oS#>FPBh7nm=wH^6!ItfL<$VVunM>g1eX5mMCVfd}AKUjna^utCQVH!Q8=LGe_CJgnwC&;oLj`kKXc z$}!2j5z7m}mqH{KiFPa3>n47te7y8t0GI*_zm4sz<`!Z&X`Eq34xjRIq<6&{nK+6(D2@Df-`m5X~u5e{;UpaE7F;<(m^1P z_h(}RFm_Y-{)D#~o3|@jldbcJ*CV59c^`gy(S{LqtxhX^de+1ng}Y+(r>IDPgRr2X zZ^A4IaHlAZ^^W^%c+kJ{PchbAdU@>K*2jT(?m?b|7lL%kI0<=n>|X)WrysLncTj62 z+y|ti!JiFE)VmqU0AP_mE0Bh%Wg>Ka$CI965b_=o1Up1Fj@UW!l92(_YasS$(5P$KJWe9V|)E(OOFtF z$P19uQMU4z4%F(C@zcXHALEJ1m-78uh#u3%w))%k#wox2+PPa@BB*MmC`TgAA_AE) zw{w+o@{AF=0}rqeW#0exr69@VVKQgBx0@|swdTfQNlABLc{^%$m)E^q2D{L~Q#;N& ztnvd1sHbuto-D6f04(}$a;;a+vh64J%QFCza{ZAycIHW>OPDrgQJP#Nw;CP$)anrB zc!Rqp$1OEX?N~3yExbYc?bLT7V+|I@A{ORMOZpiH?eB~V06IjIv2Tv~A+33U#p&_3 z4;JSqCA|J#)gt*F3!*tm9V*Tm%ZH;T;>#Qa|Hn11@igcA0J+;W?>(%XlQvO1d^$E5bA(8u`Y+Pw&?ZG!#&*0lZ0 z`j^2Ex2iFyc(#A%wDV34ZV+qX*$os=j?UYye)p6X<#o^csH2yqr8v4Pdb!7z3itkR z^fQ6}*~#ZST&QPzQ?OS75f~HBzC52CBC*AwWms>aDPn&^sh!a|O$;-H<-W&A14^0k zy!u82uXKFrbr{dUKE}OS%dt~SANiO>)SWoG&4*E^oThCelyn5WLUubJtP|oO91BK~ zZL;c;3h83yE8kRbcRb0&>bh%u!7Ed@=eL+P11{oN@L!`wwCLqm24IM3TG?ydQ@1>% zd@`YitqBC0qYEf5g{q~DIy7rxgjxsWmyoa^_AuE<;jFn`@S(`va-HprCA+z=_}G(a zf$&h~fq4x6Kr(T4zxRRpV_-fc3=le!l@j5%;U8|YAr@dYq#vg!i$N@GP&om~2npWL zUXV_oIU7tBJvA5$7lf{cz85+ni#Efe=5@qQMr#$^z##ID#mRle%RU83p!YE15z9_d z6cus^iK}XoG6O*qCS8%~fE_6I#U=(x#~4JzdtQcXGg6*@B@Z&`v3S|p@0u|gas5lg zb;`JE;io{BywCFc*E*pD^anX#k?-?7Je|YbQ1StCNRG4GRC!ecfuCU5u&xv~L+cyx zBN(8V4aDgFc&a=F=!SwowMakd{(W`hp{37j;8PPs`C>mUcz=?an>-nbjFBJ*_y7oV zMXmz20WzbBO%^MyrPaS6BZYr%B<-Oj5*AiWC;Uc~%qs!u!AkN7LWu$oqraJxHram+ zQDkFJ6o&60&1_JFVVJ%7#BVQP1v$@8K$D3+f3tp~-R5^d$Pz6Hf^P~-<)*I@Gjz@&xJ!sKeLbp8=Jl`Pt9duYkyW=N0LguUIjlDK1ec~Lxe#|EvMj2{jP zC^JucjG28zS$tFXI~0l4JkDon5(DyQkkNp>Uz7nAz5GFrML0XeLPdNb@Nix_yR4UZX7lP!2;9pQoQiEJq1!sD&OabaPTHIfL7T?g_=7 zAY@chts_g&vn^WO%Af5X5Jex$f?+qxpgB4l1*UmI@nL}2hqtS;Bwm_kMS{@~)J>Bg z_PU^!U%~u>HcWWOeLOieBR7i+9guS9c%+A}g*`6^>!1tVtI#a_WHF4CR>?y<>Uqu} zP%&9%EYRx3G1{`GoWaO26;nb>RW|j(%I#6Tu0YnF8{1-Ina;`NWVz=1^UpO3-#b#{ z7%r2z)9G0d(FS6$Kc%3919?=_KF0?M+>hUg{j+2#6y-cL+c`VPq-h%{f7{p@qlPPo z?U{F7qhA`jV~E-*{%j_(ncX`Ya9-f%QLXZuYJ@bBMnKV2cNzkacPQFZy;nCvL zop4tOm`jq2i1_5ClTltRk1mo;XPdC`rRy<9vISS+EC@%9=PYr)MW zKYVKhdiALen{Ii*Mg)g9%CUmoB!hoUu+Z-BbhR^m^bN1W4W|0(cgGKN)U?kN`Zem` zE?=3ts?r|4bYADMf0p2z(P(edd4u>mNOSzp*xR)=41+9wT!~(+RNxGZii@r+!#*@y z2t4f1NHX_KSuK2<%zwg*&X;QCL22Jy`~CbweNtD~rSn$m%HO{4Zp>Mykpw+-@SWHb zs`)39yIL4lccUI=JH%Y#uN-wtzh<>TZ+5k%?5`-dv&#m~<=ny#?|h1wQW@V(rN z(|6h}wUKp|`+1-qnakXcp`l{**DZwMZ^y<;-z)dxhnUpC+K=9;*$bv;`~LzR#QoHo zAr4nhk4JP+ehP8=bDx3u_E)h~y$%zb;7iBEzm z4QhplyC!*DGq7>P+5AJisz(QKZC>+Tt|Q^05;I`dm91g{h;`~4UlJW&c9Z$JamiHw zZax(D0hWtQ2DioI=uI^6nb)|T59c^R+6mRM5X^kMM*lGuMdL;XeGn;h;T%QhyTghw z-IcO^rPFg&wNF1VTY`mN0ZZJSq|ymKE-C^YI} zZ(u$w_#9m>u8OE4Aq2kzs%-x`66r);Atp^%F-_e>YKc5wofXZ1 zc7?@8*LkdkQX+m@qMPsQQC`XJ@+L;pLISsn6x=)sB|t2o%Q~^~%qsMpe(3vDivqO8 z>jH0^d7UK%*b6o0R~#YIq0R-6VQ9Fqkb4GV@Y(pY@jw{jFs(?0Uz@lmN`3Xt<7YRy z@wfm(9WPv%12GzZAd(!GrfCY~FIpHhHknCTf8AjX%%E9r>qrD>W3r&6e+gAZdqeg4 zDiE~IuKQafKXTTNSj@;voU3HD)uRBx>6ZF=wkuK4xgu1 z*xM{v2h0M@da7-S+g^d(WJf59XSV8ci_KaLX&LBhxsSj9{H>j)LaPF^aA(hTSo@V* zU&}CG08mVlZYKYJ*j%vVJzj%kM&GirpAe_`Yv?5DxD{8n-^>DE3UEeEDpx z=1s@xuIF)ySM=?r@#~zBz<`6BLqK!|7{x4#ZRo_eG{&G1>9fEfdN8xwy=>ht$|6op(*A%w&ht2u!?C zbhhhQ=sRLn_}s|LZ~nf?!nUYUR@cFM!&TuFdUvskR76*&wmWt&#I0_>|6z5bGrx{l zpw2IP5lk=7#@;0ZmvjfcB5P7tD8q-(e*~6)(B+o}ltb~5 zr)ht(j=DK^-Gno1iQO%NMsmXP3qW}?UNB0N`tQh;1#y=@3U3$`BMBH1<9opHl{}x| zbBcrD0c66MS9Vq+ZNJ8lzy4HLg6i)99>j zV8WojUJ_|TW-%(3Y<479GmH)90a@923u8v}#JWYg-Itr-K_6uSO<1_P#q0yH_5tz*v&nl7|0=EPa4OL28k!JfJ}&f zz}xf+XhI~K8Iszovn7CzGMeD6_XtWM@O4rR&A*eQQ`3-A?PaRl9j5^PrlWW00vI|W zJSAE3~9(M`0M+lW9>yS-9T%VYfBAaH>n*0U)S0SCGmQPw&5(=NI|3)zzY;s zMV0Qo=yOAa7qlmU3MR}X+dL6E+=3k{KioL1_1Xd5Xzcn;gPt(EcBp4epV1U_2#mz0 zRaqO59h~^&7cq^v@qg`c{NzVV($mn zAwKqOT!JkspM4lbI2Fo*8)G&2`I|o6;YvslJqJppb(8priDk7ZiK1K=ib7)&HRj>n z&DN_wv*YQ*0&49_$7d_lXK4EVbdx+r9c;-SNqdI8rpBX}cz0ydz3a?1O7k*wV)>{{|E@aKNlGk?7l3;Tw>lhawGbqz)?%x=5PD^LQaRlt$Xus;B0-+8^-vBVD04 zBHzb0Is8uuiQDpauzgL-XE7zjbC~OnLCL% zIQ(Nx4r3cl8zqv5K4@Hwsm;EZDAwgWSnn7O9;w`6&ncGGIMdW6iIsjof9jUwp}%*Zs#;u2wbxan?xL8Y?1e4 zW;PMl?!>z)>0BH(W#e5T010*NZ4g-90&I-ZJKl((Kb~~6>eIF=j;8i%A(c{y^*Ge| zQGg$@Hg;Zx2VO-rm!9&z9(UMfLpE3wixkP))sy|dUo@<|?%VTJyH5P3Ci9MB^sI>f zVFv!)%*|H(ACkD@|4$OT{7ZXsn(let|7EV5FMAz4O_GR> z#g4A4^-V~PTlC&CPpuMZd5E%oGnqRjm3m+X({j-2{hXRptq0(FTtv|wpXS(K+w+B7 zvS}25h)4q1^@zjOOy@X!`(R~6=nWqIj@VeT=~J{SK&4Xjb@=Q?j??ggj&7?8-IxGc z#ugRp{JK=r$XHCpiaC{VmnbtT6l;a|3Nyej6FZ4x=0HKa-1@r)&_F5|q~|?FiZ+th z3z_1G6EsbCugNlH8lXwF{;f`{MR1$r!uKK9Doo-LkRXISj91-NBxRoK#*>7S$U#3N zc6MriSczYfB`1y~h@2K$KzBVhDOWkZu81ATrZ;hZ>yh87Bhb?q9<5&VSO#6wiPx+8 zd9urr#*2<=*X-v*a}fqv0^$N$>##w7taFv^u|CnFQ5LXcUmp<6cEyO z8uRL6Q+`NKwsEs=EaLu7wba0XOs*I}2)bnTf3{acuBm7%tj`iv6Z@R!n<}^Ne0Sjx z-{&O#ApF)C@>bu(3F~zcbsgkK#c{#sHlHbVy|^#K2Yfw{NKGv)&z`p=>;LBhm>=Yz z+nKqj%9`o;*knmkm-pjad}{G*jv}=!Mf2I>SUkvE>YzaF*C4dPGAgOtPX6!KRJHPa zjL-6Ro2}tf<=vinnEW-0)rU-Em*gN9&xjNOS-0w5BGc}N;pwffx^e0n2kpAnY$Q5M zFX(sIhV!A3^I{8{GP3+sq0@{Cqtt=BIcUE=c8-1=Ty(eY77vr^Qv}lt?6G9i;23XC zp2xE#y)F_CwPA}#f+EX~q|ls4o!A;(RRWhUQQMITYwiz(6emw&&W{{$Zb+NCvpJ(2 z_qtsb_XX7wsyqkQ4F8y8)=hhU^Qb2r{@+Gbmc;I$dw4nsF(Z+1`HNe$F^Aqyjp-9} zP|6dg1)@KQi+NbiZXFW{o+iv%r$s$>cZ+0UC7EsdUmHl-;l33NpDKZyJU?D=9+xpu zN6C9HP7D-%4Z~b|RYd41Mf*dWH$GhD@i3Q0zF9o+cMlXET_Q*z>Qz9W@{OTr?3 zBs3GJ3MAAa^A-Y%m{?#Jlfaimn4Xo*4XmEk zo}pfEqU?$zc7lv8?=07?Y1_L3Z3Ccahd5lrzW7FzR-~{C3?QB)h_TRKl~EhREXz>|6aY2zUef3EdKFxy=uswxP#x}Gg*^;5==H<_4Gs#H!VTpDJu-2;_;F@#;VS;(UOwVJcE_*U=Gv##%UFCZu zP1w(yT!IUz9zZ7Q&HpeZD0!2-flCzZ>i zrNrO4tu(N=kN6RJv!!|Yi|-893i*}fopFoqcrOKDVTHscRK>vEwVTECY1 z;L#n@2eh88DRcKELH9{N6vs7(*R##5nWhCejj)ms0``!W0J9|}^NPNp%_9=q%25U^&j$PrB+kDWLCV12;Rv`E=gNh@wAG^>E)u+)%X@4 z2c!mi0r~4?p>JaFh*itf!?;C!e@x7}KxQKU{Kt0)yV|YlfS)nSjpG0p^F6fVvl0mU zEy3aqS)0#}4Jb~v!2&3ace&HTMqp+-O&H4()u!>Sp|BVnx)}sp4iAL=QUN3tPP}@g zA~^grjU;`S-QSWsphKog#gRBF2($8vIhl-{>?@tC)*N5usGY6od)|{Ro2*`4&+*<3 z|8y|*4|U;mDU$}h!{M0Y@DKOE?F^0ZGc~I8mMg*!@?RYZfwX-5g2S~quxVnoYbnC& ze;Xj8n_rFwOp?x{ppzo|XUJ6MU$ps@_Y-$TM|mJxa7gmmJo%6sdB*e zJO^eIlsTP?kzqhS4{1?Mn5;^c9a6j6!ygi(7606MVLCTubPbk|!F!cUPm`+B#)M)d zWaH9p!Es;>V%Ma3=8p$A|FJJ1h03o(ErqCrU{h`0sll+ym}F;?kA5rdCBck56YJ$r z!MknTJ+mX4wH!AbKoC&6@aM=L6z!mbIIzv4TsX{RauV!4(dcqp$fNcO*(st?^xUzL znU)P}A8UB#VQcvE*|D#pfu@!?RDsLMUY7A@VMlATVq{&dN1OvDd#Na} zIxHWde+#^yEQ;@OJi2!e7b+*ELuz$=C5H9YR+-Mnp7gaa=6yMl&up_4sY)g-O|hpg zCM;%FUa|WDolv&THu(p z%jU2CMuTeM5mB|$YUL9yEeLK+-{E3K7wd`JCM%%RO75_bscoV7ezTtH++w{ZyONAbQe1gh_Bir}=;j*bV!Tm7Z zygEy$Ffd;t8^Tz?rr{7R zBfw%1ja$k*@iQw=ilh>HVRp{sQu{NNf(?=h{Op}Cf zl?0|k4Wp4i6dpz1Zv&V^zEJi}7qIP)OBG_=0yw0&*{oQ#tGI93RdPg*4_Mn+?3^~% z7j)0ly#Wc7A})=Ro59=f&p1=!C-srH$5Y-NBJhm#7m5701V5sh#rLE(Z~$DE)o%?- zagNy5eD#PPU^wVQ(Gj1fU>j&BALSi<2o9>_QL@4?I5z^(+o^a*$snn6zZ{9m#{-gnDb`##{52$AOodhJN}oMNGph_4Hn|Y|T~62%Nk#Z0RGq zZXpS@HhgDf5)o2YO)iOho*g$5d@Q@lWpznz><`NNt##)bBiR7?R^TNk=G~LtCP}T1 z16NbW`DHgYe}uHuttG#Ptwo}o$y@vBR}U0-qRHAdg?VQ8r|0|IxWjpdmVEjyez1{- zW&_4&5J2XLa7RU>FNkhf6_17uj>VPJ(IU3Q04zP%F zI^hWo!77J6Y)9emA2OmtWLj~jNaxn_)QVLo?mn)eaAm_=yDF+%e$>HxC;tK|3mhW5 z?dh%*XL&n+;bOfa2%Jzwn!uP^G9GJJOE+L7o-|UcuBMOUv@#G^2)ex_(JKNCM*wxh zW~oW_X##YxBc;s9%VXIfrj<_F_xv)BwN@sOILaPtM2#Ga7JI^#2S-|zfN$@x@sxfE z34K@Xcen1$d#xBrahTwwt)s8q!lWyJ86=pqS{Yu(hB}tjSc73Def5ZP)oLA3Q+F)- zwpk7&9q@b2=X=e4(B^RjwV_%RzLEE#G$Hjp0+KJql*tkF%%I@N&D9^RabI=oydvy! zNE~9jmMFgOeIUx{av>nXihC-)pU|=th<6lOkXn}8?e$~6?LIwkCoy{7cyMeu+*m}U z9*ExhE3Bw{?v3G~tAMSp)6sT^?4_eEe<|)ptL?J-fi*-DVerOx;DGOt*T`sp|0Wh5 zE&8-E2 z*+=wh*s|V?dgvr8 zKJQ~-_Jjvpr(k=inKF|8S~sK)`77%?%xZl1Fp6^mtA=Y+t#tk2C=Kpeo*w6TJ4HBU z^@JR9C3tPf3+eO)%iJ?6o=963DDBzz7pW-SMc|zj)lBc;OHyB9m!BencsWyt zp+0mvE>%xd9Rvt@UMuxaMbI1e#@}}btdKv23XRYH_Z>O3z@_Q)r7cn*xOW&f0)r#a zlhn^C4p}@BHecyiRFf>hms*0k=ZN7!Lu#tjbIK#o2?y}r{xLuI;E8BC)aFfo(M1ZJ z@+099$i|9->E^3GxR-k@b0|=v zo6A<`uln-dw+L5qE)z_^fDHDAvs5xhu#_Hzl!cccgQeRZq%F3+HwP`$xSqFltoCQX z7TJV+9RfF9UOysHcJf0F^=NrnTGK5clgB9$EE}b|5>jN&L__}K9s=N!S zh_q~OX-%#CWQFs}H~D}fG=Uql)efjq?w!-YNq&)cJ&ME|RfhnY*QfIGSMFxo-4_e6 z1|PsI^SG>n7XqGYcbgCW?X^0e??_)r1Mgx33Y%)YjgBCHzbgwmN8tj>ZZ9}Xh#$8}Ih2v}aYL2^~&D|moHB8{fl?>&4n^vbqW zelpNHDKO>3*>O(0L*rDc7(RuDhN>KRtYQdNG}Qz4mLt% zK|-dpUwy~-$Xq|}ZDRtV9iTK6p2QEZN2gEE$QO|#$G;|pRPS;({m4dgQ5};GAcjVB z%_=PxirtQ8(vV5G4vjA`3iDcojgk&Y$g)gB=mA6~1$unt=?Y}l*GJ1teBZ$_cxA9q zIFV+V!7m_5KAD2&s`s9L-hHpx z!L&S-x^W#zwbLxHyN#$DYL4L-_HNrUkTsH&^>uM$g<0r*lxrbGAIT7~g7n9$he^+C z_Cr86tjycxgh(@)y@kdCcN^J6*28g@IcVWy=6~qSf<%Ndd>Y&>ElQk6)U$VA!P#^= z-D_?+U|Ef>V^woNL$}ddy3SYXrVOV_B!wtl6J-&yU%EK?n?%%v#_}15>d~z`oEpGR zf{=eV5+%v%B6nvpbb|$TIXTV>X!v{QR4c4Xw9>64~M1fs>NRpo(*FHl=H+#v0h}2`z&eOOrFW&%1;2RP=Wyg zaP(F*rRX0Ls`af`xw0RHxlvaW1R%Mae16mc5SxiT3 zbitG#H4V+4Bfax01ADT=qS8Ty6QIIEM%`KyzcGYWM3#HDB*2$~uaarKzPU_XuACO- zf_ur*2iJsGtf})H0ISPy@> z91u^jL`3wcAq0I2M;ht(R8I_DFjfTXKs2=3% z0W@x@M#A1C2#|GN6N3-2>Ew^ck?s(^&O9UCfqkh)4SV9VCqM{~A?5M6(o51s?7#Z( z2YrI&P}{IM3f2uyY|m6S0>Ri)f6BySoN>xii)4?MD5k7(V^LaOhhQq8H#e{{uk*C) z@N&6y=lv!He<;uxFGw?4F2#bn%7i?1{pp+zHXtV?oTp0m+$~f6j6ES#*toP;I9av! z{^;!@2T()xTTzu^&9hiqso2XteRuA8VVP3{-eBwuqkO(!>tH0D3be3LX*5Us$N%XD zJK57HIuenGYPHmqzFgJ6cA$3g_gIhlWN|c^O!a356pB)l2)1JTvj4lV;Yw4on?Pw# zyc8Ad%Gz^?lY6ke#8Ti;ds^?YUoaSg12Jx}!r56|zlHG!=eE4$WR5SObejkC;9V87 zx!II-3F*WJE)cy?YGXw&{EtoTfAR;x5uqN5|60N6nP(z8w?o}Vzxu~z)IY8RS%Mg} zmd@gmPQ;0mYBcc}I$Acv6(XQcF?IQ)rc+FL6b9 zHgOO^h8jmTQEhm_Drbho=joPR&B;Y%e>IHK@NC8`{YSZQe6|BBkbA+GA#tA3!JmKc-1 z=5!V%94!XUR$L*anehtH%MTzR>KHzJ+_ABp7Re1Df^{f`7G_yYS+0jRGs~PYuJbUP znOZZqp|~~0j&=LI6WPGQ!=NO<0{)vhNmN_)Vvb6W$l*t-BVPC|HEg&Fr4 z)Nts^YkKzhv|>p7+!Aq3GP0Pe@~ihG8+Vx2M$e}>wm@}q`XJi<^7d9fmrh&rW?GQKbl8m z2a2fP=_6Rf;6qy5M&O3~U$`}DVJ>t~j3iy{N8 zI)YxaXB|M}0x^3`aFL1L`Qm2K&q~syg*InLeJiW`%1vxem!0M7^Hd@~)Lp}et3x%y zH3vNV@KB7&ImWv;-h$33K7tB5UwUUGlc#wOzE7(?U6qPKUOKFoB){@-qY=eI1@**$_MSRX-EyVijGMr_#oSq!Tl13Ajk9jXWHJlf3zzn zB~rZ+ikIT?ZhZoE%H&ufatuTZk@<`8RhWp%R3Ky2fYO|6tfyvfpqq?6;x2-zXr4k( zhWHUDt#K3ly}f|N-BF?mQmpsKnto%?*67KuZJA}rlx~@kJ*!X*%Bg6hw3F}cpL6TI zyDdS9HJ;@YO~ZFZ`3)tM;F!1tTjyI`5;oE)Q|+!LC=`u|=#n|^ZAQTiP2y^ub$q3aJ~(Id_z8lW#CF1aMnvZ|`cykNmc zEeU))jLFH4{Jj7E#%)^e8f5o2?kGkbls+c%leKwP5Um;|ZxT$N9-sI&(ATTDHOwM@ z5Z`bga9p-g2^+0L$lm9lUws$ncU{oAL5D$0-LQj1f#6{psZBADN%j<#e_@hEX`t%l_VR3g&L$T2rhI(GEhOZ-4xJXS(v964W~8lA$uOD8Q$7`^tYMuud| zsDvB3>0M6OYX$|0cmfOptY1qYgpb zj3*SBCFcbo#OApGAGF`c{mn>eXFeG`SW<5qC6~q?!HSjk{Njf{tx6m0gDX)vWOVT% z)rvzG>PnA<6FKMOtc&AeSr(Q#AuoB*0ZO7R)a5~$j8cmmgL3{`l#4_@IFn;K?X*e%beGNOkT7Qeq9V-R#OOE@~V^kzdj_ayO zlaktKtjKORn|6Z5|3=AMiyT1Fqg1T0qjZ(%(;Gu6WR{2dOmRy1auh8>$sveGJoT|W zx3PO>XK03pR-J?z@U`I8Au+ycm~2@xzj7B)ydE#Gqf)&+<4RTXO6y)|R_5k=fzGP*A0Z+ZLSj~ITzhhTx(Cdm~fqIAEYMi_TC?r?V}-*)$3TO z^A$?mk4>cA<_U!A4_E~EDgaQA0TQbJ{x*!$P%xIsLR{}acKOhy6*NB}@ zA*$kMcPDRM>jMgnL;416;}xJ(cWa!GpCS>}5jeezufG`kN8Nf;{(mP3M0%j|G4!p8 zuO@Ex-PuTxNVil>gG%bG7%O~oF4od|XGDIS4yO1F;uV7AEx{ZNF0kpFi)sivo0D0G(*oTsJVX z^SAx_?uLHMh4*BhLD?>ncVi1p&^}4DDXF3f>f;V6mMI2>DkYsgW}^|!w%abEDaKLP z9{vYnBtq6-WW>{o${S<+MdyKivkJ@tNAa)OKAYBn>+(@Ztd*u}$S?E+|G9DpsKJzb zoqFRRJ`JpOGjO>exCu--?CtP;1^K&T)aE9qb2XfmR;z-5A28xGr*m@kEkFZMSYVRu zRUm(4lA8rG6MpDBQIzeFcST`vX7wcut}cPT8K%e6^mVB+;n8zNhGx48R`%ICmBc0C zI4Tn>v%vKax*tMvQP`AOv3zZYev+*HmE1+(s6=j^HSF>LBo+jVaL(Ck#za>v@FMub zKIbkuAmy&O*>+=>c<^z7%+CvfXgG{vQE8)KSq)VsJqCy##ddw!N_uvCUKcX&ErJ7) z0zn=Ks4lj^%_D+7>{X5NlNSRM7acvjmB71iVjJV9_IHp4Nvq?D0%uCc;qE;KOE`HvC?*CQfx-#w@A3_96pma5)-CNH z@kIpI-(u>OyLt1r2+d8d?CqvY_dmxt$1=CGs&vM$E$`Y&sktJL>DC6rP7m4HT2%TU zfMw+k-#)*jXll7bm8w50R0}00jKs=>#&g2?4UVRn`m9ecycalYx$(^BodoZi1uRAu z&k*E`!_K#tHkq>FX)!3CT>gs(R+{I=!_6quQ)L%z?jT_{4{?`Rjx9ZVWCv`xN*SrU zJnC@eRt+OrYq0ZhhgEg%F04;G_BKn+~X;SchQm9=~A35FyQ`33@U)cHn-XuJR%@T-y> zr!GdzdH0@tfIQ{bDQGmYfJ405`W;D|$Zuf7K5maVZG&fq2`UsRCaMGgE)x1st_Wkz zcQLdJ%zlTip`hb&jJYELP)TZqURAQd0g!MnoG5T5vema*0Lm%v*Lfdx${kPMD^eH* z8KxlK;z0&$6I{K!!HN?`1tMZh;m4MVV4*PGWe$^4(_{6;a@+PWNZ%#rVvbH$k6U^%l< z<=2EoQ`+v#>6-px)?NZ1MYRRIqDLagqG&00TH-Jc>o8r5#sH|k-X{PfU3cqym=#R*QEXwKI3~a`tU^h^Va0C8 z)8TMe^@7|Z`kQ@{cI%hoDr!)DG~N$1vN7(ziLlMV=v=$VSFo{DSJ@&Sc?wiCqkJJs ziQ$G!fx3?3kMWZba`!|G20Yrm0_C?S>RK4#2I6}N2f25I9Ru4%0mIl&8eZEkCB>FF zXtj8<3ILr^;%^b=>x9;+@csgmbj{F7$tL_A=#ra$GNFm!T>xjlyP==8Wm&*{({uJ? z;U5%ifAk)glD-CkxC9H$aCly2tM`pjDy?zwYq~8I9}-%MgL2U}V>>5;XQ$Fxd{l*K zGQoSjI{^)C=I&VWhv_BI`n6CwF7>|>9969WZM%jY|>SV@~f*rcOFU`=K*H z?~yci0)z{%0^Xp!LNWOy((eIYi*)pES26ysVIOp7>w{PRdz=0!fZG#shpCBTJKKD1 zvoXavQt#4N#O#oKFOy`Z8qBoz)!Lt=9Pnph{>p&a^-mxeL&yJSzCBlv#C+uqq%nVR zmz+5x>0h7U4h`Z;?KO-b@X2M4HE*Qv6^%(_?v2LHsjtNMOW{lWC^~}eW!+&y^nAn^ zmC9jkZ2-i4mE-g8nd@}?EFhnh&EVj;bNcjMKi5)#+&?@6gfJZvy6(ByMTI4($T1Ei z{?BrlGs;`h9e{WNm(f=KHajcNP6*A9$My9v^X+~#YKO;*wVEZ|e4~Y%MoDVZ91r<% zTy2zdtXc2XDRuDzxn*2mKQv7?2?7oR3l_vt$$O?#8q>HjLI`@+8WZT!VIHIhTs9TDtkkaN~`%@S(ouVfOawr(Q!Y?Y*IqXzdH%>3S}8aeXx~i==W}3D(Vgq zC$@?-OAzR5N5TP$$jqzG0>&CUctZ48>AnCz-c+WC^}k&wLc?~gZ2Si^QAx_YcGR{1 z5Gi1H0)78e6H@$|EpfL3nnfHp*aXxC*cI=ISR2Z{_Y*gnpj_}@(pdQW^L@2k;rr_0 zx;R;K&zPup^Zy|W^R0z_`9E0Y!G|7wy^fk`#u`kj=JZ)2Q~VODgI-fnZOdyD&S)dp zlr6TuHGop3>E-6>Bp52Bur#&yOemR`sE^vP`4R?8H$-5UU6-$8neGm#A?^$Lq8_RF z@Udo-!7rKX5@ljv5-tBgkzdv7I|S-}ThtwZD~=hs#;9q5`x)`rKr#uDg4MM=Jry2# zZF~rNDw0K=*U{@ls)aR(VEt6j<4Rq7MSx2J(?NGGQZ=mF%Unf*?rXq zWJCy-H)EUVDb3Ayy82rus+M?tFcn;d+V$xrFJGinSq#jlxo!?~esu9Gle7$_5>2v- zBh8~jx%`H}Gu~$eWFS?$QwDYFP)dsJus}t4tV18OTP%uaU+%*+{R2L!ZYk9OagIs0 zI~BI*&J*5gbv%ct_NT}R@A`$v%B{`;-Us-Fl=C-T$WLN@OpjYM|T&Tz#{ad1Qd zhv|ImP)jaD?$Zb8lS4H6mo@|)(~7aT`b8vcc(zflXc}WSa+3$Do(3gkEXjq7aWh*U1OZND(gj$3YjQQ08GO@K)yWz;yT7|~Gvy<|J#BWtjl zY5dDEJJA?dt@Vfcb;bXBZ|gN_6&=_}$RZR-oj^{XIh4@~83%rxsASmvWCe>#Rq*IW zz1tU9^K(pWWBcN_sVaHLbIml%X7cL5t0&tV83*qp1%ucub>}ppwVbc$pO{2rI+=hx zG;y3b6g$_j*-ClL9%&ElBo0M1GD%q?D^#?YC!iO`_TZ*aQ<)p=MZ(AxjaLa%gNaB`26M^v z#-N{R8@=@8>CeuiSx}9`2%*c;zX=$)lVUrZYiRuWhw~D6iWLRdiJG}Rja1^6mA$GJ zM1R_V*j|Zmpawml`RnU$I46cUBkKDsODHQLz}ZVgH^4srHRp{+xr}qj{Hn>+NBV$7 zz(<%;5BC!)b_4&{XU{6EZDIJxowe7o2o%aR89rw9lCVT$67_}Eus(Rb$lqtlSB1223p~jvy9uWAs^MsZDp94>lSq1(1XLdq6^f zPkDA2Q&{^E=X6s_h=naX4H)GA?U>t0(M1(xH^jKL#83 zeYj~y>?k6)8+wXcfF($L?vVpHCgI;{OI>AN|8R3mvQ`gJ>Z5YyW*#0 zi-9#i!5VP_Phr<;>ZUT1$y`6+d`M2y^JHt+6kHlMnQsj+n{Z(^Busdkv0^#3$HbZ+ z2gbYK$p7{UYob?l$Fj=haV?=>Csx(y8B1cezA~HHwcn)=Xylm5TKyd;SjL)*_8JVe zD|1u11Ac#f5Ex-3*(9BWK|i1e+c+h@ZD>U*geeO+ES1aRC08D8wwDq1q)^L^fGk|{WplA-~^NHj#g*>mu7ci6#68P4QkqE9%w|x>;XwUar^7uamC)+N86~oT2!o_QA&SKonbY# z8}EUcQ{2>eEraH@JWiXp(qbMrxpgJ*{jrKvAVO{|zx8Mx5BH^jZ5|^LMsbf!wJy4g za|{RIgnXTam*Ex?#YQZi!DANW&wed_55oMWy7O{xi_M}{AyjnbII>n^w_9Wn$W2wu z(YlUmtcPpOpCd6-l?_n}4ZK}H^y>D?y+aoO3?(Psy~_J{o>lK+>#e7pvsW`F6%2~Q z5k)};yeIj(IP~(WnQ3ROCBIaw++4S6-g;UP`&HWA^N+v{svL6U&6+5b#n)wRr%Ayv zAi}|~DkohCtmJBKJ&!nG=X1lQ;K4Cjpc}^^nYXu>&=_G44knqgF;%o$ohH1>v}_h5 z=(^lCd_|~I>AA^T*mfo5xew&k_@1#FznT)``}G47JM`;^$OQ8B08?fH6s z@ot^TC)e4K^%Qd4w=^$+SfRid(ge(RqX#=~VOtJKj>)zgf1b|U&L6R(=l6=#QB9PM z+l6(wmO$@u;rfqn@;WO*0$q*qm?{khG4aTXTrrExxNon`*dZu~a>|=s)a5o(G zS~q{Kob@Osrf*jFgwa(aBw!oYzm>wXqwNn0Sx^#@EZnS%i$7nAbk84KwtR^sw8=C5 zVgIvlFiQ5IXXw@t(DAA^yC)GIlA@~jd8z)>BORL7a=>vA1BeP*MgrJ1%f1KQY-yu1P_P~9@v_ac5(uCYCmoI zPvKhqny%nhF1t*ndGTYlsJ@rA&=PVrcylm~FFX<{^5e%!(&!>(q=nTuMe#`I+c+B`;{tN_4lkqOlK1&MjkI%>C}+t` zU26p(hb<9EFXlu&s1Y)XKC)hD0=*-usAqg5XgY;u56&rD=F^oq{=Uzw8WbWUDq6R7 z*HCpv-SJZ#4E`o(&B3`#7CJurq{6853H82c1QC`F@Q0rXLG^$psP0ceD*K}z$3TGQ z?0qe3?4aqA7^}3noXb3^O~(Q{>@DM}=E&H_<+x-6mw}@|lQMl-ly!i&DR!Lw+`5CH z1mQY9F>fF z8m|0b?KZk}P-T9ZHA}|d>8E~RFuE^5_11lj*Ca7ARx2=KO;781Z|ea^ z{Li_Tpsog?8R+kIq=0av#EEvHknmE-f~FVl6wQ~GtlSy<5%&B`iS=9riuZx^Av^dt|~VI{4afE3zmoU)ZZB7I@oQ^03R7)&lHk#(u<+%Z|gOpZz6<)d*Zfs z-+C}TiM)#sy}>i4TW)!Th-relbg1EXm!{VEz6B^_zq}Y-*o$t|=sW03w-EUGTAL&z zII!=9zgP4LSCSEQkM{og8&oIr$#y8w$&V1useqMcF@hgOWkBkN)_Dgzr}0&%N1(kF z7Abm8z(Hb@Z6+8MqPR*AA_Q35eM_d|QK|>+8T#@An7NMFZLNNG9+H$FS^_(yslp|= zL|01i066-x8R3ww2gsdgZCLcq&n?P)^_ZQ%?91Ah&6?I3Jo~+Y0+2%oSLT7*0G^)h z5&_IdaQQQWmVBe(ZJhdI*mDP`c`@YuC>A{eaq0{}5Wts9oZ8kG?{ufkG&?HH;{n+Q z$)u1p2Ot~kY#}(_6t;%%Hp?nUHTIvF$x5FO2j9T1WZG>N>s~`-2kpmd>F8OTNob1Gy7ouV^};=oDp2qe zS7;2&E`@QVM=EcI6jZ{`iv1h?H$ERn@l&;6#s?+?IV4%UlWZzmuaHD_ zr%Q;>uIXWalfD}0xQx`A4_DQAAZ)*<*c~B^mbmJW0D6M7l+_uL3rJ(IlDGE$muE2V zz!lWu6#H7^z^IA{Po!2X&R)ier*t#&BepcH{yDV7^b5e42uWc~yZ762IMAEo-nToQ zV95|z^G57(0)I==UCKHM=i0HtPt>OQ)wa^Tj5*W*hdtY21Too}_%`^%_kugOKyND2 zI>CPSKskHNGk~PDO7-+Rd2j?LayTvVlsCm>0gNf@Z7^@rbVya(3Ij;y7jUano$y*K zXGYf98eE7G=tGSt@kyn-wQ=vwX!?@x21O7OIGr|0v)>gNUq_tzhY8wdLeAES#-4zy z$f;j5_4`-mN6#EDv{)_ee1x1wu{=fmkavow(UFTF%eA<~CLnB5z^0X}+0| z>1AR<)?{oZZ{-y5^)$-cqJ z$(7$`=cay{TCb7Go+=>H#(vZ3dqI8Tjxn&B%pK62kBj?b%c4G&Jvz74QA()3N?LkL zusYe)@E1j?-LkUhAIa|}n?*|opp0!*47z%p8ROV_?#76z8Xtd+dL8I%p`zNs;_ zh+P)DK*_@H|HK>OdzR~+@gT}fkl9~PG zmO~;b$?}7xuLQ0h?-G=?#uv0U3JN|h*IA5(nJjfT|LlZFVTGNJQdulZi@=l^7kGd<~$qDamSH8*!W)5ivQ_s|$?N zwKfB`PN}LRRW4)Jz~fD(^WxNA%=v{whNBX^+(OAV(WHx+mgrHL7>TI+IjR>OV#4JP z6DX5C&nWy?7f-WwNOMl|wno2IEx?mxv-B z(BS6zUit-k0AMe>-=vArV z?#;abng_j3C7aoaj_pp$J#J?{4GHURO8edFa!kK+Ei`>yJ}`37KJsQiuzp{X6{3vP z{SJh-9;V3!u1gHw|M|WGIpFqfqe>H9b5IrUY-ERDq^tgsM?*z3+puH!BivM`FAdd= zN$T$$)zX!;d7p53)@+hGdtIxeDptncJ*F9aHmbIp9Lb}CN|(S>nAc;6IQ*W{YR~%4 zYg0qdZYgwG$m_OE@HYISZYRZEtS82!$!(Tt?a+Vgu$Ghe@%lv*OB-}1DvQ7dfElWgqP6(^1Lg%boGt~;t`|YZ=F=d)ykqgVY}-F2~A7~Q}tw>|0sQNFfF%67WO387}(95!8gRaa$&Hm2MvJ#=Y z+rPsrp9sM)w26v853^c?&?wq%ZMs~W^kh8(?1ExtdrN0-tTac zvHf93r$l-qrBBgslTDid!$TT%t)=yB=%0?<6PqCGNRHEI3RZ7*e&0Zu2Q{KX6s6MP zT%(h{rCe1FS9AW7phr4kKZ=D(zV4QyiQ|x-70PU%;&WIP$Y=59HeR7_|7*3 zuZ;+A!KQ+2ynd$wVN*px(Bgwz1i&kaL|paA6&|J`*aGl#-)BIkfG-+G{O%M@8~&K({RM!1M^jTOZB;2kwBkp<Gv27JVN%xfF z3zgtRFlHP~yhc>7>wstVd)t3F!%+ohT&BS$H~}}LT0(|a8XfIoIcPK_ABBJoHddca zRbLins>OGV?`o9l3zZnL@TqiX6X=GQmDeNPUT`4Z2~oY8a%zpiky+a(KYG%*Q%u&L zrD8-}?2IkC=Q>`YwBCqrf@gc7Fa0J!^rM!HGE=Nd8p12-)h4<_&r+rz^xu2^QKK zG0wNWPgpuvA~T=Ei3*1g%SOiA&koQX>$%CGDg9p5Cp-%pvl(aGmyJOgiSLzeh+i8_ zYORactR4`!EtLF8bl>OPr=weiLSRl{^aNL;*4j-C^Q~s)o5}3)E|tFIfh`>Mjw>`H z38%UD;aohmYa4_Sse5T;J*&xb z0&YONPSVK9MgCT|$63lQbd0WIPcYnZNi*0e)x&fY&Q;`y3FxRRmd+%?z41o<8K2Xt z0{!JS0XdCvN__uP#(zB^>q@0F7mg{C;cdeo;v7Z)dO0;m)8})K9wZmj{R2PfD zpm?cDu7M;t0=i947L+E@AP0Tk+?Oz?3U88RWiV*35HLV*Jn;4z<<2zgTR)^pf7CG_ zCA2Tqa)WpH>%wluGFp`1r+<-ee^je>p#8GWer4fE5c00}!cZ>o)1mwkH?OV3&Tfe- zBiZ&u32~{jlPQ+SI#7|4{Ks~|+=c1KRw=6warFHUdn({cyudJjR4o;i&xOgN+nS)_ zy2XnoLgc^%&lPv`Lb=T3@aJ3gmlE|(HU#Actu7kcd@l0ZMcL8YH8UdBQz(Sn&ejiG zEObLX3tmvJx|~+M_hek3LGqWuGRTZ~@a!J(n|bhPz47d~a^2z2H36j2bll(50Tu&| z43tTG-tq-(+F1$ZR9cM$9V@rsj@^R+$^!0$lKRLPo67AMzh9IjaF*#+K)BAAcipPF zyM4{^j72d4KRz#1AAbO;lG}K3c?hVA&b!`H3 z!_Q55SIqV5)B*QnjzuM7gUHWzEp?Fq>v8w6Cy+9)!*~`a@G0J1d5FQ-kEpTNp%Z#< zt3EFgpYGdrI6*x{rmUl6ObupUEZXw>u@uD@MGlP5-iK5_^^1TE zjMWJQO-^l;CkiwRIhG`diS%D=xW`Sdrl_?HP-oNa^GH0e6NB}kbKi2VQ}N23*T12r zr!5dQwAQZsY^iSvJ0-+Vywb~3fe@8nD2J!*~(R?1|~&uU3nEOUVYu@Y>shmvbSp-S>5$>EN zzh^TVaJrhiQqg2KWDlg_EiQ_Fhv7puL|r5ir&*I`3o9)-vfEU z){Xwnmo44xztl`SEZG^UNp~uY3fS`DiB;?PCthz!vjjWrd|;*)vlgR=lZrohNPHUC zTFSjTdk?DU;Nd)(E9_phwyl>-ZeCt>u!bP^G>=DKLM~qCchrx_FH_GUXxe3HGv$Ax z(7)F2XD8?PlA8GHday3L4*ubPVb%Y6YhS_dWh?55kk9`hgh(R1KV`=G-VzeC=*1Y5 z!6qD&NdwW%4Rpg&*kR1e-IH?T-jIdGAwo0TS5so7<>;b2w~9*7R|q2Pg_Pu#4< z_qlZ{pU<95ipexLILk!c-FtzPF;KZ|O-brIcFH=ils4`%bcy^etp9rl3-$jD!0k72 zr1<@Jl>OJr{}OV`cTk}Bkh=9_T$wP9!Og#a#;nMfnzYuY4HQi3b~DcB)0S24-GRY( zWU#k@L*?OE&r~^FpKBd#%%P>IL~9rLQzp@4s`<*h{SlJMIH#J zlWNmLL6=`Y4|)In@sQrUJF@RP!|_=AhgB%{|KG=YKi^oZM4xh^)PU}x zko7&6smv{DRD<(&`_UTb%k0-AVG6g`;x&#n|7BtR``(MP{$Y~xpB9Oh{U-s{HvcW4 zom5(4ZcUN=zb#j6A;=KIG3tM6`X6M^2LIKQ4#5Vo&6h`xYmiq6)|8ECYb)Ap`BcW39 zjOPD|`2UIcpX&1e&nb>m^A&Az*_~0X`ZS=L{W_w5yN9>u(rU6SY=5%MfYZE*)%$Gd zbbE3evkj868ZV+fo;C@lugvajEq)+8iBlBavRpqA=)66#nf7^O{&S!gI*t>*bv~mj z(HC?|mo+#&)P8()H)&y?%}gy0wTKyuOKAC2TA9AItU`!7M4^TXc~%+WgmLsK2h*uwmt2sI^+91L6?jhlR)y&UTEdgXyJdPR?mPGTTE3a<)yHenFOS-1bi8cGxxFXeH|Kb-HNy4XHS#B)_Cjqk2F7Nm_9>6J#!P#IZ@wPZ zeEU|dII>qB=b|IR1M?W~S})3hE6l!3JH8CBD)cca`3U~=UPzqXlvTPH$Q~YUeyr(!Vy#r7~BNS&Z99i%kMXd@XAo@3HsJHeTFQ*1a^slyR3!jMXL{ zl~>|EUlgF^9LVp|=a^=fq_uXk)fZ>fvefj{zWAtVK}%ov&x~L{H>cBJOH_`*I|jke z@0;N(9@X0r9}UdRh|nY|m35)$r_xA{k0u)otaZ90&XNwVov6z>KHN|K3r=5*bgQF< z3ib`^%0Ao(I(PX`?VZgxU$0Z6IsZKn{sm)y-u`X$&w~E9!xC%RhN;K`jqU4Hp@QIf zZ;4V}J~Pf#+vdvlD1~h!T^vz^lb1%pv;wGr*CccSbFSOqnHn4Ny8@*ujbZb(A`O$; zGO3GVct@pKUq_@^Es2=(EdO(>nU7VSL!pS{_K#~d)|-{(ri~Hy$ueUiEZ;cH)UwpoudC1MB zl5(P<-SQ!@*CKuxq1Mqaaolt_>5;(5M}p<;wTDN69^7_gw$Rj~)iilHE*Ws!vW(yS^kxyAhCgJbNM(lgwk;{9r?6#35*d^BZciz}s!sLl+ zzL0xOm~(KG@A`^hOM0rW2WiP>n*n{0)K=pQ%EgDDq>h8$6Msgn1zipP2P zqkCGsF?L5;wq2OK8!TUQxl{VFfi9)7!Ac>D65Se6^{99*ork(l;dd>&l7;Q4+Tu@Y zijVij(S$V}iB+64v_rD#lP|6n)zidqC_YKy*|(+%v79OG&eW1NI?Y>FJ?l}%dRr~O z>rgbpZ#z+JB)rq4E*H_qEpv@IeJZ=aRW`Fbm@4{{UtG*KH-PT8U<2#W1*_W#r zA8aY`smtNx#NAxA)DNxQhZ9f^M8ET?eyoV8z-izG&GA;LgchcyxNl#a+;kdc^mgp3QF+QPU4nD&q2r$mBB}!L zr>>)q^TYL37}<#Yz!Rz1HRhU9$Ze{Sf#p`Pfy?}xbW`1KZ{Ac|*w3s^O2_QNpQTzx z?uE0CKb7(oy-_+A!6(J)Eoph%lf}P^4Xg}`9T=4#rX|;pe}wJnWVd8hZPBa{!DQDG zZKJ>V*ed8t|E}+7;$QSH_5b$#rgpC?w6FAQJT$Z`KkB$0{Lb&t z0tpXE9_K(e+VEa)V7Y5M-8!8h4t}chzVZdh1CjTb)~eMbiGmp%j4d*7CcJ>gCc}FB z0d1J{D}b_}nXf*N_-#0T7Tdk2_94P?jCp*PQMhWDbyAr^B9j ziMT7|p2*RALl++o;8e1?1L<1Nk1`H^vuCeWBP3r6$6gv5xDv6aLY=T5E8xT~>fp9u zKG7Wh&IkUAx-?{o0RC2%*qkayr5QZSxW|WfxjvvrV+b>q zr#U?27@y1jkRtjt*~_HOUp7?g{i)fkV52h`afE{_DZ|H#D|r z+1GFU_CO~U$lkAVv|*$9mS))%6^}mHkWrkA_>KlDxo@VSXB_LG4(ZuAl{*Q*d4TEy z-HqDLrC-H{QBRo1Eb5%4UD9(`hd}$zpgX&hBy4a;aLQ-|y+|N+ejs1iSC;xAd50D9 zOiK)l6kL3Bjx+8l#K>2cHi?eKmss-@!fX#BQ<~ZMC92A;(>@EA6$@cF5S^LrTX_o7*FC=WOMtH?Jx=G&Wj?lIreztn! zu{=WUXhi;4Nz>4I1$MtqYv@`geI@d1GS-oVma}^*f7k$%-RDUDoz(kk0+?sjv!#lt zVXb3Ep{}>FX)2aiiTN!Y^zuX6ik`VrTds#9n{_MuKNDMxO-cl0#?GFI%`my|G$`gn z2X*p)-tfGUzjV9p_-;Qt&mB z4^ZD_v^Uy7U^7H)Ia@9CGAYeOU0z{QOTxAo@2 zIZ-c1(nr+8+HI!?B`o^+NaU4re-TzN{fIzH*%0%I(FMqzj~%wSlwVzMG3m~$(C zJ!hUz2GiBf6rlCs6<~n1cK2s;=@tgOzCH{Z0Q&q!&9GgG<)r8DqMgN{2 z8{^da{UZ!e`foVu+#n;7)-$Glv|M=j-fLeXR0>RijgJD|#9Z z5WTtc4)6N~0JmOB?H#Y1&dC*j_JjLjv-?r!tUT2#5RZ#o)N6C`k(OfyqB(eX;QJ%y zJv`83Nz7{1#@6V5bjxoWUM+k$5gJoTnz)HbQ65>3n3(#FN|EFSW*xt)HMblE*l636G+cA9J?eV{11tuMs zIHW2QQZ5~QZ+*y!f^>UM;H5F*yjjr6&52B0Yt8!`lN42(BM!33GiUNVB&OqL4oxb7 z(|ItHA-q6fMBpK+2k3o-M}IFhS(6-n!`@Ea5WhF~bh+|?j7i+Aw;H-`31ddY4y}cp zpe@y4DJj_iC(pAf-Ujk_T2Hb^RU{-Q)KX+Nll@)-pZPMAN>#_}zoaYV@uHBVL(2xR z0%ZZ;6(0c%fx;{E6UF9e{B4jaNOlny7vPu8DBY2*Lah3ShO&*ZHxj_~iasM8C~i+X zKnacTI!dJOz>Y(;;q5Xu?AN(s=UIG#q}>hoS;Y_jT?V8|_rl~({b(S3i-V07fK`I| zaFqk?S8ML5kfVP%SL(1Pi^)%eiPT<7;JjogK`l4L(wcdld=GxL7~#OOH;QE#=}emu z;)xaOp@$aSJ0`gQR8pDgiG8tWhHVym20QFQIfHE)i(Ev+J%NM1C+rN_-k0l5d~v{Cpt4 zBN&d|cTD|cR74K7+akqKv6L1JfYZ|#9n8iHjapH|(svx{_?JpIVe}uZZ>#qArylbn z*WFZuou&u zJ<^9OWse6K%x=71w0sHr>B4-bx?9+-*`}J3fY%}lsqMQScRic(krHVdB(fu8yx+ZH zIyUGV;~Nak#(J5pl6MVy3aV5?0hXg(-puOz@qfb{*U#|riF^|p3`1Im)#zXY7&nqn z0Lphn!F!G({stErEkq1a)R!Lda$oDcy>uhNwh#ytk zDFDB>m_jO@k}c=MGw`@e@<#=i*u7x)AtL|gsqmK~!|Q-&QW}5oaz4#t@exA%rmh!R zRC+4(SG4xOjLB7p03?~7MK;A7y17^jOkW%bBWEmZ&JnknHx;`TJzpe0m0)`7f=J>W zEvzKSHvjxYSO?Xk+t^Lhp#fbAGuH^-#}@sx4Bfx_aPGPR8WIA}sVrhdd&DE_6(16t zIpW)#RIsOqC8aRA(Z&yvjSsz>N4U?s8MHP@Kbrg~o+q(0VHWRZ)5Y%835z{*xe>|l zuJ|TGbUYS(cMasn_#1Zc6N^~ytSlA0ueUuBTB|sOe(O>fPH$&30>5x3gP>x!ZmSzp zcE>YA-cB0Wgo%o-$XDenV4JFBLYdw_57 z`lBpJ>~*l+FJNJ94PwG(lDKa2ivk zsKRohBqf;^KToR4gipN}eSO5y5mA<-2FQ2$T^I97oBvN=PTwo- z@^v?pS?E_h3ru|Seu&)iJXEO_{{z6}K$HmXYp7*pueQ<9Z3|L(dA`k!?!rMc8p15a zvjjst(Xgma*^y!=GK4fpr(Bw>>HFaJe%&179M|2h9?V&x`Xy#L%PHNKL%mUbh00}a z3S?fm@*Y{Uo}@9`mY^pskIy$FgcltPY!_v1Pv?-^;V?%s)C&r z0S~&AYRj17kJow?JdCT%(>>X$+YjH``@O?Q%t$<<{yj5td*!Gc5q7(ZgKTq81VDX1 z{+>Pw)WVSy(!h{s_c3ky>DhCYW{L(BbCOmfXe5~maGAEEi3SOMgOP6(aX_lB_VrjN z)2{mxE8F_{4Y*8<$mriAn5^T$ud3WbAd7>qhIoq&+C%t!UB6dV$Y?mex+l);gwXzq zTzW6^USuyL^75;-=oj=;S)jRcnX+3byC07GiVa}XdW88_up8p92Ss5& zhbco{ZA5+p*FbN{eWwb@A*rcs(nZC->_;GnrGg7q-bM8-#)~xX-b32+Zw}4Rkt1HY-%7#WnA3T-qMdm5Lnx;3OEv|j0=ST)RIOU4FQ{COi@ICq| z`=C^X>Ta4B-mI|vHK}dkXW#p}Kn_Ku>fOLV&bz)lE~Qg-z_P`XhPQj^0JaS|BrS<{ zQnn?K&vU2ME`ZQJ3+uV)#n0@u2eX{>M3J6IKVOkm999*P->u7CuW3i(SKKb5nI1+? zNv`FXe(+@GO&JH^0(0Gde8Hv$EkTts)Mm%sB-4_c4C$UfZ{Gj}vpqX6#W12g#fL1{Y8P7_gv zkq7S6IIpwqrZjd>#7}#q z$70zAJ7T$|nf;D{=eR*RQcBX7Dw5Y+qL!``{C(8;URYhA6WDSg^-2(Ewk`%CJ$TY{ z(n;Mr-WUR?*#bl5VOxoQMXqA6P|8Rp5KL{y2pel8o`2{UsYRb#FuBmfEZP+VYfg}O zVwh@rYqX+J0|=4odRCaopKvh_h_E_dJL*HoGvdzTTPrcXkN~}80kDCXTC!aTv|rD$ z_-qj!=Zp4N#7_DLhJEnxRUaXb2hfPW+N3>>g6w4A!{oY+YFbrZM|?j%x^F-KS|9TS z91)^&bHbK;k7nDpaeE2knmw;HN%I|7hL(lVeR*8NE8)48`f&mse3w0=PA4FT(PM|!rb&mU z+ag7afT-powDxNiuT5+Vf*CGoU&6{e!-_r`&K|O05RlSmzK7UmpxpE;dn4uDzM8;5 z6Zedr2R4%Hz})GaB%SK6dn~<9fa;AqleQ^%5-4rZteB2hkY1`=hriP8Lo50jOLv(@ zAvOONI3l5tEYD#IQe87ovZ}O?aPJ?NLh!Xjws1b5;Pa6+T4xQ9^SQa4tKhy_4dPr* zcrA`WC*L^8adj-*bVO8eO*J{)70!?R-ly+Sv1@upPM!bz_F{DRKJo@-bjxup>i(qI z?UnfC$C9g+bi4Q!^I$+m-+9k=>?EUY1KV?(8P=<9JMRZZ<|S7?t+!TQx9PDy0?l&T zW&GE9t+TY-opwIXrsAheElWOxf8%;@&|TKZ*pmMDzbpIrJD~dh9|6_8e-lu(MMdFo zwYPti5#a@;iRX4Yq=Y`;bK0ylvwuWk5sqUK8Mo%PO$c$4(SAw|_Elh#@x_!@O>xp^72=QXD5z!Mp)y%k2ue=k;9Ts9C%jpd(1l@?gYp8&xWzOeQwaV^Hl4- zhdbuF=Qw-vAfl7HxeL_*CvA(axiSh6j~vnsLOx$~dFz1*hwf5Rn`gxS+4t7&eyD;E zAcgSfb(FeFaxm=|L+8fhU%C0?c+5(O3|7}==tRPN^bb&Y4woG|6o^NDVH}>n%=z42L%fvF4#L2=sE9R;%~i6yCCC5;n$rj~w+5{C0aQ;ebr)=6QSfDvmhb zD!z5-mxnNmcMAyIa`s6{O(qEd7mVQElcAUTkw29{!;gHQ4vyw?^6=a>W?DSL@9(ys z2XCi>=?5gR=76i}`<9$o4QoJ_V?bO#vX`8#3fc(Fm5QIwRn%y;a`L(u5+Na{G?RPx=RW1+7SXDvRa@+}<_Q z7ggwOh~<``V^U84REl&fPPvl%v$KzQT~j6?L3cwYJ83EXI!pLnHX&qFwAzk(F4evt zm${4fd5ql7f*fI*87ea<*C zkn<58)5a)#Lk^=v`a9im)!wqul!sO0K7QMqau(&udBD7T5ZX7` z=ZhFijj84@EbP77wiM`Kyg^Ukvw+BL63M(3UPP3>>`);VU5_U#%(&Wc;FdIS>@ zfR2+VuJgwhPS2F3dsbVDw^fYwpO@;@xy(L4v;(o(%PZaa2;2u8bWfA4R@9#{uDXl- zUR?jfh<~|J)mAg}@io&PpoV`-WG}^9(^G9X$-Nf`l}1HBM9w`$;hGM1+JqOPcU`Ti zFMUn+y_q;}o{Rio{Prp$IXA&48Wk~VP*yqfq~REgRzM|lD8ne9%p~olA>tLgABg~3 z`~aap(Mo(*+;*hx4apnb^Y~?diTC;T&Ej-HRKNSwuNM;b1xbI0Ia={?Ws39Qrh0!B ze*Cxm`@bHH^`87AejN3G$B(t8G+zTVzFYI1aEhQ7!?9;4E%VQQ)7uoK)Xdb{mIk8c zSe$Ufe=-Z%tVa2?u)HJ!WBHt@-F3PIaY#S%CF*`IG`wv204mY`D0XGp-jSJimQ^R9 z`#!#0CF?!3UEMsj$xzs!6pMeT59ZIDZg@J?i#XG@lI{=On`E0cts{)O1o|MSt4kYn z;3tO+?0{nRMwj#AvS7LmHisVT@k-ffjjNEVdl^p#Us@&HtHChJXHVOb`BuVRfZy3w3SZ^GvRlTrZI{O&xJCE3pqazmf5(aWKg zK?1^B8YD;v(fim)4&o@VbhHuSRtdOs{b}I40Y|RxNjo* zGLdBsNG#GoeJ{9$iQZT6>mR*t_ffgUVXagwCVEvH;kMY55Q5cS2`p}){IW%t{r;|V zj^hK!kpvxat`8O~8+|$3Hy+Z@@V-+@^T`#Qom?4**h_EFC*_G#OCsOUYIfs1r@P3; z^M+A&s7=b7dOQ6+fG!YkL6zP^M;aWN#m?aKUbJ{a^$lHK2~eh0mEP-x&*; zEahx_W5^k4Sx)SF;BlqMqur7)Nx%YfTE8kPgXWTUV!gH?24}G)%chwY#UidJT5hrge31?CLcGn#f^pj1lWr}` zc!7Dj_({JcaYZ!^;9spc!vNz`-a;(rVeNi9j8M8Sb&nOFkC-cHRB+fx6!7QWCy2FC zZiW4PQ{WPR1XkD@Gr=n|;=zResg}mYWh)_n`yN5)3s}=FQH8-V!?5IvTfBiQDIz2v ztNe*6@se)DVeWG5;Po=co9Wy(RUtm$#JjX=1F-I>pZ5lDk`GAx_8i0bGvc04{l&c7 zn7Aoxxy#7>a#NmOpgP|qKpyAJYjNr3{xA+SAG}9J?6vVoV)dnmgJ^NVrIJsxfD?t& zc@?9P#$nwo(nR^S zb^O@v&8SUgDzew;dM9|ZPGK1>>!3Y=D>EvrEQVeFF}z*rROH2_my0n&$1Etr;p)|k zL5FA?Rz3>(_y%HerOWGXqxpNO8!=WR?8925V+l^*C4(2a$iyWKN#}1*IG1f_EU;C@ zU%?K-9&%oQ+fmGA?#J|GufCmA`#br06*>aa5utgb>g~K`%SJ>( zcv-{}eisViwl_?kV`M|`r(aNVIJE&v32PG$_x zkEHH2AT{Tojp)Kp19*WrkRsc@*JuLHwSMfW_wY2Z49?OL4F>&ZFN$blK^SC{ zwnYF1_I%h15IrQpJ@y8W$f%IsU9R0kKeAtzdIm?8R{8rT;4RTT*S%>utY-`j!9s8ADM#d2F#PkV=9V|OIs<462p`qMEkx% zuC|z`z3=IXeGWm~ceSHG4tIPs*fuVrIw@kCa)ukAxm2xh-!07u2?I_51@r&B=i!UJ zIfH>^oX5m@8d9;Je@{Du79m+Ps-0+ZvkMD_Pa?*y`AzRGipq>h+A}FG5G~$^3YWQ` zj7t|m%myd6Lrgg`IG9*q-VU*L(Tuh*-(0a;EBbvL`B2a7l0u`+rVVpnL;J5?5zpup zl*@Dsyju#*aX;c5^t;$}1fB-Q&#QV`Qvl&V9HeqpuBDytvd*#wV=5p6W%WxsCg0~I zLC^B9^mi#z{ZPPik%pvaD-Wd$!d2dA=V$l&75MpCvU_e7Z2tUCf#4G3xhH7$IvJZa zl_$P!iA8ckdrmdOVhBGyI_(Ch;Au0^|7uhHiA?XqeB0&aDY?e}NW}#ZeviH{M$Mq3 za;?v_^=!}6-%3#B7w!;?Jcn<|U83$;_dE8XO6%!ReEVim3wfvaa(JMF?A?b{L@< zX~r-9*}G_muxLi!=nD99=NSGK@4_ zxkab@^+?q%!LpNTvGr`^?xyedIyVTDfOp+7HNdD>JYPqQ$I9a&$T zM6Xlok3qvv>4*@MDsoXIQBoH#cVZBeP5_GA>tS5E9__N=>M@4+U@kd(x^y>0q){)t|H$h7gX-7Th1AvyS*OIpGtn>d*U!tLjf z%0hp8eS1~(PCr8(oW|(>!FQQ~4#lM3cw5EWImFp-2Zh}>_Ij+B)GtZh?!&7_;PET_ z79!YER*|$jJK2r?Jp9kN*Fn_rFr-$7O~0!90ZV6;`+dv`}*iO zU$MwyTyVSE18Py<-#fnQj}{pg2^M7>uvrg%Rc?-bY$K)Y5bMwA$s~ok);7A+9Q@zP za39%^Yrp&O!-@WHp+X%?1)g=yI4rvl)(HkNs`tpd>sLPg0SFeRE>(My-aZKjtBfUq}4o|7>}gVtzH$Tshg$Q5K`Gx-Sld5il!e14ZP5;)XI$o zBMi&@(3Ykz}Wfji|u~!mW%CX|r;H zLkH9N$-I}U-A4AS9n|2yNFhQJ{EF%bz=pbdxkSPt5RFN!O<>nY%+866XAZ2*8AUzH z0|ExZwqb2Lh)K>CT(~)O!hQ+-1U44N*^#+w3ki&5;$<07mV3gxvrm1*DYJpX_(J77j2OUoF_S15?Ht{q8C=FDaT*}Zn=|x%d zz=?C@yk9Rc|2d>e%fDj0(0Y5N04Wb_Da4G06KK^H6oSQJITo~6GikpWwTWrBm33X# zs-e;ly6K)=5kU0vq1&GEPWIPL4LSu~eR~DKH+g$oGzpIuyiuELr;5vU5%S{(A3+BF zye1)$7?2uFfitVOxkb1+F(W!B@#Kgih8_$2&}Mex#D=yZlkOH4o&r|t#ji3%l8A+G zC>BF^r`oEK6geCpaP}n?Wn>S7i=#Lj6q|%>0w&!Z46JgRb0c{$6DfvXR?HaM=fP7W z^1@G zw=FTjO1DjkfyHRk^i68*S+eV1d>xMOl6sh>!10nyCLRlSIJY}EA{&;;)&mg?t@$2jTk*|b3M{|^7CDx9M2eIk0@P~)7}^vx7px#&fl z@3nnq2S3+vi z{p(n5{s2j)d+bLsibz7xykA-Fx98!F(2~hX0+IK<>AxdzQJ=jURVb2cT%AW%yx-@6 zD*2O$qGF9I{VmcG_*Kl5@b^e-08ir6(g-r;WQ|(4?DbFL#sq}UO_>>nD*wb@4!0QG zrdcId>sG4SeV7p9+(Uu755lf8TKp_Jb5hdX*<#a*fd1$_$?c0*q{I>S`tu>!Qo9}t zsE^%D%ZuCw5NT2w1Y}ct+`Pf>krLW%LzhNJ!cFK98LD*qDWy6Z^nQiF!7sfI5$&xw zw`8egFAPsR@iP7U+BF=9iz`vkT+Hu5L3~j8WIQ# zV{6R_-IjTYlVx?23b~;I=%8c4#Xe6`bnJ#C;=;O}Yq#$AP)H+i-;l5kSb5HBSa23^^vTK7=Z=Gc&p%+fAe2!VY z44(fo?Z&I`d@1mJfFAD~kH~;jGH*FsC4w-Ll>}&}70izO4wC*Iz738LVXVjH@ER^i zUE3jv48555;q$Q zl`ARyZe~u}YaM6W9F|g7%q_?CmQ&QH2_=l^G*shXi0v+Q3n^A7-$o!*L{Wsz6D!*r z^I<)(w6d)$|(`v$x_7rVS+>EQQz2Vst? z2p*MTDQnSbX$h@Q>9{@b=C!DGXPH`H>Pgf-#vKb~deuri}+!|Ty z96>r%NHx?ykqjs0`!Y?UyjkN07)w4i7DIT1+hV`La^0>x)D>}|K_YF!$KRH@ab?Cy zwc4itW4kOH?n25ezw=k;hY{P0_%&gnO|Ok4cv<>{3Jx(3!q>s-ZO@{Q>Pih(jkYJb zhYaioH@bj*RwpIgqJXLww$s1UmEuWNi9Q?hIu)=N|;8>ef#hfgdz7nL2W6 z>$>d`D3wt@bj&_PRf>QdJY94yg+ z3&$7I;LoXHsgKqrGvF;p6|v4u*T>SEeu|q!DQ?hr z@eP&4`-qlI-4osG4>?aL{Y;aDd|zJ7`rh(5O=nv!sKN*40UX$UKT>W&VW{JQMFMMrC2mMnD)9 zQxNK;I{^nH&D=~07gNft$68fX_9Y6z$5eoxo4{&c>K!H{)S#86=Gc70+dx@0;7(yH`6{}Adrc`5M4 z0ZtkrTB;TjInD+Y#{?haC3)76S9(8b`u^-Jup9XqZ#W96d`l3fP)zHJVRhOb<9eOw z5wA4WVScv)$baJ?$8()~u)#EmGP|!gS-0B2u%X%C#2)**2(}`n0ReTt1R;5Br^S4g z+mc5t+>wtMMygSpPhrNgLYPFm5CcuwOPF4}XDb)0>>~&xo%YjJ%V6n|JTCGIS_CA5x6`8+Q7<6I6jzhJAMyd8+gcd1thA3D z(vZ_46Z4^~Dm2=C?jlUXwR0>5dFkqJ(nJ-zbt*R>+XgCS2!#oIaekEJPotO`{?6R^ zVblJDJj|x~@Q8u1;lk~>+BkLI4kX-OL=L9Uqbbi!gbdPZ=Zt=0O|jB*@vW(_6=Rb? zUc=!1GCBBy^n59B6@LmS+iJRaZn&qA>n;Bh)av*wCQC0Mu?eTuChK(@G0wi27N z(p=7sKz#9SY2%{oRWkTdro67_>W`SM@h{BTVy0(n4(#jo>^*Y&Z;_*@+pFcS&a5*M zc@y0tn_gqC8F14%SP7hBRX(4ZIUU!><+`S{pF9D_PvqFQ+STh$4zsvE%&xiZfe#RO zQ(1Kh)D;2mF*PiFl{?0Yft61q-fz$tpZ#1h*&m=oAs_lJBkGD6`>LK2WA}=}+9`e z((?1pDxdnbFU0A$aXNeNk1dF2hVA|Q?$#A5+j~hf-LBmLUcp6_;5e!mr}OwT#lRV( zgV7JV(^Pox(!r;EAU;^5r8D=8EpI~q?576N$EEuHT%^Fq z`S3)`Ss0WlJ=SH%uWVjS-${Bmg%#EEhu%mL3+faTz;T`B!@b_m1jgzIT{1a;e8!JF zVjwtN{1{a;-e`*?FYCTrafAWp&L(_sd(0YX`$Wrp>mz*0{+#Fe*`fEH(ckz%FvG$B zL&^F5mcczA2I)wJlY&78p;uT;@-uY}k!l)y18`$$a5)dpg0uzX&oM`=E|>q`4FfHaMVV4`-24e2Gn#yQS%%I z1V;G$I8+r5cWpnKX!wMnEF=HHL5rn-qFw$n{%l52?SmmICJ1vHY+r__q$^DO1Z=@D1;q0zjNIl61Dj)eyN(ytv*m|4pRtyLUS> z59ARdbNWEqbuVw&faao&q-uclaoc$c{ZT{b4dDgfV5oRL$4)DwT!9s(6FqqMB^k85 z*nnJzQ5*-_gRl@w-R^nfwD*u@WVHLWfLQU6S@>UINyAvF%$to5o~rG+3V-3&E*##b z?~&Dquzo=_gh!Ku^u;(xu9&$sy$oGn(=wZ%8P`2!)MfUo?X=7RyG zA6&+HLSFu{5DK^&*g)3Up)Bf+36HcVOGCg2(h@m*-kqC?aq4lIC5P|cOX8@s4f##R zg(CWJON&;BvZ2EV>B5n`FoIG-=10+PPdN`6pd%zk2F>xaR|~K)cZZ*<3{YfOk*w3Q zb@y7$N%C6vtsqqjiNqjF0LCS8<1IAA=d-LW3?;c}ne=?_gBe_NM14WC#(v`ZZNFrh z`mHB>))LIeE9zr(7+^d>{}qM!>lrokxGHT&F-~v8I6aq8`^{+~^(&v1L-5PHy(_VH z#krgg%VA-f!z!eZdH`z3CS`z2!RTiix}njgUlo!X-}5<86nDKw z=k$$M?tl+)xKqhwJXT0j_ob9%_Cv5|XnSyeDq?HNG|aGkAjOxNT)YUm?5|>04Nb7! zp+nSSm*RZVqtY1AN_kAjj=1pJXgKvYRK;}pU>F!ZtB-R`(N^Hfe!EzOs;V$e1z3XM zvYnvi88OesJkI){(A}Y0;!wW+!dx#k%oLB&^$w3?tDJ8&TaDx0QnrTa($GGe&(Im> zaJ)}N+KMtN!0(K1Sx(A+Q*`uNOZCE#YH^5J&43agRqN*21`U|DU#S1MF8^GV;lmOL zUNYU2P8BzhU2ue575BZ^PBp-5Hd|9wu$1pCIXW?y(iOxkF-NN$^1c3Xnx`Sh)gA2h zX`e-7u?)o|{7d`nWtPzVK#9f8A~lj6zUL`#Cy}?$46~Otg!AzJ7!O*vq-P zbw8TV-8c)~e*P$aVj5;(=xt!iN66d@phihA(gIZ%cETtfd*C5HmgLf79(8Zpru6<2 ziGVkryJTS68E;Ly_LyT+p&EMF=a?f$eB<#i1(*O6mf!2n{1w92+?C1 z)g@&CqY1uk#Kw1LGEiu9+)&}+CqT?1`sswilyQn#@A7hhEq9tny0l#J!}T!k;~@b*E5w71j(1LTU` zHx7od7tIA&G@M(sHkSSMC)#iVcD3+ud3%2L2rSqGIF(!rC2v;rHHvIzdkV($^cZ;S z!AM{P7$umuAWM5ESD44)AS~R8U?clMSeC3e#1wSngGPd3X=E6VX2|>q!r<$7!}N-9 zicCz6j;qE&-E+p(pY3G@3e8qvk+?L|u&t5W84A&z-g;__g6)KzqT%I(`jI%3DGfvF z?CkO%2cekZLGU}m$HB3iM0T%QGcgevyP~SdkSAKSz9s9@@(>EdEx!`~VsRv6W#CUo zp;&OcVFrFH{A$>=C%R8mwQ>CiFY31>3_wYQpCv6pF!-Ezut*X%hwY%mnG{j>=85uh-h1zA{A-y)gW7Y$;McMn5m1sJ7hgR(1#^EK%7SQvwd`1}s3Gun z7*(6tJn2fzkZ22(SBvpZNepyAqoM(M(Z=h%j4nDML!~WJZ=}oR1zC48`i|n7z#qYJ zC<`RGVMKf0l3{jVL)8)Inn@nzM4r7dq6z0U8bK3SP8hXh5Wp==+4nvuX_{5{Z^gja zRh!pAEl%dM^&xK6t}u(3>|og{v-j`Qf4?ALoi{AMOYsQ(yMS8b96d67e37}_;|-JxD(JW;w*HSxn1&JcL1~lQy!xy3ph19Xj**y-Y0}wQ-arv8d-x z9KXKQbq`_y%o1zLGx;TIAHW8YxsOkoPuX~ zRgZ#F9VnSW&E98IY->NNq&%QLAmcSNtJw59`}hJn%~L|_Ec2oe=9BId0Z<09M5szp zmP83=BTzqYUst#GA$X~dcTNoXCJGhJ#79(*^sMhHA!=V|aptMO7;?*(y*ZC{Q43e} zmd33OSEx~%H$5tMNYg(CmU zkI&1p;A5dZmx(z+7v}~;)UXqzEEsx zS&aPg!uKrLOlj{kaOE9|O}k#XQ5QC$;VRf)!F7RO19il%kPS!#D8}v;g+M#&Q5n$r z3YX3K5Ok!bdxGf17kc7PhXleQ4#TMPJ67=IDSpvpw77)SVRvG-q>hgrJs<@5lqM!a zq#0T|Sn|)+FwEdXh!8mFA)at(t@l~AMn)?^XdZ|e4tIS%BJm+cYBHZQQdOBe-Xl@H zMYD@<$Mj8v?T)1v7-Dcv!L*GRO#g;+yGJ`g$jw23?U#w2ZL$P21-tlqX^UgZWIdU$t%Tpam3wdTpuP;+&NjkS zi-Z9bk?X;n4GFnCimzAo##*L1gt!tcBY)4-gYg5tS8fh7k1rF1imx^c>l||kvo1?6 zBrE`xOVjFt*N~V3zuaU!$=wK!$6n-5CIMa83$(cdSs-UQNZglmE%<_W8P{D=2tUeV zJdY%O>!f6GW!3{ zC8T0qW4_av%gjx@1nQ!WGj;^0Ek)HBaE^U58?;i<9WA*zn`H~_m73WxEhzL|hZUXV z7in})HI!;& ze6S1|Uq?;ivoAIs#`lAY=`Kv;S8m(9{Baax&jv~y06Bd!U3$oGvNgUK27TIMnhcbR zhXJMIjV%FqX~r#c2}KcjiO30Cb6~|!j@VTOoXrb0{Q^SgHgJUi^ro#FJW(~OpdX#$7(f@p*>ArKISuy*IO z#qZvd?XgSj$Sb7)L1C9#SOFTt&7So&1s;Yxyg+p2PEw;mqW!D@lLHs}#Q^rU6N9Wf z1{=Lr3U5Jwi#MT>*UZexWY2Nu!6GPz!LJ&5wfodwVc8aH94aX&SYAQhGU_H>&Qi9Mg_iZ{(DsUMl!tTC%D zUSe>62=Ae!f~PSXf)U~kO&Z}jOmX5Dg(a9bj_f>4LpZ>;^m#P)@w1qvw&1uXA+uiM z(2N#)giJwdzx9lMBW!q#G`J}yMOrLdWsK%T}r>Nc75!>XMQzI-cXc1hr>{ zY+>nl@RagHQ8e~ID^U`7Z!%|4@$^gfQCDbUL;Kb(AIov-ol7M&dySW{!C=kBkA+~~ zj!8jKA`Q{R{v#(Pv77L_ZBA=Hm!nFZJ@gRxm$xSY3~b9ogw>uHG20u7q5+l-27?+E zgLQZso=GLce&}+oBmF=Vgg!MB(T_fXtC1e!m^!=tRUabuuVg-l%a*L};Iw7CF3rS~ z?imJ0R!-hbSQ8#4yA5o58K@)70Lu+B5hw8nmHYkau85{a$msUS9SlSvxrDstY_HyP zwdMiE71>|cPXF8$0(ewlc&Vr8U&2B)We9vK1N9uKuJ_X$1y>L{dx(ggbyip}NcSn;TFWFFT4he*CsYrtSK?f7vT zvPpD4@g^ouU$hYqILPsbRH2sSOu_1lNxQea;nT54PZW|2JF(q(>>tVPnRwp5Z!?R_ zp9NDdn87D~;)Y)zMzM~QF(Ow6wd<~yWY(bohcU?Mc17`573rR*d}n-@`i+mAIwdpS zC&1y!%JAddt7w@9?)UOldWC9tl2>xXFQU#bv?TSn)dV4#^Xx@V4Wl=%ZB$!a3$tS> zo|gU3Z`ORbTnk;`bm5xBgv3AD&^>w>cl4xDclqVx&8TYvR}FBw1qNi=E*IfjkhOAu zYZ9df!J{K9VasoE-;5k1nW7MnNk#m1y5D5v4s!PCC=)S8Zd=naFM%4BB#tu`3ZuTm z^RG>Idw=~x{F!s>4G}6ZL>}Wicu&^WPU_^d*C2}5Q~N4~x$fIfotBwLk(Op^$Mlrm zk)|(Z${&o_JdqUA(3hHVxRfGbjA&)_wrjZT0;Vpox0>TD)Xu3xi|{ps`HhSls&sl~ zHVO8t=NaLf#M|axH@7tq(cNJR4pB=E81b@*f1ugmOdJ4ZtjeD*3ZB#jWv5WYJfA^nX zx^#cGV5uYg6+QLzuk}7{<-TsVX?{Q2OX&*yHy39GE)E=-5CgRK{&yu=_g{B}(YpVt zQKK>#@d5qK#e04$Q8NMZwLkX)|6dXRr&#a*idYR8$9hk){{K>oLGTEe?p&r{jY4;l zk59KwUj2+B{eKxne&+}NW4K?1|H)iXc-n(4B2mY-EytM$JO)Mb%((YMH_xs93WWb} zrg=hOm>c+MO~0xr@N%wik8b|BpN@N$g8rw;zCQ=${f)!;C*BH0vB}WPCju>CZM<#& z=P1+)8DI=Ru^w(M+0@_o6fitmK&B#-{3e}B zQL^F1U;917L^?wj_QsL>UWMh~dKIQKf!nC;eswPTH{D%SX~3gBq@|qy{KshWud5dK zK4QU7FtB)&ep!CVcmFJYyUM_AOq-NkrT>k%9^Nkj@}o%Gzv=3ocnt`zm$@8}>C^?u z{j)T=4-8)~YrcZn$Xe z_?Z2*xYFQ&N7IIRx1#emJ2MrZ0O1|WSOYTU^l87>onk$DLl&pnr!GR@{#sm$Fu9XyOWjit@b1x^VIe4C139H%u+3_ND*+kyfyAl_(5Hsm4HMJ0l^@- zpHoCw+6VW{hKREc~~OFSms=H%F`k?za4%tf!P#D3mOQ$o`ZhKN$<{nXO^0WBWq!-PX?5lYWC_9IQduSZrTGm&(9 z^p-Rz3ppy;@-l572`EjvF6Qxi`hA?Iii?ZgOv6G$$ENFcRrp5E-^#=>NuBLXF2$(L z(~Vp*2pGsA0_UcGqNsLQ8<>|FImfo`Ht^LOI+aX31KZZt`)E`HE$)J*HBN_(j>$ZZ zV;3pWT^D=UzNzD=#SeayBpD2xsCN^7B60w<;w2^w5;;~h%$6@w-iw=h>ub!`jg9Gt zB-o7YPnb6Dp6Py3WU5aU`fY80F7Us9yk`(*8L0uztn`ij;aSTXWsaNHuwAQCb33Laa)9O?!!*9;y7D&(lQ=M$Sxy@ zg-Fx81@!B3_|Ip`j$S7x6oPW5><`urGGAuID(8);9NCPA4rR|9PFC(in4*{sNa+k3 zzOq{=Y7AwclRh0qJVN~K@!?!@JBLqw~GViA4$t zlg`MP($!#V2j~fbcWz4ioAN#n=vE1<5?un}(!7z<< z#1miN)X6IQVA&L2Q4A8^&zQZ*eA&^AD%x`%Wmzj-F)Fs(gJr2X%S%k7c@0nNJzN~E z8yr^idJ-EY8?KKS^vKFH#NIEpT}l(I=Tmh?(KwQ9-|A&*4F|Bk`Yut(x^*RYe&-zF z4^I}^sq(sG>!7@_BHw!};qrLhIXRf?w*|PM07PDi`%jIad`yb|5wCB*x(s6DrCW6^ zMqu89YC;b4RTM+xu4pAvcJXy(Fmid$!rI48vS6N;SOPS)$Dy!@7+XdoSFM3zTS~Pf z2sk-rqowcXvTx&GqH=6$sH#Sj#(Wd@yLLEUlhepKX}qI*Ocp}0_F%{^8S?8k$rm1{ zJx@R8yj>~j9q-biC)Q@KESin2%vWOF=CVo`YFA7D{35u@XCr-VG)!u%K~1LK+53#< z5n3{@NzxiW=B*_Q`8qcE`52YTHISji|IrjiG^0=Y6i~cdlQ@ z&1JWIvN-9Bq`G53-)hXQeDPv7l1b0ADpUzP3=Ckd-MY1iiTmPOWK%fU-@8x0<*8`A zB6pK4K6+C*e``0IZ8bRrbRf~!7xtOnvWSm5-p(joU}TtFya8Mp`9cv05cMm-TBeKd zl?zE4?4K?&xyw%YOVj@CxZteFg<04a<&}rqeGe|5r&7FY6L>?2ymKS%OzD`=Br%nA z+i7*_HsmA~MI9oG&(*?VG5#L=fpVpfBgsenXI^R13`Be=@qqlDl^%yEQ6L1PDCN+- zthAnfJX_OPlz+Jxj=55evU=jlW|gkKq`zJ{e;4kuTf3Deo;)?0X&Hx6gXa6|ZklQ# z34#s#JtTq>C?Pu1-Ub`P8w8z^f(PcS6ciMhQe_pqv|5AsB-b}{cf+ZhTZq*313Wg@ z#@>^1se#*MQSqra>TlAwF7-#pw>BcU=QpQB0Q$VJ-*tD2!`#wKK~YFtDZ@qGHzP0K z9fw|ha9%~dK$Dio!PwPW!xjOP;BmLc+ij(Oi7>(^Vf?y^uU^@7H{2k8G0L{7(Vgb( z&9u+(s7cZ?C_i%Qq%oNo0ESFxK-D3cYP<+55BJC!TEQ=hKb|IA4=pDx}N zr634^+h6AG3x^Z{9eaYmH60)TScR}65Jk|tY_bRc%SRc)0?UQ$I<%GA5QE;hCv_oQ zNkK2DtE=z3V_wO4Td(%`J=yv0I5<$^POT&3VBlqjN#{_^P)j^%#fxKck5o@!T1X^M zBv;rvlCjFiO@nONWV)D-<{OBZI~mX4;A`=0j^&6h%6f&Ra*aF@yvNvC~ON5oPWH;#x z8)VQf?Y@YKB}KP|Y`-UjpSj+tBt)zCy8NK(A;@`B?QrSU`H3xX``WZGB`RN|utOAc z)zw>}@lM;RdO($}Z2I%660-K#zV z2hYbx`jp(J98E%TBA>WBj5h>?Xm3@VdF_+97ii;*yUhLO;|x${^!eldt%E*7?(Gkomlb zM)_o3Mqfe-V>vc)>{-Bv*WFI#AL)k`LX%#zsJ;`VmdD50=d~~{AmrG-Leuf8-en6D ze&_CwXW%0mMp*M|lD{*CA-npM#;-shM8RUVC(mQQC!JK_s^1%N3Eos|97)EkX`Q=7 zjqS)8T+VdP&l>tB^@fj_ptc)LTN^zfPdRyhkBP5gDp!KicBrZ$n&~w9i)2L0dO09N zOw#KYgq${1@5mT|c-0naOn6TDdh*mVZo4>N%YfruJpnF9_g4%9h8sk*n69=keT194 zF#R5HqjtH-Nk?4Cb$RQ|J)QHtt9W-G{Rj7uCW#qv*REvPXs6b#q`+;H)50SKAedAR zoBao@{CZXF2gvp<-{$UtIS_oK?gjW3f4DU?cWTBu_|De%c2z^G-lM>3{;(Vfln?gd z=KRw~^Xi|}&v|mql~_n$4w=wz@1_>$JO*Zd*o6?TFHv9nXbiok*-g%OP0NZRB1Wftg5Cl&2P3g2b`|q^s zH~pFr29RD$@(7hz&CG}Q^7mG}$BAFF+f6cbnw(O|hD)cciGu4Ud9>coAQ4I&b-=M* z7m9B|g>PZ>QuY4HtA7u^{$HM) z-R=0{`zo);i?FkyRnxgEiJZ3C*})o%?|}moC2O3_^-K-wjNhRV3AS0XjI663wckb) zmJ@E6YpJoQGQQ>(t5-0izci6qmrj|f9!Y=t%W4;1kca24ko821dvMY2u3C+8_NLSe zw}qxsT5EG*bM$&X4<-z$6KRcwUNzMy#Jz_;4zB)=pOFC^ouYP+&{eWOMlJmyWpj0} z)35c>x>^Pe1XmVhe0#6W*vWzMgnquc1<$m#aA&x8E?$Xg%c|!EQd(k=5Ty z#eTAX5Oih#+kyd>91#OJar9b@s~1X}LYFHcrSGokmwgVn=6z^(`RXVp%S@wIW!9yR zRyuWSN6+8eV^eqMMrCKd?j6tkzWiflXVUSgE1%=^*>HAf+&%IMov*y3F`xQcpwIOt z9hhhyMRs*e-40*n&M%f$iwiM=~bx1oOjt;lY{a4hA5H~`9^Xw`qkZ} ziuw}SW;K>9sua@LR1=`z006>clIhA=3BYw< zg(#YhyLxW*d#g18gvnH$TFv=JMt_M@Cvj&YO{EVR0RdgXl+)O7*Lc2;4zIISMrFQG zNMgm{^e?2dH&r-yvNda_c!qXm=kt=X@_Zl*~tKq8fab#ZSLjC$4$a0%~lS zv$k-bLP3O|+$X*vasWO@_XLobU)m#be8T8i`HY{T;6F$aOSlOENWco5he9b3O`0*M zpOWZiyJ^uK4>U58Y;UJg$!K%|P~>!PrrJ?D{dw3%_>awDQ{5MJ@S?}7-4qgGx49CR zsuXW-&aTK_#pbHi)}+MF@%s@}D5ei|bR_apetw?GWji-AuH2rxsV|hmqOF`MZH~MA zFR$l?WHs;me9iW{vt7Tx*H%zNvkNyEUE5>t&~~>Y!e}T*%JPP%P;fX{P+jb7S7-sn zJ&!Cthb$q!+y9-6$x4p>THdzWJC0FT5DqKHn{=*>&tGinv!J!_cojo12p--Reze6jBp z4Gi5lMZxLn3>WbZQR)&st@&Sx*EJF)kZI~Fvp=F~L^8d6Uxaq#D{#OkgYorSI^K0ZmCPWvvfXz<|R7U*vBkf0!=qOvKhCP?eQV-(yN zR|!MPdY);aBofvY()i%135jj1Rhf-tqz%hj$JPVr5v$NP;!!eN>= z2%>7$z>y!_J3Oc>-Ma?WFrO{1e1RhY=e7scj@EiJ)b)aS?f{lm6a$y z*D`NG^ZNFkcFjI&Lj$gu=6-V#hEn&~kNTftzbylra_}DzO!syprPz&wV%OU*)!E{7#3yMRf5tSD{QZ4E)Ez8r6}QpYQ>Q8`n78uA2c?v!1eNWP&u= zOu8H&0wvEr=4P7teN`^hOsP!}yp?x;|Ni~6mc;gt=F4nBgaRk>!5%KIV@TewIYS-q z7CVx=l6XAjnG9;4(sz7%s#VHIlGhlV#N#N>`nqS~!I=~DqX+iNsqIP1bKYe8zuEBx z4S?aGV>JIX|KQx9L{48m*is&5Ed! z#QwjB;P=iP{%0ipr=ThaowxHj4sw9D@DkRa0qN6w4lP9NpL#Rv0V&+Pi>v*>mFzb{ z-L3Gb9gTN4Iqx1m0R|&b8Q9!Ov%c;iH|dV8Pz`wVdslcL|Ltn-vupv`|G~9Xe=%9V zyX%K?_X=zAPZieUjr`{izmU*>Vq&=2{aUE}Q^2lBW#pf74KrrvAfi#AT zV84jODm> zIEle-H1u?dnGa{hxYoExYR6=7{z?B_sf1Zh3NL6s{?`g% z+-p>==pTiLT{L~476O>W(I0PTBE4MIH^aie-M*;84We&EK!^^NTQkP4j?^2dEwx+HFebO-S(4M%j9jT{H+6;tdi8#<-Z!^uG_u2p z>mnV~T&0`xE1!B#cRy^JCo890&Y1u^%6hr{?EGjX3H4uE^P5R6kO5cgd!A@+t1g z{{o${NsDia*jc~Qzfb&|6m*Af&m7r`{v-uXTylJi<-UxqKfRAcZr6V=9crrI*&3WD z%gNfRql3*pZ?)3~U$y<>+gq-1Ruy@vy8&OS>1AfABPXr>$;Mz||MX|io_&VWK7A@X zE((u7x)ILfurjdt74=2umFQd1MlYbq(3^EM!0!#Z0&d8`OiFn-pO zpnP!NAtEB;vpAew6mL1e?haPz@09nT0x%;OC7?m8@;ydCp{}68zC%%*``637txrte zyx#JTiKF9c`Qu#>Khf1sLkjcuPD2bDg3u+a^FLkHAH?U#a&mnu=U_E#TunlrNu}2~_*z=eH`ekWKJ^d9MCB38jsgX4uB?< zE4)hN#MHOwXM;7srpI_sSs^+vCF3hyv%c#OE%m-{Lkldlr(H_J=(=n7e}gAHGi@YzhV_& zXOcC51x4A+E3*B!ae3YQ?B3tIon}Hbwe*1uqBfna$yiS;jQT{woCNtY|4TJES)5Pjf2IVisV)z*Wd33vKo~l;`2%@7>`UUDbmA2x#F zzO=G;y)5_PYF2bk?@ONQl3`Yl?fJyk*Mk%S0&%rSiHWFI7g~nmZ&}_gJf<+d{9q?Q zafy28 zQmXD9t#&J)mUEq+jszuHPqSm=l&Ut50w?%&o+!ND7S2L>oe&HpM(~Vk8ysGvPaMm9 z>fMjC*lh>(4bFeyF-V2oIS;O@@b#K6j(TzoWud53e~YJxwt@2N4rO^aIbZC}dS{UZ!k2eX@9H&A10-w*kQ6z&`}(K3JORy*V1YFypVsxn zOw%Gve*d^Vu!3!dzDH7%^$+RlV7$A?dmajhK02znm_=ig&9qNCCa?SiI>xw732aM4 zZ<77fJ$){ev@5n~?@8+6Y`KA#a^uJ$Tx2JAiY?<`qe4lvx0QhN!+v=CE-t-rKg{Gh zS+i}JBX+GMMLrP|dmGK9He@v47NYYd@L6eYg0fH7N{PpOmzt&VLfRtf^hoHw>m7N) zwA0w)Xb6$|=Gp#CwG6M5hX$g?I-%bLd#;LSQseRTtVz2D-wolj5v%j7`nzn2H>cc> z8UEzZD*(h|QOlIk@~8I!M^APiC)@tu=#5xT7LqDg+a@!7PF=ft+*jt&+b`6p_nOuH z)AM@zia39u24Ij*NYJb0VVy@8=C0K5ausE_M3udk57kh&W|8R9ZFH&5p+J zz05?!<^5PxkT^FxOG9O3-h9$l_VN7pc;tHY>(C4BtcC|OH*AY*55appv5Ei>hz3(Rd>=IX!J zau#&fUtQWwTC=bF6TF=ey;n%+d+k5H4{%FM_u1I)?=vL8MQmUiZQ~Dj%pVmsia!4$ zmQ8gV^WO0r!H8;xzYPF;`tRy9KcK)A)7`N?3If&`HxJLRBdwJ#@4y z_9y|eCZ@zFpmSJ3XcNUv@JLd`K6PwXN9)}BHOqJthIlieEhU&MF6hqn85V7{m>VvXui~eB zHO>ulrp{8Heb`uUGy9y(Tk(LS*GqMT(H%I_%E>b(msMHjoYdQRc&&gH@V5dl>gP7j z+ON-FQ59R@CjQz!C5b)dZ29U={AXBp1`wVWVLqQ@|4ZG%x$glY-yc&t?d>xx3Vdi) zuYbBsY+-bIt9Um9b0fL;)ycusJume;=05id7p>l&LV0d)NUwoS98oQpF!|et(F;o3 zxfx#C+$>>@;8DXIg1nwM=CGCiIEA>=GaA!A#MR_NlKNc-Yd)79gpG;4_ECmKWZ2HFJ$90#AVb{b7~HFcKlDC7=|`_D*|lZ>klCU2V8I-+Xa7;B~KE zev#ougE!(A^J5pE5PV**@0wcQ+&($&ji>`V=iQ^?|7*wgrYt0PrT>yE#w)LQPgCU=l)ls1We z9M)oSir}TF#HVB0#YskELALB;@73XV-A3=~^m%-LpZ`DobxzKG z-`9CvulamEU)RyFo-LE+A4?2S1H2bnf%n0#sv9#-EGD|yFZ#!LXwW>eTOg-UC?zwL z_Ax?fEC906sd0_?t_y}ao+pK>90 zMM~RNx|(Kd2|?^F@hlz$QYfOt^qKz69!EPYRg$Sf<9VBufgkf#N=m@8ElWRYQHsJk=`%v+Hu=?+1O{+H`_*5B6$4?j)F`2&2p_bILrTIJ;kRDv{+d491 z2j?MXw;2^o4EbO|14E3UsLUoqRBS1+JJ&u>*lq;vo`stB zk~myC!A2Va{A;qoMi=vZl%kcxATmGv zfI)MRrW8=V->hP$nVaj%luArYG#eKxWp&Cj2!kPvN;Ts)u|h?aAqk|(6K0^%%z0fH zr1VwsxF0tM2YZ9*N4lzmc~;=DPk7j@7N~g`UEg{)g65_S0joQYU|=YRNS;lyQ)N$P zv|Em2DJjz>l~|s&8)avRXS5T23+@d_2cJnJq4vlNxz=Bnc0EC33d&SYdvBJ=^xil( zm{$K#pMvu(dZC-%2F;w#xdYf8Y~4g-v)%bU!w$0_Rq~}!eWGVwSMR!vC|xXa9;v-x ziA>5TyOXY}{FK`D2E-0X=Y^|!)$3k7D+h>n%bTya0axMbSd%fgBV4=FOJPapgCX2- z<(s;)_|W~M`GzPika(_i+*19hc~VWY;n*#@%_q%bQ#r<&1{H3)dij&nB-JHMD%sZe zR9P}h2&MY)-X3&lHLnSC@U0y;F%)s$W%?Y5n~2#&0Vji;^wG+;lG+RsHDqP>x%U3z zrj=%r{o8_)7<7eq$F=>?INUrXJX(y)<{nFb$k8Ak7CPQ{|h9E*`r22lBf-o;vqq? zhmucSFXy-hi|1M{Y0(Orz6Uimr%~(U)eKy?##au&5bL-nvP|?6u3zEioaDBV+m@hv zD>$vAi8+ZRLN{v$&ebYF#Hu+M3!;s4YibI@#Jzk+Lf0!mEkr{ z?tI{2QJrngiJNIUIc2vSL$3C}>-n6hBow4#<1NGEIOy>H_(bMyhC93`V6mKWjnA#} zN__<2I-UPA7xu{}oN_9poc-nWah5Ym^0~L`4Akp)P6Vl6t!1g!SOqaKijc{zMNn+(HQEldc@&T~ z!)^;&+X0g47ZDAN$oA4Yv1)s+*mJScB&FA!{TGPuO>|(~!Ec(sthkzJjr?qgq?~)J z6wCi8rkI;hX*l*%oTEK{%Nc2s2GD9Zl)hzZ{glK%MSjJpMI*n|eCDuB(JJ52P}tKa zzdIPunO$M70%2w*mJ>*6GNQ=UQRP7(NU-N~svqcfQ4OxwVX3WUMpg*g+-6!1qc%>Z z%+`YFUwCGK!K7k0QhUkPfz>q)r+H_fNn(d^B7$Lp;)4kzPI{N^$n#X7i=HZHb^H>`>7w zC|b&K5R2izSN;fW$V+&d63Q^1Aj3+XdH6$SIS!b7cOjH172<|;u#RmaO#KN9Ug zt3D9DtqHRbbJ{K&sekcl9p`T9!y~@w;!gqsT07TP6Seb)>mxH<#;66K`WGITZnA&; z_;HDc1wH5-kMkJ_cz|PYjYZ-Qr+?G6mhQ8|Sm>bSUUy<%-EY1>ER&>K$aMut=ft!R zeRU}gjzvz{xy>=zZL2&sD19g$M13ahVoGEqft`GoDFK^ViR+U4NB#55<{A;N1kJTw z=RZy_9R8@{E!kVa$l?y8;Re*?hzfU?qDS%QQtyoyhM@AeLQ?|z*_b{SR@Toej1po_ zDo-~Ir848RIxikZ5*^j#F*|5VBGjtT?y(Y6vgZXwc<%><!yFb z;1l^AwTgxiwjSQtg}I_8Fz*yeZ`638@gLg!IdW}AV+P!43M zg;52k%jR2gu$|%?>o$)~)JS`qBvq=#4{v zcBxZqp6mpbcU{ZSEr%+NdnyB}oZ6f=ZoZwAHWyPSC4U_3>K5;A;&t*g4P7e3C}eeh zB=dt+@r()|a4FWOvK8!Rd!6en1Lu#|IxKG+Y4`~1=TD9-4AzMHm8iClV`di(eC)=~ zW@n?RD*ss+@^J_6pl9Mi7!wj6v2~mKxu<$G!G~gj}cz^bGDuN!O*a05b@+D2JAYS<4YfUBT z-_(1(pRFPG+|bIN?>%JB~#1PzJRL8a5*VA8>;7cG&Oys z?5TK6CUuMnU&LY1AB3D2M>d5$H;4ST#@#mVG}OM2$6Mwo0EHJ7w*e=NZh##kH=zk> zh3!W|fE#S^+%7lknBG_fxq9h8$!G)6O9?xm8#mtsQ#^nH169$})ptD1hd0N@E7BX@ z(S|SkCs&}G9_$-L5dv3hZV6ux?@_#0y($?fFKkmK-ot=LENtVZCr&kaTf(vQ`a<%L zg<Wzg&CAM1%2N z%2W5DjVEE;y8Oi;mniF8!ejiAs$E#%fbNosYbJf38u?a1JWc8hC%4^Xo7oFcjlU2= zNX&TxNOy&xK7U!Le;5WCj(flWUu=jeZ=~_oPH*B3NkqN*^7$(^fwof?a? z)R`(dPspBS?Zv3s3I&kzc6XI(3#DzM8(b>sjwKrJoOYqKbkF#+-pkC~}82Mt$rmuu8()ghw!q|3)RBLNa`aIIz#d#?PF#8j=@Z6i6 z?SsyvKM^z;9$;D$XNaLP#KQ5{1mNQj;GqoVKO8j5ffekvA*xQ}YBAB^FJWH4_*7W` z&A-88<>44%yL`CyC$;Tkmh9lE-OTA7BB1w}!fBr0+c87Cv_>#2_&tzM2khTngmXLMt87V(EW>D`u zEsQ(5xAUxmUUOp}yxPr%iy3;B{BOhAr)oT&ZEDW%kY9oowu3mPe!#H;cI3`k;#5WdjU$ipySd85kl2Z@K^?uPmuc3&Ok@7mI)M0A7;_kQHrjuPi zRyqfgjl9RgM4Xg#D;$h^KdrcQI=R#r@HzR@l8U*l`y)L*EjYEQ4jN~)q|&I?pGo1|`@ zmJ@zUAa#cxW^|##xNOB-(Ye&VG^zg{l6=nyYWB?K6Y;NA`~Q!*1g4EBZwg1cJ-EfW zu|psp>E`!rt{ybp>Y%0%=;+pLb*=(@DAz&vAN4wfsAb8Go!bSep`XPWdX)i_Z1_ra zp{KbdOYj%Q3rKstbLhAFw?N{X%-DV0H`%d;0H zIOOq~5qbfF=1eg~4C)#`Al?(IojZ0XgVX`VoOl@>t`VQ$eQixq-Wz zec7iFxsq2oj8_IA?SA;r=QRFXV+PI(U*y{=jrrCL?PfL|os;Di#S$!<=(6PsokXTE z{r{Y{ahf^ZQ;6W{D=p_iWoR#54kn38_nhntq)At@@YT^5u;J#35n3#&J{X|@IJib; z-rYWE2#>38r&Bt;QWcd5dTw`;qb`t40&wW|?vRMGbui}L-Zu-OBp{pV;;VUpnbt-v z{&*Wg$*tcAg#g#BX{UiWmGgO>u516yhu96vL)zN7-{xz1aJ9 zLyRwenc{Z@XRaeCyq?COm`nzrdEQl)ZLX%D~P_C)*^dwDJ^BJ{ZJUtji-#Ncpy3 zy)dU8xn@+sJJ6^Dj{QE%wZijlLRv0z2#3qhMeJ;g$;3Lb`t7lI&T0$Acg$L|UsM%8tYANB z97=FTBfbZGzmjwxbOSi_^8BZJoR~j? zRsxM`r|S4abRGK$GOazK;AI1lE6Q2RFIx~dL#j!=#0W*X`t5^RIA9np6Zxj&$poF^ zTcYM}tr-Kv1b(ynq@JWpsVkG}>@+?6Xw1JEG5Z=*l<_4Go3wPFSXW6qDz5#ccnQ7q z0Kg#&WJ`jksdV}JLH(IjE11CnpB=Un?16TXJG%tl`_mg>8kMs;VjheKbZ#}7Sa{)X zKmc+=)@wF{;@sq9)kGJ3c~J-5-IDD6Q;E+NQj0xfVonUg%SMkSBmFkM&4K6! zIw1U3t8NF;jr^bdsY|tfQrD+iKcSxSyzH0=Np)djWaNQ{h@6+GGc;8bA2vT1SFHqt z0q~fORwl(3md9wu>bS+`s8G;cvvJuB>e|!APfnI)Ob*ZGe*(TW zh{+)-!eO%Qi%33+f9xJ1_f4=W;q#9zN2j#qeMu)rzkjJ@J@Y+@l6yS_(A@a@g}V+w z+yJiK;yC}zFOg-xIL1yrSE1C?7QsI0w36_p;r6%@9{$v`$0gSef><|;i1 z3W8z$X7bJkV}K*CmZ2n7-sH~8AMCw1!UCdH57FnNzTGL`H7Iu@x)<~D_bzelDrCR7 zl0)QV4Ba^be~{aNo4(6uvf_oa<`ibFZCvRgB@_5VRx8segX>#?qP^wa8((5|8uBJT z+-@6DULJ*}Wn*0yVJ@4!*-jo@LslJA9Pl{ajif+;Lz!v@Ozm4#l{*D9jZ2(~FwdT) zt;z1H3g7krMpfEo(8Dz>BSCbIjs#Gh3ut_yfCaz~_km_1K`}n>(gZ1HfB821WP43q zLWdR3rTw0SMA%6{dAVKc`(#fQ-|XgX5l?>sz^kBW&;1t{+H+(VH+r4agMy}G0QjWP zFIt=o0t6tUZ3b(s{@6H@>$*ms>)LDtIQrob;p-DQbp*tn3JD28Bq~BnXEUWShyQiT`>#Ad?QNddf3bOtJx+p057M`P<>hw-Dh$uz z{Sp&A2?@z&bYgt4YMKIS(ERe;5-FI2)BP);gI8qKyB2o%zp=2p11N!?dC||sG3=pf zq`#CDIHy3Ey7iYZ)n&97rn)LJEU^|$blG6n%4mNrd;h0U|5K!8Q4K>6&LO0rMEcR$Qpn1CIuDU8Ni!y(U+C=_s~QXRSqW%{z1KkoOB2) z;2fTk6l@qgpm z!K*6h79QcM*iq(~Y#6vj`0YX!4)EcsV({j5PhlSEPZ;#zl4%|=Z_|&tKJ!O|6Osi) zTIKk-JIpVU09b*Fl;*sDj)8%-uS2)6;U~e0ZJnO~9zDAln|lN|q9Q-++G_rLlJE5Kbky#ipVR))xfh|8mgTPhowM z$Ygco%M+)I7Wv0X+S{e#Pc4C6O269S$Jjrb20&75uir?H*H}aA8dttg1{r zSsF`7gQSpTC$8&xVM!Kf@aVwq|4Jl~^mf3g{V`34SbWcNicv!xnLmUudv5R)>Cqz! zDc6szh?}NfIlAUF>tCnz=f{pofPo=fa^L<*z)jP<{rO+?q3R+H{05874K^l5_orzi zjNJo&sm7*R21$I!>RE5b1Dndi;BcNFRQOr*tuY!QShg^5L!VLDu zp5r%~Sco418+so!ll|$;ppW<+0c3;fvPBnU%Y=n6)%~lcfh!2uEA?QRAzR!S2+8@w zv9NOBI0lcs9bjP%EwWFqjjS-;oy4gBAb0i3C_XgRqBEmci2qQcHEY6jE}UizScI zx`u9qQkt0J%J4jw(C$Cv1id{2J^ORuFMBz7oK#RUfs=;r$Zy+c#UECX5hr729e(s>{kCdDdy<*?CvC+^x_Bwg*mQ*qW0PhJ$nSZ;w!b#yDoqd>ngEW+U-+%-++>h=4xsHsr9?eCgmYN;hUDa&bWeRyeX+}w@p%07~} z#)E~7hqe5-MD9!fIer8!kivM-sCRs!umfKTb8`405H+(bzUcMHBAyGtI?!5y2E{I) zi2P;bZ%pG{O}KgyJ1%-5l$eo3o++-($w}_ak*vy8>E7|DPgg&Tzd}tX0#7aMzK^JR zNz#L*|A(L}Ted{EJD!`QR+=(EfgeBAlTK5T2hQodGDRQ=w?JlE1Ox_#SqWL!H>FyL z@#s#gUd5ME|H~@2xZm){ajw5OaR4{9^rBGAL9sXa|Y+xTQtK5YIT#Ck8dV z{cJym|87b1%|yK!U@gd4lT?@Mb2PAQ;6LD4?s&uw@q}e4k2QM}fAuU}yuWj_?^8UQW_E5p%v1#X8e2Z_OC;{GkKq6^Jbij~cTDOb(PxC`n+GR| zRwPUh4r2I4o<&w(MK~=*Q(ndZwejjvrNEZ_2zo-@kfF;Y*5kAOBvA f&f&YDwM~BhSWqPIOsC-?@J~)!=~|Yg$)o=VQ~T=2 diff --git a/docs/apm/images/traffic-transactions.png b/docs/apm/images/traffic-transactions.png index 134bc0e6bcb42cee409a2c45b9e63d31380321b4..ef429740ceee31426e2ec5395c864d43e069134e 100644 GIT binary patch literal 276609 zcmeEucUV)~wl75lL7IvPNK+6A(gmc0AXPe{7wOVV=p6(RY0^7LhlEh2ca+|1=tY|J z8hXMD?sN9mbI(2d-S_@`-^=$USy^k%Ip!K;%rSqX%mgdSOXA~_>myvMnTI-`oGE02bTJ7+E?rYJ2YMx*FpYie#~f`%p)92<|VsIq?F_sU~L?4|4n z$CtMLju=w6GO!ds5oF$p5_x%x7K?-e5W-Y_Usb%M@JHqce-lPSv1b$a+x%y-G;hQ> zmA(<{(_0{RKI!wYo$I>folo&Vsvv8wdTY==edRT@zh6ioQYrN$8231jf$qtWy%!n= z-Dj@jCA%C$Q)A;7BF4&Bx^phHb020ZDMH}816Po@2dBy`Xo?)I1pF2ycTG8A`kKz-e-|l`SViB1LVp`ZEk~r{RpPb}15(p?E`ObRN_w}oU$n*Gwb)S%QaOl8d zHj`Usv3(0RPR{pd{ok(+-y*Aw&AJ#s8Z;qvp8~{bwJ3O-E)sbSWbWtmhbI`*+Rpf- zU>$s#kY1J1l#cFQx)H#5V%kTLzWm&PNSjQuJv`C4@j07&6g{s}w~qOp`=BV^sDk=~ zUX2{xW;3RxH9W)b47>^tcs!zV5{C>_gr4Q-K8jEtA0WlLP*}lNK2Bps$Tq#KbSQpJ zbT@M=l@lne|1ISsqnzS+`x5pI`Lk~TL>q^X35&g2_HcSSN#PgS!^~I@lg=LA3La&* z_hc!9ozgcKX&wxUKI_Ebph15~bR$6I#wiE#(WC}v;lq8yU^ZQvEY3)Zj=b_$Iv4AX z4A=~kXze?@-3vr^XnkH^|ZI6`tPv7_Cw{n2h#N4&8Tx&7?dD+t*zfEndNX zC93`wh5HsE<_8gcMLz$^2|hi0^oh4?Xo=kx1$wWVmYzf=rJtg-f-FdIy`uM4@vgnXv z`&0gVm~Ag#eU4Hze|pP;7yJPD9{h4FLrZZxe>&f0lxX8Fc}VW(^|$!ACE)t zaD9jqw>7-Y{;oPoL%#5_9-YvWMxc@syVAa5V%8&7Mny(--b@G09Lbft($U6ZhLKUy z4#V!l-pWkt=E>af*a0{P|zClC)T~?6pF^ z04n4yokkR&1&DT!X2=y+d2gPyet(2}#DMd0xu&UXpG6;4(%oLNRg6RH)$LX4 zXU~|wGmmRL*SxJ^ptsM#VggQXMg*zHXP_psFaek=nR5N!GH%78dGDT$x zG#NVRoM*k}*y|Xvp1BSj*`18sN^o{_u5cDSetuzh0X&vFE;dc*lS(Qzm$(SEB`6}$ zB)E7;#cRR$p0CKk%HDIyc)n|l_rG-uZ}Of)gmv?3 zndQXSjGc_0m#hJit(ji|t!aVN0kW;yrY+?!&8*Ylu9at2LtD8xL@nVH5BKSYIXHL@ zmLG1Vbn?c6(j<8$n8Pe0a>ZFc2t7auwF{ey^=4^6G~BGTQ?zs(bmV4&PJK^@Pj>>y zZuQ(LqThIedp9}SPTF32O!_ehbIm4oI({ojCuW9gz+o=aO?`Eu||>5&xj!EawvWeD}-n7eB|{qrUZb82X}# zZ=^c!sNv|F1sHGjpMD~XtPxg;BuNLRhYiSg3DFMUGx^A}{9yH2_xio*k0IY?Ytm}8 zK|%BeQ5KAJsSMU}N|B=LwKFov)Ov;ihGLH0rPk`e4pQ@HcbID%CrtOJ+7M@=XTr>) ztcxt>+7|VWE5m6fy(S)UVm&JHRZuovrRvOLn(BpSneW}bu}y^z8o=6(*^SdN=D?eQ zSb+`mSU&37*;;grwN>qweLK5D^LS0W8k_ab7gM%v_1_`%1oS5K`s4O6T|~=%&;j+m z&5>~zE4%3u%g4@HZ;fD2=H;+uxMU7xJ$MGDW~u`lb6k7spm>#fj3CD8hOlb6MrfTt zeZ5=Vch z>TEkVw|4RUxZ>*DX+f@5Rc-e9ruPtX2U7`~WwaVL`fyaZI^%v(ER29kM#%Bdu6c2l zudY@Q{^dOC@xq78&X6od$-3}BN=yF!7kVep&H1xtzL1X}KHZ(v5cks|hK0$2D>Mw#04$Hi=kV)uyek$)o-|^`8dJUZ@ zUphGE|8NPLcd0LPhaXaV`{+>1KiKhLc7wW>??C&f5xY8b6=CAx0$%9|?<28&$jF7nF@1IGhm2_n&Nz) z2|jbz`5bKPZ;x>m%wW1_Z;$zzK*=bJ7((LvxU=jjnn)j^Z)xe%cEaZV{%$yHWG*ki z+_y)xBlN3TFZajM&~)(7^yzWie#i%Y-xSK8z()JBD&Gq?GW_6a)H{auBBHx!qXKJz znuGoDDyPH8f=$g2?=%m2claT-W9N+j77FlwG|`YYm6JmQppJ3SZlIH+VWE!DQEwr1 zia(Df(4V4V{ydL?h8ARwcHOC4Z>dYO~+x0WXKkvrF`HcC` zV~qFL?L<|?q@_{cDn!Vahtx9p@eL1<|A>961D(#mvus4>CJRW%$n z=UH5|~;L3+Ov^H@xpmDXfvH|hA3O@RI2OsMA`ZVh!nxD5g zS_(eWkW-`)vvn|`;bM8t!uCiAmxhK$z`@v*Pgz{zAI(v}1RuS1bhP7RWp#0JVR7MP zv2`$GW#{GPWo6@F<=|jO-N6iUvvD+VWwrr5{-cwB_9JcrGIB7tb2PWLp}FqYz|hvo zQSi~DYeIj%{url;tNCA)Y(W2bEYt(CUSDBlXJKRgvu{*Wf$Ot;isr5+RvO~w)+nB# zXb5q<;CL?Zv%!D4^cTrLngT&44q~>}sFsdGzi|DJ#=li7YW_u&`#JZoB!9W` zkCpESid4!!2- zt%yvXVY{DivKRtg88>^5ZAgNFL*t9~Km2%$ajSLu)}0SYoI;^ZkKz(7Ls$B9E31l4 z{gbf*psATR1INhyTjB`Q{}1|}sr9A0F+M#PvBgWXC1C8Tp}|Z`v*l<&g?@ub1nqzH z;ipYn4Oc8VOsTp@Lxs=Gz# zzcR*9g{J=T{d|H4h=PgBq8Io7R=PygScYaZQy`HSo;3WX84C&4l+;ahJGXxA^m~-= zg-ZfYUD=I0+M)*MDm>+;f`8xfLkt&-nJE>KQwiflChhs#R}x4AR+u;7KLN_Oi zScPj}+{WR@E{B3!*1{C`_M_L9-QOm7#r9`7c+hhGHm#aznewheMPLov?1F2cZmpu134dho=%V*j*p?aoqu7Z zdv%a~=gv#<7X$)?IvBr-{F}ds#sq$i-TKEA0WZ-}Lb|aSE|sLGv<5D~#e9ZF;xwZB z=PF9p8h_7dngxBD%68}&StcP41?F@{JIz_+JBHrw7P66?m}g`v7fl@Fzt6vYk%i9v za)--NH>KDBkjVhetuSgyt(G^NBlFf%=qUX}e$WX2TLIJ9-SwL$t5ORJze7~17X-Ok z0c?Yen6Y%;%JPo`KTKhee4ngC03rTWPJXAfC2P&M%A@RVF5v^#hqKviWC8=m8Z^_D zcB7H1s(0glAL(zx`savdlA58R+S+CZ#6$#yH$!l7C~hqxf)u)AAuxKEZ`AF@KVK84BCrp#9BAwa^gVcNXK`eL+VnF}YA*!$FR2kmX<} z4u7M6&E}RpRlA6P`-s1Cp*i*LhxO`;!|qIcoS?wKt|CN77_D8TVPF~miP7(t{lf_c zMHS`qU3UHc(00NnVh@1uYCY>!c;Rfzv|$xRQ}0a8X`NtgivjMRtY>D z3X^wXU7pNE?6s5@Hv(LCg+)as7~2JY?czq5@7PdxGUq$G=a{X42Zd2BjToq@iXwWH3i~cRG z1!3YnJ{zdM&Jp^e;$s@m556Vg62B?1zZgwfR%|~G4#P*y>wfJ7=w|4D72Lmc;$aV|APEZ=CEmz8_ zan@#(EuijIqhR|C;A{N4_H4LQ*enLAQpz(YLHQOGRUa(b*>H91a^}1+mqmYvqUeZgrYciuCjk# zv#|Q#_xcaQe*E-5xs!%!1C%^{?@nLD{`q>woe&d^_r3iU_lSJL5#N4G&j!E=N^seQ z_@lIw#*M97?(a2*;150p`IfM}{7qAcJ`gEVGQ%ZebtZ?UrCI}`*aCdn2(f>a`M=c_ zUzA|Bxn_(yBh}6{3wo^EKZ84x6jJezG|c2WRuqm)~UXhl64& zGe)Zb$KTpZGz>qY>w%>w|GQ`1n;LpV)BE`Eu_6r-iX>_>)ZF_2gZXVy!}A_$=XsWEr#E{gi^x@&zd(uF`dbJe8O5f%1>nPb&j-c8hM~BHn9L!z?l3A zNq5n%?7!F}7=|9d)(}E`cG5d*Uax0sIogDojY-wr&vX?_Cbqu@ksK> zc$a#Jb5b&-c?GW>i8oFeMPPJQLdf0#!&H7DX;IgA8{;a_7q?t^5LD^4F{d!gsxa1R zR+Si>=nJ#AMC9KHa3Y@ijjl+5FD(2%x&am0e>S$P7#9)xpCk}#Ny)i9V6*{>agjUk z>8jU@U`0XFVLRo^tt*?Wm7t*U_-E$PJyVnn%Yj3(TL?3Pe1;m%oRVpmi{9Zd$>l8l z%7m(+Qcd;(MY@q$Z&?=voSGjrNst3$P5yctyvdW3Hd5PQHa)O8NZKu5BrZZ9YM8#WCVbqbKOG^v9W|M48eDjMaLUFB8WURQT46m@lc*}7agsHOAgppy zpa0r&mo!JTX};IPwNedz9Vvb*{Uj@GU(;tN-hWcL%LsTV^Ie=)sLE)u534?0dsFfe zO<~C3uM0T(jYl`?oxkAV9CrTub?Bck!jw~k{iGaQ!QOG!y#NIOIWpcd1Q^H{pvmJ(_>az3ec z-JR|jGAjyt-vu9}h@$b68vfQ;%=&!my-ppK=?)n1?aA|^7MSCiMSjhTS|i?*^6-mI z{fnF{Qp-NzW9_(TE&8&=!{9qlK8fFY%rvZZbK_DiN6RU+??PVogZ;4oq{>Bw(ghWt z8_NBzVOdvs65DGYebzweH?hJ7?})#8PD(IMYT_` z%1$jG3;visvw*Bg>t5k6`H(5o$A%U}pH21da%?76yV9#3m`bmoXx`?eDucjUdp$gj zI|UA1Q8S7mm739}e{&$+on_SJbMB8c+lsmR_apHuTWydiUO9&)s;H!aa;-JXvZ7be zk#v5NH);beX}ye>LRF371#y(TUee*|4Td^m93#rJDmn?*vVzI{AIs`Put-FgPj}(i zMW61Rxwg{A3^kP}+$nTYLaK5)TeuI{2Uv+~8Hl&HRy!D@?sZX9aJGa5#sX9AS(e#{CA-{vd3yFlt&D;BwS;iCslw+5^N2-O5(+mo8$9B2lWaG1M1>)1s zU0KFT(~1)H(;&LdmqJ_bBziAB7D5Hst^6i8;KtI2?!qZGlb)ukov@_td%ZMXSL!mj z#Ine4y+ zy1H>|8zK|kwqx$qHOC6jr27)>PZi8QDSddSa)f0F3 z89+INfn(pN1br$n!R|P)snZZFe&gjMxM_LEUHX+oturXlTUa|n^9dw$p|D9B%MVyG zmGtZ#xdhEgnG&(ayn3LV2f3&+S3!3tYeSQc8in8BkKBVmj&8|fweUMu75zCywC|Ll zE>lsu-h_wkk58mSY6CM1)zM)vAuV&Y!mu(9L%(zRTxSSL&cVJx7RJ$)#IrB6i0%1< zmY2h&nxoB?Q+imSbnbBC+3eN|+X{fKIvthpg}&R>THnz2qfH^t2|b^3-@TKblTKgO zuMn|mesfN6QrS5HE*Z(^)M!qc8Dxebhs(AofA7vre^UBzO>InndW*$WdjDQSgJQD1 z5dRdIfBfj$X;n-i#Mzy#QXtrJxv~Qn#7E%zD_B&6|zB)F|VdWwwXD6pQ~XY?$e z)wIQV(_!=ryb8UB2KMYU50kwL-dyf19SA~@nqgW_E2sN+S51yLCgt?JR#vJ#yL2f2 zg9Gyx1CXuNF#W8~aD7-Qj2=l05E%=5|tTb?`__cXd zw{V?&B1srDx?#RZIR?;g9Cjy@;MOCyED zfTL%_X&pZlWTk#!@OG12$UUb_l`}2!%HrT!`SelB*Tl1mNycmO#e0_B z!ex6{n$Ou)R}G3(p>jKt_L$F=qv&CvZm_LN+-LPo^`ZDBcKS{K+Ow~IKos8BsCtQb zzuV8BEU*GvpUrFX+GkYB{S<~;oHE6Ow@iBf15^>2A$=fdl=T`ZSpRZ&VXfx_?&8MC zQBIx7pt?_T$TauUN5x#sVB1G(Z-9h2`s{#pZnC{PN(a?gHEoy+>8L8LG%&;UYnsZc zJ+N&8yC*;$SIuD5Lf3~~EDrFYb_?2mCyIt6WvlSEmG0=^s!5J{TW1xuUcG}Zpn-iv zXS=wyq@uWZAQ5sbUCii{2>A)u!e}7HT^x#=st=Bq)FBW2CXJQ21sxBfMtAu;^mdp| z*JmUG<(t-(dgk={eyk-;WF#@wgJ<+PUQSw829bKK4;ChTac3LW4YW(XonT3&5~v(o zGXmT$2Hem_|L!L7bfz|b{z~YnZK%G<4#dA)rEVidE|ybLW46A#Nf<4R z#JLK}sa>y{C#OA`)Bd)GC@1nBjfUOOcIPUAzq1L_&3 zKMcFFGrD}1{9A75U&2E>7?%jP8htkOodN6eYZ#~U-g~Tfy=8%$I)d}bdwOJO;zMVqDm`b-_)ueQnOnYKe| zO1WljL?+1IsI^QN%vvPQ2ReCff;Roi4^B%uamSeEY#ssfi=LQ?XfP-9fAPx>)iB#G z76PK_W9^SU-wG@n&VFg^>a{T1v{GkM*XIJyw{bACARqzkjc@~qzH z{-Zyat{ZtM?@>+XHcp4BKHxn(&n0%Z@k&(ng=^<0^dl2wa&buc zUk(4&kf73{5w{c9%9RWGN;p4g3MlZEYZVsXJ;%e5B;6T{Fv5x~&z7?ZVBVaDq#E>x z_wC#TZUg1wLvf2q_z_n95Z}#G&iIv!6^~xDHPqs_&9-ulG)DvZ`?ec@D2vIg%G&mO zARgzU8z9ab(j@11Vk6W#Q4VQuoBP7Vfm(|yi58rzK&D}Z|NX@e+Sv+z`A)p7_=LIw zKrf}N??&eG!OwV=31M6 zy{l51>xSmqqr_u)eAJ^h!6FlIB$uVyQt`7p)M7pfo9rpX$L9p>;gG}2zsSGsqcraQ#sL(PnXa;lS?-Fii{qu>!K+CV^iXr& zon)#3t;BpW_lln*z{87XQZJeal8bp7NhhB&VWr>bsmX0S_h@}MC%WG4aANv}S&?1? zAc%lEPK7~1y7p+D&NA*<)boNXY#reHTIX%B*N1Px(NdY>x3(*}vh?GdwnvXQ5`w}k zUwB_uFZU*@aF~W(k~CLX!b0IN=+~*VQiD7Ka3hbU%$rM8k~ zSFw{nu8fZ+efFHtDvE25AGZtAv7h5ihEk{H%2S?E`*?0=vGO}@#60A4oTw)qQ#cxP zQM&k+ot}AeHOdb3>6pJajTrR0IOz#IB&E}DtS{Q_oIiuEtc7_w@6K5tW0srrtR7-F zj#qmA_lAz>83y>kCRMMzZ<;xY3F-BN^hPAnw&%) z9t?h-?=!h}gc0eCPSKo_x|I38ds|J%Jx3-U#$!z#nQ5xp-&tu2JuK_a@Npp9+&hBI z#pJ+`US7fgwhO5hfdg@PeUzZrsDD9x7;cL`>m2<&S%wV>PPol5X6rboJ%4PREf0;A z?mKVm#vP;CqUeJe?M1StRVQ4Tc*&6DWM0hH?ND&@cIZZP;}bI+4MG$VADtR?)f{X6 zXxuk2D_ zn9GDIxbs<|T8%WZOzLIvnw+RLP71Zg^;pPM71>G!9T!hpTbdrk4CJ_^Bh^%D9e19l z@>Nz%TS(wnMo{vI3L%YC^8GX|m5Z~tr>pYvH>;Z*-5$U2Y}KOoaJJ_1uMN(eaT&=C zqtA5)j3)Ejx(2&#-oQTIj+q2`M~l9D-<8(j0d0%oFu`@pnUx)`lw;!0wt{*d_zZNR zo(h`l$%C*gP%ZVJtu$3dn^;F|^XSXO0%CKdhVB$yR8_iohr8K+5jg(wwf|M`U%9dy z8P^N0C#u8+H9Nd@PGK9d9F7yo2Z&JW?Z$T%Gv|@>!#O=B!+9#k{kEVi0WM&ux5DN) ztIRAPVRdWSdCkGv0E6uPzUb?I|d` zv!+w5sow;kimSnD&_@-PW1qO8+BM$y$fCVJ&anb>=jD?(1j2Z!wGo5%M#51JCbB&j z)Sk}{*H|6lv!jSmSI`Ht`{54g?f$cMC!L*2Su49uSN7X^l|Zi{n4YECaYKrMoqmS_ z*?;c{?`t-bH6sf2b-R-3bFBDX)u<@==IghoBwmf2=z)L4(^O)%&L4xBQ66UL0FT$Y z4cXDyyy?YkCCQ54MY(hq64ZxV4ewe0qy+6w-qdsTC@q|IQ!ZTCf`vGDmzXam)}uUQ zI+TZ85wY&{1l5^A`-|cHb&BPlK>kb}f84(Ny=gMICJK*}k5enZe)Yq_fkdY_+5x>e zFuw*;)FTd3&lHGlPmas;ftVF(vhC2?T>B-~VgF?Zp;yHcU9AD1Rr zJGlur5GstzeAbuef2P-PLz0$Y8N z#~EWk`jd%qzWw*%Re_fRa~FTs@hEHmpD5x zSs4jl>IL_XI~1cYnx$JV;u3$Oqq*$=5qYqDH$ppa`LAj%8mVjFBNGp&qXMb=`dseRvHa&YFk@K?!t6C}<^gH+dyjR@Erx6eYbZRCd$_6PbADv*mIZQ2Uo?ijmskoJ5aw#F<oGB>aDM{JN_VV1GjgYnY`D?L491}!M$QH9T9#fiQVpAc*=xN2 z6;=HPx0+`GpTU#P$wzr^XT{u%fa{}a~w|G4K)gIK**u|Lqww_I~>w5*V2XE5%S`!r11{he!ndtB@5T;ZXdxs|3nmIG8mjS%mCcO&D zy=Nx2TyZ<;NJd#6D)wog`VrMAhT!u!SCGkbpKs10uJFpG;f>jxW3qIPojm(M9S7U~ z=TW`(Uex_F&y0NVPp*niFeTo;IAD%O)^DRCpsG6pDl89TV?)-Y8C2?OIQ8QO|wLiu(OdFXal2`!ERBDSlu@lP ze{vMt5Ndriz~xiKrstLXO6c6RP)XM^pmEB!u8tjT4hdJ^f|rsI*-UQGD_|}k2R}Bw z#0s!&lc(N;4XhMH!7m~Zr-h3v_%=kA4s zB-<4GW8k%86+hju>K-lah|Q#Rq?dTOIj|ZbZp2CRa2lb=iV${UEjL40slO7kTllP+ zugY9I?Es?oYku zU%x_DNO%tsI?Z#(}f8d$q6c8J#MdR{7K9wgmZs^JG z^rVibxF9pYbn4p&A!PF7OgQ|zo8|pn*)d9#Jh>y=Hv>{(Y&jsOtnZFDo8tHS2`N@a zYNmVPsQgm=O%qVUp&u>|Kdbneu+X#mk5yVlFLw)~7@Tb!I##dUW72!0=mvOV4SJRK zSvRAaPv?(z%{m8!uMAPq?{tr2^YUS+#VH;Rq-8KD={>`Cv2LBI8pfPWeO#sKwtJCL z>{F!~Pkfu2GLv5QLa=)O1~6fDAo=ktTvCpckT6uRqfK@>(M;b?H^@EK@?-@;G$D^-facOCY7gBp8t zKA0{AA?+u?X?))FPLR7B-K=qG1|4hjoZ9FOk-r4IU~h7JeIw-Rks zNymL&*LiJ9NT&(ZY$p8Yse-Ow6uTS0%WhkBnANtjy~~qur~vC_6-<9d#{90yu8>pb zLN&~D808LoQLWXo_aAl@`k?ki#VBXkJ*m@zf{e^cxKa5>Q`Z_)Ix4fZeEgoNaT(Yd zpD-6pvyVzt^#U=|nV2I~`;DycXDO@+-gd40BB0fFVt+~YgJJVOS>ItQ4N-A>SgH0)Tfx$z7LFf~&I{m8|TQz63P4KMQJrOT@f#|%ce)GlJuN-eS zv_O%#N>%P`mzNfPsLaSW92P=OjNZmv`6XltWUt7(s({kLMNjPPC7DURQXV=pR+T!2Mtp9lchkP}hr(l+@j$aS+D2X&TVs?E0<=Wq&R4E2uo|#22 z`%P68j{WN6(V)^dE%%7jGA7C9eT;6}q(*d>E_JMgu;zB}%zB6iszyJN1E@5m7zUY* zRc?;ketI89<*;LV#9Nu@#i)-6D;grh-NU&ALgVH9A!luPIdZms&g!b% zrs288Os`&^Y2lJK9`J=mU_iN956fh^8K)0jet%YO>C%%<`6bDa4OSq!x~|V$edJZ- zdUq_7a+xZx`jz#n!n`ahC?JmIyUV16+HQNs>#FF(IkTmcul~Yjq&DaF4{A+bn5^)t z-FQCCR=*!X;LR)hc1K2amILG{Lak6|)`T5};FP?0xGLUGO04#$n)O43&*9tjtQFSQ zRedHBpWR_av#Tec&)>6FzGX2V&bGG}!~8RX{I6L_zc<9EBl)<~!}$ad1%1Z?TKdCR z`YU7lFOIj`EG6i_^EwZXY5I-1r4i2;#iMdOY@`La?d72sU(dgo%#*n}oMONXNwk2A zz_rnnL#~6R?me`k3eUNcn?hn8Kb1F!*A`*F)oXIdtGsB$wT`}c7+=)&SZp;J-4?a?Zi#-mW@-n} zoyV#Z8-zVjjyZSE>AHB}R50U~JEc2%cwjWo7xhAE*)^@E_4KR0$Z374Ps3dK_FCD< z*ORUgcq<-Q>jI2s+v5^9A^(q9wkBl78MAeR94tQbj_=245m%1uT<7g9E$4PSSI-HI zX^Sy_IeN`ISF!bDLViitp~5x7bKkw4)GL|q--2~nz+lzrAgYRZUhEXOpGL({T;Har zT5g138F}ogxC1;EJAs}4)_nAf79D}PD^7|&h}SH zBGH?l3l1)hk02aWpx3a$+_gLJ(|kLY&qWW>!NEzh0cm;@Xq!5nF5o63GqZ~%Iam$z zk=+kSZ?pm7i z{8>C__buBQqJmk@dUt5W!HE1=j#bNT6pt@ar5Q>J zUevX0njpa0obOT@JCw#+B1hGB7^;2|WWfvFXaM7upzyiNWPZDIpe_oL(OPj8SbA4G z*f6TIWu1i<&U+#hIxtb`j^1A)`Z$10+X`nmXRb1HCLFey> z^3_(hHycJc^*W&NP23G%yWl%*CY4Ik>glR05ak@yUzAW!RE=0|q8s>hRJ-nH-UBGl zIEA+1`NU&jJ-WJCq6Ws*KBuV!`{wv}RZ$SBVNPJ-&6}lmU+UBtmM(Xb!KuG*#8$>a zs;>;TSZTI)8?(v}xfXVJwMH#JLR29uwKhzjUW-h$z5L7Kp{nNpSQ6&G7;MWy>H&oC z-6INas~9TCD;JfnZ1`0#*1;Y`Q< zWZjn4;_N$KCin?tJ=uI@1%Jt!`#grh#b%^QwcsMhuTBHxX;~`R7n==1 znX2J}UP$oh51}3*byUzid+Z%g6SfC7HD{KYRZLft!M_Ro}u5`eP`FD zN#RS#4`nlFuTeNbjo;mkWeg74oizV^9EO7MD7cnA<{@i>3iNM$^3IDo8}9lsPC^fw zGWM>zb%c9eZ0&TzNo3-TT#cbOk<%<&V}H2+6)FI`wfn#$6nz;0w5$m?2(;G43wuxg ztv`A|_mRhB6xJ%l3I#d}^+L2Wl(}Gx2;Gh`h&sK#pNE$X1Um~c>*DC#c=HlESiG4n zA=XgKXcRCbY-Kd|Mg-rEHQsQ#H z4x>~Rh@X(WA|*O@VL>o6s)=Z%nhkxYKja~};6XeYcw_G0=EF&-Dq$x}b z%nRE!m@HcvnsY~9o@Lvnryaa$s2#HDkohw!^O3%!QU=W{^9nL=H|y$ z8K!sXtdBu3s!yfuXQSEJ0S##oR7J+e9urheVRV>9Prr0vKpyj?i8lkPl-Qw&V;735 zbQ#{>zf%OR8JB>C;Z^~jBij5a#~)pkE1jhb&ra-K=e6hkc8qP`_U7+`3W=p)Oiv(h z9CWj~9rJ>AIg8tBB0xxmtf~D$TckafRjQiclPkt@wOt+;O@xh#bkd8B2TR?|9mbbi zJ|-3R&%E3VE%Z3Q6ageQM^Ggs%Zn|GKE+=w9Z~PCenG8iekO?~L#xBGQYc8-@3`x* zvWq9gCDFiUjgRDucgbsKw+j2Ar=qTF&Mt;?*FkvZ8v%K8V{&x0pCGW$g~i}z{7UOGM#2wzPYphSZ*O(DeNM=zaQqcGgbNumHPQ! zD>PQ^c~*AsscLUUif>8CyPJQ8Ynv&Fer{GM^geafrSds2*K9avZJH0oeYZ1H(^DaY zil=TYB!_|9zRo>lJS2VQm?~?Vzj>=jYN=d#H{@6+tEr6~u5I54*mV?sUh7*@YXE=kdD-Qf$Ywt*hqXNommbHXBa<4tl_X>NXo0CcFziC9 zL&abu;MQF!WMRQh^{WKpdusC?k(}|%8x?GaQ>);f5+dFOK)M^TlYjXx0E$ILNC3->h+P z?LxYv;Q(DP-&&&}SdL}9{5fs5ER5=43^ua0GQI#ti8&ES-o&&P=X9lQyjBJE zm!ws*&zP+}@yz$&A2q!WxJs-8gW6>6WC z6aIBpTUZSm=Yu@!xXl7_^Kw7;QRvprdfyXH$)6*^>_VbFrtWq$6qI8cwqg1~11kXD z7*9f^28^D+S}?lUgKAZN62-ijv@Yh^AhQY8BQLjWcA&0?9Eu{uiN_Bb`CYr+W zdHvdY%RTrXf%h5A6AOMX5p8BXM-kV(&&W(YF^EEXC?)H=pn7vwHO&31Li|gnRGEMN z7XWpy?NC`*Zz_czm5w!=W2cDue(T|JrNt^L)}dT$MGxaZ*?)px>_62XrRE`yJHxt- z$W?9a3J+8Y4Hehiu1vbd7YEBs%Ubt4eM>gQC5+~g2oAdi#WSblhaRyTKGsuvRhN5T z6|Mu=9&XSiF5{0%x-XO-oj}5qs@~Ect}>TYm1DGS%*Fa~ne@Z~)mZecwsw)R$B~aE zv*&$V9KPc8ff+%oy&T4SXdpd=JwLiZg^$&d7@QhBXCtDa8xK+*Xt4$P#B*Cu^OE*_ z;0fvk4G1o2N&E$;{?&o}DI32xq}K@!ev~-gh`2U4({gyX(oO5&3$W_fN^uxV*|PF` zoqriE)EyvM@G5-;^6*8;rg5SS+R%`cD7eYMsFYdV@R|_y_aptjd!Jjr8gEtKLX|d} zPQmnL#=wzdj_QS%VpKlg&0*YN;vc>xOuH_epL-&iUy&bh-W>RzXLt@>~{d}9Me z`@IY5uC~7m?R!OO)KbqI1pop-iQuIF#ok*-Mcr<1b^8;KM#yzrkoC!?=A2;7}oF1aEK2!ix9fFe4$^x*Z4|lp_0}ZCCfZ| zyR`|376$Bmg#LF**LpNv;!k_l#{uDhIaGpHjq}SjlyK)b>8WG!0JK1T(D(0W{b!v2 z<((pkJJowvgXi7RuWp1e{_wqYeh9z)+Giq0?U~xQ_jhJZs~Rc9EgMWnjW{;81V6;H zXJ$I)lgJlYsKLkc2x&dcnzkltLpg3WIL>nCB1Apb&Fr<6&<5gOd}q>VYE_b+oEhRP zsau5=%4b{MHjhS3*T~)Oj_1fG=XGX#7dJ8UdX@#LD<9f@#I(W)4gfNn@r+% zx>w24a(%s)&zhlL$*^`!ssp8&cRO|}RH4#U3Oc_$*=FCKP>vJq<9-3_MjUgXsO~RRGq;1A*>G&$-MKd!FsgkYwf+xndtv(#Ejr zDAR^fng@uHGHFt?R=Y_Lq&6?Q8tHL>uYrB{X8$c(@#Hs6Qp{JE_(~&1t5Izk3t4!w zvW3b)b{!ew8Sd@FGde;nHLqAS4-$zOREIRH^gCrtt*=3c`<@fERi(f#ubVwEZ!lA_ zS#51b&xYOw%q=hg zRDRLCN!RC+UH7{4G|zs0K(g{Ne$Ac4-RQ7K#OFdcz}zc*Y)}2WbIrPU7q1eU5|NdP zd8#dw3^9Mo(J>-!?Kz369QxgF}@c zB5&<5+}3S&krQFv!yzkTc>1JA2^%Gsu5Klrr;`Q^tg~NdF^||DeFRdr=5Q%;ky5L& zs5K|^486X9Ke86T=qIiL=#N1x;DQ0idc=oDR1Wm*bXuc8U;e;%2CDqvu89n2#SOMr ze(^U9Z-U`!6n6G4DVA9cEE!2#S#9{|+WEJe8X86p*h2WWZQ-Yqy5~xKrbCNq?6xBY z@W#?xV&F7 zd-?w7=SLaJ{g2rZ^^Z;&Zb*%a(VtSCj~=C3bCp8ajR3PnpK*Mu(G1BIO(r0@^Wb5_ ztVB2gWGXE!Z4IA2S-FVJk#j83N%(qE3(!Ku>eHA1d4m7`-8YOIkW3w7iK(j;PY<+J zT4&|luE;kuI$c~pz*rIphakb_66QQ*mZoADk}4bE6#4nbDjmdsjQy>DP$jOAMh z@XIJ8_M1|vP{?|vqKE#EMzUk|I)Z!J`YG5M%~rdjVKZab73i(n`vUv|T%tSMC+%BY z^^I4j5G5jowL*=`C?Ew;)637T)Y0ar-9fsYY;EI`<{B1i;eH4e{8`Lrv7HK`<&S;HKA!u;_p>fw2?J;x3(M+lJizB5jCs-4L z;49m!GUHy7e4m`o@Kg}j&|cE%?lcP(71e-5wctK0IO(~Z7(DJx7R~X2?XpV}F$9rBSO*{F>M9SB_?lO$+bqpU;&V1hufq{@mo+1#W=T zdU~)sT@y92m@*<}g-+(}1d|%IY|0#Dxk7Fr4Lz?j>`A0}!2NEem3vPy@rc;2$mF=k zNOGD&E^SxS!~<4S+`dXJwfZ6a(<`;K`nM;Gdta{1ZK+CrM)o(Jkwh4Df32+wDte%S zh??CEcnt~Fo=g^i$lQM-%+wi15&QXdDx+spL&}xA_F#+CzYnRu7Xs~XeoM?72|*JQ z%eoqvp5u%rD#hB&QZX#CK#9^5DJw{^D${&^#8|#nRQc2s>0Sm*aPnPdQ*R>s6o>a8 zQ%)%pAi9?j<&9b5BmZwX3GC%Xf8#l@ej~SRZ#&J76o~{T?lpVw8&6M$-%!Lv(JS=m zm``-I`h|Q}S(LG}gacDZsp6D*&0eeQm!juR$5W(#FZ>sq|L9b&b=(D#{^X?mhkY9q zh(ZStNJkv>*1ETXzsZ;sIisS$;Bot64=5j~q(}y1fiQ7dST`aA9H8Ps+kaXCEGPU{ z;V#vj_S*{mm%9u0621Q2h`^WuivsGDs&I0?r-Q<%bc=FhH-F7g7I zccSN6#}U=yf(uB=UUm{Uxy6{sR4=g-2Yr+eX}`xi(=oL%%JrD zSPc5VC-a{I^ndTn|K6FuZ-xJl-U0u+X8w20{O_9iV-5WOJ2zp}{+P4$>>Y@FlVLi1 z^i|055A2*^qz_KOPo#~H1{C|dMjr8x!G5u{m zwc_iAi=E0xN&%8_!AD!-J9gCt2>q|cnzz8S-=1QRfg&4wmzPRZlvl?6p5`kM?%kxb(4-ohi6*$eM9;gnrx?DL zAfw+U-zS+rp8k-~<2knf`t)ty{00U{#cv9*Cv+It*quSe-XYjx-uFdhL5zzTR;gY# zAYqI-_M5Nrk^;WF_Y#%L^SRO5*H6-9;~vgEyl9UA8A)_~HNYEBt26UYr1$R|$v>+f zy}U?&Kcv!sxp70t?8Bn^CJ{GbQ>CIJ^GEmo=-@v|{&7ugLd0{7|NWZQe_xZztAD;G zG$F9&bA2b5#&;{=s6fwZ_stol_$Fwri+*@)&eLu}x*$)U?k6{mDB2&b5cw_l`$7NM zo&7`6{SOxfzG;LQ{^c2Mpe=oRR3>?qC;jQeQ{?$46Q6nmWN0|olz$M*a{2UTF z_W-yY&@G_h1#HpKeyo4__ec24t;Fzkxw9M#thVzL4?7-6IPk81y*_v|`ZNXZmsD@p zJ;$sx@{7F!Y5zh9WA;W&^O7D|InSG&tRDZp+xt&J6v%PY)}7#GeF7}zfS3hrb_jKD zlRhv&k1f)Q-fNbzo#!I<)gp&Des7Z{{N;Zr!bQV|oJ>`oQl*7A_mym6Map}T3k za&9{KdjtP{MPQ`f1d^8jjn&&2&F4NtxyG^Z;=O9lbD<_%4dzjpWF%SSexjDt(E9XF(e)?apc#qv1fDn3v zqdntPl6hpU0P+8^mLrzi*=}T|If}cuRup+H-*D~$89%Wv{mX;#y7Bs(nOV4`23trT zJj%X_o7`fb5F7$;%TD~Bt6oprdCS%>AeU@O#!2?akW{bY1ITx`UP+%;)UIdWlhO@0 zKD)gNUux`#KKjwO)d}HqfQift^cycp0Q)#60YQ&Tvkg|Vq}R>_Tt=L8HEX{P?$;US z#~J`0C~I{$TA~E5ysNn|zrUOpaK-KZUggb~tLq9GnzihuwyI%EZx$;j1$sVHLfI#w ze^Al#QkhrQmRCAuyAYYZiKMa28p>*=77^50A0+0k%a+fTJlLHY8sK|z54Bc5?`KJt z>Pcj-kZG+>>KG?pK~GkVAzDMiuX&!79yV)KcZ>H^aA_#zD@I5Xb}sbjPGQ}cJtd)# zgimf@XBx!SNstxc1eKR46Amw`DMN=qDu;Y6>-RFd4R|9;m~`Txp|{#Dn=d~7^!|s6 zsOp2yE;-U)B-@*3Pfq5!ndFrplU(d0S1uB63#^uN!D)7W-Xj#Geu-|XUh!#+UX>l` zfp!x|bK^IA>mf6E?%S~V&13^!uW;K0Z>>K_V|J`&c8>WhchyL15q*LlaZsj0H5qkZLEg=%k? z8bII@gv-4UIvRH-67}F2jGNVCtcyp&FFOttnCk`SJF43c=g3MF(R0q7H)pqBW3sP) z1e1-#UF~%dYS*ft2iV{ldp@Ck+r{dY!SAmwLwF&q*X68svYR#p*J>^eHI4bRT?75fLo*B@GlT}qdUVta$JoZ&TZ z3Xfx57eu8~wdV)QH*u%C4$~E;A$K#@fp2#50n+o_!+8nnyyZ0h^@^~U0x)thTMsGR>q}1<4OAb;-$_ii9G{8^0 zp6g(uEj_1Z`rT0c`49HDAIT2`_lHW$-=nPjT}Zbq`9jJ30t{|DYuFwQ4Se`c?C?2~ z)HO1s&Soi{sHwW9RtW&h4aR#iQO5gBixtloc#$@5Ak_}f=I6n=Z>OS|albMI>n-ZY zsY}pwynYa|C$qV?x7Q$mg!l2aHP~M@oh{5?Ei^)|{qd_u59jBnArQ~2yEIaOFj)TW z9W)hm4x@oA(@`yzCCy4RuF_~TCqS!^mEI9tL$oyymu67R0mrWsV6?IXE^~U-3dSI|4mi#w#$1 z1bDspRNX>jj{Ig9khKdoPPfDF2Aj?mPR5j@?uY;1u709>8NdYC?PXy}72 zj7&SEzUc^2YbSHI#t>R9;IxzRS~{UOXDnA?7@+6Og{59OF11SZ#J#wkDV;b`@N*TK zN|-dmb!8|__<>lf(KXs?uIA-*nPH^dnriY<)@P+$dt#Vo))Y`pQZS9L;&Sx?{Lxsgrs+J^i7~dC=4CsgV z3sWY~jA7ox7g^Vj@ThaxG$>F=-ebasHF+csBne6J+5ZY;%g*7818Tu{)JUxE%VO>N z*F4q>83ll>yadrXn)GoZckMMX>3Hpe6{#*LP#S&s0qj=i%5c~#ttajtuROW>DXYC@htG!>ORUcRxzIk>R z9efMj_VtfhGG=H=Ul?kEkY_zDZ8=j<_4yMa7ddyNsA75voD`u+3rfEDD1H*IgUzB- z)wL>-LFat{$dOGCzAU-oNGQo}cdE;s?G-C5iTNoKA=nP-w$Aph*!y}t*axkf$)vIF zlSkPyYj9_?VtLR~bYaS&fUTTFqe!csWwb^Z$<8P4f45Hf^q_6Pc7=8bkT98UPgt^t zQr?=#*9f>g-INfd-~~#!zrMWBC4MyMoJ`1*;yDN0qm*pEz7)uHlcaFWd`Fx!OQw|z zZLA|`opXWb+Q-Ibz>uR=(&mqaElR?|dW5n)27AxG!#-bX!}80NX2XTuQzbe}S7H~4Z}EMDNSJw=yl^2Vq6dX5GQRvrFGAf@RF`k81rr@g`DXh@1x zh!wMjX-^+7-*Q%@@ayIxQY(tnRQ^em>j?ufqulEN(!Nybj$nTcUBie|>t^Zn==A$e zf)j(tvmi}9=dPh8_OPoCL`dJ^NV|~hY4r5e(Q-v@uo} z0ImvZNrTb;_qGTJHOBLll$3fbhnF*t1#9$YUo#)Awg-tI-|ru9v%($sPwSka6AG6X z_|+Wl?J7rnlp=6_mAtVwJ8k#vUFh+C^S0sKNC!OkV+*%mQpZe|f_YOe=u5m&>BLay7jWzL6sBk5OU#Sq7fsUJiiWs}%q9&_eo&rVgE^KhAr zDf*AsQbyNmt6<<`x4-b-xJJGhJX@6_mFFoHYXvAQt8ay!QChB>9qZkRf|?&^t9Fkd zV|s@LTK!t%9oO>t%J*ECE(W654c|$3&0a{6vI#C6ch17VnwD)p`+vC`aHcihh}o4F zl-diX?M-GX;wwHbi3v?A=gP?kcYfb=s!_fgV=ZbXwMHeM`w`V9sS(FzzLMjdiG*^!#!iGzx^)OJ3}TRN!Ww>+Pg$bj0vMEnO_W6ocvv*Cx!NQGC{ho zQ%lgN4Ih8m50^x_j{JhaUI7NhVl*@kF9*o)5TuL7S#ONn1px}=Z#XNjx3!jKzn~HGK2U|1q=4*rAr@QTV zZ)xr-UyN1BXW|~Ov>!&%aux9e<5b-o?;l?vO6(f92m3|)7KprFJl5^lBbke_V7`=B z`q#EwD$m+5YvdZ&Irm*In$&SHcA7p@o(XYT5jA0OXG=`n*QmNWi48isJqOIa<>p;O z9iy*KEhf_i!rW0l;U)#=fiYU^GEV|A15)OsSesu1MN5oY6WK{L(TlhXwTIWkov8_O zEKm}p#}G=3o}u7FZXUGgV3t+n-HV8xK1&-7fOpxPjpPW`-k#Aiw4aV)R!|Sg6d|1O zN`<#RX460~P_3;i2uPLOS*RV)l)(@M^JAnx1D$eW#p!X`FR+EX>}9*&|2g;!23;4r z++5e0ck&#u7EuU&Jnm3Oz-;RaY`EsdP4D+l@pQP8;7!cFZ6dg6rMu_uKm`#=a+e{Z znf}!91(C*m<#e&~u+!byk)akJgD5qB5pG`3r3MnZc*B(a5lN_G+VcCuC^~O8yaeOH z>wt#jZ6(CiCs8mcaBH7(uiT|+7LJ{Y=Pu(M8Q^ysUS+lIENmxmoi<)m3NvN=zR;(m zIneDgN@?xsV}n@0^}YC>VKu++Nu+z$zghhy8EXkE+^ZfwA{eIjwpiGS1IOc{!+5NI zaMmd5bTH{fbWaouP1_n*m|tDilnQYPtlIXv&XMewOa9T62K3G8_8_6w9w{<`J$hkd zqHQ3rO-skk@3L_;RuIP*aVS8BuG@&0(K&lIQIrV=Rk?u4!5CoB{Vz|vtpq;+?__G~ z0an&MPJ77tGBAp9rf&43za;75L@xkQrPOYg5Mmb<3oy@ ztP&`NzOZ0IW8lpua=kUa&WyNa6XTgv?)J;|oryzZKWTF&Id?$Y6@GiH~L^A#4_0JWX}Y zdRD0V0BL(yWW)K;Z+)}|3fb56olo&edHRE!!rDQsL`sBf@HW_r?>5_AWdM9ZH^$cvpWnw-Tgf71=?=GvFwwNHE zCT$8_I#pOfVl;3`yn;qNvY7A8*2rF14qexJ&2=6m2nK;M`pmDdTI;I#vv>DOAHD#% zCG0bTFuqTIZp<2-q>PmQrn*oA7nxLH=DXe%L(Npq6lRPmv#G-N%BoLLlAVcqp4Mxu z^)Lo7eEt_;&wtg)d= zc%e@seQ`zk#5$PUky;R+6Aj+Lslr_vu3u%5%BUi9DTO`UKmPvVf`V*S?E0?^Nl&ww zwXG*W^l=<`NMRk?&h5@ZGH7%S=K^4%%v$U^s#CH|Dw7t^3)b^Fn_|kopcd1_^*SQb z>hQleQ)U(t&#rr``+2E6U&KF)N)&-)Y0`f@O{zVblcS_RlzM{@CG@!K?KcgKtY_~~=p7rxtMlK*$DYEl!of@TwA7IxwbuOJDW&wCycL&=9Q!=PtC~k0M-AME&+W{o zY#*;g^V5+48&>BSf{f=*28gb&NLjVA(DZ7{0RO9At@d65$F1x1qIeb`zgl z&Q!4X6Cp~^VFS-n>P?tahUry-<`u_0G>ALb_b} z=*M|d73S+CwPFJsFIG%`1T3M)8K=4g3!^N)^|keW;xV0(zntD;gVE8wi+USdEyN@< z0GRWDr$|Pv7RsV03e=>q+C4lGu8x`o6p1mH&?H`&;0Ml*lnd57=fWPN{*`5j`sGKk zw#?pbH;0pg7ILf*@LGR-S}J3KdS${)FtJZmNU-P>kVCgSyH-&o{BpTBjnm@%?R3LMgqM)@_2Jc^Sd@k|Br-J~C~wtMMY2A|jHW=Vz9WBp zbE}@rwNAC^jmt9W*6_B;W??n!U1vh-<_GlLd%`Ui7}{ExZ=WRKeXz(X5=;5oCIv7l z`*8TxaGEi>Y}ra3w1$B^|29juMDml*;%F^%dO8P9KtXUdR8*COz_agir&fElg#-iL z&+Fo{u`y!&1+y2EvKlD|r47{a!i<=L#NYFj`51#40$h7z)j(HEMwBwUOB&B zh8=FDbO=`Qm0yAb_leh7Ri7^mKgoC>&)$oFU|_h6Uwo@oxn`O^O25615R_ER|>XGw#x_tAA#5*C`OotQDb zOZsmw-J$|84zC?-hZXOqiw1@CjYZhG>zWr>|q{mx8G*i9=y4W+MfS!o`z z7UtxnJg{HRMv=YJ@q`!lotsm*16#_hLI@uJl`Gp;t@6(@H@YJQNP2nULOH7^7q$FVg zYg9a2COHc?x)sxx2|QJ5Nr;JsB~^+Ra)0U&&jVVz-+hR1i#9vE$4f3y2K)XkuF%#l zepkS0sD9s1V|C?Hy2YT7|K7$AZ=W)?%7R+c+=83J_e{sL%OO%kb9ivZWFZ%ox>Cx~0RgJE-l+VHLJ;zJ#W_!Z9pM!5s$U$UAfU<#7mm4@@@5+k6|Ue?kIh~TKJmz?K^_9NABGNzsyBa z9m>E=ctIj-NFPyExfbpZIC0IMf+xetqEo^Ur6+4ii%|g`o=oTl>khk|_X6J|;XHZj znPnlOQ>I9HO99Jg+u>S26Jg-2z!6EXW~rUyvg_0f9|x2N+fUsv&&}wfooJGP&QOHR zaE9eAWZdp;dt2lA%PT4DBZHm*{hz*2wLGq(GR=onw%05YgC?tmng6N|XABEH;dd6>h4yT={2Vu*%+W^tywp`goh_u%NX43( zQ?K1V7l7<_u?C}3_(P}UzeL*8f!2x-F3jCm{qH`JVcIh6)M18C_V&c3U2g!C0FRj=~t zhSY>xo2gzaQJy9EO)dodkNf@{&yuL0Q$Q4;%dkA$Rl#>c3&@gHm-0;y^O*f zhwinB*;tA9fL@4S809@3kKrVq9b-dH=gZ@GdCqpIc8^=%hTP8hK-E|1`J%RNB`ySM z1F0GXJYmPcVntk6OU1*cquKf#B4YrLHJddhQ}e8OujuLHOaM&I?fn7W+tye#w(Z&* z@&^PD4n+yr2BjeAy70LbVir6i1{SsH&e0~1t6Z7J*Fd#U1|W#pu*TH8*Pm|y9Hz4o zslib!1S}d^zCJJ<_&{g$6K2RUZZdnz`FD)g(@N<6p5+bP@hrQ1k`!H6`$d%T?-FT@B`+|LFGP3lI4q+* zTa1kPCelm6ru9pd%A z2%ojSWV-JN8W41Q7qXe1>KSc$ARYr)t;EmU972eD1>!&H$G-aKO&?g*=wUbe{vN*> z%lG`FlFI%O!*`|;^qp>ups)cUV*{~AKqozmxEu`^K{C}BU{vOzQmP`6=aH_*cXfWA z_wQK`jmiqWjLx5kk~nWlDm;6==B&2-PRVS;;tl@(_ix|8Pu8w3SqAG_O8d{wGo_-_ zlk1%}@k69rsEe5t8;!Ko-bA$enJ#^rR;+S2M7-DS&2rSk`SqE-Q5!*9VZ5)sS=|vu zZdye9i#qBH<`ZNbiElI63GpHB>)%`Z@B{4pb>qDG4P4)T!=9T~Yzn<-b4vYVxBRN( z7*KQiit?7eX<4i}6ale58;}Y5I+)rln%S#7cJf@VC>R?DC#~TkBnQlgOFka>*HS*=DR6JPnnl) zVDCDCFa#Bdd+;St&ac!#+h{LWo-7bv7Zn%;5!g9uYa4nc6JXCaBlH36A24Myo2%i| zs&$R_zyIjhbAnT9kddv;?5XT1;IC=26KA~{K^wX{MQ}t3AX;xe{vh$aKs8qFuIVfF4OKN~IG!eFy3$Tn|L3j*wW_v#@_Bjau=#jwx)MuZj`Jo|ICXT3jZ z&hD@#yYByr#=~(+dZ^lm-8WZ>Tp&|u4nOc5RMWhz_nLc83TvcE$Yv?3_r*^SeaQLp zquBFWH}0Q8ysWN2?6)QvjTgwy_OIOpCuv_*+rUWpgq!>=c%8rl0bPB&wPvu|NZSQg z2k;WXhcj`N_Qv5#vg*~wuXPalGkKgtXrAO~%$eQV04u6kyL`eB3;+7qJ~`{?zzKQn z$DUe4HMuDfEX1^8JzqyN3Un+PqwT$zTKm3~(6Phi5aTCfbFs@i=hza)`WRM zZ?NH4Aw!AB*v=9^k{EYZ<_kobWQ)UvPOjf);=K%!S#Xe$KgA#!3#yB34XAUT(R9hMg z>yV4+>iM#l6(!ee2KT3Ms7!Wy$OB9&$7={ITyEHo(RYl$e=ndGwPRbW_~{ll#x3uh zYoy#f*B}JxvH0t0uYL-h`)<|z=%B;cdYo#DDD4|=&uPcFrLIfDWEi-WJ%8^Rin}cN z!tDTWY>kC z+w_V|aCtTbC%upo8}LU$Y)-~*no(e7U`W!g`45T-}Ak#_}Uv z96Vwjq6I=_SA`KTe_4rI79El)2$DKf^~HSVJ5_#2i?>%ej`I~wR!wOXGaTl&%oAHP zNn)>YGm(lQ2&y6Qv%jn{Mivgt#}3Xhc&=W*9aWx52;T}S8=|5R?#leY*CZZbyy1CU zL|M&bqvXNy>Y^_D4l7=3L;FJwHlt1*3G3N1Z(z9gwC&pXJP=r=n;d%G6G>y~E($%d zti>`uSpSk$zyNElPN&k%NgiI3CFayX$n)>`Ia2Fk{5lSMe9y`= z)(rpygaNIwl0y%?YE+RL)tn?ulq)vj>hvc1Mh3?g^1))`2g-qD?GmOQJY0O2Fg$jv3LlI#&%F`52fBF5U z{UHEwvg6)#H+&h#=$3EIx^?<`@*ucFC$id<>!K|jYvc?T(5%Ct-SDtK;f0bg9$+v| zTe@na{U9`%4zKl8lNE0f9~%SoN3d}hy9rcTW;kq)c2o0qvjZ86Ds ztkOveDJC6rVb3BEd&8LIf)OWl{LL@h1Kv~nwv=%p5v70&pQ)S{7pgU+cm$a17!0N0 z`PRg}hMwFr983ufCZZR!r0{%C+(v@YHSe;y#~YT5sVfY>Lqct7Ft-t@z7Ev@#P!7E^Xb#UJe~>^g4EW@jIxSc*_W zZhojHlaZQ;YmaX|uN)bf(W>2ghQF3XV(O0Cl?e2<$?b}}ckka&5(NJo<6b%OxYupS z@;jcS7jW{*fe`x<_oL=OlIK-iV!X z`-6eCZal-s$xHb9HOWnm>I!=f@rIE=7ay&sc%Nt>iDOa3sKx=#?@_S`p-)*AUYAbI zGzts)zg_^*uH(?C#=`}A+k*vry64B*aTKyosqEd$m8E)8Tk1)1>b~I%&1C~1LCqMp zcM0Bo4EOiHOF95259}vR$E|g3d0{_6?s}N1V#wLtb!FDh*7Jo*s6Uw})t49_vD~VI zzVzkGhr^Fqnb2vuMs+3E)m2h@+pq1M#sh-2?eSaX7f%&Bbn*Trqk(EL`bZD&Js$f` zKHcW`-6`DdbmR5QmKMb-O~YhPg99)XIrB4#3>Z{E9nYB0haQ9ke5ZXM8bmR5wvOFj zrf~sgnK^cu!9>Y!16{uC0QPH@?U;C4q1*O)KAfim??PbtJCf4#TEeqp`_7+ou@_z=+na@?Ls14eeWV}q;G-X$f@@4h!7w3V+`NmGXbd{#wz z2*5*f-&Lx!_nqu6)GB4S+(sX!`G~8$3nac#!PGH0M>K_&H(M;Jvh!x59IQL=W~&i@glG{!(rD$+waT+hoDkd5P#v%jBA|I% z%1+gId}Pkwh;rKx%bn}2R|zAZdQoyiKZrkblSeh zY}Mq`sRn32qSaROS;b9{G6!EaakB!y`~d~)7oVPbNY371_ zExiwXnC=_x0X-5hw(t?1%0Tn{0SsEFAoZUlw5IokUBT2l@k+pJ%lW?z(VhH zU3>)qgreWM?6NF&zh;bFCyC})0k7T7r%k0X*K)| zw@Y>iurNozkZ5Iyd_e6q+XVZwre@W5QhvN^>4FL(Ix|YnR6)< zIE@#>_o~|qp5fX=tdAD|4Z47j2A62a)@D`X496vAcsuC0A%;iFd>W;c6_38;iPDk{ z7g`v|{Ct5fly{btvgcC!0GLX4>eSdoP*~1S>^3sP^iik1;qro=7t#8MXn3~Ke%fJ_ zFWlco6)bohu6}sT?VeHa)sGXf2Ui}KdcYE5n@k=;q*R~fCA-R1m|&OGt+cvSXo{Hr zynbn}SS-Wz$;cS!s`P!BuMgv*38laa`@+_}9|5+=#(p#MgCsBot-xuo6pdp(ZyGM7 zlSZr~-EiI52!Dph=&2D~tB)w!0>Jcl0{ldDU76}aNItt^Z&VhLeazBIiZNQ(? zL1y9ARfcT+$688mf3U}pU0K-`N?eZ z+hL}C=@jWiZUuNuVZRX7Vmo^!_<*M#3D9FED)yXAn|+ zPId3Zn=FLBfeQ;(VS;I<&gq2Ns#BaGSwBb-JO4I@7sq3`AaZX+q_yn8T~}AN_CcYx z;)2)Q0HH^+k*fHb%pKR%Mzrpji0Py2!Y=}0(;6hjuR?L(Xr>RoD5rdCygx0<0V#y! zK7vR6Jq!8Lf~*#nU(8gvgka}lUYH*m%A|;mtHg}*G7g%`;0&|b?S(T>F zb|ICS&t%rI{8BxIzW_}~-^*ITjk?OE7{BxU)#_JJr|am$S?iMsDDsBg!nqN05bFxS zr?uo7{;VMiTuK>#{Vr6625ifj^ zG!Z)4;pyq4iCOEjtROxRl;JRupc{I0c&jI#BVez5(?x>`%S!!frc$3HQ!?^r-|}!X z06FBTh+IF@w6eaMkk;ed`>00C#Poh4-;>WduE?k3RRUe$iJ;VLOoE{IJ5LTc>gZ;wpH)>@36R`B*}MuPIVm$q z8HBaB1Z`%j)b;FCiN-yfPQMs2?DeDBSBiR9A(yL%sash?SZR8d0S(K+Xk8<3eY*T; z6y>yeM`U}&7`ij&(l6Y+EL#;HmEfLCbXmgsP5s=b1c15}4QH#8Wcn`0*nr-H zh8KsOslTxJ-`(vRoOTgjS--fc_?6rQJU7w(=>P!bj0c;H`2u>Zs<*ur5KbP!%-}

Kd6`Ca5kLh!53XSlsk))HuDNkSI$!9N!-=0Ww8T%khfP&mH*+?$ zL7V)UH3*>idPQPvM#s+q441gqD)@+V)GWh7G$E0AwXytz3d;8N( z&YQjWx8|`<5t}L+2vj5hBZB7|R3*&hGst;6^wGVkK}eGpYJLc!EF)e-oO??yKbqE@ z(#I#kDgBq^*NtOQ_!MFlNrT~i@X15NWGjs8F{Bijn@q;*^OKXd+RfJ-@Y;3?8WMbh zP5vG}nV{?H*#5$@UiamK3A#|E10wy)yqV{d_G>$8b%2Z9b*qS0or4@p_`j5xx6lt0 zZ?Up^9Q~5)iKF_iIsbEZxWsw?^28kY4qDv%_er~E4E48D;K!Sz4jQUGeaVcZn22hI z#CcL;qlh8`{F1kOiN$RyYjT?l7Sh`}p2$N+rF`{{%!eAgg09C8X{2MKD0-4-Y5Gag z7K|G%lMsR}6%#+jg0jMW@#1Uyfo$@YyE~F@Qmf`~OhEtXqnSKnsf;gb#$H$$1lVZ8 z#sf*h&qTs(cy!{$SM7Z|oEC%`S87?xmJflRQU-%5%&k~Bw%jJ1*8ozD+4^p5pmSrXEr4F7DCvmT z5zAlY@gly7)k2-*1$=dq@~XDi`e%9E#TS!jZl^m@w2o#R-NS<({ESdKgPy2}ue8!z zadZq3S#RS+L_f-v%m{Zae>Bt(XUe7)lqy* z)@+4lDQNp6^KG;1?sK<<4bKPb@@nLmeYTmhDZ!T$9!Zz|NVzlGqIHZb-leb($5c*o zX98+8YwHStWAvq-(g#p4{RWuQ+ zj3ZgkP6GpoHJO~us(Zwc(`4wQX+%_Eng`DoV^0h-S?R&Y(;dEcF`QK=i`j>{HMT$% z#%W+uBkFoS#F}e4+o@!00gO2tzz6eZ`Wpe1(67ooIgUmbB(6$(obX=m8=o@v{`<#=qx&*oO-?D6Ep=x1+N`OE)0v5rn+TWYjjYFby<^P2 zerBtx7QLNmcGim4GJYKEiY;EVVVZnCrzrwUBgIx+>L1eH5Ab(?+p>_B{*r(N$3v7zl+b{A25Y%xyi}; z`r}%Ut13>118{6j4uv#vJnQV&j*gRQD>QvORqQk1Pd0z<|@Piz6iC zG7}~IIqzw;DZki!D-w{2=3mam(}K9={&kks2oQ#FPA z>S{bMzG8jHmID`Em-I3A`R_R*2>U8QaO;l~{in4Wi0f@N?>6$Q895<=3y3H;Rg~HxeO4fH@@4vx6|vBk5$*!i6ss)#)J&+^^gN4}8zTRJ8Zem*R%R)qV$# zx9{7~otg~3i=&uW=%@#565g~#EKd3i_loVtsWtjCJLnZI-a@(1Zn+5jlCq!n^l|17q+(O!r;;4rC{ z1ae!7+%7RA)KY0}RiZU6rNLtv zZ~2lbOj3BVLo-XcTVJ5l0DPuuPae)F*ZzmuZQjtG_;j`LOhqYz+?Y}I@mr_|n zrM>H#44=(yW2KA+gv%tX0tZ9hr)%*i_QKI zYi}Kvb-T2UO34jKDWM=O(l;R84bt5uAl=<5oze}`jdXWNcXxMp!}mjsfoR zeSG^rxkc2u=9)R@oO9;FhZD!2ulp*WuULYHs7V`gnaV}%_ikzm<&0TozF>n)P%^qG z%WK-pLlVxxIRnu2NS0=N`nPoS?+NP9C!S9r2jITFdfoK{JL$<3r^!1D}arW*BLaZ#0ffs$H446CkolE4!p&`JZN z{{oILiw=(2VrSF#*5u@C-8(D4vP==tqlqvM(IWUgKq6#tlZG=YV%+ySI#0vXPhQ3w zSg~pNBZ!{p6*MX;=sbZo<J*H# z|Nk*m&~e0uvB6{82HNY_ylH7#Q6Ge9vLvDdHMY;ubbBI3vV2|dkVhn&#na}hkNg|b zqL?kUMN+|3jraFsQ4%H`wQ*4!Rg9)HJn!f-GwyFr9gIHWkNv&?w4HYOlQkIjd2S!h z58577ca9DUHfY`ui|}(8Ri(SM85x<>U2Q$`#+s?eif<0ZiC?y=-(|lT?uY72`W+1u zV8=gei{hIg7^%XwI<@oa$}yc!?i-g<*6vgqiQB5+I|7-Qhe&bIf0)>QE$}-nHxZH= zvp{={%9_b^x+1wucR=i@@xr%ayk{bb#W}^- zl_92BtyV-FdnyZ9T0b&rT5q`EI}pX8s^F9}WQ>M}wmz*b)@$YS%;`Zu`N@nB!sMM< zAH1Ift$%)YM0@9AP52+vH6MhKT9cprNJe_{W)21qM+LV~$D1*shx{IPQm7~7tOCV=>x)gRW;#F)pKO>dAJt|GxBOjlDFsLKxT&2#H?Vg~h z&mGaENn=;Zd?Eia%=}xVgiCogp()BUy+R0A&g?KyCw|U9hap$$@=gntSxE`DNt{UN zfg8vk*-adpY3#M_nvasV#;jDzRld0H=cxG_SzZ;m{f_Q859YIVu1t;7H)Q1M`87I0 zv}D*Hq2ZX!<}<5r-32>?Fwzw@T@G?{lNb|E&0EOC;$4A8xnu{x#^Po$KYZ2c8~|N zjj6X6J0i7KdQ-LT*E^Cb^=@>Hk5)qD8in7{CNJIe@qHE$G9*&hY#57eU_QSOLEne$M>*XUqQF+8u-s#jt=adKQ?H-rwE`bNDB?& z!VhoM3(l!eBXFuHH4V5bK~YA+&=wsdGyb8MbjpWc__^cZ^1M=%-sXnOW^K?^B$>Xp zWb&3dOER2%7RUOvTz+relmQP6-G&rTv#B#eUyJ=?`K$dMHJY&YX%tsM`<5z!uku5{ z32m1C+F7g zlD`Gek=tE8g9iTBdeZw#W1BJu3DJ26Is=&#Y8ZoVtlJcIj(d!*k3DQrp9HMxoDNtU zsVJ{8C}h4bI#foA77-Anjc+Y@5^BO@G5-h?#e&tAiRm+6XcAQ+)hIQ>$&yU;?TvAa z`=sB?eX%P?L@cp+t=g7gNvoyBTv~$CU_Inki)NK^Tj~9|hEb7^PLJwGyfvn*@3|qF ze123Eku&3LooOr@7grRUUqxIJn6axcqM4^44iWOkK2Z zH9A*%rHs|Yseg?|G~Z^tna7!q<;#7!o%s*t`YEApWau{3@7MHRoo7&(kEm%9?nAQk zhx$PuWpl5OgVcc$XOMz7(Y`M<_R4Pz1$T+k((=!E|Nrs}d)@X4#{?TYeueMW#GBZoepZh!I==;b^t zH7F4q$$YTV%2tkU_OaJfJ@$KZZ8MT;v%4!0LX@q|f2P!*N{fxtV4*UFgAKW2$o7=w z=*+ak=sa#Da6|WXOlwRB-uv4dn33U_p~N1DHOXAal?^|;;Y=zD`mM){IoX);9f0nt ztoX8|hl8g$_5EQ>a`YH|%$6&vYw0X%!EEtdIZyGxzxhbcy+mB;ADR2WKKSK-o4Em5 z{B!1h{FAv|)_#fKu59&G02!PN8VMdLeR!BgB!Zc?(y@?iB41j0vP4yB9f#HklA%yB zQl;AHb(%sIv&-tbAr|d5AN*@=)v?aZ!u%~@<-&OV5;wVW15M+l3@myPOdI8;u5p*J z&xNKPrGZk31F`sxKBMjHwiOZdJ|oZLH>RpG2T#8`bq=0JVr_1Ehs!7EY#>?&j z$MC_w#m<*&qPKM_P7V(0!J|Tvcuz_BhQzjzTuF)3ZmT9$TQ0N*=o|*NsOi1}o-wDC zo3>5-3@TE;ijK#{!ZLcPe%}yQt4^|&Cobu_;rdH=fn{^;1B(2OALCJa16Wnk)M=L@ zfR3=~#PVGY>T&0ZwXl-GgGH;kV3F5%=9j+JF0I58F!z@C`)@EZ#S4n&W6I2SZSK#L zIl=+xnhV}3qG~vU!BeljT)w6q`ngC)Vj!9ooNKYEb}o3Kmk@Ihuz$V7Np%l}0`9uA zPDN2BzfzgdlVg^(LmyX_wDuf3$v}V)XKO3sZ*)2mF#G1NYsiGaA*EdZ+o9*_G0WxWaI5gaA@b(Nki9eG!Nmc3=ONd= zZax*8v<{xuHkGo1&aaEqDVG7%VR(_@rXea>=-qM2b@Jwi)q8h~XF1!66IVrF=pv~T z?4k}%l#dAmc9hFcO(1p;F71ZIybJsYG@SfjN;K1yK;U-o5)l4nXNWVgK0Bw zm<A92o`Lt?wQ?G(iwN6Zx9mE^;; zGn#3o`f!0=P1+Iig()6Ih(vOelC{b94r!suda87>gV!RFT-U0LKD2?dkfz=`Pv%2T z2k-v=I(y|#-cKOO*rq=W*HBuYzTv*FBWi+_ zwh&t@Uf0lwG3NH2yM8@=7Id3Lm*kT`bIrOugev|%0%yKiW#rLk51q=`qwM;<%CVAmlbk~^Lvdw+2RRhD;mMVdL-qJoE z8NdJfbaZ!uUkbUh?Ck;9{AL4GqIw}>fwkaCX`cl%I5bt5O>uNm){oG}Z>UrdrjMVM zONjJZlV2@W^9 zuRCZyPb3KRN0CLaphsFN{#>v~jFAC(FDOr4jA!RGl|}bp<3hLf>o1hL(p$C@cDW%I z9@Ra`e|!!$#xCm_zf89g>^9P~}txn;f8G`rTCbf9TY3%3@ zp!)|~u)4{yEGC?t71MQjZ%in&)>@`n$&pCH;V^Q{Z$c7CC0E`x!Km5}l5*;~ZG;7_ z>F;Oz*etiXiuUJIQ=*uu<(g!kmG_#Puif4!IDZKW;&w1N+uFG36UN^+OugQ{F1;~f zaf|y^m})E}yLdjcjYxoUId!qH*@m;Nn!&K~Ih9tT_z3j{e%sH#2)3W~5YgZMOLu62 z5`6}LjQAjLQ$pOf-Zrxpubb_GDRm!}UN5uB{&zdy?4A8}tB<6A+H=MjzjD9qnTw*_ zaSf`3MZ(P{Ao?YBqV1En*M~z`@iww7zpNX&&Ctho=E?QEsux_n$7Gga`NlnmF^nPW z);1p&&{YSNsC2KYkYKJ0GWR>SI|S%!EX}l@h%EP>mL~VNg+3|xRYmd>q~kO7`CIEP znja?RH2uEhjfU2TDdP05Q_Z0Zz#SzMNo7w**Zb?3*Fb{&x2xAP&X3Tpjk}Ll=lMmz zvOjd*szUPI>PKcbh4(YU?k37WkxylQb~GY?oEscd zYjGqpmYrZSKhjI6vMz#`xx%6%bN4j?Kw-_mj58xEyf>8TO3y47zD+qLUl?pP~H6#@eF;J9L-bWxm#l7EC#5Cu*z<}N0|>xbfaq99P|AF6D5 zbzs~j1Z4Y<2fLH1>+Q!ZF%j_xxxlCaqR8x>v@Cw)=pyAjQ1q5F@qRC4VQ21ZtKk}|3b!SPWG*` zcyJKKJoW6tp`x~{fr?%-a0Sd3HrRZotV+?|O>Bbphw$MaXc*U4ur7IFqt-D|wyXRuxf@$;c3o&1%mL0u2 z)-PX;@h;LjVG*y6yrzw!~iu}T7fptapA(AdfOu!=qd#uNxgl$F9Y>} zQidp==wOXeYAZhsQzE^53TzzOD@zHm{zbbFdo4*%l!WEFUpQk&KZ**6ajAufY;_j| zLXS^w0-e16m>&pwr%OT~T}&5jFXO(%#IZ*G%yD!q3;ub#i~NHT(~L+eOx!*AiRb6o z?{mXDCxTgn{dYL`_n$od#&`>?f6h&@SR;eDPhlibesAaUfQ|PvwwOKelnBNvuEkwc zG9*1qs(PBzisROHp`9t=r{SA3%*^c=Di9`>%=g(UGZE!a`lCgzr!$`crsP%Qi4h6; z$5G&gWkqerDidG`^?}ugmzR&sG=ZLed4Z{tyT;1rlg-L1F)JD6%gFCEexN?z&LGU} z%P^)KKsMZ)pf{+@Pp3znd8l451)xsb1E`lsS-|BV>2Af_t?5%NmT5+QDQtO$keo7p zGIDV|dJ+3mBX%+YYR2n0CeqKa?G^@&FeXf|YxO5G7CX<5OlIKWu&c_T@Ng!U|4~~u z9wTM?Mb~A|O36ky1Y*jow}_J3`%~I&3a5T|=IC(g4zx832G)bYW zlcr_|r1x1;mdVx0uA#2wP8bKQ*8Rk)b?bS#>Umfy=erSayFB5%9$uCrN6BtAaim^b zH>)){CUdGC*EdyRpejshVopxY%sfavtQYMTyxXF9iaIDT9C<7PPuxU$it>RvSpIM| zp=atoNdFIT?SK3hw-?ZE0SL9@XF{z3q}gm4S*%_!@l4!ex21BbV~Ir2lj(j=jq&;h zP}%xv)CiU=M-#?Oq^`5$QG~kiBC(8!zdJm35+Hx`K=zrkuOF+(`v>RB>R$J?YkxJn z%SU0bPIkoY&4OtQ*_}$CWuO@A42s>ky}*tV042$0e=hE9RYMOu$-hn&R>G1X|CKX8 zQ@)k8%`9|TNG@_2U4#ov^@>@1&RNUY3!sKv!RtKTdcs}U`_#{5T$Ks=?m=IEB&+l@ zWQw;OaC6Tmdf!!S&BKZRu=eql15ddU)Jymi4K*|-8qN+@qN=!8@S__^<=S{Vxbrg~ zxT`i8RLvcvj_3_{9!ahw16KUb=4oLwq&$~U320_*#5!#3r&rfQ(RXEi)L=Li>V=fP zJ{fI@C6m;xO`>1-tR1?PIyNzFk3M5>6-`b7gxJ9mBuLGhLft4rsGIW%U`LVL zniIM*l1rD>p$DtwHZrWL`=;E53T?Bi_Kx)-N24edr=tq*#Zs2k#5HfO%Re0=i~S?) z3ebN`xgkUT?$c5JrrZen3148G%%*?IA#dpEa}*mX$?r-mBmX%TbJu-w`t$&cH1<7Q zC)e_u%DF+%ud=74;zC@u=&+!gYeJMmHfzWQ_}V=$((llGOU3cxY!Z03JE`#3vh!K9 z$6J#a(p5mh!@?xn8~T_bSIvfs9YmLiL4}u9m!3G2hg{__QaG2q9Da5!>!5!L;g-Hg z_iHS9_&bO+-Fc7|&bvC5lUE3w9Bt~r`jOCvFc1|1SlXAzHn}bHQ_);d;M3Nq7D?E` z(st-vo|)#aS~g9S6mtn|KCRVTvwD0>@nX#q`bu)?8HvEL5|(P9vl8MoZbE$bCNU=Y zV9l4UMSHhlr@SK`Mk_LCmIttB0b^+h_A}#uVs2-5f0c6Wii71Osf306To4Cdu=@XB z0h)*wpbg6`<%f+2-9}k_XSK70it;kzOE(Z)Sl{QSvrRO2S5^6!X|&3W*L|Jn4(wE^ zi)4<)4jWi&&qEge_GT=0fQ`+{g2Z9HA4n{OXQG+)4=4-PlNj@-wB43>gQ-yu)i6a( z@5leT>2)HUm)CF4*Y_XoNHxRAH^J+9p9^zN{0Qzn{UggA6Ye6rN-x&6>Ts|gwS)sd z^yF$bGDd+N$#e2oKMXdQ#pwiy_YF!|Prb=9mI-m`BtQv`%zzAWa?U^pv{#2r@Bgle z{URVoeDY)N?QB_Npw(Gt7->N#uP+|7y&@YGW1 zY~0ulC>eW1EnnXj&gJL%}Z&W!sfW71~l#?Zyxl?#Vk@!}_YXCJ5)^f6K>c;b@1 zW}ebHtJ4bYT%>+%@V&1xd{@L?CQ7F*S+0!^lVkNYXmCL6F)2q3oIfy~G$fxm{R{E0 zXq))(P2s=ANcdHNVCTJR=7>ZE$lKc+pf(gqbpz3&2n9|JCQz|`T&Pg=jKhG1%O{3Y zB!!xvu|to-r1S$!9Jiy%#R)sQ1iT}E2w$|Pu7W3gxvH~)TSDt&@@O(OSGN#gtur=S z`fR+B8L@%Vx@Y5YZ9)&K)r+N4Cao(;+jRO@m7D?HMMI$MQNe%z9!-o-)yC3R@t54Ie^aW*Ggl7$_rQ>8$5u9;%1yzJeWV%>R z1!mZ(ni>6^0-fd>O#P+PI+t4v>wEHahF3Fd;DzFpoVOgxRT%N<*0HY$mxmmC*VAVa zJ9K0(5LK66`~L)VH8R|$e_u2FTbB*^HcNruErq8qJb!c($I;wzKCM9T$Oalq(i?v8 zvOp8ng|Vqs^eMYNc2F>P2u)7lbMOX;geP*B*QO{u|J1UPLBM`KmV0&Z!IES!L|nA% zkbnP>--b~Z*U##(H`m6*mG8^bjV!%OCw*6MI)$LkYrA6hhM-AoJmzcTr^`6bP~LXl z4F~dd^3OOFvTR2R1(<0j_Kc(Y*6c$qWAa8(s&>cUp{Y4ZfU zmfi|P%o7WB(POaOWcrD{skBdfCyQ@#$>T|yK#XZyG#Q*UDu?Ti)1}rdTW{o^e_1MC z^IU|%(<8LO*@u1k`rq2=_zUVY1Q&<-O9s)R2)Xh+R@COIy8UZmE{fdHYFD}(T~|DL zkVI#n!Igah5g|Y-mMk~$``bQLP0Dy)A?j3X6NV;)L=#$Ld`tahpchy=GxSqo@CV11 z1poAt1R*QN*cAhRyd6Q#Cp%nk9f=kUtpoTeirQ1BdxOi8se zFCU=-u?KJ+XRR+d*yt$;(CyXP1uxYRc$;&v zDP-`Ag$9(q-;wC(Uy$OhR62~1OjvWh%PLtmsiWk*UTAi6rX!blkgfWeEpS&YxXovR zi+AX4BSBaPEMgh{t}9D)t|-79Ep0e`8|p#TMsFN?$YMOz(>CbZCUXMR47L}K)6KBd zN!e+APa~%63T5yU)JiIT9FCCc_zm1H4xenhu(}B1wrU164%&xHXl|EQdu%pmiIs(Z zq2(EJXXL!!3p)6GR<~kEiPJlk6IhFIo8_#BCkJI1nUg7r#kFS8qquR>Wm&jqhXP7; zk>fOZ^YO3tUfdmC#^1;z|F&N6tois18S7L3F;mcl0(z=*d{@NU(5K6eZjG6aw6Ry) zAwcp4VX2=r%D*Q#h@zRSOcW!@+stoqLS34d0S7gVy=ptO9`{cWf{T+5R^bS;OJTuC z<0>U11vX^hju*ZmmQ3o%GM5k=cqO6RZ*%R+*AjVL@mDe>W%_!gO5$m8G#e(Ja;}`N zR-FTBSN~Ja)m!ANYqu#P?6}WaMeT3bm}+amnpwSd6mAIQ5N#vwa2?kUC?D{QEB?q z0e|JYH`}3>h#PM4E^=I@|M$`h9%g({ha7%CZ|+s+=w&tUVNGz(=gp+^x{{Q4vel2% zZns+Pyj@0sA!%u2h{VI?v*vwvmUNtLkzXfp$H8t&?uBC|#p2qp&QGI7)$Tzdpq}Y= z?|yo%+Pxh?3Mrwx&kpKJ@}Od8Fs1}|RQ`kyH@`A=DHo$p)`YThd<^@lat zNE|rL`Lfuf4@3k3BAm^>;?5edGuHTY{m84KIl`|5WM;9t`G!F~%(XCztE@-I75 zbCr}7bQ@+)FTNKE9C11)mE}lCO2!l&NRyhBF?G&dD&0FG(%yXu4c~IGKf~I(Q&M^> zK|+am*Uoa$Ge7lc@W%Ef(jOm0N^E4nM+L6VG7ur^XLnfd%h3L@nxDX z(VuV43_ur&50O>-8lO~gooYqiC=bTEe>7JWFb>;KOI-aH{{fhl2pDC^JLU6PVALwx z+7mp}M#lkaSYr@E!rfrf@-!F53-?kRc=cM_cG|{2GHJ%Hia5apH92)p2b26Jtv%I0 zn%sTW!(7Dwwz0^KpY&VMqVX?weX6j8E8?glX;bq0=4EIQ1V&xWz&e@R)U7x@2CEnH zq<#9`=|n?ACHqCh*>o#29!G^m`x1_Ro4Z*&TM4W=}0tv~Din5O`cWP#rO2xU2IaX|nTuixs!s$3yV&`xz&wb#=&+J?DZ$CqOs4 zo}Lf-2Wa`Do?NmL`u_l1R(^Lz&iUD?)aoIl{!`iDDtu^#9zf%n)f8urWJR z>hV*sX%)Pxs#&3R$-?S32TuguHj?)C;S*pxH60Tiyu;h&59#GT!Pzv?cl&a_Yb!3I z%YGL@1`j8$b)zot%0>wY;=W?4)22sC#qQC;w1q_%@?IdsY#OAp0DDd+HOJsk3z^IS zsWQ+jAd6?HTf5B0F+Wqoz%U+YO5DOorBL>QgS0=C5 z#OZDqvpsbU2Z~>Bre_aFM7Pw+;vw~7y`LbnQ6|wKmN2F!Iem3C=?3yrwtvm^_dCU< zI?g8;?pNQ;?$E*|s>yM9S^!@8Wl!@juUvZYnEh{I^D+j zRJU`zRcYUCV~Toj?^@Mt2g0~?mUFHXqJ##bfImJQ%S~<`18oRcxPs&!pNm0mi)@eK z!!YVlo_dL#l6p?&fNc|Lje~n)!=2WHI+dJHtf;uDsMjJ&7Yo*h-o;@s{vr-ofH|qg zH(cX^D(aSBX-9q#Pg}Bn0muaS7_Clg{W?s4%y_!bVIT20U*{!5EG_}mDa0@hdQaC_ z-<6bd6z>86i!ukfD?=A1x#AXaHKn>KHA@l8Zownwsue@BzJD`RB`ahAY+68jje(Vh zHPH-$BWy!!o9*(+q0gyHf1^Jnpoh~>{T;e3JfLWxsU5HRFNWZLacG<4zb)FJ$$v8h z4}O0sj{#qFSa~es{a&dOmLV2;Uvaa}gLCQQUojPYV#7qwKdB4^r`||Tpnnt>%QKWp zn`lM{X0Ph*#Q-S|sfq>M=Jp?)&3z+Ra!6 z11+3k66(ONbntCt(C4Xi2Vx_&nnL(r26qGb%59?$v|X&X<8HyYucxR;wuGVg$p-R@ zw>xI6!G@lm z(e$j%_?_DM@$cJj1u7n|IaxvhLO<8eGlJgy=pzRhxc=g4Qr~!WNewNuF+EGT1Vo(h z!yQb*5s-72+^_KEB z<{qwsZm5^)c<`vM)!n%O50hM*&hy3+rdcgh0jOxVt*)HP z#rc+oYjRmIoiMXvC^a`K!ErZb2@DO(FHY+)oT-+q?LP7iCX74vliLv30r)`%i&@@`ltYMwhD-P>U zSdMJabYZB^J_Yj8sPv6@=QU7!Y?stq?!2Nsj?-Z(2q@4Q+lRV;B>AJVe_X;efcVd@ zz5KMF4EqJG6RV5sGcP;}FI*bTYbWZot3|dz(%c_}4fCkP#wIoCLnl7_)+I0 z99{&54$F^SpAk?$K`1GcsSa(s=u3iB8Q2B6oJU{kl`l# zfhGk{3X{SQ6UHeM`Ax2mh-$BXx6l| z%D3w`yvL~=txly>=+%WSah1)+#Xmpci)ER3qUv%xI1Rib_c2CKz|RnrZHx*l*hu- z8oCsgU5+`ug0kYrXqWV3Y>h9$k6HINJ6~FU>@m82x5s`_B9U+Gur_$yw=$qo88gV^ zwB>m?abICY_#sgp`2WXGG7EyfBGY|8UpW-0LZ~@pTni4r53cU)F-+y5;2nSWnBh(C zts$Jj7}VYRP5KKh%P@|*nwp{RhX((k#CV;2Dw=echGSO#SPi4CaxmXMt5m65eq6P2 zX86PwQoEi_#71jESwk>KOqrdN?Pb9PTEyW39n`L)`^G7|dZ9isWVb3R|E3oFAuNCl zmEqPV)7Z{ABH8GZ_ux*^pF(yO3*OmqZ|SgfZ$V(G`ia<9nylV`*jj&73TymU7_Zb^ zUyeO5F5-N$Dh<(Qf1(=}a6Rg$F+7*!1WY^~Dzt3-#6WsmU%4qXDgv(fcZTD(Bc(a) zO8)-cMY7=b;L%Mg&ji(?J5^Iu7WKCiACsbi{6U_bB=&rAye7T_BXn(yO$=#YAYxyg zjr@8u1*MhugzGOZ0S!y9l((~iNPS%ii`hfD@%RmPe=oQhXQr(QTJ6O^wTAg5dPtLq z{;Y5B4>X4ebmo%-+2vhji2PT#kf&_AZepB0DtV<8&;LeG5*~<*p(0%>G<-^m^hs-P z$STOTPYrBk%Jz1V0?-*{@cO-}TzFGeTpzMOB(^H@J+N}OTSem*#LNv3oHoYbmK^3p#J&@VhNXxZlqrg8b58Xc9 z_h$-V(qJyG)J6y<#iMRO8p(=Pvuxgb2%HS%ASA@!SI>kVt{pWf8Q0I)IEX$9)0tZ_ z=+1go;M{1a2nuY{rNeJHDC0^gKsGXMn9E1L#yA_DEDGtSp%}WO)D1oibeb(w;YCJ=n77$lT z2R-_bGyL1eVHppL#kngZ{{InU{^el110gZ_GQJ$?FOrXkPI?2y#Bi7>@&Zw zZb9Y?EoIco6e6?|bd-->!d5BkTH1b|7O>RJ{M^h1KQdlXi+2sR!U_n)RgTmPuGwI6 zHb{mUkzGZ$kcq6N>L?<$-8y@LrOI~~g&BhIljmg=wtlGLUChL*cO))J0cX#_EcFtK zZ0Pn(s51L@+yp+EJclK~2wSeB7~cOb_!0ufl4}~0sCNre!*74o7_=7OPRi68&JOYS4%(K&=kFxAZh86l_bXwiOCp?74V9YL( zG>6u0a{ zd#au!MW}lmCq3*DEbIACDjNAc)n^fN26u0f)iztXsZQytcR204&imUII1Ebvl{E%A zWjUn(Q`V4>T3%Ae{8H^s+U92HQBocW73`Re8bzkjy$SyHF|%bba_UQ8DL(1W%1d?Z zI}c6txn>bPYauzFtd=*K+^={m&W88DrSzeC%t58De3va&g?Ix^A;M$U*e7w|@~HG;2VmwZsA?hJ>U_6pJ#pwLoVO*Ea$;f7eq`e8U`(%p}f=N_$%u11WWtXbqO(k^Zy;8rpRuyK%1wti`` z1k7^B1-Fu$6BoZubEi~)CC#@W)zvsM8jfL(>sOFt+W0ssa=9;u#!ZPo7SsUo4WG0H zVkPi_)1wW2m#@jsqv^YVK=dD!xC|%r+Xr9&(+3-0tn7Q(>mR5Fg+@%pOF+9x?67** zqG4O=yF{(_ewnpz^nQ~j@@!NbDoun-CZGDI!GLAh*~w`T z@OH%5ea&aBgmKwFM*P_)4dUfH!0_FJKQmciP*GAQb>b$L>s-Lg-*;IWXo;JOlI3aS zF?hUkOxjOJ3;bf$` zX`pHD^_t=z|HON0lHqs`b^j~!{r-|$Lgve6;F<;Phrm`x?PiT#1?*ipN(h+u;^3rJ zMk3263MQ?CRtgj+x)>I3#^OyF$;u-5Vwm?KXo`-{KL8sIe=K@K|B}v6gIq%M^261f zQOd?!@4kXeXK&*Zgyg%CIFgTKo+RbERM4($a`{kA+uZ%?4u()H=dT^aJishB5eOx3 zL7Bu`i(d(n-+LK5Ikt<2uzn)3oV`Tm?Sb{8HV_c1+(+b`#%TS;MKCWm#7j0VxLxgL zh&QkjiwUZE*E>rh70)Yw&r0xP&O*w@dy`V_SL0ioJekzm$HPuqFyFBv5`7gGaU<#% zv%W98qT9Ild*M_nj8+^Ule>FrKwd+UY+N~}zfoL^8UzyP?$Qx?-t_?mMd4{Oks@>Q zx1Cxdvphz&CdmAUUJkggX@vncy+mO=U?cz|IC_8h<2^NS%rgs3N1sB&#wV%yhS#j zXHmx%e8c~}m_uXVyxB#BA|cw%D4IQ3OsVytVV1KE!Q|ziYiyO(^E*X$PJ5b%)Kf}s@t!$BDhsXHR+lcV-h;XYLpYNO zZ>O@kzL|8MK_o}sP8nryte`p~_0~zwUy}?9k0B21-!kzhF>P2DM@F{BTUaYXENb4c z6JNz{_3g?`3KUY;&!Wvqopk;57(t+d0dYOLW;y+-`u^Q1J%iC|Vx91|xrF@gmpz^~ z`bf)hs$46tQM?xeb@7vw)WfoyhO1JT&}=MUMXW!6 zs*uB^*uXI3tJQ6MIX>S*yg7-J;rU19toFNdMwj`Q%6VwE8fn3muab5crnB)bkH%@h zTt!8JM+mYOw4II*DMRQIJ;7Kps7H_vTNtn$&BUr1%D2@Q+%{0dwyaEZkj|LV5N4Ig zj8wW%xXo$11rKViws!mxv^!MyYNbGddgBJ4H${0TXByQh(E;l+5w@;7Wmbn&vl4i^ zy4Ca4#SwMMNyEaVULm&ewopC}fyjpayD@VkdI}DYFUpd^WHO6nkaZWvTj|B>d%++V zGZX2wm+Y!TZmE`7&42_I}X| zmV1fW1`v+to6=oay$NLFX;d7?zVf@{iWM5prD+dMoXoqG^(fW00UVjbrEhT^(4SpF zn6Y3rwAr+9p)BpJIGrP0Xorl~+RBaV7-B=DqG&dL9Z_h|hDX|tE)t#tuRTO1+TcJC zIoenpKaG5b?3|V{6?$A9HfFx*xn@LHtDb9T6Sj^pDc==ei+yYAR(X}|e9@LQr)9C~ zgwJ30823x$I~@z$*n{LP9t-{y^+C{(y!n~~b(xU}VWwK~XG>-rjIWzElvO+^mSpeQ zT#GE{blpuO7t7z6W&{GPkHxc7mq~MxPTaqP_AYulIQACJ_5Jyq5;~276iij^`=;cPnNZ6}g!+3V$&~#ddq@S%KK;8SKZhKW^+|Pp+ zvWwD(3rOYP>%;dEhc`D0lzT6gMmsJ2aY}5LMg?wT=bk3Gx$`5zEzc#aQlq@3<6rZw6reH|Lr_vx(r$~q@6Imt(ZsEWLYZ#DmGav0+Gra!$;;7phKB)!`0vn}}n7hV+0CRhG8a82) z6j37drrfk7=7knyl;2e@6md|U^1`K~cM{Wkc<-RJZ0b~L7@q}r?nKs&A8f2|wk9nY zNZ%sialU-ak!bfph)omO2$cG%fnzYA3vqodH;glx)u;I7=2X6JuA>8EAd$B~VW9H^ zmD}hOeG>Bua#z?L-`B4nu5Tv%>THeq%CkdS1_o{)GUN*h9Ys9-r`e7tkj}RJT|DFi zV?B8cnpTCuZJ=Q=TP0?wx0>Ed^7Zt&*_@B1l@>1%S=+SJ-%*O`2GyerPEUEV>{w;I zRw1FOVdQi#_D3<3+2sIreVRIPq-yOXhR5(tFZP*kyri+&AYP7Xvb!@H10V0LQ1u7I zT?J7mIw`_94R)p)qeRVDxX8OKZnTxhQ5|Wqb@Bb=e!-a|%-f~qq@jYQrM;_aqy7Fv z=7)0XC+T{!yzAA@0TjyAu#1cUdtGKsRQN60km@c9U?k1#;u_6?=1HDq_@UDU469o5sh7655q@cH z6EK;x9^yn?T->lZ%i{-}VR?k?%Xw|(JkdX)HpdICI+}M2b<}^ZT+{2lU8P#w^P-s# z>e!W{@*b!lFvlQ1ufjNTUCpTI*xp*!9Mf_a6!vsyqM{b^b;$#Fqe&Q*I4LLXoUb?FT^?_RN4O)Cycxw zna1n2sCTGZfL<=ITI8jMHRG_tyx(<$nvBw=@#+UQfqDU>2f(22a}sh~Db#tMj`8$` z77Mb{>ObB3F&T)}cCrw%w&_hUs2&C}Kb>zTC26X~diHn0Xa(v3Tns0QM?U61E?k|O z-?W6n5OU1z>C9wSf2qf8RR!02S=r&L1LXukSjc4L@PNl`b0XRhCkZ2@xq^&iBR-p? zJ~W6c|163fuhXp$D_~BJ{fP9-Ij<;0o1=beLHK__--|NK8oRDarCWsiT-Hz#NAXQ> z73Qj;ZTLP<=g3{U2++de1d;U5`Mgkff?a_OMWWd?@nPHF9YQLbfbglhJ#ZO{6rc#mbC>GS_&Avh6?$S zC>EPmn)|!;#%h*Qs$_b(1#|*fnpCa@J?Z`XxU*8Iwsv`uC|^bpU)KkcmYHJ|?*#K4 z`2Z5u{2T>gbJ8Fku@3#0=V~$EMq*NuGv$vBw1MqdJ^_*0CBI(2+J<`btJ%2P*Zyb* zR_B*n?!?uFVq}_Y{p4(2IH++L#hU3Q`E?ZRk(F);nzZAo2jqJcuu?Xb+&&ZP`(xwk zS_1Z#SVWmOIs|wLR4mN3tIp60kIOxX-zs$Qidde$Zd?roK25g7YPv=iZ!Njrp${X- zYvb$f6;*e&g%frCP%i&<46JIW(|4f_3w$PV!!({L+>I16ZY2f&qAd{2J_HC@Tm#Ys zGFydQY#g}ip#~bAr}#BYP|F8z^-lWT*enF_h(Lr#H!|BReyPa^OGIMz`cr0ym#S9> zpPm{^u(_6q{OnaO^vq(dob>jf+e1{DH2Xe6waK51v6!dvnJavIbtdh)%89;}IUTcj zAGMb-uL}~JJ&#rBS1_%Fx6<-%Sq4aXJ`)))<)gkDOh34TmvLD$Is)v6xtx&5Wd1*@ zezW=h)?aUSptuK%(YBSI>h6NLrG)u^L+NI<8K-e9%Yd2PA!E0 zFJ%0`s*BSYNa(T0`aQ@bI1#AH!1{XbtB+0FglZpEVKwF9wcbDSs8eCeS#oda#yBDVr+}+(hz)feqx!=s(o3*me z-~7ng@B3_f)JlmU4f1leuw@43J+K;YE$zRlGg>PgV`C1`-{LmQO$qr)oM)JwuR`Q# z#2hy2>g6JyXvghjaIe`sT+R2&MQSx7x{+-;@Xdr133tUpe`%4k7$=^Oxd7H$VlD_3 zQ3c9?3+3<+AMd~1^CF|-zm>bgr^KzHMU-Tx0-(CS*XySqU zwt;O&k(L>FE9vR9V)PNV#ILdFT%!-T4hO#r6G5hCG8x~8OPSXll(tPp`b z{v4fg4O|r>Ux(cF$4ow!yz$h54d24v@qr~loid;%r3w-UpL_c7jwiM&>eE;#VU-Y7X8%hcPopBd1bcUUA!vA%~f!ts`rsExEvom_Zscw$t+n$dm zb7KQh+*6pO)?Liy+`_USVxu^|$kHCO6nu3~v`K_;P=9WQ!dhczKE_rzO;L0D5@Y<4nIf>!k2frky=iS^=3a&*iwr*i|G3#Z`QTF`#;lFqSH7u5Yr*}pH zqKq4OhiibvtTiZgRQpq?ZdB6rst+HdVeb>~1pJ1p%X<2#1K98sVAwZAO;lxjCz66;RD<&~2UXEgF8B19xEy1xs+dMNk3 zHf&a?m;V2MZDCUYp@2U--t2KF0@#RQPfou=D(Dh|No&M!A)9I1n2!O};Mjtf*l_2S z-T0^Dc-yS4lm~3^9V{$7N`a5Xo0Wow={G{gcyj{cg4&p6D?3H4L?{Ftk|h|?iARHS zsVwj4U<-%PrSwU#aB=x_atwTvh4*x7t9>pHlB(>U8NN*qV(*TAJ`1%-)Y6QIhyX`t zJXOVa_37>$OxR)D?HiiR_TDrtP;)WR&o8x%Lvn&#FwP z>LmN6P5K_3tKD!S?$kM(=kwpP#U`EyeKbR}jRWJDW62$B(bP5|^>Xw4aVA3cX%vx5 z>SdTA?>g(j0lWD82pcY%IEP&Zu3R(9)Acy-K`3Tkw}x*aP3~_Xqednd%?Up*Z%3~> z8wa|(rDP}7EEPfbOK0Z2o1L%ktfk<4%$%EuEejbjHOSUS66#F1VlcqHGM6#S{_T7MFv;&BGWN3w(Z0$o06aeOinVY$iSJ6|K~z z4)T~RkUq|hLZ(GfdgJi6Ku1`U6c48PGP@M1CaFn*n7}y%HIvAtU0D9tAdU(4_|z(w zZr=Y?pj3~f6#-8zZ`PAk0tNW071>#*10-&=BR++0zFB4`szU1jeR(ND`|U*c4{uXs z7G|ztn%=_7ebBYIzwIs=pwM?%$Nk>WzW-MvX$>t)uxVi*3Sj66SPoGL{kafhj5{Nu={%pJDkPei1?b z!z~DpbE=nz>QbQ`<9fsgfS)_*b@|$Nr?XSN>x-i6gVDrgC~ zy_0l)DL+v`$h6ZT{7mppFe=q`wCA&pB)5%#3!z(jTOx-n@0oE~$7J7R1<$0}uo3D7 zDk`L+{lGd3f0Y~)@$pV!u6M?Iw%01oNK zw%#2Fy)zN_(cH5t<7p?~YP!HT+N)@Xlv?m7Ur%@^mT=24T8KTy7@Ek+;=5$V#sW8R zag|n=$fu?{1t`hMQDB=|17Vv3!8}4F7DW3mDjxUpAHRGyRjN-by?BVzTCr+1Ln6wU z59vCQ#>AnT%w~_B7|kr*gM4Ga>Rv}#4_!|~CzHh~N(;nl-X>e_ZzPJBX42q%EA}2% z6Ib=3Ekw4&fU?@O{l`U3ctiA=*2CZH#M5Q}NBhX5Ov*m%F94ec+b&Z4Kq8I<4?%RW zexOHidY@8_67DzMipaj|NKa-z?3}|mBMshK78v%V^S915vvLY1i}O^8QwaGGjAdfN zdBgWuR8=JD`vqZc{g^WVH;cavZ>n^rVw^0JK3y`1H?}>@lDLiK5tH}-@C}>U3c#Aa zrbfzC6hT>Ob;qvILzhNT(m20nGrHvluwI{IXXq#^Lx7lI=Rjm;CEvM<5H1b(_A8ao zXfu?7H$?ox{NiQG?8mxH!t59Q|DISGWqdOure>*7g}8gFkf3 zo=u3@?RXxm0}3@Emo189hTZ!Ya{lQFPD}qyPuTcc>OaFV_5toQAo`DsH43YgbtUf! zTK)MI7l92@VcAL01at~=ki0I5<}=C-H9H8Dqd-rvHz>xsuAKRvEBI#cc`KttzlP$w z&1^;`nf9-xEeoBb{oQ)P#P~hb?)rGQgImm5tTpPEAKE_!P`bz903v-|@RQ&B^XEEN zmvLgq^8&bp4n>_t!UEnL-sDr(GLDft)Bb#%C-B_jMEEY9eC6+4F0=+F#dkq>wWYJDX~6L!AG98EiSj9Hy(j*oD6O83B7uF zdb5=u1ht*rJ2F{Sx-Vb&k^LRGvZ(tv>)4?}5(a3;2(6|*QhNEO)l(Y?b(4pQ5Ok4e zPI+T(m72?WuBytoBZ-2Nqvf2=2pi4jM1JlC&Kp(#J-e#_k9cGjl9#tzy+?5Ru0(79 zZ~SJhgzo`wyo0#c9K@xPo_q=nF*wvk(mzmEo1<-djW5Sw_$_4Kwg?cK;f(w0D(FOR ziR;6I6-mU_Mf1_y)#+l4^?XO!A6fV8wIHdzq+UnVMV`;T*E6}6ugf?C5b7tKi|Rr9 zKApU$^$M$JHjY2L)Iclw_OnT=%R=hI&&X81`?b%rr~TtCZw%84$l)J;^HVCG-IkiE zt)2d%mpZyQ(o7MgOOq^~^d|1;sN52*!YFY3L_t=sw3qySelLsEjcz&*DZ+vT1D z>&Vc0dXO{m$?_n|81hPJ)lzlxEu09NQ15xBYfhks(Jq|T?`H=<`rMXgbULS`Y!j~3jg^{VH}#dv)nEj*uLu&K-7=b@_zdym z?Fs7I>p2~)$o{(--F+2oGU9R@UBUq9*SaA>ug*Rrubq3fxF2EU$^3Zl{B?J!2S!@; zyVtHma`JGfsmJ4TEaPO($Cm6tJHv$a?+L3r5nSw{mnU4vOF~=EwqDVjyQ*-Mu9ZE^ zF4OrI>;XD`N~oQuhhYX;tcO4dOdsJ#3JX|lN~Saz3QbefSn z?k~xibQ&<&l3(e39%eA+8((AHIxHvJn7>m#@x}L^6e?zgcy^9joSwCb{IK6d*_v(+ zM>ihG2Lhkom>!*Op*&E0;mnz@CT&%BwH;B!@pL1HaU1j==Ldqw%dC8X(CA@Mu(k1j zj#?TOx*--Qoqtl->P--vngpbjAiN|3gV*Gdh0l*m2=|t&XG(QNC~R6H)FL90=NzT^ zu!~$QBEf%LD|g=_i!vuSXU7hZu;DT)qI!`u555h!h_JYX?e6S+4~bK1Aj?uIzp zu+;L#ib*nF<}j|?%zA{}lCD;y=Jx&TfdB;kvSVu?r>K3^ao~tMHD+)8n`JS_yA`}_ z))=V{W{clg?Hv(2_ioL0p9_gG`peVCYvE4ZJ8K9xu53r@-c!-KZ}Xpr;NUupS9sP? zuKdx+hD`wLwv%$C26nF~8Q5R4Y(~EMAI;=VIyL zk--UOg;m;xL0Pw({}j3%0PfE25R-mcFB$P{Hg0a>X4oYtsSA>S)`((1%~%+A3>RFU zLJdg0do<;VJNQ%9aj*O-)q7f4oYK_G|2B~N+Sc3)b*3nD0Tn3Q$Ix9WejI|H<6eL2 zQl>%XgJT>nUFi5)`gK$*)gJ1gBuX;fpHyk?nc{OM_TI~au+-vkv|Q`N^lWm{tau|Ja*~v1m2}Rhu`tT%T0Slt6IbJDO-m_qn`yBHjM7^xm)M?R>Qff1T|V z9#k>I=-g>hU8T$-rUFuBnjLE+I0eMCToQP6XaTnk!0UDRq_7GHo1s6 z0>dtHfcthOl(I?|KgZg7Ma>y7nC%Mv6-sVC_84(< zUK!E}YIZWqv3)wV5fz3r^20iuuBJ>!Z-UFonRA_?Ej0DglE9ElDi1hVgLb74m8uq- zA`@NtbaaTFuik&<@)|{H*`q^<)nI#-yQ4?Z57XAJgk8^)&Mp}|RIL-XXqT>{`Xze) zmIjF1)xi^2PN9Bo^uVH65vhAm_)ep1@PU!F)BkkqWgk+^FYNbpcLdvk1qhF zof6js1mJOfqGg4Q-Le8vGZcb?1pqQPk#Gd<%z_oR;-CF&B!aK*lX-$VJuLdFmB={9 z8^up|>M~w)gfIWPtW@P^U5XL1?yM&z%Vc3V^(z7<{1YX;s;YQwI(@VegW0=16Ax?S zInEe|2ljq1qf}#wW?b)vu2SF~O+?vucqq4K?=3|&5d=q2BAXYHj;G-#((bp35>hsK z(g3TGTU7oTGM4)krM_16m8Z^GST?WEy9wYqeOmg$|6%*Nh@Y_@f#}VqNO8D*S&WsL zmvD*&OmHRg84-;wpOnv46cR;0<*@Uqm6sEROlenXrTaI0Un+=34>3J?sHQia$i2Mi zy^35sqI7RVc$bAj#TnO%v71(=udrAL%*B__`b@Ayu$2Az#;$2-EB1<{SgNwuIO{)v z4*NeTuz^}GP*W{n@9Kw-O^k8oV9U7}PVo>R@Vh5^TCVfn@(Z879k)uv(*iSfkU7~ z5THUeoHiH83s=NzGCmZ*1?~ovDSNaeV7G}^ar~QNLAlSJxEp78e&Ris-;cE@_0PU$ z^f_N<4PXM#geZ~i|BAwGx3zuq(cvlf@@XTLwCn56GFj3*QO(E*IBzn*wjS%=#uCA# z)f<1qVeY#Ygw;v6cRV-gM?Ql_wjqaj3q-?d2#YMi`k%@w_nD1F#fKWQ3@8g| z+??=lh3B@&Y{e0L58{$~P`r0>)iXedbb$U{<%G6a-$wDQT8`;g{w6XvVyv7aF8DtH z4)<$T?0TQi0dnwDg+1=NZyO8rO zMF!{S7>4MuOwkqz7*|E&)8zMTes6l2R5q*;h8+a^&XjZ#;h`ytK8xtsuaqD;LkTim zQB!@Lw}JapOMop)B+L(kqVY78Xw+@u$d5O?w=>jOdlw91S=^{(k27IB7USKp1@;@i zJBQd48sc~^V60d`qr0GhV-GbE&Bu>&XxrS2b(VBQh2q=UUlfMlGXy@8@mdAkrCxTw zAcn0U6|cR66w2*kaqZN`)N!*I8zA*pJX8Ln7Bc!Zf#z#8xwGLc>2yW^EpgcgA4hjQ zES7^*_x&itogo>i;Cbl4COYC?jAa2~yh4>-qm`c$%mCI(?TLN%HFUN8M@4tV=#Zw* z*Obd8JdWI}Gb5iw!l!f36j&l)n*9Wk_d+mr0(7T1#I!rUC9H`H!!wzq8h0_efXttK zQaEFj=hHZeH+{sJL5-^v@TjN}eDFQY%y;Md&Me=3tlvAIaby15&7^Z9uo>XY*c_6McVEzac> zdEG33(iE&Qv+T1f-TkfGTX+;ywX#$0@^@S83~SC=`)9c@`M)U~M4Vj+7Usv` zQ~_1f5s=x(Z#HQ!N~^us>nb*Mi~$mF-p{o8@Oo7Ek;gvS!$#83=9=6Tb|DLO85dci ztHnu0E&OURN35?xzR_X2Zx3oE5RV!V6ro>Y^dX4ojX8)rDd&dlt@J1L7|3rn)3+7` zlbP1^PGFrFy(C71TfxPP8Zm=zd(PA)-DpWuQY^uK&j2>Iks6^1D*r8$|@OC~wq zzv{yy29eUB_JRA{y}*2uQ;@h}^j3(2)Gk*J4;)s5{%&0EwC_&&EC^AI$;E}MyQGea z02gK3SO;%pQtAU8_>q#x%^#OsAOdti!SjW5StH4})0xXFYg zlgai2ZzWZ2xSeMRsdpnE*x-9`Cn93Q?UZ3YiR$V|Gq%154+@G)i3MXj(!;Kd60~(h z00r_>-AO*Vdv|>RUHskqW;p-$V*+UX7Wb6d-85C|s?!rSy9hEXHh{;L+exFr;`Lr+ z@Ef&~xC+EG5oGSzL4p)~)?b)itARiuA!|b#xrx+0IUhs2Xs&8Xjpekf=B$X=9*+2)wFp&XLmkgiRdvl(@L)%}24CY>VJ; z`GP-fQ*6(Ai_$&d!I2H=u(Q0UqU>cyS`6FpfYPsP4ktL&df3qj2$05v5Sh%?l!#F; z;!VNbis&gSe^Z@7?_P|= zm^4FmyO){^vBuI3{VN;v9%X}AXb!+n%s3AYI45*LC^(XL!lIh2MkZiA?zzmwY$ z#}`>{|0I3RoN!BFe0Fezfx}Q})KZYQ_9tTKPBUhNfD^EidJnUMa|(Z7pHTamoDA4v z^!e>ul1Vck*&*gYe_pcNC3otYMF;(?M27w5&&bquA~&EgN%l)rL_`R2SbKju|47nZ zXrKQxvVy|F8ELqghi>qd`8X7rjQ@5kZGAGImFphXXy36tDQo8o`!(c<874nECCu^F9ZF56$bspgU~;zvERFn@LolMXp9G9l~n~C-n+aA`)0FL z&*WEQt!LF&+C#rG_s`pLbam5hk%K+G>Gb`>+CQF82Xu@MB^6%fdtl`{BelEGX5#-+ zQ8v6k=TET~PFQI66>Vxs)kh$PH}WD4(jQ(2!|jaeJy}(BZwf|ULOcvSZ`hGJr_jmQ zzPzRrtH}v7Ib1$jD4Dc%Mt8D{lr#X&6e__%wXOqclr2V0k$;xv0w{v1xioI-j2|e_ zK|6)wNR7$~j{4?nf-L2I%fviRFVzEQ)Q{ZVtL;x0jh|>AlE#J<5+ylVuXbz~t% z5pkL*Y|6c6+TXUa-W8{`i>e1W+#Ws^S!)D1aJaX5P2z=6V)`xn8 zIY+ZTaSO_!%RnL#d_T+vJ-+s5`IMV=k=oA~WrNPqkq%s6PlGfmoBxdM-_#`k7Uutu z@x!Wgj?t<}>*0`VK2YDBatNNa#tkYB=V(&_jPPIaEzVbM@LP3|7&|rgPq)mSxBN^)YW+6Wy7@&8(j>TTF01* zs!-AMuS{1ON+v(giRa6MY(sbTQPP7|;uv`U9jXOOl0w zFVrffl|U(gOK5Ii02t-{j++5>QC@TW7nv#>vj2C>JlhxdGd0*c0954E)7SoG$1u}FiLwF9NyGtk1Cj}Rcw0;$9%a!%q5#LHx>RN9Yq{)*i_ww8Mqwumy<6o#l?x=kl| zqias6AMvS55?#Xzbsh~nS-EMF3ZnwfD=NLaz7tv)GQti}Q%{oVMdH;{9elLbL;vY`bUamk%R)ogp)%JBAL5N%>1a7)=#>qQDDC;TeBJa`!aNB$HSX4K^M$TJbCQ+ z;?XLF1aND=muFMY?s)6v>2DppX-Y3)s_>DDBOSJt+v9x$nrN`0>f)Mk$6*C}(qzXs zUORSj4dQ9zN7f%&Yut#zjhSum&U2YT{|5SMC1I&WwLpy)b?I;+OecOJaRi8^_fs)> zSqJ5dkG3ara4^6&-d9Md2il&rSu>W;zOk*EVpWnvU4$CM*s})a6a{;;Wt7n zWpG8H=DdQs=;GLn4-6lb9O)4BV-+FZTtK^nJoGm#H!lYowLwv2^nGs$|3CRokmRH& zu$^!ud)X;7ge2CRpUU6fUUXpD{ZsDdX$1yWM-WE`0ZYP#p`q=M%f5vc(H9)HdWS1P z0VlEVD_i+Of;1F(xQMNaA#gWQk{OZo^XSpt`)Cv~&wJf}7f>^;RFKFtI78-i83rAW zstq+`uzCPU#BQuz`u9;i#H!5O>Y(IDzx(rd$pQyFn81SfR6vrK!zjfZiJ%sd2=^Bm-jj_DGh3Z z@ek)0zfraQ2t8fU!tZj95^j+?Yxaer#}~J8($awnKrDQbbl-1P#cBvP<7;RkLEXg3 zmcV9|ryOfX#9-H2;pOkGQPD%+ih}lp?6DP@^aM`)QYRWz&PS|W3`E%&hRv_9fw4ZL4_AbVLtBb^dzlH$ZSOb%T_hE8ywG7PW80B}e;Dy(* z!{@kV5F4M`GmDCovFynuAPxZ_8Az)4NdX`@a+=%BKr!=O+AQUP_bz_(^`m zK(yiyb0f4aJPJw<+jM%mT+Tj;Yvcgyc>GlCE^5flEL-mtM?!DvV$8^#nUNb!!r#1n z+2TZC6RSqQMai0LVX`i=g;|iTWV5o!V3y9(Pw8h+&4vQhYW?=-k5$w0wsQ5pdN9Gx zCE2e(m0@xxfwwMyZL{epz67q4@8DNO#_<=L=M%F;2aQ1<%* zacr#=o&N-FjWd$HlZzci6n^u47rUcQXX7jn9bLK(1vxn(g{69g3h6bxTJA7pr+(t2 z2D8i*H7g_OS%uO5CEWn5NmV|EQhAz{>`CM9TX1bDu+5OErJ~a4~0r0Rsg`Z7Gv40=bP%oE%Gz$($<1*gW zPZZmlVSpUaerFxavBb_X()XCERw8*iGU`aR`&4!P3-tuDFp^@+BP70SD=OyG# ztINoCScc}di?cBeyl3p_^mg}378_?3M)>x>ntR#+*v9=EdHwq5Kb0mf`=*Jx@DkBl zvj-^zKYFf14GsP;nwk~)_V3xje!lw0xz%#nbFakBLP%d<+NWJoP^OeNr+ z0pDeN?<5+sD$-m;JYDI;p2L01Ky0Ll&A-1mh>|+<-v84K$eE}X zhepJ?54DMetS_B#sQ!N8c7~)XJ<|46kP)kz_MENOORSUz4M7ba@ifCK}~43+PDb0L<0AnqH^SMG7_}7^F=G89x4T zH8jKtQrq0xT4;D}e;{i+@2O?8+s2k~=#_=WNc7ws&W2{~{T;0$Ie2{_o-&*{ykW~a zj!iMz2qPDyS+3BtPJW!(c9E9p;6;w65JX;Sbq$40 z-$yo`O8s&)ksvt7Eg8S{oqYY&=?}xZ;r}khl#@K@q9B2^RwH%MjCY$5X%BxTxZsUi z$;U&>e_kKRkjq*Rn=@b8GNZ5xRNNojy~waH(sngW+C<;;9I#h@Y934@_Sj?M8`QmD+2VQ>1y+#8cSVt2>Xdncjx0wdt7)su*)%#PQoChf(A6GiAa+N9 z8vKU;#LsjykHA+ZkbwP(4-$|S_WZlA%a?i#2(I0PHvfnF#uS12qcZNMw(Bhpf<7Z} zexI%OCSBxm-+1en_M@}2WHpZWf6lF%xN#XeDn)hjj) z1E_ceKAjSBaBLao{zwATgxY?lSS1FXSvO;wr#MJwW-U{u?B$)TooHcdypgwak*O!V z*>=6ydDXrSWT8KHk4u=dKHGU&htu>iZd7NVvy$(^opdilUjH?Km)IWBB@^(I__YbAU98-|mP&zRYy^vd5{yG@^Wlc53{ zMNZAs4NzfOPL1z6{Nj2B%`%(Fazew;x!e?f4e#})8}W2IT$&U9RTiF-;>UK5F4?zPeH!vd=`0 zU^-&^?k_HX=)(*G(O)03MVmGlHJBZm;>y>vR^{7_z7?`y$cT9z5J6k{KROeV4yOY%FzGCSZaS|I?V#fDVaQ_A()6 zd9^CUCl*-INjA%*ry=%mB!Fm+`beY~`ato91{PH7dyq?ov|X0!Qfy9WdCqhjVkQzT z!SMXsDN^vV(Rw#0IcHTz2P6kih^DZ+X&X-7IdjoYd*wPHDcc;u-K;7xy<+I1<;y#M zJu!t zv(O@dvMND*q;Z~H%?r7C)&#^iX6pzbr7D(NdrK^AB5jCR@$8)8|1(i7-Exj;U>z{h z!u^bQ%4(LF>K_l|3m(HZIzyOOBu%v-EE4};%^Hej2#x1vJ!|~wp@uH|^l-z41b%<> z<#})ElL);zdh(Ux7Gx;b@YcgS8975fNPUsyZf!W4u0jY3KDi-}TO@|x$PLlU#_s9h zz^=5nml@~<*YeYdute*5UuNt^E*+$Xb(x{DTPKAmV2*4Ni!TSH2hPFb56>3zouwm* zpfFPx(hjFBtXW6uP7xJ2ZCZ-uTCK%;u1fww4#g}%6wXfWU#>A-bM_WKNPSW021F6x z11C(x18OZ0HK`^}CI^#=*mN;!&Bsl&+)w7=I5-l!hZdauLdA*Lj6Kajb02l$!w`Ei zgc^c4#a;#U-of&}f%&g@V*<#h;R(O+9rqMYjMlqe*0pk*nm+ZNl)>1M7WUL@RTh0T ziVLmbEi6+w{0tJ59Cx}Lf|h%)mK1$2|K(@yNk5j`jMHM2Ji)uCdOxyRlJJD!caFKhNl<4eeUk|z)s5+s*DIn&(hBN$k zYG3@M*InX9c{6?t5}W@6Q1!e;Z^|OTzQEPMsrwNoxmus2v_KZSHnj8eX2@8|LpSXB zp3v^ee)921sf$n<*PH=mTXM%LP$RC8_HolM990M$>x@89z5p+BbY~b_)#sHJi>W30 z>X1_Q@GNCk;3JmMPP20aD;<5kNA(XY=n+2q9v1gfV8IX{w%qNXe#IWI)XD!53pR1b z(T+o5q%uPA)u`#%55#ID94v{wxnkiY>)ss*7X6^ZPYhAZ5blUk(JHDj>ELh8f4ocs zV8(tzj}Jdfzix1u+_9ANR)j3eih`ohB8Xesehmmxt)g^HA5q(m0K2x#cJeie1lD9nPRe5hCbswjU8<~X`f1I zxx2`Ar0qttohi1PeE5Q2zixZL-X}K0bns(fgqK|hrYS)3w54oC3uXA;0NRL*45^yb zFE31DdtDOD?9aarA z`tb!WKJlCMhfII__eY^!j%3rOze}pE_l~HdWQG^%V%j>zZNzcf*nAk|s5r$N|549R zb;LJ}c_tt2qQ(Vv`i(3*NGzq&S*IJ8vFTg~eP_L!11}wZ{DBTga`r;=EV;&qy24s>dnUCMMdMk_X(RpF6<Y?@{3#`+K06{77#+@$;y;tiuPkFUkG{skzqd;P~b0gx-w!l*24& z8?`rN1f6k9YMK~FnE~>vr`z5;=tzpoZLJwdb7vTcOPoVq$=EY!oZPfdf+(@$r%ZKP zAXjzLq9`2Irimq&4S1Ro(xZmDH35U3&1T*eJr+P8m1M3e4h%bsm#VDjcCom|staW*Qk+xhh72;! zl&;p*Ckv(*2z<(=a&qU+o1Vu4;=Vt((!{&X_IzQ9yzO6*Z0=h(z5#_u()~+gN#tbIVX(OP|H!_Wb|QFB zB)C84fP8YeBY1cBW2yDLOM`gyiS2}(2w|lwUvfBF(7XwpLIc)6hJ%!nB%`#=vK6B~ z->dyVu+cli7JQw&2~9h%$lz zqsq1gAFlxS4k<9DmG>e9P5-p)^}X0DYeA)(Dw`f4GAD{_1~)1B7b^@x-BFEms$8#F zm~@-CqN4lI6jx2To+i7K=PY7WeONeTqsqWvjr&c@GttO#g;&ytaF2D<(f<_*;`MMeYmsM%GO? z3aauiBA*nN3!T<>8VYVaP~p$&!jPQ&96nn4qU;|?rgSGy1x9N0!x^>Rq1>!K#+)QiJX_PnYNzxG0$76@g9=Yg zPYd;_Dll4hD)LEBv~Y14Ak}Ra-7X8#b1J0UzelGP+xPg7VuHK8JE@IsY*Qx_n(?lN zc@RO3=}lO9{(Kpo4L+-wpK}qbC@Mk+xQVr#L~Ud2hNe*}Fn3nCn$evp5=Z2d{Qa22yTI1-j(fU0$Y$~= z$;b8)X%bs{E7?vi*830<-RDHJw?z&dJPJwO5zVf!f7cMPTt8&iO5d~Nyk?V=MEN3t zlbT++;~atz?7E{I@xSi1LTGF&j#OAE!4i^}qPEtpkE^g@gZ2v}PLgEY;k`7L%bKX? z0Rtd(#mKVWCsHb=fRHqN1TR<|@U+^IHrS<$;ApMRgq47^{g)}WbZ;B!X@jqY3?ER4 z0#xyI!oh+u&lPG>IU^31&|zfo7>o@uigok^1bOGtIbhmcsjjon2L!;Z9|TtMoLKtz z!q4}8z$W~pKOM@F(Y*kny~Hk~#!$Z-BaW6yEwsGV47jIT>flt~(q8D=uJ&*uM@D)W zYH%Lc*}z$j-}5!+6+WC44F=NUORu{Mj|-VODLZt-A+wz_cxQJoHlC6K-$Od{=?i1+?G3FwuTq32=s~wkyzOh@cXCX7JJuJn83hRWIyr|Mr+y9pX6TpvZ1YwK zk1-%mj+RO35BjCB_KQ$}rWpU9TBjG>0gLTB?41~xhxtVj)9CzckUzAyDo2WjFa^BJ zE?j-+m-;07{+kkUg+V9$Gcty`r4C;?g8SVyr%Uw@MF=$#aIZY09M0(9lQd&Q#>5`v z@$%Ew;rP)^9*IsVE>SBy{9LuqSf8szjoP*p14sUV8?dZ5DgI#w&D7)ra!n}zDTb@u zQx{*b?khfxh8!f*BWI-5vedk-O*F~tdFw`JN>MZe7Bwmd*HJ)oTXvr1EU7AxjGQc{ zVraGZB(R<2K7I-{z)D-K%k@dD+jAw+Iy~qCzxT9xpLmQM9Cx}BonMEJsU5<%;~2@u!unaXNlzMipKBN@^F6aQ!tyW3 z7Ti^{mJ`cQrvV=LOk;@R)Fif2)61)Ryox74Mr<5zQ z#>q*?3fm~Sh=<|0sm5TGNBu7a%&JdZ*R+;yUs-b|V-n7VbED#RD z8C917XMe@L6C@)?<$r^3I8aPpb>u>FEJ|*q9-KXXW?+pB5LfX~ecr-xk_}Gpl%7vP z!BUIcy3z&=Noze&;K3U?CHeWzim5{_mi-ec5*VL7)BpaYJz?qgMm##-g{i)PK|Ch8 z)4A=Mzlegdyi{h7cisaUE4%|X9nS}x4e;PIPWNJjyvM^;VVFn?<+3F2b^>0V#kx zaUiV`{MWMlHti001E8yn9=B<*FeNKUQ;|KP;J>F4K+HIValkPJto6g=BKV&?8Wdr2 zIbTPAB(bXI`Mf*7cId4v&em~=KiFwd2TrKpaG;@#hjgcuGStS_05RNcj}iUU+C0A6 zemXyS;h8g9x-e`CGbDtEmC>t(ZtkyIGsEa)t64W_OET)}1&0=i5Fb;FU4QgJB;<;# z#csoJPYe(|ZV(l??Oj~*19MncQ~d&}*P5@aKu6KU-~v zPtW*E`zA0NRjfd%U7IkO=Shc2mFan8kSz!-4zoNnGB6wjj`+XS1N@R7=#Ex$#r;Eu z6IjXii-(QN5jK7I!LHghdqHS@4eHV(4_9b3(1`&R!>#`EM3jEz@dbv;AsuaX-xNoANC=rc;xXK)GnK#~`2(OjVL*D?% zS@8mA*RwYeaZ52f(5yt_=Vy7E&3UUPV*ddQDl|^m;ZZTEC2e{42;OQ{n}z5SfV+HAz9(e33zY{}Zvl4^g(-m*>R zmU4!%(JV?|HD(zbw}*F9#yoYz_1q+Av4LP)?7|1C+c#&)JooB)M|{zTVA15rkJqt$ zQJGBG-*AAvBlUA$11OffK@RlPHogiq9kHB`QE)iuQS%EznzADUPA0OF+8X!JzoRUK%rKtdGVTw zo3jW#l|GGOKejA`a~WwVY~O26%CL!h{}sHqeD=hlUE4~s?}d=I_SvNLD~^7E6Z9AJ zVe&)Cd>F3F0@g6lOfQ1C?y-U;_h95iSc&xBg6vFZ$Pz~{%w|!2dX_Sazr2z@?`Qjh zlj+y0C{MClU$St155w0D13vu#YW0*Z)!I=abyMQy?{H3&ENFT@%%j@)aNEOjTu_>B za5Bgh>!QLF2yUetl;g5Dc4B$&IS0W0KP<9NqXxji{dv$OgAt(zuz?Si!x8HqNDSQ1 zZhuYFAMLxlo?#+^k<6@;SE;*=6a}2(m;)Rud~yto#%L5cMDPZ+-$~2D6~>Go{&Rkx z5?>z9W~u*QNmUwbmZ~RJCctVqGQS1mx3w;E|Fagjb`O4&g|C0f_{tCe4^>|o6$RUMO*7=6NJtJMAd*UV zsi35^FqDXNcMmO%w1hNB4&99~2-3nJ-2)5_Lk;oGeLwH>uJ8Rb*RNSD)?DXY=j^@D zJ`aYwT|c8{TmApa-1pS)EZ41d-HH?1z~2EyawI&N!aL8zhXr=Czw%$U1ab5Bb_f&) zVpkdni6GxtZIgL9&95N@2e}T}Q8Sy)9KIiO~VCP)YI;WOWTrdfFM1I5@D^3E%@V-=-Ak0w~zwOJDl9 z#>LXQ=Lr*-bF#%+smvT&H`uefAS9P=fi%Q=KVS?#0`yoxO_+iD-_Enx*RUuVv+O&Sr&(8I_amK-E`;n}O;#vjQl~gzmz|4r z@yTVsu3}oR6A*ob^#KRRZ`kuO(E)%Gp>P*G7fm8Xa=fYs+EJsO@g>n*%NL~iI0Itx ztokm!GW|owOWXdq8rb4%hDR~Fd&pdsaETuln8t(W=s0yaS6z(}fjd$RH`>Ao&Rrhf z8rv<`(74hyp83YY(S_U?%l)SFdYsUI&d+YV^s!P{t0I{f5S#DC5fLvJ%rVJ2X|DrC z0s)B=GZ3#`Z3x@pw|n`2_%I|(eHdNjR>N~eiSo;=%s4(d2S?GYxpd5&X)Rge72Nt+ z)e%fak@t|q?L%0%tDh4}m8iEEPv!&z0InCxEz-6#D7O{ajCQDX=VyG1bKbQ`hy2@@ zd*2t>dm`Bu7Dlp?OdS3YVa$z3s=vcJzJeRY{-}UJawCs=>1J_lN5boGTkbx!?S} z{hOz01iF3Z*I_Oex+D}tbK)H#!r6C_EL{mxCN-u(HfVo`yGlrh$KIMAy;cg?4u1#o z>#I#!!SC{rG%Qy3<~?%ND8>&X{nk?^KVugebqb*y++O%--JXB`_A%d>kKx`~UT;9e*Se~IxcRg= zB0@p{H?+lY2g~jG?I$JN8IEAu2!C7h>BK&6F?>C4o%GEQ)u@Mt1|$IB?PnT>u7|&{ zh7_>@%z$Ph*3SnP{-_hDe!{;yj6Y@vA_Bn^c{Z!F!oMHGnIQa73GCJB2^r=;3}NxN zCl>|O~ z)^4|g=WHu|awxBq$KrsoejlR3M&X#iR&vSZ&cw%{->@HgX>79TbH&o12mp@a)Wqh2 zQoqZ#svCYl-(N~$5L&mK`pD_iI|27qj2`6pbhLE*jAcWG4=ee3hM1cy$SLI|yQeKa z0J-n{e+$`v#%fI$WrV+*@vVu8ZiF1D`sb-;yZn~BKs4M@+>NuPb7_zFN4D%Gu4DR< zmp3^brx0lV(B0+NP+1U5D7DWaVf{dLLr5c{D4DB%s{UhHC%6p{Vg*HKe8)b%RiTg&ExZ=kDX;>D6@0F;<1XR4E_ z-Y$U{IaO!cGeDwyGv)oY4yDxV&oT>l;v8~CZ z;$SYH+|AL5@c96YAQYZE{~~A@Pf)9smNB#~-|*}IQpR#$Vp?V0^IfOJB7-ZQ0I^wPJNjAM}o@gs4=#Sp)HIM!;d^$z?RO#pxzG!O)Mt=l_14**py zGjQ^WhyV$`i%e3<+-?-`TWQ=Y>G+@CADTdW?{ASpdgt@#!=Us1`L)|x@jn$G`ZkZH zzR)L49g)FJ*0W}4*8Pt=fYL#~l1iFC;v_p>t~P+FNGZ+>MK?VFLsH>g^R+Xh!CBe1 z3|QbI2j!*_0|DH)jj%g{AD#z78g*0rgyf2uKl2#NgXX@nI{JMSLWpPSmps<4$k@&D zCULzm-@}uvB6kKHGf8MdAcu$pnV!Kcz;5N#=|iQydtR1T?`q(kXo=8t1&C86FG4}H zU^Jo4mUZvLHQS@D{44UAf@2PCWmgLRpswWIi!LS`4~8iB^S*mpsMMG(65dknr|;Nn)i|nQ!aKjl?c3 zDHC0AP>%nWGwt|2I00z;i;$%Kjpa%lc5ey%t%&R_*6Nh)>%g(kT1=2?yh*_YN<5pB zB$ZCAPtU#}cc8Lqx31Yq4b#=2_}6{rS$wdfuKe%AYHSESZzeClcAj4?)8l*%DG-LB zuY6#)I+EM8Z|kNbRc;3Z^Vilt;PlgZPqEE*_IB{OR^xKWNeg#eRgpS4z1Mz2-jrX? zk#cF_)^Z>wZ10K0gQS(8;k3vezU8wFGRJ8$UORZ7gfx|>v3%P8=60iMBnBqFj`cv} zaW0{*x)!BxO)EQMULFjda+(jj792_}6dAiFj~%tf(3eWV^6YgFSZ2Q*t(TN<`S6yy z-35wV4t4YPl1z$pm!ER@n%!1WLiu~+vP4=2A9e@6Oac@Bajf@^HbzUDly-!6q9g@h z4ez^m=)=Aa$n9eWsuMHNl~f(0wDR%7yks)2MlAzk>aetot~xJqzc%lp^11dmM(wPprsmwAFYUH$KmotJ+_}_hB+lg|$|kUxWk5dp{78n07;9E#r>&J{0wOYQq!P zq&R?r&?WfFWW>gqPSe-PWHyP_^R&+`Yn})6c>8oZFkp@P-sOh=pttAs38|^xvPq{P zeW!6PuFsR7=o7}Yy6w{HskWu9bq8)w(-Y=yCbW@7|@zpMGQZrptE*P7Q*96;%H zPvW*)EV%xcB#SFULPLi36T4Nw0&8FUWcl|j9ImF%VuVN_6KxE?!r%i~d9KGs2+r8@ z9DTT3DZ=K6f!0rVB%g^6#Gu2(C5W$rt=0XA|DR(eMr&o$S=sDYxDiu@a#d4TbD_lE zTn?_Is_~}S&O5U~`?NdulKYK2Wwp+c-JkpxvZx+3yO4qgjk0S5ObG3LAE4(`N=q3*h!(j@d{5 zJ2;j;kMhLLP0cuyDcCAw{nEF-lq3vrKB_qAEzp?v2VZWjhE=>ZLd57zGBX~&x=}lo zbY=tgw)?G#1M|b8^GGg(W~WHkZZ^virO1_4#CLxNKtf6+Bt;^?J;#+O^~&YGX8E2x z97xYyw~`l;gXJgM-*z{u7#4oJan+q04^Az@y%ryDdDBtY1(E@^<8h2MDbVW ze416m3#^hopWf$&#Q*vr+WD}BggIo7Cwih%^h^Yx$VRjJvwmxQ_e3#BcF`PwZ&{f^ zkjZf~jT?&m?n?D^#%2w)j7yIw5ICY%QmTrDIB~&Y2mR|Tfy*8=wQpc78s);l$;*u}SdPm~rjIOm4`u)>9k|5q0Q&1r& zV_s{_cxD4KS}hm29z?JN)qY8dB7SGU&?7sCxZ1>=R?Y}u=-RtDBd-GNjj>ztQp>OVOd-Vsxd z=-Wr7nr`o8>UKvAE65V1+?U<=j|(=$RqguTY|ix`?F@+-KaTGo22`^mRHw}=yRcZ4 zwTqtKA{*2}mKOvgeGB%RV$--2`^p70{V~)WgNM(=EV~-=;eQu#d4mR~ZFhD;8Ii)^ z?GjkvM5%w3lT8}J4;|ET1ap*jzDUgUB@f|6WwdG(eOQ(Z&oz`HoP2}RTQGmoTN7sb z>Tw-++<-t+MfgSPsFM>vY%fl236IrK{EC6sT#2jZK=N7 z2yQ$|dT-x1H{Nq!>=?Y<)iAi3_K4!{c71} zFZa=i*dYb>zXD2!7voL9Q!%faS z`FdLM9#H}oey9lz_IjPpe8OsZsAV(tjOq=_ft+Vo&l7gWD!@g^p6_~C@dRPa3nE-* zHX47tJN@jgHTjw);i4Z%;|*~-Y((Xn*BMYSujffbb&;U6T0TnP{Eh&73L3k}8`qjO z;pXnhjjGW`W0_69!s)fAheK>5>iZ&q(OtZoHB+gOmCej^(F@Zkxt%tg(9*-RGsf+x zt1?`T$qAiwtq=kfWBN$}^CA|R^D>{sr%%1nf!;)0qlPOzPI!-UeAW1xk9r?8^W4!r z1vqh`uUBqGo}BX`Ut}pBE%pI#-%z*QN*uHUx66AJO#~kXpu0QzhXSup+Zd`{uPkW# zIxZGgQ zc<-EKug<+bzm}lFUgd%|;~jJ&J(elu4l-q0QHaqFbezfEqpFTA;$)y>v(Le*}s!;LV;MYiZB5EgYev0M$gEb z^M)aNkV{AWj-NE;1&D#js~Gc6*s`W{o$S&dT?F2cY+1UHkqJ8!=n>>C`&#cG{9(i31tQy~&$f1$!B^pQPk9x@18_ zq#b=;en1ZpWp^a`3iG~+v|K%PrW7T?m@MJO%bbI>->RIQjBYUEhN?sB93j>JRPRxD z-$%Ay;r7M@yT}u{(r(gdy0D`xM#`~4hvHT58_EIjZC?{QQ3H>SrPJcaDKvBdGm zv?xi@uKI4eCO+tXYQ-X8?oGf$EgTCx%EM7HEWCT&D89Ro*;)1&H-Lu{{heKQ>?(^C z*A!VNV&Cx)&vKHC36r6y656ZFN6S*{#+#q}XX5oJoH!=EKVs=gB)-dyZ5{vT&FGQ+ z@0)?is=-av{_9lE%wsCI6paVV`zQ2z(ETj?j(5uw6~A~sK*_`$XM!WHxHSA%dPIA-)?U8lEjs^)1Gmy z+9mbK%(>m4@E_kpIy;rANWSpN)i7JK^@;H=PCN8TH9*NF=z@UN4@u zkUSuwm;tfsuwSscyk~=Hy%Wf3qmX$O>$&nV-Xvh{gsHWW3p~?QI*(xX##dY^rYY{L z9buutBLgHA9OuY1b!jmD6xe7itT&qoBY!UqmS-eGoBf1eK6+kKoy5lPEC~PY*(1{9daLF?xx= zx#-SrDAj1h0gr8O*MxVvv{PE-%s_*>y8C8R)-oMq^i=zrJ~HI_s6hjXga5Ii)nYDP zyJz5KAJblyavW^KuVPAKO1O9ZFcizrTgs_JO7wt)`EJtnSt^8odbMQ&b=BiYsNnLk zdH6w48{U!TWP*!Y01NnL`x9Y-)|L8$>iZg?sk-e=Rp1D=3wLoLRGldCp1IYI@+lvs zSl}}H(3{_J-$4}WD&@6OHu`=2anRqzfCoMl2pXD(5W_e1Usdgw|L@~NirK$(vVU|A zFF#)GC@`yInr{2%%kMT?#@N5IS{>yzPLb_3=8#R`{$Q^No^U!|n#K^xDfA-+4{>2f zylBXH?;AKZdV92b=FaqL@A(=K#|cV1OD8S_yq`}Uy2V;$S)`MIuQfLlGdx)nrnx8Q zur%?&cZe8wWC{4JY%UgK%GcAoXfP8*4j?*|N+2PDf9`F4GT34fvg@>&E3DD=S@Y*5 z9--rG4YTy+XCAwGDxZXu=YeUEY6d$G58+Rr_JZr{=Mu8AxT8NF9L|2j#=pWJ|M6ad zFdSxgBvmfkO>SN1JI16`n!303n1<#;DzpE>wfRQc%|P>cKqs8+At?nfoYMO_#>9lf z<53{ZS5~L#GM!*yPPh*t`KLbYc9WT^upC$Fp3a990c*z*;6UH=y)f0xrWL6Ix<8H@ zV=J95QY0K4`hv1v%NdSALqwfy8jU;no(eAOY6(d-Oe}LF+oWKcG7vw5$+v}|Q&U8R zr`g3CkwX_wfG_gHc6dO2HCEi}y?$gjI5?iNY+5d2Ie|oGvk2AtXp&--P09Q8QbulO z?i)EpoO%TT*=XD2wdZdFtgJ=E@tGG|7h*X&-?@K*CI*l8_^v8BG`g~>Sx=CZVSF2% ziF6ijyka6;YfbN4#bm2~CJ){=Yoe|J1kCbYVpAiL$d3wHfjVwH4rJ~=VA8i_5?-%M zhDReYnLIZaOW0wKG?q@-N%nXrU(fq@AJ*!L#_^v>vwxHJsEs79q9&cJ=$zi1t!(L2 zwRCQoAce^m-9A;h6|Oj)$^EQKTgLhf?b4SCS}bz06N%psNoW>hm|gTld9chX>t^I| zEF5_=2zJm9a8yep9mXzGWQZSjo=&B$0(w6uUkf_m!aW#QNG>$5)=ln#FKZR5i5Oi! z!i=ShD`#?GKOI3Dj2!{bpiemyF>s83Ljb4W(*+YE2IKEF{Yd$~poifbv@hf7P9)nw zHkQ2^VMkYG-p0HaEOKM-E$PQsElTzh8m27`jlCWC zjrwT6L+2m(m-IrSKukPm*by)er$O~WoT&V8H@Chk3{z1oRg2&n-<%5^UL-M~Llmll z4Rp$XanH+O7WIN+`0uvQojl6NmvhiSCXZ@R%W6QKWS?B2AKh$CTD&!q5P*2{N9 zL^Stn_YBAQeo9sVCy%_<<+4c?3akW^5oeH@CGD6Pbt)Yh`suE z`^!5JX7Qsv-@z2#bB>>3VziX9D!I>!lt-u%63cLgA8@mEpK67AbH44KQm5B@ zd-G)j)K0a!$aR0zFqP0fwrn(o@6%Wnd!f`VUAN*0aHzv9oz-&-w?{?L1S&C zBv0=&;o+bS6O*OCJvG)p+{ML7p|gpbSr$ZPMTI>RnAZYsJppuq7Q2pFyB!W3%>vs_ z&1O^K32qd{#9FC)q4Opgo4XGSea9@ab1iN^l^o{B`UZjhysHiuL;!O_We5FawbD!9 zTd}`;c@lxYR1MTGi9JYg@_5kB^vnNR!Ofhd7ZhrREM{*#mE{-iS;!Iu zN!tHayTq)L9NQNM_u*|P;-dZ(JwAc~6@ZE!4ynZVtsOar^9<3AZuS^jS*j#}agsvZ zan1BXityw(V-Yur+TJr)bXu&$p7C3Qr3>fR^t!2QP;V+u@67y0z|Nnim2{n*sv&dRSSr>Ntt#p9yuI38 zpBrA$`gl-oFP8?v?M7z&k7o4BP2qRzYHr%;nhg(I$wWdr8ROxbZvrq8+01hYDf!p zB3BV_te0ZA!tzenOXa=;bQvj`IF=PSH`0Rs(h?OqdU&B^zj?>{kNojMhh6VBsfK|R zywF){M4J|f4wRMD(u3U<2KcR6HswmH{Y71N+vD*@!7yJ?PebcklV8IwZUpe)wdb-3 zqrS2`B~mb?kl@T4^+6-uv)h%Z_@xULdv3ZcIM|&Fl$)tv{-U>G|3RnJ9_9(iw;um+ zS&fI?#KY@PfxX&SeI4ryay%47m%aG-v)wFkuRz7+ZO z!iR!Xrl1O3_n@$GKmJyjbLNaT6|tvJ;;X0D@4e5ddypn~0Q(i&CR@w@p^?CN zJs$~<;`xTdrqhkJn)uwq2L3OUuH_r{eXD?r3?xa^HF=i=FtLVWvk|G{rzD#8T86q- zhIa`1xs%~&B0z2iOp)1m>l9HoS|uzo{ZJ^px_nP@EUiae>Wz$|hEc?*-oD9yy#Urz z-v~GuexFxbUzhf(Du3D3GknS}HXED!hyHyXxizfobNT`=bNZ#YNXTksTTht1@2gPX z!|R)rYN!t)d~bFbRv%j^(-kD^el2WGsOP?;*jDuJtDC8;TKsA|b#|YrvcEK2I_$-h z7EVRF>Vwmu(<(^)#_o|($akN17ki2Y&kM*4v+nF1Y6gYWi3O`Txyh55$|FZ`e8ln2 zuRlMZdVQJ|G8;L&O1_}^Yx%U>U}hELbafWg!y_Js-K${e;S7B2l&wFn$lihLJ06yq z$UOeIw8NOB@I}uE+gou0lXkz3t-uch z>tEMVnXZMGCmH!dKCbb3`MNGOPuWY|SE}x4Tv1=<_08jEHK@jgu6J*K z9e9R!@(nt_7od~C?R8V(zmu_KzRzGBD%cQ#X}mqlVP<8J`Otk_d(L>vD-T1rz8pSR z5B>**r~Z~@nA24xBB-kTTvzNN9+#1Fw9xaRW@|65=JmC8^)rEmw^#@tyyVBTfA;z0 zF_uQm-}k{jEp`J#DwoG5pO4IHc!DAr)G<0gk?;3yk;Y;|?CB?{HbNigZQNax0^Hru zC$fLJC?s&jXTmHU4u~QFG+I%Gu~s-=vCPU8)PCtniM`h4YgFe)oNiBoiDW<}j~-DJ zkIe_7bFP?X!Q9n@AdIPl5sGk;!^JP(7f>E{vN>iMa=&9pa*#eo>|hmdtp6e-rn%{%OO{y85963 z&~=C)trFX8D8{`*s6vNoso4^%@QK$-+ThfjtK#RoQ>>>)s7xok$B4eKn>X*`^hYNfhBE-@L6##N;)}UE=o^Bgw*Od{ z-aNwiB>L40Vm{m?r}JOohQ@<_wwYhkYdC?X$TCgg1%O?qUlQ94{+t4(?>R8^q7Gn{ z2@)fADB)=~q;CC}1bYGdlF0|3@D?XjW%@@9)~dN;JXXJqZu((X_&SAf98{Z%*cAv$ zmXv-(cpvv8T^n}}jONDawCp(vTnsmL9@NP9LAvJpAUid%jiOkK+WqIv#u6hFavBQs zQ<76VFh*kQTr~H;gPzl@G1Q4XFqNFoDWzh961Cf?mXm1Tqi6YA~~rBcpwJ zZ_skpx0w_ilQ(PVD3tx4r)PvXT(kaeAF-2+$W6mr5 zcenssz}sH+iJ@RMLBZPJ;Y7uVRft>hOhsEzi+kM!1llBp)Z)<0t0fz@`@t=8e-u^)R2?Dng> zytgfMcJef{GWqn}9MU;HmDL_MYdOf%86XzP!ve-$SD77w#J*%N`nQBk@l3ecNIu<& z&d(v@QwS{_r>`HYslO7Gqx}woGjpFvzpgyJVt5_pnt%FhGkqaW%m{8zan>v1CVFMv zV=+ngt*RfvOFR7feUp!r4cXaM`{Qh#w%oqwY+_8FlGoH}e1Y5I+5_+=a9b9~{G0i} zfNPHG2a774$E{yvW^c86D zoA?NDEsu2bmFi!~&-slfAgrt$u8S(~!3V6L%X*q!cTe)Yz*ELLNapCfKWBlz$HCm( zkRK{|4ELY34QZF879!vFW_y~~kye&H=jmJa+xD=2TOS!{$pUFm_-bT@IyJ2qnG9M#@vhvr3q)9W=hJ< z2kq3d%r35pkZOXw7IH@-A9l+{8X2SadkhnF+v88E78B|F@TKUTlRnN8d zqXkU2%2d2oXO{SzNjl|>l8XySF4XUZDO>YG&TTyzJy#GeEo>{-Z{1iv(-`v>*oHBb zw=LgA4oBgQ1_-)Fw=E5d>9e)S%AAZ@Q?)r56QpTi`i-4HY)X(C+*lDDD zs}s%y%j>+qIVLta%9@*$v|-6wNs~^mc|2H}DHq`51z~zp{pr6M_20zmwDrshv0Qv9 z-*qPYw3FM3pQl3@Y9c_yyulTE8$p~UP_6w#>vV3s#hXXzor=?6LjhoJh!gv#J&BDt z--b$(v~$PUO)8^y?`{2?fsK@xq4Vlr;zQy_YikSqf=PN#$Yg zWm9l-beG2rBljyS@4o|!2}#U%3C6Ge$mWVHFwl0@FXv_`wpoUR7`Y?!Shq-QO*ez$wI511U2|O$0-`x_ zg>vvWPo7IsvvqeEi%E>Ziz)l~(w>0#}!QMtd^7%Msve}=}a zavpAtCvzb1gj=2I#(hgvzk_RW_+vHiAgwzixhCC6v%R+i>JqbB2YVhE+F6!*z3Pnl zo|pc&mT6?G>OR2{#_HJ{CQhECPB!~u@E6}*2i9we(ny^Nvh%rWJH`-HnnOhqKCGEl zDqs}R>_b}5q%I8leQMlpPT4Mbq0E%;8P^^|S)G)fLxKkvDgUa=-5TmwS}h{(e~-o3 zB_?%;x(BgJoat~^aHOTokbQtE8kaEW<*0wCf(^I27|z*1zMfn%J%#fk-g_rJMV}iY zzkb|CAw;&6?8QuAUZ4NW{utd^;O(lWI3)7*8kfG}pDf5}s>3U>hXO~OBxR{gwT=DvxzsIhk6JCx@v0%N0UV8mO zb0!;Wcbg zt0F^XjSTKl4~VODi#`FJ-!o&>9$*HS*s3JW$6dx^ED6$*(k@SmojDKmAGC=)qsB1AzTiKR_o094Up1SljXT3^TR_I-LktU zt{#;8P}2u9gZvi9&ovre-t9BS0K*&R&wF~^zhO3HgzRq9Ep+J6)!U@+*8XDizABdD z_q7=GhC0NS@#pJlZBK}wk!eSe#P^0XemMGDL6*>o%teH%Kv^-f-2yi6f%6p2c93fA zxpUPZC;ZC}SKQD(cTOlPZs@S$TY}ICAU$dP?VaZ)<)3^%1o2OtP@ugDnXj%NeprNj z;P5zPOg@RrWlZXgW4>A0TrLj-&tOQql;Mj*08XttBM97ZaO^1VN`-rqJ0>?+;|2TO zv}zSV?xBnQTvt^NzNWDK3cT`!0@V#@3zwd;luH4 zQ3LUCS4jiNVPruj|E>L-TV2^S(>cTjWUEryba|-swc0Q6!#R(R)7v9biI@MXRvzhr zwh=QvbOZp~*L#=A8o82Ks~n1V6x+7FoDaB_$GJJeGcH93b^CP034&hZ(KCQywlfngeJ)$qD>I*{oVf=_4QI~-3M721{(TGkz z%Ja?e@7E7(;QTI-aS$rk(+ONVrs==c1($#Cgm zGWt(4@N(RK(_ijfF09YcJtWdLzAa(uDiLVv1iJN&I4!V89TxjKFUm;mD?o`Vk<590 z%|%J&vg0%c1c02&(=|fOr*S3Wf3-^gLxcZ&1Zl}(69GiZ({Kz0Y8e3)uo?V3J)AG_ z!h&+J8bEth++RW%a;|!0=tS|Q=oQv+u+Zb`M~gn3LYRc_i?OAPwe3E*ZQ-}>`JCP< z_-R1%flKR&aae62tc;2-0Gllc-1E9MH6oypiq=3> zSaM$A--z_hl^q|eL}`;!%tXx|bLPo4aep4x*7a{~L{X>zaOQ1@oxjyvo)ivld502{Z&w zqvDRp8C^8Gg@uZZEeRax4Dyls$I`hkHT&2%`*zbhGMtDr&DD~`I4loyO|{{DrjCt!t&`KsBThuvK5#6y6qE9tS(>MuHyaP1Nw=2jwbz9 zOXn!vGz{_3@Y$tu8#xXIV$?w{{>!Vb`G-wZ$G!%Xmiw2!~=Mb z>$2aT*k+nXT+MaE$u=>bf1U-z$&GQi;Lkrq&&0?7!8rc^PUD^ z4a^?3Hd*#p=+8&B^)h%7ZR|%t_}dOOC46|gtQL9GyFPPJ%oOnkj%R*8}}pX?5+z?nWZm@Iy}@ zfbR%;J{?4hgJfGIdVBCr23W90tT(r$`0d{UDAZJ|NDIkgbHHC^vN~tPI0YE8Vq~3i z&QZB?l^Y*T>#%z(e%Px9tq~vj!ap%h(8j8~JE?rvU+^JLw;R*re__nTfl+cAcMFRH}xIw&{C5ZOZus-UV_*OCv?dO$Iw)=B#2ZOGe;o3{{S55!vgx1TQZs0prN_yk z@#byTXzj2`hyz1*B9|>BMEYbNyxe$o4Ddj+;uw6L^xxj%W_eXA(_kj6vZV~+)m*T; zIzydfs5#vV;v7e*E<;~3U?x1B+@AupztNC3ZdXVv350%~`+8dNq$($Z|DXe~>GB+E z8?wH$&vnY~J1&|%W$1LUKSk#~eKrSDJg|JTxNTSkYxRP$dwCzE85FRM-Dzz}ukVJD+KuZq$Kul$_`C=-Df5)>Kpvsyc2BbY+kuPd$K_Hf z$mPRijzf~xc-@BG2<#py`i7HSV;e3?Bfs{)wz z3OPUYgp1-VEET)=s}MKzA*LErej9E6f9lPD;lu6=b<8toB2mcb7kXr?7OGc|8p%Uy$5od28vY_L<-{{Zph*A@UIP?(#Rv&^TicOUDqapi* z%N1dj-w44m8Pm@dh6zeX|E9exGKGs7cZQ$bNa#`&d9U*111D+Xw~<8SP%Yf;xqRVv z5qmP60W>2XV+3yxp2&rR9&lcd95+S`^S@Sv{x`x9O$X$$n&V+$KY#z@xl}Dpd1 zsR8~4^44chx6k=o@3;0s7C;nbyW}z_lL(g@>h^=z9 zmN*OFS0N*^Vy!FiUg+5_6|}e2di@9H)A+Y(CB(4T|7lv)Ud!r-=>0dcYJ5w$`9|)R zEn_26z8OXf#hy=ZPIML<#Z3U^r__oUYD|oHCB7Mw{g`MjbY;y>DxUbVHsQEg)+08FXai{-rP8-kdj}Jw3IN&@H{2hHLK9TEtF&KMpTDP%U))IxzT#PE1bP{cB5AEE{EJCn6-)+1^A_#cK!v4r33*j(~NI&R+EW=f=bAAzkmWmqB zQ4z0NzIp=qn#h}EzM1awI}3(*kBO}ohr&u`{;~C_Kj9}b@-zp~@z~6y<@6TrNe@(& z+a>b1vvE!5XgkhA-swBIq`gI1QZh~#qhHZ);&wjwDYeM}xljI+EfyoK|ArUxoORyq z0?BS;T!^Lq_I0S2Df_?k057JoNVw)uQ=NmD3-Qj-&V`WK80z{z{0sycJuxeOSe8kd(sKW z?$u(HX72m_PwDNZb+&2_?FBv}3fs-nc5+|5rbcnAmf5X2k6`yBA-^jqvcOGmbZGyU ze~82~+XZnP@^dfO(+huG&<_17Ay|q3s2r!a^QHY<3-jmv%$L}scmT?6Wwl;Pggs7h zN@+m$t`5VcipJ@O2iBaojlZO= z@Mo=+-@5-aTn22op$$(w{N6ot%Ew*>Y2;ALEBL6#-LOy;a#4247PiN2FL`sddZr4! z<$nwFaoV2ND1TQwN*?m!@9Si)U;kj-8w2QHQR|pk8HMtuW&f@u_+tg8qbNRBqD_Ty zU@PDNA8)@KDCuK@L7htq*R|;1y)?$uJrmR3VZ$ZNFL@b}t^<%+OD;su&xSlG%n9{o zSw2&ft%FGnfa}tlHSi3PJ5~awnfUlBL}9Z%b6P1x0v)?$*29{#bewAwcSx0bI+~r+ zxrgoX$iO%{^TMLnRoY?PFYZU@e?nvXyaTc_VP)O7lzr5DrruY!-F)pQ<+Maao?G~) z_4i?Gn)z0ozU7Bv^k(bVMxRcfN=2KCvA>k29|owQ`nyPrfmzPC%coQD9^2C{Uh1z5 zh0KfrJWutA1E;$5U+2Um?iM2hX&}|@(23;w1D_Z=`8b^ePql|f_+86F{lHI>68o&P zi8^N}d3j5jaUtFN{FWxJLy7jSj$Vj_Plt=ZjQT|$w%N5INU^=8ci(#W#V6y!TcNhb zK9kQ(fwY^g4k5WTt(09&ZUidx%?q}=iRs3y^PEZlfI67l!2S(aXsJO4cyfd^PvX*h zRZ@I{j;fK(Hv9*S{C6Pa|388bwXrdJzDY(856big7s3j;3zJ||F*a6^M7tv8k1*N2 zC{gU|!NN2rT!l?mbEs}v<%xQ3ZVXRt$TO?_6#7*}L2mUuUL=NiOffuf_R#*?J#Reg zDVdt`jO8*b9vZ~yASvHTM78dh9Vo(zCuQ63F({r6OsOXC=@HyAdJSLIP{Iy4%vh>Ztw`4(7#k5#s(+|5jkWsli-pdZDE>PVK$3>oH>BBe znIkB0nOwbTw{jHw+C9d z%1t5r_HEkY#NiVw`ypz}`PGzyZgZ{(Ak!rr^|ld17W+ z8Ss>kMz%Hvb?V9snQ2gP`2A95CZOJZ1+EL{BLRU8()RURkuToK>YGRe*!CZ0B~YKN z;?9I)h9}mI!`ge-yPBG_8eNR6JRQ64EDV>@TxTvAt0--`%m-T~r9Y_oTgmD-PM{eS z5NO6gjHs*CaqJ}O(lfM^uv(%{Z^A>Z`9BxluU9?H{eOwr|G!CbBH-$VI3czg@+>o3 ztIZUtf6F4k!B%2I71?+g?4Ud19hXG6C%ODjWR3CSpE4(pOhKh`V=AMAW)CZ6C?btj zMbZ;{N^d}iB(%=wEgWR78mxA7=Y3> zs$2sbdvSgIWlv9bCj2DKw?*|s;|4?$2>Tuv2NP_l8#JR;P5C9(^0If_o_^ZNsosNW z#y=zEpJGHcXdTm=ATh`h?Vwf|{;1qXz=KtHLul#SHZjD)FFe(Qd%D#(B!CYfvrnfKh zu?NA2ubK**l7qtBf4;Tl$&)uK9_u^D_5G(fbA9Hhj5zM~km_BCzTH|EI{GUXDtqRb580Gf z1*b|bC$k_ZOJhgjtw!_iSZCG?Z}f0+lmlh1j6yX?z#pdm2+r2?;T32RNP*;l?~!ZV8a!4grD>?lyrC+}%BBa3@F@+$Fd(z~Jt@$#=fqB?ZJ7mfBy5XIDLm&JRjgkBpa?*~d z!64BaS8}oep+^VL*+iFgQ~OsaZs@UWOu|U0KU&qi$>=_Qb9+~r6}W&`pXjc%#6l|qMRtB*?$4AYIA<#YmIfS*6FdW_C?7mM#gg)RY-Hh+Kd6z=|e-r zv-*=Tt?&CqLC<3Z8vo+#3+UFbyP&1p9{LlF@QSjS{qkC1m7t#X$XdmyVL-R6gzCkh z(^kVrHGm1BQ?&$>qu?_q#bt?#|o6IgEr246neJ|Vv(x0V(*13nd$D18 zux1gD(Cxircu24T77Dj-1a=1Hix3s|4vSU#F*L+`D)vIRjd^A!9if9gp1`bg;x`2N?~X6%eOcw-IR0*hxKZ1RToighAokHi-^KCVEW; z6r_0OgmZ&^lDR0*2dW(mHn>dw;EM6-|Ch;s!Zu*$pZ>>RGl#SB1n+4&FbqdlFm<`B zGfX);Te`h?zTA@ZN;B$PkSg)mgEh3=rvUgI5|C9N)U)o-cub4=cDzJ0ZJ|yt3~GS{ ziMGOan-U2dxJ(tgd2jXy23+28qsobK-po_m=BRarI*|>JF#G=!U;v3HhThuEWec85 zR^71Tv&e9Z2?UFM^p;@}JEER!XpN1Lmq-tA*=i$#YZH5Ew&mS?F>OTSiNJL5?imJB z(5OTWmm=g9r`UDl>v{|L&sxFxOMY6I{!@O!Yo^OdUbqyur)>6izN>MXM8>j65*pHh z%8ODn%xtT_ez=$B4AMd(yL#KG-G=^V1A5c8rUAD2;61fU;>ATLOD!*~Hy~pxo{jpg zrs<75M|t>KdggxNL&FjAJsV3pfXnp?6GABLH z)xq`$PSeRZR}6b>ZNWmEBc)nh8FJX2Zs#p%sk6npN`%;>P8jPZw>*L`YvTA3Lpubn zB(9ye$QoQD$wZzfxd91N3n)Us554&pCqjn8^;$+vK-I;_^i=y@URIm(y|WRQJlidg z>33H7uBRk&Dq>@fQfSWM@Z|K$kxqPM!{T;Z!CRyG-Ysu5KO)Drmf(K*^jL6Xn*x_> zZK1exoZx#OEVQS_D>Tcj877laoNzz#Y7CHmlK~|jX$ewEiyB|z9{*^pISJpOx#B?XC#r_LPM6#rMZ^LMx=n9nYgCSC8q-~=(lsn!X zrngIyuuL_A)`mY+Zee!*xKS_XL4f%mChD;~fP5zOzfxlVMNWPae@8&>O2V;0=8a_m z?C|nGaeB8ou)y20G4yq&g6nr!^_t>2*?rjSUS$Ljmi7B9Id5&n!y~WG_8(An_`f5{ zMv{GDOPS+zTxMW*Rq1xI)(GfaBI$157X~LbxJNr^lBq}Wxlpqo_H+t(?But4PueAi zY$TS*fXoF5ml8>*6k_M_uHfMVrifR`NQZB0Yx6aTrt5_?c%Z`|Lp*pmp(X$IF^}4x zs@tSoBq-|}V%HXX$uoFkc>qD#U;Kje|MCks;61;c&0*M`Z-X{>-Z!4rB(-f&RV8UQ zS;C=wF}8KiAH+WSL2QP(JT3?O&DtBJxIW_q<3<7RE?9pI|LUwMx!k}+ z<5vF0((;uAJ4pBc!8Fm|nC^;DLj^Rnb|E#oEm|-3Aa)5ZKS1@dE3-{^v7N&U^2LRl zu+6kR{P!v(?{i#Mz2_5O;eHZ1*ZKCWKwg>NS=n@A!`w1*wN=#jjH}rs#ArlOC=)p- z)h(X^o*^X*^w{?#TSQNS0bsC@y$)`BZdQ1Cf|s7^1fI?^el9Um>&kRtH$~F-D-mv# zY&K_m98#7)10W#Mgxv4E^#{UF$VuAI{C#`-DR-mm*nDs{?r=7kU zylQz3?}iaoe!`qNT3VAhZqsgVx)YIGo6Q=UOua2f*3P=zx@FAZr79auvwI@z%1H}b zeb)wbUXp{TxpfeM!khI*=SDje*X9O1pLrn|p>Y^F1-_HGJ}*WczK zXeU9AuV;_MWiEl5QqALn@v{jwc~^kokt?CX6%lXB7^p1FATdM{{v@^j{@eGrVJi>* zcZl_8ey0O>P$-0QY3VdrLB~=~t9d(LWh?vpce(*vy?lca0w~|&!hRlHE}LPpecFHVYSXeO-vgnvCHy+&`Q8bCwwO!&5az`?_&`boe0Cfbc~YVz%IerJ++$}?g%-?Dj;&X2;O2KQRe{{nnMzU6}eeB z+|hB3nsH)4P^m1?%1$%Hq?pYmCtX`{Vm!%#4mDBvh_rsI;w_q~+v^_1`^;whEgu6Q zHF=RIu6Gy$Erga;QhtBpYA#SQXh=?zmFuu#etjxDR+TlM3 z>~WoFHC3}iz30{R(Yc=^>YIDbb6_=+?2?TAFeR7ORbTulkz=FE)i!&^lCp1p_!1L?-B-~9urCoQ7Y?B0e6 z%?`x&^g}J2KFC0Ku9UD=FK`l`vFu37_r7GjRIoV=&@a(GQycdbiUcnBcuF0XfyO8r z5Y5dvlNe>|wf+ho@Eb%}Bk*G{`}ZZ|x0(T{h7U6V9)wr6TL`}izN1JqTz^@-j{0rT zgZK>39Wx^s9m$~1oP&=3BbaZ8bsuq1xH$Jx4hkAUUy9v0X`Lpn;yv?+6{%dj!N#sg zi6v?@L2@;c2ju{VJ)tx?&ADG9Uhe@@EXCy1^&3zafbUVOn!gi z%!^M!3Wk55QSRtBejh}D19 z!DaQZm6{`i51KMNSeAnH`7Q0%@%TN5xtHee9JidtM0c4&qmMK7UyISN&R;m~TG#|6 zeNsJ+m!4GYshGeA5XyQZhw=cm+O zu{VrlWBSRqu+wyVfyb;`p(sk|gynWxC+xE^z**$t0i?O0Kdak@^E}go>0;hJ&pr)? zj~ZhI?xgReF4c0x;RI~F4>n+lFS;M5`pfc=ef!U6gOLRH5_#A}S+5Jw zhBxpK;16mle;xq`f>T5JmnZh*E^7Y(x`D4K`oQpP=rYY%oLFsE#@hkwN=UXo5xr6Y zBG-%D1t+79=6{3$@_z{Pqm;#jaZ8SYY#c2<_`}^dVxD&;i0s5s+vJ)#5?uVt{jkKJ z5SC9~Ye##2Ts+K3EiQKpcLqDtUgpbYI20Qv?qBGC$3Wln(<(aywnRi92!1#6cYm0L zsz;_EYG9Q)wjV}C!W#g5aI3uR;`odsQ{YKioDrPr>9cJitB4T5I}g4kB$MN>|l(#CfFXpo_Ig_rFtqVdKz z9?FWNh6kH1;p9fw9L<-T?XPWt2H6NgpkYh>;wF?Xg7x*aIgH-sVxgL=P6ERY=mphi zND{GmNcw6&eY!gC(zzC|6bVc4R2j|4R#R@%F;Sq+7SVGa7{Z^*Vp+<*B#hYk;14F$ zgm#k$$<@5e#bG)Z-9J4`LJc6|GsGA4M6#)#DPx5Kc35uffE z!s#s@6!HhgO5LFlW8B)L-5LVLr#r|K;nLHYo}$m8cbE1@z~6y@E!NgAe?_YPSNFu< zH5-S&ATntFPX?>PL#0R3D1#&c&)qp0W>ox|@F!^Uk0rINJ>MN@I^LR>Hh2XpYa`A; zX0|f=YD|yrIiXoafHEW>CEmg*gWSUuY&Yttm`B{eHd;rQaaFW4H9CY;P&61L>LU3w;X27L@r8 zZakS;Vn?teRNwJ1xCA!`5sSZa!74`K6MQfJ@#(j*HLYBRWoJyf& zQv5zk)&hJVF#&`mRQfga${}o3hc0Dz?+S>Gd+9CKxp0ywZ$>Xx!8;@Veo~FTN{1si6*L@i0vVu|+R6>}E05_8uZLALNpJUDN{T2*c5_UH{nmy@=#ycenPN_f z{Y}x{XOV(FA51nzU{FKymI_@~;K~Yxq;P7z0@;4cV=4ko(AVnH-F`?zl;2%#?{TPu@piK*e45}A2@kXz--k{|8ppnOiYVK0UD9A0r`XFghXzeb;P@i4n6=o;Sy4|)y>A%X=5XH|_gokxhhAqZ;3n%`!RMJU{JyMThK3+^jnCwv zxGZTQBTabvBx>-N2raGLP)M5^VQr<~AX2A5L$#)444h8gg35}nE`BTiuZv#8npduQf^&F_lSp z{S^}My>-=>GKgEKte+5z)ms?yr%RqWIy$zyxO~!{-_u$t+JIL$@n=qgEGRP1`SyqV zUAeClWG5MgLMt_o5x0vrN12Lugi$C z^a!s;d)GKNl}d`z;TBNSYH#no5F1iO1^uFT)62Nu+Y@Bm&_W*K5%oDF-o79mg^L6k z)D?Q;$ci64xdLQyE@Q{6fI4jZ>1h{ch@^)`ZwZezcwwO2fWJCCdjltN__TM(uC6-5 zIdcXUKI_J_^WjqVPB3_7KIvgn&|bR+I5gKR6B0O%)`cV8Sk1#6E6Ew)in7@6M7wd8 z-eJ)35~v3pWI0U>flt&ivx$`bu-R%(&~#`4DmQ63@w{#|pWR?*^Up@H22iS>NG;1cAu}Qa7 zI#K?p2VsJ+Ktd&qTm8JnP%^9X9pG!bl~wWiMI3u{+{9?-+6yMg$2h@JG6Qz3VH({Sp=MSa5ri0b(yIV)k=$g_MM@M=LKJM z)7UJ*J4J_q?r5iH7}*LY=Ed4?U$M8i)6vm?z$z`p8JM`-8PBWoJa`UHipv&nYZg3b z_VcDeSc4Y%A(38vYHYHOW=*8}D}Vt{n0_#|>>Fg7M@N$1IV^i|d@s%4@;PSR zDq0TdJ;!JUN|>9?d2@_;JTo<|sHIAxm$*YweriA5(XK@Nl$wQ7XPJ(FJmIqfuT&>D ze!?s3TikmkJ^6M0{d#g)P_PAR!wx3AMcdV7%l%wu9D0trBfQws=kc2t` zz_m-Es>o}=bA!q1$SLsYR;%+D(X#o(V5_v zUDHISD-YeBE!uhp@38n&aS5{i%=>RMQ~#<~{@>(C;9rjoIedm|xm@_hkbcXWsJ%A= z%F*S)B(j=XtZ{cCTb0R{j^%P0*ZsBZtT>It&-ly31)R!zsQ&LpE8Seb)_=|dU`byn z5}Nw1jXY!fJAC!fbLV#j*1hHaw8MsW@ zNVti|@8tt{vHJAKOE}K$XWEm&&C7pVCt=fZ#2pk@B%7~a_p##4Pn-~aoD!R|A8End zqn~x)+7xD%l$5F#<^m#SlDJ5^uXGt}y^hy-J6A7!wRO$RKCId-S;WB5*}fQLkhCe) zKQbO)vNq?r!+J;RoR}bgDSoz`mKMP!!Bv2bPeR-94&+`)cg9O5;|RY)6KD0`xye_G zk4KW_u}?Z}a>4jo`OXF7Oe6US=Z<)sYkhGt$^j=jTc-2AttQyb{2Z6neb3I`iD$YE z303=zz?YkBOxx}V-gM6%!ED@yeD^ zwmgRxgX{HS{Kz1LZH?F)2huiR;NtA2J9_gymtcP)gZu%}X`-Wp{zTdj%$ zt!QD$l&;7j6;z=&`iyw0l|X5(YKr9(793x~m57JY>VPJEr}bNJGON2N?TtKOqeR6q z$c8?{BHx!yH2EKK4KgLwQuF`pm4jQ)aB&51G|c-G$_aJ6?}Qls++=>cI-tk_Rw17k zD^Ng>u6sggy;>8{YOy0&Jnv@7_G(aJA81536uMeHd!C6AbbIBx>hN&}@p=U{t2;PC zca>1I2~VfaW_!U@dmcaCfr*jO_hCU)?2eCZ4botM1E$t2eur4R&-7U7Z^Yf%FFR%> zz`>96{bRYB4VfN4_QLyt;lZG9C$Ff1z>!ketzbNI=m-1&n8z3M-^?sjWf^o?fjUwb4^+zDb$^`BNoT95Yxt^vhq zWCD>d{sv}c@VR@rOeyW)X8XS3HtJl`#`J}i63583o<)o4q59}XC|qab2M&o(JZwB+ zpoaNdG*QrGu(Xdb*ON8a3_i%P`1!!)dW{Q~Cf0%)s{u@7)y<%b;47-z%_A3<+DtA0lPOg;5#tsRQyE+fz{pk>D=-3Exo~y!&&$QiBq6dbC!*mRu*G9 zDi$w^+4qZYJQgKQ28I&Y4W)<|l+L7R_N$&-bhB!#a+wP|wquSkS7*I6vHbyUl?w!T)!=^jaczZX{mlZ-f2!vZ)v1F2dTEXS)X1a&Bcr1sA(VcIv2mqc zmA;M`8Wno|rEL@$0sOXe&&zdqzVt?r2;g41MFCM!amWKv{mvANV|12ETikbFTthon z0y8b#0!S+{+}H~gPzdAe+3KELw}rK;ZRlBbe>{(kiyfP5#LG8%($wRA;rhv}i!n>J zt6iu&vrQXYgI!9D0Ud@{wpe7LIXdmW97tbfG|o-rX&{=+>xQ_$l663}Q5Zqmb)19D zX-{1y1>Ib1^)A-pqG)#6UEP*4WwM4pX2Pu>G@WDjiTN$U{yP}}t z)Acc<5pALpi-3*ZDWiblg)o23ZPjfDip2&RQcwdsG&DGtJ&^@M zg?u+=JwO7R=SpI{jG(f6_bnSkS)&Tt4ZLfWcN~nn!Ea!Aa`(q$)_S}iDi1SazcuIo z(JCC+jk>Hr^npM3LY|X2D5rIqwll!fhoDC`T7({u1fR~*os8Y);&!OjZM~T*|E@`? z2G1nHA)7Vs&NsFHRPOHY;fk_vo?|f%d=usuiIR)Xw;8;PA$zwaxYk^o@S|YFyWLFR zquu4k&>}Kux@E%L#okcpvuv}Q2bQ<%fTtnL!A*Y7SP<^%Z9?kqS^3>Ktenp2sRKY@ zygM?SNm6adp?=VJrUc#5Kmq5KA6c4%zI&FR`ULNd9fbzcelc*F5KnwMPmeinNHKKZ zI!*6yT-xIg`5_YQevx~CLf&8)ZhLq2b5dRO_?x9LKCYdivtOd=23MTo@klPJR4YQG zr1h`L_Oguzj#(U$-yn;QapUQ8VRR{mHnt41zqQ0>Iu7jDzl#k0&yGXDTjf8=M{E6m zKvrd?ogmYFyOPt!!EYym>Y(`|&FCuA=Usyxx#dhgV!lS{w%FYDwR@j9>WUYIJ5nmY zEsER2=}c9z2inx~)oNUHY&vGt{h_9@x%0ck`YGST`(ITKCoiaQ0q7Y43-xx0b)Tof zVKP{VNGVU(>mAv~56x&CP%)j1RJ4cQ&P3aV90e1aa3Vg0+w(mYA(kZ8d!BhCqZcb!j5GH;* za|x*(-8;=*s1N#cF6TaTUtR62!6PxwVgQmv+$>u_l;+U34G!*%SkZl|D?k+sUyVxp zFcKN5%h!eZ$cz!->#7~^;VDdV-AtsPA*#ze8{`{gNoT6SKc%^?9QdvGq`GTlipjaPYE^*!|cH^w210=GXSPN{JT(E>n!uxmF z+m`9BEAGZ2e~72EJ}}XChwQW1^&z5Zw&TUTUfb`FqY0ERnLlz#1h+>%Y?t0epMCqt z&=QX$FeXfou$Zl*e6%cM>kP0GvrdT9ccuKdc{=}- z;Qbft11_84lwgY+Zkgh5x%XFpIGz}^7mKpXFn$U^u5w%P?UQt`z*Q*gh4EXY13TK;@UcmFCnUQ@2O1{6v(-nF$avZXaJE;)RTMnqF5Uaut$3EEJhaZsRg4AYDE19KD9%I| zJ$tvS8mX&wgsEab#2BzdNe-*qYxvk_8>h!_N+0ZEIz72{+nf!v^@thKXdrB+krk{I zZlF3FdpP}}7eW>_K({#PV#UH6D|lDlFZV+~-Ch(Uh{v4L(=bz4|Mh`ZWR!C&wtitA zy|$sj+wuA91Zg44TW@QskCpsLJ^lJXxmZs|dW~R489mCH6dOsXA##^$#J%5T1@g~t zG*(HhEt~01dR?(^l|6U9&gn`CAI6OD-%C3VGaHVE`FZ&z+jodmg+LYO*wWsm;!Npm@9zua$7_^sQ;To{vJGqFsnUUZ zA9V2Ep}a(t7W-d+P!S=CAL%MuE8r%6y`Hid)8*yzGTVE}Ed%bi%aOTn*?{G_=Hs)x1_Ge>ngN!f?*SSgTlXE|I zY!s#M{j*|C{?~_18w{UaY0+fUm>}JmzC7(gHe+LB*Rn?2wxuY2Z%0w4Y1MJEA zG6z__T(kv#T>9e`;lm4E>?4-}uJ^&o86DZBv)MKu8f)#G8rmOr#N9Kb)$=14bkD)R z*UgPjXA(F)Cb>U9C%HN1oJ`6TOItWa-zaJa0`I61edSW9Xde zwh}lQ!Si{peIlL`hPf*oMV;$K-vybWBp|o_x=lFOELMST2-$m{hq|D@r}(+O$x8G3 zXrlIO^w(F0illf4Ez=lA!JW&A%@97v*>@&4?^*^|!PM7}5F@$Jnc$7Hr9F?{$Itiy zgkH;NP1G;2vw-LXd~5*^=(0IVow*Jl+QO)#JifGIQMRw>OA@|l^kc9$SUYs1Nt5@> zI&uv%^^4QCKYY8#&!jo`qZdLg6uK=aM#n^=n~Aq@Bbea+oFeUu#4$``1*wD;oqdCn&}2m&r{#cq?& zmfnOvsRI@|5AtVUVpvf2yVA?SRW?qCks;+yco8UT==M%cyh~A8ZG|t>jkwrAPha z!$5R9g4rTi6j{&+b7rOL$06|aU47H-W@S&vsJcvXg-%(S*OIuTJ2rmoNF$%4aC?$v z<&nUp(7l&03D>NvJ_9Z2sn2@!?NSA=S1WF4OOtKo=+X}gUp+#Sf~SQK9f+}mTx;4b zxxQ)9A;3P1M{TK~vANpe7&E3M>wcH{k0lrnFtE%!15=u+vr%q(G=f+^C5rQ~*FJoi z{B{}qe!4~Z>HL0i1wTjHWD%YQLc`deAOdB1Oi17SX|mD&_aFDF)VSyEb?LSEV0s$h zMM^N$eFQZclpinXsP)3L*aWRpu2#eqz7y+y&@8#Zfq2n#awWSY^m~gB#LnG((`)Q; zJ<;J{Iw@G&$MZLufakeD>&f1vG0NJ|&V*PDTGw>x$6#ulMU{1xb`O{<(alWASh zW2>QR5|#H6IWkp+9h>H53DhuzmcjEhtx{w|3a2-cRyL|LZnXWmGRbt%!gB-Iz^7U< z6k|GdsvrG{-(ITF^Q%)b&N_de!EOFnqN=X~^xVRfTvVn-#pn8lK`sA=i!1${kKXsy z&|>?*t2*gGVb}ZoNm1Lo&&d?_j7hJ<`%$CZ+9x6~Sx7 z-&+|kWAv_~i>T6V&@k6>TRk+EOS>;l4ByNu!a$w$b*YkrAl}YkoRuT` zQ^Ekrq6xX2M!&)o5k&z!E9HuZrC~40o4{X2gX0g>z&zi{foXCku5}K^L1T?Uu(}1+ zujpNmTh|9~ttR`@g-w_C;9(+U2!Z`>w9%k&m0v~h49TAs;s{bz9T*?e{htpUfr{Hqsg`@Q$^~Q z$_N;|cMw9`EvQ>=yny(JrxsOCB0y+Y!QK zNw0{9b}Oxj-lhGbg+%>7d!xnh8vVt_?q={g>CqIWy!Ti%D}$~?Z@WSVysi$ACBBxD z@~3?5JPHqVwN34I@q^*WMv;dwW_rBZgG?jEZ=v@iO9o>*<(6an9da#i#lOu{?4`j2 zlg?C{%8l?xH^v>!wNM(kZ>@|KnyWXSG!NR{ z95vW4#l|udT)M6!v={YwYsihPZ_NjOq%kR^``R`kDTQl5Mjcr7jFOBqNwwBuAAZDG z31mWLd~{>2Pe*b?*#iJ_C~FoidZr%y`-!CMOwQKxPTRW&CYQxPMz2AGRPHw%WI2J&j7m2nd+PSJ#zJ?e@&;o#weG1r2y~ZN2PDdcZZ#G^xt0h(XmWcxO2?mwBPwj}m6~bk{WFN%)kShtFbj^eV!H4e3Gvv6rEZqM#AgPxl&u+$I-S zd_D+Q0c>j**Zn0~E&8!kHVdM3Ly#W6N|7)h&aSe z7rVEtCv-!{-Y3>9^92tqCu?V$8>UTe2iu>9Uk`pNiW~JMB>!rr&7q(#jZPgxTmy2#@ep509EHB~u}Zbuu>Yeoc>lGbCT&}R0_ z-7$7bW%_wfSX7i})}@Nge$UBL#HW310GAejv5}t&bycYQ2By{13!MSEVOK{7W(>o z?S(!Qm6gM7Vl7%%jPr&v%Cf12O3No1w#@a!yBS+V5fk-(zgQy$i6nRf)e@$aOW=uH z?nxRxWfH*)SYic=TixF7SCQkh5IQ?f%h$m{@N?#|Yg-}wnp2G?CQm|8>C0dyC%8~K zSn8EEn#PyYO(&_FR5^VPoA>M@o=@D5cz6kN8Ch&;=ooHx@sffr=QlAYd5H4xx#7Bl zhht;WKRie}e9@K6yuMsrgmu@+(`V71;G%zxud1x3zIgOn=9ofhsNdP1FY;iZBj*0y z!^2H<82Z2%*_o@KhDKbC&UZZ32%-tfA#yDLFyB|^~db#=KH~(8#5ey`Bz)i`VT|ChE7IB zLZ~Dm7<0Y(zFi*RV0vSFttCAVoKxdKKWk4Jbq-r=Y-$oPB;kYPqyzn;X6VLm- zvZMD)@~48E1+u3+3^V2$`fv)%&*IA#uKz&#I-}<#zdlMCe6+ zE&SQ<(?F8LwML-2w9-+>HU8d<{w8(^+7-dx$tc-8j-@{=M*PO(CluZW-~1cM;)@lo zoe&%{1>xEvrXF%ozNTQY&V7NyJ4>uu`v#v+R>4;wb3+G zD>bzd$$_SqzniYm^vvehP1HqoYi5M(t#=w2{=?(=GN4Q{dzsREB}o{^b0u|?Su>E6 z8jngJ~MPQNsTs3aG+%H}9+eZzKS5^3g}B_JSJ z%Yg(Fd%ap6?{sUT(XF=&!L#?-X*GE~k$u88AB+dxI$$69ToaeAG(Mwfgh*jVmM2Q0 zbv5M}`3i~u&WLB0GkF!`+!#(L;}}SuRFgn&#VOKk85Q@1ByFcNNa>}q(u94{_`T%g z-Oc^bX60&CX!Ezwz6kDE?m0&=`~8LmfwTbN8w}tREG)fyw)NH+5)n z8eAgU0y?A|zJt1ib;%X+04t^k-?j%W5#~;+32pIlr}TU^9tgt;mK+t5egA3I(KVjBDs4g@X5oU)xqtB1_xz8)JG@n?v89})V}!7@ z(`A_$(#S#NZ4`owccMDOOA*v)ym3jnx#TDJ~#NN);1Sfq(@#HOW;v#lkpPU=32(;k&-&DC^fhr`T9ZUNkZW>Xkl^y6cO+ zRm)SJTy}_Xe<>hSOkh270mf3)+m-vRxM*|c7@_?_{5Tp1{g^BN>8jztnwb7PmFn3T z1<=ey5lp)Rb2L9*OEfqxrJj#`JL{;h$np7XAZTbo@k)eX-231$!;ZfqrbiqfY$ZDA zIF5GF|91BaJr?WiV{k8d&WA0Xse{eafR`jJQgSSF!GEx?fICu8|E~K#RBW4QC~!xI zHj(-+J(<@6(ObloY^u!Q+1^a(7o?jr@%u~tD(@{4CjIYV0_{eJ9EnI|-3_;&3rBuP z&oH(_J}Hw*gqlbj-;FF)neDz|`dG^;?7mX|u1XA%F>nKw(gzWpQB`7PSwF|MoCH^6 z*18ai`NL{Qog=N!oOvwI8nyUcJL^!-kGxP=#;!%P-o%rg3);Ft9RW) zu=;>m2_Qk;RT8?o@qOjnRYZcV#>AL{^Qkjh%#<6VRybvxLV-kP`9rdNpQZAAhwikH z6SJlZxlu%B2w2f@KrsV388M~PnBpsSbMtPMr^8rle@ZFeFG_VJgnkv}reS7Gj^Lpi zbeF8}k?LU~mQUGtxQm@SS89ME&<3ilI~DK^Sb2xLUe7EVDrqd6h1e|9*2`<4?I#sjwe}kIr8ZXHhE7XMzsV!Cr?06WmPzNS6q0I*73)f7rE#$TE zn9p1$Yz0)%#JgVy8^V?HYRs0P_Le)TrNp%ZQWug+>{uTpG*6**|ntim`Yc|-XR zl^64bHoF2__qs5)q;oSxuSEM zg9kSs@b(y0Gmz-eRkHv%xw*NR0lXwCDfJ4k1|_pHGsq{{Qhv&Hhb2~kLxat{ZqJGP z?E88ks&oP|A$R9HC@!C8>E644`Yk8mzQeiba~JVWw4$D%K%lt7TI%Jep-j|`Uezzj z$wW-=TZu3|R$Y^*^eXMxHU`nEB_0^poD#aIra;tP@ zE&0`cO13FNqtRycBT=3En^5p(tatB2r)9FfH4i3roV*A3B}|5Z%gINlN9nVygibE? zI78YKCohxkGdugapymucnQt;=0?aRGGi2H6(>EWfRyKk8u4LgysC3*NuKi*V)Ek_n zypw#)>6qy77=5l-me>Om#Y7C^kguL}lspZ1dm;DS1HWPyIz=d5-m??(3rc!ZG`{Az zB>6e*JqV)24^2G6v-5Y5$rZ(aWPS!{Fe7zo^l2jOW7yJ*nh)IMR%pl~ZyL2ZL+54~ zkkbVdU&^=c-hzGN>8KOY(x;9RoRowOgfxdyN>TBxo^f1Div{C;f9M;`m+nQwqvMEu%r9fw~)7(21>Dsa}2NIrs zX~>C8Cy=qMw2<4VA4MlgTcB#GKPgc@RIiqNh52HccUZ`nDS zsb&anND;6bv@&Uw>y1-y$L=>{rIDuyNRqH?RrybnX(ZY7-A|QFR(TBa31mhic$l0f zTXtgU2Rby29KdsL^A4*&j~w=tXkK!B?4icfEYa)at${0x-!*QcQ{T$5zp!6}GpuLq zz&-hNmh+A6EMe^xdTk?}Ii7U`c3v_VDG^jQULp;2cynKK3?2)U_Gu3sd{lhnfiV<# zevK5DjuS7B1_?7z4Gw+Oi8_a5g5yjTXz&@|#)-z$qBly!;2-~>9%bjJ)5(0E(ia+` zyxFs_l1?Sv!vbJDMU>B$^Y^vyq&p+IA)g|PU6A_{D+PH)XTYICNq~=~*&b;y5LbR6 zi`@mQ@yq_6)=>5mqa}(wcnN|7u=VbU9y>G*S=~xmc|RTcE(I^}7)yD`dY>GBV*-~3 ze!m^PC5t{1pG8!6|1_ZKa6N@y6guWo{aYZ2s5xyfaAw)bmL@O|-(fUlI9oou2l z_%_MH8*0+OH7=_JCe5HeM2!h<$~4qIl>9a_e8oD;n7-wkcQ$I?W|N265Ors9c67IT zygOC5%2%~t=c}eN^U#}A4FbM&{4nsWL{V32L`r`*&eo2ogk+Sd;L))>+j=-y<6;O< zSbtH)eA-5kz(Qzb=Atsya05B$Ynr&(cpDds-{ssb8U3CWKS|<_8eZ2j`Jo#PQeuppbKyBQ&iA#y6R z5)a)B-+r*+jezub?w!cfY`@(Pk4m}KWC}2bE7&L!cfLBfj^KdAoUP>>Fq4+B+v*$B z+_-Y%`Ebc+**JAOT^?Wa+_w;cj?IJV$e10KY+=TeP%qTG1-Mf&w=mP3%lEXXq8{y3 zaMo{rKLF>WrehRREm5l6W^+C7s>^JJ0jlgl`I`;U2poXs)JmfsFVR$P+C_NINN`Y# zJdZwf#a^XCJPOIs;#Ae(440Nv{2JW(f-*eY^2q(cx8Q2n7)KbTDYCDQbpGZIlLb)K zZ2fV)n_P}&_8dZmdmfgE4}MC%7<>O8)e6P%u1o)_BlJk4cj3o8oix*-L8o>TiRcAeJKR9*jxE>|)31*sp@#nb#}eHBtQr@xI2TpYX~;D2NGmLfS`j0haorw7~Czm1$TG1 zU?I4>yTdohe%E()?b@sAtg3Uv)l_lQ|3|v}>ED-EG_S^&tKJz1WRVuXfVXA4bx%nl zy_Z_w;_Q>JiK!B6Z5B3kb*sE6`L&fcF`ejF-Xn$OL}vuJz9ot{3;`s)20fjh=m zAJ=iv{dj8~SFEDndTI%o92WiR++`NM#mSGV{B9|am}}c~$lVZG5Z-mecX2pL((Oh= z02%Y5vGkWeuKvE=+7za+wkYVqMCI2Pw~<&}0%xgJ8FxfDLSV#))`7o}hhPYl+88>^(<@f}KuhXQ!ODiP9bCa(9 z^pA6qnq1K0D7@t(f-5_{^|O=Cs7;#b!)meGH;RYzlLwpgOS3slZOst%UWXS|5fBul zhs+$L6)Rl?-XH&2eQE;}dw;(wrUU&^obSV@ul8p!v&8OR&VuIwLRBH8(kG)nG{Pty z@TU>`T^-ahB3W}n!DOiE(fq8=(m{1}auT#}{HVpFA}6Jj(T164#kor@@{DQZi)UIp z`8!zCnP)Om_U$@&E({;bs79$dxrK4AFtc(DEHannPiezcq_l$ZF5I!lXjeklIlbzy zlp;nW#27t|K;Im6VpM5yPPd!k_daK&G^&}8_&6ukQSAp@lCN2{>s)?&(3XsgcX=PN z?;v6?ad7d-1m#L~$p(*3ER^^IZqNijRfJ!%&3sQORglG5xsb=%;T4sWalIt&9nC#x z0@;i0(0pzTr+7v6ZY_b2BpZh@z14`uqg>?tJ_7?tU{6xTzwWm9D^r+He+{K3VX7*7xM{p!kW}YN?z=K8^u{?i;~ydF3#MkFAWH6bb;Sj6K68 zy6hV1Wh^{HyNU@UQX}aHE%XjE_iG={VXVC-N(2D8)O2Y{ul3{t?JKtECZ;1C-3eFe z=xM;_ubsFzfkg#_L@pXA*DG#0&jfZBB-${ASnISRM6 zZ+v8(%l0HHLsIQmD%8AH+AZ!rsT(T~ssZ4x{8NPL?Mh~U$@?z<=onNWZrKWOivzBC zVZ}1X8>w9O-%NbxYn&vY#T0_27n|mJY! z(=`7fN-^`az2`C0v7PG6D@rgj`%@qJVQ()B5_C5_#;eY@;^y`5&2KY3(R+O->vusV zsU@86B1~f)1ud8H3=?`*1=O-_=4LjW9tP}{C9dW$DmP1CgyxToa=<4t2VX%OPPO{f zi`+f>bedahT{N*gwU9gnu`a281!#7#4yhN_Cr<0qL0#W`x@oPM0-Y!trX?cN003#&>u7ll9`nnAK#R`dmEG?DXeco zJ&sR<2Mm|WU8OC@lGdR56cex5S)sL36SqJno@?`dCxVxA_7I*{`QfLO&d|56-rVX4 zhfKSCFu=M1{7L@6Jv=!-hkHCTPF;92s*Y~@Ip;EMGZlTIee4$*t++@j*BF&^i4lTn zf1Ka8ixMaupwBXM_81#JsP6#;+0)N8hD2#7k`T!euttylIl=cRWr`kPc4%m zpe&HPlt`mrI$y)aFgP8sw>VP>oMhIRX-F%l)1ZlrYO3-yiiZ8HP-p#ZO1Fh#pFj%pcqlpJ_b?0&%7@~-<7&(E|GY|6`+1#);Dr9P6BzsJ4& zrh}7#FdEZs%KFvTXgb>aO843G0HGYF50EpNL(G~r^7Xy8-VL{=eO_(0HLbX{xt{20 z{1%u*@1>B&HUVtsFAkua{OOqNiTV5Y`?u2UHN&D=cS^hHR*QH^ai!!=qA}Ccly`}v zk+$VG$`C!V*@!T3>pK1)a+_3t?JZJO)c>pgVkRm}`37m_AuqiBat(RKc-$NW5<;Bj zvpAC4jaDw1X~kItbBsZ1uw7`0`smk)KfVZMy9sqI=BJ|;R1*cUp=$B)0q<;urS4ZA zCS~jul&adt=yxgUsu)o_N-u~|IP0_Iy83BW+T=b_earPR`iP{g3|i;<9q9LaEF`bJ z22Bm4{K*D=F3~K@vED3Ta9;canjnyiyr9)2N2jh_4hV2|AgZ1`;CLa|ko>nBc;qru z%Xx#Kk^nuos8CvYDT4~Ct&qJAxqJZ|We+-1)%3OLvJ|Q>$=jXwUZ;WsVzZ6wXqz*3 zGIf|9EUjGWBr>(#47D2krC%wg*?BGX>I2g)E`9kzn{Yufb z>ocJw+nUYL0F(~gVqI9UWf&wSLEb2iQ4=?9+k;nYB6g6w{VIls*0bV(s9;TdYj2=; zW4ag4eY7n*J^c7=jJpFLp=>F1bWAc!yqa9TDX^4kRUmvR8KYd?3WiY1NySb3P`b}r zmeiaWlk_6qS*`V3qV;lb|2|E61O54Ux|>&S1wAc)$RwE15gFZvo{dL8F3l8bH(dFK zW?I1u1TswSrlWhMTv_|nx^`$|+}+bY%#2F%pXuXudy)Kq*i0A@u(AG-QAz(Q56`Jl zN^d=ZinC2f0HqjN+Wd#C2|U#d+h7g~Q!9P+rQ)=$nmH8nsMkDwQq>T>mZYLJtswCx z3Yn3c{sa1`=sB$KlyceY6mXPqOWmKiA2g(3&c+}ak}&q?_GZP}XX49jhU-&7w?dw*gpj)5jMFbTEnULq4q^^;JOFtA{D2;mn}gP zw~Y^T6t?>JqM=ukJz+lU4yLL2!RaaNC1_xrlv)Cbgt;6~dQ>|P7$3FJ68rYYcPZH7 z6of1-(k-8>E}5^aeK84?Fec7~*#GnZJxf*ZV^obxv$A5eZ>QBOh3i>LDxW;4Pk2N) zceu3|6bR<7$i-g|UiCCqXo8MBK;iZ<8+XaJmRYPai22G$7(J5>u{n8p+*$dKYxRkp z;QKVN_`@cjFqGA!(W1oi(eMmQasy4RS^T{a8UE4i{-yNBz>8{hxdd>h&nC@o^UZVw|9i#U5b zN&?xeVkN=)FW1G)vzDa)m=gN>XHM1pGpGJjM}~VZJM#wf>ctj*XVX;u&>Sq*kN~&^ zZA(5RC;-%+>fU`dt^~>L>MzyNRF#k(`lge~QPVvM%mnV?jD2f$N}UBM-}?KRS|vk3 zDlt~sv;{!U4XI*_?twQVAxNQ6qgB6Nv49AH87XrmK3eNiT)(~;0lQDxaEXZcys4o0Y~#E$ql1=j&CiSvqy)h_abhBK4?=HF zU4O&Uq+UJ7l>x887b$Lam;4u380 zopS<8S@gVGoj9mra|_Quf;PqeFoii>ZLCO-61Ood&S$<8jv2p)%no}EkCLjMrlnF+ zT+BJbJ4K!Yf;_Liq$?8Lk?0sR^v^_ZF9~J(a-kg$$*~R}M{0OF4%X-k9e*rWpVDXa!TWbpKP5yAAfo zp`)$~UyQMfw@{FRC_Ps9iCiFuS0yT*N>$V3^t(lhQK3dO#~?r?#q)1-@oraDJLrz` zTIt*kI6{myyNm{M z@yf;`q93A$3E09dgIa(|ps|CZsY-z26_C`QAlE2XUjV}A9Kt>ND8iyp_`uDKjhcx>*xwRUw04q0kx?PS)i zLbHv}{g`Y1ZsMS8mdclh^RsZ0bq9!gi_rXd6Z6p}>sjRiKRJc(<@c_jSqS2QYt-v7 zM%0-}mAf~)M#8Poi*QSG@ZjtvA;(?5ikNZXA!9Qt~(T{`DHn51Pn+kbi{Su=?S(5 zl@SUOqDJBNR~kQd9BbBE>ghAN+`zI|WqZQuIr+CNd5z~8ro{n-vvB!PyN*yx(jJEB z*vH%ER0z{dq-K0s5(?qSpjVG_*wnoQ| z8y&zI^IoktY-+EuLMMWY^a@KNT|R<)KZ|@5F&u7}QAo)m#gXf$*}7lHz%dQ_=}h$Y z%THRnH}k$&etFggsNyC1%NT3^6zQ@D>UhhGe4ZVfVGT3VSex#FeH$ecKPc@kk}x$+ zSWhblN0*Io#Jn~7gJEno@jbM1DI=Y5zHH^dbuGt5CpA5=O!*h(R+!k>#l)!i=Z>qS zQMkU)A_iSM@m!bY+1iqY(QU~+@Z^dh|NkIan9UUahg@Pzbg(8K0~}ow&;$*mDxVw2w8V$w1egw~n2oFc2PZ$e^@|z*Q@d_9^&hux7u+rQ zuVO+EGuJsuK6-!Guz+=wr~&W_7PAh%8%r4tm9!{x9?OxSqKUkgML?89qO zJ*MWcdmBF~u^LWc-p5Bl8i-;Z`&!~E5+h!r($Md1Fd|$Y&H4ityFL7RCu~eT0zE|9 zMEpT*tfZvA_&^n)A6DW$b;qM~KaWm@dx#|tn#z}Y;sIP1;&FPr^%jR#Idii-X7uNE zbsC=LJvzS~?l~Nv1M<^3?`TyH&1%C4T&grJfC!{hjJ07(oVmAEPAHcOzn>jazsFtRr|t@!^OZ zl%)TX0r(=ur>{#Q-pFGUv$h4RowKr?xzyTgpF(GU=?dxfwBy=Q3=$ICKXzNveLLI4 zWWTtLqaRLlBgrz%`$!-0lo|8 zpjoGu2B$xbv)$|ykH4*fldFH2*-8lNWZ8e@?`A;oGXGm!C>bSms537}y`KS5yedD# z?&Klt>PfW2q5JO4QX2z!d;}z@K*kN0AM=gq5vt6n1!iw%$;Vf?;1=-m9XSJ}+!gMg zXEF#ibhMAZ?>8zcD0+jXK#~YVfPMx!E%c}D48o?hWJDKl;YUzC zsDc<0)Ed(S(n1Z0;J4c4ho8(vwZbcf*?Y#gLS;BTTbj8AjUF%ZeA$4se5HuHT}@BS zlS3TPboFMgMH79H&K&a{sxdBp3_F>Sm{QqLYcuzoYx`BcwGM|}*md=sgq zmR?#u={Y8q*fafWqD8`0<%Hw?zp?-hxo6u!#W8iP7HGuJXKNP6=17|-Y4E1$ z=a~#c43NSxPq=oNB5ASV z-<=>8;e~-wz9*u$-^h@5gRM*AiV6OFC_^<)z_CzsAVh5Y_;Jf?&IWOSzL@$ z{;w%(;zQ&eqtdz^qsn^D^3X?x#&zx;i!{%FD$l+yV)eh_W{vT^OY>~Lx>{bf&BQps z3LYVrZ?8UUaaq2*!25GN)Q67*0H}1rO<$5w@m_CvJcif&ya%tfzQvBj*-hocp}Ee2 z6c>J8ui}b*yL%s9nKGibn1amlbR{2#ocH4CG-}N0FKuHF_~{`^A*Q0 zud5U#SZa`_AgWSAjyr`=nl>evBu>yT@6!#M063rH8?DOtCA_uUgUa;i)o)x@8C~qh zw@L`Z9{R4wzGlDGeY+Yy3}zd=JJCA1do4jg)AH$*Iw&Va7#Z&8Ur(X}=X=k^bTPzq zccFF|7+c9zoKkxh&$Xg0>T`GpI6H*Co2RKM*X{MGaxDseH`6Co+|~8qL_8#(BEtI_ zu0K^f@;XY?{+9V!YOPSqhL#co@+4D~nkizzHUX#Ji0+GA3J3eI&j&`pP+~6v>Mmha zWopEeO(Z;Q=|bA|z;v$2h;*ZDoAHd4(v!(y=GUC|RF3VP0mrb?;wx&DEXv-vIcl2m zbV?+l@f^L9;%O+AYvNsG%$Aid{0Xjv*AltbN~hPA)Axcf=Y?T^a<%i z_EH!k;n?@Aw^JoPI!A6K{G-YxW4vkXthu;R>fPIiDok2s(C;2(c?Pv?!$R4C9PxQf zas8H3j#JS`h_~FVWa#w;XW!B@dzgVKac{_f?aHVj%BN@G+3E*TDJP!M4@f@HF?Ao? zU#lg*{&xk+`^VempC=Q?2SZ_HLShHb_ca&HZ^AdVzDuoyBJ=k#Jx#*?7D#}%QtOew zjrOp=C-5zzlJv$mAL31=OqXyTFg)#hq5=M+dw8(^DtOv$gdx`!wXSb|ZE`)V?Z&~B zYUi3t#areo@5Qe(+;NQm!YkHayvF}GylOwSEO19L2{OxZOG#xy2L#PgQLBrYr+of! zmjD+|s`l5xpG96&!}E1a;H2?am*mNI!DHz7ihUCW7_W6A!k5vW1-rFQB(^@SYVhtj z_5{9PMU1E@M$-1v1 zusc9whm9HbPP*noQ+b!mRF3)kPq8^^Udov&Rxd3TpN)(4BvOxCx&MP7r z`X0ylv!07Ch82-po|)rD`iM|48|oB@t<)+wm(BCELFPKF`|i5whV;5+-92SbJ#nth ztcP&w`U1W@U}~ynFT=$+pZ?^y=%hyN`IqTFDg3}V`&LiIXII?$7&B`w*VxGrV{>sI z(V0BGG%brQOAh#C3gQFTxn_DU2jUE9WE+<3X~#X)n2EC%F2zPJVa2 zo{4iedWM|PVE+lx&v*Vnku;NZJ{^8d3z+Q0kPcF=~}fjmO$ z&%X)hP%ro;S0V8d0Cu426sO+@THBGi^2KWX+Aq>|jgB_8F#j=yTtV!B0!|dcAY<2& zUU~!^o3#p^9y=HD9b3U0AvbE*Ohvs!d0Xuw1HF0HyO|Bo>w#-?-FFRc+mb$1??+(Z zwHntIDmj&SA|K0mG$d{98C;o!pwu}S>9Ue?y$LiAp?CTeqP@!YKj(37PwEZ1;4AV}!kDxW>g zN=c+yW>RT%{6XjTa9%WyWTr~AhZ|~MwroAE=8|~{`^Au>4E;{@H1FG8*QuMC+`fK> z!7I9@H9p~Vw$$e#P7wRXpLxCX9;;%i64MH_(MFoCP0Gj3t4z1J>rH~?JPel}CGbK? z2a|Qi@qAEs2&<%^DW1cvG%@RLjzZB5VuDEO!g7 z*e=Tb@h`xVZCc3v8^FpV#aYi{;t*K-iUtDoDosKNzKRtWN=*FbvQEbTTW$MLQI?ap zjv?Q5F^{+p^^m&H2)<;#ES;}ii13Rh?XaC%HCZ-rXl1JnX87^vzdSl)tNPepmK4KB zQvz^x30&}fAO07t#(xfys?un%mXTKU#s~zZ*z7}b=n9mglABOOL<$Y--*ziXjY;vl zam)@-q#|?NGODCV`9+$7kKECYF!VOpS--&s=dv@9=L}xi3@Opb%z;#BhW55=%csX2 zd~5@EFIEa~A=&TqMtWnNOen(fLn}b*tMKcmjt??zv1<`VARlS2ABueTDHM_NQC~RW z7RhfLJInoRBSkJu_>3zNov!ID;hZWPBeM-c+4Wv}3OL=hY9Nw#P@PIjKadhaji4$x zBIRh>&4j5lwb)I_qUK@b%BO0$JbuqdYUcvksUFENd9+jU%O)a0CimQJtNw*9<#^qB z$n?XnxIx!g8tfZR`Rhv>^YeDaJ-7(A-j~e%ymk^xFTX94wD``;V zHf_CYE+_L6T65=!QILjveGyfHQ|DBr4H{vOKa*+NNg~B{7n}Yrw638lVr2wcdibT7 zMnaqprr1Elmui!Fe}C`d)lRGKAm+??D#~{ocED7QkahqBdLGvNthXl-c{QqhGZ0)8 zwm@nrC>|={NqtgfNf+b=;_xzEMAGgJ?-TBgcx>fd_mYQJL}ecV6)t&3iT~BUmy6&1 zyY?;ftiQeT-J#!FUXrO=)kd*flY^c@?_DWg)eqccI<_^NMYg#~t#0ml@$(8%5Y3ppLWuH=z35oOS#RPABF% zBI@N=j-fU6jYsOK*vU*`Dn3DjfnfzqhQ zb-fdsIGU!P0WkYbko1zp?M1AgZTXI=x<+-eD#MbR%wOC$S!XaW7QNHh*2qiLRk4vc zWSnfB!h(?yt(GhDy^mSR<}Sd=9=T%fm4pTQ@wO0TLtxGDmEDVWWISosW3vYG0J=nb zOB@e9Y0%Rx-LBFLjIR#|?Moq;WgC;6dEy8r0eZt`sWBc!dzil08nNjr>m4~GNAsP8zm!ZZ;%VDyD#Z} z?fNwxEe1uQaL{956Yn_MbvAAMB1||5rIfqiRphz8#Gf`Uvn+keL_b$wp1A6;F%|`> zs0cd}ZN2&36C_o(W#oFm4)r88A}3DhrXF?SD?a}l6*Y$zZ?z-~f`pGRdCZzumw|1dg8vmv$DkDJ? zDKIOw4}AP4%#l{+)#|^OQlU6ozM~Tkd^h)($;(FbZU(~Ia2-aY7r*K7fS;Qgl;_?o z)bZ?#LHl-uEunKgUzvEn#q-+q9GDC&!V$W}LKEpZw&?9=R5pTy`z`pJkI-gVBi$JR zEI&RiIF-Lcj{YNVix&P72x*Y7IcP`MQDRZ~G<((&7U(hPe3uD(c%z0E8zhT{`GwvAwL z(5>%gN}H6EOLCPj61(z!C3efT2gfaEc!ybZ9_MwP)Vm%rIkAeHuUt~}#hTf)BI76a zTqJR4c2}i19K=c~3k#TY5hFPcUuQ1y>ms$oh$W32pq|F--Uk3C?gFAY3tY&uc(xJeRln zW(YC|I&Erwqew1Ej2YIUw065;4{6SvaGP1)sL#T^M--#nw`%Yg zI)`R1O%qgwh{Zneyx_2BqD!HX;qnTT=B8(nliB1tWg2jpx3>QEA}KNNh&y^+$X>U` zq5H02XcW+bZ`I{*)(>|tQwXMF0kCH<;UdHRJuWZO-IfQ+rNLbYn1a)%eeSHM@$hu7 zJYMV-vS?$;3fc>JG|}eBMI8ok^zJ6`)?h1oE{;!tPY+|zeyPd0B>iUCaWZb)XgaqP zLi8^S45`u7zfqzpaJ)zJe)#(DT_qv+L}tdt-BuN1z=zFYb%0)yBkNxpF+vPU83=6m zNhL8{4agZ0UD6}iuwVT0yFkXX&k_Ng3KCg6w-Id`#9*1H(2r?CC565FX>4zM+kp>a$j zcVgF1Fd4f}vxE3cttVV@z;k)+cV?LKToV_qJeQ2_f}2aL<=c`qy)&lEQc;6$7?|D* z{w^{f+3cDWq`3l`tmv7MQfq|hQSTAAhlbxoEnLE<(g6LKxjoQT9_uNw%k^ptPRFe_ zS@+_XPutimO*GV=Rk4Tl)8J%)`c$5;NkOiJ>Zx1?{0 z5;1qwN3Jl!EtDP-<}QIpDmFKPyl5Y1<6=vaAh5_ydd>nfa_irYD;YRE`?AYlkYTD3 zQYviZ=O5Ze0lV%8FW{Erlg$RfKR&NY3iA7QM9ntN>ze{_?yGr2sOq`=b=zyeH>|F0YU$MY`UG8ZGJ4A|V^WL*>$incF;YnE$e+!GSg>RN4QX19XjaFSyg zw39wxt(l3(d>kc-7xH>aX@;HkeZ}i{B_9xr;0Nu^cbAf#0TPm;Ix!{+L3hYALvZd_hwE8u zQ@zo5hp?BMX|~r7JXQR2NCF)n83`roAh8WUbLAln@4uHxj^qR%i8-OPaJO#Ra9$CO zq>69xtdU@FE-Pl8PQ5jj12zjrMR0PR2BHBwGcEHP+QRJiN{)V=^kB^LgqOg)oRIOH0d_<5Pwki zOQ%S6WxeK#ebbFy>BUv5BuCdujcV~`LYWGig43QF{zA~XuWa3VsZHKhy*_dWFjjk68KZ6E5NbeEci-P!=XvE=MCr2ns-$Oi-h+Kn^nSqzX z^12-Zq-8#iNyo1!x3OulNoFhc2IuWL2N#=6U##4!%mb;eg@OtjO^?{G9eD{>-kB66z%HoeSs8;i7N=sVjjG)&Wf_l|9jc0B& z>^Pu`EI)C3y@`A>El~%-&v0Ejb(%QR=iGbt;S}zpOrj9P5T*|D|NGHaYK^ub8Sb#l z2!pMu_eS`Qo#gBI43I`bhXVK2NBVPKC{CWPGK`f;u^;S^&)%BGxt7ny2 zMQ}v(@WE*%`vHc2-Sk`8e-i*T9`fdN#^Jbsowv+t!kc4? z&u$|lKA2K3vrIggT2YOp0@wS?)nXIgVY3Yish~ZN)$jY8vrhM;mgkNZb6!iB8pq}dqFelgr^h%YU4!hR$f?5B z&U+HCnBSEI;Pk4zi7kxHQ18|pcfk^ky?F|QZxWTx5B9GluBX9y9nmW24)pHbcn{0v zvdDMJ_tX6o%l%$rHnG7WMTj<`E~ww|tItfhGDGf*P18v*aOjmWh;W{M5sU7MGHBN* zf`kn;*jrCu3OMfK&O2N|IF2_--riPc!WZd3V}YlopwFLRo)4qgC?KEXs0H2SR)yU9 z7Aj7*62;kQ1_@O2DEP6bv48F+?-}Co-X^0R06Uxu^dRAINE7w_xL<+%1bdF*8}qDG z6b=wYAqqHfjXi$I(bajo8Is0IRgWfTknqpfdEIT7?CNuFY+qLbA%&4q1RCF19w?B! zwW)l?E4e8GUs5Fdh80!~&#DbqUzt{Xr7efMQ_ zhOh?45<&?Tj5%83RWVRaD$wT`N~)b1IL!$E4$VQv+yO>upCrBMzvOszp=RC5#nAuZR-TU& zQ~q#ENN4jAX=V#J93CkNgzhFq3eBf6f62fyR$3>$OB%f+FAvLM%o`aES=xI2N}(~n zyE=f4mqh2l!sr)VwEe5z;X7C7{_mc6;};0-nCX6;-25E@sRiC-b;Fz0gGneIS{aJv z2u<$?y(keVpy#L_$LVS#K_IU7AXhE)n}g+c$>SS>C4nx$z6U(CM+lW`fy`O-W9DW~ zODYXvKVI7ffLeOkme8&43z*Z$;DFp|hA{^<($z+|A zNtfaB=o7#|if0F+MgB7?BB^qXS)$7k;_R-F2q%-++m?G|Oy?mvcsau@Ux%U_KAbnp z(6gTY3jdILqg2uOPlqIrpZa=`6*ZU7tcCH3V~bu+y)FUnEYo`;|4}-Ga(-cf5If3Ow|tH~a}Njni0P z@w!&y>QJB5hfQYx0b*dGT0IcU+@2r481UBrmH)E@wFO?w=}uPPLnkYAuN89~-a4)( zGxEa^&2FrEUJFyl%ZOKgp=aAhD(#^}l^M_nf$Pz`C;Lp4Koqk-_pw}|f9bJj|81FT z?!`oGnN0%#)`Tjy>m*S5qCEUBGaWYgR19U_%avZ^ZcaqQlT69Rt=&+4vxhvTDhOv? z;c0;Rb5y&Z=_GWb-Y$46u1qB^b&eRd3M-}5(f7-Ol2&O=Vm8F=^{vwfI&(eOWIU_; zF;b5U+8;t`V17qT(h7m0SD?Vbq4;feW46$*{F73XtfthvpS9gQe}&T%TUuy(J87*g z!!4>G0)^ZUNkw=Lv;O(6=da?YxQ#i^3MpISgH(IwvT5wu`-0~67HgEFRIjbB;M!os zvayh!EbVa~znnTVaNo1yixA6VwP1vt$S6FNk#qo`iCE3x(7C?V7Z7&y#)Ir9IX(1q z9gE?^qmLX_WJog=HXBEz&QthHe8<}jgr8sQON0;j}5>j z-&1^%OkFvA0ZY2r7=EYnH&)R+f9l_)twn60Tx0tgG2?S1tyriIt|vXZAdRGnqAj?c zJNLN`C-DWWu#4dU4i0~pui18fom+16_WfCC;^49eE^Sb@{#}Rqa{f!8hU}*SPp?*P zKMxrWTAp$;DV{8OagQ&?Ne~N$uu@i+jQqk3sZC`UM?7lQqqR^K!KStD)|ZW8 zvNfa}3oz>l-h%77GZ2Ia@aNpPAsr?mI~dv-nxPHMo@Xzit19|H z@N;x6U_QinyJ?J5wGYYpt&d%{p8%PVBPrY$f3O(Xc0o*N0I5eT6{^N7`Lf6^hDljozB)DQDnpAi8vn>p@L~0lV2KpN8e}}T z%We^de!Ow|UVW%wt?1iJ9&}Hw_%2VleQ)GL*7O9wL2R5pFT+Ko0_m+Xc=XEwj z3t98&lzg-Xrg1&}ps}A+Tcn^xsj(-4D_j1;soLZi^_gN_>&kZ?UN-k`0$->vit+V`z~MT@iW2#z z`@afR2~VYDVUryf4)QnG1;*E|?HD@M4=DQrw&Qk1hSi@i4A6`40ta&5X7#S)wmvC} zx1`sS{W=tQIEW}* zggo#O!V77Og%mw9w(NZWAO6F(Cn1EnOETZ1Evo=lcUXW@waiWC&mt48eBF8}ope59 zaRfAcmVi5QmoB31&Zm14V!nI=zHMjv!bOGB&@Z#5%IVK;PIDG1T#g>XSJu=DY*3SV zji}d$lYxp?c9M_DpZdJQNcjCQ7u~skEd7f3lv%&(RX-#eFki2M8j+`x?)`v_@n%Cl zR#EtI04E6mP)-W!ZI!$^HK9^TvlV}vGkhcyz*Fz_Bq0#(@=`vY?Zuzn7C!Z6pe#SE z`)(FzA_HK;W3K$<^N5WwvR94bL5FLei?FF(Nj2=}3Aq7xA4h{}=_yjBv zELWPnKgAMk4i#2C$wF22=9|i^i|VJvpq)`@ z*#5o`hitw5R-R9fh_>cWmZaRyOODL*T*o~e(S&1XVf;&Wv%Rnz7Rksy*GVPPt%WOf zMCF;x%s@fg4DS+!t4B|iA3F8Kw^w_J;Uf26CrC_uzOQ&CfMDR(V~J3BcCO^({f(mE zMbt?3FgE_vGE`AnneTZTyAPoxZm-{^)8YJ!je(g`2#Bu>8amIG74z!s!!Qy8JdFm) z<+BS59e=2 zmI%e6PdV;keW7g4C*HDXxq;Ogm)(MXa1uK?D$MJ;dkt<5*9Qwy4TtYn8(+m?Authd6HE_y%*?Dr?Q>AG z%H(#__6tZDG#@g2cw7-%Eiydh15XOH7dwOnY@!bEytU1;*FraRNw(~lxsEax)&7lZ zbvilfx#BXjc{g=BV?C)9L&rru`%Oyulo;9ZDk1+TdwKp((9aI`Mp7I>WH~Fex04;^ zTuB^U93uq%xdP6uJRY|?XB$H2cqWm@CzZ0EHJ&z|v9*zG8-QN864)+$22^zhS% zjH1^9gBKGMxq%yzWcTeKx4R}OZhnq^#F0eG0U%me+Z zn6bl`ybx~1`L*~0r$Pt@5Rc|3UPgQwns9D~1e%J0H+hDkIheSNSZhwTL|hokX>t#W zjwG!9vL#j@L5aL9qFz=w0Ex(R-D1TIET8=05S2WLw{~wyg=0PBsjl$({Lh=wbOJ#? zY{So`Ge?@qn(WX0&+-;Q-yg-PDel`55*j|0N+Lloe&HWRpdTrP5kHOY5qC}<6gC`q zX;O7JF_rXtiVJlrxwQaenA4or2vE-{6z8ASehK$)kI#AHRvlRZy`}y!@6_e0wbkvY zplhS2kox^%zlv-UIre`hbaMH$jVs+5u697mwp4c?=xFna0&*oQn6)#%!h;XZtr9~M z-lZy1+pcz@1})WemXEhJ`OLm2F?48f6}=E2vMl7J>VFYzkr46KCtHuUdFqGSf_d~) zlh`Wj^=UrFbaP8AMGFVt?M?UiYBrWN+*7oRmhtU?q|A>x8z-AZ3o$WgoNm2J? zo&SD93^QutepL2jXZr#NHc-b7)xqW!%P;*y)NM?!?Ex^bY_PE*dEXpB^9ZR5I zWN|4GuN5EvaDH2gMuys^0KxzH5vDflyQGkSSez(;VT~&{WeY2&1{6ncE0|4NGDGAh z<>Umtz=Z<8^viFj#FMq(i5m3sC&~imK|5P1%pVKipOets_7F$e#he(zDZ8@arfzJn zJrR-KCRn1rVkI51^$Ch{d)_=iWdD;D zak)eoImgn4c59L6nC*9yYY2|vSusD@zhr^k(JDKT(qq`M_Kn9q-`?-q*GFCLE91YGQ{_r6NCs>rm$i8JEot;4$8 z21RVv@JA-0*U)^k+eqB&_P{K|$9w7Q!=a=8UW&23gb>g#Jot+0s58s*kchN$eSI*p z#7UNXP9gpd;CIA{`D%HI&gESzHzwQfN2esiM<=)QjwNN61@o!GdhUy% zZRpj*DE!?5nrBPb$A`i+WbWb*Jmdk**GxPXIuws*?Ydt{OIw$o%GM}kh@lSagYTZK z_P#^lGXoY}F1;$wk^Wa@F2nYd9eV8dppt9e300w8wfxCw_m(*FFh6|j+GMZ30NkiV z7@oZbUYujd$78dW&oHmByCd4VQLRDei67JAvNfr_47aM8HEXe3 zX#0bWIj`K6M6UeT=nhsA;7Jcy0R6NoWbaci5s;!BvY^3rfr%NC8Wxph15Z5L>=ehr7+)Qb?nrF z;gZUv|2@bOC#!NbTvCem>Vt5r=P-@dG^5toO-7&xz56z1Z`3`FVnJG@9)RM6@#ryN zeiWzo>s^=0xJF#|dp!ch`w!U0#V!2PT#r~UZ$8p=Yk=YDbgQ1K`x|=cJmTB2Y=n=J z73Y?p@8Q1uUH)3Qrr3(CU~RsLcRXbp30MkbAmKUXn5jNc*>B7;QOO6_a0R~@sc+8R zr1J3|Zn)mP)t^v}oQn>)9|6X1@ZJAPAC#t!8a&%Fjlav>7@~o*O~1h2lpbrA+=eFi z*aVaOM^-OVN!-Mxx=}kIyD=D4GURd~A0>BKXUURA)*AJS%emx1hLb;a$paNJb7>pSp2uPKNm-T?egl(++0pY@w+e0N##fM>Ge z&2~LJdF`pll-)diKN~2r5unvOcU+ujG|c8J6{O@m3V2>CoGtVyWX0|ZkJ&;8SPD6r zp)qS0+Zn7VdB%Xp^ME{-zX;RZA5AP?^>ZdI-5s@Hzx^hmdnJCHuK>U6<-qe$x=yeW z8)HZTB#>(Me&u^gxDuj*b!skWhY57(_JXBq;z)X$?Je`96H4N^h zo!MM`nftx9QMlv%IcB7J@b68N%a%I|?-ytUl6lGp&*4QvE**M_*K~1oMHV|M{(!~w z?#DAS;VY-z840Z1J?+|()Q=0dVP)>lOwV<1LnGx+B#_hoP?IhP7hZyxnq57=P^j>u z^{Oqjp40e<@vPhJRli2Ps#M_s<BfJ#T z*R5UZW~1h%B_yC62Bk|{8sZwh}I3A<=ofp?!&rxOdTK`L(g7Vs_mK5 zbZ7I`JjNHYcFT5taF|mG5a#ok^=Cr;_IE;6{cm-!_5UO5tD@oxpd_KO#v!;92=4A~ zAy|UD1`FP}Hx3EzE+M!FZQR}6CAeE~+s^FFoZXp^{(GPO>ea2PdrOyt#BZg2{pP%0 z!QQET)L81XB(ZETbisx2`Y2^qD<2D@v|PwWRXa+MzyT|-RcS_!Ab|L;iN6bd=ofUZ zKlnx+$G+?HUGG2OZwQYUAsx;kpL5{H$D&0#C8^CB8aNHM$WQDj-_7 zfhkEZGL@>4xpJId+QCwUiltjVPP8=g+1DA=htFRiQ9k^GvDqZG#fe0hAviG{SAWCX zgUX+>%vc6$PRZmisL58+hkc!t@^8lp{AS~P`AAI3Wgo^q{*e~Al3Jdi511UG5Vg?6 z33gJn#~DdI5XSaQt|AkyV{g4viq1UE`FBmka&ms30_(4ZSzd%bwz$bT{SqPlapkM@S=B zmXFC!$!WUF=EkJNWf%J@`^ksmr>)mQT8@yY=Hvs2jM>>+!Y7V!&vPvr#P@;zc3M`>h5C zosb$?g<^dLA`i}j9%0~fuRxZnET*s^h!{|Lc1LDjNq-CtbD%gUl@!HL8{7+pVkO1? zIoRJXoj3`IJo5&rs*u9itK1TN?%Axj-~UqdkT-JN(`nBG8O%}DgywoqYDdZ6o?5Q| z$p{yH`D9Y?Pr@Qg@9X?;9g(aC!_VGJ9u|M4i{KNoD>D1eSo%M#f?p&7kTUn4!~&ts z%_+5L`#6B-s8s6y=-uR3`cyVVFQP!lBH5&AJ1xB51h78!BC=)PH}!m30hKMcjN+1? zVuRx%b;-?d5I(?np0`Ch9I=rIX!Ag!PS1I|Us*RJl*4aOXFrst6?Wm%mHAG>AVvB+ZE zYd4gV$lOYW9Wk&OD2z>cI&D(fG92M3s35qI1F3hof28uEC4qyhJuM^Z-kxs*=9 zV5C3MaW#~Kd?bVjKNS2%{v!>)`LW?HW21uLbQ#T?O`4L{vvuOh|0D~^2e*%4AP38f z?tQTGK^r2lP3utO3oJHj_;<>1`eHEjr(F#TaAWYtvYu}F3w;Df63FlY{C2nJkpUT6 zUo%Ahz}^#fa&j`7k+zY%W8d+l*X)lKbk>I^p72GP3_du+xPxfA5NEvS`qlwoAu#Y| zQb0g1bTpPmO4fv1_1$@bc^^ObD=_nE)i(p7{F(CXuKi-#=8wl4w#x6CvwS6Tp7FN8Q|V~N_9Orx+rbyk z(C>{#TE7Eh&HFFDxtUxC9E&b@ec4@g#f2WKKiOA@U$@m`*I&|99@O35=8t@BT;Ht4 zwKb%xihu~CFeW$k2R$UN*j2oFuq|-ErkJ#V+=ZCt@S{^WS&aI96w z7eT^w)7F2QAH?k!6A44r>h~V&xJklL?wx!!oEf#U8g~WtCddPH?n8idwe21mWd&&M z9IfXg_ZBZBzVXRE9L&|#6Y5I3zl3Dt?p%7?db$7^_H|sS9tCi-dMLd zRg#bRcL}cqs8h;3Z-_0;4RNLH_z=l%oi_=bErzDfqrOYXY(Av3jHZ8JNQjYI)@H57 zYQ_EL{fx`k!l62lrsV^U<1nI>1y;avV0tRIhDYRFNUge_OW zw&x~-Z^~{@8O`BsF~FB*C3<;~E5nyG{Zzmq85f-x2(tX`+_8%Sk2FBH8X)NK%<^6I zz<^9wy&m@R&@tNjY%H!mS72t9!Qe+T0>S4VssNq$Op;UIzW4Y_604yMCk>V8{pQ2y z=Dxcq=BKng_E}V!SB!QAxs!8gl7>V$-@%?f-DQ`4Q;gfwyuRt^eOyNNAUEd_izx=o z(Hw{%&0h}qj;Djz*WFj5^+R5b?B4acuD6)41}=9$VXe0zgD*c%zP5o%?AuPpJAW`Z&-#f!HM~2)du|_P`b+0`j^cCOqvaMTG-n3)zv9Z*F4@QQTK+w;xqtclW zyjsc`6DtTlt4y*N*aFEDB=Fk0G|2N84>kwLo~exQLK5zi*Jir0Q%kWs^@#^k#acQ% z6!!9%Je1n_Is*Bt<_pRsoZcuG1D&b4%2$fNc)^FF?hnHiT&!zXj_L#`e%eU{y8^MI zr6(UGR?qEL+J*GneGsxwuW|qSm*fa@w>-~Ub8W4h7oyU;-F#YcH*&*M)I9M1vta0t z!|SllNXl*b#(~OdF}le?IcmT@yISCkw6!y`+nNY#(mWpNW0|^E&nEgF_VLD>s2hU} zTWP*r7cGr*DO!LC%dg$Y!K2-X0s|GEp3h;a%Mm@f%0WG1?`icK4xv@Q!;mcXeh5ic zFYD3}79Hqal~)TaLB?u#ynN?!a37o+{YV)vDCb5^8=h)x3I+L-mcgs??vA(yyOjw4 ze3{J^+)_z17p;jjE~LNSTX_7AlxXR^cJLH_7p#1qRw=|-eobx_h`|(`17%^y7e4ov zW{AL z+y|wgFkxrPZd>HWtz5^8s`E0Lyng>$%H=%3=#w=1rPBTm)}jA4Njy3`(*tdMlkV|C zX}l-13B5{e(EO`@B-yH>*(DV)T>VhS+zYJ%WB3l1V*0PIR)9o!X{gZH%^4v1@9=S@8ord z2b$CDE1P4S{v5)Du);ni5-z8#4Bzla(p_&gT&aq>9l!=% z9(X7k2|C3;B||S>tQn*mqzJ>1)1V=7++|EcRKxlH0CxS8l3$_YA>{jAdHuOP803ijCe%U}$t%p|z z4+1wOnn%KxnAO8LXH#&lb=YJ#d$oa%)oa5TPdAZ=4IWl|^k<78K7t6ctEt-elY+f& ztRAR9wa#pud0=dV!I-4@W@#o+`Ni$>{k`j$6NE5J-?@toI`O;7Dl1D}bHC0TfAkn5G$g1kNeXcAw!hZt{<++;w+&3} z(01%}Jm0%FIKmHExbSfQD-OFbqwwF~g#Y?PRN=+KZZQ+hZ1u$GY|1LOZqcu{dSQEz z!kYNSPA$9~d(7ie@_U>h;hYd-fuH6tx;{6n%eR1BciZm7f@OZ#VIp7if)Hs2S=iYz z2_X8M#wko%%G%8yhVhRgIcG?6G2}r2gsYxb0WqP~^?YwjLe6`<8UrXaILy3TC*u*8 z7cz*w!XsomlaT{jt`j3DNItZNT&{nd4jVOd80hH$4re#HA-}`=Q=rZsCI+7mE8`+b zN-711+g$W9Vr!Gr69t&6g{%7eIFl#~?lo;I7&^|fR*z;ev0Gb3Kqzm-g zfMFy&M6uD91S%{;j2007pb|gXI?~Ul!!F1*3RpmJ3%|R^a(49h8r@HCuQ^ow zFrI-s*sh)(@{=4Il64_^B-jI6+hqIvo~s5fxh6$pm?Ut=9>#f4ECk`nScdFYg(8_ zm5o0-Z#5_qgfKRO`>j@a#{l8z)iIO=&qb}le3ml;{r42L@hJzHOr%i z^P^>ci$03`^qP;l;(); zr7*tfNwJ?`+{ijYF)Bz-JB=X#fk#%txlzZXdK6%7HoU+6^DmZW@4+t#d&tX%t*6Z0 zD=;+I=3$&6Ai|_U^oEUnlFaebAj7#lg9=Gml3}d!$1MtPcuIW?*j00(@g=)`yucJ> z)50AL%260L*lMJ4{l=MC7)wAF!<3VhF<%SA56Rtu6Ko}M#2Ra^0fz|3P`secYXX}kiSE^yT2G(G9W0-R1&P{N<&pc;{1+k9 zem7Wkp>G$m`zVvBG5(+6AE%p03&s+bi7^&N+_S>EHXNMPH4`RyA;EeTY9>z`=nPzw0CO$#VSw@cs(CpXXkc z-QS%4eqqC)m$OSN$}1ojTjLYYa2o>uz6b$;4mR4(}}??-;C=@c18)bNgiBl{NTr@vN2&f&`KB4 zE*2i%hCEQY1-A~omZe%8Ddc>>{zNOjKz3*BiN-hiK2<+($e2cGT}&Z{lD&xOK6xg~ zqiXkSulW~ghYYk{?>26Xqa6K6Fo%17ugRl%2DaUtfWpx zK3h7JMNV>uMLGUqLqP$Jwy zld_VehC}HCjg%g|N>gwQI28II&Xo%CUXlELbX;sYG|Fvc_YpQ>_L!MZD>g9+%hSps zkV#UZ^8>mbhXMr9DTLer<3>&N>vgeoof|sg>X4{&foH*Di&D}K^13zvF|@tC`UN|0 z;j9c`0cQ8jrNl~2Kw}v0j1+>w98i6)82Yx z5Dm)>UU|rQzumw(S2B`x1x-2MiEDE3(sM}gvbkA(fAr;ZTil2rud$+M>y?js@uv{z z3AJw{&ZgwqJ;n#Deic!= zYTq~OUgFrX76S=ER3MpG7R@EDv#zeKGN8QxwS}tiZ`^dBd_*rvcem3=q-7E)zWG2t zWl@=LBD>HQeHhpg%pMI}8CIAZdrA8ib;005GAMI{$d;MhyQOP?Zg1Ge+NNHXG^sAS zULiPf*5ZLu=%8m!I>I(<3yT-{y-Dc9%p+6_`J^eK%o952yLZ;Z?0jqYPUUKb@X&n) zwO&`;+J(M4y&+2og{yI;9hiSho$iA0Ho8>K%O@gwnD>2(h19?6oVm$|yhSjKKH7`C zWMJZ#E9%9MF$MYNx_22QIz$OazpA2x%!dAd%*Cqwy~C<-ar78NF`)HZ6!DrbCp50s z4fq8)oF$#l=3PJqpu4C_T59F)75kJ(yb#X;c1t@LoY7jZ4KCawBAGj+?;SrqdNiYo&LBGuDA6vAJB(2h<31|?5Awq#F-n`7Td(8w{ zescLO7bPQneS1VwM^ba94Q#gubFGc<&LrFN8ah~pN+1s+MXP`PticBMMCH5pRqo7~ zHzWH9r3t)t#Is^t`fb?Ia+f;UCj5kccrcE7I-&z@oXyo=|7ak6TEmNID|YM*8(p*m z9@eYp9LK%Yt>IK=X3e2Lk;`P82Mc1m?47Bo=s{E7OMk=@$Gp;>L}iPK2lHCHGl8GB zm$tfZp}doD*t8Q@O$-JVy+OUUeQ^kkP=Q4;Nx+1+ifpGEMHROBtb0ncOs-1+>7V;& z>l+R@Qj5>T=cnOX9~=aH5D?d$lMSH~6>!wVyOZ0@YelKm8LCmau6}aLoPH3lw$l*~ zy%vX=*9#lCN$lv^JkcQeP;>nQ+^cI)#TAAXQ=M*}wQ61<%_T*w;YeOz<;KN;y4X`K^Lo=jpNMDMSY zNEz<_`7pxP@rZ9R{)k>KxE)P?9p^C_K(0)g;sl!Aap{2B60EoBvdoFzw@+Yx2ndNL zTkZ~T3=Ka;1I{#QRVjMCX~T8Pe{FR@AjVQQEP>)XDIOkzQbr>|pb!6B2=a|xX!~5=m^{k)XHsp5DVnw! zG>6HGxyCpz4`?MqXE$rep+74&?;y_ou)tTQup+9@L&Ca=Gm*ISB3Y$QN>BX9HRe*pW4(*_&A z@!36XPav0j`8%W0!S}*xF{|0ve-RRVD!%D8AlA`a!&MeXmzR`1I4W8y+%(VP#kfCm zDj^0x5brT#*ySTB4K6)z?$-V(d5+$-i747IsIUEPKvuLWyUquKr2hxAzUpDdok=2h z8IMP0FBpFKF4<#>w+0d_vRNA?E87xm#-6-saXtJ-l{`mr#W7*`{bxq!=3@h9y}pGj zgAkRTz~1b&`rL@E4>vwjjpwMv0@r%K!jhey+w}gag~G#gX*8zu-~KQ`mrs5OeN7Cg!#K!e-d3NyRtKBdqnl|mwcr^+zVVhncMm0VwunjhN8+$Yhd_gzx z0#9bHms`tB6Nne4v_gADAwmMEkV5$`{6@LIJb%Qs*to9ShZCG^S;)OkGHF*m3 z8ReRT|2%AGB_G`azsW0}Td$Sy&W*LicQU{eNs!~Nm;%i~%;fEB2b$)sjSdP>`vF&}W0y~2t(utMl2NccUnMZc+h{BC z%61$Tlp8bo+wsKjyX&>B1VANL%UQSbF~e?8KX@I5haFzZ$-aKH46@w?$zA92CIScT zM82gBo=a{fn^-e?m>p?4jkeyYYaHkog%|gT4f>|)ha(3Y-k8|5)J$DUVtKT$rsa9J z84KMVu!L3p^#1FGZSjCqf#o6Q1~-uQfUqLrKgIC>=IEP#3>Q5=+p3R? z$98{b_!eRZ3h8m!j<>)v-PBN7d^YZ!1wo>I^(=s3I80`DbP zbw1?~0#MEW%NIVAq3PXf+a(k@uRSL$>5mxxNsP(+RBeh9D7O4~h_!e2;xMy9AJ6)TrhFGad0~MsCQZ&e)9Xn({gTs z*&VAFZ*Rl-a!dfdtq$wF% zVABFS=Cr?Tbq25>{9jMAI6NPA>jS7T6@U(;JFonx1ZHRW!Zqt=u+`dTeri9VsB@y@88#rmb2DbcFWBYYyGAV~`;Q4dBWj5u9zIKhFW;+A$NGg& zhp2^#s(Bg|ZJ{-5{8s2d8}Y@ht~|aE9e`*Ulcl+s>`Ky^KMWj%M5!g2Y=qfmQ==6U zrT<_T9ji5QOU}KMvUXgfI_3`t{l^=+dS8qzzM^yWzjfz2Fqz2yR zP`B)iVZ^|-e8ShX-zG42U`;pa+-3YlZ*%lb6u%kAh;``fh+E}THca;{E2)u=4A}Pd z1hNKdD`*&x_j*Y@9)9{K5Pw6P%hIWsIKJZeIydxm(Z+TADOfn^&j ztMd!{1Osyl`zXRk;EVXveXPPYM(IaSE2&~_?v(e0aM3$|nq3r8h3?}R1>k~_K_5Kg zjr%+^lq3F$r(G#8Qc?GsFk8elaJimy&$1c(kqQ@dki6eG-{LyU+0V0R`^R(vVg8bL zi_Nbb=D>#@-{C@gI8>&X5Yra&g zxI!h(PbxEV{%0XMQzprs%AgdQMoXSJoO7l-eT$S$zmb?+1{xx)bQ^Cn`{uU33@v(?szcMWgka&9rWw38m+_U zOo+j#rI6v9N0T<660hnxAzXq;K*CaHIUf#9rJ3tI2HcpH4@d%Y-Km7n8F>Y45_)(G zrc|_oqU%xVBC1gTKeO*2zTN2sEb29y^#6XTJ`XZxIdu-15jlsr3iL^^^Eqd;?!l)Azi_ma5KUsr5i~65byR z>TmpZ-*;jDem|ZRY?#Pt^S*%({Hjlbc;a(PS$?aa{1XWyv?~zd2fWY6736n@zpX0y zD`y|QUb-0B2{wisZ+l@~s5(%WE?-^3Ks@gga%{v?<;Z^Ap_`qh4Ncx1YIf<^=e$eV zq4If`mDHFcg0e8B9;|kYmX`M|!1N$C^WK-t!MV-{if42!IhNbB@s0ZPOpFkKnDX7%@ITW1?-k`+=%M%@lN~F4j z`46J(s5MwkISX>-^lJlcIiT1uO63bO9=lZRM*8yE-!o_lUn^tyZjD z{#+zu58oafG1yn>tg{=5qWV6NONsX`_d}4FY@as~p7Ebk3rd`roa15zImbklq6cCu z^5t9{++iYcRa1mC(zIBl$+3*0mP0^W}r|yn& z7M+3{S1TkiG^{=2_-9HYp8 zJ2t~M51Zw+Qm@T=T{YLfhz~H+toy?kV>rwr&{n=sWJ*?N#+PmDipa_2dyCy`=W5hC zd2mt)v}dM}6?l@j8nj0boo%+Rt?e@SAT0E{UPoE{!!1C!EG30y`5B4jS}Dgt7qS<) zTO)n~$04iL;AZ#7sRhQuN$8opkLPRU`1|i-W>1WZerLr~Nsmt&(U$7nkx7gCM$sno z_WKXp?7kUeAqmT|KSZD_`>U;-mg$=Z*Jd$AwjNvLC1O9P0*6PCu*-#H&7qo0oSoOim@ zo~Xp_5be4GiYTVtpmEn9;&Z02u_CoknAAi8F0%hi77YQUP?>JtX_z?Pm!CT84*?*- zE9W(+3nmjaOtFsptnfR7@aT+q!Nlf)lx;@3;R8r2$gc&BBfpe>z&JKU#Gi07=4U4f-Ux>~x|1Dc;kY_U;}RF_;EqLl8j9lyI<#bA zD@-lT@MAwSTWs(pNTercUUeo@+It`{#Ex!BV$uMgcRT^kRv~czY^%%5%SnitkjGvc zonppxSrrNQ@3eQZHe`?m$fqG>;Ecy8Wp9q(D;cf-Wfb8uo0yVJcwuUp$N zjh1OziZ?m$-?ICpqK_sVU)=l{-Wz>IM!{2j46UM;i|$gJ_=_{pl%4AyfxJEsbMEZU^Ho2`r~9sZ;Xc;=QPRUc zS&xB6G`1qLCs2wu4JU+=;fxx(2GQU~qK_>nvckp~$X|h2aZeO&-EOzCZ!i zMx6hKqOZgQ5lYYSyu8c4Xbq-_q>yPdNr5zJCP3&Z_^qWN0pAv&#bwFwJss@_gd!DK+zs!h+v7`reE|QI%zx z=vwj_i5Q>Bp}Zv{Zhz=WioRdKG$I3X$8xkgPv<70A_k*~Ba-uxezT(=p^S`qQ8v`sfo7E_ zGYI+f^K+kccoJZQvTQ2u$Eb<}H~3RmLx<;(#%%!`9{} zV*+xn5WeuI($649F!9O35~$m4MayaiInoT6rb~4s7i`Ym?n+aj0TT*O(#zdMU5+%h zo3}Hyz||-hAc~ck(4N|yN}Mv(4ZBdj`PwVm78(KRMpA2M$cu$BS+Uyu-gMt)C2>wi zImyFUyaUau;_x}lt__wjTTH7Z1o!GIuYs!z+v|AKvV6ZLYh1}j>@U1nnxo)v$l#6&wrxcy5mF(l5IH<&%>v?nO47RLhnnBm1t1T z-S0ne&W9H_m#_CaHS%-au^VD#hbx9V9xY#?b%mBj?Wol z=g?Q1ZO|UL6Rmii_Y2lU$Xa!DcrnSpGbw}bBJmY7%Lz5yJN>J10gk9oqyw>V5H0`T z+x~JQPRTq{So@B)O9`0nUMd&=pN;%%$kQ*cEkm(Pmda)+vNAFf9R!9UICRRA#>V8i z&U`F}BLW6Z9?0WaBA9cf8vTu>OJ`l#0?znU4$@9ZA4Z^6?}YcmBtJ7r$Dk*~P>8s` zRzH941P4eNuQZThy;DVRe+8Mw-}}7$M7N`GK**PEx7G?HjmtUagZY=A+AY(1MNi|h z#E0V7ihR;fO>WA}))wk|*lq$g!_ZqYZ{U}IAtz|4)y&;4el2M37|dt4+a`|bF*d+Q z36De&qQli5^7qhg!9yV4Y2}U%~~I<_uPV$5rfU~Tt#XA8Mf%a zqF>vWaU?&e#Z$#KK;%1rRVy?o$^@q^lPe`WGN_SLRVaHrOOBzfZ7s`cCh6V2T2U+dEHD*p0 z#>~)t<;xO;?>IBGsoU~XXL$^32>l&^Ak$W&_a;%aoFGf$xn2oo%Ab--=5SuwVYqTC zITM1;usTvuFX!o^Wc{WHDqu$-R4`I7p3stlN=ex&|Oq(iD47}$wE-_>($)>xG+aB@6 zBis)|D~=YX5Eb2R$ljSt{cAoW>Z6;Jz_#Ddv1U-ZzyoR1AfvkE(WkzYz*g2=`9ktd zVQ7w{w}xT|^f0wny$Kc(-Z{EUuDu-IuSt3sx#21rf!Wr(`;E%xkiz$GSluNoCGi6Y zW={6t5#-yB^Nf>^Z+f&U+C8NYWG$z}a8iz*6=~jWb>uX_Ex~Fd20w`zA~J3S*)kXw zqFLubJ%d<*pzRC>C_I8zXci2VcOI9WMp58=^m!W!$i$(IszDVuk48V6Q3#yTTm|wR z(CO2}F743Z!LMz*Xw2(w^NxDEygL?8M1sef3>N-o(?pbtb}MZi`jKhk+cM`Xh7Wxl zWGvQ|iGznJqke}PjXdXLr$Os;AyU8d8|>C!Uj{C^Lb=Rn>p~+?npO!@JVu&wmD3Do$py@PM$IB%8EhqOYOULB7xBF2(1fwz9hvu zT=3uV8PEt=_2C28@L$`cZ80%e84Yb%dVEcThA^S?Ei&+YsfFTEMC|il%{E;;52CEw z;baDcg(|u3=&Y8l>mjvZR0@f3|FO51Jf{V&IKDZ2bVGi0`;Gdnm7Qok0i!P;Q)sdA zmFjV>r#c;YkI&(EL&b zac)m*(|lS*56nHTA}VFI{?l^qYev~5N>b#6E(lCkJK5Bj1Df&qIGtE{tu1hU-+E#$ zUNE_OABCtxB_Sa5U@m$w%B}@AdvWESwy8BPm28;BHgC4k>=qd4*+LdxoZQtGEtN{f z%CsECOlGhNAZ(8NWgy3Rm`{z&p02I^$xjfs)8?;mtLE{J5H$67BE&LARlqBry2t+K z^zPE(*PN*!iym)CrGeo0j*tUkinpmEaZKvZ=^QU4^m_9a({v~oVSIKB{mZT-TTyuq zKOAc<{E!M1mK1r4HxFvIC$CHPdmCte>`6lTH<$vk>~kKe;?ovW&8f+K*Bz-JnfkR! z>NvF+(m!5#A18)P{tMb=yB#r-y$&WqAC;? z6%}neLL({T7<2jCfa$POw%{R=g zn;jSeL|3EQ1kHt2Ak;BI|0_)5_ahw`-R=q)5l0HLjpA|)8Qw^ZS}8l?E4OX_(wBN` zOvwADx?8@qK^@=ph(5gTK!_)Q>cW26m4NHsvDNcmq~b`fLYfWr+PyB7A~@c8R>0^? z)Qq$-?<|b&GaVzf0fEld${OACvX&I7Wrbw$GqW6J~)+TD6beX{(eb7 zE7bSUBTssKD$o2Xymbk4c|W6vwdYO&g9Ky#T+9GZaE{ef-5mjl)1(N)RX|6A4+l8e zHB)k{y~V}iMGPWJ-;XxiVn@x2b*DN}Ecussg=ta#f0FtC*Nkw$ZE|GMh57xu#3g`W z-bmICRA|Ty{-K?tYPIC^x!np3w!I_mK!L}a**L3I_42`yjbnZH9kU*Nw*zIExKRT|}`* zMy_1G{{M2RrXn7T;S02LIsYD=aRlb+S{;f8`j>oj|mL!qI39>v9T8* z>1)50j`1(finrV_sjZMqgd$XDzas`GxV!(773Zhr#SiVcVYOY)9JDTG^!-ocR~K!) zuE6F~5vxi>#}eY-b0l9cF>``94B`(WGfy)7-!XMQQ_-hV)Db@R+e}v2$hAC{c!rz{ zSc&uVocHzC*oZ@|_~bz8IWUO#No}hMFdy}U?~ts^2d8D$K~jxtlJmupwuzH z5sF8aXJMof=GBQK))+^GUq3o8{v^V37cx}5`2xtFC*8n=W?gm+Y#YBWXlw96;>+{& z&y)?o9(ReIk&DvBbAlSmIiOJzLye07J12Pq`_c#mv@UphZ3;e@B+7K zi3eCh-qJYq8kCps3#U5H0+)_eBxi;nHq~67cohD6?$mgXw;s6xY`F?m9{DC>pzb16 z)R%UxSAjy^0%oXtc5!(qyp99$aZC`2xMuJtGMd28Z`$sXwuU_IJog(xiejBt8#S4k zy8gt=;;ZVKW`kIV&=x_dEn(gw!wuN(+g$#;bCmJ|FN^X1)$EiF%FRcfz)JY}%6^D5 z2p2lCCcv72{QaCCd122~(TLV}J?egK>$&cNW@A>PuL!73^ZJAoWG=_q1Q+{=1YOG< z7Yob+qLFKRF{Zw~xjggu+0=kzGBn086CP=raR;Anb1-!!*E7>jB(I&c@yIGI(X5Rd zqcnk;bl~iGF7ZX?2CHB(U?uyEbLT>a@yn}%okc%JPwUpr*3A-^exgR+Kq^er+9(NQS51$0B>+9sYvRqHlev91E z7W01vC_cC`o~%OT_zyu8A*cj_M{|rl*DsIa;$XXuOI}0!l?EKY#|QVtkV?;!RJj%4 zrxG${w#kc>!FVIl>luQb}ApSOyP((jM{=fruiw*U+E z9D4i2Cr8V3{DO@9GqT{9^R=8Xr5p>Tk+07UBPsu_HpO-{I(+$!f;*gsG(89_ud-`(no`Y#B>+I?Na?{c&_k84GJckRc9hPzNEQH2i9R&nE678qG=c11nn zv!y9jeEdo}Tb6P!Qd;YF#T$6q?{mSCDGrmW%HpE@W_mS1HL<|v)fv!#b1Rf@a!0=6 zp7ay&dN9?-g(gjKjYjm&A8CpgF_;W?!sX@h&xivVU~0zynTRaZe-fjcxegP$*mIkg zN}H!jMXBhZ?qN1qMw_q1{9WZExT@ooe7<}QW`8`3k9QId@OM-E<428r#W9a%x4)?| zy(>fq4&~<^S!fmx7EK@?(sfeNVVIzjbHjtL$_rUx43{EMawkUWtpV2!T^{0(-cc7s zl>@UY$-QD}k_4<_nA>z;&~QbiHN%+_MX_`Jmw}4yk`L&9kI?+oK(+Es4ixE& zShUx{E@Vg+;NMjRsL$qzG?(}@IE%cpD!KPIPLi0+h%2wz2A4QKRDxzzY>PWelY(~FgQ zIkb0u^Oe9vSoR^a8Zg#eDhAzvqFgjm(lm7@;XyP~0iM0NtN|#)bKZ%dUFxf-c~SY-fDaqSX=7SOP-dVU)b$*rkgQQunIZOBpas+dPF3$l}|l-&OGuz5o6XpQc7+W}tZ<@wb5lQQ+fB z`ZoJnj0oU^f14Tt+%LCT%$T5*jGoF)R3lp~M?o@7kSW1&3Dhu(iif?T&DBE0d^P#u z*zH&P#mS>KYbZDpk9vqKfQFO;4|0-Lqy*c-f4< z8QGzA`pt_OsRgGE_WUFzC0_7Wd^F+94#6!{ID-T=(INGPT416|V1DpY{br&xK{wrW`-BARIGcm(Qq2<`6dJhHbZ zLp{1rt@a&j94y>h(s*MoaL$)QglbU=I4Q8wG>Z_iNl$bG{f zob$m&QAxwp)zy zW>bC@6P%aGZ178IAYaGh!y@kPIQovK5Le2i`c4#DP+2IIyoY6GyM< zx4ZkEQiV|f>K^lF;Xd~6X4YcJimwa{kRQv;Dw!=JBq zq9Z=^d!GXL^e{F3{I$PF<$c+>BIns;@J5a?sPu|ooY@#Zb1!?nkW*HG$3zC!abCaJ zHvuBR28ldMuMLaHO#)4CN@!%M+@-UsjScE!((L_rwPC&7Y)khMpi!YREpy?2_eaZe zktJStsRm~3efr54qwjOPd;%|&k6>5$40&r~rvj&hpB3yZaH7HbSi9h4A9F9i#zSpS zQ4p47rw+Zi$<(``DfGE%IL#YV{6;YL65ChOG*V-@4MkpvJv9kF;T}NLQZbhNWCl(+ z$iY>Np*aggGKg~ou1)0CD^!=mZIM;EX`Y;|6nvhr>l9uXRqckwrN@XL6K}=UzOg!| z@>p?lD-SDU0IHhBr3k01sg1O5x|56T+pp{?C#_OuX?7Me4hkc5Tm+g)u-l6c)Ps~t zJCxsR#mLCAzWFyNghOcw0PQs``~uS6cN)_=bF!c|*m zb%RII5T`zZ=Tk$06tJSc>5|N$z8;G0{17{`@i=GSc`Bxv>=*G8#>nH@yOx@KJY`_$ zW%CFB-r>!H4}>3Yn~k=}YvwCgCs!O(la5ST9G1=>9Hmm7Qi69tx>eHH95MTx9?=Ba zlq3Y{8k1x^xFju{j?!bUC6ITC*1!N~fp4@PuC-NacD}tIa4wttG0I%q7TLFU2?goo zO!866^y7`hXrZf6Zz>l)o+!)|2v_FUNRegPFA~Aq3oJ|ePG$!w*`4&TtqhH|WE7t; z`Gqjw&fkD^4Q&~Nd}i8EUma(a?urQt-#Rb-f{qNFp>K`Dx%LuP!3e|fk`z$-t<5Ns zK$k>Colb;G3MPExT1EQy%YSSN)K_a?PIbs^`Of=fLo>Y)E4V%u`LGBeWIUS1IOU_lAm(FzT({1HlD0SbACA^Vpcfw>l0wsMbk>LT#Lw;q zxUo@k&zQ?4?g)0*AAob12nJ^(pxcFJ$7@E^A2m%x8}j$IaSC;s49};1(rK@^91<2r zUjF#T=4$3$fTH**-}mOPfnjmbnCHUulNarK2jCENqRUJS-n9E1VmVtxZQvH5Aph7n2@Ojo&Lj~L8V#T$() zOkgbiJvf3Ylx*8tI~j!82_Q=hprhXZ?-;8F#(_b^=(2pD1^t1BV<;r7b(35JxXeQt zvP##mE>DuDVRzf&u|wZ@Z1gSB@SJ!t=@wfeOgEMy|C*H>Hp>2l%>j>`F)rE5JQnU- zrciBLRRjLg%uj8hk*(@Q=SO%?@+Mzo$ob?TH&*JmY>d!d+TTtYg?h(q;q1^OZ+b>T z$WT37ebW@aXjFR@X>j{ync`WF-f@V(bEEjgHR^Q>Iwx;LBjm)SUyL5nY@xDdKi6)Z zpX@z&9mDFBc|W#1O(^0DC$%YFO4_Y-ac9RbK%r+wo$}!1pMZ(??Kq)bTVp)XQE0 ztXB<0)-<-NCFW<<+Y^O;xLwr*q0*51$5-p?ICDojw52Kf$LEYCYn zROZ{9s>?(>Oapy@kJ7}TGi@GCXDtQPD&P9CWhVXBTLQm zNJ>?JiGQ*A9q+dOn5u^|PEi{IS1b=QRX!7-d4+)_FG*pD#bB{-L}YBX#p)DFd$6sI z-r3)`hA_6hWWT|1!2r|!c6aYp^BMLE3_RfI!<(^4*P~@^dcpSfyUJh9&K4Y)gsepF zh`QQ#W;q|rj|e+)aXHMbe}8~QiCOfwk+~8lI(>tLn?iiG_1|+CezHjle;HaaDlrqv#d~6zc;HR+WBOHwxEa60(ITJ zFnhbmUH|*0_oxUX?v>Ntqes+h62H7@!P|4~Fi~=ujVs`6PA>Mi(=UeQGVOy1I3qHg z#2pfnOZ6L9gbaIzhIi=c=4_(NA>Z$C!-OoFhwkcu(V2;S z4Wk901F92V10sk1dRMcZ!DnQyDg)osd=;>(Tp^+a0;T3q`)pfAZ>gJ6N=%{mfVW1b zEYs|@AZ<(+sjpP&Z{yO%kL8>=rTQzE>EDzMR5HoqTXGo^-tuUV$Y{{ z_j*as8L!SAir#Gs!vQ)rH$jfXq|4z`ea`SEg0mcIX21{b+-geTLc=m&CZOq-Ar_1H zi>tyM&-BMndcJ=b4VLF%`lzF~V9aHK)-DTuVDQ8lJ9bJuf~d`lu7_qtmOyrpWk#ob z3F#2CV81+e_IY8+_S2TjzFq$|na!ykNjg)jBE$PugIqZ}uImPOS{(eP0hi1qKvcGo z_aO~9tLVTT^HFi)XyecT+jVsdT~|?x1ss?B6nn056vf$(kY@C=JnZ<`zby~shn0Oz z9tT7W0^%8+EvoAmlNL#8xx-VKfMlu;GSnU?5ZNk%<|!+B@?v(Xf#!vtD!A?8e&a-t ztDp@51U!O8#0IT7Qk%>NZhtf9Eg7U*_DOYDtAW73t~z?htcz|=URJX&2V6?D4UQB35ml0}bJnBb zaPD!klahJe2xocPZMeR&UgJ-T!NKXqK?f$nt!(pNE_J{dR)M`B`F0es;ps~^(~BW^ z0RLS1d)}48=#)+dM`4cCycc`O-oPuh=%*Em(vrX1XrFf^a^&F#XDK}eHUZymcjSJ5a|L&11Fd*yKJ z6ayYiMxyyjHL%;;2At3Pqx?zDtKJ!Jx!&Jc%E?dam&bbBgO8--r1W&IRe>Jf#u=AN z>RcYA^h4~WlZ&4Lo+B@Ng`)*ds7*#^yW0#;?O zoc#tp2s%Ne20nfL^-PKC`#c?T)FG#4wU92165?LT%3`G#g8Xj6rlmNG@RU% zYrk&pFhH)N@dc71s_60{{r`9Yq*^-`88{ORI67$k4|SS^k582HdquOj0S3J9a4vjK z{Ai_O-LpO&uZl}%Iik9y${+R{>g;%4vGNON+)GuBKWrF0$OnC`x{SPn?KP{&YP1`# zAS2uux_ZAcoj(|h?%tCBPPb=VN*YT3CG%zwWN(NX*0rf2h0NX`n7%Bvx3|`2641pF zFuK#>jh8^gXlw)~rf^jR3*MtQNa^r4clHunAxuOKWfM=HyUfIk<~hteNZl7BrfD4X z>g6C0-~;(ZcF%yXpkFoe%E5Tf-ttW`(2|fg06((yC4yhUVTtth;**D?1MpAUZ{Ss0 ztV^zeoBxWaEvY0JHqfvm3;we6XCEm;SEsE}Xg4?a4yF{9hv!B6+sPr%I2*vj>Qk%8 zyu802Fj^E1haQ|cY27##2#08%na)7}+WHAdq>VA{)>}(L_9QOfzOPz$w$iKT8Sqw+ zt<_-6v{lXueJl+yG~1S)^vJJc9KeT<(sbz<#TbY-Q9u zJrgzl@)8ifrc&o@LDO7kp#Fp5*nJI6uns^aVSLkMCcn_S8rS`lgg4wBJziI^Q&D6u zv@COV=B&-}h)+o&-gdKi*OJx!{%aZj;9L{j@JB67%}BS?bk`$d$|ODq^6*YthLNct z^-5Jl&F$8IP{X_YfjZ~-9i$(ctR#nwJqb_~nm0!`X~zys3x;BFZ6hF-3W6YwYTUoa zCo5U&X!~$62PIVu-#2{L?^Ny^H@67hu33iZ$>vJwxpwG`YhQ71U{NQa=s7j`e9Fe} zj0mzfV#O=v4HRKCzYSH7@OGW>?E9WbCQfpC1%5noz+t`CdV}s^IC6*+A`@2eI<{{J zaP3}h{J!d;G~i9=k<0J@kV*vMwRmF|)TO^Z3&ORL#qjZT-aepq!s~AJ4l_iRJ6n$* zh~p`ksNp7PDFuquKZjWVI*ZukyaA5j-Yhm6F&cFGtL|mAQ97)U>0IM+Z=-ojA~o8f zS*y@Qpi^TGkn&@#!O(&(JO)k#Y!x}7tFo9HAXw^?xJ0;pzh4NRJ#uv!|16)F(HS|T zLBUSB)iDF)oU#or={9ed{VR}C8jM0x^v0Yd@K$Ci4SO9MIL+i5TnHR=YhT$iN#C8SfzSUO$d~@J*6}eR5?7sDVDml&x@oZQl|0$Czx1 z3_OsINoUyS{v|ruaDi{sZL_y^sD9xJS?w?h*b8G^kBf2>pHg?XEd)?#lWcavW{^5I z$9eV%-SX75HM69C*vPs(ceA~3a}BGgQMi+(jPG2rO5?*F$0*!pFq%AL&C+5iUGIe1 zoR$3C;^#8&&oIx`*xdvHTV(GD1?$zSON@umM&y@9s{ii&L}ngC?$1KK-o&wX&6K8d zPv)l5{27vWoyEX|8gb@fC;nUy>^NPP68`O#q&#Pi5w*Bqfm`Ulz%6vtg!sTdfvZ&6%7O|sJyiqlrKw=5&qe)p=E*7)}{>@nTA zH@dDYUyK}%r1j6=A%#UQO5)69dWCO@MA){k5X+_kO?aafOMzxpQPGIe?)B?XcC!_fFlB#=6}Dh*I{Sg$t1fydbAScH_^ zM-`=UP?Rvo4%B=;Lf!Ig*?|y5=pL;&mPn1pBlAC=ZvqMlT+K4AxBm6&bwuW|v=J=E zNGp(2as>52qxEH3GyQ+^wST^lN*L&{%HfOA%ByZio%9!hgG4dX!F)kku{HmX7C=i2Iq*!(m)X}c5ix3U54GInpy5U22KcBZMl!ZA zcmca4K!G*i(0AXT5WN#M9v8NlLs7l=c9Ue!L}090{Njo@ijec+xhXIvBzD$U`86FQHt6DX3PtKQTCK8a<4p;lhmetVIxZU>< z=+)DkSTIAfY@`%dS1`~5jOTCEW3ju0c4=+TjC?Dexf@|%c81N1|NpzIi{oZ@EA1u2 zaX*FUWzAgVq&)!v)xjFMKW6ZxnY2amzmtJi=e&QQ%^yDG$&^Jyq`p@2`_EfwM0ZI) z2vVKKHV2p&bj0M?#c%kN_Oo)#Rz$|DUdUSB^|uR|amBDlet=vlQ)mu#`--JoVufi` z<0cK!-+qk)^>he!EBIc7-)kYs5H_F{2OEI`g{ajxf^jHL0lKXk#hZxnS9?RH(HpzB zU;GVCC-|ZFZ1-S)PJ1)btJa$NDrjFt(M#7L*>-HAVsMwY-v>Gq(H}x>oBo`qRGoc&|L9j{ z#v$1XK6(q0JrC343`wTQAPerQY+cNL;j)D4TXcPbh*BC|MtKR00k__7acVh$)^(rbP?+TMwgrfc8|_uVQw<;bLfObTfXq7D%EYrQ4e{wm+o2jl zk_;iUgfQyhk!p@lg=ZTxbG{U#c^rIAlwn$*?1w9n(i>8VCj9hn*0ci@l11X{rmR~hsGi#&n*TRI^AQAzluv2zYOy19(86O+N z#TF=yNC*%G$@?H7^DZPIDhDcQS^z+iAZ~e*Q}S+mDAUYFjDAZC>lsd#8XR6p-_)5q4@{X9ceJH_?-8D%9_h2teu%gF^NMV%Dx?} zodBf0bAd_^QUEIi?iTx{?n7VyRa8jl#M7Z&J5_ZDU@73T_%dSU0J-zU;-Q$*zBnQ|3 zh6K~EJN9FgHW6|+oxwF~LV#fy-sG27J#3{9@mD}&3v7piQQ8J9`}G3~z}7Fv{pe@U z+VGWG_qAgA)1q8fL)FF2ZH?sV+&z@o62+;SDoj}durJE+hgo@0ZQ=MecxauBv ztyFAuB+;;k_Q?wz%G&4H5{Rt6HSm2dOlq!ba7ELuV*(fg4BcDUq=P)k{~`1Kw`{E< zKwYQS!(Yzv)O7qR76QbIHV?y^pMpOy2sKj~^5dXv^JV{=(=QHfv4}*zJfLy2#@`~Z zI=c*;#yQfAKRL|-+^F~uIW1KtpQl`CFTeC*39Nz>nl9xRuad3`SE{Nf+P5JJR2wDq z9%W*R(jBDe-&-0Exix>)iiM4I+Oa4^g$_ zPg|G9G|f~!Ed%6M}SZVV~k z+;=zUt6fBykhC4r3A|)7Nsr5RqX(#f-hQ6qW-FAY#NEo4S8e=OQP4%U<=V+RZ|;t$ zXO;KJpUmG$a5lzXPr!kS5FUFXXJ_cfvY;bK^9;;;&W!`->A@_m&$}G;QOmC^&Ft>G zigWFWB=lw-Yc>>2UB@|TQ%K|Rn^8v!r1ms7j`xn*B@0Lrw=mcT;Syqe;VGuMS~LrB zMQ}qBUu&bxC>pb6#OoZ`RQUu7QuZfDD(nmf!A16+y^|9vZ6ehrowxUubTsD*UP-&D z;A}yNYu5i5HT??$&GO!FbW?uHyzj@29Opr1$`q zclnQv7Z{~~!U<#gpTh~UiL4h*F(WZ2J+43`?MR+Gn>_f2WO;jd9CfpMbgWxJ_jKXd z@w4#x^#|N$$_Td2Tcg!Tcm>W!~zZa$09bCxyTlmGQmp0ke zEdrGaxJjG6M3_hEb)N?)E6IJ({+|%WCx0|-pV$Y9p6%)e0wm+!T|m~N=yQuv%!vB? zYi({z*4N2tN>J$P4fC-{Ztc}oW0eQs^P&{~*)Cx?ng9Eq>|SE;4lGwt+sgXq-bDT^ z(OGf)E{Fw#IM?ZJ}|InujI!f~|@5i!}Ok4b0 z{zPc@&>C8NM!|VxB>c>IDWUhHF|KR=x}v*md(w*L@!*y2%E^tr=bse1^*qL0iu=Fk z5U&|9)8qu*)C1f_SsS0vk*0m+>84;Aay;)!aw+PwPu7gL4g4aN>nAF)KV4esf9ld` z1YO1(?`+WUrG|cTpb&etD{Lf!eKf`*DMU`XTOXZnmfom>TRruJyB54 z_;ZW)zdwkMbj+M754T!I2mA{Q)}$o9B%m+wo6l^^sWbqhx0*Z2_Ot9?1CH~86^o#* zNql^sW$)4(bp=d!1+X>SlGL*Xp2B&GkvZI@P5a=Dv2$HW-xNL-A$x-5e3s3TV;R-5 zpIJ{Ih3@Y66k+(y4uRl6`PQZKfmb;dvx{x+-XQaRxOhHaS-oE3$+R+A8y~HbfXG_P zik1rx-vswf`?V6qc6yUDRegC%f6HT0l%GnfZ)BogOFl_$(9)tRa6C9w+(LgL^=}d- zv^K{4--BcVRZIya5e+p+OB|vj)jUs~{}F!F`9<~g$YY6m>c^$&IR7Jh>j=xF_o>G_ z4d=K*jMpd~(*v+r*2>)oeCw(kRPl11k{e)vRv4fqg9={{?weVh1_ZSGq)os}G%_BQp>kH=IZpO`OOB$V-yA3gu zZ^i3q>${X>hiMvvW6{2~U zw>o0N**dfv1K)Q8Y#>W@i(m2S440^E9Aw*e!} zD(fsJR-C3oqC>=c7Mz9zIb9yB<4~*fhORRcQz#TG?NV}98aY*~*!7D_$$IWtxDq!J zG54j|y1p^b%=$iCk4uN<;p-MfL6s-I(IQuUSSnePz6d96PB4W!dXD}ff?7s){!Q$w zTN|g6^n;zjqasAn!8aC;gf@m%jm<+ApOGCOtzV1+0^6W2iN2I{kcFDps(R2E0#TIU z)$B?9w_GKrHpc#MQRI~aFfcXWs3jEIx5PZhoZl55_{uim>MeV8zrvew{_EK+3PI)( zK-StvTaJ`gi1{as{Qo(OFSAu((`mdq+)Bne5vC9Yrx3of3`@=QF|(CX^Ve56`x&38 zZ~O6?fEY^b`_MNzV#aA&9qh?N&%O7H*3}9cQ0sSW5GYEI#*4Z)RjOom|L)B}QN@XX zWc6c9+{qTxr9w$^jc5=GzkljmE*bUNK55Mdod5GA7>gsvPwW#+E!Zo=bCx~c?v`nSU9yP5U&(y#5i z+~H)#HZ_$BN7}iydiEP4Q=gcuBx&y8h06VSS^y?B01N&s?{U2xT7Lc8Gt1p2i+*=H zc|pZ1ntA_>sn8S|w*6q^i~A}WGdoV<&>=lJ(I3q(L!TKbU&?*q#)n zis$(9^Mc$|q>mw#uz9LJ7$0w-g5WA=&U4)(38z{v-0K_u$V$BtVoJC;Fss7Gl-Q0~ z-n|9@jF@*D+MhZ0GX2;7#)Hl;A38DYUnR^$7Eb){V-!rb<2226FZM)ovo5Ci70Tf3 zj0?a}Jgan#DI+?y32Hl=;U72^2#E0L~ zadYxjC=}&P_@4vPyaqJlt!^oMD*r^~kBAZLGn5#PElV>E08Lq6=&s3E&0(tdqpuxAQHkk`t;7EhcpXvNp!+FQS)dKDT zcT~RjpLnRyY;Av~WB|^%14MSDzqs?BH!{SUrQxwu+nDaE=75zo)_ zNB9d?Cdq22VpVA7y^H3NQblRSbH3r^#&=I+dXcwP)7DS{w59*T2RHFqvNlu4TG=wzfr#bdzfBl zI=qE{4nX#^{_6k)I6G)|f0t{aWx=gv?aj(EI)p1Li=PgEed^>F_I2lzBTw0b9+gN4 zVr0MJB#gN!bW4JeqS1!DexYEtDxUZ#dDn?z36n1dt?u*`skTvVn#)Qqv~BW{GmZdZ zcx!TS7JrLvj$$~7fFV@-NQRH_R;}GqzH>YhfhBZF`C;&IesKO2;$8DIQJm2ZQD~1Q zJ~>gc>pNmaiMy%?K*5wEn(9USB;aNYuB~W$a@H1sg7!)HlN2}{Gt$Zo^{y%= z_~8!O^VYbK0C+MdH|_fUArXqw&`{1kwX4yTUQ3~EP3LoTj~Pr7qF^Ye-jxsn_?lQV zEF&w*8?e9noRWeSt*8%>3lq_z3(dcS+((1uxi|)%?F;lMMxxGJMQo`B{V2Gd^dvQv z^*2yRZGuys&8j1XcmE2`a@MNVGf_mTHz}H}M_{dO%w>Kg-)K{?IGN))5?%0#w!c4{ z&)6=Mr;>}b~>7q&C5t15HI{n$7>mBa`{c3dn2 z>szuxS4f#PmvF-K6&3+0Lm;eag?J?eQJKU*J30J#w)Y?))vJsB>rS$Zc3AKZ`3>(N zA4>3A%}|=$7opVHF0K)&w8K>>W!jb5jdOJ5Pe6!7a9bf=7&ZWsHdaJNwytGi{;*uY!`g)XkSyr zA{SGDB1yYY7s`$|XKs+EITOWBuw9T<>uG+XiK_yQ8pvac<03Ceoz65nD92SiKW7}ax;r`IY6vmj)ob{ZkO zPH-S_YZdjG_t3)X>rMgwbYe5sp-vQ>1F5u%$LKe~`bhdWhzO8^Z~p4@DAm4yGhLa0 z0z2?Aq87@h5wc^kmqNg80kHZ_jceEH;umqncbj7zhL>jG^4iVY-q1YGU3}uUwk>J{}?6IA=vvFSS>Ga3^J^C#i@w=omBY z<05W80Z?k6op<7@pEh+{-oHJX4TbZCVKrq)fJUT1oti(3DW496BQPB3;HY5I4((J; zLxByxJP2!RwPZ8gNn^yk+)n07qFByw@k~TK6%ppAaYRo}vA_4YYh3H)zupKc5xZtF zty9o52#I}OJG6D(NMh@5;c-REsUGGFbx;WDJ;(xHU~K$qFDgiP9?y4gb#F6bG@s@* z-s{B9QFt+lWG+om1nfi|_Vs`%7&=&A+%uB)(Z5_!!S-;-Voz(jBv_wvDM(XwlyVZ3 z)TU>B;Qefi${E~m)e~6odsT_hOdStqz7`8hQI(#bCNmXe2?zo&4>FfG^v6Y80JUhSSS9-1;PAHKh= z6;xT#xATGk?1Sqlkg&;N3TMMlrbdtt8M}XxE+?}jB+W*q#0Tyan&^9s*gTU4aa2v? zNb^RxvgD9!l;ylsSR+{Sp10UqLtogXp^Qy`;^+z}x*|SbHUHs7zLzGHF-UX4yPcwn z32apc&*H581;tceC7u#5Wha<>zCU>mb1&8D`B%^gAZR(oA9S1+`4=6FVSPRJDt-nl zfOdPe6pn|85Zo?n8#v<-U_r8QgZnh}6AO-xF%N4V0ieu!nRj>7;ttd^mLt9v8oom! zdHE`?cE3O78J&aj^GnCKiCOD^OxV@i{_vIf5Ilyx$T~ws200ym!~`8<0FcQ$1q$)DmA@5 z`oL^pf{R}e`}7Us2m?(9*MR_YVm+H7QRwI6qMRMCmgF$ZEpyvv(qJrc876*#5O`_Y zbu*6u%KA}P`(sc2k-*gRE<4^*S4km{9XYEBTvJf7liJJj`!vmk^80ispK?uO6sNyM zNPQ?$|){^YJ80QXXP%{e9kY$@rG) z@w`Q4_@`vhG@VbWt${lXOCzP)M9uJ8tJi7sL%4YAqrlpSA=DLTN0IHkjZS4`#kpf5 zu}42y_)J8VnvofL#n)+0KVt^2*z)$+^xpVMZ2X7h7VFJGc&NuRPb)efuStkjai5lE z2{I}?mYVTS8tZj(D?=BvtHxFAxBKC&t*QAXZXy&KaSti^f3JNnA=|v^hW!<5; z=~LwW!tih5sNRqu(oj>)nA4QiDg+g}>&=!#V;BxKRZ7qnIPXg&=fwS*;`RaI#*P&r zK;^K_xh|)$1!amRTptxGG+873|33%r)exKNUTgrg zyF~BRYoqJAo}h56L&2&$KeZO=maCinsBe+_Q6sSD6@P(h$7i~1?$|hjvu)kZ#N3ZhWI^f~Kzqgbab- zL7BUsu0xVBFeN9%r5y4%O#Nu}9Dx6}hlk^(+k8}=3%O%d;;GU7ENS({EAILcZSM zVB_ZC{ap2vV-*=5nJp7g@I5+5_Q=H0#E z->Pj1t;Fep_(~IjVY;04h`KVUc#-BjezSGijNpiqSm)1{q<9ng7M$qK-+fk5|Ey!m z|7RWVXpXcW*F82A4;F2-gJ4^r#NIWC`u~_X98(C{ZsUB!_qZ2{jl7OgHc`Sn|^;4J$3r>&=qm5VLT zuO6->lQB2%2*1;RjPCNdzr8FB7&feT`F~1q(xW`so4?*|aR02*Ymq20Zp_V%9mc{it6A66 z-%T_xwKd5oEKGzC4k{=BC4kaIl~x=k)wp zUq#^|XDl5_Gqf6?w6a(F9p#bn#vKiA9D$W2_Q$NKhuzO*nue(Qn&7(5Jh5F;dORrX zfvmjYMUa+0-73q3+?d*7B2#%3;A>Lk=i0;pk9Y4cJ&w%;PVJn|{RWOI6o3s^H}bk{ zQLoFE^|%p~=5Qo_kl??)KTxCQ{Dj^(T0QB|azO6EH}G-Ke#UFF-8(qHK~@tBO8iG{ zZe|d3*5YcI=3Z;7shC>G|Ka$w$6cW1dYF*vHj;Df^?|A}ZT)KfHYLJpB9z*V!(Zfo zyOyx-;7VAFpe}sXi=b3WfU=LModf-G&OPd+Ig^7WU z{l#{sTXsHx7z1a1+|W98vc>(5IfXMuyre^zik$mYOTbDIm}7lCvCtN0lVa@BCgs=P z#K-9QE$D;g^+bCs*3DBCWf5^u9T(k8BfL*WIKtF( z^h>SxT82zfDuf;6k$yY2F`P`J?|IOD?(Ogj`T0;`Pk3WQPMBrN^hSRKlwLzHSW{FK znY7`r7lJBrS*8dalvVm$m_~-(wIAF!Hln*qCZIzypO1JJbj=>EAh4umUJfl`cz$N; z1-k9+xXEK`q|gjpTjsnKpM5#;M1(^fJA8Q`b(y_VnkNBY{X)76U61o!3tD*u?hg&0 zwVyTt`zs3mN-WzWy{Aq}wh~`y_uD9Dq94%8J@i{8mFNQB6uLsueyI}ocJ9a!zlk1Et&TDyYvyDm!inivFVg~n`mMf->E z2bU?^u|0k@yB2+GWl+4?9QkDJL0))YC`0gqiu#ffNuUub#PGdn2eO#oM2P5+%e?w8 zu@d;R)laV#+)nzH>b#rKcyl@;qdd|0R-IMuv@3Y)1A=ece6lE^XXUs1t34t8aeoC! zbl9D(t%>s(^S#5li_1y$aCtpF9>eg|$*tNL7VEB&!FveDlUS*6K4!&(EY&Kb-@q`! zJibT&xrgtqvZA8GKrAtm)2<Lu-3HM`FmnQfoMan1i_(-WN2X zL2JJ+40eIHNKW)yeo^v7YprH$!)jMXW0e$|-ko15`DB8rZ=HfZK;zOfcWr4_U5_$G zMV|1$<7qqqp&q4KM3C$YBI{Ya#AeUltzF5W>I>6W9A*;vFJ*AuV@#**M6%r0-@Ylo zOEWc{0*bZ+-NLjP*MxZD^XAg$zo#bW&{VeN42m@2chCGwr9?axhGkRm>zoL)iB-=; zV$nj2F3ytBVNCZ*L&aL6XFs}H^m39OjRbHiDeIr+g@%?`1ML0rr3)~&d+B-(*HnLC zC^QrhxX~c^gRtNZSK%QtwLR?=B}_Qc8bw*ND*}rC2uAhS*^7=)lw-( zGY%nVya3 z15%XhY(lTem>&)QvW~Y_K^8DrAL$n>$ICm><&wr=gX_=Z_XA-S4k6BHAiu8vZgNG= zTT77#hmK@nsA$!op|)a)7eDgtHL0sF_;{8XAcJw!hyPmV8xoa<6lfoGdy6molo9T@ zax2H8sxH5NCVm19z;F2Dy1Qs#JY9fgJ)SqL88_26DIXO9jhn6ADPm`+-2ULaM!ijD> z9v3M$d$)ZPm%%V6Iaj!KCYc&z-x+TTd7kFD5*cqB^1KYqYJhq>|b}XD8eNkCP#UJI4C+;QNiRevbj**426It*Z)>CKmQgS3I+=G=FzRS zJU~xB)AVsRiLI=&IVGkDa8NhrkbP<8+nd~DDK3efXQQV62{;Z2HnlxyRmHfG4D+~! zacj>+9=92zb^Wg1n&N{GRRzjVmBvS{=Q=&kx`T#$Yp_XEu{AnMD9Kysg$kX z`h^UlX#{lbZ%UedK}~~tS`1yMvk?{1XbVDvm5v%)WU;u112vgwj>EV&Zvg6O6C6WJ zyBQil5Fu)twg?8iejX>FOWywNM<+bsyK#9DhkY8qYg@M~(}Z{bjLtI3{M zW=U{)?8vd32-p5t)Zkt3C5**1fRR?Gn{e$1o_crMj<~;6y5=>g&%E2?%c%tGtLWRD zW_%?yUpnb%WzQs>)aA%jn{>NFT(+o$nitdqoG33R%bzofdJ__|)H zY{Gvms9%icbMN{}2{8Bj&9#zY?o#Xd`Hqw=iYmGkFE$Hqrx!xLx{WH}-i6cN8h0m* z>jfd{TSM$FPFS8yFB6od%qKM%QN<|5;*#6?ya2@itBRZiK*KCHgHdg@gYI12cM3>< zdr5UJtS^6GdK&XyPOU3l#|HN)ugh<=>e>JP4zi<^Yn}dYLj}nV2I~vq0ew)OhG44g zb#apD9gASvz_G;fj?NYZmT)j{UT4EF=z075-RJU)L3Ab_nIOJ+i4{igjBc0(@=S!-5 zOW#lPBQ;?8zR>h6cs$>f$wOU4@NU$#WryLTS3mN(Rqa_@w~2EgeaU&qef&Cbu}LUG zgg2SoAuJLtZ9CF43|=Pl`vnhThmK`N(pJ}>{&@7FRI5x^&+I}&vqjwD?%a^cG-$v> ziP849?7R*6x7Jf?3eQF z`7`7Db|XYn@j(<_HDQz6ohe*rWQ06rgpnDX6h%nKnE$Cs7T{PXP^yl1-;$Lynf_OAnIUoeP@fdkWlI?q5#6U5+q5XC?2^tgxSV^-kG~ zws^WMDPY0pi(cpi8K)^0t^(HCbp&;59BD0v@yz%4{0{0jLSi_mD=4sEeafv((iQ)@ zj{5kK>s+~+&(XU8GmH99%F4p3s!Ef3e`T0RdqM+GrTaK7Q&1bNEZZc*d$97|2{ z%9>owmxM2(P*9?m^F<8Y0g8MDMK=m@f}B1ebkF0xo~!kFwg*9^r>#(DQ}^yqjfRVq zB1De^{wG;le2v(K+P6>c)U@;&GtaE*7X*XW81FDy)=u5`SMn(MSdXl-iknb10laPa zCH0{gUU!hDvdX5QvcEuwo|7`*+xPF$ibX}{`Hi_^pm2mnHNR@v<&A_bDc&Pm-)fUz zDg{tOrS}eo=9Wi>g~f$-(`4vMP22XT?gVu671Q}IHfDZQDILwY0_>YXj2aA^{YuL2 z$#A~fU)tinC8#Wg0l&~|4h1&3b81@`r`2$|nLI_FT<(pR4)YqgHhQ{uiIYulLEK%f zs#6kYmY7<&c1&DV8O(_F>uCvhou<|CZjL>>n)h&X+dK!wv(eU*@$u;Wtew8QPiWo8 zub@$Q4A=KGk~n}%Jd*7%wZGZWNdv8Q0WivMz;jxTrRlPvUg7(D5Umt?j%k zMuRp3Sn`_Po~!XWYC!KUC%?ig1gURhv+!$6VX}p##XZ`e+}GOH zstPooIUbd*7(Qz1s$GV&jVe)tn5dYO)jBq%=OPNT~Vv{w?cHebO!wA>nMRw`3iYEBlGM~aO z7IMN7cZzfDcI!D74tKtQbjywtu#0|gAj{7jluab%Vrgj!ib@d;wh$gds;O#bz`DmDXy|SgE4I9Pr`P!3<{*$|{1B2z@k~#B2g5d1L)dmg! zFk}adxYTsBWfJs_KCo{{gSkb%tBo#(6c8Mh;e*6?qfR)?-(6d$N!6_|$_8ItU0f!1 z73!LR7+&frHo;4;u^0|QuSjq9%t{{gpJ-qBgQvIRp-z|dqjpmXIxXz^2h0Omj%LYY z3HCVVed|gu=9C`>416O@5D$#e(ZkEQnniFGT|T{+CbY$^d5bVJe!)&V!3%~UGMy=d zl=4ZAPJPbkY4>`nrY-g5oUbK+jcTq}@HfT3Z4~;W3C7=cr-{6Os5$UV<13~x++HL_ z+h1~$F`qP@+0NjQArtURU`Y(bzprm1M`<-axBT7mR^aMTBPawm56kFT3_WcZb2x?J z!?6%&fj&6jQ25-IOSfo#wKUJ^8ib4>fZ5t<;CFK5a;g2|K!4t^I-J@hcm8cE@j3 zF*UCC`jzN2OKsPW;%^kN(!N81F6)Y?{60Hh1ec)Yxg$$!o zRf(LKt=w9d^{I-9YF?gmxZhV*`=?fFJarHBsq?$0m@jlp$2N&@sJHd0H|-ilw3 zReGpjZO7-Wo4DTRF7VB3Z%xHiueUoD=9gxUY2M2UyF^d(uS~RQ-qnu9;n}i(0YIV- z)nq4}=U}Jm@TmHFlpejZdbnkGy0jpX!jmU?gxcrS(Q;$&ObBpK1R$cRvuEj|p`tjg zBZygTXj)uUn#{4O7Gh~}t6!bq_Eu}9HmLHV%;oYOh46~CPihPO07m4TXu6mep<=D!*Gu zjgM}_2;2;)uMG568_e*5N)B;1@tqONy~b&+X6F5Sk}GnX01%2+y?vF(4(R+7vBnm@jnCdIZzyoT)~-7t4KmMWbqmijsAV_@W1E-w!SP&HoM z7pCk77q0Esh_F!hf2n_K`gSfaO+q6>66(5V5A zHyxEk&Q@S%EE&w^V6Q~O+_V!(wc z9o4Dzx_Wf1%Gof#eBaot$V&}I%Kv^g7w5v6$qMosZEdN~T77vS70qg~yf>!<6HK|& zAxZ4Y4cqp`N#Ft>>rSPGh(8X0<3dN00#Y)eAejqa_6to^2D=tD;IOSypRgo@ z392@zx=7={Op!M1=OvhbQ|f_4wGI1A!1cdrJ&iwK7PX|z#@nB-hSN-nR7yVP1{D|6 zX+HO<)gGs&r@(Rf{|LDp$C6i0g~Q`9ph3dt1=5f7L5+7@(P6RposkQ5gt*~@@d=Ji zS@~o#*~J^{1WK);VP*AS=o^^IMOm?c3v5zvY;E<|3<@%<-%jU|uv!$KVlZ}Jh(y8M%+lbR~a8rq9M{dQb zXoC~+%tx3k97@ReMt;&9#?cRMA=RzRY<=U(Y4}KNT7Nla>!f=i^S`TVOw7Q&nKyR8 zkV(2X;;Mn~W&(Ey_m0|ds_>I-Wl@k+eEik%&1q6reG(mg2`xh@Wt|O9!4Kb54h!SB zXY*+;Wo2!V9vgzslUBL4o+VBZ;=kZW8M6M3eQEFQz^f*e@O*c=Xoont>y<5tu89?H248P?s_MR zQOS-Gk1R~aXWJVnEAHy3Zc!04gD7E4H2doTqRt zj=v6Hnut)M)~6;K`dpl=tzMuQG!nLL#P0nR#(iNO%Jn8iy@AWriZA=iiDK(21ODxu zUKrpzt6Sfl4FLgV^hHcq8B9AHzs31G8ZR(NYgX3yl+7sm8E0)+=bSaiRK3F{uUuEv zsqEV`r_D;ZzrQ~izV{cRvD=9R?-V5=CTcYxJD4XH%joTbKZr%Q+5%2cXgemHPooKj z)z~N}5`r#=40me`w}v9H!cyC~77K62e<#AH^E0f77-gj;97?kGN1y5~{!g{7bg2}yIZn!6c} z664t~Tw_RxB&g2sQbJVzMHQ2pD#QNU%Oa2driyFhf~()pnuI|C7I#s+>TW2Z^x&&2K zZd41)O~(&eIIOyhwf^=9X zgSYJCcslEY4+%%QB1ZFvePAe%Wa+HtuXw#4oQZ!0_wVL#8NauHW`zBwDB!t0^bYa6 zgDE;1t6q6LjtlX{NNm7*a5A0`Lg4AK2L{rP=$U@cmd=d(A+yBd&J#QQ?g!Sb&x8n;tBbey?27v0OBJh?v z8sn3EZP}DMhQ(CKE~_J!6AKKyA0?9G4F+q9?kBT#e?1Exo(liAO9|M?@wWsmd*egR zw)VqtM!@0O@*p}1_yhjDo{$l$8;Ol02iWM+B3nz%4BDGd&Ebq!8`WENMWh_4<$4h9 z<%4P$@<`*{HdZpVMI8QoB6Ys5uwvHer@3D5Q)?1i)Zj-Lvkx{Iq+9@aNJAfc?ZAI( zN`7D@Iq^vD#yUInfDX?`l+MW%18jIM(1r_qhFTG6n60b3(zt1GY_5%V@1vfS0bN(h zk7Ru6WustfMH+2&s}?}A5>wUqYs*5D;SK(`D=<#7zcBvWe|R(?-aa2v4loH(vT08i zWd##%m(`{SF$tv1@|#E?D5s~pkD<3sY)$Ok4Z#8pJ=)V}P)OLuQp<{LeYDQhd|nP- zVTn2gTtR&9acj+LjTdpfughd<^&OIs2Bb4M(`j*Ovqv6%{PU68mR;_s68C%P|l|rJeFfTp@LYL)HBJS;W1Y z>y*IZ&teN=;&4!FPt@Y_{^RcxZR^{P@g1qp((Nc{C##8w6T8oGm=s}qTXEk41B1yk zzn5rca~o}TB5ZvJ(9+)8aUBq)rKhiLuP2aO?evL@GdzwRSi2M}T z-uE%bOs&Q>a!>$aD`=DJHoSjxQR$h0wdHXn>U3;jD1%VQLFR>sPUAN$a%7~f;~*^f z>rad4{a#`W>Dei59u%_%q^d90S7`Nr`=weDQtMRfaPjwmZ>28!NzFR(L_xal1L_s%nB2)rO zA?W}23%@yZdC;fLN1vz-W3l&X1cdTcfhfT@h1Z2GeaAI#?}*L^ur)9b{^&G3jGCI{i)vTFOm;&=hs6}>f0Ci0Apq+8AAbp$q1rk3IOqQJ1L_=o z_o8z)xZ4H~+j}K0=Ki`tK5YCEu)q9nPQ_Bt=e@No)1G`4cIeJ+)jX5Ljuo^4`sVpf zai)xzYng(C@-@BLe}3x3VQ$*I1@P5+;AUuh7+!ey2C3eUpcY z;j=6xmT_c@s{dModL&4--~Zzu`yVSY9|UkbJ-CXu^*kRJHuUklXaUcC3bu7|V(mXi z_`6^?zksgN?1HQ9@6qgT!GZW7 zdmq3d|5J0^9GGaEm%anfGw`d4u&>T0W*M zBxzQnomhXL@&Dcxl>p~#prt4J4OGZR#b`mqGws^CeM%Zv3MpZ8XJ-t_7l!QT*42M|PiF?Ey35YTxlDn;`Ch14YYuuPEGzmM zF;W-iSl2q?$gaeo`)PAKnTNZG5!Muf5I*I?h^(BvtsAd%T)MOXP&!ZGv)Xu3j{O(e z9wW~u;oC0+go=I!vC^$w|Jb@;YXJ2t4RdOP;5dS|QjhpIj_6my&?z1={{RioFsM?Q z@OGC~0`Q=nb$Nq?kZodF9PKue@nkrPntWy#+y;DYPl&Y^0?WN^~t8567julm)u2pL+EQeHDSl35oxVVYtd~;pO1~ z_aEV94*1DDJ-a>)_nmd0He_>B<=GxG1ts+e;`_df$0U>CK9;#LKJa!r&oXZ=hYcJM zn8ct&z@FP$Q&A;xK=??K#`DaoxG+bo`5w+hOoyrGAB+EAXJv~Bx_l+F-`|NE)t-KM z-i%rT7Al@Lyi2DTf73MxoEa{H0kpTLyPR$Pr8&ZTdmU5NW%$7pvTSnJ#WeT?iCApwCtnjQq8UPb7) z{MGsm`XT`U4r+~PUO3*9=c(zGAoo{Oe}&pb7PO;>!txZ$qK{T#@W0nBtKtH z^*k})=a5d)yMG4leyqPi8~oq@@1Si0&5O9dUqBC22ztgXea=A8O-vz2@JD#SoTlMUqq%>ruqYJ4dow zL?5hjksHJ<74!mj*A|Bx3c_MCt_5Hl6@P(CTne;8nrRR_4<36ex39O4<;l07eUdV8 zIulknX{L!m@z#Z&Y*eO%=QxGui3nTgGE(sdxD!o+N9;5&= z$Y$_Hgkp_kJCEX-F4UquJwIEX7>bAhjD5}-6$4-Dp>S|;!aWTO88vuNzz>fpXst-16M7c!&}eHI|Rm_1!}HCu-|nz`INe${4@Lg=XZX!nA|Rm zfJ|mqZX@$ctSiU9xWp8*Tvvergi@Ur$kS(=YKG+!HJ4Ta>$uqzxc*c@L*#^~nr;Ik zVqzQ5>+Sb(^!TPM>Es%I;WR+`(+xvD=y{JhxIe}2l9*SYN~$^J=Rm}|OxEZGvLhU~ z?#kSA89aerYGa{v7Xr4#?aU-P0WCHP%*5azA|cXUjAS9z%;_eXmBB391W?TCw8J6EFL`K z#v!W>aVTHKDd~nYw9MDr*1!jSDIDmRLlabQS8tnr6hYRU>nwK_n`m4U6=Tz ztHS+gjF8!lBGdh)WUAGk5A{93MkoGjWw_^=ux!`K7}FGKQVzkzc0h%MH|l$7FFqRS zf=Hc?@W%~et5~IrG7lG{eSd4BLJbD_6OZco26`78MD_d1z(|20sM%YpFS$R^uWlzyrcDBNQiFVchh!43HgKYS=Ti3rLyot)v;}Xisv@$#_Q}J^O~uUfRdZ zgGLYkb^3P}?B4$)zx)?AIcuZ=-j>M*Ep@3$fi+o0NI4wOi4J(}G{Vs-?u~VX_rxsN zug8B(5?C0)FzO2T>hLv`VS4v|<%8gn3O8^5fzQ!A{Cm8oW@%#HZy$9DCP1a$kzb*w zN+5V1WAIPGC@DHFh5=I7-^50IH9oTS2VlwH*F=S+v0kA_vQRCDADkqU8#z}nZc*pH zH=tQ#pD{rXOZi$sLM{-YMW5dDaeecwdJ3AzHGijk%}m?C=q2AVxa`tjp9gLSMdN`O zeS39mQQZ-FPcT7W$O29~dlHy^mLYP(^ipl&ra|7T_}FUgwh%lH)BvBIn;K1gk^ay)wG+ z$%E&$3Ey>dO7-DtK(?rX_r!QI+wMfe>enWp#fCC09}iygs|Tbj*9#up2D6@yv#YD< zLmXzEeztMs=)+j*wve0S#X+YRa9!oMRQ7jIc!2x;{QvKXofLJy0S!p^PfHiE9uX~r zs~~aOYO6kQx#`N(@u{~{i#5lGpI|}ZQ1^_&Nj@5H(*}OR)s6VPNEco6C94Cc_=h_^ z45qIIQyULHZtVB%SDpSzsr5$BSnD|m4uID$T@CiWmV6`uvbf% zXnpDDq1Yz!e*xGi@Ra%%gYhDHh6VctOS!hCbe5x`1sVm44h=jBer-tTwx2D_Y;7I} z<15eHb{m*efWVG>XQG|wyRcHv!<|`M2L}!d(^lWtImEjP)iS)K$5DnFM=7+e-x9Bc zP^kM`TNE|D{r&6xqp371)xW-Ty#{dcJ`h}!)wh})$@8L~F;Dayt5L2f= z@h>f3Yq&1TVl_H3qfa-y1SE;|aL@v5wGxoft-H^;oemMoC4xq-f5l-|!NQy+5V-NF zmIegp(Mis$9xvQi9;!1!=+jALherwFC6xL;S)XuIPt_y%a%lhub-TS9?DmKERP);D z%OEzEi?|%jZGx8U$izIsM9X}JM@d}Yu-!k32oPjnnC(_jtQ!-c+p9E& zG$V#wciUS}&y~%Y=}JmtGEHwt2tbBl7Pd!6)6=N_zF0~~`s}3lbL{y3^71xwDkibC zvj=nV_fsyBF5G)*C&c{A2K~*s>Ob33uYnyM#CuEBA&w6o#WJZ0cdo;MAx>e_U|>s< zNb@(tpZvcB1MfQt9yXXI$rYu}1vgNQCi#76UTXo|DGNAE|B`@gE_}H3lj$dW^0N95 zf+-#cV*S%1v%%CUOaTSJv%z!f57fdeN_P;x!XArRfZ&2*7UX-q%hn-nRdDKOuS8=m1>qwD7l;sx^8sQGVmwOoq1u4P@qfH*q z=J_=uL)!F>74$RxRn;i(4&~RuB5}y5x{-$*-;i~2f64J5+l5W9`aSFN@Rwc>iU%?^ zconbYsXnjwntRKo(z1?yzaqY^v#NSDc6FJIh7ih^${$4N0Z@0#k^4KHu|6IQnNw}s z_XG=sw+QUly1!zDr<&LbJU*8t6y~Q+E9-@Lf%_W6D`mklQnkx#Q6@9Ma}zzxGU47X zf6q5nFM{)4wI?EG<_Dw%xX7HE#|ZIp)n3|Z9;0Tx9#>MG-AJZaOb^?PntTO7inrJj++_zDglP;uwNfz7B(w~ntOR}gvp(SA$*&NY=7 z5md3-8=kE9bv)zw`;Q+ApTJYa1@_4_+grDvKN@evOO$u+I1E&7%;>_;Dw=45FR$^e z=5&*S6dEt6zTm9NL&C3OjkRu#Nv$#YHK{yFN`7nzkIJ+ocGf}ePg#36e^-zTcrbtXj6Okmz`)hE*pSSjF+c&{MlR3`BavJwMes$bp>Atn?H*7liLu2x*7@F z<@o(2&bfA`U$yE5%YPi!Oc&U3iU?h70k06pD5db)bx)UJ@qf(bf5?YzHf zny>F4Y5Fg3_MTw-jr4GngS6OPmbza20g{Lx^6)<+daD?lF|)!d9GqV)7<&GZti9K3 z7`xk8mkO^-)$skb8OxvL66*e%LQVw{}nVjXz$}4--3Kz07+?`zDiK70M_m^0HR&N4{N7 z!_4B87eex^V0l0XGOsp=loOZ6x)VI)gtS%_^tx>>zEM`~^$FDR=xWA&ShHNg&eAVtlYxAk!sww^;z9 zTL(Xm-HkhN30&*vkL~6?x1Pl&jhn67I}E-jY2CfDdY@6JbMo>)OSryk4SX*wFG+G(fWe z1#kgOK|o8V(fBPnwvWTowZ;@@>_8+a*MpH?~Gm zn`BPf+x+nmVE!}Bt8{gwvn%+{HsnP3Eg$a98C z7kf4=0XwT|z02A^1*6Xg5S4D}>$oqxj*%nxSdoSSbj&H8{n9zPjff*kz8-zFvG&Uf z*(C^hE06%sX@DYwbMRB+cZjgel3Bnu^tbeB;jUT^3#j#$CWlf^AZKRZFbQ2+o8lXzlbeiVMo=Wo_m65}D4z>?U5CIA6==MZ ziFw}n>9Brzi)a3FsC;iCo6-B(iL~Bo6&`TCJN}4AEeB)R*$MhJ11`%y$fR-_ys^w{ zEQ)`LTpeSedIg-#Vi4esh5V@g4y(usCeq&cePeuUfp6Vq>VwplcCGU7V_Sv`VJUzWQR9>G+N+ z$#QxiJ-niz0UDKv1fq2k&^rwah+2I%6GG15TJpWK@TAAMQ_mD?X|RF}Ogw21zx82h zL`VDhynL3Ajy!i0(Z9}^4H`o2K^o@rfLZUW-$Bi(mzFKH$d&+e=~&bS>h|GCbjJa! z{Q~+i^KRX|@U_ezrU4x6SuJ0v_*N=I>>9Y-GG0u{Wf9fuH8_0s!^=;Jn|`1qwU1J` z|9M@=3GYb!LSUs{JVFGa|NIVrMy>fvtL-7QC&f|(ZMaW9Oom5JsrGmoF?f;Yer|gI zR|)*502t^h)fxOQv2s5ea(=pg>*OHNL`y}aEp(^Dqwd~ynG>275l-UMr}fKZJwF0( zTGSZ{+e}7bNN2j!xS?0kW!^g5r`|75PnW0Mo?A(hBHNN!XJd=G3f14>33wf$gqZI{ znP_{`G%|Dad))h5$tBttm$+YJWxb(xW=qtx05L7jr(M+3#*z~SUM+J;PwS8UtgQxm z2x5pdE>jOe&{?S@e5#s_kX+14DxHlxW%fCbGFP=a zNBwAMZ-j|Wh02$Zdi+XuDQ8NjV#WBM3)*AeU4GB!xeX?m4N=qe5Y4C%Xm;su>As)S zBr#1`)8Jk8c`+-mvqXtNfp79JaKDYcf4KEP?$PzR&NfmG?(Lm89BB1hkrOIPiGKY2SPW>Q zbUB%UY_M7F-{?qOUyZj=jrl1wybqr+1ScV#$M$e2D*$9MbRNIcWQtV}A-YKh}b$%3KYlu3gjj)HYyJXbJs*Jz`Miv zg0t(6f?r7$E@l4AYH4wYT0;Al*D4qF5Z%f{dW*~(J*y}~58#gU$a$fz!`HvTKklll z{NVVss;L3;=&rlPU0<=Fr6^b$h&WU4rJ~3c(?@CK<>n`jwO7wA!$ z7frL|4*Po^#{LUcp?i-6VZ`;`<%n0<_fO%4Ai1k5-;gd+@yw`tGavMr-cj6j+pUeQ zufIij6=^gFmwTU8jYvMTld|B-^nX|yEqGrTc2kFhqny?!$jd)3kq3RucFY&Vr*IC3 zg%`6~nCP2xO)47>Zzi2x80C>-J(O&Rn(u`Y7W$4y3kT!awMh#^+xB=q9bA+2a?3I? z?=#U*Z--;HiWjcQ)X*S{vHP=N8$UEoI5KyFR5x6%h)h>?Kr4bYzRHJB3o&u!@zZer{4TU`ZzsgFls`kTRnOxA|AWf~+s*ZJ}ryBEx#oPp+~yQFp0sYa8bHnit7V ztAmRb1_cMw9s&Iv{N(!BhtWv&RTlwjvK}Ye_RDGayvO$YxeUQT{7JNn`BH`h(n8QI z%e8xNU7_t!qbvG4;3HL{t`D=#o%_zf5I!l%S;E=^!1^SISjCq6D#w&sx;93xv)9_S z+}OdA$46VFf6H0AYore;oemV#klM6a_5154td3G6*#bhllT0lPY8HX|AaNw#fTfkn z4Cqh+t&y?Q0O7W;<8wBW-x%HRlb34E(JCX*$@tpNsMd!&1HJcdR+Y2PK1sK1?dgxX zfd*VQ?AnjjDLfHS_5^AujHSBwTnJc_9hwaGim9 z+C+y$HxzEF8ic~bV6b?r`sI;k+_%y-$gKJh}GT+s@{2kab7 z7GefFmH0cK;%Spl0c@T|NJY}uFn_Hf8Z{= z;_HyD&~J4-yoQX$lH;L*o3{)y3pmI&)CquDcv^6>*Ck@oHlvLWV{78E2&nU-S7Q*; zJyzD3Ahzf`3hJtyiK4;je5Te&NQXz(1C3jc;l=wjTJIhq-X0!X+)RNbH?{SA5 zl()%7h+}1r+i7MV66xV|G%2W1sFwZlAncV+9e;p#+l!^v!HB(3Sak^NwFVNh-jZE40T>hd1x-B-(!VyF@>L$6@OXD zZGw}I)s>>0@!;n$ASFQlc^Tpc@on{|Wrh71jxn{oM+=RYRy`d6tvM$Oo$CsR%DsGd%(YU~O0UlE?19CzPI==Hn{6)5HeqK*3-gOFx2 zC=gBU4}&(jiJb|D08@-9tFX((GZI1FeU;*!U2zFXX%qzCbrfn`Ns1p66+dmW(vf0= zq0>6p4?}gnfaD*TPC#fRfGKC|7F`&!6b#=@3A>Rx>C)G;h+GI(qlzEmqsMv{cv-76 z$VgVf7MqEZ69Fh!OC;oaSXA9sQ%K2#j~y=sUK9E&w|ZnW zgSJ+Rh;UkTd=@vLyX%IaYGV2XM)p)S755@V$|}?KaohzVrrtNdOSQ$zAD=bUJsTPX zhmQ0JO%9og=N&9B@O*$-CsDB3MCAC$CIC_&Y|DG4*~BiT>-4QuF{@@5M!_|sCtl1c z@C;SKA2@u|D&5}vJgvdnV6`X_Yr@Cn@}0mRANG$V?~jD=gZ(n`iRhF%sUdAWph)nQ z7hpRgJi0f4^9XR$t1orI%<)dBX`iC8gKB-*p^*jOqk5a|I3HojMnau>^R@mcO%xpD zaftq`cPf~hCQR%R2qSJ>& z=rx+ZxHVU8zKR7Y1HcN!0&d3ytH~>tC*4ti@jdydSL##;Q!@vHnPL$D1>U`c4q~Ye zwmjum36g&zyg`06k-RcwD^zC&+>eiw(GVtpblM3!(XS005wua*Nx!TRioFHI3Yq52 zbbv^dzEL;QP zd3Xve9~xurWG5oQ4ZzvuG!axJ-8WrWxaeVR;;D0Y)if`wic@#;a0HjlvE0Y@mVS-# zJU5js$RMIpp?c1PT7H#O4Oi$)xg^yX3htj-BcaM3-sLv$yf+J^?(IRugbOTq(L`)9 zaje_pv|$t)_%B#j>gz>o%SHx6@0{M_$5w=bR75l-8dqkXCovz%La-=tdDLu zEruWyf0|F{<90d833M$&BqAb8x*4KiFSL1>sH{7o1vVOu>?CnI#c0%L_lO&=w!hn( zsUoEE{2={ZzaLb1E#E%j9EN*HC+(PVTJ}t9>#sIWm^Cl{5~S0T_;ulf|^blVtCo4z0<>;8iVU)c@98>nPQD zqe!>~)XuiGYvkdPGUSdGiTXh(p14o%r98i(pGXx0vy#5SLg0_FOns2NN_wiVwxjHbi z6#xOc6K*d5gZfl=Qha#{$z-{0Aubc-*PlZJi>4QqfIlp+6Fr~DuW@P8C+kqi0)urW zDs7RNG1T$$pgYHHXa`f?$>}s01Gz1(JZI`YlKl2P%N2yVbbNf{GR_W3$*oG1_-=6I zyz-xWR8uoSVBVvX6MWX|WvIvAOtT4ZhyAu<8sS>Mb$@9PIaiig%ho&Y zzS-oWsJ#W(HegD>vau=#Wl?UaGfoI)q`nryD#w*j0DNuC#3r%4Y$mE9gOk7Mlp>4W zJx>6-PRKo4gDQVBV1ev*n6djl5ztgnU#x*i+1q~1?}p)H-S!nKWEa^cR6JfuCl1rK zFopcAb{xZKyPXJ2wj(yM|Ok#Ag3yNY5tPMA1M+7p@*^*8Qyc5Y5B9f4@wIILN>ZQfFys2@_N9@gd$Gb z%%^=Bee0^kzgQ0itvJld9eAe(spm~bB8{*WF7rx{Sa|V}{=t)SDQxy!cmOFP6``1L zvp(pV1ZPrdLtRo*7P4tYaSzm-#vPKT!onj?4NardVoA!53Bd<#FG#7L5IH%ydit}H zv=3uV(z^eoTy~x+QpjFFb!=wgQZ7Otd^WF$7V9G)A5x4SV9{3FX9w#x2A_mHc{7l4tg0TcN- z@eSl%BSnX;+__Mb@$-uStVR-F{GRSF4{MUG=z)z^V9n2T7^>zf9MFx!q}_eS)h}r) zp+(Ds)?l%S(B^R~_Om;9_0NK%ZUYK*Os`fVb@{7O^Ti6zNmE{H*xHY3VOyL|E6sJq zUdE#icjN}>LaA*1p->XwWuYx}q)d1s(1v6EPOC&6H*BnZ67XKon_Nt!e+W?QuM;+Bh_zqMkm==R4Ig~hD2L*Kov^2@e+5ba;BJY}5M<#^ zPjKx{B5(z|i?#JU?-{*cwo$&#;NEWZNxAMc;TSz@nvRb)xf%Uepn3@m*z=OCM8da|Ii!@Y|K~yl4jcsaydPAx z6J`7HZNhuj$p^yI^W2V7D+DFXAoU-4$u8BwCb+R= zNYIx(vRc@u@(vXe~O3 zj3E9C^aU?TsZ$R{r`?efOd|&?)g)XXdh2JV^oOtXB>eYLJ?f345VmG|I+@tf`Mz(! z2_B$I4lAp2YQj7#;jv!-MgRJRzI)U$Q~UMXR{{9&p$J&wt&2aOAV#)g7Nj9c^^mL> zlydqk4pPHev`MJHMs*5UkqqbnCN<%*>U<6_#0TVtMSUs!V#Ya9dRw}Al=0!HN`&m2 z!pRyG010e(FU$D;E<2}*eIcPNZZf-R?zg%CchANyxIfkz3q$j9*!(k*b;Cd)9S@n3 zYp#S!>x|$mZv0jGZ9i)=r)~-FwcAs2aJY@z3 z&@61z(oJT&inTKqa8Cjtt|~lR5dt^c$ID1U;7*NAxS~fMCMar1)~VEHQBxendYt}8 zW+~7i?!NAP?ncxYlUS|CU}E3LVtXf>MyT z6ut@`BlF64@!KzlMwr5DHaDeIpxF=kIH+TLRaPU74IVBLP)6sCIqsKuxt(`cYH_@fF0 z7zD!&<3JG;c#?PsO@JgwW}gJ|f|vaLF4Ab3A?9?VtH{-*&*5X~0V>f$aoi`2$K=_`r!$LpZQLuZfz?A(nUd zYPWuY*~0fM+2W_G`LK9$#E#Dc(F6?OPA|Pisrk3k6Un-+9McV5;bv65nv6L!v4Ol< z?UOkFXP`VgwAVw%bVE?=qjPe-x1_`!yl?9Nu<~wsLyK68uY-`N?Y33pJikwhJ`vKn z3Y=pnirt@?#80)m)|Kq9nl$-T5RVdlgC>y{Sgmmp3PvI(ciDKp?a$T%&8&9L-7vI3 z=$kXs(czVVN(UC|@TGkTB`?p<`wOP2a>cJ_I=;|m1bETdvOO^6TkF0D1kozv0BzDY zjMnK0Jf;yQyLtZ7LJUBC1i=&C>d3-7^(LK}5!kvQ58EOCgmv3@pYh){QxTB+Zio=w zE9Cexw=N4ne@*kn;1d0Y$MgQt%}t8@$Hu+ax8<9cpN>M%9-?C;WK1xITKvhI%Y=L< z0+xT8-_0#`tAtQ_o}sCh>4pR&9q5l8$*I(ij@(j9_or|KADUUHGXC6c9u0EBtwBKb zwwpjrHK9+9EM> zzR|42QKmwJ9By?qJvPE4k*io0gan?n&EKE;hJ1*l$axY^px>?l*}4yc%}MXNH91_< zu?Bge_xwk>T9CM&>grfYN>u{>)~6~8QXe`+61A8aXSotR0+UiyV0VP$B> z=zQo9TJY4XYkD}7xP?9ywB8@?@DLP~whFnN1_auO_4<=YBDjNOaFZjWl(+)4ZLZg{8M6xgp9bNbhdium zXYoMs7R8ij3Pxl}aaoGc8pWv}3UjCH`P)$T9NPw%MB zW@R-Wvkw%a>3DWyHmf)by`J}F*83T>ztjmwkT=0Idltk8qSWr!dY@@0L9lMFoo*UC zI;a{Z;R3k@25x%#1*CyDWh=UrE#*O1b&nz)&w6*3C64t}1;*P~GHx^T8V4ADm5lvm zaVi>sQ}|$;7ZR`j5u{&yY(`_?DBxct6mAKVQb1F9DdFMSL7SE{RHpg(5g=d*yrd6` zAa)U32Nc;B;TcM5F=owfbh~L0uVi${@h-*iUCZTaeTbc9DX>~iy8GIxbjIee%WJ(Q#Zv7!VSzvKitd4 zQx5D<_r1fx9HdPl$W;NSKH4s+|1^}Woht$n;bIMK^=(k@CqQN2KY(GlYaw{2%c4QK zM!9bnkB*MoJ!JwAY|5F{0F8GVxKTxgWDOK;a3~N|+4h0Tp zO%K@`&E^LyMEB^hvM`w6SU+03n;<$tLp>TwRYT28GmQcDP2z45Y3G`nHS*>m;ZgrE zwcejLyukd8(ephY zgKFekoRPF!utTXmu7BDcf|x}804P2sB6BC#n<}Zz)}y{>n=Iw;;n+x?TnUDn9GTzB z0l(?LwpY}-|F*s2FXm87x~Dd88R?X0W4u}Knf~)O;h0 z?C;o7bu!JgD8fIJXvw8Jl+d}{brVJ}QU}R&Co4B)w4eRKCTK!s+Jt{NnyzNR3*`)b zXdL0TAU1>S*5ulmZ1V?}58@)3uRetF_J40?2m*5$?CuUh(hpDZ!KO+zN!lR)kdSs% z>xP9cZ~348xJB>dRo3;hXttH2GbyR%Btd}r8a=DP1P(<%dr39@-Jw+1mF_&|KWlu~R?J4*XQrJp-r%!B z?mbBThiB#C4v2n!rPK3;eTiBwly`yfp8J>GUnwXkvOuxR6BVlt*dBN|I8oS)e8aVg zupQqMVNoiR-)gwX%l-cm_ZCo9tzEdVY(P>%Qd*Es=?; z^vB7lK@mCeCgD5ATn$w2$xmO5wzas>I-9@i2j2 z2)M6>D$Q7eHHtoQ&OG_7CO*t&!1Hb+)!Es2U$+0io5>S?+2hKBp_f%tF_2bSSUy&f zhFjhBG)cUuaf<(uLuU=dQ#~4ahS42`RWSe*i!WI#@iG|eJCV@Y40%@jxgbEAyj~VY zhLshceiTdngZ|5%)`z-B?V?^92zl67q7zr);i)O^1D+$}0@F zA49P(6^X3>C`EK|0tRZrEniwts zAKM{K78C*OLnk>-^Q_8~N*2=WMO5e-)Yq5rQym06os1Kbllr)1RLRG^aA;>TyDz&e zg2z)*8U4;n3_}|=ZJy2-!N0>q>D#`D8FQEP$Z#(0z)TCBLp(8n3T1FawXS9I-j{wk#IpHo?1inBLd zuScG1Fbi={tOn^dq#Rl$Z#f}i=tD36;sUTLJ~*{)UlHgf(1x(J?k9K*tDqtr<_QCI z_Qe*}LXBQtX7i?H*Ic&Nr5^0e5U#EP3GniJOev)gqgfz}smizSBeEqKy4ma}Otz<; z9wl>DwgP<&iCNU%5t+M=wOyibUQ4}+_l;{UEK~oTha^mqF>=TM1 zPoAtU(L{hy$S@ZZ)*pX6`he%un8-B^wGb8@+_In|ywCznlpIkL_rC${DZy%=n4LFzk zA!irB_wMFY24Bsu&q`{NR(S76(#6OrER${QZU%`%Krb$u!b6))izA4d(P-lC!JP@) zPLqzm!GOidRB6zzc}ANt2G0-R*=7QaJemcY1N3n21+v_uy#bE~yxQ}(;7qxlZ^OkL zLC=lhjc3&jrK}{gpKEdVju)$>w2a@S$S1PWcm8ZuFlG$rfP+;K8Fn-0Lqs9N7mWynXfcDf=M`>R zN3Zmnf`;Zs+%L!~jZSD25r$aY#&a8GQ-6xhYpF$bEZNs?A5N*Gny3Pi*Xpm&%oFta z(fOVTGjw&DnIG+XE-62I*#qET>BS{I(-cYnq-fACkWDC~OGxq|E+TWSmmk$&jwmsl zw?5K6X@Y`mnTlF*_?3}*W0Yj_TYtmvQL~jLs|E(B-My>MHOS$Ni-fgXriNrSR@gN(BJQFHOP0^8fn=oZuF&!p(Z9?q61ouLeo<5WX6xpe1hi4Ai#}5>3H_+sQoV0AbBs0FeFcj zx;ya22;@`K+Yis$U^t#2|2X3gMyCvI4UEtmobL|xaP|1njXls9(M7f1)1TcR+r;40 zdbz)R4Sjx@NLY{^t!3AEg$e=DUTSbqe7RKD3*hXW(2SgSUrb>^o<;rqaMukimM>C( z)&)`@)%-DwCk*?>snP-=Yf{#S1`Ll8-KEwBdGT~;+Nd|=`5(~zH(w_$j2`WF-p>h%Sc(f< zUwJ9kY2@l#;i!loea9Yp5?CZg{?d1X5+!tZGij62Zr!JqA#3p9l}}OzTy|z!xSXvM z8J3!cAC6#`*Ge}zEvDJUDV6M%D~zs(kw*9qV5w7fHaXV4q-<&u0s^D1{BuJSxrfi7 z{QO7GHUv3mJZw>(X(I&GEAbZ^sWnrU29Jr`o3=pAlzy1qR zL$x>rEs-R0tupNn^&J_z<3Z&NGRXhCz{KSD88JqcoiF(IW0?H$yCk>Q-Bv>hY=v}a zkyk*5Ng>;G=lVYsEht*wRn6bE^r&fnXXNFbQ!O)nFLuFX-1pgv&rg3p&F5x+D&J3Xh^YqE z{Sxu=#H&5?T*B`Xp~NLERN)A#*KM6%^R+X05dt$Bq?ZA-Gsf>XR!I>E>%i#Nivz}H zPz-vO?Da+Em~8-F&~a@~dWm9pyCoS|P&#Q2rSV=cncso0>03M}_i>-dW zj;E~wtR9H~PL}OLH0M^7O{J%4dXnAH=T!z>2ldE=7R4M4^y(+ny)`92=k=D%2|DK! za+iHeNP|87ss>?eYrxkGsCWd*3n5C^S9%9lLbPP3flajqJn^9-uX7(o(?YLi=E0nl zyELMPmutfrtJhN(R$M+{#ge=IRySZ7-`d0gPjzRNX-xe2@K3n>AB_s}EjZL02?#oJ3;tpmucaHRHXF>of@>X1cCNF{z4ty%b6XJPL{qS7@9RF(S7@; zwl8xpm%>c!Q_HnF)Ik0~$V>#atSx&o5hGd5v+#c%OS9tChUuGm2Wi}zDN%;`ql($l zG>{PdgJwCR@r<1ejc#r2kP5X-T4N;`|>gSiz$~e=4Zk)!m&Tok1o;XuDYvqHI}@XZZ!T|L65Ok*QI%`m>CLrOZ>NAa%&7n696PjhVF z^lBe_L!NBSo{>HK%%33O&V40GkBCOMR#fy3W=yFLJ} z{Z3_(;hKjFHX0jG)yJM9a_%B9FPrU!OD~P?u!UA3iXwX7umxiMO7- z6}JKi8L}mB3Atx3IAgSmk1g}>oAGi~IIep7y%``|PF)PvqO<`1Av?&z8@YUo7zo`$ zoVq@EgJhuV-#9rIfQ=$mFa|uGn23^YL;{rT?J**!Il!4yRfZ!0p-d$KxTS{1s? zi2%7JA#!q~-|cW!*Dh<}W?-?lmELv@CfSwcYX#;418WPVXYx>`?3Q!9+gx_Iz?^Ao zZU2}z&?amjkX&&LMK>E-`QtD@;QE;1lk2Dlt& z*Q(KqH$ujLnF6|A@Nj50?%eK7T`%ZyMUo zSDDl)f)F7Z>8{vML?UWYh_BxaLtQH~+d^&UD9WB34r3vU)C{1m?=CUm&7xOoPO(S1 z>=fRiEWVyLY~f5eyCCoK)y$+ciEyJ$5_@~!BQ1l6OMRyGSqcqC*Ot5Q+kF*?x>FDI z;?A>}<#0>WA8w4C=#wu&d?m9ZW5)SF<&D7n)Q{23a`6umv~>jzT>#Llf-i?uX`0wq zy#sW_a20RVz4)SxOOxFA(X!jc^a)B|&qWpwS(VgQsBcR4e)Z0WvS5gXfpoHU?w(%UtRpRmWXB5JTS@i3(xlXCW3 zOoo#(s0F4!K({H>Vgzw5!jx|I^D4mf@~5d6DJ^Je65nz?3vR4>=6SVtW-X9G)y{8a zI$=kpxEq%kg7(h7_`Pj=z1@!I+G+Sa*aq!vw>|Ck`z33e(rdP@j5!gIqvZ@ZU|Ls~ zflRBG%APcC3mb>5zlF06S;;OH;;UeHEi$S36pil$1eXVQwb8N>0l3BqSLq&oBar13bb?iZM}cfy(owf$9XlW}UrS4;!>B zcN(^zj~Wk(CLwjC5PYWbt(Z(S92^|j`rxT}ENmpdjcb>!))vsbItJ|M#wpmc?wd%g zEjhIaYa4)QXeXHWzt{_uKU|$cQBxT8)#CJGu5}@4yG+1LJCg$2_smimC6UIl)s@Q( zDF0kYEB7lxR{WPUUy`}%C~=fny_=53FI1pp9cB63&^r*oU-f67QYGh?A(i zX5FQ;QHi*>l>E9&FdJTcv0I5Am96;51`KmTOX9uT@FHvt3sT)cuXePBA#s+#@Sw%B zYQ*fTLWeba5jg+q;*Bhrf75JzqvLS6r6OT7jbFM2=qQiqB84Yb^KQ-w(BIzlP$}IS zkxGy*SuEC1<)2K?Ef&l2a61V}9tw+L4BM7_BBMwjywpH2f##0jWzG|UPmTyAulTDK z(A?z!AaMZ!`bH-8eex^=!a?p^H-?W;edumorFX@B@$_t%b|~tT_t57z)ER0@UKco> zJDpYw(@M?4;EVn$_4JRaSS+-Dzv3)(ISRm|((a^F3*WNQ4f)wguVi^e%KiM2de)5^ zPj3An%al6TJFQGlswS|R-v@c*m=EzEeQT^}q7%m!+GMMu`dJ$R ziEvmgW>U`48uUv(l#eo<7qJ;^p+(bB)}DOn33A4pITfWDR83EMS*$5&1S*~;d}N$>9bPmbrN36!AyZm-7A|; zPcoYaVm`GD{#Uk7JFc%X#0;Tlx%YLi8vgiCfj0|uIaa0_CPEu9Q>@g+1T9gv*r;1lPTr;r(1zW*7}v7x&Pfiy2q3X~6D`&|m7?7vpXj+lPL6di6H zYB>0TF+}RXpLmEpOa09hf661_LR_%CNUbM6PLtf2p2ueu^U>gXDn&>fmol@>d6q8} z=`DB{5!0NL{EcN;%=;LirWSx}BLzodwmfGj@rAAW@}Jb74-ai5$@mWL&*EM!qT9s5-WLMut7XR6*ejZM_Oy30VsMzQ^AJ zj)vnl6IVaKOaz+MS}t@qurjp#Tm?Ol{z;6e#T%Wy~oWba8%SSf|2>*ryOji;PeYw{T*j}B!a7L+O9Ub^a-?R>E{z1U1j9@^S-A{H;Ag%+^^ORm52ldb6(I2cbukpFrby` z5vuU!9qOf34zA4B^4pp3J*CNG;C$Y@vMokf&C!~Ad384%ny{yqGY~i^+A(5g+dn=D z6fQ~_DoZR_$lJnihBC0Tc#(xGnTp_kwcD=PLD`p~>p~xs*?{HSQyjOp;N1~~g0hVs z250GXyW~C6#W@pN)<{%}jyjUyB1}}GAU2t!ked+XROXu|M!6_-w=yuWOg}ZLYtX=_ zS=VwX8p0Dtn%&t#XY-vHYcTur#&-Tz25izv`a)v;BwOib#qY6y)*Kd?9uXvFv{{n1$0>)q*)Uh*}x!Ir(LcCVZYxv7JEe zn`YiYdN(p8nuL>;!teB?>n{fLWvdh*(R8Nz@=_E3qPdY7TEdtZvSkCkN8Ax;#DHxb z1p3n-2oRg}Gk?+`{gptlTKC*}nAl(VnU+kxI_>HkD1CMATvlLOzXYUK;9V1+nMb>) zfk^U6-6>Mx;$dF6;1Ok7vY_+rw_E)dfB+`~4aoTOrc@B15>dG^F%n^|WUw||H`es< z8?xrm+(iv7g*rZ`1tN%Fxik+pv+iNrz6(RQxWKR%RF9;uK$G&QMI%Xiee^lBamPYd z4Zd7v{Pl%1#8=cNm4e8?-W%qT$Wj?!{&u_0eJqAdzpxrr)Ax8Wz@SGI#W5M%5b>+B zZCI$ofZ&4{Dh#f)3>8XE%Zobhj>qlt$)~}+$|1vnP?rQe6y}6JiToDOTxe)01rG0Y@KO8^frf~^Lc*BBmY!W zIn>2L8&xoeD(mL2O8JPml%&8y8AO0K z^*-b!_jCN@J#NB;F1Lg2C#*s8_-Myz_x2aKO_Yy8)Oor$2DJ>hcy)Ugqy|^4 zdcLU_iOB;wm?@^}WcjsCC#AnrdGBOO6pUyhx0S`Uq@qCbVt`b0ep;G@{RN(MI1*W(jpwyhh zQq=}e0X@?GqN3M3Ro?fWqg5vagf@N$Jn2XDKZ$7+o@T}o0>F#S3n~GEoR0@*ExkeP zB-oPg^uagM2b#x2z2Bile-M}`$uA?JilOnpw-%txBBmvQyDqq=*Ia|Pv=@Z! z4Cef7#KE_LiHDWy&y(}YM!u;N{aXT91nsDiTJsH_TxMGB^&VZzV{_773tQ-sIp{e=c$h5;xh*s0q|6nM+) zjMy&Ty38-!irK`3d~6!%NLFP0NklHH0I}o52HEmfJcjiBPm`2bSrh-I<~}q^I-?EL z@r}1M_u1#@*4|EdE-7oq`%l?HM_DW$Pd9UgjS4@(-Hh=TQiys;VkyzZbN!D`U z>vwQDGq3US%xN+;o|7-6@oSeCD&RnM&xM7He6YqM+Xu^fvPI88J@Tr(E`f@mtQS~K z|03H0BPK?9&tZ9=>0kTbxT;yNIiN6nF7u90PQsH-xAy#ah;?@Z-_$+{am$+m!hXE_ zy5spPFyTDFM3Uc<8_#cSOObtLIAR2JWPVW@B=iIYHIVWfZlZDE1`2f$uR&brb4sm! z|NaUFPPmgCo?!|-KHFV7ozId^I^EJ33X?Xd!6N_55%>I88-BiKnq%JI@6MF~|HN|TNgHJFnF0PNaZ`@F3&5xPeI z^zTjj`471Q=pUu|2LU(P6GkF)Vi+qRM=0{f+|B6XQp%&g9shpl2z~{agflnBK;QH0 z|m2iF^e2_ZL4jscaJegkyCD2^9&|2q8!H#W(rBnqBcAjmdF^5Wjk! z*^gJ2WMjLW??}2nSAmJr^^r-xVH{XC*zRMH&uNl&#Gv5(@PkO!TgZF;{pst0+OuzP zq{O`G?Jb-~pc@-G{a{tqH3N5Ko9xd9PokcCeo^63<)S5&>T43%kxkMq61zO#_t`bx z3|@U<{r#!)?L6VhRI$Yf!7g1<98DlXg*CiCJ-XVd1n33-!%KD$mfdxJ%5fGQcKWIA z6eX-Ik*4D`zmN4~>6+*Z9h4IEGcf|_mdDQ;K0JbBf7Nt|_sXY)q^++wJOfL;Ba8#y zzdwRaBl@2u;mre*sA^L)3>k2enXw^tlp5Y`ZtlVdizUmxrZCpFSsxu=@A9eoa4qxJ zMM#r6yx#Wi?ff8`YV8qrIDUW0=8+^EAt{5UCKo!bUW>Gf669*CVo_st4xX11CkKl{ z^%Z7PQHI{LuIh8yS2##{UQ3Re^83fuf*2JkU0sE$P|Y^)--?R&QVqR^>WAPZFlxwu z3VG#H-6~Om1!3o19Eiyb^hKL|F1JRpDRrb&KALto2kXVB&jxJ}nd=$&Lj|L#+E@qn z9oZhGxmlxfuBQt4>|Zb$ApapZeo)+F2$4OF>7g|KiCEZSX#sE0;@9cNZlFbBC9{Ph z$NDaSGWR_c-Aj;m!8z8}(&?xChTONt_IaaCl1#7eWlxHl#t(kMnWeqSAO0eX(h@jme38|CYnejoobM za^eyx?x^=So$^u1(Z=EHd3XVWkoAM?oKO{ckNG!a(53Tk4W(lR8rUdg?+p6jC=@UMl<%y5xSlpx%QZITcKQ9vjNuyJpG>xUu* zD15G}@(nX|OXcf$M|coAY}_ns&rB(%LS;b-&i>aQ!r%rmk$i44QEw>mh^AwU{Fe^X zRAsFq^tF#!K!Ux@B=-v-`xHXL$2wlykb8Qk<3nEAHa8r*>t`XKeHULNyQf4De}7T< zco*`6{qw>xD18cG9mBRYX1l8BH{}o{+}Q+*=pQ-Xm+CYm+^x3aRXJJ#pG z{_%rQ#H*KDMFUGXj_gWg1 zGlKB*%0>pu1plsJ|EzMq{vy;gcr{j8LV;3A+ET87a{ncjizZVxb(iy2%8)|>6Ywx- zfB2LIMJQhF1NyPf9hP*H4;pv58Meu96oq<>rCU%yhIti6`KZx7~_RAFhSD}Je0BfJ0!bJaz6WL*%xK+IP60Y)`^~G0n^5((cs*gv^ z?^7ZeFJAZoh*-cv;@CRA{$-y(W8i=IsUvW|e3(-9AOE7(j<~ne6$D-u>e(<3g)6?~ z#b6|*8&J37Q@pTW7T5IrUMu}`N2oaN{gQR=b7PU;k>kG}U_OX-@U;l#pIT#Hb+0w< zMCZ*4-O*G!uv}=vvK{F`!8+$w<0cizVO4t zEYaw%(QN)*buF8o)zHiGd^xNqEqO6FQ0&CNl*3yP${f1I>I5HNhRrE(>g&+tAF5hr z+>QDBn*Qs7G1>k1PN)27ALmQvg3_J@+?um=eG7Oof01YO*TO;A?) zME{nL^(zqYHFEgHugpa=(fZ2uB)>mMle)vx4&%Sx%^xQ$nE&)IR)6{z$6$+v7r%8f zDe@6?i(xG#;KbzsBfV<*Q(b?b^REvUu7tk6OLa0C+mZ*zzMJ5?};Bp3K)oeTa@f5eY?rVQYzJT?Nv z4+8r?brxLhtkzF|uch>TlJa#H9q>ay7?}20{L`X-pYyK|taDMUj~gmzk^i48^Fy#y zz^fmyW%ViPN%Z+;D8GWhzt$h%zd)kF92`bd-`AH;exJcQiUIRms4&CT)zzX>5+Yh! z1lR5!i_6Pz%)9IA+%vOsNT{iC8ya{oQzf#*+sCSC*i$QGZ$4JBL$|D2bh2yzQVO51 zfTy)qi=xBpd@z}AM{RbTU+&`Hg^*u=|HyKGKcCKpu=fTQNha!z`If>vs0Xbu^WFsz zQ8D73Y;`pC_KunglS^mn4ae@Vr*CFwW)d?qV@IJbnvA5;adXcUZcdT)){iX442_|M#u?WFVE*E zk477z)%j`YTE)J1Mr9`j7VpgC;!jt-%F;{n@6Rce3Y*%$q5anlOmfNQ@RF$>^5QI9=grb{?@&;Xc42_rwS?60NxZ@2Mf;laK`eD3Yr zSX3s78^3Ig=G9iL)Ift2!uiF8?sWK@ct#6W(Dlv1^>D`Gn)(moI-?yj_uJn7FG^)N zMVq5fo-6s5NN@m;u6+rUEB@ko8!batXmt`{eOS2-E+Ik9c{^czpv04Ax8AOVpaq3Q zqS}y~o*sF3S7hbub8 z5X3+*Iyo6BiA4QlsPnB8#SnP59GmlfIXqrlbcc}{WPDy$d+z(ThGPY06vod*JYg8PKo?LQ^VzvIF`95iLUdPqyT@58R` zyW^o%GyAYp3ypXdA;kR+EIysqYzyoRJpa~Lf|1dQA%O&5VzrMO_j?4DcWb_PDln|A zI>}X-Qlz+CdzKNB*z#IrMF4%=f@?0vsvz!#^&<(4fvc~KtIw-k=o+He!NKP%%!B{I)&yfgX4 z(~~zS>^&=Vi)B$!P>~WoZ6e#d{NO#smc>ys)--_|Y{dGV$IdP;Ehw-s6wOw(ti2Wc zE=Obds%4gF?jH51Pw_&Hq;O4D7PF|8%|sTTS7`-07A9h;4Nn@$61i8lsiyw&5)1Og z`#{>?vnv08B>^x_z+_vPCzo#R=+&^9_2vZ^*m2Fa7V&iDI?b&An9Aa@#CBGS($aQ6 z@t`FpIO_{h-ffXTaG%0~G&C|=9L&)c%6MD~KI?lfTuF)I=wQ>V5HTAVw9oJ+HZd_U zg7*q(+G)E(@NC{Ep0h&Irvywo?|4+))P9qn1%E)D|&QvbpDP?EGnhE z%(ju!X|Wq1qPg|jr<6yZp1u;(k7ZU-OD!k^^YgB>F2iizXkNR0a{ngMm&(m|)Tq6B z(zu5Xi**L~<@gA&F-BguF7ofun~i)I7n^0G0=!6Vq=LNAtbhZ$`CcmW|HA>vJQyF* zgYjW*jFj8=B(V_MtRU-GMv1lHQk?MH>S+p?@$y1|k1n)0`R14i3qfmmH;ePcfU`#tatS;i(uBMwM+a0HWl?TKvBxAuVJP#V&2CG;sL zif$_#YG9elow72!sN_Vm#KK|Xywj6|uNq_t;;>qp zM1+Tn2ax+W(EHb|M@)BDN{7{Hb%&q%!C)Ewtkk{#gmnE%1^&TPJ%W354;UE={mfB_ zo04mF;IbvJkWaS8ns=(SBD^2*l{vV-BG!_nYc5o0Zr*>+_US@+<-M`CN|D}$^VNxQ z7|qcMAg|;kF`}6QF~}JX_eelq1mRr4DxID|0B4SA=Ym&uZ^uZ2-OI~{#V@#M7GoIC zOW4UHRCYUsMLD8^b2>wX5J*1~ygW7{xk}Q0;!_eL4_k}AJhipA^~U_}nc8G~&6X>; zws|-M+s9hE$X2AUY`PdMdFkvjMH}5Sa@?cWo%zOQw{?;+*d=70FeUY3zBu@7-U;46~ zrlWb`8deRD7j-`?+kNZnYu1-(3@#}_;l7#hP^JTu%Mb5|J{=Z*?VtPgs&Gnd>0V5L zT4`$ZUPTQ$;f$Va70q7l@1FM$)|-hS;th1#qcp^Wbe-5#oUur{Xr=ebLQs85pAVI& zXNrTtioVxL;Cdp9%)cQ1N~9cX8X#ivNT$DOU$D1JNj|9WuxfCN;s+yf9v&yy450x_t^7vtvdgcTLp zEvrBC<*9^}Pj8-7-39suhEqJ>6&)#35*(+bplC{R2{~9_c?LcV?gLkP(I?ZVFBBBe ztiIYVZqGL!9-CWG>ry+7%Fz-qm!#!(p2s)B5QN$;(zMrpc7zQi$UQDnpAPAbdewrs zEF0kfU+#$HQ}QV%H6o6~OZcz3_agwQ9G{Y6D6w(VtL6vtt^q~@>1dH&>Ae2yiwp87 z?Z^m7o9~e#JvbdxjYeSpVWX=5dfUHG!0>;_L*oE!kT!}bQ>92NBGofFbY@0V)6Ri@ zB=^m5o{+4LA?e}Cu!}@o@tA}DN6{*$i0&A)BCHP|6w1NuGH_vpI4qz=C4}TaEE@Ij zwoC*2-HFFQa%aP8QAlP@_56nK^w?})3AC_SH4p2>$LIeJsucy68u^XpY!w#{TV4+I z_k#nm^W7Z2h2`Z!==SDjA0Ti-c60yf5v@U>Sl|)m05HDm7=WD2(L6#mgAPan!1-D% zc(DFwJVyFw>K6S+>L$Z`#wkC{NQ6|!vds?Tv@wEdq0TZ~A4IZ`+$h-skdQ2{ujl(W z3ILA*DY2Zcbg(;a%nK|c*YnLuaYM`9*uZ985iYkJd|eC2HB_0o;d#*8ui9usP28HF zE_?!vit2kQ5aD6ULr-#WOx;Y3jtZ^2IXkBrpV39Kh@Kl?dc||$M)hT zIxsRazVsO5ZX=X4&=O(OxxhPByef^QwlMbMR&rFei zYoja@9QR?r3P6N9%#`B?!2A3U7(qkHRny$>B>YcPZ+Zrc7b?@<89n}-lt*J;CFILe zNDfSe-Md^Hq5`>ZeImoS0LxW|^+ zKRIg31OVliT9TijiSC(C{qH)=pE0(noh&j@#k=?F>A@u5R&OrUx${DJ{--qQ*J%lz zu=k-y6CUc6P^Kw#C%<&@8?Rk;6ht%jKnXsMzY^0CHh?g)JAsH%Vh2{{tQI#n+;;Ix zNgo0he*n<~wAT(Kp%R(CIcGb3K@nu`ftGK$(#K=sxOPl|WN@l*vF*16lf0Y2LJB2J zFQxna?=SrMf4%UOm=GacWZlE1H*1P@JhKD&4z!w+dD(wnI4hOzzII~VqN;ju^^A@c zpMA*N;O=zX1eZ|Y#*(-o1c~tMmZ|r{zJ!R=33)|b&$t;&JgA<}q3}bJwv`U-5=Eh9 zaxydZZkG(d5aRkx#H&l!s>AyyJDRb-{H>?t4=QZo`yW*pj1BcczKp?Ql7ME?eFAT8 zcot&^S9sxF_twuVisTm}k+nX|R38#k%u|FrQjBPK z2;++X%N@+#!9l&QQUvK%+3khW{?yDao`-S_-CuC)zae-)#maipBJ{sq?~(%J%eRZt z1+xx4cyqm@&`(U2o8R1g`tS`nr%*r->)U6+TyP0s6%S&@+SQf1xa#R#p4~ z9x~+AqSjMIga$z{v^l5pQF;Mhcn1RIxEe1*Zp-df`g266H8Y1RG53W)6 z`Onf>>AwX!Derf`mij-#$o8o}$v>BiBAeQYtSO#9nZK)j2D7BlyVx$m#QY7WA30ki z8!q79=->s3Shx_59Ie{)NFVpfzgnyWYSb#TnAURAEq0C;OH4m7IM9{y*Oi6VpQNodmf&)3voQ4u&@815b z4P4Bd75yvFPMp|U7S6vhp%e}%Wh;+TUAZpBEGEl}!L4E6n@n0d3gDSK>v(Wqs=)cn z7#RLAgm%72(@4%X!I49=bFyf==1B~usWQ@`cwAKn()9%TfnNFnBHso?t~>wD^@~Su znf1vrM=g?S;)C-@dxd(BXYQo`S$6mvI4*x5#;JI3vF%oSr8$QW`DlNlrgv_=7=OBy z--$fG7}RN7md%eU{{Re5WB%RYcZ^s8e`!u8>CJJoIP8l5PAi%@Af?Za7N_E{*z z2p~`4FwJ)s(;dxYQEk*kW3`;|1(S#jmcJ!oHk-n>P_KF|DjM_Q)7MZy08pUmC1l;H z%F&5r`?fsg{4dzFC|aI6Fs%5qR!U^=zj#xDbJdJT;Nhv|*Fv8i9Kfl9O(@3-r@d)4 zsxmBRIf3X*$?0Gkk*Cye@r0wgS`};!$7(f~*KY;{e3RV1w^F0kxfY4a`-kZW1xy48 zeeC3dMBC5MeQK)ea-mup`q-uVHfZ1s3=Q>X&LjFKsHmu(Rw304TGrd$Tr(N(f_hRL zVW%tiUPpI48K`$t@zDCp_AQE}bAQK)Z!=xPvVj12B1)M`m3P~CC5cvBKnM}Pf}+| zTVekacMo0TU{obVB!aq_LOvw}%4x5Ti(qI@3l<)}P2|o^<$YMj4hB=igPbQ_s^jz8 znnO-41*AQTlzL(Bh-hzlVq<;Zh;wU--R9tpAV_2WaQ)m6W21DVZ1PO0GcTEm%yD-n z>`Iu&cV%T+D0_W**-wVolkjA#9g~upl7#m;storyc(%jkjcbWx+hNFT zHHVJId(o6Pcj10Zxyv+uwO8*Gjz6UqM)IlfiqILIdK6M~XS%8xX0QIcc6SMJ8x))- z-a{)wGX9@c#J?2=#2;EZuz#v}EzhFp@3i~R1KBaCl^UpYg% zq*$F1iNO-t?#1R8!AfASkqlQ<+uei1@;xfL@Or_=^LiDk%bG+9#zzog1BeNavslvputoGAk`6#>+28tp@+Z_BM zN9q;k;p5tF5I#OJy_l4gYT2rn42HL7bUJPuB+ZRA~c=W%ILFYvnpq7{c6XuCZ3z_N3hjJ7L`& z8D}{k&%9Fp*h0z`!I)t(XGN!5*THy{4(w*;?pATQz}fDb!cRBn!&c6Bei8O_#%LXa zGyeEb-cdw?bVc4Pg}MUq0HW0t=e3xoI0x!Oqd6Qbg> z>3AQid0lVL$GR=iajU=Knk|*#$6TB}*!%@`bE~bakzFAXY(U7m#~1#16O1!)a9nyZ zr=1uXl^m!=n=!!2x{@xrtM5=pmb>g=U4@-ruTjQ@s-S}R`o=WI=1q<|mZ2ry$6sOL zkKphUWc#Mn-3-q&wW?kevifv;vIf(&B3CIh^jSNaYNa_TK*J=da(-QgJXkK4K^${; zZO1r=eU;Le%4UoM6e{emqh%V~;N3p`n;%8xS!`>!MmHWZJ6pA^y-{#=*C)z9CC@ z-nqHh_D~gTQ0`=cs)Gqu?C$(y)TPSM0zV{{t5fFT%9G^r@m@$L0e<0Dmmg|JE2=P0_fZ^o zkj+BV^VLV2g?M9v$JM=aM7CO8_mxaL)FySi_|D|SbFzZ$Wb(X60(;sZ zyWUo#UZ>-<2=UY{gf5o#H+C4OdO=>C_&*ya98;jMihjJ!2lf$h zzWnEB0d5CFGG;6WsONodWyLWj$Zc9I_&ir zzD3XT#JRJ$a6TsqyP1LN*aU6mD0heDoc1qbuHa|%XRluGZ{Ri(r=>D@;J!NvY8M|NpQggBfw>^m)=b5&o-?+@p&7CN7YBUH&;o%XEe@p=FIL>GcyS0;ptuJ2loH%2uEm|;1TRi;iUfz??yfJrd+*)dH}CE2 z41Z*p$qY;;=X=ga0fOt9+gJBdvLI2Dv+)8qT*0g5764YwL!?B16d7Nj+tMT6KqBnV zifB#*oHojLnWC#}+Av5Z3bvm44e(uxM9}_HnyyYLi&$NU4`67}1Y`}fLwBPCC~0&o zJ?&ks?Q|%_UzjSwFAwNgS!7z7hiTpiy}$-nu*A#B5zTWH*X>lZTcHQ;1Z~^y#>FLA z-#@yRqfU|3=-Bvj{qLkf2+_`po#_Mzz%I_=Bx`$u5A;S;y0%|qqM0B%8Y~`?qCZAe z`sTo9ZoDc*Ll8zq$yo>MMiR)9%+v*G=;*v{y}9x7zWYt=Sttv+4-Y;nmI_q-^ht8b z7qNSX?0mj@&=g2qWRhCxv}yPCs~HV5*DEB_sIHse=RQKB0`mBT<;-VeyCdlBo~B^D z$2d!81*#OPNh9!O3*qIwka(g_Mw|3JSir#7g_(#2WL5XWY1+1aF}G_}?u!)?&Pw=q z`GB=N;ACgh9PcACm(O_?yI1H2hMY8darTe4a&Uj9FcLpGL#MOTYjh5naqA2`KQ0Af zkC?oRRSheBbclBB){uVP@88K&{3QEU1XX58Pw=(mRNBsyLupSxN2<}Ul6+Z*uX%K_ zdE!&tyo#?Ye{4OAi<|^1Xz*Y5)&?!b-)lGfe$vMc#fnvxswehx%Re4r;-j zY4KvSqu^42O}oRbP!%0;WPS$*VR$oJ>m5<1(v@6TBIJ78y2Q{8{t3>@jQTb|`@19Q za*h2jddL5l9x3jx9;u!k1-R&Ap&{oMGlI^&Vim6_=O=NrxFSA`*8x!|cF>KHW=G#z z4cQ*AHyQ@P9~Vv_8RXu9cp|LW#&tDV6s`mnNnw!Dr~UeMb61#$aZ{gGkoPAr@G_h` zmU!J|%L}{0)11a`2S38x&d$sYXU9vu`DTFsuJKEh&SJLfhc^f;)pBtVfN-B(AC``Ig9PRj4ao^jy~7n>x83C!kh)gdkAjxEC?@t3JvzD8yDFu> zM{4YkDB>bljU@w%$znbO&+8!?(^ym~UZ(F|Yy7ef%A_1*Pnq!DntF$EqTgMHpmrE8P zNmnau%xUHgaL9_l8Zt#uD_BomH~{W&L9(y+9IWQ5NFR9v!dXqEa82OqIz zlP%#S8^nQ0bvolcS2i8)CLk#T8KEPR1Qx>()UEPmkCcs&L1gZQ{N{?vQr;uI0T&}2L?wa@FkRk6@&-;4y^|MWLS!rBzO<_^Qhan-werYiA?NYAr#tdXdr zp{p}W(DqXA9okw5Ki0=i-21 zb0;M-317`OdO|)(AYQTINQ1;=1r-m0Ou~JL3Dd*Gg1Y5AIZ*#O6LmE&X6DfAPYF8T z(&9|y9MaH>7pXh8LV zpv;yJ4W|cV+D)!PYnDdgAz(%3zM+ z|5yH&`!8K`1o%w6BpVxgNuen5m}sWsceu!mcDOJz%s9ef#DGTuar4q!lx%oD4fP<6 zTK)~wwBq>!#?LtQq;z>&RuM~!`Z_oDF30#q*m?#KVTzm%F_zAx=MMOK-C!{tgJYf( z^L7ILj&k#EkLTS2$|Y%%9&FU|UwjZ9xk*Tc z^-AC_ZjNGgC115%ihSq2lfzTV48A494E!}*c)Px;aSv67Tdkc9Rh7F2hG=tCX2xaK>5R^^^n>Mv?!UAS=4m>R zq(Bi}Qzk(b`VBAS3k~?tJ9XV;2-m;ckefFZ zb$}!NxA$}Q@1|MTOaEZtkaank7;x+NK3?DQKm!BQDx>D-1^f7p7jG%24q6Z|wt|8v z8x8B7)Nn5B?CkjMydHMu3JP3bl!Lfmp~?#otnGn0M?ULGWwPV^)+Jua zbzDfm^BQOBPv=4N=x5hzm2o@8gq8%|baR}K{z?}2^Ngl)SpvPaOAFXr>y+~*#d+L` zKoU@311C0^5J%senI~aPf@q!b?(ky#@q{~hFb6CgzCX=mBnli`?_2u|CM z;zZ5x@H`EtFB|^Ui0DoGki+SP%=+{NAlwqy?Qvy^X;#R6K#&Y{#G+K}R0fp1Bb#&~ zVMJIKT&+_x8HsR29%%YJ>nyMe-)Y;r{%zrvW$1O@peX{K(7ylP5kgQjt1<65sEe@> z>~;7W)9te3vffk&43-go)PCUbHx)5t06V15j=^pFJ_!*6@dnJvp5LN}8?xMOx7S@T zeW=$1TD&6FDc{)rD}$E$znldk8I6RLkJTFfZ7{>9clP~6VpSEOX7TtPkHe4(g&U@_#c&}GEa`6!)^IaDb ztvpqB>us%3zx)Q4tQ}A_{G;{qEHKJ^jBPjfu=x&cp3g3ZhzWO3n?QMCT3uO!EPw4? z6?Ao*Z!2dbB|~HD>|~!dF{=R;WlroEuY0(E$odWbHmuO|!n$S1*JgLOmV87qaEC`> zi2YZ=6`QlE5TD2OEV8e2|BSf5Lq*)ZqCWn%j6ES((#i33?05{~JXKO(FFryPU|0w* z;ciR=<+O`WFgsUs%Mc$SrJj`6vk*$zXDv~o5_PkgZ?b&5 z59%v}{^Y|~wIeBkAG9eTs!JT7M9lf?$QRrOeCd2?Xo-6#*clEJD@55&wJXZ#Ej`184`Y&mS8trazqY3eshd*bt=nU@=rKq8Swb< zUxyItmRP>~tE4ZNbD&4yFl^7<@H49GI|+%v{ZHAtLd@Y-lW!Cryxyp)D!soPu+8^^ z!LM6CY*=31%(me~)7?MxzNK4S_y)a_+)qo6QE_MS>OG={JFR_gk%?qpQ2lb*c6|6# zF*U)gI$glcWYpFz$r3zE&?`h6{A;s6LdC--089G})nUZLI|CAvlsm+{#LpkK^O%P&&#t6m< zxC?)B8V7JWNg&j&gOGB>M~{wA>W4+|GR0H~;!&5kS+8CgTi=PTpA@wUes1rae0knk zoFzM%GVSgxGS$65c8z=xgE#1y_ubk0mwK$^=V>>?j+%PHsPPUEkJ4lUL{UZ(_T55m zQ5EUg$qy?7_Q%^$7*+Ok!y}>Zr700V9+3EKwO7r7_aKG97@ffg-7&>Nn9L)5V4f~+D0uuHWVU*lgf+zXk2+F)Fm7rtSJ_(<3;TVhL z&-on0KjYlfCwK4S*Ru7 z{4+xzS$yx}r{%zXg-~td(8{}coet)V+V6>3hb(s;#G64@@^@dqdZNV!S!X7Tx*H@Y z%w4>F;7+A3^d;W!(2eb@7Zo~kuvkQVn*V%-ZPgQ6!nN&JI1t2G>40Q6TT47kNsJGr zm4`^2Bs73ZnO(YB_;M|k(Ro_&4_f_PQ_bJ)b;fjyP@5vKN*syl(r`-WfRjxTl8yN6 zl)Bf%f8vg&HH41v{?rhQrxYDd)(%u^RAXmEUm9<+3XSka!u{Ir{#4UFcy=^+Kg1Yv zYu8v{q9}kI;ob?gwv^G=?CiD24;Yll-b~+drIogayISGHbZ~5<#WO4@(^QWdRjF?W zm!Z)9Un85)37hVI;k}T1yKXXpyN&i8;eu4kGYle5ctyNKPqEYbqJ-0iP z%v&t!^K=&R>t2gTG|Jq}qJ|FBo}3Ussg*rAkn!F*+1*Lo`pi;a@zSRi&1n1U=(Gpu zlb6ff4j!`D6fX-|FkXi&@R$<8o#WyMMB&(|mWuMQG7y+R45RYqRusixXLDJ;Nv@pb zq%N}_%d=W$CR%z~yJ73o_>^NMtQ1>IpUrj4UG|Qqwib$`{cK5TS%wF4;+V?N!C)dD z^MTLvvpbSktL4Jy8jmUolP-5rQeMX^QP%OFW{Dxf9W|>k3 z;dpSPu+G+n@kFKf{n|t1)-;uZxzP2woPs_Wk4K-V3_*{2!1KxD^{zG8pRwOAcv3y1 zk;|-psNqbUXetHse#MEfdUelnrH9@@vv_yVmVV_qrNp9{!2ULP`PT2rORz?&m6YUI zWU0wW4AqRecnTN%8Vx>-kun zL7|F9+Z(Uk!_nc&%R0kTyD8S?K!1 z&SXSwf4yS!(aLTTf7ubWQI0~InA92(k(tl_*SI+^Zgf{MF~1~sTjLl;e>>7FbnYfR zLc)*`$lYg~YegQME?V5EKkEr-M%N5r;B$^R2pXS<2XFcON2fRoWj*hRq>`1GnTXXDv+4b4M+>UeWg%W4{%-)u#QHSrT0-+ zqs0Fc-9k^WH%kO=C{YZ6?htK@1<6_qL!-2`&(JHL*Antb? z5g+W$I=7X2?_ry7$?mc8Hr}V1%2z=fkchMibQP1ieXgIb*6NlMiUJp*SCa<3$(dnS zwQ9gNPb|mr*gcKP{*v6TM_-kfz!_6Ob7$!Yx0w`oW?GHp-qpJ0TK>C~8GP_1?7OFb zk5!OK$#*qOFa?oc^^FNp!5*mmSqIJ6x)&MkDgfIt+;+JN=4``~pTn8-7v=4KI+?G^ z<13-?Hv+RW4_L9AqWQT|y_x^gB<;i-ODoF<8a z1)y%ca%~y3XC1EqTBWp&X=QmnewBQJ2K47Sq9oe2 zoWRaS-JfoAc;1npBjE$_qIKXQs=KSJb=N3#nP(j*Gi}#}vW-y~7+f7k838=^%u?0Z zah+DC*g+Z+yzX9?BrN^40#D*SdT+5S#WBw%n{T%ZBh9$M_T=ULFZ_yiz5qS0W_v*1 z7BK;}O+Oq)9*J}@{aFUO$J|a%wNjK?PzV3Z44OT?J6Dl`Ln)Rfo>fN)v)O+Cou2R; zord6lCSV3L%maPHox!+7@$fpWpqh@!{o+*Hw=~9+2#7xHS;x!xf7~{9BsABh#k&S* zj1wF_imOQcVnUl9!idymf8|#VNT=%q({|W(D(aZe-d*2s+f}?WmaiOxz!Fs4s@rWgMtIW!LUOWW2-rbtP6vlYnOJ4=95$YIqIPrGOg7ED@e~} z!^}67!sI_fHL52CRCtL=ks?Gky;JuA*>CJ|c_u<$boI2zRpfk+N)*Uws7-HlJ$DYh zPUw{lcChUi8IQ@xi1fL|HQt|96Q`(6x;-EdnG1Ts=&Iwi$vT>y(v|ymZ?;w|%ssD) z*Co>Dl&;3s8Y6^cScpay`6{`m)|XxrJh%4ZM-tH0y!i4sUj!FCX_( za18`8A%-JJd3K#q=Q3OcGkC7XE~Hoko3faji9?kYkk&W+tFhCof``wb=^P|?!N>%5 zu=(_MhXJ84LN^*;LBIVz-$p-#95cuT)K!flS_%z^fA=!d)p0|sR10%$ceE_@&fS13 zHM{!w6?fDaBVr)>pH(v z5F_(3Khz7lI_n7X>h^={xU*b&rU}F7m{bmLc+V*W)}eY#A6}G|^cL27nz;P|4$jny z;i}CHXkn)|f#78FV&(YiFkU!;2#o2jT;+r{P!w)mUs6MRpzns`&l^EZ-1>+l4kvvK zVKr!VRsv6k4m}<;WyVA&1)~Hfwf+@wB6&ROefZ^)SkBQtkfV617LQBd+GAcJhEM z-2->pk9%t_sYzF!UocQs;R4AA!yysystuXJQQ5Gg%BBp@VSk^>Zamd@%go@$PYX?& z1w$foZ}$#}!=-88CFu;~%PJ~%`|O+s3f0@s@g?+ZQhG#hZ-{l)l-xwO*DpWZ9!zw0 zF>IdN_Jf->ofRk4H<=$g+AVK-E~i9Mj;Ii8CnshhvK6C zhnnbD0L>RBJm0e_>(8AV*hp;di@YheXC0&ERVxaN*_{FQ`p>iy<&tWgMKW&fYK6%p z@pMay4PzuaRsM|MwHMLhqBd?E2wm|*5>aXQufR8eB}70H`hYR(%zvcLoL2cZ*LLmdMpVbtsi~p=WoAbzXW;UTW}gkt-WN$d70R@V z7pHNjFm$kTOSTSgaZxSHqT`FU!6g%{Ao}nf=*7A6(kG6tyq?cAg5=H~wk=aH`?oLY z)>)emwNqFhHey&URGLB~%{Mn_1?vAvr@WOZ=q_sLWhl_YU7z2{jwHqmtk9%?>!V2P zY^hGD+N%K$E?)7666nC!hdgF$wMoMM(d&vk;Y?UbxtnYgsClo`@9R-j;(EhfUELht0NI6rk_nm#fc9GBfpV(PpwCc4NGO@X*xC`T|m-!c}Fx zsF&te1DBbVL7Oyq!gD5bV?Ksu6dy=Dcb@n^4?P@8l*v)^FXk=f9noMNFdUwzmY<+` zz&*6IU%#;S9%Ecz@x32Z9Qw>TsLV-HFz+E%XoC*MY^yhX>h1+Me(1@$T8d-IzpYKH zNAp&yZj1I})0-8%s?SK++ZWQ}9<^KRRjrEqeDjlm3}S#eC3Q9UFIw;4%AU`@05aZ$ zP)alV_Vz1vp9uV|&5)!*QRXF(`~7+zdgtYteZExZy1B-%kQ#W(Ydepp!tP#LXbdyc z``gA)DnFMcxWnrvnK&lRTMv8oA>)km?*4vcdJ1p)_lRfP#ZD5<`G^Kpv-yZ{_?!DA zq9tutMx`#H@@6!ic?TBp_%JH}Qv$rP14z>p6VEbBzZB2Fs}<0&;2@0SX39E3TBC#( z_EWS01J+)3KNk~|TGp!NB$iY0#sXhO&Bt8*+e?`XqbA42Aq~3}{5zo*;0AHrLZyRRoZj zer;)rtz)ONsWuoP!$)0TMiG`24S*Ngw}n&DtmPE-*2-53{$d?&=T`P%^P!?s!4A)3 z1G2jns^H#}g2D<=lIP>@P>7;mWsoC-&uy`h^rh(q|JsE>?bU(w`J&fZ3`QvVW#^+$ zsC|52Jy#m|G@k12kYW4?Wv~ZEi_^tkq~=Bvs_KV*%iHTZ(BQ4QQ0Pm}7#Icb5l&f=zW0K+zq(-?_5SiZeT_5-UGS*Z z6#ec?%P9<_vU1JU+Z~SUAMtR*hNq8N&=G8x3>ncv<556w{ApFVDPdf7Ma|^*Ew#=0 z4cvPpjcy(MT^^f`;F!zZZST7=FO-tB6?($K0=c62|b6SqF7-tad+PMM_xueq5?(meB77q zSKh*CNHV%X@{+Dh={9>NnVF1!9nJ5-XB3Z)d68{=rQA0)<@u{Ul;H9fIm`qp?`a)O zZIQ-$e^$AHK`B(;eH#_T!$F?qJ@;&13GYGZKbIVI7UX|ediu%L(PL@inv3MQG8!6^ zO*!exg;?H`p)PXC3h#1cCLzYr1fsnljStzkhK9`N^<%`d$Hg7L0+t3K;%C4g~blnPwxLIGx8yO_k%0)EDflv7{lf z4J-F0)FPD3?Hp}zm#xs9k*uy4XCA)!O6BAtzh249_v9Fsj`oK0F5~QJt0CAQv?+4f z7N^hF2?8Zc<=?wL_D9OM;1o$dvLue z>dwb$7N|T5gXj|V5SRVYgpOv#w+!Z=7!atmqBA6#%uLh%*3Ff?y}YvzkvtwJ&>#EM zU@Q+G^0{O{u!^-vbQrbg+R6M}?F z0S(KJK5*)GI4Df7oCMYBFp!COn`# zFD!qYuZ~*X@hyP)h3&41V?s@vCnmTQGTE_FeciTrqP^kSN*r*JY~!b{&ayZ!2bXmKGg8|V>m$WXlmvY& zmGKO}Mh9@4vh-Pv?kesMzk%F5=}$6`s62A5ZMnjg-6-ofb^ay$iLZ;fv_c{wDhJK4 z8)!%bL-^&i1+#5&S*9n`2~TD8BI)fw#d)w8e{YaJ6GSi5H!g z;UgRHU%-znyk?otq1YNy@NWuZdh_1zEcm0);08@FQ6f?~K?(8Q0xTa{OcvhDMrkp{ zP|{}-B@*UwN}R=8?_fe9=PRMvA$QToR`-qV-ZKZ3OI7B6Wiw1vTU^O18-IX;;T7OkJ+R5~_t1!} z%%7ZrWUTB|Kv5Nv{2QJoqwNiqg$DiHR|2#B}I5r3g$v7c9uw zkWC>CO^;&KT)t#m|8K2^)6gHVrZ$e>pI2r}b32@3;RIgl?eOF8)VZl z1eth+wl^}`Z9 zV+&?NA$=gUof|>=ZtG zuNU^+mXt(W8Y@2xd&SP6@a-%6Vefms(tmT@GWnm8yZ;`7btz~@C`7U+Mo&pg%+G;u zfmi8&=;Qy2?iK!~D!ofOr%G%Tb-yW=kW*+9uf9T74vgh$Mq@7F@oK(2>j_Wv0)R(pisQ@NO9ZBsFM>E(6U*Es$wn=!NGNEUeBw&%>%~3&R7qfErL<>@2fimVYDeM-A=n zhZ}au;*~U}$lio@?Oh&RCY}xcsbTCM;n370m@-4+O97s{sXaOMjyY!amnR$xX%Rw# zlzvAuWOL@Tmy&c*bpT+$k3JA{ME?GN1EAN`ZMFKYZG{ zLv8nakK1T5_~BxVxs4a~vyKFRb2Bre(}c1lL62f0O1b13wMOuJD8QoBMiZrhlJ@-(?+3EaU?FX<1P0M>a)&u?e2GhFN zB1OiJ2kLET@wt+oJCH@WU$pxv%u(6%V`WA7oGcsZ}yzadmYL z|5JQB?$u-4hsTS@(B-~EB^Pdt@U+sf7M zCkJ&Zz1X=*Z`|=#6CR=Y)hMChT^Q-lRTQRQ^^~|Ek{XZI?rad+((mF{jo*17?pt>w ztcQ6Sv0O~S46qv|6nn{v!0D1DHD^+^6Ba}(VFcRJUrA4J7K2(sgLzFav4WGdcIIC0 zv}wdoTqAQGH4>>-=Bc1wUnoZY3{nSlH1qxqNh^TLclSys!4IbX)zvz#{ioPirj3UIpRyB2)bQ&*0T&O46d=9$#;M9%K6V zcyj$ekEgzo>H9oi#$kZ-zjT?qd8~LuS*d`<;()6a%Jo1?kEk6Hx+?FZxW1DC41t_l z{9Vv<6lh`E+TuQt#0VAXFuV|#cBPmV5tJfsaWfZi7Fjp83YO3NvLDpHKjm1h z>~eOrIlyi`WV9eX`v$2Xu2N(Uurp!{NMmTSH)R7sb=Ce+&Ih(QLF z13^ur)pzzio1Asl)U|MoIqd75z~6n~Fz1-OUlSw+a2M?hI&o)UF0O^)(-nSOba{lu z05{2ck8osT;}hwNx<{!N6~xKpbZ0doK%R2b(I(S!iKV;hwD&^lCoE{)dFUz#V&9HJ z70-ONLwh6GKvK-C+28@H+i~NGx9O(4g3QSYPSvmI4Yyj9l?Hm&l@&M(Jf+3~FZR^c z!r)K6vFsmG0{;3B|N9figf@r!ZWRJ4)1VQd(^D~CPU`EoAR`Z5+91TbnqP<;Ez@y% zvE_V#a9+py#Gr67iCFCD*RTev(Sw>ci4g030y37p`kf6*T}&ui!Y?h2>_zj2)e8#m z>V zy;t3IADntYgY&J=`Q+l>Wx3Rna210(Uybz?Wd6cm|KP0<;v*%>OoRL(_g3rYLkP)7 ze%=>DG}*uvwJNyWn$OCbfH~s%+D!1NV0?x4e8`+e)TC3zJ*_Pd`9f6QZT&9ar|WcE zuPk5fIHHHysl>CXD~T)f0l7V8m26{f1m60adChY}mR~o1W?r@|r;>Wic73~1dy_L7 z-e`Yq^jw&*qWM7V3K2evOqR?dslF8ovQo(bEgp-Uu09v$CWasIyv~hOl(mMb(UpPY z0HxeKT9#1WxpQ0ceTibh->dd=nDj>KM>_>W%`-h-l!0c6!7#ms=a-9*73G&>L5JBc zyW_a1{%zw2lsnPy>Fw(8UP?yQ0bYn~J4zWIwKJI=IuXOS$nOpveng4t6%mf8)P|pq zDdC)`JvO^x`***O8*Y_aBqO-o@r^K80n@Dd{LOqkHmnVQ$c&zRYWP0jPwni}q_ML}D zr{UEmBZg_Rgv07V@E#YS+~C2p?ASVgWxBu3*$H>unQUU2<4STuD#MXRX;x6C%p=J4 z?FFDPlrf@-VGR6oy*Vue-Yvo?vtdHqE#`in;_@#`$1qCeDBRHzdeB+7FYv*=FTG&r z6_$(q?P(Nv*kT?|Eqv=trl+r8*7Yll=nmV>jYlZRz^6O_5ZZQk2Z_E(^!(6TpDzkG zCc}IM_}2xx=GcgZ@^xsBLg;cRjq3DetSE` za(s(QZ((Zo83QLh?#c#Z`;?0232J_Y_0_r95Y9VkJiYQD^qqNYOUFxtM?{^Q$IBy7 z|H~PN$Y>G6EuE-RE;AupOjZED^{;d-0%uC2TjSyYmzZf&(>mxW@bje|VV+bt>V67! z){Pa__8|^6yCn7vnWiMfdUsvW8{vZluv*hO~%m)UZzi&R)oadEJMR`}=GHvQ%QYy`aZkON~JJj>z zCF;`dMJe;>o0*p3qs6&vqSqwcUTsuNZH+gkjO~TPBKNYW(OYY+$pyg@1l1!>e03~K z$|gbeV~0%cAOdrQmsvz?I!RKV@pBB|4@ zR>&5mim~V1DBLXC5daI^odmxZ5gGd5Ftk>HjX*T?m;kXQ>*WE@l63|cXQLhW-jVNs zI1RC%r1nCMwe4?ltrK9A2}3rJyKSE4$95Ud57)n~fd9-rm#1F%scZMkKj&~#YW2PB__d0_`T1=3`8S@KLal_^Nt{0$rV#J#q;JxWb9XG%rrX zqNXY>AmzyHWN?DOIy#jhHCM zRofis?{o3cP?5ZB0JMAC{bYksu1{}kZ>B+0;%^4DGfUmx2L@U~CzSIz@~RVW(*(%z znAvjrPk1(H?nvHK`4bg2CT7;JCBe(Kt%WI6|COX@G)>DT zzWArZ_{UqNBva0rxAIubdtL{00_SO*BZH9w0wc|H^ukhIn{S~v2!%-(1B9?1EAHpQ zX+e`!$GDKA0uCn;VD`wK7jJ04-0}Gd-<8+Eo9Yx;u&=~d0dBaHO@_r{x*@c)uTitq-U*B3!O00y<94&QT z_fU9M$*z*I8z)hs;V$_gPwq@>SMRLSA!#=Y(@;a3nSfYIG1_Qrxw!Bteez| zn=gaIIW2#6)4bfY*MCP-<=w`($w}EJTC?ZLOT&*NzL+o7r+rsV+faWGZ32#!!*XBV znrz|c2h}a`Wvv#%Zm9K7fs*w_#_RIc_(X4}4_eXgl zfPb@r0GamB9y7quN1W$ufp*5qr`@l0D}^K^`qz$Xg_AD+n1c0xvH(z@R7zb*QIn>M z<g;KK~HDqv2vw z`w@(|sT$V7Ydx9~A-gR%@m?qrnhgqzJg`yy<^r#CbuEK>J@|N)o zlP*-w`p##5uW)rSjM~3JH(LKGxI+Mi5N+Rmj2WrDyFSCLh;`N97pRWDvn-^VPrF^* zNo}>8(fIbenuj!Nk)KlMRO8iD5V4++!WWj#|4qI!Li5wO>qIfx{X7+-(0c}Q{gTM* zQNfP3G_pX2i%FDfT^;uk2wy)76gu7! zFqrY?urn>SufR1yLr-FuH&GOAg`h3=V#;L+tq@!}_0^fYg`q?v3x1Iuvd%?2H73;f z^%On@iH+oRB>ORd$Z{$@mLc}gyU1L^3{=})TTY8Y0K_HF4>Qt;i=&;Ua7&1&xY@@0 z2FGHx)7}r@>oZ2;=KbL7ae|dKp;da!<^Dx5fx+GMeBNJse8uYdl z<8A3_qDIuamxk^SGZqVtgeXhW_mMn9wE`v1YFNvLqn>*^-&FQS+Vx;H+Z!Y8ZX+*` z+w{xh9c%k3enXG@ONc$K%J7)s?}n7TZ2+7JAW*MukQP;{!6})h&mh~;JzO2WJXbaM z2}-~J5~r~4+jy|=!;HQPV@T5pp9}@b(K+JF3t6c|jCY|NA9HwpIQy}x6&PVto1`Sh zxky_`^D3V2s!Up#=6z&P6pV5Ta+)iPzQ}@0dllM6Dsc36FTqKCaijbF@I2bmH#}&V z0$Iu^xi1a3^;jL(Z(ehsNw=W(GBrG&HT6Qhw1yR2o5VVHJ=g7My>bS;UwrHp#jZxDum8_O@D=nD+iX0T2fL#{=z&zzet_FDV}DgoKF*U? zC2{Ozg3kY~n6v$CQ8m@wAB|22$wS7Napt|A%s@Z~X#b2(z~SB+l1%jOg?ta~CT`)> zEJKu1Kz<%b+^jbFmN&cO_>ZE_mDSWc1)!yNSbucejeT=O9 z6kH^CSTR-KW`(wYg#lszaVVSaD7k zb#L+NSQIf50eS0EP>S}<@rQm`{}!s=H`xn6&?SR{4aCLgsa;>3`J*~gMbT|4&fG1m z7T4vv`;l*E-AZQh{ArDk*Y^q^Be%%E({S^0rPN$WRJ&p~^=E>*E%6#^5|(7XB!s3q zE$RAHw=o_*+vPY~oT$ZN*MH_qc&+olB6K)7XgAls4?A4myeZ*}TM0N?*P~$X+Le$eg3p&-C%P6_k$5=UA^3P8W zL{J`brF4E?qOsfH!`90z*$o#3XZD}s2S1brZE{J8tF0BP(3|pKL2G0F=0%9ybJa?F z4HML4=0uTg3x;%3NG=cLRnxt83lOXT8F{)GUsBUFNWYnxTpTLRMk^gq;EuKVnQN9` z6E0Qt7Ng|Ft{nrBpWWoJZBlg}x>7`F5SU^7;CF4%aT)ALQNHESO-Qv z$aeXu*eZZ3oeI=(hC$qFvrNVKVHjz_2@BHHKJE3N47KTMZi9N0_Oa}ncoe!CB4-0> z`N@(nn$GS$debijC`cS8MSOynr*z9<7Y4R_o0R&Gjih#*XeSj${>P~3R?QN_+vC05 z#G~H@hAFJuFac&z^TZ2EhD?==*bzo%FUWP|_oFN@*Jr$ctwz5wwlzQF34d}UYf}7A zSX+f5;4|JLTaqH}A|n7co8UiA`MB@_zI!IjyV=*mgG}2l$>rI|pp0-R6fX!(*W~;B zy~6u2IPBfNV(|T4M$RZ5d&dqD#lse*_rs=i_%>~Nj~%ZMg^N>g3@-nr*F=j|nZq|6}2 z?=$w~hY$q>^v|U|<@(9H$@$49hZ$^0ic5i@`-@mzExL1%V^M!;btd^?mE|Qqv?Odr zQ|dgVwlS^btBJMG?m4$?u8&l#<$h63?c|{x$K=_jz*2^J*Meooh|Xf|?3k8Nt53S! zKif64vtu5^rZSqqp2f=_$u&oLn3Fq|ygQXYd!a4by%v|b@4dY@V_2gkgv>Y`@99|1 zxWW$gJ|FEGuUQKxy#IvsuC{s|7P3F4?Amev8L});`bA#9w3cM3qT+`_qO?_?h`^}# z&vy|RZu71t+)rjJX)pu>f916K1fJcI{T`lw8SmWdLK^&8wzRbD)u)}j{L^BKk`>!; zx#kD*W0%_>WiRfXIvv;K`16Sr|FNUbK2B2d8Fbf&aJ9JK1e#9AwqVD{X6R@gpC5~r zL<5{{(=B#j%EIL(tov@R;3pgQ`a$Q(0t%rOQ?Pk;{3+Wlid3jrtg4M{ABG%WUEOL4 ztYEnW*4o~$p|RZ(Ijv$U=iDqwwQGLPc*{>rNZ%G+vzY07 zGf6$QeHR^#ceXuF&`a*cbw)NGon6!uC3wO0G5DWS)55m}ZD%XvX4CwT?WZ`iFt0-| zIOw)BxpLLB#XHb9)`3Xk1y1XFCMBO~-v}boCN7szg(c zYO}sqoh#3FgW~j%m4+$vJz)bW(Wg|xqxiSW z(eTK3>-Fx4cS&moe3W%NUS#5{P5fOeR)o{iSgxgF7dy#S~DbkH%6Ox zzu(VSPBD|u7n6g|DKQ?S-_OmuL{YpK)ArI(RsD`IfXK%}%}q`>ijRQl<%hd5vGZQD zMf6%;ykeU=d0Cl|GXx=p@0zTW@Xgt(+aQcs+XVz$Utf3MJ2pRBxYSs(-8}=+1|lnE z9s{D6cVq{r_!lp%{=K-I{$DLF^;jJvJ}ocoA63uu;7)QSOeZ7C27&dya1P67iv2$*_Ru?&M ze~ln|b30l;c<_DPA9PDTx$XT!4nLSIUNdf@Dh;Vm@fMJr^^}-();RETd(xU*Ju|2} z1NvdRfAaHUKgV+Scx_XD(D4Gg_8Vf`bAQP4;Z!eVA;rS$rVY|NrTWl&cJ+7F%m^Qu&TbH?QudjBPiK0Gci} zQ_}0wIZ5waT?}sa74#9Jcyz7={aV7NSTCi^sd$ zPz*A0*i5k`AMPy_O4i+-p}9STV)(LaWcWy8ScKLPZLTh62hl04r7-atqNWe~R!hmx)}x%}a5Ls832?2=hd5xv zCsj_Wu1<%yj|w_|BVSWNQs{3QbVtaCyZP&jgO$amlV1e=&t%D8)tJ-Ikinz>kWI3^ zW{+u~PD=4FitQ+oqJzh@5P)Za`hu?hXVfis*{XMEm(qj!$)V!1z^RjymnMSQBMl86 z(v7IV7Abf4Y2kAQ7F&9*mTKEMbaZre$QQ>$3kB$7 zW_xc+%Kb$_z8^EvF6c_R7Bj%VY2dEn%ffPPE?h`QO#@jVQGs1YRl3Gz($TLkFBEsa z$p{?G-59#;456%S(p3Dlgb6>h+RXYGuw zEZ)&1ul<4hjbioPjHsQp?j{TOwGArG;P}`U?+xe@=A{v8qob~_cj$QI@C%jNhNNA> zefzE}Y)|Xn3$0||$7j;X)XsncG|)+qu(!($5P6t>n%^HDu3$4?qch9{{PZcjV7?yq z^Z#M*EraSLFXB*9&R1WRz25Om^h6AP}v9fG^NI|O%~xVyW4P1as( z<=nk%@AI8o_ur|SMY=kZru*&jKI0kAt###%&^luiX~8U3&1g~}c8F}6NFrm3BepqL z_0YIa<2{n_K7HUG7dz}SkE-pNT3PFL_1ksM-9`vObCsBs)u%I*k3Z&-ZjceCtMc<-63tocviunlYIY&k!tpG6%`-s8 zwHw{pkdJPLHQ|N}j>nARHe?A{6CU;xu2` zu{yl@B8L6_cwt9GOR0()T`8Qq2u<5AMYLUIAHC+d+T8>leL18e$KlcLaAq_~jLq^m zL{vm!ZW}nx_?XC=IE%?0mi9eTljN<%^Q1dVs*%!wA0(@TAp|>UW;Sbzb)SZY3vp$b@RTvf6A`Q@|&))?(IH1POULht{fK=(r|SA(tuck4+07 z-YuS!4y8y|zntW)HBoHj>P;`%z69Je%f9m_-_bC?K(B>7D22rK=1nA9U!md8G4SKO z%V6>-RxnS2o9>Yd2NO1#6Q!Q`MYcM{J$Z6dxN~dPm-Iv8=;E%EJMj6YCXI^M#UN znzUg1{PyxtNyNz7WY2(mpaUbY3svkbSH6SpS|qOh3aef@%az93M4m41JzZFB6sPn~ zki|C$30w1^?@rv0dTZIJ*o$fIv|(nZ5u^>A$R%7cIt6sKUUD7Im7nuRQ&e4RStJFy z>89BF{MAfdw&0sN<%G$Leg{hz0Am+uMx)c&WvXt<&8UuVmrw>~24~I_2SC|?$BSj7 zangtUGzFe6uHI!L8^wUKD~Csk(aIrCa9=S+c@T#7uV4vqa3iIquRv`3)o+(#vQWVg z^R>SM$<7SnQ0Y4BIrFEbA`HRabp_%eX z7WyR=Uc7=d7A7ky`S)|4d{WUMMrHKIW3M4TGqOBnEt}A8OeX-`cj}yPs-DFX&3@lo zhm`me0=l^I;dwc#_2r|jDbHUH~K}sW{b~yd`(N1c*Jcm0z zv8&4^5yPN=A@)huL_LyE(-rz7_}WeIE-oqWm6|jSHWLdo17_Z66=?&J2!8Vm(Li7R z!D=!wn)w^`sKPxekK!FVcKgg)3{TXg`Le7Ebb~;md>f-MbFXwq#V8y+rYTmfq6AIV z_@Kl>!wzMdEK>bDuHC}y>wN9;EyDSa7;Yh+Jv}^@_ZC@l3K7Ik;}WFMJI5|9=mtwT zZl(3P2U5>SbcRbIZ#*lvcBO2_qmHont5vetmXDzG4+^N@oNfy(^S(Xm;X0ci<|*sM zeEii8)ujr5Wlaixb5lp-acwq0iW)3$XCn?&iqsHDk$l%g5* zWRi&oUvo||lEeB3%#sbsjgd^=i%1jR1|aQ#vc?jzH_$hCM8o6*%=kl{Zh9!FKzH9! zKZ(?RJWkKGBA|+6K{>TDs_FQ$u-ewy4m4Juxq%grwT!J=nkQKmlC71$S8k|$f~am+ z*)Lyft^>0qt#90%M#zvmA+OH_Q7=)by6dCNl+WwpIlebZ8_EJ(S9Dj5n}L<}aXgvX zMKA-h`U+}WGz;Elg-#Z7BKg>a*hu66>J-Z9IRWO2WH?Nxu%ffZA?WGp!QiT*bzDX5 z+uf{8JmMLqVU{1=U2$%^YVR8+!r~LNc8WjdfMl&o>;+#Wz-T8<4(Zf2-WA$#W% zHH)lcIHh1o1Xe&B7D*42OCTLC4uqLLA1RGSPpC+@vK=D)G zz$8ti4!2BH*tF!7Se?M0)~%-(%uz1HSAoQ|px) zT^CN=1Q5m4Q3C@7wR)j1eHZH($jwejLW3XPi~St(d3Op8qy@Y?o@7u1tD0iVjXq^YAE6#O}HveTvX}gU%99@@F9w z+a{cGe>Y<9tthX6tS3H+30%cQyS)JXI0}Yz5 zP?~J~#l#xSB`9Y(N)!v^+0A-S6p=bUgI8Yn8hLC5i~xZjxKw?@;iu7rlNlvT(&n_d!5AqpgX1lHog{k;E$i|UTj zM6MvF60Dt}?uhBLH40M`z%mXMW4hDWwxFk`&>;SDyycU{Ce6|o1rXz!(ImFUPUl4P zn|RliEEtISuA2}Scx&-h?%*8X|y%na=qu<7eIZ(CyxY25nY{yoSTqHkYvRYx%#iENXvQ$eC&}#D5ej`#q=h< zuK2Lg9+gR0LxKWoE#eu=B>%ZEDB4sOWzw}>5UZ!2xPP$mEs3gt(N>F7$QSK4`e&Of z{j^ab2MnzRRXa#vS7`Smg<^8q1+v6p-ME=!N=@Yko= zhC$&@Kti21RVa#E$6C=^I+zKgz-3;QP9{I|pfLPYU2?x-RdvHrPR=g`rQ`EmI8!zV z|JIp2b|A-iKGsJ%tDv>>H9N%~t490$Q5z>)RQ7jJ6f&nJ6L|Q=roNF~00nH9u-6Yk z0WyRS_!IYA*G{)um)Dhip=vm}i}|SG95{Cpb9I6=SLDG&eaf*$h5Gqd)Z7=Q3$G{% z=fyC>o&~kn3-ZLf9QIloN4)<+*GK|;A?nwnHLc;wtKPW&Ek*(CO#al2()^^#tmn*T z+^NpV7{i;wM%ax^yYxLW0KSrK!x)}j1XfrC;MM!goQMj1b12v{qS=T;>R$2CGE@3e z#lf)V-rPYU3U0Pa(p0C{Fb_l9O)MLx5G>C*@{TpYDbMBQR(Dabcb7qAOxbD?Ld3^E zMQZzu^RG#bd{7$F&2zxi(N+!DY_#7p+y0T_#`g}x{;50S_)NF{+c%tL)5&T<1Jg zFh!Se%zO1aFJwCEna)b2P*@_GqZ?k;ViQH4+l=}1qflJBw0@D%P4 zrqE|WBme>Ye2GtUFcay%9ERcPl@kVjXIwnrJNT;8RzA_E5 zWfG2)?5AbyuAgA8L#Rx|RDETr@IhS?SEGa-6I7}9id`{d`3Wy!s6if!&*(;k40gWs9)YoXu3 z9n4k5kt9^QZ=ToeB!|Jh^1b%71@1m`&YYlH|Y8#w>lh^iGJY*pK8@GuhZwcUbkc8QDd|}!9u5-35#d6@P9Pl z{jWb?ebhR-wkCaYb93FQX22<5t{w)?VweH^4f0`yO`@&XVL$T(@?U6%`avoSF^nNX zKCdhkJ}5Ut4ffD@Pc+!7+BU#9swjRnAQC<^1ce3K%xaWNMY=GfPie^Uo#Q-J7I%kh z#IsxNX~GZJ+NH!OMrdS0Z^?9}zIqX@K-9d@<=at^CV+;nLjHt7B{~>*F{*xT)E|J@ z8K1P6^n9$kZsk3h-B>A68QXv)`W* z|6+q1Z{Q$)=Ch>OtJ24}3}~t`1g)(ZYMt0?>W4UhCT71^NlUuBjx{E6UlBDawA8M! z#Af@c?$w!6?{04%1xmE&a?w1dtg>Rbhdjx|=>meorBZm{_|ka!SIvbNdM_mj2l{Bj zpqG*I#S1XL&UARCN&8GtpjQ`HJTl)w z3uQA>E%;V=bS7L#4Fi<(T|F{?nJELzl3qt|52_^;mZ$n&b1rPN5f{_C(XeCYXS70C zG<_hs#vcEd=y6K@2hqdwY`FhK{NztV@=y9q<`I|gQo?rLO!kg(vK3CrCW@B<(5L8Le05yS#53GE5SC|I==7B2tD~Ka- z*UvrE$QFf~F+82B#9Dq-CN46J@Q9D1{~(&Rrd1wI5pnY{KiQW>XzlNft^l6*J%CgI zmZ@g`&vi$(G}=Taa}aCQ4>@mJ(l^b6Ka1~4I&#S%KS-Y1P%o-17f)c4c@%JitN3kL zTRyJW!AZV+!Bj0g-GGOEEN$r%#HOaxXaWVJjfWN-=7#xH9E~SckipvD&&Nz~kV?wN z(wyNDo0ZLdp?3igf%v`OV}n`BT4cSP%BoiDv7al{o<_JPPcW#)<}A zgjQP;{0lfhw79>p7XLXl{xQ~d20hy_RBFoi(HzxQy!QJ&lHmtkn96j$*!bt%9F+Fl z;!wX)ygwz%-5bMP5zW-#ZoZKKM%#=Rs`}0b{S!Z1^CY4E1)d+DW>f8pwfg74mY;oM zpw;`d0$Jj7PJt7t3=`h;1JoxNE0&Q!UEBWBAQG@YPN!K=Q2w-2Xb;-L$iel>!B4=|muZ{C0kK&Deyz|{=Okl<9ZyvYNvF;v#ijn}g z0$6(#)&CGt{~2R{o$3F>80h@p%TApC?;-#K_P>kpzl-p{n7{}1-vq|qQE2TwR>Z$; zvVT@H|K$wdDEj6!d&(9y#3ydH!OWy6?0;(A{blC;e&E9fXd|CXl=byJLO^X@pz2o& z{O#x<`^4)0O&+b#DUU7s&o+vGDy4r`Q~x-#sP&7>-<&i42d~gh zxDWwqgSqmfB^O=;bY(DtIqXlC0lfZQ&Ohw*15VY#-`pj?zqo&K{E7D$X9lGLoO79f zg`7NNsuB##Vm2Kd*hdQl!HKD;o|=47ZJV5|8c53h@kve&3Ft}=g!ad3@+kqDwCm^O z1^&z9PW1GE6!7W+Pkq42Qr+<{{@%Z22*tc`zsL^GBkv@5tD&J0%$Sw%udRy{HQ;sy57xf6lN;C`aT88!}X$&`wH6;ifA{s$i# z8fx;;sjfiC0~>>?va%nLaUJ72&?_$|*DQh&RKStA!E7DlVJ_Hh!Tl#&2JA2QOtN3g zxRjYbQ2Vb1`%gjq{eNkp_JIl3QB^?rMHPtWpN+H5ca^T?S*&Gjq}mM@2G4_!fOcUf z*TxAhJ@9OnV~kza8$b!C+HOx@XFAS<56WJ+#l#k6>%t&vNr7rgc{$eB%UE9|RFN9r z1{g1|H?(gA(tUrn@VmpIqFTvC#z%+L-#WLK8yjj^ogkns9++VSsS1A}kzU8adO=Ld zs+j3TBCw4VJ(>9iAh#YQJHML-2DE>OD{IvINy@)W&i`~^{^1uvwRvQc_RZB4$Mfcp zZzQwc%SS%@`B78xjWo|tx$mLEW;#~}R10mVA!eDk9=s26J{}$d;Yj%SSe}Pu1^CSKu0(Fby%MxGT>@d%!8*S>w2ZvWu+*kGz zH##i-{vSW7sRaV_-j;UXQ7mR@X6bB|%4dK7x)ipI5s1qJhp9W=?Di!3ZYJ6f07kDD z(d559kpcZ5jNP=5yV>#YCjWk`&2_&F0VzKK!hK-_^>x=48-0@bn|Qd*uR8Q6 zH-}9wxSl7!;IZE>sRQ+m!sD@;b<9-Y9gSDHY? z+&HuZjJMZ1i88@`TTM8?1BSZ2b=HP&<#%`AoG&27z+65WOkJC*<(6MvVA$F_-$3i} zyqn!Gt1}Vf(bPf3T_`q0OmetyVp~2;VOtqHVs<=TOdBL7rNLw1zWEg7FyWb+`XyU* zw#-Ri&8h=t;;RqQtiYFVW_3ph>E$5MdSq18Qny&q7ZH_OGE7ac)pQ}?3nFBTH1zCU za4kSXBT*xct6!g#B7)=B9w@3OQ=MLZG5lq>DJR36y_utHD*pVrM3v{AqL#Q( zlyfbVqqUU5^+1X6Z&>h~0R6sy{&DOs2zUVb>LsPs!8QW0c3xYlS5 zdy40$J8MekE@G?`5i1)>j!*9IUG%OC18KPqH_4D9*62gm@Koi{2Ks3jAvm~;2c-Pbdcm88LKB9_WaZzxjl?P~`7fX`9?ckIwx=n_SpiQvLUr1PuHZ;4Ub5 zbQf@GsmVGMIxK%cdOe1Uli*|&L@;;P9R7xiz9XITponQO4p@%aDm%My1Y^3QB8aTr za!Hm(tF|EQ;%u3e1zanuh7)|Pwb6mnsb+|TfP$@51@ub7EZ6Kwv+U+V6(xP$CT&+K z^6O7W6+ena)5%M2jA$zAYAbqLf^&^jt85o4jmBptMr&*eAVX*6^WKHPKifuSg(mqR z?nK4O+Wz6mXTy5x5K$f*!e@ZII3gM3>^V1I;9R|N_a=ZvRxfH~0dZ>Vs7i0JTFp2e0G>|FJ%6^N<5DezzEW^<5?n zxr1#Hyo`*DKV%;$SO222?CxZmTTyie-#S-o-F~L1DQ9xmuUh%I!?ag@TiABW!%={= zq1QAt3?e1ILlxM(fGFste6h>8EiVJ%WqYMxU00eX*3SY@Pr8PUU2)zuIVr;Rqv2-Q zp~bthMwK?F7TV~TIJq|1hJbf@ecXbc=uslx4-SSU3_iHLe*XZzKs^*xf7r9T-)&iX ze769bahy~FA+x-5&blNSM>_f918G_^Gp6HE{6`kPY67{Rr9mVB~Tb= z<$+nLLlst28sl#W+U5GqnsC$q;~6jhct+>#^4QDk_~fA?O=$_PEw;;UXQilAf8VX&&(`N6e3g+oE{Acq4*?Rjk^2k(cG(V}j;!nz55qC;qc2&rAFe#rU>SFyk)m zqPf<*NZO>3mD8$nD}>f~oetE3%356}92 zEjeQHEv7%{vu9fU`Lh2I4HUgUr~^;T#oL?TM>_n;r}xoCd#T%Do9Mf)$MDMpel#)E z`XbeT1=qe*RKA?zr^00||F(Wo4Cq^Y0qE14CLBGfmd^ad>{)d`qNXRO(gqt4yCcBA98KL|yVF$vFfE5bv+#n)k|5t{x^{bs>$ex^z76Po zGj%YXLw-Sdek<2V58jOJdsr7PhNdTkF2~H3S(&kvA$LNnd*f*|Qal#4&S3D)p4N8o z`}&7r#UV!zsBh+juO~U6mxj~4)2h>;zu`K z_en!pJM7zFB-YaW(ca>Q?8BY2^nx?DG*$$bj>$SogkpqX6+1QC*xHq(Yy_gXcriQ8 z>n*RE%~|TF7TTYOPDp;Y{`pq^a1Q^$nDC3Tv-vbMo&sYr)m^3vi+ZnMyZ~EKP>at^ z5RHISkBlOa5K)qPV30vzXJQyRx3000J^8oA0TA&&N!JrtIJ!T?=+JG)3)MqY7U-)+M+cyO++MEn<)@u0h|= zlp|=;CI*H1zZLu`N|c&hY0-??{TX`m4;qi9S19q@`9HryAWcNmgxk~y@#KAB z#tcSAJnsThcLgR-X{B{>LZ(T=3qw?$K{tE{dq>XbtufhV%oxQ4$ z6^K;@T|i8OSk49g()YY!h_uoK`KU@}bumBHxo@uYIbv0j$j*>x!VIXooKQg@kNRx; zBFd%FC3`P0z4fRsh=$1(!a@2P709tS9q}RJb(K(U!UAUgc+4&fj0T$?00lkf_8;wX z%*=v%w9X3mgn!J(CYwab58Ly75lI-{U_=iA=bnv{VfI!k_Bf*R6OXT3c>X42&CI|2 z43m$sIZNLVvngN_X8kcsFaemYlW;KLPSDxT>g4YY>jwQw?2j~$An5+_f1&7`+u+l6 zu|=2njq+#049lydmiXE3esV|z6~_lBB= zc_l7^^V6yljo+k1`Q7In1+N7{MFz&>qM{JgYf9_p_M|p+iqc|vIgSB(>gLn4-a|-j zhhAw&mD+srZ zrtohOPx^AvOJ|SNVTq)|T(b(*19c7K3#j{d4p&WMhIHTrprBrljv`tf_Qrh>wzids zaIY?YqsDTHD;s@c9T`T+kPK>H>GcV;Nvc@z86CA-8jN+-9!@1!DzRj)wchf*2j6J5 z`)d0J1lZK^X0%>)L~Dv<+;Wt2lJmLTU1j1GS?GVJ7la}+_r);SyxO=he0SJI_^!n0 zOyzW+Jm*X&xcz&}Gj*96pj*T|_(1U8!ETw9pp1-abgu;oKv!D$f2rVt$IvGr9{OMP zmLLaNJw7uUn~*vPabv~o@9O3$h5-=TeoRUMxYH!XKU+xdcOQNTtWF*Ke-ta6MJ5!x zLOwi+EFZX5U8sMD^KfGdUwZ6M9yAKuU9!Zc_X&YIy-;4Ylu<`azO)#jRWbPB8vzwl zSlpIy#~JI~s(3_{;$mIXgwD1H_0ga#^ir~GlK;*9S@!h2AEtDxy4|eWPUVgr(}TmB zD@lX%s%0!t{<{p60e_34OH&)z5W<+kfr|TavuT!`T3z3lKS4!7(Dq>n`5cvT1!DE? zXd@F_cy$~;4w|c0=YRv##cox1X@mJeYks046Xh-(7yX+~-MI*m!yattrAr>uWRnP2 zVf9Jn^L`8gRd?Ma5}wbcZ&a}11fSpONkB$f`o0at5gXrQ(AXD(b@``1PoKphj#XcG2Kfw}jJCdhhF#^NYvc0~UK{RU|Zd)MryQU~uzdg<`Tu zRbgTxdZu+dPHZ+GC2ZQLa!1T(qEZMqzPfTEQb9wU# z4)SV(xnUk$mZx7qj&7}_7mJq!^CTw+YbWQ-@qmfJZrZ>wRbB?l z1u3kaznt6uCq`(Y{vjbJ-+{!(e=?j0DL%=m1kZZNr0e65Wc`5l>d=KlM&Zk9e^VZe zR45xWv~$m_T6VOoh}b8bD>qBW{;JK10(aQnNw^W+)Fu<56%%F0H|?4d@9A{xM=@nD zF?$8+7hssjrbB})OH425r{}9Y*D7a`%5H%wK>2~XUH_fWN=gRT7P}=n zLuDd%`4L!42d(MvWCm^C7na; z3SU^T@A>DMzBk;;l1gynJgDwodz&B%fR8yE06tj)7(G5AY%|8I8PRHP7Au|04HrC} zli^uEz&BXV$HS2EC(hT?iuUW%IQIx&EBf2#Yx4q&6)GMDw%B4eb4JfZo>)gs5rvvKR~!5sG*70*;hPCikm7QWC# zpYXOd`?lg!F4B8Q^saxLP~By?*7|l~u(xmbJ0CC7){Brr68JpvXiYhPR998QRaO%V zxdk!_{AuOwA|uU7=|QSrd7$oWB{pnftD3!se50_6CM?v{6jS&!vY{tXO$DlfR5a_c?={r#s_CCeU=(E@s^|hWy-LZkdg*GCKy#6W zH>XCU17v=nW3w7x^?Q=d>znJ;ALY=z1scAFJJCvcoEorX*6ml%g5Pg=?=C}0Xf`1| zGPM)=#bDU?J;1$zG;7~BZmKB4KV>4P z_8pol=@G?16Zvg58=88R2ZJwpNt+i4b2vvBmsZRA$``U+e1?W{t*$yH<1IR4apJZ@ zc$^74gI}*4sZH?%PXFs)tX>22-^iZBH=+bmR$0xY($?==q4-|1-c@-gY~3`}ZM_SH zQ&uM_*QqJ|E}NlPUK)EUB*dB9hW# z**cfz>$CA)Nu@@1yt%dNIQyx2os*iP=#=7g{4NyH_8$WUD54JEgX(wAx}B{Q@MHZbC|!Q(HYg5s9_9($4!U z_f`^fHhmlS`dN1$#>Z7Go^QxXPn|A2Qk+x%)OGBE zhL)-=vs~@#`U}#}*OMI7xHFo0Sl!HF=QjHvBd@fsFK;W-3Z`%F#>3{{OP&OdO1I25 zZRlJbM*=%B>1cy?))CT>StRRvrGVj)cmB<4!>nnAN8&+;qBGeX|K8>yaiGlT^~6`6 zyR6cZWKH?E#-Bekjo9uBS;~a<-bEy9x}Bb?i;5b2;}c^nEZVdaH8k9MLr=vb=0e=k za#qlKMZmWh-r>5;5Nb#xlrRp9I4DzJ+vckn+yB$k&y7 z_`M*qdJZtB?W%5y0EU~5V}ftP(Gp!KU_jHc*Y#09!{m(HLqtUK$i#MS{2KMMEkoE% z%GXyozW5Db&dt!~f$1k4O-5=;nj${>H+(iry=gLbo$SZAR zfQss{170wA@nBipn6Sp3Ie&OD>8g^ymN2Nf7N%FP+sh(`iY&Y{QIN|ms;w|{A~Gnh zYnjl)ujeV4*GQ*YNy0OKR#T8Ku`^G7*2$PL_maX#><0l<5c`7?Dnq$h6Dyt4LX)5m zp{~lE?J*@lsl6I6n2FVSrGs8tk=@@-Jv%$~F9Y}t%8Ngg5$eAOgxjlRyrV-A`7HtJ zODR`NHD<#}mmy=(-ZoF4JeQGCo)H=dTXl;9)XT~**nr_@PNYP3wKndw^ub8|G)_=i<9vR{c=kjmUCv$YHw2S^1ke5 z>9kE2fAnI~ZT|AW_3rEFtaJzvP~B``b&>z^a1fGbe#De$anjA5XCt=28$XITBopiu z*~*<$eRJ=0ID0?-)kJ#wIe1EY^|d_jM$Sf3n^Wz5&E(yMnMK9Ob!i)W+fKiRVMUW4AO36aPI5&<&j6 zC(Lh}QRCS1OY@_iChAy>XeSO)TOR1!Zn$LV<19ZK0rT6rpyZ!JeBm7UFBQl=qr?Ob z84y`?dIxgb`^?1{8#fYCgh%f5=cFWX_@_V8Rc@a}y9Dk>2Lg5UK|g6V6w(4pubkvx zxx`k%JG{lG%lS#_NUo(60$rmp3OzJ8^*!zzYojJDelOV$rU6h+>okZru~~_y(&CLA zA6TE6n&5A$sA=_Xo#8S|ivKd+%(ZzV*;SV;CM(%-Om}op$`P0gb4^}rvlnRhaL_~_ zT_Roo;4X4BDlKatT8Ab{veYG#*eBbevbV2D1 z-*uL$dMgt&^fvd}4xhudD>yOc^tLyK(~buL5wSp?(fTJ*ILSIZKaIh@va2q#S7Hkn=OYz|Z;LkJ8QQ>Iv=Lp#&}ksLfJJz@{EU3rnh zibi8=ifzccAX;795lOOYw1qqO9MciygM=vC{cJT9Z+@IvChQH&534+Au?^(*-Tu73 za8p7odGjqWE$~`p+!%ZNCZ;wNxmB!ko z0My19VjHq0B<2$b|f+@`10b%cE)oO-Xz$!ieyx_dvBJNF092M#pj(ty#2IR-5nb%xik!hau1cJkYK;8B+xe7Lw%X~osD9x{6eh0 zW*{;iORd`Za=<{xxT1W9A4hT%ech=5*YT7rh2)&d=Rxg_M5oN3LmM3FUqJH!kL6oi zYj20HzZn2sUSNhZg3i^tYPJD$$pT`+`lFyvv(}pZ{-%@ja;K=NV0;*`FlOxr_ZA)c z+&!O>eWG#iOmLkjTJU}BVK#QxRZfVGh2<+5U%7btE{~wRIJ4nuqR#%V$t+E`_YJ_7 zIeq>8^DB50fRqw*b09F$SOL!am2jW%n|J4zuk{=a2uJneK`)&o#nR_ADhKPVc+vQL zu}-${ss=YJqY=#0RmS1QMr!&qL##?{6y-Sz5xRgTLm29q7cQUIf{A8)$wiPl$AGjM``H^GGM}g846m6nMkhv${36{btx1Hp2L#H z_LM(<{jkWOXLax3;32kKQn}YTxv_ZBkz>Dl`!t3ze_J?-Sz6Xn^U9QbrV^p!0`;|y zYVZEQLfU@ig8|INvJCi6YS>21e{ac+=db?ue)@F$6S{K7j6&Eo zr^V_#NK%qfgXs9MwSu!?or&Lb9@KH z{_JvH23^aBjFF=IxBdwIDjq_?D2V4G*|(!|pYjX{BU&~_2K(xBp=A@ZdV{w|Uwo@A zXM!-x3+b(;bO1eC`mE+(yjyv4Zy|zao8=TOZkd#663ppBOW?d{YNych+U^cwS58pv zSuWJzMsi~>mK35dY$MNMuLy;^BFwC(FK*!0RGo@Zk*zYOovV7C(g@h@<+P%#T^rQ5 z(5PsWuaFrQaZKAgq2NhRZ93|$+%Y_w?gmZz*dXLEo>_tWN$U4dBDR~l82)sIkGbd~ zw!26O(M)3VrOI z&~qrr0<0b74j2+RSdx$HJC%2&9>o-7pa#EIt#Zbp_iJX+4?(-j)WhslrP#ui2ion6 z)A0&o%jUIPbst;#j~P_A$5Kbkm={N+gFmLt&9RK@W4E_FEp(=BZ%I3i~YUn`uJHis;H99 zVI;KZ6NA31tkO~pk=Ni<2h=2>*Al+d?(pT}H|dn7{2!_JoMsLF*fa`DtpP=Evy+|9 z7l0Yn&D_wPcR>5Hq0`4ukcnCBzwyeT*znuysPITRUQQZyb;L9t+3)+OjAyck03}xp z>dZ(Yr=}}h5F}~M+GlnR+=J;)L1Bjn4?G&K-2+&5&`XG2)~yAYPUG2%9V<=`W;`zn zi)xpyfNmIh-CfKI2J7%Z8`$uNnZTQcypQBE+Sjg=A&i#AR+HAevsCr8Pfwy`9hXwm zIN2F2`Mjy%CWG%#*@5cPGlo;6NesgI&)n$xv(K7vQ||5{!sDXw=U)xSFg!s{4+Y}= z;VY+R`SS{qG4I#h(>^q3Us*L($b#nCf%K+m2GHMWOz!I>KRk9-d1+g=>Es29Dly5! z4r@g0e2SzIoi8CDcYCOEhwCYzKp)NdOVZbRVDu*|>4p{4m*0rp%f~8YXe4I&wNeig za1*`6vt9k-O?Gc8(fh$zjxl&UIS|fpry)6-lsoIw%n5&(XlECSltp>g@e$z8zSO;^ z=z4$SMsZ2eAsnNru3Y&zXO^$=EFIMhTsz0-QE%oW`v5WukWr~=JjK1y zXLb&L0t#bFn+iX8W~vtI>+QEQ_k9_VKFa~u_n&KkZUVdCJ=aWL%5Nq1kn&IPnwmSE zMnmgLQ%MrT0mVBLX=_P!W*yy_oplusQCj+Rw^L~kt<6vGijA)j>TmW%gxMA|)u+BM0r&|m#iMdd(BflD35DhPThzp=h zcAWR+(FtKk2;s48q90h+h6Wl)TP#Qu{>U$-wx|zCzeEWySI5@a)BU_HOe+bY_1M!8 zTTl_sP`X3;tgD*0SuVwNB+Q~gyR%&%6*l1ngfPU=f}3v;vr_6yTYc+Z>&)P$D3C+C z!_d@ZH1vcZ`z0n8SKmuAKbl;mXz~h|^o@oQb+?GvZL1a(k%w*9QGqCJeXH{!5%|-u z#6B0~(&;Ev-YHXy{XD5EVBQmc?v)x}o>w}vpgI{tE-$b@O7S7gBOGWHLe*ZzQeaI+ zx+6f%kw-hr^7i?+a1K(nkr<~6Lw!)rl}J(bw(yBdqWK8hEKPS+1$LyKe9~MrnWdtQ z$#f}pR+39&tWC?6{!%SyP8@XtyQin;GqK;`q?%oT*unV8G##s^{`PS=tkmu8ZC~-- zZ3e1{!54EiH4v>*HEtXRm({wa9*_-Jhn|&eTl#W>H;Twua;SXOqKhy0Ss4 zEHEaIU_;%UodsZ&*uH002;!rd#V!?xY4P6g!E5;zO_)F?vUXF|bjuLSrnAb6s(^e~HVoD2cDN+>H?(~66=^j` zy1J2dB*CRP1*(_{h4vPip^=mX6DW4c!(FtQtY&8vl~KDMGWZPOacBj)gLw{wJ2LJm z`Qg)SM9O}*OtL&V?z5v6{IjWOR!Ee(r$COPnURR+SiOaAK^i2@P|oq2lB?+?bdCBDEt%`-3mCgZfhB$INbO_rTXPdBvb=`3M9=O2|;_M6U zLeRBbFF^TkFw6JlLaEDxvDgPr?eoRaCNACiA*2uL;IdbIeM`)n1hGu1?W~ zUdUPQFh(B?d+&qhD8O(eGQqL9?667)Owq5GgnscP_Xqt0sVBy{5Vm06X}iwGgBvN) zN?NhhazklylaGFIp;**ZDOiSzsj2A#{$Fzp_)8CN8V^nzA2wV!X4wJvW?xO8Zs38# z!g|u0YvmyOMeRk>f&)Di9MN|V=ohpL6oe1OWA&N=@Dp46hMV%d`uVfc znH%wwbm6|T)1^~9nWZ9vAx?H%!CGB{<$xVE?qd_Ceo?vmS5B)_La=KN@#2V=<WnN+Aljf3;{M1d+40$Hs`PB!7YTx<~>*`N0@ zKI=>U5b$$KdOo~7bGtNo;B~Q+)n%Scoo)Z3ah^g!DCd4HFI&F+b-7CN=xa9fPlff{ z9Gp{Ee!-SqdnP6iDS|$d6-|76SJOPw;yVh8oMls8gsurxKnSDay@7d6qDTm``Z0!5 zlUWv0;$0B(_IA`bwVDd`292ITUCxT}CcP|-{XlI->B^9cENF`BXGEzf&X{Y_dv6?Y=eX(6ohr)mWfj9SD!P zQHAa4%Cs|OP$~Yb%AxdYcv6sAWs#z|&WtExtsrCtGW>!DmSdi*7-bmRaC~*nOqEWvB{wGhN(fI!O;g0y( z&8;|w;rfA+&QUsikHTOk)AX~$?hL}nZ7koouct?q%d^%Si8p1#qYKlcD{D7KV!bL} zCJ)okJ#C2Xkglhn8x|GF3cau1-hZEv`?Rlwx5y%dB~mSIH3u)R9dBr^b|V|<`b+3- zt+PJkP#$7+y|adDf3K0y=Vs4c+4U1oZ%)ndL=z7sWbup=YwY8> z_oY@uR3f9#`+K1U$7+*0xf|^$x*VKuN*ra11T;7syI>Jl>#pKgCxpp&?+pzU1P5je zJ62;EDv;>yraSLaQ%+w7RL*P-BnwBL1egkDq_QV`Zs~dl4+ru+SxHvth8H7dN?$GCEh?5V2N8NNdNN}o^o*AbOSJjIH z-(O~p4`jAGBFTGQ8i$;v>;HdTy=PRD>-NRFL8OQjMMOGm1*9vzH@6}k>AeUTdJmBf zf}p6N^cGMl0Yc~mA#{~akdg!lp-2f32%XTmai9M=_m2A|Bi}Mc#{0}?tvP?|U3vW< zt25se#2ISXTUNxrXk+IybHW&DSY<8bU&_nhml&CKu-ATjs&ZPR_b43ck>LgjvNT06 z?tP-O^6Il8jjzeviMC8Lfrr6a~tIv8gk(OdLl&2DTbch>}BSKzc~*>1;$ zuH}*Uf#zb$H64?cuYn z86~%FAV&f!sq3-+yt(KWQO#d$QZ0_|z;oFNHkQYKLTv<_KTRy>YmHdsL3~qLsn=M! zzUEp)$B6j;lYOj2PX1;oy~TZGK0k~BohdsQ2!aeV0QQQ${|s}&d9o*mSBEuDsNhF#8!MzZlkua9}HBG&+!Zgv1JIv zG4K!=D&Ju?>eA|RH&M*>A$sx~j267;RgW-J@n(Ob*jH?I#>YlIVG3th!&Hfv(eWnf zYDh;bzoW8Lth!;RgosF@{(02%{7ldcsw+OgLhp;#Rkz<+g+G+f(YC(nRrX3#Ys46T zsF%&tIY9W2oRk~=woVJ^#@#MnY3~rNrUspU5tF|GYNl=SM1xkyF#YH&1E}jUa#)Zm zqMMj)!GZQfu&ufrb^$)L<~*4I$h`_8XA9?nJPOUZk9E7tV-LZdp$`0;ix zYzK1WJci(kxMNycOgZ*P)huTS5Z)hp7TAq}4>U23xe39Xln$6 zXNW|s!NEMuqF3(xkw0a(W7NYZNw<I1wx~tFT8l;=_umFVV~#yeO(n~RXu{h>Rr3*T z2VSbGmIo0Ng~H>&AM()(J~-^^exfw_3wU`i`&&%p=0o$J`>mrGaD2Pf(+!~5#Pq&U zqTypp%86xyBD*6S5*}~U(`;v1cHp?NcykwYA^x=Q=}22Vk_jyT1^6;65{@@j*h?Ho zBf!`1&TEsUxsMkbG8p+Ns@BeMzCNz}%_)MeFX5V)QWaU2Z64Q$L8>>s!C14@L(7cX zbKG!B0nkKXtmM-L^ zeg5=no_8Zg>S|pM{mfL{<^cetd>x!N-_GC;Dz^)_{xq*LUF3{n>y@mdSV$6#QQjOG zt}Ru*!r_1>AGrmpc<^6-J}j@!L5uBH2^{|D&-Ec;v+gxmZi_}1yXf{+l-Z1?H+V^` zh>Zi)_@LItUP}q?v*hhlCG<(e*1-a=oRc5m`c7}#409U$ z>wiU){83CBE2KR{dyyMwL8<1{-F8CHJX`f7C&HwQ$_3-6?nDVk_{ie+SHe$jmR|EO z`Q0oaVw*58b`l!AGY#IwCvhLLnZIJWxz?X63??tov$~eY7g&jG1u4JWFJ|B(oIZ+7 zvE>8Y?&r)9UTPGEF`hx_?r+JmMjt4*+P%Q$qVEgl>3<7dSO*6#9qELFHF~|iSFO5z~ z*65q5O=;x70)T}dq2)0Y*w}Z5EM}f6|>rgG_Lw>+v!1)B}#ov0y^yfH7G=L};__KeOxk5a|ebJHAF(a?6r$TnrD6 zHt}tJXnZik&CJ+XxE1~2$!ypu?xm=3N)+iX`vLNFXIA9~;L)Af&c|ZRZ!x@W>}zmk zVtvLaPX2FiT#G?wUIlr{&aJfPf}OmM#HGL0xBv|VB&g3t8KYQqoFg1c$IL9qm*0wf z3SW7Db^ikq?W62U24hXCymk7QkNcC!Yi0Tmxe>14ONZnEQbnFEGypTVqOSiD*%pjubT_4tVSak_ zg}v{b3aZRP*kUnl1!8@;f%6-AP0l8sR?R4u=$HRa6*7|0$&y=n2e*=Lrj}WPllLrI zcR1I3Pq&%};s=C(zRM|OmfC~JYC4113~fmfhSC4Zr?pzjTY4_#7f~kIRymk;)3an= zbqRqa)`!)+#{zn2u>ju(WO*J!$nA00a!IKd!9Dimti6c(hJ|Wv>0%E5Tw59uWtaMK z5%>hp0I)^kTUrS(tU7+{omufJ`1iH@3M`q!gX#Kx9O|`zQRsz&EpMcdz2Uz<-S%Ps zE_3o<6wbA*YK`jt^x-)4`4CrgsVKvJ>l!zdV25 zhiyzaPkM94Pi($CS?L6ydJH|bft-}He47yYLFB8)bw0RQZBa@&F^H1Oh;BrX2BgM{ zZK8y|4-MizaKMALMvIhCSuM*h6*)>>1^^((^VY?r)DTCuJl&3wy!CDZh^sD5ePi0# zGkwVI^Z?>}014*|rav3{YT@b2V=rtOS6~Pf6S5+RUG@`1bsm{En`4XRSUavQ58OlO z1FNx)7gHAE7A_1iUQaEdGw!G*QnZ!Fqe3MgyOf@<8Bt)Qb^Bb*wvb@_X&s%rCnTfx zpkr5%88K`p!|PnZri@Q4kPn;5M_L>CEBuH$bFDy2NaIrzSf3c#JLk>f8qz}_e674WFDovbW4>@=o0>{^a;(Ra_;&dQ{F(UA)aAvJy!zO?R#^=phi^E7Vv$1LNs(|H?T@0zf|UGN->)8#UrID8fm733ayUK6eChTCt6RSwEpr0evKU7FLx6{m~p)m>5RHp<8k!8Q|;tKT? zXR&VjeF@%Zg|XX3;lJM!>-WwN2XBA7bJ{J8t}=_??Hc8$g?-54g*xuc44r zkn5f4NO7LJbo6#HaC_c4G-xTY&Wq&WF-N@J-0(zSIFf$XxEn)=X%`n05hn)}@?iTg|q9rkqqdb5J7ZFo zQBDJ6`zu{1S8Lj5WqpI2?ZOSDbpQ_4`N%D}!e(0vKG1#^C@uE8H+p!QVfS$LA%Al+ zdE`b?qye!g*jyRHr-1ia1#lx(0O4w{|7{F57jMK$-}p9prJDl|-CL5+G`y0G^S#!Z zrRKln`hdAY^P9Fl?FjamftGaX{pJ0o8w`xI7e4Z)>=qh&Yy?BDiGga$??W}UH%rfI zby_;uj><=~wx9yyUaas%usX-Cj~nHn4R=#4U5#gqG2+n*rB54#((z-5KgfXdK5%7J z8}719ygG&#QhjY_4@hU;KvVexjiFXZ+$~5nBngdoJA{Zl- zql@;>=9#e5ocR-AC}bQW3DBcKpL;MFZvJzbrvo3gO-q@LU%skKu>#3F>5}yO=-~3 z&xf+;ioud5}%u;hl?GRhjmg zjr_+(O?mk6Qnl6Kff(#=K^UlA6;ObvPjG*V#~k19Rw8uY{c!L3E>EF!Qx0@VT>&}Fw}Lz<>2{L zP7{20)i$=K9Z8__ZM@u@A}qbGjrOW$*qIysR!p8wbq6jG3JQ5DjW<;jkXeW?B8CL1 z-%!4d*|{hXiW%m+K`x-wT`|x_nQwE;3EAg{8&+Pjo-kcl*AcrU{5`O0osc+t%ea&3 zv!91k)BwudV5TkVxUxpcmHs`y4Fq5;ETE-6^ZjhHH4x8?u&q-r+5jNg)ByhU_z z9aI@sZy&)ro}9gW2II#yBJ__&TBl^}ZG!H)lv64eySICnc5h2ewJ7`77aNXqs=mvu z3D~pw3EZwk#0kzIoQ~zJn>ID_MS85IOVid%_H@^@6!mYUPIhd35k>RuP_y`>FZVG| zlk-Nl*~cMpR4nvP;`LISnmM8t6K%B8VNht~DlG!Rz&VkoDXH#PJ${6XhS(QVcDJ0x zm6r9Umyf$mH}JY#4GFd}Gh+;OGmb8|5m>2zl?>72q4YafdYrjA<67P5`ZUeZx5~sw zs^mj6GWC{iIVv>Ed+z?8JnVh_x0#%J9T!v8$#RWKhUC0M`ld>0R0QUSNA=yW`i;L| zlvL=Nm418dp@p0eTGC|EM~igpfmS7L&xI8A&F4jqlXP-st}epL@+ZHJXls14CC%>c zRVvA@J36( zzc`+kv-oMe?8cZb_2vY5yA69)`Fd7(m!@^FU5H9Y=K$LO(iM%P-q+uzk8dp9#m|2! zx@X$+KF}rawn>>rl=abw$+5?Z9Va#SWOW{FraX~9AO3~W_D^{#H_>v3&C&^3P4C)H zM+4myW;r{cj?WUa=fC?TQY=T>E!{#qPba|iaoA!hOzQZQclq@2Y^MHTdI)GKz@h_}N4~^vKtxqfuq^Bk`!Rz^H)vH}*Wmnl|@9O`GI37Tm zG(T5tuG6`~$#~(pD`Q)GbmCQ=x?;dd4cJ47cd^^4lBKu`HO47EkGb6bR8-evR<<2- zvh^G9Xqb6r84J#m~6uIi)6&!SiF z4LhGfzZpg@R9I1{`J@|bSUvLLC^+*!5y?@I+~z=)1xAG~eroCZqgEJ+G}~Ovo6r>C zkeKE7Lh^RG@v843)*LbUlL(I*n`&zELb>(Y1JRX?CLS1@T_FNb&mt8u8-KmgbGOyf z7OO*y*#>5@W?XD~wg7Z$)W5`RhXmbdI+l*DS${`z@T^Ftp4}7p*7;Jf{p|Sp@ei|G zD3Jym12f6|aAnvJ>>A8*b5(fdn}?hE=1i9X>80|+lM$HYaD%y@?5~P03kbasUnN$q z79gY`_xjF*O!HaP6eBGba(|4kdnLu+}3O z$NX@nu(9e?WWo7apx)bonfQSP*f8%58d&4DJ7}=)~0tHb!6T_?sFR42&a&% zL$g)-`!)1^i)9yp1A_y!Iz)$+IV4$oN^8nBVnmQ1bBbBVm4@v+>}Sj1w~DoG;;(g4 z-6ur*$a?q?7#|THaQ|_x|CGi459t&r7V=jxLemqHKI&VQlMR-cK9hH~QwmclSF%hi zG6qDSt*E+3IL{xoqJ6M_S}j*k>*55ul@(;c=-EJz8s|I;=nlzv?UgYo zx%@8SLbmD%{pr^c_%yk1ORp(+q&{)8`n5YYxYWk~=kMlXlUln}0n;iE*l6J!O9QjRs6yDLXC63$oQ8+Vfc`!dgtfQat-=9_D zQsFog#e=!E`LCvV*M9sYr(-=O`uzNDSpJrAP7bmid_M>+DUF3ohHVI>-hCw4?|UKY zLx~Xhx|?tou`af#&kN#Gdiq^jO(t5<+!$$Bi9*dnO=r|WAIa(gFws6*!MJv%a(Jg45hm-Mj%SM3tCqz3oKGp z-H1Iy+5EKXmWp&3+!Nz3sxY^UxG+01HJ4AV;+!V4@(skFB za0ni20s#8+A*Bn`#Pq!ETh}_If=z``t7Up$|_>P7Kqz;Tn!@I zs3z%134i>OoC}VfuV?`G@@OvZiOTVQJgQ(J)ZNa(lkDRFQ$GdGH6|5#z*R6lCOdnH zb^}I5wOW@=H9U}l<1=Oe&#K=zzt3OM_u7u`?*B^CTYpMY(cI3BWmfv!EmhN;zkWp5 zg<|+eNt2;LuBnxRPoWv{-#2B>pyn^-w^Uq34{pn6#L=%HpJ$bjZ29w3+2$-UaRyK(YBA7`fJu45QFV#9 z^WEivzBlrTPcy}GMzZgwQaGQpYU0BqNYu&4uKCwFFW}qA`Yi*Od~@xWUB+9ru5#0VnlQ4ZmHTZEz2bbN_tQHtLrIhbRY8kQ;m7EH3=LKaIU&L6*1a z9ZC+Ku>siBFix^#=-9p|N965n%r@EI^>&v6Rb}hC+jIe!5QW*ytJgv+_8ygbdd&+Z zHjZuQ%5pB1at=Lq4`Qo^6DAs~VRudgFAHjktGHU1ES1aO#=@QzeIe1i3pLa05)#%e zCQ)+c@AG8K{h)831ll`)beJ$;;!?P`CS9Dizc!|m#UnYHRDI-;NhOv!sY zs1|wE=kum)=kdB;n@{-G4(d}}LaR8Z{+siuRi`o^@)Xa=48;r#^Vi<<9UZxT>gXZf8PZV@QS1Lo(hVV*WB@2%Drt+oKfysFiFTxNK!w2URVAm+h%%pVjvJ<@+dR5t155um2GJ%sOz+!=9+cco^3=V83lNhK=dc>q+MPWrI9bU(MV9c#qu2GhKQ>q0tF`2 zSIVE5H2(8hD%~O@^5{cz>9y5St9tjClXX4%sdMCUXCQQSil3o_$lVS{9*9lQ za|-83H9JqOOBQJxOLl9amXR;Tw6utn-a!(oZUJY-ncJtK)jOSIE-Dp$v?v02aP;zV#+h6Uk!muI zW%YmXjLGL17G__I`m%JfkBjeLb<)-5s{p4h{zh+ENdw*s-!GaQC49)l8UW`^$xWU* z;KkmBs(;aQtwDNF?(Ngb=%a5NGKHvpj8kBqBcb23;;%xTdBqu^*D3u&zE=00n`_&h zE+L@C=PSxZ31Hw~BXrYtQE##y4o6ezQ^o=CT=h({ZlaD z*+cnn4~#|%iV~N$#J${5L|BNf2+N6hx;SJ)(m}H>=d*tqG6Hr_h)mB>c9*-D-(f__ zH76_clK=MMwqlJrsR8E${_hA0s5MSDu>O4TL&h+Ff4rVg{gPti(${h zX&5F1RUsSLYfr+C+Kifth8OtYTQ4Rm%uS!P?s(?^RIGMX`T~SPm&qhruV)eKr>(7D z&oadwJ$gsZ)@=LJg^kT(WBkQLsF~lCbxyTkC~)F0uD+I3zqCraMYog-&$&JU#LRi- zDYA|ooO`FefccaxkY>60Geph(Z+~B8r&Yjk^@JpYe=5X1eyAtK%=bqj+4B>;wM^)S za?fr1VruFm&S{>BvajP-u<*_FFMjQ!*2COAR|=!26I6Yk?&ZXOHIMgezu@qg_?)~U zjZ!FFlb?(~6UqHJw~74vD#bqhu<45`15@I-1>1u&7?bOAMdJ$Z%5KQi!Vs?^cD`qf zB~zm;#=ja*-QN|L=tFA-wNS?OrwNtVj!=}=b$YN%tyGh(hj_j+LC=H8>}5Tm8Rv!lkms-sCkkahh+3wqgBBc?r~tV zZ`7|RVf8-%juCf3b0KjPZIz|*_2T4iJ0$TatxQ9qcN$UCNRS&KyADI#OIM4vG07pj z%_==#(5%SgJBGGf?b7cxzEQFTX-t+!tz$Nt_%TTc${J<9v!~Eq6LBS1=-^h$!>p*E$WAMfiSe&E7|l-N-|$^D8~#=>hfVT-_E$S911MTX4muc1rO@?F*?ZI^4`5 zyeUtw#shgTeRqt3^z@ugRMO8o#Sw+T4GX*ya|+?hj$$kJ>v>2)7?Y*k3PnqyTArgVWJi zA}!6vay{F0a9|nMPz-U3KibQkhg7Y4~apACWyaC&;k`**nh+lz(jLwYC-*%~~ho1^BE+~7X@ zbRf6zX3|p2Z*PUWH(6;}nR%o`UJad|O9st0JX}Cl9O5|*!D<3~Y+?<5wexBQyLcXbGM`fbdX#E2n{moZS!QXD9xN$|Xt7be%Y`LV#95#K~1tTvJ*3?rBW830X}O2Gox? zM8iS5;3kiQCcULb=dHf=Mo!nh!N_~y@|T;$+vhG7ojIMyjpBLzC`;K)fB3Rp)nME3 zey=1mvNlBWF_flb=P>bbu0dOAMu1f`y*6!R`5|Ltl|QnVj1rK*QB=r(=ASdt&Z%q* zS=S!NxPOHI(>`gg!9B=Q+MNm?^))`VDNXX7mjH5y(8MRI+gUb@xhdds$dBBydfv7j zq$#=)Iu`Sp`YH~`a2|aNMzz7<+JZgW#B}cb=`VjY6Wr?P7`!0-3;(+IFs0gx z`urC9#@-*ZeeqqW*qOAo0e=Z?X(4HfUV2`2+Kl3Q*{Hypw@6P^azr;@>8_4wwo<$B zXjBzCn7Iyl=ckI4I*EoGmtMC0y!f%R-~!ojk7O({;tX2&#Z8>pd#nuOvTusu!B$7# zB!|cQ#R}+_{6dFTn?S%j+XEZO+TPPbqp;-F=HJ1F8k3yAK&3+at9X^5ie;s)xuZ-x z)muLwGp&MV+3hJ@Xp~nOf{cb~AzR!xd78bp#gvD`s}%8il6$Q!n@Qi)38x3uoW&!( z(bJ)T)(NRQ2_a}GYjdL%NWuPjuhK-_zU(~4O?e3{Ec%LdSXLkQ#Z&3O%rRfdwFo(v z94_gM2xu14t36sBQCM$O{sd6($Y!JQZ7b-?V^RF^W>3oLFFVJ#msuhC%L){T;_I}8 zy3_qlNmIzhYNg=P;-I9eqydNgb;S>#@Rpt2%w&`&DZMYlXe@iZ{nKi4zKTTN;a28( zZ}L;((3JPpg{Nks$v@zQYf>YY8dmi2AGi+MTS*taJH97i(9GXpo^S;VS&~t2lteWX zw=;e;hB&b$)RP;%Jb((s<6@J#Hn$MAJW*wlm1_W{nuwpe%?Mmv?Te0%NM#o9_L1Zu zhmQRx@v>f+eup$uT9p0xuE^S{cZ!w#U1nxRfu9Oge+&7SR;#x>=J+dWV+XP!$uR-5 zwM}3QRYdPuV_Q$A{n_QCULEQ-R%Ey>e2w;wcG**N`54-v2@0VkGdfi9Bglu%Lk52& zB~X!VD)}DsQ!&1X?RkFoqk+5?-to(&rE=5MyS5h1$2}G%Rr)%d`_~)k1}!Tyo&6&D zEal22>33D>IgsQID=x}@K<98o!FEtK+*a)FDG-TV)_ z63bW37^$6fO9~Zdu)G%E;*SpaKYCK`%ee~&WfYYJI%a!!__SoRlRdNS4-lihn9ASW zkmOVEVCpS9NS(3!HeoZL7;!az7<3xA<@J#Dc?X$29Jrkn%5-=(*|Gd?itrD#kntfZ z>JjinAaC}i%LOlFJjN#>_@T2Aq>JpI_j|Eiacl_1tWm}LJw#cA&)p7U`6^wFwQV|x zllXA&9bHBb#)B4kCh4{53VIq4!>*2eUu`F*+Y{{N3Z)Ov+Br?KA9G&yRu0<@8ZL1! z&?s?G?=py{SeVod0Gz+Q>eXmpHqe7SLl&`=PB?Aqv-}EfIm+CMu*NgedL7^)bB<2m zw_2`)USg~Z)Ygw->YD`OZ`%~aheJPXxLMV@Dk}NH>t&wRU;x*F-LIg(&F~w52=kJ( z-&TaMMQ8&Qe~cP2tRLAFnl?*6txlqAd!odrvYawJcHVZJ>4qL8M}K0qeqrNuG|Bnt z)VTIWpPAENpdm-8QL`x&zLOlB&>nMz(CoHREUb*^H^yQSd6}uc^5(UJpvyHf{n(X9 zF*Bly2R?o@T&RjuSPDA`Z9nY{IGw3luP7^+tVJIvvwm;G7x6#@RXf-iiX5$rKDVM{ z3mb!YCI1_R^10E8IUw|s3l-dEJMuGz->GUOv5{9&1Z_ z&(ePO&owrYRUX#5Il4)Y7-Dm~>SDv%nJZI{@|JuvaXNGCG=~^a`iDql*qDhhS8W^ljhA91lJnh0l$Ly8#>N}k>HxeyM5 zt)`a?R(3g^FPEjyf~#X{7L|6O{ZawH?^(kmN~8x=c=h@jFin|oc}HF@{J#4#l95U6 zg=jP=>TA(VK)5X+H8P@V?%ghqH12)bAnZ8hnD_xTFGk%^u|t2w;ZvjFUzIpFplAQK zbM<5t{y@*q|JP<%DQU0E__L4G#Z1`Xhu!S*=LKq!^9eveD+@Ct>r1rU$%*XQhfnb5 zwerlc@wv-+mQcdxs7YTd(om+lDVPjV8}ZFxc#TJXKELEIC0kYO*3nh`pt%5-{NeS389v3ZrR?kM``%VQ zi(;!>)uIz8>}l?;m(pZMOIS)gLs% z==xpes?MJr%sjiOo1vG9omsz$BCs!K4wqqXTjj-lv3sn{XrHt2VIB|Cx)`GQzcJxV zFv#sUh^JaID`Su)zf|=yCq95gy509G15vDlqAZp2FxPRZF!eB>{Ni{iN^X==jm@I~ z=k*3W;iAUPlbp=xq$ZnVc(OIdy&h?7zm;;4uG8UDlP2R0%kXJ)*1*AQr7?Yjj$-i5 zR@PJ;%HYvegzP_)hdSEZ+$|Y?C2V| zWHf86c&9koPn8(jcu6h|mb(^$ycO(6Xh3+gyvU}YE9LfrP2nar(fbpuQr=@7Auqdr z5$@UNnss?hr`_tc$ubr5yM5dWNK^Pi%2Ia}D;%V4llwBovBes( zXQ_%of`H&Y?Kbq+4&!_)#7AkNuD&ZYj03T8Gy+CMyRMpQWj+;u4M#*K4nfLx6q$8$ z@T=3&G?htka=JNRPfPVTA2X6*qyWV@N;)8X+k|~B`>2z?=VZZm=*gxCEp4w~Fuwsm z`Dh<$DLGD||DhtcEHa&;yGuGcZW4zO0~Ul5=HwvH^%vo8i7z+HMVqSck)3~-Re6fRY~0`JihfW)qDunrb3#{KPM-%P)bJ! zwd(g9w^*temcMx~Ml~;&u!p2t%uEdAO@l{bYN{^Ze(LCd|Jb(C@(Hj)5;#cnsM`N3{wFz`z+XoFfZfLS}X)kE@eG zt_KSk_7HZZ%8d9ePZOH~Hlze(IJ}#+^kg;tYM#%_XArNLXQIWKLxtuvK9JMHUz|b9 zBj$)rf4p4AQj*AViBpxn+~>2YN?9rV9Cyg{e=@9IGb5$Em>P*~9+o}}Q`m;`c7dJ% zAamd3@90b?Ai18I9!8|}fveBFq38;iUi5N_=Ff;j02e@VO5%@!dtE+7+T7+{u0M4A zXHx`zPzj`Ag%3!a_mee`*z$6Ca&2koo-K*%lcL`6@aNL8hL9F@j$6QrC%sKP*vW%l zx;sr(ra!_I(qy(n*I3dvoU|5B=k!0HQ3MruLPpBTk=m4xzlfU9&ssRWd~`+Tn^b^b zHGj!9*9_E(;sf$zij?O-pt7QwmFgIUvwdyC4jBUO_WeH0kfcYLeoW5lxddqujt!Iz z1=Z6yRB?K6hoYbiv}+DQed$el1W^aNxOsRN^d1*U4RmlGzP0!Z9n(4|>Z1Bk&;Xq`c|7C_8SD#){Gmcx$>XGN2%q*Imu;li>k0PQ7^c2E6iC}+Be zhK53&c4myfYoztbYw>wT+9s%nZ=FHfVfXA8SNK7{0AK!)RrhSZF~vd+Tle*UF^IR< z{yqLexKTrZHhNR>3hRjvSWRR#mJ4&B}_jQXS+P8yUI&n3ruv4tM!*S^xAR~_4956Yjx zQiH#d4~Vl|m*nHbw}n%6RK3 zW)G{_`=1}dlYPrhqH1`_Tnt74M9d$9VvD*kw<06i)fa4!-H=;{JydO)T{yBjjIY_$ z+9<=UV7TgzO99>#FdqW}^U2oNn^lDv#&bPl*!TU0}g?u-PsP$9{3| zKH025UtLp_3;q$lBAD=DY)8{n^_$(A!k~Iq?y2!ru z`xE5MlCd2ZbkfhX=(#&yinA1c2Qx?LMX+B??HzzVPe;|)VE1Qo3R9sD?w#SYP*~hz zn<~d&zN3I#20i6*nLg!}a?yNEog^3g!FXJ>L#y~VeNYOuYj3VD(psvgeVaV6-yM}a zk|BF-VE(W%Zo~_KZOZ<9Y(PHdrUH}fTPm|;)-u9VB)|*LK+CHfV6%VVecE1RxM!7O z?^|}S+Q9C4FWD+l(t32!#6*7G<6nyCp%)rZb1#%9C~LCT;rXlKrVf>HRlWQun4#K! z*Wkv7D*=L1l>eQ8e#%ct6@NFJkB(LwomJvENolB|pq(H#R%*hnQ>YZOP);Adg}g+w zFdOE&kWZHfm-V&(&_n&!om)V!Ej7Eq-^DtVd4^ZK4xgPG#4O2BI1{=G)A^Z2tRTz# z2vXFj*$p)TBVd&AE`HeM`!|ju)cke>FF=O?%^N_K4nRV@Fg`NQBittSVXS+m+_8o1 zV5M`wF&SAdIV>?R*<=uW1E}a-A9;H{d{1@Cr~9kD5>E2xyQ?Bc@#7ZI5pw3LRbeI} z`Am^A<8}AHXA1v+X9}{|o~hU&@lo)DL{_HYy-M{*F!R@Q=l-pVAi1abUSbof6!`c{ z^49bLCpjVo`JmQ%d42puuU>*q)Q_M42JN2m(l57oRi#6#yj`25^WnY8+-d3;7uwg@ z#Q1*d&)XyXSC}9$dxhu-I`^kRKL;8E@i2_uhjl?_-;1WmUPE@N4SSt5xeu-G-SZyf zJ&e!e$p@?x|65?toA#T@>p(fKFBzlZYRXRyb1-n^itPR9c9mWAy^anxiBAs;BL&=|Py5y5l6c;W}`xecpkzRjn z&y+R!m?gx_G1&;O?U{8LU1mz+E9-U1^NUF=jMsnSt6Gi^>W7Q}X|Ke$y{hqrggZLO zFEp2;u2IQ5UWxgxU-HXOi|QZ0j<3Zk{=g|K)+pc;Sk>7Dlc?L!dsOYKJS7-;Qo58Q zK$i0f+S#wk9oDRaPwRMTXM$vSVrPdY!oE?Nm!* zH8*6K$~4j%T1ixVIb%3}t!J}Z#N`z11fxdEzAP{%VRCW1Ep*OG<^^Cl$NQ);Dj8H4 zmVB8C@y%>iaRh!}{`q{k)ZB4SE&~jlYjZY%wa$#jD~jIgzu{GIgl2($Vt?s=WM{iM z6+Y`Bu#|jvMdw4R;_~;ZSQ2SA6zoiPb(B{|oDQtGFYz^m4FCgVc#6x5L6}e*6>#?V zs0*Ih5C*qc5qGUH3P+H`RH5JkMZ)-^^lxklT&s$7G&5e=z%Z$t0S1TWYcu3_xE>CM zGkPdk7Gh<2nal!05+}i-AZ`Ug$;kFe3lns}dT~bOmb=N=Oy8+`^X0)5d`&X0>eEKf zl{p55Jx|sROoz?$LLsC=3(;=>q+7JCmE+vt?Sor6s-Sil+V<;9=eGj|_80bWlVomne#JUK znvg-6w1^0T;TLFg)G;~Fc*nkJjxP&S?g3`xRr|ZTRZaIWJL&W5Yq^C)@sF07RaWBK zjJz4wmh}c7k>=RM+I1lRnMk_0fGwQ(ao85F zV`#e8NWQ*xR`egT{yu}BhaOf-T@3mSx8}J1iYaK}z#fAgImx_mP4I=F;O8$pH;U9U zU3!!AFiBFW{Ew8Z8x)xL+tBe{d3FJz`H%k`>}#lVgV&y$1zY2&e9_py2HzLrbMn|q zu}QV&&~$l%qB9bf@j`XYXL<7G&v(>WTOeEHa?2}DZ88=YmC{HZ=qSH1-$;7~&> zaN6@rZ&J?cRcHqutMUS|5SV*Z3F8@N1Npn3D!@p=p68hlgnxu2_8!N{dj z{^msF^z#*U--@rEeDxYg{r0AD>z*7H&!g$H@w>-?u5V0nviZv%?t!G(#lW$bgn)jR zp}$ALGMW>xm6t^2;2Ew{nGpLash{oEqBjW#2z`bResduGz!y4feopH7E}QXPIP>=@ zTY~m>6!c$yYOZZbI}ntO$f&xxF)`u(O8d8+Y~cW9kZlzo`Fvm3=e5N=vJK*mr|D zxl&TEqvmRUjQ>tq>)1ClR-G)7i#)jGhN`N%tr7Van*qmcn-AydUb3Cs8`k>ol}39{ z^xtQklT5b%`;7l8bS@-&x-+5J|EIk#frheu|BsZBEJYMqTBNeI*|N>6Bzqx}ErjeO z24fAWgi@MpqeWDfu`e^0>>*^|m$7d%_HE4adxjM6TYdlE&i{AL|NPJE9M0nz?&rR* z`?@~Ya$nc=(5W|T4mm;6M~H$l5s!)jRNiYRSjQ5H;7ixN33Mv^>$Z;f>A_ zim^S8oNudWD0-&0#Gc(_lox_1)Zqn&=`T5z9Va_F&@Ser+C-b%^_jN!uJZo zBtV7Rqwkd{aDvdICS&$7GM*t>+psfEl_VDoVApi@(<6~xo=WViI2LQ>?g5}!bO@Q( zSz%vH=^4BLBv`3{T`~r1!y0?+87&`<%I|vBXD>{r6qXIS-=zkNdg+3E1a_wWF zNkv_~!CppHwo(1Km(8agRZc0HISxSPg_wD3LVs*7>)PgaDv>vLT8{74AtVrA2p9d* zZtO4K%^j~A9eU0}R-0IFLCwIaYVT>TR$Ek?G=L6Dxha!V z{d1LvdY6%Y!HAuY7cmmtI_YM?OYV*@CgN>mN0MSzN_1e2FXTy-@?TcoRD5QqTtZPL z?M~4D=u+^cA#z7UL~GLH15Ah)_G`*qM=FeNC@++BpvrxtZ#Rhx6>xH$?d~UBl&9REx`;$MQ zD3)c#)vb9qlE%Hgb%C}Fx<|%<8UWt>6H3bBfX%pE)zBP!UDH6p#*^Z?;20I40;749 zWWV*;c`nemgv`|T@lMh9Guk)?TlFAV$W5E5Xd257%lo$v^s7 zfW2?IjPnGPl3mqajbL)l(bcRt=1RDd`W{Br245wxn1Z;@{%^C3y}7o@R8)TXhj$-Y zul@WsSUshu%50&Vio$s397ZambApDe`w zT8I!dU^9ZTKKj~T68-Sbtx^4U zBr@5UU5KBpmOL;m%k{yq5bK{qYkl@RynfmtxaNSMY4PCnmEQ=_x+(>q*|+9ct&n|( zk=rgnmC=wdgUn2R7F-HhMNV}yt=3jVK{=l{9OK3Vb(rf@XvxpUOIii*_B8cAXL(&n z2O~Se3;hff(+>ur5sL7x+|cH%)YCtnt^l~KfLDZ$J!`J;F%RAlDcq|J)av3BU7!a1Xtg+3dyWO4_?^KA$~eoY!Md2GC`8P@!{3dB zDE9T3PfX-M(TyL{^ouK>KozpmN08mx2M2oGZ-!V4lQ80LpH*wZPX{u8X5;Zslh0D0 z1e#Q-MM<7OIb%cJS7sH*n?4Lo)_ai%ylmI)KMt?k~^FvG`B zfy~`%9+;kSmc%uC-5+&rjF%6PBSmAYikSH+(iiAZV?2pBo+Kf_o{in-0ntrW{wrE} zi#hp=%>iFubA4GA!EHQgQ=>-V*+#ivdNb6WIi&j{4u|q-XnoL#O>7dlq59^`efrw+ z2=wlq#XvFsBqnO@oeVxu%hP+sagCG~@ZCoZf<1cB}_ z>8w9)|KbXKhiOeH0f+vr9Jzmkh8F%rq0M!)@FQV&o%*zfH_CLC(c-#^GYY2}fun7p zdoc|rE{sFMc_Y#MUZlO;Til!1H{u=dWx37`r(&G)c3LAWdo(#+b9|%Dg}I~dVh-$P zo5%p7#Z^7|tCNRsWFv3j=CQU3gX5sW*B$j!d53_|ep>a{Po=a3>Pm8hbfa#fyBW|k zt|LrHyL>TV7f50?zB8;=lfeMxoF6Sua-T1{e8R9Gk;6GlX=yH&=E%e%(D70^!#ItJ zzaYcR>43<5*v-E7aNbm)AWw+PLsDzFPIN@!?s460feZI{tH;;AyR)R9y(2r2^Ly~b z=Q$AEAVbGTKG~!+FFY@H(D&{|F ztTnqO24n<<+}EcD`p5w7-YcKJl^?1WDtLjm3(kmq)od?3|1lb*t7kD% zZ-g;$AG;R5+n_-A#}m;>yj|e}QWK$dP5mA6VwP?9F`&EMF?JE_v_@H=)JqmPtZ4(MFCuPa0{w^P z^5}Mn+B94?a7&E|rr!z6l+lP&KGPqh?Yr+Wa6En_M7pK<{(Zarp-W>O@1BX!)((hr zTbrNpViUD7)j#GTtU5bVH}QCQBU_OX%uJ>j8y-)?>OfjTzK$qQEoiB7WEaF*f$QmDw{{! zpt*df_Jtibc7+%-*R;8}MT;Gd#hM*9U#Cw>)P4w^u$?ZMKQOC2HDcr9G8;SN+yGST zOxchg;8&;4xW=_=Gz=rPu-9I4&#GH^dC5x%HaQzYx`i81+S%9V9+TYf?e=uaVHUV? z9q1nIkcesU8Nn?+x4N-&u{!)JA4$67LjoN`-Lk_hsT0K{mXLt->gx@sV5Qo_1h@Z7 z;NqFaK|9kEmV&v`Hxwflax^Wm>=EJplo2N)BC=?bS8flfue`Uw<_@w5>b#aFT)pC8 z>Oir>+{Lr7w@acHzrVb9TS*txwYSx3xM!}jR(uMY*6JF~V4lYDlr>IhY>vvW`eP3b zBRAN48wF*iz?Hjic)0aC2f$OHZ}+Hvdhu1CQm!>=4g-W>FD5HFGZ2-Ex_zs?Ba;?B zw3+zURF##@_Jn)eBQId3Al;IN`EM(t_5ttMu{tO*JKZ(_6ex~VOMtTJdtcZ^iOsaP znHNr#eRXPm$cM!n?M9Do|4#xc(uKvS#B+a+4#Ii;PtHZ)Z4v2JX`TA!qtt>WsgTb=TMxjAI=^q9AjLnA%~vePF58P~X!!a_MOW zeE(86>1GBiqb;KQta-t{PTSVW7zPl-{;x7sD30t8M^7AdnrG-QDwIBGQYS5y)#l!) zy7Ue&Nr6uDgM3>w*oKxl`Zmy7YEkT~#IFfKrqNv(xZY{PeU-|O>8Xib0srth&nMYq zDP3<14tb`{LC)vJrSqbWaJzRecs)+9fOAP;r^Cb+o-=jW%pMBhU<#31bcups!&ArN zBJZBpT*cEqGYOGe!kprEFTL6u62R$}QN6u*$gP$*Gun2i8Xb*QI&c}B!;g;swnJAs zDdl)?P!?xO(a!_TZhtq~Zk{W5yU+JZQ=l*2vY-da5awkDBv!fDCXz(Y2^P+?uFO0Q zt2Szjv_lHw5VNVkYr02_r#$E%dlIxB>DuKU8Xq6Ofwi)6Quk8WO6xHf_ zxSG71^)n%xXnn^KjOe8pX^$JpYBI4SkT#2@m(m{P#x$UK;C(LzG8Jc}pmAKCd0Cxk zD;+6OJyLHf&N9InDKr!irecdPu^SlR;<_R|xv@0xt8%JGsu{om;$&be$1hj*N&WZ} z;k>xE7c+T5!#>2U@Clb&{&=IuDQN@fvx4uUWLZg)T=W1^u0L82xV(ek%q zgg8j)*S!b}H?XcaF4ChZ_oXL^di0=p|B?_fK~B%XRI!^RLTHSKE97wsbh1zzf1t1#;Rs8sXP;gZ7V9DF22Qr+!NOay_;brd@}U1|;w^jMTS zwd&sSLFO?>R&SQO>mo6`P>Pe9%T0NHyqOP+9Ef|5Km_`aDdAG?fR{UZ4Gvf(=U$3* zWB!g?mh!JgFDij^oC_SK4tuX3eZTPA<0HOkb0IEC>{D zBWcm}a(NB|DeJI89AG8PM~(J+g(Z&F6`m3=fP8)09*kPWtR{&K_7TztESAyLx>He@ zy?Ha`>}7ibIG87rQL6YOG}IxI*wRVdd~pl#wiZs8qMBRvqlnzz|YBuJ^JaRusDw z?K==dirQZhEGfCTjI(V|#~JRQ%VNtc}bClSK;(ZkV)UC z5N*v?E_|z%!;*%EZbt?&f?(XLvJcFp5V&TtkGgcnL#FnNSeLZf zm(-P}1c@YO4A-{8%gf7M`icV5-Ss*GfCKz8^JiIhDMh&URHK<;QqJb*c#2xzAf~MIRNS4LGXo6_Mv>TEpm-FB>rUJ0 znfXT2mk#lBG^+(N=BmmO^Rik!0G7-Qa79N<=IHh|g!JMUam$siteMZNxf-6#L=E=9 z3?e#!b{TL|OeB%nL{$dmZczW==sB-kn+Y^D2$eGV-b=o6xGAOZR{DN@%HZ^KD9Il8azEmGV;;EHb`qFl{ zQDqp#D|O1F{PBKK?Cf&22Sd3PA|I}Q_V(BD)H0UHGK$`Agvu)ssc<5n4_QeH=FYe3 zFlK8b3{JZ*vp&cGZI*GrKxdlhhO6=+;uT`&`=&P!0BNvJNsqGn4so$vOv1u zO2K|PF=wC_+Ck+fVY$?4SIDGmw;D5cWZ-E4wzh{?dQNXLeafdjx#+E$#OaBp!Ac>s zk%mQ^^aYlg{3#DnvI3aAzS3Ge&yzn=9OxN#Ahu4yw*qE}3!FWY&$Mnd0Y<}vb)zB3 z9gY0!mqx?&M^r?@l)}tXJn88|&fb!uvpwNVM=E6YhDa}6inM#DzP;G4kl;M&)widz zJgUwd(``|K=|3B@a`y{dO2QU}3BEjMGiJ5a?Hn{v=%u-s8|s-qSBshnvhzgo$h^cJ z%Lib?RDxU01z$;q9Mc+=3xnDQ#OljuUBl)rIrd5e;Pn)HOpg!oW};<s+05jUSp{#4 z!RirGa~VKLx?P1tTx4p4qQ?mBRY==)-VNiE>Z9yBPM<7L4LZ7kL>n~z0occBl;M&* z4PVW1A2aNyOHZ6NnHN?oZ4^=#%FM#(zT4?Xx;ue!sQMsN#RjcyJ8L|LHng;G(a_L{ z@~GY6P(mkaR)NhUc)d}J=@A&=Lzg5eJXjgjsQnx?g_{ zYr3BG@+j4>tr)OBjpiLOv3JOk58C|?45c!_nTm9v5I|~UDVkM8yN{B^Y^6g6x(H1z zgF!wAk8CfU)9<3ACMyof=}#9<-|cqlui_K5&E9cjv5mK3CVhkxRrcA0-fk%ZD}6oi z5E|eRS11KK@3K1l%v_L*>u|BVdp2%xwel4r$VhC_GI0b>Ak92X4q{cchRa<91?d7#g> zJip%W>&BE}ob;-PW+~95>lQ06PUVvGBfp?q2qK!+jsH}|ag#dx3w2JNMgg4H!|4PvKYrs$!w25> z1{ZUccEqVfa)!tdZ%M-OeE06(zrX+7?SyTpIqA!>%1T0_74HnOao{7`F5VoTO^KH9p-lLS&<2}@^sX1DT}nl z>+jzGwJ;y6HJGYx;3}ZX?qPfe@K}y%Nix6TO;K zR&6`J8tS|2D2LA)=SePvx!}gU%xtEb6SUX7P}g`&`W<0B0E`9WRSu_beeSco?Hnn> z0<^t%)KF(+tPMQ=9pQlqygIs0n$KG&vt_q6KYl6+kz~<$_GILhuvUmsiL~yA8oisS zk5b(DVpIfq&du4u z6Q|KLyy?fZbT8+yZ7+5l{_^l`u=pWPsI{yaaYK=W23&rf^$xWw212Y$vl7Z597!d{ z%Ul~Rz#`u}i7gLat*EG#u<6xT0a_3R0`uY9^G95V1ZUp&OAz4hYHNFm$$*YTFWtJ( zpK^iWvBzRhLPLQ3>qQmUnRjg-rCz43!P1!0HcynzuI^S2)@DU9u}nT7iUDEyqX+wf zg@Fg3;EqaWhf6Kq%OT#EF)KMlw=~4HpKTJGpEgN1<8&%5BHMMDorC6Z55dKr z_*@xt;%HNwTY^AGelm)oMID$2KY1Rke>9IkaHcTbH*?P_5dP((ak!i2%*HVk{S;BS*qU0-mXMtr zw|7@23%#lec}oa8{N@f&H-g<)%;9=k7==_2jRe%2~|{>!blJ;0yzj~liht%WTkk-IP97< z3(2ct&Y>(!yW#?aR75mM@eX$W^jl=Y2inAJ7Qpv1C(qFcC>QyIIUc(rur^08&u2oc zoRk*c%gA1Ron;)40~$J&&ox3EjGw7sw;M}A>Oy9oyf&6T}te#~zL=;PI!#eTfTv(H)6;}|+`mt6Ku2wSWI8iZMAX+`C= zn)4-vU&Tg12r?HOln~arc>;8lKffimVxB$?Kp_=lbx`iu9xRvBYQYJ z=d4mQUjxWkAp1win7J#1p2iD3$6oQthYQh?e0#~5`8E*eff>NrRDx7eapMV>E?g)v zcE|NYoAQ@>xGFegPD1-sC2U#aqwv0EOVhht)yZy>v&qKI4;uwQV4k(;gwcijTVVO0h>Zk13Vk63~XFkknr1=^kdNY2OupeGQzJI;e5TKq3_Pc zK-~TNx8EZIaX8%Mb$xyPML2OUqwVWypZ_4~EN|BYHSAwO{Z~-QI{5zq#I9pyR23o{ z5an^M^-XR2pT(<&AP3vrCK4kGwYR76O9MdFY4>hL2)!ywg z_>GZC{wPIk9o_f-iQT*z-Mdc$VeSZ6boRhCxWcB{`MkUOYT;tS>(}yGQ2SL0Q2hB} z4W)to_2$3!&&i7K?z=U4WM^Sygv0PUU9RE zv@oo63v%0whc$$yj^F(c=Xgq2)^xi9a7rX`R%FEnkDX*WBZxh6n<-c`0$+g8V+RAU~oWe#bhrd+>9FCVl2IR*e1|( z-WyiQ$UA%KvDV-=cgqh4j-OZj{iuR_N53GQCXQurF~VE(eC;(%Oq9dVOGSjv#!HKz z>J&&=sM-7s@GGqy4TT?P5ngIRI3)7A$<4y|cDFA(?@10s#zqxXO$`yVC%LVquN|A& z>~H_fmErFE6Y6$VXBM<>+194SPn}Z* zFoIl|shddYCkl^e_V#o1#Wh8J=Z<$}O$>RbtZ3@8^8B6?7_W=@)F$g@C-VUEpjHz& zd(Rn&#VSXx*yb(NLhDhjX{p1OTvi^4y3MTqUdM;kzzv9yFL=&l^7ZB?P_nbE*T&Ne zKc@A0+bbGLUrXOETk%heZ}XiLza8gMw%tfqT6$1j;4M~k+)D|FZQd+Sx6-zF&N$37 ze?Ue{Cv}0amEyxx1|9=RE+#mM%H$%anHeHqIdEiqN&f;+%r+eD8+oDF1{IAz^kVSZ zE>NUeX4%#6r)Gb10>7=tN0o-3yyv@sLx@JEF>F!IM918l)YAlu$JxEn9F4sZ(cLiY z(Y#qjzS3RQLXjAFGtOx1ly2;Z2=!uK!A>rjbUcQn11~A|oY!?&8BH&qt^fM<2|gCx zhfIVHEx8-k#LsT^1b;H8E1EYQ5_Mq{mb`$-pPX_N7K#Y}{v9cN-iwdARGG5DksjS7xr*ztFi{w}$3jvPPrz z1sS8xxNM^K6*)?UHqmHDQ<;TI!6K)HO8R1{H?I%TQS%n{#p=ZzB-yw2%{x{Qtcaq| zhc!6(#5b?!XP6NVW=+(Mud@*a80B{U`)I6pnDzdsgI3DU^l(!ht?3J6K4_1^JzR)j==4j3lIv z?AKe|jN#x++Ckq>E3?H*b?%mEOxJ(VR`2Aw3ss|qSYgKxGTIV850_!)0lj6#8nY=h z^WNFVKSpmKCU-^i>WS7(e6vY7H>P^ig891SL<{XcMgz9og-!Or&)DQ|`v(>Vfk4_N z*|9-?`(R`6O;WUZxLv#WUwBUkcpVlsoXEpdY&jOV`xdMpiJa(Q>5S4<2gI9)CyDd- ldPnmfxYK_;`9?NT=KS50yygt{9@~H~1vwyLP4?!!{{iJJ;Zpzr literal 395228 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%0D3dmlv0SdXQZXu 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

NBt#n( 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%0Db&gnk$`T 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. +IMPORTANT: A known issue prevents Real User Monitoring (RUM) dependencies from being shown in the +*Dependencies* table. We are working on a fix for this issue. + [role="screenshot"] image::apm/images/spans-dependencies.png[Span type duration and dependencies] diff --git a/docs/apm/transactions.asciidoc b/docs/apm/transactions.asciidoc index 83ca9e5a10a9b..8c8da81aa577e 100644 --- a/docs/apm/transactions.asciidoc +++ b/docs/apm/transactions.asciidoc @@ -17,10 +17,10 @@ If there's a weird spike that you'd like to investigate, you can simply zoom in on the graph - this will adjust the specific time range, and all of the data on the page will update accordingly. -*Transactions per minute*:: -Visualize response codes: `2xx`, `3xx`, `4xx`, etc., -and is useful for determining if you're serving more of one code than you typically do. -Like in the Transaction duration graph, you can zoom in on anomalies to further investigate them. +*Throughput*:: +Visualize response codes: `2xx`, `3xx`, `4xx`, etc. +Useful for determining if more responses than usual are being served with a particular response code. +Like in the latency graph, you can zoom in on anomalies to further investigate them. *Error rate*:: Visualize the total number of transactions with errors divided by the total number of transactions. @@ -157,4 +157,4 @@ and solve problems. [role="screenshot"] image::apm/images/apm-logs-tab.png[APM logs tab] -// To do: link to log correlation \ No newline at end of file +// To do: link to log correlation diff --git a/docs/apm/troubleshooting.asciidoc b/docs/apm/troubleshooting.asciidoc index 7084777cbb6f9..465a3d652046d 100644 --- a/docs/apm/troubleshooting.asciidoc +++ b/docs/apm/troubleshooting.asciidoc @@ -1,14 +1,30 @@ [[troubleshooting]] -== Troubleshoot common problems +== Troubleshooting ++++ Troubleshooting ++++ -If you have something to add to this section, please consider creating a pull request with -your proposed changes at https://github.com/elastic/kibana. - -Also, check out the https://discuss.elastic.co/c/apm[APM discussion forum]. +This section describes common problems you might encounter with the APM app. +To add to this page, please consider opening a +https://github.com/elastic/kibana/pulls[pull request] with your proposed changes. + +If your issue is potentially related to other components of the APM ecosystem, +don't forget to check our other troubleshooting guides or discussion forum: + +* {apm-server-ref}/troubleshooting.html[APM Server troubleshooting] +* {apm-dotnet-ref}/troubleshooting.html[.NET agent troubleshooting] +* {apm-go-ref}/troubleshooting.html[Go agent troubleshooting] +* {apm-java-ref}/trouble-shooting.html[Java agent troubleshooting] +* {apm-node-ref}/troubleshooting.html[Node.js agent troubleshooting] +* {apm-py-ref}/troubleshooting.html[Python agent troubleshooting] +* {apm-ruby-ref}/debugging.html[Ruby agent troubleshooting] +* {apm-rum-ref/troubleshooting.html[RUM troubleshooting] +* https://discuss.elastic.co/c/apm[APM discussion forum]. + +[discrete] +[[troubleshooting-apm-app]] +== Troubleshoot common APM app problems * <> * <> From 09c2ee72038fe8f73e09ae9a65e3bc4b433390f7 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Mon, 1 Feb 2021 18:56:59 -0700 Subject: [PATCH 67/85] TS project refs: Migrates snapshot_restore to a TS Project (#89653) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../test/fixtures/repository.ts | 2 +- x-pack/plugins/snapshot_restore/tsconfig.json | 30 +++++++++++++++++++ x-pack/test/tsconfig.json | 1 + x-pack/tsconfig.json | 2 ++ x-pack/tsconfig.refs.json | 1 + 5 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/snapshot_restore/tsconfig.json diff --git a/x-pack/plugins/snapshot_restore/test/fixtures/repository.ts b/x-pack/plugins/snapshot_restore/test/fixtures/repository.ts index 6045976180987..f1672219756d1 100644 --- a/x-pack/plugins/snapshot_restore/test/fixtures/repository.ts +++ b/x-pack/plugins/snapshot_restore/test/fixtures/repository.ts @@ -8,7 +8,7 @@ import { getRandomString } from '@kbn/test/jest'; import { RepositoryType } from '../../common/types'; const defaultSettings: any = { chunkSize: '10mb', location: '/tmp/es-backups' }; -interface Repository { +export interface Repository { name: string; type: RepositoryType; settings: any; diff --git a/x-pack/plugins/snapshot_restore/tsconfig.json b/x-pack/plugins/snapshot_restore/tsconfig.json new file mode 100644 index 0000000000000..5d962c7c17aff --- /dev/null +++ b/x-pack/plugins/snapshot_restore/tsconfig.json @@ -0,0 +1,30 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true + }, + "include": [ + "__jest__/**/*", + "common/**/*", + "public/**/*", + "server/**/*", + "test/**/*", + "../../typings/**/*", + ], + "references": [ + { "path": "../../../src/core/tsconfig.json" }, + { "path": "../licensing/tsconfig.json" }, + { "path": "../features/tsconfig.json" }, + { "path": "../cloud/tsconfig.json" }, + { "path": "../security/tsconfig.json" }, + { "path": "../../../src/plugins/management/tsconfig.json"}, + { "path": "../../../src/plugins/usage_collection/tsconfig.json"}, + { "path": "../../../src/plugins/home/tsconfig.json"}, + { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, + { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" } + ] +} diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index a4d7b1a870c38..a9d76eea80d8f 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -64,6 +64,7 @@ { "path": "../plugins/global_search_bar/tsconfig.json" }, { "path": "../plugins/ingest_pipelines/tsconfig.json" }, { "path": "../plugins/license_management/tsconfig.json" }, + { "path": "../plugins/snapshot_restore/tsconfig.json" }, { "path": "../plugins/grokdebugger/tsconfig.json" }, { "path": "../plugins/painless_lab/tsconfig.json" }, { "path": "../plugins/watcher/tsconfig.json" } diff --git a/x-pack/tsconfig.json b/x-pack/tsconfig.json index 19633b6a887e8..7f64a552a5169 100644 --- a/x-pack/tsconfig.json +++ b/x-pack/tsconfig.json @@ -42,6 +42,7 @@ "plugins/global_search_bar/**/*", "plugins/ingest_pipelines/**/*", "plugins/license_management/**/*", + "plugins/snapshot_restore/**/*", "plugins/painless_lab/**/*", "plugins/watcher/**/*", "plugins/grokdebugger/**/*", @@ -120,6 +121,7 @@ { "path": "./plugins/translations/tsconfig.json" }, { "path": "./plugins/triggers_actions_ui/tsconfig.json"}, { "path": "./plugins/stack_alerts/tsconfig.json"}, + { "path": "./plugins/snapshot_restore/tsconfig.json" }, { "path": "./plugins/grokdebugger/tsconfig.json" }, { "path": "./plugins/ingest_pipelines/tsconfig.json"}, { "path": "./plugins/license_management/tsconfig.json" }, diff --git a/x-pack/tsconfig.refs.json b/x-pack/tsconfig.refs.json index b6c4f63f34c11..43a488e8727cc 100644 --- a/x-pack/tsconfig.refs.json +++ b/x-pack/tsconfig.refs.json @@ -44,6 +44,7 @@ { "path": "./plugins/cloud/tsconfig.json" }, { "path": "./plugins/saved_objects_tagging/tsconfig.json" }, { "path": "./plugins/global_search_bar/tsconfig.json" }, + { "path": "./plugins/snapshot_restore/tsconfig.json" }, { "path": "./plugins/grokdebugger/tsconfig.json" }, { "path": "./plugins/ingest_pipelines/tsconfig.json" }, { "path": "./plugins/license_management/tsconfig.json" }, From 1712387b8de8345b4566e8383e9e1935d48fcf71 Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Mon, 1 Feb 2021 22:00:41 -0500 Subject: [PATCH 68/85] [Uptime] Expand synthetic journey step thumbnail on hover (#89179) * Add desired hover functionality and a test. * Switch render from img to EuiImage for step view. * Create new module for ping_timestamp. Extract a function. Add a test. * Extract nav buttons, translations. Add tests. * Fix a typo. * Extract caption to own file. Add tests. * Extract no image display to dedicated file. Add aria label. Add tests. * Make import path more explicit. * Move step image popover to dedicated file. Add tests. * Clean up inline code in timestamp component. * Explicit var names. * Simplicity. * Fix refactoring issues in test files. * Move translations to central file. * Rename test for better accuracy. --- .../ping_list/columns/ping_timestamp.tsx | 219 ------------------ .../ping_list/columns/ping_timestamp/index.ts | 7 + .../ping_timestamp/nav_buttons.test.tsx | 88 +++++++ .../columns/ping_timestamp/nav_buttons.tsx | 56 +++++ .../no_image_available.test.tsx | 17 ++ .../ping_timestamp/no_image_available.tsx | 29 +++ .../ping_timestamp/no_image_display.test.tsx | 44 ++++ .../ping_timestamp/no_image_display.tsx | 39 ++++ .../ping_timestamp.test.tsx | 35 ++- .../columns/ping_timestamp/ping_timestamp.tsx | 120 ++++++++++ .../step_image_caption.test.tsx | 89 +++++++ .../ping_timestamp/step_image_caption.tsx | 68 ++++++ .../step_image_popover.test.tsx | 60 +++++ .../ping_timestamp/step_image_popover.tsx | 61 +++++ .../columns/ping_timestamp/translations.ts | 35 +++ .../synthetics/step_screenshot_display.tsx | 4 +- 16 files changed, 744 insertions(+), 227 deletions(-) delete mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/index.ts create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/nav_buttons.test.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/nav_buttons.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_available.test.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_display.test.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_display.tsx rename x-pack/plugins/uptime/public/components/monitor/ping_list/columns/{ => ping_timestamp}/ping_timestamp.test.tsx (70%) create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.test.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.test.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.tsx create mode 100644 x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/translations.ts diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp.tsx deleted file mode 100644 index be4f0fc62271d..0000000000000 --- a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp.tsx +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React, { useContext, useEffect, useState } from 'react'; -import { - EuiButtonIcon, - EuiFlexGroup, - EuiFlexItem, - EuiImage, - EuiSpacer, - EuiText, - EuiLoadingSpinner, -} from '@elastic/eui'; -import useIntersection from 'react-use/lib/useIntersection'; -import moment from 'moment'; -import styled from 'styled-components'; -import { FormattedMessage } from '@kbn/i18n/react'; -import { Ping } from '../../../../../common/runtime_types/ping'; -import { getShortTimeStamp } from '../../../overview/monitor_list/columns/monitor_status_column'; -import { euiStyled } from '../../../../../../../../src/plugins/kibana_react/common'; -import { useFetcher, FETCH_STATUS } from '../../../../../../observability/public'; -import { getJourneyScreenshot } from '../../../../state/api/journey'; -import { UptimeSettingsContext } from '../../../../contexts'; - -const StepImage = styled(EuiImage)` - &&& { - display: flex; - figcaption { - white-space: nowrap; - align-self: center; - margin-left: 8px; - margin-top: 8px; - text-decoration: none !important; - } - } -`; - -const StepDiv = styled.div` - figure.euiImage { - div.stepArrowsFullScreen { - display: none; - } - } - - figure.euiImage-isFullScreen { - div.stepArrowsFullScreen { - display: flex; - } - } - position: relative; - div.stepArrows { - display: none; - } - :hover { - div.stepArrows { - display: flex; - } - } -`; - -interface Props { - timestamp: string; - ping: Ping; -} - -export const PingTimestamp = ({ timestamp, ping }: Props) => { - const [stepNo, setStepNo] = useState(1); - - const [stepImages, setStepImages] = useState([]); - - const intersectionRef = React.useRef(null); - - const { basePath } = useContext(UptimeSettingsContext); - - const imgPath = basePath + `/api/uptime/journey/screenshot/${ping.monitor.check_group}/${stepNo}`; - - const intersection = useIntersection(intersectionRef, { - root: null, - rootMargin: '0px', - threshold: 1, - }); - - const { data, status } = useFetcher(() => { - if (intersection && intersection.intersectionRatio === 1 && !stepImages[stepNo - 1]) - return getJourneyScreenshot(imgPath); - }, [intersection?.intersectionRatio, stepNo]); - - useEffect(() => { - if (data) { - setStepImages((prevState) => [...prevState, data?.src]); - } - }, [data]); - - const imgSrc = stepImages[stepNo] || data?.src; - - const isLoading = status === FETCH_STATUS.LOADING; - const isPending = status === FETCH_STATUS.PENDING; - - const captionContent = `Step:${stepNo} ${data?.stepName}`; - - const ImageCaption = ( - <> -

- {/* TODO: Add link to details page once it's available */} - {getShortTimeStamp(moment(timestamp))} - - - ); - - return ( - - {imgSrc ? ( - - ) : ( - - - {isLoading || isPending ? ( - - ) : ( - - )} - - {ImageCaption} - - )} - - - { - setStepNo(stepNo - 1); - }} - iconType="arrowLeft" - aria-label="Next" - /> - - - { - setStepNo(stepNo + 1); - }} - iconType="arrowRight" - aria-label="Next" - /> - - - - ); -}; - -const BorderedText = euiStyled(EuiText)` - width: 120px; - text-align: center; - border: 1px solid ${(props) => props.theme.eui.euiColorLightShade}; -`; - -export const NoImageAvailable = () => { - return ( - - - - - - ); -}; diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/index.ts b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/index.ts new file mode 100644 index 0000000000000..db9c18e30cfc1 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { PingTimestamp } from './ping_timestamp'; diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/nav_buttons.test.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/nav_buttons.test.tsx new file mode 100644 index 0000000000000..c8acfd48a9913 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/nav_buttons.test.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { fireEvent, waitFor } from '@testing-library/react'; +import React from 'react'; +import { render } from '../../../../../lib/helper/rtl_helpers'; +import { NavButtons, NavButtonsProps } from './nav_buttons'; + +describe('NavButtons', () => { + let defaultProps: NavButtonsProps; + + beforeEach(() => { + defaultProps = { + maxSteps: 3, + stepNumber: 2, + setStepNumber: jest.fn(), + setIsImagePopoverOpen: jest.fn(), + }; + }); + + it('labels prev and next buttons', () => { + const { getByLabelText } = render(); + + expect(getByLabelText('Previous step')); + expect(getByLabelText('Next step')); + }); + + it('increments step number on next click', async () => { + const { getByLabelText } = render(); + + const nextButton = getByLabelText('Next step'); + + fireEvent.click(nextButton); + + await waitFor(() => { + expect(defaultProps.setStepNumber).toHaveBeenCalledTimes(1); + expect(defaultProps.setStepNumber).toHaveBeenCalledWith(3); + }); + }); + + it('decrements step number on prev click', async () => { + const { getByLabelText } = render(); + + const nextButton = getByLabelText('Previous step'); + + fireEvent.click(nextButton); + + await waitFor(() => { + expect(defaultProps.setStepNumber).toHaveBeenCalledTimes(1); + expect(defaultProps.setStepNumber).toHaveBeenCalledWith(1); + }); + }); + + it('disables `next` button on final step', () => { + defaultProps.stepNumber = 3; + + const { getByLabelText } = render(); + + // getByLabelText('Next step'); + expect(getByLabelText('Next step')).toHaveAttribute('disabled'); + expect(getByLabelText('Previous step')).not.toHaveAttribute('disabled'); + }); + + it('disables `prev` button on final step', () => { + defaultProps.stepNumber = 1; + + const { getByLabelText } = render(); + + expect(getByLabelText('Next step')).not.toHaveAttribute('disabled'); + expect(getByLabelText('Previous step')).toHaveAttribute('disabled'); + }); + + it('opens popover when mouse enters', async () => { + const { getByLabelText } = render(); + + const nextButton = getByLabelText('Next step'); + + fireEvent.mouseEnter(nextButton); + + await waitFor(() => { + expect(defaultProps.setIsImagePopoverOpen).toHaveBeenCalledTimes(1); + expect(defaultProps.setIsImagePopoverOpen).toHaveBeenCalledWith(true); + }); + }); +}); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/nav_buttons.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/nav_buttons.tsx new file mode 100644 index 0000000000000..1c24caba6a917 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/nav_buttons.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { EuiButtonIcon, EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; +import React from 'react'; +import { nextAriaLabel, prevAriaLabel } from './translations'; + +export interface NavButtonsProps { + maxSteps?: number; + setIsImagePopoverOpen: React.Dispatch>; + setStepNumber: React.Dispatch>; + stepNumber: number; +} + +export const NavButtons: React.FC = ({ + maxSteps, + setIsImagePopoverOpen, + setStepNumber, + stepNumber, +}) => ( + setIsImagePopoverOpen(true)} + style={{ position: 'absolute', bottom: 0, left: 30 }} + > + + { + setStepNumber(stepNumber - 1); + }} + iconType="arrowLeft" + aria-label={prevAriaLabel} + /> + + + { + setStepNumber(stepNumber + 1); + }} + iconType="arrowRight" + aria-label={nextAriaLabel} + /> + + +); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_available.test.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_available.test.tsx new file mode 100644 index 0000000000000..17e679846a66d --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_available.test.tsx @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { render } from '../../../../../lib/helper/rtl_helpers'; +import { NoImageAvailable } from './no_image_available'; + +describe('NoImageAvailable', () => { + it('renders expected text', () => { + const { getByText } = render(); + + expect(getByText('No image available')); + }); +}); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx new file mode 100644 index 0000000000000..2498e07969f11 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { EuiText } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; +import React from 'react'; +import { euiStyled } from '../../../../../../../../../src/plugins/kibana_react/common'; + +const BorderedText = euiStyled(EuiText)` + width: 120px; + text-align: center; + border: 1px solid ${(props) => props.theme.eui.euiColorLightShade}; +`; + +export const NoImageAvailable = () => { + return ( + + + + + + ); +}; diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_display.test.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_display.test.tsx new file mode 100644 index 0000000000000..24080e2f4061d --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_display.test.tsx @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { render } from '../../../../../lib/helper/rtl_helpers'; +import { NoImageDisplay, NoImageDisplayProps } from './no_image_display'; +import { imageLoadingSpinnerAriaLabel } from './translations'; + +describe('NoImageDisplay', () => { + let defaultProps: NoImageDisplayProps; + beforeEach(() => { + defaultProps = { + imageCaption:
test caption
, + isLoading: false, + isPending: false, + }; + }); + + it('renders a loading spinner for loading state', () => { + defaultProps.isLoading = true; + const { getByText, getByLabelText } = render(); + + expect(getByLabelText(imageLoadingSpinnerAriaLabel)); + expect(getByText('test caption')); + }); + + it('renders a loading spinner for pending state', () => { + defaultProps.isPending = true; + const { getByText, getByLabelText } = render(); + + expect(getByLabelText(imageLoadingSpinnerAriaLabel)); + expect(getByText('test caption')); + }); + + it('renders no image available when not loading or pending', () => { + const { getByText } = render(); + + expect(getByText('No image available')); + expect(getByText('test caption')); + }); +}); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_display.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_display.tsx new file mode 100644 index 0000000000000..185f488d5acd2 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/no_image_display.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { EuiFlexItem, EuiFlexGroup, EuiLoadingSpinner } from '@elastic/eui'; +import React from 'react'; +import { NoImageAvailable } from './no_image_available'; +import { imageLoadingSpinnerAriaLabel } from './translations'; + +export interface NoImageDisplayProps { + imageCaption: JSX.Element; + isLoading: boolean; + isPending: boolean; +} + +export const NoImageDisplay: React.FC = ({ + imageCaption, + isLoading, + isPending, +}) => { + return ( + + + {isLoading || isPending ? ( + + ) : ( + + )} + + {imageCaption} + + ); +}; diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp.test.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.test.tsx similarity index 70% rename from x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp.test.tsx rename to x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.test.tsx index 1baeb8a69d34c..a934f6fa39b22 100644 --- a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp.test.tsx +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.test.tsx @@ -5,16 +5,17 @@ */ import React from 'react'; +import { fireEvent, waitFor } from '@testing-library/react'; import { PingTimestamp } from './ping_timestamp'; -import { mockReduxHooks } from '../../../../lib/helper/test_helpers'; -import { render } from '../../../../lib/helper/rtl_helpers'; -import { Ping } from '../../../../../common/runtime_types/ping'; -import * as observabilityPublic from '../../../../../../observability/public'; +import { mockReduxHooks } from '../../../../../lib/helper/test_helpers'; +import { render } from '../../../../../lib/helper/rtl_helpers'; +import { Ping } from '../../../../../../common/runtime_types/ping'; +import * as observabilityPublic from '../../../../../../../observability/public'; mockReduxHooks(); -jest.mock('../../../../../../observability/public', () => { - const originalModule = jest.requireActual('../../../../../../observability/public'); +jest.mock('../../../../../../../observability/public', () => { + const originalModule = jest.requireActual('../../../../../../../observability/public'); return { ...originalModule, @@ -92,4 +93,26 @@ describe('Ping Timestamp component', () => { const { container } = render(); expect(container.querySelector('img')?.src).toBe(src); }); + + it('displays popover image when mouse enters img caption, and hides onLeave', async () => { + const src = 'http://sample.com/sampleImageSrc.png'; + jest.spyOn(observabilityPublic, 'useFetcher').mockReturnValue({ + status: FETCH_STATUS.SUCCESS, + data: { src }, + refetch: () => null, + }); + const { getByAltText, getByText, queryByAltText } = render( + + ); + const caption = getByText('Nov 26, 2020 10:28:56 AM'); + fireEvent.mouseEnter(caption); + + const altText = `A larger version of the screenshot for this journey step's thumbnail.`; + + await waitFor(() => getByAltText(altText)); + + fireEvent.mouseLeave(caption); + + await waitFor(() => expect(queryByAltText(altText)).toBeNull()); + }); }); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.tsx new file mode 100644 index 0000000000000..6d605f25f6f68 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.tsx @@ -0,0 +1,120 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useContext, useEffect, useState } from 'react'; +import useIntersection from 'react-use/lib/useIntersection'; +import styled from 'styled-components'; +import { Ping } from '../../../../../../common/runtime_types/ping'; +import { useFetcher, FETCH_STATUS } from '../../../../../../../observability/public'; +import { getJourneyScreenshot } from '../../../../../state/api/journey'; +import { UptimeSettingsContext } from '../../../../../contexts'; +import { NavButtons } from './nav_buttons'; +import { NoImageDisplay } from './no_image_display'; +import { StepImageCaption } from './step_image_caption'; +import { StepImagePopover } from './step_image_popover'; +import { formatCaptionContent } from './translations'; + +const StepDiv = styled.div` + figure.euiImage { + div.stepArrowsFullScreen { + display: none; + } + } + + figure.euiImage-isFullScreen { + div.stepArrowsFullScreen { + display: flex; + } + } + position: relative; + div.stepArrows { + display: none; + } + :hover { + div.stepArrows { + display: flex; + } + } +`; + +interface Props { + timestamp: string; + ping: Ping; +} + +export const PingTimestamp = ({ timestamp, ping }: Props) => { + const [stepNumber, setStepNumber] = useState(1); + const [isImagePopoverOpen, setIsImagePopoverOpen] = useState(false); + + const [stepImages, setStepImages] = useState([]); + + const intersectionRef = React.useRef(null); + + const { basePath } = useContext(UptimeSettingsContext); + + const imgPath = `${basePath}/api/uptime/journey/screenshot/${ping.monitor.check_group}/${stepNumber}`; + + const intersection = useIntersection(intersectionRef, { + root: null, + rootMargin: '0px', + threshold: 1, + }); + + const { data, status } = useFetcher(() => { + if (intersection && intersection.intersectionRatio === 1 && !stepImages[stepNumber - 1]) + return getJourneyScreenshot(imgPath); + }, [intersection?.intersectionRatio, stepNumber]); + + useEffect(() => { + if (data) { + setStepImages((prevState) => [...prevState, data?.src]); + } + }, [data]); + + const imgSrc = stepImages[stepNumber] || data?.src; + + const captionContent = formatCaptionContent(stepNumber, data?.maxSteps); + + const ImageCaption = ( + + ); + + return ( + setIsImagePopoverOpen(true)} + onMouseLeave={() => setIsImagePopoverOpen(false)} + ref={intersectionRef} + > + {imgSrc ? ( + + ) : ( + + )} + + + ); +}; diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.test.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.test.tsx new file mode 100644 index 0000000000000..ef1d0cb388a18 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.test.tsx @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { fireEvent, waitFor } from '@testing-library/react'; +import React from 'react'; +import { render } from '../../../../../lib/helper/rtl_helpers'; +import { StepImageCaption, StepImageCaptionProps } from './step_image_caption'; + +describe('StepImageCaption', () => { + let defaultProps: StepImageCaptionProps; + + beforeEach(() => { + defaultProps = { + captionContent: 'test caption content', + imgSrc: 'http://sample.com/sampleImageSrc.png', + maxSteps: 3, + setStepNumber: jest.fn(), + stepNumber: 2, + timestamp: '2020-11-26T15:28:56.896Z', + }; + }); + + it('labels prev and next buttons', () => { + const { getByLabelText } = render(); + + expect(getByLabelText('Previous step')); + expect(getByLabelText('Next step')); + }); + + it('increments step number on next click', async () => { + const { getByLabelText } = render(); + + const nextButton = getByLabelText('Next step'); + + fireEvent.click(nextButton); + + await waitFor(() => { + expect(defaultProps.setStepNumber).toHaveBeenCalledTimes(1); + expect(defaultProps.setStepNumber).toHaveBeenCalledWith(3); + }); + }); + + it('decrements step number on prev click', async () => { + const { getByLabelText } = render(); + + const nextButton = getByLabelText('Previous step'); + + fireEvent.click(nextButton); + + await waitFor(() => { + expect(defaultProps.setStepNumber).toHaveBeenCalledTimes(1); + expect(defaultProps.setStepNumber).toHaveBeenCalledWith(1); + }); + }); + + it('disables `next` button on final step', () => { + defaultProps.stepNumber = 3; + + const { getByLabelText } = render(); + + // getByLabelText('Next step'); + expect(getByLabelText('Next step')).toHaveAttribute('disabled'); + expect(getByLabelText('Previous step')).not.toHaveAttribute('disabled'); + }); + + it('disables `prev` button on final step', () => { + defaultProps.stepNumber = 1; + + const { getByLabelText } = render(); + + expect(getByLabelText('Next step')).not.toHaveAttribute('disabled'); + expect(getByLabelText('Previous step')).toHaveAttribute('disabled'); + }); + + it('renders a timestamp', () => { + const { getByText } = render(); + + getByText('Nov 26, 2020 10:28:56 AM'); + }); + + it('renders caption content', () => { + const { getByText } = render(); + + getByText('test caption content'); + }); +}); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.tsx new file mode 100644 index 0000000000000..c5da98bacc431 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.tsx @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText } from '@elastic/eui'; +import React from 'react'; +import moment from 'moment'; +import { nextAriaLabel, prevAriaLabel } from './translations'; +import { getShortTimeStamp } from '../../../../overview/monitor_list/columns/monitor_status_column'; + +export interface StepImageCaptionProps { + captionContent: string; + imgSrc?: string; + maxSteps?: number; + setStepNumber: React.Dispatch>; + stepNumber: number; + timestamp: string; +} + +export const StepImageCaption: React.FC = ({ + captionContent, + imgSrc, + maxSteps, + setStepNumber, + stepNumber, + timestamp, +}) => { + return ( + <> +
+ {imgSrc && ( + + + { + setStepNumber(stepNumber - 1); + }} + iconType="arrowLeft" + aria-label={prevAriaLabel} + /> + + + {captionContent} + + + { + setStepNumber(stepNumber + 1); + }} + iconType="arrowRight" + aria-label={nextAriaLabel} + /> + + + )} +
+ {/* TODO: Add link to details page once it's available */} + {getShortTimeStamp(moment(timestamp))} + + + ); +}; diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.test.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.test.tsx new file mode 100644 index 0000000000000..184794c1465aa --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.test.tsx @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { fireEvent, waitFor } from '@testing-library/react'; +import React from 'react'; +import { StepImagePopover, StepImagePopoverProps } from './step_image_popover'; +import { render } from '../../../../../lib/helper/rtl_helpers'; + +describe('StepImagePopover', () => { + let defaultProps: StepImagePopoverProps; + + beforeEach(() => { + defaultProps = { + captionContent: 'test caption', + imageCaption:
test caption element
, + imgSrc: 'http://sample.com/sampleImageSrc.png', + isImagePopoverOpen: false, + }; + }); + + it('opens displays full-size image on click, hides after close is closed', async () => { + const { getByAltText, getByLabelText, queryByLabelText } = render( + + ); + + const closeFullScreenButton = 'Close full screen test caption image'; + + expect(queryByLabelText(closeFullScreenButton)).toBeNull(); + + const caption = getByAltText('test caption'); + fireEvent.click(caption); + + await waitFor(() => { + const closeButton = getByLabelText(closeFullScreenButton); + fireEvent.click(closeButton); + }); + + await waitFor(() => { + expect(queryByLabelText(closeFullScreenButton)).toBeNull(); + }); + }); + + it('shows the popover when `isOpen` is true', () => { + defaultProps.isImagePopoverOpen = true; + + const { getByAltText } = render(); + + expect(getByAltText(`A larger version of the screenshot for this journey step's thumbnail.`)); + }); + + it('renders caption content', () => { + const { getByRole } = render(); + const image = getByRole('img'); + expect(image).toHaveAttribute('alt', 'test caption'); + expect(image).toHaveAttribute('src', 'http://sample.com/sampleImageSrc.png'); + }); +}); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.tsx new file mode 100644 index 0000000000000..fd7b7e6a886bb --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.tsx @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { EuiImage, EuiPopover } from '@elastic/eui'; +import React from 'react'; +import styled from 'styled-components'; +import { fullSizeImageAlt } from './translations'; + +const POPOVER_IMG_HEIGHT = 360; +const POPOVER_IMG_WIDTH = 640; + +const StepImage = styled(EuiImage)` + &&& { + display: flex; + figcaption { + white-space: nowrap; + align-self: center; + margin-left: 8px; + margin-top: 8px; + text-decoration: none !important; + } + } +`; +export interface StepImagePopoverProps { + captionContent: string; + imageCaption: JSX.Element; + imgSrc: string; + isImagePopoverOpen: boolean; +} + +export const StepImagePopover: React.FC = ({ + captionContent, + imageCaption, + imgSrc, + isImagePopoverOpen, +}) => ( + + } + isOpen={isImagePopoverOpen} + > + + +); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/translations.ts b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/translations.ts new file mode 100644 index 0000000000000..ad49143a68057 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/columns/ping_timestamp/translations.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; + +export const prevAriaLabel = i18n.translate('xpack.uptime.synthetics.prevStepButton.airaLabel', { + defaultMessage: 'Previous step', +}); + +export const nextAriaLabel = i18n.translate('xpack.uptime.synthetics.nextStepButton.ariaLabel', { + defaultMessage: 'Next step', +}); + +export const imageLoadingSpinnerAriaLabel = i18n.translate( + 'xpack.uptime.synthetics.imageLoadingSpinner.ariaLabel', + { + defaultMessage: 'An animated spinner indicating the image is loading', + } +); + +export const fullSizeImageAlt = i18n.translate('xpack.uptime.synthetics.thumbnail.fullSize.alt', { + defaultMessage: `A larger version of the screenshot for this journey step's thumbnail.`, +}); + +export const formatCaptionContent = (stepNumber: number, stepName?: number) => + i18n.translate('xpack.uptime.synthetics.pingTimestamp.captionContent', { + defaultMessage: 'Step: {stepNumber} {stepName}', + values: { + stepNumber, + stepName, + }, + }); diff --git a/x-pack/plugins/uptime/public/components/monitor/synthetics/step_screenshot_display.tsx b/x-pack/plugins/uptime/public/components/monitor/synthetics/step_screenshot_display.tsx index 3efcff196b55f..716e877c50943 100644 --- a/x-pack/plugins/uptime/public/components/monitor/synthetics/step_screenshot_display.tsx +++ b/x-pack/plugins/uptime/public/components/monitor/synthetics/step_screenshot_display.tsx @@ -98,7 +98,7 @@ export const StepScreenshotDisplay: FC = ({ closePopover={() => setIsImagePopoverOpen(false)} isOpen={isImagePopoverOpen} > - { = ({ } ) } - src={imgSrc} + url={imgSrc} style={{ width: POPOVER_IMG_WIDTH, height: POPOVER_IMG_HEIGHT, objectFit: 'contain' }} /> From 151457cd0d4be14f48852927d7b1c648c26d1785 Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Mon, 1 Feb 2021 22:38:16 -0500 Subject: [PATCH 69/85] [Time to Visualize] Dashboard By Value Testing Lens (#89581) * added lens by value tests --- .../apps/dashboard/dashboard_lens_by_value.ts | 72 +++++++++++++++++++ .../test/functional/apps/dashboard/index.ts | 1 + .../dashboard_mode/dashboard_empty_screen.js | 33 +-------- .../test/functional/page_objects/lens_page.ts | 46 +++++++++++- 4 files changed, 120 insertions(+), 32 deletions(-) create mode 100644 x-pack/test/functional/apps/dashboard/dashboard_lens_by_value.ts diff --git a/x-pack/test/functional/apps/dashboard/dashboard_lens_by_value.ts b/x-pack/test/functional/apps/dashboard/dashboard_lens_by_value.ts new file mode 100644 index 0000000000000..0a153aecec323 --- /dev/null +++ b/x-pack/test/functional/apps/dashboard/dashboard_lens_by_value.ts @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const PageObjects = getPageObjects(['common', 'dashboard', 'visualize', 'lens']); + + const find = getService('find'); + const esArchiver = getService('esArchiver'); + const dashboardPanelActions = getService('dashboardPanelActions'); + const dashboardVisualizations = getService('dashboardVisualizations'); + + describe('dashboard lens by value', function () { + before(async () => { + await esArchiver.loadIfNeeded('logstash_functional'); + await esArchiver.loadIfNeeded('lens/basic'); + await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.preserveCrossAppState(); + await PageObjects.dashboard.clickNewDashboard(); + }); + + it('can add a lens panel by value', async () => { + await dashboardVisualizations.ensureNewVisualizationDialogIsShowing(); + await PageObjects.lens.createAndAddLensFromDashboard({}); + const newPanelCount = await PageObjects.dashboard.getPanelCount(); + expect(newPanelCount).to.eql(1); + }); + + it('edits to a by value lens panel are properly applied', async () => { + await PageObjects.dashboard.waitForRenderComplete(); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.clickEdit(); + await PageObjects.lens.switchToVisualization('donut'); + await PageObjects.lens.saveAndReturn(); + await PageObjects.dashboard.waitForRenderComplete(); + + const pieExists = await find.existsByCssSelector('.lnsPieExpression__container'); + expect(pieExists).to.be(true); + }); + + it('editing and saving a lens by value panel retains number of panels', async () => { + const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + await PageObjects.dashboard.waitForRenderComplete(); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.clickEdit(); + await PageObjects.lens.switchToVisualization('treemap'); + await PageObjects.lens.saveAndReturn(); + await PageObjects.dashboard.waitForRenderComplete(); + const newPanelCount = await PageObjects.dashboard.getPanelCount(); + expect(newPanelCount).to.eql(originalPanelCount); + }); + + it('updates panel on dashboard when a by value panel is saved to library', async () => { + const newTitle = 'look out library, here I come!'; + const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + await PageObjects.dashboard.waitForRenderComplete(); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.clickEdit(); + await PageObjects.lens.save(newTitle, false, true); + await PageObjects.dashboard.waitForRenderComplete(); + const newPanelCount = await PageObjects.dashboard.getPanelCount(); + expect(newPanelCount).to.eql(originalPanelCount); + const titles = await PageObjects.dashboard.getPanelTitles(); + expect(titles.indexOf(newTitle)).to.not.be(-1); + }); + }); +} diff --git a/x-pack/test/functional/apps/dashboard/index.ts b/x-pack/test/functional/apps/dashboard/index.ts index 1ba87f89762a1..d6c0c4394e24a 100644 --- a/x-pack/test/functional/apps/dashboard/index.ts +++ b/x-pack/test/functional/apps/dashboard/index.ts @@ -15,5 +15,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./drilldowns')); loadTestFile(require.resolve('./sync_colors')); loadTestFile(require.resolve('./_async_dashboard')); + loadTestFile(require.resolve('./dashboard_lens_by_value')); }); } diff --git a/x-pack/test/functional/apps/dashboard_mode/dashboard_empty_screen.js b/x-pack/test/functional/apps/dashboard_mode/dashboard_empty_screen.js index bd35374643e9b..9408bee7dc868 100644 --- a/x-pack/test/functional/apps/dashboard_mode/dashboard_empty_screen.js +++ b/x-pack/test/functional/apps/dashboard_mode/dashboard_empty_screen.js @@ -7,7 +7,6 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const log = getService('log'); const testSubjects = getService('testSubjects'); const esArchiver = getService('esArchiver'); const dashboardVisualizations = getService('dashboardVisualizations'); @@ -27,40 +26,12 @@ export default function ({ getPageObjects, getService }) { await PageObjects.dashboard.gotoDashboardLandingPage(); }); - async function createAndAddLens(title, saveAsNew = false, redirectToOrigin = true) { - log.debug(`createAndAddLens(${title})`); - const inViewMode = await PageObjects.dashboard.getIsInViewMode(); - if (inViewMode) { - await PageObjects.dashboard.switchToEditMode(); - } - await PageObjects.visualize.clickLensWidget(); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ - dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', - operation: 'date_histogram', - field: '@timestamp', - }); - - await PageObjects.lens.configureDimension({ - dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', - operation: 'avg', - field: 'bytes', - }); - - await PageObjects.lens.configureDimension({ - dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', - operation: 'terms', - field: 'ip', - }); - await PageObjects.lens.save(title, saveAsNew, redirectToOrigin); - } - it('adds Lens visualization to empty dashboard', async () => { const title = 'Dashboard Test Lens'; await testSubjects.exists('addVisualizationButton'); await testSubjects.click('addVisualizationButton'); await dashboardVisualizations.ensureNewVisualizationDialogIsShowing(); - await createAndAddLens(title); + await PageObjects.lens.createAndAddLensFromDashboard({ title, redirectToOrigin: true }); await PageObjects.dashboard.waitForRenderComplete(); await testSubjects.exists(`embeddablePanelHeading-${title}`); }); @@ -118,7 +89,7 @@ export default function ({ getPageObjects, getService }) { await testSubjects.exists('dashboardAddNewPanelButton'); await testSubjects.click('dashboardAddNewPanelButton'); await dashboardVisualizations.ensureNewVisualizationDialogIsShowing(); - await createAndAddLens(title, false, false); + await PageObjects.lens.createAndAddLensFromDashboard({ title }); await PageObjects.lens.notLinkedToOriginatingApp(); await PageObjects.common.navigateToApp('dashboard'); }); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 17f9fb036129a..292e91866d690 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -16,7 +16,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont const find = getService('find'); const comboBox = getService('comboBox'); const browser = getService('browser'); - const PageObjects = getPageObjects(['header', 'timePicker', 'common', 'visualize']); + const PageObjects = getPageObjects(['header', 'timePicker', 'common', 'visualize', 'dashboard']); return logWrapper('lensPage', log, { /** @@ -586,5 +586,49 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont // TODO: target dimensionTrigger color element after merging https://github.com/elastic/kibana/pull/76871 await testSubjects.getAttribute('colorPickerAnchor', color); }, + + /** + * Creates and saves a lens visualization from a dashboard + * + * @param title - title for the new lens. If left undefined, the panel will be created by value + * @param redirectToOrigin - whether to redirect back to the dashboard after saving the panel + */ + async createAndAddLensFromDashboard({ + title, + redirectToOrigin, + }: { + title?: string; + redirectToOrigin?: boolean; + }) { + log.debug(`createAndAddLens${title}`); + const inViewMode = await PageObjects.dashboard.getIsInViewMode(); + if (inViewMode) { + await PageObjects.dashboard.switchToEditMode(); + } + await PageObjects.visualize.clickLensWidget(); + await this.goToTimeRange(); + await this.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + await this.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'avg', + field: 'bytes', + }); + + await this.configureDimension({ + dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'ip', + }); + if (title) { + await this.save(title, false, redirectToOrigin); + } else { + await this.saveAndReturn(); + } + }, }); } From 0283ca031dc782bb9772ed9a4cb7e71512672bff Mon Sep 17 00:00:00 2001 From: "Devin W. Hurley" Date: Mon, 1 Feb 2021 22:50:42 -0500 Subject: [PATCH 70/85] [Security Solution] [Detections] adds log info level for logging in cloud (#89941) --- .../signals/search_after_bulk_create.ts | 2 ++ .../signals/signal_rule_alert_type.ts | 15 +++++++++++++++ .../server/lib/detection_engine/signals/types.ts | 7 ++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.ts index 3030bd8c52c70..2aa8981cc618b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.ts @@ -70,6 +70,7 @@ export const searchAfterAndBulkCreate = async ({ interval, buildRuleMessage, }); + const tuplesToBeLogged = [...totalToFromTuples]; logger.debug(buildRuleMessage(`totalToFromTuples: ${totalToFromTuples.length}`)); while (totalToFromTuples.length > 0) { @@ -294,5 +295,6 @@ export const searchAfterAndBulkCreate = async ({ } } logger.debug(buildRuleMessage(`[+] completed bulk index of ${toReturn.createdSignalsCount}`)); + toReturn.totalToFromTuples = tuplesToBeLogged; return toReturn; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.ts index d08ab66af5683..2b0abdfdfa090 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.ts @@ -670,6 +670,21 @@ export const signalRulesAlertType = ({ lastLookBackDate: result.lastLookBackDate?.toISOString(), }); } + + // adding this log line so we can get some information from cloud + logger.info( + buildRuleMessage( + `[+] Finished indexing ${result.createdSignalsCount} ${ + !isEmpty(result.totalToFromTuples) + ? `signals searched between date ranges ${JSON.stringify( + result.totalToFromTuples, + null, + 2 + )}` + : '' + }` + ) + ); } else { const errorMessage = buildRuleMessage( 'Bulk Indexing of signals failed:', diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts index 5ae411678aa03..cb955673a7ea6 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts @@ -5,7 +5,7 @@ */ import { DslQuery, Filter } from 'src/plugins/data/common'; -import moment from 'moment'; +import moment, { Moment } from 'moment'; import { Status } from '../../../../common/detection_engine/schemas/common/schemas'; import { RulesSchema } from '../../../../common/detection_engine/schemas/response/rules_schema'; import { @@ -263,6 +263,11 @@ export interface SearchAfterAndBulkCreateReturnType { createdSignalsCount: number; createdSignals: SignalHit[]; errors: string[]; + totalToFromTuples?: Array<{ + to: Moment | undefined; + from: Moment | undefined; + maxSignals: number; + }>; } export interface ThresholdAggregationBucket extends TermAggregationBucket { From 2e5341d3db6a0c83fd099661707c7312c2a632ea Mon Sep 17 00:00:00 2001 From: Frank Hassanabad Date: Mon, 1 Feb 2021 21:35:45 -0700 Subject: [PATCH 71/85] Fixes the permissions to require cluster.manage in order to create an index and in order to update an index (#89947) ## Summary Fixes error toaster on signals upgrades as well as creation of new signals if you have a user without a cluster manage privilege. Simplest way to manually test both situations of a user on creating a new signal as well as upgrade is to first create a new role like so in dev tools: ```ts PUT _security/role/reduced_permissions { "indices":[ { "names":[ ".siem-signals-*", ".lists-*", ".items-*" ], "privileges":[ "all" ], "field_security":{ "grant":[ "*" ] }, "allow_restricted_indices":false } ], "applications":[ { "application":"kibana-.kibana", "privileges":[ "space_all" ], "resources":[ "space:default" ] } ] } ``` You might have to change this line above to match what your `kibana.index` is set to if it is set: ```ts "application" : "kibana-.kibana-hassanabad8", ``` Double check things in Stack Management to ensure you have access to at least default space: Screen Shot 2021-02-01 at 5 45 54 PM Next add a user which has this role of `reduced_permissions` to login as that user. Next for testing that this causes an error toaster when there is no signals index is to either manually delete your signals index or change your `kibana.dev.yml` so that it thinks you have a new index: ```ts xpack.securitySolution.signalsIndex: .siem-signals-some-new-index-name ``` Start up Kibana, login with the new user and visit any page and notice you get an error toaster like below: Screen Shot 2021-02-01 at 5 04 17 PM And also notice that you are blocked from viewing signals at this point: Screen Shot 2021-02-01 at 5 04 43 PM For upgrading signals manually, you can change the version number from dev tools or increment the number directly within this file and restart Kibana: https://github.com/elastic/kibana/blob/master/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/get_signals_template.ts#L10 When you visit the detection page you will see the same error toaster and also be blocked. With this PR you will no longer be blocked. ### Checklist Delete any items that are not applicable to this PR. - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../containers/detection_engine/alerts/use_privilege_user.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_privilege_user.tsx b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_privilege_user.tsx index 191c3955caa9b..c444702312ffb 100644 --- a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_privilege_user.tsx +++ b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_privilege_user.tsx @@ -62,7 +62,7 @@ export const usePrivilegeUser = (): ReturnPrivilegeUser => { setPrivilegeUser({ isAuthenticated: privilege.is_authenticated, hasEncryptionKey: privilege.has_encryption_key, - hasIndexManage: privilege.index[indexName].manage, + hasIndexManage: privilege.index[indexName].manage && privilege.cluster.manage, hasIndexMaintenance: privilege.index[indexName].maintenance, hasIndexWrite: privilege.index[indexName].create || From c38d9b00118f2fe41c7a579c42cddd9a4f49f9a8 Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Tue, 2 Feb 2021 00:22:05 -0500 Subject: [PATCH 72/85] [Uptime] Fix synthetics detail step count (#89940) * Add parameter to allow filtering by step type. Write tests. * Delete unneeded fields. * PR feedback. --- .../step_detail/step_detail_container.tsx | 2 +- .../uptime/public/state/actions/journey.ts | 1 + .../uptime/public/state/api/journey.ts | 2 +- .../lib/requests/get_journey_steps.test.ts | 196 ++++++++++++++++++ .../server/lib/requests/get_journey_steps.ts | 14 +- .../uptime/server/rest_api/pings/journeys.ts | 9 + 6 files changed, 221 insertions(+), 3 deletions(-) create mode 100644 x-pack/plugins/uptime/server/lib/requests/get_journey_steps.test.ts diff --git a/x-pack/plugins/uptime/public/components/monitor/synthetics/step_detail/step_detail_container.tsx b/x-pack/plugins/uptime/public/components/monitor/synthetics/step_detail/step_detail_container.tsx index bdc6dbf3f6de2..3d9b646931e7d 100644 --- a/x-pack/plugins/uptime/public/components/monitor/synthetics/step_detail/step_detail_container.tsx +++ b/x-pack/plugins/uptime/public/components/monitor/synthetics/step_detail/step_detail_container.tsx @@ -32,7 +32,7 @@ export const StepDetailContainer: React.FC = ({ checkGroup, stepIndex }) useEffect(() => { if (checkGroup) { - dispatch(getJourneySteps({ checkGroup })); + dispatch(getJourneySteps({ checkGroup, syntheticEventTypes: ['step/end'] })); } }, [dispatch, checkGroup]); diff --git a/x-pack/plugins/uptime/public/state/actions/journey.ts b/x-pack/plugins/uptime/public/state/actions/journey.ts index 0d35559d97fc3..5931980c56947 100644 --- a/x-pack/plugins/uptime/public/state/actions/journey.ts +++ b/x-pack/plugins/uptime/public/state/actions/journey.ts @@ -9,6 +9,7 @@ import { SyntheticsJourneyApiResponse } from '../../../common/runtime_types'; export interface FetchJourneyStepsParams { checkGroup: string; + syntheticEventTypes?: string[]; } export interface GetJourneyFailPayload { diff --git a/x-pack/plugins/uptime/public/state/api/journey.ts b/x-pack/plugins/uptime/public/state/api/journey.ts index 1aeeb485e481f..684056b197f93 100644 --- a/x-pack/plugins/uptime/public/state/api/journey.ts +++ b/x-pack/plugins/uptime/public/state/api/journey.ts @@ -16,7 +16,7 @@ export async function fetchJourneySteps( ): Promise { return (await apiService.get( `/api/uptime/journey/${params.checkGroup}`, - undefined, + { syntheticEventTypes: params.syntheticEventTypes }, SyntheticsJourneyApiResponseType )) as SyntheticsJourneyApiResponse; } diff --git a/x-pack/plugins/uptime/server/lib/requests/get_journey_steps.test.ts b/x-pack/plugins/uptime/server/lib/requests/get_journey_steps.test.ts new file mode 100644 index 0000000000000..8c432ff6f1e0f --- /dev/null +++ b/x-pack/plugins/uptime/server/lib/requests/get_journey_steps.test.ts @@ -0,0 +1,196 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { getJourneySteps, formatSyntheticEvents } from './get_journey_steps'; +import { getUptimeESMockClient } from './helper'; + +describe('getJourneySteps request module', () => { + describe('formatStepTypes', () => { + it('returns default steps if none are provided', () => { + expect(formatSyntheticEvents()).toMatchInlineSnapshot(` + Array [ + "step/end", + "stderr", + "cmd/status", + "step/screenshot", + ] + `); + }); + + it('returns provided step array if isArray', () => { + expect(formatSyntheticEvents(['step/end', 'stderr'])).toMatchInlineSnapshot(` + Array [ + "step/end", + "stderr", + ] + `); + }); + + it('returns provided step string in an array', () => { + expect(formatSyntheticEvents('step/end')).toMatchInlineSnapshot(` + Array [ + "step/end", + ] + `); + }); + }); + + describe('getJourneySteps', () => { + let data: any; + beforeEach(() => { + data = { + body: { + hits: { + hits: [ + { + _id: 'o6myXncBFt2V8m6r6z-r', + _source: { + '@timestamp': '2021-02-01T17:45:19.001Z', + synthetics: { + package_version: '0.0.1-alpha.8', + journey: { + name: 'inline', + id: 'inline', + }, + step: { + name: 'load homepage', + index: 1, + }, + type: 'step/end', + }, + monitor: { + name: 'My Monitor', + id: 'my-monitor', + check_group: '2bf952dc-64b5-11eb-8b3b-42010a84000d', + type: 'browser', + }, + }, + }, + { + _id: 'IjqzXncBn2sjqrYxYoCG', + _source: { + '@timestamp': '2021-02-01T17:45:49.944Z', + synthetics: { + package_version: '0.0.1-alpha.8', + journey: { + name: 'inline', + id: 'inline', + }, + step: { + name: 'hover over products menu', + index: 2, + }, + type: 'step/end', + }, + monitor: { + name: 'My Monitor', + timespan: { + lt: '2021-02-01T17:46:49.945Z', + gte: '2021-02-01T17:45:49.945Z', + }, + id: 'my-monitor', + check_group: '2bf952dc-64b5-11eb-8b3b-42010a84000d', + type: 'browser', + }, + }, + }, + ], + }, + }, + }; + }); + + it('formats ES result', async () => { + const { esClient: mockEsClient, uptimeEsClient } = getUptimeESMockClient(); + + mockEsClient.search.mockResolvedValueOnce(data as any); + const result: any = await getJourneySteps({ + uptimeEsClient, + checkGroup: '2bf952dc-64b5-11eb-8b3b-42010a84000d', + }); + expect(mockEsClient.search).toHaveBeenCalledTimes(1); + const call: any = mockEsClient.search.mock.calls[0][0]; + + // check that default `synthetics.type` value is supplied, + expect(call.body.query.bool.filter[0]).toMatchInlineSnapshot(` + Object { + "terms": Object { + "synthetics.type": Array [ + "step/end", + "stderr", + "cmd/status", + "step/screenshot", + ], + }, + } + `); + + // given check group is used for the terms filter + expect(call.body.query.bool.filter[1]).toMatchInlineSnapshot(` + Object { + "term": Object { + "monitor.check_group": "2bf952dc-64b5-11eb-8b3b-42010a84000d", + }, + } + `); + + // should sort by step index, then timestamp + expect(call.body.sort).toMatchInlineSnapshot(` + Array [ + Object { + "synthetics.step.index": Object { + "order": "asc", + }, + }, + Object { + "@timestamp": Object { + "order": "asc", + }, + }, + ] + `); + + expect(result).toHaveLength(2); + // `getJourneySteps` is responsible for formatting these fields, so we need to check them + result.forEach((step: any) => { + expect(['2021-02-01T17:45:19.001Z', '2021-02-01T17:45:49.944Z']).toContain(step.timestamp); + expect(['o6myXncBFt2V8m6r6z-r', 'IjqzXncBn2sjqrYxYoCG']).toContain(step.docId); + expect(step.synthetics.screenshotExists).toBeDefined(); + }); + }); + + it('notes screenshot exists when a document of type step/screenshot is included', async () => { + const { esClient: mockEsClient, uptimeEsClient } = getUptimeESMockClient(); + + data.body.hits.hits[0]._source.synthetics.type = 'step/screenshot'; + data.body.hits.hits[0]._source.synthetics.step.index = 2; + mockEsClient.search.mockResolvedValueOnce(data as any); + + const result: any = await getJourneySteps({ + uptimeEsClient, + checkGroup: '2bf952dc-64b5-11eb-8b3b-42010a84000d', + syntheticEventTypes: ['stderr', 'step/end'], + }); + + const call: any = mockEsClient.search.mock.calls[0][0]; + + // assert that filters for only the provided step types are used + expect(call.body.query.bool.filter[0]).toMatchInlineSnapshot(` + Object { + "terms": Object { + "synthetics.type": Array [ + "stderr", + "step/end", + ], + }, + } + `); + + expect(result).toHaveLength(1); + expect(result[0].synthetics.screenshotExists).toBe(true); + }); + }); +}); diff --git a/x-pack/plugins/uptime/server/lib/requests/get_journey_steps.ts b/x-pack/plugins/uptime/server/lib/requests/get_journey_steps.ts index c330e1b66fe93..60d2a97c99f7d 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_journey_steps.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_journey_steps.ts @@ -9,11 +9,23 @@ import { Ping } from '../../../common/runtime_types'; interface GetJourneyStepsParams { checkGroup: string; + syntheticEventTypes?: string | string[]; } +const defaultEventTypes = ['step/end', 'stderr', 'cmd/status', 'step/screenshot']; + +export const formatSyntheticEvents = (eventTypes?: string | string[]) => { + if (!eventTypes) { + return defaultEventTypes; + } else { + return Array.isArray(eventTypes) ? eventTypes : [eventTypes]; + } +}; + export const getJourneySteps: UMElasticsearchQueryFn = async ({ uptimeEsClient, checkGroup, + syntheticEventTypes, }) => { const params = { query: { @@ -21,7 +33,7 @@ export const getJourneySteps: UMElasticsearchQueryFn checkGroup: schema.string(), _debug: schema.maybe(schema.boolean()), }), + query: schema.object({ + // provides a filter for the types of synthetic events to include + // when fetching a journey's data + syntheticEventTypes: schema.maybe( + schema.oneOf([schema.arrayOf(schema.string()), schema.string()]) + ), + }), }, handler: async ({ uptimeEsClient, request }): Promise => { const { checkGroup } = request.params; + const { syntheticEventTypes } = request.query; const result = await libs.requests.getJourneySteps({ uptimeEsClient, checkGroup, + syntheticEventTypes, }); const details = await libs.requests.getJourneyDetails({ From bdca03dcfde4e7d5c398bf845a9347401f824b8c Mon Sep 17 00:00:00 2001 From: Robert Oskamp Date: Tue, 2 Feb 2021 09:47:23 +0100 Subject: [PATCH 73/85] [ML] Functional tests - skip DFA clone tests --- x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts index 532de930bc1a1..91ca0e6f32fd8 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts @@ -13,7 +13,8 @@ export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const ml = getService('ml'); - describe('jobs cloning supported by UI form', function () { + // Failing ES promotion, see https://github.com/elastic/kibana/issues/89980 + describe.skip('jobs cloning supported by UI form', function () { const testDataList: Array<{ suiteTitle: string; archive: string; From 7a45fc45e1628b66f7fee3e73a89274b5dfac4f3 Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Tue, 2 Feb 2021 11:29:42 +0200 Subject: [PATCH 74/85] [Alerts] ServiceNow SIR Connector (#88190) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-optimizer/limits.yml | 2 +- x-pack/plugins/actions/README.md | 54 ++- .../server/builtin_action_types/index.ts | 8 +- .../servicenow/api.test.ts | 12 +- .../builtin_action_types/servicenow/api.ts | 11 + .../builtin_action_types/servicenow/index.ts | 65 +++- .../builtin_action_types/servicenow/mocks.ts | 41 ++- .../builtin_action_types/servicenow/schema.ts | 83 ++++- .../servicenow/service.test.ts | 243 +++++++++++++- .../servicenow/service.ts | 63 +++- .../servicenow/translations.ts | 10 +- .../builtin_action_types/servicenow/types.ts | 61 +++- x-pack/plugins/actions/server/index.ts | 3 +- .../case/common/api/connectors/mappings.ts | 10 +- .../routes/api/cases/configure/utils.ts | 8 +- .../configure_cases/mapping.test.tsx | 2 +- .../cases/components/connectors/config.ts | 4 +- .../cases/components/connectors/types.ts | 1 - .../translations/translations/ja-JP.json | 21 -- .../translations/translations/zh-CN.json | 21 -- .../components/builtin_action_types/index.ts | 5 +- .../builtin_action_types/jira/api.test.ts | 14 +- .../builtin_action_types/jira/config.ts | 20 -- .../resilient/api.test.ts | 87 +++++ .../builtin_action_types/resilient/config.ts | 20 -- .../servicenow/api.test.ts | 69 ++++ .../builtin_action_types/servicenow/api.ts | 27 ++ .../builtin_action_types/servicenow/config.ts | 36 +- .../builtin_action_types/servicenow/index.ts | 2 +- .../servicenow/servicenow.test.tsx | 146 ++++---- .../servicenow/servicenow.tsx | 54 ++- ...st.tsx => servicenow_itsm_params.test.tsx} | 139 ++++++-- ..._params.tsx => servicenow_itsm_params.tsx} | 135 ++++---- .../servicenow/servicenow_sir_params.test.tsx | 311 ++++++++++++++++++ .../servicenow/servicenow_sir_params.tsx | 295 +++++++++++++++++ .../servicenow/translations.ts | 127 +++++-- .../builtin_action_types/servicenow/types.ts | 27 +- .../servicenow/use_get_choices.test.tsx | 164 +++++++++ .../servicenow/use_get_choices.tsx | 99 ++++++ .../action_connector_form/action_form.tsx | 14 +- .../public/common/constants/index.ts | 2 + .../public/common/index.ts | 2 +- .../public/components/settings/types.ts | 2 +- .../actions_simulators/server/plugin.ts | 1 + .../server/servicenow_simulation.ts | 45 +++ .../builtin_action_types/servicenow.ts | 83 ++++- 46 files changed, 2235 insertions(+), 414 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/api.test.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/api.test.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/api.ts rename x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/{servicenow_params.test.tsx => servicenow_itsm_params.test.tsx} (53%) rename x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/{servicenow_params.tsx => servicenow_itsm_params.tsx} (64%) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_sir_params.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_sir_params.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_choices.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_choices.tsx diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 794503656ba04..74ee3f7c46e1b 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -78,7 +78,7 @@ pageLoadAssetSize: tileMap: 65337 timelion: 29920 transform: 41007 - triggersActionsUi: 170001 + triggersActionsUi: 186732 uiActions: 97717 uiActionsEnhanced: 313011 upgradeAssistant: 81241 diff --git a/x-pack/plugins/actions/README.md b/x-pack/plugins/actions/README.md index 9472cbf400a6a..1eb94af4dddf8 100644 --- a/x-pack/plugins/actions/README.md +++ b/x-pack/plugins/actions/README.md @@ -70,12 +70,14 @@ Table of Contents - [`params`](#params-6) - [`subActionParams (pushToService)`](#subactionparams-pushtoservice) - [`subActionParams (getFields)`](#subactionparams-getfields) + - [`subActionParams (getIncident)`](#subactionparams-getincident) + - [`subActionParams (getChoices)`](#subactionparams-getchoices) - [Jira](#jira) - [`config`](#config-7) - [`secrets`](#secrets-7) - [`params`](#params-7) - [`subActionParams (pushToService)`](#subactionparams-pushtoservice-1) - - [`subActionParams (getIncident)`](#subactionparams-getincident) + - [`subActionParams (getIncident)`](#subactionparams-getincident-1) - [`subActionParams (issueTypes)`](#subactionparams-issuetypes) - [`subActionParams (fieldsByIssueType)`](#subactionparams-fieldsbyissuetype) - [`subActionParams (issues)`](#subactionparams-issues) @@ -347,17 +349,18 @@ const result = await actionsClient.execute({ Kibana ships with a set of built-in action types: -| Type | Id | Description | -| ------------------------------- | ------------- | ------------------------------------------------------------------ | -| [Server log](#server-log) | `.server-log` | Logs messages to the Kibana log using Kibana's logger | -| [Email](#email) | `.email` | Sends an email using SMTP | -| [Slack](#slack) | `.slack` | Posts a message to a slack channel | -| [Index](#index) | `.index` | Indexes document(s) into Elasticsearch | -| [Webhook](#webhook) | `.webhook` | Send a payload to a web service using HTTP POST or PUT | -| [PagerDuty](#pagerduty) | `.pagerduty` | Trigger, resolve, or acknowlege an incident to a PagerDuty service | -| [ServiceNow](#servicenow) | `.servicenow` | Create or update an incident to a ServiceNow instance | -| [Jira](#jira) | `.jira` | Create or update an issue to a Jira instance | -| [IBM Resilient](#ibm-resilient) | `.resilient` | Create or update an incident to a IBM Resilient instance | +| Type | Id | Description | +| ------------------------------- | ----------------- | ------------------------------------------------------------------ | +| [Server log](#server-log) | `.server-log` | Logs messages to the Kibana log using Kibana's logger | +| [Email](#email) | `.email` | Sends an email using SMTP | +| [Slack](#slack) | `.slack` | Posts a message to a slack channel | +| [Index](#index) | `.index` | Indexes document(s) into Elasticsearch | +| [Webhook](#webhook) | `.webhook` | Send a payload to a web service using HTTP POST or PUT | +| [PagerDuty](#pagerduty) | `.pagerduty` | Trigger, resolve, or acknowlege an incident to a PagerDuty service | +| [ServiceNow ITSM](#servicenow) | `.servicenow` | Create or update an incident to a ServiceNow ITSM instance | +| [ServiceNow SIR](#servicenow) | `.servicenow-sir` | Create or update an incident to a ServiceNow SIR instance | +| [Jira](#jira) | `.jira` | Create or update an issue to a Jira instance | +| [IBM Resilient](#ibm-resilient) | `.resilient` | Create or update an incident to a IBM Resilient instance | --- @@ -549,9 +552,11 @@ For more details see [PagerDuty v2 event parameters](https://v2.developer.pagerd ## ServiceNow -ID: `.servicenow` +ServiceNow ITSM ID: `.servicenow` -The ServiceNow action uses the [V2 Table API](https://developer.servicenow.com/app.do#!/rest_api_doc?v=orlando&id=c_TableAPI) to create and update ServiceNow incidents. +ServiceNow SIR ID: `.servicenow-sir` + +The ServiceNow actions use the [V2 Table API](https://developer.servicenow.com/app.do#!/rest_api_doc?v=orlando&id=c_TableAPI) to create and update ServiceNow incidents. Both action types use the same `config`, `secrets`, and `params` schema. ### `config` @@ -568,10 +573,10 @@ The ServiceNow action uses the [V2 Table API](https://developer.servicenow.com/a ### `params` -| Property | Description | Type | -| --------------- | --------------------------------------------------------------------- | ------ | -| subAction | The sub action to perform. It can be `getFields`, and `pushToService` | string | -| subActionParams | The parameters of the sub action | object | +| Property | Description | Type | +| --------------- | -------------------------------------------------------------------------------------------------- | ------ | +| subAction | The sub action to perform. It can be `pushToService`, `getFields`, `getIncident`, and `getChoices` | string | +| subActionParams | The parameters of the sub action | object | #### `subActionParams (pushToService)` @@ -595,6 +600,19 @@ The following table describes the properties of the `incident` object. No parameters for `getFields` sub-action. Provide an empty object `{}`. +#### `subActionParams (getIncident)` + +| Property | Description | Type | +| ---------- | ------------------------------------- | ------ | +| externalId | The id of the incident in ServiceNow. | string | + + +#### `subActionParams (getChoices)` + +| Property | Description | Type | +| -------- | ------------------------------------------------------------ | -------- | +| fields | An array of fields. Example: `[priority, category, impact]`. | string[] | + --- ## Jira diff --git a/x-pack/plugins/actions/server/builtin_action_types/index.ts b/x-pack/plugins/actions/server/builtin_action_types/index.ts index 3a01b875ec4a0..21161ff8ad0dd 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/index.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/index.ts @@ -14,7 +14,7 @@ import { getActionType as getPagerDutyActionType } from './pagerduty'; import { getActionType as getServerLogActionType } from './server_log'; import { getActionType as getSlackActionType } from './slack'; import { getActionType as getWebhookActionType } from './webhook'; -import { getActionType as getServiceNowActionType } from './servicenow'; +import { getServiceNowITSMActionType, getServiceNowSIRActionType } from './servicenow'; import { getActionType as getJiraActionType } from './jira'; import { getActionType as getResilientActionType } from './resilient'; import { getActionType as getTeamsActionType } from './teams'; @@ -38,7 +38,8 @@ export { } from './webhook'; export { ActionParamsType as ServiceNowActionParams, - ActionTypeId as ServiceNowActionTypeId, + ServiceNowITSMActionTypeId, + ServiceNowSIRActionTypeId, } from './servicenow'; export { ActionParamsType as JiraActionParams, ActionTypeId as JiraActionTypeId } from './jira'; export { @@ -66,7 +67,8 @@ export function registerBuiltInActionTypes({ actionTypeRegistry.register(getServerLogActionType({ logger })); actionTypeRegistry.register(getSlackActionType({ logger, configurationUtilities })); actionTypeRegistry.register(getWebhookActionType({ logger, configurationUtilities })); - actionTypeRegistry.register(getServiceNowActionType({ logger, configurationUtilities })); + actionTypeRegistry.register(getServiceNowITSMActionType({ logger, configurationUtilities })); + actionTypeRegistry.register(getServiceNowSIRActionType({ logger, configurationUtilities })); actionTypeRegistry.register(getJiraActionType({ logger, configurationUtilities })); actionTypeRegistry.register(getResilientActionType({ logger, configurationUtilities })); actionTypeRegistry.register(getTeamsActionType({ logger, configurationUtilities })); diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.test.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.test.ts index 772cd16cc4d51..ef5de9fc487bc 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.test.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.test.ts @@ -5,7 +5,7 @@ */ import { Logger } from '../../../../../../src/core/server'; -import { externalServiceMock, apiParams, serviceNowCommonFields } from './mocks'; +import { externalServiceMock, apiParams, serviceNowCommonFields, serviceNowChoices } from './mocks'; import { ExternalService } from './types'; import { api } from './api'; let mockedLogger: jest.Mocked; @@ -235,4 +235,14 @@ describe('api', () => { expect(res).toEqual(serviceNowCommonFields); }); }); + + describe('getChoices', () => { + test('it returns the fields correctly', async () => { + const res = await api.getChoices({ + externalService, + params: { fields: ['priority'] }, + }); + expect(res).toEqual(serviceNowChoices); + }); + }); }); diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.ts index 9981a8431a736..7f5747277a4e9 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.ts @@ -5,6 +5,8 @@ */ import { ExternalServiceApi, + GetChoicesHandlerArgs, + GetChoicesResponse, GetCommonFieldsHandlerArgs, GetCommonFieldsResponse, GetIncidentApiHandlerArgs, @@ -71,7 +73,16 @@ const getFieldsHandler = async ({ return res; }; +const getChoicesHandler = async ({ + externalService, + params, +}: GetChoicesHandlerArgs): Promise => { + const res = await externalService.getChoices(params.fields); + return res; +}; + export const api: ExternalServiceApi = { + getChoices: getChoicesHandler, getFields: getFieldsHandler, getIncident: getIncidentHandler, handshake: handshakeHandler, diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/index.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/index.ts index 107d86f111deb..fd4991e5f7e98 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/index.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/index.ts @@ -11,7 +11,8 @@ import { validate } from './validators'; import { ExternalIncidentServiceConfiguration, ExternalIncidentServiceSecretConfiguration, - ExecutorParamsSchema, + ExecutorParamsSchemaITSM, + ExecutorParamsSchemaSIR, } from './schema'; import { ActionsConfigurationUtilities } from '../../actions_config'; import { ActionType, ActionTypeExecutorOptions, ActionTypeExecutorResult } from '../../types'; @@ -27,18 +28,26 @@ import { PushToServiceResponse, ExecutorSubActionCommonFieldsParams, ServiceNowExecutorResultData, + ExecutorSubActionGetChoicesParams, } from './types'; -export type ActionParamsType = TypeOf; +export type ActionParamsType = + | TypeOf + | TypeOf; interface GetActionTypeParams { logger: Logger; configurationUtilities: ActionsConfigurationUtilities; } -export const ActionTypeId = '.servicenow'; +const serviceNowITSMTable = 'incident'; +const serviceNowSIRTable = 'sn_si_incident'; + +export const ServiceNowITSMActionTypeId = '.servicenow'; +export const ServiceNowSIRActionTypeId = '.servicenow-sir'; + // action type definition -export function getActionType( +export function getServiceNowITSMActionType( params: GetActionTypeParams ): ActionType< ServiceNowPublicConfigurationType, @@ -48,9 +57,9 @@ export function getActionType( > { const { logger, configurationUtilities } = params; return { - id: ActionTypeId, + id: ServiceNowITSMActionTypeId, minimumLicenseRequired: 'platinum', - name: i18n.NAME, + name: i18n.SERVICENOW_ITSM, validate: { config: schema.object(ExternalIncidentServiceConfiguration, { validate: curry(validate.config)(configurationUtilities), @@ -58,19 +67,46 @@ export function getActionType( secrets: schema.object(ExternalIncidentServiceSecretConfiguration, { validate: curry(validate.secrets)(configurationUtilities), }), - params: ExecutorParamsSchema, + params: ExecutorParamsSchemaITSM, }, - executor: curry(executor)({ logger, configurationUtilities }), + executor: curry(executor)({ logger, configurationUtilities, table: serviceNowITSMTable }), + }; +} + +export function getServiceNowSIRActionType( + params: GetActionTypeParams +): ActionType< + ServiceNowPublicConfigurationType, + ServiceNowSecretConfigurationType, + ExecutorParams, + PushToServiceResponse | {} +> { + const { logger, configurationUtilities } = params; + return { + id: ServiceNowSIRActionTypeId, + minimumLicenseRequired: 'platinum', + name: i18n.SERVICENOW_SIR, + validate: { + config: schema.object(ExternalIncidentServiceConfiguration, { + validate: curry(validate.config)(configurationUtilities), + }), + secrets: schema.object(ExternalIncidentServiceSecretConfiguration, { + validate: curry(validate.secrets)(configurationUtilities), + }), + params: ExecutorParamsSchemaSIR, + }, + executor: curry(executor)({ logger, configurationUtilities, table: serviceNowSIRTable }), }; } // action executor -const supportedSubActions: string[] = ['getFields', 'pushToService']; +const supportedSubActions: string[] = ['getFields', 'pushToService', 'getChoices', 'getIncident']; async function executor( { logger, configurationUtilities, - }: { logger: Logger; configurationUtilities: ActionsConfigurationUtilities }, + table, + }: { logger: Logger; configurationUtilities: ActionsConfigurationUtilities; table: string }, execOptions: ActionTypeExecutorOptions< ServiceNowPublicConfigurationType, ServiceNowSecretConfigurationType, @@ -82,6 +118,7 @@ async function executor( let data: ServiceNowExecutorResultData | null = null; const externalService = createExternalService( + table, { config, secrets, @@ -122,5 +159,13 @@ async function executor( }); } + if (subAction === 'getChoices') { + const getChoicesParams = subActionParams as ExecutorSubActionGetChoicesParams; + data = await api.getChoices({ + externalService, + params: getChoicesParams, + }); + } + return { status: 'ok', data: data ?? {}, actionId }; } diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/mocks.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/mocks.ts index 9d9b1e164e7dd..f958cdb73ebfc 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/mocks.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/mocks.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ExternalService, PushToServiceApiParams, ExecutorSubActionPushParams } from './types'; +import { ExternalService, ExecutorSubActionPushParams } from './types'; export const serviceNowCommonFields = [ { @@ -33,8 +33,43 @@ export const serviceNowCommonFields = [ element: 'sys_updated_by', }, ]; + +export const serviceNowChoices = [ + { + dependent_value: '', + label: '1 - Critical', + value: '1', + element: 'priority', + }, + { + dependent_value: '', + label: '2 - High', + value: '2', + element: 'priority', + }, + { + dependent_value: '', + label: '3 - Moderate', + value: '3', + element: 'priority', + }, + { + dependent_value: '', + label: '4 - Low', + value: '4', + element: 'priority', + }, + { + dependent_value: '', + label: '5 - Planning', + value: '5', + element: 'priority', + }, +]; + const createMock = (): jest.Mocked => { const service = { + getChoices: jest.fn().mockImplementation(() => Promise.resolve(serviceNowChoices)), getFields: jest.fn().mockImplementation(() => Promise.resolve(serviceNowCommonFields)), getIncident: jest.fn().mockImplementation(() => Promise.resolve({ @@ -89,8 +124,6 @@ const executorParams: ExecutorSubActionPushParams = { ], }; -const apiParams: PushToServiceApiParams = { - ...executorParams, -}; +const apiParams = executorParams; export { externalServiceMock, executorParams, apiParams }; diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/schema.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/schema.ts index 1c05fa93f2362..5c7de935223a8 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/schema.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/schema.ts @@ -28,25 +28,48 @@ export const ExecutorSubActionSchema = schema.oneOf([ schema.literal('getIncident'), schema.literal('pushToService'), schema.literal('handshake'), + schema.literal('getChoices'), ]); -export const ExecutorSubActionPushParamsSchema = schema.object({ +const CommentsSchema = schema.nullable( + schema.arrayOf( + schema.object({ + comment: schema.string(), + commentId: schema.string(), + }) + ) +); + +const CommonAttributes = { + short_description: schema.string(), + description: schema.nullable(schema.string()), + externalId: schema.nullable(schema.string()), +}; + +// Schema for ServiceNow Incident Management (ITSM) +export const ExecutorSubActionPushParamsSchemaITSM = schema.object({ incident: schema.object({ - short_description: schema.string(), - description: schema.nullable(schema.string()), - externalId: schema.nullable(schema.string()), + ...CommonAttributes, severity: schema.nullable(schema.string()), urgency: schema.nullable(schema.string()), impact: schema.nullable(schema.string()), }), - comments: schema.nullable( - schema.arrayOf( - schema.object({ - comment: schema.string(), - commentId: schema.string(), - }) - ) - ), + comments: CommentsSchema, +}); + +// Schema for ServiceNow Security Incident Response (SIR) +export const ExecutorSubActionPushParamsSchemaSIR = schema.object({ + incident: schema.object({ + ...CommonAttributes, + category: schema.nullable(schema.string()), + dest_ip: schema.nullable(schema.string()), + malware_hash: schema.nullable(schema.string()), + malware_url: schema.nullable(schema.string()), + priority: schema.nullable(schema.string()), + source_ip: schema.nullable(schema.string()), + subcategory: schema.nullable(schema.string()), + }), + comments: CommentsSchema, }); export const ExecutorSubActionGetIncidentParamsSchema = schema.object({ @@ -56,8 +79,36 @@ export const ExecutorSubActionGetIncidentParamsSchema = schema.object({ // Reserved for future implementation export const ExecutorSubActionHandshakeParamsSchema = schema.object({}); export const ExecutorSubActionCommonFieldsParamsSchema = schema.object({}); +export const ExecutorSubActionGetChoicesParamsSchema = schema.object({ + fields: schema.arrayOf(schema.string()), +}); + +// Executor parameters for ServiceNow Incident Management (ITSM) +export const ExecutorParamsSchemaITSM = schema.oneOf([ + schema.object({ + subAction: schema.literal('getFields'), + subActionParams: ExecutorSubActionCommonFieldsParamsSchema, + }), + schema.object({ + subAction: schema.literal('getIncident'), + subActionParams: ExecutorSubActionGetIncidentParamsSchema, + }), + schema.object({ + subAction: schema.literal('handshake'), + subActionParams: ExecutorSubActionHandshakeParamsSchema, + }), + schema.object({ + subAction: schema.literal('pushToService'), + subActionParams: ExecutorSubActionPushParamsSchemaITSM, + }), + schema.object({ + subAction: schema.literal('getChoices'), + subActionParams: ExecutorSubActionGetChoicesParamsSchema, + }), +]); -export const ExecutorParamsSchema = schema.oneOf([ +// Executor parameters for ServiceNow Security Incident Response (SIR) +export const ExecutorParamsSchemaSIR = schema.oneOf([ schema.object({ subAction: schema.literal('getFields'), subActionParams: ExecutorSubActionCommonFieldsParamsSchema, @@ -72,6 +123,10 @@ export const ExecutorParamsSchema = schema.oneOf([ }), schema.object({ subAction: schema.literal('pushToService'), - subActionParams: ExecutorSubActionPushParamsSchema, + subActionParams: ExecutorSubActionPushParamsSchemaSIR, + }), + schema.object({ + subAction: schema.literal('getChoices'), + subActionParams: ExecutorSubActionGetChoicesParamsSchema, }), ]); diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/service.test.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/service.test.ts index 4ef0e7da166e6..18f3a2f3ff379 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/service.test.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/service.test.ts @@ -12,7 +12,7 @@ import { ExternalService } from './types'; import { Logger } from '../../../../../../src/core/server'; import { loggingSystemMock } from '../../../../../../src/core/server/mocks'; import { actionsConfigMock } from '../../actions_config.mock'; -import { serviceNowCommonFields } from './mocks'; +import { serviceNowCommonFields, serviceNowChoices } from './mocks'; const logger = loggingSystemMock.create().get() as jest.Mocked; jest.mock('axios'); @@ -29,12 +29,14 @@ axios.create = jest.fn(() => axios); const requestMock = utils.request as jest.Mock; const patchMock = utils.patch as jest.Mock; const configurationUtilities = actionsConfigMock.create(); +const table = 'incident'; describe('ServiceNow service', () => { let service: ExternalService; - beforeAll(() => { + beforeEach(() => { service = createExternalService( + table, { // The trailing slash at the end of the url is intended. // All API calls need to have the trailing slash removed. @@ -54,6 +56,7 @@ describe('ServiceNow service', () => { test('throws without url', () => { expect(() => createExternalService( + table, { config: { apiUrl: null }, secrets: { username: 'admin', password: 'admin' }, @@ -67,6 +70,7 @@ describe('ServiceNow service', () => { test('throws without username', () => { expect(() => createExternalService( + table, { config: { apiUrl: 'test.com' }, secrets: { username: '', password: 'admin' }, @@ -80,6 +84,7 @@ describe('ServiceNow service', () => { test('throws without password', () => { expect(() => createExternalService( + table, { config: { apiUrl: 'test.com' }, secrets: { username: '', password: undefined }, @@ -114,6 +119,30 @@ describe('ServiceNow service', () => { }); }); + test('it should call request with correct arguments when table changes', async () => { + service = createExternalService( + 'sn_si_incident', + { + config: { apiUrl: 'https://dev102283.service-now.com/' }, + secrets: { username: 'admin', password: 'admin' }, + }, + logger, + configurationUtilities + ); + + requestMock.mockImplementation(() => ({ + data: { result: { sys_id: '1', number: 'INC01' } }, + })); + + await service.getIncident('1'); + expect(requestMock).toHaveBeenCalledWith({ + axios, + logger, + configurationUtilities, + url: 'https://dev102283.service-now.com/api/now/v2/table/sn_si_incident/1', + }); + }); + test('it should throw an error', async () => { requestMock.mockImplementation(() => { throw new Error('An error has occurred'); @@ -122,6 +151,17 @@ describe('ServiceNow service', () => { 'Unable to get incident with id 1. Error: An error has occurred' ); }); + + test('it should throw an error when instance is not alive', async () => { + requestMock.mockImplementation(() => ({ + status: 200, + data: {}, + request: { connection: { servername: 'Developer instance' } }, + })); + await expect(service.getIncident('1')).rejects.toThrow( + 'There is an issue with your Service Now Instance. Please check Developer instance.' + ); + }); }); describe('createIncident', () => { @@ -161,6 +201,39 @@ describe('ServiceNow service', () => { }); }); + test('it should call request with correct arguments when table changes', async () => { + service = createExternalService( + 'sn_si_incident', + { + config: { apiUrl: 'https://dev102283.service-now.com/' }, + secrets: { username: 'admin', password: 'admin' }, + }, + logger, + configurationUtilities + ); + + requestMock.mockImplementation(() => ({ + data: { result: { sys_id: '1', number: 'INC01', sys_created_on: '2020-03-10 12:24:20' } }, + })); + + const res = await service.createIncident({ + incident: { short_description: 'title', description: 'desc' }, + }); + + expect(requestMock).toHaveBeenCalledWith({ + axios, + logger, + configurationUtilities, + url: 'https://dev102283.service-now.com/api/now/v2/table/sn_si_incident', + method: 'post', + data: { short_description: 'title', description: 'desc' }, + }); + + expect(res.url).toEqual( + 'https://dev102283.service-now.com/nav_to.do?uri=sn_si_incident.do?sys_id=1' + ); + }); + test('it should throw an error', async () => { requestMock.mockImplementation(() => { throw new Error('An error has occurred'); @@ -174,6 +247,17 @@ describe('ServiceNow service', () => { '[Action][ServiceNow]: Unable to create incident. Error: An error has occurred' ); }); + + test('it should throw an error when instance is not alive', async () => { + requestMock.mockImplementation(() => ({ + status: 200, + data: {}, + request: { connection: { servername: 'Developer instance' } }, + })); + await expect(service.getIncident('1')).rejects.toThrow( + 'There is an issue with your Service Now Instance. Please check Developer instance.' + ); + }); }); describe('updateIncident', () => { @@ -214,6 +298,39 @@ describe('ServiceNow service', () => { }); }); + test('it should call request with correct arguments when table changes', async () => { + service = createExternalService( + 'sn_si_incident', + { + config: { apiUrl: 'https://dev102283.service-now.com/' }, + secrets: { username: 'admin', password: 'admin' }, + }, + logger, + configurationUtilities + ); + + patchMock.mockImplementation(() => ({ + data: { result: { sys_id: '1', number: 'INC01', sys_updated_on: '2020-03-10 12:24:20' } }, + })); + + const res = await service.updateIncident({ + incidentId: '1', + incident: { short_description: 'title', description: 'desc' }, + }); + + expect(patchMock).toHaveBeenCalledWith({ + axios, + logger, + configurationUtilities, + url: 'https://dev102283.service-now.com/api/now/v2/table/sn_si_incident/1', + data: { short_description: 'title', description: 'desc' }, + }); + + expect(res.url).toEqual( + 'https://dev102283.service-now.com/nav_to.do?uri=sn_si_incident.do?sys_id=1' + ); + }); + test('it should throw an error', async () => { patchMock.mockImplementation(() => { throw new Error('An error has occurred'); @@ -228,6 +345,7 @@ describe('ServiceNow service', () => { '[Action][ServiceNow]: Unable to update incident with id 1. Error: An error has occurred' ); }); + test('it creates the comment correctly', async () => { patchMock.mockImplementation(() => ({ data: { result: { sys_id: '11', number: 'INC011', sys_updated_on: '2020-03-10 12:24:20' } }, @@ -245,6 +363,17 @@ describe('ServiceNow service', () => { url: 'https://dev102283.service-now.com/nav_to.do?uri=incident.do?sys_id=11', }); }); + + test('it should throw an error when instance is not alive', async () => { + requestMock.mockImplementation(() => ({ + status: 200, + data: {}, + request: { connection: { servername: 'Developer instance' } }, + })); + await expect(service.getIncident('1')).rejects.toThrow( + 'There is an issue with your Service Now Instance. Please check Developer instance.' + ); + }); }); describe('getFields', () => { @@ -259,9 +388,10 @@ describe('ServiceNow service', () => { logger, configurationUtilities, url: - 'https://dev102283.service-now.com/api/now/v2/table/sys_dictionary?sysparm_query=name=task^internal_type=string&active=true&array=false&read_only=false&sysparm_fields=max_length,element,column_label,mandatory', + 'https://dev102283.service-now.com/api/now/v2/table/sys_dictionary?sysparm_query=name=task^ORname=incident^internal_type=string&active=true&array=false&read_only=false&sysparm_fields=max_length,element,column_label,mandatory', }); }); + test('it returns common fields correctly', async () => { requestMock.mockImplementation(() => ({ data: { result: serviceNowCommonFields }, @@ -270,6 +400,31 @@ describe('ServiceNow service', () => { expect(res).toEqual(serviceNowCommonFields); }); + test('it should call request with correct arguments when table changes', async () => { + service = createExternalService( + 'sn_si_incident', + { + config: { apiUrl: 'https://dev102283.service-now.com/' }, + secrets: { username: 'admin', password: 'admin' }, + }, + logger, + configurationUtilities + ); + + requestMock.mockImplementation(() => ({ + data: { result: serviceNowCommonFields }, + })); + await service.getFields(); + + expect(requestMock).toHaveBeenCalledWith({ + axios, + logger, + configurationUtilities, + url: + 'https://dev102283.service-now.com/api/now/v2/table/sys_dictionary?sysparm_query=name=task^ORname=sn_si_incident^internal_type=string&active=true&array=false&read_only=false&sysparm_fields=max_length,element,column_label,mandatory', + }); + }); + test('it should throw an error', async () => { requestMock.mockImplementation(() => { throw new Error('An error has occurred'); @@ -278,5 +433,87 @@ describe('ServiceNow service', () => { '[Action][ServiceNow]: Unable to get fields. Error: An error has occurred' ); }); + + test('it should throw an error when instance is not alive', async () => { + requestMock.mockImplementation(() => ({ + status: 200, + data: {}, + request: { connection: { servername: 'Developer instance' } }, + })); + await expect(service.getIncident('1')).rejects.toThrow( + 'There is an issue with your Service Now Instance. Please check Developer instance.' + ); + }); + }); + + describe('getChoices', () => { + test('it should call request with correct arguments', async () => { + requestMock.mockImplementation(() => ({ + data: { result: serviceNowChoices }, + })); + await service.getChoices(['priority', 'category']); + + expect(requestMock).toHaveBeenCalledWith({ + axios, + logger, + configurationUtilities, + url: + 'https://dev102283.service-now.com/api/now/v2/table/sys_choice?sysparm_query=name=task^ORname=incident^element=priority^ORelement=category&sysparm_fields=label,value,dependent_value,element', + }); + }); + + test('it returns common fields correctly', async () => { + requestMock.mockImplementation(() => ({ + data: { result: serviceNowChoices }, + })); + const res = await service.getChoices(['priority']); + expect(res).toEqual(serviceNowChoices); + }); + + test('it should call request with correct arguments when table changes', async () => { + service = createExternalService( + 'sn_si_incident', + { + config: { apiUrl: 'https://dev102283.service-now.com/' }, + secrets: { username: 'admin', password: 'admin' }, + }, + logger, + configurationUtilities + ); + + requestMock.mockImplementation(() => ({ + data: { result: serviceNowChoices }, + })); + + await service.getChoices(['priority', 'category']); + + expect(requestMock).toHaveBeenCalledWith({ + axios, + logger, + configurationUtilities, + url: + 'https://dev102283.service-now.com/api/now/v2/table/sys_choice?sysparm_query=name=task^ORname=sn_si_incident^element=priority^ORelement=category&sysparm_fields=label,value,dependent_value,element', + }); + }); + + test('it should throw an error', async () => { + requestMock.mockImplementation(() => { + throw new Error('An error has occurred'); + }); + await expect(service.getChoices(['priority'])).rejects.toThrow( + '[Action][ServiceNow]: Unable to get choices. Error: An error has occurred' + ); + }); + + test('it should throw an error when instance is not alive', async () => { + requestMock.mockImplementation(() => ({ + status: 200, + data: {}, + request: { connection: { servername: 'Developer instance' } }, + })); + await expect(service.getIncident('1')).rejects.toThrow( + 'There is an issue with your Service Now Instance. Please check Developer instance.' + ); + }); }); }); diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/service.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/service.ts index 108fe06bcbcaa..7c7723c98a070 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/service.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/service.ts @@ -15,13 +15,10 @@ import { request, getErrorMessage, addTimeZoneToDate, patch } from '../lib/axios import { ActionsConfigurationUtilities } from '../../actions_config'; const API_VERSION = 'v2'; -const INCIDENT_URL = `api/now/${API_VERSION}/table/incident`; const SYS_DICTIONARY = `api/now/${API_VERSION}/table/sys_dictionary`; -// Based on: https://docs.servicenow.com/bundle/orlando-platform-user-interface/page/use/navigation/reference/r_NavigatingByURLExamples.html -const VIEW_INCIDENT_URL = `nav_to.do?uri=incident.do?sys_id=`; - export const createExternalService = ( + table: string, { config, secrets }: ExternalServiceCredentials, logger: Logger, configurationUtilities: ActionsConfigurationUtilities @@ -30,24 +27,36 @@ export const createExternalService = ( const { username, password } = secrets as ServiceNowSecretConfigurationType; if (!url || !username || !password) { - throw Error(`[Action]${i18n.NAME}: Wrong configuration.`); + throw Error(`[Action]${i18n.SERVICENOW}: Wrong configuration.`); } const urlWithoutTrailingSlash = url.endsWith('/') ? url.slice(0, -1) : url; - const incidentUrl = `${urlWithoutTrailingSlash}/${INCIDENT_URL}`; - const fieldsUrl = `${urlWithoutTrailingSlash}/${SYS_DICTIONARY}?sysparm_query=name=task^internal_type=string&active=true&array=false&read_only=false&sysparm_fields=max_length,element,column_label,mandatory`; + const incidentUrl = `${urlWithoutTrailingSlash}/api/now/${API_VERSION}/table/${table}`; + const fieldsUrl = `${urlWithoutTrailingSlash}/${SYS_DICTIONARY}?sysparm_query=name=task^ORname=${table}^internal_type=string&active=true&array=false&read_only=false&sysparm_fields=max_length,element,column_label,mandatory`; + const choicesUrl = `${urlWithoutTrailingSlash}/api/now/${API_VERSION}/table/sys_choice`; const axiosInstance = axios.create({ auth: { username, password }, }); const getIncidentViewURL = (id: string) => { - return `${urlWithoutTrailingSlash}/${VIEW_INCIDENT_URL}${id}`; + // Based on: https://docs.servicenow.com/bundle/orlando-platform-user-interface/page/use/navigation/reference/r_NavigatingByURLExamples.html + return `${urlWithoutTrailingSlash}/nav_to.do?uri=${table}.do?sys_id=${id}`; + }; + + const getChoicesURL = (fields: string[]) => { + const elements = fields + .slice(1) + .reduce((acc, field) => `${acc}^ORelement=${field}`, `element=${fields[0]}`); + + return `${choicesUrl}?sysparm_query=name=task^ORname=${table}^${elements}&sysparm_fields=label,value,dependent_value,element`; }; const checkInstance = (res: AxiosResponse) => { if (res.status === 200 && res.data.result == null) { throw new Error( - `There is an issue with your Service Now Instance. Please check ${res.request.connection.servername}` + `There is an issue with your Service Now Instance. Please check ${ + res.request?.connection?.servername ?? '' + }.` ); } }; @@ -64,7 +73,10 @@ export const createExternalService = ( return { ...res.data.result }; } catch (error) { throw new Error( - getErrorMessage(i18n.NAME, `Unable to get incident with id ${id}. Error: ${error.message}`) + getErrorMessage( + i18n.SERVICENOW, + `Unable to get incident with id ${id}. Error: ${error.message}` + ) ); } }; @@ -82,7 +94,10 @@ export const createExternalService = ( return res.data.result.length > 0 ? { ...res.data.result } : undefined; } catch (error) { throw new Error( - getErrorMessage(i18n.NAME, `Unable to find incidents by query. Error: ${error.message}`) + getErrorMessage( + i18n.SERVICENOW, + `Unable to find incidents by query. Error: ${error.message}` + ) ); } }; @@ -106,7 +121,7 @@ export const createExternalService = ( }; } catch (error) { throw new Error( - getErrorMessage(i18n.NAME, `Unable to create incident. Error: ${error.message}`) + getErrorMessage(i18n.SERVICENOW, `Unable to create incident. Error: ${error.message}`) ); } }; @@ -130,7 +145,7 @@ export const createExternalService = ( } catch (error) { throw new Error( getErrorMessage( - i18n.NAME, + i18n.SERVICENOW, `Unable to update incident with id ${incidentId}. Error: ${error.message}` ) ); @@ -148,7 +163,26 @@ export const createExternalService = ( checkInstance(res); return res.data.result.length > 0 ? res.data.result : []; } catch (error) { - throw new Error(getErrorMessage(i18n.NAME, `Unable to get fields. Error: ${error.message}`)); + throw new Error( + getErrorMessage(i18n.SERVICENOW, `Unable to get fields. Error: ${error.message}`) + ); + } + }; + + const getChoices = async (fields: string[]) => { + try { + const res = await request({ + axios: axiosInstance, + url: getChoicesURL(fields), + logger, + configurationUtilities, + }); + checkInstance(res); + return res.data.result; + } catch (error) { + throw new Error( + getErrorMessage(i18n.SERVICENOW, `Unable to get choices. Error: ${error.message}`) + ); } }; @@ -158,5 +192,6 @@ export const createExternalService = ( getFields, getIncident, updateIncident, + getChoices, }; }; diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/translations.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/translations.ts index 287fe8cacda79..84fe538e0a63a 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/translations.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/translations.ts @@ -6,10 +6,18 @@ import { i18n } from '@kbn/i18n'; -export const NAME = i18n.translate('xpack.actions.builtin.servicenowTitle', { +export const SERVICENOW = i18n.translate('xpack.actions.builtin.serviceNowTitle', { defaultMessage: 'ServiceNow', }); +export const SERVICENOW_ITSM = i18n.translate('xpack.actions.builtin.serviceNowITSMTitle', { + defaultMessage: 'ServiceNow ITSM', +}); + +export const SERVICENOW_SIR = i18n.translate('xpack.actions.builtin.serviceNowSIRTitle', { + defaultMessage: 'ServiceNow SIR', +}); + export const ALLOWED_HOSTS_ERROR = (message: string) => i18n.translate('xpack.actions.builtin.configuration.apiAllowedHostsError', { defaultMessage: 'error configuring connector action: {message}', diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/types.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/types.ts index 9868f5d1bea06..c74d1fbffd759 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/types.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/types.ts @@ -8,13 +8,16 @@ import { TypeOf } from '@kbn/config-schema'; import { - ExecutorParamsSchema, + ExecutorParamsSchemaITSM, ExecutorSubActionCommonFieldsParamsSchema, ExecutorSubActionGetIncidentParamsSchema, ExecutorSubActionHandshakeParamsSchema, - ExecutorSubActionPushParamsSchema, + ExecutorSubActionPushParamsSchemaITSM, ExternalIncidentServiceConfigurationSchema, ExternalIncidentServiceSecretConfigurationSchema, + ExecutorParamsSchemaSIR, + ExecutorSubActionPushParamsSchemaSIR, + ExecutorSubActionGetChoicesParamsSchema, } from './schema'; import { ActionsConfigurationUtilities } from '../../actions_config'; import { Logger } from '../../../../../../src/core/server'; @@ -30,14 +33,29 @@ export type ExecutorSubActionCommonFieldsParams = TypeOf< typeof ExecutorSubActionCommonFieldsParamsSchema >; -export type ServiceNowExecutorResultData = PushToServiceResponse | GetCommonFieldsResponse; +export type ExecutorSubActionGetChoicesParams = TypeOf< + typeof ExecutorSubActionGetChoicesParamsSchema +>; + +export type ServiceNowExecutorResultData = + | PushToServiceResponse + | GetCommonFieldsResponse + | GetChoicesResponse; export interface CreateCommentRequest { [key: string]: string; } -export type ExecutorParams = TypeOf; -export type ExecutorSubActionPushParams = TypeOf; +export type ExecutorParams = + | TypeOf + | TypeOf; + +export type ExecutorSubActionPushParamsITSM = TypeOf; +export type ExecutorSubActionPushParamsSIR = TypeOf; + +export type ExecutorSubActionPushParams = + | ExecutorSubActionPushParamsITSM + | ExecutorSubActionPushParamsSIR; export interface ExternalServiceCredentials { config: Record; @@ -62,14 +80,17 @@ export interface PushToServiceResponse extends ExternalServiceIncidentResponse { export type ExternalServiceParams = Record; export interface ExternalService { - getFields: () => Promise; + getChoices: (fields: string[]) => Promise; getIncident: (id: string) => Promise; + getFields: () => Promise; createIncident: (params: ExternalServiceParams) => Promise; updateIncident: (params: ExternalServiceParams) => Promise; findIncidents: (params?: Record) => Promise; } export type PushToServiceApiParams = ExecutorSubActionPushParams; +export type PushToServiceApiParamsITSM = ExecutorSubActionPushParamsITSM; +export type PushToServiceApiParamsSIR = ExecutorSubActionPushParamsSIR; export interface ExternalServiceApiHandlerArgs { externalService: ExternalService; @@ -83,7 +104,17 @@ export type ExecutorSubActionHandshakeParams = TypeOf< typeof ExecutorSubActionHandshakeParamsSchema >; -export type Incident = Omit; +export type ServiceNowITSMIncident = Omit< + TypeOf['incident'], + 'externalId' +>; + +export type ServiceNowSIRIncident = Omit< + TypeOf['incident'], + 'externalId' +>; + +export type Incident = ServiceNowITSMIncident | ServiceNowSIRIncident; export interface PushToServiceApiHandlerArgs extends ExternalServiceApiHandlerArgs { params: PushToServiceApiParams; @@ -104,13 +135,29 @@ export interface ExternalServiceFields { max_length: string; element: string; } + +export interface ExternalServiceChoices { + value: string; + label: string; + dependent_value: string; + element: string; +} + export type GetCommonFieldsResponse = ExternalServiceFields[]; +export type GetChoicesResponse = ExternalServiceChoices[]; + export interface GetCommonFieldsHandlerArgs { externalService: ExternalService; params: ExecutorSubActionCommonFieldsParams; } +export interface GetChoicesHandlerArgs { + externalService: ExternalService; + params: ExecutorSubActionGetChoicesParams; +} + export interface ExternalServiceApi { + getChoices: (args: GetChoicesHandlerArgs) => Promise; getFields: (args: GetCommonFieldsHandlerArgs) => Promise; handshake: (args: HandshakeApiHandlerArgs) => Promise; pushToService: (args: PushToServiceApiHandlerArgs) => Promise; diff --git a/x-pack/plugins/actions/server/index.ts b/x-pack/plugins/actions/server/index.ts index 4e59dfd099811..b573bcfc10914 100644 --- a/x-pack/plugins/actions/server/index.ts +++ b/x-pack/plugins/actions/server/index.ts @@ -35,7 +35,8 @@ export type { SlackActionParams, WebhookActionTypeId, WebhookActionParams, - ServiceNowActionTypeId, + ServiceNowITSMActionTypeId, + ServiceNowSIRActionTypeId, ServiceNowActionParams, JiraActionTypeId, JiraActionParams, diff --git a/x-pack/plugins/case/common/api/connectors/mappings.ts b/x-pack/plugins/case/common/api/connectors/mappings.ts index f8e9830fed7c1..b9f84d406a184 100644 --- a/x-pack/plugins/case/common/api/connectors/mappings.ts +++ b/x-pack/plugins/case/common/api/connectors/mappings.ts @@ -16,8 +16,8 @@ import { Incident as ResilientIncident, } from '../../../../actions/server/builtin_action_types/resilient/types'; import { - PushToServiceApiParams as ServiceNowPushToServiceApiParams, - Incident as ServiceNowIncident, + PushToServiceApiParamsITSM as ServiceNowITSMPushToServiceApiParams, + ServiceNowITSMIncident, } from '../../../../actions/server/builtin_action_types/servicenow/types'; import { ResilientFieldsRT } from './resilient'; import { ServiceNowFieldsRT } from './servicenow'; @@ -33,13 +33,13 @@ export interface ElasticUser { export { JiraPushToServiceApiParams, ResilientPushToServiceApiParams, - ServiceNowPushToServiceApiParams, + ServiceNowITSMPushToServiceApiParams, }; -export type Incident = JiraIncident | ResilientIncident | ServiceNowIncident; +export type Incident = JiraIncident | ResilientIncident | ServiceNowITSMIncident; export type PushToServiceApiParams = | JiraPushToServiceApiParams | ResilientPushToServiceApiParams - | ServiceNowPushToServiceApiParams; + | ServiceNowITSMPushToServiceApiParams; const ActionTypeRT = rt.union([ rt.literal('append'), diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/utils.ts b/x-pack/plugins/case/server/routes/api/cases/configure/utils.ts index 89109af4cecb9..9e903b66459a9 100644 --- a/x-pack/plugins/case/server/routes/api/cases/configure/utils.ts +++ b/x-pack/plugins/case/server/routes/api/cases/configure/utils.ts @@ -19,7 +19,7 @@ import { PrepareFieldsForTransformArgs, PushToServiceApiParams, ResilientPushToServiceApiParams, - ServiceNowPushToServiceApiParams, + ServiceNowITSMPushToServiceApiParams, SimpleComment, Transformer, TransformerArgs, @@ -105,7 +105,11 @@ export const serviceFormatter = ( thirdPartyName: 'Resilient', }; case ConnectorTypes.servicenow: - const { severity, urgency, impact } = params as ServiceNowPushToServiceApiParams['incident']; + const { + severity, + urgency, + impact, + } = params as ServiceNowITSMPushToServiceApiParams['incident']; return { incident: { severity, urgency, impact }, thirdPartyName: 'ServiceNow', diff --git a/x-pack/plugins/security_solution/public/cases/components/configure_cases/mapping.test.tsx b/x-pack/plugins/security_solution/public/cases/components/configure_cases/mapping.test.tsx index c7336d998c452..bc96aa65b82a7 100644 --- a/x-pack/plugins/security_solution/public/cases/components/configure_cases/mapping.test.tsx +++ b/x-pack/plugins/security_solution/public/cases/components/configure_cases/mapping.test.tsx @@ -40,7 +40,7 @@ describe('Mapping', () => { wrappingComponent: TestProviders, }); expect(wrapper.find('[data-test-subj="field-mapping-desc"]').first().text()).toBe( - 'Field mappings require an established connection to ServiceNow. Please check your connection credentials.' + 'Field mappings require an established connection to ServiceNow ITSM. Please check your connection credentials.' ); }); }); diff --git a/x-pack/plugins/security_solution/public/cases/components/connectors/config.ts b/x-pack/plugins/security_solution/public/cases/components/connectors/config.ts index 3aca186378820..a29531d89b405 100644 --- a/x-pack/plugins/security_solution/public/cases/components/connectors/config.ts +++ b/x-pack/plugins/security_solution/public/cases/components/connectors/config.ts @@ -7,14 +7,14 @@ /* eslint-disable @kbn/eslint/no-restricted-paths */ import { - ServiceNowConnectorConfiguration, + ServiceNowITSMConnectorConfiguration, JiraConnectorConfiguration, ResilientConnectorConfiguration, } from '../../../../../triggers_actions_ui/public/common'; import { ConnectorConfiguration } from './types'; export const connectorsConfiguration: Record = { - '.servicenow': ServiceNowConnectorConfiguration as ConnectorConfiguration, + '.servicenow': ServiceNowITSMConnectorConfiguration as ConnectorConfiguration, '.jira': JiraConnectorConfiguration as ConnectorConfiguration, '.resilient': ResilientConnectorConfiguration as ConnectorConfiguration, }; diff --git a/x-pack/plugins/security_solution/public/cases/components/connectors/types.ts b/x-pack/plugins/security_solution/public/cases/components/connectors/types.ts index 5d83c226bfeca..00bc01b2ec0a7 100644 --- a/x-pack/plugins/security_solution/public/cases/components/connectors/types.ts +++ b/x-pack/plugins/security_solution/public/cases/components/connectors/types.ts @@ -22,5 +22,4 @@ export interface ThirdPartyField { export interface ConnectorConfiguration extends ActionType { logo: string; - fields: Record; } diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 4369cbf35594d..fdf1c74f20512 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -4784,7 +4784,6 @@ "xpack.actions.builtin.pagerdutyTitle": "PagerDuty", "xpack.actions.builtin.serverLog.errorLoggingErrorMessage": "メッセージのロギングエラー", "xpack.actions.builtin.serverLogTitle": "サーバーログ", - "xpack.actions.builtin.servicenowTitle": "ServiceNow", "xpack.actions.builtin.slack.errorPostingErrorMessage": "slack メッセージの投稿エラー", "xpack.actions.builtin.slack.errorPostingRetryDateErrorMessage": "slack メッセージの投稿エラー、 {retryString} で再試行", "xpack.actions.builtin.slack.errorPostingRetryLaterErrorMessage": "slack メッセージの投稿エラー、後ほど再試行", @@ -21161,7 +21160,6 @@ "xpack.triggersActionsUI.common.expressionItems.threshold.popoverTitle": "タイミング", "xpack.triggersActionsUI.components.addMessageVariables.addVariablePopoverButton": "変数を追加", "xpack.triggersActionsUI.components.addMessageVariables.addVariableTitle": "アラート変数を追加", - "xpack.triggersActionsUI.components.builtinActionTypes.common.requiredDescriptionTextField": "説明が必要です。", "xpack.triggersActionsUI.components.builtinActionTypes.common.requiredShortDescTextField": "短い説明が必要です。", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.actionTypeTitle": "メールに送信", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.configureAccountsHelpLabel": "電子メールアカウントの構成", @@ -21292,35 +21290,16 @@ "xpack.triggersActionsUI.components.builtinActionTypes.serverLogAction.logLevelFieldLabel": "レベル", "xpack.triggersActionsUI.components.builtinActionTypes.serverLogAction.logMessageFieldLabel": "メッセージ", "xpack.triggersActionsUI.components.builtinActionTypes.serverLogAction.selectMessageText": "Kibana ログにメッセージを追加します。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.actionTypeTitle": "ServiceNow", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.apiTokenTextFieldLabel": "APIトークン", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.apiUrlTextFieldLabel": "URL", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.authenticationLabel": "認証", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.commentsTextAreaFieldLabel": "追加のコメント", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.descriptionTextAreaFieldLabel": "説明", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.emailTextFieldLabel": "メール", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.impactSelectFieldLabel": "インパクト", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.invalidApiUrlTextField": "URL が無効です。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldComments": "コメント", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldDescription": "説明", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldShortDescription": "短い説明", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.passwordTextFieldLabel": "パスワード", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.reenterValuesLabel": "ユーザー名とパスワードは暗号化されます。これらのフィールドの値を再入力してください。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.rememberValuesLabel": "これらの値を覚えておいてください。コネクターを編集するたびに再入力する必要があります。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredApiTokenTextField": "API トークンが必要です。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredApiUrlTextField": "URL が必要です。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredEmailTextField": "電子メールが必要です。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredPasswordTextField": "パスワードが必要です。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredUsernameTextField": "ユーザー名が必要です。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requireHttpsApiUrlTextField": "URL は https:// から始める必要があります。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.selectMessageText": "ServiceNow でインシデントを作成します。", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.severitySelectFieldLabel": "深刻度", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectHighOptionLabel": "高", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectLawOptionLabel": "低", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectMediumOptionLabel": "中", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.title": "インシデント", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.titleFieldLabel": "短い説明(必須)", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.urgencySelectFieldLabel": "緊急", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.usernameTextFieldLabel": "ユーザー名", "xpack.triggersActionsUI.components.builtinActionTypes.serviceNowAction.apiUrlHelpLabel": "Personal Developer Instance の構成", "xpack.triggersActionsUI.components.builtinActionTypes.slackAction.actionTypeTitle": "Slack に送信", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index d2504c8752c05..b3fefd55ce55a 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -4789,7 +4789,6 @@ "xpack.actions.builtin.pagerdutyTitle": "PagerDuty", "xpack.actions.builtin.serverLog.errorLoggingErrorMessage": "记录消息时出错", "xpack.actions.builtin.serverLogTitle": "服务器日志", - "xpack.actions.builtin.servicenowTitle": "ServiceNow", "xpack.actions.builtin.slack.errorPostingErrorMessage": "发布 slack 消息时出错", "xpack.actions.builtin.slack.errorPostingRetryDateErrorMessage": "发布 Slack 消息时出错,在 {retryString} 重试", "xpack.actions.builtin.slack.errorPostingRetryLaterErrorMessage": "发布 slack 消息时出错,稍后重试", @@ -21212,7 +21211,6 @@ "xpack.triggersActionsUI.common.expressionItems.threshold.popoverTitle": "当", "xpack.triggersActionsUI.components.addMessageVariables.addVariablePopoverButton": "添加变量", "xpack.triggersActionsUI.components.addMessageVariables.addVariableTitle": "添加告警变量", - "xpack.triggersActionsUI.components.builtinActionTypes.common.requiredDescriptionTextField": "“描述”必填。", "xpack.triggersActionsUI.components.builtinActionTypes.common.requiredShortDescTextField": "“简短描述”必填。", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.actionTypeTitle": "发送到电子邮件", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.configureAccountsHelpLabel": "配置电子邮件帐户", @@ -21343,35 +21341,16 @@ "xpack.triggersActionsUI.components.builtinActionTypes.serverLogAction.logLevelFieldLabel": "级别", "xpack.triggersActionsUI.components.builtinActionTypes.serverLogAction.logMessageFieldLabel": "消息", "xpack.triggersActionsUI.components.builtinActionTypes.serverLogAction.selectMessageText": "将消息添加到 Kibana 日志。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.actionTypeTitle": "ServiceNow", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.apiTokenTextFieldLabel": "Api 令牌", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.apiUrlTextFieldLabel": "URL", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.authenticationLabel": "身份验证", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.commentsTextAreaFieldLabel": "其他注释", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.descriptionTextAreaFieldLabel": "描述", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.emailTextFieldLabel": "电子邮件", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.impactSelectFieldLabel": "影响", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.invalidApiUrlTextField": "URL 无效。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldComments": "注释", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldDescription": "描述", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldShortDescription": "简短描述", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.passwordTextFieldLabel": "密码", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.reenterValuesLabel": "用户名和密码已加密。请为这些字段重新输入值。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.rememberValuesLabel": "请记住这些值。每次编辑连接器时都必须重新输入。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredApiTokenTextField": "“Api 令牌”必填。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredApiUrlTextField": "“URL”必填。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredEmailTextField": "“电子邮件”必填。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredPasswordTextField": "“密码”必填。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredUsernameTextField": "“用户名”必填。", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requireHttpsApiUrlTextField": "URL 必须以 https:// 开头。", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.selectMessageText": "在 ServiceNow 中创建事件。", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.severitySelectFieldLabel": "严重性", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectHighOptionLabel": "高", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectLawOptionLabel": "低", - "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectMediumOptionLabel": "中", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.title": "事件", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.titleFieldLabel": "简短描述(必填)", - "xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.urgencySelectFieldLabel": "紧急性", "xpack.triggersActionsUI.components.builtinActionTypes.servicenow.usernameTextFieldLabel": "用户名", "xpack.triggersActionsUI.components.builtinActionTypes.serviceNowAction.apiUrlHelpLabel": "配置个人开发者实例", "xpack.triggersActionsUI.components.builtinActionTypes.slackAction.actionTypeTitle": "发送到 Slack", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/index.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/index.ts index b8514a06dc253..003b2c5eedb10 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/index.ts @@ -12,7 +12,7 @@ import { getPagerDutyActionType } from './pagerduty'; import { getWebhookActionType } from './webhook'; import { TypeRegistry } from '../../type_registry'; import { ActionTypeModel } from '../../../types'; -import { getServiceNowActionType } from './servicenow'; +import { getServiceNowITSMActionType, getServiceNowSIRActionType } from './servicenow'; import { getJiraActionType } from './jira'; import { getResilientActionType } from './resilient'; import { getTeamsActionType } from './teams'; @@ -28,7 +28,8 @@ export function registerBuiltInActionTypes({ actionTypeRegistry.register(getIndexActionType()); actionTypeRegistry.register(getPagerDutyActionType()); actionTypeRegistry.register(getWebhookActionType()); - actionTypeRegistry.register(getServiceNowActionType()); + actionTypeRegistry.register(getServiceNowITSMActionType()); + actionTypeRegistry.register(getServiceNowSIRActionType()); actionTypeRegistry.register(getJiraActionType()); actionTypeRegistry.register(getResilientActionType()); actionTypeRegistry.register(getTeamsActionType()); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/api.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/api.test.ts index d5474aaceaa48..4759eecf3ef0e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/api.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/api.test.ts @@ -8,6 +8,7 @@ import { httpServiceMock } from '../../../../../../../../src/core/public/mocks'; import { getIssueTypes, getFieldsByIssueType, getIssues, getIssue } from './api'; const issueTypesResponse = { + status: 'ok', data: { projects: [ { @@ -24,9 +25,11 @@ const issueTypesResponse = { }, ], }, + actionId: 'test', }; const fieldsResponse = { + status: 'ok', data: { projects: [ { @@ -70,13 +73,18 @@ const fieldsResponse = { ], }, ], + actionId: 'test', }, }; const issueResponse = { - id: '10267', - key: 'RJ-107', - fields: { summary: 'Test title' }, + status: 'ok', + data: { + id: '10267', + key: 'RJ-107', + fields: { summary: 'Test title' }, + }, + actionId: 'test', }; const issuesResponse = [issueResponse]; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/config.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/config.ts index 628600ee91c8e..d05bf78a5106e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/config.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/config.ts @@ -15,24 +15,4 @@ export const connectorConfiguration = { enabledInConfig: true, enabledInLicense: true, minimumLicenseRequired: 'gold', - fields: { - summary: { - label: i18n.MAPPING_FIELD_SUMMARY, - validSourceFields: ['title', 'description'], - defaultSourceField: 'title', - defaultActionType: 'overwrite', - }, - description: { - label: i18n.MAPPING_FIELD_DESC, - validSourceFields: ['title', 'description'], - defaultSourceField: 'description', - defaultActionType: 'overwrite', - }, - comments: { - label: i18n.MAPPING_FIELD_COMMENTS, - validSourceFields: ['comments'], - defaultSourceField: 'comments', - defaultActionType: 'append', - }, - }, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/api.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/api.test.ts new file mode 100644 index 0000000000000..24c7f7687da69 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/api.test.ts @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { httpServiceMock } from '../../../../../../../../src/core/public/mocks'; +import { getIncidentTypes, getSeverity } from './api'; + +const incidentTypesResponse = { + status: 'ok', + data: [ + { id: 17, name: 'Communication error (fax; email)' }, + { id: 1001, name: 'Custom type' }, + { id: 21, name: 'Denial of Service' }, + { id: 6, name: 'Improper disposal: digital asset(s)' }, + { id: 7, name: 'Improper disposal: documents / files' }, + { id: 4, name: 'Lost documents / files / records' }, + { id: 3, name: 'Lost PC / laptop / tablet' }, + { id: 1, name: 'Lost PDA / smartphone' }, + { id: 8, name: 'Lost storage device / media' }, + { id: 19, name: 'Malware' }, + { id: 23, name: 'Not an Issue' }, + { id: 18, name: 'Other' }, + { id: 22, name: 'Phishing' }, + { id: 11, name: 'Stolen documents / files / records' }, + { id: 12, name: 'Stolen PC / laptop / tablet' }, + { id: 13, name: 'Stolen PDA / smartphone' }, + { id: 14, name: 'Stolen storage device / media' }, + { id: 20, name: 'System Intrusion' }, + { id: 16, name: 'TBD / Unknown' }, + { id: 15, name: 'Vendor / 3rd party error' }, + ], + actionId: 'test', +}; + +const severityResponse = { + status: 'ok', + data: [ + { id: 4, name: 'Low' }, + { id: 5, name: 'Medium' }, + { id: 6, name: 'High' }, + ], + actionId: 'test', +}; + +describe('Resilient API', () => { + const http = httpServiceMock.createStartContract(); + + beforeEach(() => jest.resetAllMocks()); + + describe('getIncidentTypes', () => { + test('should call get choices API', async () => { + const abortCtrl = new AbortController(); + http.post.mockResolvedValueOnce(incidentTypesResponse); + const res = await getIncidentTypes({ + http, + signal: abortCtrl.signal, + connectorId: 'test', + }); + + expect(res).toEqual(incidentTypesResponse); + expect(http.post).toHaveBeenCalledWith('/api/actions/action/test/_execute', { + body: '{"params":{"subAction":"incidentTypes","subActionParams":{}}}', + signal: abortCtrl.signal, + }); + }); + }); + + describe('getSeverity', () => { + test('should call get choices API', async () => { + const abortCtrl = new AbortController(); + http.post.mockResolvedValueOnce(severityResponse); + const res = await getSeverity({ + http, + signal: abortCtrl.signal, + connectorId: 'test', + }); + + expect(res).toEqual(severityResponse); + expect(http.post).toHaveBeenCalledWith('/api/actions/action/test/_execute', { + body: '{"params":{"subAction":"severity","subActionParams":{}}}', + signal: abortCtrl.signal, + }); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/config.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/config.ts index a2054585c19b8..9717d594b20ec 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/config.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/config.ts @@ -15,24 +15,4 @@ export const connectorConfiguration = { enabledInConfig: true, enabledInLicense: true, minimumLicenseRequired: 'platinum', - fields: { - name: { - label: i18n.MAPPING_FIELD_NAME, - validSourceFields: ['title', 'description'], - defaultSourceField: 'title', - defaultActionType: 'overwrite', - }, - description: { - label: i18n.MAPPING_FIELD_DESC, - validSourceFields: ['title', 'description'], - defaultSourceField: 'description', - defaultActionType: 'overwrite', - }, - comments: { - label: i18n.MAPPING_FIELD_COMMENTS, - validSourceFields: ['comments'], - defaultSourceField: 'comments', - defaultActionType: 'append', - }, - }, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/api.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/api.test.ts new file mode 100644 index 0000000000000..e87b84439f6f8 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/api.test.ts @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { httpServiceMock } from '../../../../../../../../src/core/public/mocks'; +import { getChoices } from './api'; + +const choicesResponse = { + status: 'ok', + data: [ + { + dependent_value: '', + label: '1 - Critical', + value: '1', + element: 'priority', + }, + { + dependent_value: '', + label: '2 - High', + value: '2', + element: 'priority', + }, + { + dependent_value: '', + label: '3 - Moderate', + value: '3', + element: 'priority', + }, + { + dependent_value: '', + label: '4 - Low', + value: '4', + element: 'priority', + }, + { + dependent_value: '', + label: '5 - Planning', + value: '5', + element: 'priority', + }, + ], +}; + +describe('ServiceNow API', () => { + const http = httpServiceMock.createStartContract(); + + beforeEach(() => jest.resetAllMocks()); + + describe('getChoices', () => { + test('should call get choices API', async () => { + const abortCtrl = new AbortController(); + http.post.mockResolvedValueOnce(choicesResponse); + const res = await getChoices({ + http, + signal: abortCtrl.signal, + connectorId: 'test', + fields: ['priority'], + }); + + expect(res).toEqual(choicesResponse); + expect(http.post).toHaveBeenCalledWith('/api/actions/action/test/_execute', { + body: '{"params":{"subAction":"getChoices","subActionParams":{"fields":["priority"]}}}', + signal: abortCtrl.signal, + }); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/api.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/api.ts new file mode 100644 index 0000000000000..ecfc66f1b0391 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/api.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { HttpSetup } from 'kibana/public'; +import { BASE_ACTION_API_PATH } from '../../../constants'; + +export async function getChoices({ + http, + signal, + connectorId, + fields, +}: { + http: HttpSetup; + signal: AbortSignal; + connectorId: string; + fields: string[]; +}): Promise> { + return await http.post(`${BASE_ACTION_API_PATH}/action/${connectorId}/_execute`, { + body: JSON.stringify({ + params: { subAction: 'getChoices', subActionParams: { fields } }, + }), + signal, + }); +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/config.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/config.ts index 7f810cf5eb38f..6920ee71144a5 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/config.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/config.ts @@ -7,32 +7,24 @@ import * as i18n from './translations'; import logo from './logo.svg'; -export const connectorConfiguration = { +export const serviceNowITSMConfiguration = { id: '.servicenow', - name: i18n.SERVICENOW_TITLE, + name: i18n.SERVICENOW_ITSM_TITLE, + desc: i18n.SERVICENOW_ITSM_DESC, + logo, + enabled: true, + enabledInConfig: true, + enabledInLicense: true, + minimumLicenseRequired: 'platinum', +}; + +export const serviceNowSIRConfiguration = { + id: '.servicenow-sir', + name: i18n.SERVICENOW_SIR_TITLE, + desc: i18n.SERVICENOW_SIR_DESC, logo, enabled: true, enabledInConfig: true, enabledInLicense: true, minimumLicenseRequired: 'platinum', - fields: { - short_description: { - label: i18n.MAPPING_FIELD_SHORT_DESC, - validSourceFields: ['title', 'description'], - defaultSourceField: 'title', - defaultActionType: 'overwrite', - }, - description: { - label: i18n.MAPPING_FIELD_DESC, - validSourceFields: ['title', 'description'], - defaultSourceField: 'description', - defaultActionType: 'overwrite', - }, - comments: { - label: i18n.MAPPING_FIELD_COMMENTS, - validSourceFields: ['comments'], - defaultSourceField: 'comments', - defaultActionType: 'append', - }, - }, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/index.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/index.ts index 65bb3ae4f5a37..e1f66e506ed8e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/index.ts @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { getActionType as getServiceNowActionType } from './servicenow'; +export { getServiceNowITSMActionType, getServiceNowSIRActionType } from './servicenow'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow.test.tsx index dfa9bf56cc7a9..ce69f428e10a1 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow.test.tsx @@ -8,102 +8,110 @@ import { registerBuiltInActionTypes } from '.././index'; import { ActionTypeModel } from '../../../../types'; import { ServiceNowActionConnector } from './types'; -const ACTION_TYPE_ID = '.servicenow'; -let actionTypeModel: ActionTypeModel; +const SERVICENOW_ITSM_ACTION_TYPE_ID = '.servicenow'; +const SERVICENOW_SIR_ACTION_TYPE_ID = '.servicenow-sir'; +let actionTypeRegistry: TypeRegistry; beforeAll(() => { - const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry = new TypeRegistry(); registerBuiltInActionTypes({ actionTypeRegistry }); - const getResult = actionTypeRegistry.get(ACTION_TYPE_ID); - if (getResult !== null) { - actionTypeModel = getResult; - } }); describe('actionTypeRegistry.get() works', () => { - test('action type static data is as expected', () => { - expect(actionTypeModel.id).toEqual(ACTION_TYPE_ID); + [SERVICENOW_ITSM_ACTION_TYPE_ID, SERVICENOW_SIR_ACTION_TYPE_ID].forEach((id) => { + test(`${id}: action type static data is as expected`, () => { + const actionTypeModel = actionTypeRegistry.get(id); + expect(actionTypeModel.id).toEqual(id); + }); }); }); describe('servicenow connector validation', () => { - test('connector validation succeeds when connector config is valid', () => { - const actionConnector = { - secrets: { - username: 'user', - password: 'pass', - }, - id: 'test', - actionTypeId: '.servicenow', - name: 'ServiceNow', - isPreconfigured: false, - config: { - apiUrl: 'https://dev94428.service-now.com/', - }, - } as ServiceNowActionConnector; + [SERVICENOW_ITSM_ACTION_TYPE_ID, SERVICENOW_SIR_ACTION_TYPE_ID].forEach((id) => { + test(`${id}: connector validation succeeds when connector config is valid`, () => { + const actionTypeModel = actionTypeRegistry.get(id); + const actionConnector = { + secrets: { + username: 'user', + password: 'pass', + }, + id: 'test', + actionTypeId: id, + name: 'ServiceNow', + isPreconfigured: false, + config: { + apiUrl: 'https://dev94428.service-now.com/', + }, + } as ServiceNowActionConnector; - expect(actionTypeModel.validateConnector(actionConnector)).toEqual({ - config: { - errors: { - apiUrl: [], + expect(actionTypeModel.validateConnector(actionConnector)).toEqual({ + config: { + errors: { + apiUrl: [], + }, }, - }, - secrets: { - errors: { - username: [], - password: [], + secrets: { + errors: { + username: [], + password: [], + }, }, - }, + }); }); - }); - test('connector validation fails when connector config is not valid', () => { - const actionConnector = ({ - secrets: { - username: 'user', - }, - id: '.servicenow', - actionTypeId: '.servicenow', - name: 'servicenow', - config: {}, - } as unknown) as ServiceNowActionConnector; + test(`${id}: connector validation fails when connector config is not valid`, () => { + const actionTypeModel = actionTypeRegistry.get(id); + const actionConnector = ({ + secrets: { + username: 'user', + }, + id, + actionTypeId: id, + name: 'servicenow', + config: {}, + } as unknown) as ServiceNowActionConnector; - expect(actionTypeModel.validateConnector(actionConnector)).toEqual({ - config: { - errors: { - apiUrl: ['URL is required.'], + expect(actionTypeModel.validateConnector(actionConnector)).toEqual({ + config: { + errors: { + apiUrl: ['URL is required.'], + }, }, - }, - secrets: { - errors: { - username: [], - password: ['Password is required.'], + secrets: { + errors: { + username: [], + password: ['Password is required.'], + }, }, - }, + }); }); }); }); describe('servicenow action params validation', () => { - test('action params validation succeeds when action params is valid', () => { - const actionParams = { - subActionParams: { incident: { short_description: 'some title {{test}}' }, comments: [] }, - }; + [SERVICENOW_ITSM_ACTION_TYPE_ID, SERVICENOW_SIR_ACTION_TYPE_ID].forEach((id) => { + test(`${id}: action params validation succeeds when action params is valid`, () => { + const actionTypeModel = actionTypeRegistry.get(id); + const actionParams = { + subActionParams: { incident: { short_description: 'some title {{test}}' }, comments: [] }, + }; - expect(actionTypeModel.validateParams(actionParams)).toEqual({ - errors: { ['subActionParams.incident.short_description']: [] }, + expect(actionTypeModel.validateParams(actionParams)).toEqual({ + errors: { ['subActionParams.incident.short_description']: [] }, + }); }); - }); - test('params validation fails when body is not valid', () => { - const actionParams = { - subActionParams: { incident: { short_description: '' }, comments: [] }, - }; + test(`${id}: params validation fails when body is not valid`, () => { + const actionTypeModel = actionTypeRegistry.get(id); + const actionParams = { + subActionParams: { incident: { short_description: '' }, comments: [] }, + }; - expect(actionTypeModel.validateParams(actionParams)).toEqual({ - errors: { - ['subActionParams.incident.short_description']: ['Short description is required.'], - }, + expect(actionTypeModel.validateParams(actionParams)).toEqual({ + errors: { + ['subActionParams.incident.short_description']: ['Short description is required.'], + }, + }); }); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow.tsx index 4389abff72fcd..1b968cfff5d01 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow.tsx @@ -10,13 +10,14 @@ import { ActionTypeModel, ConnectorValidationResult, } from '../../../../types'; -import { connectorConfiguration } from './config'; +import { serviceNowITSMConfiguration, serviceNowSIRConfiguration } from './config'; import logo from './logo.svg'; import { ServiceNowActionConnector, ServiceNowConfig, ServiceNowSecrets, - ServiceNowActionParams, + ServiceNowITSMActionParams, + ServiceNowSIRActionParams, } from './types'; import * as i18n from './translations'; import { isValidUrl } from '../../../lib/value_validators'; @@ -60,19 +61,21 @@ const validateConnector = ( return validationResult; }; -export function getActionType(): ActionTypeModel< +export function getServiceNowITSMActionType(): ActionTypeModel< ServiceNowConfig, ServiceNowSecrets, - ServiceNowActionParams + ServiceNowITSMActionParams > { return { - id: connectorConfiguration.id, + id: serviceNowITSMConfiguration.id, iconClass: logo, - selectMessage: i18n.SERVICENOW_DESC, - actionTypeTitle: connectorConfiguration.name, + selectMessage: serviceNowITSMConfiguration.desc, + actionTypeTitle: serviceNowITSMConfiguration.name, validateConnector, actionConnectorFields: lazy(() => import('./servicenow_connectors')), - validateParams: (actionParams: ServiceNowActionParams): GenericValidationResult => { + validateParams: ( + actionParams: ServiceNowITSMActionParams + ): GenericValidationResult => { const errors = { // eslint-disable-next-line @typescript-eslint/naming-convention 'subActionParams.incident.short_description': new Array(), @@ -89,6 +92,39 @@ export function getActionType(): ActionTypeModel< } return validationResult; }, - actionParamsFields: lazy(() => import('./servicenow_params')), + actionParamsFields: lazy(() => import('./servicenow_itsm_params')), + }; +} + +export function getServiceNowSIRActionType(): ActionTypeModel< + ServiceNowConfig, + ServiceNowSecrets, + ServiceNowSIRActionParams +> { + return { + id: serviceNowSIRConfiguration.id, + iconClass: logo, + selectMessage: serviceNowSIRConfiguration.desc, + actionTypeTitle: serviceNowSIRConfiguration.name, + validateConnector, + actionConnectorFields: lazy(() => import('./servicenow_connectors')), + validateParams: (actionParams: ServiceNowSIRActionParams): GenericValidationResult => { + const errors = { + // eslint-disable-next-line @typescript-eslint/naming-convention + 'subActionParams.incident.short_description': new Array(), + }; + const validationResult = { + errors, + }; + if ( + actionParams.subActionParams && + actionParams.subActionParams.incident && + !actionParams.subActionParams.incident.short_description?.length + ) { + errors['subActionParams.incident.short_description'].push(i18n.TITLE_REQUIRED); + } + return validationResult; + }, + actionParamsFields: lazy(() => import('./servicenow_sir_params')), }; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_itsm_params.test.tsx similarity index 53% rename from x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.test.tsx rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_itsm_params.test.tsx index 5519d7498a85e..51318e14a2cfd 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_itsm_params.test.tsx @@ -5,8 +5,18 @@ */ import React from 'react'; import { mount } from 'enzyme'; -import ServiceNowParamsFields from './servicenow_params'; +import { act } from '@testing-library/react'; + import { ActionConnector } from '../../../../types'; +import { useGetChoices } from './use_get_choices'; +import ServiceNowITSMParamsFields from './servicenow_itsm_params'; +import { Choice } from './types'; + +jest.mock('./use_get_choices'); +jest.mock('../../../../common/lib/kibana'); + +const useGetChoicesMock = useGetChoices as jest.Mock; + const actionParams = { subAction: 'pushToService', subActionParams: { @@ -16,7 +26,6 @@ const actionParams = { severity: '1', urgency: '2', impact: '3', - savedObjectId: '123', externalId: null, }, comments: [], @@ -31,6 +40,7 @@ const connector: ActionConnector = { name: 'Test', isPreconfigured: false, }; + const editAction = jest.fn(); const defaultProps = { actionConnector: connector, @@ -40,31 +50,71 @@ const defaultProps = { index: 0, messageVariables: [], }; -describe('ServiceNowParamsFields renders', () => { + +const useGetChoicesResponse = { + isLoading: false, + choices: ['severity', 'urgency', 'impact'] + .map((element) => [ + { + dependent_value: '', + label: '1 - Critical', + value: '1', + element, + }, + { + dependent_value: '', + label: '2 - High', + value: '2', + element, + }, + { + dependent_value: '', + label: '3 - Moderate', + value: '3', + element, + }, + { + dependent_value: '', + label: '4 - Low', + value: '4', + element, + }, + ]) + .flat(), +}; + +describe('ServiceNowITSMParamsFields renders', () => { + let onChoices = (choices: Choice[]) => {}; + beforeEach(() => { jest.clearAllMocks(); + useGetChoicesMock.mockImplementation((args) => { + onChoices = args.onSuccess; + return useGetChoicesResponse; + }); }); + test('all params fields is rendered', () => { - const wrapper = mount(); - expect(wrapper.find('[data-test-subj="urgencySelect"]').length > 0).toBeTruthy(); - expect(wrapper.find('[data-test-subj="severitySelect"]').first().prop('value')).toStrictEqual( - '1' - ); - expect(wrapper.find('[data-test-subj="impactSelect"]').length > 0).toBeTruthy(); - expect(wrapper.find('[data-test-subj="short_descriptionInput"]').length > 0).toBeTruthy(); - expect(wrapper.find('[data-test-subj="descriptionTextArea"]').length > 0).toBeTruthy(); - expect(wrapper.find('[data-test-subj="commentsTextArea"]').length > 0).toBeTruthy(); + const wrapper = mount(); + expect(wrapper.find('[data-test-subj="urgencySelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="severitySelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="impactSelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="short_descriptionInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="descriptionTextArea"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="commentsTextArea"]').exists()).toBeTruthy(); }); + test('If short_description has errors, form row is invalid', () => { const newProps = { ...defaultProps, // eslint-disable-next-line @typescript-eslint/naming-convention errors: { 'subActionParams.incident.short_description': ['error'] }, }; - const wrapper = mount(); + const wrapper = mount(); const title = wrapper.find('[data-test-subj="short_descriptionInput"]').first(); expect(title.prop('isInvalid')).toBeTruthy(); }); + test('When subActionParams is undefined, set to default', () => { const { subActionParams, ...newParams } = actionParams; @@ -72,12 +122,13 @@ describe('ServiceNowParamsFields renders', () => { ...defaultProps, actionParams: newParams, }; - mount(); + mount(); expect(editAction.mock.calls[0][1]).toEqual({ incident: {}, comments: [], }); }); + test('When subAction is undefined, set to default', () => { const { subAction, ...newParams } = actionParams; @@ -85,11 +136,12 @@ describe('ServiceNowParamsFields renders', () => { ...defaultProps, actionParams: newParams, }; - mount(); + mount(); expect(editAction.mock.calls[0][1]).toEqual('pushToService'); }); + test('Resets fields when connector changes', () => { - const wrapper = mount(); + const wrapper = mount(); expect(editAction.mock.calls.length).toEqual(0); wrapper.setProps({ actionConnector: { ...connector, id: '1234' } }); expect(editAction.mock.calls.length).toEqual(1); @@ -98,6 +150,52 @@ describe('ServiceNowParamsFields renders', () => { comments: [], }); }); + + test('it transforms the urgencies to options correctly', async () => { + const wrapper = mount(); + act(() => { + onChoices(useGetChoicesResponse.choices); + }); + + wrapper.update(); + expect(wrapper.find('[data-test-subj="urgencySelect"]').first().prop('options')).toEqual([ + { value: '1', text: '1 - Critical' }, + { value: '2', text: '2 - High' }, + { value: '3', text: '3 - Moderate' }, + { value: '4', text: '4 - Low' }, + ]); + }); + + test('it transforms the severities to options correctly', async () => { + const wrapper = mount(); + act(() => { + onChoices(useGetChoicesResponse.choices); + }); + + wrapper.update(); + expect(wrapper.find('[data-test-subj="severitySelect"]').first().prop('options')).toEqual([ + { value: '1', text: '1 - Critical' }, + { value: '2', text: '2 - High' }, + { value: '3', text: '3 - Moderate' }, + { value: '4', text: '4 - Low' }, + ]); + }); + + test('it transforms the impacts to options correctly', async () => { + const wrapper = mount(); + act(() => { + onChoices(useGetChoicesResponse.choices); + }); + + wrapper.update(); + expect(wrapper.find('[data-test-subj="impactSelect"]').first().prop('options')).toEqual([ + { value: '1', text: '1 - Critical' }, + { value: '2', text: '2 - High' }, + { value: '3', text: '3 - Moderate' }, + { value: '4', text: '4 - Low' }, + ]); + }); + describe('UI updates', () => { const changeEvent = { target: { value: 'Bug' } } as React.ChangeEvent; const simpleFields = [ @@ -107,22 +205,25 @@ describe('ServiceNowParamsFields renders', () => { { dataTestSubj: '[data-test-subj="severitySelect"]', key: 'severity' }, { dataTestSubj: '[data-test-subj="impactSelect"]', key: 'impact' }, ]; + simpleFields.forEach((field) => test(`${field.key} update triggers editAction :D`, () => { - const wrapper = mount(); + const wrapper = mount(); const theField = wrapper.find(field.dataTestSubj).first(); theField.prop('onChange')!(changeEvent); expect(editAction.mock.calls[0][1].incident[field.key]).toEqual(changeEvent.target.value); }) ); + test('A comment triggers editAction', () => { - const wrapper = mount(); + const wrapper = mount(); const comments = wrapper.find('textarea[data-test-subj="commentsTextArea"]'); expect(comments.simulate('change', changeEvent)); expect(editAction.mock.calls[0][1].comments.length).toEqual(1); }); + test('An empty comment does not trigger editAction', () => { - const wrapper = mount(); + const wrapper = mount(); const emptyComment = { target: { value: '' } }; const comments = wrapper.find('[data-test-subj="commentsTextArea"] textarea'); expect(comments.simulate('change', emptyComment)); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_itsm_params.tsx similarity index 64% rename from x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.tsx rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_itsm_params.tsx index 3e6b443d790a9..658b964f8b91d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_itsm_params.tsx @@ -4,8 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { Fragment, useCallback, useEffect, useMemo, useRef } from 'react'; -import { i18n } from '@kbn/i18n'; +import React, { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { EuiFormRow, EuiSelect, @@ -14,38 +13,29 @@ import { EuiSpacer, EuiTitle, } from '@elastic/eui'; +import { useKibana } from '../../../../common/lib/kibana'; import { ActionParamsProps } from '../../../../types'; -import { ServiceNowActionParams } from './types'; +import { ServiceNowITSMActionParams, Choice, Options } from './types'; import { TextAreaWithMessageVariables } from '../../text_area_with_message_variables'; import { TextFieldWithMessageVariables } from '../../text_field_with_message_variables'; +import { useGetChoices } from './use_get_choices'; +import * as i18n from './translations'; -const selectOptions = [ - { - value: '1', - text: i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectHighOptionLabel', - { defaultMessage: 'High' } - ), - }, - { - value: '2', - text: i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectMediumOptionLabel', - { defaultMessage: 'Medium' } - ), - }, - { - value: '3', - text: i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectLawOptionLabel', - { defaultMessage: 'Low' } - ), - }, -]; +const useGetChoicesFields = ['urgency', 'severity', 'impact']; +const defaultOptions: Options = { + urgency: [], + severity: [], + impact: [], +}; const ServiceNowParamsFields: React.FunctionComponent< - ActionParamsProps + ActionParamsProps > = ({ actionConnector, actionParams, editAction, index, errors, messageVariables }) => { + const { + http, + notifications: { toasts }, + } = useKibana().services; + const actionConnectorRef = useRef(actionConnector?.id ?? ''); const { incident, comments } = useMemo( () => @@ -53,10 +43,12 @@ const ServiceNowParamsFields: React.FunctionComponent< (({ incident: {}, comments: [], - } as unknown) as ServiceNowActionParams['subActionParams']), + } as unknown) as ServiceNowITSMActionParams['subActionParams']), [actionParams.subActionParams] ); + const [options, setOptions] = useState(defaultOptions); + const editSubActionProperty = useCallback( (key: string, value: any) => { const newProps = @@ -80,6 +72,28 @@ const ServiceNowParamsFields: React.FunctionComponent< [editSubActionProperty] ); + const onChoicesSuccess = (choices: Choice[]) => + setOptions( + choices.reduce( + (acc, choice) => ({ + ...acc, + [choice.element]: [ + ...(acc[choice.element] != null ? acc[choice.element] : []), + { value: choice.value, text: choice.label }, + ], + }), + defaultOptions + ) + ); + + const { isLoading: isLoadingChoices } = useGetChoices({ + http, + toastNotifications: toasts, + actionConnector, + fields: useGetChoicesFields, + onSuccess: onChoicesSuccess, + }); + useEffect(() => { if (actionConnector != null && actionConnectorRef.current !== actionConnector.id) { actionConnectorRef.current = actionConnector.id; @@ -94,6 +108,7 @@ const ServiceNowParamsFields: React.FunctionComponent< } // eslint-disable-next-line react-hooks/exhaustive-deps }, [actionConnector]); + useEffect(() => { if (!actionParams.subAction) { editAction('subAction', 'pushToService', index); @@ -114,64 +129,47 @@ const ServiceNowParamsFields: React.FunctionComponent< return ( -

- {i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.title', - { defaultMessage: 'Incident' } - )} -

+

{i18n.INCIDENT}

- + editSubActionProperty('urgency', e.target.value)} /> - + editSubActionProperty('severity', e.target.value)} /> - + editSubActionProperty('impact', e.target.value)} /> @@ -185,10 +183,7 @@ const ServiceNowParamsFields: React.FunctionComponent< errors['subActionParams.incident.short_description'].length > 0 && incident.short_description !== undefined } - label={i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.titleFieldLabel', - { defaultMessage: 'Short description (required)' } - )} + label={i18n.SHORT_DESCRIPTION_LABEL} > 0 ? comments[0].comment : undefined} - label={i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.commentsTextAreaFieldLabel', - { defaultMessage: 'Additional comments' } - )} + label={i18n.COMMENTS_LABEL} />
); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_sir_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_sir_params.test.tsx new file mode 100644 index 0000000000000..72dfd63da3d4e --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_sir_params.test.tsx @@ -0,0 +1,311 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import { mount } from 'enzyme'; +import { act } from '@testing-library/react'; + +import { ActionConnector } from '../../../../types'; +import { useGetChoices } from './use_get_choices'; +import ServiceNowSIRParamsFields from './servicenow_sir_params'; +import { Choice } from './types'; + +jest.mock('./use_get_choices'); +jest.mock('../../../../common/lib/kibana'); + +const useGetChoicesMock = useGetChoices as jest.Mock; + +const actionParams = { + subAction: 'pushToService', + subActionParams: { + incident: { + short_description: 'sn title', + description: 'some description', + category: 'Denial of Service', + dest_ip: '192.168.1.1', + source_ip: '192.168.1.2', + malware_hash: '098f6bcd4621d373cade4e832627b4f6', + malware_url: 'https://attack.com', + priority: '1', + subcategory: '20', + externalId: null, + }, + comments: [], + }, +}; + +const connector: ActionConnector = { + secrets: {}, + config: {}, + id: 'test', + actionTypeId: '.test', + name: 'Test', + isPreconfigured: false, +}; + +const editAction = jest.fn(); +const defaultProps = { + actionConnector: connector, + actionParams, + errors: { ['subActionParams.incident.short_description']: [] }, + editAction, + index: 0, + messageVariables: [], +}; + +const choicesResponse = { + isLoading: false, + choices: [ + { + dependent_value: '', + label: 'Priviledge Escalation', + value: 'Priviledge Escalation', + element: 'category', + }, + { + dependent_value: '', + label: 'Criminal activity/investigation', + value: 'Criminal activity/investigation', + element: 'category', + }, + { + dependent_value: '', + label: 'Denial of Service', + value: 'Denial of Service', + element: 'category', + }, + { + dependent_value: 'Denial of Service', + label: 'Inbound or outbound', + value: '12', + element: 'subcategory', + }, + { + dependent_value: 'Denial of Service', + label: 'Single or distributed (DoS or DDoS)', + value: '26', + element: 'subcategory', + }, + { + dependent_value: 'Denial of Service', + label: 'Inbound DDos', + value: 'inbound_ddos', + element: 'subcategory', + }, + { + dependent_value: '', + label: '1 - Critical', + value: '1', + element: 'priority', + }, + { + dependent_value: '', + label: '2 - High', + value: '2', + element: 'priority', + }, + { + dependent_value: '', + label: '3 - Moderate', + value: '3', + element: 'priority', + }, + { + dependent_value: '', + label: '4 - Low', + value: '4', + element: 'priority', + }, + { + dependent_value: '', + label: '5 - Planning', + value: '5', + element: 'priority', + }, + ], +}; + +describe('ServiceNowSIRParamsFields renders', () => { + let onChoicesSuccess = (choices: Choice[]) => {}; + + beforeEach(() => { + jest.clearAllMocks(); + useGetChoicesMock.mockImplementation((args) => { + onChoicesSuccess = args.onSuccess; + return choicesResponse; + }); + }); + + test('all params fields is rendered', () => { + const wrapper = mount(); + expect(wrapper.find('[data-test-subj="short_descriptionInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="source_ipInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="dest_ipInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="malware_urlInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="malware_hashInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="prioritySelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="categorySelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="subcategorySelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="descriptionTextArea"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="commentsTextArea"]').exists()).toBeTruthy(); + }); + + test('If short_description has errors, form row is invalid', () => { + const newProps = { + ...defaultProps, + // eslint-disable-next-line @typescript-eslint/naming-convention + errors: { 'subActionParams.incident.short_description': ['error'] }, + }; + const wrapper = mount(); + const title = wrapper.find('[data-test-subj="short_descriptionInput"]').first(); + expect(title.prop('isInvalid')).toBeTruthy(); + }); + + test('When subActionParams is undefined, set to default', () => { + const { subActionParams, ...newParams } = actionParams; + + const newProps = { + ...defaultProps, + actionParams: newParams, + }; + mount(); + expect(editAction.mock.calls[0][1]).toEqual({ + incident: {}, + comments: [], + }); + }); + + test('When subAction is undefined, set to default', () => { + const { subAction, ...newParams } = actionParams; + + const newProps = { + ...defaultProps, + actionParams: newParams, + }; + mount(); + expect(editAction.mock.calls[0][1]).toEqual('pushToService'); + }); + + test('Resets fields when connector changes', () => { + const wrapper = mount(); + expect(editAction.mock.calls.length).toEqual(0); + wrapper.setProps({ actionConnector: { ...connector, id: '1234' } }); + expect(editAction.mock.calls.length).toEqual(1); + expect(editAction.mock.calls[0][1]).toEqual({ + incident: {}, + comments: [], + }); + }); + + test('it transforms the categories to options correctly', async () => { + const wrapper = mount(); + act(() => { + onChoicesSuccess(choicesResponse.choices); + }); + + wrapper.update(); + expect(wrapper.find('[data-test-subj="categorySelect"]').first().prop('options')).toEqual([ + { value: 'Priviledge Escalation', text: 'Priviledge Escalation' }, + { + value: 'Criminal activity/investigation', + text: 'Criminal activity/investigation', + }, + { value: 'Denial of Service', text: 'Denial of Service' }, + ]); + }); + + test('it transforms the subcategories to options correctly', async () => { + const wrapper = mount(); + act(() => { + onChoicesSuccess(choicesResponse.choices); + }); + + wrapper.update(); + expect(wrapper.find('[data-test-subj="subcategorySelect"]').first().prop('options')).toEqual([ + { + text: 'Inbound or outbound', + value: '12', + }, + { + text: 'Single or distributed (DoS or DDoS)', + value: '26', + }, + { + text: 'Inbound DDos', + value: 'inbound_ddos', + }, + ]); + }); + + test('it transforms the priorities to options correctly', async () => { + const wrapper = mount(); + act(() => { + onChoicesSuccess(choicesResponse.choices); + }); + + wrapper.update(); + expect(wrapper.find('[data-test-subj="prioritySelect"]').first().prop('options')).toEqual([ + { + text: '1 - Critical', + value: '1', + }, + { + text: '2 - High', + value: '2', + }, + { + text: '3 - Moderate', + value: '3', + }, + { + text: '4 - Low', + value: '4', + }, + { + text: '5 - Planning', + value: '5', + }, + ]); + }); + + describe('UI updates', () => { + const changeEvent = { target: { value: 'Bug' } } as React.ChangeEvent; + const simpleFields = [ + { dataTestSubj: 'input[data-test-subj="short_descriptionInput"]', key: 'short_description' }, + { dataTestSubj: 'textarea[data-test-subj="descriptionTextArea"]', key: 'description' }, + { dataTestSubj: '[data-test-subj="source_ipInput"]', key: 'source_ip' }, + { dataTestSubj: '[data-test-subj="dest_ipInput"]', key: 'dest_ip' }, + { dataTestSubj: '[data-test-subj="malware_urlInput"]', key: 'malware_url' }, + { dataTestSubj: '[data-test-subj="malware_hashInput"]', key: 'malware_hash' }, + { dataTestSubj: '[data-test-subj="prioritySelect"]', key: 'priority' }, + { dataTestSubj: '[data-test-subj="categorySelect"]', key: 'category' }, + { dataTestSubj: '[data-test-subj="subcategorySelect"]', key: 'subcategory' }, + ]; + + simpleFields.forEach((field) => + test(`${field.key} update triggers editAction :D`, () => { + const wrapper = mount(); + const theField = wrapper.find(field.dataTestSubj).first(); + theField.prop('onChange')!(changeEvent); + expect(editAction.mock.calls[0][1].incident[field.key]).toEqual(changeEvent.target.value); + }) + ); + + test('A comment triggers editAction', () => { + const wrapper = mount(); + const comments = wrapper.find('textarea[data-test-subj="commentsTextArea"]'); + expect(comments.simulate('change', changeEvent)); + expect(editAction.mock.calls[0][1].comments.length).toEqual(1); + }); + + test('An empty comment does not trigger editAction', () => { + const wrapper = mount(); + const emptyComment = { target: { value: '' } }; + const comments = wrapper.find('[data-test-subj="commentsTextArea"] textarea'); + expect(comments.simulate('change', emptyComment)); + expect(editAction.mock.calls.length).toEqual(0); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_sir_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_sir_params.tsx new file mode 100644 index 0000000000000..26957d828f5e0 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_sir_params.tsx @@ -0,0 +1,295 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { + EuiFormRow, + EuiSelect, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, + EuiTitle, + EuiSelectOption, +} from '@elastic/eui'; +import { useKibana } from '../../../../common/lib/kibana'; +import { ActionParamsProps } from '../../../../types'; +import { TextAreaWithMessageVariables } from '../../text_area_with_message_variables'; +import { TextFieldWithMessageVariables } from '../../text_field_with_message_variables'; + +import * as i18n from './translations'; +import { useGetChoices } from './use_get_choices'; +import { ServiceNowSIRActionParams, Fields, Choice } from './types'; + +const useGetChoicesFields = ['category', 'subcategory', 'priority']; +const defaultFields: Fields = { + category: [], + subcategory: [], + priority: [], +}; + +const choicesToEuiOptions = (choices: Choice[]): EuiSelectOption[] => + choices.map((choice) => ({ value: choice.value, text: choice.label })); + +const ServiceNowSIRParamsFields: React.FunctionComponent< + ActionParamsProps +> = ({ actionConnector, actionParams, editAction, index, errors, messageVariables }) => { + const { + http, + notifications: { toasts }, + } = useKibana().services; + + const actionConnectorRef = useRef(actionConnector?.id ?? ''); + const { incident, comments } = useMemo( + () => + actionParams.subActionParams ?? + (({ + incident: {}, + comments: [], + } as unknown) as ServiceNowSIRActionParams['subActionParams']), + [actionParams.subActionParams] + ); + + const [choices, setChoices] = useState(defaultFields); + + const editSubActionProperty = useCallback( + (key: string, value: any) => { + const newProps = + key !== 'comments' + ? { + incident: { ...incident, [key]: value }, + comments, + } + : { incident, [key]: value }; + editAction('subActionParams', newProps, index); + }, + [comments, editAction, incident, index] + ); + + const editComment = useCallback( + (key, value) => { + if (value.length > 0) { + editSubActionProperty(key, [{ commentId: '1', comment: value }]); + } + }, + [editSubActionProperty] + ); + + const onChoicesSuccess = useCallback((values: Choice[]) => { + setChoices( + values.reduce( + (acc, value) => ({ + ...acc, + [value.element]: [...(acc[value.element] != null ? acc[value.element] : []), value], + }), + defaultFields + ) + ); + }, []); + + const { isLoading: isLoadingChoices } = useGetChoices({ + http, + toastNotifications: toasts, + actionConnector, + // Not having a memoized fields variable will cause infinitive API calls. + fields: useGetChoicesFields, + onSuccess: onChoicesSuccess, + }); + + const categoryOptions = useMemo(() => choicesToEuiOptions(choices.category), [choices.category]); + const priorityOptions = useMemo(() => choicesToEuiOptions(choices.priority), [choices.priority]); + + const subcategoryOptions = useMemo( + () => + choicesToEuiOptions( + choices.subcategory.filter( + (subcategory) => subcategory.dependent_value === incident.category + ) + ), + [choices.subcategory, incident.category] + ); + + useEffect(() => { + if (actionConnector != null && actionConnectorRef.current !== actionConnector.id) { + actionConnectorRef.current = actionConnector.id; + editAction( + 'subActionParams', + { + incident: {}, + comments: [], + }, + index + ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [actionConnector]); + + useEffect(() => { + if (!actionParams.subAction) { + editAction('subAction', 'pushToService', index); + } + if (!actionParams.subActionParams) { + editAction( + 'subActionParams', + { + incident: {}, + comments: [], + }, + index + ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [actionParams]); + + return ( + + +

{i18n.INCIDENT}

+
+ + 0 && + incident.short_description !== undefined + } + label={i18n.SHORT_DESCRIPTION_LABEL} + > + + + + + + + + + + + + + + + + + + + + + { + editAction( + 'subActionParams', + { + incident: { ...incident, priority: e.target.value }, + comments, + }, + index + ); + }} + /> + + + + + + { + editAction( + 'subActionParams', + { + incident: { ...incident, category: e.target.value, subcategory: null }, + comments, + }, + index + ); + }} + /> + + + + + editSubActionProperty('subcategory', e.target.value)} + /> + + + + + + 0 ? comments[0].comment : undefined} + label={i18n.COMMENTS_LABEL} + /> +
+ ); +}; + +// eslint-disable-next-line import/no-default-export +export { ServiceNowSIRParamsFields as default }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/translations.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/translations.ts index c84a916c0fef4..c8bc2f427bde2 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/translations.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/translations.ts @@ -6,17 +6,31 @@ import { i18n } from '@kbn/i18n'; -export const SERVICENOW_DESC = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.selectMessageText', +export const SERVICENOW_ITSM_DESC = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.serviceNowITSM.selectMessageText', { - defaultMessage: 'Create an incident in ServiceNow.', + defaultMessage: 'Create an incident in ServiceNow ITSM.', } ); -export const SERVICENOW_TITLE = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.actionTypeTitle', +export const SERVICENOW_SIR_DESC = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.serviceNowSIR.selectMessageText', { - defaultMessage: 'ServiceNow', + defaultMessage: 'Create an incident in ServiceNow SIR.', + } +); + +export const SERVICENOW_ITSM_TITLE = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.serviceNowITSM.actionTypeTitle', + { + defaultMessage: 'ServiceNow ITSM', + } +); + +export const SERVICENOW_SIR_TITLE = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.serviceNowSIR.actionTypeTitle', + { + defaultMessage: 'ServiceNow SIR', } ); @@ -98,65 +112,114 @@ export const PASSWORD_REQUIRED = i18n.translate( } ); -export const API_TOKEN_LABEL = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.apiTokenTextFieldLabel', +export const TITLE_REQUIRED = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.common.requiredShortDescTextField', { - defaultMessage: 'Api token', + defaultMessage: 'Short description is required.', } ); -export const API_TOKEN_REQUIRED = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredApiTokenTextField', +export const SOURCE_IP_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.sourceIPTitle', { - defaultMessage: 'Api token is required.', + defaultMessage: 'Source IP', } ); -export const EMAIL_LABEL = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.emailTextFieldLabel', +export const DEST_IP_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.destinationIPTitle', { - defaultMessage: 'Email', + defaultMessage: 'Destination IP', } ); -export const EMAIL_REQUIRED = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.requiredEmailTextField', +export const INCIDENT = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.title', { - defaultMessage: 'Email is required.', + defaultMessage: 'Incident', } ); -export const MAPPING_FIELD_SHORT_DESC = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldShortDescription', +export const SHORT_DESCRIPTION_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.titleFieldLabel', { - defaultMessage: 'Short Description', + defaultMessage: 'Short description (required)', } ); -export const MAPPING_FIELD_DESC = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldDescription', +export const DESCRIPTION_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.descriptionTextAreaFieldLabel', { defaultMessage: 'Description', } ); -export const MAPPING_FIELD_COMMENTS = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.mappingFieldComments', +export const COMMENTS_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.commentsTextAreaFieldLabel', { - defaultMessage: 'Comments', + defaultMessage: 'Additional comments', } ); -export const DESCRIPTION_REQUIRED = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.common.requiredDescriptionTextField', +export const MALWARE_URL_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.malwareURLTitle', { - defaultMessage: 'Description is required.', + defaultMessage: 'Malware URL', } ); -export const TITLE_REQUIRED = i18n.translate( - 'xpack.triggersActionsUI.components.builtinActionTypes.common.requiredShortDescTextField', +export const MALWARE_HASH_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.malwareHashTitle', { - defaultMessage: 'Short description is required.', + defaultMessage: 'Malware hash', + } +); + +export const CHOICES_API_ERROR = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.unableToGetChoicesMessage', + { + defaultMessage: 'Unable to get choices', + } +); + +export const CATEGORY_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.categoryTitle', + { + defaultMessage: 'Category', + } +); + +export const SUBCATEGORY_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.subcategoryTitle', + { + defaultMessage: 'Subcategory', + } +); + +export const URGENCY_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.urgencySelectFieldLabel', + { + defaultMessage: 'Urgency', + } +); + +export const SEVERITY_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.severitySelectFieldLabel', + { + defaultMessage: 'Severity', + } +); + +export const IMPACT_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.impactSelectFieldLabel', + { + defaultMessage: 'Impact', + } +); + +export const PRIORITY_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.servicenow.prioritySelectFieldLabel', + { + defaultMessage: 'Priority', } ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/types.ts index ae03680a80534..be9a7c634af8a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/types.ts @@ -4,18 +4,27 @@ * you may not use this file except in compliance with the Elastic License. */ +import { EuiSelectOption } from '@elastic/eui'; import { UserConfiguredActionConnector } from '../../../../types'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ExecutorSubActionPushParams } from '../../../../../../actions/server/builtin_action_types/servicenow/types'; +import { + ExecutorSubActionPushParamsITSM, + ExecutorSubActionPushParamsSIR, + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../../../actions/server/builtin_action_types/servicenow/types'; export type ServiceNowActionConnector = UserConfiguredActionConnector< ServiceNowConfig, ServiceNowSecrets >; -export interface ServiceNowActionParams { +export interface ServiceNowITSMActionParams { subAction: string; - subActionParams: ExecutorSubActionPushParams; + subActionParams: ExecutorSubActionPushParamsITSM; +} + +export interface ServiceNowSIRActionParams { + subAction: string; + subActionParams: ExecutorSubActionPushParamsSIR; } export interface ServiceNowConfig { @@ -26,3 +35,13 @@ export interface ServiceNowSecrets { username: string; password: string; } + +export interface Choice { + value: string; + label: string; + element: string; + dependent_value: string; +} + +export type Fields = Record; +export type Options = Record; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_choices.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_choices.test.tsx new file mode 100644 index 0000000000000..4e8061ebaa6e9 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_choices.test.tsx @@ -0,0 +1,164 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook } from '@testing-library/react-hooks'; + +import { useKibana } from '../../../../common/lib/kibana'; +import { ActionConnector } from '../../../../types'; +import { useGetChoices, UseGetChoices, UseGetChoicesProps } from './use_get_choices'; +import { getChoices } from './api'; + +jest.mock('./api'); +jest.mock('../../../../common/lib/kibana'); + +const useKibanaMock = useKibana as jest.Mocked; +const getChoicesMock = getChoices as jest.Mock; +const onSuccess = jest.fn(); + +const actionConnector = { + secrets: { + username: 'user', + password: 'pass', + }, + id: 'test', + actionTypeId: '.servicenow', + name: 'ServiceNow ITSM', + isPreconfigured: false, + config: { + apiUrl: 'https://dev94428.service-now.com/', + }, +} as ActionConnector; + +const getChoicesResponse = [ + { + dependent_value: '', + label: 'Priviledge Escalation', + value: 'Priviledge Escalation', + element: 'category', + }, + { + dependent_value: '', + label: 'Criminal activity/investigation', + value: 'Criminal activity/investigation', + element: 'category', + }, + { + dependent_value: '', + label: 'Denial of Service', + value: 'Denial of Service', + element: 'category', + }, +]; + +describe('useGetChoices', () => { + const { services } = useKibanaMock(); + getChoicesMock.mockResolvedValue({ + data: getChoicesResponse, + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + const fields = ['priority']; + + it('init', async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetChoices({ + http: services.http, + actionConnector, + toastNotifications: services.notifications.toasts, + fields, + onSuccess, + }) + ); + + await waitForNextUpdate(); + + expect(result.current).toEqual({ + isLoading: false, + choices: getChoicesResponse, + }); + }); + + it('returns an empty array when connector is not presented', async () => { + const { result } = renderHook(() => + useGetChoices({ + http: services.http, + actionConnector: undefined, + toastNotifications: services.notifications.toasts, + fields, + onSuccess, + }) + ); + + expect(result.current).toEqual({ + isLoading: false, + choices: [], + }); + }); + + it('it calls onSuccess', async () => { + const { waitForNextUpdate } = renderHook(() => + useGetChoices({ + http: services.http, + actionConnector, + toastNotifications: services.notifications.toasts, + fields, + onSuccess, + }) + ); + + await waitForNextUpdate(); + + expect(onSuccess).toHaveBeenCalledWith(getChoicesResponse); + }); + + it('it displays an error when service fails', async () => { + getChoicesMock.mockResolvedValue({ + status: 'error', + serviceMessage: 'An error occurred', + }); + + const { waitForNextUpdate } = renderHook(() => + useGetChoices({ + http: services.http, + actionConnector, + toastNotifications: services.notifications.toasts, + fields, + onSuccess, + }) + ); + + await waitForNextUpdate(); + + expect(services.notifications.toasts.addDanger).toHaveBeenCalledWith({ + text: 'An error occurred', + title: 'Unable to get choices', + }); + }); + + it('it displays an error when http throws an error', async () => { + getChoicesMock.mockImplementation(() => { + throw new Error('An error occurred'); + }); + + renderHook(() => + useGetChoices({ + http: services.http, + actionConnector, + toastNotifications: services.notifications.toasts, + fields, + onSuccess, + }) + ); + + expect(services.notifications.toasts.addDanger).toHaveBeenCalledWith({ + text: 'An error occurred', + title: 'Unable to get choices', + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_choices.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_choices.tsx new file mode 100644 index 0000000000000..0e4338cec0e18 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/use_get_choices.tsx @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useState, useEffect, useRef, useCallback } from 'react'; +import { HttpSetup, ToastsApi } from 'kibana/public'; +import { ActionConnector } from '../../../../types'; +import { getChoices } from './api'; +import { Choice } from './types'; +import * as i18n from './translations'; + +export interface UseGetChoicesProps { + http: HttpSetup; + toastNotifications: Pick< + ToastsApi, + 'get$' | 'add' | 'remove' | 'addSuccess' | 'addWarning' | 'addDanger' | 'addError' + >; + actionConnector?: ActionConnector; + fields: string[]; + onSuccess?: (choices: Choice[]) => void; +} + +export interface UseGetChoices { + choices: Choice[]; + isLoading: boolean; +} + +export const useGetChoices = ({ + http, + actionConnector, + toastNotifications, + fields, + onSuccess, +}: UseGetChoicesProps): UseGetChoices => { + const [isLoading, setIsLoading] = useState(false); + const [choices, setChoices] = useState([]); + const didCancel = useRef(false); + const abortCtrl = useRef(new AbortController()); + + const fetchData = useCallback(async () => { + if (!actionConnector) { + setIsLoading(false); + return; + } + + try { + didCancel.current = false; + abortCtrl.current.abort(); + abortCtrl.current = new AbortController(); + setIsLoading(true); + + const res = await getChoices({ + http, + signal: abortCtrl.current.signal, + connectorId: actionConnector.id, + fields, + }); + + if (!didCancel.current) { + setIsLoading(false); + setChoices(res.data ?? []); + if (res.status && res.status === 'error') { + toastNotifications.addDanger({ + title: i18n.CHOICES_API_ERROR, + text: `${res.serviceMessage ?? res.message}`, + }); + } else if (onSuccess) { + onSuccess(res.data ?? []); + } + } + } catch (error) { + if (!didCancel.current) { + setIsLoading(false); + toastNotifications.addDanger({ + title: i18n.CHOICES_API_ERROR, + text: error.message, + }); + } + } + }, [actionConnector, http, fields, onSuccess, toastNotifications]); + + useEffect(() => { + fetchData(); + + return () => { + didCancel.current = true; + abortCtrl.current.abort(); + setIsLoading(false); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return { + choices, + isLoading, + }; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx index 2145443ba044c..d0621e44aebc4 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx @@ -34,7 +34,11 @@ import { ActionTypeForm, ActionTypeFormProps } from './action_type_form'; import { AddConnectorInline } from './connector_add_inline'; import { actionTypeCompare } from '../../lib/action_type_compare'; import { checkActionFormActionTypeEnabled } from '../../lib/check_action_type_enabled'; -import { VIEW_LICENSE_OPTIONS_LINK, DEFAULT_HIDDEN_ACTION_TYPES } from '../../../common/constants'; +import { + VIEW_LICENSE_OPTIONS_LINK, + DEFAULT_HIDDEN_ACTION_TYPES, + DEFAULT_HIDDEN_ONLY_ON_ALERTS_ACTION_TYPES, +} from '../../../common/constants'; import { ActionGroup, AlertActionParam } from '../../../../../alerts/common'; import { useKibana } from '../../../common/lib/kibana'; import { DefaultActionParamsGetter } from '../../lib/get_defaults_for_action_params'; @@ -230,9 +234,15 @@ export const ActionForm = ({ .list() /** * TODO: Remove when cases connector is available across Kibana. Issue: https://github.com/elastic/kibana/issues/82502. + * TODO: Need to decide about ServiceNow SIR connector. * If actionTypes are set, hidden connectors are filtered out. Otherwise, they are not. */ - .filter(({ id }) => actionTypes ?? !DEFAULT_HIDDEN_ACTION_TYPES.includes(id)) + .filter( + ({ id }) => + actionTypes ?? + (!DEFAULT_HIDDEN_ACTION_TYPES.includes(id) && + !DEFAULT_HIDDEN_ONLY_ON_ALERTS_ACTION_TYPES.includes(id)) + ) .filter((item) => actionTypesIndex[item.id]) .filter((item) => !!item.actionParamsFields) .sort((a, b) => diff --git a/x-pack/plugins/triggers_actions_ui/public/common/constants/index.ts b/x-pack/plugins/triggers_actions_ui/public/common/constants/index.ts index 833ed915fad59..8832f8b826eab 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/constants/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/common/constants/index.ts @@ -11,3 +11,5 @@ export { builtInGroupByTypes } from './group_by_types'; export const VIEW_LICENSE_OPTIONS_LINK = 'https://www.elastic.co/subscriptions'; // TODO: Remove when cases connector is available across Kibana. Issue: https://github.com/elastic/kibana/issues/82502. export const DEFAULT_HIDDEN_ACTION_TYPES = ['.case']; +// Action types included in this array will be hidden only from the alert's action type node list +export const DEFAULT_HIDDEN_ONLY_ON_ALERTS_ACTION_TYPES = ['.servicenow-sir']; diff --git a/x-pack/plugins/triggers_actions_ui/public/common/index.ts b/x-pack/plugins/triggers_actions_ui/public/common/index.ts index 86c33a373753f..c7f43fedb6f03 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/common/index.ts @@ -10,6 +10,6 @@ export * from './index_controls'; export * from './lib'; export * from './types'; -export { connectorConfiguration as ServiceNowConnectorConfiguration } from '../application/components/builtin_action_types/servicenow/config'; +export { serviceNowITSMConfiguration as ServiceNowITSMConnectorConfiguration } from '../application/components/builtin_action_types/servicenow/config'; export { connectorConfiguration as JiraConnectorConfiguration } from '../application/components/builtin_action_types/jira/config'; export { connectorConfiguration as ResilientConnectorConfiguration } from '../application/components/builtin_action_types/resilient/config'; diff --git a/x-pack/plugins/uptime/public/components/settings/types.ts b/x-pack/plugins/uptime/public/components/settings/types.ts index faa1c7e72e47b..7a3af47524b20 100644 --- a/x-pack/plugins/uptime/public/components/settings/types.ts +++ b/x-pack/plugins/uptime/public/components/settings/types.ts @@ -9,7 +9,7 @@ import { JiraActionTypeId, PagerDutyActionTypeId, ServerLogActionTypeId, - ServiceNowActionTypeId, + ServiceNowITSMActionTypeId as ServiceNowActionTypeId, SlackActionTypeId, TeamsActionTypeId, WebhookActionTypeId, diff --git a/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/plugin.ts b/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/plugin.ts index 18f3c83b00141..dfdacb230763f 100644 --- a/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/plugin.ts +++ b/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/plugin.ts @@ -38,6 +38,7 @@ export function getAllExternalServiceSimulatorPaths(): string[] { getExternalServiceSimulatorPath(service) ); allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.SERVICENOW}/api/now/v2/table/incident`); + allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.SERVICENOW}/api/now/v2/table/sys_choice`); allPaths.push( `/api/_${NAME}/${ExternalServiceSimulator.SERVICENOW}/api/now/v2/table/sys_dictionary` ); diff --git a/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/servicenow_simulation.ts b/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/servicenow_simulation.ts index 2c3138a36f071..b94bb89fc6f4a 100644 --- a/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/servicenow_simulation.ts +++ b/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/servicenow_simulation.ts @@ -127,6 +127,51 @@ export function initPlugin(router: IRouter, path: string) { }); } ); + + router.get( + { + path: `${path}/api/now/v2/table/sys_choice`, + options: { + authRequired: false, + }, + validate: {}, + }, + async function ( + context: RequestHandlerContext, + req: KibanaRequest, + res: KibanaResponseFactory + ): Promise> { + return jsonResponse(res, 200, { + result: [ + { + dependent_value: '', + label: '1 - Critical', + value: '1', + }, + { + dependent_value: '', + label: '2 - High', + value: '2', + }, + { + dependent_value: '', + label: '3 - Moderate', + value: '3', + }, + { + dependent_value: '', + label: '4 - Low', + value: '4', + }, + { + dependent_value: '', + label: '5 - Planning', + value: '5', + }, + ], + }); + } + ); } function jsonResponse(res: KibanaResponseFactory, code: number, object?: Record) { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/servicenow.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/servicenow.ts index e448ad1f9c2ad..5f7146b43bfdb 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/servicenow.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/servicenow.ts @@ -216,7 +216,7 @@ export default function servicenowTest({ getService }: FtrProviderContext) { // Cannot destructure property 'value' of 'undefined' as it is undefined. // // The error seems to come from the exact same place in the code based on the - // exact same circomstances: + // exact same circumstances: // // https://github.com/elastic/kibana/blob/b0a223ebcbac7e404e8ae6da23b2cc6a4b509ff1/packages/kbn-config-schema/src/types/literal_type.ts#L28 // @@ -247,7 +247,7 @@ export default function servicenowTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]\n- [4.subAction]: expected value to equal [getChoices]', }); }); }); @@ -265,7 +265,7 @@ export default function servicenowTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.short_description]: expected value of type [string] but got [undefined]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.short_description]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [getChoices]', }); }); }); @@ -288,7 +288,7 @@ export default function servicenowTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.short_description]: expected value of type [string] but got [undefined]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.short_description]: expected value of type [string] but got [undefined]\n- [4.subAction]: expected value to equal [getChoices]', }); }); }); @@ -315,7 +315,7 @@ export default function servicenowTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [getChoices]', }); }); }); @@ -342,10 +342,33 @@ export default function servicenowTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [getChoices]', }); }); }); + + describe('getChoices', () => { + it('should fail when field is not provided', async () => { + await supertest + .post(`/api/actions/action/${simulatedActionId}/_execute`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + subAction: 'getChoices', + subActionParams: {}, + }, + }) + .then((resp: any) => { + expect(resp.body).to.eql({ + actionId: simulatedActionId, + status: 'error', + retry: false, + message: + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subAction]: expected value to equal [pushToService]\n- [4.subActionParams.fields]: expected value of type [array] but got [undefined]', + }); + }); + }); + }); }); describe('Execution', () => { @@ -376,6 +399,54 @@ export default function servicenowTest({ getService }: FtrProviderContext) { }, }); }); + + describe('getChoices', () => { + it('should get choices', async () => { + const { body: result } = await supertest + .post(`/api/actions/action/${simulatedActionId}/_execute`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + subAction: 'getChoices', + subActionParams: { fields: ['priority'] }, + }, + }) + .expect(200); + + expect(proxyHaveBeenCalled).to.equal(true); + expect(result).to.eql({ + status: 'ok', + actionId: simulatedActionId, + data: [ + { + dependent_value: '', + label: '1 - Critical', + value: '1', + }, + { + dependent_value: '', + label: '2 - High', + value: '2', + }, + { + dependent_value: '', + label: '3 - Moderate', + value: '3', + }, + { + dependent_value: '', + label: '4 - Low', + value: '4', + }, + { + dependent_value: '', + label: '5 - Planning', + value: '5', + }, + ], + }); + }); + }); }); after(() => { From 69f4c9d5410a43391063e9ffa5b380d52a507a4a Mon Sep 17 00:00:00 2001 From: Rudolf Meijering Date: Tue, 2 Feb 2021 10:40:17 +0100 Subject: [PATCH 75/85] Fix documentMigrator for snapshot releases (#89936) --- .../migrations/kibana/kibana_migrator.test.ts | 14 ++++++++++++++ .../migrations/kibana/kibana_migrator.ts | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts index dac93ff29b68f..c659e2e2f0591 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts @@ -14,6 +14,16 @@ import { loggingSystemMock } from '../../../logging/logging_system.mock'; import { SavedObjectTypeRegistry } from '../../saved_objects_type_registry'; import { SavedObjectsType } from '../../types'; import { errors as esErrors } from '@elastic/elasticsearch'; +import { DocumentMigrator } from '../core/document_migrator'; +jest.mock('../core/document_migrator', () => { + return { + // Create a mock for spying on the constructor + DocumentMigrator: jest.fn().mockImplementation((...args) => { + const { DocumentMigrator: RealDocMigrator } = jest.requireActual('../core/document_migrator'); + return new RealDocMigrator(args[0]); + }), + }; +}); const createRegistry = (types: Array>) => { const registry = new SavedObjectTypeRegistry(); @@ -31,12 +41,16 @@ const createRegistry = (types: Array>) => { }; describe('KibanaMigrator', () => { + beforeEach(() => { + (DocumentMigrator as jest.Mock).mockClear(); + }); describe('constructor', () => { it('coerces the current Kibana version if it has a hyphen', () => { const options = mockOptions(); options.kibanaVersion = '3.2.1-SNAPSHOT'; const migrator = new KibanaMigrator(options); expect(migrator.kibanaVersion).toEqual('3.2.1'); + expect((DocumentMigrator as jest.Mock).mock.calls[0][0].kibanaVersion).toEqual('3.2.1'); }); }); describe('getActiveMappings', () => { diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts index ecef84a6e297c..28c9e828d923e 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts @@ -97,7 +97,7 @@ export class KibanaMigrator { this.log = logger; this.kibanaVersion = kibanaVersion.split('-')[0]; // coerce a semver-like string (x.y.z-SNAPSHOT) or prerelease version (x.y.z-alpha) to a regular semver (x.y.z); this.documentMigrator = new DocumentMigrator({ - kibanaVersion, + kibanaVersion: this.kibanaVersion, typeRegistry, log: this.log, }); From 7fbec26594f130d46c1a081cef6191ddff2182a7 Mon Sep 17 00:00:00 2001 From: Rudolf Meijering Date: Tue, 2 Feb 2021 10:42:38 +0100 Subject: [PATCH 76/85] Debug log the latest saved object migrations per type (#89722) * Debug log the latest saved object migrations per type * Fix broken test --- .../migrations/kibana/kibana_migrator.test.ts | 4 ++-- .../saved_objects/migrations/kibana/kibana_migrator.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts index c659e2e2f0591..e6fd5004dd7d5 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts @@ -119,8 +119,8 @@ describe('KibanaMigrator', () => { const migrator = new KibanaMigrator(options); - expect(() => migrator.runMigrations()).rejects.toThrow( - /Migrations are not ready. Make sure prepareMigrations is called first./i + await expect(() => migrator.runMigrations()).toThrowErrorMatchingInlineSnapshot( + `"Migrations are not ready. Make sure prepareMigrations is called first."` ); }); diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts index 28c9e828d923e..1a4611b491419 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts @@ -12,6 +12,7 @@ */ import { BehaviorSubject } from 'rxjs'; +import Semver from 'semver'; import { KibanaConfigType } from '../../../kibana_config'; import { ElasticsearchClient } from '../../../elasticsearch'; import { Logger } from '../../../logging'; @@ -163,6 +164,15 @@ export class KibanaMigrator { registry: this.typeRegistry, }); + this.log.debug('Applying registered migrations for the following saved object types:'); + Object.entries(this.documentMigrator.migrationVersion) + .sort(([t1, v1], [t2, v2]) => { + return Semver.compare(v1, v2); + }) + .forEach(([type, migrationVersion]) => { + this.log.debug(`migrationVersion: ${migrationVersion} saved object type: ${type}`); + }); + const migrators = Object.keys(indexMap).map((index) => { // TODO migrationsV2: remove old migrations algorithm if (this.savedObjectsConfig.enableV2) { From a9e6c39d7f143e7f64d3e48f22c3d8ce6d147307 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 2 Feb 2021 09:49:50 +0000 Subject: [PATCH 77/85] chore(NA): support yarn install using bazel managed directories for dependencies (#89883) * chore(NA): allow yarn dependencies to be installed when using bazel to manage yarn deps * chore(NA): remove unused flag Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- preinstall_check.js | 51 ++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/preinstall_check.js b/preinstall_check.js index e761afa91022c..e508f9ecb10c6 100644 --- a/preinstall_check.js +++ b/preinstall_check.js @@ -6,34 +6,37 @@ * Public License, v 1. */ -const isUsingNpm = process.env.npm_config_git !== undefined; +(() => { + const isUsingNpm = process.env.npm_config_git !== undefined; -if (isUsingNpm) { - throw `Use Yarn instead of npm, see Kibana's contributing guidelines`; -} - -// The value of the `npm_config_argv` env for each command: -// -// - `npm install`: '{"remain":[],"cooked":["install"],"original":[]}' -// - `yarn`: '{"remain":[],"cooked":["install"],"original":[]}' -// - `yarn kbn bootstrap`: '{"remain":[],"cooked":["run","kbn"],"original":["kbn","bootstrap"]}' -const rawArgv = process.env.npm_config_argv; - -if (rawArgv === undefined) { - return; -} + if (isUsingNpm) { + throw `Use Yarn instead of npm, see Kibana's contributing guidelines`; + } -try { - const argv = JSON.parse(rawArgv); + // The value of the `npm_config_argv` env for each command: + // + // - `npm install`: '{"remain":[],"cooked":["install"],"original":[]}' + // - `yarn`: '{"remain":[],"cooked":["install"],"original":[]}' + // - `yarn kbn bootstrap`: '{"remain":[],"cooked":["run","kbn"],"original":["kbn","bootstrap"]}' + const rawArgv = process.env.npm_config_argv; - if (argv.cooked.includes('kbn')) { - // all good, trying to install deps using `kbn` + if (rawArgv === undefined) { return; } - if (argv.cooked.includes('install')) { - console.log('\nWARNING: When installing dependencies, prefer `yarn kbn bootstrap`\n'); + try { + const argv = JSON.parse(rawArgv); + + // allow dependencies to be installed with `yarn kbn bootstrap` or `bazel run @nodejs//:yarn` (called under the hood by bazel) + if (argv.cooked.includes('kbn') || !!process.env.BAZEL_YARN_INSTALL) { + // all good, trying to install deps using `kbn` or bazel directly + return; + } + + if (argv.cooked.includes('install')) { + console.log('\nWARNING: When installing dependencies, prefer `yarn kbn bootstrap`\n'); + } + } catch (e) { + // if it fails we do nothing, as this is just intended to be a helpful message } -} catch (e) { - // if it fails we do nothing, as this is just intended to be a helpful message -} +})(); From b24f06cff238ba527164bb6c40c876ac8d6961f3 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 2 Feb 2021 09:51:55 +0000 Subject: [PATCH 78/85] chore(NA): improve logic check when installing Bazel tools (#89634) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-pm/dist/index.js | 54 +++++++++++++------ .../kbn-pm/src/utils/bazel/install_tools.ts | 29 +++++++++- 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index df04965cd8c32..e8c6fa4d5a013 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -47961,11 +47961,13 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "installBazelTools", function() { return installBazelTools; }); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _child_process__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319); -/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(131); -/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(246); +/* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); +/* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dedent__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _child_process__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(319); +/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(131); +/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(246); /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License @@ -47978,8 +47980,9 @@ __webpack_require__.r(__webpack_exports__); + async function readBazelToolsVersionFile(repoRootPath, versionFilename) { - const version = (await Object(_fs__WEBPACK_IMPORTED_MODULE_2__["readFile"])(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(repoRootPath, versionFilename))).toString().split('\n')[0]; + const version = (await Object(_fs__WEBPACK_IMPORTED_MODULE_3__["readFile"])(Object(path__WEBPACK_IMPORTED_MODULE_1__["resolve"])(repoRootPath, versionFilename))).toString().split('\n')[0]; if (!version) { throw new Error(`[bazel_tools] Failed on reading bazel tools versions\n ${versionFilename} file do not contain any version set`); @@ -47988,30 +47991,49 @@ async function readBazelToolsVersionFile(repoRootPath, versionFilename) { return version; } +async function isBazelBinAvailable() { + try { + await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('bazel', ['--version'], { + stdio: 'pipe' + }); + return true; + } catch { + return false; + } +} + async function installBazelTools(repoRootPath) { - _log__WEBPACK_IMPORTED_MODULE_3__["log"].debug(`[bazel_tools] reading bazel tools versions from version files`); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] reading bazel tools versions from version files`); const bazeliskVersion = await readBazelToolsVersionFile(repoRootPath, '.bazeliskversion'); const bazelVersion = await readBazelToolsVersionFile(repoRootPath, '.bazelversion'); // Check what globals are installed - _log__WEBPACK_IMPORTED_MODULE_3__["log"].debug(`[bazel_tools] verify if bazelisk is installed`); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] verify if bazelisk is installed`); const { - stdout - } = await Object(_child_process__WEBPACK_IMPORTED_MODULE_1__["spawn"])('yarn', ['global', 'list'], { + stdout: bazeliskPkgInstallStdout + } = await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('yarn', ['global', 'list'], { stdio: 'pipe' - }); // Install bazelisk if not installed + }); + const isBazelBinAlreadyAvailable = await isBazelBinAvailable(); // Install bazelisk if not installed - if (!stdout.includes(`@bazel/bazelisk@${bazeliskVersion}`)) { - _log__WEBPACK_IMPORTED_MODULE_3__["log"].info(`[bazel_tools] installing Bazel tools`); - _log__WEBPACK_IMPORTED_MODULE_3__["log"].debug(`[bazel_tools] bazelisk is not installed. Installing @bazel/bazelisk@${bazeliskVersion} and bazel@${bazelVersion}`); - await Object(_child_process__WEBPACK_IMPORTED_MODULE_1__["spawn"])('yarn', ['global', 'add', `@bazel/bazelisk@${bazeliskVersion}`], { + if (!bazeliskPkgInstallStdout.includes(`@bazel/bazelisk@${bazeliskVersion}`) || !isBazelBinAlreadyAvailable) { + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info(`[bazel_tools] installing Bazel tools`); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] bazelisk is not installed. Installing @bazel/bazelisk@${bazeliskVersion} and bazel@${bazelVersion}`); + await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('yarn', ['global', 'add', `@bazel/bazelisk@${bazeliskVersion}`], { env: { USE_BAZEL_VERSION: bazelVersion }, stdio: 'pipe' }); + const isBazelBinAvailableAfterInstall = await isBazelBinAvailable(); + + if (!isBazelBinAvailableAfterInstall) { + throw new Error(dedent__WEBPACK_IMPORTED_MODULE_0___default.a` + [bazel_tools] an error occurred when installing the Bazel tools. Please make sure 'yarn global bin' is on your $PATH, otherwise just add it there + `); + } } - _log__WEBPACK_IMPORTED_MODULE_3__["log"].success(`[bazel_tools] all bazel tools are correctly installed`); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].success(`[bazel_tools] all bazel tools are correctly installed`); } /***/ }), diff --git a/packages/kbn-pm/src/utils/bazel/install_tools.ts b/packages/kbn-pm/src/utils/bazel/install_tools.ts index 4e19974590e83..3440d32ee4b51 100644 --- a/packages/kbn-pm/src/utils/bazel/install_tools.ts +++ b/packages/kbn-pm/src/utils/bazel/install_tools.ts @@ -6,6 +6,7 @@ * Public License, v 1. */ +import dedent from 'dedent'; import { resolve } from 'path'; import { spawn } from '../child_process'; import { readFile } from '../fs'; @@ -25,6 +26,16 @@ async function readBazelToolsVersionFile(repoRootPath: string, versionFilename: return version; } +async function isBazelBinAvailable() { + try { + await spawn('bazel', ['--version'], { stdio: 'pipe' }); + + return true; + } catch { + return false; + } +} + export async function installBazelTools(repoRootPath: string) { log.debug(`[bazel_tools] reading bazel tools versions from version files`); const bazeliskVersion = await readBazelToolsVersionFile(repoRootPath, '.bazeliskversion'); @@ -32,10 +43,17 @@ export async function installBazelTools(repoRootPath: string) { // Check what globals are installed log.debug(`[bazel_tools] verify if bazelisk is installed`); - const { stdout } = await spawn('yarn', ['global', 'list'], { stdio: 'pipe' }); + const { stdout: bazeliskPkgInstallStdout } = await spawn('yarn', ['global', 'list'], { + stdio: 'pipe', + }); + + const isBazelBinAlreadyAvailable = await isBazelBinAvailable(); // Install bazelisk if not installed - if (!stdout.includes(`@bazel/bazelisk@${bazeliskVersion}`)) { + if ( + !bazeliskPkgInstallStdout.includes(`@bazel/bazelisk@${bazeliskVersion}`) || + !isBazelBinAlreadyAvailable + ) { log.info(`[bazel_tools] installing Bazel tools`); log.debug( @@ -47,6 +65,13 @@ export async function installBazelTools(repoRootPath: string) { }, stdio: 'pipe', }); + + const isBazelBinAvailableAfterInstall = await isBazelBinAvailable(); + if (!isBazelBinAvailableAfterInstall) { + throw new Error(dedent` + [bazel_tools] an error occurred when installing the Bazel tools. Please make sure 'yarn global bin' is on your $PATH, otherwise just add it there + `); + } } log.success(`[bazel_tools] all bazel tools are correctly installed`); From e73b3778ed0294cb3f72d14486c29988cd8ec20d Mon Sep 17 00:00:00 2001 From: Daniil Date: Tue, 2 Feb 2021 11:55:26 +0200 Subject: [PATCH 79/85] [Data Table] Use shared CSV export mechanism (#89702) * Move formatting columns into response handler * Use shared csv export * Cleanup files * Fix type * Fix translation * Filter out non-dimension values --- .../public/components/table_vis_basic.tsx | 27 ++-- .../public/components/table_vis_cell.tsx | 10 +- .../public/components/table_vis_columns.tsx | 35 ++--- .../public/components/table_vis_controls.tsx | 148 ++++++++++-------- .../public/components/table_vis_split.tsx | 9 +- .../public/components/table_visualization.tsx | 5 +- .../public/legacy/vis_controller.ts | 5 +- .../public/table_vis_fn.test.ts | 6 +- .../vis_type_table/public/table_vis_fn.ts | 8 +- .../public/table_vis_response_handler.ts | 90 ----------- src/plugins/vis_type_table/public/types.ts | 23 ++- .../public/utils/add_percentage_column.ts | 63 +++++--- .../public/utils/create_formatted_table.ts | 97 ++++++++++++ .../public/utils/export_as_csv.ts | 64 -------- .../vis_type_table/public/utils/index.ts | 2 +- .../utils/table_vis_response_handler.ts | 75 +++++++++ .../vis_type_table/public/utils/use/index.ts | 1 - .../public/utils/use/use_formatted_columns.ts | 115 -------------- 18 files changed, 364 insertions(+), 419 deletions(-) delete mode 100644 src/plugins/vis_type_table/public/table_vis_response_handler.ts create mode 100644 src/plugins/vis_type_table/public/utils/create_formatted_table.ts delete mode 100644 src/plugins/vis_type_table/public/utils/export_as_csv.ts create mode 100644 src/plugins/vis_type_table/public/utils/table_vis_response_handler.ts delete mode 100644 src/plugins/vis_type_table/public/utils/use/use_formatted_columns.ts diff --git a/src/plugins/vis_type_table/public/components/table_vis_basic.tsx b/src/plugins/vis_type_table/public/components/table_vis_basic.tsx index 6cea4d09c4e7f..8bb5186159b7d 100644 --- a/src/plugins/vis_type_table/public/components/table_vis_basic.tsx +++ b/src/plugins/vis_type_table/public/components/table_vis_basic.tsx @@ -13,15 +13,14 @@ import { orderBy } from 'lodash'; import { IInterpreterRenderHandlers } from 'src/plugins/expressions'; import { createTableVisCell } from './table_vis_cell'; -import { Table } from '../table_vis_response_handler'; -import { TableVisConfig, TableVisUseUiStateProps } from '../types'; -import { useFormattedColumnsAndRows, usePagination } from '../utils'; +import { TableContext, TableVisConfig, TableVisUseUiStateProps } from '../types'; +import { usePagination } from '../utils'; import { TableVisControls } from './table_vis_controls'; import { createGridColumns } from './table_vis_columns'; interface TableVisBasicProps { fireEvent: IInterpreterRenderHandlers['event']; - table: Table; + table: TableContext; visConfig: TableVisConfig; title?: string; uiStateProps: TableVisUseUiStateProps; @@ -35,7 +34,7 @@ export const TableVisBasic = memo( title, uiStateProps: { columnsWidth, sort, setColumnsWidth, setSort }, }: TableVisBasicProps) => { - const { columns, rows } = useFormattedColumnsAndRows(table, visConfig); + const { columns, rows, formattedColumns } = table; // custom sorting is in place until the EuiDataGrid sorting gets rid of flaws -> https://github.com/elastic/eui/issues/4108 const sortedRows = useMemo( @@ -47,13 +46,19 @@ export const TableVisBasic = memo( ); // renderCellValue is a component which renders a cell based on column and row indexes - const renderCellValue = useMemo(() => createTableVisCell(columns, sortedRows), [ - columns, + const renderCellValue = useMemo(() => createTableVisCell(sortedRows, formattedColumns), [ + formattedColumns, sortedRows, ]); // Columns config - const gridColumns = createGridColumns(table, columns, columnsWidth, sortedRows, fireEvent); + const gridColumns = createGridColumns( + columns, + sortedRows, + formattedColumns, + columnsWidth, + fireEvent + ); // Pagination config const pagination = usePagination(visConfig, rows.length); @@ -126,10 +131,9 @@ export const TableVisBasic = memo( additionalControls: ( ), @@ -138,8 +142,7 @@ export const TableVisBasic = memo( renderCellValue={renderCellValue} renderFooterCellValue={ visConfig.showTotal - ? // @ts-expect-error - ({ colIndex }) => columns[colIndex].formattedTotal || null + ? ({ columnId }) => formattedColumns[columnId].formattedTotal || null : undefined } pagination={pagination} diff --git a/src/plugins/vis_type_table/public/components/table_vis_cell.tsx b/src/plugins/vis_type_table/public/components/table_vis_cell.tsx index 0a6aafc84bf26..04df3907c8c9b 100644 --- a/src/plugins/vis_type_table/public/components/table_vis_cell.tsx +++ b/src/plugins/vis_type_table/public/components/table_vis_cell.tsx @@ -9,17 +9,15 @@ import React from 'react'; import { EuiDataGridCellValueElementProps } from '@elastic/eui'; -import { Table } from '../table_vis_response_handler'; -import { FormattedColumn } from '../types'; +import { DatatableRow } from 'src/plugins/expressions'; +import { FormattedColumns } from '../types'; -export const createTableVisCell = (formattedColumns: FormattedColumn[], rows: Table['rows']) => ({ - // @ts-expect-error - colIndex, +export const createTableVisCell = (rows: DatatableRow[], formattedColumns: FormattedColumns) => ({ rowIndex, columnId, }: EuiDataGridCellValueElementProps) => { const rowValue = rows[rowIndex][columnId]; - const column = formattedColumns[colIndex]; + const column = formattedColumns[columnId]; const content = column.formatter.convert(rowValue, 'html'); const cellContent = ( diff --git a/src/plugins/vis_type_table/public/components/table_vis_columns.tsx b/src/plugins/vis_type_table/public/components/table_vis_columns.tsx index 2610677b2491c..6b44a2504ff89 100644 --- a/src/plugins/vis_type_table/public/components/table_vis_columns.tsx +++ b/src/plugins/vis_type_table/public/components/table_vis_columns.tsx @@ -10,9 +10,8 @@ import React from 'react'; import { EuiDataGridColumnCellActionProps, EuiDataGridColumn } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { IInterpreterRenderHandlers } from 'src/plugins/expressions'; -import { Table } from '../table_vis_response_handler'; -import { FormattedColumn, TableVisUiState } from '../types'; +import { DatatableColumn, DatatableRow, IInterpreterRenderHandlers } from 'src/plugins/expressions'; +import { FormattedColumns, TableVisUiState } from '../types'; interface FilterCellData { /** @@ -27,33 +26,24 @@ interface FilterCellData { } export const createGridColumns = ( - table: Table, - columns: FormattedColumn[], + columns: DatatableColumn[], + rows: DatatableRow[], + formattedColumns: FormattedColumns, columnsWidth: TableVisUiState['colWidth'], - rows: Table['rows'], fireEvent: IInterpreterRenderHandlers['event'] ) => { const onFilterClick = (data: FilterCellData, negate: boolean) => { - /** - * Visible column index and the actual one from the source table could be different. - * e.x. a column could be filtered out if it's not a dimension - - * see formattedColumns in use_formatted_columns.ts file, - * or an extra percantage column could be added, which doesn't exist in the raw table - */ - const rawTableActualColumnIndex = table.columns.findIndex( - (c) => c.id === columns[data.column].id - ); fireEvent({ name: 'filterBucket', data: { data: [ { table: { - ...table, + columns, rows, }, ...data, - column: rawTableActualColumnIndex, + column: data.column, }, ], negate, @@ -63,12 +53,13 @@ export const createGridColumns = ( return columns.map( (col, colIndex): EuiDataGridColumn => { - const cellActions = col.filterable + const formattedColumn = formattedColumns[col.id]; + const cellActions = formattedColumn.filterable ? [ ({ rowIndex, columnId, Component, closePopover }: EuiDataGridColumnCellActionProps) => { const rowValue = rows[rowIndex][columnId]; const contentsIsDefined = rowValue !== null && rowValue !== undefined; - const cellContent = col.formatter.convert(rowValue); + const cellContent = formattedColumn.formatter.convert(rowValue); const filterForText = i18n.translate( 'visTypeTable.tableCellFilter.filterForValueText', @@ -105,7 +96,7 @@ export const createGridColumns = ( ({ rowIndex, columnId, Component, closePopover }: EuiDataGridColumnCellActionProps) => { const rowValue = rows[rowIndex][columnId]; const contentsIsDefined = rowValue !== null && rowValue !== undefined; - const cellContent = col.formatter.convert(rowValue); + const cellContent = formattedColumn.formatter.convert(rowValue); const filterOutText = i18n.translate( 'visTypeTable.tableCellFilter.filterOutValueText', @@ -144,8 +135,8 @@ export const createGridColumns = ( const initialWidth = columnsWidth.find((c) => c.colIndex === colIndex); const column: EuiDataGridColumn = { id: col.id, - display: col.title, - displayAsText: col.title, + display: col.name, + displayAsText: col.name, actions: { showHide: false, showMoveLeft: false, diff --git a/src/plugins/vis_type_table/public/components/table_vis_controls.tsx b/src/plugins/vis_type_table/public/components/table_vis_controls.tsx index 1f4f49442957f..3eda73084e41d 100644 --- a/src/plugins/vis_type_table/public/components/table_vis_controls.tsx +++ b/src/plugins/vis_type_table/public/components/table_vis_controls.tsx @@ -11,81 +11,103 @@ import { EuiButtonEmpty, EuiContextMenuItem, EuiContextMenuPanel, EuiPopover } f import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; -import { DatatableRow } from 'src/plugins/expressions'; +import { DatatableColumn, DatatableRow } from 'src/plugins/expressions'; import { CoreStart } from 'kibana/public'; import { useKibana } from '../../../kibana_react/public'; -import { FormattedColumn } from '../types'; -import { Table } from '../table_vis_response_handler'; -import { exportAsCsv } from '../utils'; +import { exporters } from '../../../data/public'; +import { + CSV_SEPARATOR_SETTING, + CSV_QUOTE_VALUES_SETTING, + downloadFileAs, +} from '../../../share/public'; +import { getFormatService } from '../services'; interface TableVisControlsProps { dataGridAriaLabel: string; filename?: string; - cols: FormattedColumn[]; + columns: DatatableColumn[]; rows: DatatableRow[]; - table: Table; } -export const TableVisControls = memo(({ dataGridAriaLabel, ...props }: TableVisControlsProps) => { - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - const togglePopover = useCallback(() => setIsPopoverOpen((state) => !state), []); - const closePopover = useCallback(() => setIsPopoverOpen(false), []); +export const TableVisControls = memo( + ({ dataGridAriaLabel, filename, columns, rows }: TableVisControlsProps) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const togglePopover = useCallback(() => setIsPopoverOpen((state) => !state), []); + const closePopover = useCallback(() => setIsPopoverOpen(false), []); - const { - services: { uiSettings }, - } = useKibana(); + const { + services: { uiSettings }, + } = useKibana(); - const onClickExport = useCallback( - (formatted: boolean) => - exportAsCsv(formatted, { - ...props, - uiSettings, - }), - [props, uiSettings] - ); + const onClickExport = useCallback( + (formatted: boolean) => { + const csvSeparator = uiSettings.get(CSV_SEPARATOR_SETTING); + const quoteValues = uiSettings.get(CSV_QUOTE_VALUES_SETTING); - const exportBtnAriaLabel = i18n.translate('visTypeTable.vis.controls.exportButtonAriaLabel', { - defaultMessage: 'Export {dataGridAriaLabel} as CSV', - values: { - dataGridAriaLabel, - }, - }); + const content = exporters.datatableToCSV( + { + type: 'datatable', + columns, + rows, + }, + { + csvSeparator, + quoteValues, + formatFactory: getFormatService().deserialize, + raw: !formatted, + } + ); + downloadFileAs(`${filename || 'unsaved'}.csv`, { content, type: exporters.CSV_MIME_TYPE }); + }, + [columns, rows, filename, uiSettings] + ); - const button = ( - - - - ); + const exportBtnAriaLabel = i18n.translate('visTypeTable.vis.controls.exportButtonAriaLabel', { + defaultMessage: 'Export {dataGridAriaLabel} as CSV', + values: { + dataGridAriaLabel, + }, + }); - const items = [ - onClickExport(false)}> - - , - onClickExport(true)}> - - , - ]; + const button = ( + + + + ); - return ( - - - - ); -}); + const items = [ + onClickExport(false)}> + + , + onClickExport(true)}> + + , + ]; + + return ( + + + + ); + } +); diff --git a/src/plugins/vis_type_table/public/components/table_vis_split.tsx b/src/plugins/vis_type_table/public/components/table_vis_split.tsx index be1a918e22c4b..3d1cacd732fae 100644 --- a/src/plugins/vis_type_table/public/components/table_vis_split.tsx +++ b/src/plugins/vis_type_table/public/components/table_vis_split.tsx @@ -9,8 +9,7 @@ import React, { memo } from 'react'; import { IInterpreterRenderHandlers } from 'src/plugins/expressions'; -import { TableGroup } from '../table_vis_response_handler'; -import { TableVisConfig, TableVisUseUiStateProps } from '../types'; +import { TableGroup, TableVisConfig, TableVisUseUiStateProps } from '../types'; import { TableVisBasic } from './table_vis_basic'; interface TableVisSplitProps { @@ -24,11 +23,11 @@ export const TableVisSplit = memo( ({ fireEvent, tables, visConfig, uiStateProps }: TableVisSplitProps) => { return ( <> - {tables.map(({ tables: dataTable, key, title }) => ( -
+ {tables.map(({ table, title }) => ( +
{ diff --git a/src/plugins/vis_type_table/public/table_vis_fn.test.ts b/src/plugins/vis_type_table/public/table_vis_fn.test.ts index ea8030688caed..31b440ffb642f 100644 --- a/src/plugins/vis_type_table/public/table_vis_fn.test.ts +++ b/src/plugins/vis_type_table/public/table_vis_fn.test.ts @@ -7,11 +7,11 @@ */ import { createTableVisFn } from './table_vis_fn'; -import { tableVisResponseHandler } from './table_vis_response_handler'; +import { tableVisResponseHandler } from './utils'; import { functionWrapper } from '../../expressions/common/expression_functions/specs/tests/utils'; -jest.mock('./table_vis_response_handler', () => ({ +jest.mock('./utils', () => ({ tableVisResponseHandler: jest.fn().mockReturnValue({ tables: [{ columns: [], rows: [] }], }), @@ -62,6 +62,6 @@ describe('interpreter/functions#table', () => { it('calls response handler with correct values', async () => { await fn(context, { visConfig: JSON.stringify(visConfig) }, undefined); expect(tableVisResponseHandler).toHaveBeenCalledTimes(1); - expect(tableVisResponseHandler).toHaveBeenCalledWith(context, visConfig.dimensions); + expect(tableVisResponseHandler).toHaveBeenCalledWith(context, visConfig); }); }); diff --git a/src/plugins/vis_type_table/public/table_vis_fn.ts b/src/plugins/vis_type_table/public/table_vis_fn.ts index 99fee424b8bea..3dd8e81fc2ab2 100644 --- a/src/plugins/vis_type_table/public/table_vis_fn.ts +++ b/src/plugins/vis_type_table/public/table_vis_fn.ts @@ -7,10 +7,10 @@ */ import { i18n } from '@kbn/i18n'; -import { tableVisResponseHandler, TableContext } from './table_vis_response_handler'; import { ExpressionFunctionDefinition, Datatable, Render } from '../../expressions/public'; -import { TableVisConfig } from './types'; +import { TableVisData, TableVisConfig } from './types'; import { VIS_TYPE_TABLE } from '../common'; +import { tableVisResponseHandler } from './utils'; export type Input = Datatable; @@ -19,7 +19,7 @@ interface Arguments { } export interface TableVisRenderValue { - visData: TableContext; + visData: TableVisData; visType: typeof VIS_TYPE_TABLE; visConfig: TableVisConfig; } @@ -47,7 +47,7 @@ export const createTableVisFn = (): TableExpressionFunctionDefinition => ({ }, fn(input, args, handlers) { const visConfig = args.visConfig && JSON.parse(args.visConfig); - const convertedData = tableVisResponseHandler(input, visConfig.dimensions); + const convertedData = tableVisResponseHandler(input, visConfig); if (handlers?.inspectorAdapters?.tables) { handlers.inspectorAdapters.tables.logDatatable('default', input); diff --git a/src/plugins/vis_type_table/public/table_vis_response_handler.ts b/src/plugins/vis_type_table/public/table_vis_response_handler.ts deleted file mode 100644 index dbd01f94bd3c5..0000000000000 --- a/src/plugins/vis_type_table/public/table_vis_response_handler.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * and the Server Side Public License, v 1; you may not use this file except in - * compliance with, at your election, the Elastic License or the Server Side - * Public License, v 1. - */ - -import { Required } from '@kbn/utility-types'; - -import { getFormatService } from './services'; -import { Input } from './table_vis_fn'; -import { Dimensions } from './types'; - -export interface TableContext { - table?: Table; - tables: TableGroup[]; - direction?: 'row' | 'column'; -} - -export interface TableGroup { - table: Input; - tables: Table[]; - title: string; - name: string; - key: string | number; - column: number; - row: number; -} - -export interface Table { - columns: Input['columns']; - rows: Input['rows']; -} - -export function tableVisResponseHandler(input: Input, dimensions: Dimensions): TableContext { - let table: Table | undefined; - let tables: TableGroup[] = []; - let direction: TableContext['direction']; - - const split = dimensions.splitColumn || dimensions.splitRow; - - if (split) { - tables = []; - direction = dimensions.splitRow ? 'row' : 'column'; - const splitColumnIndex = split[0].accessor; - const splitColumnFormatter = getFormatService().deserialize(split[0].format); - const splitColumn = input.columns[splitColumnIndex]; - const splitMap: { [key: string]: number } = {}; - let splitIndex = 0; - - input.rows.forEach((row, rowIndex) => { - const splitValue: string | number = row[splitColumn.id]; - - if (!splitMap.hasOwnProperty(splitValue)) { - splitMap[splitValue] = splitIndex++; - const tableGroup: Required = { - title: `${splitColumnFormatter.convert(splitValue)}: ${splitColumn.name}`, - name: splitColumn.name, - key: splitValue, - column: splitColumnIndex, - row: rowIndex, - table: input, - tables: [], - }; - - tableGroup.tables.push({ - columns: input.columns, - rows: [], - }); - - tables.push(tableGroup); - } - - const tableIndex = splitMap[splitValue]; - tables[tableIndex].tables[0].rows.push(row); - }); - } else { - table = { - columns: input.columns, - rows: input.rows, - }; - } - - return { - direction, - table, - tables, - }; -} diff --git a/src/plugins/vis_type_table/public/types.ts b/src/plugins/vis_type_table/public/types.ts index 03cf8bb3395d6..61ba7739b9cb1 100644 --- a/src/plugins/vis_type_table/public/types.ts +++ b/src/plugins/vis_type_table/public/types.ts @@ -7,6 +7,7 @@ */ import { IFieldFormat } from 'src/plugins/data/public'; +import { DatatableColumn, DatatableRow } from 'src/plugins/expressions'; import { SchemaConfig } from 'src/plugins/visualizations/public'; import { TableVisParams } from '../common'; @@ -43,7 +44,6 @@ export interface TableVisConfig extends TableVisParams { } export interface FormattedColumn { - id: string; title: string; formatter: IFieldFormat; formattedTotal?: string | number; @@ -51,3 +51,24 @@ export interface FormattedColumn { sumTotal?: number; total?: number; } + +export interface FormattedColumns { + [key: string]: FormattedColumn; +} + +export interface TableContext { + columns: DatatableColumn[]; + rows: DatatableRow[]; + formattedColumns: FormattedColumns; +} + +export interface TableGroup { + table: TableContext; + title: string; +} + +export interface TableVisData { + table?: TableContext; + tables: TableGroup[]; + direction?: 'row' | 'column'; +} diff --git a/src/plugins/vis_type_table/public/utils/add_percentage_column.ts b/src/plugins/vis_type_table/public/utils/add_percentage_column.ts index 0e3879255dd06..11528c76ee300 100644 --- a/src/plugins/vis_type_table/public/utils/add_percentage_column.ts +++ b/src/plugins/vis_type_table/public/utils/add_percentage_column.ts @@ -6,48 +6,59 @@ * Public License, v 1. */ +import { findIndex } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { DatatableRow } from 'src/plugins/expressions'; +import { DatatableColumn } from 'src/plugins/expressions'; import { getFormatService } from '../services'; -import { FormattedColumn } from '../types'; -import { Table } from '../table_vis_response_handler'; +import { FormattedColumns, TableContext } from '../types'; -function insertColumn(arr: FormattedColumn[], index: number, col: FormattedColumn) { +function insertColumn(arr: DatatableColumn[], index: number, col: DatatableColumn) { const newArray = [...arr]; newArray.splice(index + 1, 0, col); return newArray; } /** - * @param columns - the formatted columns that will be displayed - * @param title - the title of the column to add to - * @param rows - the row data for the columns - * @param insertAtIndex - the index to insert the percentage column at - * @returns cols and rows for the table to render now included percentage column(s) + * Adds a brand new column with percentages of selected column to existing data table */ -export function addPercentageColumn( - columns: FormattedColumn[], - title: string, - rows: Table['rows'], - insertAtIndex: number -) { - const { id, sumTotal } = columns[insertAtIndex]; - const newId = `${id}-percents`; +export function addPercentageColumn(table: TableContext, name: string) { + const { columns, rows, formattedColumns } = table; + const insertAtIndex = findIndex(columns, { name }); + // column to show percentage for was removed + if (insertAtIndex < 0) return table; + + const { id } = columns[insertAtIndex]; + const { sumTotal } = formattedColumns[id]; + const percentageColumnId = `${id}-percents`; const formatter = getFormatService().deserialize({ id: 'percent' }); - const i18nTitle = i18n.translate('visTypeTable.params.percentageTableColumnName', { + const percentageColumnName = i18n.translate('visTypeTable.params.percentageTableColumnName', { defaultMessage: '{title} percentages', - values: { title }, + values: { title: name }, }); const newCols = insertColumn(columns, insertAtIndex, { - title: i18nTitle, - id: newId, - formatter, - filterable: false, + name: percentageColumnName, + id: percentageColumnId, + meta: { + type: 'number', + params: { id: 'percent' }, + }, }); - const newRows = rows.map((row) => ({ - [newId]: (row[id] as number) / (sumTotal as number), + const newFormattedColumns: FormattedColumns = { + ...formattedColumns, + [percentageColumnId]: { + title: percentageColumnName, + formatter, + filterable: false, + }, + }; + const newRows = rows.map((row) => ({ + [percentageColumnId]: (row[id] as number) / (sumTotal as number), ...row, })); - return { cols: newCols, rows: newRows }; + return { + columns: newCols, + rows: newRows, + formattedColumns: newFormattedColumns, + }; } diff --git a/src/plugins/vis_type_table/public/utils/create_formatted_table.ts b/src/plugins/vis_type_table/public/utils/create_formatted_table.ts new file mode 100644 index 0000000000000..9dbb6c0c76e25 --- /dev/null +++ b/src/plugins/vis_type_table/public/utils/create_formatted_table.ts @@ -0,0 +1,97 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * and the Server Side Public License, v 1; you may not use this file except in + * compliance with, at your election, the Elastic License or the Server Side + * Public License, v 1. + */ + +import { chain } from 'lodash'; +import { Datatable } from 'src/plugins/expressions'; +import { getFormatService } from '../services'; +import { FormattedColumn, FormattedColumns, TableVisConfig, TableContext } from '../types'; +import { AggTypes } from '../../common'; + +export const createFormattedTable = ( + table: Datatable | TableContext, + visConfig: TableVisConfig +) => { + const { buckets, metrics } = visConfig.dimensions; + + const formattedColumns = table.columns.reduce((acc, col, i) => { + const isBucket = buckets.find(({ accessor }) => accessor === i); + const dimension = isBucket || metrics.find(({ accessor }) => accessor === i); + + if (!dimension) return acc; + + const formatter = getFormatService().deserialize(dimension.format); + const formattedColumn: FormattedColumn = { + title: col.name, + formatter, + filterable: !!isBucket, + }; + + const isDate = dimension.format.id === 'date' || dimension.format.params?.id === 'date'; + const allowsNumericalAggregations = formatter.allowsNumericalAggregations; + + if (allowsNumericalAggregations || isDate || visConfig.totalFunc === AggTypes.COUNT) { + const sumOfColumnValues = table.rows.reduce((prev, curr) => { + // some metrics return undefined for some of the values + // derivative is an example of this as it returns undefined in the first row + if (curr[col.id] === undefined) return prev; + return prev + (curr[col.id] as number); + }, 0); + + formattedColumn.sumTotal = sumOfColumnValues; + + switch (visConfig.totalFunc) { + case AggTypes.SUM: { + if (!isDate) { + formattedColumn.formattedTotal = formatter.convert(sumOfColumnValues); + formattedColumn.total = sumOfColumnValues; + } + break; + } + case AggTypes.AVG: { + if (!isDate) { + const total = sumOfColumnValues / table.rows.length; + formattedColumn.formattedTotal = formatter.convert(total); + formattedColumn.total = total; + } + break; + } + case AggTypes.MIN: { + const total = chain(table.rows).map(col.id).min().value() as number; + formattedColumn.formattedTotal = formatter.convert(total); + formattedColumn.total = total; + break; + } + case AggTypes.MAX: { + const total = chain(table.rows).map(col.id).max().value() as number; + formattedColumn.formattedTotal = formatter.convert(total); + formattedColumn.total = total; + break; + } + case AggTypes.COUNT: { + const total = table.rows.length; + formattedColumn.formattedTotal = total; + formattedColumn.total = total; + break; + } + default: + break; + } + } + + acc[col.id] = formattedColumn; + + return acc; + }, {}); + + return { + // filter out columns which are not dimensions + columns: table.columns.filter((col) => formattedColumns[col.id]), + rows: table.rows, + formattedColumns, + }; +}; diff --git a/src/plugins/vis_type_table/public/utils/export_as_csv.ts b/src/plugins/vis_type_table/public/utils/export_as_csv.ts deleted file mode 100644 index 4371a20cfa0da..0000000000000 --- a/src/plugins/vis_type_table/public/utils/export_as_csv.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * and the Server Side Public License, v 1; you may not use this file except in - * compliance with, at your election, the Elastic License or the Server Side - * Public License, v 1. - */ - -import { isObject } from 'lodash'; -// @ts-ignore -import { saveAs } from '@elastic/filesaver'; - -import { CoreStart } from 'kibana/public'; -import { DatatableRow } from 'src/plugins/expressions'; -import { CSV_SEPARATOR_SETTING, CSV_QUOTE_VALUES_SETTING } from '../../../share/public'; -import { FormattedColumn } from '../types'; -import { Table } from '../table_vis_response_handler'; - -const nonAlphaNumRE = /[^a-zA-Z0-9]/; -const allDoubleQuoteRE = /"/g; - -interface ToCsvData { - filename?: string; - cols: FormattedColumn[]; - rows: DatatableRow[]; - table: Table; - uiSettings: CoreStart['uiSettings']; -} - -const toCsv = (formatted: boolean, { cols, rows, table, uiSettings }: ToCsvData) => { - const separator = uiSettings.get(CSV_SEPARATOR_SETTING); - const quoteValues = uiSettings.get(CSV_QUOTE_VALUES_SETTING); - - function escape(val: unknown) { - if (!formatted && isObject(val)) val = val.valueOf(); - val = String(val); - if (quoteValues && nonAlphaNumRE.test(val as string)) { - val = '"' + (val as string).replace(allDoubleQuoteRE, '""') + '"'; - } - return val as string; - } - - const csvRows: string[][] = []; - - for (const row of rows) { - const rowArray: string[] = []; - for (const col of cols) { - const value = row[col.id]; - const formattedValue = formatted ? escape(col.formatter.convert(value)) : escape(value); - rowArray.push(formattedValue); - } - csvRows.push(rowArray); - } - - // add headers to the rows - csvRows.unshift(cols.map(({ title }) => escape(title))); - - return csvRows.map((row) => row.join(separator) + '\r\n').join(''); -}; - -export const exportAsCsv = (formatted: boolean, data: ToCsvData) => { - const csv = new Blob([toCsv(formatted, data)], { type: 'text/plain;charset=utf-8' }); - saveAs(csv, `${data.filename || 'unsaved'}.csv`); -}; diff --git a/src/plugins/vis_type_table/public/utils/index.ts b/src/plugins/vis_type_table/public/utils/index.ts index 6a6dda0d12fa3..8731b52a7ba30 100644 --- a/src/plugins/vis_type_table/public/utils/index.ts +++ b/src/plugins/vis_type_table/public/utils/index.ts @@ -7,4 +7,4 @@ */ export * from './use'; -export * from './export_as_csv'; +export * from './table_vis_response_handler'; diff --git a/src/plugins/vis_type_table/public/utils/table_vis_response_handler.ts b/src/plugins/vis_type_table/public/utils/table_vis_response_handler.ts new file mode 100644 index 0000000000000..0a2b8d8180854 --- /dev/null +++ b/src/plugins/vis_type_table/public/utils/table_vis_response_handler.ts @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * and the Server Side Public License, v 1; you may not use this file except in + * compliance with, at your election, the Elastic License or the Server Side + * Public License, v 1. + */ + +import { Datatable } from 'src/plugins/expressions'; +import { getFormatService } from '../services'; +import { TableVisData, TableGroup, TableVisConfig, TableContext } from '../types'; +import { addPercentageColumn } from './add_percentage_column'; +import { createFormattedTable } from './create_formatted_table'; + +/** + * Converts datatable input from response into appropriate format for consuming renderer + */ +export function tableVisResponseHandler(input: Datatable, visConfig: TableVisConfig): TableVisData { + const tables: TableGroup[] = []; + let table: TableContext | undefined; + let direction: TableVisData['direction']; + + const split = visConfig.dimensions.splitColumn || visConfig.dimensions.splitRow; + + if (split) { + direction = visConfig.dimensions.splitRow ? 'row' : 'column'; + const splitColumnIndex = split[0].accessor; + const splitColumnFormatter = getFormatService().deserialize(split[0].format); + const splitColumn = input.columns[splitColumnIndex]; + const columns = input.columns.filter((c, idx) => idx !== splitColumnIndex); + const splitMap: { [key: string]: number } = {}; + let splitIndex = 0; + + input.rows.forEach((row) => { + const splitValue: string | number = row[splitColumn.id]; + + if (!splitMap.hasOwnProperty(splitValue)) { + splitMap[splitValue] = splitIndex++; + const tableGroup: TableGroup = { + title: `${splitColumnFormatter.convert(splitValue)}: ${splitColumn.name}`, + table: { + columns, + rows: [], + formattedColumns: {}, + }, + }; + + tables.push(tableGroup); + } + + const tableIndex = splitMap[splitValue]; + tables[tableIndex].table.rows.push(row); + }); + + tables.forEach((tg) => { + tg.table = createFormattedTable({ ...tg.table, columns: input.columns }, visConfig); + + if (visConfig.percentageCol) { + tg.table = addPercentageColumn(tg.table, visConfig.percentageCol); + } + }); + } else { + table = createFormattedTable(input, visConfig); + + if (visConfig.percentageCol) { + table = addPercentageColumn(table, visConfig.percentageCol); + } + } + + return { + direction, + table, + tables, + }; +} diff --git a/src/plugins/vis_type_table/public/utils/use/index.ts b/src/plugins/vis_type_table/public/utils/use/index.ts index 08daf7f28c0e8..9fcc791561046 100644 --- a/src/plugins/vis_type_table/public/utils/use/index.ts +++ b/src/plugins/vis_type_table/public/utils/use/index.ts @@ -6,6 +6,5 @@ * Public License, v 1. */ -export * from './use_formatted_columns'; export * from './use_pagination'; export * from './use_ui_state'; diff --git a/src/plugins/vis_type_table/public/utils/use/use_formatted_columns.ts b/src/plugins/vis_type_table/public/utils/use/use_formatted_columns.ts deleted file mode 100644 index 3a733e7a9a4dc..0000000000000 --- a/src/plugins/vis_type_table/public/utils/use/use_formatted_columns.ts +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * and the Server Side Public License, v 1; you may not use this file except in - * compliance with, at your election, the Elastic License or the Server Side - * Public License, v 1. - */ - -import { useMemo } from 'react'; -import { chain, findIndex } from 'lodash'; - -import { AggTypes } from '../../../common'; -import { Table } from '../../table_vis_response_handler'; -import { FormattedColumn, TableVisConfig } from '../../types'; -import { getFormatService } from '../../services'; -import { addPercentageColumn } from '../add_percentage_column'; - -export const useFormattedColumnsAndRows = (table: Table, visConfig: TableVisConfig) => { - const { formattedColumns: columns, formattedRows: rows } = useMemo(() => { - const { buckets, metrics } = visConfig.dimensions; - let formattedRows = table.rows; - - let formattedColumns = table.columns - .map((col, i) => { - const isBucket = buckets.find(({ accessor }) => accessor === i); - const dimension = isBucket || metrics.find(({ accessor }) => accessor === i); - - if (!dimension) return undefined; - - const formatter = getFormatService().deserialize(dimension.format); - const formattedColumn: FormattedColumn = { - id: col.id, - title: col.name, - formatter, - filterable: !!isBucket, - }; - - const isDate = dimension.format.id === 'date' || dimension.format.params?.id === 'date'; - const allowsNumericalAggregations = formatter.allowsNumericalAggregations; - - if (allowsNumericalAggregations || isDate || visConfig.totalFunc === AggTypes.COUNT) { - const sumOfColumnValues = table.rows.reduce((prev, curr) => { - // some metrics return undefined for some of the values - // derivative is an example of this as it returns undefined in the first row - if (curr[col.id] === undefined) return prev; - return prev + (curr[col.id] as number); - }, 0); - - formattedColumn.sumTotal = sumOfColumnValues; - - switch (visConfig.totalFunc) { - case AggTypes.SUM: { - if (!isDate) { - formattedColumn.formattedTotal = formatter.convert(sumOfColumnValues); - formattedColumn.total = sumOfColumnValues; - } - break; - } - case AggTypes.AVG: { - if (!isDate) { - const total = sumOfColumnValues / table.rows.length; - formattedColumn.formattedTotal = formatter.convert(total); - formattedColumn.total = total; - } - break; - } - case AggTypes.MIN: { - const total = chain(table.rows).map(col.id).min().value() as number; - formattedColumn.formattedTotal = formatter.convert(total); - formattedColumn.total = total; - break; - } - case AggTypes.MAX: { - const total = chain(table.rows).map(col.id).max().value() as number; - formattedColumn.formattedTotal = formatter.convert(total); - formattedColumn.total = total; - break; - } - case AggTypes.COUNT: { - const total = table.rows.length; - formattedColumn.formattedTotal = total; - formattedColumn.total = total; - break; - } - default: - break; - } - } - - return formattedColumn; - }) - .filter((column): column is FormattedColumn => !!column); - - if (visConfig.percentageCol) { - const insertAtIndex = findIndex(formattedColumns, { title: visConfig.percentageCol }); - - // column to show percentage for was removed - if (insertAtIndex < 0) return { formattedColumns, formattedRows }; - - const { cols, rows: rowsWithPercentage } = addPercentageColumn( - formattedColumns, - visConfig.percentageCol, - table.rows, - insertAtIndex - ); - - formattedRows = rowsWithPercentage; - formattedColumns = cols; - } - - return { formattedColumns, formattedRows }; - }, [table, visConfig.dimensions, visConfig.percentageCol, visConfig.totalFunc]); - - return { columns, rows }; -}; From f3052457b5c63bfea21dd0fb4738a66142fc891b Mon Sep 17 00:00:00 2001 From: Liza K Date: Tue, 2 Feb 2021 12:47:30 +0200 Subject: [PATCH 80/85] Remove runAt from monitoring task Increase testing trackingInterval (caused bug) --- .../data_enhanced/server/search/session/monitoring_task.ts | 1 - x-pack/test/api_integration/config.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/session/monitoring_task.ts b/x-pack/plugins/data_enhanced/server/search/session/monitoring_task.ts index 7883086513f1b..d9f3cdb8debe7 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/monitoring_task.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/monitoring_task.ts @@ -45,7 +45,6 @@ function searchSessionRunner(core: CoreSetup, { logger, config$ }: SearchSession ); return { - runAt: new Date(Date.now() + sessionConfig.trackingInterval.asMilliseconds()), state: {}, }; }, diff --git a/x-pack/test/api_integration/config.ts b/x-pack/test/api_integration/config.ts index 03d0634aada69..59f2302ca2125 100644 --- a/x-pack/test/api_integration/config.ts +++ b/x-pack/test/api_integration/config.ts @@ -32,7 +32,7 @@ export async function getApiIntegrationConfig({ readConfigFile }: FtrConfigProvi '--xpack.fleet.agents.pollingRequestTimeout=5000', // 5 seconds '--xpack.data_enhanced.search.sessions.enabled=true', // enable WIP send to background UI '--xpack.data_enhanced.search.sessions.completedTimeout=15s', // shorten completedTimeout for quicker testing - '--xpack.data_enhanced.search.sessions.trackingInterval=2s', // shorten trackingInterval for quicker testing + '--xpack.data_enhanced.search.sessions.trackingInterval=5s', // shorten trackingInterval for quicker testing ], }, esTestCluster: { From d92996e71f1dadb0cdf653531d11c602548dfc7a Mon Sep 17 00:00:00 2001 From: Gidi Meir Morris Date: Tue, 2 Feb 2021 11:28:29 +0000 Subject: [PATCH 81/85] support workload histograms that take into account overdue tasks --- .../monitoring/workload_statistics.test.ts | 119 ++++++++++++++++++ .../server/monitoring/workload_statistics.ts | 13 +- 2 files changed, 130 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.test.ts index 21c9f429814ca..ed7c48d046dc2 100644 --- a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.test.ts @@ -775,6 +775,125 @@ describe('padBuckets', () => { }) ).toEqual([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); }); + + test('supports histogram buckets that begin in the past when tasks are overdue', async () => { + expect( + padBuckets(20, 3000, { + key: '2021-02-02T10:08:32.161Z-2021-02-02T10:09:32.161Z', + from: 1612260512161, + from_as_string: '2021-02-02T10:08:32.161Z', + to: 1612260572161, + to_as_string: '2021-02-02T10:09:32.161Z', + doc_count: 2, + histogram: { + buckets: [ + { + key_as_string: '2021-02-02T10:08:30.000Z', + key: 1612260510000, + doc_count: 1, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: '2s', + doc_count: 1, + }, + ], + }, + }, + { + key_as_string: '2021-02-02T10:08:33.000Z', + key: 1612260513000, + doc_count: 0, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [], + }, + }, + { + key_as_string: '2021-02-02T10:08:36.000Z', + key: 1612260516000, + doc_count: 0, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [], + }, + }, + { + key_as_string: '2021-02-02T10:08:39.000Z', + key: 1612260519000, + doc_count: 0, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [], + }, + }, + { + key_as_string: '2021-02-02T10:08:42.000Z', + key: 1612260522000, + doc_count: 0, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [], + }, + }, + { + key_as_string: '2021-02-02T10:08:45.000Z', + key: 1612260525000, + doc_count: 0, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [], + }, + }, + { + key_as_string: '2021-02-02T10:08:48.000Z', + key: 1612260528000, + doc_count: 0, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [], + }, + }, + { + key_as_string: '2021-02-02T10:08:51.000Z', + key: 1612260531000, + doc_count: 0, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [], + }, + }, + { + key_as_string: '2021-02-02T10:08:54.000Z', + key: 1612260534000, + doc_count: 1, + interval: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: '60s', + doc_count: 1, + }, + ], + }, + }, + ], + }, + }).length + // we need to ensure overdue buckets don't cause us to over pad the timeline by adding additional + // buckets before and after the reported timeline + ).toEqual(20); + }); }); function setTaskTypeCount( diff --git a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts index 8002ee44d01ff..8bd22bd88cf41 100644 --- a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts @@ -244,10 +244,19 @@ export function padBuckets( const firstBucket = histogram.buckets[0].key; const lastBucket = histogram.buckets[histogram.buckets.length - 1].key; - const bucketsToPadBeforeFirstBucket = calculateBucketsBetween(firstBucket, from, pollInterval); + // detect when the first bucket is before the `from` so that we can take that into + // account by begining the timeline earlier + // This can happen when you have overdue tasks and Elasticsearch returns their bucket + // as begining before the `from` + const firstBucketStartsInThePast = firstBucket - from < 0; + + const bucketsToPadBeforeFirstBucket = firstBucketStartsInThePast + ? [] + : calculateBucketsBetween(firstBucket, from, pollInterval); + const bucketsToPadAfterLast = calculateBucketsBetween( lastBucket + pollInterval, - to, + firstBucketStartsInThePast ? to - pollInterval : to, pollInterval ); From 353f722b95860ee5b4f52707ceb5450ecbbb9e3d Mon Sep 17 00:00:00 2001 From: Liza K Date: Tue, 2 Feb 2021 14:06:33 +0200 Subject: [PATCH 82/85] Update touched when changing session status to complete \ error --- .../server/search/session/check_running_sessions.test.ts | 9 +++++++-- .../server/search/session/check_running_sessions.ts | 9 ++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts index 4acf9f2a84daf..04b5cb8f7d143 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts @@ -313,15 +313,17 @@ describe('getSearchStatus', () => { persisted: false, status: SearchSessionStatus.COMPLETE, created: moment().subtract(moment.duration(30, 'm')), - touched: moment().subtract(moment.duration(5, 'm')), + touched: moment().subtract(moment.duration(6, 'm')), idMapping: { 'map-key': { strategy: ENHANCED_ES_SEARCH_STRATEGY, id: 'async-id', + status: SearchStatus.COMPLETE, }, 'eql-map-key': { strategy: EQL_SEARCH_STRATEGY, id: 'eql-async-id', + status: SearchStatus.COMPLETE, }, }, }, @@ -360,11 +362,12 @@ describe('getSearchStatus', () => { persisted: false, status: SearchSessionStatus.COMPLETE, created: moment().subtract(moment.duration(30, 'm')), - touched: moment().subtract(moment.duration(5, 'm')), + touched: moment().subtract(moment.duration(6, 'm')), idMapping: { 'map-key': { strategy: ENHANCED_ES_SEARCH_STRATEGY, id: 'async-id', + status: SearchStatus.COMPLETE, }, }, }, @@ -480,6 +483,7 @@ describe('getSearchStatus', () => { const so = { attributes: { status: SearchSessionStatus.IN_PROGRESS, + touched: '123', idMapping: { 'search-hash': { id: 'search-id', @@ -515,6 +519,7 @@ describe('getSearchStatus', () => { const [updateInput] = savedObjectsClient.bulkUpdate.mock.calls[0]; const updatedAttributes = updateInput[0].attributes as SearchSessionSavedObjectAttributes; expect(updatedAttributes.status).toBe(SearchSessionStatus.COMPLETE); + expect(updatedAttributes.touched).not.toBe('123'); expect(updatedAttributes.idMapping['search-hash'].status).toBe(SearchStatus.COMPLETE); expect(updatedAttributes.idMapping['search-hash'].error).toBeUndefined(); diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts index 9d7f322012e47..2c5e65a12fd2b 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts @@ -37,13 +37,15 @@ function isSessionStale( logger: Logger ) { const curTime = moment(); - // Delete if a running session wasn't polled for in the last notTouchedTimeout OR if a completed session wasn't saved for within onScreenTicompletedTimeoutmeout + // Delete if a running session wasn't polled for in the last notTouchedTimeout OR + // if a completed \ errored \ canceled session wasn't saved for within completedTimeout return ( (session.attributes.status === SearchSessionStatus.IN_PROGRESS && curTime.diff(moment(session.attributes.touched), 'ms') > config.notTouchedTimeout.asMilliseconds()) || - curTime.diff(moment(session.attributes.created), 'ms') > - config.completedTimeout.asMilliseconds() + (session.attributes.status !== SearchSessionStatus.IN_PROGRESS && + curTime.diff(moment(session.attributes.touched), 'ms') > + config.completedTimeout.asMilliseconds()) ); } @@ -91,6 +93,7 @@ async function updateSessionStatus( const sessionStatus = getSessionStatus(session.attributes); if (sessionStatus !== session.attributes.status) { session.attributes.status = sessionStatus; + session.attributes.touched = new Date().toISOString(); sessionUpdated = true; } From 6bd93ac420a4b452e3ceaa3f9002f0edbf2cbd73 Mon Sep 17 00:00:00 2001 From: Liza K Date: Tue, 2 Feb 2021 15:30:47 +0200 Subject: [PATCH 83/85] removed test --- .../api_integration/apis/search/session.ts | 33 ------------------- 1 file changed, 33 deletions(-) diff --git a/x-pack/test/api_integration/apis/search/session.ts b/x-pack/test/api_integration/apis/search/session.ts index 691382222597a..5111ce06a4d7d 100644 --- a/x-pack/test/api_integration/apis/search/session.ts +++ b/x-pack/test/api_integration/apis/search/session.ts @@ -252,38 +252,5 @@ export default function ({ getService }: FtrProviderContext) { getSessionSecondTime.body.attributes.touched ); }); - - it('session is cleared by monitoring task if notTouchedTimeout expires', async () => { - const sessionId = `my-session-${Math.random()}`; - - // run search - await supertest - .post(`/internal/search/ese`) - .set('kbn-xsrf', 'foo') - .send({ - sessionId, - params: { - body: { - query: { - term: { - agent: '1', - }, - }, - }, - wait_for_completion_timeout: '1ms', - }, - }) - .expect(200); - - // it might take the session a moment to be created - await new Promise((resolve) => setTimeout(resolve, 1000)); - - await supertest.get(`/internal/session/${sessionId}`).set('kbn-xsrf', 'foo').expect(200); - - // wait for session to expire due to completedTimeout (as if user stayed on screen and didn't save the search session) - await new Promise((resolve) => setTimeout(resolve, 20000)); - - await supertest.get(`/internal/session/${sessionId}`).set('kbn-xsrf', 'foo').expect(404); - }); }); } From a6491ddbbc9b6e13a814b4831d1253db08e7d289 Mon Sep 17 00:00:00 2001 From: Liza K Date: Tue, 2 Feb 2021 15:58:31 +0200 Subject: [PATCH 84/85] Updated management test data --- .../data/search_sessions/data.json.gz | Bin 1956 -> 1976 bytes .../data/search_sessions/mappings.json | 6 ++++++ 2 files changed, 6 insertions(+) diff --git a/x-pack/test/functional/es_archives/data/search_sessions/data.json.gz b/x-pack/test/functional/es_archives/data/search_sessions/data.json.gz index 28260ee99e4dc0c428d5e2a75a0a14db990e2723..51e8c09f19247f979a9f1823ab5786b99cf849e4 100644 GIT binary patch literal 1976 zcmV;p2S@lHiwFqBRT*Fa17u-zVJ>QOZ*BnXn_E-cI26a<`zgHMx1Gi#`Ib0O%eKI> zvjs{*J8kJ?6k7%_j-A>vTZZX(UrElzNd*Z_vDeIjv|w46qw|-3(s1V7X*#=|QoXO~ zLF(%-HT{Ofg?PTx^e7PJ`IPvyAJC8#F%vbSB%oi#8{;|}lZ1@0D9zI%^Jfhw(Pc(h zlqT!eCG&rDy6BX+RhaMudrC6Pc)k%?`GQrq##YzG)k{+x^HJi|-dN?lwEvPm?gZ z?Dq`By|R^m%NFJD<06WK<6^>}JcPQ~^GwI?+Q{>;bd8+L(Y#B?x3TG3sAEyr>R?RA z9YSrlL$T!&8U~0rEhnzla51vpHM|EzoX>eye}mun$HIo=T95LZ^iyX_7^7Lz-)d%C zd3UAXvM7vb9PBZci5cp5-$WBxCZ9ij7SAl2&;wC+JX=Sk8mCDu+%M2Gqzl{bKng5($@y1_rywD z$d6YKw?&Ny7qi_ry9Rc9J7R-nB*}>{N=V#yU5_FX{Df7$VWc&-On4ucbV3uRCX8d4 z2$|OMO9dGG5MfHv+Q{%s`$q_~YW-%W%aNR?5C_*SPC#!)EKTEFtqn39$Ho=-cU9uJ z?bfE;l%1UBV$b%!d_j0SSFbi)_iU8=Dd&J_#N8=ut{RN++QG=H(XZ2}yeBWKncr8N z3b^EKaaq@1@`=3R14qg1s@mhXQ3v~`*O^^26u*X*!vV7mRL(6h; z=(wTlQ|g5Q4!Z;iTI&b#Ux)7w-{KE(K+eyncs#lK!#~6y-d$b~YQ7&H z3{D1kNDmns;N$)G*VF0wFh$3&&;Kp;j*^H)BpxtvOWSa?l*C>x3@O5Cc}N{S>U@k6 z-sVOwc%2k16=m|+C{36j8S)5~#g+H^4E5qd-@%q0Q2qPkWkS!mp)zHVWQQx-u$TfPFEf)u$ z=-TzG``z`c$myRX7sq@^;+)E|`E}wb>6~WiC0~ZQHk*JZ7d|gxX+}ZC|Fequ4;jlP zE%NeCIGWDHm#EF+Lz+;2qfN82%hyMPS10fG&qjNvr=#<;zek7r$NOh{!;`a(XkUZn z<|~kG8Q8OTB)M4w$rXrJk=)u$a$zfw92oFZNd79FOk>Iy7jV3F8t%w(ewwc>5IG5#c3#f@ebTE&q146TuZ|RuS9*g2Vo=^BPY0 zK8#~vcndY$^%_2x{+UqRse$4OJgX?~0>yy73XEX{!6t|5;Ap|w65bxChaRr@K z5cdG$0DuOAnt<@OCAG4r^%%zEYMbCs&Ig`W%)o%b#ZvqkSMA;6;y}E7Kx&8 zc);#|(wM3R3~z~w5K~1%$UnL5QhV2wp>?s0z(0fYG4Y68RC zq9Ft|s}whDNEB7!Sw(S36a@k_7t{oTw?#h)YA)zqL#Cz*%PM+9rY7wErh}ReFuWxy zLQr#!=A1DXwL0>|5;Ap|w65U(LqQ$=SL#354?0MKMm6A<1O1tF+e zA$Sd$nkqD_2o9N=u>YG4Y68RCq9Ft|S14XXrltzdDvCp;xpe7K!E&4snpyq#x KdKBy*oB#mBztLO( literal 1956 zcmZ9Jc|6m79KeSh9TP&B^*E=Nk)y(zq+{8LFt-&g=T?br)XoBaqK zZlb5cW0S}AEXNoT5lf!+Jg?`U=dbr4-`D5+{(Rrx-{^93mpp!)0Z9@3BK(X(!Y^I` z&E|N!3|c71j)?ZMhHD8@t*9J_!wEVeYp7D*Bil)Yt)84uT*GW^y?+%tW0T~j_N zzst5vQ8k>o9AWg>JlB#6&98gttUIN4dY6VVvJGq(`ZJnql9pJL>7vx5_0)vfo3wJ0 zm3VFZV)qQe-qf_Ifzv&slMBw(%amrO9g0HJ)7DeU{dKH=H$&}Ee|VATdgPqf2g3sW zs0HTY>NpDmF@Xo!(IIcgOOmo#HGYpKq#u8Fr?oBcCa~!0ZFGWH=l$d{oHKOA$)?of#1DMyBX+L6o41yzk9C_(?owkc!ja#8) zSFKe`6{9S(9R&&Uz##~kG(F&(EU3kn@X31slr3MbD(^Bs1Y+cNAhKv9R&g@w(YKK& z2bZg=1d+@6OR%NBhiRoxkE;?n?DFb*)91vb9oZ+MaJYG>26g1S!bjMn!!Z-@ai)2) z4YOA!(61N4T?cV+FSwW6`IVYm$_=k9dKZs2nsPr*SH7DDh`r=8G&9G(I9O@RZ8X`= zNU&SSE)wE1zC*)sC+}4Iial`Us$Rxt7lMV$83j(koLub`S*?4`GFSqf-x=t>NSmv?hGnI{*?t4V;vxS0q#YCy8rrK1v z&w*%Wa9G!_FBz}#YCC13($j>jfLA(R731|6%TTAB0c8K0z${7$X`OGTTb9o%Jj4^Y6p*AwLY%5 zwi*A*uW&zL&(q9|uw`Q$)VS3OEa7~$(GT+Z+{q0LALi+-uLpJgfdR%eQ?KA7Z+!U9 zJe11VMOK5UL&9|%2DQld7Y~G;IH@=>dDFu9csT#13E%3lj9%mTr@`SZ0h93&l9tNo z7O*aaYS)rrh5sC}UO7p9Y4LR}k4`dp+O`tdNqb~+Brt?dkJdp+hS%3#d}r=Br=ycfv^N6<3a8F1s>9t#`9 z)~~l{=V9g8s}hSB-@MLWXTKcl z95}&vo*K3o(_ZBuL?ZnMdtyn_cX2#GVo+h;F@Dy4m5}W`kp-IVAGm}Lx@FdTc!&R> zMq;^5RT6LJdWod}(drFz|1Vo_N#SeW$05IZrNJU$wZmT>oseT*jeaT>zHjz#5~cfA zZr)mFE`7G(l|#M%t~e(JXpeq750&^ts?sJvb6Vy?wE)RhxWCAT zm`L&UM30ia4dp!BWh!F8wQiR@ZiFU-xC+8G76T*%cnU0r1A&j|dPY40B(=f`d#8z@ z0fo84vI9}ji6=GL8`wo5t66`l42Bx34x)=}dcwn;gLZRVp%SI(k{E<`9|wjafhgEA zIlK4!iJ{_?1&?^rZVoM$`(SBPP)%z>$`Vn@`zW(;i+HD_O#Nf^K!L%09YU2>5Gcjf zz#wp%ZewC-^Y+6~5P?seM(KfE=>K=I>hqLGQQ*=zXrrTehu_- z0-(@;)Sm7CSCju$lmD+S)BQ(XcJ4p*=%+YmtQ_TzCmKZYCW<@3SO{=o23+-7iWmxW z*(^rv48YsYVr+E{Eg`#_c*KX4kZDfbY;uIee}7S)*MGY8oC=WFuPBK>*RS|wNEKq+ zUu8!Ga~N>tXNh7c%zk1q-pl|V;^JVRUpIw$#EU^Y%Y8uJboN&#vd7gFt@+=FP|z diff --git a/x-pack/test/functional/es_archives/data/search_sessions/mappings.json b/x-pack/test/functional/es_archives/data/search_sessions/mappings.json index 24bbcbea23385..4492bcae7047d 100644 --- a/x-pack/test/functional/es_archives/data/search_sessions/mappings.json +++ b/x-pack/test/functional/es_archives/data/search_sessions/mappings.json @@ -310,6 +310,9 @@ "created": { "type": "date" }, + "touched": { + "type": "date" + }, "expires": { "type": "date" }, @@ -324,6 +327,9 @@ "name": { "type": "keyword" }, + "persisted": { + "type": "boolean" + }, "restoreState": { "enabled": false, "type": "object" From fc29c7f858c45c9fe7c9d68cc777bd040d02104e Mon Sep 17 00:00:00 2001 From: Liza K Date: Tue, 2 Feb 2021 16:00:20 +0200 Subject: [PATCH 85/85] Rename configs --- x-pack/plugins/data_enhanced/config.ts | 4 ++-- .../server/search/session/check_running_sessions.test.ts | 4 ++-- .../server/search/session/check_running_sessions.ts | 8 ++++---- .../server/search/session/session_service.test.ts | 4 ++-- x-pack/test/api_integration/config.ts | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/data_enhanced/config.ts b/x-pack/plugins/data_enhanced/config.ts index 27413b64e474b..d41206733def3 100644 --- a/x-pack/plugins/data_enhanced/config.ts +++ b/x-pack/plugins/data_enhanced/config.ts @@ -12,8 +12,8 @@ export const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: false }), pageSize: schema.number({ defaultValue: 10000 }), trackingInterval: schema.duration({ defaultValue: '10s' }), - completedTimeout: schema.duration({ defaultValue: '5m' }), - notTouchedTimeout: schema.duration({ defaultValue: '1m' }), + notTouchedTimeout: schema.duration({ defaultValue: '5m' }), + notTouchedInProgressTimeout: schema.duration({ defaultValue: '1m' }), maxUpdateRetries: schema.number({ defaultValue: 3 }), defaultExpiration: schema.duration({ defaultValue: '7d' }), management: schema.object({ diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts index 04b5cb8f7d143..352edc4639631 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.test.ts @@ -22,8 +22,8 @@ describe('getSearchStatus', () => { const config: SearchSessionsConfig = { enabled: true, pageSize: 5, - notTouchedTimeout: moment.duration(1, 'm'), - completedTimeout: moment.duration(5, 'm'), + notTouchedInProgressTimeout: moment.duration(1, 'm'), + notTouchedTimeout: moment.duration(5, 'm'), maxUpdateRetries: 3, defaultExpiration: moment.duration(7, 'd'), trackingInterval: moment.duration(10, 's'), diff --git a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts index 2c5e65a12fd2b..7258b0ac124e8 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/check_running_sessions.ts @@ -37,15 +37,15 @@ function isSessionStale( logger: Logger ) { const curTime = moment(); - // Delete if a running session wasn't polled for in the last notTouchedTimeout OR - // if a completed \ errored \ canceled session wasn't saved for within completedTimeout + // Delete if a running session wasn't polled for in the last notTouchedInProgressTimeout OR + // if a completed \ errored \ canceled session wasn't saved for within notTouchedTimeout return ( (session.attributes.status === SearchSessionStatus.IN_PROGRESS && curTime.diff(moment(session.attributes.touched), 'ms') > - config.notTouchedTimeout.asMilliseconds()) || + config.notTouchedInProgressTimeout.asMilliseconds()) || (session.attributes.status !== SearchSessionStatus.IN_PROGRESS && curTime.diff(moment(session.attributes.touched), 'ms') > - config.completedTimeout.asMilliseconds()) + config.notTouchedTimeout.asMilliseconds()) ); } diff --git a/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts b/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts index 8671c5c42a54c..a0d1e3c87a79c 100644 --- a/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/session/session_service.test.ts @@ -51,8 +51,8 @@ describe('SearchSessionService', () => { sessions: { enabled: true, pageSize: 10000, - notTouchedTimeout: moment.duration(1, 'm'), - completedTimeout: moment.duration(2, 'm'), + notTouchedInProgressTimeout: moment.duration(1, 'm'), + notTouchedTimeout: moment.duration(2, 'm'), maxUpdateRetries: MAX_UPDATE_RETRIES, defaultExpiration: moment.duration(7, 'd'), trackingInterval: moment.duration(10, 's'), diff --git a/x-pack/test/api_integration/config.ts b/x-pack/test/api_integration/config.ts index 59f2302ca2125..8563d60ca68fc 100644 --- a/x-pack/test/api_integration/config.ts +++ b/x-pack/test/api_integration/config.ts @@ -31,7 +31,7 @@ export async function getApiIntegrationConfig({ readConfigFile }: FtrConfigProvi '--xpack.fleet.enabled=true', '--xpack.fleet.agents.pollingRequestTimeout=5000', // 5 seconds '--xpack.data_enhanced.search.sessions.enabled=true', // enable WIP send to background UI - '--xpack.data_enhanced.search.sessions.completedTimeout=15s', // shorten completedTimeout for quicker testing + '--xpack.data_enhanced.search.sessions.notTouchedTimeout=15s', // shorten notTouchedTimeout for quicker testing '--xpack.data_enhanced.search.sessions.trackingInterval=5s', // shorten trackingInterval for quicker testing ], },

KUWq;HDjyZmbp}XKJ+>h&j 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�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 Qgn zYp*sMatO>miTRY!FpoV*)m^pE1zHY4Qutb_pPCV`HKkMZ5;!Q8PcSvlvb4es-gNr3 z-yR(qdUwUCU477RO}ILU#e6$HaCQsb^ST$uS5pjqJjzDmLl!_ckH?nM{^D>F1nW0l z`&su}p*MX}Z8rj+VZJpv)ro`72Y7!OG^1FM_?!PEtnW2pD_%%HjKY&O9o~ArAe?FA z`ATu4A240e?M8aSa*FvrrLjcb{FjbPvs>?oB8L*?>+=bsvyXF9m1C6VMX`#o4OsJQ zy}9RVcR~LRXNw1`C4e!`j&g4?B?%M>bdSDFUtWhBILCQ4^+#ZQmsB` zCSf?3!Z&!Hu@5Tly#aJMCY(#eRWk7gyGT;=`1x-rl-SdB*w0Rf3<|y2$aG_(m!-ed zY?)EK9b^BF)THhSE5fRdp!nm=YN^rC_PFi@^oMs2 zv4=yZ&z{e6$JkBTPt;pi$ywP>FKbq~)jIE)nfXj&gq4mBS+l92 zrKB)wJC?8>jZ@qf|MrQY>nre1%11+nXj^&+%}rXCquKj+-JNi64ZDt+*%NIQGpk%U zuU}RTj@+TCx&tbt_SJVMrp78|RcHEMR(DTLh4Mh!N1lvdM|j)a8_XVwi+M_Mu+5x|$%z zz9y!NBKRPvXCdl^Nwci;TpZ^*!mw@CO}uv%=)^9qX)xy!Kny4#Q1w8QhfOr6#{wlH zgizMy7BOsSh=Man zh^G&N`$J)ZvR0h1{d3s?&h3l%g`1BX96^wOmE>t)d&`_{**D#Mf?$VDZ9^(9yJ zj+_fwK@|8CNX)mGT?Zi34vyH7(`8guX;}eh0*FH0_V*mKTB#av(EHMoADH$n{1}Km zBb^ByeVh#Kg_QNe*E!EghxfzV1G0&TFAno)>bCXI`Y`rNR!|T+66&x7-F{Caymtqk zWbEj2)*zMX#wtn=s{(^-gy2x`}*5BVgf z!Aw|9l?JX|xmCRMQm=UeL9_lJ_aUo?CYea{)wYivGi}C6TsFG9W#z?S zhF5L}JQqD|6a{z~+*)oOUjAJmD_2CRPkr62oM~S9tK{9)=I7<6+0iS}1E zYi%8K$I!SVm#-~PXsXYGiqgS%sxcFMj>EYlj~{m#OwzIN=>3(GOhboNzZcM>Nq^ zqA9kHwj7?Wnla&UElCm(OlSa7rcaz!N$9 zmwmkdtpikL=OymUh&ysmY_c7dCfn7VIVhH9+N>emK~;wB`El;98**}Si{5t76H2rC zXh9q*@^|0ubFwDlMfcF#1BaoOZn+BwaRDxL{h@`Bl^wtEFV&Lg3x{*^-@mL@q{jut z))G}(HFlljag3}MgK2fPA`9xk^%pal6S}eAuXze z*C=4e|D|_ORsX?IKU)Dh8XVsSR0^W?>5xw1G4h^<$S|ZCqRaVbQDTxQaszK@Pj!yN zn`fS3pYK17JIF3>fkwS88P_51c)PL?9?1QdQV^%Jl^3qR{G}tn^aI>1)+}@f=yds; z=p{3b+VXQz&V!phb-ua`yXjcZ6^455+iqHAjV~MqnM8*M>$rWum#XURAG2+PdRg@{ zjU8pGNeaN>JO*rn6!p{HSd2&U&R2ep#|4zfFUz))e?+La*ueeW4jhVoUE0i^aUSn? z7}*>}RWwQ;?P>jXe@oV2v0=3^H!aI9mE~znM|LGth4|YXDFjx7NKwrKP51cniAyGB z`9R0uGqlH;n;WN#DDJ__V}@;Ct23pa7igV+L6>J*y)UqRv*(B!5r^)|lv2i-FmLCQ zgrtRp`QSlNZfh)@{4h6h?@1dY-{w&qWmurQ-^gxe2LA-CVXDC_%k7!rpeNCjg?i8W z%cEA9``c3x*O~lWZM&Tu$-6I&ce{_QJc;!8_2UriRxNqV=NHmX&4@l8%(Xkyv|t}n zVGP&3hkmsx3SM(_o)zZZ{fIbHGKs_GM{76;Y!sx9mKDUmNdL`^v6O4ac}HOUfHzjq6fB6lmh z*q@}o;fzIlN+OAQ>(SaUeZy6iM>(JD#~BUngxhqO9n+v21%@z^yAkGd+laBHyp+M@ zK~?#h_>Wuw14fqio1UwxcsddIwH$ZxgZzTr zs&x#sTWvUIU0IXayvf_8_Pk=jduZT9f!aGBwBbiiQ>Hya)Q-kE!>xMTR(=fpL!%-t&mC6)3D0Vemj zaE_fd_Ug(J{(DiYus;(08YkUWe=5BBbI&%&u4vY@mA_rH!u4@zl3q7ZvAx~Ld0Noy zS^~~%xPI)G-Ce?Xu78Op9m_tkd-?kjp!nYt-2Vrc2hx7ELpjuaIar<|4jE;amy9sN zR4JE1r;+(IX^G=E8+Z|WlV6Wyd_nHE0`I(wX}nWhZc13me@RKn-J%KD1deG#;XAbG zQqxP#AG570UUjx-r4sfU-_=FW6`YcCLZL(ODo(CCzhpVOM zI}YY&K?D0_0mCIfG%GkC8Lg=B_HtUhN|THsIT_)0zYO^RX!DTpX5f@>SI*;oAAy)i zICgI>8wvDGYr$!k%Pzee@WPWW;m8hZxjhgC@b}&y%w}juHYX#pqP9^GM6`ItjIS~{ z52tnR1u~7 zxsiHM=6i|xwphU;4 zC|&~KA6~*VI{@I9Nqd3z2kHMOJw37fv$Mjn3v;?=?FM0bHy9k)ANXeZS~SE`o2A*@ z5QptBmz{xx8(mKGr0ekD1SOi_;;x)g^Hy`2cZroe)Iar!;Cd>JGc4b=Q|iyeDapRT zYfSYli>KwyHC1Sgr@?w<{BvN&C%nMK**=KCFaSf_+jYPj%~VqYt#EF219m5lQZmvq zRdzqEho)M(Jc+^llvJtNy65*)O3Jt2U(V)T&vQ$dXv4B(Xn&Vy&5n$_?9vcvo9!Vn z;PF=U{&WCz-{`59AwJK#W#5if)SMdIaP3%+LgUjVYZ=z2zW76wO!o_L(}mVB7Ois7 z~&4F(u*qhUFNN`K%4JN zjIP?UfNA+GU-zB@eq6dYoK^R?O{mE~<8Eoy{TXn3qjKldPWI`zJ0#;YpNQ8HLTg6g z6~k>kafm;UYqysYFEkmSSpouotM1v79&@?K5Tt%3wr<>q)iw&LCR9%Qe4Ep;Iny%7 zR~k*g%Z90% zjm{Wep2e7laf=iO%bxujE!(QTb$nP+P&~@Tep4!L`=Qq#kvhr%zZR?nfsVLzeD5;? z)|R!Geg_*})DFgfL)iQu1e;`hM!lbPZ-;(U7=ghsb#s1!`(+9J(enhs=f>vz)q|N! z6=7IwS!1_Tak1&Y9X+E`$$oNQMu!W5aT!^GmWDY>QViQ5Zqf>z_5AIH!NSF-wr$r# zK^L2#I)S8(iz%1_^~-vO*D==yjZEP+|+&yJR}QY3h!mjimW#>DR@-TM*|p!$<2 zEVqH%j75D4BS#;R^@rv-xnCqvuG#EB^7UkJcQz`x3T=CM3R)}SRc6luKJsX<^W_OR zPgDYv?jYFw&RRIpB6Z*811L=5#WBR~FFw@VM=l6Hg6A1GW?NmnDNzd1WiUcjLuT!= z8yAaE*_*&kNfCG*tBBq-tKH49IHRKk^;j5I^+$v^gtqm8;*C z>{7Ffj6ck|yC$VEf*y^W+3oUJd(MZO$!lhL&paw0&62kX*b{P1M_JP#+)EtzX4cie zGPk7xyVkx@JSj?`m-dq>k<3;&DAaNSs+Tj!?tS(i_~0XV#kkvujDwjI(|JB;zFAzn zUApl#qkF7FrI{!0N1B@qj$(YCVNVC%kV?ofxL4Z)DE9ST1z zjTu&6;KTY;myb==$&D$59mw>1tENZsQLE}0C8Hr;!??!waX6laB*=@Ef$52vEDU8ApcJ`Sk1B75Iz&^v*7~i|L zt1&fUmo^lDVbfkpJzXxZ9oa~ic}3?qu1INPg5^pc(s#pVos2g0=r@F!^Hg@;SCFDzAigGCp z(xt(~e5rJ~CHe)lLJY>4fceIaFwQVY5Eh7e9dPJi%Xy$hmV*g)@LJ+ge>)OlGgahJ`p=@E*lMu0YT=~iv z$S0{pDpRRTvFmaY=#))34I7b^ylE>p!Wb&e%j*qX3~f^hqzR>^nP_%0ltSqqnU*_}$0uS=Zn8wmgF>Ef6Ls!HGM)#aF=0yK;f&6u z;r@Dt`?)cTZO}Z4_MIBol^q*P^x$FDm6|W?bt{D@l!&6z4;p)mLG~^!H{p;vVYSiN_hxDe zifTJVAIqW6>8SO168BrU6Wi{t*XnSC1C`59bOUM_Cr87V%xc^7%WBM8i} zUQa7KSl9C%-aY`OhPSE=_E;^&5lMVqbXgCaHSHO%Y4?2-I)Ty#3$VCyBO;n{z8I1|LjO0A{msg3gy2oDM||pQSp< z+y|bD&Y!f%M1D{hw*Ui+X(GvzB#ng_X7-y@Twse1F?KF`MB z4G!Eb(^;tpwIw0<{L#@`2*g8eN)r2ZHL+Qj(vS4mIuW2X6@Q)S2kHTC!Sk>_K-!N? zV^l0#M&7M%k^Wvj;8aHOyr9m)Vnd9GoV^^T2z$KM1pYeB4z$Z7>PMp$c^p~UK+i`t ze72UJ&^+{)g6`J6RmZPA4G?b-eD0%PcX^Xusxu4naK6X5^RtCuKiMza_8?V?bq}@s z4z2HPq&2zv2|%V_OA49MHlu<9z-wA43&qa3oA9nxUucdf1z`vTqc&L<<40s(q2wxa zy}h*z?4{p$LX6j+Nj+w$e&RhSLSaSax7)`0LUsdtU>2V zjRM%d@7c2Pyr{EBl84h8X_tQGB?KMG?x?Rkq&6A4f61>D3;IT|18?4k(O3Hv?1`ce zLEwd-+ZhBF!OtbD<$5rw@8sb8Zwyd0v7Ojw?C#7%X}@i2)B9Xfz!2jKqKZFDR;3Go zDIxu2PRe0O)PU%-vo+}-Y}rFp7axoBcH&QDWIM>u2 zzpA!Eo=0l91|~xMB`hBe%$oSJPu85xc&gEKmc&?+&ovOIXnS#Thu!T%SN_=-bG*gp zXJ1Ag>G0mTea{&mhvWku_kLErvIEOv+Z!kn#y;jPzSl1$) z3z~~*A{;TLDTo45PL>y~{3UgS(yNXMbG}dBiBCPAaRC^a01QISSy42@_qr?3B%d9S z6vAF=wU{*Dq{mQqhFecKli zaxp*_Daj5Ob+@M*KBYehXsAr^*`)VfmXpd-lyygVy4>4mJy?l$T{ZdePx!<9u)^g6eyVq<-(B*)dt5L{y3+c(K6dH_*a3;Kin1N&s~C- zgNJh*jK>1DQmdQ2Jtyaz^2q1W|9@%dVVP3Sw|hpx&KTRyBrgW~{qcwkNayuB!AjI@ zpRJ<9r}`bwM;w^C$|=Ctd-pg4bkG}b&JZBd_x#A12#HL#ub_|?tWErA%WeMWSfe4) zdis=Gc|PAV6+o!Lx-*90zYb$JkV0COFG`|{;$P3EC4Tq~z$*A|dj&hmYIdhRz*+PM zwoC94uL&U|D`T8_gi(83e^8FXWG|Qjj5ehsrttGKKprnv^kHax@{q7>NcwyH*LSFY za0$NH;VWZx2le-l0CVBnB{)V%nGR8ce4wPuWz|ji9LuXqUanF zjZwX8DctC%@=r{AqkHNJqjP{9uR++3G07V_KqESml%pB*XG4F$XQf%stN9&5uvWS* zn(zk*-SAEBqjsvKA)`JG<9f~V89>ly!DEeIU(P)=7FocaM$jO;7vz(31z27rMd6rC zv_NCd5Z3&!0%ss?)USeNB~~i6vlNTR)qh^eb`h~BYq}nN5@-xK9-rVnrNi(1fnR^c zx6oBZ7uOlI8ZSB>%gKO6sUku?=_^;zYamh~45*Pcy9e*ZdEpQ1F2IlRIo}v z#dzYr`zutX{=z+zbTl<1;!q-qkf0P{D@A;;2+1NRB%Z~HznSwlt`ksU74f0GEa^%w zkU!F9<&p}4I6JM|!t+f_V=;pce0eH&t>_QzTN!?R*FalSj^ox=HNbLSdD;fdb)8Ks@{zALn(_G(eI7&t_j@J``{phNJ^woQ7Ot`_2B|bFt+QaQBE&qboV*Qc zKuiU{YfMY-jAn~|8Z`mKfA32^oRB{5K~V*$xtip!XE;ajPJGq}%uZ?wX4QuLIiE0h zv8kA!o;4|4MWvY90*ovi(f&H2Wcd03k#5@aKlkhZ{>_QzCO$`xxw$EgX3&qdsl40I zNAF|VE^yalConGwn$bo3%&7h-lmBUsq8m?WUr5LkP)-~kgOEqVRWy%eBwL{OnLTdto1%&% z6_T-WfOV^?yM!Z_6GqPasz7?4LeT6k<`WDVzsek`V5~7*uu0vvh@HfHB@fEnCSHyn z{tLg$jPJP%tSVEIL3qEkS@z8^E;a8~uBVRqaa7Kjs6>s37r#w$=A6HgeZKrXkCrF( zlBHJP(rlWXoY&rI6D82rzUP~j`G)5KW8Q)a2j z+nb`|E>}Tt@l(ly_QJEEJoLU)dZUI6ht>w(!D9@M0v+#W;)@Sj!h0RMt9?A)@PvAy16JA9`AN*fsIG$cNG4%jO4Ddsy#S0 z2@LEjNUAw1!~An%xXh)%RH?-fxpAqkQ&IF8JR^L4)Uh4|(p{jHHo8!r_Vb2y$T0J# zXay=70YoH?<`Vz;@;{&B_0ls$PtFmQr_PHBnq$F;hZhJMwY!&K<~+^8!{>rKLv9xO z&y>z&+X+8l6t_i|Gj#HJnb}(eQ)%#1jZjNL_4X!siOBWMBdXSoO3ax#G~ps8)uQ67 z$)=)^M=v(Pc0t5Uo$AItj78lTj5r(tDd+bSb;rD=^krHhWYg+swIohLWwaUnqPWBd z`pgtUL@$%>J&)L*nEL8F2d^tH9Xk5{`cP$|h`SWZ&Ij-Mrh~CRjs4u3%w*#Lozc^v z0cum~ngagiV3bq6T+#@C^?lR(TboW4$1v}7S#m6v1z021ZAeUmJihbXbxL;)Turrn zQ6(duARB;5mIVibcDA<6x8){O(KS^b>1XVZVm&H~MYy+G`4L#y5=-G2)xWQJM5mX^ z#z4M35b50LvaN5VVT=_G4|g?6Op=_wXkDEY_x4ud(Q7hl6`y^8R30c7qw3DxF9-Go zsprhkG}Rxu;f0h*iRJ1;r?cGH*y(n+)xS;~WuqQkY9((q0$2f}=~nn(^ytjqNK*Ie zm(G1H+{HKYV_U&9xwdY4tpL!KJqqF) z%=o7>j85azz<)ite@7e6AMXQB@42)G+`zNH<>h*?=aPl#WBDYB} z#BmNiR9zSvh z-2RftsAG@@+Xpx&04Pde=gvghr)RHv*RB(2%%akmv5D0?&ZG8*R6Zt;Yb?`CDab`I zY)Y!~8We^Pyry~+KYoNi`I5oxuH@ZuUH?f=jZ>AG*JX@8G=;I0>9I}hm3z8fT%M)z zOg)3Z4*{8|(2gR!h=$_vV$5+Fej#rgdskzQX2x~~E(zyPX)k)t*GZNn-P*X)qaW1G z-w^bt3L9IOSsHfC0^>VFwhZsD=X#|`GrlLQemj>uhmA{;DdoU_9;fHVCBn2QG8839e2gX#*+s=b3Oi*6l1jpmd9buLT&}VS5`p zjAme_#RKtrX5LL-m}1l6R6Dk6G@2>6vN}yBNHh2~b{h|RynFZC*n(S}VHU7MJ3@2D zc06HahmhSr`q1Y@DWRWliZh8`zJzI6+=9TX(s^cl~KraQ25Cw2>Dz zTr)xdB+ls1vv%qU1A}g0pD8!f;)zA@9se+D>*BwUP##F)iJcg8PN%>;a5JlYt+x_v9*U=V`oFiz2GlG7XrU{3k&D^Ev+gpFp(>o!Iw5LX|M%b##`U zrcA;}a43@~$n)9WZQC4b7Tp8Noq9E0=~woCeeX%Kl!V@W$$n?^br+Y48|_zBSeB9G zu>q4)acOH)w=cTaMqJt&#ng#0730v;`XFP4?he{_I7HGm{nh()v3^_gKXV15_Mh4+ewit^v))U%})ibWP#1&w(=<<1Uo zswv_bwn?z6kNYgzdo~|gT{>4sb$zNNHt_7SqQB-O!rnkm%p;>?C1giMM$QD3+JlD6 z7%-$Z3D2)kSklpR!EeC}nb-ez&YULp>8VK_dHj^WyIA5L%iw`BuhGVU-;}ODP5i1} zyU+5%3O2a(Ok=`&Nw+m?2dS~Mr^8$Sg;^O{n^iE^e%h|4GSF%X$NI%8_5<B|+85v|sp)c<$A{ihzvK^QWk>L(;p z@4%VU<(V%My3>B^&-)`>KWUB|>NQfVZivcfy1Z8Ek7DEcwu zZxy+xCdqtcO^SDM#n-O?2&^pv$dHZg^{bTT6zqo-mgE}7c_F-u`W+She!b@V&d8`M zX?rgy-lxl^4J~x2Lc7-bowknqf}5L=0LkG_qU+W*eu%V%rthPC`42mown}VW#D`vQ zy}SVi5qbsM+8tjNaTP?Na5}Hxcpw8bo2p$jT=NIvx8^Ao?D$pfcEXZ4$XOAfrs!@^ z%_885*0@f#m8dF3UQ3e)gd)d>-}XYk(&7C{4Us6`JB$aonAU}$0(APz*JZ|uHg1fY z-JTR|df)a2d`-Lf9zoq_%O`6N!~kZ3PJ`=XXlsu>DW5CeFENcI@Ng1Tr`64NEC90ZkwUfh>y#nyw88$U4piMCZG9Hbr= zav46(L3z+49Xwm1hn_>{g2jokrN$Y`ChN~*&6r^Kg6w;A+C>B5UnrA%z8Jp})!51W z{LUjMt~)Oz&^1J}+9P0qM~tSiyd^hze(!*#zDAuvaBH3&^GF0$C&#&4wvhdvUoJYTz3Mh$?aX~ zSgZ=*Q6X{Pi2k2D_ot{{bPlazFyB2eYi(}bto?mo0!DA>edr{}aI&}UyWP2@7{$Qj zVeS*4P=4HI#=h=XuG)k*R>wLxKNBe!&Evnxlw+eYlcT>Pjdy;L!Uc60IL45Efje`Y z2hf5780tN6q_Jg)G#R76#;2&nv*4~?p??V)D|SGq3tC#wo)Xnz)UJ8sb0z&X&2A_HJ$Y=e03OdJprbz-35@&JKUk%Q6Ow|dWnQV}YN3aR z4~?@ck*GgKXHYpdY|F*ApS<*XXzH01FruttsJ_x^Fo9d?PQ)<{0}vFTo2|52P? z;LywAGxW5R7icHz zRMEjFe8!`f14kWj5cA-;As~d);IQSHYVS*Y#uL*1T|v|jT##S=-wQfjPNA_0dsX{c zak7p#KNAxNd$RFJVaTaO&qg0}v^C>^hjrrrS`xL+11+S$sKDm$8}Q5V;JjH+57=js z{8LBjr52RxVwq^O5#wyDPA@J&-599AELSm27#{N>jZp#9P=&Pur1efAf?I`L`G#yr zd7ypw3{L9MVxSp92DYEa#rW_+lhL=ftc315=LxQq9bVsTMS`JEJ?M=3$a`Oj;6!N& zpNUX9r4wIp3i%K=y0vYj3Q>~Ni&9?D-ai#s6;HAvtc&^_hL%YtIaQZ~ZksoW)IY<^ zrBWIA<(2td4Hz#sFS5vySglh?d_&y_-wfGnDnGq&r`rL=ACsTQS!{Vv@Ne5JA(FOk zT#g>G(YPCHqgl7ZH#A0Wj~YD~}jAfVC8y{KikI7YH|nQil(GL&)-y2lF(ClYu6y zY-psVHLTQvO_)*^Irp`?jq4ems@8(=zCKaGRUTqZo@^Tn0$&jU>F3^fSu7_jg91%LCs-*X;&uK!-R;WNsq4U#Hr-6>ElK9@b%Gl0Nw z{XmE4y0KXJjPT93)!jA!GXL4kr@%o?jBanIlxRN4*Fu93p8@VoxGGKU0+7?j z)FK~y4{Wlb0e@bXlj{tVyp$f4-;v=?pxNv?$~So?J$xFZ$~s{*TbaQZ@@4xJWgYz* zvfQJ3pe;~5w2kh(B~-kHCu}qMi289^LRbr50iBd^HXzrgG#jCFKC$z%ds`7uv&);t z(drU}OLx0I_#q|LJT?3kZ(Ppg1L?S1 zj?YC$rK#EnuK}8s0$;O|tE5B~hzUyLmVCD$xlh;Ad4QHk>pU%eaQ7b$!NQW<*Rd1s{SXIuO6*S*I{aBN45|`E{jEP`;D64 z#2E4W=AM{t6RSGQ?CB>pQ|@l=y>v!D_M^F#=-8MGd38GKT#n@u?T|*xI&gmET?x+e zr(Ml#zh_5&A3XJ9^D>Ey{lmNliQfLFvsimf3TO|8N`j%(+YXD{o=*p=h5G^wtWhd> z$Dq}rXV47jY0crqqm3oMWnE7V<)j)%v^6qM>s`j*fd=!x5oo+ZF;(l9dtVZOj*sH( zY5X%VV_j~AoRB97`~P^VFgt=ms@sFB*LRb+ zmd=|gi>upySfL;G?g>v)tCZ9E__^O$2_)+TNfY4`rX)Sxf1~+q?6OF83%=ZY7k1r- zLz%&e(!XX_>iJ*E`wN9U?~q|4SJsh^0;37#KuV2G(9HV*# zMqjzi260m(1J#nJKpsCi?h0qVTtX;MQaU26-^T2P&2(50j$3wJAE%L@X@r+|l|huU zvJS4ziv7OAd;=Rx+9__W%cL&bDXQ#EdS@nX8(P{eM89xv@cy_Zj$#a-&0CYz9zRV< zsX{5OX6U?|aOnt##ZUQ!tLPw~G76-_(-#^&I=wcPZBCkm&tez#-qL=U3|O6kAm;+R zKm8N{d0*oJg>2?EdweGXl~=Y_2T^(3V&t%zrT#T{?3?WJz?UU0JFC7aVSQH*04?IS zOgj3S$qagu1PqfjZupoPGs1(O%;T%aH(364PknPQDE(&j8)eB&6UU& zfd?>?#1OCR)x*<~kK?=xb3W@}k5BpiNEU;nE@2tZDtq!Tp|Mu}nb)z6Hy7R2kl%Be z-(~WT|0H9rHQmQqaB?h)2$SjbG?Wv7?AZ-MyeaG)%OaT5O-V4R#P^2BD&Lqx$a^+2 z?&I&?A(*QW-BHF9^mi4b;GAN3gXv&I0)_NQMB$QIBMf;RI_}?N3=PP3>HT5}J={d02gT zEwhmVT6l2UUCBTym!Ly5VaF@4hFfk|@8}gj)!6Ax{XoghnP3-3%$D}F7s2s>?B1Y%_DK`#W}sf>i=6Y?BE~Y&WSp=g>-o4t z7yO#XCXn7_CmAG*jn-<4a6!>g>v^Xrd(mk6Tos;3Q)~O97`vj+&f^qbc8lYVQk2ym5^6;7t~E4`*4Nf_2gKCf0;4>ifSuah4&e&v-JQ1vj z>YoPovFN^%QvI**Tg`nO$%^t@Y+6`5CYGuwI+lvN9(CWk=uFL-3%*x|QxpiNa6fp< zw}Y6O!Wfr%r0J_KO+NN?+eZKV^5NY2*VlO-!yh1CmKW(1oqe83?;L~f?px21n-^oo z-(}%r-b87dRwB-DM;nvLxOyg4vnSmB3VLV0Dr*+9iWH3gK&BHD zI(_w)SPnbUhI>~;nSgvNxV6q6YI>Cw$HK}Z0ND>2jtex2 zWjf`_@K`U8H`Dw?y8eIodJCqw60Qpu8kgYi65I(8oW_E?L$CnB-Mw)M?hsrX2<~nP z?(Xgqf;-%vd1r3bcdPFFg|2f>@Ad4p)~*ZrzgxWUe@FgpKfs!RP}4?-!D1(x-(9~5 zHoJ|UFc?`a{YQm*RWHphQW86K&->FnW^RR%i?Yc$eENi;RtXus?#wWBq%;st+|J`4 z@*-vzrMO7SK2gsQBuSo`*xSo=J`k1o4(;CT6)GS>ewr%++Z093NPJ%3vdUHAU0#oO zBE;Dp1}vV=e^u61-p$DT5qrg)I;xLILy!X#@S%{30M91@>N^UEL?bzF1ZO}KikVI& zkMKmuRhlMK#4<*D9u@;48b2aK@qL4`iF-E<9ar?Fd4{%qom@s6alqT9k)7~7XxP?C zKkVv0yM22nTbXho!kL&Z_tPGhi82v#%!FNOs6vBx@G&n1JsyJK%ABvpxpnHOkJ_OW z{b{7T$`hg&9YSCU%FQKSRJrQ;8}902qs&yaqpZpQ>D)4=7vP*Y!Q=cwGr zGT+FnVdq>iwlJO>GF;)kr@4y9>^t2ou}0_vQl+~qlA&@`D>BE^Ha^}Tt05ak4hC6a zS0}k{BvOQ}YD9Kd0=|+d)jVn|$^25`U+|AkOMX0yI+x=jCcD!+%RH{otx;rwryagJ zG6fy0(^g4A#T^;UHCp8)J4b@tTV4&qy>XFIC`RZqr?UQ9x8U{v2h2-&*39GV@G*{QVRebcU&W&BaM>v%KaxX!>PzrMQA?2T72Prdm%RvJZNm1R zVPHALW|+(NP?JdOapC6Wn}|l{7r<(uZjv>%p4$p$DjPbdM33XCllGuy*)2I(pbIuN zEYIkOhUwttV(nyZnFtgW&?u@P0?ct)iyU*-Lf?*Kq(|e{z(f+DKrT_X3|(+4GVKO{yeT}x)0gv&98 zbMQW1f!m%z*{;q}W`zGlTpe1&p7;O}7L)m=cNB%GYD)}^&)f;=o_+$er;}1cjo`O& zXir4`u(7_AHJS1|uI+Z_Lw#1Q-wrs-awy*%e?>obKbf|`xNUo&LF+7zSOom_kP?mk z*F#$V>91Lk+kHJwwcYQR8N11mQm*|LDCr8aL8j1RslGvP5_@S}P>s}5=O8LJ^wt~Z z^Pco&0V4O8+qbD|LY}iG@s%2W-qr^*$C&<#CGrj_11)#O#)fWMmwJokF3D^%u9wg1 z@~TxU}W`!JQf!W6SwJRj(lJXEHQg38=-DlUEq_w91J4kZ;J4l+4`7+}=KCOL& zHgyoT$q{knktgM6OnGj{iYM$w5Gj-n*r3V>{{CeP?o)cNSg$n4E8U2DKAQ^$y)0$nj@)+f^{dv3D8@ZOQX)wZ z6+l0!Q@CGJqhhaCc5XbJF*Q?>U#~+^CD+Q8)fkn+`YPV#ICuTK&l~s7lRa>L-QS8( z{`R2*g9{$E2p6vzZ<2-ohs$R3Xuy_X)kB1(NK%|Xr~q>ziE zVt*@j9_sfCW=_qm>$@&!HfCY{hC}Bu{(w0En`L0LyWBtNV1Lymr+i1EZ`^9}QkqeE znT|ZQz5Tc=4@{*kDfKn3KL##thTS04-j=Uc3Tn`cXZDi?>QUmk&*y3CMU($KF521r z19;c&jm>ipAs@yHk!BRX#%&}hgh{N)F|Z8bpiuhzAlm1tCr(&71&Yt4w?>c{D_0V8 z$eJ2Uu79Cco?axKF*t6x!eByvY{mL*stmV=G1+skASX3422K06k)fpb{?eE#BlwME zavWWC=0tJWp2^)_5egjBnuSkal*)h~vzFqOQx%1aS{JMzXkhP+igw(HH(~r|^2hft zzsBDIh|VWBeaHp~emHuksQON{G?hRPUbCyS%j#3<`zjw3WZBYTHu&Vrqot*eIlW&I z^`{>c-?K*eqGfB^I`Pt5wFXy2GtkVXVa=EGzfF9hb9y_D1)m>nqf@&pPDBB4&PqTC zJ*%epUFkJ**(lo#6lbTi^DmvA5dtgnZ^%-^eDM5y$$0qP8qO0p!-|>sR{e)R=eBs= zCuMZug49jc`oFZY_DHvvrO@E><~RneY2d5s<;PEMV#>#kd5UW#&hTp| ztghHxf81K{Jhmw={yJK49A$tI|LN)J*uUpQlK;a0Empy#O6zE@)~W7{>wiA#!&6VR zw9a^X_v%tCFy{u9T0PLVKV7jqOs5|+wB=Bu*tz(b{o4glPcDLdrf{RI%)?CG{dK3( z3i8kXUP2IW?we9QN!Z%Rc?x%i*PMHv$4^twQ2~LRSH4+Ip|LP0J$TiWv zp53-BH1<7hNwGaMlta8NeG+CX)A{+p$zX-jKCyyckgp3%G z5JH0Ur1u_bj&T<|9gYrD02sL-K*b~OJP!LGIqG5VE>1c2A)`{eB?H{=vXFQjX~8Tt z_T7EJR~2JCQq2~h@g?P$vQ5+-c4=IzbPJ)SP-Rp-e)x1)M^ zABTK#sc5b7SsaNJHbuwrU><)>_fY#_T%9iM(gDUQ+u%8hoRVIlK}@@0gFnI#uns!u zcxD7v5NVB|Z z81R@{gN>>h-w)|?jo`(wxvJ4oJWUWbMRI|~UP&;n7OB@4epEG2mV(M&W#c&l4d4I{ zFhx$~PKdHQ1a7CeFLP^22Pq=EioR}!u0QYbLJ}M(Pl=lLlgI2&05G+Lry@aFM_V8g z;Bw*b$LPa2x?Lhxs?~$yw-B&jE$4pnAR#oLL(TMMWGv42|yIx)^=;Sz8?5>&GH74S^=VmWL=W~_MHi<5? zGS9YLb{OLVCF6-rgMuU&A7#lnIn1R16VNZ8y4Vi2b3Uj%L-xk6?G~?+$9ug2{gykT z{^YAq%XO2>)0CMMk~-C~F_1=1^(Xkbp_5j)xDICQ^M}7i%6&U%Q#H9IkAKz0Cp^e{ zG-`DAgsR0i9LWSWF!p3#5GCwmJ4KR2*qA?hpwm^~dt;nbqolGNUkpm&>(E(1>CV*j z6^}N`ZYvyG#Vhft*S@08sPIF`VzFZ>HEK{XE9m0shw$8WUbCMXUg+rr94)+RpH_99t6i=-1dmBkxm3dIQ|j50bB&L+zNXgj zdnm66bozf#?yQhPAI`V26-3MNt0Yn+7lO6xFv{aKhYON^dGkaK2f&-BqWC?=6kb@_qrJMH)C?k|LDl3dkqTE|;ja!S{=VA%3G@z^*>G_w>!gb;`0p=v`|R^Qoq z%)k2$c@uEU*=KRovkbT_8;yt2M!oad{GQoharbZJa?A51U1gjDKjBa4P(%_Jf94Ms zJ#*cw91~+ng=(sHyROq}tSp^Ot#l*CquAj*al`7yVN7M+P=zB#KZ`)Eba*_nD+)9a zh=gbnCL`b}G40J<9wnce%ygXO;{#fm(T*gB=WlW~k%c=Qaj3P$HU|k=0um4z>wSGqZlCd=01Up~)@W7yr23vKP|T>cQG)BCdIn%AopWD%*(uLHfQJ{(cnnZT zv>&7vubzDwA`;e0K6_gK7|v+RZbLxpxNROaUoRoYeX4r1s1f{V`g_Ir8g604WSOrP zDLIi`iIEN+oJorV48!VTi>;c^hHX8kB=?sA>=cw`= z=hih#xig2WbGwxDPYtJqL`vmwlg+k45dSmq5ij@dE$?GCj>+4k+D3@U+x0be0|Ug> zI{44~#Cc88YFP`J;xR$b-xuDHyorx_)Pxf}Q20$DNOv%CYfr_ga!{#6+ODQp=l_>vQ`eDF%NF$J8->!DZfHICCH|<7~iq1xSL3(V?CozB}vhq2n z2y@@-aDt{K6(A&kSQUFFdZr$umthiUNLIXXU3=eQE}o5TTa>o(^;+`Ob$uUm^|{}6V8?~kVeoY?Oh)C-J7Z+{%XAuv!FeFrQ)p`OqI z^lc;sgXg?Y{q|XaxoKtjLdVZ1n}1sIgCn{3$oeA!D3oN+2a9pV%u<$NgANOM1YY%X z#t2~L6bZZynhh&0lsUgP4zk$|6pf0+JMeLluChKl?~Ge*5Qk-Z)f`%PXdtDNthfn2 zU|UjqX@Lc3f^TzH7KP!qA%vniG$aWTvtS?D_~^MJ&GMQ1D2)6u$zW7C2-Ox+nLs&R2Dytlj!5h&vWT30i(PL1 z>5h<$D`< zh;)NwM8fyl6qbqm6gR;lYHN2qB=8QW1obv9v$f`z!j|}{G^c$4)6a@)im3C<;u>rH zDaEYNt<5&=xKQ$XZOW57JU`|a^yR_l?isy7f1TWv5tbM9Q*sLSnBit3e&?emotiy}912Bf*EBcR*us3hRs3f7`a zOX_$3G0Eo}`#@5~81N~e6gJ$yRsm`X7m=Oq)81w!@}&+ns;tr0L*hOGzGUY?W{U&{ zC=(Wdef)YPsMZm83hD#tE9+c8)%j)y^FQT1x~S5u*ORz50|p>-Zm8GC<8vy%DtLzP zwB6EgPQx7K?2DFENMdyT9hFdVEo>jO72FOQv0=?KgbT89lt{m!Jl?`sbqSWBSc%xV zZSu)WNtnYfy*}N)*%qd(xNu`OT~71yt@B+?(cj$4ejhLQSDJL>e-V2j4%A#v<8e_3 z0Nox-(5%(`yo`#R_{q(4!Y{{XN4~}eLDb}3)g}%$$A8I{;!nJ-duEHbCFgFDihrhO z%lUK8aX5Y=kxEnUDXS*#0S5~6ErJ?=ta>1*#bTHh2~4^E(ZJe^E6ksAjF$<3S`D|+ zQEWkoRIK)XSfjcSe9ohRC?9CEsfeDL3CY8KwHh<|7{YbJqQ*ozgp^3Yx zPwQiSZ`8EgebuE2@DC3hi5y?cJI(&qPy;d0wFs5F`@ zJfhOTlQZe0kK&O*Dz=yiAbHOZun44{_pA&!CWEti$v_^XI6+b)9;+7@WsV6b#;AuaBBW$D(#vw{bVxz@jj>GgF^|d;F}eM~cUE@L6h!o@QvG%9 zXZxs#=R6p?gD8tn3-wx)r6sI-KrUKV!LSDsJWW;D+>1*nMcBU0-f|rOnUc<^Rasmf z^Q$(Bayh$QYDr}vuzE+Je9-yn?r{ZDZdU^6f>cpquPuqYJB7Dp3AS9gg87_)ytY%B z6r@mmMX_6qEZ3D-iVBqLd%Nsn{s&m?pLKY&J)MruAjWi|r}TBwzm}FR{{^FpKP|qd zl1tAqzhp0cT*qeGt-doHF@kKhhiwpN->20DwR3Zzrr)^{bR2qluKk9{qw3bOJ!kaOl6U6jMQG1l2mIwRRxhLClU<;geS2C$JFmY=D@(%^A+X<)-r;3zK^&v zd)feNbLNgUuzV6;P^-b-XYad#;4)@?x=EkQJ*1mkBJ~@=sN-xBb?u~SedmLBSflTu z!hyMEIr`st1ZeFTNIzNT?RdQT>b>t-; z9BrLKV{lHK`8Cw|RmI9nNwNK!39!1}@l0mHSF4ptw-P@y*ezr3Qm|~+1Rl7x0cCW( zXm@_2cR%@&x@I1C(lWK7ar_iCEQh>P2-?66AW>IrELcv!n&qgqH+I~7mTQ^&eGB|I zfEf@?5zPqU7?MzzS1a?#;MzWwaMM3r(LX-hCr1{)e9xokvVRZ$1c$H+wfk8M*@as^ zCUaKg5}RJWn>`4*7!+%eRVYRgIEILxR?k*L;yQzwm$8gHNyW5Wt~R2~)$9H{b|87@cS`5o7G0C5aL@W9d>_xkN~D{wG#pxQz88I_~6*W1aY zAOpt?*4>hymb9yZdN>(huHdCC3?RmapB_hX2F@=rP8$>Fnt|O3O(iE3Eyf_k$j=fw z=1L!@xeN2N?sSy|FLD~5BoZa}4{~1REJlgnkjxZ!MlGYo{oi<5*h; z5p_M;@ps>I>%oYX8QzszJePv8+^490f4;^MmDyY!Vo077eN@(kiwh#jHRW5rya?Ov z)W7VMEpw#X_<%}b?wy&4P9NrOs^>cUSPDK`mV>%iK-?5?CTMco`-)ZL)m?UwJEszV z2eWRr;yP^0nd&x@I9|F#I%XF17_G%`aG>^@eF%Ko_WlTF^DO!`u25SgfQe*vTbHWk z<(LiW0M4AhR%C+gE7lo`3~C_v5`<3U|A|)uGydWk(_BXA9S~_2C8L3qpyPf{_nx_g zEnet#d!i?oVM++=hI7(swJ>nh7$UDErT0GN#?Ikz=CzJ`E>$!DN$@DTU2bf(h6|-@ zzQ0y58%%CjR+iS2o0103x;WceT#JW}HO5Qz4bcbRKMXFI??-+4O6^Y&`E1P|QL% z^g9XBZSk@rR^SjrBeQuMfm{hQ3Di7Tbs?Xv@Pv00yiwE9Rh48V70@Cp7qA^b>r0Wc zht{}BTVHz#QwV$o&nleXEFb$1>TQRPG59)>SP6LnccKZhZwj!a? zrKQ_Ee&PftcCDJML~)4)XC>OQ^tMDKjn65obKq&wKaiJ`R1g*6pO=?&R}(&NHFKRj z8h*9)>wh4FxQ`C#NA@<7eX`fFxyV#=lZoJ?GWP}Ewx3QL&Hs&mOxPf(SnokhYRI5d za7OW!%1XHnma+?uYRTWRi@J_{?`$n-Q&p-gkgRs0RWhsKX1Xz3Yi^JippsO(5`+x? zyw*h8TP9xuLJWnfE%W=%YKnh@x&AjobEA@+;$W`N16X~I`Ms*?IvJ5Cpot#cdMdyc zyS4>1zLHW19a!k1N}6UEtF(f79yKNYR2@%IS2v)b1TNwqNqtJLQX@X>f#O{Hw#8~J z@HrtnrD$TrK5Tm1hq^k>mTW;&tP~b;yUQhsV1^+PSw#aUNlLQ{r+R6UGE;2x#7N_ARD9|LAMtRF0&K{cE5c@}Liw(?z3ztM%d#?yZp9myo;+dnCJVTI9?cgUv*U?y8V3xj z{J?w7{+mA<{Re;K;1KJJ`G{fqSRAD*d>{rcmkpG2EWfk$+x=>>+VW{vs(bb{b{$6V z&7mBM=;*yKd(O*Lo0+HAGFnei#Z8zpL(O6@&)W4CR=4b=VAvK)WpKQ?K6LrpxoqjK zLgb(c+as^k5r>{?!zu*xZ4QR|NAP3Hiz(Y({E^Wq-SJcZv-VVlU}m6J*^c`(0}b}v z=J6b#unaV+6nbkXH=ZyL;iQ9ZqyDqh(vwj5=kraSwQ1{f=20*?vzN=rNHt{cOumcu zUGWD#{6NWtxZ+f}JzE4t4vL?C@lq%e{3coXW|gM&evaLenb7lA1ChL|P7Rq6^c?+5 zOZ0}VQk))a@RNz~12Jw^qKSXW_p^v79ix|*oWOl?0m(;LV+GGQcML^Cw%HE8nHqdw z0B*&^L0{4t1f~S*zugz{N@3W%8Dj^iH-wG*hIxcx5y&5}k$l=DkUSHt%$*<}R_KPBPE;u|Wh7 z_?2OjxBY~?3)Jd5F~k^aaBaN6A^+*HNWjZbZ49HyBp{=4?OYfy_f`Gn8+rs^w81gq z!iz+A=i`Gs=?sbElc7Iiv_P3p9fef#rOr3O1H;abE8m2A|K+DYO=2ss{^mXHN1F!F zPaO4$<5IR&y|ww|<+C9n+I;#C@f#{o)NpMb@512dr*X?tK38T}&jn;((T#_eHh-=` z{u-~Ut1T&nq`(Uj2pTisNvv)yC?+oCJWWaA->wmYkD4$0=xZ#`A=;~Zk~u>_^6Dhn`h<;K7ecY z-bht=&VZ_e42?pK6sb|avw}!>Wo0o~AF!vg&+rEedQegUV-EV0CT%ZTsyHZ;7cX1L zE);5=5k3jI$aCgBQp_k*)IMtd0cG+!>5U_Fcyv~!l(W!&4F)QO&jKu`i)s{&R4gKm z>TrJT50bCwm=uV`yE2JOm+<+1(~0F zo9kL{&=sT=`OF7f-X26TbuDD3dQ>GaQ=KJ2NSOo9;_zP;H0sr$1~6ja%BZ1?bk_E% z%V3hoF@`53_?a3C08Xee(3y5=6%N~$cAvsZVI3xJPb;sY*j>?ywfu9$bI>jf!jT76 zUr#+|rh<|GkbY(Io%EHtIS=OS+E|ro)F0>x)XL3u>4i^c3tUJK^pNbbI0A-YxQOLD zx?Yt#9aHD4kF-jYT_6CR>|B1TtCQVA}i|uc=h;A!0hTQLC-HGkoqy~eYV{mBB zU;Ajg>&p|5V>z8ZZm9G~RU-E^z%G5I2LB=FV;_BZ6^-*Tq(mZ+-E zHhFd5IaYm<$2QoUd|&|6r`V-V^3;?6WZ*?`TXA2}9^2C5CUYR)=-B_5&N-a7@D{0P(z_~hc8~7=sLLYIY&r;p^7kEgPVJ70Q038FmD#>`pK(u-*F~Zj!hePcS zsM!aCOALwA4bvaYECVc3EkbBeo;y8j4CDAJSq-LHwawH|gfTm_*=*U4q4vN3G1J|v za;Xu|V<(Q2Rvc=B&L&Oe&7`1InSKM|Rsqkfz{uNO8%a@qAYZv_TH%m0-0=+D!%J%+ z8`w7fSoF49(bE*^E)Ha(6v@-AhyyqzJ?$7S@s^FKd)%OD<@s%E$R#TjQ3watMqz11kz-{^$|jnb%*=w{;`s= z*McA&I;O=2_(PCaKLQhxh`-T0D_oW_x6Xd_2h|0!NQ-W-0E`N^V{cnm_@5fSG^t}< z7R0i>o1<@_<@Yt*r6qL71^8A z1)aW|a|tK+DKPwx3LKRLC=sZL%+D-q#CcWSd&{s9jqa;* zI^(a>O`-p;&SO_SE!>1&2&O3)X0R>$fhML&X&B74-c~9yf~d2Yci?4nr>idRYXH_! zdm;j{+wS#R8+U`#b?8Oi>MSbP;7-n;3P;u9R@BsIRY;vqSNO}pY66Dd3y^vgu+N9U z3-kBg9_jSIZ63!`17>R(aNZHZ%v3$pEGpfJ97~=2rZM8bAS<~0Q%|!oqJw~HWmuSL z&}B;#GZLa4(Cr7AcBlg?qub_luZG5^gHL^^lz0Um?>7%{@;1I#m}JCe+Smu=UruH9 zce;!KciPJahn=yY6-=Q(1GLnVH?)|&KGL2ODJL9-^J7c(-mN6Nl~!-G&E_Y{o2CvB0pvke)$*9G?b)-qNr$5NsfpFYy zP&~J-oRYnv8aD0KbB*cCD((T21g+kT2;8TXyIiUkNNfIPQm!3xu_D{Cw)F7Xw*%(5 zq0qHFbGfoD?_+Gm8Q3^T^+K-(qMLhaH-%kTotWgL7149$K{7`#KRn`7;xacQp_%|! zNW-3U-xFy4oWR3?3gQ{b#YRan|$t3oOGFfqVmnxBO@;pKfjGVeAW22X# ztK;fd^Ub!tbe~Q9t|_Xp2F*9YVcBKpd|lm`V7p4#)psi}^9(j*)_V!mM#{rEh&+li zJEa(6LR9uIxl`g-uCo++-qwLyn&7|CNBJw#IsX4!hO!ctMnQdOq^(Uu7QSP9mCX z;iXN)vXKUoC7560beo*FS5yHqw1f~fY`|N6Il;;3>yh*LdQL&YqnKSM&|)6|Q}v2@ z+wPFVOkWzB_;{FoaNc+DB;_ew=|_!yx=k8Lh-Br0LW`VJ@h&Xa_=yo3IwdNdTHS7K z`jTHu?}h91`DtQr&(Z$veOWjg&H(Lj=a?&^-zz_o-*B*ldB3a3FSB7Oa0xKXi-7Au zy6}sf2^O4&aS9YkXgvzkr@km_du+$$SaMwDY~Jp--at_a_jL_@MRNDN*G;idZSC4;APv(9D=Tx1v2qCY}Vw&&Q+8F z6|RyZQd?uQj)j(%?fI)Ue(+C)jyR+7?NxkP$Nt6ev%I~P>Lk3bDiG7$V4Z=#lp;|L zKDJSs;`3J$GIuXafQ2IXmNK~SGQ?azdg77c>f%eoB9rxhLhIH z4vgWVXLR8eNwgj7?Fqjf5;ZxPafgDw#Tho=VI;C28)qb<>I1!57>Mmq zR{S&)-)H_`D;JaVM7}`rDI}r^JvgA7AsTWb{f>1!wyaE*ilO$Q$4k^LISx(~1U8}* zLkIB(9cNXXFftDvH(owS2FoRu*&_Ywp_t=|H$36U+e~FJnn5nf$H0rjvt^r^9}q(#&gK;46IPs%Py*Z z6v*V~isYEIi5( zF0GyR2+|9DLfU*EqKSqYqtX>V6Cnx?Xw1T396a^t^*q*7r8R8vM&XD8#t> z8P~q=I?iUzhXz&OYJD7Dk;<-vwLpR#EmGFNPL6jB18$M}KZzif;i8hD!9o=kZ0hLU z;GFvXUZ7G4EdFHZA^x6ShNWbsvl6x6(c)-pI7IGY(ylE4?)G1Il`7y&I)Gebsl5&e?uvvAJNXmfdZB^%`4IZaw5*)U-R= z*ZR=Ym}#Q{S^W3fAy|EZqOg8;pKsy#UgP=yBr$dVl4-MZg;e4#^>NpvDXD&6ygT3M z=}GoaV3=_>BZya2)O~&jTX-;dB4liS-j$L^bzV@*Xw|m-JUBMl>>S;!$z{sictJko z(O!45WN0knB}Q_~!W;_8)^5d64$E05Jywib$Io0(`br8(A=JL;uWPF4x5?{^#dX}keeDH^? zCQ#BaxOpv;wpKIEAWr3fU2g`H^kV8$XYN%vP)jPE?*J0wrsiCVU_QK0+M=&Z2cv(zj5yj8p4HBQio=8| z+(gKpcC}Q3kHd7Kv}kAxFjL1z!vZ)0=>V4GhOy=8e75gp*R%;6#m^S__O&T+ura@$ zIy}NJ^+`l%HbQqo98{}GUNpQSUCg*i_ax3|F(SQM@%ZQk0~soGT|!kUGDoV8E0o$yk+0PXcNjY2K}nz)S}28AM2Hf@k;4p_m%(G$2kwk_^ViQjN(>V zyBlIki?c-hvIsdJsaE;S6DaWkG<(4#cyD;=1|PB)5iS5>AdU~0RU>T!oo6BtvXAn! zCN+az%5H$X0df3`nToK;@3R~r?(EeA`)rDOC6Dm6r-evLa3Yq`Gz%ha(E;R!OEB;~ zAmJM5&>dCO6b9h9;W~A6W62e>NV;lQqBH7+Br}n?rC7(bZNBeeuF#gmGp!_^HP_$z z4iz<^j7aqi-D;N3FZ(aTrn$MQ&S|jS#VfGo9iQCoS?0ZV?6xVZ+rdj5KirWEBNbCt z_xAj>{4&#L7-G`45TS>-pAW=f4hcw{2u4aRyq#E^SVKWDlw(Y}a>o0(>CaF$0t4TB zO8h&tIEWij&@Z$AO2G9Gl4=}nG7#CgC)bzl1#RGD!$FlDeqaLG{5grP0fJ+ATyG~6 zB3|NVGp!*R7uoGQx!jD+0<7TZSQ{S|u|bF}8)j!Cx!(K~?kEt}UGN6m<o)OVNu78lLyd%+bk*)vIJK~n@h4Pu_sEogEm2DaESd?emt>5M$3*JSd+@Dw;v7P&T8FJppB~VcZn6yJS07yo7;>X&w@>GR zSX}=lfJEF97o*Anbzo`?-5)L$OOdzcom5zTym{9Klh>z-8K23xG%>Q{$iQ{xGMjdf zDm?`?$R=N#&X^fKPMrC~PPgA?V8+;(h%GoH8z!0!SaitOmpFbvyLWZ6aKwn6v1^Yd zb^8vEhf5_r>5k7A8A2Vt{5BvAo2B}zLr}Z6v(M7}I1(11+qWUHrb1QLutXDcp|WQ1v#H`ThyaHBdUuit*W_Yoyosxs34)0@17_|?z_CRq z>~vUT+x}m&UE6UjAlF;9bO%$G!009Aqa$X?4%It@TX#)KpLJkGF9M(ajLLRL$~FLL z1C5NDsz3x}G$*t%y7tELNZc0Au1m&ZzwAfmB~X82^_9F(1#b)sh$IX*Xa*6|vE~pN zLGa(A%I0OqJ=gC<7BhNo4)HzJX5O*+0>C$^2pGrS(|ZK3%j30@^D0IA;lXz!IAIFO z{?4`Q6Ss=`ec@&?p0w;QNZcl*J=I-yU?NE7{Dp`-bQx<@N;!wDf9vuz2qwjxZl#{G z8+DwsLv$pS9GE;IH1Vc8AxkoGKdF@Gu!*=}eQWw#2dKeNdlR_qMmsO;l;Rvl3O3>*zuSai76!I= zqw+eAbUAGy@Rb5fkji%c;-c(YNB3$M2o-o1s~wt!TktUUFEBB&D_A=PXpz$jf039n z0}+N1;MwNke5y*(i<_t2wAn`(22y9R=jAO9d-!i-f{dMJTcr8b`^i*{s8Y<-r>*JD z85QG{B$$^#$Rc5t!W_Npdb{-##sLJhQsyA=`Cx$511NU)rMi#??(A@MFk!iNf&P`3IY5RazjY5KqWK-rqDmGZD$X7 z9y@eeBkl~*a=*ZkkHp4=Sn{b4d9qE0VLkV(*hc>J;2)8jtYd)`Srhb3Cp`IP-lIWA zHhO^*zn7eQ_YFJ8&_|LA_&5f09GaCReJ_0OQ*9Q_FTDGs0=&J=?taMdN&>0qXFOm3 zVL*`&&@NZItA2N1pmgA9f>Mk=a>KCUPspJTMl7 zR0b7ySJk(7u!6OzGw8Rkh01p;@Y1UG`8f8zlEx@S%suFXz#LsMHj|qjsH`JmBV$G; zp?l|IuTSO1;|u@L?#~XcY&k^2tv7|aNPja;GH+PHqY8`=d`QsbnKaxdDyr>3i>O? z<4gk0NPO$fhwj*KIVW1=wSneQ10ND(VW$d`JqE?RQ#^FYq*$b+Vk56Axb$dM%**t% zUxV1M1eApT&Y;%*M+WttFaT~2y3xh0YpcDPbU?6f+r{+zX_@`t4u zVQuoYYx~2X5xpq{fB4clm)RFv|5q}SwP$8f(*zhy#YV+?`2@EB*S`$_?%UyVQfSlaUKpi%*6RLZ>eWFtuoj z>rWcIG3-B(TjaZLc~0N5aHCh0_gu!<1jG~UCaXq)D~=;M6kpJGxkUfm$pl9-94cZL z+BCuSXre*N4q9YjyAF->SmJA&e7STFU!WP~>NOGsA z2x}QP!hpf;2QA)vLTc-8qy+3v8G^UVl^tAHX=OTLMz#Eb_dIRbfu|@RC;LTR z(mi`emnGId9dRWHEdon2Z|^JlUT$Y=a)uQiV9Id%1ZfyL{}uLA_~oPJ#X_FTDZ^#6 z!1-je(zuZ7oO)3GHBS-$k#YyId&Mse*aVZv)<}>Y{%}w?7n&ol#Nms@?spNWz6lRD zb4n;Kz!bel14}J5LrP*VZ*u(l*3S9^p}I#F+f0PXfP!cv#sM9I1M?31PS6`d;l3S~ zOSj$P^Br)nSK_;Co1uS7B3{9V-o+L>l{z;?gu%Hey6rTB;;7Q&2KFbern1hU{_U@h zdKls0pc8%QSsv0=cm#tN7%tLfB$)q)u(xcBf^FM{XJF_qrMr<w3< zLfX;7i%gfSbMN=xh3HEW;*fepf6@8gIosJWYK-HVj~BZlJJ>(<)M*mDYDL)pc3l5+g0(ULmu3bFm?|%q#4YxQtVa)sqQyamjgg@_08R(($i1i@25{!#J*49Bv1ZSSRgs~%%E=ASiml4f` zn*NytE2Le$V0zgAR~&fxzfgWe{P3&}<|!9STZp|Fva04$0jYTNufEeP+7{NP<> zxO_JxvLoj>!15MnvIQqqr(XmUg<-Kg4_IU8wR`e6x$GKPR+1FShoJg(5=~_NDO^W+ z>G4wnE1LNlthMoqduQn#g6Ah@XFUjL&@U{)WH0K3U!77ksCAynk*{ z<0oQ?!5ktpJgICSG*n@Tiq~pO1tD<9^m+1mwpTqMXl*2EB5Ilar&~=fpG2~J8U_w4 zq+V04;CeSyWE?+2u0n(hXGd*ho$N zEXozIS)1Hc1Ut)7KcWD+TQEGia7fV%2Jl0)GVa{cMd96D19itJtGyzGn#% z058GI3J3~9IJCNdy}A$U^lcpMq50Mq%&g({_@j4d1a$kRGzAuaT$WaOm)0X)28hha zD5M3Q7k6^IPJ)R+kJ;HxG}7=HHd8(=25&(R9)mK6!mb?$9eP#5YqHmVHN0Jf+za?@igux>Gj!-JlWqmSg7@#W*AY6tyfspgNc;u&yPq(iTQNFII{aJp^21gc}jXj7JU(aRTn3x%Z zEB3RA%D$@5^8*e4y9L0!{5eTP6(!(l_G0UEK=k z$I?`v7NR$(pJB_>6TMHN>3AidN~~kPyOOzyVC3;}N^1ealP^jl1Hpsk>Ze`b;SeMJ z+z!l3dA%{AaiCr19eA{m#{#-NRNoIM^J5;C)#{x!@Crnqkc!ceE{NC0DmM1|=>~(P zE2chY?Muh@twC4EcOJ4ZFXCg}$2X*ulXvI55X(N`>{j*-mcx?W_QHcrRF{SxgJ5C~ zn*0hkptW^y7n-~Zl%S=4&cKD9;{SD&ea8Ysf(*XQW~J~=)g^Si5GIqDJY-J~MFw4e z4yJ~>U?|oV+54(&p8Jp6JDQrT>xQp}I}!7?gYzO9>tO8@{d< zAKEv*Oj<1%}Ti68b2p*u8DR1Ib-4Cc}^t*;`rU|9`(AHtZ zj(>j$pQsB5<$1?zLH}PRO^-^izwSI8?yVg{2g2tQpNGPZ+hOwze^#nls^pV6?e7^g z*jN8X0yQFLm`ciOAkuk;lIx-C52sjnFU)lh8U#=N-5sCgDEYjCv$#J0^7l#MvBJsH zKvP+G4+rB9R|X6l6}|vM@20t$qkcdDw)>Q*X7_;{bXS%xY^jeZJ9Y9a0b_xpuLm|v zzRy3F+Ly6L#a@Y&9|LhvI~qCb9k#;z$09tD;VRTqS{3KF4d@NK9c9Hz_E%ZYUH+Us zI*BegB9Hh!>5So~-$Jw}q1;jK%yukmL6*kJn|12Bj1HvYxBfKvmY_}$m%B#}V&TOE zw{P`Axh#I{<*f`{m%@=O5Bvn=HwVFjoyAW51eImCr0$n{L2;7-Xag>M!aiK4W+PA( zv1TJB(QdM%*Jd?OqSzpc?GvNp0G_*`&wFBTNDU<~p@;d0PLij*>E~siSJ-Du<4U?q zujA*p6?)lY&RGv0xz6JNB`a5CGWX@c&Omf zr)1WFJvYExnk(Fi&_N91^;cY-K1SnzeN}zbFLW1IPz#~W`mUgcSFK*$DyMp;aQYUW zhqloV%A96=XCF}0LK`1Kck6-7o37MpDT#=#@4`tK*ZlgbgSesTq*nLosDXidGiZfa zHg3ng1DeX}z49aKr*YO!zY8MUjwB9Q%^z@&-KW@%m#X;dNIuwx?V3;GHJ@@g%NeV< zVh8`5^p`#5kCrfdvVbKm4(PC*K66jDCbP&SevoaI-Pz<+Fa$Nl zB&^L$S#@9#6Mp{7)aOE6(N9E`aND(jF<9uCG8zh0$$KT1&fr4(XT1V2fn!N3&e-25 z=(CEtB_Z~uAKLpvlx`0ea~|O5b~R9X)2BMX#rkWhzf74NHzB^c^s9f#3J*Fi8k^Pk z`f8@l_jjhqx;&7=gfXCpf4}Ib@g2+=2sf7PIsY-3cwFO}Xc$qZ z32A1MX?#q`R3>qaX-VyQ9}M6<+?*S7ss6U*(1w~)r?SPb&EmJ5c=6rr^k|1S?61~) z0J9_+t*!Xpd_m?Lvpq%HkH7=wIDb`Ic4CUr1Pi)6qpnHacG#5uE@~qgAw{yv&w1l$ zrqEPO7^6YXZm9^e8AvgWUT!3_%~KkVTRWB%Gt%V|5#@&AkQJb#(urP?Hs7zFxP%k! zh?*lEGQ%~3DaCsGHBvwPk6Y;}fU)OHl!gcWUxLMPFErYi5A*c&EWA=iqS`8*6_5q+ zYC(t63srjm>#IW)VPtUyuS_0Yzh~@2$K*Z)c|oFq?vn;$dHaQpH!CD&Z0g_S%#v(C z$CKt7F`4}pj!xw$p=ep3ZdKCjSbHBBttSkU1tdd_Jg1t!(0{m}jy{21=`fR7ONX;S zoTM9>0IS2NOU{jOlc8tc@>PwsIyJEX8k7Cp;5+W!Pt7DS*NBrlxqX(t>vkvb<+DUszQwMhed@eN5%Gz#v8I2eO-9nDKuG+ zc{xRZSdc;YRZ_*CTW0_!SnlEra@bx0mV_eX=aJ0htg6zFy4`juJmMGT+HU05x$GuY z_10pKrzl|!2^sn&ULo5u5?9*j7g7vs5V&;Mf(6@p z$Tue2g)?{%jbB6D?smo*UF`Z!xm4`p)5gxTidtyJXsegYmo_qW z8ye(_A#R`kv$3A}-*J}0vs2Q4%D$-NvNGe!M;%+EQIzR&>h)%3+byY&H1rkkMBix` zjD5;wP26%mq}Av#z2#!eP)Z>hx?6C>9#;QhF8I9?Nzbc^zru`5DRVa%TTp$5w zOUr$XTvALhiV7oLr_3`{N7Q> z4|`_d5u3L^A&GpvfZ4YapAn@UdVqox*rWcj#eNL`-+>S-Px!@Dkf9%v!P903nka|c zl6BVt3bo2sSt5G_W{2#rksFE@sF3sJG9+)?#D}}Lc!OG9B0S59fw5N)*5>?)zHyEW zTkD&;dm+XoRD?uAqPT=G;`12J%B4B?H@AFot|(`R_L#<@E-tQ7J=T*IPd!0u@E}br zZ@d`6oXuNzz+j1E*%QCgPrFiq@uIB#Ha(ahLTV5XD^34cbeJ9J)pHz{2k{I$e3g8MXiq zhVwQQ6_t1hLQu3w)sd0{Cm1wWk;6iyB2QM{o~XzX)5S=7g=A&}I^7oM2w2iSx z4tWSQr)+N_^%L3m`02|T))cGDSmfcqyzAa&{1r;2NV@IUM>(=7UiELLYPd9R3Q3#r zH^=aeN(A|p*+^gaUpc;{tZt?3_zU@m+^;1PfB#y5aww&U?1UH-4AoSqRDTk$Z z)}>l-|FpU!>2thDlcRZybVP=B1!PPZ5ZqqH4!#U#1vByL0woUvB`VM{OLg0y9IAUb z#_nl5?`@o+HkEto+4;dmSP0YGhbUPE+F5(~*^B$`zdno469~JV9pd*h{0puu8?LqR zTmre3v_Y|&RFl9FYD_@)d6!}yl}<&3{KVz0YfP-nCtBG79JP&T}6gtf9!Igd; z)S2Icn>WWP#^md!z~&_dlNT$-S~fL}@SqEPN~Af<_8~$)3p!}h5JxDxQ}H1;`-z|I zle4CRmWh5A5=$$ojFXe8Bq$Y_viUusXs_0AwGkYAQpmyD*Axp=k0kJGc*0a#qB5_R z9s^n@F7@F;Et+Mx{pBuZ_(^ckHF=yyZ6-RNuXh=-@PN|t^KmV!y#Z@wo#nJ`LERZe zXc%EeX5HC+ICS7PKg)oFsx>m-c)9WdDmS0dVx&+6Ju2Gylcboe{Pq(R6%|Yd+M53R zZ;ZVqko}-)jS3eEfR{hJ&L4-2Yx5Z7cgMUdp!z)96B}GuE$3o^{7xv=dhGCC3&7iU z_G^{kpYm|y|E)Z%FEzPE%uORsf=KFo4ApEN$$or3E(e2fuy{m!QPye9q&2{dnSo^K ztn!edQ+T|J9@ah4FOHy%q6UzgPM_%4>x#l-+Ojh2B`1O|+PU(U2y*E#l=M;!C1KRjG0AF4 zGE}KISe$e=tx?kCZ`<4J(Lv&3%<*Tz#2>u0-jvrP4gx&c1w2*Trs@(0MJ zS2HqWa+RLSGyyh@{OPelU4xMofE2CW0=3+R(Rne5B|m8+gA9`=v_avRlUqUp_;{c} zT~Aoj<^r+xK^pK_tAAIamsVj4d!IU&CGaS2q zAYVL?fTqsap<;&_{%V|+#=yn<`)TF1{xr#*}{_AyY zqc#o`dVQO_v4gPiD(rIr)R(O5y2^u>2~rY64!Q|t4DP&N_i-?UyLDLbsp-_K@$Ph& zlvI;oHNGIZU6wqeiNT)!Opg>g{^moM{s;Ug+r>R8DgLkD1ni2rg~i5NRu&jC#_#z} z9^%tqoYeOseD(pt!VerG`r=%8QnLK#TsMC{-1~S>SA+FQ;ltZ0l3wV3DVf_oGmi;O z?yD{(B*?`50D z!w{Ed&9nlcG!o)dSLQm~=I6=t?{Wl0)99Rc?BHeSc3oS;F?COBAe%bCS7Hq<)g4Y^ zTe|=!PzPUiZ*H-SsN_oN5KemY1%q_PKxyR)UdMF9S! z-di}aB!H~D+j{g{9O7jsVRA*Yc2`gu#=Dy%bF=yMOH^H&AJk?((Yr9F}Lkum2sJu}jb3kb&Q9syIn zV&dJ%Lb6qr_Dm~#;A%3{3deK4f__`u-Nnz**DGchB_U*{9^_h>N|7X7k?^h@%@0!~ zGVxlauUs&px{XaLzoCBwN}&={Qnue)s%UvxTp+Urp6WFWoNnFTvo;SJ0+y;&z_ECS za9@EMJt;6Rz=0Gw5|)ISaQpzuMf5cBp`uUAy+v-lQM(+v>L(nlOtC%94aY&GD=7`q z8=i!O{^|=?xVf+G9Sd2YDOi=R<09}8>f(X;tYa= zNJf*YDQauQK+=eHsj;jZ9I&{-vgKCWuu}L4tyzmTNFWk%QmgaOr<15B#vTju+Z~1q zm~7PY*Dmwq8@N&y?tSm?zG_q?nPQApR8Af4N~~5;IwOMaHRiP2WugTUI0UV!D9gV& z0)H1p`=Lc2os?l(p>t$Z`#8+Rfo_d&hI9I-v_w>|JUt@$4jik#l+qQU77LFNI>jaZ z+nSGWwozcn?#ec7DFcGDn;6$7k8j6?%h%WUygK8)pJ`Ih`^^IUBqklIPAIve!E8T8 z_43?nb6SBQU0O`fBUW%DHwDp(Thr+Th98LtlEV3Caz7eiEfXq$3o`mF>FKKx(zl#j z`NeQv-8w5{`56S`XInBD3d{Nq-+0}Q2RH;^doK|1eVlUEEpB`Eplx2Hkk&7F2T>T~Lc@;fI=Ab#%Jd0=oQt(1TvRK$r`5%6)!13(ROrzyk*uHI zd>!~C>PmZ9&mMG7F14q05in!57|NaCLD^ddks_W?>+@V6jG1YvN?nLmm_%pUbRVp5 z0&M4#>akgMR7a_mfFoNCkfW#T>U`7BWz3>5M4Ar*sgEqzKD)l_7nV=@tb|aQ<7JQ; zSaaqwT#RMRH5tJe!A2NnNcsJ!(=(WvEm5J=WbQPsf7pTU#1{GvL>8LZJD$=P<6Ox# zFl^q!qQ1S(*{0^po1fmaYr+E3zaf1SKXcM*ABkH&mMG#sGT8V&w(=(|0sNW9w33TY z4!B4nah^MNC8{eLi7f*EEO)sRFT}n*gzC_}#DkluImeJo;lR^0eGBjEGqotL+u8|_ zt=!t=cCjpfQ_%hXSz02p>!aP7QdV%po}je02+m`)gd_r=UaQ^Gu`|2Nk*`-*i*&mO zh31hv<}iZ}IGFr$!SQ%~8%d?^!}=86u7=-3K_MPe z%7ny8z+L#nOJt3}e=iC-HL~GsXuewt_PcX3ESi<}vmz3F?4V^wT2%7p(f;eF=hPJy z_P|pO28F?Yju?Px^9%45u=AxDJ$2|vJX#oQ^8*qhI4Ca%^M0Omwyh<|l z_HC(l+pC1b2Lb?mpTZ{<_;>WN64>P48?6jj6JkTeIt3grI3-v0Ee_2_7ul$CF|G?5 zk%m8+AzJ$k8N<=dCGW|SOX4xc0$PLM$u*yzeLm_s34RDOs)_PXD+j(qy$8GLcUII5 z4}w5|&#==Hqcr$vn2h-typptYypqFs@(&mb2;ys+qt7bhglo^gBX4Fd5-w{qD}klt zarMIMGk<{QcjJqhfF@<97Wl_q@U7w5Ue$Rvmqbwp=?XocBZ+siQJm3%1RK)+KUjnCw!XdJ)4Tkd_4>stlB_aDw!H|q1Z z{(;La#?EOq=1kSriR6k;)O#2=Kyri<=@wTiz^euLxt6YW5J^Nz--T3IoUB`MK#1~a zk*Ky!tKgx8Tk@#J;m8CEPXZ@83%O^*qu9o3ehNJo=_*UxWU74 zn|PZQk<`Jj&+$4PBwRejx~*sTKe~OUM;-j8j1#Umx=+-PU+0;0#}}1MUtZrw;1kxb zGmPHBH8EYH_3Rweyd|}lwwcP_TGvHOkt!wlzR2f$Xp76wx;LxNY>{LMNGa1Ha1Oub zdcTA}c@v{IEB`SWqZYcxuQR-2S~zxdn$@x-cOyi8=PsDvh}dM{V#^ANS@#g0@4nzD zV+ktgd<09<#=I+|Ti~DfVGe(cMzGf5+q3!6cYbMJGRPTuN0^Twn(Ekik4)*HttWA| zSm8Dgks?(fDXESh2~2cB{Gn+_*m$O*_|$%Kmo(mp#o5$;QR_6pJO60@jCId)Zq%&& z)32W}e4KNA$>}+p3I5zE^27PlHqESkmcm&DO`BZ|TFd+P z`&g{b?fTy$gefrhDCFlfHF~U*tuR>f1tO@$u`V(zKa5`so!U6ldF!LsT8Hf|)RV5A zSa``R0txXE{t?IPp60zI-F4Q z-7YRxgUvcEr*y4S1{_5P;-`)vJHLBD$sV&xfTP&4*`PRZ<`pVftk2@US@#!zhS2bm zhv_P2orf{RL61Z}-0%RUmN0foJ<}Sr>4Vz2PMpOVoYH5-4?Cn#e#!UWi}uf9dtvGU z)Cbs!wf3J}7}&>+0qS*%cu4+*VS!9=53tcp>3q7BB^c}qlzc+_6U>{6|<&{YHm8Iz|ixfQZrlU^U9c0ASW&d62^Oz10ozg+KRV zCia3D#Wr@c7wQUz5L3Te$7rcUSoi zc=ENXk8&KvEt*#tA~MYpU6hrIxmnr4?A{Vt~b9VJ;#Ig0P}@Ue5cb;f{x`lvjoXdVH#(+&9yo? zuh3CITYPTtqIwx`>wYj7J`$=c6#Jaj$3D#mraxdOo+Cz%v#!SkPAzb6Ek+lUkf>M3 zYLdEIyE9lbCC~3S6qTX6@$u<;*=?4^sIpKz;)KGfzQwmnw0sQP(Z%Y<;k5;se2cL= zs*jGxFU2@SobH3~1SZPIqD-Bhv2+#BcdI^)dT=g(0~7;sD|#CAgic_O<(i@mm#wGL zd+N`zAY~?fq?CLofD}0e<%NO*(tPHgh5FoqfR-PJa)mHdS)~bPr|v)2ct=UIV5qt( zGp@_NW?ol}qI;uy;Qx^#k(F0|OUsgl#DEH>pEL8bG!zOT-BR<%@M$g38WY={FX z8uO44m^L+lE#&4ij;D^V3X!Cn?#t2%@ zDtWtl@&AvQ4*xB#pTX0lRdmtjzU`R1@UmFflBdj zudv2`Q`oI!x?Veo92dgJh^?m=!ZSwf(Yc+KC^?R3C!1-G%J8KuYiOEPm@7l+=nF{X zpc{C@Sc)C-Ev07baSP);Zq`FpWk)&@e1NhFLgi$QG>~1Rhpv zK1uDLa`92oNIz^+lXC8ZV65T8cLlOyq2HG4L5nDi)szwW!j|Jq!$=yr0i)7cVoYmxIhs4WK zo#M!mjer+8y~P;oJumwJ8@~npHdPLk4V~CNe1QtLcR$tc#d7^@(}>5f0tqvjloa3j z-`9Wr^gII}ekgmM_Fdj_P+}eMA!Xk&8;<7y_f@z5eW!rve8OUhrtY^Po)giMHKNK) z$YPmy7DRuZ2xb%@Fz(a-+6r5U^mWGI<6&~`gx0jx!f7K&^XMxf9FYC~Ps1(0Fs}XT zEAjf--+YqLJ50*O_PU1>tKD@-)A+AS&f72H>4uoOeJt4;dDW%54^_SvQt0bpdKV5ZVQ#QI5Hwh$(j3#?`EU9B*^}4y` zON<(w>Pyi-o@jQIO#WC_(PQ}8E12lJy)jhP{mytgILwhYzP-i|za3Hvo<4KEt3P{* zJ|M8upPh=h6z#KYjDAuEoUEm+=JtO*kAafM{uUH`e)YLOY0_TpI*8A7_VcqU zwu`xT*R%MsQ60X6LB8-*M|V6^%TJBkegpT^e(sYq#c-Nndow;T+V-+>bP@IxTM!c0 z^5urazck_3+K23B;^Wbx<&745hTVZ!D^(M_S27s%m*b24fu@oSZS?gGO<)a~;ln+v z0fg@2rf=aZw*2-Q6+f{OTxnPDaY$*Hc*>BGz%|@JHI?19CPk-DrTn{GPu5MI`+%e-yV@wSO$H9fUjzSz!!>4j9P3dh2hkwghgh8z*-6L08(-?JjcN>S^L^j zh7qdwr3ygN?9s%;SX~z>`xbd)?O)+?Iv1Y*4FqdB31=QTKV3t~OPv7Fu zYwv#Zhp<1yobIh0X-U>Jdg0hG=Ug>R3%oF%azd}~$`bUoxJ`uaJGZBiqASCcxiqSA zqYPR#=(w}+4lrF?LaJeZk>P5|PiUM+x0@2aShT-CK^s5~ybVjLne`&dl+XR=Bk0pXODEv){ip4?^VjZrdC*bR6Y*&Vgas)Q62fd`h%+ z#;Oi)Gw(olb*9B2Zi8(T98aJhT&1=UWg8~RpVbZe_4`>)fGv~$%x#Iu1l zqT8Ga85j_cSod61K)lvMo3OAH`tZ+*AgmS zPEiUmdY7brNBLKC)=>=v?l!siw{-jmyZlGNscpbB1hkq}2QEN?){jV_Y4aDS|I#N- zfer^vkbf(%>a{8idqqM{-K51S5r1Tgt9a$$fQ z*ark)gwd{gjrC!E8hPw=&KpznR(D>iKoyX>Gtr!J-;c&f$c4nvoTr{bk#lpn^jjFh z3ccClKW=i zzbk{BSveuSBYdjwIRhOpx7I=7TfdQ|KjKhcbf452Pm10G!m~c*ruWzAS6pC;&|8&k z>>$$vF4^LU9q`nw`WEl%YCF0tv04X(in0XN2`y1Cv6ZOKb>Ikq<8X*5X^nNjMc!}` z54^xafGkDiE4O+wChTOg~}=lcQF?B`jLbxS2Gsna^|X0L{m|KEN=XrgMv! z@u641W*bgVl<%nz879A>dngh~#$^5K*Lwq~yn@uSS?;(q5Z+kaP`3Pj#-9o!m4sl_ zEsd3Wv1`?_GYq!$X!rX8{oe1D(>328P8U1c?s0^Nh*rx0prmJ&fRHHJBl?m8|+=x6b%;dErAgCm3S(sD+K+S99OX zXXh$TRqM>b_k`+{4;Mw*-wy#}%86_z-?hQ+Yu_COxcb50UqCf(jc_y`Nxv{}8_pDz zOSdI5vRUyYSG^g9_9(t^Q@;HzP;76}ECMP&4^K}O2RFaGC!DWc4|8zfnM0K7Y z_UqS#B9^jxt|8!F7Z+jfYj+>?=iHcN|9Qwwm%`sazs^0)+~MmetY$yqm-Wip>gvhd z9?ITgGR+x?TQ$Oo^xF5agsVRHejA`V%1}>=s#+4lcfN5`!$2TK#}^UImB2IS*Qn~l zU0{8KJWI-3b?K9|Pb?X4p40KK(=kpBMB*8*)pr+?w$S2t0@3Gse}#%od7)&ryo3pt zxCR{6k>2W#XEs~mbAI4c(5EAMwf|y)(MX|8w{w9~V!@#F7;IPZ^)iP3VcRNe6sq8( zk(y5;0q;|g8$G6^uCYDo@`ZYzYlu2SUOExh_K_gg!>Q9UhscOue&>pWQL+##@$2TNtB(Qr0sps_JffR;tJ&9bP6G2=)9|&`6pe>gD%vg3dB2aZ6!W*@mTy}NT)qn^MTs;FHm>?FsyEL^MuUnz`&JT<1>ADaa$84Xb) zYqA+54i2kEnIfYQ^~Fs$D44S58TytK+}q2jSYkC+Zbq3Sv`VE20<6udUc?V_j9Boi zu6XqpIrEBoFh0fbiSfOb?HSHU*60@0=+#~WK?%|dzfVrU5edz~uI-XHNegfy2g|Dl zA1z})Iz8vm!DEA07U>_3d12PNliOkAgJ5%mZI})Mm^FO0FdzT{xZ2!bp&qcU-(hyY zK21@%PT?s)lIWBB$u(*YDbrm2vtE_mw%^!wvn@d2C&-`W}bX{QeFet}lB1?Sn& zr~A+ybT_84Hl|e=%>)qUzBVC@zumfnG1HviB=UXZ0y?s~8rQ5O<0d5%fcH5@=l8cn z-Bv<2n%pnR8wQ(8YaLB$Z8@;cx|#PC)k$?2=Y6FV1$!=MtQeK|z(JJ(705?zm~88u z=ms)eM;Q;C{f2Khuj`%e`drB*hXnQaVK%nkr?zD52K{0WDxdb(!$J;ZCi;g&&`j*`y`RAUv6TkAwLDJkfx9=HzG8>bznX>)dg2 zd8_bEzxwaz_tP8e2^UuC-_{x0qjqr|)T644-FZ*F-!A}b3kX{Q6Q28CZ|_EgADc^| z+8P<`gmB=t$i&gGgFa@(zAx>4uV0oVmEMETpeR320}O}crVw!G2t%cR2qEm|wM?5! zr+6@6h<`76g@k{tOyaJcH?5s@*;iJ-UG$7)`;I@g=TP;geg^fJW7djMtps^DMZQ3@ zv`M!oo9;e2nmTF=GypfBtr2zL;V5M2vHhy&!(Sb7yLId*AG8V3I7UDS&zeKfYnRAU zL&@3)Y4e_rrMnufpJK1_A-53^u&lW3CJOP_cN@MzeD2#Bvduo$7nHa|AKnu_k}d!8 z6vE?)xj)}5sJ5H!1m*Ik@)7Yt^k#>)uk0z*dQK4VUm;AP+wG&}`OYyzfAko+>{sch zRgxsdUPK6Q3splpWk)o=heg#(s;L#?3w;#7ImFseD)v<`qGx0&5=fNrWPP)<%*hJ= z08JA>RqRDb46krRc}%9n!<}WFj+k|Yt1!BAMo0R;oUW$`%IDf~Ba{9|@A(gAQY!h6 z9>nAcojJ5C!xwR{z%4QP$C3}kb1VV`1Uk{EhRg2WPz>M#&%wM7ukzw103XhAFP>6y zy)6&csK3I((^|kTfbRE0c|-I1E!5@7geubYP@BJPMGd?Dy?~E^5^EU)-=VmrGl|w5 zhyej`OcKOZ0f?R~a0u3R1@B{<7K`u%I3_*$iw$9OtAwA@VN*u(SNz7{k}~iFCmLydFy;W;)5{U z_qlNZU0OMY0`}{?(eWvP6anpNY^cN0TQxu}!$q^v3P33m1V}{bD8Jh&dtbW{sDbaS z14QDIi#5tfmAl2b9rZs|^BXc$u;!7Pi{#Bm;r)Ggn1hR(+*{`)3|p+ihI(F7XyOpR z*)8OVW4<{Y@vJTh(`tl4u6bH4!HY&k|T>_U;30 z@{{~Onq0@)8JCrn?bV)IAt?YdrhQ+9`>AIk$)FQ{-ACn;7Nk|1(t7|Z6@c0te4ASt zGVC7^r#odZvy|Ha19r}WIcV*24Eid`@@nJaZxs)^AaZq$SUCXax&>kINZnd0I`@D+ z#`buj5eYLKw(H=LFE$iUFR2m@$I1{hWM!VYDvTVe1$$IE_i0*f_JE!CVTDMLZ1IKm zb^{_x3-#t$vWxYDczDXI3(*3!tqO&aQoz>TIm1!Wg<)r}2!$z!FB; zSnSL;S;^;A-6HlzS-w|um`H@DLg}o=znPz(IxXx^xg&`mj@JLa=b}CzSo0X)u{b=b z=97OIAv>{aHfRtMA8a498QDGWUADhtZOH_kA?VDVx?8OI=1x+yD3Rk2-GLIo1rL(f=IiA8aF?u@+hSpfI! zGciIgFQ0h%0opw_U-eC-ya(gA9lq13@oy<=gB2p}A`rd8`776h|E2=!7mjxnyWi#b zvdZ&=clS3Ud`ZkXf#_=VyfT>Pdh}Xw@ z{0^djA(aS|GL+b9I8(IX{~uyEX^#63v13X3e-XQ6#JljXJ&bieIW+&6k6*Sukn!;x ze~|pNk7#}np$*y`10R7#aOZzUC>GpR#nRVcS6^J&YY&eX+on5n=UwQiFPr$eQ=tS0qs$}@Y;ZZv8L z^2wIkG>61*JsJ9&YXIdS*RVjPY9G@8XHe%T!VsrNLpaHxODVvuFvNvM*Ji~SsvA4y zY(14C7S|+ISlpKaK|%dd$G;>AKe~CdaK~48aPb~hM65l_VYM$1ShH`=x=)Xh4?^_W z|I~AeO~t9Ym7s9q0MgPA1m)r#I$D=61o#d2`%N#^@22*vDnkDb-y-_1IUVC{fI{pIJ<7SuES$Ql5SM54nPcFY z@L$C4tbur1CDU%N%ta+IbJC)=(JTxgj1fTntLk0QQx{bGuJ0P;$Yx))u{_9q)jVUj z6<^^92iK_oCUeAcW8>9l=2LLW$*r>DV}{irbKRsNRFiy0s(ve{!sqzqBu}>>Vpt() z94N>auG;%9H%UP~Y;`tic`hBeJjdmUhHzw*Do}7j)pC_tTTJ+;=cr|$Z#Bvh(4=>j zFks+kb$;Q#ZjZA_0$khQNghA9G+x(HIGW?rb?M+Ay@P22;!A}y1Z-9>Z)Drk|4Cr$ z%p#knAr??T#rKPzV8LfDZp)pAtQ=jS1Y{}NIucCqXZwV%QBbFg_%w=U{TloXey#q! z;buMvU*fk~+4orUaO#wkpg2iE5tKbg3c+486}>eA@``Mfzh#TAg^rUQ3+S2s`ktZw zuijl_-bpN!{&u<*qZxJO4Nypuf2gpS0_EW`R)NC?^(4f_DFjPn93hc0T zYki8krQXO!$T;J#!QFoWIB7Ur~ZqYa#I*;>+4lkdC%PHG&O#- z+|>5zXdSii{GaR8gWME}HU_tWkr8ko{8b5&tEHu6`V`xyr1OuE<@Uqj_lnOjc@lFyx z9EZ=mMgM3bPPF(AvH0Tzzw;%%Gkg2YXl!mex5QBm=S|yIs*qxjc0ebwrMb%-Bhn16 zAGa1PCP1I<#oNFcOT&m?i%~?)PE)l-^c`ks{;wF=oG%r{O(^b!q9s_MoMmAAAJ>Kx z;U`P>!_6yqj!sl^3ZLZ|5b6AScpxHx${i(c-fDI9!`lrM{-IgPm#DfJ%+z7C!L3qa z5iy~drK>M5`c1s6^8pvX6X$}vX*u2b{|GzFsH)aA-mgV>NOwsKf^;oFKu`%0knT>Y zMaM#rE=B3?4(V>`PU-IM=1%wa+;hhnXP^6NkKx!~T+{i?_xZ=~l|~8H%s<6g+d*qF z@4J~Wn9V+a;Th57>j7g;LLESWQ|Ncp*|4)F1SBzM5-~lez2ux=*CDOksdFl*AF<=s zx|={Oe98WBjN_bKIyUC^0evL$P9Owf$gj&3agHEz`xR;Q9P=DZPyV*j9|}m>-v)}@ z8Fu16l_a0rog*NOd&gv~HCx$FE{e5J(;aD?r+KlUQS<9|@9S|chIbKeSn@qA zMmg}Kr1Hfq!>+)`NNKGB8la{SK8nH^J8n)@4o^1d3}~-6jn)0QjFGC%+Tr*?uqrmieGTwRrY8u zW_55qLBEvuzgPfNR}r~djUNEeC{p26ynGq2;7rEy#* zr-uH&LyyBh3G|THc)h^2SN|Sp!z;gat`}e3|35n+67BSnnjxfv@bRjS>3*N0h#8`W z4Y_+`-)Vt@aO2BoD(aNKu*fQw;zbS2N+YBM6At0z0H!LfdapoL>_7%>9f+!Wo{7hd%iPo`y4%^jWW|@_ccbW2ja1 zBT5ORW9#*^2}SIsZ#Ts-7TMqcZ6pr6pH6!Avxro`gmdRp7P-MZI51DK0@gNA#Ox5) zlna;eV8VH89hRReYLbE6EiQhQOra*Hv{fOzqJfiW=i$+*PfJvGBJv#nvR_~z^)ST$ zfU`xBWiPE3921Mxz*(R2Y~@l&f&LPlWv6SZedV|5u4uYpfCRJdY$zekMBq2C|I8~h z9;}K07b$ls3v;tYu7DrHNbFkX$cHQL^2MUenYUH_!nOUTJ#O4WnGEISMK#`78KLy=XcCO((~Ebk5wT*Wf6)kf9{25+TMSnT$`Y0umS_s8axy#qz6!YVQu$5$qp$H1^5<4W<#mopmVHBpOfn9Uy(cA ztU69v&DRGK$@i#(p*ikoL(SWIR_$&V$4Sv|y%K2NczH;CJQ?kgIW!uGrFgA;UlUCp z9`bM*FE6l0Y>$$C0TL76Drn22FsM%!3}eujxah`q0||c^GFF;bu-1Dou)0caBwYhK zv>7LOo5zM2V3^4Vf2lpCSv?a8HW6>wi5rvc}okLij+*%&Ci3>(it?X1z z!l#U37Gle*QeD(XMy-JEiD}wBI1ugL&sTj3`D2a@vJW>Jhx7ZmGwh$ad(7ZHY4cns zotHmT{Q%`KYlwff$T37V^j2~OrHuX1`MYfHMXAn6H_0hUr=7pf*|)`;OwIrpo*>8_ zp_nysWh9REUFuZL8CS=5h~eZ}z_4nbLZD-G|nZ5uxy;Js>-z zfc?}n+tll^++}xOp~Fs^iZ&dwqNnbMOy#A~){DL15YpYF$w2At_M>JgQK>UfpJe6G zS>zclU3+JeceA|X{wRH>l+(?8AF7y+)X{N_KzV1jwWibt%moNHn#lCE#{JQnDzFfz z!L?8=WOl@VOXn37e;=FH|9{6O5F7{}1kT$cNMHy+x;UXBq<#WlHDC)?0@LNXHX78JU!LIGmR`H=Z zT=rmFC2n|_xS+tzOe7}6eip0L7NeZPVHKs6TqZS(g!gP28|!D~oR+pY)k>cvbQz9x z!#(?p>7hb=6EytL)nt1 zJ%;C-&F!DYgc`=pb|L<_b`&5cL|=>v@jXL9ZR|`o`qZ4*WHJJnuKSrB&hE+Mk&nfg ze6yw`h6RKuixv*JIL}2FUK|zyhI67b9b{X3qbU*IxLz)LVV5lxcWi}Co1@rb3JOzR ziog2A7>0bWoNN&<-C{8Dqj`>{VN-HO#L$yI32J>b%Gwf9<#8o$&wdy!Z}0)y<~U7meNnj^<#S& z>G|Tjc|NNJikQy8YbM|`gr9=8D0v9E#*XYpnd9Q z#SA2GQ5=dj(ss%rX_=sJ9(T3~%yAR)C#M<^YlP2{M&!BZNp(M;o^dDGMQid@ob0lo zYUzTJHaac5yER0UBYN*ym?$~HD?FqVP+PsIz`Iv+@)Lim;G3XpZ2TGhRClX%O#t`6 z-Q1w5LcO{b(?C>@A`q=`t-hs8(r$LGow5xBKgOkM(k40JL$h0ikV$FXa`tJyMl?$e z*58*HJgBC_5>r){ezlmP$OX}7s>&tldD%I4$MN1=pPuzYS4sd{*{z7!3j9WdV zZm^V`Qy_KSBp&btF>4iqvCAiuEWMb9%wvYPO(8Nky>t&~zFAnv$bma>J9k_eO{WUa zDrpQUW+H3kw>YYs%*ysWOhrXa?CLIp)8$2+-PnZ|`U<+OH71bdp-*O9;V*Od9RoIr z_jwU^5Gok^FJDX=R=|&QvLx=%R1PH005NkcE3?J4Q-T9r1nLhhg-$ihtQW1dB|Wz) zz$%T1DVM>15Y<#I{4ta%wc>IryE1~p?3YanFi4-6dGpOq8a>L0?KeY5W6QciuHe~6 z`z|m9H}xb5&e?-$Rb6XBV(#vAla!%w!>o7xdS}6Rmz2YUE1+Az{!Gx@K&#c+M`|Gg zvBOQZ?5V*n2@lA)jvCV0vfwhB&ZwX@YDaDB76c-jIYBj^gOh!+J>HLCi^IXMyTi$3 zZ){dggvizh=(}uGsFr5h)fe}uH>33N2!~x!_wB?wS)O1~GTwyo_vgr3kY#Uigt&=) zZoYYGy}3Q8__tzSU|c*_(mX_1BJZx52%R}Lc=WtH5-?MD{p={d;JL?SH{x1p?MLNx zC)XgbDuGLa%Rc!r7gt-*necMX&ez3yM#x}!h1_md4zDBC>16vanf&k2K{*h=1_G7Ou$TVl#JZDpD2Sp6AkCv2yDWkx`3lr0+$k%9>mj&2K7oU-prwI3~$0-fmD|vs^D1TR`hd;Vq`en35ZP&D{33U zw=6g)#tsHT@A{hL&T6#0?F(vSgoDFcg%sA!V_ic4*HhjH2xB4HvPUC$^>F>*)UgkA zIIxC0E;mZT2?#d7s3Rd~YYk9c`GKW;E;p5|_++rt)36H-?inj;g>qWrTkD)ta6P4T zcp6cGQE@h?{b(;8ix2*s7{-Uu6J9z`DW}#qr!X+f9t11kLeX&AX#q+r5-@UWyj>9#^vAFNdw=?)gAp0m5}Lia^@EQ`vFhB_c{Iz&L|!Q z@HT0$(Iytt_^D3$FB-1B+IVkuD#nD^GLpc2mIOM7JYJsPdvXuWdsXB^jOxIrKr>O8lk-ks_bo;1^ zXL#oNijUgy^=J=cfkA2yQ(Y|R*9#Ji1@GVkY7RXF9lk_CVCG^;^v$wUT?(S7Ud>%U zYYQ`+he%1K^tk5nH1kbn>yp6EYT=>}#`mqo%|jTo%E@2!0m+`BB5KC472V zb2C)vp*8P)cv`?lxJb?B-i>o8*lp;v7J@Jqb&(0g#4le%@6Ha_8IXcZes zK}BJSf=X`x33LGzsTe~|I-4eTpmn(j7@@y##fr#)g&$#*GL2B;MJH71K21!u0oh^^ zc_jQ=mHqBR;Z+0W3Z=)Iq-4Q?uC=B9B9PSjcBuFrJDXlqA!oCQGLu*6 zbjho&o^r5*<%seXWPrf-+Fz*7ZQ&@9p28s`@XbPHD~+OPdOPBS$;&16p}Hjih3w{= z2SInd&?kc=J@=d+%9R@{89^CkL)q?Yr!OXGfo=w|RQ z2cp0Q#V-cUo)`G6XlV2u9&?Io-#mRlPV5ayc77^Bh0FaC zZWpv>v5kFqFNFq%?{USzz_)OC>JH8C`eWWTYP>uzKs(h@-u)!E@2qBc zzyq_PZyq?x)19zWlr~Pj&0Um-uq25{nPy8ppAwQOxC}}f+_$HeHk|Dwz+PK+UOM3SYT)vsF3UT}I7K*}M?8SBgd&pPuQ+rHkKqx<&E~Z=S!)`EWUgw8 z=+yg}#FWlxOiOcw2m`?YIRoU@?nZ;WcEVa=Rv9&uy=BpHo~-6(#-+sO?}_Tpd(#ZV z;_%klK-B7@r&^yvZ8oh(IPn(^`V#el5>lgR!cTLy4}6_Z~9_6moRuS4|a)7S}}DfQ@wSAiun;o_0~fQ4(ov=QTZ* zd(;7wMK}m{Mh6(D3zkmqgNutQCi4-Ss6$29d{JXtbQ7#ZG69C<*!l~|WWh044VN1E zQNiT6eh>1BNl%B1Wd)8u2++z{Gh04ZL$`(Q^yXjp$ab9y>HZP9qianL8y@qn+%^-Zk9&B4Le|3f&-maU96~A5-^Sbs??0Wbx}J?#P;e|x5)?}L zm}-c`zKg}Oi&anTR{NGnl<_rlm9<2d+~x@agkiV+=IGuxAT*_{|G<(;Iu)ufQd|z?=qdFDiFJW^O z8|~NzjR(Xod|6KC^1R~^)quwd%+@dbu4Lp83=Aq;oc))2KYL43rUEdt9IUQ&5e5ef zkxiGY(23i^{UucJP+|zl{o1cv)N$KcS!>z`$@&l-y$BqdhZ8_A;Y~pJSq9@BQxvDL zC`vt1#0meXjORq}V|UHGZ+E#D5-Qjr6N+@@QL#X@-ymY>~j;U<0GZ>u@;4R|W+ zivXg2g`-8br%XNwVskSw3ea6X1!O9$txz|m z*7?S*SWx7wJs=__35G~!?J+1+TU={x`xOjQXrwB=OciW(tawH79lDJ7yWw(E6YdV) z9WUcV^a#XyVk_o%${{A&pt*OlhMTKZX;3^zF#AgDKr12*((QW6i;11_aJ114b3S$kGIyulGJ<}c)5}q75eXpR+8UY<5q|Q@>(%@-TYp7)H4S z;lh+U(Rf6QUbaI#-|S89=_s&$>+qrKMxi_MKwl{jabEp*`Vt3ItiD4+MU zhEd4(dFIV8rut^2TqNELe;&EdT0nfz^V<68wBfUnduyve;Bj6^`5pdH#POYZkRt87 z?5s0BS%U2XIP1Qe`$5K<#sn?IftdHmQv9iOwqE8r^LRg;iu=DkqR0K|!O}!Q^j;c!x%-PLWre{`Y zHJlH28Jx#g($X_4hBjYW0n1kLS6=fv^HV~_@-Kn}Bv$OH2GA64W`~788Kl$!=1ASL zH~r7^?i9xy!{|txoW~Zl` z4^|of7Pv5?!}gGvmvZnE%gb$YbX8fHK1-s%NiX$W3=ofKL2Zqu4F-Vxl>Iwme5%h`xgd!_#1q_M;lrvtR3t-{K;WSiG{v{-D9SGlUfDAV*7yIOh zmAYh(1mTi!yshz}1+&XHK#x9^kl)Xyn1LyL$5Sk}hLHoK*7Z5UC*5ezlaFO4JrO^+ zK>Q1C`n>bu1Db?!edZH03mr$`X_k%R1j0u*9#@RxHlm; zBu6x2BF~{eW<-Z8w!D?HZtZjA5%`s)Q5+}DWT(S3>$QZmg)-Ti{3;02SH!zqWf@i`?E>|iPya#{R-y5{^(qb??O+x6m*2@Qr{;17RYFeYY{P8~F$JDHzg^=@5(W~_ zRvOyqiM!vST>1!L_-+gYy<5kXt%a!3MK-Ww4Q0Z0+c8Oa-|=nICOp;ZJF|c_vW(;! zJG#Xm`k1XJmK}r^tEt7vXF5XK*(sKDhc*jR7q0H=RVh@$$Rp~=S4N6TRkF`q?~xh@ zy^8zg?S}n7pKoyUZVAMTMbBU9`jq}1OrICgUi@!#y? zn2IVeMYu5{lX^Y{xG?9psa*5Owlz9Dn@TrAJI_5Sb4?Rg8*{Mr29}b=W+kCm;J8@yj4Po^;RN+zB=q|05YP0E=@Gh)>cvOe(Xp=` zJgPTNEyn_|uFrA_d{HTB4l;bwq6d97F?Y3S&gpxCV~el{1G0O}gXg5~{XY)^>>W|x zP3|jynCyD2H1fQ9KvgC>I+a?Cha3N1h`sCU4qMdqIfMs}8|J+ZZI{@Kq8^W8;G6x> z#|Miq%?iiPwrZCL?;ReVp8?u85N$;LhiIb_d^e8R%Mb*cmi_*_)cLuUC3p@90-f8> zr$HR{X4dRSxKyLRTN(;IJ=!)BudBK}Zz(Z3CF#QmnGuWvUXX&6*ZkBWw}zO6lB1kp zpIdYoLZ@gm4aH(4QmPb@eL1{Q@bWO-NrD|3(u$2Y-GQsBF`8bsu@x+w@@XDbhiVLF6(fxR-j~t=x4hm)5v?t7e^V{ z-p#7}CDmQdJXwqAi%cZ1k1!hvNRcD)ju$Q(ne@es@TmbNAf_(sjh~a-rv~In7#Myy{K)tH9 zELjZGP;s82PFGh&r~?5X)@HY`=_d#fP;Cm#>gjeO}NKo)I2;wb!Iohj2-5cKTfRtr9 z%7d3<-rq~VD?+=Chkqt(jg+cEF_gR_EQjI%8xj90zgvMZWeJO7Sqh(5R+VqD*%GTT zw+1q&6keq0R2j0a2&XC&wf5=quNVt|{!C}agVwj@QA*c3n9k*;NSyNjo(W-?f-8+0 zN;=ryD*`@rP7ZUMCL~kqk2EwAm4gTjBkUH1A$7eUO=b5lIs*H2#t$V!)nH%Hm7kJ3 zmN5pH3k$hyvN9>HXJij!(3v=9-P$Zs<{){N{Gw>sb0fcQBO$hB+;Plt7COk1dam$J zDw2W`#Bz(?AT+G=YO^B#N7lpF9z{`51Fz}Qbx+&__B>&i1MF6(c5h|6>bCS=>lY~l z`3oJ4>GdrQ)lF;7r)JuX_7L$$uJh{^?N1}TPx3N+DY7MalLLVIku)9t+1(W`#@o9vC+9up^Mg$`?Hdp zyII#S(ux@4zuKiG(X}V*1uUJ~m!b?S28JD?HnlUGssDF1*&9>9x!o_XAFBFsf@XIK z|A^bO=IF6n854AkUfx;$yn%teevQ1WuRG0Pbj{pg;S>EzkM!=W1%%`X?%!6=zeUvF zorzMoec8Xa08gaId6v%YzoZR4L@nkPDm|^9@#QB1;BFi+)x~jZ9eul#rr#|aNE-p7 zft|G+3&h~ImKgk7%9d&h3|MRP*)sIqIWc(PsICLZp_r|Bw|P%#;^5%oF6TODvM@?x z1(czs`mtr+%l$o1uE4`1m8w*5)rRy&r1{ueya0`i{KAP=5*n8MW}TSec4fCg&XB111a|GL`9ve4%Ax3>QUlJ(ujS3UzW$ zFk1&nMih!$@TWfhU9bWL<{bGD^8lRv%EJ524orUL-A`SWvn7tA5B_rzn-g_Z84qNV z6pnL(_bZeE=r0llg`nFEZf6SLU|g_Pmo-y26OL@1JOlijX@s>?b2<*UwZuHfP-$B(HLscvHam8w6a^;;Fu}c*9C%8i zjMuTS#@go#%eg5DLc@gdk9Yjr!q!v;s#-`BbYadBRi~DD#_q}}jk8}pp zZuL&ccBbI5?HKWENg(G$W{3>C=UTda{AFSuRL2Wo{mufJ znWE+y20eG>!7yU5oV3=%*C7XE%V{nK_3&I!DwTIsYE+b4SFh}rD8C{67WBrwXzNxL z#qB|i{=4@o5Od<3$EA6PEM3t>q%^AnD9*+_VZ;dS{Ep71soT>jnvHnItBo+K!kc|G1)AYXz zk`JJ@BpSbcEF@(0b>3})XZA`DSyYjl);f)v`+b&s1f<@}K*aJV}qn-NAPNKc-#oyh91M4gVQ)Pk-7~44b7v z&@umB!vM_|!KMrL6c?tuq-++wxPQM@*>HV0|2!XUqsNl!RV11t`r3^3%K%tkdXGw( zt%(Rm#PXzj&i-~KablCaj~?iUwlfy(~ULDPne ziMO4zxLaOaOK5dvKV7pa3B+GdY+-pI_54f42(KX8)je-FH!9G};&lBju;T@pS7453 z!fvAPIuOJUmq$gZu`Ry3dz~be!VOm){?XMI{a|!r%_vkX={r#Ds+09G0Zp=booisO zLNhEy5{q3egHM`sqaqYbvhXCy3A>Kp?zGth7W7bmjr=3jM9LCN4Q#in!`^CYyQ8?fgp z6bHT#?}htp*zrZRU#;Zv?Ff=&csXXRrm>;HNY@X==^(&4$j;AUpy4GCwixl0RHc5# zdnY`zkW>d>gf+&nsr4{&;je-Ra}!I$@{Gf@3YlB+&4+p(?JV0RALVqN++AM37b+RZfpw1EGjZIR#_O@?07B50qzBG9 z)EVGMebdjU7mNajIQ9~RcH^s1h4)Q3X32=aMo;hiWa3P*4g61XMv9GoZVNBZWdqXp zw}%#rK&%*Co0XIslVrkyarxwvf%2LBtS|YL1&wo|LsYS8A<3_jpYdUFw|ABYM6V2dFmD zpX+(1;Cn=JU%n#t=n&BK(zjiL6(2H2a<=84L1GZ!h}dZZn;=UEZ+e%)1w_%~qk`_` zt9L$iIkp=i>FHk%x=xH{w!A^@L`^PnPNB-@^mF{D3yli(c5wc0h3;*JriAf-Ow%!j z*4@bc`og5PkkGU5MpLT;@EoVkX}q+iRN|w7!14e+M|0Cy-%>^ifoD0^a3|=fK8#v) zE@Mj=5jM{J#_PI->Dsk!0Y6v!?;y6pZ8j$NiDbHr;Kn0dn}0XHtuZB(_Sd_wbP*$A zy*|#4ZQ?OohE*N?r2J0a7k*8;cCrGq2AgfFAB`|)5c!yInE8PHwPne{(20XMYB9h!6)smWE39&T2r=Qc@tL{YE(kN#L)YZCn>jTS*`B4LqxC0 z09APj24z3_RNm~C6JN@9@>ck+7smcj<@@3S6^V@w6YlWzocj|-I7xCOz4(#Xu>HQy zz+>}{QJJfCUPKd<=A74NFu>U`e|UL>8=v{-jfq;jXyBq=>nV{ZvYeWzT5oTw3t5eT zD3g0EK_IRKG2cRNDcxR%5=YY%H=KE-SnGP6C%HVX&frRyK88){Fs!U1-DEB!{@b4V zH-6}MtqcH*6u{|tKiU_-|APdqfd_l0pVOmiHr>`h+zR=YU_L+CPVww;-~CM5tmY1S zFq!0^=_TFXb&_!gF%1G6hC3$|Z94KU6})IE<6OHL#PTTBJv))q4h65JPYSs{6F8ku zo9aA(`v2}LG|o+vIG|YKL4K*J%e0H@W|Ui_b)!=oqPLm`iiO7&p!`4xET%ml7eZ{= z)dNo%!KealaMy}IXzv#LuN&E``Z^WyfZnav+0b3}hez9@e73Qn{{A%uHJ46J<#V3H zP%OT^xTl)+ia8xV3KI3($j8cE((#E=PN=iJ>^y6!VSY0$!58<9x`xH|jjh7_9-dQW z@7EGdl!qx&Ygf6++BK@#i7pAb4AqiicKH%$2PJ1*2T*8=e?z1YO*`Uqt^B0CW!_}3 zpPpyo9tp6?$DPqLGS?az;X=xd2{H}6p9eDE0FgIcdeJXcx{4wZI2DHlQts>y5^+bF z$iv)mZ4P_Y)xb-+DPW&=#Hx6~UMqU!p<;v^{mj79g|boTp=beRiePIrY@(meRR5V=EwUZS=Nyf%_zXDl?-@N1V%rQugu$ zvc1;irPWtol3@J)bT|5*S?C87kSrvH~Jc#wf(y{?Dd)O9h)|M&G_yCNTq% z4(+W&uyDQNxL4>KN<19l55}$IP8WRD#(#q(2ej6?bmc(D@7*r*E~t}pD#i}&Jgrjt zHAdiyaT8P14#NR+yBIf!4siiYUi2?xCdol=3P_A-_FUIED;s5?!8{A{r$V+MjbxRg zhaG?CX8+6V7t{QE=nqBx!?~&mRm}ei*cyUbVmwlIsYNGK?j!xAJbAh8z>ys*c~fIJ z?O87vK_zG}+R;4r0(`9jSO_1h)du!PJMwYG*uhuh*(C z^U*hYp1M#OePMm*1zMZZLxM!M_HlBM0~1sjVsDO!wI)Ct?3@u~B2V=O1lqTZ3KL}p zrb7KQQ1KJgYMIM&EI0+x3hcwoauAMr7!?;2y8-xAPCkj9wR8# zy)kBL<53*v*taQe?0rn~7lW&s%}*QEK%KDe;V`LAsC7Jsr@Mfy_}z^G=_KQaaHl1e z*(#TX{j~nSS(W?C`KJQ^xkLZ^&@pU>e*{39G>!j3tilThDF^j*>-8Y06<3D2ZFl(;hCx0x~NC`2+{UGz&MlZ%PgqN^j ztZ6^6uRLrls;bOphK1f;9z4CClEP%&V3$o2h2MX;5au*6f*z*_9cR^9d%u)(} zIXT<;)e9lrj!^3+T)0o>VRd?~nRbHe{RfPAj&8|1PVr@FbCmF3pIRM!b22Sqz4JnY z_Flgugy*13eqJ9Ht^JBWfEA_If6gH$GNd@zXAOm%=+g+AvR9E^usdAwaM8Nw1b)~a z?u*}G7ldI}A`jN`^HG6(=5@0?&nY~yWUj`ha0&nngj%zlpa>*w(rq`4YSA`Rpv$X8 zJB_~KU;rH?Tde@PSDga)Fgf-{f`%mK~Xsb0#a-My9%EBH%Zy8gG?!X76TYXt;K{rdvFh{EaN7^CO*iIH|ukVA){Hz;|zjtGxMyWZWe+@P`w&gkt5a73m zBkEX!v}%A=a~+EsCb$d>f!qHvR`vRRv352`E)&fci)fziHiTV-wsWI03lf?3DUucV zA_bcnfeFlW#>^0XU*$?ASJ@-3p^%hl6{Iw8r6IrX%C(vYW1NqczJ;sbt~yaVW2PK* z2BP@qf;m`-Z$C#K{mepGQy%_DT>G_ z88%llB%cWoR7FSPVEDK)5QqP0^~BP%Q9g-{#3ukPeR{nL)j`A3;Wkc3vH?^Ashc?L zE$*;5PM^xa4qR@@i+RW|t3oEgd$<>EWPgC6cdwsH0(G^YDId}hD&Z+am1oBta3>jc zIu2ZSt*+if3d+rPdo1yqO~LTEk9h%uURS}f0 z%07Jg^g#L!JtUmy-k<7?*f9t2B1@kgMj_$60BxK@4+;S5FL-%1*%AtM^+oSs^}y#y zX|}-~F#s6Ojg36*r*)B(rW?Yp(KePBX@js_Q|0M{bsfQgJYfxk;HteJ5mdjML}v~m zs|TS@sn?f?8zW$vI6?Ehy>L13PNk84f9?;^vZqbXwnWv8k{)Ag zfyhlL5 z|KVb1R(YCIp5WdU-slFqkX+`T^Vi9acLV7PGs%!$mo#%Ue2@EvT%g)k7jyYr^{m-6 zm+OnXj7D<-N6sb~Js}6O7K%zu%E=mh_Obg3P~bj^YAa+p&?YLf_LCpsjB(`uNR$e)y#QR7{QvAufLC?4wwZKD5h-824>iNYaw=eH~@KDOvBu9|^s`gje{g$K= zed&A8GIMBI;NoLL(tH0&N9&qr)_(wwB~|W4wQK+WUjOGC>L`f_z=PI5(EZaJ`U-eM z!7Z4OSok02*3>ou^{;p2UFJvC*S0Ql{e9~%fYA2vF^x0gfY<5=QUhUWN&>71RD{^I zX4ONNM3-rT^u_M>1V@r!Z?`C5b9%e^#dV=sY6vWGW{=ydW9;2f60@9(YARP<_AdbH zn(fJ8-4W^to3KX7YFsvJsps1;N66b5}bV!8RuJS*{xuX$Z!Gx|E}XV89vr4e9OdL${b z#<%iJzi(vNa!0{A$#>NaW>YEfcoTue+tanUrb?93(J-8kpUZ%}J4fO?@{VNIqnBWk zPaGr5Ny;6)-gi0|Rq330#=0QXf$|B^=-=KivPL@m3bYV<>&h1cCCD5}&8*kgPfFp6 zwEw(VlU`D_9{>C#O5w7956c&qnA}4kdupi5A1ndP^fz4Fv`4T5tB64C0B5DTHOh~* z)X%rawWL-{JZ6M*G7`Ql*vCEb>G`IpNJ5kUohmUeY@DF90qS$;rX zi{jz}v>Nl|fUNPkeGjMGSo{;3RD#-5EXW;;>a9KP2R&2P;Sum!Qjxc%Fa$J>Y5Z2I zBzEn?6f?^CKH&4?+mc9i?0J0+Tr64OSsX9V*Guk(?^h=RSebb6uc$HzXFKufn1AyD zUv}GbgWZs&7{c)ZmhJ-kUjQH%d8{f?JWt>5tuXJ5!ZWwQYyGxa;MR zVN*lF_!5BNrC7T}R*U)W9&j3MpyyxM`Gr&#wNm>=3T{St=y-|PH;KY}R!W$>_} z{lkt=EOuZU)9{)R1Et7q{pCoU7Ds~R^x+Fqi-tgda#f$@{AK^JmZMWTcJI8NmLP;l zod&JFTnGF;Y4)6;0Bz=oGQ%#XGC*zVwzjX-@<(^>eeE4{s`KD$=m?M&^9n^eA~PN% z<|7&dyUd;Q0q)JA^7Zvn*gL(RUB1z7)VJ%&^8m_yhU78`*m*JSH3S@fsGU!B*^7XF z7M@a}@372KNAZ@z71t7+Ha#I@{Sa6zLW}yLu~0kNl&l7yhM9H-4^bDwn&fD=ctILV z>vM9!|1xkMNmk@s9#_ES+qm7xw}PIuCYiy@Em6PZMehJf-9f+K(ue<_)Q$COojvpa z`T;Hep78VkFyT8u_5t;4MGt<q7Q%DRAi}UV7C_$fx19{$Nfovl_{Z?jhgo`HyMCRQn1Y@3gt!rR%Ts-C5?029VnVnt55S(>HkFbfznOq*sOB6IM z8hlW6+$CU}eX2ily#LQvuMe}(YRKZu#?Uq1eR57&Rcvm+3^hUMI&d5;P|lLXjKGy&n&Z-ju9DD84f zNKs{&rWSzq>xl0Z-Aa;{k7cQgEI$R9yiyOhkK?;|*!3@eODH-UBp*^6e^)%*o7?se z??5vfvXAxC4cW>mb1fnYMDR`mZyYfX>87l8G+7Aco8Ekk_=CT2i!%jY0=-REn5k=P z=5ZZ0r+Xsp%B6^E3!>m-;|-SC9PikZV+__|ePB=f&BEN_s76X*`XBb_%fIbW^MCjt z02eYXvjaD^E(2pRc<0kKW^cUPj5h5HJ0suoFm-+G( zdFJ*rbITa`*=Op1lYK8)=O9BLwI809t%T%s04>`a1msWwoij4KK*yKGT4za2HxDYc zMGn;*UjVg9tJ*Tl#h<`T1g+n5hkPED?GOB2vZv%@(ASiO@y}~janYYl)qJor{yfrv zTAnM(|M5tP{(hvd|K}r}?LdtgdQisqx=mM5ufGU=(*9F~PSAOGyS%9koyXYK0C=N! zfz?moZ3`#YVUoM##EF2t2z8|*Ud}eRa66hK0#GtMKvAvrOg02YLnn)ycPx&*nq$LO z(vO5(jasqsZyP;$z#&N^Guht#79Y4_mcVQk?Kd72=#j;kjyUKAcMEUo+ay#TTlRLE zBEC%f^Vefi-W2|?v+vIzYP|V-1Ok^e|JS7J-y={i@hEy{!l0*utaI|*(xPv+ww$ zB67fZK5fc$YZyJo5OO|b{u=%uiYxW*1v2mt4M0?!EPB5y?0b|TvKsfxGZ-xhYD==JO^q3sTX{pP%D05Wzks*B{a~2+KWt-YNVQGGgrl?-4@stt!%XXd9 z_9%5y0zn@-T4y}Zu4F&Vi^R_g_AEtZsAd0z~|%Lm6}u0G%AcRM6+ zbjC&8)|SG>5tnTJlzxKx=1|2gCY=cdg(Z*{4Q@1(2vOPXuyJ7o`v9w{p_RnM+4S=3 ztl=;1--d7Yl$P zXDBgiPG7({!O!n$nH-hXJ`o^(p6!52a6)qSnajR8$Z$c-ezQ?iktxurQ=JAB#`DO!E z=f|Yo;aP!jcFlfus!oDqm(9HThpac~a7HTcOX0ydATZ85+LkC5th>u(HNW7XT4_#a z!>x`u+ZE#g1H|%EeZQ_y5JGo^x-arO=+MU`h0W?amY)SoZ{m4{){B4}<}+o9N_a|x zwbZ^vKdv`9>N)XoMLbhzl>NohRkHOAkGC%|lGG>kXHLziBz*04>nW(7I6X=Q;>6f8Sswq9(7!`mxe%g|`3tygIAGu~VafIZG}fUa-ni zZhI^*MC}@3ap?N<$B>k_NxEV(q5J}3 zw})MAovdafqbgVdXd6QkkGD&5MBt|CMCj=5v>^UMgx6N-L|Ir-@T1kNlv4Ikw8>$G zhss>UTmGlZWiD-*+m2h^b^$I;q9>m3H|Zm$54u`yBb2QZu3~qsuHBJ6Pv;e|E@^Et zFBiPRdcU!34C^d}mkF+h4mNbBMS7h{R8rJ-A57==L-`x$?>_5R?cDX;vY%on*&o*y ziC25OM#b`RRP`C+ojTl=_ZN!#C{ttU^9Tj!Eb^!x|q=b~@07{pLbV@f8(j_TU z(j7`mw=~j?bPb)-Avtsn-JRcW^m)&F&U>Ec`|tbjTgx?TSj$;6++4BuzV>xbA>;bd zPj%-z**FZu-ok7HWCRL01d0qXI4pzMmjX@_*c3ue^5k#vO>yjiQAeLf1tzsT;RCC* z&LxzKxB6q!&le@wx#GLpX7@uk%IY#P59TLaKv0LNlA}!7F@$t%k4GaY_mP`n9^iFlm57(eRs6tI4qbR>!8w-ZiA-N~ zI09+B>B+USpqjA+a#)?o>}E5-0f$69B~sJA;KuC`qG)+h9?TWY&v z{(2a5mhPIh78#jfMgysr>C^7CX9nJ=EhL^v$xi`AvA2a)n|auVHoMxiy}hCBIgJ#& z<={4cfz&cWm1mFj)ze2I&m}ST-+Y&j>3h*O>2+%;o=5I${IJC7qE$6$yL{xibzEK1 zG+XToIpr+r_}Mo#t>1XhnshggutiyGzIq)?<@!qN@&=7wj+uIP_f8Ef#mc2$leQ_m zM2XNFvi&=G(xPf@R3e%?1_{x35qs0+Q)G7Q!E!${RZF(nSBemEGHptuGy93(F^({X z=>;*9oYdvru#q5L3n=GVfm3&WAm6jC=Jnc^1=kU-_eRAz?a#`}iY-EIzuQD84iMIW z$&4JkiRN9STx~B$!xi}4_@*?QoMKY!k3ElOwBFHsUOO0ugZ*pvrbXZLR4COdV5R5+ z?E^DU;o+E*wei-IDDQWEExT>~=t`MLP)9hfcsio{P?399g#}+h%gg=vPlm|@8CDe~ zK!8di?8THs6z3qiqcTZnWj@HY-HR9fBq-b8OchFuvgDj}C0lQ*nSS&L!X$CJsu*LM)mRspT-sJ6{(w$)T; zhcQVpot(5gNhupJ6NU^ExYEu5%gR%bOx#>KFSG5gk=txJp~aQ|HeVE^S<~)+JlcF0 zsLM}5l1WUkrB-yjB+hz1&26_Q~fr!iAV~b43omL!n>J&+soN&8qo0j#f*<=7I66mi!tF%hf_|j16 zwklCb*<>01ieniy(HD~zH`Ao&Su%2vS3KpNr{d!1ipiII-=03fj!Zj(QQO1#N(DDE zZCS_LkLrOX;Z~M$x7O$US1a&~Dp%xNOu~Zh`v{)A4k;d*e)`00?dyjq+X4o$;DiXG z1<9X}+$=9v4eBJftHR!sOw|v`u{B#gT_uSK_PC%0VFaz2l?H0A^(MYwGFw--R zoms4rfaHfdE(|!Y$;hp+k zYfnm6^Si+yT)l#yKVyCO5u2hY`U@Ef09$-~p2G9{D7BwX6TR`do#xcEOmlN02=Ft_`taRb3LvD|=ZATeev5&jDdx7;W^(c{wX}q$Ol+tp;o)QJQ za_QngAC}*PG&44>*zt!vJ_m8jg^^6e=b<#qE+EPd-Q2fj(yUA>kQ_g5AG3`*$gnoBrLTg#B zmtxrVRL(3%5%;uSlasEV4HM0V#aGB#o@)qQ`C;T-ew#gJ&F$(%PSJ<96@1l$neBGm zbE4UD3y>yKZ%Uf~l+L-5s2fkvzJ{F8r)ihIWZF<(&$-!k;7gHgRa{m!ECk;5;k`ER ztF2g21KQ7}CjWHFYT(#vWi?BHXG_|iiTmssZn!KlF;x?`^X54{wJgE*68y}EyilU? z#I&zGSfXp+_|!4C$L=2`mdsyG+00QjSya+a#?nV8cioslSdw0O)*Qy`YP$@U(m;f! zXAdF|zce^?=&RP;TUYM$--uCx=iC zsA{_)XvmHQyW_zNy;~e|r;_FNuKvz6$FKxGOjNd85aW~**>V@ZVrhyRuq0%gvH08( zB4Ji))DwSId7-X&OJie#bRy4}O?YDK>Bt3_bjY;{$ia zX7NdN%D=U~Wn(NctddM%4|SNie#c8}>#Lf5xg;VAA|E_Tq;HeIk`Rp29NHlC#LHzI z&NJ$wC7vak##VoE9}Zwa#fC?qz!UU@>`T&L~{NxR6*$=vQZ- z;#(`eAG61M7L!hF!_=A0QKW7s_0c8UM6tTQy<*&lG95_0#xrsm=giFPT9d%el|ag3 z1yInuL%oDF+7Ld}pB^H>f z@>|hj2HTh~qr0-HQe`DvqJVv+daE+^*O8kNJ?J<$BEeL^3uzHip}h@kkd#p9&H{sQ z8mAGa)s=OGO~vrcPGy2jofV(;W?w_r>0;a+iiPOW)S z-CQY%*gU1S``Ka3g?69Ck?jW|-_OfkO{Udff7LCYNL1}jCdTNd8!L|ODmBb7o)yUC z-g~A8)xR4Dwxo%}ol{?Z^f$m1$7a3XfOy<{2h~E0>k$r&fd)6QrpAWgofM2$+ zwk0_xe~7sJ3g6PIR4Asj4BuR}Wt%o^fpYIcx^&b^9BMHze#bp>0MKb86QlXsQS@bMpAAGViqhRpeBG^ zk)rwwzY;`1>^*ve14S`LP@3x48X3N$KORG^B>qm+oe}H6F!uCX_*^VkS-v>3|a)d$H6ssE`FHs1K=wGyBHIg?t z%m^kv<)043`~sVcR)+7-j=sj`<9}R<5+d~OegRUJNM%Y;V12s-qJL>ZS!vvFR(nqipqf zhr*Wn$Xx^@qR!CG%t??Or6mlY)4j=vi-}(iqJe?PFs%rhoc45}mkOV4NZ#=`0)bha}Z=n)yk@)foueNB}N;9F-UXORn(Xzzk zJkJv*8|g@z)kriEGGF-;+&4#W3+acX6=|ocmCYM73h&Q&BhEMAOBbl*yzr9l;0-?s zp-2^SUBsibS*%YWKxKVkZPJho?~%|eyjT@(k=(8cYm+o7T@5d>#XQgK*NcuI6Qa&y z2w_DAPgZ@loqkWEZ&cg}14e6aUkY7)9}mYeD(!eiz@()BBS`#^ge+6}{o1VmO$i}$ z&IH4MONlYnphHR+CYs26<5Mhy<^<#1a0oJphj0?8DqxZ$D4JplFY|+vD|CpgFOD5~ zeIQYurBIVl(Ppt({^lGM{{SaXDfmXM&OmVMtmDV>Ii%?#LqoXkg%Ic)zveB z=HhL@R6^oboikRNE~D?{Uhe4!lQscW)%?faw1vZDj{jc2=WBUhMKo;nH}DI(}5k z4LD18Fn-N55^f1@?%?d>bs3czTA5LQbVBpb zF7Q5Gd8Dckc24+;W%`NyjgaA~Yygr;4X;Y*SVAgS{C(eKw%CI9CXYnX`duGPI(oj} z?au{Adq#9+%IkZ5E__$8M3BIz;DqXR@5ol7QT-WU%i4na6|;x8n^~BiYv{e=ybhFCZDcnweYoRus$A3k$LB|e>ZnD*^&rsi zICs`FCg=lT%W9`XS)m;|r6NeaFo` zQprH(jpAnT)5rvNSe!#o_q{}YcEd4N-uy29D=>X&#c!}kjGt2P$0s5yypU4!@!WWH zIQ1@}mzBmtVu1QbRYNp*Vzba7?*jcMJL8v!eE!Ab!WzSIZ(72OH!^G}t&yTh(s=0G z=h<4T^~sP5SCK9AVlFMoIm8bO!C*;Ud|7woixIn3`3a{ zRuJdW6GTt4fU||0t%&*CIb^K_R8nJM8W$)ow$tw{7O#R*b9J&mT0Z z(>Cs}8+VO{+9mcyb^UryGX2qe2|2;*#W8vSbO~v(a-80tZYY8tvc+VpJnv`}g4E+u z*n6)hU}%BQD>|l-FZ+vi-7s?-*_;K!oq2zkYBvaHgFPAa+$5qC;=KF)U3)S|%kJrl zJ%IkrEVz?@E-r+Ymxr-03>8_T?{-L~I)xt8habHn_HO!aHdQk=^G(Sy)sD!#SUdH8 z-AZrL12oYLgzw;=@Qv91D%>n54AVx5|63dFDjF48ZhAi&9e2$BQ`V9+~!?&a71W$>;0LD0ik`B=Q=C-^RYzj-r8j zFTky2{lKQ^K^9MW1j9yO0)YWS+jx9FDh#q9zWN*jNf;Tl52Vw@IkMAuriY2XRwFj^ zrd1oE0n6aW{W`O4HZr^<3n8I~S5 zJV`d6j5x{RYSj~oj8S$$s(Rd^!clt>qZnI7o*7rfHKN$UlslCK7K>w?^^USk(jZx+ zn*23WX|tt_HO=~T=U{iR&g7&!me)~+zSMX)ovDHGn-G@gu@Yk-_>z3IR7FT8nI;ZT zmyZ-91GJCWtAkX!T8^8yxjBk^%plHepXuoBbkkE#0v{E&pq$ls^w$I z_%24eTkgLDisaiigsc2-E^qwABLmc(cS4>?P^}_iosT8a8@WB7o!efBcyvd;Wd(V* zq`JWyP%M4qu?0^R|I-E3};9x71&H8^NoPN49ETYQM5(PAs?~yJZU&ZM;~k z^kzg)wbL9Yy7^si^P0YcB8k&(%JHh9aKcV^Nc-=~cB zmg|q&9%03$rTUwN?_LPlpW>x2O4EYn9In?q(FjBKnyw?VB@E$90X9?Rbf>0*C} zbVOg-P+jPz&)rW%Azahi%JN$cg5#%HB?d_7zy2LE{uSBkgMsac@bCZ(02C}O;DTE0 zSEe{axTIa#Ooi`{42O0#a|m_#5Fe};P6{UAA+Oe=7`g6oM_kVUY=KioDhszsNBVx92v*N=LRv^ zc%49-jUx);`^!X>sGyBv*~6sqMQ;Zk1O;Tj5RoAv6hPLm93htzr|Jbi$sbm!NWzgst+ zCeap^>uY~UkgVM?+`^KJU&P6ca@X{y0&7`&&rHF1q`xU<+<-QF5L%#52$vN(DGqpIOI9o_vm&%BAgv|uljI`prn z=;e94CMVc0M6A>f{R>M(tb7zsdkn)8&vh-eQ6i0=`>p=z<61D(jGi#njf_eDy?jMQ z%PBn$atT$tb~przw50ayo)gAEvML%KTH+&Nb&6tEmVJ5Ex5gcg$Rru0(!soPu2F&#`35< zuFRM9OIW&Ump!zvE>gZD-0r;uwx4C%C_@Bic8=nTru^O>*ClpOqhev@r9)XM37`{& zdYaan18#?hY{URjG#N~ZYH+d?1=LC7r=r>K%B&ri>%PZ_8bPrje$JyWkC1peAXy4- z_iL^_`@U<$Od-Gq0TC5suHNo#!a3-fIOew!AW8U_PYtgM&s6hFO+IQoXjTfcH>b<) z`d2!I$+Sy%+rL_)#efbAqXpfmz4jm+%>gzi@HBNkbI+R?Nv@un-nBnEyJyy~y^=fux|902k zZVo!0-D9UnK6cgFHtiJxI1bOQMcp#?$L>AZ!u`Ktl<@JU>|U>ZI?5RYm^zQkM=n2m zw#+9IPqxfAN;+m(SYd_(HS+taG8lSJ+ye+k&}vG@d1|9MFwamGclpYy`cf#4PEBe7 zD~yow^8S~SiwQ?_!}V0W)#;$K5TFui=I7O=+tyKbujsmCzWur4ZvvVElA%LDx!TGB z$~$D4cmV*dwOi3`}eOYosjb6wb9 zEks(}e|%I3+#TED%BqW&C-_J*MDZ*R8~x1%;ZDt0#oj?&^j%b38VWrOd1^tGsfLN2 z*C#jWT_k-8n=v&dbh5djn9$$|&_4nan1Bz!l1K3K$S*Y>&;ryX$!>#vfNIrm7UZq@ zLhFYxd0!+8vlT7?XH(kJJ~g7VeGE7?556(JVR@9@!)*p1ZZDwuiNm1ROjXH6z)ROf zs3xEsw>iGOtIAwOMVhjK*LJ(uVWm~i=4!{DzAL_?kb`8a$2CL;OjVQ%wP(Vo+Sd0E zN)oR&NvC_W`{bMWAnC04udjfqkV$}_^he2mZJsHA9O5vZtspKS z#+Qq?^UG<^Wy{VFJ1snFi6pU-Ev7;_n~v^W^(e zarF8n7eJn^BzxDtZe5x+-lBS9NB;vPp05{p#MU$VK7^+Tr28U5Q^{efMfFJdKLnIZ zPzCAbfk1gaAq>szcaH?KFL#2x=+#CXKS%E2tVkFfJw1|WyaW#gu7Dz`J0YEutq7~< zy2wG^r_juBP>UJ)Y_%CMPjr@I+NL2y_v;E4^6rG1GZ7dRsk+Tpg$$F4`lK+3zmlQo z93E=p=pJ3Uf4Bb3?Dja8vvlinZhy?JZ&-y_aD%?2@zzilYUAownAH-;!C8ZqCEprY zkmcQV#v5e8Yr0Rr*HJfV)PJ&cW&g{tovu(fm+6Vij4kD?islt~zmH_fp*(Iv*Q-3| zM0Ij{OfZzcEwEtqI(Wwsd&*&8PGvUGwnXSFzraLPKkk%UH%DsAI;!9t)qdHdLwFEP zhC5m3g?h+-ZTsq-`XANiU!W*HRHblE=MvhyBZa=cEZ-V5*QN@Jv+D~MRh-#Z! zOBp~Tdu zOxv@Bl!j&`E&PBsFl&HC(Cm4_k$7!tKYVmsQ<5^nh!PcfL#x&lA3!}{%sbMcZf7Kv;)%XD zj!_6QCqT3uUF|RXy1o6n_LDTcqDO>an_S3NtJ}Wm(!!rv&wb_;dpnZC$4f5lTHuaR z?C7~zQ;hcZpw&-I`DvpnoH|zUg@V0G{=m`xb#PQ}%ppP=lcw@@l_KqP8Ee)+{U}4; z^B)$cqWj*rIX#7O{mC^>P_9zYc&|Ba3-*R1_JVd8w%i_<_wp;P3Xd=)4#-|7TY8@h znL+?F`gVyCW5`(USHVFHo*y4dn-8Db1l^jfdHz-bMJ5a4YexoS=o~WKwPd@NDQhJWkeS{HnQehU#pMZTogP6T6GT{gf?D( z_5wUXBw3{l_GHeMS9(`_#jXxpc6GtYEt?}c;16A^X&f%>-P@t;DS7+gUM&Rx)|vOz z4LR18K3FV5jN)89s?TZT>|B#z6Q?*ZKfyf?=vO`Fs!@1W2Z8;hq=zkk?hLHG7=HN= zx&E*AaxLyLX_+<39mRdE<)IZh-aKD{ zs@v$Kd+U41;tz~WwmS2WUE5v@whwC8Zq;Cm(PEP$?~)f+JVy{TCA>_!R-CeS)^M}0 z5ul)&>F{rC)ytSiQgn4=U`%H%b#;@0(km*OtRK4+=H>AV`>*%PTxu<~dLJP)i+vWNI2=L!5x7LcWuxR)Zn|Yn7S*M+ zt27O1^-MwH1zwchX*~p`XN^0Zd{to(-fxBPsuh7eE@*F5)}83jW#nuzoHo7v10|x4 z3KAi3Hj5-Ww_Qr=WIop=9^$53?>4`Bw#8zV(M@8NDD4uV5K9+j#Q`>#%>tEgCJXG& zBH0Yt2rRBndre;V)Eoq}NAwR2Uq=Tto)mmKk4=zqdu~If{X7gNoD@#G85XHH?egyDgnS2@*HwirH9?`n6vXznNwD{nttcDK>M z`gsQ&>6jUA9@+tAZNBf}ueP+PgfbmP=l!{;l~q8tQ2uuLLem40fMc4y3C>0o!nm4*&pTJ1JM`CfeH3Gc;c9i^lyClU;i0+a)|$Xa$xs&lLMlo zJcny6B1S>S*rWzWOCztZOcEZZW|JxU=HvPgBihVKZ|f^^NRQ{7mtKZFcn}LH83j+EGqRAe)K(fC%U*O14 zB>u<=_@V0X+lasYSAQlR|Mu7>`&;Ql{F`7X8a=|z^Xpleaaiwr$MBYdmHG)P&X<)( zu}qqDO_v_>g{K25re33?Y_Bg8#808|-dlSF@&(36?Z?v-7E>P%4})V_tccyVe~!Hd z`UZpQOV(=h`7ybW|8G8R z$^Smb$Nznf07$1b}?30z>G3_7fMlEI(9W*%YW)u@qnNfB7s8sjB{Qo0cH4&{GoD=vwc!V^V@*u zrg{UX_olqMdQ|N~>a@ReZtAJUyD6!Nn#p#8gKmCK$>0ZEYPlCTDUJ7ip2=2O;-IsO z@(I#Fy!}VKHAk2aI4N(DelRvGv`m(tak8emLDuo5Y;8*z7a=@WnPRAMQ1go( zB(|OqB{I=pmU}KcYh7DSP0hP~OA)r^Vek2^7n>MqmaM$W;V7O%(it9?eo?NbT2DEchnk)6Hk<^O=^l5VmRc@4n_d9kvD=GF7)5?~ z%BuE~4?P!OKz_}UP3S1NRWTtI3!1|!)oWA$HiNQo zX%%FbwP5Q<0v4t+sl0K~FV7}Rq)+L+ZuglpN$B1kql`xqVIl&#qdh+TRBb&JvNBh)>@aM*hzB%ubU3QQQEin@Z4JR@)`um$C7{RrKVr!3V zi7te%!fY!>MMe~)Q|8EuMn1Z_j@Q-UCAF@$Zm=jI{2c}85zc!vit1&0dAly z8Z>E9(fm2woH=s!pB+-g;|dbQJ8H0BlOsZSp~Vx5xrev+GxMmzM21_nOPic`t7*>& z_UXucmI9|>UF;D2`O$+voMvV#=pTzE&F`qd|GTJw!!=NJy`@O;@4{_KqHNlDLNcAI zoGWEL`L!!w#cTj4a|vDfZQmW0a!^pEai0`ynsyZK(THu`bCO4i0n{oQT|C1RXD!Yg+H^W|f`qa_fP#)XS3-Z*7_v?c2uXBu*-S?E z#W6FBEe%E6vh#=of`v-%V6{`wP3u=(Xwe!wtB(o3Q;SC%h3e>=*MWxnognrW8JMI@R#JtEpL(!P^EM7p7C(Cpk3l+c@1q4t225aH9B4U#Ai&#uO0FLcN<~h>&ti~1ZBDh4M z3x0=RPzMDUY0p9(bC}|NDpChHhO0cGdJIa%k=T^Ahf)SxUpY>9Z2IW}54$hMLLBMq zv2#l`s>5s05A^-fH?lZOw7;c=VS#uQvbyDS@kHS6j%9~su)I=+K}D13wmKrjzsgQL z%d?Y7Jrfg>sV=QfO(?nVJZC;$YomY<#L$<&W0!EF!>mKXxHN;23%Mk}${6`6bF)$# zFUG&d?a<43+&9`pMC3S&HOf>hh4};D13;Rq+=Z@EvK_aTi`_NwU{!EhH@DQqt6Hn} zj=exZJ29Av50;6{nuxpBmR5sS93BG+4%ere3^doD&idAKE`b%i!78IEJ$ebNGc|UZ zSi0}bkE*Jf3DPAiz7<#;P_~QC3lu7EnKP&qe%rO^f6$<9n(;o|Cs9>C6~~nH?>Pb1 z@3MaZd#1qtj(^?`f0fw*yw<(`BKcTL$f?I(=~G_MUWly@tXecSASr`C@^x}Po}SRm z)8CnPOD4=yFR9hl`%FMM)o|?ca{r{jVP%czDhCZ8SXR{9pYYE9c0Z55DniZhE;HzM zwrlt#VI+)%t6;pRM4q(|C|CoIWA5&rGwTOswuMH|B9^DD=ROs5D^XHF>vfy?>+@H8 z4(dsvC=>kCYI&*C3p|@Jr|S?cws#q%E|Jq_hGoBp)))j>g5CQ?Y5(ePRunZwEeV>x z)y~@{aV5cjs#%OM>}H{*c!N#hp6P4!2Vu^_ridg&PZ6Je?vhm>1N;m0VTU3fXMG%K zgyfbb2y1}bY-DK}m(G2X=~vC5w&~uqg&maKH+VhRNaB=3z|79WLA7dY>zlxKMIE&= ziqg%wrQ()fEi2}z$N;b9FG7dwUDs{MozYRjLFlXdqJl-)_b2Y{>~>qx;wGdIiR{ks zC3+Wx9PT;Ic(b-CtS2kC2m+-196PF(HbB+A5rjrM{es8Px zvot;%94nmmb+_Tkmsg8;?bPS~DNLIAVjXD}$QW00I*f@07Cl)07u%h$1o>AO&Oomv zP5qTU z>M79f;lzt)PY!k7h^RS_2=TkwzLXv>(1`ldX_SitEJVrc%cqJD^XtYhVC%{8+%`Ml zGvl!Of^Wy{O+g!%nnFVf7d~q3ByKYg;O{qfmX1Rq{n_@Qk@9tWWV;cfenXN+-+a05 zw9GILVTcIX?#6CrRZG3u`$T6S7_3}MVc%jMZ} zW0?xu^3Sxg?~rz14)+Gd+r=hbTC7y3ntoXz@U4K29+mGx$=qQ>`gKz8S7dSdx@5nZ zk7e5(`V@C`BzO)0lSIKnqa8mCq1DfS$xV+OQV{-$bDF_;jwkfbD!6HazDyq9IIoRxqE8?RwJmI5d;a*5lWRUapVrRiC57<)Q7z zxqNaHsq}bEazP2BZpElH9@xwlC&WbK_S|EB`*h``noc4%OSh*vRyo#R=y@sye82Vq zvX_C7K`(b7HTkTw`NQYXQxiQ29t79^^d-|bu1UWNvNtz@l^GtC$T9%M0apjc=#|u$ z?2FA`L=PYkkfWFBG|@EW9apy_9M1@`MD8tA9iiLZKvwXpG=fO=Ev}!w^V*ta{RP=DSd6<-=f;AL)4ebn5Q{rF=hR>R!}r2@XE<*A^r$h=+EkC-&p~c zjWh9n#w6Bw2cIr_a3v6@qZZr{?p8JYm@6`@nu2VP^;}Fv-uQLPCFgR)}xx)zKrD zxk{^`0`kIPQhAIET0FU;X7_qyQ0(%PNvYkh-J-bx7H&HFrr#fZ>VdHB{y6mF->xj9 zGYhx;)uciqZIE#Jv1_|JIo~u)Mm77b*Is?K0v{i=3uy#ssw6&xJIZSohG}Hcul=F} z{N4syr}q(FK0e#CoZUJ+Gyzri%jQLFPbaEQpUo_s@OlVWWhh6{l(wGvqj9C!Rc$O>l2$K z9{02oy0ev>{$I{Z&)k$<=HX7R*8k@&0Aoe)GLCw7?b@rHuRJa%ulq&{ZiML_Ot1!< z2l{)3zSRJ`Bho_%YrcWuW8YBq$AQ(?D3KTEnQqquJbf{Yp)&Dwa{m62)M73QYo7pn z6Qx@slh}&byx%6Z?1tQH$8OSD2Jj24&56&ijHRGH7JHAEO_WgLwO?C^;rAs>{Cj}C z5Zawhf&@eQu^&j@t$S6AdGvXH#*V2JE|Jb69GQHa0yndOZ`G@Z=Z(kuj9IL{; zRi;X-%IfDLe84{76~YX}rdejD!Z=$0`6mL3%4zSm_I2gcURGDz%~=bSat+V5NIg@c z(A2W#`?Q+9x#ul9k$^hLtZf5?X>;iDbyEj-$kp~9h7qpj+VB833NOFMOb?JU|KL z;A>>KA52JO2)m`=YCRdarJ#TH@*ng&Ae8QfVZvASz~87QSrnAm$#7RAQASlRKN)zb z_)EpnuzEH9d)FTUmy^p8fm{Z)DG^za{iascyYj%}Ir7W`z?ht|hEWq7^oX8-q4waq z;4mmz)}`AsA{^x)<#~^n_&de~!YzG=AL}3{wPsTCH>;9o2|XT(39|1I_}djCYcyS? zQt$T^W4WB4rSdxlL{nqMr5`kV@_n_Q151}RE9<*(vPh!((~1!=c|LTM*|l61J;|=! z9$lpw|NgwkeBj5z%E>+@re6&@&Uk{zfU3SrgO`E}*i`Xn;grAb??nQjAi?70y716+ zUfboRBIEUkn+Ppwtj%JsIsecX2l*WZqTP-g>0`W<2)i;AfI8*`2{L zZx5`k=-(A0r|p#Fm=0e+oOZv{kDG-gVA#FQQ(WL`8v5Pueut4oiF?L=k0Vnh$s_RI z6t9ub?;!d-J!D(3bDrwnb$7DUf{ zEdoBrz02>KI|4VDW57t+kb7|?2 zm5^4M)OXj`K`RvjUiE`Z6#p^Qmf*?*CHv5_hiJ~IR+5+QeV6(at+so;FFv#TNqR#2 zFV7n+*{Bu3LbN@z{=6@ZImF5l87o~XZzv@W!4`Tx!#L{%{s7_SD0lvR#yH!*j@Xod;!^d)^ z_tboLb)3_Dt8wjL?%xP>HqG-4BtP&m6N*eaJ-AA$SFe{*b0epMxtnUI6728queHs< zl|x0-H%ETb<6Ds~%Lg5k%)qy3#xbuojlum;(d=2^Sh z+9(yKitm`X?H90F#Le;xYb?#=U^WfIY_*`~@&i>C9`s7>D_K6jbq^ zfPU!)O^aC37vpgPORi!zO{0EkZWXbw62Z zYBI|!N#G`cEkI2oW(P;~vxNi1zXk~RwKykJ4QQ+q0sV^Q3fZ?+GW@6&Qz?S>;Sv$aRQ%+)P1Ir=)L-$>HJnlf*Y>zeVIFuRq(^HR z3Va$xYt|S)W)FXhgN{RzTxE5W5Egy!i17l(;hxJJ%CwN95P^w8{^v!`_wC}u{DxF< zg!TnfNv|_tp7W#m(tX%Yvhhz5^G^>fEP-ZTLJ6E!_X%#!RFD&lBp{C<7xD+Bt}JUZh)Z#jH97B|aY8xl@7@ST;28oSx8qTKpu%6l01>uU z@n&xPJz%}Ekj>QjC-~t6L%h2~?+KCNE6DIW|I8mc6XD2PJBi4iKBfSCy|2)5vy3w7 zrB^zYI}J-F5Bk-{zliteB&eRpe5u)zUhonMPkFQA_ zuEEx5wzdi6zI2NFFSjp`+(k%ff7w1Do!1Ru?XYJnGIo~lg?$JtVLh?y<%aW~MjgW> z<&`m_^^gZ{F!&x{#)k%6w4?MKJ*h9AMWJNjqp9}ljL=YCH3_H6O-)I@a5Fz9XA865 zn_KfMz_FV*MjaBZpv{xA*#d$!-o0bAQ|`u^aGdt)d_E=RPaf;rj=V0LD1cG->+yO& z^?8I0rD3J|wo06gB18>jWfig>C4L-2G;TWdy{TQ>HBq^1?VBZ;Pzh4wr{(Cw=vxkP zi3NhRjdVvy_vGvU<=@qUpBu`?F(-Lv!{C7h(%)ghF=PWM(GeC+C09s&%?i51sg1&q z0>Wch(VHf-o4>KoKfLOUD^l;8vqV}SOpRd>IKjgoNDq8vDrXatG2A-ZnKmwowI>fu zSUIgO7lpC}ljVTBMY3^x-K3%_!b@DK`ok66Qg=F{#as8fO)!iOdTzyoMJ2+J;do8Em2EpU0c(MAw8Fl;~B=5rN z#Y}1k3nqdwA4AZe`;~&&f!hIs*?C`J2qOR{>AMx&3t+t?3L$Vs9G&MEaO;Fsd(oaE z=8EBYZ_f&fXs_Lt9pV{?KmHY3S;IWv!*HlsBagjzmZQjz+03i{c9lik;`!2X#H=} zJx;^1^A-r7A944Rhqhb|m6vFy3=!L&m-a3X4?c_x9C+vUiM$0UP)IJa2|)xF&dPcS zpo0VViDU=qTr_+d`pqV>Im$Kh8*2pZ&k;)WYNb(rwQp|O<;a(N%gKdeSKLcMocD3` zSRqQeaztycDOXt~^56&$C?JK}F|8lfNiE-=dKFC#3U2AtF{+o1)&-Am+PNSKXy*|N z(B9Xg|E4)B$D4D=4wie{#DI!S*1y{gS6cfQp$2LQU*zm0U6F#W^ZqRDLBE8Sk-Pd_ zv6$S`ZciKTI5 z80P~*BT~X>kt7M88h@#cL*IX3|IWYR=~F4d>jOT75yE_ z_r;K&l#?-_yY7S&uBHWQU3&%S{{^8Wv||T+pS~q= zSqUq~*0X-%ao(p2!(WKN4SbPHxiY>8Bu7+@ta|bHEA#}FdRkefn1HivpN)+Y?bmuK zs}+Z1J+A9GdUxEHuUHe`W8c}*N|6XyR~!~P>jZ(5-vVoQ^l#b`9ZtHLZJ)?d6R_6Y zEip4tfaxnfe7YHGI;~b^+;NEd}lTZ2_u@Uv8I_}Hd#xA$U`5l{@c(swWN39X;02^Cj;$x10cvsVu#2eXKAzmfyk6n@pr=GK% zac+Y?Xiqfg;j&tg2{`rTxFvLSm=6u3(|a%I05i1(OZr$rUE+_7`@=tDsBtg+pIvVyh#z-lJ!bv&owvHMm)`*v!a+MSXm<|bPW2hh0KM#)dH|P2Ye20-v}O zY6)kYFl^h2=Jnf{zF+9{q-&uhfXD+=P6Me*q6u^|O~XSJjx!|(2D@lHHk}LC3Eo;qacBqEihKrcdl7wuiumJEIM*?Od6`dB9 z60VYwFu#E*!UUAk>*F}?_^fr$h4+5k|4^RvjDp5FLlIbo#$>7VS9cQ38CG=9IDJ^MAA&qw9U2B1sQXx z{G|^giSBx)%9K$PnM^AixMp{{3Wlk9cD`+gRO&0cq;|LkBYYAMYp8G8JkD=}SwE@j z&n}1+ujfqbxkZ}lT%k|FzV7(68C&@H_e^SHm#)N~`I+_+H|)4R23 zG_1DBR^VK8>f;?l-lF-0Enwy3gY}IXS9m@rQ7b(`c;>F$43121Pp~zO0YJK)@ew}x zAt{ldtWmu3I>Ay4Y}~KdBLyuM=U(Nx=Ww3-tgc(Re*PV!J#!|XeT|(!+`XW^*Pw_e z8Au^&nGg%^YB2voDZn=&5OX1=VZzzpI5uixS#<2I%{1Z$gkN?Y=IE+3w1x0reE>2q zg(p|k?9avSv{HWOASnjeMUs+b_m*?+kW$T2()rf{4xm(`z?zBS5z}K~;bgf;FSLgj znELfA(fm9;y}H3nv*G%9q)K zO_CB5fio?ASuY>&zOgAw&UpXkRR26UP_*Z5?S@`yVuY4uL*dq9UjY!+=*Y75^C`T+ zs7jZ4(_PDiS1js&GmcBsR;PqWhPImgR|AkcoJ}ONLtEsZl9H0H1A|)1Z?|&a#7N0G zBZcowhMs8({&db6LdeD~C1-1)*)?S<(0!=~=}`bh90-&WOb=3Ld*S*|pWx_!s_8Jb z=NQue0cHNb0A>D%`vUN|-^q->mrm0q*bzomVPL@8GmrnHtHElgI0B49HyQ|Ib=Vls^B*rkI&6^jk$t>GJ+1 z%#319hdmB{qDwMcpmBTfHonpR+ znGfi$FT9dHHf?ni@_V9V(5?ynM-x)t}(^acneZdegc6r6K1cR z<*Rw96n~=bWiceL2k7~KNAm0-*NJ7fwTX@OOKyB$c$FpScFZ+1IUly@eBN-?1vVQ&avz)Ah*9`kZ z*{PKIR9ls_;zp!=@%MAsE3dxc%+-0_DYoiBO>5Ij0kl9xSHpwl=#`Z?JVNTUY0Kh5 zk%Q`rG0^XB;Vj%X^GW#2WtyLKA5R1m9|uU-a1pukL`Q|)@sog4YCL^Y{+lHeWdia+ zZgZKYeaA5{%(|%a;djXwlw{7aqpoN-L7T~_7CxQI;y03~gEp6hXgy|{BEr*@;_ou6 zriH)>E+`f}l{DU5s^JXU45k)Q5WQA~3)I6f2NtGiZkIiV9@WG0PxDJ-OF%?Mj-*pn>o#u>l`m)B6 zAss4VH@zr8F6@-jpO8Aypmed__6!LtZTncd65s2fpbaNs0KJWBa55vHJk}OoTbP}( zr~*NWrah`x)|~}b35rc9^B14~B~eE&TrpE-`$MJfj=sZg_OM#m?%zJQsF1Ieqt5JR z)1VY6G*rIr{BkXLmtN(f<|uL9$B(e|jkXGTu+Qud~Ew-C4cKwzK+5Z94&a zgRo{x-aUuA?F*pC1fKg~?0jzqvqJxnb^9nz3QGoPve$x}JPI?Vp%jGR@ z0jp2X{#0l0lrYxY@bA_esJs)@VSnzV0n-uVz~G^RYmj^+E;gYbmWw`@{bRP}ls|pn z6uV{N*E?9lA{tq%H^Y90KmlYYN$jMBTt7eBF#&e~k5*aw9gMwc$i5m^A?7CcM8K9m zC0f`(P$6N3peOTTywACLiW%!Q|%&`rA?;7l&rQcdq1}& zqoh+KkN|r{j-w}8S42>Yup^GfBP}%f3$e$CZ|MSDt$GQ#U(6=woV2G!4Zrkb|8zCJ zGGY#%^Z$o~C)DAIRD{$}RwdS7m1`>QE;1yR3)rj*4K14+u2{8OnPlG4bdnmau;t@1 z`*C%B)_qLt9o$l)uefU@v&j}?=m4wfU2B);}n#9wE5dbebg zwe?XYi{g}ta{84Bju;Q}HQGQgfW&d4pZ-%vi9~eQ_ zwm{1i;OCcUbff3(%%dGN#~WUAa?Te*f+pH$yugU%V=BYx^7U7hHS?G6$AKFsUb?RB zb~#VHc}q-oVlwpFDdnCUBvfs-piwS!)eMJ>bnJwFiyr0u3A|%nAj}OUu`221zctiB zRL;I*X)0?YQT+sLmzU|pb*n6J>=(PcgiV1ax(*o?ek0^~g-Xcbxx3a@RSup$$%VGC z`qk?|g=vDZSb-X}nCmi*{%uiVTjCSjfWg zTAxD>L0-sVAal1=T1NRb{T!?*CZ{kUp6pDB{jpL0}X+@7ut2ThIT1)oF=kP$V|%|<;X?pq)92)@le zZTDPE3mTz@UpRUu?JjQZi1q!noLy#RDpQrL;x`--V#@XttTZy5=-Fg3%0}mp*u|^ejYnG^XS)yfAiN5W_EEbfhQ~VVjkCE`#X0&o~)65 z08h*oc9C<=V_QU<~9i1onH5IV+ofMY%iRa))~+I_cS$ z+9F#Yil9Cw;)c+;zI(goJn;}U-Lmt&9wvR@b%(y+U9#v-qFL;nZH@MuQGWz-#%8jFEe^QuOfXosb0>Yt}bzU zJ$aq_tvb|>XJM2s&St8qDW7gHM-*)-dq^yQ9chrR^>)Y-54Fu4D$H)85fj(T$1ga6RRehBh}aB)JK(Ezivznwa;8R zV5u`bqEVPSV54^&*puSKrH9A!f)*SNu5jj6%%T2uU`MY~%CWHZjV2+;Q99H?ew*^Q z^d_~?roKp<2fVcstE8-9AMV_X0;tI8$S?*u1SnHZ{`ht+;n{~12+7x%!bG4OGSe;5 zsl(=FO>JZDo88Xyji)-->w^+@9IP4?sFV!Uj(MDx_2j;vAd4K|E<1&X==ggN$1&IV z?u`4|Hb(7}?_ITDUL+P5wVei+w;*pTg;&^2z1f_R57id1jWJ(F&e#U{29g}@PUSAx z9WB?t*xk$|xkN(MdNaR~L~nF3Og`yH!AO?#s#w@9J*K9)u5_e=%0Y*3>RmqyeZ<$$ zi>#i*@4pe-m_~PYTGkOMi4a`r%T{h}NsD7tAXn1*eOqQHgD8dAVCDlX3+}^A)*_$j zu3nV@NnF|Wsila-@=Mq@^E$XYs^pge?@)2GwxFI+S{m(I{Nc0>Fdy?qK z``7OWox(es&?&+gDFMrhaa>>GWZVLm|w_v+UgR=B*7~UO zxVi1qO7m!P;mi;GfrCDou7>B%g|gpV2PV@#_92iAD=!t`!8BrYq#U|$hAZ;$2bm7` zT!ZkNKHocLQw7XHvi+YQ$mLVisi_Tb%Ho;#mOzo@Zpce!H3lF z%mX|PA$0pUnybDs9O>zY|BXIPu`nKs;Mz}7VaMH~oH*g1bR;eGUV!T2cfnCGn%%}I z@YA=!CQds&ko>1MCz7@XXU43UV1_3zf12r*eHaqg_{vYEZ$(!(bA|NLrK1nh;^UsC z#k+b@{5QQ`afz8)?k4+9Ay9M_+~th zmhr0&sv}_n+UZBwg@3d6|1IhNghT#ErN5{&|B&UT;o@BZr`eF|-U)-os9T>%tP_MB z_u0X;qPIiMBa8&|Vm6X%(Tcwt$&f2Riv5(6&;L^rLn<*+t84iWb>Np>IsQqK^V!-9 zTvMf(o3fy9E8(%g8Ty<$U_euxn@d${25VNP--*f$IdPU^ur$G919vx2VzgOmtYMS_ zg-jD2#^gU$#j&U8)eHn>du6~@|EJpfDda@re^^l_m3XdB zmCxEj7guObO2RXLQje>9c;`cRf<;+HDjgMiiO05wP@V6Wi)?1%%bNQ;ESVMx!ji4y zPgdN^sZ5(=@SlI9dJ`{O*U~12XPe-O!S(it_TtgLLa*l*4J zDBtt$y?e3}Xa$Bm8ec-1Q0)pEnMym8n$rC;a$r~4bza{xm%4lRRqbe%BkUnlx_)~C z68_xX)M6oC*jW}_C&VaVI~f8lGu$ao^N785>sH~`gaPMl>l2l-r8}Jy5u^%aLm$$g zuS-y!rxIk{UYUw0Ht~kVdQhSIEZ4~BVXRur@q(fp?cDB7&`2X4wEf!bEdk&}O}4oO z>bFFFC{j{iG)?T2MDCKJtL>oqt6v=s_Gf6ALkXvMMZ!*a2;6s6cmSZ}JF#;{mow-sh;boJ)IYTWAOtAMH9QH_hd}QCpDhE{PHt^6& zU>?lm;=NO~P!_oy&7LXu1=!}wKHk|$d^%f=khk3 z4Y>mE&*a>tpPII{Sk(N)AbGdpp(poCJU;%67-*3a9pyH>-*hl|EA4{u#M6G&BI3`^(?a;S%gkV% zqHWQ^dm8qPlbvi|q$|xn7#*y0(DW_bKY<{3MQ*4VnK}%;264x!cDhBf5O3t>`S$sM zhLOse#~-U^+F_AX&0-PzIKEL1qf~q<7Vw&EjWX}gJKsB82<1Md)9`s|7I7ue;P(tw zJ7*P}3=I_jxQC)PoSrH+>5_f$;7#?8CS+i%mC^zPuU)5h5{Jvk&KguzEl=09Nr-^9;qzzdm$E$a z@#_m}3{InIv|_(yMTp9u12YS`P3oWfyKM$edZY{{iV*(Q4GoFGL3rfCn0?_ov$7mx z@xiiQHx#scmO0GuLiWm_@LY}L%yX1qhl(1{UmFmi&XCZRky2_KiAT&F+khRyh>h!})vvVd;9ho$}8O>!h^+7N= z+Owz&t57X_@39-#(E9Uju2ieU=c48-Cw}8_FBTn7td$7&lXL$t1E*<2b}>$WApS32 zhF3SG_~@|1{4eexRhglzS^Nxr7=#Rh)Eig&*)6Gts0L%Q`mE!wm}_*fOu#neosx}I*;0#>hn|^ z#tq3*%hNN&J8%5i@>3C8tZZyA+ivMjZQRsq6dZs z8*$E@PbVL#V^5YMbwg0KV^^(Pqo}Nicz+EEF;1P;Nf4^mK4-tI^M}xyJscB;JN@17 zF08^TY}1Dhkz5vETGph|sBy_zL$1aM->)*PgEZIslcuUfXd0sDANqsLsafM?@ln&( zE5q{@=NY52@K{w+LWUm|zPQAud6(0ui9Y#D^@7tWebkR7ssk3I=QY?&nQ)m z&6CVr;MR-pE4}YTRm!dCl(;ZqRA7R0uQiqii^F`U0IeM$OV^97Cn%kw8Krm9_mHXH1ON7h!w{*T^{SQrgcUD!W8sz?E+5 z44#pRmrA(#VS%iR38BFEcCFi^LQ83T*MFV!=~k>t##85Z2k2CwsP|;J0gFznr&;@} z8k=pYFfOC>Rm|?c`$$#~K>$#DgZ&zl*Kc71<}H!0=g@KMN`U5n!DsuwDpNfMRb1TyrEcNKX4KQkrx^z=DUxW+w$(}l- z4_foIGWLE*|3TbhAAS!s(UedF?(S`e+IY@we7_GE6%Jrfs(GC5#$iuB<|0;#<9^7f z7{jO#%l+m&QVU(2&e5BzV>DPbmlhVrs1W11H%f7yTA0q%(Q)2qoW$@`g`3(uH}rXvzQn9JQ8z(a&)uFriqz(_BdrbuSkQLS>WN55s!37* zxb>K5UL#J4sY_+))2U~3>ny{^t#i!@ECitV)b&<*Cz+9Q6s6gLMGim@Ri(jIzp^h z-oS<=$`I z)h&4%3S1qLcZw2d(B;6S5L0ps8iKgE6=U`@NSoQOPdbnrVH^-$jY6l~J(Wc=HzdKYxqJmvQM5$m z=B#(FYW)D=jewyQv{>Qq?#K#|Y zRSNa-VS2M0;1oRe1#S=ucZ)m58q9@lV*(0v>dYp`!Dbe>2|2%a5qVE7ypna-*v| zB}(-68PXfGCMrg%y;vJ5e#xoX_TjJpsiA-<5M22JS6Si^Z-B+{TI$u>!5vyVL(U7& z)yx&ncky&)d|FMYvydjxoo?E=((#oJXL1yJBYKpdjEPk_sXTy8q-E7$x7n4PlKNPy zg=vhxTEEoNrc)_XTkSkillP`&q&&M74?S$BA@upfQE*;>$|V?5z!EvOI3GlBHijV;ccNa5%;eP3ToQjn-q3l zdDWI?Q*oI}T)^%}2v4#Vwy9cN|3CooeDm@I)8zMh|1hCVp4d@JYe zX%P3FVk7PQVms3&Ga?1!trF8+^GZ>IjiwvRw=n2Ag28djD#iH%K}ufwPEXp6hpRR8 zO!`VAW=_w)^WPMp=C`^(-(zWPh#=#0C{Jf)`Ar^9YXh}zS$A_k!bV+;83$1_cIA5W z+q^J$H>jr4tISXvrcimQGnZ2ea1h6?sY_6{-s5N68?QQ68fdCg?dD<)<|nNa_Og!! zt*(b9AG)dQ{5>P>Hq&B-OZ(tv%X2r26}As7N1jZsJ9gOwL{aiItx!Y~B}PC!uVGu% z@jp$vf8%15h*3ho6#+H7Q~C$diQ(RKH*U!KoTp&u(}`3X6g_~{JqotpSQIenO$w~& z;CAW0UxCgQ`i}e<>+Rd@OT&Jd$za0#Rs8Rpd{J;L^$U~BMTOhVIxFaQ->KPes?$x= zO|g=%Biop!ZjeTp32-qC^Z+L<8}h2J-d*+~=;x#?u8m4yvZR)QvB$SBub&-{WUoh1 zxZyQ|*la3rR74nCzp7U0#7*`>LJ! zf~!}b<^{S1BF#6z5cRO3=&p42q%;*}ev7$9Mm9g+$rVPJ@M~b5? zH4D$S!9>U?&w@<{oxaTn1hir!?_UnUjlWT)14^NJq zS~xn-lv9U{qwqJz*%OPeoNbrueQag7#^4uJV2BX0dccJJwv*xPti@$qmB2a^Q-=xP zd0`8J?v%)Sni>>Yz6`skW$m7#pq*-KLQ%vLQZ0rXihY&wP_4K>aS`&C$M=8o2<&iHwN-e4>SZrw? zcv}k5GC+e+W?9T>#$*M?nfup!MEkO>VfI1D?5`?ns-ycCva6T6@K5a?P%jGZg0ZKd zWXs`I)S%Q@%O*5c7wi!Qefz;B9b(9QzqI^PIr3EFo370o+DF?jN(WHw#7qHUDEPtc zGzA!PJ0J-a9xS{PG7MEp^)wu=Rey$)mD7Hfm{EZzylr*?1WR%eO(d;G;U`Y6EHGwh z)&$LL8GeF`t)0~%6mfzZbrEWnHSV6IX{@w|K%4mTMLoDnM@?y+bR&!iy=o$`T z2*3DGbv-x6H%`evqdMsPvD{RlMYTuP?eblXITn|0^2G^6Sp?fP@+fAV9m9bV(_p5X zwyO#Z22GRJhSTHg3w*CmJ@6PV9RUqzp}T!LM$dEh(CaI4?a=V_<|^W}s6N5VD*2DG z2Ml{UB#joK9vhb$V|e_X&G9U`>z?7kkjvrDH1d30c+bGBCx@kBXJ(D0^0_RNx}C&t z8U!7K{(DY#=n@|frFcQ}FGhB;J}-Iol8KO5wjO?sij@phLJ2aZ#Bu2jYgi7V? zzOZxdGH&U*@K`MW7riWlINXq-GN>XqBFCRfymvu=Q{&DfXPcSJ1fFx>-Q4V9ZSp1_ z$`FW>tK*yY?3U3f;vMKsyzxT_koY6~I3eeI4sJC%=l80Il;OE-4_-Ph#QKZ}$( zzkx2Qjhvr3?KZ}uyX(?!bOzaSoR)IincAqaS*j*%?YdcV!R?@{oo^#De$BRneqm3^ zh{AonMAYVMj9dS{yz2f^|Ac7Q7PAt~nw%sic<-Xg@u-VAsR3`%gZb8~@8E^34?lN1 z-ma{>gY;yH$?Xc2I;tGt_vsx>v1TyH?WU+j1y^8ZxOGmjHR#R6FU$MEOBA$ zYx$2Islm?}Ki6jd9@ap{rKv-!LW!T!OK~&E>iP@uGiTxiY$_8ArrU|56_HNFMao?mSDb z{>sDav^&>SpAa2|^bFsWcgH^&0>UjL!&}|nc{)YiFOu3o<}N2;;jx4e#+#zft2Qn* zjjpHR2;av!wUCKVWwIqrDzuhdbY`PWn5QKxSe=GvN2kL!%fy_I6es+}(XFCcF+RD_DvP%ZEN>lD8Qx{@ z?Pm+woqFPS!@E{#UL-c7%dqK9Mo|lTF`F#B#f^e(W}`+$j7C@m#k`tIf#Se7DKFFU z&7H0(sakg*eYbyYu(}^&)A_DYl&lWw_gavdfTE1sd@eFx*EP|5rszvRG%9w}fsKaM zGkeGzuwpv}CN_PdhlF_V*ehJo6tk@c<%{U}M`P(miZK0zrST2dV?1PrZ=|)JZ!B7O z=TZ=;SkT5-+O4{Nc!gC+_x%`UM~zX539s?90hR{q)yN^kF5#+75L|JTcynkdeyIo@ z+6^Y`GQP(u6I*?isX~+B0@{j7GemL?=U9H+MBWbi* z6uET*A$SMY*3H*{W?v1|8FcD*0fHJXys^b)xVNwliy;bi#Bv_!Jc)7dMeVCMIre99 zU<01^ydMS$d-&ah_cO13g9l}lr zaWORWL0CdwjhT9+UPDkbCLRu;=K6pez|G42#MR8osF_eqc7Zqku2Ep`{;ZkbsN9&l zWn)-sbNx^ez$7pZPabSJi1V?N)FJqkJ_P85!>lYGFUw z``E!UQi;$bcsdroxJi|ciXbP?Rc7G@_aA+uY=j*MDv_==tEMX^6el3I$4ITepQW`N zE|(E>a38?rB_sR2G#;Fg?9M*i5Ob2_WFisExWjI91_ic$y2_h77_P9Q z4_F+U{7LSkZ5XtN5|G&&7=bd6%*2?I?`eRy?0jx-rLR-smYTCHI!S+MVVK*^fZLAX{n(`40VhWddYli zKGpgW&_df)%xMr+gb?=viOzH-OVpX2p{nXGxbIIW;dmiF0 zew&&U6x-&DH8>rH>ATdCMF&YR9GB{ydtb3^v|-+6-T-_V%_Ou{CNLaxavP+J>(T!5 zitSRc^7{ogi$-*4lk@w?A;|Dm&qa<;hd^4dZuY~&CjHlkea}vd5!@1!n+v&n_eC}T z8r|_(A7|P|(qr}>E%_*kv5yul)su*i0vB3%`vDh>_q)rj{9;V${%afmcgPocdD%A2EVBJ~jQY+Jq=B22?lA)NX z{EFxffk#AIX9v8NFSk<24b5mpyMSXv`?i(bsv@+0nbLw?<4!+~`j91pNldi-djgceiI}FXm&E;h9C~l;TkDRjnx6tPB?_40? zjrlqgm)Wxr#i2N0{&^ie@KzyJVd1i2S=Z_|vP>-H$;8{^45Y=^G~`Wy6n-acb{8Y7 z()EYA8kGybCfzcYPX%1Na^^5|^Y?V%=@+So!JGB&0x0mKKrqAYGOe*%<_wD7%lm=P zq}9C3@lRS_90UeR*rf$GT2v3X{Nz_}Xr{cvzdpz61p+0abnMB&5>siosECL;n^vtX zw`Wc>2KHk0O(Ma~;m3Q>_cZO4K;_P|y$WFg@R!K}7XW_HsCX9WTDoy|Ape_I`vw4u zGz(qBlN->oyfDOD8xpb?wZW*6aM^9Gnq7uWyc9i76}Mu?i+HW0>nN}XJ>7XO_9%o; zu1m1=C^&%-W5~plY>vFR7ujELjy2#uW{uX(*b{TU$qaW6v{Tvl9r%-MqNjndjwik4s_8iw-uTiq)rSq0$;h zD2h5MOio&9%1M_fzhdq(ALyF&zW}!AsWGDKuR%h`5|L zJOe=QPoTXb1bMT1rAUTa&&(k*FeJ13dPL^uw)^GZvU)C(k(tmiwv8>Hv@BMUK=0uo z0EFjqJllQJ_>%2Lrg^y-Zj%<%y(hjeh$+N_{QPbeo!nn;u*gtO&YTVK+(=3^A`o+& z8&qj%gZEK*aHBHN&jb(N0J=^ljGfk)Ng@xn8dqXp^?*}JIb zTNZ-0syRYagDR5450;rt@j_shT`HQT#@~ySAgYI2J z1opCtS@S6tYdYcIx{TToF+8y5_Z_GhjnMV}K|CE`^oCH0KWj&P3v+p(($D)fLym8C zD#b+gi(G~Z-^t=R{X5z-w%smC;r{0HZ%dDTOmAWYA{f?Sd-~Z4l_O?b62YT`;m>|U!p?tb3M?=&CXgq^^Spy_EjEOT1KMX13{L+ZwIhXZ)0&sbUPf8AOclz zk{!w?C7|IeYr7N4(aX*^rFDqnDxfAlX!7p_{;7lVDjE?ApY%(QiMG|c>5$(j_Rlhmd3(hA76ioIvU{bWZL2ca>x>dV(tt~#qW#s?;VvI z#GOt94@myl19Ip|JU77E$Yy^-w%1iar)QPj3{QtAU&v$W9E{`A9O-jGI~N&V^FdY) zc(+D^)2^~=4-yQG=Qzk;m-2h{>JV%qTHR7Q+I260k_8i8gKPySdJ(JefV9#s-F?4f zQ)HwJ<0ge(t4bGfYquOuiI^pg0;PT?#h4q!ObX%U60N3vxy13y+i9_~4p=ql?70jRQOZL?%7S0ANGK&k|pB>Zu%q0haSoE!-?a7pY6e zKTg16Y-+zUX0ZQU5>rWQj9^I*a6&7zo4Ju+BIjJA()jW1s;W(Ex*WY}FDrhV)grHF zcG2#`oXZriskxp-4cqq}v@CPG3O^pduTf}M;Y=lqr9qL8qew0r^J7Vfu{Io`wl02CvwpeAeRm6gZXgS0wrd!UFQ(*dnLQW0RBR;BYo$WSQm&o& zQD-I6ept5#FY0E|TWeyVwcmZqbi8+dW9=Kbridk_yX{51J+FbeDruPqVcNwb6x2uA z$D3bZk_QzUuZQi6v>^q>u{W>{kXVIF#-JeAS)r=6Iz>&eIq{tU0hT8cpFTM%%WxJ5H>$cb~MDTTyZux7-z z+5qh2+}CA>)%{F5J%W1>Nb###^xoDos?l-G^41jK9c24$%?@;tf30qTP05-|4LrB0 zYT{lKvMiFMY=+CW7jK%&xAd0%3jeBrMBlo<0{M^Lb`Fqd;yt%}#6NY{FkY4FEiaN2 z2z;ypibI7Gf2dFtUv>VbOAgDh?lTJTbu(LF#N=l^ytrx_hFpNDdVd62R?XUC z9dh5%(A4yLs^fERiDPp_Yan}}a*^t#4@f zjiX$Pjr}w@K!S7cK+HFP424aK%Q8&c}WgHJVcY7v4_zRA7X@UPHRA0G-H3zJ&$Wb;{4|EpK8i9k9#+6BV12ZGmaU)K~b z{78y+)_|D8DjlJ>GaqCaJ4i`NMvt$w#lwf{Mc_OLVbcw5buL;{1Jr$MkmOBqT7JrS zB?scvnQ9oA*-QG-CDtCO9LOtZjyeQ`*2&02l3ouPa~1tc;NtE=c>>|%OLN2zPPjnn zINxB*m%tLhrgb<3c9auK=kPrqW>)?kCy!w$T5ViRqNsHOqLo9ml76!CAsaRGDA&ON z`YjuT!IFUb8-7zRCQ%b=4{saK;v#l0SYlD)S1U7ppK2a!lK~hu=xSNyin7OsBebi<>XtM!aVcaTC$4>-M6Ru zraO=h6ob?L9Cjg~z&aG$Vp-BNkSVxi#F178wq}%B&(VX>KYL3sa=2J*)I&J;)B_Q~04M9|q=g2te`-5K$E|2E9@w@N7 zz!!!3!m68{@*r(+Jd}HW5M~P@{9bT}rAR$!uypsgWSjZCiL_8wXB%nYoiM0>a}7(s zJ5KuKq9gqUAx|^0L~-xJDhK4--R-<^(61u&tQQHL!dT4r#LClhswQ1u4l2I2L>Jk7 z|BMd`k!4C){JB8@5vXCeq3YAuN&y;?e9^|+ zVl4eioK7HHjg39&B!o~rs$!`40fZJuI_uvZQ8;i!{UrWzAmDtSTmyFF+yvx_?cD6? zpGO7`Y9D(te_lJJZI<{12BRNaJH&ctbl&KB^=SPLA?4GAwjXBAX`N~IXHhy&suZyV z%s2?B4s$)_El0Kf$iLV61FkXtIeY}`rMMa3@v`w{GR4mYibvsVn_%n5n{P!k=1k6Z z=&58sQg%*TRt5dfx3{Mb+#@)8b4cT{H6s0p?=_kmG{1;;_^|{USC&4i9gzX!f06vn z|0>6xc=caMaP^o3Hs5AX{Y3)96Y82+8rztDBlAIrx4;L&H8yOE({O>0>SR8wVR{TH zw*bvMx#~Xdhhed{#bNmfE%&Q1SmAuRK>YF-SMRUb?&IAfEXK#lj~xU@YX%y*1-BM$ zQG@~WHjTNZPqxM~wYZQvIwmD28#HjhUvGFE?2F~p&P05#&x_QutdRs+2`b0>o5Mv0 z&1wTi@t>$1huOFDs(8;qr6Z4?S}uHe92;T(7sv6dCvB!T=Ft%UZc-YaJj{hHRRBe)_Z|K|XP7!$x;IXDx3R*LVhll^6hl=v7! z(f$4*C@%bp0Qy&2;n#Kkj}0-3>L={ye{6Ut7N`HmhQAB*|Fq#TGxHp3I%YPc|}xKNYYyIZT}Vx-mcm+6>Si%2aY4`NwJorfJ5i zl6>tDJWHzxzSO!i|4(iK?K$u@zTYGh<^Hr*8Ah;x#_J}B_MBD#^Tc#^^WU2-Fw#n2 z0-l(1IaTDB^Z98)y{s_(;fm_swTD*vGiFzcvs$RmCs{B)s9HNg|KtPz! z;U~jX>(0|I+ob8BSA9J9OH)T3pQo$L)2Hk*c59LYw&U+-aaiOcS;yZ~{W0#O z4Y_zC0n5fqJB+c@94mS`?@jqV%0J5aGWff~Pavk2`ZYp1$zGopqOjGE8={vDnxAk( zsBlz>{Ep4AR-# z9m4htcop(-+g3(DhP#&)apB^Vn%??-q=)er_^zbWpM;ty=!74L25i_t_;X$P6ozPZ z5uR>1_x?Yte?2>*#Al0)MNQ1P_ztnTo@&w4de+@qY=9-ZF)*D}6exYQrm`sfS4pNy z{XQ9>-^mwd4l&m8NJkgA&*SuLGxKqfe^> zm*@kJm-ux4V{p-~jWx_26f9ZF-v5vGn`ftPxhZW*jOC^X|94#` z{_njk8rJLucGoP|apq##jLo4k*C7cQ$zK|fBl!cTLUdvZuR{Ee0!KbM%fz#7HJ+cI zoYK1f?Bu&uzFgR94uuI*nA-nYDb~x{W}dB*QM~^2tR8Uv%j6D|Fowvabh|!YMRt3o z$MFYaZ(utBOTdn4VGmkBL^-6}_s!+_ImyNS_5O@b;GwR4^DL5YU79&z{mGfGn^I0C zq)jcXWzfP_11UTRQaJXj=+8>y=TGJ*FF$kUc$97UH=jwm-fEtc)q21BA3iR)EcADI zOnbr~Z9U0t*t`^@*SJLHzt;;HV0EQ(qz;sV8(lbmoMS5XOaf-J)^5Y1Pgf$fJ8Jxr zlDJh?+7 zn)S9jtau#H`E@=+k(1LKaDnNurQsaYVsGG1hOhc%Vo$im7eBqTle-9bgSBP7V$>Fo zoRu!}ZP3F2(Za<-=t9m$ww}w&y@7jCmH|f?FGW5~&VH8sdj7o$z~zx9Z&gfwZ>%*q zwm*jxVAJE5R!fzsc#u#f!iEfycGgi$6W| zvs)-P*Zk=}UhUs46VGzb*H!%5ehOQ@UFmvY*VRSk(QBUGk5{W)bMTQ#*a?f+Ut7XH zMEpP6)?YeX*3PUnX}P1>*T=sP{s^zJdIKKSLmPJRuxp$m`M+!Ze^iGhYiyk;@%pH0 zw%C&y-eDX+lX_yVC;(&a+15OB#Z=uN`2vyQk=TM=fFtq%mvA=6%|G2+(k%Nrwxl`u zX=h%__;G_vE_%K4+PDADR;_t`uJ6>3>Bj0_*dkqJv4c@x{n6{$Oea3R+`tbiR1{Je z-_JI%QtmN*xN)js-?lWneJbK>XHL+MY)sJ=j()fQ@KLu(|EteRVJ%+rSdx;D|G#=6 zpzzIp56{)c^0O}#N@>@ux&8LY#?QdR@r)kFZ)1U-7Ku`^1_dcBJ+}Xml{&EPcya@H zU7x~9mOuH2G7cMBNpG6!woN`bb8k<2XL-8K*Be-?xL+)93^u->8C{vYIpc=KB`?|6 zYmV<~5wbJmjj)&aze)86wsIAC@PMZMKhZaHfLoh`6Q#kaWfFJA{g#WzOe@yh_Ss@l zwmi@G)8k7DSUnte#zO2Mm;CFfH$ErsnP=TOU-M=?FueD3tjE>>2=Y_-d3^t$^Q{b< zU@9hsDtvJ3k?VUZ0WqFjpn)K>eQ6|4Wl@ z^R976oIRb1GNk?9V8ovpxnJm8rGwuHZrNz?eBE5pt3x#8HP z35f~x1Dlr>1z4jCt@(q=-3M&a)!J5oqq;zn^ idFcDn^ZTCEeEff&FMI9I2|=w4K;Y@>=d#Wzp$Pyq?7qDK literal 807333 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⪚|EB&?QpuGi)0jd@Yg4@3av34-No7tC}` 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