@fabasoad/sarif-to-slack 1.4.0 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/.github/workflows/release.yml +18 -9
  2. package/.github/workflows/security.yml +1 -1
  3. package/.github/workflows/send-sarif-to-slack.yml +10 -2
  4. package/.github/workflows/unit-tests.yml +3 -3
  5. package/.pre-commit-config.yaml +5 -5
  6. package/.tool-versions +1 -1
  7. package/Makefile +13 -13
  8. package/api-extractor.json +1 -1
  9. package/biome.json +1 -1
  10. package/dist/SarifToSlackClient.d.ts.map +1 -1
  11. package/dist/SarifToSlackClient.js +7 -7
  12. package/dist/index.cjs +71 -115
  13. package/dist/index.d.ts +3 -7
  14. package/dist/model/Finding.js +4 -5
  15. package/dist/model/SlackMessage.d.ts.map +1 -1
  16. package/dist/model/SlackMessage.js +1 -1
  17. package/dist/model/color/Color.d.ts.map +1 -1
  18. package/dist/model/color/ColorIdentification.js +7 -7
  19. package/dist/processors/ProcessorFactory.js +1 -1
  20. package/dist/representations/CompactGroupByRepresentation.js +1 -1
  21. package/dist/representations/Representation.js +1 -1
  22. package/dist/representations/RepresentationFactory.js +1 -1
  23. package/dist/representations/TableGroupByRunPerLevelRepresentation.d.ts.map +1 -1
  24. package/dist/representations/TableGroupByRunPerSeverityRepresentation.d.ts.map +1 -1
  25. package/dist/representations/TableGroupByRunRepresentation.d.ts.map +1 -1
  26. package/dist/representations/TableGroupBySarifPerLevelRepresentation.d.ts.map +1 -1
  27. package/dist/representations/TableGroupBySarifPerSeverityRepresentation.d.ts.map +1 -1
  28. package/dist/representations/TableGroupBySarifRepresentation.d.ts.map +1 -1
  29. package/dist/representations/TableGroupByToolNamePerLevelRepresentation.d.ts.map +1 -1
  30. package/dist/representations/TableGroupByToolNamePerSeverityRepresentation.d.ts.map +1 -1
  31. package/dist/representations/TableGroupByToolNameRepresentation.d.ts.map +1 -1
  32. package/dist/representations/TableGroupRepresentation.d.ts.map +1 -1
  33. package/dist/representations/TableGroupRepresentation.js +3 -3
  34. package/dist/representations/table/Cell.d.ts.map +1 -1
  35. package/dist/representations/table/Cell.js +1 -1
  36. package/dist/representations/table/Column.d.ts.map +1 -1
  37. package/dist/representations/table/Column.js +3 -4
  38. package/dist/representations/table/Row.d.ts.map +1 -1
  39. package/dist/representations/table/Row.js +3 -3
  40. package/dist/representations/table/Table.d.ts.map +1 -1
  41. package/dist/setupLogger.d.ts +16 -0
  42. package/dist/setupLogger.d.ts.map +1 -0
  43. package/dist/setupLogger.js +43 -0
  44. package/dist/system.js +3 -3
  45. package/dist/tsdoc-metadata.json +1 -1
  46. package/dist/types.d.ts +3 -7
  47. package/dist/types.d.ts.map +1 -1
  48. package/dist/types.js +2 -2
  49. package/dist/utils/Comparators.js +1 -1
  50. package/dist/utils/FileUtils.js +3 -3
  51. package/etc/sarif-to-slack.api.md +3 -7
  52. package/package.json +23 -22
  53. package/pnpm-workspace.yaml +8 -0
  54. package/scripts/build.sh +1 -1
  55. package/src/SarifToSlackClient.ts +6 -6
  56. package/src/model/Finding.ts +3 -3
  57. package/src/model/SlackMessage.ts +6 -3
  58. package/src/model/color/ColorIdentification.ts +6 -6
  59. package/src/representations/TableGroupRepresentation.ts +2 -2
  60. package/src/representations/table/Column.ts +2 -2
  61. package/src/representations/table/Row.ts +2 -2
  62. package/src/setupLogger.ts +62 -0
  63. package/src/system.ts +2 -2
  64. package/src/types.ts +2 -6
  65. package/src/utils/FileUtils.ts +2 -2
  66. package/tests/tsconfig.json +8 -0
  67. package/tests/vitest.d.ts +1 -0
  68. package/tsconfig.build.json +9 -0
  69. package/tsconfig.json +4 -4
  70. package/tsconfig.test.json +8 -0
  71. package/vitest.config.ts +22 -0
  72. package/dist/Logger.d.ts +0 -2
  73. package/dist/Logger.d.ts.map +0 -1
  74. package/dist/Logger.js +0 -76
  75. package/jest.config.json +0 -33
  76. package/src/Logger.ts +0 -97
@@ -35,33 +35,42 @@ jobs:
35
35
  private-key: ${{ secrets.GH_APP_CONTENTS_CRUD_PRIVATE_KEY }}
36
36
 
37
37
  - name: Checkout ${{ github.repository }}
38
- uses: actions/checkout@v6
38
+ uses: actions/checkout@v7
39
39
  with:
40
40
  token: "${{ steps.github-app.outputs.token }}"
41
+ persist-credentials: "true"
42
+
43
+ - name: Setup pnpm
44
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
45
+ with:
46
+ # Intentional: actions/setup-node provides dependency caching; disable
47
+ # pnpm/action-setup cache to avoid duplicate/unstable cache behavior
48
+ cache: "false"
41
49
 
42
50
  - name: Setup Node
43
51
  uses: actions/setup-node@v6
44
52
  with:
45
53
  node-version-file: ".tool-versions"
46
- cache: "npm"
47
- cache-dependency-path: "package-lock.json"
54
+ cache: "pnpm"
55
+ cache-dependency-path: "pnpm-lock.yaml"
48
56
 
49
57
  - name: Install dependencies
50
- run: npm ci
58
+ run: pnpm install --frozen-lockfile
51
59
 
52
60
  - name: Install jq
53
- uses: dcarbone/install-jq-action@v3
61
+ uses: dcarbone/install-jq-action@4fcb5062d7ce9bc4382d1a352d19ba3ba2c317c1 # v4.0.1
54
62
 
55
63
  - name: Bump version
56
64
  env:
57
65
  BUMP_STRATEGY: "${{ github.event.inputs.bump-strategy }}"
58
66
  GH_TOKEN: "${{ steps.github-app.outputs.token }}"
67
+ GH_APP_SLUG: "${{ steps.github-app.outputs.app-slug }}"
59
68
  run: |
60
- user_name="${{ steps.github-app.outputs.app-slug }}[bot]"
69
+ user_name="${GH_APP_SLUG}[bot]"
61
70
  user_id="$(gh api "/users/${user_name}" --jq .id)"
62
71
  git config user.email "${user_id}+${user_name}@users.noreply.github.com"
63
72
  git config user.name "${user_name}"
64
- npm run version:${BUMP_STRATEGY}
73
+ pnpm run version:${BUMP_STRATEGY}
65
74
 
66
75
  - name: Get metadata
67
76
  id: metadata
@@ -71,13 +80,13 @@ jobs:
71
80
  echo "ref-name=v${version}" >> "$GITHUB_OUTPUT"
72
81
 
73
82
  - name: Publish to npm registry
74
- uses: JS-DevTools/npm-publish@v4
83
+ uses: JS-DevTools/npm-publish@0fd2f4369c5d6bcfcde6091a7c527d810b9b5c3f # v4.1.5
75
84
  with:
76
85
  token: "${{ secrets.NPM_TOKEN }}"
77
86
  registry: "https://registry.npmjs.org"
78
87
 
79
88
  - name: Publish to GitHub Packages
80
- uses: JS-DevTools/npm-publish@v4
89
+ uses: JS-DevTools/npm-publish@0fd2f4369c5d6bcfcde6091a7c527d810b9b5c3f # v4.1.5
81
90
  with:
82
91
  token: "${{ secrets.GITHUB_TOKEN }}"
83
92
  registry: "https://npm.pkg.github.com"
@@ -23,6 +23,6 @@ jobs:
23
23
  contents: read
24
24
  security-events: write
25
25
  with:
26
+ code-scanning-languages: "actions, typescript"
26
27
  code-scanning: ${{ contains(fromJSON('["all", "code-scanning"]'), github.event.inputs.security-type || 'all') }}
27
- code-scanning-languages: "actions,typescript"
28
28
  sca: ${{ contains(fromJSON('["all", "sca"]'), github.event.inputs.security-type || 'all') }}
@@ -185,7 +185,9 @@ jobs:
185
185
  contents: read
186
186
  steps:
187
187
  - name: Checkout ${{ github.repository }}
188
- uses: actions/checkout@v6
188
+ uses: actions/checkout@v7
189
+ with:
190
+ persist-credentials: "false"
189
191
  - name: Determine SARIF file
190
192
  id: sarif-file
191
193
  env:
@@ -294,12 +296,18 @@ jobs:
294
296
  value=""
295
297
  fi
296
298
  echo "value=${value}" >> "$GITHUB_OUTPUT"
299
+ - name: Setup pnpm
300
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
301
+ with:
302
+ run_install: false
297
303
  - name: Setup node
298
304
  uses: actions/setup-node@v6
299
305
  with:
300
306
  node-version-file: ".tool-versions"
307
+ cache: "pnpm"
308
+ cache-dependency-path: "pnpm-lock.yaml"
301
309
  - name: Install dependencies
302
- run: npm ci
310
+ run: pnpm install --frozen-lockfile
303
311
  - name: Send message
304
312
  env:
305
313
  SARIF_TO_SLACK_WEBHOOK_URL: "${{ secrets.TMP_EUGENE_SLACK_WEBHOOK }}"
@@ -6,7 +6,7 @@ on: # yamllint disable-line rule:truthy
6
6
  paths:
7
7
  - .github/workflows/unit-tests.yml
8
8
  - .tool-versions
9
- - jest.config.json
9
+ - vitest.config.ts
10
10
  - package.json
11
11
  - src/**
12
12
  - tests/**
@@ -17,8 +17,8 @@ on: # yamllint disable-line rule:truthy
17
17
  workflow_dispatch: {}
18
18
 
19
19
  jobs:
20
- jest:
21
- name: Jest
20
+ vitest:
21
+ name: Vitest
22
22
  uses: fabasoad/reusable-workflows/.github/workflows/wf-js-unit-tests.yml@main
23
23
  permissions:
24
24
  contents: read
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  default_install_hook_types: ["pre-commit", "pre-push"]
3
3
  default_stages: ["pre-commit", "pre-push"]
4
- exclude: ^(dist/.*|etc/.*|node_modules/.*|temp/.*|test-data/.*)$
4
+ exclude: ^((dist|etc|node_modules|temp|test-data)/.*|vitest-report.json|pnpm-lock.yaml)$
5
5
  minimum_pre_commit_version: 4.4.0
6
6
  repos:
7
7
  - repo: local
@@ -29,7 +29,7 @@ repos:
29
29
  stages: ["pre-push"]
30
30
  # Security
31
31
  - id: audit
32
- name: npm audit
32
+ name: pnpm audit
33
33
  entry: make audit
34
34
  language: unsupported
35
35
  pass_filenames: false
@@ -60,16 +60,16 @@ repos:
60
60
  - --hook-args=--log-level debug
61
61
  stages: ["pre-push"]
62
62
  - repo: https://github.com/google/osv-scanner
63
- rev: v2.3.5
63
+ rev: v2.4.0
64
64
  hooks:
65
65
  - id: osv-scanner
66
66
  args:
67
- - --lockfile=package-lock.json
67
+ - --lockfile=pnpm-lock.yaml
68
68
  verbose: true
69
69
  stages: ["pre-push"]
70
70
  # Markdown
71
71
  - repo: https://github.com/igorshubovych/markdownlint-cli
72
- rev: v0.48.0
72
+ rev: v0.49.0
73
73
  hooks:
74
74
  - id: markdownlint-fix
75
75
  stages: ["pre-commit"]
package/.tool-versions CHANGED
@@ -1 +1 @@
1
- nodejs 25.9.0
1
+ nodejs 26.4.0
package/Makefile CHANGED
@@ -2,52 +2,52 @@
2
2
 
3
3
  .PHONY: audit
4
4
  audit:
5
- @npm audit --audit-level moderate --package-lock-only --include dev
5
+ @pnpm audit
6
6
 
7
7
  .PHONY: build
8
8
  build:
9
- @npm run build
9
+ @pnpm run build
10
10
 
11
11
  .PHONY: clean
12
12
  clean:
13
- @npm run clean
13
+ @pnpm run clean
14
14
 
15
15
  .PHONY: install
16
16
  install:
17
- @npm install
17
+ @pnpm install
18
18
 
19
19
  .PHONY: reinstall
20
20
  reinstall:
21
21
  @make clean
22
- @npm run clean:unsafe
22
+ @pnpm run clean:unsafe
23
23
  @make install
24
24
 
25
25
  .PHONY: lint
26
26
  lint:
27
- @npm run lint
27
+ @pnpm run lint
28
28
 
29
29
  .PHONY: test/integration
30
30
  test/integration:
31
- @npm run test:integration
31
+ @pnpm run test:integration
32
32
 
33
33
  .PHONY: test/unit
34
34
  test/unit:
35
- @npm run test
35
+ @pnpm run test
36
36
 
37
37
  .PHONY: test
38
38
  test: test/unit
39
39
 
40
- .PHONY: npm/update
41
- npm/update:
42
- @npm update
40
+ .PHONY: pnpm/update
41
+ pnpm/update:
42
+ @pnpm update
43
43
 
44
44
  .PHONY: pre-commit/update
45
45
  pre-commit/update:
46
46
  @command -v prek >/dev/null 2>&1 && prek auto-update || pre-commit autoupdate
47
47
 
48
48
  .PHONY: update
49
- update: npm/update pre-commit/update
49
+ update: pnpm/update pre-commit/update
50
50
 
51
51
  .PHONY: outdated
52
52
  outdated:
53
- @npm outdated
53
+ @pnpm outdated
@@ -110,7 +110,7 @@
110
110
  * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
111
111
  * DEFAULT VALUE: "<projectFolder>/tsconfig.json"
112
112
  */
113
- // "tsconfigFilePath": "<projectFolder>/tsconfig.json",
113
+ "tsconfigFilePath": "<projectFolder>/tsconfig.build.json",
114
114
  /**
115
115
  * Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk.
116
116
  * The object must conform to the TypeScript tsconfig schema:
package/biome.json CHANGED
@@ -31,7 +31,7 @@
31
31
  "includes": ["src/**", "tests/**"]
32
32
  },
33
33
  "javascript": {
34
- "globals": ["Atomics", "SharedArrayBuffer", "jest", "afterEach", "beforeAll", "beforeEach", "expect", "test", "describe"]
34
+ "globals": ["Atomics", "SharedArrayBuffer", "vi", "afterEach", "beforeAll", "beforeEach", "expect", "test", "describe"]
35
35
  },
36
36
  "overrides": [{ "includes": ["**/*.spec.ts", "**/*.spec.tsx"] }]
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SarifToSlackClient.d.ts","sourceRoot":"","sources":["../src/SarifToSlackClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,yBAAyB,EAG/B,MAAM,SAAS,CAAC;AAYjB;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,WAAW,CAAC,CAAa;IAEjC,OAAO,CAAC,OAAO,CAAyB;IAExC,OAAO;IAIP,OAAO,CAAC,MAAM,CAAE,oBAAoB;IAOpC;;;;;;;;;OASG;WACiB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC;mBAavF,UAAU;IAoE/B;;;;;OAKG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBlC,OAAO,KAAK,iBAAiB,GAyD5B;CACF"}
1
+ {"version":3,"file":"SarifToSlackClient.d.ts","sourceRoot":"","sources":["../src/SarifToSlackClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,yBAAyB,EAG/B,MAAM,SAAS,CAAC;AAYjB;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,WAAW,CAAC,CAAa;IAEjC,OAAO,CAAC,OAAO,CAAyB;IAExC,OAAO,eAEN;IAED,OAAO,CAAC,MAAM,CAAE,oBAAoB;IAOpC;;;;;;;;;OASG;IACH,OAAoB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW3G;mBAEoB,UAAU;IAoE/B;;;;;OAKG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAcjC;IAED,OAAO,KAAK,iBAAiB,GAyD5B;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { promises as fs } from 'node:fs';
2
- import Logger from './Logger';
2
+ import { getLogger } from "@logtape/logtape";
3
3
  import { SecurityLevel, SecuritySeverity, } from './types';
4
4
  import { logMetadata } from './system';
5
5
  import { extractListOfFiles } from './utils/FileUtils';
@@ -10,7 +10,7 @@ import { identifyColor } from './model/color/ColorIdentification';
10
10
  import FindingArray from './model/FindingArray';
11
11
  import { createSlackMessage } from './model/SlackMessage';
12
12
  import { SendIf, sendIfLogMessage } from './model/SendIf';
13
- import { globalState } from './globalState';
13
+ import { setupLogger } from "./setupLogger";
14
14
  /**
15
15
  * Service to convert SARIF files to Slack messages and send them.
16
16
  * @public
@@ -39,8 +39,8 @@ export class SarifToSlackClient {
39
39
  * @public
40
40
  */
41
41
  static async create(webhookUrl, opts) {
42
- globalState.loggerOpts = opts.loggerOptions;
43
- const logger = new Logger();
42
+ setupLogger(opts.loggerOptions);
43
+ const logger = getLogger();
44
44
  logger.trace(opts);
45
45
  const instance = new SarifToSlackClient();
46
46
  instance._sendIf = opts.sendIf ?? instance._sendIf;
@@ -118,13 +118,13 @@ export class SarifToSlackClient {
118
118
  if (this._sarifModel == null) {
119
119
  throw new Error('Could not parse SARIF file(s).');
120
120
  }
121
- const logger = new Logger();
121
+ const logger = getLogger();
122
122
  if (this.shouldSendMessage) {
123
123
  if (this._message == null) {
124
124
  throw new Error('Slack message was not prepared.');
125
125
  }
126
126
  const text = await this._message.send();
127
- logger.info('Message sent. Status:', text);
127
+ logger.info(`Message sent. Status: ${text}`);
128
128
  }
129
129
  else {
130
130
  logger.info(sendIfLogMessage(this._sendIf));
@@ -188,4 +188,4 @@ export class SarifToSlackClient {
188
188
  }
189
189
  }
190
190
  }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2FyaWZUb1NsYWNrQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NhcmlmVG9TbGFja0NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6QyxPQUFPLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFDOUIsT0FBTyxFQUtMLGFBQWEsRUFDYixnQkFBZ0IsR0FDakIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sWUFBWSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3JCLFFBQVEsQ0FBZ0I7SUFDeEIsV0FBVyxDQUFjO0lBRXpCLE9BQU8sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRXhDO1FBQ0UsV0FBVyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQjtRQUNsQyxJQUFJLEtBQUssR0FBVyxD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
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2FyaWZUb1NsYWNrQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NhcmlmVG9TbGFja0NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sa0JBQWtCLENBQUM7QUFFMUQsT0FBTyxFQUtMLGFBQWEsRUFDYixnQkFBZ0IsR0FDakIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sWUFBWSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3JCLFFBQVEsQ0FBZ0I7SUFDeEIsV0FBVyxDQUFjO0lBRXpCLE9BQU8sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRXhDO1FBQ0UsV0FBVyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQjtRQUNsQyxJQUFJ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