diff --git a/.github/workflows/lint_pr.yml b/.github/workflows/lint_pr.yml index 132d5861d..d5b4cf72f 100644 --- a/.github/workflows/lint_pr.yml +++ b/.github/workflows/lint_pr.yml @@ -27,6 +27,7 @@ jobs: frontend admin database + dlt-database release federation dht diff --git a/.github/workflows/test_dlt_connector.yml b/.github/workflows/test_dlt_connector.yml index 8628f9f37..1096f415d 100644 --- a/.github/workflows/test_dlt_connector.yml +++ b/.github/workflows/test_dlt_connector.yml @@ -60,15 +60,13 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v3 - - - name: Download Docker Image - uses: actions/download-artifact@v3 - with: - name: docker-dlt-connector-test - path: /tmp + + - name: DLT-Connector | docker-compose mariadb + run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - - name: Load Docker Image - run: docker load < /tmp/dlt-connector.tar + - name: Sleep for 30 seconds + run: sleep 30s + shell: bash - - name: Unit tests - run: docker run --env NODE_ENV=test --rm gradido/dlt-connector:test yarn run test + - name: DLT-Connector | Unit tests + run: cd dlt-database && yarn && yarn build && cd ../dlt-connector && yarn && yarn test diff --git a/backend/jest.config.js b/backend/jest.config.js index c9fbd6e81..1529fad55 100644 --- a/backend/jest.config.js +++ b/backend/jest.config.js @@ -7,7 +7,7 @@ module.exports = { collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**', '!src/seeds/**', '!build/**'], coverageThreshold: { global: { - lines: 89, + lines: 86, }, }, setupFiles: ['/test/testSetup.ts'], diff --git a/backend/src/apis/DltConnectorClient.ts b/backend/src/apis/DltConnectorClient.ts index 593072eef..f01a55d6c 100644 --- a/backend/src/apis/DltConnectorClient.ts +++ b/backend/src/apis/DltConnectorClient.ts @@ -78,27 +78,34 @@ export class DltConnectorClient { * transmit transaction via dlt-connector to iota * and update dltTransactionId of transaction in db with iota message id */ - public async transmitTransaction(transaction?: DbTransaction | null): Promise { - if (transaction) { - const typeString = getTransactionTypeString(transaction.typeId) - const secondsSinceEpoch = Math.round(transaction.balanceDate.getTime() / 1000) - const amountString = transaction.amount.toString() - try { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const { data } = await this.client.rawRequest(sendTransaction, { - input: { - type: typeString, - amount: amountString, - createdAt: secondsSinceEpoch, + public async transmitTransaction( + transaction: DbTransaction, + senderCommunityUuid?: string, + recipientCommunityUuid?: string, + ): Promise { + const typeString = getTransactionTypeString(transaction.typeId) + const amountString = transaction.amount.toString() + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { data } = await this.client.rawRequest(sendTransaction, { + input: { + senderUser: { + uuid: transaction.userGradidoID, + communityUuid: senderCommunityUuid, }, - }) - // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access - return data.sendTransaction.dltTransactionIdHex - } catch (e) { - throw new LogError('Error send sending transaction to dlt-connector: ', e) - } - } else { - throw new LogError('parameter transaction not set...') + recipientUser: { + uuid: transaction.linkedUserGradidoID, + communityUuid: recipientCommunityUuid, + }, + amount: amountString, + type: typeString, + createdAt: transaction.balanceDate.toString(), + }, + }) + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access + return data.sendTransaction.dltTransactionIdHex + } catch (e) { + throw new LogError('Error send sending transaction to dlt-connector: ', e) } } } diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 744f1d3cc..26e759c47 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -19,7 +19,7 @@ const constants = { LOG_LEVEL: process.env.LOG_LEVEL ?? 'info', CONFIG_VERSION: { DEFAULT: 'DEFAULT', - EXPECTED: 'v18.2023-07-10', + EXPECTED: 'v19.2023-08-25', CURRENT: '', }, } @@ -124,6 +124,11 @@ if ( const federation = { FEDERATION_VALIDATE_COMMUNITY_TIMER: Number(process.env.FEDERATION_VALIDATE_COMMUNITY_TIMER) || 60000, + // default value for community-uuid is equal uuid of stage-3 + FEDERATION_XCOM_RECEIVER_COMMUNITY_UUID: + process.env.FEDERATION_XCOM_RECEIVER_COMMUNITY_UUID ?? '56a55482-909e-46a4-bfa2-cd025e894ebc', + FEDERATION_XCOM_MAXREPEAT_REVERTSENDCOINS: + process.env.FEDERATION_XCOM_MAXREPEAT_REVERTSENDCOINS ?? 3, } export const CONFIG = { diff --git a/backend/src/federation/client/1_0/SendCoinsClient.ts b/backend/src/federation/client/1_0/SendCoinsClient.ts new file mode 100644 index 000000000..c57ca4823 --- /dev/null +++ b/backend/src/federation/client/1_0/SendCoinsClient.ts @@ -0,0 +1,93 @@ +import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' +import { GraphQLClient } from 'graphql-request' + +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' + +import { SendCoinsArgs } from './model/SendCoinsArgs' +import { revertSendCoins } from './query/revertSendCoins' +import { voteForSendCoins } from './query/voteForSendCoins' + +// eslint-disable-next-line camelcase +export class SendCoinsClient { + dbCom: DbFederatedCommunity + endpoint: string + client: GraphQLClient + + constructor(dbCom: DbFederatedCommunity) { + this.dbCom = dbCom + this.endpoint = `${dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/'}${ + dbCom.apiVersion + }/` + this.client = new GraphQLClient(this.endpoint, { + method: 'GET', + jsonSerializer: { + parse: JSON.parse, + stringify: JSON.stringify, + }, + }) + } + + voteForSendCoins = async (args: SendCoinsArgs): Promise => { + logger.debug('X-Com: voteForSendCoins against endpoint=', this.endpoint) + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { data } = await this.client.rawRequest(voteForSendCoins, { args }) + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (!data?.voteForSendCoins?.voteForSendCoins) { + logger.warn( + 'X-Com: voteForSendCoins failed with: ', + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + data.voteForSendCoins.voteForSendCoins, + ) + return + } + logger.debug( + 'X-Com: voteForSendCoins successful with result=', + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + data.voteForSendCoins, + ) + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access + return data.voteForSendCoins.voteForSendCoins + } catch (err) { + throw new LogError(`X-Com: voteForSendCoins failed for endpoint=${this.endpoint}:`, err) + } + } + + revertSendCoins = async (args: SendCoinsArgs): Promise => { + logger.debug('X-Com: revertSendCoins against endpoint=', this.endpoint) + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { data } = await this.client.rawRequest(revertSendCoins, { args }) + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (!data?.revertSendCoins?.revertSendCoins) { + logger.warn('X-Com: revertSendCoins without response data from endpoint', this.endpoint) + return false + } + logger.debug(`X-Com: revertSendCoins successful from endpoint=${this.endpoint}`) + return true + } catch (err) { + logger.error(`X-Com: revertSendCoins failed for endpoint=${this.endpoint}`, err) + return false + } + } + + /* + commitSendCoins = async (args: SendCoinsArgs): Promise => { + logger.debug(`X-Com: commitSendCoins against endpoint='${this.endpoint}'...`) + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { data } = await this.client.rawRequest(commitSendCoins, { args }) + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (!data?.commitSendCoins?.acknowledged) { + logger.warn('X-Com: commitSendCoins without response data from endpoint', this.endpoint) + return false + } + logger.debug(`X-Com: commitSendCoins successful from endpoint=${this.endpoint}`) + return true + } catch (err) { + throw new LogError(`X-Com: commitSendCoins failed for endpoint=${this.endpoint}`, err) + } + } + */ +} diff --git a/backend/src/federation/client/1_0/model/SendCoinsArgs.ts b/backend/src/federation/client/1_0/model/SendCoinsArgs.ts new file mode 100644 index 000000000..545aab822 --- /dev/null +++ b/backend/src/federation/client/1_0/model/SendCoinsArgs.ts @@ -0,0 +1,29 @@ +import { Decimal } from 'decimal.js-light' +import { ArgsType, Field } from 'type-graphql' + +@ArgsType() +export class SendCoinsArgs { + @Field(() => String) + communityReceiverIdentifier: string + + @Field(() => String) + userReceiverIdentifier: string + + @Field(() => String) + creationDate: string + + @Field(() => Decimal) + amount: Decimal + + @Field(() => String) + memo: string + + @Field(() => String) + communitySenderIdentifier: string + + @Field(() => String) + userSenderIdentifier: string + + @Field(() => String) + userSenderName: string +} diff --git a/backend/src/federation/client/1_0/model/SendCoinsResult.ts b/backend/src/federation/client/1_0/model/SendCoinsResult.ts new file mode 100644 index 000000000..1897410cc --- /dev/null +++ b/backend/src/federation/client/1_0/model/SendCoinsResult.ts @@ -0,0 +1,17 @@ +import { ArgsType, Field } from 'type-graphql' + +@ArgsType() +export class SendCoinsResult { + constructor() { + this.vote = false + } + + @Field(() => Boolean) + vote: boolean + + @Field(() => String) + receiverFirstName: string + + @Field(() => String) + receiverLastName: string +} diff --git a/backend/src/federation/client/1_0/query/revertSendCoins.ts b/backend/src/federation/client/1_0/query/revertSendCoins.ts new file mode 100644 index 000000000..881107cb4 --- /dev/null +++ b/backend/src/federation/client/1_0/query/revertSendCoins.ts @@ -0,0 +1,25 @@ +import { gql } from 'graphql-request' + +export const revertSendCoins = gql` + mutation ( + $communityReceiverIdentifier: String! + $userReceiverIdentifier: String! + $creationDate: String! + $amount: Decimal! + $memo: String! + $communitySenderIdentifier: String! + $userSenderIdentifier: String! + $userSenderName: String! + ) { + revertSendCoins( + communityReceiverIdentifier: $communityReceiverIdentifier + userReceiverIdentifier: $userReceiverIdentifier + creationDate: $creationDate + amount: $amount + memo: $memo + communitySenderIdentifier: $communitySenderIdentifier + userSenderIdentifier: $userSenderIdentifier + userSenderName: $userSenderName + ) + } +` diff --git a/backend/src/federation/client/1_0/query/voteForSendCoins.ts b/backend/src/federation/client/1_0/query/voteForSendCoins.ts new file mode 100644 index 000000000..f0f75198f --- /dev/null +++ b/backend/src/federation/client/1_0/query/voteForSendCoins.ts @@ -0,0 +1,25 @@ +import { gql } from 'graphql-request' + +export const voteForSendCoins = gql` + mutation ( + $communityReceiverIdentifier: String! + $userReceiverIdentifier: String! + $creationDate: String! + $amount: Decimal! + $memo: String! + $communitySenderIdentifier: String! + $userSenderIdentifier: String! + $userSenderName: String! + ) { + voteForSendCoins( + communityReceiverIdentifier: $communityReceiverIdentifier + userReceiverIdentifier: $userReceiverIdentifier + creationDate: $creationDate + amount: $amount + memo: $memo + communitySenderIdentifier: $communitySenderIdentifier + userSenderIdentifier: $userSenderIdentifier + userSenderName: $userSenderName + ) + } +` diff --git a/backend/src/federation/client/1_1/SendCoinsClient.ts b/backend/src/federation/client/1_1/SendCoinsClient.ts new file mode 100644 index 000000000..586f8561e --- /dev/null +++ b/backend/src/federation/client/1_1/SendCoinsClient.ts @@ -0,0 +1,5 @@ +// eslint-disable-next-line camelcase +import { SendCoinsClient as V1_0_SendCoinsClient } from '@/federation/client/1_0/SendCoinsClient' + +// eslint-disable-next-line camelcase +export class SendCoinsClient extends V1_0_SendCoinsClient {} diff --git a/backend/src/federation/client/SendCoinsClientFactory.ts b/backend/src/federation/client/SendCoinsClientFactory.ts new file mode 100644 index 000000000..2c7b90f01 --- /dev/null +++ b/backend/src/federation/client/SendCoinsClientFactory.ts @@ -0,0 +1,62 @@ +import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' + +// eslint-disable-next-line camelcase +import { SendCoinsClient as V1_0_SendCoinsClient } from '@/federation/client/1_0/SendCoinsClient' +// eslint-disable-next-line camelcase +import { SendCoinsClient as V1_1_SendCoinsClient } from '@/federation/client/1_1/SendCoinsClient' +import { ApiVersionType } from '@/federation/enum/apiVersionType' + +// eslint-disable-next-line camelcase +type SendCoinsClient = V1_0_SendCoinsClient | V1_1_SendCoinsClient + +interface SendCoinsClientInstance { + id: number + // eslint-disable-next-line no-use-before-define + client: SendCoinsClient +} + +// eslint-disable-next-line @typescript-eslint/no-extraneous-class +export class SendCoinsClientFactory { + private static instanceArray: SendCoinsClientInstance[] = [] + + /** + * The Singleton's constructor should always be private to prevent direct + * construction calls with the `new` operator. + */ + // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function + private constructor() {} + + private static createSendCoinsClient = (dbCom: DbFederatedCommunity) => { + switch (dbCom.apiVersion) { + case ApiVersionType.V1_0: + return new V1_0_SendCoinsClient(dbCom) + case ApiVersionType.V1_1: + return new V1_1_SendCoinsClient(dbCom) + default: + return null + } + } + + /** + * The static method that controls the access to the singleton instance. + * + * This implementation let you subclass the Singleton class while keeping + * just one instance of each subclass around. + */ + public static getInstance(dbCom: DbFederatedCommunity): SendCoinsClient | null { + const instance = SendCoinsClientFactory.instanceArray.find( + (instance) => instance.id === dbCom.id, + ) + if (instance) { + return instance.client + } + const client = SendCoinsClientFactory.createSendCoinsClient(dbCom) + if (client) { + SendCoinsClientFactory.instanceArray.push({ + id: dbCom.id, + client, + } as SendCoinsClientInstance) + } + return client + } +} diff --git a/backend/src/graphql/resolver/util/processXComSendCoins.ts b/backend/src/graphql/resolver/util/processXComSendCoins.ts new file mode 100644 index 000000000..b39985aaa --- /dev/null +++ b/backend/src/graphql/resolver/util/processXComSendCoins.ts @@ -0,0 +1,116 @@ +import { Community as DbCommunity } from '@entity/Community' +import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' +import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction' +import { User as dbUser } from '@entity/User' +import { Decimal } from 'decimal.js-light' + +import { CONFIG } from '@/config' +import { SendCoinsArgs } from '@/federation/client/1_0/model/SendCoinsArgs' +// eslint-disable-next-line camelcase +import { SendCoinsClient as V1_0_SendCoinsClient } from '@/federation/client/1_0/SendCoinsClient' +import { SendCoinsClientFactory } from '@/federation/client/SendCoinsClientFactory' +import { PendingTransactionState } from '@/graphql/enum/PendingTransactionState' +import { TransactionTypeId } from '@/graphql/enum/TransactionTypeId' +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' +import { calculateSenderBalance } from '@/util/calculateSenderBalance' +import { fullName } from '@/util/utilities' + +export async function processXComPendingSendCoins( + receiverFCom: DbFederatedCommunity, + receiverCom: DbCommunity, + senderCom: DbCommunity, + creationDate: Date, + amount: Decimal, + memo: string, + sender: dbUser, + recipient: dbUser, +): Promise { + try { + logger.debug( + `XCom: processXComPendingSendCoins...`, + receiverFCom, + receiverCom, + senderCom, + creationDate, + amount, + memo, + sender, + recipient, + ) + // first calculate the sender balance and check if the transaction is allowed + const senderBalance = await calculateSenderBalance(sender.id, amount.mul(-1), creationDate) + if (!senderBalance) { + throw new LogError('User has not enough GDD or amount is < 0', senderBalance) + } + logger.debug(`X-Com: calculated senderBalance = `, senderBalance) + + const client = SendCoinsClientFactory.getInstance(receiverFCom) + // eslint-disable-next-line camelcase + if (client instanceof V1_0_SendCoinsClient) { + const args = new SendCoinsArgs() + args.communityReceiverIdentifier = receiverCom.communityUuid + ? receiverCom.communityUuid + : CONFIG.FEDERATION_XCOM_RECEIVER_COMMUNITY_UUID + args.userReceiverIdentifier = recipient.gradidoID + args.creationDate = creationDate.toISOString() + args.amount = amount + args.memo = memo + args.communitySenderIdentifier = senderCom.communityUuid + ? senderCom.communityUuid + : 'homeCom-UUID' + args.userSenderIdentifier = sender.gradidoID + args.userSenderName = fullName(sender.firstName, sender.lastName) + logger.debug(`X-Com: ready for voteForSendCoins with args=`, args) + const recipientName = await client.voteForSendCoins(args) + logger.debug(`X-Com: returnd from voteForSendCoins:`, recipientName) + if (recipientName) { + // writing the pending transaction on receiver-side was successfull, so now write the sender side + try { + const pendingTx = DbPendingTransaction.create() + pendingTx.amount = amount.mul(-1) + pendingTx.balance = senderBalance ? senderBalance.balance : new Decimal(0) + pendingTx.balanceDate = creationDate + pendingTx.decay = senderBalance ? senderBalance.decay.decay : new Decimal(0) + pendingTx.decayStart = senderBalance ? senderBalance.decay.start : null + pendingTx.linkedUserCommunityUuid = receiverCom.communityUuid + ? receiverCom.communityUuid + : CONFIG.FEDERATION_XCOM_RECEIVER_COMMUNITY_UUID + pendingTx.linkedUserGradidoID = recipient.gradidoID + pendingTx.linkedUserName = recipientName + pendingTx.memo = memo + pendingTx.previous = senderBalance ? senderBalance.lastTransactionId : null + pendingTx.state = PendingTransactionState.NEW + pendingTx.typeId = TransactionTypeId.SEND + if (senderCom.communityUuid) pendingTx.userCommunityUuid = senderCom.communityUuid + pendingTx.userGradidoID = sender.gradidoID + pendingTx.userName = fullName(sender.firstName, sender.lastName) + logger.debug(`X-Com: initialized sender pendingTX=`, pendingTx) + + await DbPendingTransaction.insert(pendingTx) + logger.debug(`X-Com: sender pendingTx successfully inserted...`) + } catch (err) { + logger.error(`Error in writing sender pending transaction: `, err) + // revert the existing pending transaction on receiver side + let revertCount = 0 + logger.debug(`X-Com: first try to revertSendCoins of receiver`) + do { + if (await client.revertSendCoins(args)) { + logger.debug(`revertSendCoins()-1_0... successfull after revertCount=`, revertCount) + // treat revertingSendCoins as an error of the whole sendCoins-process + throw new LogError('Error in writing sender pending transaction: `, err') + } + } while (CONFIG.FEDERATION_XCOM_MAXREPEAT_REVERTSENDCOINS > revertCount++) + throw new LogError( + `Error in reverting receiver pending transaction even after revertCount=`, + revertCount, + ) + } + logger.debug(`voteForSendCoins()-1_0... successfull`) + } + } + } catch (err) { + logger.error(`Error:`, err) + } + return true +} diff --git a/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.test.ts b/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.test.ts index 871c31a89..d9a2da569 100644 --- a/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.test.ts +++ b/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.test.ts @@ -6,6 +6,7 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Connection } from '@dbTools/typeorm' +import { Community } from '@entity/Community' import { DltTransaction } from '@entity/DltTransaction' import { Transaction } from '@entity/Transaction' import { ApolloServerTestClient } from 'apollo-server-testing' @@ -14,6 +15,7 @@ import { Decimal } from 'decimal.js-light' // import { Response } from 'graphql-request/dist/types' import { GraphQLClient } from 'graphql-request' import { Response } from 'graphql-request/dist/types' +import { v4 as uuidv4 } from 'uuid' import { testEnvironment, cleanDB } from '@test/helpers' import { logger, i18n as localization } from '@test/testSetup' @@ -80,6 +82,16 @@ let testEnv: { } */ +async function createHomeCommunity(): Promise { + const homeCommunity = Community.create() + homeCommunity.foreign = false + homeCommunity.communityUuid = uuidv4() + homeCommunity.url = 'localhost' + homeCommunity.publicKey = Buffer.from('0x6e6a6c6d6feffe', 'hex') + await Community.save(homeCommunity) + return homeCommunity +} + async function createTxCREATION1(verified: boolean): Promise { let tx = Transaction.create() tx.amount = new Decimal(1000) @@ -358,6 +370,7 @@ describe('create and send Transactions to DltConnector', () => { txCREATION1 = await createTxCREATION1(false) txCREATION2 = await createTxCREATION2(false) txCREATION3 = await createTxCREATION3(false) + await createHomeCommunity() CONFIG.DLT_CONNECTOR = false await sendTransactionsToDltConnector() @@ -413,6 +426,7 @@ describe('create and send Transactions to DltConnector', () => { txCREATION1 = await createTxCREATION1(false) txCREATION2 = await createTxCREATION2(false) txCREATION3 = await createTxCREATION3(false) + await createHomeCommunity() CONFIG.DLT_CONNECTOR = true @@ -481,6 +495,7 @@ describe('create and send Transactions to DltConnector', () => { txCREATION1 = await createTxCREATION1(true) txCREATION2 = await createTxCREATION2(true) txCREATION3 = await createTxCREATION3(true) + await createHomeCommunity() txSEND1to2 = await createTxSend1ToReceive2(false) txRECEIVE2From1 = await createTxReceive2FromSend1(false) diff --git a/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.ts b/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.ts index 98ea255c1..98e1ffbe3 100644 --- a/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.ts +++ b/backend/src/graphql/resolver/util/sendTransactionsToDltConnector.ts @@ -1,4 +1,5 @@ import { IsNull } from '@dbTools/typeorm' +import { Community } from '@entity/Community' import { DltTransaction } from '@entity/DltTransaction' import { Transaction } from '@entity/Transaction' @@ -16,6 +17,13 @@ export async function sendTransactionsToDltConnector(): Promise { try { await createDltTransactions() const dltConnector = DltConnectorClient.getInstance() + // TODO: get actual communities from users + const homeCommunity = await Community.findOneOrFail({ where: { foreign: false } }) + const senderCommunityUuid = homeCommunity.communityUuid + if (!senderCommunityUuid) { + throw new Error('Cannot find community uuid of home community') + } + const recipientCommunityUuid = '' if (dltConnector) { logger.debug('with sending to DltConnector...') const dltTransactions = await DltTransaction.find({ @@ -23,9 +31,17 @@ export async function sendTransactionsToDltConnector(): Promise { relations: ['transaction'], order: { createdAt: 'ASC', id: 'ASC' }, }) + for (const dltTx of dltTransactions) { + if (!dltTx.transaction) { + continue + } try { - const messageId = await dltConnector.transmitTransaction(dltTx.transaction) + const messageId = await dltConnector.transmitTransaction( + dltTx.transaction, + senderCommunityUuid, + recipientCommunityUuid, + ) const dltMessageId = Buffer.from(messageId, 'hex') if (dltMessageId.length !== 32) { logger.error( diff --git a/backend/src/util/calculateSenderBalance.ts b/backend/src/util/calculateSenderBalance.ts new file mode 100644 index 000000000..89e417d35 --- /dev/null +++ b/backend/src/util/calculateSenderBalance.ts @@ -0,0 +1,21 @@ +import { Decimal } from 'decimal.js-light' + +import { Decay } from '@model/Decay' + +import { getLastTransaction } from '@/graphql/resolver/util/getLastTransaction' + +import { calculateDecay } from './decay' + +export async function calculateSenderBalance( + userId: number, + amount: Decimal, + time: Date, +): Promise<{ balance: Decimal; decay: Decay; lastTransactionId: number } | null> { + const lastTransaction = await getLastTransaction(userId) + if (!lastTransaction) return null + + const decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, time) + + const balance = decay.balance.add(amount.toString()) + return { balance, lastTransactionId: lastTransaction.id, decay } +} diff --git a/dlt-connector/.env.dist b/dlt-connector/.env.dist index 96867eebb..1247ac3ec 100644 --- a/dlt-connector/.env.dist +++ b/dlt-connector/.env.dist @@ -1,4 +1,4 @@ -CONFIG_VERSION=v2.2023-07-07 +CONFIG_VERSION=v4.2023-09-12 # SET LOG LEVEL AS NEEDED IN YOUR .ENV # POSSIBLE VALUES: all | trace | debug | info | warn | error | fatal @@ -7,6 +7,16 @@ CONFIG_VERSION=v2.2023-07-07 # IOTA IOTA_API_URL=https://chrysalis-nodes.iota.org IOTA_COMMUNITY_ALIAS=GRADIDO: TestHelloWelt2 +IOTA_HOME_COMMUNITY_SEED=aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899 + +# Database +DB_HOST=localhost +DB_PORT=3306 +DB_USER=root +DB_PASSWORD= +DB_DATABASE=gradido_dlt +DB_DATABASE_TEST=gradido_dlt_test +TYPEORM_LOGGING_RELATIVE_PATH=typeorm.backend.log # DLT-Connector -DLT_CONNECTOR_PORT=6000 \ No newline at end of file +DLT_CONNECTOR_PORT=6010 \ No newline at end of file diff --git a/dlt-connector/.env.template b/dlt-connector/.env.template index bd9466046..e3793f642 100644 --- a/dlt-connector/.env.template +++ b/dlt-connector/.env.template @@ -3,6 +3,16 @@ CONFIG_VERSION=$DLT_CONNECTOR_CONFIG_VERSION #IOTA IOTA_API_URL=$IOTA_API_URL IOTA_COMMUNITY_ALIAS=$IOTA_COMMUNITY_ALIAS +IOTA_HOME_COMMUNITY_SEED=$IOTA_HOME_COMMUNITY_SEED + +# Database +DB_HOST=localhost +DB_PORT=3306 +DB_USER=root +DB_PASSWORD= +DB_DATABASE=gradido_dlt +DB_DATABASE_TEST=$DB_DATABASE_TEST +TYPEORM_LOGGING_RELATIVE_PATH=typeorm.backend.log # DLT-Connector DLT_CONNECTOR_PORT=$DLT_CONNECTOR_PORT \ No newline at end of file diff --git a/dlt-connector/Dockerfile b/dlt-connector/Dockerfile index 6e5e628f7..3bdaf0679 100644 --- a/dlt-connector/Dockerfile +++ b/dlt-connector/Dockerfile @@ -16,7 +16,7 @@ ENV BUILD_COMMIT="0000000" ## SET NODE_ENV ENV NODE_ENV="production" ## App relevant Envs -ENV PORT="6000" +ENV PORT="6010" # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -44,6 +44,7 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +RUN mkdir -p /dlt-database ################################################################################## # DEVELOPMENT (Connected to the local environment, to reload on demand) ########## @@ -56,7 +57,7 @@ FROM base as development # Run command # (for development we need to execute yarn install since the # node_modules are on another volume and need updating) -CMD /bin/sh -c "cd /app && yarn install && yarn run dev" +CMD /bin/sh -c "cd /dlt-database && yarn install && yarn build && cd /app && yarn install && yarn run dev" ################################################################################## # BUILD (Does contain all files and is therefore bloated) ######################## @@ -65,13 +66,21 @@ FROM base as build # Copy everything from dlt-connector COPY ./dlt-connector/ ./ +# Copy everything from dlt-database +COPY ./dlt-database/ ../dlt-database/ # yarn install dlt-connector RUN yarn install --production=false --frozen-lockfile --non-interactive +# yarn install dlt-database +RUN cd ../dlt-database && yarn install --production=false --frozen-lockfile --non-interactive + # yarn build RUN yarn run build +# yarn build dlt-database +RUN cd ../dlt-database && yarn run build + ################################################################################## # TEST ########################################################################### ################################################################################## @@ -90,9 +99,10 @@ RUN apk del rust cargo python3 make g++ # Copy "binary"-files from build image COPY --from=build ${DOCKER_WORKDIR}/build ./build - +COPY --from=build ${DOCKER_WORKDIR}/../dlt-database/build ../dlt-database/build # We also copy the node_modules express and serve-static for the run script COPY --from=build ${DOCKER_WORKDIR}/node_modules ./node_modules +COPY --from=build ${DOCKER_WORKDIR}/../dlt-database/node_modules ../dlt-database/node_modules # Copy static files # COPY --from=build ${DOCKER_WORKDIR}/public ./public # Copy package.json for script definitions (lock file should not be needed) diff --git a/dlt-connector/jest.config.js b/dlt-connector/jest.config.js index 45bee507e..723aa840b 100644 --- a/dlt-connector/jest.config.js +++ b/dlt-connector/jest.config.js @@ -6,7 +6,7 @@ module.exports = { collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**', '!src/seeds/**', '!build/**'], coverageThreshold: { global: { - lines: 63, + lines: 77, }, }, setupFiles: ['/test/testSetup.ts'], @@ -14,22 +14,26 @@ module.exports = { modulePathIgnorePatterns: ['/build/'], moduleNameMapper: { '@/(.*)': '/src/$1', + '@arg/(.*)': '/src/graphql/arg/$1', + '@controller/(.*)': '/src/controller/$1', '@enum/(.*)': '/src/graphql/enum/$1', '@resolver/(.*)': '/src/graphql/resolver/$1', '@input/(.*)': '/src/graphql/input/$1', '@proto/(.*)': '/src/proto/$1', '@test/(.*)': '/test/$1', + '@typeorm/(.*)': '/src/typeorm/$1', '@client/(.*)': '/src/client/$1', '@entity/(.*)': // eslint-disable-next-line n/no-process-env process.env.NODE_ENV === 'development' - ? '/../database/entity/$1' - : '/../database/build/entity/$1', + ? '/../dlt-database/entity/$1' + : '/../dlt-database/build/entity/$1', '@dbTools/(.*)': // eslint-disable-next-line n/no-process-env process.env.NODE_ENV === 'development' - ? '/../database/src/$1' - : '/../database/build/src/$1', + ? '/../dlt-database/src/$1' + : '/../dlt-database/build/src/$1', + '@validator/(.*)': '/src/graphql/validator/$1', }, } /* diff --git a/dlt-connector/package.json b/dlt-connector/package.json index 36c777cb6..47e9136ff 100644 --- a/dlt-connector/package.json +++ b/dlt-connector/package.json @@ -25,6 +25,7 @@ "cors": "^2.8.5", "cross-env": "^7.0.3", "decimal.js-light": "^2.5.1", + "dlt-database": "file:../dlt-database", "dotenv": "10.0.0", "express": "4.17.1", "graphql": "^16.7.1", @@ -32,6 +33,7 @@ "log4js": "^6.7.1", "nodemon": "^2.0.20", "reflect-metadata": "^0.1.13", + "sodium-native": "^4.0.4", "tsconfig-paths": "^4.1.2", "type-graphql": "^2.0.0-beta.2" }, @@ -41,6 +43,7 @@ "@types/cors": "^2.8.13", "@types/jest": "^27.0.2", "@types/node": "^18.11.18", + "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.57.1", "@typescript-eslint/parser": "^5.57.1", @@ -58,6 +61,8 @@ "prettier": "^2.8.7", "ts-jest": "^27.0.5", "ts-node": "^10.9.1", + "typeorm": "^0.3.17", + "typeorm-extension": "^3.0.1", "typescript": "^4.9.4" }, "engines": { diff --git a/dlt-connector/src/config/index.ts b/dlt-connector/src/config/index.ts index be0d4b7da..fc8c780b8 100644 --- a/dlt-connector/src/config/index.ts +++ b/dlt-connector/src/config/index.ts @@ -4,11 +4,12 @@ dotenv.config() const constants = { LOG4JS_CONFIG: 'log4js-config.json', + DB_VERSION: '0002-refactor_add_community', // default log level on production should be info LOG_LEVEL: process.env.LOG_LEVEL || 'info', CONFIG_VERSION: { DEFAULT: 'DEFAULT', - EXPECTED: 'v2.2023-07-07', + EXPECTED: 'v4.2023-09-12', CURRENT: '', }, } @@ -17,13 +18,24 @@ const server = { PRODUCTION: process.env.NODE_ENV === 'production' || false, } +const database = { + DB_HOST: process.env.DB_HOST ?? 'localhost', + DB_PORT: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 3306, + DB_USER: process.env.DB_USER ?? 'root', + DB_PASSWORD: process.env.DB_PASSWORD ?? '', + DB_DATABASE: process.env.DB_DATABASE ?? 'gradido_dlt', + DB_DATABASE_TEST: process.env.DB_DATABASE_TEST ?? 'gradido_dlt_test', + TYPEORM_LOGGING_RELATIVE_PATH: process.env.TYPEORM_LOGGING_RELATIVE_PATH ?? 'typeorm.backend.log', +} + const iota = { IOTA_API_URL: process.env.IOTA_API_URL ?? 'https://chrysalis-nodes.iota.org', IOTA_COMMUNITY_ALIAS: process.env.IOTA_COMMUNITY_ALIAS ?? 'GRADIDO: TestHelloWelt2', + IOTA_HOME_COMMUNITY_SEED: process.env.IOTA_HOME_COMMUNITY_SEED ?? null, } const dltConnector = { - DLT_CONNECTOR_PORT: process.env.DLT_CONNECTOR_PORT || 6000, + DLT_CONNECTOR_PORT: process.env.DLT_CONNECTOR_PORT || 6010, } // Check config version @@ -41,6 +53,7 @@ if ( export const CONFIG = { ...constants, ...server, + ...database, ...iota, ...dltConnector, } diff --git a/dlt-connector/src/controller/Community.test.ts b/dlt-connector/src/controller/Community.test.ts new file mode 100644 index 000000000..d8c5ad0de --- /dev/null +++ b/dlt-connector/src/controller/Community.test.ts @@ -0,0 +1,66 @@ +import 'reflect-metadata' +import { CommunityDraft } from '@/graphql/input/CommunityDraft' +import { create as createCommunity, getAllTopics, isExist } from './Community' +import { TestDB } from '@test/TestDB' +import { getDataSource } from '@/typeorm/DataSource' +import { Community } from '@entity/Community' +import { iotaTopicFromCommunityUUID } from '@/utils/typeConverter' + +jest.mock('@typeorm/DataSource', () => ({ + getDataSource: () => TestDB.instance.dbConnect, +})) + +describe('controller/Community', () => { + beforeAll(async () => { + await TestDB.instance.setupTestDB() + // apolloTestServer = await createApolloTestServer() + }) + + afterAll(async () => { + await TestDB.instance.teardownTestDB() + }) + + describe('createCommunity', () => { + it('valid community', async () => { + const communityDraft = new CommunityDraft() + communityDraft.foreign = false + communityDraft.createdAt = '2022-05-01T17:00:12.128Z' + communityDraft.uuid = '3d813cbb-47fb-32ba-91df-831e1593ac29' + + const iotaTopic = iotaTopicFromCommunityUUID(communityDraft.uuid) + expect(iotaTopic).toEqual('204ef6aed15fbf0f9da5819e88f8eea8e3adbe1e2c2d43280780a4b8c2d32b56') + + const createdAtDate = new Date(communityDraft.createdAt) + const communityEntity = createCommunity(communityDraft) + expect(communityEntity).toMatchObject({ + iotaTopic, + createdAt: createdAtDate, + foreign: false, + }) + await getDataSource().manager.save(communityEntity) + }) + }) + + describe('list communities', () => { + it('get all topics', async () => { + expect(await getAllTopics()).toMatchObject([ + '204ef6aed15fbf0f9da5819e88f8eea8e3adbe1e2c2d43280780a4b8c2d32b56', + ]) + }) + + it('isExist with communityDraft', async () => { + const communityDraft = new CommunityDraft() + communityDraft.foreign = false + communityDraft.createdAt = '2022-05-01T17:00:12.128Z' + communityDraft.uuid = '3d813cbb-47fb-32ba-91df-831e1593ac29' + expect(await isExist(communityDraft)).toBe(true) + }) + + it('createdAt with ms precision', async () => { + const list = await Community.findOne({ where: { foreign: false } }) + expect(list).toMatchObject({ + createdAt: new Date('2022-05-01T17:00:12.128Z'), + }) + }) + }) +}) diff --git a/dlt-connector/src/controller/Community.ts b/dlt-connector/src/controller/Community.ts new file mode 100644 index 000000000..eff1b2b64 --- /dev/null +++ b/dlt-connector/src/controller/Community.ts @@ -0,0 +1,28 @@ +import { CommunityDraft } from '@/graphql/input/CommunityDraft' +import { iotaTopicFromCommunityUUID } from '@/utils/typeConverter' +import { Community } from '@entity/Community' + +export const isExist = async (community: CommunityDraft | string): Promise => { + const iotaTopic = + community instanceof CommunityDraft ? iotaTopicFromCommunityUUID(community.uuid) : community + const result = await Community.find({ + where: { iotaTopic }, + }) + return result.length > 0 +} + +export const create = (community: CommunityDraft, topic?: string): Community => { + const communityEntity = Community.create() + communityEntity.iotaTopic = topic ?? iotaTopicFromCommunityUUID(community.uuid) + communityEntity.createdAt = new Date(community.createdAt) + communityEntity.foreign = community.foreign + if (!community.foreign) { + // TODO: generate keys + } + return communityEntity +} + +export const getAllTopics = async (): Promise => { + const communities = await Community.find({ select: { iotaTopic: true } }) + return communities.map((community) => community.iotaTopic) +} diff --git a/dlt-connector/src/controller/GradidoTransaction.ts b/dlt-connector/src/controller/GradidoTransaction.ts new file mode 100644 index 000000000..671f3f57a --- /dev/null +++ b/dlt-connector/src/controller/GradidoTransaction.ts @@ -0,0 +1,10 @@ +import { GradidoTransaction } from '@/proto/3_3/GradidoTransaction' +import { TransactionBody } from '@/proto/3_3/TransactionBody' + +export const create = (body: TransactionBody): GradidoTransaction => { + const transaction = new GradidoTransaction({ + bodyBytes: Buffer.from(TransactionBody.encode(body).finish()), + }) + // TODO: add correct signature(s) + return transaction +} diff --git a/dlt-connector/src/controller/TransactionBase.ts b/dlt-connector/src/controller/TransactionBase.ts new file mode 100644 index 000000000..9833226a9 --- /dev/null +++ b/dlt-connector/src/controller/TransactionBase.ts @@ -0,0 +1,6 @@ +import { TransactionValidationLevel } from '@/graphql/enum/TransactionValidationLevel' + +export abstract class TransactionBase { + // validate if transaction is valid, maybe expensive because depending on level several transactions will be fetched from db + public abstract validate(level: TransactionValidationLevel): boolean +} diff --git a/dlt-connector/src/controller/TransactionBody.test.ts b/dlt-connector/src/controller/TransactionBody.test.ts new file mode 100644 index 000000000..eac613ab7 --- /dev/null +++ b/dlt-connector/src/controller/TransactionBody.test.ts @@ -0,0 +1,162 @@ +import 'reflect-metadata' +import { TransactionDraft } from '@/graphql/input/TransactionDraft' +import { create, determineCrossGroupType, determineOtherGroup } from './TransactionBody' +import { UserIdentifier } from '@/graphql/input/UserIdentifier' +import { TransactionError } from '@/graphql/model/TransactionError' +import { TransactionErrorType } from '@/graphql/enum/TransactionErrorType' +import { CrossGroupType } from '@/graphql/enum/CrossGroupType' +import { TransactionType } from '@/graphql/enum/TransactionType' +import Decimal from 'decimal.js-light' + +describe('test controller/TransactionBody', () => { + describe('test create ', () => { + const senderUser = new UserIdentifier() + const recipientUser = new UserIdentifier() + it('test with contribution transaction', () => { + const transactionDraft = new TransactionDraft() + transactionDraft.senderUser = senderUser + transactionDraft.recipientUser = recipientUser + transactionDraft.type = TransactionType.CREATION + transactionDraft.amount = new Decimal(1000) + transactionDraft.createdAt = '2022-01-02T19:10:34.121' + transactionDraft.targetDate = '2021-12-01T10:05:00.191' + const body = create(transactionDraft) + + expect(body.creation).toBeDefined() + expect(body).toMatchObject({ + createdAt: { + seconds: 1641150634, + nanoSeconds: 121000000, + }, + versionNumber: '3.3', + type: CrossGroupType.LOCAL, + otherGroup: '', + creation: { + recipient: { + amount: '1000', + }, + targetDate: { + seconds: 1638353100, + }, + }, + }) + }) + it('test with local send transaction send part', () => { + const transactionDraft = new TransactionDraft() + transactionDraft.senderUser = senderUser + transactionDraft.recipientUser = recipientUser + transactionDraft.type = TransactionType.SEND + transactionDraft.amount = new Decimal(1000) + transactionDraft.createdAt = '2022-01-02T19:10:34.121' + const body = create(transactionDraft) + + expect(body.transfer).toBeDefined() + expect(body).toMatchObject({ + createdAt: { + seconds: 1641150634, + nanoSeconds: 121000000, + }, + versionNumber: '3.3', + type: CrossGroupType.LOCAL, + otherGroup: '', + transfer: { + sender: { + amount: '1000', + }, + }, + }) + }) + + it('test with local send transaction receive part', () => { + const transactionDraft = new TransactionDraft() + transactionDraft.senderUser = senderUser + transactionDraft.recipientUser = recipientUser + transactionDraft.type = TransactionType.RECEIVE + transactionDraft.amount = new Decimal(1000) + transactionDraft.createdAt = '2022-01-02T19:10:34.121' + const body = create(transactionDraft) + + expect(body.transfer).toBeDefined() + expect(body).toMatchObject({ + createdAt: { + seconds: 1641150634, + nanoSeconds: 121000000, + }, + versionNumber: '3.3', + type: CrossGroupType.LOCAL, + otherGroup: '', + transfer: { + sender: { + amount: '1000', + }, + }, + }) + }) + }) + describe('test determineCrossGroupType', () => { + const transactionDraft = new TransactionDraft() + transactionDraft.senderUser = new UserIdentifier() + transactionDraft.recipientUser = new UserIdentifier() + + it('local transaction', () => { + expect(determineCrossGroupType(transactionDraft)).toEqual(CrossGroupType.LOCAL) + }) + + it('test with with invalid input', () => { + transactionDraft.recipientUser.communityUuid = 'a72a4a4a-aa12-4f6c-b3d8-7cc65c67e24a' + expect(() => determineCrossGroupType(transactionDraft)).toThrow( + new TransactionError( + TransactionErrorType.NOT_IMPLEMENTED_YET, + 'cannot determine CrossGroupType', + ), + ) + }) + + it('inbound transaction (send to sender community)', () => { + transactionDraft.type = TransactionType.SEND + expect(determineCrossGroupType(transactionDraft)).toEqual(CrossGroupType.INBOUND) + }) + + it('outbound transaction (send to recipient community)', () => { + transactionDraft.type = TransactionType.RECEIVE + expect(determineCrossGroupType(transactionDraft)).toEqual(CrossGroupType.OUTBOUND) + }) + }) + + describe('test determineOtherGroup', () => { + const transactionDraft = new TransactionDraft() + transactionDraft.senderUser = new UserIdentifier() + transactionDraft.recipientUser = new UserIdentifier() + + it('for inbound transaction, other group is from recipient, missing community id for recipient', () => { + expect(() => determineOtherGroup(CrossGroupType.INBOUND, transactionDraft)).toThrowError( + new TransactionError( + TransactionErrorType.MISSING_PARAMETER, + 'missing recipient user community id for cross group transaction', + ), + ) + }) + it('for inbound transaction, other group is from recipient', () => { + transactionDraft.recipientUser.communityUuid = 'b8e9f00a-5a56-4b23-8c44-6823ac9e0d2d' + expect(determineOtherGroup(CrossGroupType.INBOUND, transactionDraft)).toEqual( + 'b8e9f00a-5a56-4b23-8c44-6823ac9e0d2d', + ) + }) + + it('for outbound transaction, other group is from sender, missing community id for sender', () => { + expect(() => determineOtherGroup(CrossGroupType.OUTBOUND, transactionDraft)).toThrowError( + new TransactionError( + TransactionErrorType.MISSING_PARAMETER, + 'missing sender user community id for cross group transaction', + ), + ) + }) + + it('for outbound transaction, other group is from sender', () => { + transactionDraft.senderUser.communityUuid = 'a72a4a4a-aa12-4f6c-b3d8-7cc65c67e24a' + expect(determineOtherGroup(CrossGroupType.OUTBOUND, transactionDraft)).toEqual( + 'a72a4a4a-aa12-4f6c-b3d8-7cc65c67e24a', + ) + }) + }) +}) diff --git a/dlt-connector/src/controller/TransactionBody.ts b/dlt-connector/src/controller/TransactionBody.ts new file mode 100644 index 000000000..ae5f37710 --- /dev/null +++ b/dlt-connector/src/controller/TransactionBody.ts @@ -0,0 +1,74 @@ +import { CrossGroupType } from '@/graphql/enum/CrossGroupType' +import { TransactionErrorType } from '@/graphql/enum/TransactionErrorType' +import { TransactionType } from '@/graphql/enum/TransactionType' +import { TransactionDraft } from '@/graphql/input/TransactionDraft' +import { TransactionError } from '@/graphql/model/TransactionError' +import { GradidoCreation } from '@/proto/3_3/GradidoCreation' +import { GradidoTransfer } from '@/proto/3_3/GradidoTransfer' +import { TransactionBody } from '@/proto/3_3/TransactionBody' + +export const create = (transaction: TransactionDraft): TransactionBody => { + const body = new TransactionBody(transaction) + // TODO: load pubkeys for sender and recipient user from db + switch (transaction.type) { + case TransactionType.CREATION: + body.creation = new GradidoCreation(transaction) + body.data = 'gradidoCreation' + break + case TransactionType.SEND: + case TransactionType.RECEIVE: + body.transfer = new GradidoTransfer(transaction) + body.data = 'gradidoTransfer' + break + } + return body +} + +export const determineCrossGroupType = ({ + senderUser, + recipientUser, + type, +}: TransactionDraft): CrossGroupType => { + if ( + !recipientUser.communityUuid || + recipientUser.communityUuid === '' || + senderUser.communityUuid === recipientUser.communityUuid || + type === TransactionType.CREATION + ) { + return CrossGroupType.LOCAL + } else if (type === TransactionType.SEND) { + return CrossGroupType.INBOUND + } else if (type === TransactionType.RECEIVE) { + return CrossGroupType.OUTBOUND + } + throw new TransactionError( + TransactionErrorType.NOT_IMPLEMENTED_YET, + 'cannot determine CrossGroupType', + ) +} + +export const determineOtherGroup = ( + type: CrossGroupType, + { senderUser, recipientUser }: TransactionDraft, +): string => { + switch (type) { + case CrossGroupType.LOCAL: + return '' + case CrossGroupType.INBOUND: + if (!recipientUser.communityUuid) { + throw new TransactionError( + TransactionErrorType.MISSING_PARAMETER, + 'missing recipient user community id for cross group transaction', + ) + } + return recipientUser.communityUuid + case CrossGroupType.OUTBOUND: + if (!senderUser.communityUuid) { + throw new TransactionError( + TransactionErrorType.MISSING_PARAMETER, + 'missing sender user community id for cross group transaction', + ) + } + return senderUser.communityUuid + } +} diff --git a/dlt-connector/src/graphql/enum/AddressType.ts b/dlt-connector/src/graphql/enum/AddressType.ts new file mode 100644 index 000000000..26efd2825 --- /dev/null +++ b/dlt-connector/src/graphql/enum/AddressType.ts @@ -0,0 +1,9 @@ +export enum AddressType { + NONE = 0, // if no address was found + COMMUNITY_HUMAN = 1, // creation account for human + COMMUNITY_GMW = 2, // community public budget account + COMMUNITY_AUF = 3, // community compensation and environment founds account + COMMUNITY_PROJECT = 4, // no creations allowed + SUBACCOUNT = 5, // no creations allowed + CRYPTO_ACCOUNT = 6, // user control his keys, no creations +} diff --git a/dlt-connector/src/graphql/enum/CrossGroupType.ts b/dlt-connector/src/graphql/enum/CrossGroupType.ts new file mode 100644 index 000000000..13e968509 --- /dev/null +++ b/dlt-connector/src/graphql/enum/CrossGroupType.ts @@ -0,0 +1,7 @@ +export enum CrossGroupType { + LOCAL = 0, + INBOUND = 1, + OUTBOUND = 2, + // for cross group transaction which haven't a direction like group friend update + // CROSS = 3, +} diff --git a/dlt-connector/src/graphql/enum/TransactionErrorType.ts b/dlt-connector/src/graphql/enum/TransactionErrorType.ts new file mode 100644 index 000000000..0e72292c1 --- /dev/null +++ b/dlt-connector/src/graphql/enum/TransactionErrorType.ts @@ -0,0 +1,13 @@ +import { registerEnumType } from 'type-graphql' + +export enum TransactionErrorType { + NOT_IMPLEMENTED_YET = 'Not Implemented yet', + MISSING_PARAMETER = 'Missing parameter', + ALREADY_EXIST = 'Already exist', + DB_ERROR = 'DB Error', +} + +registerEnumType(TransactionErrorType, { + name: 'TransactionErrorType', + description: 'Transaction Error Type', +}) diff --git a/dlt-connector/src/graphql/enum/TransactionValidationLevel.ts b/dlt-connector/src/graphql/enum/TransactionValidationLevel.ts new file mode 100644 index 000000000..9462dd8a8 --- /dev/null +++ b/dlt-connector/src/graphql/enum/TransactionValidationLevel.ts @@ -0,0 +1,15 @@ +import { registerEnumType } from 'type-graphql' + +export enum TransactionValidationLevel { + SINGLE = 1, // check only the transaction + SINGLE_PREVIOUS = 2, // check also with previous transaction + DATE_RANGE = 3, // check all transaction from within date range by creation automatic the same month + PAIRED = 4, // check paired transaction on another group by cross group transactions + CONNECTED_GROUP = 5, // check all transactions in the group which connected with this transaction address(es) + CONNECTED_BLOCKCHAIN = 6, // check all transactions which connected with this transaction +} + +registerEnumType(TransactionValidationLevel, { + name: 'TransactionValidationLevel', + description: 'Transaction Validation Levels', +}) diff --git a/dlt-connector/src/graphql/input/CommunityDraft.ts b/dlt-connector/src/graphql/input/CommunityDraft.ts new file mode 100644 index 000000000..f028ea06c --- /dev/null +++ b/dlt-connector/src/graphql/input/CommunityDraft.ts @@ -0,0 +1,20 @@ +// https://www.npmjs.com/package/@apollo/protobufjs + +import { IsBoolean, IsUUID } from 'class-validator' +import { Field, InputType } from 'type-graphql' +import { isValidDateString } from '@validator/DateString' + +@InputType() +export class CommunityDraft { + @Field(() => String) + @IsUUID('4') + uuid: string + + @Field(() => Boolean) + @IsBoolean() + foreign: boolean + + @Field(() => String) + @isValidDateString() + createdAt: string +} diff --git a/dlt-connector/src/graphql/input/TransactionDraft.ts b/dlt-connector/src/graphql/input/TransactionDraft.ts new file mode 100755 index 000000000..2021dd9e1 --- /dev/null +++ b/dlt-connector/src/graphql/input/TransactionDraft.ts @@ -0,0 +1,39 @@ +// https://www.npmjs.com/package/@apollo/protobufjs + +import { Decimal } from 'decimal.js-light' +import { TransactionType } from '@enum/TransactionType' +import { InputType, Field } from 'type-graphql' +import { UserIdentifier } from './UserIdentifier' +import { isValidDateString } from '@validator/DateString' +import { IsPositiveDecimal } from '@validator/Decimal' +import { IsEnum, IsObject, ValidateNested } from 'class-validator' + +@InputType() +export class TransactionDraft { + @Field(() => UserIdentifier) + @IsObject() + @ValidateNested() + senderUser: UserIdentifier + + @Field(() => UserIdentifier) + @IsObject() + @ValidateNested() + recipientUser: UserIdentifier + + @Field(() => Decimal) + @IsPositiveDecimal() + amount: Decimal + + @Field(() => TransactionType) + @IsEnum(TransactionType) + type: TransactionType + + @Field(() => String) + @isValidDateString() + createdAt: string + + // only for creation transactions + @Field(() => String, { nullable: true }) + @isValidDateString() + targetDate?: string +} diff --git a/dlt-connector/src/graphql/input/TransactionInput.ts b/dlt-connector/src/graphql/input/TransactionInput.ts index 02eba916e..d20b6ff27 100755 --- a/dlt-connector/src/graphql/input/TransactionInput.ts +++ b/dlt-connector/src/graphql/input/TransactionInput.ts @@ -3,16 +3,22 @@ import { Decimal } from 'decimal.js-light' import { TransactionType } from '../enum/TransactionType' import { InputType, Field } from 'type-graphql' +import { IsEnum, IsInt, Min } from 'class-validator' +import { IsPositiveDecimal } from '../validator/Decimal' @InputType() export class TransactionInput { @Field(() => TransactionType) + @IsEnum(TransactionType) type: TransactionType @Field(() => Decimal) + @IsPositiveDecimal() amount: Decimal @Field(() => Number) + @IsInt() + @Min(978346800) createdAt: number // @protoField.d(4, 'string') diff --git a/dlt-connector/src/graphql/input/UserIdentifier.ts b/dlt-connector/src/graphql/input/UserIdentifier.ts new file mode 100644 index 000000000..12f2e5889 --- /dev/null +++ b/dlt-connector/src/graphql/input/UserIdentifier.ts @@ -0,0 +1,19 @@ +// https://www.npmjs.com/package/@apollo/protobufjs + +import { IsPositive, IsUUID } from 'class-validator' +import { Field, Int, InputType } from 'type-graphql' + +@InputType() +export class UserIdentifier { + @Field(() => String) + @IsUUID('4') + uuid: string + + @Field(() => String, { nullable: true }) + @IsUUID('4') + communityUuid?: string + + @Field(() => Int, { defaultValue: 1, nullable: true }) + @IsPositive() + accountNr?: number +} diff --git a/dlt-connector/src/graphql/model/TransactionError.ts b/dlt-connector/src/graphql/model/TransactionError.ts new file mode 100644 index 000000000..891ad2a89 --- /dev/null +++ b/dlt-connector/src/graphql/model/TransactionError.ts @@ -0,0 +1,20 @@ +import { ObjectType, Field } from 'type-graphql' +import { TransactionErrorType } from '../enum/TransactionErrorType' + +@ObjectType() +export class TransactionError implements Error { + constructor(type: TransactionErrorType, message: string) { + this.type = type + this.message = message + this.name = type.toString() + } + + @Field(() => TransactionErrorType) + type: TransactionErrorType + + @Field(() => String) + message: string + + @Field(() => String) + name: string +} diff --git a/dlt-connector/src/graphql/model/TransactionResult.ts b/dlt-connector/src/graphql/model/TransactionResult.ts new file mode 100644 index 000000000..938c8bcf6 --- /dev/null +++ b/dlt-connector/src/graphql/model/TransactionResult.ts @@ -0,0 +1,26 @@ +import { ObjectType, Field } from 'type-graphql' +import { TransactionError } from './TransactionError' + +@ObjectType() +export class TransactionResult { + constructor(content?: TransactionError | string) { + this.succeed = true + if (content instanceof TransactionError) { + this.error = content + this.succeed = false + } else if (typeof content === 'string') { + this.messageId = content + } + } + + // the error if one happened + @Field(() => TransactionError, { nullable: true }) + error?: TransactionError + + // if no error happend, the message id of the iota transaction + @Field(() => String, { nullable: true }) + messageId?: string + + @Field(() => Boolean) + succeed: boolean +} diff --git a/dlt-connector/src/graphql/resolver/CommunityResolver.test.ts b/dlt-connector/src/graphql/resolver/CommunityResolver.test.ts new file mode 100644 index 000000000..7f1f3ea3c --- /dev/null +++ b/dlt-connector/src/graphql/resolver/CommunityResolver.test.ts @@ -0,0 +1,80 @@ +import 'reflect-metadata' +import { ApolloServer } from '@apollo/server' +import { createApolloTestServer } from '@test/ApolloServerMock' +import assert from 'assert' +import { TestDB } from '@test/TestDB' +import { TransactionResult } from '../model/TransactionResult' + +let apolloTestServer: ApolloServer + +jest.mock('@typeorm/DataSource', () => ({ + getDataSource: () => TestDB.instance.dbConnect, +})) + +describe('graphql/resolver/CommunityResolver', () => { + beforeAll(async () => { + apolloTestServer = await createApolloTestServer() + }) + + describe('tests with db', () => { + beforeAll(async () => { + await TestDB.instance.setupTestDB() + // apolloTestServer = await createApolloTestServer() + }) + + afterAll(async () => { + await TestDB.instance.teardownTestDB() + }) + + it('test add foreign community', async () => { + const response = await apolloTestServer.executeOperation({ + query: 'mutation ($input: CommunityDraft!) { addCommunity(data: $input) {succeed} }', + variables: { + input: { + uuid: '3d813cbb-37fb-42ba-91df-831e1593ac29', + foreign: true, + createdAt: '2012-04-17T17:12:00.0012Z', + }, + }, + }) + assert(response.body.kind === 'single') + expect(response.body.singleResult.errors).toBeUndefined() + const transactionResult = response.body.singleResult.data?.addCommunity as TransactionResult + expect(transactionResult.succeed).toEqual(true) + }) + + it('test add home community', async () => { + const response = await apolloTestServer.executeOperation({ + query: 'mutation ($input: CommunityDraft!) { addCommunity(data: $input) {succeed} }', + variables: { + input: { + uuid: '3d823cad-37fb-41cd-91df-152e1593ac29', + foreign: false, + createdAt: '2012-05-12T13:12:00.2917Z', + }, + }, + }) + assert(response.body.kind === 'single') + expect(response.body.singleResult.errors).toBeUndefined() + const transactionResult = response.body.singleResult.data?.addCommunity as TransactionResult + expect(transactionResult.succeed).toEqual(true) + }) + + it('test add existing community', async () => { + const response = await apolloTestServer.executeOperation({ + query: 'mutation ($input: CommunityDraft!) { addCommunity(data: $input) {succeed} }', + variables: { + input: { + uuid: '3d823cad-37fb-41cd-91df-152e1593ac29', + foreign: false, + createdAt: '2012-05-12T13:12:00.1271Z', + }, + }, + }) + assert(response.body.kind === 'single') + expect(response.body.singleResult.errors).toBeUndefined() + const transactionResult = response.body.singleResult.data?.addCommunity as TransactionResult + expect(transactionResult.succeed).toEqual(false) + }) + }) +}) diff --git a/dlt-connector/src/graphql/resolver/CommunityResolver.ts b/dlt-connector/src/graphql/resolver/CommunityResolver.ts new file mode 100644 index 000000000..d6f9f2d46 --- /dev/null +++ b/dlt-connector/src/graphql/resolver/CommunityResolver.ts @@ -0,0 +1,53 @@ +import { Resolver, Arg, Mutation } from 'type-graphql' + +import { CommunityDraft } from '@input/CommunityDraft' + +import { TransactionResult } from '../model/TransactionResult' +import { TransactionError } from '../model/TransactionError' +import { create as createCommunity, isExist } from '@/controller/Community' +import { TransactionErrorType } from '../enum/TransactionErrorType' +import { logger } from '@/server/logger' +import { iotaTopicFromCommunityUUID } from '@/utils/typeConverter' + +@Resolver() +export class CommunityResolver { + @Mutation(() => TransactionResult) + async addCommunity( + @Arg('data') + communityDraft: CommunityDraft, + ): Promise { + try { + const topic = iotaTopicFromCommunityUUID(communityDraft.uuid) + + // check if community was already written to db + if (await isExist(topic)) { + return new TransactionResult( + new TransactionError(TransactionErrorType.ALREADY_EXIST, 'community already exist!'), + ) + } + const community = createCommunity(communityDraft, topic) + + let result: TransactionResult + + if (!communityDraft.foreign) { + // TODO: CommunityRoot Transaction for blockchain + } + try { + await community.save() + result = new TransactionResult() + } catch (err) { + logger.error('error saving new community into db: %s', err) + result = new TransactionResult( + new TransactionError(TransactionErrorType.DB_ERROR, 'error saving community into db'), + ) + } + return result + } catch (error) { + if (error instanceof TransactionError) { + return new TransactionResult(error) + } else { + throw error + } + } + } +} diff --git a/dlt-connector/src/graphql/resolver/TransactionsResolver.test.ts b/dlt-connector/src/graphql/resolver/TransactionsResolver.test.ts index 0e54fa660..7c02a4306 100644 --- a/dlt-connector/src/graphql/resolver/TransactionsResolver.test.ts +++ b/dlt-connector/src/graphql/resolver/TransactionsResolver.test.ts @@ -2,6 +2,9 @@ import 'reflect-metadata' import { ApolloServer } from '@apollo/server' import { createApolloTestServer } from '@test/ApolloServerMock' import assert from 'assert' +import { TransactionResult } from '../model/TransactionResult' + +let apolloTestServer: ApolloServer jest.mock('@/client/IotaClient', () => { return { @@ -11,8 +14,6 @@ jest.mock('@/client/IotaClient', () => { } }) -let apolloTestServer: ApolloServer - describe('Transaction Resolver Test', () => { beforeAll(async () => { apolloTestServer = await createApolloTestServer() @@ -31,30 +32,45 @@ describe('Transaction Resolver Test', () => { }) it('test mocked sendTransaction', async () => { const response = await apolloTestServer.executeOperation({ - query: 'mutation ($input: TransactionInput!) { sendTransaction(data: $input) }', + query: + 'mutation ($input: TransactionDraft!) { sendTransaction(data: $input) {error {type, message}, messageId} }', variables: { input: { + senderUser: { + uuid: '0ec72b74-48c2-446f-91ce-31ad7d9f4d65', + }, + recipientUser: { + uuid: 'ddc8258e-fcb5-4e48-8d1d-3a07ec371dbe', + }, type: 'SEND', amount: '10', - createdAt: 1688992436, + createdAt: '2012-04-17T17:12:00Z', }, }, }) assert(response.body.kind === 'single') expect(response.body.singleResult.errors).toBeUndefined() - expect(response.body.singleResult.data?.sendTransaction).toBe( + const transactionResult = response.body.singleResult.data?.sendTransaction as TransactionResult + expect(transactionResult.messageId).toBe( '5498130bc3918e1a7143969ce05805502417e3e1bd596d3c44d6a0adeea22710', ) }) it('test mocked sendTransaction invalid transactionType ', async () => { const response = await apolloTestServer.executeOperation({ - query: 'mutation ($input: TransactionInput!) { sendTransaction(data: $input) }', + query: + 'mutation ($input: TransactionDraft!) { sendTransaction(data: $input) {error {type, message}, messageId} }', variables: { input: { + senderUser: { + uuid: '0ec72b74-48c2-446f-91ce-31ad7d9f4d65', + }, + recipientUser: { + uuid: 'ddc8258e-fcb5-4e48-8d1d-3a07ec371dbe', + }, type: 'INVALID', amount: '10', - createdAt: 1688992436, + createdAt: '2012-04-17T17:12:00Z', }, }, }) @@ -71,12 +87,19 @@ describe('Transaction Resolver Test', () => { it('test mocked sendTransaction invalid amount ', async () => { const response = await apolloTestServer.executeOperation({ - query: 'mutation ($input: TransactionInput!) { sendTransaction(data: $input) }', + query: + 'mutation ($input: TransactionDraft!) { sendTransaction(data: $input) {error {type, message}, messageId} }', variables: { input: { + senderUser: { + uuid: '0ec72b74-48c2-446f-91ce-31ad7d9f4d65', + }, + recipientUser: { + uuid: 'ddc8258e-fcb5-4e48-8d1d-3a07ec371dbe', + }, type: 'SEND', amount: 'no number', - createdAt: 1688992436, + createdAt: '2012-04-17T17:12:00Z', }, }, }) @@ -93,12 +116,19 @@ describe('Transaction Resolver Test', () => { it('test mocked sendTransaction invalid created date ', async () => { const response = await apolloTestServer.executeOperation({ - query: 'mutation ($input: TransactionInput!) { sendTransaction(data: $input) }', + query: + 'mutation ($input: TransactionDraft!) { sendTransaction(data: $input) {error {type, message}, messageId} }', variables: { input: { + senderUser: { + uuid: '0ec72b74-48c2-446f-91ce-31ad7d9f4d65', + }, + recipientUser: { + uuid: 'ddc8258e-fcb5-4e48-8d1d-3a07ec371dbe', + }, type: 'SEND', amount: '10', - createdAt: '2023-03-02T10:12:00', + createdAt: 'not valid', }, }, }) @@ -106,10 +136,47 @@ describe('Transaction Resolver Test', () => { expect(response.body.singleResult).toMatchObject({ errors: [ { - message: - 'Variable "$input" got invalid value "2023-03-02T10:12:00" at "input.createdAt"; Float cannot represent non numeric value: "2023-03-02T10:12:00"', + message: 'Argument Validation Error', + extensions: { + code: 'BAD_USER_INPUT', + validationErrors: [ + { + value: 'not valid', + property: 'createdAt', + constraints: { + isValidDateString: 'createdAt must be a valid date string', + }, + }, + ], + }, }, ], }) }) + it('test mocked sendTransaction missing creationDate for contribution', async () => { + const response = await apolloTestServer.executeOperation({ + query: + 'mutation ($input: TransactionDraft!) { sendTransaction(data: $input) {error {type, message}, messageId} }', + variables: { + input: { + senderUser: { + uuid: '0ec72b74-48c2-446f-91ce-31ad7d9f4d65', + }, + recipientUser: { + uuid: 'ddc8258e-fcb5-4e48-8d1d-3a07ec371dbe', + }, + type: 'CREATION', + amount: '10', + createdAt: '2012-04-17T17:12:00Z', + }, + }, + }) + assert(response.body.kind === 'single') + expect(response.body.singleResult.data?.sendTransaction).toMatchObject({ + error: { + type: 'MISSING_PARAMETER', + message: 'missing targetDate for contribution', + }, + }) + }) }) diff --git a/dlt-connector/src/graphql/resolver/TransactionsResolver.ts b/dlt-connector/src/graphql/resolver/TransactionsResolver.ts index df50322fb..282eb11cd 100755 --- a/dlt-connector/src/graphql/resolver/TransactionsResolver.ts +++ b/dlt-connector/src/graphql/resolver/TransactionsResolver.ts @@ -1,9 +1,14 @@ import { Resolver, Query, Arg, Mutation } from 'type-graphql' -import { TransactionInput } from '@input/TransactionInput' -import { TransactionBody } from '@proto/TransactionBody' +import { TransactionDraft } from '@input/TransactionDraft' + +import { create as createTransactionBody } from '@controller/TransactionBody' +import { create as createGradidoTransaction } from '@controller/GradidoTransaction' import { sendMessage as iotaSendMessage } from '@/client/IotaClient' +import { GradidoTransaction } from '@/proto/3_3/GradidoTransaction' +import { TransactionResult } from '../model/TransactionResult' +import { TransactionError } from '../model/TransactionError' @Resolver() export class TransactionResolver { @@ -18,14 +23,23 @@ export class TransactionResolver { return '0.1' } - @Mutation(() => String) + @Mutation(() => TransactionResult) async sendTransaction( @Arg('data') - transaction: TransactionInput, - ): Promise { - const message = TransactionBody.fromObject(transaction) - const messageBuffer = TransactionBody.encode(message).finish() - const resultMessage = await iotaSendMessage(messageBuffer) - return resultMessage.messageId + transaction: TransactionDraft, + ): Promise { + try { + const body = createTransactionBody(transaction) + const message = createGradidoTransaction(body) + const messageBuffer = GradidoTransaction.encode(message).finish() + const resultMessage = await iotaSendMessage(messageBuffer) + return new TransactionResult(resultMessage.messageId) + } catch (error) { + if (error instanceof TransactionError) { + return new TransactionResult(error) + } else { + throw error + } + } } } diff --git a/dlt-connector/src/graphql/scalar/Decimal.ts b/dlt-connector/src/graphql/scalar/Decimal.ts index 5046488e5..b343f383a 100755 --- a/dlt-connector/src/graphql/scalar/Decimal.ts +++ b/dlt-connector/src/graphql/scalar/Decimal.ts @@ -2,7 +2,7 @@ import { Decimal } from 'decimal.js-light' import { GraphQLScalarType, Kind, ValueNode } from 'graphql' -export const DecimalScalar = new GraphQLScalarType({ +export const DecimalScalar = new GraphQLScalarType({ name: 'Decimal', description: 'The `Decimal` scalar type to represent currency values', diff --git a/dlt-connector/src/graphql/schema.ts b/dlt-connector/src/graphql/schema.ts index 84951f360..fc9c26919 100755 --- a/dlt-connector/src/graphql/schema.ts +++ b/dlt-connector/src/graphql/schema.ts @@ -4,10 +4,19 @@ import { buildSchema } from 'type-graphql' import { DecimalScalar } from './scalar/Decimal' import { TransactionResolver } from './resolver/TransactionsResolver' +import { CommunityResolver } from './resolver/CommunityResolver' export const schema = async (): Promise => { return buildSchema({ - resolvers: [TransactionResolver], + resolvers: [TransactionResolver, CommunityResolver], scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], + validate: { + validationError: { target: false }, + skipMissingProperties: true, + skipNullProperties: true, + skipUndefinedProperties: false, + forbidUnknownValues: true, + stopAtFirstError: true, + }, }) } diff --git a/dlt-connector/src/graphql/validator/DateString.ts b/dlt-connector/src/graphql/validator/DateString.ts new file mode 100644 index 000000000..3f46d89ec --- /dev/null +++ b/dlt-connector/src/graphql/validator/DateString.ts @@ -0,0 +1,21 @@ +import { registerDecorator, ValidationOptions } from 'class-validator' + +export function isValidDateString(validationOptions?: ValidationOptions) { + // eslint-disable-next-line @typescript-eslint/ban-types + return function (object: Object, propertyName: string) { + registerDecorator({ + name: 'isValidDateString', + target: object.constructor, + propertyName, + options: validationOptions, + validator: { + validate(value: string): boolean { + return !isNaN(Date.parse(value)) + }, + defaultMessage(): string { + return `${propertyName} must be a valid date string` + }, + }, + }) + } +} diff --git a/dlt-connector/src/graphql/validator/Decimal.ts b/dlt-connector/src/graphql/validator/Decimal.ts new file mode 100644 index 000000000..fd2604514 --- /dev/null +++ b/dlt-connector/src/graphql/validator/Decimal.ts @@ -0,0 +1,22 @@ +import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator' +import { Decimal } from 'decimal.js-light' + +export function IsPositiveDecimal(validationOptions?: ValidationOptions) { + // eslint-disable-next-line @typescript-eslint/ban-types + return function (object: Object, propertyName: string) { + registerDecorator({ + name: 'isPositiveDecimal', + target: object.constructor, + propertyName, + options: validationOptions, + validator: { + validate(value: Decimal): boolean { + return value.greaterThan(0) + }, + defaultMessage(args: ValidationArguments): string { + return `The ${propertyName} must be a positive value ${args.property}` + }, + }, + }) + } +} diff --git a/dlt-connector/src/proto/3_3/GradidoConfirmedTransaction.ts b/dlt-connector/src/proto/3_3/GradidoConfirmedTransaction.ts new file mode 100644 index 000000000..7f0a58109 --- /dev/null +++ b/dlt-connector/src/proto/3_3/GradidoConfirmedTransaction.ts @@ -0,0 +1,34 @@ +import { Field, Message } from '@apollo/protobufjs' +import { GradidoTransaction } from './GradidoTransaction' +import { TimestampSeconds } from './TimestampSeconds' + +/* + id will be set by Node server + running_hash will be also set by Node server, + calculated from previous transaction running_hash and this id, transaction and received +*/ + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class GradidoConfirmedTransaction extends Message { + @Field.d(1, 'uint64') + id: number + + @Field.d(2, 'GradidoTransaction') + transaction: GradidoTransaction + + @Field.d(3, 'TimestampSeconds') + confirmedAt: TimestampSeconds + + @Field.d(4, 'string') + versionNumber: string + + @Field.d(5, 'bytes') + runningHash: Buffer + + @Field.d(6, 'bytes') + messageId: Buffer + + @Field.d(7, 'string') + accountBalance: string +} diff --git a/dlt-connector/src/proto/3_3/GradidoCreation.test.ts b/dlt-connector/src/proto/3_3/GradidoCreation.test.ts new file mode 100644 index 000000000..8b3fd1b3f --- /dev/null +++ b/dlt-connector/src/proto/3_3/GradidoCreation.test.ts @@ -0,0 +1,20 @@ +import 'reflect-metadata' +import { TransactionDraft } from '@/graphql/input/TransactionDraft' +import { GradidoCreation } from './GradidoCreation' +import { TransactionError } from '@/graphql/model/TransactionError' +import { TransactionErrorType } from '@enum/TransactionErrorType' + +describe('proto/3.3/GradidoCreation', () => { + it('test with missing targetDate', () => { + const transactionDraft = new TransactionDraft() + expect(() => { + // eslint-disable-next-line no-new + new GradidoCreation(transactionDraft) + }).toThrowError( + new TransactionError( + TransactionErrorType.MISSING_PARAMETER, + 'missing targetDate for contribution', + ), + ) + }) +}) diff --git a/dlt-connector/src/proto/3_3/GradidoCreation.ts b/dlt-connector/src/proto/3_3/GradidoCreation.ts new file mode 100644 index 000000000..ba6e93652 --- /dev/null +++ b/dlt-connector/src/proto/3_3/GradidoCreation.ts @@ -0,0 +1,32 @@ +import { Field, Message } from '@apollo/protobufjs' + +import { TimestampSeconds } from './TimestampSeconds' +import { TransferAmount } from './TransferAmount' +import { TransactionDraft } from '@/graphql/input/TransactionDraft' +import { TransactionError } from '@/graphql/model/TransactionError' +import { TransactionErrorType } from '@/graphql/enum/TransactionErrorType' + +// need signature from group admin or +// percent of group users another than the receiver +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class GradidoCreation extends Message { + constructor(transaction: TransactionDraft) { + if (!transaction.targetDate) { + throw new TransactionError( + TransactionErrorType.MISSING_PARAMETER, + 'missing targetDate for contribution', + ) + } + super({ + recipient: new TransferAmount({ amount: transaction.amount.toString() }), + targetDate: new TimestampSeconds(new Date(transaction.targetDate)), + }) + } + + @Field.d(1, TransferAmount) + public recipient: TransferAmount + + @Field.d(3, 'TimestampSeconds') + public targetDate: TimestampSeconds +} diff --git a/dlt-connector/src/proto/3_3/GradidoDeferredTransfer.ts b/dlt-connector/src/proto/3_3/GradidoDeferredTransfer.ts new file mode 100644 index 000000000..7b27c064a --- /dev/null +++ b/dlt-connector/src/proto/3_3/GradidoDeferredTransfer.ts @@ -0,0 +1,31 @@ +import { Field, Message } from '@apollo/protobufjs' + +import { GradidoTransfer } from './GradidoTransfer' +import { TimestampSeconds } from './TimestampSeconds' + +// transaction type for chargeable transactions +// for transaction for people which haven't a account already +// consider using a seed number for key pair generation for recipient +// using seed as redeem key for claiming transaction, technically make a default Transfer transaction from recipient address +// seed must be long enough to prevent brute force, maybe base64 encoded +// to own account +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class GradidoDeferredTransfer extends Message { + // amount is amount with decay for time span between transaction was received and timeout + // useable amount can be calculated + // recipient address don't need to be registered in blockchain with register address + @Field.d(1, GradidoTransfer) + public transfer: GradidoTransfer + + // if timeout timestamp is reached if it wasn't used, it will be booked back minus decay + // technically on blockchain no additional transaction will be created because how should sign it? + // the decay for amount and the seconds until timeout is lost no matter what happened + // consider is as fee for this service + // rest decay could be transferred back as separate transaction + @Field.d(2, 'TimestampSeconds') + public timeout: TimestampSeconds + + // split for n recipient + // max gradido per recipient? or per transaction with cool down? +} diff --git a/dlt-connector/src/proto/3_3/GradidoTransaction.ts b/dlt-connector/src/proto/3_3/GradidoTransaction.ts new file mode 100644 index 000000000..ca1a59e30 --- /dev/null +++ b/dlt-connector/src/proto/3_3/GradidoTransaction.ts @@ -0,0 +1,21 @@ +import { Field, Message } from '@apollo/protobufjs' + +import { SignatureMap } from './SignatureMap' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class GradidoTransaction extends Message { + @Field.d(1, SignatureMap) + public sigMap: SignatureMap + + // inspired by Hedera + // bodyBytes are the payload for signature + // bodyBytes are serialized TransactionBody + @Field.d(2, 'bytes') + public bodyBytes: Buffer + + // if it is a cross group transaction the parent message + // id from outbound transaction or other by cross + @Field.d(3, 'bytes') + public parentMessageId: Buffer +} diff --git a/dlt-connector/src/proto/3_3/GradidoTransfer.ts b/dlt-connector/src/proto/3_3/GradidoTransfer.ts new file mode 100644 index 000000000..215ffc60f --- /dev/null +++ b/dlt-connector/src/proto/3_3/GradidoTransfer.ts @@ -0,0 +1,23 @@ +import { Field, Message } from '@apollo/protobufjs' + +import { TransferAmount } from './TransferAmount' +import { TransactionDraft } from '@/graphql/input/TransactionDraft' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class GradidoTransfer extends Message { + constructor(transaction: TransactionDraft, coinOrigin?: string) { + super({ + sender: new TransferAmount({ + amount: transaction.amount.toString(), + communityId: coinOrigin, + }), + }) + } + + @Field.d(1, TransferAmount) + public sender: TransferAmount + + @Field.d(2, 'bytes') + public recipient: Buffer +} diff --git a/dlt-connector/src/proto/3_3/GroupFriendsUpdate.ts b/dlt-connector/src/proto/3_3/GroupFriendsUpdate.ts new file mode 100644 index 000000000..64e74a694 --- /dev/null +++ b/dlt-connector/src/proto/3_3/GroupFriendsUpdate.ts @@ -0,0 +1,15 @@ +import { Field, Message } from '@apollo/protobufjs' + +// connect group together +// only CrossGroupType CROSS (in TransactionBody) +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class GroupFriendsUpdate extends Message { + // if set to true, colors of this both groups are trait as the same + // on creation user get coins still in there color + // on transfer into another group which a connection exist, + // coins will be automatic swapped into user group color coin + // (if fusion between src coin and dst coin is enabled) + @Field.d(1, 'bool') + public colorFusion: boolean +} diff --git a/dlt-connector/src/proto/3_3/RegisterAddress.ts b/dlt-connector/src/proto/3_3/RegisterAddress.ts new file mode 100644 index 000000000..85b8390df --- /dev/null +++ b/dlt-connector/src/proto/3_3/RegisterAddress.ts @@ -0,0 +1,19 @@ +import { Field, Message } from '@apollo/protobufjs' + +import { AddressType } from '@enum/AddressType' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class RegisterAddress extends Message { + @Field.d(1, 'bytes') + public userPubkey: Buffer + + @Field.d(2, 'AddressType') + public addressType: AddressType + + @Field.d(3, 'bytes') + public nameHash: Buffer + + @Field.d(4, 'bytes') + public subaccountPubkey: Buffer +} diff --git a/dlt-connector/src/proto/3_3/SignatureMap.ts b/dlt-connector/src/proto/3_3/SignatureMap.ts new file mode 100644 index 000000000..e48b0232d --- /dev/null +++ b/dlt-connector/src/proto/3_3/SignatureMap.ts @@ -0,0 +1,10 @@ +import { Field, Message } from '@apollo/protobufjs' + +import { SignaturePair } from './SignaturePair' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class SignatureMap extends Message { + @Field.d(1, SignaturePair, 'repeated') + public sigPair: SignaturePair +} diff --git a/dlt-connector/src/proto/3_3/SignaturePair.ts b/dlt-connector/src/proto/3_3/SignaturePair.ts new file mode 100644 index 000000000..07ed4cc55 --- /dev/null +++ b/dlt-connector/src/proto/3_3/SignaturePair.ts @@ -0,0 +1,11 @@ +import { Field, Message } from '@apollo/protobufjs' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class SignaturePair extends Message { + @Field.d(1, 'bytes') + public pubKey: Buffer + + @Field.d(2, 'bytes') + public signature: Buffer +} diff --git a/dlt-connector/src/proto/3_3/Timestamp.test.ts b/dlt-connector/src/proto/3_3/Timestamp.test.ts new file mode 100644 index 000000000..39f6fd2c8 --- /dev/null +++ b/dlt-connector/src/proto/3_3/Timestamp.test.ts @@ -0,0 +1,16 @@ +import { Timestamp } from './Timestamp' + +describe('test timestamp constructor', () => { + it('with date input object', () => { + const now = new Date('2011-04-17T12:01:10.109') + const timestamp = new Timestamp(now) + expect(timestamp.seconds).toEqual(1303041670) + expect(timestamp.nanoSeconds).toEqual(109000000) + }) + + it('with milliseconds number input', () => { + const timestamp = new Timestamp(1303041670109) + expect(timestamp.seconds).toEqual(1303041670) + expect(timestamp.nanoSeconds).toEqual(109000000) + }) +}) diff --git a/dlt-connector/src/proto/3_3/Timestamp.ts b/dlt-connector/src/proto/3_3/Timestamp.ts new file mode 100644 index 000000000..ab060a9bc --- /dev/null +++ b/dlt-connector/src/proto/3_3/Timestamp.ts @@ -0,0 +1,27 @@ +import { Field, Message } from '@apollo/protobufjs' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class Timestamp extends Message { + public constructor(input?: Date | number) { + let seconds = 0 + let nanoSeconds = 0 + if (input instanceof Date) { + seconds = Math.floor(input.getTime() / 1000) + nanoSeconds = (input.getTime() % 1000) * 1000000 // Convert milliseconds to nanoseconds + } else if (typeof input === 'number') { + // Calculate seconds and nanoseconds from milliseconds + seconds = Math.floor(input / 1000) + nanoSeconds = (input % 1000) * 1000000 + } + super({ seconds, nanoSeconds }) + } + + // Number of complete seconds since the start of the epoch + @Field.d(1, 'int64') + public seconds: number + + // Number of nanoseconds since the start of the last second + @Field.d(2, 'int32') + public nanoSeconds: number +} diff --git a/dlt-connector/src/proto/3_3/TimestampSeconds.test.ts b/dlt-connector/src/proto/3_3/TimestampSeconds.test.ts new file mode 100644 index 000000000..92dc79130 --- /dev/null +++ b/dlt-connector/src/proto/3_3/TimestampSeconds.test.ts @@ -0,0 +1,14 @@ +import { TimestampSeconds } from './TimestampSeconds' + +describe('test TimestampSeconds constructor', () => { + it('with date input object', () => { + const now = new Date('2011-04-17T12:01:10.109') + const timestamp = new TimestampSeconds(now) + expect(timestamp.seconds).toEqual(1303041670) + }) + + it('with milliseconds number input', () => { + const timestamp = new TimestampSeconds(1303041670109) + expect(timestamp.seconds).toEqual(1303041670) + }) +}) diff --git a/dlt-connector/src/proto/3_3/TimestampSeconds.ts b/dlt-connector/src/proto/3_3/TimestampSeconds.ts new file mode 100644 index 000000000..055094c6d --- /dev/null +++ b/dlt-connector/src/proto/3_3/TimestampSeconds.ts @@ -0,0 +1,20 @@ +import { Field, Message } from '@apollo/protobufjs' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class TimestampSeconds extends Message { + public constructor(input?: Date | number) { + let seconds = 0 + // Calculate seconds from milliseconds + if (input instanceof Date) { + seconds = Math.floor(input.getTime() / 1000) + } else if (typeof input === 'number') { + seconds = Math.floor(input / 1000) + } + super({ seconds }) + } + + // Number of complete seconds since the start of the epoch + @Field.d(1, 'int64') + public seconds: number +} diff --git a/dlt-connector/src/proto/3_3/TransactionBody.ts b/dlt-connector/src/proto/3_3/TransactionBody.ts new file mode 100644 index 000000000..9e9179b3f --- /dev/null +++ b/dlt-connector/src/proto/3_3/TransactionBody.ts @@ -0,0 +1,66 @@ +import { Field, Message, OneOf } from '@apollo/protobufjs' + +import { CrossGroupType } from '@/graphql/enum/CrossGroupType' + +import { Timestamp } from './Timestamp' +import { GradidoTransfer } from './GradidoTransfer' +import { GradidoCreation } from './GradidoCreation' +import { GradidoDeferredTransfer } from './GradidoDeferredTransfer' +import { GroupFriendsUpdate } from './GroupFriendsUpdate' +import { RegisterAddress } from './RegisterAddress' +import { TransactionDraft } from '@/graphql/input/TransactionDraft' +import { determineCrossGroupType, determineOtherGroup } from '@/controller/TransactionBody' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class TransactionBody extends Message { + public constructor(transaction: TransactionDraft) { + const type = determineCrossGroupType(transaction) + super({ + memo: 'Not implemented yet', + createdAt: new Timestamp(new Date(transaction.createdAt)), + versionNumber: '3.3', + type, + otherGroup: determineOtherGroup(type, transaction), + }) + } + + @Field.d(1, 'string') + public memo: string + + @Field.d(2, Timestamp) + public createdAt: Timestamp + + @Field.d(3, 'string') + public versionNumber: string + + @Field.d(4, CrossGroupType) + public type: CrossGroupType + + @Field.d(5, 'string') + public otherGroup: string + + @OneOf.d( + 'gradidoTransfer', + 'gradidoCreation', + 'groupFriendsUpdate', + 'registerAddress', + 'gradidoDeferredTransfer', + ) + public data: string + + @Field.d(6, 'GradidoTransfer') + transfer?: GradidoTransfer + + @Field.d(7, 'GradidoCreation') + creation?: GradidoCreation + + @Field.d(8, 'GroupFriendsUpdate') + groupFriendsUpdate?: GroupFriendsUpdate + + @Field.d(9, 'RegisterAddress') + registerAddress?: RegisterAddress + + @Field.d(10, 'GradidoDeferredTransfer') + deferredTransfer?: GradidoDeferredTransfer +} diff --git a/dlt-connector/src/proto/3_3/TransferAmount.ts b/dlt-connector/src/proto/3_3/TransferAmount.ts new file mode 100644 index 000000000..f6adc47ff --- /dev/null +++ b/dlt-connector/src/proto/3_3/TransferAmount.ts @@ -0,0 +1,16 @@ +import { Field, Message } from '@apollo/protobufjs' + +// https://www.npmjs.com/package/@apollo/protobufjs +// eslint-disable-next-line no-use-before-define +export class TransferAmount extends Message { + @Field.d(1, 'bytes') + public pubkey: Buffer + + @Field.d(2, 'string') + public amount: string + + // community which created this coin + // used for colored coins + @Field.d(3, 'string') + public communityId: string +} diff --git a/dlt-connector/src/proto/TransactionBody.test.ts b/dlt-connector/src/proto/TransactionBody.test.ts deleted file mode 100644 index 168d15b63..000000000 --- a/dlt-connector/src/proto/TransactionBody.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import 'reflect-metadata' -import { TransactionType } from '@enum/TransactionType' -import { TransactionInput } from '@input/TransactionInput' -import Decimal from 'decimal.js-light' -import { TransactionBody } from './TransactionBody' - -describe('proto/TransactionBodyTest', () => { - it('test compatible with graphql/input/TransactionInput', async () => { - // test data - const type = TransactionType.SEND - const amount = new Decimal('10') - const createdAt = 1688992436 - - // init both objects - // graphql input object - const transactionInput = new TransactionInput() - transactionInput.type = type - transactionInput.amount = amount - transactionInput.createdAt = createdAt - - // protobuf object - const transactionBody = new TransactionBody() - transactionBody.type = type - transactionBody.amount = amount.toString() - transactionBody.createdAt = createdAt - - // create protobuf object from graphql Input object - const message = TransactionBody.fromObject(transactionInput) - // serialize both protobuf objects - const messageBuffer = TransactionBody.encode(message).finish() - const messageBuffer2 = TransactionBody.encode(transactionBody).finish() - - // compare - expect(messageBuffer).toStrictEqual(messageBuffer2) - }) -}) diff --git a/dlt-connector/src/proto/TransactionBody.ts b/dlt-connector/src/proto/TransactionBody.ts deleted file mode 100644 index 8fda5b863..000000000 --- a/dlt-connector/src/proto/TransactionBody.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { TransactionType } from '../graphql/enum/TransactionType' -import { Field, Message } from '@apollo/protobufjs' - -// https://www.npmjs.com/package/@apollo/protobufjs -// eslint-disable-next-line no-use-before-define -export class TransactionBody extends Message { - @Field.d(1, TransactionType) - type: TransactionType - - @Field.d(2, 'string') - amount: string - - @Field.d(3, 'uint64') - createdAt: number - - // @protoField.d(4, 'string') - // communitySum: Decimal -} diff --git a/dlt-connector/src/typeorm/DBVersion.ts b/dlt-connector/src/typeorm/DBVersion.ts new file mode 100644 index 000000000..14da39368 --- /dev/null +++ b/dlt-connector/src/typeorm/DBVersion.ts @@ -0,0 +1,28 @@ +import { Migration } from '@entity/Migration' + +import { logger } from '@/server/logger' + +const getDBVersion = async (): Promise => { + try { + const [dbVersion] = await Migration.find({ order: { version: 'DESC' }, take: 1 }) + return dbVersion ? dbVersion.fileName : null + } catch (error) { + logger.error(error) + return null + } +} + +const checkDBVersion = async (DB_VERSION: string): Promise => { + const dbVersion = await getDBVersion() + if (!dbVersion?.includes(DB_VERSION)) { + logger.error( + `Wrong database version detected - the backend requires '${DB_VERSION}' but found '${ + dbVersion ?? 'None' + }`, + ) + return false + } + return true +} + +export { checkDBVersion, getDBVersion } diff --git a/dlt-connector/src/typeorm/DataSource.ts b/dlt-connector/src/typeorm/DataSource.ts new file mode 100644 index 000000000..eafa977aa --- /dev/null +++ b/dlt-connector/src/typeorm/DataSource.ts @@ -0,0 +1,26 @@ +// TODO This is super weird - since the entities are defined in another project they have their own globals. +// We cannot use our connection here, but must use the external typeorm installation +import { DataSource as DBDataSource, FileLogger } from '@dbTools/typeorm' +import { entities } from '@entity/index' + +import { CONFIG } from '@/config' + +const DataSource = new DBDataSource({ + type: 'mysql', + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + username: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + database: CONFIG.DB_DATABASE, + entities, + synchronize: false, + logging: true, + logger: new FileLogger('all', { + logPath: CONFIG.TYPEORM_LOGGING_RELATIVE_PATH, + }), + extra: { + charset: 'utf8mb4_unicode_ci', + }, +}) + +export const getDataSource = () => DataSource diff --git a/dlt-connector/src/utils/typeConverter.ts b/dlt-connector/src/utils/typeConverter.ts new file mode 100644 index 000000000..bd9e5f8da --- /dev/null +++ b/dlt-connector/src/utils/typeConverter.ts @@ -0,0 +1,17 @@ +import { crypto_generichash as cryptoHash } from 'sodium-native' + +export const uuid4ToBuffer = (uuid: string): Buffer => { + // Remove dashes from the UUIDv4 string + const cleanedUUID = uuid.replace(/-/g, '') + + // Create a Buffer object from the hexadecimal values + const buffer = Buffer.from(cleanedUUID, 'hex') + + return buffer +} + +export const iotaTopicFromCommunityUUID = (communityUUID: string): string => { + const hash = Buffer.alloc(32) + cryptoHash(hash, uuid4ToBuffer(communityUUID)) + return hash.toString('hex') +} diff --git a/dlt-connector/test/TestDB.ts b/dlt-connector/test/TestDB.ts new file mode 100644 index 000000000..457954f7d --- /dev/null +++ b/dlt-connector/test/TestDB.ts @@ -0,0 +1,77 @@ +import { DataSource, FileLogger } from '@dbTools/typeorm' +import { createDatabase } from 'typeorm-extension' + +import { entities } from '@entity/index' + +import { CONFIG } from '@/config' +import { LogError } from '@/server/LogError' + +export class TestDB { + // eslint-disable-next-line no-use-before-define + private static _instance: TestDB + + private constructor() { + if (!CONFIG.DB_DATABASE_TEST) { + throw new LogError('no test db in config') + } + if (CONFIG.DB_DATABASE === CONFIG.DB_DATABASE_TEST) { + throw new LogError( + 'main db is the same as test db, not good because test db will be cleared after each test run', + ) + } + this.dbConnect = new DataSource({ + type: 'mysql', + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + username: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + database: CONFIG.DB_DATABASE_TEST, + entities, + synchronize: true, + dropSchema: true, + logging: true, + logger: new FileLogger('all', { + logPath: CONFIG.TYPEORM_LOGGING_RELATIVE_PATH, + }), + extra: { + charset: 'utf8mb4_unicode_ci', + }, + }) + } + + public static get instance(): TestDB { + if (!this._instance) this._instance = new TestDB() + return this._instance + } + + public dbConnect!: DataSource + + async setupTestDB() { + // eslint-disable-next-line no-console + try { + if (!CONFIG.DB_DATABASE_TEST) { + throw new LogError('no test db in config') + } + await createDatabase({ + ifNotExist: true, + options: { + type: 'mysql', + charset: 'utf8mb4_unicode_ci', + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + username: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + database: CONFIG.DB_DATABASE_TEST, + }, + }) + await this.dbConnect.initialize() + } catch (error) { + // eslint-disable-next-line no-console + console.log(error) + } + } + + async teardownTestDB() { + await this.dbConnect.destroy() + } +} diff --git a/dlt-connector/tsconfig.json b/dlt-connector/tsconfig.json index bdc5e3a9b..3abf9aead 100644 --- a/dlt-connector/tsconfig.json +++ b/dlt-connector/tsconfig.json @@ -51,11 +51,17 @@ "@arg/*": ["src/graphql/arg/*"], "@enum/*": ["src/graphql/enum/*"], "@input/*": ["src/graphql/input/*"], + "@model/*": ["src/graphql/model/*"], "@resolver/*": ["src/graphql/resolver/*"], "@scalar/*": ["src/graphql/scalar/*"], "@test/*": ["test/*"], "@proto/*" : ["src/proto/*"], + "@controller/*": ["src/controller/*"], + "@validator/*" : ["src/graphql/validator/*"], + "@typeorm/*" : ["src/typeorm/*"], /* external */ + "@dbTools/*": ["../dlt-database/src/*", "../../dlt-database/build/src/*"], + "@entity/*": ["../dlt-database/entity/*", "../../dlt-database/build/entity/*"] }, // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ "typeRoots": ["node_modules/@types"], /* List of folders to include type definitions from. */ @@ -79,4 +85,11 @@ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ }, + "references": [ + { + "path": "../dlt-database/tsconfig.json", + // add 'prepend' if you want to include the referenced project in your output file + // "prepend": true + } + ] } diff --git a/dlt-connector/yarn.lock b/dlt-connector/yarn.lock index 54c58c1e6..136e845f5 100644 --- a/dlt-connector/yarn.lock +++ b/dlt-connector/yarn.lock @@ -49,9 +49,9 @@ "@apollo/utils.logger" "^2.0.0" "@apollo/server@^4.7.5": - version "4.7.5" - resolved "https://registry.yarnpkg.com/@apollo/server/-/server-4.7.5.tgz#b3f679dd50898f55b6d11dd61efb1f05e59503b5" - integrity sha512-XobKpTnW/jbmr0DuJ+8zBzoeL6uEat4CkBN7kOCjhXEUuCNxiLrQGrWFVDqgV7bSdOJr6o2POmZYBPNQXLdyvA== + version "4.9.3" + resolved "https://registry.yarnpkg.com/@apollo/server/-/server-4.9.3.tgz#d51fa1745a7e9f3b1d687c6df40256744aaa977a" + integrity sha512-U56Sx/UmzR3Es344hQ/Ptf2EJrH+kV4ZPoLmgGjWoiwf2wYQ/pRSvkSXgjOvoyE34wSa8Gh7f92ljfLfY+6q1w== dependencies: "@apollo/cache-control-types" "^1.0.3" "@apollo/server-gateway-interface" "^1.1.1" @@ -167,72 +167,73 @@ resolved "https://registry.yarnpkg.com/@apollo/utils.withrequired/-/utils.withrequired-2.0.1.tgz#e72bc512582a6f26af150439f7eb7473b46ba874" integrity sha512-YBDiuAX9i1lLc6GeTy1m7DGLFn/gMnvXqlalOIMjM7DeOgIacEjjfwPqb0M1CQ2v11HhR15d1NmxJoRCfrNqcA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.22.5" + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" -"@babel/compat-data@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.6.tgz#15606a20341de59ba02cd2fcc5086fcbe73bf544" - integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg== +"@babel/compat-data@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" + integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.22.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.8.tgz#386470abe884302db9c82e8e5e87be9e46c86785" - integrity sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw== + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" + integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.7" - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helpers" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.8" - "@babel/types" "^7.22.5" - "@nicolo-ribaudo/semver-v6" "^6.3.3" - convert-source-map "^1.7.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helpers" "^7.23.0" + "@babel/parser" "^7.23.0" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.0" + "@babel/types" "^7.23.0" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.2" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/generator@^7.22.7", "@babel/generator@^7.7.2": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.7.tgz#a6b8152d5a621893f2c9dacf9a4e286d520633d5" - integrity sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ== +"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.23.0" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz#e30d61abe9480aa5a83232eb31c111be922d2e52" - integrity sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA== +"@babel/helper-compilation-targets@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-validator-option" "^7.22.5" - "@nicolo-ribaudo/semver-v6" "^6.3.3" + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" browserslist "^4.21.9" lru-cache "^5.1.1" + semver "^6.3.1" -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" @@ -241,26 +242,23 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== +"@babel/helper-module-transforms@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" + integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": version "7.22.5" @@ -274,7 +272,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.22.5", "@babel/helper-split-export-declaration@^7.22.6": +"@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== @@ -286,38 +284,38 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== +"@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== -"@babel/helpers@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" - integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== +"@babel/helpers@^7.23.0": + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" + integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.6" - "@babel/types" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.0" + "@babel/types" "^7.23.0" -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" - integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -410,38 +408,45 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== +"@babel/runtime@^7.21.0": + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" + integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + regenerator-runtime "^0.14.0" -"@babel/traverse@^7.22.5", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8", "@babel/traverse@^7.7.2": - version "7.22.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" - integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== +"@babel/template@^7.22.15", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.7" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" + integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/types" "^7.22.5" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== dependencies: "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -471,15 +476,15 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.0.tgz#7ccb5f58703fa61ffdcbf39e2c604a109e781162" + integrity sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ== -"@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -491,10 +496,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== +"@eslint/js@8.50.0": + version "8.50.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484" + integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ== + +"@faker-js/faker@^8.0.2": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.1.0.tgz#e14896f1c57af2495e341dc4c7bf04125c8aeafd" + integrity sha512-38DT60rumHfBYynif3lmtxMqMqmsOQIxQgEuPZxCk2yUYN0eqWpTACgxi0VpidvsJB8CRxCpvP7B3anK85FjtQ== "@graphql-tools/merge@^8.4.1": version "8.4.2" @@ -543,9 +553,9 @@ value-or-promise "^1.0.12" "@graphql-tools/utils@^10.0.0": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.0.3.tgz#e5d5b217ba643b7b67a35b50086b5d831aadb71c" - integrity sha512-6uO41urAEIs4sXQT2+CYGsUTkHkVo/2MpM/QjoHj6D6xoEF2woXHBpdAVi0HKIInDwZqWgEYOwIFez0pERxa1Q== + version "10.0.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.0.6.tgz#8a809d6bc0df27ffe8964696f182af2383b5974b" + integrity sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ== dependencies: "@graphql-typed-document-node/core" "^3.1.1" dset "^3.1.2" @@ -564,10 +574,10 @@ resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -591,6 +601,18 @@ neon-cli "^0.8" prebuild-install "^6.1.2" +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -790,12 +812,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== @@ -805,12 +822,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -824,17 +836,12 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@nicolo-ribaudo/semver-v6@^6.3.3": - version "6.3.3" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" - integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -857,17 +864,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@pkgr/utils@^2.3.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" - integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== - dependencies: - cross-spawn "^7.0.3" - fast-glob "^3.3.0" - is-glob "^4.0.3" - open "^9.1.0" - picocolors "^1.0.0" - tslib "^2.6.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -936,6 +936,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@sqltools/formatter@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" + integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -962,9 +967,9 @@ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== + version "7.20.2" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" + integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -973,53 +978,53 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.5" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" + integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" + integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" - integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== + version "7.20.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" + integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== dependencies: "@babel/types" "^7.20.7" "@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + version "1.19.3" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd" + integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== dependencies: "@types/connect" "*" "@types/node" "*" "@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.36" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" + integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== dependencies: "@types/node" "*" "@types/cors@^2.8.13": - version "2.8.13" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94" - integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA== + version "2.8.14" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" + integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== dependencies: "@types/node" "*" "@types/express-serve-static-core@^4.17.30", "@types/express-serve-static-core@^4.17.33": - version "4.17.35" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" - integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== + version "4.17.37" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz#7e4b7b59da9142138a2aaa7621f5abedce8c7320" + integrity sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -1027,9 +1032,9 @@ "@types/send" "*" "@types/express@^4.17.13": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + version "4.17.18" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.18.tgz#efabf5c4495c1880df1bdffee604b143b29c4a95" + integrity sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -1037,16 +1042,16 @@ "@types/serve-static" "*" "@types/graceful-fs@^4.1.2": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" + integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== dependencies: "@types/node" "*" "@types/http-errors@*": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" - integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" + integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" @@ -1054,16 +1059,16 @@ integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" + integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" + integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== dependencies: "@types/istanbul-lib-report" "*" @@ -1076,9 +1081,9 @@ pretty-format "^27.0.0" "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== "@types/json5@^0.0.29": version "0.0.29" @@ -1100,23 +1105,30 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== -"@types/node-fetch@^2.6.1": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== +"@types/mysql@^2.15.8": + version "2.15.21" + resolved "https://registry.yarnpkg.com/@types/mysql/-/mysql-2.15.21.tgz#7516cba7f9d077f980100c85fd500c8210bd5e45" + integrity sha512-NPotx5CVful7yB+qZbWtXL2fA4e7aEHkihHLjklc6ID8aq7bhguHgeIoC1EmSNTAuCgI6ZXrjt2ZSaXnYX0EUg== dependencies: "@types/node" "*" - form-data "^3.0.0" -"@types/node@*", "@types/node@^20.1.2": - version "20.4.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.1.tgz#a6033a8718653c50ac4962977e14d0f984d9527d" - integrity sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg== +"@types/node-fetch@^2.6.1": + version "2.6.6" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.6.tgz#b72f3f4bc0c0afee1c0bc9cff68e041d01e3e779" + integrity sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw== + dependencies: + "@types/node" "*" + form-data "^4.0.0" + +"@types/node@*", "@types/node@^20.4.9": + version "20.7.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" + integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== "@types/node@^18.11.18": - version "18.16.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.19.tgz#cb03fca8910fdeb7595b755126a8a78144714eea" - integrity sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA== + version "18.18.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.0.tgz#bd19d5133a6e5e2d0152ec079ac27c120e7f1763" + integrity sha512-3xA4X31gHT1F1l38ATDIL9GpRLdwVhnEFC8Uikv5ZLlXATwrCYyPq7ZWHxzxc3J/30SUiwiYT+bQe0/XvKlWbw== "@types/prettier@^2.1.5": version "2.7.3" @@ -1124,9 +1136,9 @@ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== "@types/range-parser@*": version "1.2.4" @@ -1134,27 +1146,34 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/semver@^7.3.12", "@types/semver@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + version "7.5.3" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" + integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== "@types/send@*": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" - integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + version "0.17.2" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.2.tgz#af78a4495e3c2b79bfbdac3955fdd50e03cc98f2" + integrity sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-static@*": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" - integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== + version "1.15.3" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.3.tgz#2cfacfd1fd4520bbc3e292cca432d5e8e2e3ee61" + integrity sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg== dependencies: "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" +"@types/sodium-native@^2.3.5": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@types/sodium-native/-/sodium-native-2.3.6.tgz#2730191204978a1a96ec7de2f2653ef3e4f7927a" + integrity sha512-MMQ0aR90G9A8WiynSaNsUnzzlkw6akTqYz+OBEgSH/Y3+91X/bkkP3lOJROogLSQMoONM81IX49yVmakEWw6ZA== + dependencies: + "@types/node" "*" + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -1166,19 +1185,19 @@ integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== "@types/validator@^13.7.10": - version "13.7.17" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.7.17.tgz#0a6d1510395065171e3378a4afc587a3aefa7cc1" - integrity sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ== + version "13.11.2" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.2.tgz#a2502325a3c0bd29f36dbac3b763223edd801e17" + integrity sha512-nIKVVQKT6kGKysnNt+xLobr+pFJNssJRi2s034wgWeFBUx01fI8BeHTW2TcRp7VcFu9QCYG8IlChTuovcm0oKQ== "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + version "21.0.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" + integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== "@types/yargs@^16.0.0": - version "16.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" - integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== + version "16.0.6" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" + integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== dependencies: "@types/yargs-parser" "*" @@ -1324,7 +1343,7 @@ agent-base@6: dependencies: debug "4" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1351,6 +1370,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1370,6 +1394,16 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -1378,6 +1412,11 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1432,14 +1471,14 @@ array-flatten@1.1.1: integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^2.1.0: @@ -1447,26 +1486,50 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== +array.prototype.findlastindex@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + async-retry@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" @@ -1555,10 +1618,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -big-integer@^1.6.44: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== +bignumber.js@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" + integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== binary-extensions@^2.0.0: version "2.2.0" @@ -1626,13 +1689,6 @@ body-parser@^1.20.0, body-parser@^1.20.2: type-is "~1.6.18" unpipe "1.0.0" -bplist-parser@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1641,6 +1697,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -1654,14 +1717,14 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.21.9: - version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== + version "4.22.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" + integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" + caniuse-lite "^1.0.30001539" + electron-to-chromium "^1.4.530" + node-releases "^2.0.13" + update-browserslist-db "^1.0.13" bs-logger@0.x: version "0.2.6" @@ -1690,6 +1753,14 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -1702,13 +1773,6 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" -bundle-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" - integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== - dependencies: - run-applescript "^5.0.0" - bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" @@ -1742,12 +1806,12 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001503: - version "1.0.30001515" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" - integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== +caniuse-lite@^1.0.30001539: + version "1.0.30001540" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz#a316ca4f2ae673ab02ff0ec533334016d56ff658" + integrity sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw== -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1756,7 +1820,7 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1820,6 +1884,18 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -1834,6 +1910,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -1912,6 +1997,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +consola@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" + integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -1936,11 +2026,16 @@ content-type@~1.0.4, content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -1981,7 +2076,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1990,6 +2085,11 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" + integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== + cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -2016,6 +2116,13 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +date-fns@^2.29.3: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + date-format@^4.0.14: version "4.0.14" resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" @@ -2079,34 +2186,21 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-browser-id@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" - integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== +define-data-property@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" + integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== dependencies: - bplist-parser "^0.2.0" - untildify "^4.0.0" - -default-browser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" - integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== - dependencies: - bundle-name "^3.0.0" - default-browser-id "^3.0.0" - execa "^7.1.1" - titleize "^3.0.0" - -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -2120,6 +2214,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== +denque@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -2130,6 +2229,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +destr@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.1.tgz#2fc7bddc256fed1183e03f8d148391dde4023cb2" + integrity sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -2167,6 +2271,20 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +"dlt-database@file:../dlt-database": + version "1.23.2" + dependencies: + "@types/uuid" "^8.3.4" + cross-env "^7.0.3" + crypto "^1.0.1" + decimal.js-light "^2.5.1" + dotenv "^10.0.0" + mysql2 "^2.3.0" + reflect-metadata "^0.1.13" + ts-mysql-migrate "^1.0.2" + typeorm "^0.3.16" + uuid "^8.3.2" + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -2188,25 +2306,42 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -dotenv@10.0.0: +dotenv@10.0.0, dotenv@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^16.0.3: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + dset@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.2.tgz#89c436ca6450398396dc6538ea00abc0c54cd45a" integrity sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ebec@^1.1.0, ebec@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ebec/-/ebec-1.1.1.tgz#683a0dc82a77e86349e05b24c43d7233a6d0f840" + integrity sha512-JZ1vcvPQtR+8LGbZmbjG21IxLQq/v47iheJqn2F6yB2CgnGfn8ZVg3myHrf3buIZS8UCwQK0jOSIb3oHX7aH8g== + dependencies: + smob "^1.4.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.431: - version "1.4.455" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.455.tgz#81fe4353ac970eb971c07088c8da8b7f6280ddc9" - integrity sha512-8tgdX0Odl24LtmLwxotpJCVjIndN559AvaOtd67u+2mo+IDsgsTF580NB+uuDCqsHw8yFg53l5+imFV9Fw3cbA== +electron-to-chromium@^1.4.530: + version "1.4.531" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" + integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== emittery@^0.8.1: version "0.8.1" @@ -2218,6 +2353,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2245,18 +2385,19 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== +es-abstract@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" + integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== dependencies: array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" call-bind "^1.0.2" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.1" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" @@ -2271,19 +2412,23 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" + which-typed-array "^1.1.11" es-set-tostringtag@^2.0.1: version "2.0.1" @@ -2347,9 +2492,9 @@ escodegen@^2.0.0: source-map "~0.6.1" eslint-config-prettier@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-config-standard@^17.0.0: version "17.1.0" @@ -2357,29 +2502,28 @@ eslint-config-standard@^17.0.0: integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" + is-core-module "^2.13.0" + resolve "^1.22.4" eslint-import-resolver-typescript@^3.5.4: - version "3.5.5" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" - integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== + version "3.6.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" + integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== dependencies: debug "^4.3.4" enhanced-resolve "^5.12.0" eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" get-tsconfig "^4.5.0" - globby "^13.1.3" is-core-module "^2.11.0" is-glob "^4.0.3" - synckit "^0.8.5" -eslint-module-utils@^2.7.4: +eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== @@ -2395,30 +2539,32 @@ eslint-plugin-es@^4.1.0: regexpp "^3.0.0" eslint-plugin-import@^2.27.5: - version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + version "2.28.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== dependencies: array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" array.prototype.flat "^1.3.1" array.prototype.flatmap "^1.3.1" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" + eslint-module-utils "^2.8.0" has "^1.0.3" - is-core-module "^2.11.0" + is-core-module "^2.13.0" is-glob "^4.0.3" minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" + semver "^6.3.1" + tsconfig-paths "^3.14.2" eslint-plugin-jest@^27.2.1: - version "27.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.2.2.tgz#be4ded5f91905d9ec89aa8968d39c71f3b072c0c" - integrity sha512-euzbp06F934Z7UDl5ZUaRPLAc9MKjh0rMPERrHT7UhlCEwgb25kBj37TvMgWeHZVkR5I9CayswrpoaqZU1RImw== + version "27.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.4.0.tgz#3926cca723c40c3d7a3fe0e1fd911eff5e681f50" + integrity sha512-ukVeKmMPAUA5SWjHenvyyXnirKfHKMdOsTZdn5tZx5EW05HGVQwBohigjFZGGj3zuv1cV6hc82FvWv6LdIbkgg== dependencies: "@typescript-eslint/utils" "^5.10.0" @@ -2463,10 +2609,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -2495,32 +2641,32 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.37.0: - version "8.44.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" - integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== + version "8.50.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.50.0.tgz#2ae6015fee0240fcd3f83e1e25df0287f487d6b2" + integrity sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.1.0" - "@eslint/js" "8.44.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.50.0" + "@humanwhocodes/config-array" "^0.11.11" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.6.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -2530,7 +2676,6 @@ eslint@^8.37.0: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -2542,13 +2687,12 @@ eslint@^8.37.0: natural-compare "^1.4.0" optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" - integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" acorn-jsx "^5.3.2" @@ -2608,21 +2752,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" - integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -2735,10 +2864,10 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== +fast-glob@^3.2.9, fast-glob@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2841,17 +2970,23 @@ find-up@^5.0.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== dependencies: - flatted "^3.1.0" + flatted "^3.2.7" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0, flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.7: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== for-each@^0.3.3: version "0.3.3" @@ -2860,6 +2995,14 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -2869,6 +3012,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -2899,26 +3051,26 @@ fs.realpath@^1.0.0: integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -2937,6 +3089,13 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -2947,7 +3106,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== @@ -2962,7 +3121,7 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -2976,9 +3135,9 @@ get-symbol-description@^1.0.0: get-intrinsic "^1.1.1" get-tsconfig@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" - integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== dependencies: resolve-pkg-maps "^1.0.0" @@ -3008,6 +3167,17 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob@^10.3.3: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -3020,15 +3190,26 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.22.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.22.0.tgz#0c9fcb9c48a2494fbb5edbfee644285543eba9d8" + integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw== dependencies: type-fest "^0.20.2" @@ -3051,17 +3232,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.3: - version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -3101,17 +3271,17 @@ graphql-subscriptions@^2.0.0: iterall "^1.3.0" graphql@^16.7.1: - version "16.7.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.7.1.tgz#11475b74a7bff2aefd4691df52a0eca0abd9b642" - integrity sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg== + version "16.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== handlebars@^4.7.6: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -3168,6 +3338,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -3235,11 +3410,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -3247,7 +3417,14 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13: +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -3262,7 +3439,7 @@ ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3385,10 +3562,10 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== +is-core-module@^2.11.0, is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" @@ -3399,16 +3576,6 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -3438,13 +3605,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -3472,6 +3632,11 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -3492,11 +3657,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -3511,16 +3671,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" is-typedarray@^1.0.0: version "1.0.0" @@ -3534,12 +3690,10 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isarray@~1.0.0: version "1.0.0" @@ -3568,12 +3722,12 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: semver "^6.3.0" istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -3586,9 +3740,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -3598,6 +3752,15 @@ iterall@^1.3.0: resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== +jackspeak@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.5.tgz#443f237f9eeeb0d7c6ec34835ef5289bb4acb068" + integrity sha512-Ratx+B8WeXLAtRJn26hrhY8S1+Jz6pxPMrkrdkgb/NstTNiqMhX0/oFVu5wX+g5n6JlEu2LPsDJmY8nRP4+alw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-changed-files@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" @@ -4003,6 +4166,11 @@ jest@^27.2.4: import-local "^3.0.2" jest-cli "^27.5.1" +jiti@^1.19.3: + version "1.20.0" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42" + integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4061,6 +4229,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -4076,7 +4249,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@2.x, json5@^2.2.2: +json5@2.x, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -4095,6 +4268,13 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -4114,9 +4294,9 @@ levn@^0.4.1: type-check "~0.4.0" libphonenumber-js@^1.10.14: - version "1.10.37" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz#185264130c9375f17d0c487a288223294579929c" - integrity sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw== + version "1.10.44" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.44.tgz#6709722461173e744190494aaaec9c1c690d8ca8" + integrity sha512-svlRdNBI5WgBjRC20GrCfbFiclbF0Cx+sCcQob/C1r57nsoq0xg8r65QbTyVyweQIlB33P+Uahyho6EMYgcOyQ== lines-and-columns@^1.1.6: version "1.2.4" @@ -4137,6 +4317,17 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +locter@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/locter/-/locter-1.2.2.tgz#a52e870236cd9383c1e0e3012f33a4c3f2a6f9d8" + integrity sha512-9C/TDHlFdZUlVtBXUmpXhHaO4V9uGYqWKIHag+2ToPQ22j3VEqg7tz8ZI1iWkHmBUGXS4wKXavzWATwFjxhirw== + dependencies: + destr "^2.0.0" + ebec "^1.1.1" + flat "^5.0.2" + glob "^10.3.3" + jiti "^1.19.3" + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -4188,6 +4379,13 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4207,12 +4405,17 @@ lru-cache@^7.10.1, lru-cache@^7.14.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: - semver "^6.0.0" + semver "^7.5.3" make-error@1.x, make-error@^1.1.1: version "1.3.6" @@ -4286,11 +4489,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - mimic-response@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" @@ -4303,16 +4501,40 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" + integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4338,6 +4560,46 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mysql2@^2.3.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-2.3.3.tgz#944f3deca4b16629052ff8614fbf89d5552545a0" + integrity sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA== + dependencies: + denque "^2.0.1" + generate-function "^2.3.1" + iconv-lite "^0.6.3" + long "^4.0.0" + lru-cache "^6.0.0" + named-placeholders "^1.1.2" + seq-queue "^0.0.5" + sqlstring "^2.3.2" + +mysql@^2.18.1: + version "2.18.1" + resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.18.1.tgz#2254143855c5a8c73825e4522baf2ea021766717" + integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig== + dependencies: + bignumber.js "9.0.0" + readable-stream "2.3.7" + safe-buffer "5.1.2" + sqlstring "2.3.1" + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +named-placeholders@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351" + integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w== + dependencies: + lru-cache "^7.14.1" + napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" @@ -4358,7 +4620,7 @@ negotiator@0.6.3, negotiator@^0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -4383,6 +4645,14 @@ neon-cli@^0.8: validate-npm-package-license "^3.0.4" validate-npm-package-name "^3.0.0" +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-abi@^2.21.0: version "2.30.1" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" @@ -4396,18 +4666,23 @@ node-abort-controller@^3.1.1: integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== node-fetch@^2.6.7: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" +node-gyp-build@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.12: +node-releases@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== @@ -4447,13 +4722,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - npmlog@^4.0.1: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -4474,7 +4742,7 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -object-assign@^4, object-assign@^4.1.0: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -4499,14 +4767,33 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== +object.fromentries@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" on-finished@2.4.1: version "2.4.1" @@ -4536,23 +4823,6 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" - integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== - dependencies: - default-browser "^4.0.0" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^2.2.0" - optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -4620,16 +4890,36 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@6.0.1, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -4645,16 +4935,19 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -4803,6 +5096,14 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +rapiq@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/rapiq/-/rapiq-0.9.0.tgz#0f427b1a459064a488ae86d2fb91f14524369240" + integrity sha512-k4oT4RarFBrlLMJ49xUTeQpa/us0uU4I70D/UEnK3FWQ4GENzei01rEQAmvPKAIzACo4NMW+YcYJ7EVfSa7EFg== + dependencies: + ebec "^1.1.0" + smob "^1.4.0" + raw-body@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" @@ -4848,6 +5149,19 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +readable-stream@2.3.7: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^2.0.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -4887,19 +5201,24 @@ reflect-metadata@^0.1.13: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regexp-tree@~0.1.1: version "0.1.27" resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - functions-have-names "^1.2.3" + set-function-name "^2.0.0" regexpp@^3.0.0: version "3.2.0" @@ -4943,12 +5262,12 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.20.0, resolve@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== +resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4: + version "1.22.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" + integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -4982,13 +5301,6 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -run-applescript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" - integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== - dependencies: - execa "^5.0.0" - run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -5008,6 +5320,16 @@ rxjs@^6.6.0: dependencies: tslib "^1.9.0" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -5034,7 +5356,7 @@ safe-regex@^2.1.1: dependencies: regexp-tree "~0.1.1" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -5046,7 +5368,7 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0: +semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -5058,7 +5380,7 @@ semver@^5.4.1, semver@^5.7.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.3.0: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -5106,6 +5428,11 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +seq-queue@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" + integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -5131,6 +5458,15 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -5170,11 +5506,16 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -5206,10 +5547,17 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +smob@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/smob/-/smob-1.4.1.tgz#66270e7df6a7527664816c5b577a23f17ba6f5b5" + integrity sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ== + +sodium-native@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-4.0.4.tgz#561b7c39c97789f8202d6fd224845fe2e8cd6879" + integrity sha512-faqOKw4WQKK7r/ybn6Lqo1F9+L5T6NlBJJYvpxbZPetpWylUVqz449mvlwIBKBqxEHbWakWuOlUt8J3Qpc4sWw== + dependencies: + node-gyp-build "^4.6.0" source-map-support@^0.5.6: version "0.5.21" @@ -5251,15 +5599,25 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== + version "3.0.15" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz#142460aabaca062bc7cd4cc87b7d50725ed6a4ba" + integrity sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +sqlstring@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" + integrity sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ== + +sqlstring@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" + integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== + stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -5294,6 +5652,15 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -5303,41 +5670,41 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" @@ -5353,6 +5720,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -5360,12 +5734,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: - ansi-regex "^5.0.1" + ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" @@ -5382,12 +5756,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -5436,14 +5805,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -synckit@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" - integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== - dependencies: - "@pkgr/utils" "^2.3.1" - tslib "^2.5.0" - table-layout@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" @@ -5502,6 +5863,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + throat@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" @@ -5512,11 +5887,6 @@ through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -titleize@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" - integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -5599,6 +5969,14 @@ ts-jest@^27.0.5: semver "7.x" yargs-parser "20.x" +ts-mysql-migrate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ts-mysql-migrate/-/ts-mysql-migrate-1.0.2.tgz#736d37c3aa3fef92f226b869098e939950d0e18c" + integrity sha512-zDW6iQsfPCJfQ3JMhfUGjhy8aK+VNTvPrXmJH66PB2EGEvyn4m7x2nBdhDNhKuwYU9LMxW1p+l39Ei+btXNpxA== + dependencies: + "@types/mysql" "^2.15.8" + mysql "^2.18.1" + ts-node@^10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -5623,7 +6001,7 @@ ts-typed-json@^0.3.2: resolved "https://registry.yarnpkg.com/ts-typed-json/-/ts-typed-json-0.3.2.tgz#f4f20f45950bae0a383857f7b0a94187eca1b56a" integrity sha512-Tdu3BWzaer7R5RvBIJcg9r8HrTZgpJmsX+1meXMJzYypbkj8NK2oJN0yvm4Dp/Iv6tzFa/L5jKRmEVTga6K3nA== -tsconfig-paths@^3.14.1: +tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== @@ -5647,10 +6025,10 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== +tslib@^2.0.3, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tsutils@^3.21.0: version "3.21.0" @@ -5689,16 +6067,16 @@ type-fest@^0.21.3: integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-graphql@^2.0.0-beta.2: - version "2.0.0-beta.2" - resolved "https://registry.yarnpkg.com/type-graphql/-/type-graphql-2.0.0-beta.2.tgz#498e8dee56b8ea1f5c3a5ed99aab8105dcb8f050" - integrity sha512-MCGxRvNADu5Wp9QEudI/WQgiqHJfjanGcKRk/ErCow6IaG04NNI7o3bjjxQVWC+qDundSOhmaquNdjDiiTbcqQ== + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/type-graphql/-/type-graphql-2.0.0-beta.3.tgz#71a796845dbb3f3cca5dfb97a38ffe30ee5aa1ea" + integrity sha512-5HEiQaWHPYhPmbJuMmT+IZgjsnbNWsW37osUISwgr5EpcHZ4krLl8eBoOfjFya4mxAWYshlpSO1ahaucJQqM5g== dependencies: - "@types/node" "^20.1.2" + "@types/node" "^20.4.9" "@types/semver" "^7.5.0" graphql-query-complexity "^0.12.0" graphql-subscriptions "^2.0.0" - semver "^7.5.0" - tslib "^2.5.0" + semver "^7.5.4" + tslib "^2.6.0" type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" @@ -5708,6 +6086,36 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -5724,6 +6132,41 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typeorm-extension@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/typeorm-extension/-/typeorm-extension-3.0.2.tgz#34e7256bc24e070b204442ff497a5d28e38341e5" + integrity sha512-hV67zcFuJo1o3mslgbPTwCQMeMKAsV4ZcdPZiXDrbY+km6rdsbhIycn1iRfSfbb69aHeKPcbc/tpdJLXsdhBqg== + dependencies: + "@faker-js/faker" "^8.0.2" + consola "^3.2.3" + locter "^1.2.2" + pascal-case "^3.1.2" + rapiq "^0.9.0" + reflect-metadata "^0.1.13" + smob "^1.4.0" + yargs "^17.7.2" + +typeorm@^0.3.16, typeorm@^0.3.17: + version "0.3.17" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.17.tgz#a73c121a52e4fbe419b596b244777be4e4b57949" + integrity sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig== + dependencies: + "@sqltools/formatter" "^1.2.5" + app-root-path "^3.1.0" + buffer "^6.0.3" + chalk "^4.1.2" + cli-highlight "^2.1.11" + date-fns "^2.29.3" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^8.1.0" + mkdirp "^2.1.3" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.5.0" + uuid "^9.0.0" + yargs "^17.6.2" + typescript@^4.9.4: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" @@ -5774,15 +6217,10 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -5812,10 +6250,15 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" @@ -5847,9 +6290,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" validator@^13.7.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" - integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== + version "13.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== value-or-promise@^1.0.12: version "1.0.12" @@ -5942,17 +6385,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.10.tgz#74baa2789991905c2076abb317103b866c64e69e" - integrity sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA== +which-typed-array@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^2.0.1: version "2.0.2" @@ -5981,7 +6423,7 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.2.0" -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -5990,6 +6432,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -6040,7 +6491,12 @@ yargs-parser@20.x, yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^16.2.0: +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.0.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -6053,6 +6509,19 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.6.2, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" diff --git a/dlt-database/.env.dist b/dlt-database/.env.dist new file mode 100644 index 000000000..ecee20a06 --- /dev/null +++ b/dlt-database/.env.dist @@ -0,0 +1,6 @@ +DB_HOST=localhost +DB_PORT=3306 +DB_USER=root +DB_PASSWORD= +DB_DATABASE=gradido_dlt +MIGRATIONS_TABLE=migrations diff --git a/dlt-database/.env.template b/dlt-database/.env.template new file mode 100644 index 000000000..5b875bb6e --- /dev/null +++ b/dlt-database/.env.template @@ -0,0 +1,8 @@ +CONFIG_VERSION=$DATABASE_CONFIG_VERSION + +DB_HOST=localhost +DB_PORT=3306 +DB_USER=$DB_USER +DB_PASSWORD=$DB_PASSWORD +DB_DATABASE=gradido_dlt +MIGRATIONS_TABLE=migrations diff --git a/dlt-database/.eslintignore b/dlt-database/.eslintignore new file mode 100644 index 000000000..f6b255e92 --- /dev/null +++ b/dlt-database/.eslintignore @@ -0,0 +1,3 @@ +node_modules +**/*.min.js +build \ No newline at end of file diff --git a/dlt-database/.eslintrc.js b/dlt-database/.eslintrc.js new file mode 100644 index 000000000..6f1db58ff --- /dev/null +++ b/dlt-database/.eslintrc.js @@ -0,0 +1,206 @@ +// eslint-disable-next-line import/no-commonjs, import/unambiguous +module.exports = { + root: true, + env: { + node: true, + }, + parser: '@typescript-eslint/parser', + plugins: ['prettier', '@typescript-eslint', 'import', 'n', 'promise'], + extends: [ + 'standard', + 'eslint:recommended', + 'plugin:prettier/recommended', + 'plugin:import/recommended', + 'plugin:import/typescript', + // 'plugin:security/recommended', + 'plugin:@eslint-community/eslint-comments/recommended', + ], + settings: { + 'import/parsers': { + '@typescript-eslint/parser': ['.ts', '.tsx'], + }, + 'import/resolver': { + typescript: { + project: ['./tsconfig.json'], + }, + node: true, + }, + }, + rules: { + 'no-console': 'error', + camelcase: 'error', + 'no-debugger': 'error', + 'prettier/prettier': [ + 'error', + { + htmlWhitespaceSensitivity: 'ignore', + }, + ], + // import + 'import/export': 'error', + 'import/no-deprecated': 'error', + 'import/no-empty-named-blocks': 'error', + // 'import/no-extraneous-dependencies': 'error', + 'import/no-mutable-exports': 'error', + 'import/no-unused-modules': 'error', + 'import/no-named-as-default': 'error', + 'import/no-named-as-default-member': 'error', + 'import/no-amd': 'error', + 'import/no-commonjs': 'error', + 'import/no-import-module-exports': 'error', + 'import/no-nodejs-modules': 'off', + 'import/unambiguous': 'error', + 'import/default': 'error', + 'import/named': 'error', + 'import/namespace': 'error', + 'import/no-absolute-path': 'error', + // 'import/no-cycle': 'error', + 'import/no-dynamic-require': 'error', + 'import/no-internal-modules': 'off', + 'import/no-relative-packages': 'error', + // 'import/no-relative-parent-imports': ['error', { ignore: ['@/*'] }], + 'import/no-self-import': 'error', + 'import/no-unresolved': 'error', + 'import/no-useless-path-segments': 'error', + 'import/no-webpack-loader-syntax': 'error', + 'import/consistent-type-specifier-style': 'error', + 'import/exports-last': 'off', + 'import/extensions': 'error', + 'import/first': 'error', + 'import/group-exports': 'off', + 'import/newline-after-import': 'error', + 'import/no-anonymous-default-export': 'error', + 'import/no-default-export': 'error', + 'import/no-duplicates': 'error', + 'import/no-named-default': 'error', + 'import/no-namespace': 'error', + 'import/no-unassigned-import': 'error', + // 'import/order': [ + // 'error', + // { + // groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'], + // 'newlines-between': 'always', + // pathGroups: [ + // { + // pattern: '@?*/**', + // group: 'external', + // position: 'after', + // }, + // { + // pattern: '@/**', + // group: 'external', + // position: 'after', + // }, + // ], + // alphabetize: { + // order: 'asc' /* sort in ascending order. Options: ['ignore', 'asc', 'desc'] */, + // caseInsensitive: true /* ignore case. Options: [true, false] */, + // }, + // distinctGroup: true, + // }, + // ], + 'import/prefer-default-export': 'off', + // n + 'n/handle-callback-err': 'error', + 'n/no-callback-literal': 'error', + 'n/no-exports-assign': 'error', + // 'n/no-extraneous-import': 'error', + 'n/no-extraneous-require': 'error', + 'n/no-hide-core-modules': 'error', + 'n/no-missing-import': 'off', // not compatible with typescript + 'n/no-missing-require': 'error', + 'n/no-new-require': 'error', + 'n/no-path-concat': 'error', + // 'n/no-process-exit': 'error', + 'n/no-unpublished-bin': 'error', + 'n/no-unpublished-import': 'off', // TODO need to exclude seeds + 'n/no-unpublished-require': 'error', + 'n/no-unsupported-features': ['error', { ignores: ['modules'] }], + 'n/no-unsupported-features/es-builtins': 'error', + 'n/no-unsupported-features/es-syntax': 'error', + 'n/no-unsupported-features/node-builtins': 'error', + 'n/process-exit-as-throw': 'error', + 'n/shebang': 'error', + 'n/callback-return': 'error', + 'n/exports-style': 'error', + 'n/file-extension-in-import': 'off', + 'n/global-require': 'error', + 'n/no-mixed-requires': 'error', + 'n/no-process-env': 'error', + 'n/no-restricted-import': 'error', + 'n/no-restricted-require': 'error', + // 'n/no-sync': 'error', + 'n/prefer-global/buffer': 'error', + 'n/prefer-global/console': 'error', + 'n/prefer-global/process': 'error', + 'n/prefer-global/text-decoder': 'error', + 'n/prefer-global/text-encoder': 'error', + 'n/prefer-global/url': 'error', + 'n/prefer-global/url-search-params': 'error', + 'n/prefer-promises/dns': 'error', + // 'n/prefer-promises/fs': 'error', + // promise + // 'promise/catch-or-return': 'error', + // 'promise/no-return-wrap': 'error', + // 'promise/param-names': 'error', + // 'promise/always-return': 'error', + // 'promise/no-native': 'off', + // 'promise/no-nesting': 'warn', + // 'promise/no-promise-in-callback': 'warn', + // 'promise/no-callback-in-promise': 'warn', + // 'promise/avoid-new': 'warn', + // 'promise/no-new-statics': 'error', + // 'promise/no-return-in-finally': 'warn', + // 'promise/valid-params': 'warn', + // 'promise/prefer-await-to-callbacks': 'error', + // 'promise/no-multiple-resolved': 'error', + // eslint comments + '@eslint-community/eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }], + '@eslint-community/eslint-comments/no-restricted-disable': 'error', + '@eslint-community/eslint-comments/no-use': 'off', + '@eslint-community/eslint-comments/require-description': 'off', + }, + overrides: [ + // only for ts files + { + files: ['*.ts', '*.tsx'], + extends: [ + // 'plugin:@typescript-eslint/recommended', + // 'plugin:@typescript-eslint/recommended-requiring-type-checking', + // 'plugin:@typescript-eslint/strict', + ], + rules: { + // allow explicitly defined dangling promises + // '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }], + 'no-void': ['error', { allowAsStatement: true }], + // ignore prefer-regexp-exec rule to allow string.match(regex) + '@typescript-eslint/prefer-regexp-exec': 'off', + // this should not run on ts files: https://github.com/import-js/eslint-plugin-import/issues/2215#issuecomment-911245486 + 'import/unambiguous': 'off', + // this is not compatible with typeorm, due to joined tables can be null, but are not defined as nullable + '@typescript-eslint/no-unnecessary-condition': 'off', + }, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + // this is to properly reference the referenced project database without requirement of compiling it + // eslint-disable-next-line camelcase + EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true, + }, + }, + // we do not have testing on the database + // { + // files: ['*.test.ts'], + // plugins: ['jest'], + // rules: { + // 'jest/no-disabled-tests': 'error', + // 'jest/no-focused-tests': 'error', + // 'jest/no-identical-title': 'error', + // 'jest/prefer-to-have-length': 'error', + // 'jest/valid-expect': 'error', + // '@typescript-eslint/unbound-method': 'off', + // 'jest/unbound-method': 'error', + // }, + // }, + ], +} diff --git a/dlt-database/.gitignore b/dlt-database/.gitignore new file mode 100644 index 000000000..9e9e01ced --- /dev/null +++ b/dlt-database/.gitignore @@ -0,0 +1,27 @@ +.DS_Store +node_modules/ +build/ +.cache/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +test/unit/coverage + +package-lock.json +/.env +/.env.bak +.env.development.local +.env.production.local + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln + +# coverage folder + +coverage/ + +*~ diff --git a/dlt-database/.prettierrc.js b/dlt-database/.prettierrc.js new file mode 100644 index 000000000..bc1d767d7 --- /dev/null +++ b/dlt-database/.prettierrc.js @@ -0,0 +1,9 @@ +module.exports = { + semi: false, + printWidth: 100, + singleQuote: true, + trailingComma: "all", + tabWidth: 2, + bracketSpacing: true, + endOfLine: "auto", +}; diff --git a/dlt-database/Dockerfile b/dlt-database/Dockerfile new file mode 100644 index 000000000..e34a4dbb6 --- /dev/null +++ b/dlt-database/Dockerfile @@ -0,0 +1,130 @@ +################################################################################## +# BASE ########################################################################### +################################################################################## +FROM node:18.7.0-alpine3.16 as base + +# ENVs (available in production aswell, can be overwritten by commandline or env file) +## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame +ENV DOCKER_WORKDIR="/app" +## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0 +ENV BUILD_DATE="1970-01-01T00:00:00.00Z" +## We cannot do $(npm run version).${BUILD_NUMBER} here so we default to 0.0.0.0 +ENV BUILD_VERSION="0.0.0.0" +## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000 +ENV BUILD_COMMIT="0000000" +## SET NODE_ENV +ENV NODE_ENV="production" + +# Labels +LABEL org.label-schema.build-date="${BUILD_DATE}" +LABEL org.label-schema.name="gradido:database" +LABEL org.label-schema.description="Gradido Database Migration Service" +LABEL org.label-schema.usage="https://github.com/gradido/gradido/blob/master/README.md" +LABEL org.label-schema.url="https://gradido.net" +LABEL org.label-schema.vcs-url="https://github.com/gradido/gradido/tree/master/database" +LABEL org.label-schema.vcs-ref="${BUILD_COMMIT}" +LABEL org.label-schema.vendor="Gradido Community" +LABEL org.label-schema.version="${BUILD_VERSION}" +LABEL org.label-schema.schema-version="1.0" +LABEL maintainer="support@gradido.net" + +# Install Additional Software +## install: git +#RUN apk --no-cache add git + +## Workdir +RUN mkdir -p ${DOCKER_WORKDIR} +WORKDIR ${DOCKER_WORKDIR} + +################################################################################## +# DEVELOPMENT (Connected to the local environment, to reload on demand) ########## +################################################################################## +FROM base as development + +# We don't need to copy or build anything since we gonna bind to the +# local filesystem which will need a rebuild anyway + +# Run command +# (for development we need to execute npm install since the +# node_modules are on another volume and need updating) +CMD /bin/sh -c "yarn install" + +################################################################################## +# BUILD (Does contain all files and is therefore bloated) ######################## +################################################################################## +FROM base as build + +# Copy everything +COPY . . +# npm install +RUN yarn install --production=false --frozen-lockfile --non-interactive +# npm build +RUN yarn run build + +################################################################################## +# TEST UP ######################################################################## +################################################################################## +FROM build as test_up + +# Run command +CMD /bin/sh -c "yarn install && yarn run dev_up" + +################################################################################## +# TEST RESET ##################################################################### +################################################################################## +FROM build as test_reset + +# Run command +CMD /bin/sh -c "yarn install && yarn run dev_reset" + +################################################################################## +# TEST DOWN ###################################################################### +################################################################################## +FROM build as test_down + +# Run command +CMD /bin/sh -c "yarn install && yarn run dev_down" + +################################################################################## +# PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # +################################################################################## +FROM base as production + +# Copy "binary"-files from build image +COPY --from=build ${DOCKER_WORKDIR}/build ./build +# We also copy the node_modules express and serve-static for the run script +COPY --from=build ${DOCKER_WORKDIR}/node_modules ./node_modules +# Copy static files +# COPY --from=build ${DOCKER_WORKDIR}/public ./public +# Copy package.json for script definitions (lock file should not be needed) +COPY --from=build ${DOCKER_WORKDIR}/package.json ./package.json +# Copy Mnemonic files +COPY --from=build ${DOCKER_WORKDIR}/src/config/*.txt ./src/config/ +# Copy log folder +COPY --from=build ${DOCKER_WORKDIR}/log ./log +# Copy run scripts run/ +# COPY --from=build ${DOCKER_WORKDIR}/run ./run + +################################################################################## +# PRODUCTION UP ################################################################## +################################################################################## +FROM production as production_up + +# Run command +CMD /bin/sh -c "yarn run up" + +################################################################################## +# PRODUCTION RESET ############################################################### +################################################################################## +FROM production as production_reset + +# Run command +CMD /bin/sh -c "yarn run reset" + +################################################################################## +# PRODUCTION DOWN ################################################################ +################################################################################## +FROM production as production_down + +# Run command +CMD /bin/sh -c "yarn run down" \ No newline at end of file diff --git a/dlt-database/README.md b/dlt-database/README.md new file mode 100644 index 000000000..e951f4530 --- /dev/null +++ b/dlt-database/README.md @@ -0,0 +1,39 @@ +# database + +## Project setup + +```bash +yarn install +``` + +## Upgrade migrations production + +```bash +yarn up +``` + +## Upgrade migrations development + +```bash +yarn dev_up +``` + +## Downgrade migrations production + +```bash +yarn down +``` + +## Downgrade migrations development + +```bash +yarn dev_down +``` + +## Reset database + +```bash +yarn dev_reset +``` + +Runs all down migrations and after this all up migrations. diff --git a/dlt-database/entity/0001-init_db/Account.ts b/dlt-database/entity/0001-init_db/Account.ts new file mode 100644 index 000000000..43910122a --- /dev/null +++ b/dlt-database/entity/0001-init_db/Account.ts @@ -0,0 +1,79 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + ManyToOne, + JoinColumn, + OneToMany, + BaseEntity, +} from 'typeorm' +import { User } from '../User' +import { TransactionRecipe } from '../TransactionRecipe' +import { ConfirmedTransaction } from '../ConfirmedTransaction' +import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' +import { Decimal } from 'decimal.js-light' +import { AccountCommunity } from '../AccountCommunity' + +@Entity('accounts') +export class Account extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @ManyToOne(() => User, (user) => user.accounts) // Assuming you have a User entity with 'accounts' relation + @JoinColumn({ name: 'user_id' }) + user?: User + + // if user id is null, account belongs to community gmw or auf + @Column({ name: 'user_id', type: 'int', unsigned: true, nullable: true }) + userId?: number + + @Column({ name: 'derivation_index', type: 'int', unsigned: true }) + derivationIndex: number + + @Column({ name: 'derive2_pubkey', type: 'binary', length: 32, unique: true }) + derive2Pubkey: Buffer + + @Column({ type: 'tinyint', unsigned: true }) + type: number + + @Column({ + name: 'created_at', + type: 'datetime', + precision: 3, + default: () => 'CURRENT_TIMESTAMP(3)', + }) + createdAt: Date + + @Column({ name: 'confirmed_at', type: 'datetime', precision: 3, nullable: true }) + confirmedAt?: Date + + @Column({ + type: 'decimal', + precision: 40, + scale: 20, + default: 0, + transformer: DecimalTransformer, + }) + balance: Decimal + + @Column({ + name: 'balance_date', + type: 'datetime', + precision: 3, + default: () => 'CURRENT_TIMESTAMP(3)', + }) + balanceDate: Date + + @OneToMany(() => AccountCommunity, (accountCommunity) => accountCommunity.account) + @JoinColumn({ name: 'account_id' }) + accountCommunities: AccountCommunity[] + + @OneToMany(() => TransactionRecipe, (recipe) => recipe.signingAccount) + transactionRecipesSigning?: TransactionRecipe[] + + @OneToMany(() => TransactionRecipe, (recipe) => recipe.recipientAccount) + transactionRecipesRecipient?: TransactionRecipe[] + + @OneToMany(() => ConfirmedTransaction, (transaction) => transaction.account) + confirmedTransactions?: ConfirmedTransaction[] +} diff --git a/dlt-database/entity/0001-init_db/AccountCommunity.ts b/dlt-database/entity/0001-init_db/AccountCommunity.ts new file mode 100644 index 000000000..4c56b7954 --- /dev/null +++ b/dlt-database/entity/0001-init_db/AccountCommunity.ts @@ -0,0 +1,30 @@ +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, BaseEntity } from 'typeorm' + +import { Account } from '../Account' +import { Community } from '../Community' + +@Entity('accounts_communities') +export class AccountCommunity extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @ManyToOne(() => Account, (account) => account.accountCommunities) + @JoinColumn({ name: 'account_id' }) + account: Account + + @Column({ name: 'account_id', type: 'int', unsigned: true }) + accountId: number + + @ManyToOne(() => Community, (community) => community.accountCommunities) + @JoinColumn({ name: 'community_id' }) + community: Community + + @Column({ name: 'community_id', type: 'int', unsigned: true }) + communityId: number + + @Column({ name: 'valid_from', type: 'datetime', precision: 3 }) + validFrom: Date + + @Column({ name: 'valid_to', type: 'datetime', precision: 3, nullable: true }) + validTo?: Date +} diff --git a/dlt-database/entity/0001-init_db/Community.ts b/dlt-database/entity/0001-init_db/Community.ts new file mode 100644 index 000000000..96ddd59d6 --- /dev/null +++ b/dlt-database/entity/0001-init_db/Community.ts @@ -0,0 +1,68 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + JoinColumn, + OneToOne, + OneToMany, + BaseEntity, +} from 'typeorm' +import { Account } from '../Account' +import { TransactionRecipe } from '../TransactionRecipe' +import { AccountCommunity } from '../AccountCommunity' + +@Entity('communities') +export class Community extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @Column({ name: 'iota_topic', collation: 'utf8mb4_unicode_ci' }) + iotaTopic: string + + @Column({ name: 'root_pubkey', type: 'binary', length: 32, unique: true }) + rootPubkey: Buffer + + @Column({ name: 'root_privkey', type: 'binary', length: 32, nullable: true }) + rootPrivkey?: Buffer + + @Column({ name: 'root_chaincode', type: 'binary', length: 32, nullable: true }) + rootChaincode?: Buffer + + @Column({ type: 'tinyint', default: true }) + foreign: boolean + + @Column({ name: 'gmw_account_id', type: 'int', unsigned: true, nullable: true }) + gmwAccountId?: number + + @OneToOne(() => Account) + @JoinColumn({ name: 'gmw_account_id' }) + gmwAccount?: Account + + @Column({ name: 'auf_account_id', type: 'int', unsigned: true, nullable: true }) + aufAccountId?: number + + @OneToOne(() => Account) + @JoinColumn({ name: 'auf_account_id' }) + aufAccount?: Account + + @Column({ + name: 'created_at', + type: 'datetime', + precision: 3, + default: () => 'CURRENT_TIMESTAMP(3)', + }) + createdAt: Date + + @Column({ name: 'confirmed_at', type: 'datetime', precision: 3, nullable: true }) + confirmedAt?: Date + + @OneToMany(() => AccountCommunity, (accountCommunity) => accountCommunity.community) + @JoinColumn({ name: 'community_id' }) + accountCommunities: AccountCommunity[] + + @OneToMany(() => TransactionRecipe, (recipe) => recipe.senderCommunity) + transactionRecipesSender?: TransactionRecipe[] + + @OneToMany(() => TransactionRecipe, (recipe) => recipe.recipientCommunity) + transactionRecipesRecipient?: TransactionRecipe[] +} diff --git a/dlt-database/entity/0001-init_db/ConfirmedTransaction.ts b/dlt-database/entity/0001-init_db/ConfirmedTransaction.ts new file mode 100644 index 000000000..16786a713 --- /dev/null +++ b/dlt-database/entity/0001-init_db/ConfirmedTransaction.ts @@ -0,0 +1,57 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + ManyToOne, + JoinColumn, + OneToOne, + BaseEntity, +} from 'typeorm' +import { Decimal } from 'decimal.js-light' + +import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' +import { Account } from '../Account' +import { TransactionRecipe } from '../TransactionRecipe' + +@Entity('confirmed_transactions') +export class ConfirmedTransaction extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true, type: 'bigint' }) + id: number + + @OneToOne(() => TransactionRecipe, (recipe) => recipe.confirmedTransaction) + @JoinColumn({ name: 'transaction_recipe_id' }) + transactionRecipe: TransactionRecipe + + @Column({ name: 'transaction_recipe_id', type: 'int', unsigned: true }) + transactionRecipeId: number + + @Column({ type: 'bigint' }) + nr: number + + @Column({ type: 'binary', length: 48 }) + runningHash: Buffer + + @ManyToOne(() => Account, (account) => account.confirmedTransactions) + @JoinColumn({ name: 'account_id' }) + account: Account + + @Column({ name: 'account_id', type: 'int', unsigned: true }) + accountId: number + + @Column({ + name: 'account_balance', + type: 'decimal', + precision: 40, + scale: 20, + nullable: false, + default: 0, + transformer: DecimalTransformer, + }) + accountBalance: Decimal + + @Column({ name: 'iota_milestone', type: 'bigint' }) + iotaMilestone: number + + @Column({ name: 'confirmed_at', type: 'datetime', precision: 3 }) + confirmedAt: Date +} diff --git a/dlt-database/entity/0001-init_db/InvalidTransaction.ts b/dlt-database/entity/0001-init_db/InvalidTransaction.ts new file mode 100644 index 000000000..1e9be4ff4 --- /dev/null +++ b/dlt-database/entity/0001-init_db/InvalidTransaction.ts @@ -0,0 +1,10 @@ +import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from 'typeorm' + +@Entity('invalid_transactions') +export class InvalidTransaction extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true, type: 'bigint' }) + id: number + + @Column({ name: 'iota_message_id', type: 'binary', length: 32 }) + iotaMessageId: Buffer +} diff --git a/dlt-database/entity/0001-init_db/Migration.ts b/dlt-database/entity/0001-init_db/Migration.ts new file mode 100644 index 000000000..f1163cfbc --- /dev/null +++ b/dlt-database/entity/0001-init_db/Migration.ts @@ -0,0 +1,13 @@ +import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm' + +@Entity('migrations') +export class Migration extends BaseEntity { + @PrimaryGeneratedColumn() // This is actually not a primary column + version: number + + @Column({ length: 256, nullable: true, default: null }) + fileName: string + + @Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) + date: Date +} diff --git a/dlt-database/entity/0001-init_db/TransactionRecipe.ts b/dlt-database/entity/0001-init_db/TransactionRecipe.ts new file mode 100644 index 000000000..934e81d02 --- /dev/null +++ b/dlt-database/entity/0001-init_db/TransactionRecipe.ts @@ -0,0 +1,80 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + ManyToOne, + OneToOne, + JoinColumn, + BaseEntity, +} from 'typeorm' +import { Decimal } from 'decimal.js-light' + +import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' +import { Account } from '../Account' +import { Community } from '../Community' +import { ConfirmedTransaction } from '../ConfirmedTransaction' + +@Entity('transaction_recipes') +export class TransactionRecipe extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true, type: 'bigint' }) + id: number + + @Column({ name: 'iota_message_id', type: 'binary', length: 32, nullable: true }) + iotaMessageId?: Buffer + + // if transaction has a sender than it is also the sender account + @ManyToOne(() => Account, (account) => account.transactionRecipesSigning) + @JoinColumn({ name: 'signing_account_id' }) + signingAccount: Account + + @Column({ name: 'signing_account_id', type: 'int', unsigned: true }) + signingAccountId: number + + @ManyToOne(() => Account, (account) => account.transactionRecipesRecipient) + @JoinColumn({ name: 'recipient_account_id' }) + recipientAccount?: Account + + @Column({ name: 'recipient_account_id', type: 'int', unsigned: true, nullable: true }) + recipientAccountId?: number + + @ManyToOne(() => Community, (community) => community.transactionRecipesSender) + @JoinColumn({ name: 'sender_community_id' }) + senderCommunity: Community + + @Column({ name: 'sender_community_id', type: 'int', unsigned: true }) + senderCommunityId: number + + @ManyToOne(() => Community, (community) => community.transactionRecipesRecipient) + @JoinColumn({ name: 'recipient_community_id' }) + recipientCommunity?: Community + + @Column({ name: 'recipient_community_id', type: 'int', unsigned: true, nullable: true }) + recipientCommunityId?: number + + @Column({ + type: 'decimal', + precision: 40, + scale: 20, + nullable: true, + transformer: DecimalTransformer, + }) + amount?: Decimal + + @Column({ type: 'tinyint' }) + type: number + + @Column({ name: 'created_at', type: 'datetime', precision: 3 }) + createdAt: Date + + @Column({ name: 'body_bytes', type: 'blob' }) + bodyBytes: Buffer + + @Column({ type: 'binary', length: 64 }) + signature: Buffer + + @Column({ name: 'protocol_version', type: 'int', default: 1 }) + protocolVersion: number + + @OneToOne(() => ConfirmedTransaction, (transaction) => transaction.transactionRecipe) + confirmedTransaction?: ConfirmedTransaction +} diff --git a/dlt-database/entity/0001-init_db/User.ts b/dlt-database/entity/0001-init_db/User.ts new file mode 100644 index 000000000..681a668e2 --- /dev/null +++ b/dlt-database/entity/0001-init_db/User.ts @@ -0,0 +1,40 @@ +import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, OneToMany, JoinColumn } from 'typeorm' + +import { Account } from '../Account' + +@Entity('users', { engine: 'InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' }) +export class User extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @Column({ + name: 'gradido_id', + length: 36, + nullable: true, + collation: 'utf8mb4_unicode_ci', + }) + gradidoID?: string + + @Column({ name: 'derive1_pubkey', type: 'binary', length: 32, unique: true }) + derive1Pubkey: Buffer + + @Column({ + name: 'created_at', + type: 'datetime', + precision: 3, + default: () => 'CURRENT_TIMESTAMP(3)', + }) + createdAt: Date + + @Column({ + name: 'confirmed_at', + type: 'datetime', + precision: 3, + nullable: true, + }) + confirmedAt?: Date + + @OneToMany(() => Account, (account) => account.user) + @JoinColumn({ name: 'user_id' }) + accounts?: Account[] +} diff --git a/dlt-database/entity/0002-refactor_add_community/Account.ts b/dlt-database/entity/0002-refactor_add_community/Account.ts new file mode 100644 index 000000000..9edba933d --- /dev/null +++ b/dlt-database/entity/0002-refactor_add_community/Account.ts @@ -0,0 +1,78 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + ManyToOne, + JoinColumn, + OneToMany, + BaseEntity, +} from 'typeorm' +import { User } from '../User' +import { TransactionRecipe } from '../TransactionRecipe' +import { ConfirmedTransaction } from '../ConfirmedTransaction' +import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' +import { Decimal } from 'decimal.js-light' +import { AccountCommunity } from '../AccountCommunity' + +@Entity('accounts') +export class Account extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @ManyToOne(() => User, (user) => user.accounts) // Assuming you have a User entity with 'accounts' relation + @JoinColumn({ name: 'user_id' }) + user?: User + + // if user id is null, account belongs to community gmw or auf + @Column({ name: 'user_id', type: 'int', unsigned: true, nullable: true }) + userId?: number + + @Column({ name: 'derivation_index', type: 'int', unsigned: true }) + derivationIndex: number + + @Column({ name: 'derive2_pubkey', type: 'binary', length: 32, unique: true }) + derive2Pubkey: Buffer + + @Column({ type: 'tinyint', unsigned: true }) + type: number + + @Column({ + name: 'created_at', + type: 'datetime', + precision: 3, + default: () => 'CURRENT_TIMESTAMP(3)', + }) + createdAt: Date + + @Column({ name: 'confirmed_at', type: 'datetime', nullable: true }) + confirmedAt?: Date + + @Column({ + type: 'decimal', + precision: 40, + scale: 20, + default: 0, + transformer: DecimalTransformer, + }) + balance: Decimal + + @Column({ + name: 'balance_date', + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP()', + }) + balanceDate: Date + + @OneToMany(() => AccountCommunity, (accountCommunity) => accountCommunity.account) + @JoinColumn({ name: 'account_id' }) + accountCommunities: AccountCommunity[] + + @OneToMany(() => TransactionRecipe, (recipe) => recipe.signingAccount) + transactionRecipesSigning?: TransactionRecipe[] + + @OneToMany(() => TransactionRecipe, (recipe) => recipe.recipientAccount) + transactionRecipesRecipient?: TransactionRecipe[] + + @OneToMany(() => ConfirmedTransaction, (transaction) => transaction.account) + confirmedTransactions?: ConfirmedTransaction[] +} diff --git a/dlt-database/entity/0002-refactor_add_community/AccountCommunity.ts b/dlt-database/entity/0002-refactor_add_community/AccountCommunity.ts new file mode 100644 index 000000000..80d6c15bf --- /dev/null +++ b/dlt-database/entity/0002-refactor_add_community/AccountCommunity.ts @@ -0,0 +1,30 @@ +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, BaseEntity } from 'typeorm' + +import { Account } from '../Account' +import { Community } from '../Community' + +@Entity('accounts_communities') +export class AccountCommunity extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @ManyToOne(() => Account, (account) => account.accountCommunities) + @JoinColumn({ name: 'account_id' }) + account: Account + + @Column({ name: 'account_id', type: 'int', unsigned: true }) + accountId: number + + @ManyToOne(() => Community, (community) => community.accountCommunities) + @JoinColumn({ name: 'community_id' }) + community: Community + + @Column({ name: 'community_id', type: 'int', unsigned: true }) + communityId: number + + @Column({ name: 'valid_from', type: 'datetime' }) + validFrom: Date + + @Column({ name: 'valid_to', type: 'datetime', nullable: true }) + validTo?: Date +} diff --git a/dlt-database/entity/0002-refactor_add_community/Community.ts b/dlt-database/entity/0002-refactor_add_community/Community.ts new file mode 100644 index 000000000..25f9e3265 --- /dev/null +++ b/dlt-database/entity/0002-refactor_add_community/Community.ts @@ -0,0 +1,68 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + JoinColumn, + OneToOne, + OneToMany, + BaseEntity, +} from 'typeorm' +import { Account } from '../Account' +import { TransactionRecipe } from '../TransactionRecipe' +import { AccountCommunity } from '../AccountCommunity' + +@Entity('communities') +export class Community extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @Column({ name: 'iota_topic', collation: 'utf8mb4_unicode_ci' }) + iotaTopic: string + + @Column({ name: 'root_pubkey', type: 'binary', length: 32, unique: true, nullable: true }) + rootPubkey?: Buffer + + @Column({ name: 'root_privkey', type: 'binary', length: 64, nullable: true }) + rootPrivkey?: Buffer + + @Column({ name: 'root_chaincode', type: 'binary', length: 32, nullable: true }) + rootChaincode?: Buffer + + @Column({ type: 'tinyint', default: true }) + foreign: boolean + + @Column({ name: 'gmw_account_id', type: 'int', unsigned: true, nullable: true }) + gmwAccountId?: number + + @OneToOne(() => Account) + @JoinColumn({ name: 'gmw_account_id' }) + gmwAccount?: Account + + @Column({ name: 'auf_account_id', type: 'int', unsigned: true, nullable: true }) + aufAccountId?: number + + @OneToOne(() => Account) + @JoinColumn({ name: 'auf_account_id' }) + aufAccount?: Account + + @Column({ + name: 'created_at', + type: 'datetime', + precision: 3, + default: () => 'CURRENT_TIMESTAMP(3)', + }) + createdAt: Date + + @Column({ name: 'confirmed_at', type: 'datetime', nullable: true }) + confirmedAt?: Date + + @OneToMany(() => AccountCommunity, (accountCommunity) => accountCommunity.community) + @JoinColumn({ name: 'community_id' }) + accountCommunities: AccountCommunity[] + + @OneToMany(() => TransactionRecipe, (recipe) => recipe.senderCommunity) + transactionRecipesSender?: TransactionRecipe[] + + @OneToMany(() => TransactionRecipe, (recipe) => recipe.recipientCommunity) + transactionRecipesRecipient?: TransactionRecipe[] +} diff --git a/dlt-database/entity/0002-refactor_add_community/ConfirmedTransaction.ts b/dlt-database/entity/0002-refactor_add_community/ConfirmedTransaction.ts new file mode 100644 index 000000000..5d2a38f65 --- /dev/null +++ b/dlt-database/entity/0002-refactor_add_community/ConfirmedTransaction.ts @@ -0,0 +1,57 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + ManyToOne, + JoinColumn, + OneToOne, + BaseEntity, +} from 'typeorm' +import { Decimal } from 'decimal.js-light' + +import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' +import { Account } from '../Account' +import { TransactionRecipe } from '../TransactionRecipe' + +@Entity('confirmed_transactions') +export class ConfirmedTransaction extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true, type: 'bigint' }) + id: number + + @OneToOne(() => TransactionRecipe, (recipe) => recipe.confirmedTransaction) + @JoinColumn({ name: 'transaction_recipe_id' }) + transactionRecipe: TransactionRecipe + + @Column({ name: 'transaction_recipe_id', type: 'int', unsigned: true }) + transactionRecipeId: number + + @Column({ type: 'bigint' }) + nr: number + + @Column({ type: 'binary', length: 48 }) + runningHash: Buffer + + @ManyToOne(() => Account, (account) => account.confirmedTransactions) + @JoinColumn({ name: 'account_id' }) + account: Account + + @Column({ name: 'account_id', type: 'int', unsigned: true }) + accountId: number + + @Column({ + name: 'account_balance', + type: 'decimal', + precision: 40, + scale: 20, + nullable: false, + default: 0, + transformer: DecimalTransformer, + }) + accountBalance: Decimal + + @Column({ name: 'iota_milestone', type: 'bigint' }) + iotaMilestone: number + + @Column({ name: 'confirmed_at', type: 'datetime' }) + confirmedAt: Date +} diff --git a/dlt-database/entity/0002-refactor_add_community/User.ts b/dlt-database/entity/0002-refactor_add_community/User.ts new file mode 100644 index 000000000..5387be058 --- /dev/null +++ b/dlt-database/entity/0002-refactor_add_community/User.ts @@ -0,0 +1,39 @@ +import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, OneToMany, JoinColumn } from 'typeorm' + +import { Account } from '../Account' + +@Entity('users', { engine: 'InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' }) +export class User extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @Column({ + name: 'gradido_id', + length: 36, + nullable: true, + collation: 'utf8mb4_unicode_ci', + }) + gradidoID?: string + + @Column({ name: 'derive1_pubkey', type: 'binary', length: 32, unique: true }) + derive1Pubkey: Buffer + + @Column({ + name: 'created_at', + type: 'datetime', + precision: 3, + default: () => 'CURRENT_TIMESTAMP(3)', + }) + createdAt: Date + + @Column({ + name: 'confirmed_at', + type: 'datetime', + nullable: true, + }) + confirmedAt?: Date + + @OneToMany(() => Account, (account) => account.user) + @JoinColumn({ name: 'user_id' }) + accounts?: Account[] +} diff --git a/dlt-database/entity/Account.ts b/dlt-database/entity/Account.ts new file mode 100644 index 000000000..ed1e92840 --- /dev/null +++ b/dlt-database/entity/Account.ts @@ -0,0 +1 @@ +export { Account } from './0002-refactor_add_community/Account' diff --git a/dlt-database/entity/AccountCommunity.ts b/dlt-database/entity/AccountCommunity.ts new file mode 100644 index 000000000..985e7bfb9 --- /dev/null +++ b/dlt-database/entity/AccountCommunity.ts @@ -0,0 +1 @@ +export { AccountCommunity } from './0002-refactor_add_community/AccountCommunity' diff --git a/dlt-database/entity/Community.ts b/dlt-database/entity/Community.ts new file mode 100644 index 000000000..211837e40 --- /dev/null +++ b/dlt-database/entity/Community.ts @@ -0,0 +1 @@ +export { Community } from './0002-refactor_add_community/Community' diff --git a/dlt-database/entity/ConfirmedTransaction.ts b/dlt-database/entity/ConfirmedTransaction.ts new file mode 100644 index 000000000..765e0b2e6 --- /dev/null +++ b/dlt-database/entity/ConfirmedTransaction.ts @@ -0,0 +1 @@ +export { ConfirmedTransaction } from './0002-refactor_add_community/ConfirmedTransaction' diff --git a/dlt-database/entity/InvalidTransaction.ts b/dlt-database/entity/InvalidTransaction.ts new file mode 100644 index 000000000..8042e74b4 --- /dev/null +++ b/dlt-database/entity/InvalidTransaction.ts @@ -0,0 +1 @@ +export { InvalidTransaction } from './0001-init_db/InvalidTransaction' diff --git a/dlt-database/entity/Migration.ts b/dlt-database/entity/Migration.ts new file mode 100644 index 000000000..9f1e743d0 --- /dev/null +++ b/dlt-database/entity/Migration.ts @@ -0,0 +1 @@ +export { Migration } from './0001-init_db/Migration' diff --git a/dlt-database/entity/TransactionRecipe.ts b/dlt-database/entity/TransactionRecipe.ts new file mode 100644 index 000000000..e59a09ef9 --- /dev/null +++ b/dlt-database/entity/TransactionRecipe.ts @@ -0,0 +1 @@ +export { TransactionRecipe } from './0001-init_db/TransactionRecipe' diff --git a/dlt-database/entity/User.ts b/dlt-database/entity/User.ts new file mode 100644 index 000000000..3c803d783 --- /dev/null +++ b/dlt-database/entity/User.ts @@ -0,0 +1 @@ +export { User } from './0002-refactor_add_community/User' diff --git a/dlt-database/entity/index.ts b/dlt-database/entity/index.ts new file mode 100644 index 000000000..74c2e2258 --- /dev/null +++ b/dlt-database/entity/index.ts @@ -0,0 +1,19 @@ +import { Account } from './Account' +import { AccountCommunity } from './AccountCommunity' +import { Community } from './Community' +import { ConfirmedTransaction } from './ConfirmedTransaction' +import { InvalidTransaction } from './InvalidTransaction' +import { Migration } from './Migration' +import { TransactionRecipe } from './TransactionRecipe' +import { User } from './User' + +export const entities = [ + AccountCommunity, + Account, + Community, + ConfirmedTransaction, + InvalidTransaction, + Migration, + TransactionRecipe, + User, +] diff --git a/dlt-database/log/.gitignore b/dlt-database/log/.gitignore new file mode 100644 index 000000000..c96a04f00 --- /dev/null +++ b/dlt-database/log/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/dlt-database/migrations/0001-init_db.ts b/dlt-database/migrations/0001-init_db.ts new file mode 100644 index 000000000..85fed59e0 --- /dev/null +++ b/dlt-database/migrations/0001-init_db.ts @@ -0,0 +1,130 @@ +/* FIRST MIGRATION + * + * This migration is special since it takes into account that + * the database can be setup already but also may not be. + * Therefore you will find all `CREATE TABLE` statements with + * a `IF NOT EXISTS`, all `INSERT` with an `IGNORE` and in the + * downgrade function all `DROP TABLE` with a `IF EXISTS`. + * This ensures compatibility for existing or non-existing + * databases. + */ + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { + // write upgrade logic as parameter of queryFn + await queryFn(` + CREATE TABLE IF NOT EXISTS \`users\` ( + \`id\` int(10) unsigned NOT NULL AUTO_INCREMENT, + \`gradido_id\` char(36) DEFAULT NULL, + \`derive1_pubkey\` binary(32) NOT NULL, + \`created_at\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + \`confirmed_at\` datetime(3) DEFAULT NULL, + PRIMARY KEY (\`id\`), + INDEX \`gradido_id\` (\`gradido_id\`), + UNIQUE KEY \`pubkey\` (\`pubkey\`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) + + await queryFn(` + CREATE TABLE IF NOT EXISTS \`accounts\` ( + \`id\` int(10) unsigned NOT NULL AUTO_INCREMENT, + \`user_id\` int(10) unsigned DEFAULT NULL, + \`derivation_index\` int(10) unsigned NOT NULL, + \`derive2_pubkey\` binary(32) NOT NULL, + \`type\` tinyint unsigned NOT NULL, + \`created_at\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + \`confirmed_at\` datetime(3) DEFAULT NULL, + \`balance\` decimal(40,20) NOT NULL DEFAULT 0, + \`balance_date\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (\`id\`), + UNIQUE KEY \`pubkey\` (\`pubkey\`), + FOREIGN KEY (\`user_id\`) REFERENCES users(id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `) + + await queryFn(` + CREATE TABLE IF NOT EXISTS \`communities\` ( + \`id\` int(10) unsigned NOT NULL AUTO_INCREMENT, + \`iota_topic\` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + \`root_pubkey\` binary(32) NOT NULL, + \`root_privkey\` binary(32) DEFAULT NULL, + \`root_chaincode\` binary(32) DEFAULT NULL, + \`foreign\` tinyint(4) NOT NULL DEFAULT true, + \`gmw_account_id\` int(10) unsigned DEFAULT NULL, + \`auf_account_id\` int(10) unsigned DEFAULT NULL, + \`created_at\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + \`confirmed_at\` datetime(3) DEFAULT NULL, + PRIMARY KEY (\`id\`), + UNIQUE KEY \`pubkey\` (\`pubkey\`), + FOREIGN KEY (\`gmw_account_id\`) REFERENCES accounts(id), + FOREIGN KEY (\`auf_account_id\`) REFERENCES accounts(id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) + + await queryFn(` + CREATE TABLE IF NOT EXISTS \`accounts_communities\` ( + \`id\` int(10) unsigned NOT NULL AUTO_INCREMENT, + \`account_id\` int(10) unsigned NOT NULL, + \`community_id\` int(10) unsigned NOT NULL, + \`valid_from\` datetime(3) NOT NULL, + \`valid_to\` datetime(3) DEFAULT NULL, + PRIMARY KEY (\`id\`), + FOREIGN KEY (\`account_id\`) REFERENCES accounts(id), + FOREIGN KEY (\`community_id\`) REFERENCES communities(id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;`) + + await queryFn(` + CREATE TABLE IF NOT EXISTS \`transaction_recipes\` ( + \`id\` bigint unsigned NOT NULL AUTO_INCREMENT, + \`iota_message_id\` binary(32) DEFAULT NULL, + \`signing_account_id\` int(10) unsigned NOT NULL, + \`recipient_account_id\` int(10) unsigned DEFAULT NULL, + \`sender_community_id\` int(10) unsigned NOT NULL, + \`recipient_community_id\` int(10) unsigned DEFAULT NULL, + \`amount\` decimal(40,20) DEFAULT NULL, + \`type\` tinyint unsigned NOT NULL, + \`created_at\` datetime(3) NOT NULL, + \`body_bytes\` BLOB NOT NULL, + \`signature\` binary(64) NOT NULL, + \`protocol_version\` int(10) NOT NULL DEFAULT 1, + PRIMARY KEY (\`id\`), + FOREIGN KEY (\`signing_account_id\`) REFERENCES accounts(id), + FOREIGN KEY (\`recipient_account_id\`) REFERENCES accounts(id), + FOREIGN KEY (\`sender_community_id\`) REFERENCES communities(id), + FOREIGN KEY (\`recipient_community_id\`) REFERENCES communities(id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) + + await queryFn(` + CREATE TABLE IF NOT EXISTS \`confirmed_transactions\` ( + \`id\` bigint unsigned NOT NULL AUTO_INCREMENT, + \`transaction_recipe_id\` bigint unsigned NOT NULL, + \`nr\` bigint unsigned NOT NULL, + \`running_hash\` binary(48) NOT NULL, + \`account_id\` int(10) unsigned NOT NULL, + \`account_balance\` decimal(40,20) NOT NULL DEFAULT 0, + \`iota_milestone\` bigint NOT NULL, + \`confirmed_at\` datetime(3) NOT NULL, + PRIMARY KEY (\`id\`), + FOREIGN KEY (\`transaction_recipe_id\`) REFERENCES transaction_recipes(id), + FOREIGN KEY (\`account_id\`) REFERENCES accounts(id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) + + await queryFn(` + CREATE TABLE IF NOT EXISTS \`invalid_transactions\` ( + \`id\` bigint unsigned NOT NULL AUTO_INCREMENT, + \`iota_message_id\` binary(32) NOT NULL, + PRIMARY KEY (\`id\`), + INDEX (\`iota_message_id\`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) +} + +export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { + // write downgrade logic as parameter of queryFn + await queryFn(`DROP TABLE IF EXISTS \`users\`;`) + await queryFn(`DROP TABLE IF EXISTS \`accounts\`;`) + await queryFn(`DROP TABLE IF EXISTS \`accounts_communities\`;`) + await queryFn(`DROP TABLE IF EXISTS \`transaction_recipes\`;`) + await queryFn(`DROP TABLE IF EXISTS \`confirmed_transactions\`;`) + await queryFn(`DROP TABLE IF EXISTS \`communities\`;`) + await queryFn(`DROP TABLE IF EXISTS \`invalid_transactions\`;`) +} diff --git a/dlt-database/migrations/0002-refactor_add_community.ts b/dlt-database/migrations/0002-refactor_add_community.ts new file mode 100644 index 000000000..725954ea0 --- /dev/null +++ b/dlt-database/migrations/0002-refactor_add_community.ts @@ -0,0 +1,61 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { + // write upgrade logic as parameter of queryFn + await queryFn( + `ALTER TABLE \`communities\` MODIFY COLUMN \`root_privkey\` binary(64) NULL DEFAULT NULL;`, + ) + await queryFn( + `ALTER TABLE \`communities\` MODIFY COLUMN \`root_pubkey\` binary(32) NULL DEFAULT NULL;`, + ) + await queryFn( + `ALTER TABLE \`communities\` MODIFY COLUMN \`root_chaincode\` binary(32) NULL DEFAULT NULL;`, + ) + await queryFn( + `ALTER TABLE \`communities\` MODIFY COLUMN \`confirmed_at\` datetime NULL DEFAULT NULL;`, + ) + await queryFn(`ALTER TABLE \`users\` MODIFY COLUMN \`confirmed_at\` datetime NULL DEFAULT NULL;`) + await queryFn( + `ALTER TABLE \`accounts\` MODIFY COLUMN \`confirmed_at\` datetime NULL DEFAULT NULL;`, + ) + await queryFn( + `ALTER TABLE \`accounts\` MODIFY COLUMN \`balance_date\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;`, + ) + await queryFn( + `ALTER TABLE \`accounts_communities\` MODIFY COLUMN \`valid_from\` datetime NOT NULL;`, + ) + await queryFn( + `ALTER TABLE \`accounts_communities\` MODIFY COLUMN \`valid_to\` datetime NULL DEFAULT NULL;`, + ) + await queryFn( + `ALTER TABLE \`confirmed_transactions\` MODIFY COLUMN \`confirmed_at\` datetime NOT NULL;`, + ) +} + +export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { + await queryFn( + `ALTER TABLE \`communities\` MODIFY COLUMN \`root_privkey\` binary(32) DEFAULT NULL;`, + ) + await queryFn(`ALTER TABLE \`communities\` MODIFY COLUMN \`root_pubkey\` binary(32) NOT NULL;`) + await queryFn( + `ALTER TABLE \`communities\` MODIFY COLUMN \`root_chaincode\` binary(32) DEFAULT NULL;`, + ) + await queryFn( + `ALTER TABLE \`communities\` MODIFY COLUMN \`confirmed_at\` datetime(3) DEFAULT NULL;`, + ) + await queryFn(`ALTER TABLE \`users\` MODIFY COLUMN \`confirmed_at\` datetime(3) DEFAULT NULL;`) + await queryFn(`ALTER TABLE \`accounts\` MODIFY COLUMN \`confirmed_at\` datetime(3) DEFAULT NULL;`) + await queryFn( + `ALTER TABLE \`accounts\` MODIFY COLUMN \`balance_date\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);`, + ) + await queryFn( + `ALTER TABLE \`accounts_communities\` MODIFY COLUMN \`valid_from\` datetime(3) NOT NULL;`, + ) + await queryFn( + `ALTER TABLE \`accounts_communities\` MODIFY COLUMN \`valid_to\` datetime(3) DEFAULT NULL;`, + ) + await queryFn( + `ALTER TABLE \`confirmed_transactions\` MODIFY COLUMN \`confirmed_at\` datetime(3) NOT NULL;`, + ) +} diff --git a/dlt-database/package.json b/dlt-database/package.json new file mode 100644 index 000000000..f60587dad --- /dev/null +++ b/dlt-database/package.json @@ -0,0 +1,55 @@ +{ + "name": "gradido-database", + "version": "1.23.2", + "description": "Gradido Database Tool to execute database migrations", + "main": "src/index.ts", + "repository": "https://github.com/gradido/gradido/database", + "author": "Ulf Gebhardt", + "license": "Apache-2.0", + "private": false, + "scripts": { + "build": "tsc --build", + "clean": "tsc --build --clean", + "up": "cross-env TZ=UTC node build/src/index.js up", + "down": "cross-env TZ=UTC node build/src/index.js down", + "reset": "cross-env TZ=UTC node build/src/index.js reset", + "dev_up": "cross-env TZ=UTC ts-node src/index.ts up", + "dev_down": "cross-env TZ=UTC ts-node src/index.ts down", + "dev_reset": "cross-env TZ=UTC ts-node src/index.ts reset", + "lint": "eslint --max-warnings=0 --ext .js,.ts ." + }, + "devDependencies": { + "@eslint-community/eslint-plugin-eslint-comments": "^3.2.1", + "@types/faker": "^5.5.9", + "@types/node": "^16.10.3", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.37.0", + "eslint-config-prettier": "^8.8.0", + "eslint-config-standard": "^17.0.0", + "eslint-import-resolver-typescript": "^3.5.4", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.7.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-security": "^1.7.1", + "prettier": "^2.8.7", + "ts-node": "^10.2.1", + "typescript": "^4.3.5" + }, + "dependencies": { + "@types/uuid": "^8.3.4", + "cross-env": "^7.0.3", + "crypto": "^1.0.1", + "decimal.js-light": "^2.5.1", + "dotenv": "^10.0.0", + "mysql2": "^2.3.0", + "reflect-metadata": "^0.1.13", + "ts-mysql-migrate": "^1.0.2", + "typeorm": "^0.3.16", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14" + } +} diff --git a/dlt-database/src/config/index.ts b/dlt-database/src/config/index.ts new file mode 100644 index 000000000..20208befc --- /dev/null +++ b/dlt-database/src/config/index.ts @@ -0,0 +1,39 @@ +/* eslint-disable n/no-process-env */ + +import dotenv from 'dotenv' + +dotenv.config() + +const constants = { + CONFIG_VERSION: { + DEFAULT: 'DEFAULT', + EXPECTED: 'v1.2022-08-22', + CURRENT: '', + }, +} + +const database = { + DB_HOST: process.env.DB_HOST || 'localhost', + DB_PORT: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 3306, + DB_USER: process.env.DB_USER || 'root', + DB_PASSWORD: process.env.DB_PASSWORD || '', + DB_DATABASE: process.env.DB_DATABASE || 'gradido_dlt', +} + +const migrations = { + MIGRATIONS_TABLE: process.env.MIGRATIONS_TABLE || 'migrations', +} + +// Check config version +constants.CONFIG_VERSION.CURRENT = process.env.CONFIG_VERSION || constants.CONFIG_VERSION.DEFAULT +if ( + ![constants.CONFIG_VERSION.EXPECTED, constants.CONFIG_VERSION.DEFAULT].includes( + constants.CONFIG_VERSION.CURRENT, + ) +) { + throw new Error( + `Fatal: Config Version incorrect - expected "${constants.CONFIG_VERSION.EXPECTED}" or "${constants.CONFIG_VERSION.DEFAULT}", but found "${constants.CONFIG_VERSION.CURRENT}"`, + ) +} + +export const CONFIG = { ...constants, ...database, ...migrations } diff --git a/dlt-database/src/index.ts b/dlt-database/src/index.ts new file mode 100644 index 000000000..96785a721 --- /dev/null +++ b/dlt-database/src/index.ts @@ -0,0 +1,56 @@ +import { createDatabase } from './prepare' +import { CONFIG } from './config' + +import { createPool } from 'mysql' +import { Migration } from 'ts-mysql-migrate' +import path from 'path' + +const run = async (command: string) => { + // Database actions not supported by our migration library + await createDatabase() + + // Initialize Migrations + const pool = createPool({ + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + user: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + database: CONFIG.DB_DATABASE, + }) + const migration = new Migration({ + conn: pool, + tableName: CONFIG.MIGRATIONS_TABLE, + silent: true, + dir: path.join(__dirname, '..', 'migrations'), + }) + await migration.initialize() + + // Execute command + switch (command) { + case 'up': + await migration.up() // use for upgrade script + break + case 'down': + await migration.down() // use for downgrade script + break + case 'reset': + // TODO protect from production + await migration.reset() + break + default: + throw new Error(`Unsupported command ${command}`) + } + + // Terminate connections gracefully + pool.end() +} + +run(process.argv[2]) + .catch((err) => { + // eslint-disable-next-line no-console + console.log(err) + process.exit(1) + }) + .then(() => { + process.exit() + }) diff --git a/dlt-database/src/prepare.ts b/dlt-database/src/prepare.ts new file mode 100644 index 000000000..aa7e6d862 --- /dev/null +++ b/dlt-database/src/prepare.ts @@ -0,0 +1,22 @@ +import { createConnection } from 'mysql2/promise' + +import { CONFIG } from './config' + +export const createDatabase = async (): Promise => { + const con = await createConnection({ + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + user: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + }) + + await con.connect() + + // Create Database `gradido_dlt` + await con.query(` + CREATE DATABASE IF NOT EXISTS ${CONFIG.DB_DATABASE} + DEFAULT CHARACTER SET utf8mb4 + DEFAULT COLLATE utf8mb4_unicode_ci;`) + + await con.end() +} diff --git a/dlt-database/src/typeorm.ts b/dlt-database/src/typeorm.ts new file mode 100644 index 000000000..4b4f494f1 --- /dev/null +++ b/dlt-database/src/typeorm.ts @@ -0,0 +1 @@ +export * from 'typeorm' diff --git a/dlt-database/src/typeorm/DecimalTransformer.ts b/dlt-database/src/typeorm/DecimalTransformer.ts new file mode 100644 index 000000000..b1bcb8ca3 --- /dev/null +++ b/dlt-database/src/typeorm/DecimalTransformer.ts @@ -0,0 +1,19 @@ +import { Decimal } from 'decimal.js-light' +import { ValueTransformer } from 'typeorm' + +Decimal.set({ + precision: 25, + rounding: Decimal.ROUND_HALF_UP, +}) + +export const DecimalTransformer: ValueTransformer = { + /** + * Used to marshal Decimal when writing to the database. + */ + to: (decimal: Decimal | null): string | null => (decimal ? decimal.toString() : null), + + /** + * Used to unmarshal Decimal when reading from the database. + */ + from: (decimal: string | null): Decimal | null => (decimal ? new Decimal(decimal) : null), +} diff --git a/dlt-database/tsconfig.json b/dlt-database/tsconfig.json new file mode 100644 index 000000000..445b9d11f --- /dev/null +++ b/dlt-database/tsconfig.json @@ -0,0 +1,73 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./build/outfile.js", /* Concatenate and emit output to single file. */ + "outDir": "./build", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": false, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [".", "../database"], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "references": [] /* Any project that is referenced must itself have a `references` array (which may be empty). */ +} diff --git a/dlt-database/yarn.lock b/dlt-database/yarn.lock new file mode 100644 index 000000000..ac35e1eaa --- /dev/null +++ b/dlt-database/yarn.lock @@ -0,0 +1,2573 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.21.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" + integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== + dependencies: + regenerator-runtime "^0.13.11" + +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz#118511f316e2e87ee4294761868e254d3da47960" + integrity sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg== + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + +"@eslint-community/eslint-plugin-eslint-comments@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.1.tgz#3c65061e27f155eae3744c3b30c5a8253a959040" + integrity sha512-/HZbjIGaVO2zLlWX3gRgiHmKRVvvqrC0zVu3eXnIj1ORxoyfGSj50l0PfDfqihyZAqrDYzSMdJesXzFjvAoiLQ== + dependencies: + escape-string-regexp "^1.0.5" + ignore "^5.2.4" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" + integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.2" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6" + integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw== + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgr/utils@^2.3.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3" + integrity sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w== + dependencies: + cross-spawn "^7.0.3" + fast-glob "^3.2.12" + is-glob "^4.0.3" + open "^9.1.0" + picocolors "^1.0.0" + tslib "^2.5.0" + +"@sqltools/formatter@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" + integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== + +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + +"@types/faker@^5.5.9": + version "5.5.9" + resolved "https://registry.yarnpkg.com/@types/faker/-/faker-5.5.9.tgz#588ede92186dc557bff8341d294335d50d255f0c" + integrity sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA== + +"@types/json-schema@^7.0.9": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/mysql@^2.15.8": + version "2.15.19" + resolved "https://registry.yarnpkg.com/@types/mysql/-/mysql-2.15.19.tgz#d158927bb7c1a78f77e56de861a3b15cae0e7aed" + integrity sha512-wSRg2QZv14CWcZXkgdvHbbV2ACufNy5EgI8mBBxnJIptchv7DBy/h53VMa2jDhyo0C9MO4iowE6z9vF8Ja1DkQ== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "16.7.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.1.tgz#c6b9198178da504dfca1fd0be9b2e1002f1586f0" + integrity sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A== + +"@types/node@^16.10.3": + version "16.10.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" + integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== + +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + +"@types/uuid@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@typescript-eslint/eslint-plugin@^5.57.1": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz#2604cfaf2b306e120044f901e20c8ed926debf15" + integrity sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.59.9" + "@typescript-eslint/type-utils" "5.59.9" + "@typescript-eslint/utils" "5.59.9" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.57.1": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.9.tgz#a85c47ccdd7e285697463da15200f9a8561dd5fa" + integrity sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ== + dependencies: + "@typescript-eslint/scope-manager" "5.59.9" + "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/typescript-estree" "5.59.9" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4" + integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ== + dependencies: + "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/visitor-keys" "5.59.9" + +"@typescript-eslint/type-utils@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz#53bfaae2e901e6ac637ab0536d1754dfef4dafc2" + integrity sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q== + dependencies: + "@typescript-eslint/typescript-estree" "5.59.9" + "@typescript-eslint/utils" "5.59.9" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52" + integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw== + +"@typescript-eslint/typescript-estree@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b" + integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA== + dependencies: + "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/visitor-keys" "5.59.9" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.9.tgz#adee890107b5ffe02cd46fdaa6c2125fb3c6c7c4" + integrity sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.9" + "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/typescript-estree" "5.59.9" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d" + integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q== + dependencies: + "@typescript-eslint/types" "5.59.9" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.1.tgz#3ddab7f84e4a7e2313f6c414c5b7dac85f4e3ebc" + integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== + +acorn@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" + integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + +acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +app-root-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + +bignumber.js@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" + integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== + +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +builtins@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +bundle-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== + dependencies: + run-applescript "^5.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^4.0.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" + integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== + +date-fns@^2.29.3: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decimal.js-light@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== + dependencies: + bplist-parser "^0.2.0" + untildify "^4.0.0" + +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== + dependencies: + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +denque@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +dotenv@^16.0.3: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enhanced-resolve@^5.12.0: + version "5.14.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" + integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== + +eslint-config-standard@^17.0.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" + integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== + +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-import-resolver-typescript@^3.5.4: + version "3.5.5" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" + integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + get-tsconfig "^4.5.0" + globby "^13.1.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + synckit "^0.8.5" + +eslint-module-utils@^2.7.4: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.27.5: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-n@^15.7.0: + version "15.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90" + integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q== + dependencies: + builtins "^5.0.1" + eslint-plugin-es "^4.1.0" + eslint-utils "^3.0.0" + ignore "^5.1.1" + is-core-module "^2.11.0" + minimatch "^3.1.2" + resolve "^1.22.1" + semver "^7.3.8" + +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-promise@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-plugin-security@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz#0e9c4a471f6e4d3ca16413c7a4a51f3966ba16e4" + integrity sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ== + dependencies: + safe-regex "^2.1.1" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + +eslint@^8.37.0: + version "8.42.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.42.0.tgz#7bebdc3a55f9ed7167251fe7259f75219cade291" + integrity sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.42.0" + "@humanwhocodes/config-array" "^0.11.10" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.5.2" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.12.0.tgz#ed7b6ab5d62393fb2cc591c853652a5c318bf794" + integrity sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.0.tgz#e977690993a42f3e320e932427502a40f7af6d05" + integrity sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg== + dependencies: + resolve-pkg-maps "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.3: + version "13.1.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.1: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +ignore@^5.2.0, ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-callable@^1.1.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +lru-cache@^4.1.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.5, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mysql2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-2.3.0.tgz#600f5cc27e397dfb77b59eac93666434f88e8079" + integrity sha512-0t5Ivps5Tdy5YHk5NdKwQhe/4Qyn2pload+S+UooDBvsqngtzujG1BaTWBihQLfeKO3t3122/GtusBtmHEHqww== + dependencies: + denque "^1.4.1" + generate-function "^2.3.1" + iconv-lite "^0.6.2" + long "^4.0.0" + lru-cache "^6.0.0" + named-placeholders "^1.1.2" + seq-queue "^0.0.5" + sqlstring "^2.3.2" + +mysql@^2.18.1: + version "2.18.1" + resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.18.1.tgz#2254143855c5a8c73825e4522baf2ea021766717" + integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig== + dependencies: + bignumber.js "9.0.0" + readable-stream "2.3.7" + safe-buffer "5.1.2" + sqlstring "2.3.1" + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +named-placeholders@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8" + integrity sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA== + dependencies: + lru-cache "^4.1.3" + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-inspect@^1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== + dependencies: + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.8.7: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +readable-stream@2.3.7: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexp-tree@~0.1.1: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +regexp.prototype.flags@^1.4.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.0.0, semver@^7.3.7, semver@^7.3.8: + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + +seq-queue@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" + integrity sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4= + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sqlstring@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" + integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A= + +sqlstring@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.2.tgz#cdae7169389a1375b18e885f2e60b3e460809514" + integrity sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-mysql-migrate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ts-mysql-migrate/-/ts-mysql-migrate-1.0.2.tgz#736d37c3aa3fef92f226b869098e939950d0e18c" + integrity sha512-zDW6iQsfPCJfQ3JMhfUGjhy8aK+VNTvPrXmJH66PB2EGEvyn4m7x2nBdhDNhKuwYU9LMxW1p+l39Ei+btXNpxA== + dependencies: + "@types/mysql" "^2.15.8" + mysql "^2.18.1" + +ts-node@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5" + integrity sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw== + dependencies: + "@cspotcode/source-map-support" "0.6.1" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + yn "3.1.1" + +tsconfig-paths@^3.14.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typeorm@^0.3.16: + version "0.3.17" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.17.tgz#a73c121a52e4fbe419b596b244777be4e4b57949" + integrity sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig== + dependencies: + "@sqltools/formatter" "^1.2.5" + app-root-path "^3.1.0" + buffer "^6.0.3" + chalk "^4.1.2" + cli-highlight "^2.1.11" + date-fns "^2.29.3" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^8.1.0" + mkdirp "^2.1.3" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.5.0" + uuid "^9.0.0" + yargs "^17.6.2" + +typescript@^4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/docker-compose.apple-m1.override.yml b/docker-compose.apple-m1.override.yml index 72152f9ae..585a4555e 100644 --- a/docker-compose.apple-m1.override.yml +++ b/docker-compose.apple-m1.override.yml @@ -35,6 +35,12 @@ services: ######################################################## database: platform: linux/amd64 + + ######################################################## + # DLT-DATABASE ############################################# + ######################################################## + dlt-database: + platform: linux/amd64 ######################################################### ## NGINX ################################################ diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 9e3a0497d..08e02f1d7 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -103,6 +103,7 @@ services: - dlt_connector_modules:/app/node_modules # bind the local folder to the docker to allow live reload - ./dlt-connector:/app + - ./dlt-database:/dlt-database ######################################################## # FEDERATION ########################################### @@ -149,6 +150,28 @@ services: # bind the local folder to the docker to allow live reload - ./database:/app + ######################################################## + # DLT-DATABASE ############################################## + ######################################################## + dlt-database: + # we always run on production here since else the service lingers + # feel free to change this behaviour if it seems useful + # Due to problems with the volume caching the built files + # we changed this to test build. This keeps the service running. + # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there + image: gradido/dlt-database:local-test_up + build: + target: test_up + environment: + - NODE_ENV="development" + volumes: + # This makes sure the docker container has its own node modules. + # Therefore it is possible to have a different node version on the host machine + - dlt-database_node_modules:/app/node_modules + - dlt-database_build:/app/build + # bind the local folder to the docker to allow live reload + - ./dlt-database:/app + ######################################################### ## MARIADB ############################################## ######################################################### @@ -203,4 +226,6 @@ volumes: federation_database_node_modules: federation_database_build: database_node_modules: - database_build: \ No newline at end of file + database_build: + dlt-database_node_modules: + dlt-database_build: \ No newline at end of file diff --git a/docker-compose.test.yml b/docker-compose.test.yml index e219abf73..ff6ed61b8 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -64,6 +64,7 @@ services: - internal-net environment: - NODE_ENV="test" + - DB_HOST=mariadb ######################################################## # DATABASE ############################################# @@ -77,6 +78,18 @@ services: - NODE_ENV="test" # restart: always # this is very dangerous, but worth a test for the delayed mariadb startup at first run + ######################################################## + # DLT-DATABASE ############################################# + ######################################################## + dlt-database: + image: gradido/dlt-database:test_up + build: + context: ./dlt-database + target: test_up + environment: + - NODE_ENV="test" + # restart: always # this is very dangerous, but worth a test for the delayed mariadb startup at first run + ######################################################### ## MARIADB ############################################## ######################################################### diff --git a/docker-compose.yml b/docker-compose.yml index f3e0a7cea..4e29bc496 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -163,16 +163,17 @@ services: - internal-net - external-net ports: - - 6000:6000 + - 6010:6010 restart: always environment: # Envs used in Dockerfile # - DOCKER_WORKDIR="/app" - - PORT=6000 + - PORT=6010 - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - NODE_ENV="production" + - DB_HOST=mariadb # Application only envs volumes: # : – mirror bidirectional path in local context with path in Docker container @@ -239,6 +240,32 @@ services: # Application only envs #env_file: # - ./frontend/.env + + ######################################################## + # DLT-DATABASE ############################################# + ######################################################## + dlt-database: + # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there + image: gradido/dlt-database:local-production_up + build: + context: ./dlt-database + target: production_up + depends_on: + - mariadb + networks: + - internal-net + - external-net # this is required to fetch the packages + environment: + # Envs used in Dockerfile + # - DOCKER_WORKDIR="/app" + - BUILD_DATE + - BUILD_VERSION + - BUILD_COMMIT + - NODE_ENV="production" + - DB_HOST=mariadb + # Application only envs + #env_file: + # - ./frontend/.env ######################################################### ## NGINX ################################################ diff --git a/docu/Concepts/DLT/database.md b/docu/Concepts/DLT/database.md new file mode 100644 index 000000000..62122a4cd --- /dev/null +++ b/docu/Concepts/DLT/database.md @@ -0,0 +1,4 @@ +# DLT Connector Database + +![Diagram](img/dlt-diagramm.png) +[Link zum PDF](img/dlt-diagramm.pdf) diff --git a/docu/Concepts/DLT/derived_keys.md b/docu/Concepts/DLT/derived_keys.md new file mode 100644 index 000000000..9b14a118a --- /dev/null +++ b/docu/Concepts/DLT/derived_keys.md @@ -0,0 +1,26 @@ +# Key Derivation +The DLT connector uses key derivation to derive keys for each user in the community account with a master key. +![Bip32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) + +## user accounts +The Path for key derivation contain the gradido id, and derivation index of account +Gradido ID: 03857ac1-9cc2-483e-8a91-e5b10f5b8d16 +Derivation Index: 1 +Key derivation Path: +``` +m/03857ac1'/9cc2'/483e'/8a91'/e5b10f5b8d16'/1 +``` + +## gmw and auf accounts +For gmw and auf accounts two special Paths used: +gmw account => account nr 1 +``` +m/1' +``` +auf account => account nr 2 +``` +m/2' +``` + + + diff --git a/docu/Concepts/DLT/img/dlt-diagramm.pdf b/docu/Concepts/DLT/img/dlt-diagramm.pdf new file mode 100644 index 000000000..a0df26e0b --- /dev/null +++ b/docu/Concepts/DLT/img/dlt-diagramm.pdf @@ -0,0 +1,11057 @@ +%PDF-1.3 +%߬ +3 0 obj +<> >> +] +/Contents 4 0 R +>> +endobj +4 0 obj +<< +/Length 167135 +>> +stream +0.200025 w +0 G +0.98 g +0. 1080. 1920. -1080. re +f +q +1. 0. 0. -1. 0. 1080. cm +q +1. 0. 0. 1. 1711. 1015. cm +1. w +0. g +q +1. 0. 0. 1. 0. 0. cm +0. 0. 184. 60. re +W +n +q +q +0.26 0.55 1. rg +0.2 0. 0. 0.2 0. 0. cm +211.9000000000000057 68.7999999999999972 m +159.6999999999999886 68.7999999999999972 l +159.6999999999999886 147.5999999999999943 l +242.3999999999999773 147.5999999999999943 l +242.3999999999999773 99.2999999999999972 l +242.3999999999999773 82.5 228.7999999999999829 68.7999999999999972 211.8999999999999773 68.7999999999999972 c +h +f +Q +q +0.15 0.44 0.87 rg +0.2 0. 0. 0.2 0. 0. cm +242.4000000000000057 147.5999999999999943 m +159.6999999999999886 147.5999999999999943 l +159.6999999999999886 228.8000000000000114 l +211.8999999999999773 228.8000000000000114 l +228.6999999999999886 228.8000000000000114 242.3999999999999773 215.1000000000000227 242.3999999999999773 198.3000000000000114 c +242.3999999999999773 147.6000000000000227 l +h +f +Q +q +0.13 0.38 0.81 rg +0.2 0. 0. 0.2 0. 0. cm +159.6999999999999886 68.7999999999999972 m +113.0999999999999943 68.7999999999999972 l +96.2999999999999972 68.7999999999999972 82.5999999999999943 82.5 82.5999999999999943 99.2999999999999972 c +82.5999999999999943 198.3000000000000114 l +82.5999999999999943 215.1000000000000227 96.2999999999999972 228.8000000000000114 113.0999999999999943 228.8000000000000114 c +159.6999999999999886 228.8000000000000114 l +159.6999999999999886 68.8000000000000114 l +h +f +Q +q +1. g +0.2 0. 0. 0.2 0. 0. cm +135.9000000000000057 165.0999999999999943 m +113.9000000000000057 165.0999999999999943 l +110.5 165.0999999999999943 107.8000000000000114 162.4000000000000057 107.8000000000000114 159. c +107.8000000000000114 137. l +107.8000000000000114 133.5999999999999943 110.5000000000000142 130.9000000000000057 113.9000000000000057 130.9000000000000057 c +135.9000000000000057 130.9000000000000057 l +139.3000000000000114 130.9000000000000057 142. 133.5999999999999943 142. 137. c +142. 159. l +142. 162.4000000000000057 139.1999999999999886 165.0999999999999943 135.9000000000000057 165.0999999999999943 c +h +185. 92.7999999999999972 m +207. 92.7999999999999972 l +210.4000000000000057 92.7999999999999972 213.0999999999999943 95.5 213.0999999999999943 98.8999999999999915 c +213.0999999999999943 120.8999999999999915 l +213.0999999999999943 124.2999999999999972 210.4000000000000057 126.9999999999999858 207. 126.9999999999999858 c +185. 126.9999999999999858 l +181.5999999999999943 126.9999999999999858 178.9000000000000057 124.2999999999999829 178.9000000000000057 120.8999999999999915 c +178.9000000000000057 98.8999999999999915 l +178.9000000000000057 95.4999999999999858 181.7000000000000171 92.7999999999999972 185. 92.7999999999999972 c +h +185. 171. m +207. 171. l +210.4000000000000057 171. 213.0999999999999943 173.6999999999999886 213.0999999999999943 177.0999999999999943 c +213.0999999999999943 199.0999999999999943 l +213.0999999999999943 202.5 210.4000000000000057 205.1999999999999886 207. 205.1999999999999886 c +185. 205.1999999999999886 l +181.5999999999999943 205.1999999999999886 178.9000000000000057 202.5 178.9000000000000057 199.0999999999999943 c +178.9000000000000057 177.0999999999999943 l +178.9000000000000057 173.6999999999999886 181.7000000000000171 171. 185. 171. c +h +f +Q +q +1. g +0.2 0. 0. 0.2 0. 0. cm +126.0759999999999934 151.6500000000000057 m +192.1159999999999854 103.8900000000000148 l +196.8619999999999948 110.4540000000000077 l +130.8229999999999791 158.2139999999999986 l +h +f +Q +q +1. g +0.2 0. 0. 0.2 0. 0. cm +125.8269999999999982 143.8739999999999952 m +130.8000000000000114 137.4799999999999898 l +194.8190000000000168 187.2679999999999723 l +189.8460000000000036 193.6619999999999777 l +h +f +Q +q +0.13 0.38 0.81 rg +0.2 0. 0. 0.2 0. 0. cm +344.8999999999999773 182.0999999999999943 m +335.8999999999999773 182.0999999999999943 l +335.8999999999999773 175.2999999999999829 l +335.6999999999999886 175.2999999999999829 l +334. 177.7999999999999829 331.5999999999999659 179.7999999999999829 328.5999999999999659 181.1999999999999886 c +325.5999999999999659 182.5999999999999943 322.4999999999999432 183.2999999999999829 319.2999999999999545 183.2999999999999829 c +315.5999999999999659 183.2999999999999829 312.2999999999999545 182.6999999999999886 309.3999999999999773 181.3999999999999773 c +306.3999999999999773 180.0999999999999659 303.8999999999999773 178.3999999999999773 301.7999999999999545 176.0999999999999659 c +299.6999999999999318 173.7999999999999545 298.0999999999999659 171.1999999999999602 296.9999999999999432 168.1999999999999602 c +295.8999999999999204 165.1999999999999602 295.2999999999999545 161.8999999999999488 295.2999999999999545 158.3999999999999488 c +295.2999999999999545 154.8999999999999488 295.8999999999999773 151.5999999999999375 296.9999999999999432 148.5999999999999375 c +298.0999999999999659 145.5999999999999375 299.6999999999999318 142.8999999999999488 301.7999999999999545 140.6999999999999318 c +303.8999999999999773 138.4999999999999432 306.3999999999999773 136.6999999999999318 309.3999999999999773 135.4999999999999432 c +312.3999999999999773 134.1999999999999318 315.6999999999999886 133.5999999999999375 319.2999999999999545 133.5999999999999375 c +322.6999999999999318 133.5999999999999375 325.8999999999999773 134.2999999999999261 328.8999999999999773 135.6999999999999318 c +331.8999999999999773 137.0999999999999375 334.1999999999999886 139.0999999999999375 335.7999999999999545 141.4999999999999432 c +335.9999999999999432 141.4999999999999432 l +335.9999999999999432 106.5999999999999375 l +344.9999999999999432 106.5999999999999375 l +344.9999999999999432 182.0999999999999375 l +344.8999999999999204 182.0999999999999375 l +h +320.2999999999999545 174.9000000000000057 m +322.6999999999999318 174.9000000000000057 324.8999999999999773 174.5 326.7999999999999545 173.7000000000000171 c +328.6999999999999318 172.9000000000000057 330.3999999999999773 171.7000000000000171 331.6999999999999318 170.3000000000000114 c +332.9999999999999432 168.9000000000000057 334.0999999999999091 167.1000000000000227 334.7999999999999545 165.1000000000000227 c +335.4999999999999432 163.1000000000000227 335.8999999999999773 160.9000000000000341 335.8999999999999773 158.5000000000000284 c +335.8999999999999773 156.1000000000000227 335.5 153.9000000000000341 334.7999999999999545 151.9000000000000341 c +334.0999999999999659 149.9000000000000341 332.9999999999999432 148.1000000000000227 331.6999999999999318 146.7000000000000455 c +330.3999999999999204 145.3000000000000398 328.6999999999999318 144.1000000000000512 326.7999999999999545 143.3000000000000398 c +324.8999999999999773 142.5000000000000284 322.6999999999999318 142.1000000000000512 320.2999999999999545 142.1000000000000512 c +317.8999999999999773 142.1000000000000512 315.6999999999999318 142.5000000000000568 313.7999999999999545 143.3000000000000398 c +311.8999999999999773 144.1000000000000512 310.1999999999999318 145.3000000000000398 308.8999999999999773 146.7000000000000455 c +307.5999999999999659 148.1000000000000512 306.5 149.9000000000000341 305.7999999999999545 151.9000000000000341 c +305.0999999999999659 153.9000000000000341 304.6999999999999318 156.1000000000000227 304.6999999999999318 158.5000000000000284 c +304.6999999999999318 160.9000000000000341 305.0999999999999091 163.1000000000000227 305.7999999999999545 165.1000000000000227 c +306.4999999999999432 167.1000000000000227 307.5999999999999659 168.9000000000000341 308.8999999999999773 170.3000000000000114 c +310.1999999999999886 171.7000000000000171 311.8999999999999773 172.9000000000000057 313.7999999999999545 173.7000000000000171 c +315.7999999999999545 174.5000000000000284 317.8999999999999773 174.9000000000000057 320.2999999999999545 174.9000000000000057 c +h +358.3999999999999773 106.6000000000000085 m +367.3999999999999773 106.6000000000000085 l +367.3999999999999773 141.5 l +367.5999999999999659 141.5 l +369.1999999999999886 139. 371.4999999999999432 137.0999999999999943 374.4999999999999432 135.6999999999999886 c +377.4999999999999432 134.2999999999999829 380.6999999999999318 133.5999999999999943 384.0999999999999659 133.5999999999999943 c +387.7999999999999545 133.5999999999999943 391.0999999999999659 134.1999999999999886 393.9999999999999432 135.5 c +396.9999999999999432 136.8000000000000114 399.4999999999999432 138.5 401.5999999999999659 140.6999999999999886 c +403.6999999999999886 142.8999999999999773 405.2999999999999545 145.5999999999999943 406.3999999999999773 148.5999999999999943 c +407.5 151.5999999999999943 408.0999999999999659 154.9000000000000057 408.0999999999999659 158.4000000000000057 c +408.0999999999999659 161.9000000000000057 407.4999999999999432 165.2000000000000171 406.3999999999999773 168.2000000000000171 c +405.2999999999999545 171.2000000000000171 403.6999999999999886 173.8000000000000114 401.5999999999999659 176.1000000000000227 c +399.4999999999999432 178.4000000000000341 396.9999999999999432 180.1000000000000227 393.9999999999999432 181.4000000000000341 c +390.9999999999999432 182.7000000000000455 387.6999999999999318 183.3000000000000398 384.0999999999999659 183.3000000000000398 c +380.8999999999999773 183.3000000000000398 377.7999999999999545 182.6000000000000512 374.7999999999999545 181.2000000000000455 c +371.7999999999999545 179.8000000000000398 369.3999999999999773 177.8000000000000398 367.6999999999999318 175.3000000000000398 c +367.4999999999999432 175.3000000000000398 l +367.4999999999999432 182.1000000000000512 l +358.4999999999999432 182.1000000000000512 l +358.4999999999999432 106.6000000000000512 l +358.3999999999999204 106.6000000000000512 l +h +383. 174.9000000000000057 m +385.3999999999999773 174.9000000000000057 387.6000000000000227 174.5 389.5 173.7000000000000171 c +391.3999999999999773 172.9000000000000057 393.1000000000000227 171.7000000000000171 394.3999999999999773 170.3000000000000114 c +395.6999999999999886 168.9000000000000057 396.7999999999999545 167.1000000000000227 397.5 165.1000000000000227 c +398.1999999999999886 163.1000000000000227 398.6000000000000227 160.9000000000000341 398.6000000000000227 158.5000000000000284 c +398.6000000000000227 156.1000000000000227 398.2000000000000455 153.9000000000000341 397.5 151.9000000000000341 c +396.8000000000000114 149.9000000000000341 395.6999999999999886 148.1000000000000227 394.3999999999999773 146.7000000000000455 c +393.0999999999999659 145.3000000000000398 391.3999999999999773 144.1000000000000512 389.5 143.3000000000000398 c +387.6000000000000227 142.5000000000000284 385.3999999999999773 142.1000000000000512 383. 142.1000000000000512 c +380.6000000000000227 142.1000000000000512 378.3999999999999773 142.5000000000000568 376.5 143.3000000000000398 c +374.6000000000000227 144.1000000000000512 372.8999999999999773 145.3000000000000398 371.6000000000000227 146.7000000000000455 c +370.3000000000000114 148.1000000000000512 369.2000000000000455 149.9000000000000341 368.5 151.9000000000000341 c +367.8000000000000114 153.9000000000000341 367.3999999999999773 156.1000000000000227 367.3999999999999773 158.5000000000000284 c +367.3999999999999773 160.9000000000000341 367.7999999999999545 163.1000000000000227 368.5 165.1000000000000227 c +369.1999999999999886 167.1000000000000227 370.3000000000000114 168.9000000000000341 371.6000000000000227 170.3000000000000114 c +372.9000000000000341 171.7000000000000171 374.6000000000000227 172.9000000000000057 376.5 173.7000000000000171 c +378.3999999999999773 174.5000000000000284 380.6000000000000227 174.9000000000000057 383. 174.9000000000000057 c +h +466.8999999999999773 182.0999999999999943 m +457.8999999999999773 182.0999999999999943 l +457.8999999999999773 175.2999999999999829 l +457.6999999999999886 175.2999999999999829 l +456. 177.7999999999999829 453.5999999999999659 179.7999999999999829 450.5999999999999659 181.1999999999999886 c +447.5999999999999659 182.5999999999999943 444.4999999999999432 183.2999999999999829 441.2999999999999545 183.2999999999999829 c +437.5999999999999659 183.2999999999999829 434.2999999999999545 182.6999999999999886 431.3999999999999773 181.3999999999999773 c +428.3999999999999773 180.0999999999999659 425.8999999999999773 178.3999999999999773 423.7999999999999545 176.0999999999999659 c +421.6999999999999318 173.7999999999999545 420.0999999999999659 171.1999999999999602 418.9999999999999432 168.1999999999999602 c +417.8999999999999204 165.1999999999999602 417.2999999999999545 161.8999999999999488 417.2999999999999545 158.3999999999999488 c +417.2999999999999545 154.8999999999999488 417.8999999999999773 151.5999999999999375 418.9999999999999432 148.5999999999999375 c +420.0999999999999659 145.5999999999999375 421.6999999999999318 142.8999999999999488 423.7999999999999545 140.6999999999999318 c +425.8999999999999773 138.4999999999999432 428.3999999999999773 136.6999999999999318 431.3999999999999773 135.4999999999999432 c +434.3999999999999773 134.1999999999999318 437.6999999999999886 133.5999999999999375 441.2999999999999545 133.5999999999999375 c +444.6999999999999318 133.5999999999999375 447.8999999999999773 134.2999999999999261 450.8999999999999773 135.6999999999999318 c +453.8999999999999773 137.0999999999999375 456.1999999999999886 139.0999999999999375 457.7999999999999545 141.4999999999999432 c +457.9999999999999432 141.4999999999999432 l +457.9999999999999432 106.5999999999999375 l +466.9999999999999432 106.5999999999999375 l +466.9999999999999432 182.0999999999999375 l +466.8999999999999204 182.0999999999999375 l +h +442.2999999999999545 174.9000000000000057 m +444.6999999999999318 174.9000000000000057 446.8999999999999773 174.5 448.7999999999999545 173.7000000000000171 c +450.6999999999999318 172.9000000000000057 452.3999999999999773 171.7000000000000171 453.6999999999999318 170.3000000000000114 c +454.9999999999999432 168.9000000000000057 456.0999999999999091 167.1000000000000227 456.7999999999999545 165.1000000000000227 c +457.4999999999999432 163.1000000000000227 457.8999999999999773 160.9000000000000341 457.8999999999999773 158.5000000000000284 c +457.8999999999999773 156.1000000000000227 457.5 153.9000000000000341 456.7999999999999545 151.9000000000000341 c +456.0999999999999659 149.9000000000000341 454.9999999999999432 148.1000000000000227 453.6999999999999318 146.7000000000000455 c +452.3999999999999204 145.3000000000000398 450.6999999999999318 144.1000000000000512 448.7999999999999545 143.3000000000000398 c +446.8999999999999773 142.5000000000000284 444.6999999999999318 142.1000000000000512 442.2999999999999545 142.1000000000000512 c +439.8999999999999773 142.1000000000000512 437.6999999999999318 142.5000000000000568 435.7999999999999545 143.3000000000000398 c +433.8999999999999773 144.1000000000000512 432.1999999999999318 145.3000000000000398 430.8999999999999773 146.7000000000000455 c +429.5999999999999659 148.1000000000000512 428.5 149.9000000000000341 427.7999999999999545 151.9000000000000341 c +427.0999999999999659 153.9000000000000341 426.6999999999999318 156.1000000000000227 426.6999999999999318 158.5000000000000284 c +426.6999999999999318 160.9000000000000341 427.0999999999999091 163.1000000000000227 427.7999999999999545 165.1000000000000227 c +428.4999999999999432 167.1000000000000227 429.5999999999999659 168.9000000000000341 430.8999999999999773 170.3000000000000114 c +432.1999999999999886 171.7000000000000171 433.8999999999999773 172.9000000000000057 435.7999999999999545 173.7000000000000171 c +437.6999999999999318 174.5000000000000284 439.8999999999999773 174.9000000000000057 442.2999999999999545 174.9000000000000057 c +h +478.9999999999999432 117.8000000000000114 m +478.9999999999999432 116.0000000000000142 479.5999999999999659 114.5000000000000142 480.8999999999999204 113.2000000000000171 c +482.1999999999999318 111.9000000000000199 483.6999999999999318 111.3000000000000114 485.4999999999999432 111.3000000000000114 c +487.2999999999999545 111.3000000000000114 488.7999999999999545 111.9000000000000057 490.0999999999999659 113.2000000000000171 c +491.3999999999999773 114.5000000000000142 491.9999999999999432 116.0000000000000142 491.9999999999999432 117.8000000000000114 c +491.9999999999999432 119.6000000000000085 491.3999999999999204 121.1000000000000085 490.0999999999999659 122.4000000000000057 c +488.7999999999999545 123.7000000000000028 487.2999999999999545 124.3000000000000114 485.4999999999999432 124.3000000000000114 c +483.6999999999999318 124.3000000000000114 482.1999999999999318 123.7000000000000171 480.8999999999999204 122.4000000000000057 c +479.6999999999999318 121.1000000000000085 478.9999999999999432 119.6000000000000085 478.9999999999999432 117.8000000000000114 c +h +481.0999999999999659 134.8000000000000114 m +490.0999999999999659 134.8000000000000114 l +490.0999999999999659 182.1000000000000227 l +481.0999999999999659 182.1000000000000227 l +481.0999999999999659 134.8000000000000114 l +h +504.5999999999999659 140.5 m +507.0999999999999659 138.1999999999999886 510.0999999999999659 136.4000000000000057 513.3999999999999773 135.3000000000000114 c +516.6999999999999318 134.1000000000000227 520.1000000000000227 133.6000000000000227 523.3999999999999773 133.6000000000000227 c +526.8999999999999773 133.6000000000000227 529.7999999999999545 134.0000000000000284 532.2999999999999545 134.9000000000000341 c +534.7999999999999545 135.8000000000000398 536.7999999999999545 136.9000000000000341 538.3999999999999773 138.4000000000000341 c +540. 139.9000000000000341 541.1999999999999318 141.5000000000000284 541.8999999999999773 143.4000000000000341 c +542.6999999999999318 145.3000000000000398 543. 147.3000000000000398 543. 149.3000000000000398 c +543. 173.5000000000000284 l +543. 175.2000000000000171 543. 176.7000000000000171 543.1000000000000227 178.1000000000000227 c +543.2000000000000455 179.5000000000000284 543.3000000000000682 180.8000000000000114 543.3999999999999773 182.1000000000000227 c +535.3999999999999773 182.1000000000000227 l +535.1999999999999318 179.7000000000000171 535.1000000000000227 177.3000000000000114 535.1000000000000227 174.9000000000000341 c +535. 174.9000000000000341 l +533. 178.0000000000000284 530.6000000000000227 180.1000000000000227 527.8999999999999773 181.4000000000000341 c +525.1999999999999318 182.7000000000000455 522. 183.3000000000000398 518.3999999999999773 183.3000000000000398 c +516.1999999999999318 183.3000000000000398 514.1000000000000227 183.0000000000000284 512.1000000000000227 182.4000000000000341 c +510.1000000000000227 181.8000000000000398 508.4000000000000341 180.9000000000000341 506.9000000000000341 179.7000000000000455 c +505.4000000000000341 178.5000000000000568 504.2000000000000455 177.0000000000000568 503.4000000000000341 175.3000000000000398 c +502.5000000000000568 173.5000000000000284 502.1000000000000227 171.5000000000000284 502.1000000000000227 169.2000000000000455 c +502.1000000000000227 166.1000000000000512 502.8000000000000114 163.6000000000000512 504.1000000000000227 161.5000000000000568 c +505.5 159.4000000000000625 507.3000000000000114 157.8000000000000682 509.7000000000000455 156.5000000000000568 c +512.1000000000000227 155.2000000000000455 514.8000000000000682 154.3000000000000682 518. 153.7000000000000455 c +521.2000000000000455 153.1000000000000512 524.5 152.9000000000000341 528.1000000000000227 152.9000000000000341 c +534.7000000000000455 152.9000000000000341 l +534.7000000000000455 150.9000000000000341 l +534.7000000000000455 149.7000000000000455 534.5 148.5000000000000284 534. 147.3000000000000398 c +533.5 146.1000000000000512 532.7999999999999545 145.0000000000000284 531.8999999999999773 144.1000000000000512 c +531. 143.1000000000000512 529.7999999999999545 142.4000000000000625 528.3999999999999773 141.8000000000000398 c +527. 141.2000000000000455 525.2999999999999545 141.0000000000000284 523.3999999999999773 141.0000000000000284 c +521.6999999999999318 141.0000000000000284 520.1999999999999318 141.2000000000000171 518.8999999999999773 141.5000000000000284 c +517.6000000000000227 141.8000000000000398 516.3999999999999773 142.2000000000000171 515.3999999999999773 142.7000000000000171 c +514.2999999999999545 143.2000000000000171 513.3999999999999773 143.8000000000000114 512.5 144.4000000000000057 c +511.6000000000000227 145.0999999999999943 510.8000000000000114 145.7000000000000171 510. 146.3000000000000114 c +504.6000000000000227 140.5 l +h +529.8999999999999773 159.3000000000000114 m +527.7999999999999545 159.3000000000000114 525.6000000000000227 159.4000000000000057 523.3999999999999773 159.6000000000000227 c +521.1999999999999318 159.8000000000000114 519.1000000000000227 160.3000000000000114 517.2999999999999545 160.9000000000000341 c +515.5 161.6000000000000227 514. 162.5000000000000284 512.7999999999999545 163.7000000000000455 c +511.5999999999999659 164.9000000000000341 511.0999999999999659 166.4000000000000341 511.0999999999999659 168.3000000000000398 c +511.0999999999999659 171.0000000000000284 511.9999999999999432 173.0000000000000284 513.7999999999999545 174.2000000000000455 c +515.5999999999999091 175.4000000000000341 518.0999999999999091 176.0000000000000568 521.1999999999999318 176.0000000000000568 c +523.6999999999999318 176.0000000000000568 525.7999999999999545 175.6000000000000512 527.4999999999998863 174.8000000000000682 c +529.1999999999999318 174.0000000000000568 530.5999999999999091 172.9000000000000625 531.6999999999999318 171.6000000000000796 c +532.7999999999999545 170.3000000000000682 533.4999999999998863 168.8000000000000682 533.9999999999998863 167.2000000000000739 c +534.4999999999998863 165.6000000000000796 534.6999999999999318 164.0000000000000853 534.6999999999999318 162.4000000000000625 c +534.6999999999999318 159.4000000000000625 l +529.8999999999999773 159.4000000000000625 l +529.8999999999999773 159.3000000000000682 l +h +603.6000000000000227 181.7000000000000171 m +603.6000000000000227 185.3000000000000114 603. 188.6000000000000227 601.8000000000000682 191.5000000000000284 c +600.6000000000000227 194.5000000000000284 598.8000000000000682 197.0000000000000284 596.6000000000000227 199.2000000000000171 c +594.3000000000000682 201.4000000000000057 591.6000000000000227 203.0000000000000284 588.3999999999999773 204.2000000000000171 c +585.1999999999999318 205.4000000000000057 581.6999999999999318 206.0000000000000284 577.7999999999999545 206.0000000000000284 c +573.2999999999999545 206.0000000000000284 569.0999999999999091 205.4000000000000341 565.3999999999999773 204.1000000000000227 c +561.6000000000000227 202.8000000000000114 558.1000000000000227 200.6000000000000227 554.6999999999999318 197.5000000000000284 c +560.7999999999999545 189.9000000000000341 l +563.0999999999999091 192.4000000000000341 565.6999999999999318 194.3000000000000398 568.3999999999999773 195.6000000000000227 c +571.1000000000000227 196.9000000000000341 574.1999999999999318 197.5000000000000284 577.6999999999999318 197.5000000000000284 c +580.9999999999998863 197.5000000000000284 583.7999999999999545 197.0000000000000284 585.9999999999998863 196.1000000000000227 c +588.1999999999999318 195.1000000000000227 589.8999999999998636 193.9000000000000341 591.1999999999999318 192.4000000000000341 c +592.4999999999998863 190.9000000000000341 593.3999999999999773 189.1000000000000227 593.8999999999999773 187.2000000000000455 c +594.3999999999999773 185.2000000000000455 594.6999999999999318 183.3000000000000398 594.6999999999999318 181.3000000000000398 c +594.6999999999999318 174.3000000000000398 l +594.3999999999999773 174.3000000000000398 l +592.6999999999999318 177.2000000000000455 590.2999999999999545 179.3000000000000398 587.3999999999999773 180.6000000000000512 c +584.3999999999999773 182.0000000000000568 581.2999999999999545 182.6000000000000512 578.1000000000000227 182.6000000000000512 c +574.6000000000000227 182.6000000000000512 571.3999999999999773 182.0000000000000568 568.5 180.8000000000000398 c +565.5 179.6000000000000512 563. 177.9000000000000341 560.8999999999999773 175.7000000000000455 c +558.7999999999999545 173.5000000000000568 557.1000000000000227 171.0000000000000568 555.8999999999999773 168.0000000000000568 c +554.6999999999999318 165.0000000000000568 554.1000000000000227 161.8000000000000682 554.1000000000000227 158.4000000000000625 c +554.1000000000000227 154.9000000000000625 554.7000000000000455 151.7000000000000739 555.8000000000000682 148.7000000000000739 c +556.9000000000000909 145.7000000000000739 558.5000000000001137 143.0000000000000853 560.6000000000000227 140.8000000000000682 c +562.7000000000000455 138.5000000000000568 565.2000000000000455 136.8000000000000682 568.2000000000000455 135.5000000000000568 c +571.2000000000000455 134.2000000000000455 574.5 133.6000000000000512 578.1000000000000227 133.6000000000000512 c +581.3000000000000682 133.6000000000000512 584.3999999999999773 134.3000000000000398 587.3999999999999773 135.7000000000000455 c +590.3999999999999773 137.1000000000000512 592.7999999999999545 139.1000000000000512 594.5 141.6000000000000512 c +594.7000000000000455 141.6000000000000512 l +594.7000000000000455 134.8000000000000398 l +603.7000000000000455 134.8000000000000398 l +603.6000000000000227 181.7000000000000455 l +h +579.1000000000000227 141.9000000000000341 m +576.7000000000000455 141.9000000000000341 574.5 142.3000000000000398 572.6000000000000227 143.1000000000000227 c +570.7000000000000455 143.9000000000000341 569. 145.1000000000000227 567.7000000000000455 146.5000000000000284 c +566.4000000000000909 147.9000000000000341 565.3000000000000682 149.7000000000000171 564.6000000000000227 151.7000000000000171 c +563.8999999999999773 153.7000000000000171 563.5 155.9000000000000057 563.5 158.3000000000000114 c +563.5 163.1000000000000227 564.8999999999999773 166.9000000000000057 567.7000000000000455 169.8000000000000114 c +570.5 172.7000000000000171 574.3000000000000682 174.1000000000000227 579.1000000000000227 174.1000000000000227 c +583.8999999999999773 174.1000000000000227 587.7000000000000455 172.7000000000000171 590.5 169.8000000000000114 c +593.2999999999999545 166.9000000000000057 594.7000000000000455 163.1000000000000227 594.7000000000000455 158.3000000000000114 c +594.7000000000000455 155.9000000000000057 594.3000000000000682 153.7000000000000171 593.6000000000000227 151.7000000000000171 c +592.8999999999999773 149.7000000000000171 591.8000000000000682 147.9000000000000057 590.5 146.5000000000000284 c +589.2000000000000455 145.1000000000000227 587.5 143.9000000000000341 585.6000000000000227 143.1000000000000227 c +583.6000000000000227 142.4000000000000341 581.5 141.9000000000000341 579.1000000000000227 141.9000000000000341 c +h +617.2000000000000455 134.8000000000000398 m +626.2000000000000455 134.8000000000000398 l +626.2000000000000455 142.1000000000000512 l +626.4000000000000909 142.1000000000000512 l +627.0000000000001137 140.8000000000000398 627.8000000000000682 139.7000000000000455 628.8000000000000682 138.7000000000000455 c +629.8000000000000682 137.7000000000000455 630.9000000000000909 136.8000000000000398 632.1000000000000227 136.1000000000000512 c +633.3000000000000682 135.4000000000000625 634.7000000000000455 134.8000000000000398 636.1000000000000227 134.4000000000000625 c +637.6000000000000227 134.0000000000000568 639. 133.8000000000000682 640.5 133.8000000000000682 c +642. 133.8000000000000682 643.2999999999999545 134.0000000000000568 644.5 134.4000000000000625 c +644.1000000000000227 144.1000000000000512 l +643.3999999999999773 143.9000000000000625 642.6000000000000227 143.7000000000000455 641.8999999999999773 143.6000000000000512 c +641.1999999999999318 143.5000000000000568 640.3999999999999773 143.4000000000000625 639.6999999999999318 143.4000000000000625 c +635.2999999999999545 143.4000000000000625 631.8999999999999773 144.6000000000000512 629.5999999999999091 147.1000000000000512 c +627.2999999999999545 149.6000000000000512 626.0999999999999091 153.4000000000000625 626.0999999999999091 158.6000000000000512 c +626.0999999999999091 182.4000000000000625 l +617.0999999999999091 182.4000000000000625 l +617.1999999999999318 134.8000000000000682 l +h +654.3000000000000682 140.5000000000000284 m +656.8000000000000682 138.2000000000000171 659.8000000000000682 136.4000000000000341 663.1000000000000227 135.3000000000000398 c +666.3999999999999773 134.1000000000000512 669.8000000000000682 133.6000000000000512 673.1000000000000227 133.6000000000000512 c +676.6000000000000227 133.6000000000000512 679.5 134.0000000000000568 682. 134.9000000000000625 c +684.5 135.8000000000000682 686.5 136.9000000000000625 688.1000000000000227 138.4000000000000625 c +689.7000000000000455 139.9000000000000625 690.8999999999999773 141.5000000000000568 691.6000000000000227 143.4000000000000625 c +692.3999999999999773 145.3000000000000682 692.7000000000000455 147.3000000000000682 692.7000000000000455 149.3000000000000682 c +692.7000000000000455 173.5000000000000568 l +692.7000000000000455 175.2000000000000455 692.7000000000000455 176.7000000000000455 692.8000000000000682 178.1000000000000512 c +692.9000000000000909 179.5000000000000568 693.0000000000001137 180.8000000000000398 693.1000000000000227 182.1000000000000512 c +685.1000000000000227 182.1000000000000512 l +684.8999999999999773 179.7000000000000455 684.8000000000000682 177.3000000000000398 684.8000000000000682 174.9000000000000625 c +684.6000000000000227 174.9000000000000625 l +682.6000000000000227 178.0000000000000568 680.2000000000000455 180.1000000000000512 677.5 181.4000000000000625 c +674.7999999999999545 182.7000000000000739 671.6000000000000227 183.3000000000000682 668. 183.3000000000000682 c +665.7999999999999545 183.3000000000000682 663.7000000000000455 183.0000000000000568 661.7000000000000455 182.4000000000000625 c +659.7000000000000455 181.8000000000000682 658. 180.9000000000000625 656.5 179.7000000000000739 c +655. 178.5000000000000853 653.7999999999999545 177.0000000000000853 653. 175.3000000000000682 c +652.1000000000000227 173.5000000000000568 651.7000000000000455 171.5000000000000568 651.7000000000000455 169.2000000000000739 c +651.7000000000000455 166.1000000000000796 652.4000000000000909 163.6000000000000796 653.7000000000000455 161.5000000000000853 c +655.1000000000000227 159.4000000000000909 656.9000000000000909 157.8000000000000966 659.3000000000000682 156.5000000000000853 c +661.7000000000000455 155.2000000000000739 664.4000000000000909 154.3000000000000966 667.6000000000000227 153.7000000000000739 c +670.8000000000000682 153.1000000000000796 674.1000000000000227 152.9000000000000625 677.7000000000000455 152.9000000000000625 c +684.3000000000000682 152.9000000000000625 l +684.3000000000000682 150.9000000000000625 l +684.3000000000000682 149.7000000000000739 684.1000000000000227 148.5000000000000568 683.6000000000000227 147.3000000000000682 c +683.1000000000000227 146.1000000000000796 682.3999999999999773 145.0000000000000568 681.5 144.1000000000000796 c +680.6000000000000227 143.1000000000000796 679.3999999999999773 142.4000000000000909 678. 141.8000000000000682 c +676.6000000000000227 141.2000000000000739 674.8999999999999773 141.0000000000000568 673. 141.0000000000000568 c +671.2999999999999545 141.0000000000000568 669.7999999999999545 141.2000000000000455 668.5 141.5000000000000568 c +667.2000000000000455 141.8000000000000682 666. 142.2000000000000455 665. 142.7000000000000455 c +663.8999999999999773 143.2000000000000455 663. 143.8000000000000398 662.1000000000000227 144.4000000000000341 c +661.2000000000000455 145.1000000000000227 660.3999999999999773 145.7000000000000455 659.6000000000000227 146.3000000000000398 c +654.3000000000000682 140.5000000000000284 l +h +679.7000000000000455 159.3000000000000398 m +677.6000000000000227 159.3000000000000398 675.4000000000000909 159.4000000000000341 673.2000000000000455 159.6000000000000512 c +671. 159.8000000000000398 668.9000000000000909 160.3000000000000398 667.1000000000000227 160.9000000000000625 c +665.3000000000000682 161.6000000000000512 663.8000000000000682 162.5000000000000568 662.6000000000000227 163.7000000000000739 c +661.3999999999999773 164.9000000000000625 660.8999999999999773 166.4000000000000625 660.8999999999999773 168.3000000000000682 c +660.8999999999999773 171.0000000000000568 661.7999999999999545 173.0000000000000568 663.6000000000000227 174.2000000000000739 c +665.3999999999999773 175.4000000000000625 667.8999999999999773 176.0000000000000853 671. 176.0000000000000853 c +673.5 176.0000000000000853 675.6000000000000227 175.6000000000000796 677.2999999999999545 174.8000000000000966 c +679. 174.0000000000000853 680.3999999999999773 172.9000000000000909 681.5 171.600000000000108 c +682.6000000000000227 170.3000000000000966 683.2999999999999545 168.8000000000000966 683.7999999999999545 167.2000000000001023 c +684.2999999999999545 165.600000000000108 684.5 164.0000000000001137 684.5 162.4000000000000909 c +684.5 159.4000000000000909 l +679.7000000000000455 159.4000000000000909 l +679.7000000000000455 159.3000000000000966 l +h +705.9000000000000909 134.8000000000000398 m +714.3000000000000682 134.8000000000000398 l +714.3000000000000682 142.2000000000000455 l +714.5000000000001137 142.2000000000000455 l +714.7000000000001592 141.5000000000000568 715.2000000000001592 140.7000000000000455 716.0000000000001137 139.7000000000000455 c +716.8000000000000682 138.7000000000000455 717.9000000000000909 137.8000000000000398 719.2000000000001592 136.9000000000000341 c +720.5000000000001137 136.0000000000000284 722.0000000000001137 135.2000000000000455 723.8000000000001819 134.6000000000000227 c +725.6000000000001364 134.0000000000000284 727.5000000000002274 133.7000000000000171 729.6000000000001364 133.7000000000000171 c +733.1000000000001364 133.7000000000000171 736.1000000000001364 134.4000000000000057 738.5000000000001137 135.9000000000000057 c +740.9000000000000909 137.4000000000000057 742.9000000000000909 139.5999999999999943 744.4000000000000909 142.5 c +745.9000000000000909 139.5999999999999943 748.1000000000001364 137.4000000000000057 750.9000000000000909 135.9000000000000057 c +753.7000000000000455 134.4000000000000057 756.5000000000001137 133.7000000000000171 759.4000000000000909 133.7000000000000171 c +763.1000000000001364 133.7000000000000171 766.1000000000001364 134.3000000000000114 768.4000000000000909 135.5000000000000284 c +770.7000000000000455 136.7000000000000171 772.6000000000001364 138.3000000000000398 773.9000000000000909 140.2000000000000171 c +775.2000000000000455 142.2000000000000171 776.1000000000001364 144.4000000000000057 776.6000000000001364 146.9000000000000057 c +777.1000000000001364 149.4000000000000057 777.3000000000001819 152. 777.3000000000001819 154.5999999999999943 c +777.3000000000001819 182.1999999999999886 l +768.3000000000001819 182.1999999999999886 l +768.3000000000001819 155.7999999999999829 l +768.3000000000001819 153.9999999999999716 768.2000000000001592 152.2999999999999829 768.0000000000002274 150.5999999999999943 c +767.8000000000001819 148.9000000000000057 767.3000000000001819 147.5 766.6000000000002501 146.1999999999999886 c +765.9000000000002046 144.8999999999999773 764.8000000000002956 143.8999999999999773 763.5000000000002274 143.1999999999999886 c +762.2000000000002728 142.3999999999999773 760.4000000000002046 142.0999999999999943 758.2000000000002728 142.0999999999999943 c +753.9000000000003183 142.0999999999999943 750.8000000000002956 143.4000000000000057 748.9000000000003183 146.0999999999999943 c +747.0000000000003411 148.7999999999999829 746.1000000000003638 152.1999999999999886 746.1000000000003638 156.4000000000000057 c +746.1000000000003638 182.3000000000000114 l +737.1000000000003638 182.3000000000000114 l +737.1000000000003638 157.5 l +737.1000000000003638 155.1999999999999886 737.0000000000003411 153.1999999999999886 736.8000000000004093 151.3000000000000114 c +736.6000000000003638 149.4000000000000057 736.1000000000003638 147.8000000000000114 735.400000000000432 146.5 c +734.7000000000003865 145.0999999999999943 733.7000000000003865 144.0999999999999943 732.400000000000432 143.3000000000000114 c +731.1000000000004775 142.5 729.400000000000432 142.2000000000000171 727.2000000000003865 142.2000000000000171 c +725.6000000000003638 142.2000000000000171 724.1000000000003638 142.5000000000000284 722.6000000000003638 143.1000000000000227 c +721.1000000000003638 143.7000000000000171 719.8000000000004093 144.7000000000000171 718.7000000000003865 145.9000000000000341 c +717.6000000000003638 147.2000000000000455 716.7000000000003865 148.8000000000000398 716.0000000000003411 150.7000000000000455 c +715.3000000000002956 152.7000000000000455 715.0000000000003411 155.0000000000000568 715.0000000000003411 157.6000000000000512 c +715.0000000000003411 182.2000000000000455 l +706.0000000000003411 182.2000000000000455 l +706.0000000000003411 134.8000000000000398 l +705.9000000000003183 134.8000000000000398 l +h +f +Q +q +0.26 0.55 1. rg +0.2 0. 0. 0.2 0. 0. cm +798.1000000000000227 182.6999999999999886 m +796.3000000000000682 182.6999999999999886 794.8000000000000682 182.0999999999999943 793.5 180.7999999999999829 c +792.2000000000000455 179.4999999999999716 791.6000000000000227 177.9999999999999716 791.6000000000000227 176.1999999999999886 c +791.6000000000000227 174.3999999999999773 792.2000000000000455 172.8999999999999773 793.5 171.5999999999999943 c +794.7999999999999545 170.2999999999999829 796.2999999999999545 169.6999999999999886 798.1000000000000227 169.6999999999999886 c +799.8999999999999773 169.6999999999999886 801.3999999999999773 170.2999999999999829 802.7000000000000455 171.5999999999999943 c +804. 172.9000000000000057 804.6000000000000227 174.4000000000000057 804.6000000000000227 176.1999999999999886 c +804.6000000000000227 178. 804. 179.5 802.7000000000000455 180.7999999999999829 c +801.4000000000000909 181.9999999999999716 799.9000000000000909 182.6999999999999886 798.1000000000000227 182.6999999999999886 c +h +817.3000000000000682 117.7999999999999829 m +817.3000000000000682 115.9999999999999858 817.9000000000000909 114.4999999999999858 819.2000000000000455 113.1999999999999886 c +820.5 111.8999999999999915 822. 111.2999999999999829 823.8000000000000682 111.2999999999999829 c +825.6000000000000227 111.2999999999999829 827.1000000000000227 111.8999999999999773 828.4000000000000909 113.1999999999999886 c +829.7000000000000455 114.4999999999999858 830.3000000000000682 115.9999999999999858 830.3000000000000682 117.7999999999999829 c +830.3000000000000682 119.5999999999999801 829.7000000000000455 121.0999999999999801 828.4000000000000909 122.3999999999999773 c +827.1000000000001364 123.6999999999999744 825.6000000000001364 124.2999999999999829 823.8000000000000682 124.2999999999999829 c +822.0000000000001137 124.2999999999999829 820.5000000000001137 123.6999999999999886 819.2000000000000455 122.3999999999999773 c +818. 121.0999999999999801 817.3000000000000682 119.5999999999999801 817.3000000000000682 117.7999999999999829 c +h +819.4000000000000909 134.7999999999999829 m +828.4000000000000909 134.7999999999999829 l +828.4000000000000909 182.0999999999999659 l +819.4000000000000909 182.0999999999999659 l +819.4000000000000909 134.7999999999999545 l +h +840.4000000000000909 158.3999999999999773 m +840.4000000000000909 154.8999999999999773 841.0000000000001137 151.6999999999999886 842.3000000000000682 148.6999999999999886 c +843.6000000000000227 145.6999999999999886 845.4000000000000909 143.0999999999999943 847.6000000000000227 140.7999999999999829 c +849.8999999999999773 138.4999999999999716 852.5 136.7999999999999829 855.6000000000000227 135.4999999999999716 c +858.7000000000000455 134.1999999999999602 862. 133.5999999999999659 865.5 133.5999999999999659 c +869. 133.5999999999999659 872.2999999999999545 134.1999999999999602 875.3999999999999773 135.4999999999999716 c +878.5 136.7999999999999829 881.1000000000000227 138.5999999999999659 883.3999999999999773 140.7999999999999829 c +885.6999999999999318 143.0999999999999943 887.3999999999999773 145.6999999999999886 888.6999999999999318 148.6999999999999886 c +889.9999999999998863 151.6999999999999886 890.5999999999999091 154.8999999999999773 890.5999999999999091 158.3999999999999773 c +890.5999999999999091 161.8999999999999773 889.9999999999998863 165.0999999999999659 888.6999999999999318 168.0999999999999659 c +887.3999999999999773 171.0999999999999659 885.5999999999999091 173.7999999999999545 883.3999999999999773 175.9999999999999716 c +881.1000000000000227 178.1999999999999602 878.5 179.9999999999999716 875.3999999999999773 181.2999999999999829 c +872.2999999999999545 182.5999999999999943 869. 183.1999999999999886 865.5 183.1999999999999886 c +862. 183.1999999999999886 858.7000000000000455 182.5999999999999943 855.6000000000000227 181.2999999999999829 c +852.5 179.9999999999999716 849.8999999999999773 178.1999999999999886 847.6000000000000227 175.9999999999999716 c +845.3000000000000682 173.7999999999999829 843.6000000000000227 171.0999999999999659 842.3000000000000682 168.0999999999999659 c +841.1000000000000227 165.0999999999999659 840.4000000000000909 161.8999999999999773 840.4000000000000909 158.3999999999999773 c +h +850.0000000000001137 158.3999999999999773 m +850.0000000000001137 160.7999999999999829 850.4000000000000909 162.9999999999999716 851.1000000000001364 164.9999999999999716 c +851.8000000000001819 166.9999999999999716 852.9000000000000909 168.7999999999999829 854.2000000000001592 170.1999999999999602 c +855.5000000000001137 171.5999999999999659 857.2000000000001592 172.7999999999999545 859.1000000000001364 173.5999999999999659 c +861.0000000000001137 174.3999999999999773 863.2000000000001592 174.7999999999999545 865.6000000000001364 174.7999999999999545 c +868.0000000000001137 174.7999999999999545 870.2000000000001592 174.3999999999999488 872.1000000000001364 173.5999999999999659 c +874.0000000000001137 172.7999999999999545 875.7000000000001592 171.5999999999999659 877.0000000000001137 170.1999999999999602 c +878.3000000000000682 168.7999999999999545 879.4000000000000909 166.9999999999999716 880.1000000000001364 164.9999999999999716 c +880.8000000000001819 162.9999999999999716 881.2000000000001592 160.7999999999999829 881.2000000000001592 158.3999999999999773 c +881.2000000000001592 155.9999999999999716 880.8000000000001819 153.7999999999999829 880.1000000000001364 151.7999999999999829 c +879.4000000000000909 149.7999999999999829 878.3000000000001819 147.9999999999999716 877.0000000000001137 146.5999999999999943 c +875.7000000000001592 145.1999999999999886 874.0000000000001137 144. 872.1000000000001364 143.1999999999999886 c +870.2000000000001592 142.3999999999999773 868.0000000000001137 142. 865.6000000000001364 142. c +863.2000000000001592 142. 861.0000000000001137 142.4000000000000057 859.1000000000001364 143.1999999999999886 c +857.2000000000001592 144. 855.5000000000001137 145.1999999999999886 854.2000000000001592 146.5999999999999943 c +852.9000000000002046 148. 851.8000000000001819 149.7999999999999829 851.1000000000001364 151.7999999999999829 c +850.4000000000000909 153.7999999999999829 850.0000000000001137 155.9999999999999716 850.0000000000001137 158.3999999999999773 c +h +f +Q +Q +Q +Q +Q +q +1. 0. 0. -1. 0. 1080. cm +q +1. 0. 0. 1. 232.0677669841863917 50. cm +1. w +0. g +q +1. 0. 0. 1. 0. 0. cm +0. 0. 1455.8644660316272166 980. re +W +n +q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +236.51666259765625 27.5 100.4110184362378959 92.0922027717202241 re +W +n +q +q +0.83 G +1. 0. 0. 1. 236.51666259765625 27.5 cm +4. 22. m +35.705509218118948 22. l +42.3721758847856123 22. 45.705509218118948 25.3333333333333357 45.705509218118948 32. c +45.705509218118948 56.0922027717202241 l +45.705509218118948 62.7588694383868884 49.0388425514522837 66.0922027717202241 55.705509218118948 66.0922027717202241 c +87.4110184362378959 66.0922027717202241 l +55.705509218118948 66.0922027717202241 l +49.0388425514522837 66.0922027717202241 45.705509218118948 62.7588694383868884 45.705509218118948 56.0922027717202241 c +45.705509218118948 32. l +45.705509218118948 25.3333333333333357 42.3721758847856123 22. 35.705509218118948 22. c +4. 22. l +4. 22. l +14. 18. m +14. 26. l +87.4110184362378959 62.0922027717202241 m +77.4110184362378959 66.0922027717202241 l +87.4110184362378959 70.0922027717202241 l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 243.51666259765625 46.5 Tm +<0014> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 313.2110143354383354 90.5922027717202241 Tm +<000d> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +1018.0520844411042845 117.6010163000074158 141.9736737784693332 196.6454232167389762 re +W +n +q +q +0.83 G +1. 0. 0. 1. 1018.0520844411042845 117.6010163000074158 cm +4. 22. m +128.9736737784693332 22. l +135.6403404451359904 22. 138.9736737784693332 25.3333333333333357 138.9736737784693332 32. c +138.9736737784693332 160.6454232167389762 l +138.9736737784693332 167.3120898834056334 135.6403404451359904 170.6454232167389762 128.9736737784693332 170.6454232167389762 c +118.9736737784693332 170.6454232167389762 l +128.9736737784693332 170.6454232167389762 l +135.6403404451359904 170.6454232167389762 138.9736737784693332 167.3120898834056334 138.9736737784693332 160.6454232167389762 c +138.9736737784693332 32. l +138.9736737784693332 25.3333333333333357 135.6403404451359904 22. 128.9736737784693332 22. c +4. 22. l +4. 22. l +h +4. 18. m +14. 22. l +4. 26. l +128.9736737784693332 166.6454232167389762 m +128.9736737784693332 174.6454232167389762 l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 1025.0520844411043981 136.6010163000074158 Tm +<000d> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 1140.0257582195736177 285.2464395167463636 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +560.4443436315503959 38.5922027717202241 242.8410782118976385 94.0088135282871917 re +W +n +q +q +0.83 G +1. 0. 0. 1. 560.4443436315503959 38.5922027717202241 cm +4. 22. m +106.9205391059488193 22. l +113.5872057726154907 22. 116.9205391059488193 25.3333333333333357 116.9205391059488193 32. c +116.9205391059488193 58.0088135282871917 l +116.9205391059488193 64.6754801949538631 120.2538724392821479 68.0088135282871917 126.9205391059488193 68.0088135282871917 c +229.8410782118976385 68.0088135282871917 l +126.9205391059488193 68.0088135282871917 l +120.2538724392821479 68.0088135282871917 116.9205391059488193 64.6754801949538631 116.9205391059488193 58.0088135282871917 c +116.9205391059488193 32. l +116.9205391059488193 25.3333333333333357 113.5872057726154907 22. 106.9205391059488193 22. c +4. 22. l +4. 22. l +14. 18. m +14. 26. l +229.8410782118976385 64.0088135282871917 m +219.8410782118976385 68.0088135282871917 l +229.8410782118976385 72.0088135282871917 l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 779.5687551449922239 103.6010163000074158 Tm +<000d> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +560.4443436315503959 38.5922027717202241 346.8980802374372843 473.6542367450261963 re +W +n +q +q +0.83 G +1. 0. 0. 1. 560.4443436315503959 38.5922027717202241 cm +4. 22. m +158.9490401187186421 22. l +165.6157067853852993 22. 168.9490401187186421 25.3333333333333357 168.9490401187186421 32. c +168.9490401187186421 437.6542367450261963 l +168.9490401187186421 444.3209034116928819 172.2823734520519849 447.6542367450261963 178.9490401187186421 447.6542367450261963 c +333.8980802374372843 447.6542367450261963 l +178.9490401187186421 447.6542367450261963 l +172.2823734520519849 447.6542367450261963 168.9490401187186421 444.3209034116928819 168.9490401187186421 437.6542367450261963 c +168.9490401187186421 32. l +168.9490401187186421 25.3333333333333357 165.6157067853852993 22. 158.9490401187186421 22. c +4. 22. l +4. 22. l +14. 18. m +14. 26. l +323.8980802374372843 443.6542367450261963 m +323.8980802374372843 451.6542367450261963 l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 883.3424238689876802 483.2464395167464204 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +560.4443436315503959 38.5922027717202241 346.8980802374372843 506.6542367450261963 re +W +n +q +q +0.83 G +1. 0. 0. 1. 560.4443436315503959 38.5922027717202241 cm +4. 22. m +158.9490401187186421 22. l +165.6157067853852993 22. 168.9490401187186421 25.3333333333333357 168.9490401187186421 32. c +168.9490401187186421 470.6542367450261963 l +168.9490401187186421 477.3209034116928819 172.2823734520519849 480.6542367450261963 178.9490401187186421 480.6542367450261963 c +333.8980802374372843 480.6542367450261963 l +178.9490401187186421 480.6542367450261963 l +172.2823734520519849 480.6542367450261963 168.9490401187186421 477.3209034116928819 168.9490401187186421 470.6542367450261963 c +168.9490401187186421 32. l +168.9490401187186421 25.3333333333333357 165.6157067853852993 22. 158.9490401187186421 22. c +4. 22. l +4. 22. l +14. 18. m +14. 26. l +323.8980802374372843 476.6542367450261963 m +323.8980802374372843 484.6542367450261963 l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 883.3424238689876802 516.2464395167464772 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +291.8176262936349303 38.5922027717202241 295.6267173379154656 354.2833900063725423 re +W +n +q +q +0.83 G +1. 0. 0. 1. 291.8176262936349303 38.5922027717202241 cm +4. 328.2833900063725423 m +282.6267173379154656 328.2833900063725423 l +289.2933840045821512 328.2833900063725423 292.6267173379154656 324.9500566730392279 292.6267173379154656 318.2833900063725423 c +292.6267173379154656 32. l +292.6267173379154656 25.3333333333333357 289.2933840045821512 22. 282.6267173379154656 22. c +272.6267173379154656 22. l +282.6267173379154656 22. l +289.2933840045821512 22. 292.6267173379154656 25.3333333333333357 292.6267173379154656 32. c +292.6267173379154656 318.2833900063725423 l +292.6267173379154656 324.9500566730392279 289.2933840045821512 328.2833900063725423 282.6267173379154656 328.2833900063725423 c +4. 328.2833900063725423 l +4. 328.2833900063725423 l +h +4. 324.2833900063725423 m +14. 328.2833900063725423 l +4. 332.2833900063725423 l +282.6267173379154656 18. m +282.6267173379154656 26. l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 363.8755927780927664 Tm +<000d> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +291.8176262936349303 38.5922027717202241 295.6267173379154656 387.2833900063725423 re +W +n +q +q +0.83 G +1. 0. 0. 1. 291.8176262936349303 38.5922027717202241 cm +4. 361.2833900063725423 m +282.6267173379154656 361.2833900063725423 l +289.2933840045821512 361.2833900063725423 292.6267173379154656 357.9500566730392279 292.6267173379154656 351.2833900063725423 c +292.6267173379154656 32. l +292.6267173379154656 25.3333333333333357 289.2933840045821512 22. 282.6267173379154656 22. c +272.6267173379154656 22. l +282.6267173379154656 22. l +289.2933840045821512 22. 292.6267173379154656 25.3333333333333357 292.6267173379154656 32. c +292.6267173379154656 351.2833900063725423 l +292.6267173379154656 357.9500566730392279 289.2933840045821512 361.2833900063725423 282.6267173379154656 361.2833900063725423 c +4. 361.2833900063725423 l +4. 361.2833900063725423 l +h +4. 357.2833900063725423 m +14. 361.2833900063725423 l +4. 365.2833900063725423 l +282.6267173379154656 18. m +282.6267173379154656 26. l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 396.8755927780927664 Tm +<000d> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +291.8176262936349303 266.2464395167463636 615.5247975753527498 192.6291532613463744 re +W +n +q +q +0.83 G +1. 0. 0. 1. 291.8176262936349303 266.2464395167463636 cm +4. 166.6291532613463744 m +293.2623987876763749 166.6291532613463744 l +299.9290654543430605 166.6291532613463744 303.2623987876763749 163.2958199280130316 303.2623987876763749 156.6291532613463744 c +303.2623987876763749 32. l +303.2623987876763749 25.3333333333333357 306.5957321210096893 22. 313.2623987876763749 22. c +602.5247975753527498 22. l +313.2623987876763749 22. l +306.5957321210096893 22. 303.2623987876763749 25.3333333333333357 303.2623987876763749 32. c +303.2623987876763749 156.6291532613463744 l +303.2623987876763749 163.2958199280130316 299.9290654543430605 166.6291532613463744 293.2623987876763749 166.6291532613463744 c +4. 166.6291532613463744 l +4. 166.6291532613463744 l +4. 162.6291532613463744 m +14. 166.6291532613463744 l +4. 170.6291532613463744 l +592.5247975753527498 18. m +592.5247975753527498 26. l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 429.8755927780927095 Tm +<000d> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 883.3424238689876802 285.2464395167463636 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +291.8176262936349303 266.2464395167463636 615.5247975753527498 225.6291532613463744 re +W +n +q +q +0.83 G +1. 0. 0. 1. 291.8176262936349303 266.2464395167463636 cm +4. 199.6291532613463744 m +293.2623987876763749 199.6291532613463744 l +299.9290654543430605 199.6291532613463744 303.2623987876763749 196.2958199280130316 303.2623987876763749 189.6291532613463744 c +303.2623987876763749 32. l +303.2623987876763749 25.3333333333333357 306.5957321210096893 22. 313.2623987876763749 22. c +602.5247975753527498 22. l +313.2623987876763749 22. l +306.5957321210096893 22. 303.2623987876763749 25.3333333333333357 303.2623987876763749 32. c +303.2623987876763749 189.6291532613463744 l +303.2623987876763749 196.2958199280130316 299.9290654543430605 199.6291532613463744 293.2623987876763749 199.6291532613463744 c +4. 199.6291532613463744 l +4. 199.6291532613463744 l +4. 195.6291532613463744 m +14. 199.6291532613463744 l +4. 203.6291532613463744 l +592.5247975753527498 18. m +592.5247975753527498 26. l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 462.8755927780927095 Tm +<000d> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 883.3424238689876802 285.2464395167463636 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +291.8176262936349303 278.8755927780927664 105.9979643482275833 310.1179648059908232 re +W +n +q +q +0.83 G +1. 0. 0. 1. 291.8176262936349303 278.8755927780927664 cm +4. 22. m +38.4989821741137916 22. l +45.1656488407804559 22. 48.4989821741137916 25.3333333333333357 48.4989821741137916 32. c +48.4989821741137916 274.1179648059908232 l +48.4989821741137916 280.7846314726575088 51.8323155074471273 284.1179648059908232 58.4989821741137916 284.1179648059908232 c +92.9979643482275833 284.1179648059908232 l +58.4989821741137916 284.1179648059908232 l +51.8323155074471273 284.1179648059908232 48.4989821741137916 280.7846314726575088 48.4989821741137916 274.1179648059908232 c +48.4989821741137916 32. l +48.4989821741137916 25.3333333333333357 45.1656488407804559 22. 38.4989821741137916 22. c +4. 22. l +4. 22. l +14. 18. m +14. 26. l +82.9979643482275833 280.1179648059908232 m +82.9979643482275833 288.1179648059908232 l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 297.8755927780927664 Tm +<0014> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 373.8155906418625136 559.9935575840836464 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +560.4443436315503959 38.5922027717202241 161.4379126597261802 649.4013548123633655 re +W +n +q +q +0.83 G +1. 0. 0. 1. 560.4443436315503959 38.5922027717202241 cm +4. 22. m +148.4379126597261802 22. l +155.1045793263928374 22. 158.4379126597261802 25.3333333333333357 158.4379126597261802 32. c +158.4379126597261802 613.4013548123633655 l +158.4379126597261802 620.0680214790299942 155.1045793263928374 623.4013548123633655 148.4379126597261802 623.4013548123633655 c +138.4379126597261802 623.4013548123633655 l +148.4379126597261802 623.4013548123633655 l +155.1045793263928374 623.4013548123633655 158.4379126597261802 620.0680214790299942 158.4379126597261802 613.4013548123633655 c +158.4379126597261802 32. l +158.4379126597261802 25.3333333333333357 155.1045793263928374 22. 148.4379126597261802 22. c +4. 22. l +4. 22. l +h +14. 18. m +14. 26. l +138.4379126597261802 619.4013548123633655 m +148.4379126597261802 623.4013548123633655 l +138.4379126597261802 627.4013548123633655 l +S +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +q +/GS1 gs +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 701.8822562912765761 658.9935575840836464 Tm +<000d> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 11.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 323.9276810338941459 11.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 333.9276810338941459 30.8422027717202241 Tm +<00440046004600520058005100570056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 44.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 44.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 63.8422027717202241 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 51.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 51.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 51.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 488.027675693317974 63.8422027717202241 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 77.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 77.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 96.8422027717202241 Tm +<00580056004800550042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 516.027675693317974 96.8422027717202241 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 110.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 110.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 129.8422027717202241 Tm +<0044004600460052005800510057004200510055> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 117.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 117.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 117.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 488.027675693317974 129.8422027717202241 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 143.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 143.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 162.8422027717202241 Tm +<005300580045004e0048005c> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 150.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 150.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 150.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 465.6610108068433647 162.8422027717202241 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 176.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 176.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 195.8422027717202241 Tm +<0057005c00530048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 183.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 183.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 183.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 473.0610085180250053 195.8422027717202241 Tm +<0057004c0051005c004c00510057000b0016000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 209.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 209.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 228.8422027717202241 Tm +<0046005500480044005700480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 216.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 216.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 216.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 472.0943451574293022 228.8422027717202241 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 242.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 242.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 261.8422027717202241 Tm +<0046005200510049004c0055005000480047004200440057> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 500.0943451574293022 261.8422027717202241 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 24.1010163000074229 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 790.2854218434480345 24.1010163000074229 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 800.2854218434480345 43.8510163000074229 Tm +<004400460046005200580051005700560042004600520050005000580051004c0057004c00480056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 57.1010163000074229 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 790.2854218434480345 57.1010163000074229 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 76.8510163000074158 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 988.0520844411042845 64.1010163000074158 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 64.1010163000074158 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 64.1010163000074158 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 945.6354165028718626 76.8510163000074158 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 90.1010163000074158 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 790.2854218434480345 90.1010163000074158 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 109.8510163000074158 Tm +<00440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 988.0520844411042845 97.1010163000074158 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 97.1010163000074158 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 97.1010163000074158 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 945.6354165028718626 109.8510163000074158 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 123.1010163000074158 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 790.2854218434480345 123.1010163000074158 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 142.8510163000074158 Tm +<004600520050005000580051004c0057005c0042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 988.0520844411042845 130.1010163000074158 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 130.1010163000074158 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 130.1010163000074158 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 945.6354165028718626 142.8510163000074158 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 156.1010163000074158 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 790.2854218434480345 156.1010163000074158 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 175.8510163000074158 Tm +<00590044004f004c004700420049005500520050> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 988.0520844411042845 163.1010163000074158 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 163.1010163000074158 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 163.1010163000074158 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 929.7020859669831907 175.8510163000074158 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 189.1010163000074158 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 790.2854218434480345 189.1010163000074158 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 208.8510163000074158 Tm +<00590044004f004c0047004200570052> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 957.7020859669831907 208.8510163000074158 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 238.746439516746392 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 894.3424238689876802 238.746439516746392 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 904.3424238689876802 258.4964395167463636 Tm +<004600520050005000580051004c0057004c00480056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 271.7464395167463636 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 271.7464395167463636 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 291.4964395167463636 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 278.7464395167463636 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 278.7464395167463636 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 278.7464395167463636 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1060.6090902813411958 291.4964395167463636 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 304.7464395167463636 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 304.7464395167463636 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 324.4964395167463636 Tm +<004c0052005700440042005700520053004c0046> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 311.7464395167463636 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 311.7464395167463636 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 311.7464395167463636 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1023.2924284466243989 324.4964395167463636 Tm +<0059004400550046004b00440055000b001500180018000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 337.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 337.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 357.4964395167464204 Tm +<005300580045004e0048005c> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 344.7464395167464204 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 344.7464395167464204 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 344.7464395167464204 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1038.2424253948665864 357.4964395167464204 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 370.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 370.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 390.4964395167464204 Tm +<00530055004c0059004e0048005c> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1066.2424253948665864 390.4964395167464204 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 403.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 403.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 423.4964395167464204 Tm +<0046004b0044004c00510046005200470048> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1066.2424253948665864 423.4964395167464204 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 436.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 436.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 456.4964395167464204 Tm +<0049005200550048004c004a0051> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 443.7464395167464204 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 443.7464395167464204 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 443.7464395167464204 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1045.6424231060482271 456.4964395167464204 Tm +<0057004c0051005c004c00510057000b0017000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 469.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 469.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 489.4964395167464204 Tm +<004a0050005a004200440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1088.6090902813411958 489.4964395167464204 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 502.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 502.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 522.4964395167464772 Tm +<004400580049004200440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1088.6090902813411958 522.4964395167464772 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 535.7464395167464772 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 535.7464395167464772 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 555.4964395167464772 Tm +<0046005500480044005700480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 542.7464395167464772 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 542.7464395167464772 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 542.7464395167464772 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1044.6757597454525239 555.4964395167464772 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 568.7464395167464772 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 568.7464395167464772 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 588.4964395167464772 Tm +<0046005200510049004c0055005000480047004200440057> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1072.6757597454525239 588.4964395167464772 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 480.4935575840835895 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 384.8155906418625136 480.4935575840835895 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 394.8155906418625136 500.2435575840835895 Tm +<0046005200510049004c0055005000480047004200570055004400510056004400460057004c005200510056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 513.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 513.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 533.2435575840836464 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 520.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 520.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 520.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 604.1655891159836074 533.2435575840836464 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 546.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 546.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 566.2435575840836464 Tm +<00570055004400510056004400460057004c005200510042004700550044004900570042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 553.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 553.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 553.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 604.1655891159836074 566.2435575840836464 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 579.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 579.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 599.2435575840836464 Tm +<00510055> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 586.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 586.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 586.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 604.1655891159836074 599.2435575840836464 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 612.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 612.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 632.2435575840836464 Tm +<0055005800510051004c0051004a0042004b00440056004b> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 619.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 619.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 619.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 600.0989234665695449 632.2435575840836464 Tm +<0045004c005100440055005c000b0017001b000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 645.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 645.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 665.2435575840836464 Tm +<00440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 652.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 652.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 652.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 622.4655883530441542 665.2435575840836464 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 678.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 678.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 698.2435575840836464 Tm +<0044004600460052005800510057004200450044004f0044005100460048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 685.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 685.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 685.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 572.8155906418625136 698.2435575840836464 Tm +<004700480046004c00500044004f000b00170013000f00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 711.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 711.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 731.2435575840836464 Tm +<004c00520057004400420050004c004f004800560057005200510048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 718.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 718.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 718.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 604.1655891159836074 731.2435575840836464 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 744.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 744.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 764.2435575840836464 Tm +<0046005200510049004c0055005000480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 751.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 751.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 751.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 606.5322578171554824 764.2435575840836464 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 251.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 13.8842919430489928 251.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 23.8842919430489928 271.1255927780927664 Tm +<00570055004400510056004400460057004c005200510042004700550044004900570056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 284.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 284.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 304.1255927780927664 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 291.3755927780927664 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 291.3755927780927664 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 291.3755927780927664 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 201.1009591183419616 304.1255927780927664 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 317.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 317.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 337.1255927780927664 Tm +<004c005200570044004200500048005600560044004a00480042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 225.0342934689278991 337.1255927780927664 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 350.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 350.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 370.1255927780927664 Tm +<0056004c004a0051004c0051004a004200440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 357.3755927780927664 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 357.3755927780927664 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 357.3755927780927664 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 219.4009583554025085 370.1255927780927664 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 383.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 383.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 403.1255927780927664 Tm +<005500480046004c0053004c004800510057004200440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 247.4009583554025085 403.1255927780927664 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 416.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 416.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 436.1255927780927664 Tm +<0056004800510047004800550042004600520050005000580051004c0057005c0042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 423.3755927780927664 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 423.3755927780927664 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 423.3755927780927664 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 219.4009583554025085 436.1255927780927664 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 449.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 449.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 469.1255927780927664 Tm +<005500480046004c0053004c0048005100570042004600520050005000580051004c0057005c0042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 247.4009583554025085 469.1255927780927664 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 482.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 482.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 502.1255927780927664 Tm +<004400500052005800510057> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 197.7509606442208678 502.1255927780927664 Tm +<004700480046004c00500044004f000b00170013000f00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 515.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 515.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 535.1255927780928232 Tm +<0057005c00530048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 522.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 522.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 522.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 204.4342911801095397 535.1255927780928232 Tm +<0057004c0051005c004c00510057000b0016000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 548.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 548.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 568.1255927780928232 Tm +<0046005500480044005700480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 555.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 555.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 555.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 203.4676278195138366 568.1255927780928232 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 581.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 581.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 601.1255927780928232 Tm +<004500520047005c00420045005c005700480056> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 588.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 588.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 588.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 230.8176262936349303 601.1255927780928232 Tm +<0045004f00520045> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 614.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 614.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 634.1255927780928232 Tm +<0056004c004a005100440057005800550048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 621.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 621.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 621.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 197.0342934689278991 634.1255927780928232 Tm +<0045004c005100440055005c000b00190017000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 647.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 647.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 667.1255927780928232 Tm +<0053005500520057005200460052004f00420059004800550056004c00520051> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 654.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 654.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 654.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 219.4009583554025085 667.1255927780928232 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 0. 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 0. 0. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 10. 19.75 Tm +<00580056004800550056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 33. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 33. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 52.75 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 206.51666259765625 40. cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 40. cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 40. cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 164.0999946594238281 52.75 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 66. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 66. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 85.75 Tm +<004a005500440047004c004700520042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 181.2499961853027344 85.75 Tm +<0046004b00440055000b00160019000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 99. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 99. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 118.75 Tm +<005300580045004e0048005c> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 206.51666259765625 106. cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 106. cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 106. cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 141.7333297729492188 118.75 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 132. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 132. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 151.75 Tm +<0046005500480044005700480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 206.51666259765625 139. cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 139. cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 139. cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 148.1666641235351563 151.75 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 165. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 165. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 184.75 Tm +<0046005200510049004c0055005000480047004200440057> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 176.1666641235351563 184.75 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +Q +Q +Q +Q +endstream +endobj +5 0 obj +<> >> +] +/Contents 6 0 R +>> +endobj +6 0 obj +<< +/Length 167286 +>> +stream +1. w +0.83 G +0.98 g +0. 1080. 1920. -1080. re +f +q +1. 0. 0. -1. 0. 1080. cm +q +1. 0. 0. 1. 1711. 1015. cm +1. w +0. g +q +1. 0. 0. 1. 0. 0. cm +0. 0. 184. 60. re +W +n +q +q +0.26 0.55 1. rg +0.2 0. 0. 0.2 0. 0. cm +211.9000000000000057 68.7999999999999972 m +159.6999999999999886 68.7999999999999972 l +159.6999999999999886 147.5999999999999943 l +242.3999999999999773 147.5999999999999943 l +242.3999999999999773 99.2999999999999972 l +242.3999999999999773 82.5 228.7999999999999829 68.7999999999999972 211.8999999999999773 68.7999999999999972 c +h +f +Q +q +0.15 0.44 0.87 rg +0.2 0. 0. 0.2 0. 0. cm +242.4000000000000057 147.5999999999999943 m +159.6999999999999886 147.5999999999999943 l +159.6999999999999886 228.8000000000000114 l +211.8999999999999773 228.8000000000000114 l +228.6999999999999886 228.8000000000000114 242.3999999999999773 215.1000000000000227 242.3999999999999773 198.3000000000000114 c +242.3999999999999773 147.6000000000000227 l +h +f +Q +q +0.13 0.38 0.81 rg +0.2 0. 0. 0.2 0. 0. cm +159.6999999999999886 68.7999999999999972 m +113.0999999999999943 68.7999999999999972 l +96.2999999999999972 68.7999999999999972 82.5999999999999943 82.5 82.5999999999999943 99.2999999999999972 c +82.5999999999999943 198.3000000000000114 l +82.5999999999999943 215.1000000000000227 96.2999999999999972 228.8000000000000114 113.0999999999999943 228.8000000000000114 c +159.6999999999999886 228.8000000000000114 l +159.6999999999999886 68.8000000000000114 l +h +f +Q +q +1. g +0.2 0. 0. 0.2 0. 0. cm +135.9000000000000057 165.0999999999999943 m +113.9000000000000057 165.0999999999999943 l +110.5 165.0999999999999943 107.8000000000000114 162.4000000000000057 107.8000000000000114 159. c +107.8000000000000114 137. l +107.8000000000000114 133.5999999999999943 110.5000000000000142 130.9000000000000057 113.9000000000000057 130.9000000000000057 c +135.9000000000000057 130.9000000000000057 l +139.3000000000000114 130.9000000000000057 142. 133.5999999999999943 142. 137. c +142. 159. l +142. 162.4000000000000057 139.1999999999999886 165.0999999999999943 135.9000000000000057 165.0999999999999943 c +h +185. 92.7999999999999972 m +207. 92.7999999999999972 l +210.4000000000000057 92.7999999999999972 213.0999999999999943 95.5 213.0999999999999943 98.8999999999999915 c +213.0999999999999943 120.8999999999999915 l +213.0999999999999943 124.2999999999999972 210.4000000000000057 126.9999999999999858 207. 126.9999999999999858 c +185. 126.9999999999999858 l +181.5999999999999943 126.9999999999999858 178.9000000000000057 124.2999999999999829 178.9000000000000057 120.8999999999999915 c +178.9000000000000057 98.8999999999999915 l +178.9000000000000057 95.4999999999999858 181.7000000000000171 92.7999999999999972 185. 92.7999999999999972 c +h +185. 171. m +207. 171. l +210.4000000000000057 171. 213.0999999999999943 173.6999999999999886 213.0999999999999943 177.0999999999999943 c +213.0999999999999943 199.0999999999999943 l +213.0999999999999943 202.5 210.4000000000000057 205.1999999999999886 207. 205.1999999999999886 c +185. 205.1999999999999886 l +181.5999999999999943 205.1999999999999886 178.9000000000000057 202.5 178.9000000000000057 199.0999999999999943 c +178.9000000000000057 177.0999999999999943 l +178.9000000000000057 173.6999999999999886 181.7000000000000171 171. 185. 171. c +h +f +Q +q +1. g +0.2 0. 0. 0.2 0. 0. cm +126.0759999999999934 151.6500000000000057 m +192.1159999999999854 103.8900000000000148 l +196.8619999999999948 110.4540000000000077 l +130.8229999999999791 158.2139999999999986 l +h +f +Q +q +1. g +0.2 0. 0. 0.2 0. 0. cm +125.8269999999999982 143.8739999999999952 m +130.8000000000000114 137.4799999999999898 l +194.8190000000000168 187.2679999999999723 l +189.8460000000000036 193.6619999999999777 l +h +f +Q +q +0.13 0.38 0.81 rg +0.2 0. 0. 0.2 0. 0. cm +344.8999999999999773 182.0999999999999943 m +335.8999999999999773 182.0999999999999943 l +335.8999999999999773 175.2999999999999829 l +335.6999999999999886 175.2999999999999829 l +334. 177.7999999999999829 331.5999999999999659 179.7999999999999829 328.5999999999999659 181.1999999999999886 c +325.5999999999999659 182.5999999999999943 322.4999999999999432 183.2999999999999829 319.2999999999999545 183.2999999999999829 c +315.5999999999999659 183.2999999999999829 312.2999999999999545 182.6999999999999886 309.3999999999999773 181.3999999999999773 c +306.3999999999999773 180.0999999999999659 303.8999999999999773 178.3999999999999773 301.7999999999999545 176.0999999999999659 c +299.6999999999999318 173.7999999999999545 298.0999999999999659 171.1999999999999602 296.9999999999999432 168.1999999999999602 c +295.8999999999999204 165.1999999999999602 295.2999999999999545 161.8999999999999488 295.2999999999999545 158.3999999999999488 c +295.2999999999999545 154.8999999999999488 295.8999999999999773 151.5999999999999375 296.9999999999999432 148.5999999999999375 c +298.0999999999999659 145.5999999999999375 299.6999999999999318 142.8999999999999488 301.7999999999999545 140.6999999999999318 c +303.8999999999999773 138.4999999999999432 306.3999999999999773 136.6999999999999318 309.3999999999999773 135.4999999999999432 c +312.3999999999999773 134.1999999999999318 315.6999999999999886 133.5999999999999375 319.2999999999999545 133.5999999999999375 c +322.6999999999999318 133.5999999999999375 325.8999999999999773 134.2999999999999261 328.8999999999999773 135.6999999999999318 c +331.8999999999999773 137.0999999999999375 334.1999999999999886 139.0999999999999375 335.7999999999999545 141.4999999999999432 c +335.9999999999999432 141.4999999999999432 l +335.9999999999999432 106.5999999999999375 l +344.9999999999999432 106.5999999999999375 l +344.9999999999999432 182.0999999999999375 l +344.8999999999999204 182.0999999999999375 l +h +320.2999999999999545 174.9000000000000057 m +322.6999999999999318 174.9000000000000057 324.8999999999999773 174.5 326.7999999999999545 173.7000000000000171 c +328.6999999999999318 172.9000000000000057 330.3999999999999773 171.7000000000000171 331.6999999999999318 170.3000000000000114 c +332.9999999999999432 168.9000000000000057 334.0999999999999091 167.1000000000000227 334.7999999999999545 165.1000000000000227 c +335.4999999999999432 163.1000000000000227 335.8999999999999773 160.9000000000000341 335.8999999999999773 158.5000000000000284 c +335.8999999999999773 156.1000000000000227 335.5 153.9000000000000341 334.7999999999999545 151.9000000000000341 c +334.0999999999999659 149.9000000000000341 332.9999999999999432 148.1000000000000227 331.6999999999999318 146.7000000000000455 c +330.3999999999999204 145.3000000000000398 328.6999999999999318 144.1000000000000512 326.7999999999999545 143.3000000000000398 c +324.8999999999999773 142.5000000000000284 322.6999999999999318 142.1000000000000512 320.2999999999999545 142.1000000000000512 c +317.8999999999999773 142.1000000000000512 315.6999999999999318 142.5000000000000568 313.7999999999999545 143.3000000000000398 c +311.8999999999999773 144.1000000000000512 310.1999999999999318 145.3000000000000398 308.8999999999999773 146.7000000000000455 c +307.5999999999999659 148.1000000000000512 306.5 149.9000000000000341 305.7999999999999545 151.9000000000000341 c +305.0999999999999659 153.9000000000000341 304.6999999999999318 156.1000000000000227 304.6999999999999318 158.5000000000000284 c +304.6999999999999318 160.9000000000000341 305.0999999999999091 163.1000000000000227 305.7999999999999545 165.1000000000000227 c +306.4999999999999432 167.1000000000000227 307.5999999999999659 168.9000000000000341 308.8999999999999773 170.3000000000000114 c +310.1999999999999886 171.7000000000000171 311.8999999999999773 172.9000000000000057 313.7999999999999545 173.7000000000000171 c +315.7999999999999545 174.5000000000000284 317.8999999999999773 174.9000000000000057 320.2999999999999545 174.9000000000000057 c +h +358.3999999999999773 106.6000000000000085 m +367.3999999999999773 106.6000000000000085 l +367.3999999999999773 141.5 l +367.5999999999999659 141.5 l +369.1999999999999886 139. 371.4999999999999432 137.0999999999999943 374.4999999999999432 135.6999999999999886 c +377.4999999999999432 134.2999999999999829 380.6999999999999318 133.5999999999999943 384.0999999999999659 133.5999999999999943 c +387.7999999999999545 133.5999999999999943 391.0999999999999659 134.1999999999999886 393.9999999999999432 135.5 c +396.9999999999999432 136.8000000000000114 399.4999999999999432 138.5 401.5999999999999659 140.6999999999999886 c +403.6999999999999886 142.8999999999999773 405.2999999999999545 145.5999999999999943 406.3999999999999773 148.5999999999999943 c +407.5 151.5999999999999943 408.0999999999999659 154.9000000000000057 408.0999999999999659 158.4000000000000057 c +408.0999999999999659 161.9000000000000057 407.4999999999999432 165.2000000000000171 406.3999999999999773 168.2000000000000171 c +405.2999999999999545 171.2000000000000171 403.6999999999999886 173.8000000000000114 401.5999999999999659 176.1000000000000227 c +399.4999999999999432 178.4000000000000341 396.9999999999999432 180.1000000000000227 393.9999999999999432 181.4000000000000341 c +390.9999999999999432 182.7000000000000455 387.6999999999999318 183.3000000000000398 384.0999999999999659 183.3000000000000398 c +380.8999999999999773 183.3000000000000398 377.7999999999999545 182.6000000000000512 374.7999999999999545 181.2000000000000455 c +371.7999999999999545 179.8000000000000398 369.3999999999999773 177.8000000000000398 367.6999999999999318 175.3000000000000398 c +367.4999999999999432 175.3000000000000398 l +367.4999999999999432 182.1000000000000512 l +358.4999999999999432 182.1000000000000512 l +358.4999999999999432 106.6000000000000512 l +358.3999999999999204 106.6000000000000512 l +h +383. 174.9000000000000057 m +385.3999999999999773 174.9000000000000057 387.6000000000000227 174.5 389.5 173.7000000000000171 c +391.3999999999999773 172.9000000000000057 393.1000000000000227 171.7000000000000171 394.3999999999999773 170.3000000000000114 c +395.6999999999999886 168.9000000000000057 396.7999999999999545 167.1000000000000227 397.5 165.1000000000000227 c +398.1999999999999886 163.1000000000000227 398.6000000000000227 160.9000000000000341 398.6000000000000227 158.5000000000000284 c +398.6000000000000227 156.1000000000000227 398.2000000000000455 153.9000000000000341 397.5 151.9000000000000341 c +396.8000000000000114 149.9000000000000341 395.6999999999999886 148.1000000000000227 394.3999999999999773 146.7000000000000455 c +393.0999999999999659 145.3000000000000398 391.3999999999999773 144.1000000000000512 389.5 143.3000000000000398 c +387.6000000000000227 142.5000000000000284 385.3999999999999773 142.1000000000000512 383. 142.1000000000000512 c +380.6000000000000227 142.1000000000000512 378.3999999999999773 142.5000000000000568 376.5 143.3000000000000398 c +374.6000000000000227 144.1000000000000512 372.8999999999999773 145.3000000000000398 371.6000000000000227 146.7000000000000455 c +370.3000000000000114 148.1000000000000512 369.2000000000000455 149.9000000000000341 368.5 151.9000000000000341 c +367.8000000000000114 153.9000000000000341 367.3999999999999773 156.1000000000000227 367.3999999999999773 158.5000000000000284 c +367.3999999999999773 160.9000000000000341 367.7999999999999545 163.1000000000000227 368.5 165.1000000000000227 c +369.1999999999999886 167.1000000000000227 370.3000000000000114 168.9000000000000341 371.6000000000000227 170.3000000000000114 c +372.9000000000000341 171.7000000000000171 374.6000000000000227 172.9000000000000057 376.5 173.7000000000000171 c +378.3999999999999773 174.5000000000000284 380.6000000000000227 174.9000000000000057 383. 174.9000000000000057 c +h +466.8999999999999773 182.0999999999999943 m +457.8999999999999773 182.0999999999999943 l +457.8999999999999773 175.2999999999999829 l +457.6999999999999886 175.2999999999999829 l +456. 177.7999999999999829 453.5999999999999659 179.7999999999999829 450.5999999999999659 181.1999999999999886 c +447.5999999999999659 182.5999999999999943 444.4999999999999432 183.2999999999999829 441.2999999999999545 183.2999999999999829 c +437.5999999999999659 183.2999999999999829 434.2999999999999545 182.6999999999999886 431.3999999999999773 181.3999999999999773 c +428.3999999999999773 180.0999999999999659 425.8999999999999773 178.3999999999999773 423.7999999999999545 176.0999999999999659 c +421.6999999999999318 173.7999999999999545 420.0999999999999659 171.1999999999999602 418.9999999999999432 168.1999999999999602 c +417.8999999999999204 165.1999999999999602 417.2999999999999545 161.8999999999999488 417.2999999999999545 158.3999999999999488 c +417.2999999999999545 154.8999999999999488 417.8999999999999773 151.5999999999999375 418.9999999999999432 148.5999999999999375 c +420.0999999999999659 145.5999999999999375 421.6999999999999318 142.8999999999999488 423.7999999999999545 140.6999999999999318 c +425.8999999999999773 138.4999999999999432 428.3999999999999773 136.6999999999999318 431.3999999999999773 135.4999999999999432 c +434.3999999999999773 134.1999999999999318 437.6999999999999886 133.5999999999999375 441.2999999999999545 133.5999999999999375 c +444.6999999999999318 133.5999999999999375 447.8999999999999773 134.2999999999999261 450.8999999999999773 135.6999999999999318 c +453.8999999999999773 137.0999999999999375 456.1999999999999886 139.0999999999999375 457.7999999999999545 141.4999999999999432 c +457.9999999999999432 141.4999999999999432 l +457.9999999999999432 106.5999999999999375 l +466.9999999999999432 106.5999999999999375 l +466.9999999999999432 182.0999999999999375 l +466.8999999999999204 182.0999999999999375 l +h +442.2999999999999545 174.9000000000000057 m +444.6999999999999318 174.9000000000000057 446.8999999999999773 174.5 448.7999999999999545 173.7000000000000171 c +450.6999999999999318 172.9000000000000057 452.3999999999999773 171.7000000000000171 453.6999999999999318 170.3000000000000114 c +454.9999999999999432 168.9000000000000057 456.0999999999999091 167.1000000000000227 456.7999999999999545 165.1000000000000227 c +457.4999999999999432 163.1000000000000227 457.8999999999999773 160.9000000000000341 457.8999999999999773 158.5000000000000284 c +457.8999999999999773 156.1000000000000227 457.5 153.9000000000000341 456.7999999999999545 151.9000000000000341 c +456.0999999999999659 149.9000000000000341 454.9999999999999432 148.1000000000000227 453.6999999999999318 146.7000000000000455 c +452.3999999999999204 145.3000000000000398 450.6999999999999318 144.1000000000000512 448.7999999999999545 143.3000000000000398 c +446.8999999999999773 142.5000000000000284 444.6999999999999318 142.1000000000000512 442.2999999999999545 142.1000000000000512 c +439.8999999999999773 142.1000000000000512 437.6999999999999318 142.5000000000000568 435.7999999999999545 143.3000000000000398 c +433.8999999999999773 144.1000000000000512 432.1999999999999318 145.3000000000000398 430.8999999999999773 146.7000000000000455 c +429.5999999999999659 148.1000000000000512 428.5 149.9000000000000341 427.7999999999999545 151.9000000000000341 c +427.0999999999999659 153.9000000000000341 426.6999999999999318 156.1000000000000227 426.6999999999999318 158.5000000000000284 c +426.6999999999999318 160.9000000000000341 427.0999999999999091 163.1000000000000227 427.7999999999999545 165.1000000000000227 c +428.4999999999999432 167.1000000000000227 429.5999999999999659 168.9000000000000341 430.8999999999999773 170.3000000000000114 c +432.1999999999999886 171.7000000000000171 433.8999999999999773 172.9000000000000057 435.7999999999999545 173.7000000000000171 c +437.6999999999999318 174.5000000000000284 439.8999999999999773 174.9000000000000057 442.2999999999999545 174.9000000000000057 c +h +478.9999999999999432 117.8000000000000114 m +478.9999999999999432 116.0000000000000142 479.5999999999999659 114.5000000000000142 480.8999999999999204 113.2000000000000171 c +482.1999999999999318 111.9000000000000199 483.6999999999999318 111.3000000000000114 485.4999999999999432 111.3000000000000114 c +487.2999999999999545 111.3000000000000114 488.7999999999999545 111.9000000000000057 490.0999999999999659 113.2000000000000171 c +491.3999999999999773 114.5000000000000142 491.9999999999999432 116.0000000000000142 491.9999999999999432 117.8000000000000114 c +491.9999999999999432 119.6000000000000085 491.3999999999999204 121.1000000000000085 490.0999999999999659 122.4000000000000057 c +488.7999999999999545 123.7000000000000028 487.2999999999999545 124.3000000000000114 485.4999999999999432 124.3000000000000114 c +483.6999999999999318 124.3000000000000114 482.1999999999999318 123.7000000000000171 480.8999999999999204 122.4000000000000057 c +479.6999999999999318 121.1000000000000085 478.9999999999999432 119.6000000000000085 478.9999999999999432 117.8000000000000114 c +h +481.0999999999999659 134.8000000000000114 m +490.0999999999999659 134.8000000000000114 l +490.0999999999999659 182.1000000000000227 l +481.0999999999999659 182.1000000000000227 l +481.0999999999999659 134.8000000000000114 l +h +504.5999999999999659 140.5 m +507.0999999999999659 138.1999999999999886 510.0999999999999659 136.4000000000000057 513.3999999999999773 135.3000000000000114 c +516.6999999999999318 134.1000000000000227 520.1000000000000227 133.6000000000000227 523.3999999999999773 133.6000000000000227 c +526.8999999999999773 133.6000000000000227 529.7999999999999545 134.0000000000000284 532.2999999999999545 134.9000000000000341 c +534.7999999999999545 135.8000000000000398 536.7999999999999545 136.9000000000000341 538.3999999999999773 138.4000000000000341 c +540. 139.9000000000000341 541.1999999999999318 141.5000000000000284 541.8999999999999773 143.4000000000000341 c +542.6999999999999318 145.3000000000000398 543. 147.3000000000000398 543. 149.3000000000000398 c +543. 173.5000000000000284 l +543. 175.2000000000000171 543. 176.7000000000000171 543.1000000000000227 178.1000000000000227 c +543.2000000000000455 179.5000000000000284 543.3000000000000682 180.8000000000000114 543.3999999999999773 182.1000000000000227 c +535.3999999999999773 182.1000000000000227 l +535.1999999999999318 179.7000000000000171 535.1000000000000227 177.3000000000000114 535.1000000000000227 174.9000000000000341 c +535. 174.9000000000000341 l +533. 178.0000000000000284 530.6000000000000227 180.1000000000000227 527.8999999999999773 181.4000000000000341 c +525.1999999999999318 182.7000000000000455 522. 183.3000000000000398 518.3999999999999773 183.3000000000000398 c +516.1999999999999318 183.3000000000000398 514.1000000000000227 183.0000000000000284 512.1000000000000227 182.4000000000000341 c +510.1000000000000227 181.8000000000000398 508.4000000000000341 180.9000000000000341 506.9000000000000341 179.7000000000000455 c +505.4000000000000341 178.5000000000000568 504.2000000000000455 177.0000000000000568 503.4000000000000341 175.3000000000000398 c +502.5000000000000568 173.5000000000000284 502.1000000000000227 171.5000000000000284 502.1000000000000227 169.2000000000000455 c +502.1000000000000227 166.1000000000000512 502.8000000000000114 163.6000000000000512 504.1000000000000227 161.5000000000000568 c +505.5 159.4000000000000625 507.3000000000000114 157.8000000000000682 509.7000000000000455 156.5000000000000568 c +512.1000000000000227 155.2000000000000455 514.8000000000000682 154.3000000000000682 518. 153.7000000000000455 c +521.2000000000000455 153.1000000000000512 524.5 152.9000000000000341 528.1000000000000227 152.9000000000000341 c +534.7000000000000455 152.9000000000000341 l +534.7000000000000455 150.9000000000000341 l +534.7000000000000455 149.7000000000000455 534.5 148.5000000000000284 534. 147.3000000000000398 c +533.5 146.1000000000000512 532.7999999999999545 145.0000000000000284 531.8999999999999773 144.1000000000000512 c +531. 143.1000000000000512 529.7999999999999545 142.4000000000000625 528.3999999999999773 141.8000000000000398 c +527. 141.2000000000000455 525.2999999999999545 141.0000000000000284 523.3999999999999773 141.0000000000000284 c +521.6999999999999318 141.0000000000000284 520.1999999999999318 141.2000000000000171 518.8999999999999773 141.5000000000000284 c +517.6000000000000227 141.8000000000000398 516.3999999999999773 142.2000000000000171 515.3999999999999773 142.7000000000000171 c +514.2999999999999545 143.2000000000000171 513.3999999999999773 143.8000000000000114 512.5 144.4000000000000057 c +511.6000000000000227 145.0999999999999943 510.8000000000000114 145.7000000000000171 510. 146.3000000000000114 c +504.6000000000000227 140.5 l +h +529.8999999999999773 159.3000000000000114 m +527.7999999999999545 159.3000000000000114 525.6000000000000227 159.4000000000000057 523.3999999999999773 159.6000000000000227 c +521.1999999999999318 159.8000000000000114 519.1000000000000227 160.3000000000000114 517.2999999999999545 160.9000000000000341 c +515.5 161.6000000000000227 514. 162.5000000000000284 512.7999999999999545 163.7000000000000455 c +511.5999999999999659 164.9000000000000341 511.0999999999999659 166.4000000000000341 511.0999999999999659 168.3000000000000398 c +511.0999999999999659 171.0000000000000284 511.9999999999999432 173.0000000000000284 513.7999999999999545 174.2000000000000455 c +515.5999999999999091 175.4000000000000341 518.0999999999999091 176.0000000000000568 521.1999999999999318 176.0000000000000568 c +523.6999999999999318 176.0000000000000568 525.7999999999999545 175.6000000000000512 527.4999999999998863 174.8000000000000682 c +529.1999999999999318 174.0000000000000568 530.5999999999999091 172.9000000000000625 531.6999999999999318 171.6000000000000796 c +532.7999999999999545 170.3000000000000682 533.4999999999998863 168.8000000000000682 533.9999999999998863 167.2000000000000739 c +534.4999999999998863 165.6000000000000796 534.6999999999999318 164.0000000000000853 534.6999999999999318 162.4000000000000625 c +534.6999999999999318 159.4000000000000625 l +529.8999999999999773 159.4000000000000625 l +529.8999999999999773 159.3000000000000682 l +h +603.6000000000000227 181.7000000000000171 m +603.6000000000000227 185.3000000000000114 603. 188.6000000000000227 601.8000000000000682 191.5000000000000284 c +600.6000000000000227 194.5000000000000284 598.8000000000000682 197.0000000000000284 596.6000000000000227 199.2000000000000171 c +594.3000000000000682 201.4000000000000057 591.6000000000000227 203.0000000000000284 588.3999999999999773 204.2000000000000171 c +585.1999999999999318 205.4000000000000057 581.6999999999999318 206.0000000000000284 577.7999999999999545 206.0000000000000284 c +573.2999999999999545 206.0000000000000284 569.0999999999999091 205.4000000000000341 565.3999999999999773 204.1000000000000227 c +561.6000000000000227 202.8000000000000114 558.1000000000000227 200.6000000000000227 554.6999999999999318 197.5000000000000284 c +560.7999999999999545 189.9000000000000341 l +563.0999999999999091 192.4000000000000341 565.6999999999999318 194.3000000000000398 568.3999999999999773 195.6000000000000227 c +571.1000000000000227 196.9000000000000341 574.1999999999999318 197.5000000000000284 577.6999999999999318 197.5000000000000284 c +580.9999999999998863 197.5000000000000284 583.7999999999999545 197.0000000000000284 585.9999999999998863 196.1000000000000227 c +588.1999999999999318 195.1000000000000227 589.8999999999998636 193.9000000000000341 591.1999999999999318 192.4000000000000341 c +592.4999999999998863 190.9000000000000341 593.3999999999999773 189.1000000000000227 593.8999999999999773 187.2000000000000455 c +594.3999999999999773 185.2000000000000455 594.6999999999999318 183.3000000000000398 594.6999999999999318 181.3000000000000398 c +594.6999999999999318 174.3000000000000398 l +594.3999999999999773 174.3000000000000398 l +592.6999999999999318 177.2000000000000455 590.2999999999999545 179.3000000000000398 587.3999999999999773 180.6000000000000512 c +584.3999999999999773 182.0000000000000568 581.2999999999999545 182.6000000000000512 578.1000000000000227 182.6000000000000512 c +574.6000000000000227 182.6000000000000512 571.3999999999999773 182.0000000000000568 568.5 180.8000000000000398 c +565.5 179.6000000000000512 563. 177.9000000000000341 560.8999999999999773 175.7000000000000455 c +558.7999999999999545 173.5000000000000568 557.1000000000000227 171.0000000000000568 555.8999999999999773 168.0000000000000568 c +554.6999999999999318 165.0000000000000568 554.1000000000000227 161.8000000000000682 554.1000000000000227 158.4000000000000625 c +554.1000000000000227 154.9000000000000625 554.7000000000000455 151.7000000000000739 555.8000000000000682 148.7000000000000739 c +556.9000000000000909 145.7000000000000739 558.5000000000001137 143.0000000000000853 560.6000000000000227 140.8000000000000682 c +562.7000000000000455 138.5000000000000568 565.2000000000000455 136.8000000000000682 568.2000000000000455 135.5000000000000568 c +571.2000000000000455 134.2000000000000455 574.5 133.6000000000000512 578.1000000000000227 133.6000000000000512 c +581.3000000000000682 133.6000000000000512 584.3999999999999773 134.3000000000000398 587.3999999999999773 135.7000000000000455 c +590.3999999999999773 137.1000000000000512 592.7999999999999545 139.1000000000000512 594.5 141.6000000000000512 c +594.7000000000000455 141.6000000000000512 l +594.7000000000000455 134.8000000000000398 l +603.7000000000000455 134.8000000000000398 l +603.6000000000000227 181.7000000000000455 l +h +579.1000000000000227 141.9000000000000341 m +576.7000000000000455 141.9000000000000341 574.5 142.3000000000000398 572.6000000000000227 143.1000000000000227 c +570.7000000000000455 143.9000000000000341 569. 145.1000000000000227 567.7000000000000455 146.5000000000000284 c +566.4000000000000909 147.9000000000000341 565.3000000000000682 149.7000000000000171 564.6000000000000227 151.7000000000000171 c +563.8999999999999773 153.7000000000000171 563.5 155.9000000000000057 563.5 158.3000000000000114 c +563.5 163.1000000000000227 564.8999999999999773 166.9000000000000057 567.7000000000000455 169.8000000000000114 c +570.5 172.7000000000000171 574.3000000000000682 174.1000000000000227 579.1000000000000227 174.1000000000000227 c +583.8999999999999773 174.1000000000000227 587.7000000000000455 172.7000000000000171 590.5 169.8000000000000114 c +593.2999999999999545 166.9000000000000057 594.7000000000000455 163.1000000000000227 594.7000000000000455 158.3000000000000114 c +594.7000000000000455 155.9000000000000057 594.3000000000000682 153.7000000000000171 593.6000000000000227 151.7000000000000171 c +592.8999999999999773 149.7000000000000171 591.8000000000000682 147.9000000000000057 590.5 146.5000000000000284 c +589.2000000000000455 145.1000000000000227 587.5 143.9000000000000341 585.6000000000000227 143.1000000000000227 c +583.6000000000000227 142.4000000000000341 581.5 141.9000000000000341 579.1000000000000227 141.9000000000000341 c +h +617.2000000000000455 134.8000000000000398 m +626.2000000000000455 134.8000000000000398 l +626.2000000000000455 142.1000000000000512 l +626.4000000000000909 142.1000000000000512 l +627.0000000000001137 140.8000000000000398 627.8000000000000682 139.7000000000000455 628.8000000000000682 138.7000000000000455 c +629.8000000000000682 137.7000000000000455 630.9000000000000909 136.8000000000000398 632.1000000000000227 136.1000000000000512 c +633.3000000000000682 135.4000000000000625 634.7000000000000455 134.8000000000000398 636.1000000000000227 134.4000000000000625 c +637.6000000000000227 134.0000000000000568 639. 133.8000000000000682 640.5 133.8000000000000682 c +642. 133.8000000000000682 643.2999999999999545 134.0000000000000568 644.5 134.4000000000000625 c +644.1000000000000227 144.1000000000000512 l +643.3999999999999773 143.9000000000000625 642.6000000000000227 143.7000000000000455 641.8999999999999773 143.6000000000000512 c +641.1999999999999318 143.5000000000000568 640.3999999999999773 143.4000000000000625 639.6999999999999318 143.4000000000000625 c +635.2999999999999545 143.4000000000000625 631.8999999999999773 144.6000000000000512 629.5999999999999091 147.1000000000000512 c +627.2999999999999545 149.6000000000000512 626.0999999999999091 153.4000000000000625 626.0999999999999091 158.6000000000000512 c +626.0999999999999091 182.4000000000000625 l +617.0999999999999091 182.4000000000000625 l +617.1999999999999318 134.8000000000000682 l +h +654.3000000000000682 140.5000000000000284 m +656.8000000000000682 138.2000000000000171 659.8000000000000682 136.4000000000000341 663.1000000000000227 135.3000000000000398 c +666.3999999999999773 134.1000000000000512 669.8000000000000682 133.6000000000000512 673.1000000000000227 133.6000000000000512 c +676.6000000000000227 133.6000000000000512 679.5 134.0000000000000568 682. 134.9000000000000625 c +684.5 135.8000000000000682 686.5 136.9000000000000625 688.1000000000000227 138.4000000000000625 c +689.7000000000000455 139.9000000000000625 690.8999999999999773 141.5000000000000568 691.6000000000000227 143.4000000000000625 c +692.3999999999999773 145.3000000000000682 692.7000000000000455 147.3000000000000682 692.7000000000000455 149.3000000000000682 c +692.7000000000000455 173.5000000000000568 l +692.7000000000000455 175.2000000000000455 692.7000000000000455 176.7000000000000455 692.8000000000000682 178.1000000000000512 c +692.9000000000000909 179.5000000000000568 693.0000000000001137 180.8000000000000398 693.1000000000000227 182.1000000000000512 c +685.1000000000000227 182.1000000000000512 l +684.8999999999999773 179.7000000000000455 684.8000000000000682 177.3000000000000398 684.8000000000000682 174.9000000000000625 c +684.6000000000000227 174.9000000000000625 l +682.6000000000000227 178.0000000000000568 680.2000000000000455 180.1000000000000512 677.5 181.4000000000000625 c +674.7999999999999545 182.7000000000000739 671.6000000000000227 183.3000000000000682 668. 183.3000000000000682 c +665.7999999999999545 183.3000000000000682 663.7000000000000455 183.0000000000000568 661.7000000000000455 182.4000000000000625 c +659.7000000000000455 181.8000000000000682 658. 180.9000000000000625 656.5 179.7000000000000739 c +655. 178.5000000000000853 653.7999999999999545 177.0000000000000853 653. 175.3000000000000682 c +652.1000000000000227 173.5000000000000568 651.7000000000000455 171.5000000000000568 651.7000000000000455 169.2000000000000739 c +651.7000000000000455 166.1000000000000796 652.4000000000000909 163.6000000000000796 653.7000000000000455 161.5000000000000853 c +655.1000000000000227 159.4000000000000909 656.9000000000000909 157.8000000000000966 659.3000000000000682 156.5000000000000853 c +661.7000000000000455 155.2000000000000739 664.4000000000000909 154.3000000000000966 667.6000000000000227 153.7000000000000739 c +670.8000000000000682 153.1000000000000796 674.1000000000000227 152.9000000000000625 677.7000000000000455 152.9000000000000625 c +684.3000000000000682 152.9000000000000625 l +684.3000000000000682 150.9000000000000625 l +684.3000000000000682 149.7000000000000739 684.1000000000000227 148.5000000000000568 683.6000000000000227 147.3000000000000682 c +683.1000000000000227 146.1000000000000796 682.3999999999999773 145.0000000000000568 681.5 144.1000000000000796 c +680.6000000000000227 143.1000000000000796 679.3999999999999773 142.4000000000000909 678. 141.8000000000000682 c +676.6000000000000227 141.2000000000000739 674.8999999999999773 141.0000000000000568 673. 141.0000000000000568 c +671.2999999999999545 141.0000000000000568 669.7999999999999545 141.2000000000000455 668.5 141.5000000000000568 c +667.2000000000000455 141.8000000000000682 666. 142.2000000000000455 665. 142.7000000000000455 c +663.8999999999999773 143.2000000000000455 663. 143.8000000000000398 662.1000000000000227 144.4000000000000341 c +661.2000000000000455 145.1000000000000227 660.3999999999999773 145.7000000000000455 659.6000000000000227 146.3000000000000398 c +654.3000000000000682 140.5000000000000284 l +h +679.7000000000000455 159.3000000000000398 m +677.6000000000000227 159.3000000000000398 675.4000000000000909 159.4000000000000341 673.2000000000000455 159.6000000000000512 c +671. 159.8000000000000398 668.9000000000000909 160.3000000000000398 667.1000000000000227 160.9000000000000625 c +665.3000000000000682 161.6000000000000512 663.8000000000000682 162.5000000000000568 662.6000000000000227 163.7000000000000739 c +661.3999999999999773 164.9000000000000625 660.8999999999999773 166.4000000000000625 660.8999999999999773 168.3000000000000682 c +660.8999999999999773 171.0000000000000568 661.7999999999999545 173.0000000000000568 663.6000000000000227 174.2000000000000739 c +665.3999999999999773 175.4000000000000625 667.8999999999999773 176.0000000000000853 671. 176.0000000000000853 c +673.5 176.0000000000000853 675.6000000000000227 175.6000000000000796 677.2999999999999545 174.8000000000000966 c +679. 174.0000000000000853 680.3999999999999773 172.9000000000000909 681.5 171.600000000000108 c +682.6000000000000227 170.3000000000000966 683.2999999999999545 168.8000000000000966 683.7999999999999545 167.2000000000001023 c +684.2999999999999545 165.600000000000108 684.5 164.0000000000001137 684.5 162.4000000000000909 c +684.5 159.4000000000000909 l +679.7000000000000455 159.4000000000000909 l +679.7000000000000455 159.3000000000000966 l +h +705.9000000000000909 134.8000000000000398 m +714.3000000000000682 134.8000000000000398 l +714.3000000000000682 142.2000000000000455 l +714.5000000000001137 142.2000000000000455 l +714.7000000000001592 141.5000000000000568 715.2000000000001592 140.7000000000000455 716.0000000000001137 139.7000000000000455 c +716.8000000000000682 138.7000000000000455 717.9000000000000909 137.8000000000000398 719.2000000000001592 136.9000000000000341 c +720.5000000000001137 136.0000000000000284 722.0000000000001137 135.2000000000000455 723.8000000000001819 134.6000000000000227 c +725.6000000000001364 134.0000000000000284 727.5000000000002274 133.7000000000000171 729.6000000000001364 133.7000000000000171 c +733.1000000000001364 133.7000000000000171 736.1000000000001364 134.4000000000000057 738.5000000000001137 135.9000000000000057 c +740.9000000000000909 137.4000000000000057 742.9000000000000909 139.5999999999999943 744.4000000000000909 142.5 c +745.9000000000000909 139.5999999999999943 748.1000000000001364 137.4000000000000057 750.9000000000000909 135.9000000000000057 c +753.7000000000000455 134.4000000000000057 756.5000000000001137 133.7000000000000171 759.4000000000000909 133.7000000000000171 c +763.1000000000001364 133.7000000000000171 766.1000000000001364 134.3000000000000114 768.4000000000000909 135.5000000000000284 c +770.7000000000000455 136.7000000000000171 772.6000000000001364 138.3000000000000398 773.9000000000000909 140.2000000000000171 c +775.2000000000000455 142.2000000000000171 776.1000000000001364 144.4000000000000057 776.6000000000001364 146.9000000000000057 c +777.1000000000001364 149.4000000000000057 777.3000000000001819 152. 777.3000000000001819 154.5999999999999943 c +777.3000000000001819 182.1999999999999886 l +768.3000000000001819 182.1999999999999886 l +768.3000000000001819 155.7999999999999829 l +768.3000000000001819 153.9999999999999716 768.2000000000001592 152.2999999999999829 768.0000000000002274 150.5999999999999943 c +767.8000000000001819 148.9000000000000057 767.3000000000001819 147.5 766.6000000000002501 146.1999999999999886 c +765.9000000000002046 144.8999999999999773 764.8000000000002956 143.8999999999999773 763.5000000000002274 143.1999999999999886 c +762.2000000000002728 142.3999999999999773 760.4000000000002046 142.0999999999999943 758.2000000000002728 142.0999999999999943 c +753.9000000000003183 142.0999999999999943 750.8000000000002956 143.4000000000000057 748.9000000000003183 146.0999999999999943 c +747.0000000000003411 148.7999999999999829 746.1000000000003638 152.1999999999999886 746.1000000000003638 156.4000000000000057 c +746.1000000000003638 182.3000000000000114 l +737.1000000000003638 182.3000000000000114 l +737.1000000000003638 157.5 l +737.1000000000003638 155.1999999999999886 737.0000000000003411 153.1999999999999886 736.8000000000004093 151.3000000000000114 c +736.6000000000003638 149.4000000000000057 736.1000000000003638 147.8000000000000114 735.400000000000432 146.5 c +734.7000000000003865 145.0999999999999943 733.7000000000003865 144.0999999999999943 732.400000000000432 143.3000000000000114 c +731.1000000000004775 142.5 729.400000000000432 142.2000000000000171 727.2000000000003865 142.2000000000000171 c +725.6000000000003638 142.2000000000000171 724.1000000000003638 142.5000000000000284 722.6000000000003638 143.1000000000000227 c +721.1000000000003638 143.7000000000000171 719.8000000000004093 144.7000000000000171 718.7000000000003865 145.9000000000000341 c +717.6000000000003638 147.2000000000000455 716.7000000000003865 148.8000000000000398 716.0000000000003411 150.7000000000000455 c +715.3000000000002956 152.7000000000000455 715.0000000000003411 155.0000000000000568 715.0000000000003411 157.6000000000000512 c +715.0000000000003411 182.2000000000000455 l +706.0000000000003411 182.2000000000000455 l +706.0000000000003411 134.8000000000000398 l +705.9000000000003183 134.8000000000000398 l +h +f +Q +q +0.26 0.55 1. rg +0.2 0. 0. 0.2 0. 0. cm +798.1000000000000227 182.6999999999999886 m +796.3000000000000682 182.6999999999999886 794.8000000000000682 182.0999999999999943 793.5 180.7999999999999829 c +792.2000000000000455 179.4999999999999716 791.6000000000000227 177.9999999999999716 791.6000000000000227 176.1999999999999886 c +791.6000000000000227 174.3999999999999773 792.2000000000000455 172.8999999999999773 793.5 171.5999999999999943 c +794.7999999999999545 170.2999999999999829 796.2999999999999545 169.6999999999999886 798.1000000000000227 169.6999999999999886 c +799.8999999999999773 169.6999999999999886 801.3999999999999773 170.2999999999999829 802.7000000000000455 171.5999999999999943 c +804. 172.9000000000000057 804.6000000000000227 174.4000000000000057 804.6000000000000227 176.1999999999999886 c +804.6000000000000227 178. 804. 179.5 802.7000000000000455 180.7999999999999829 c +801.4000000000000909 181.9999999999999716 799.9000000000000909 182.6999999999999886 798.1000000000000227 182.6999999999999886 c +h +817.3000000000000682 117.7999999999999829 m +817.3000000000000682 115.9999999999999858 817.9000000000000909 114.4999999999999858 819.2000000000000455 113.1999999999999886 c +820.5 111.8999999999999915 822. 111.2999999999999829 823.8000000000000682 111.2999999999999829 c +825.6000000000000227 111.2999999999999829 827.1000000000000227 111.8999999999999773 828.4000000000000909 113.1999999999999886 c +829.7000000000000455 114.4999999999999858 830.3000000000000682 115.9999999999999858 830.3000000000000682 117.7999999999999829 c +830.3000000000000682 119.5999999999999801 829.7000000000000455 121.0999999999999801 828.4000000000000909 122.3999999999999773 c +827.1000000000001364 123.6999999999999744 825.6000000000001364 124.2999999999999829 823.8000000000000682 124.2999999999999829 c +822.0000000000001137 124.2999999999999829 820.5000000000001137 123.6999999999999886 819.2000000000000455 122.3999999999999773 c +818. 121.0999999999999801 817.3000000000000682 119.5999999999999801 817.3000000000000682 117.7999999999999829 c +h +819.4000000000000909 134.7999999999999829 m +828.4000000000000909 134.7999999999999829 l +828.4000000000000909 182.0999999999999659 l +819.4000000000000909 182.0999999999999659 l +819.4000000000000909 134.7999999999999545 l +h +840.4000000000000909 158.3999999999999773 m +840.4000000000000909 154.8999999999999773 841.0000000000001137 151.6999999999999886 842.3000000000000682 148.6999999999999886 c +843.6000000000000227 145.6999999999999886 845.4000000000000909 143.0999999999999943 847.6000000000000227 140.7999999999999829 c +849.8999999999999773 138.4999999999999716 852.5 136.7999999999999829 855.6000000000000227 135.4999999999999716 c +858.7000000000000455 134.1999999999999602 862. 133.5999999999999659 865.5 133.5999999999999659 c +869. 133.5999999999999659 872.2999999999999545 134.1999999999999602 875.3999999999999773 135.4999999999999716 c +878.5 136.7999999999999829 881.1000000000000227 138.5999999999999659 883.3999999999999773 140.7999999999999829 c +885.6999999999999318 143.0999999999999943 887.3999999999999773 145.6999999999999886 888.6999999999999318 148.6999999999999886 c +889.9999999999998863 151.6999999999999886 890.5999999999999091 154.8999999999999773 890.5999999999999091 158.3999999999999773 c +890.5999999999999091 161.8999999999999773 889.9999999999998863 165.0999999999999659 888.6999999999999318 168.0999999999999659 c +887.3999999999999773 171.0999999999999659 885.5999999999999091 173.7999999999999545 883.3999999999999773 175.9999999999999716 c +881.1000000000000227 178.1999999999999602 878.5 179.9999999999999716 875.3999999999999773 181.2999999999999829 c +872.2999999999999545 182.5999999999999943 869. 183.1999999999999886 865.5 183.1999999999999886 c +862. 183.1999999999999886 858.7000000000000455 182.5999999999999943 855.6000000000000227 181.2999999999999829 c +852.5 179.9999999999999716 849.8999999999999773 178.1999999999999886 847.6000000000000227 175.9999999999999716 c +845.3000000000000682 173.7999999999999829 843.6000000000000227 171.0999999999999659 842.3000000000000682 168.0999999999999659 c +841.1000000000000227 165.0999999999999659 840.4000000000000909 161.8999999999999773 840.4000000000000909 158.3999999999999773 c +h +850.0000000000001137 158.3999999999999773 m +850.0000000000001137 160.7999999999999829 850.4000000000000909 162.9999999999999716 851.1000000000001364 164.9999999999999716 c +851.8000000000001819 166.9999999999999716 852.9000000000000909 168.7999999999999829 854.2000000000001592 170.1999999999999602 c +855.5000000000001137 171.5999999999999659 857.2000000000001592 172.7999999999999545 859.1000000000001364 173.5999999999999659 c +861.0000000000001137 174.3999999999999773 863.2000000000001592 174.7999999999999545 865.6000000000001364 174.7999999999999545 c +868.0000000000001137 174.7999999999999545 870.2000000000001592 174.3999999999999488 872.1000000000001364 173.5999999999999659 c +874.0000000000001137 172.7999999999999545 875.7000000000001592 171.5999999999999659 877.0000000000001137 170.1999999999999602 c +878.3000000000000682 168.7999999999999545 879.4000000000000909 166.9999999999999716 880.1000000000001364 164.9999999999999716 c +880.8000000000001819 162.9999999999999716 881.2000000000001592 160.7999999999999829 881.2000000000001592 158.3999999999999773 c +881.2000000000001592 155.9999999999999716 880.8000000000001819 153.7999999999999829 880.1000000000001364 151.7999999999999829 c +879.4000000000000909 149.7999999999999829 878.3000000000001819 147.9999999999999716 877.0000000000001137 146.5999999999999943 c +875.7000000000001592 145.1999999999999886 874.0000000000001137 144. 872.1000000000001364 143.1999999999999886 c +870.2000000000001592 142.3999999999999773 868.0000000000001137 142. 865.6000000000001364 142. c +863.2000000000001592 142. 861.0000000000001137 142.4000000000000057 859.1000000000001364 143.1999999999999886 c +857.2000000000001592 144. 855.5000000000001137 145.1999999999999886 854.2000000000001592 146.5999999999999943 c +852.9000000000002046 148. 851.8000000000001819 149.7999999999999829 851.1000000000001364 151.7999999999999829 c +850.4000000000000909 153.7999999999999829 850.0000000000001137 155.9999999999999716 850.0000000000001137 158.3999999999999773 c +h +f +Q +Q +Q +Q +Q +q +1. 0. 0. -1. 0. 1080. cm +q +1. 0. 0. 1. 232.0677669841863917 50. cm +1. w +0. g +q +1. 0. 0. 1. 0. 0. cm +0. 0. 1455.8644660316272166 980. re +W +n +q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +232.51666259765625 23.5 104.4110184362378959 96.0922027717202241 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 232.51666259765625 23.5 cm +8. 26. m +39.705509218118948 26. l +46.3721758847856123 26. 49.705509218118948 29.3333333333333357 49.705509218118948 36. c +49.705509218118948 60.0922027717202241 l +49.705509218118948 66.7588694383868955 53.0388425514522837 70.0922027717202241 59.705509218118948 70.0922027717202241 c +91.4110184362378959 70.0922027717202241 l +59.705509218118948 70.0922027717202241 l +53.0388425514522837 70.0922027717202241 49.705509218118948 66.7588694383868955 49.705509218118948 60.0922027717202241 c +49.705509218118948 36. l +49.705509218118948 29.3333333333333357 46.3721758847856123 26. 39.705509218118948 26. c +8. 26. l +8. 26. l +18. 22. m +18. 30. l +91.4110184362378959 66.0922027717202241 m +81.4110184362378959 70.0922027717202241 l +91.4110184362378959 74.0922027717202241 l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 243.51666259765625 46.5 Tm +<0014> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 313.2110143354383354 90.5922027717202241 Tm +<000d> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +1014.0520844411042845 113.6010163000074158 145.9736737784693332 200.6454232167389762 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 1014.0520844411042845 113.6010163000074158 cm +8. 26. m +132.9736737784693332 26. l +139.6403404451359904 26. 142.9736737784693332 29.3333333333333357 142.9736737784693332 36. c +142.9736737784693332 164.6454232167389762 l +142.9736737784693332 171.3120898834056334 139.6403404451359904 174.6454232167389762 132.9736737784693332 174.6454232167389762 c +122.9736737784693332 174.6454232167389762 l +132.9736737784693332 174.6454232167389762 l +139.6403404451359904 174.6454232167389762 142.9736737784693332 171.3120898834056334 142.9736737784693332 164.6454232167389762 c +142.9736737784693332 36. l +142.9736737784693332 29.3333333333333357 139.6403404451359904 26. 132.9736737784693332 26. c +8. 26. l +8. 26. l +h +8. 22. m +18. 26. l +8. 30. l +132.9736737784693332 170.6454232167389762 m +132.9736737784693332 178.6454232167389762 l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 1025.0520844411043981 136.6010163000074158 Tm +<000d> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 1140.0257582195736177 285.2464395167463636 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +556.4443436315503959 34.5922027717202241 246.8410782118976385 98.0088135282871917 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 556.4443436315503959 34.5922027717202241 cm +8. 26. m +110.9205391059488193 26. l +117.5872057726154907 26. 120.9205391059488193 29.3333333333333357 120.9205391059488193 36. c +120.9205391059488193 62.0088135282871917 l +120.9205391059488193 68.6754801949538631 124.2538724392821479 72.0088135282871917 130.9205391059488193 72.0088135282871917 c +233.8410782118976385 72.0088135282871917 l +130.9205391059488193 72.0088135282871917 l +124.2538724392821479 72.0088135282871917 120.9205391059488193 68.6754801949538631 120.9205391059488193 62.0088135282871917 c +120.9205391059488193 36. l +120.9205391059488193 29.3333333333333357 117.5872057726154907 26. 110.9205391059488193 26. c +8. 26. l +8. 26. l +18. 22. m +18. 30. l +233.8410782118976385 68.0088135282871917 m +223.8410782118976385 72.0088135282871917 l +233.8410782118976385 76.0088135282871917 l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 779.5687551449922239 103.6010163000074158 Tm +<000d> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +556.4443436315503959 34.5922027717202241 350.8980802374372843 477.6542367450261963 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 556.4443436315503959 34.5922027717202241 cm +8. 26. m +162.9490401187186421 26. l +169.6157067853852993 26. 172.9490401187186421 29.3333333333333357 172.9490401187186421 36. c +172.9490401187186421 441.6542367450261963 l +172.9490401187186421 448.3209034116928819 176.2823734520519849 451.6542367450261963 182.9490401187186421 451.6542367450261963 c +337.8980802374372843 451.6542367450261963 l +182.9490401187186421 451.6542367450261963 l +176.2823734520519849 451.6542367450261963 172.9490401187186421 448.3209034116928819 172.9490401187186421 441.6542367450261963 c +172.9490401187186421 36. l +172.9490401187186421 29.3333333333333357 169.6157067853852993 26. 162.9490401187186421 26. c +8. 26. l +8. 26. l +18. 22. m +18. 30. l +327.8980802374372843 447.6542367450261963 m +327.8980802374372843 455.6542367450261963 l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 883.3424238689876802 483.2464395167464204 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +556.4443436315503959 34.5922027717202241 350.8980802374372843 510.6542367450261963 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 556.4443436315503959 34.5922027717202241 cm +8. 26. m +162.9490401187186421 26. l +169.6157067853852993 26. 172.9490401187186421 29.3333333333333357 172.9490401187186421 36. c +172.9490401187186421 474.6542367450261963 l +172.9490401187186421 481.3209034116928819 176.2823734520519849 484.6542367450261963 182.9490401187186421 484.6542367450261963 c +337.8980802374372843 484.6542367450261963 l +182.9490401187186421 484.6542367450261963 l +176.2823734520519849 484.6542367450261963 172.9490401187186421 481.3209034116928819 172.9490401187186421 474.6542367450261963 c +172.9490401187186421 36. l +172.9490401187186421 29.3333333333333357 169.6157067853852993 26. 162.9490401187186421 26. c +8. 26. l +8. 26. l +18. 22. m +18. 30. l +327.8980802374372843 480.6542367450261963 m +327.8980802374372843 488.6542367450261963 l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 883.3424238689876802 516.2464395167464772 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +287.8176262936349303 34.5922027717202241 299.6267173379154656 358.2833900063725423 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 287.8176262936349303 34.5922027717202241 cm +8. 332.2833900063725423 m +286.6267173379154656 332.2833900063725423 l +293.2933840045821512 332.2833900063725423 296.6267173379154656 328.9500566730392279 296.6267173379154656 322.2833900063725423 c +296.6267173379154656 36. l +296.6267173379154656 29.3333333333333357 293.2933840045821512 26. 286.6267173379154656 26. c +276.6267173379154656 26. l +286.6267173379154656 26. l +293.2933840045821512 26. 296.6267173379154656 29.3333333333333357 296.6267173379154656 36. c +296.6267173379154656 322.2833900063725423 l +296.6267173379154656 328.9500566730392279 293.2933840045821512 332.2833900063725423 286.6267173379154656 332.2833900063725423 c +8. 332.2833900063725423 l +8. 332.2833900063725423 l +h +8. 328.2833900063725423 m +18. 332.2833900063725423 l +8. 336.2833900063725423 l +286.6267173379154656 22. m +286.6267173379154656 30. l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 363.8755927780927664 Tm +<000d> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +287.8176262936349303 34.5922027717202241 299.6267173379154656 391.2833900063725423 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 287.8176262936349303 34.5922027717202241 cm +8. 365.2833900063725423 m +286.6267173379154656 365.2833900063725423 l +293.2933840045821512 365.2833900063725423 296.6267173379154656 361.9500566730392279 296.6267173379154656 355.2833900063725423 c +296.6267173379154656 36. l +296.6267173379154656 29.3333333333333357 293.2933840045821512 26. 286.6267173379154656 26. c +276.6267173379154656 26. l +286.6267173379154656 26. l +293.2933840045821512 26. 296.6267173379154656 29.3333333333333357 296.6267173379154656 36. c +296.6267173379154656 355.2833900063725423 l +296.6267173379154656 361.9500566730392279 293.2933840045821512 365.2833900063725423 286.6267173379154656 365.2833900063725423 c +8. 365.2833900063725423 l +8. 365.2833900063725423 l +h +8. 361.2833900063725423 m +18. 365.2833900063725423 l +8. 369.2833900063725423 l +286.6267173379154656 22. m +286.6267173379154656 30. l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 396.8755927780927664 Tm +<000d> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +287.8176262936349303 262.2464395167463636 619.5247975753527498 196.6291532613463744 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 287.8176262936349303 262.2464395167463636 cm +8. 170.6291532613463744 m +297.2623987876763749 170.6291532613463744 l +303.9290654543430605 170.6291532613463744 307.2623987876763749 167.2958199280130316 307.2623987876763749 160.6291532613463744 c +307.2623987876763749 36. l +307.2623987876763749 29.3333333333333357 310.5957321210096893 26. 317.2623987876763749 26. c +606.5247975753527498 26. l +317.2623987876763749 26. l +310.5957321210096893 26. 307.2623987876763749 29.3333333333333357 307.2623987876763749 36. c +307.2623987876763749 160.6291532613463744 l +307.2623987876763749 167.2958199280130316 303.9290654543430605 170.6291532613463744 297.2623987876763749 170.6291532613463744 c +8. 170.6291532613463744 l +8. 170.6291532613463744 l +8. 166.6291532613463744 m +18. 170.6291532613463744 l +8. 174.6291532613463744 l +596.5247975753527498 22. m +596.5247975753527498 30. l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 429.8755927780927095 Tm +<000d> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 883.3424238689876802 285.2464395167463636 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +287.8176262936349303 262.2464395167463636 619.5247975753527498 229.6291532613463744 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 287.8176262936349303 262.2464395167463636 cm +8. 203.6291532613463744 m +297.2623987876763749 203.6291532613463744 l +303.9290654543430605 203.6291532613463744 307.2623987876763749 200.2958199280130316 307.2623987876763749 193.6291532613463744 c +307.2623987876763749 36. l +307.2623987876763749 29.3333333333333357 310.5957321210096893 26. 317.2623987876763749 26. c +606.5247975753527498 26. l +317.2623987876763749 26. l +310.5957321210096893 26. 307.2623987876763749 29.3333333333333357 307.2623987876763749 36. c +307.2623987876763749 193.6291532613463744 l +307.2623987876763749 200.2958199280130316 303.9290654543430605 203.6291532613463744 297.2623987876763749 203.6291532613463744 c +8. 203.6291532613463744 l +8. 203.6291532613463744 l +8. 199.6291532613463744 m +18. 203.6291532613463744 l +8. 207.6291532613463744 l +596.5247975753527498 22. m +596.5247975753527498 30. l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 462.8755927780927095 Tm +<000d> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 883.3424238689876802 285.2464395167463636 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +287.8176262936349303 274.8755927780927664 109.9979643482275833 314.1179648059908232 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 287.8176262936349303 274.8755927780927664 cm +8. 26. m +42.4989821741137916 26. l +49.1656488407804559 26. 52.4989821741137916 29.3333333333333357 52.4989821741137916 36. c +52.4989821741137916 278.1179648059908232 l +52.4989821741137916 284.7846314726575088 55.8323155074471273 288.1179648059908232 62.4989821741137916 288.1179648059908232 c +96.9979643482275833 288.1179648059908232 l +62.4989821741137916 288.1179648059908232 l +55.8323155074471273 288.1179648059908232 52.4989821741137916 284.7846314726575088 52.4989821741137916 278.1179648059908232 c +52.4989821741137916 36. l +52.4989821741137916 29.3333333333333357 49.1656488407804559 26. 42.4989821741137916 26. c +8. 26. l +8. 26. l +18. 22. m +18. 30. l +86.9979643482275833 284.1179648059908232 m +86.9979643482275833 292.1179648059908232 l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 298.8176262936349303 297.8755927780927664 Tm +<0014> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 373.8155906418625136 559.9935575840836464 Tm +<0014> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +556.4443436315503959 34.5922027717202241 165.4379126597261802 653.4013548123633655 re +W +n +q +q +2. w +0.38 0.61 0.8 RG +1. 0. 0. 1. 556.4443436315503959 34.5922027717202241 cm +8. 26. m +152.4379126597261802 26. l +159.1045793263928374 26. 162.4379126597261802 29.3333333333333357 162.4379126597261802 36. c +162.4379126597261802 617.4013548123633655 l +162.4379126597261802 624.0680214790299942 159.1045793263928374 627.4013548123633655 152.4379126597261802 627.4013548123633655 c +142.4379126597261802 627.4013548123633655 l +152.4379126597261802 627.4013548123633655 l +159.1045793263928374 627.4013548123633655 162.4379126597261802 624.0680214790299942 162.4379126597261802 617.4013548123633655 c +162.4379126597261802 36. l +162.4379126597261802 29.3333333333333357 159.1045793263928374 26. 152.4379126597261802 26. c +8. 26. l +8. 26. l +h +18. 22. m +18. 30. l +142.4379126597261802 623.4013548123633655 m +152.4379126597261802 627.4013548123633655 l +142.4379126597261802 631.4013548123633655 l +S +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 567.4443436315503959 57.5922027717202241 Tm +<0014> Tj +ET +Q +Q +q +q +BT +/F15 14 Tf +16.0999999999999979 TL +0. g +1. 0. 0. -1. 701.8822562912765761 658.9935575840836464 Tm +<000d> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 11.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 323.9276810338941459 11.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 333.9276810338941459 30.8422027717202241 Tm +<00440046004600520058005100570056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 44.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 323.9276810338941459 44.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 63.8422027717202241 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 51.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 51.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 51.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 488.027675693317974 63.8422027717202241 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 77.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 323.9276810338941459 77.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 96.8422027717202241 Tm +<00580056004800550042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 516.027675693317974 96.8422027717202241 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 110.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 110.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 129.8422027717202241 Tm +<0044004600460052005800510057004200510055> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 117.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 117.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 117.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 488.027675693317974 129.8422027717202241 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 143.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 143.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 162.8422027717202241 Tm +<005300580045004e0048005c> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 150.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 150.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 150.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 465.6610108068433647 162.8422027717202241 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 176.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 176.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 195.8422027717202241 Tm +<0057005c00530048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 183.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 183.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 183.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 473.0610085180250053 195.8422027717202241 Tm +<0057004c0051005c004c00510057000b0016000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 209.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 209.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 228.8422027717202241 Tm +<0046005500480044005700480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 530.4443436315503959 216.0922027717202241 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 216.0922027717202241 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 530.4443436315503959 216.0922027717202241 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 472.0943451574293022 228.8422027717202241 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +323.9276810338941459 242.0922027717202241 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 323.9276810338941459 242.0922027717202241 cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 333.9276810338941459 261.8422027717202241 Tm +<0046005200510049004c0055005000480047004200440057> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 500.0943451574293022 261.8422027717202241 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 24.1010163000074229 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 790.2854218434480345 24.1010163000074229 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 800.2854218434480345 43.8510163000074229 Tm +<004400460046005200580051005700560042004600520050005000580051004c0057004c00480056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 57.1010163000074229 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 790.2854218434480345 57.1010163000074229 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 76.8510163000074158 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 988.0520844411042845 64.1010163000074158 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 64.1010163000074158 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 64.1010163000074158 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 945.6354165028718626 76.8510163000074158 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 90.1010163000074158 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 790.2854218434480345 90.1010163000074158 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 109.8510163000074158 Tm +<00440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 988.0520844411042845 97.1010163000074158 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 97.1010163000074158 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 97.1010163000074158 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 945.6354165028718626 109.8510163000074158 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 123.1010163000074158 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 790.2854218434480345 123.1010163000074158 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 142.8510163000074158 Tm +<004600520050005000580051004c0057005c0042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 988.0520844411042845 130.1010163000074158 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 130.1010163000074158 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 130.1010163000074158 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 945.6354165028718626 142.8510163000074158 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 156.1010163000074158 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 790.2854218434480345 156.1010163000074158 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 175.8510163000074158 Tm +<00590044004f004c004700420049005500520050> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 988.0520844411042845 163.1010163000074158 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 163.1010163000074158 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 988.0520844411042845 163.1010163000074158 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 929.7020859669831907 175.8510163000074158 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +790.2854218434480345 189.1010163000074158 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 790.2854218434480345 189.1010163000074158 cm +0. 0. m +231.76666259765625 0. l +231.76666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 800.2854218434480345 208.8510163000074158 Tm +<00590044004f004c0047004200570052> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 957.7020859669831907 208.8510163000074158 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 238.746439516746392 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 894.3424238689876802 238.746439516746392 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 904.3424238689876802 258.4964395167463636 Tm +<004600520050005000580051004c0057004c00480056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 271.7464395167463636 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 894.3424238689876802 271.7464395167463636 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 291.4964395167463636 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 278.7464395167463636 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 278.7464395167463636 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 278.7464395167463636 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1060.6090902813411958 291.4964395167463636 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 304.7464395167463636 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 304.7464395167463636 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 324.4964395167463636 Tm +<004c0052005700440042005700520053004c0046> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 311.7464395167463636 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 311.7464395167463636 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 311.7464395167463636 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1023.2924284466243989 324.4964395167463636 Tm +<0059004400550046004b00440055000b001500180018000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 337.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 337.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 357.4964395167464204 Tm +<005300580045004e0048005c> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 344.7464395167464204 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 344.7464395167464204 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 344.7464395167464204 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1038.2424253948665864 357.4964395167464204 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 370.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 370.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 390.4964395167464204 Tm +<00530055004c0059004e0048005c> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1066.2424253948665864 390.4964395167464204 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 403.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 403.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 423.4964395167464204 Tm +<0046004b0044004c00510046005200470048> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1066.2424253948665864 423.4964395167464204 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 436.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 436.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 456.4964395167464204 Tm +<0049005200550048004c004a0051> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 443.7464395167464204 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 443.7464395167464204 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 443.7464395167464204 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1045.6424231060482271 456.4964395167464204 Tm +<0057004c0051005c004c00510057000b0017000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 469.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 894.3424238689876802 469.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 489.4964395167464204 Tm +<004a0050005a004200440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1088.6090902813411958 489.4964395167464204 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 502.7464395167464204 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 894.3424238689876802 502.7464395167464204 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 522.4964395167464772 Tm +<004400580049004200440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1088.6090902813411958 522.4964395167464772 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 535.7464395167464772 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 535.7464395167464772 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 555.4964395167464772 Tm +<0046005500480044005700480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 1103.0257582195736177 542.7464395167464772 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 542.7464395167464772 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 1103.0257582195736177 542.7464395167464772 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1044.6757597454525239 555.4964395167464772 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +894.3424238689876802 568.7464395167464772 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 894.3424238689876802 568.7464395167464772 cm +0. 0. m +242.6833343505859375 0. l +242.6833343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 904.3424238689876802 588.4964395167464772 Tm +<0046005200510049004c0055005000480047004200440057> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 1072.6757597454525239 588.4964395167464772 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 480.4935575840835895 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 384.8155906418625136 480.4935575840835895 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 394.8155906418625136 500.2435575840835895 Tm +<0046005200510049004c0055005000480047004200570055004400510056004400460057004c005200510056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 513.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 513.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 533.2435575840836464 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 520.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 520.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 520.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 604.1655891159836074 533.2435575840836464 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 546.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 384.8155906418625136 546.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 566.2435575840836464 Tm +<00570055004400510056004400460057004c005200510042004700550044004900570042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 553.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 553.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 553.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 604.1655891159836074 566.2435575840836464 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 579.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 579.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 599.2435575840836464 Tm +<00510055> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 586.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 586.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 586.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 604.1655891159836074 599.2435575840836464 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 612.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 612.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 632.2435575840836464 Tm +<0055005800510051004c0051004a0042004b00440056004b> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 619.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 619.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 619.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 600.0989234665695449 632.2435575840836464 Tm +<0045004c005100440055005c000b0017001b000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 645.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 384.8155906418625136 645.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 665.2435575840836464 Tm +<00440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 652.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 652.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 652.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 622.4655883530441542 665.2435575840836464 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 678.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 678.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 698.2435575840836464 Tm +<0044004600460052005800510057004200450044004f0044005100460048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 685.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 685.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 685.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 572.8155906418625136 698.2435575840836464 Tm +<004700480046004c00500044004f000b00170013000f00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 711.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 711.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 731.2435575840836464 Tm +<004c00520057004400420050004c004f004800560057005200510048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 718.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 718.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 718.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 604.1655891159836074 731.2435575840836464 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +384.8155906418625136 744.4935575840836464 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 384.8155906418625136 744.4935575840836464 cm +0. 0. m +314.0666656494140625 0. l +314.0666656494140625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 394.8155906418625136 764.2435575840836464 Tm +<0046005200510049004c0055005000480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 664.8822562912765761 751.4935575840836464 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 751.4935575840836464 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 664.8822562912765761 751.4935575840836464 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 606.5322578171554824 764.2435575840836464 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 251.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 13.8842919430489928 251.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 23.8842919430489928 271.1255927780927664 Tm +<00570055004400510056004400460057004c005200510042004700550044004900570056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 284.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 13.8842919430489928 284.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 304.1255927780927664 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 291.3755927780927664 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 291.3755927780927664 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 291.3755927780927664 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 201.1009591183419616 304.1255927780927664 Tm +<0045004c004a004c00510057000b00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 317.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 317.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 337.1255927780927664 Tm +<004c005200570044004200500048005600560044004a00480042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 225.0342934689278991 337.1255927780927664 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 350.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 13.8842919430489928 350.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 370.1255927780927664 Tm +<0056004c004a0051004c0051004a004200440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 357.3755927780927664 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 357.3755927780927664 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 357.3755927780927664 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 219.4009583554025085 370.1255927780927664 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 383.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 13.8842919430489928 383.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 403.1255927780927664 Tm +<005500480046004c0053004c004800510057004200440046004600520058005100570042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 247.4009583554025085 403.1255927780927664 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 416.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 13.8842919430489928 416.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 436.1255927780927664 Tm +<0056004800510047004800550042004600520050005000580051004c0057005c0042004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 423.3755927780927664 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 423.3755927780927664 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 423.3755927780927664 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 219.4009583554025085 436.1255927780927664 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 449.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 13.8842919430489928 449.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 469.1255927780927664 Tm +<005500480046004c0053004c0048005100570042004600520050005000580051004c0057005c0042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 247.4009583554025085 469.1255927780927664 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 482.3755927780927664 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 482.3755927780927664 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 502.1255927780927664 Tm +<004400500052005800510057> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 197.7509606442208678 502.1255927780927664 Tm +<004700480046004c00500044004f000b00170013000f00150013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 515.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 515.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 535.1255927780928232 Tm +<0057005c00530048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 522.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 522.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 522.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 204.4342911801095397 535.1255927780928232 Tm +<0057004c0051005c004c00510057000b0016000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 548.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 548.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 568.1255927780928232 Tm +<0046005500480044005700480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 555.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 555.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 555.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 203.4676278195138366 568.1255927780928232 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 581.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 581.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 601.1255927780928232 Tm +<004500520047005c00420045005c005700480056> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 588.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 588.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 588.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 230.8176262936349303 601.1255927780928232 Tm +<0045004f00520045> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 614.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 614.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 634.1255927780928232 Tm +<0056004c004a005100440057005800550048> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 621.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 621.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 621.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 197.0342934689278991 634.1255927780928232 Tm +<0045004c005100440055005c000b00190017000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +13.8842919430489928 647.3755927780928232 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 13.8842919430489928 647.3755927780928232 cm +0. 0. m +281.9333343505859375 0. l +281.9333343505859375 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 23.8842919430489928 667.1255927780928232 Tm +<0053005500520057005200460052004f00420059004800550056004c00520051> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 261.8176262936349303 654.3755927780928232 cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 654.3755927780928232 cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 261.8176262936349303 654.3755927780928232 cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 219.4009583554025085 667.1255927780928232 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 0. 1455.8644660316272166 980. re +W +n +q +q +0.19 0.41 0.59 rg +1. 0. 0. 1. 0. 0. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F16 13 Tf +14.9499999999999993 TL +1. g +1. 0. 0. -1. 10. 19.75 Tm +<00580056004800550056> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 33. 1455.8644660316272166 980. re +W +n +q +q +0.87 0.93 0.95 rg +1. 0. 0. 1. 0. 33. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 52.75 Tm +<004c0047> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 206.51666259765625 40. cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 40. cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 40. cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 164.0999946594238281 52.75 Tm +<004c00510057000b00140013000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 66. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 66. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 85.75 Tm +<004a005500440047004c004700520042004c0047> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 181.2499961853027344 85.75 Tm +<0046004b00440055000b00160019000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 99. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 99. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 118.75 Tm +<005300580045004e0048005c> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 206.51666259765625 106. cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 106. cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 106. cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 141.7333297729492188 118.75 Tm +<0045004c005100440055005c000b00160015000c> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 132. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 132. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 151.75 Tm +<0046005500480044005700480047004200440057> Tj +ET +Q +Q +q +0.87 g +1. 0. 0. 1. 206.51666259765625 139. cm +2. 0. m +22. 0. l +22. 0. 24. 0. 24. 2. c +24. 14. l +24. 14. 24. 16. 22. 16. c +2. 16. l +2. 16. 0. 16. 0. 14. c +0. 2. l +0. 2. 0. 0. 2. 0. c +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 139. cm +10.8111999999999995 12.5 m +9.6432000000000002 12.5 l +4.8938499999999996 4.9404899999999996 l +4.8461800000000004 4.9404899999999996 l +4.8581000000000003 5.1415899999999999 4.8719999999999999 5.37141 4.8879000000000001 5.6299599999999996 c +4.9037899999999999 5.8844000000000003 4.9157000000000002 6.1573200000000003 4.9236500000000003 6.4486999999999997 c +4.9355700000000002 6.7359799999999996 4.9415300000000002 7.0294100000000004 4.9415300000000002 7.3289999999999997 c +4.9415300000000002 12.5 l +4. 12.5 l +4. 3.5 l +5.1620100000000004 3.5 l +9.8934800000000003 11.0349000000000004 l +9.9352 11.0349000000000004 l +9.9272500000000008 10.8911999999999995 9.9173200000000001 10.6881000000000004 9.9054000000000002 10.4253999999999998 c +9.8934800000000003 10.1586999999999996 9.8815600000000003 9.8734599999999997 9.86965 9.5697700000000001 c +9.8617000000000008 9.2619699999999998 9.8577300000000001 8.9767399999999995 9.8577300000000001 8.7140900000000006 c +9.8577300000000001 3.5 l +10.8111999999999995 3.5 l +10.8111999999999995 12.5 l +h +f +Q +q +0.44 g +1. 0. 0. 1. 206.51666259765625 139. cm +20. 12.5 m +18.8320000000000007 12.5 l +14.0827000000000009 4.9404899999999996 l +14.0350000000000001 4.9404899999999996 l +14.0469000000000008 5.1415899999999999 14.0608000000000004 5.37141 14.0767000000000007 5.6299599999999996 c +14.0925999999999991 5.8844000000000003 14.1044999999999998 6.1573200000000003 14.1125000000000007 6.4486999999999997 c +14.1243999999999996 6.7359799999999996 14.1303999999999998 7.0294100000000004 14.1303999999999998 7.3289999999999997 c +14.1303999999999998 12.5 l +13.1888000000000005 12.5 l +13.1888000000000005 3.5 l +14.3507999999999996 3.5 l +19.0823 11.0349000000000004 l +19.1239999999999988 11.0349000000000004 l +19.1160999999999994 10.8911999999999995 19.1061000000000014 10.6881000000000004 19.0942000000000007 10.4253999999999998 c +19.0823 10.1586999999999996 19.0703999999999994 9.8734599999999997 19.0584999999999987 9.5697700000000001 c +19.0504999999999995 9.2619699999999998 19.0466000000000015 8.9767399999999995 19.0466000000000015 8.7140900000000006 c +19.0466000000000015 3.5 l +20. 3.5 l +20. 12.5 l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 148.1666641235351563 151.75 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +q +1.2550277058210428 0. 0. 1.2550277058210428 0. 2.1120220673033145 cm +0. 165. 1455.8644660316272166 980. re +W +n +q +q +0.95 g +1. 0. 0. 1. 0. 165. cm +0. 0. m +240.51666259765625 0. l +240.51666259765625 33. l +0. 33. l +h +f +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.435 g +1. 0. 0. -1. 10. 184.75 Tm +<0046005200510049004c0055005000480047004200440057> Tj +ET +Q +Q +q +q +BT +/F15 13 Tf +14.9499999999999993 TL +0.6 g +1. 0. 0. -1. 176.1666641235351563 184.75 Tm +<00470044005700480057004c00500048> Tj +ET +Q +Q +Q +Q +Q +Q +Q +Q +endstream +endobj +1 0 obj +<> +endobj +7 0 obj +<< +/Length 27404 +/Length1 27404 +>> +stream + +0Epcmap8glyfqlocaF:THhmtxSCW'hhea 8$maxp9 post&90'jnamer` headõjt6OS/2@,j`` ~01ac7Y #(  OP\_?M   " & 0 3 : < D p z  !!!! !"!&!.!^""""""""+"H"`"e%ʧS6<>ADK 12bd7Y#& PQ]`>M   & 0 2 9 < D p t | !!!! !"!&!.![""""""""+"H"`"d%ʧS*8>@CF~ ZHyu`{xYM geb^Qyj h(;,us +N$!WhX_HL|dHI#$t  + 5\78x9:yhidfkegmbR + r+/01473#&RAfA_fA1@"z0x<> + + r/+01#654'3 +Ag`ABagA3w"7<${Y +@  +   /2901%'%7&'ss'YdYE'sSz + /201%#>7m 7A!|(! +IIPHg+  r r+2+201#"&5463232654&#"+6ti_Ԯh>qq?>ss=ݲeQQ @ + + + r r++22/301!#4667'3Ϣ6(W ;UG% -!q1e#@ +r r+233+201!!5>54&#"'>32!#BmNxiUY:Yk\ond|HBp1L,^xtm\.@ $,r r+2+29/39901#"&'532654&&##5326654&#"'6632L\wtZ[dȲcwWNp8TPab[o%+-3_u7FWoy 8%r>Z,l +@ r r++29/333301##!533!4>7#lۢ=1=SS+7YMF"(Y#!#@r r+2+29/3333012#"&'5326654&#"'!!663yrCIbo]>0T8%&x~eu((,4Gn 7Gt0"1@))# r r+2+29/333014>32&&#"3>32#".2654&#"t%X-h"%_0^ `[ipϏkJ숤dR'Pzq٤] + 2Q0hƍwRS~ABtFg).<@+6# r/r+2+29012#"&&54667.546632654&&''">54&HoMO^Xw֐qVTIyGqžL_$\D32#4&#"#U "iKY}z?/(Q":O)T6]h +r +r++201#2#"&546UU);;)+99HH58766785$ @r  +  +r +r++29+0136673##TQlG}(s,f,zsV r +r++01!#3V\'(@$%! r!rr +r+22+++233012#4&#"#4&&#"#33>32366Usq3eMm; !d|F}& 6\2ƅYv;ZH9N(]__]A\@r +r r+233+2+012#4&#"#33>Ȥ} #l\6H:O)r`\ r r+2+201#".546632326654&&#"`FvnIz㝖}FsrFFt&ԒMMԇjj„hs\(%@rr "" rr+233+233++012#"&&'##33>"326654&pˊW^   \>r@=wfC\.N.'n)>22S1X dnŀ&\@ r +rr+233++012&&#"#33>!HBBuX2"`\5cUH=e<gt\*@' r  r+2+2901#"&'532654&&'.54632&&#"tiÇs?Ca3xjiScK8DPs{9~ggQ,iH$!!6\O-EA'(Or['!(LB3B:'&Qs F@ r r+2+233901%267#"&&5#5773!!)Vg1WUBdA_t + =QA{gf8H@ r r +r++233+201#'##"&&53326658 "lLY|z@H9N'T>\AH @ + r +r++29901!336673`4 + 8_HiD22CJ*@")r* +r+2+22901%.'##33>733>73+ ̻Ҭ ʳ~)OI??JQ)H]H@ r r+2+2901336673#"&'5326677$4#&ef/H?">[B<H8g^,2U{eQ /Z>N>>>> +((nt + +j + + " F F ^ ^ Z.~$$0+4fo\R\>hYgSRge\,t]ggAgsgt,v+ +}r!}<&\-29}9}cihcyN3P8Rr^rr~rX4hrqEg 30'P9eCgDyez6dDOgRdmug2%8R=zLCMB%,:!t5 +}rrrr<<<<:9}9}9}9}9}9}yr^r^r^r^r^r^^r~r~r~r~rqrrrrrgrr^r^r^ +}r +}r +}r +}rr:rr~rr~rr~rr~rr~r}X}X}X}X<<<<X1<b +&\44-----i9}r9}r9}rf}pEE}Ecigcigcigcigh h h c3yyNPNPNPr^^9}rcigERERRRlRbRRRvR +)%rN9}<2hC9}Hhy`iao?O<yrYr pYrq4HTpr5rrr[ 1sr1sr)}ci<<&\{+)y rO29} +}h`iAK} ?b.r^vs'~rC" rr)p0'.&%An"~rsrg "7xc3c3c3yRRRF[[A[EAy9 ^fP9PgOgM0r^F&4"p&?Of>%H^e% Jgd%u ggggl>:4VTTT[ 2hr^u?}r.Mr~rR4@'f_cyW @ao <}r }r}3r'~.wR4@'|rm++11,3.t.<8OCK["4z &5yv6}r +}rh)yyY')8H-8H-<q =D<r^r^^r~rx~jx~jOCI9}r<}r<}r ?A4s%3.tV'0'~r(}$p/LfOL4O I }r1)nY r^r^r^r-r^r^r^r^r^r^r^r^r~rr~rr~rr~rr\~Ir~rr~rr~r<w<9}r9}r9}r9}`9}r9}r9}r?}r?}r?}r?}r?}r.M.M.M.M.Myyyrppiuuug0h 9}r9}r~jup))#__kkbff"-r<XWG8LW :)&WWWWG8WWW:W:G8W[rAr^~r1rrrrGpW0rrQrr0r.rzCq/R>1 , >"F6cdrun<YnuO,R(RLRPqqq/R>1 , "F6crunYnuO,R(%a:7[@DWZ""FH(S)L2%>):4#sv3jOW0~szf)L2%>):4#p$*PUC;.{yv8!gbg\H\\_\K\\`\T\B\L\F)L2%>):4#RPP==HHHHHnqt3 4 st_/2t +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a  +bcdefghjikmlnoqprsutvwxzy{}|~    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  +    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  +    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  +    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}NULLCRuni00A0uni00AD overscoreuni00B2uni00B3uni00B5uni00B9AmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflexCdotcdotDcarondcaronDcroatEmacronemacronEbreveebreve +Edotaccent +edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGdotgdotuni0122uni0123 Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflexuni0136uni0137 kgreenlandicLacutelacuteuni013Buni013CLcaronlcaronLdotldotNacutenacuteuni0145uni0146Ncaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracuteuni0156uni0157RcaronrcaronSacutesacute Scircumflex scircumflexuni021Auni021BTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute +Zdotaccent +zdotaccentlongs +Aringacute +aringacuteAEacuteaeacute Oslashacute oslashacuteuni0218uni0219tonos dieresistonos +Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos +OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9 IotadieresisUpsilondieresis +alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhouni03C2sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos +omegatonosuni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Euni045Funi0490uni0491WgravewgraveWacutewacute Wdieresis wdieresisYgraveygraveuni2015 underscoredbl quotereversedminutesecond exclamdbluni207F afii08941pesetaEurouni2105uni2113uni2116uni2126 estimated oneeighth threeeighths fiveeighths seveneighthsuni2206 cyrillicbrevecaroncommaaccentuni0326commaaccentrotateuni2074uni2075uni2077uni2078uni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni02F3OhornohornUhornuhornhookuni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1uni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni20ABcircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCuni0162uni0163uni01EAuni01EBuni01ECuni01EDuni0259 hookabovecombuni1F4Duni1FDEuni2070uni2076uni2079uni03B9030803040300uni03B9030803040301uni03B9030803060300uni03B9030803060301uni03C5030803040300uni03C5030803040301uni03C5030803060300uni03C5030803060301Eng.alt1Eng.alt2Eng.alt3uni030103060308uni030003060308uni030103040308uni030003040308cyrillic_otmarkf_ff_f_if_f_luni1E9EuniA7B3uniA7B4uni013B.loclMAHuni0145.loclMAHAogonek.loclNAVEogonek.loclNAVIogonek.loclNAVUogonek.loclNAVI.saltJ.salt Igrave.salt Iacute.saltIcircumflex.saltIdieresis.salt Itilde.salt Imacron.salt Ibreve.salt Iogonek.saltIogonek_loclNAV.saltIdotaccent.saltIJ.saltJcircumflex.salt uni1EC8.salt uni1ECA.saltIotatonos.salt Iota.saltIotadieresis.salt uni0406.salt uni0407.salt uni0408.salt uni04C0.saltuni0237uniA7B5uniAB53 uni0123.altuni013C.loclMAHuni0146.loclMAHaogonek.loclNAVeogonek.loclNAViogonek.loclNAVuogonek.loclNAVg.saltgcircumflex.salt gbreve.salt gdot.salt florin.ss03uni0431.loclSRB uni04CF.saltuni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3EuniFB40uniFB41uniFB43uniFB44uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4B gravecomb acutecombuni0302 tildecombuni0304uni0306uni0307uni0308uni030Auni030Buni030Cuni030Funi0312 dotbelowcombuni0327uni0328uni0485uni0486uni0483uni0484uni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05C1uni05C2uni05C7 zero.dnomone.dnomtwo.dnom +three.dnom four.dnom five.dnomsix.dnom +seven.dnom +eight.dnom nine.dnomzero.lfone.lftwo.lfthree.lffour.lffive.lfsix.lfseven.lfeight.lfnine.lf zero.numrone.numrtwo.numr +three.numr four.numr five.numrsix.numr +seven.numr +eight.numr nine.numrzero.osfone.osftwo.osf three.osffour.osffive.osfsix.osf seven.osf eight.osfnine.osf +zero.slash zero.tosfone.tosftwo.tosf +three.tosf four.tosf five.tosfsix.tosf +seven.tosf +eight.tosf nine.tosfuni2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni05BEuni207Duni208Duni207Euni208Euni207Auni207Cuni208Auni208Cuni2215uni20AAuni2120afii10103dotlessafii10105dotless commaaccent2iogonekdotlessuni1ECBdotless,    6 " $  > ^ * (, +BT > < " 42 f    +  +        +"  $ +  .  &J &p * , $ . 8> <v > 6 @& f x        +Copyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans)Open SansRegular3.000;GOOG;OpenSans-RegularOpen Sans RegularVersion 3.000OpenSans-RegularOpen Sans is a trademark of Google and may be registered in certain jurisdictions.Monotype Imaging Inc.Monotype Design TeamDesigned by Monotype design team.http://www.google.com/get/noto/http://www.monotype.com/studioThis Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFLhttp://scripts.sil.org/OFLOpenSansRomanWeightWidthLightSemiBoldBoldExtraBoldCondensed LightCondensed RegularCondensed SemiBoldCondensed BoldCondensed ExtraBoldOpenSansRoman-LightOpenSansRoman-RegularOpenSansRoman-SemiBoldOpenSansRoman-BoldOpenSansRoman-ExtraBoldOpenSansRoman-CondensedLightOpenSansRoman-CondensedRegularOpenSansRoman-CondensedSemiBoldOpenSansRoman-CondensedBoldOpenSansRoman-CondensedExtraBoldCondensedSemiCondensedNormalMediumItalicRomanB9_< w&Q b332@ (GOOGH  +endstream +endobj +8 0 obj +<< +/Length 784 +/Length1 784 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo << + /Registry (Adobe) + /Ordering (UCS) + /Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +35 beginbfchar +<000b><0028> +<000c><0029> +<000d><002a> +<000f><002c> +<0013><0030> +<0014><0031> +<0015><0032> +<0016><0033> +<0017><0034> +<0018><0035> +<0019><0036> +<001b><0038> +<0042><005f> +<0044><0061> +<0045><0062> +<0046><0063> +<0047><0064> +<0048><0065> +<0049><0066> +<004a><0067> +<004b><0068> +<004c><0069> +<004e><006b> +<004f><006c> +<0050><006d> +<0051><006e> +<0052><006f> +<0053><0070> +<0055><0072> +<0056><0073> +<0057><0074> +<0058><0075> +<0059><0076> +<005a><0077> +<005c><0079> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +9 0 obj +<< +/Type /FontDescriptor +/FontName /Open#20Sans +/FontFile2 7 0 R +/FontBBox [-549 -272 1201 1048] +/Flags 32 +/StemV 0 +/ItalicAngle 0 +/Ascent 1069 +/Descent -293 +/CapHeight 1462 +>> +endobj +10 0 obj +<< +/Type /Font +/BaseFont /Open#20Sans +/FontDescriptor 9 0 R +/W [20 [571] 13 [550] 76 [252] 71 [611] 81 [613] 87 [356] 11 [294] 19 [571] 12 [294] 88 [613] 86 [476] 72 [561] 85 [408] 66 [437] 68 [555] 70 [479] 82 [601] 83 [611] 69 [611] 78 [525] 92 [500] 22 [571] 21 [571] 80 [925] 73 [336] 89 [499] 79 [252] 75 [613] 24 [571] 74 [542] 23 [571] 90 [774] 27 [571] 15 [258] 25 [571]] +/CIDToGIDMap /Identity +/DW 1000 +/Subtype /CIDFontType2 +/CIDSystemInfo +<< +/Supplement 0 +/Registry (Adobe) +/Ordering (Identity-H) +>> +>> +endobj +11 0 obj +<< +/Type /Font +/Subtype /Type0 +/ToUnicode 8 0 R +/BaseFont /Open#20Sans +/Encoding /Identity-H +/DescendantFonts [10 0 R] +>> +endobj +12 0 obj +<< +/Length 24748 +/Length1 24748 +>> +stream + +0Epcmap8glyfk:jVlocaJT +hmtx hhea) .$maxp. post&.'jnamecHoVP head%`6OS/2l `L`` ~01ac7Y #(  OP\_?M   " & 0 3 : < D p z  !!!! !"!&!.!^""""""""+"H"`"e%ʧS6<>ADK 12bd7Y#& PQ]`>M   & 0 2 9 < D p t | !!!! !"!&!.![""""""""+"H"`"d%ʧS*8>@CF~ ZHyu`{xYM geb^Qyj h(;,us +N$!WhX_HL|dHI#$t  + 5\78x9:yhidfkegmbNH/301A!5!NRV;u(#@%%  r +rr+2++9/33301A2#'##"&&5467754&#"'663265j;0d]cZ\RQNeYvsRBbuPj48jL_FFyz-%KqoG3.,'\q$%@ +rr +r r+233+233++01E"323&&5!#'#726754&#"PzY +2; Wx}gders%',J. }Bf.K,!\bs@   rr+2+29/301A2!3267#"$&546"!.mz/k^SYu /]sw⣔,,)&|rzDj>)u@r r +r++2+23901A!!#57546632&&#"! +ϨayY.N#R5@;yyRRA M32366RVyf$J:Ua))"g|@{.2s'xzPl6Uw^:H"PTVNs@r +r r+233+2+01A2!4&#"!33>W]f)$ks'xz^:H"\s r r+2+201A#".54632326654&&#"K~vőO0fRQe//fRym1ؕLL،nLLnoJws@ r +rr+233++01A2&&#"!33>=7;oX3-!csCmO^9_9\s*@' r  r+2+2901A#"&'532654&&'.54632&&#"kԞuU[OYMfmiAhd\SLCD#eb_LLrQ#)55+-9.,Z{_*.$.$%*3('U}/7L@ r r+2+233901e267#"&&5#5773!!w2_/1Vd[X9IAf@?^@ r r +r++233+201A#'##"&&5!32665)$lFxc1V^]j+^9H"UsxzUw$$4N +VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVJu+-X5?R!R=\?XH?=HuNJyNN#dH7HBHuH?XXX-f`w{dwhP^w^wHh^) 3V1N 3/JRV\\\)Bqq}qB\\\y/B +7'h'RXJuRqhjd/RX=dmPX/;RH=qHu\9R--Z7w{{{{/^w^w^w^w^w^w    VVVVVVVV\\\\\qqqq\B\\\\\X\BBBBVVVw\w\w\w\\/1\{\{\{\{\{\wwwwBBqqqq\Lhq}PqqqqBBB)B^w\^w\^w\w\HHHZh^\h^Nh^\h^P)y/)y/)y/ B B B B B B171717VVV^w\h^\RRJRRRR9RR!RHuf +B`}D9{1^wP3R^wN)\VmJ7-\qNBB)-\H\qN\B\BH\\y\9\N))V\mB)\)m{q)}jwh^hq)`N`} +{/^`^ww)N\V?m?NHRV\P\qN)L\7\m/\ +?{J\B1\\qqq}B`RRRJH@@!{!qbu +??m^1^RRu +wjh#R#B\?))9/#J7f7;`;;D9 )Xd%qLXXXXXh^TN T;-VHTTTq}) 3VXwo\{\+'bLf +7o) +)qm^w\ +w X\wo\ww+'jw1\h))Tj/y/;/^qN R``- 7w?\w\)f/ +q)T/om{m?{B9Lm?{JhVVVV{\XX/^qN99^w\^w\^w\NHJNNNm?{}?y/) +V +\\h\b\N9JND{XfwN\)//XqNVVVVVVVVVVV{\{\{\{\{{\{\{\quq^w\^w\^w\^w^w\^w\^w\wo\wo\wo\wo\wo\ B B1\- -11111 +V)y/^w\^w\X)3+BBBB)))) ==VV1)))))`{ B9B8> BBBB9BBmB8B89Bqq}H\q_BV\q\B\\\\# \Bjh9hhhjhJh<B1\fFa+AqpA2PE+B[GAfZIo\\FF\A:+EfGEfEfEfEf1\1\1\fFa+Aq2PE+B[Gfo\\F\A:+EfGq^P}Z Rj<5/-?VAEE)\/; T3;-+m#yDN#fmFb\)\/; T3;-+`?=-hXFHHJ=NC;!hXFN>)\/; T3;-+=LL99HHHHNZ37qq}^q\ + +st_/2t +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a  +bcdefghjikmlnoqprsutvwxzy{}|~    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  +    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  +    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  +    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}NULLCRuni00A0uni00AD overscoreuni00B2uni00B3uni00B5uni00B9AmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflexCdotcdotDcarondcaronDcroatEmacronemacronEbreveebreve +Edotaccent +edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGdotgdotuni0122uni0123 Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflexuni0136uni0137 kgreenlandicLacutelacuteuni013Buni013CLcaronlcaronLdotldotNacutenacuteuni0145uni0146Ncaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracuteuni0156uni0157RcaronrcaronSacutesacute Scircumflex scircumflexuni021Auni021BTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute +Zdotaccent +zdotaccentlongs +Aringacute +aringacuteAEacuteaeacute Oslashacute oslashacuteuni0218uni0219tonos dieresistonos +Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos +OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9 IotadieresisUpsilondieresis +alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhouni03C2sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos +omegatonosuni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Euni045Funi0490uni0491WgravewgraveWacutewacute Wdieresis wdieresisYgraveygraveuni2015 underscoredbl quotereversedminutesecond exclamdbluni207F afii08941pesetaEurouni2105uni2113uni2116uni2126 estimated oneeighth threeeighths fiveeighths seveneighthsuni2206 cyrillicbrevecaroncommaaccentuni0326commaaccentrotateuni2074uni2075uni2077uni2078uni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni02F3OhornohornUhornuhornhookuni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1uni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni20ABcircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCuni0162uni0163uni01EAuni01EBuni01ECuni01EDuni0259 hookabovecombuni1F4Duni1FDEuni2070uni2076uni2079uni03B9030803040300uni03B9030803040301uni03B9030803060300uni03B9030803060301uni03C5030803040300uni03C5030803040301uni03C5030803060300uni03C5030803060301Eng.alt1Eng.alt2Eng.alt3uni030103060308uni030003060308uni030103040308uni030003040308cyrillic_otmarkf_ff_f_if_f_luni1E9EuniA7B3uniA7B4uni013B.loclMAHuni0145.loclMAHAogonek.loclNAVEogonek.loclNAVIogonek.loclNAVUogonek.loclNAVI.saltJ.salt Igrave.salt Iacute.saltIcircumflex.saltIdieresis.salt Itilde.salt Imacron.salt Ibreve.salt Iogonek.saltIogonek_loclNAV.saltIdotaccent.saltIJ.saltJcircumflex.salt uni1EC8.salt uni1ECA.saltIotatonos.salt Iota.saltIotadieresis.salt uni0406.salt uni0407.salt uni0408.salt uni04C0.saltuni0237uniA7B5uniAB53 uni0123.altuni013C.loclMAHuni0146.loclMAHaogonek.loclNAVeogonek.loclNAViogonek.loclNAVuogonek.loclNAVg.saltgcircumflex.salt gbreve.salt gdot.salt florin.ss03uni0431.loclSRB uni04CF.saltuni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3EuniFB40uniFB41uniFB43uniFB44uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4B gravecomb acutecombuni0302 tildecombuni0304uni0306uni0307uni0308uni030Auni030Buni030Cuni030Funi0312 dotbelowcombuni0327uni0328uni0485uni0486uni0483uni0484uni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05C1uni05C2uni05C7 zero.dnomone.dnomtwo.dnom +three.dnom four.dnom five.dnomsix.dnom +seven.dnom +eight.dnom nine.dnomzero.lfone.lftwo.lfthree.lffour.lffive.lfsix.lfseven.lfeight.lfnine.lf zero.numrone.numrtwo.numr +three.numr four.numr five.numrsix.numr +seven.numr +eight.numr nine.numrzero.osfone.osftwo.osf three.osffour.osffive.osfsix.osf seven.osf eight.osfnine.osf +zero.slash zero.tosfone.tosftwo.tosf +three.tosf four.tosf five.tosfsix.tosf +seven.tosf +eight.tosf nine.tosfuni2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni05BEuni207Duni208Duni207Euni208Euni207Auni207Cuni208Auni208Cuni2215uni20AAuni2120afii10103dotlessafii10105dotless commaaccent2iogonekdotlessuni1ECBdotless,    0   h  * (r +B0 > < " 4` F  :  +0  +&        +"  $  v  &P &* * , $ . 8J < > 6 @Z H .  "    +  +RomanItalicMediumNormalSemiCondensedCondensedOpenSansRoman-CondensedExtraBoldOpenSansRoman-CondensedBoldOpenSansRoman-CondensedSemiBoldOpenSansRoman-CondensedRegularOpenSansRoman-CondensedLightOpenSansRoman-ExtraBoldOpenSansRoman-BoldOpenSansRoman-SemiBoldOpenSansRoman-RegularOpenSansRoman-LightCondensed ExtraBoldCondensed BoldCondensed SemiBoldCondensed RegularCondensed LightExtraBoldSemiBoldRegularLightWidthWeightOpenSansRomanhttp://scripts.sil.org/OFLThis Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFLhttp://www.monotype.com/studiohttp://www.google.com/get/noto/Designed by Monotype design team.Monotype Design TeamMonotype Imaging Inc.Open Sans is a trademark of Google and may be registered in certain jurisdictions.OpenSans-BoldVersion 3.000Open Sans Bold3.000;GOOG;OpenSans-BoldBoldOpen SansCopyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans)B=_< w&Q +332@ (GOOGH  +endstream +endobj +13 0 obj +<< +/Length 511 +/Length1 511 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo << + /Registry (Adobe) + /Ordering (UCS) + /Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +14 beginbfchar +<0042><005f> +<0044><0061> +<0046><0063> +<0047><0064> +<0048><0065> +<0049><0066> +<004c><0069> +<0050><006d> +<0051><006e> +<0052><006f> +<0055><0072> +<0056><0073> +<0057><0074> +<0058><0075> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +14 0 obj +<< +/Type /FontDescriptor +/FontName /Open#20Sans +/FontFile2 12 0 R +/FontBBox [-619 -295 1319 1069] +/Flags 32 +/StemV 0 +/ItalicAngle 0 +/Ascent 1069 +/Descent -293 +/CapHeight 1462 +>> +endobj +15 0 obj +<< +/Type /Font +/BaseFont /Open#20Sans +/FontDescriptor 14 0 R +/W [68 [604] 70 [514] 82 [619] 88 [657] 81 [657] 87 [434] 86 [497] 66 [411] 80 [981] 76 [305] 72 [590] 73 [387] 85 [454] 71 [632]] +/CIDToGIDMap /Identity +/DW 1000 +/Subtype /CIDFontType2 +/CIDSystemInfo +<< +/Supplement 0 +/Registry (Adobe) +/Ordering (Identity-H) +>> +>> +endobj +16 0 obj +<< +/Type /Font +/Subtype /Type0 +/ToUnicode 13 0 R +/BaseFont /Open#20Sans +/Encoding /Identity-H +/DescendantFonts [15 0 R] +>> +endobj +17 0 obj +<< +/ca 0. +>> +endobj +2 0 obj +<< +/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << +/F15 11 0 R +/F16 16 0 R +>> +/ExtGState << +/GS1 17 0 R +>> +/XObject << +>> +>> +endobj +18 0 obj +<< +/Producer (jsPDF 2.5.1) +/CreationDate (D:20230823154507+02'00') +>> +endobj +19 0 obj +<< +/Type /Catalog +/Pages 1 0 R +/OpenAction [3 0 R /FitH null] +/PageLayout /OneColumn +>> +endobj +xref +0 20 +0000000000 65535 f +0000335168 00000 n +0000390508 00000 n +0000000015 00000 n +0000000327 00000 n +0000167516 00000 n +0000167828 00000 n +0000335231 00000 n +0000362703 00000 n +0000363551 00000 n +0000363743 00000 n +0000364273 00000 n +0000364411 00000 n +0000389228 00000 n +0000389804 00000 n +0000389998 00000 n +0000390340 00000 n +0000390479 00000 n +0000390655 00000 n +0000390741 00000 n +trailer +<< +/Size 20 +/Root 19 0 R +/Info 18 0 R +/ID [ <8E6AC9DA9FFD57A041EA5452BDA3F604> <8E6AC9DA9FFD57A041EA5452BDA3F604> ] +>> +startxref +390845 +%%EOF \ No newline at end of file diff --git a/docu/Concepts/DLT/img/dlt-diagramm.png b/docu/Concepts/DLT/img/dlt-diagramm.png new file mode 100644 index 000000000..e92fb78c6 Binary files /dev/null and b/docu/Concepts/DLT/img/dlt-diagramm.png differ diff --git a/docu/Concepts/DLT/overview.md b/docu/Concepts/DLT/overview.md new file mode 100644 index 000000000..8a5461434 --- /dev/null +++ b/docu/Concepts/DLT/overview.md @@ -0,0 +1,67 @@ +# DLT-Connector Overview + +What the DLT Connector does roughly. + +- create transaction +- receive transactions from iota +- warmup, load missing transactions from iota on startup + +## create transaction +- called from backend with transaction details + - sender user | signing user (in case of contribution) + - uuid + - account nr | default = 1 + - community uuid + - recipient user + - uuid + - account nr | default = 1 + - community uuid + - amount + - memo + - type + - createdAt +- load or create accounts +- compose protobuf transaction +- derive correct private key for signing account and sign transaction +- validate transaction +- write transaction into transaction_recipes table +- send transaction to iota +- update iota message id in transaction_recipes table +- return to backend with iota message id + + +## receive transactions from iota +- listen on all registered community topics on iota +- make sure we have everything from milestone +- sort per community by iota milestone, createdAt ASC +- per message: + - deserialize to protobuf object + - validate + - if valid: + - calculate running_hash and account_balance + - write into confirmed_transactions + - if invalid: + - write into invalid_transactions + - send request to backend with final transaction data for comparison + - sender user | signing user (in case of contribution) + - uuid + - account nr + - community uuid + - recipient user + - uuid + - account nr + - community uuid + - amount + - memo + - createdAt + - confirmedAt + - type + - iota message id + - balance for createdAt + - decay for createdAt + +## warmup, load missing transactions from iota or Chronicle on startup +- read all iota message ids from all registered topics +- check if already exist +- load details for not existing message ids +- do for every message [receive](#receive-transactions-from-iota) \ No newline at end of file diff --git a/federation/src/config/index.ts b/federation/src/config/index.ts index 29458d006..74a53ed1b 100644 --- a/federation/src/config/index.ts +++ b/federation/src/config/index.ts @@ -1,24 +1,22 @@ // ATTENTION: DO NOT PUT ANY SECRETS IN HERE (or the .env) +import { Decimal } from 'decimal.js-light' import dotenv from 'dotenv' dotenv.config() -/* -import Decimal from 'decimal.js-light' Decimal.set({ precision: 25, rounding: Decimal.ROUND_HALF_UP, }) -*/ const constants = { DB_VERSION: '0071-add-pending_transactions-table', - // DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 + DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 LOG4JS_CONFIG: 'log4js-config.json', // default log level on production should be info LOG_LEVEL: process.env.LOG_LEVEL || 'info', CONFIG_VERSION: { DEFAULT: 'DEFAULT', - EXPECTED: 'v1.2023-01-09', + EXPECTED: 'v2.2023-08-24', CURRENT: '', }, } diff --git a/federation/src/graphql/api/1_0/enum/PendingTransactionState.ts b/federation/src/graphql/api/1_0/enum/PendingTransactionState.ts new file mode 100644 index 000000000..6a614be96 --- /dev/null +++ b/federation/src/graphql/api/1_0/enum/PendingTransactionState.ts @@ -0,0 +1,14 @@ +import { registerEnumType } from 'type-graphql' + +export enum PendingTransactionState { + NEW = 1, + WAIT_ON_PENDING = 2, + PENDING = 3, + WAIT_ON_CONFIRM = 4, + CONFIRMED = 5, +} + +registerEnumType(PendingTransactionState, { + name: 'PendingTransactionState', // this one is mandatory + description: 'State of the PendingTransaction', // this one is optional +}) diff --git a/federation/src/graphql/api/1_0/enum/TransactionTypeId.ts b/federation/src/graphql/api/1_0/enum/TransactionTypeId.ts new file mode 100644 index 000000000..a7e39eebc --- /dev/null +++ b/federation/src/graphql/api/1_0/enum/TransactionTypeId.ts @@ -0,0 +1,15 @@ +import { registerEnumType } from 'type-graphql' + +export enum TransactionTypeId { + CREATION = 1, + SEND = 2, + RECEIVE = 3, + // This is a virtual property, never occurring on the database + DECAY = 4, + LINK_SUMMARY = 5, +} + +registerEnumType(TransactionTypeId, { + name: 'TransactionTypeId', // this one is mandatory + description: 'Type of the transaction', // this one is optional +}) diff --git a/federation/src/graphql/api/1_0/model/Decay.ts b/federation/src/graphql/api/1_0/model/Decay.ts new file mode 100644 index 000000000..0b710c234 --- /dev/null +++ b/federation/src/graphql/api/1_0/model/Decay.ts @@ -0,0 +1,41 @@ +import { Decimal } from 'decimal.js-light' +import { ObjectType, Field, Int } from 'type-graphql' + +interface DecayInterface { + balance: Decimal + decay: Decimal + roundedDecay: Decimal + start: Date | null + end: Date | null + duration: number | null +} + +@ObjectType() +export class Decay { + constructor({ balance, decay, roundedDecay, start, end, duration }: DecayInterface) { + this.balance = balance + this.decay = decay + this.roundedDecay = roundedDecay + this.start = start + this.end = end + this.duration = duration + } + + @Field(() => Decimal) + balance: Decimal + + @Field(() => Decimal) + decay: Decimal + + @Field(() => Decimal) + roundedDecay: Decimal + + @Field(() => Date, { nullable: true }) + start: Date | null + + @Field(() => Date, { nullable: true }) + end: Date | null + + @Field(() => Int, { nullable: true }) + duration: number | null +} diff --git a/federation/src/graphql/api/1_0/model/SendCoinsArgs.ts b/federation/src/graphql/api/1_0/model/SendCoinsArgs.ts new file mode 100644 index 000000000..545aab822 --- /dev/null +++ b/federation/src/graphql/api/1_0/model/SendCoinsArgs.ts @@ -0,0 +1,29 @@ +import { Decimal } from 'decimal.js-light' +import { ArgsType, Field } from 'type-graphql' + +@ArgsType() +export class SendCoinsArgs { + @Field(() => String) + communityReceiverIdentifier: string + + @Field(() => String) + userReceiverIdentifier: string + + @Field(() => String) + creationDate: string + + @Field(() => Decimal) + amount: Decimal + + @Field(() => String) + memo: string + + @Field(() => String) + communitySenderIdentifier: string + + @Field(() => String) + userSenderIdentifier: string + + @Field(() => String) + userSenderName: string +} diff --git a/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.test.ts b/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.test.ts new file mode 100644 index 000000000..7b580b240 --- /dev/null +++ b/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.test.ts @@ -0,0 +1,356 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +import { ApolloServerTestClient } from 'apollo-server-testing' +import { Community as DbCommunity } from '@entity/Community' +import CONFIG from '@/config' +import { User as DbUser } from '@entity/User' +import { fullName } from '@/graphql/util/fullName' +import { GraphQLError } from 'graphql' +import { cleanDB, testEnvironment } from '@test/helpers' +import { logger } from '@test/testSetup' +import { Connection } from '@dbTools/typeorm' + +let mutate: ApolloServerTestClient['mutate'], con: Connection +// let query: ApolloServerTestClient['query'] + +let testEnv: { + mutate: ApolloServerTestClient['mutate'] + query: ApolloServerTestClient['query'] + con: Connection +} + +CONFIG.FEDERATION_API = '1_0' + +beforeAll(async () => { + testEnv = await testEnvironment(logger) + mutate = testEnv.mutate + // query = testEnv.query + con = testEnv.con + + // const server = await createServer() + // con = server.con + // query = createTestClient(server.apollo).query + // mutate = createTestClient(server.apollo).mutate + // DbCommunity.clear() + // DbUser.clear() + await cleanDB() +}) + +afterAll(async () => { + // await cleanDB() + await con.destroy() +}) + +describe('SendCoinsResolver', () => { + const voteForSendCoinsMutation = ` + mutation ( + $communityReceiverIdentifier: String! + $userReceiverIdentifier: String! + $creationDate: String! + $amount: Decimal! + $memo: String! + $communitySenderIdentifier: String! + $userSenderIdentifier: String! + $userSenderName: String! + ) { + voteForSendCoins( + communityReceiverIdentifier: $communityReceiverIdentifier + userReceiverIdentifier: $userReceiverIdentifier + creationDate: $creationDate + amount: $amount + memo: $memo + communitySenderIdentifier: $communitySenderIdentifier + userSenderIdentifier: $userSenderIdentifier + userSenderName: $userSenderName + ) + } +` + const revertSendCoinsMutation = ` + mutation ( + $communityReceiverIdentifier: String! + $userReceiverIdentifier: String! + $creationDate: String! + $amount: Decimal! + $memo: String! + $communitySenderIdentifier: String! + $userSenderIdentifier: String! + $userSenderName: String! + ) { + revertSendCoins( + communityReceiverIdentifier: $communityReceiverIdentifier + userReceiverIdentifier: $userReceiverIdentifier + creationDate: $creationDate + amount: $amount + memo: $memo + communitySenderIdentifier: $communitySenderIdentifier + userSenderIdentifier: $userSenderIdentifier + userSenderName: $userSenderName + ) + } +` + + describe('voteForSendCoins', () => { + let homeCom: DbCommunity + let foreignCom: DbCommunity + let sendUser: DbUser + let recipUser: DbUser + + beforeEach(async () => { + await cleanDB() + homeCom = DbCommunity.create() + homeCom.foreign = false + homeCom.url = 'homeCom-url' + homeCom.name = 'homeCom-Name' + homeCom.description = 'homeCom-Description' + homeCom.creationDate = new Date() + homeCom.publicKey = Buffer.from('homeCom-publicKey') + homeCom.communityUuid = 'homeCom-UUID' + await DbCommunity.insert(homeCom) + + foreignCom = DbCommunity.create() + foreignCom.foreign = true + foreignCom.url = 'foreignCom-url' + foreignCom.name = 'foreignCom-Name' + foreignCom.description = 'foreignCom-Description' + foreignCom.creationDate = new Date() + foreignCom.publicKey = Buffer.from('foreignCom-publicKey') + foreignCom.communityUuid = 'foreignCom-UUID' + await DbCommunity.insert(foreignCom) + + sendUser = DbUser.create() + sendUser.alias = 'sendUser-alias' + sendUser.firstName = 'sendUser-FirstName' + sendUser.gradidoID = 'sendUser-GradidoID' + sendUser.lastName = 'sendUser-LastName' + await DbUser.insert(sendUser) + + recipUser = DbUser.create() + recipUser.alias = 'recipUser-alias' + recipUser.firstName = 'recipUser-FirstName' + recipUser.gradidoID = 'recipUser-GradidoID' + recipUser.lastName = 'recipUser-LastName' + await DbUser.insert(recipUser) + }) + + describe('unknown recipient community', () => { + it('throws an error', async () => { + jest.clearAllMocks() + expect( + await mutate({ + mutation: voteForSendCoinsMutation, + variables: { + communityReceiverIdentifier: 'invalid foreignCom', + userReceiverIdentifier: recipUser.gradidoID, + creationDate: new Date().toISOString(), + amount: 100, + memo: 'X-Com-TX memo', + communitySenderIdentifier: homeCom.communityUuid, + userSenderIdentifier: sendUser.gradidoID, + userSenderName: fullName(sendUser.firstName, sendUser.lastName), + }, + }), + ).toEqual( + expect.objectContaining({ + errors: [new GraphQLError('voteForSendCoins with wrong communityReceiverIdentifier')], + }), + ) + }) + }) + + describe('unknown recipient user', () => { + it('throws an error', async () => { + jest.clearAllMocks() + expect( + await mutate({ + mutation: voteForSendCoinsMutation, + variables: { + communityReceiverIdentifier: foreignCom.communityUuid, + userReceiverIdentifier: 'invalid recipient', + creationDate: new Date().toISOString(), + amount: 100, + memo: 'X-Com-TX memo', + communitySenderIdentifier: homeCom.communityUuid, + userSenderIdentifier: sendUser.gradidoID, + userSenderName: fullName(sendUser.firstName, sendUser.lastName), + }, + }), + ).toEqual( + expect.objectContaining({ + errors: [ + new GraphQLError( + 'voteForSendCoins with unknown userReceiverIdentifier in the community=', + ), + ], + }), + ) + }) + }) + + describe('valid X-Com-TX voted', () => { + it('throws an error', async () => { + jest.clearAllMocks() + expect( + await mutate({ + mutation: voteForSendCoinsMutation, + variables: { + communityReceiverIdentifier: foreignCom.communityUuid, + userReceiverIdentifier: recipUser.gradidoID, + creationDate: new Date().toISOString(), + amount: 100, + memo: 'X-Com-TX memo', + communitySenderIdentifier: homeCom.communityUuid, + userSenderIdentifier: sendUser.gradidoID, + userSenderName: fullName(sendUser.firstName, sendUser.lastName), + }, + }), + ).toEqual( + expect.objectContaining({ + data: { + voteForSendCoins: 'recipUser-FirstName recipUser-LastName', + }, + }), + ) + }) + }) + }) + + describe('revertSendCoins', () => { + let homeCom: DbCommunity + let foreignCom: DbCommunity + let sendUser: DbUser + let recipUser: DbUser + const creationDate = new Date() + + beforeEach(async () => { + await cleanDB() + homeCom = DbCommunity.create() + homeCom.foreign = false + homeCom.url = 'homeCom-url' + homeCom.name = 'homeCom-Name' + homeCom.description = 'homeCom-Description' + homeCom.creationDate = new Date() + homeCom.publicKey = Buffer.from('homeCom-publicKey') + homeCom.communityUuid = 'homeCom-UUID' + await DbCommunity.insert(homeCom) + + foreignCom = DbCommunity.create() + foreignCom.foreign = true + foreignCom.url = 'foreignCom-url' + foreignCom.name = 'foreignCom-Name' + foreignCom.description = 'foreignCom-Description' + foreignCom.creationDate = new Date() + foreignCom.publicKey = Buffer.from('foreignCom-publicKey') + foreignCom.communityUuid = 'foreignCom-UUID' + await DbCommunity.insert(foreignCom) + + sendUser = DbUser.create() + sendUser.alias = 'sendUser-alias' + sendUser.firstName = 'sendUser-FirstName' + sendUser.gradidoID = 'sendUser-GradidoID' + sendUser.lastName = 'sendUser-LastName' + await DbUser.insert(sendUser) + + recipUser = DbUser.create() + recipUser.alias = 'recipUser-alias' + recipUser.firstName = 'recipUser-FirstName' + recipUser.gradidoID = 'recipUser-GradidoID' + recipUser.lastName = 'recipUser-LastName' + await DbUser.insert(recipUser) + + await mutate({ + mutation: voteForSendCoinsMutation, + variables: { + communityReceiverIdentifier: foreignCom.communityUuid, + userReceiverIdentifier: recipUser.gradidoID, + creationDate: creationDate.toISOString(), + amount: 100, + memo: 'X-Com-TX memo', + communitySenderIdentifier: homeCom.communityUuid, + userSenderIdentifier: sendUser.gradidoID, + userSenderName: fullName(sendUser.firstName, sendUser.lastName), + }, + }) + }) + + describe('unknown recipient community', () => { + it('throws an error', async () => { + jest.clearAllMocks() + expect( + await mutate({ + mutation: revertSendCoinsMutation, + variables: { + communityReceiverIdentifier: 'invalid foreignCom', + userReceiverIdentifier: recipUser.gradidoID, + creationDate: creationDate.toISOString(), + amount: 100, + memo: 'X-Com-TX memo', + communitySenderIdentifier: homeCom.communityUuid, + userSenderIdentifier: sendUser.gradidoID, + userSenderName: fullName(sendUser.firstName, sendUser.lastName), + }, + }), + ).toEqual( + expect.objectContaining({ + errors: [new GraphQLError('revertSendCoins with wrong communityReceiverIdentifier')], + }), + ) + }) + }) + + describe('unknown recipient user', () => { + it('throws an error', async () => { + jest.clearAllMocks() + expect( + await mutate({ + mutation: revertSendCoinsMutation, + variables: { + communityReceiverIdentifier: foreignCom.communityUuid, + userReceiverIdentifier: 'invalid recipient', + creationDate: creationDate.toISOString(), + amount: 100, + memo: 'X-Com-TX memo', + communitySenderIdentifier: homeCom.communityUuid, + userSenderIdentifier: sendUser.gradidoID, + userSenderName: fullName(sendUser.firstName, sendUser.lastName), + }, + }), + ).toEqual( + expect.objectContaining({ + errors: [ + new GraphQLError( + 'revertSendCoins with unknown userReceiverIdentifier in the community=', + ), + ], + }), + ) + }) + }) + + describe('valid X-Com-TX reverted', () => { + it('throws an error', async () => { + jest.clearAllMocks() + expect( + await mutate({ + mutation: revertSendCoinsMutation, + variables: { + communityReceiverIdentifier: foreignCom.communityUuid, + userReceiverIdentifier: recipUser.gradidoID, + creationDate: creationDate.toISOString(), + amount: 100, + memo: 'X-Com-TX memo', + communitySenderIdentifier: homeCom.communityUuid, + userSenderIdentifier: sendUser.gradidoID, + userSenderName: fullName(sendUser.firstName, sendUser.lastName), + }, + }), + ).toEqual( + expect.objectContaining({ + data: { + revertSendCoins: true, + }, + }), + ) + }) + }) + }) +}) diff --git a/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts b/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts new file mode 100644 index 000000000..11222a3ce --- /dev/null +++ b/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts @@ -0,0 +1,161 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { Args, Mutation, Resolver } from 'type-graphql' +import { federationLogger as logger } from '@/server/logger' +import { Community as DbCommunity } from '@entity/Community' +import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction' +import { SendCoinsArgs } from '../model/SendCoinsArgs' +import { User as DbUser } from '@entity/User' +import { LogError } from '@/server/LogError' +import { PendingTransactionState } from '../enum/PendingTransactionState' +import { TransactionTypeId } from '../enum/TransactionTypeId' +import { calculateRecipientBalance } from '@/graphql/util/calculateRecipientBalance' +import Decimal from 'decimal.js-light' +import { fullName } from '@/graphql/util/fullName' + +@Resolver() +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export class SendCoinsResolver { + @Mutation(() => String) + async voteForSendCoins( + @Args() + { + communityReceiverIdentifier, + userReceiverIdentifier, + creationDate, + amount, + memo, + communitySenderIdentifier, + userSenderIdentifier, + userSenderName, + }: SendCoinsArgs, + ): Promise { + logger.debug(`voteForSendCoins() via apiVersion=1_0 ...`) + let result: string | null = null + // first check if receiver community is correct + const homeCom = await DbCommunity.findOneBy({ + communityUuid: communityReceiverIdentifier, + }) + if (!homeCom) { + throw new LogError( + `voteForSendCoins with wrong communityReceiverIdentifier`, + communityReceiverIdentifier, + ) + } + // second check if receiver user exists in this community + const receiverUser = await DbUser.findOneBy({ gradidoID: userReceiverIdentifier }) + if (!receiverUser) { + throw new LogError( + `voteForSendCoins with unknown userReceiverIdentifier in the community=`, + homeCom.name, + ) + } + try { + const txDate = new Date(creationDate) + const receiveBalance = await calculateRecipientBalance(receiverUser.id, amount, txDate) + const pendingTx = DbPendingTransaction.create() + pendingTx.amount = amount + pendingTx.balance = receiveBalance ? receiveBalance.balance : new Decimal(0) + pendingTx.balanceDate = txDate + pendingTx.decay = receiveBalance ? receiveBalance.decay.decay : new Decimal(0) + pendingTx.decayStart = receiveBalance ? receiveBalance.decay.start : null + pendingTx.creationDate = new Date() + pendingTx.linkedUserCommunityUuid = communitySenderIdentifier + pendingTx.linkedUserGradidoID = userSenderIdentifier + pendingTx.linkedUserName = userSenderName + pendingTx.memo = memo + pendingTx.previous = receiveBalance ? receiveBalance.lastTransactionId : null + pendingTx.state = PendingTransactionState.NEW + pendingTx.typeId = TransactionTypeId.RECEIVE + pendingTx.userId = receiverUser.id + pendingTx.userCommunityUuid = communityReceiverIdentifier + pendingTx.userGradidoID = userReceiverIdentifier + pendingTx.userName = fullName(receiverUser.firstName, receiverUser.lastName) + + await DbPendingTransaction.insert(pendingTx) + result = pendingTx.userName + logger.debug(`voteForSendCoins()-1_0... successfull`) + } catch (err) { + throw new LogError(`Error in voteForSendCoins: `, err) + } + return result + } + + @Mutation(() => Boolean) + async revertSendCoins( + @Args() + { + communityReceiverIdentifier, + userReceiverIdentifier, + creationDate, + amount, + memo, + communitySenderIdentifier, + userSenderIdentifier, + userSenderName, + }: SendCoinsArgs, + ): Promise { + logger.debug(`revertSendCoins() via apiVersion=1_0 ...`) + // first check if receiver community is correct + const homeCom = await DbCommunity.findOneBy({ + communityUuid: communityReceiverIdentifier, + }) + if (!homeCom) { + throw new LogError( + `revertSendCoins with wrong communityReceiverIdentifier`, + communityReceiverIdentifier, + ) + } + // second check if receiver user exists in this community + const receiverUser = await DbUser.findOneBy({ gradidoID: userReceiverIdentifier }) + if (!receiverUser) { + throw new LogError( + `revertSendCoins with unknown userReceiverIdentifier in the community=`, + homeCom.name, + ) + } + try { + const pendingTx = await DbPendingTransaction.findOneBy({ + userCommunityUuid: communityReceiverIdentifier, + userGradidoID: userReceiverIdentifier, + state: PendingTransactionState.NEW, + typeId: TransactionTypeId.RECEIVE, + balanceDate: new Date(creationDate), + linkedUserCommunityUuid: communitySenderIdentifier, + linkedUserGradidoID: userSenderIdentifier, + }) + logger.debug('XCom: revertSendCoins found pendingTX=', pendingTx) + if (pendingTx && pendingTx.amount.toString() === amount.toString()) { + logger.debug('XCom: revertSendCoins matching pendingTX for remove...') + try { + await pendingTx.remove() + logger.debug('XCom: revertSendCoins pendingTX for remove successfully') + } catch (err) { + throw new LogError('Error in revertSendCoins on removing pendingTx of receiver: ', err) + } + } else { + logger.debug( + 'XCom: revertSendCoins NOT matching pendingTX for remove:', + pendingTx?.amount, + amount, + ) + throw new LogError( + `Can't find in revertSendCoins the pending receiver TX for args=`, + communityReceiverIdentifier, + userReceiverIdentifier, + PendingTransactionState.NEW, + TransactionTypeId.RECEIVE, + creationDate, + amount, + memo, + communitySenderIdentifier, + userSenderIdentifier, + userSenderName, + ) + } + logger.debug(`revertSendCoins()-1_0... successfull`) + return true + } catch (err) { + throw new LogError(`Error in revertSendCoins: `, err) + } + } +} diff --git a/federation/src/graphql/scalar/Decimal.ts.unused b/federation/src/graphql/scalar/Decimal.ts similarity index 74% rename from federation/src/graphql/scalar/Decimal.ts.unused rename to federation/src/graphql/scalar/Decimal.ts index da5a99e0c..96804bdfa 100644 --- a/federation/src/graphql/scalar/Decimal.ts.unused +++ b/federation/src/graphql/scalar/Decimal.ts @@ -1,7 +1,8 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +import { Decimal } from 'decimal.js-light' import { GraphQLScalarType, Kind } from 'graphql' -import Decimal from 'decimal.js-light' -export default new GraphQLScalarType({ +export const DecimalScalar = new GraphQLScalarType({ name: 'Decimal', description: 'The `Decimal` scalar type to represent currency values', diff --git a/federation/src/graphql/schema.ts b/federation/src/graphql/schema.ts index 015ea124f..0951c1000 100644 --- a/federation/src/graphql/schema.ts +++ b/federation/src/graphql/schema.ts @@ -2,15 +2,15 @@ import { GraphQLSchema } from 'graphql' import { buildSchema } from 'type-graphql' // import isAuthorized from './directive/isAuthorized' -// import DecimalScalar from './scalar/Decimal' -// import Decimal from 'decimal.js-light' +import { DecimalScalar } from './scalar/Decimal' +import { Decimal } from 'decimal.js-light' import { getApiResolvers } from './api/schema' const schema = async (): Promise => { return await buildSchema({ resolvers: [getApiResolvers()], // authChecker: isAuthorized, - // scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], + scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], }) } diff --git a/federation/src/graphql/util/calculateRecipientBalance.ts b/federation/src/graphql/util/calculateRecipientBalance.ts new file mode 100644 index 000000000..2a9c2aa1c --- /dev/null +++ b/federation/src/graphql/util/calculateRecipientBalance.ts @@ -0,0 +1,20 @@ +import { Decimal } from 'decimal.js-light' + +import { getLastTransaction } from './getLastTransaction' +import { calculateDecay } from './decay' +import { Decay } from '../api/1_0/model/Decay' + +export async function calculateRecipientBalance( + userId: number, + amount: Decimal, + time: Date, +): Promise<{ balance: Decimal; decay: Decay; lastTransactionId: number } | null> { + const lastTransaction = await getLastTransaction(userId) + if (!lastTransaction) return null + + const decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, time) + + const balance = decay.balance.add(amount.toString()) + + return { balance, lastTransactionId: lastTransaction.id, decay } +} diff --git a/federation/src/graphql/util/decay.test.ts b/federation/src/graphql/util/decay.test.ts new file mode 100644 index 000000000..1d4ebab3b --- /dev/null +++ b/federation/src/graphql/util/decay.test.ts @@ -0,0 +1,42 @@ +import { Decimal } from 'decimal.js-light' + +import { decayFormula, calculateDecay } from './decay' + +describe('utils/decay', () => { + describe('decayFormula', () => { + it('has base 0.99999997802044727', () => { + const amount = new Decimal(1.0) + const seconds = 1 + // TODO: toString() was required, we could not compare two decimals + expect(decayFormula(amount, seconds).toString()).toBe('0.999999978035040489732012') + }) + it('has correct backward calculation', () => { + const amount = new Decimal(1.0) + const seconds = -1 + expect(decayFormula(amount, seconds).toString()).toBe('1.000000021964959992727444') + }) + // we get pretty close, but not exact here, skipping + // eslint-disable-next-line jest/no-disabled-tests + it.skip('has correct forward calculation', () => { + const amount = new Decimal(1.0).div( + new Decimal('0.99999997803504048973201202316767079413460520837376'), + ) + const seconds = 1 + expect(decayFormula(amount, seconds).toString()).toBe('1.0') + }) + }) + it('has base 0.99999997802044727', () => { + const now = new Date() + now.setSeconds(1) + const oneSecondAgo = new Date(now.getTime()) + oneSecondAgo.setSeconds(0) + expect(calculateDecay(new Decimal(1.0), oneSecondAgo, now).balance.toString()).toBe( + '0.999999978035040489732012', + ) + }) + + it('returns input amount when from and to is the same', () => { + const now = new Date() + expect(calculateDecay(new Decimal(100.0), now, now).balance.toString()).toBe('100') + }) +}) diff --git a/federation/src/graphql/util/decay.ts b/federation/src/graphql/util/decay.ts new file mode 100644 index 000000000..f195075ff --- /dev/null +++ b/federation/src/graphql/util/decay.ts @@ -0,0 +1,65 @@ +import { Decimal } from 'decimal.js-light' + +import { LogError } from '@/server/LogError' +import CONFIG from '@/config' +import { Decay } from '../api/1_0/model/Decay' + +// TODO: externalize all those definitions and functions into an external decay library + +function decayFormula(value: Decimal, seconds: number): Decimal { + // TODO why do we need to convert this here to a stting to work properly? + return value.mul( + new Decimal('0.99999997803504048973201202316767079413460520837376').pow(seconds).toString(), + ) +} + +function calculateDecay( + amount: Decimal, + from: Date, + to: Date, + startBlock: Date = CONFIG.DECAY_START_TIME, +): Decay { + const fromMs = from.getTime() + const toMs = to.getTime() + const startBlockMs = startBlock.getTime() + + if (toMs < fromMs) { + throw new LogError('calculateDecay: to < from, reverse decay calculation is invalid') + } + + // Initialize with no decay + const decay: Decay = { + balance: amount, + decay: new Decimal(0), + roundedDecay: new Decimal(0), + start: null, + end: null, + duration: null, + } + + // decay started after end date; no decay + if (startBlockMs > toMs) { + return decay + } + // decay started before start date; decay for full duration + if (startBlockMs < fromMs) { + decay.start = from + decay.duration = (toMs - fromMs) / 1000 + } + // decay started between start and end date; decay from decay start till end date + else { + decay.start = startBlock + decay.duration = (toMs - startBlockMs) / 1000 + } + + decay.end = to + decay.balance = decayFormula(amount, decay.duration) + decay.decay = decay.balance.minus(amount) + decay.roundedDecay = amount + .toDecimalPlaces(2, Decimal.ROUND_DOWN) + .minus(decay.balance.toDecimalPlaces(2, Decimal.ROUND_DOWN).toString()) + .mul(-1) + return decay +} + +export { decayFormula, calculateDecay } diff --git a/federation/src/graphql/util/fullName.ts b/federation/src/graphql/util/fullName.ts new file mode 100644 index 000000000..7473f5ed0 --- /dev/null +++ b/federation/src/graphql/util/fullName.ts @@ -0,0 +1,2 @@ +export const fullName = (firstName: string, lastName: string): string => + [firstName, lastName].filter(Boolean).join(' ') diff --git a/federation/src/graphql/util/getLastTransaction.ts b/federation/src/graphql/util/getLastTransaction.ts new file mode 100644 index 000000000..0d7747088 --- /dev/null +++ b/federation/src/graphql/util/getLastTransaction.ts @@ -0,0 +1,12 @@ +import { Transaction as DbTransaction } from '@entity/Transaction' + +export const getLastTransaction = async ( + userId: number, + relations?: string[], +): Promise => { + return DbTransaction.findOne({ + where: { userId }, + order: { balanceDate: 'DESC', id: 'DESC' }, + relations, + }) +} diff --git a/federation/src/server/LogError.ts b/federation/src/server/LogError.ts new file mode 100644 index 000000000..b29e83dc8 --- /dev/null +++ b/federation/src/server/LogError.ts @@ -0,0 +1,10 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +import { federationLogger as logger } from './logger' + +export class LogError extends Error { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + constructor(msg: string, ...details: any[]) { + super(msg) + logger.error(msg, ...details) + } +} diff --git a/federation/test/helpers.test.ts b/federation/test/helpers.test.ts new file mode 100644 index 000000000..69d8f3fa4 --- /dev/null +++ b/federation/test/helpers.test.ts @@ -0,0 +1,7 @@ +import { contributionDateFormatter } from '@test/helpers' + +describe('contributionDateFormatter', () => { + it('formats the date correctly', () => { + expect(contributionDateFormatter(new Date('Thu Feb 29 2024 13:12:11'))).toEqual('2/29/2024') + }) +}) diff --git a/federation/test/helpers.ts b/federation/test/helpers.ts new file mode 100644 index 000000000..542906f49 --- /dev/null +++ b/federation/test/helpers.ts @@ -0,0 +1,63 @@ +/* eslint-disable @typescript-eslint/unbound-method */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ + +import { entities } from '@entity/index' +import { createTestClient } from 'apollo-server-testing' + +import createServer from '@/server/createServer' + +import { logger } from './testSetup' + +export const headerPushMock = jest.fn((t) => { + context.token = t.value +}) + +const context = { + token: '', + setHeaders: { + push: headerPushMock, + forEach: jest.fn(), + }, + clientTimezoneOffset: 0, +} + +export const cleanDB = async () => { + // this only works as long we do not have foreign key constraints + for (const entity of entities) { + await resetEntity(entity) + } +} + +export const testEnvironment = async (testLogger = logger) => { + const server = await createServer(testLogger) // context, testLogger, testI18n) + const con = server.con + const testClient = createTestClient(server.apollo) + const mutate = testClient.mutate + const query = testClient.query + return { mutate, query, con } +} + +export const resetEntity = async (entity: any) => { + const items = await entity.find({ withDeleted: true }) + if (items.length > 0) { + const ids = items.map((e: any) => e.id) + await entity.delete(ids) + } +} + +export const resetToken = () => { + context.token = '' +} + +// format date string as it comes from the frontend for the contribution date +export const contributionDateFormatter = (date: Date): string => { + return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}` +} + +export const setClientTimezoneOffset = (offset: number): void => { + context.clientTimezoneOffset = offset +} diff --git a/frontend/src/components/CommunitySwitch.vue b/frontend/src/components/CommunitySwitch.vue index cd18cee94..f9ecc804d 100644 --- a/frontend/src/components/CommunitySwitch.vue +++ b/frontend/src/components/CommunitySwitch.vue @@ -72,7 +72,4 @@ export default { transform: translateY(-50%); position: relative; } -.community-switch ul li:first-child { - display: none; -}