From e3893b92ce3a2a026baf62c008af5e32c29aeac3 Mon Sep 17 00:00:00 2001 From: Delirium Date: Wed, 25 Oct 2023 12:29:42 +0200 Subject: [PATCH] feat(tracker): safety wrap for angular, new performance/lag display system * feat(tracker): make message commits low priority (possibly improve browser lags display), add safe polyfill for env methods hijacked by angular * feat(tracker): add bun.sh support * feat(tracker): add bun.sh support to actions * feat(tracker): add bun.sh support to actions * feat(tracker): add bun.sh support to actions * fix(tracker): fix e2e test workflow file * fix(tracker): fix e2e test workflow file * fix(tracker): fix test workflow file * fix(tracker): fix requestIdleCallback check, add test cov for new utilities * fix(tracker): fix eslint complains * fix(ui): fix yarn bug * fix(ui): fix yarn bug * fix(ui): fix yarn bug * fix(ui): fix ci test * fix(ui): fix ci test * fix(ui): fix ci test * fix(ui): fix ci test * fix(ui): fix ci test * fix(ui): fix ci test * fix(ui): fix ci test * fix(ui): debug logs * fix(ui): debug logs * fix(ui): debug logs * fix(ui): debug logs * fix(ui): remove logs * fix(ui): fix waiting for ui * fix(ui): fix? * fix(ui): fix? * fix(ui): fix? * fix(ui): fix? * fix(ui): fix! * fix(ui): fix! * fix(ui): finally --- .github/workflows/tracker-tests.yaml | 30 ++- .github/workflows/ui-tests.js.yml | 46 +++-- frontend/app/player/player/_LSCache.ts | 2 +- frontend/cypress/e2e/generalStability.cy.ts | 44 ----- frontend/yarn.lock | 186 +++++++++++++++++- tracker/.husky/pre-commit | 4 +- tracker/tracker-assist/bun.lockb | Bin 0 -> 245345 bytes .../tracker-testing-playground/package.json | 2 +- tracker/tracker/README.md | 4 + tracker/tracker/bun.lockb | Bin 0 -> 219847 bytes tracker/tracker/package.json | 8 +- tracker/tracker/src/main/app/index.ts | 35 +++- tracker/tracker/src/main/app/logger.ts | 2 +- tracker/tracker/src/main/app/nodes.ts | 6 +- .../tracker/src/main/app/observer/observer.ts | 10 +- tracker/tracker/src/main/app/sanitizer.ts | 5 +- tracker/tracker/src/main/app/session.ts | 5 +- .../src/main/modules/attributeSender.ts | 5 +- tracker/tracker/src/main/modules/img.ts | 35 ++-- tracker/tracker/src/main/utils.ts | 64 ++++++ tracker/tracker/src/tests/utils.unit.test.ts | 58 ++++++ 21 files changed, 435 insertions(+), 116 deletions(-) delete mode 100644 frontend/cypress/e2e/generalStability.cy.ts create mode 100755 tracker/tracker-assist/bun.lockb create mode 100755 tracker/tracker/bun.lockb diff --git a/.github/workflows/tracker-tests.yaml b/.github/workflows/tracker-tests.yaml index 5e9064e16..d5c4caeaf 100644 --- a/.github/workflows/tracker-tests.yaml +++ b/.github/workflows/tracker-tests.yaml @@ -17,8 +17,11 @@ jobs: name: Build and test Tracker strategy: matrix: - node-version: [ 16.x ] + node-version: [ 18.x ] steps: + - uses: oven-sh/setup-bun@v1 + with: + bun-version: latest - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 @@ -28,7 +31,7 @@ jobs: uses: actions/cache@v3 with: path: tracker/tracker/node_modules - key: ${{ runner.OS }}-test_tracker_build-${{ hashFiles('**/yarn.lock') }} + key: ${{ runner.OS }}-test_tracker_build-${{ hashFiles('**/bun.lockb') }} restore-keys: | test_tracker_build{{ runner.OS }}-build- test_tracker_build{{ runner.OS }}- @@ -36,27 +39,34 @@ jobs: uses: actions/cache@v3 with: path: tracker/tracker-assist/node_modules - key: ${{ runner.OS }}-test_tracker_build-${{ hashFiles('**/yarn.lock') }} + key: ${{ runner.OS }}-test_tracker_build-${{ hashFiles('**/bun.lockb') }} restore-keys: | test_tracker_build{{ runner.OS }}-build- test_tracker_build{{ runner.OS }}- - name: Setup Testing packages run: | cd tracker/tracker - npm i -g yarn - yarn - - name: Setup Testing packages + bun install + - name: (TA) Setup Testing packages run: | cd tracker/tracker-assist - yarn + bun install - name: Jest tests run: | cd tracker/tracker - yarn test:ci - - name: Jest tests + bun run test:ci + - name: Building test + run: | + cd tracker/tracker + bun run build + - name: (TA) Jest tests run: | cd tracker/tracker-assist - yarn test:ci + bun run test:ci + - name: (TA) Building test + run: | + cd tracker/tracker-assist + bun run build - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 with: diff --git a/.github/workflows/ui-tests.js.yml b/.github/workflows/ui-tests.js.yml index a65423c30..317c21b9d 100644 --- a/.github/workflows/ui-tests.js.yml +++ b/.github/workflows/ui-tests.js.yml @@ -27,8 +27,11 @@ jobs: name: Build and test Tracker plus Replayer strategy: matrix: - node-version: [ 16.x ] + node-version: [ 18.x ] steps: + - uses: oven-sh/setup-bun@v1 + with: + bun-version: latest - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 @@ -38,18 +41,18 @@ jobs: uses: actions/cache@v3 with: path: tracker/tracker/node_modules - key: ${{ runner.OS }}-test_tracker_build-${{ hashFiles('tracker/tracker/yarn.lock') }} + key: ${{ runner.OS }}-test_tracker_build-${{ hashFiles('tracker/tracker/bun.lockb') }} restore-keys: | test_tracker_build-{{ runner.OS }}-build- test_tracker_build-{{ runner.OS }}- - name: Setup Testing packages run: | cd tracker/tracker - yarn + bun install - name: Build tracker inst run: | cd tracker/tracker - yarn build + bun run build - name: Setup Testing UI Env run: | cd tracker/tracker-testing-playground @@ -67,10 +70,6 @@ jobs: run: | cd tracker/tracker-testing-playground yarn - - name: Run testing frontend - run: | - cd tracker/tracker-testing-playground - yarn start &> ui.log & - name: Cache node modules uses: actions/cache@v3 with: @@ -96,39 +95,50 @@ jobs: echo "MINIO_USE_SSL = ''" >> .env echo "MINIO_ACCESS_KEY = ''" >> .env echo "MINIO_SECRET_KEY = ''" >> .env - echo "VERSION = '1.9.0'" >> .env - echo "TRACKER_VERSION = '4.0.0'" >> .env + echo "VERSION = '1.15.0'" >> .env + echo "TRACKER_VERSION = '10.0.0'" >> .env echo "COMMIT_HASH = 'dev'" >> .env echo "{ \"account\": \"$CY_ACC\", \"password\": \"$CY_PASS\" }" >> cypress.env.json - name: Setup packages run: | cd frontend - yarn + npm install --legacy-peer-deps - name: Run unit tests run: | cd frontend - yarn test + npm run test:ci - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} flags: ui name: ui - - name: Wait for Testing Frontend + - name: Run testing frontend run: | + cd tracker/tracker-testing-playground + yarn start &> testing.log & + echo "Started" + npm i -g wait-on + echo "Got wait on" + sleep 30 + cat testing.log npx wait-on http://localhost:3000 + echo "Done" + timeout-minutes: 4 - name: Run Frontend run: | cd frontend - yarn start &> frontend.log & - - name: Wait for frontend - run: | - cd frontend + bun start &> frontend.log & + echo "Started" + sleep 30 + cat frontend.log npx wait-on http://0.0.0.0:3333 + echo "Done" + timeout-minutes: 4 - name: (Chrome) Run visual tests run: | cd frontend - yarn cy:test + npm run cy:test # firefox have different viewport somehow # - name: (Firefox) Run visual tests # run: yarn cy:test-firefox diff --git a/frontend/app/player/player/_LSCache.ts b/frontend/app/player/player/_LSCache.ts index beb48af46..70425bdda 100644 --- a/frontend/app/player/player/_LSCache.ts +++ b/frontend/app/player/player/_LSCache.ts @@ -38,7 +38,7 @@ type Entries = { [K in keyof T]: [K, T[K]]; }[keyof T][]; -export default class LSCache { +export default class LSCache> { constructor(private state: SimpleState, private keyMap: Record, string>) { } update(newState: Partial) { diff --git a/frontend/cypress/e2e/generalStability.cy.ts b/frontend/cypress/e2e/generalStability.cy.ts deleted file mode 100644 index 4c8365070..000000000 --- a/frontend/cypress/e2e/generalStability.cy.ts +++ /dev/null @@ -1,44 +0,0 @@ -describe('Testing general stability', { - viewportHeight: 900, - viewportWidth: 1400, -}, () => { - it('Checking if app will crash', () => { - cy.clearCookies() - cy.clearAllSessionStorage() - cy.clearAllCookies() - cy.clearAllLocalStorage() - - cy.intercept('**/api/account').as('getAccount'); - - cy.visit('/') - cy.get('[data-test-id=login]').type(Cypress.env('account').replaceAll('"', '')); - cy.get('[data-test-id=password]').type(Cypress.env('password').replaceAll('"', '')); - cy.get('[data-test-id=log-button]').click(); - cy.wait('@getAccount') - - Cypress.on('uncaught:exception', (err, runnable) => { - return false - }) - - cy.get(':nth-child(1) > .ant-menu-item-group-title > .ant-typography').should('be.visible') - - cy.visit('/5/dashboard') - cy.wait(500) - cy.get('input[name="dashboardsSearch"]').should('be.visible') - - cy.visit('/client/account') - - cy.get(':nth-child(2) > .profileSettings-module__left--D4pCi > .profileSettings-module__info--DhVpL').should('be.visible') - - cy.get('.ant-menu-item-group-list > :nth-child(2)').click() - cy.wait(250) - cy.get('.text-2xl > div').should('be.visible') - cy.get('.ant-menu-item-group-list > :nth-child(3)').click() - cy.get('.ant-menu-item-group-list > :nth-child(4)').click() - cy.get('.text-base').should('be.visible') - - cy.get('.ant-menu-item-group-title').should('be.visible') - - // if test has not failed, we assume that app is not crashed (so far) - }) -}) \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 4434b2055..eeb711dc2 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -146,6 +146,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" + dependencies: + "@babel/highlight": ^7.22.13 + chalk: ^2.4.2 + checksum: f4cc8ae1000265677daf4845083b72f88d00d311adb1a93c94eb4b07bf0ed6828a81ae4ac43ee7d476775000b93a28a9cddec18fbdc5796212d8dcccd5de72bd + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.1, @babel/compat-data@npm:^7.20.5": version: 7.20.10 resolution: "@babel/compat-data@npm:7.20.10" @@ -220,6 +230,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 5a80dc364ddda26b334bbbc0f6426cab647381555ef7d0cd32eb284e35b867c012ce6ce7d52a64672ed71383099c99d32765b3d260626527bb0e3470b0f58e45 + languageName: node + linkType: hard + "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6": version: 7.18.9 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9" @@ -263,6 +282,25 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.21.0": + version: 7.22.15 + resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2ae5759fe8845fda99b34f2ba6cd0794fc860213d14c93a87aa9180960252bce621157a79c373b7fbb423b25a55fb0e20eae0d5f8e4ad5ef22dc70e7c2af3805 + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.20.5": version: 7.20.5 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.20.5" @@ -316,6 +354,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: e762c2d8f5d423af89bd7ae9abe35bd4836d2eb401af868a63bbb63220c513c783e25ef001019418560b3fdc6d9a6fb67e6c0b650bcdeb3a2ac44b5c3d2bdd94 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" @@ -335,6 +380,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.22.5": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: d771dd1f3222b120518176733c52b7cadac1c256ff49b1889dbbe5e3fed81db855b8cc4e40d949c9d3eae0e795e8229c1c8c24c0e83f27cfa6ee3766696c6428 + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -353,6 +408,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" + dependencies: + "@babel/types": ^7.23.0 + checksum: b810daddf093ffd0802f1429052349ed9ea08ef7d0c56da34ffbcdecbdafac86f95bdea2fe30e0e0e629febc7dd41b56cb5eacc10d1a44336d37b755dac31fa4 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" @@ -387,6 +451,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 31b41a764fc3c585196cf5b776b70cf4705c132e4ce9723f39871f215f2ddbfb2e28a62f9917610f67c8216c1080482b9b05f65dd195dae2a52cef461f2ac7b8 + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:7.10.4": version: 7.10.4 resolution: "@babel/helper-plugin-utils@npm:7.10.4" @@ -429,6 +502,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/helper-replace-supers@npm:7.22.20" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6b0858811ad46873817c90c805015d63300e003c5a85c147a17d9845fa2558a02047c3cc1f07767af59014b2dd0fa75b503e5bc36e917f360e9b67bb6f1e79f4 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.20.2": version: 7.20.2 resolution: "@babel/helper-simple-access@npm:7.20.2" @@ -447,6 +533,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: ab7fa2aa709ab49bb8cd86515a1e715a3108c4bb9a616965ba76b43dc346dee66d1004ccf4d222b596b6224e43e04cbc5c3a34459501b388451f8c589fbc3691 + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-split-export-declaration@npm:7.18.6" @@ -456,6 +551,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": ^7.22.5 + checksum: d83e4b623eaa9622c267d3c83583b72f3aac567dc393dda18e559d79187961cb29ae9c57b2664137fc3d19508370b12ec6a81d28af73a50e0846819cb21c6e44 + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.19.4": version: 7.19.4 resolution: "@babel/helper-string-parser@npm:7.19.4" @@ -463,6 +567,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 6b0ff8af724377ec41e5587fffa7605198da74cb8e7d8d48a36826df0c0ba210eb9fedb3d9bef4d541156e0bd11040f021945a6cbb731ccec4aefb4affa17aa4 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-validator-identifier@npm:7.19.1" @@ -470,6 +581,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: dcad63db345fb110e032de46c3688384b0008a42a4845180ce7cd62b1a9c0507a1bed727c4d1060ed1a03ae57b4d918570259f81724aaac1a5b776056f37504e + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-validator-option@npm:7.18.6" @@ -511,6 +629,17 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: f3c3a193afad23434297d88e81d1d6c0c2cf02423de2139ada7ce0a7fc62d8559abf4cc996533c1a9beca7fc990010eb8d544097f75e818ac113bf39ed810aa2 + languageName: node + linkType: hard + "@babel/node@npm:^7.16.8": version: 7.20.7 resolution: "@babel/node@npm:7.20.7" @@ -538,6 +667,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" + bin: + parser: ./bin/babel-parser.js + checksum: ab4ea9360ed4ba3c728c5a9bf33035103ebde20a7e943c4ae1d42becb02a313d731d12a93c795c5a19777031e4022e64b92a52262eda902522a1a18649826283 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -779,6 +917,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-private-property-in-object@npm:^7.21.11": + version: 7.21.11 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.21.0 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3c8c9ea175101b1cbb2b0e8fee20fcbdd03eb0700d3581aa826ac3573c9b002f39b1512c2af9fd1903ff921bcc864da95ad3cdeba53c9fbcfb3dc23916eacf47 + languageName: node + linkType: hard + "@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": version: 7.18.6 resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" @@ -1737,6 +1889,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 9312edd37cf1311d738907003f2aa321a88a42ba223c69209abe4d7111db019d321805504f606c7fd75f21c6cf9d24d0a8223104cd21ebd207e241b6c551f454 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.12, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.7.2": version: 7.20.12 resolution: "@babel/traverse@npm:7.20.12" @@ -1766,6 +1929,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" + dependencies: + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 + to-fast-properties: ^2.0.0 + checksum: 70e4db41acb6793d0eb8d81a2fa88f19ee661219b84bd5f703dbdb54eb3a4d3c0dfc55e69034c945b479df9f43fd4b1376480aaccfc19797ce5af1c5d2576b36 + languageName: node + linkType: hard + "@base2/pretty-print-object@npm:1.0.1": version: 1.0.1 resolution: "@base2/pretty-print-object@npm:1.0.1" @@ -8044,7 +8218,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.4.1": +"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -17558,6 +17732,7 @@ __metadata: "@babel/plugin-proposal-class-properties": ^7.17.12 "@babel/plugin-proposal-decorators": ^7.17.12 "@babel/plugin-proposal-private-methods": ^7.10.4 + "@babel/plugin-proposal-private-property-in-object": ^7.21.11 "@babel/plugin-syntax-bigint": ^7.8.3 "@babel/plugin-transform-runtime": ^7.17.12 "@babel/preset-env": ^7.17.12 @@ -21852,6 +22027,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + "semver@npm:^7.5.3": version: 7.5.4 resolution: "semver@npm:7.5.4" diff --git a/tracker/.husky/pre-commit b/tracker/.husky/pre-commit index 9471928e2..0200dbbae 100755 --- a/tracker/.husky/pre-commit +++ b/tracker/.husky/pre-commit @@ -7,7 +7,7 @@ then pwd cd tracker/tracker - npm run lint-front + bun run lint-front cd ../../ fi @@ -17,7 +17,7 @@ then echo "tracker-assist" cd tracker/tracker-assist - npm run lint-front + bun run lint-front cd ../../ fi diff --git a/tracker/tracker-assist/bun.lockb b/tracker/tracker-assist/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..8475ceadee311defb47a07fbc4c3eb842504e138 GIT binary patch literal 245345 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 literal 0 HcmV?d00001 diff --git a/tracker/tracker-testing-playground/package.json b/tracker/tracker-testing-playground/package.json index 1ca00c7b0..a8386d93a 100644 --- a/tracker/tracker-testing-playground/package.json +++ b/tracker/tracker-testing-playground/package.json @@ -22,7 +22,7 @@ "zustand": "^4.1.1" }, "scripts": { - "start": "HOST=0.0.0.0 react-scripts start", + "start": "HOST=0.0.0.0 react-scripts --openssl-legacy-provider start", "build": "NODE_OPTIONS=--openssl-legacy-provider react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" diff --git a/tracker/tracker/README.md b/tracker/tracker/README.md index b1daf6d4d..2dd9ea755 100644 --- a/tracker/tracker/README.md +++ b/tracker/tracker/README.md @@ -2,6 +2,10 @@ The main package of the [OpenReplay](https://openreplay.com/) tracker. +## Development & Contribution + +Please use [bun](https://bun.sh/) to install and build this library. Any submitted pull request must pass **all tests** and should have positive test coverage diff %. + ## Documentation For launch options and available public methods, [refer to the documentation](https://docs.openreplay.com/installation/javascript-sdk#options) diff --git a/tracker/tracker/bun.lockb b/tracker/tracker/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..b4c48d4f86e47718e7f2b400d9bc6ba4b8125a57 GIT binary patch literal 219847 zcmeEuc|4Wd7xzi0LZN|_B6Au0Qh7?Ay70Zh4O0_w)Yq+n;-U&)$1|*IIk+wTJVZ)0LA^2@efXarX&O;RHlT zyN3q|!b{mN(8Jfu$B(1z6&T|07N#7bD#*uTu~M|lB%N#LicJ&PWoV*s!&G&~%J)r= z>jv(WIwhm{DQB34mT@;0t3TB5 z0ty0-2kZklhOUQ&D$nDDhOs*S02@)+!_Oz$EyOz%>Vv@nl#d=eJ^+<3Wm9#}9+bX( z8m$4vLCy%UH((gZ^#kMpiXeu1xcRwxazJ&s59nFYi^URv_OpN}F9<^u0-OPeekuSD z>n(J92*=GMOxY)t$eRHf`vpK4?f7vbIOt#lE$=bc&CeI=e4tzy`sccZDnm%TpFuy` z9S7q=yLvD<9A5(b!MLdbV!Jpf$Mzxc2gh{?>JorIpmQi-3k1Bwe^8Ei6cBkHKFU4; zUV$tL@E_|ceJQ=6er}<2!5;;v8{)9AMd{E-CYgoFf!D08A@V6u?c4szK4yK%e+ zIZ@~*@%S}<`=B3G#5aQw`d0}k3pj+f?;hgj!GQ_xGm!FUDj>#b2O!G#1v&KNFbp2^ zM`{oyHvkaZgOvSz{C&b$_v!j>ki&KoZ`Z+8{5C;5#!(M~hx3&Th~wt~IgAq$Jr?TN zZ#jgr+Ya-BO>-a##qs#UlIcbC`V0 zud9HA0NJ1n?M|3XjW>i78t50nVZDYr$~^(Z{oy7cjvw~zz{mi|6*DToMnXI81H(Wc z#!Une{re$F;SzJI9mG5GvAYFjPaT4Qye5!CybbM`r>d3|Zy_L#D*)s$Zckt`aGs_? z9rL=tit^_Uw4Xm`sLs-6Uh{Y4^_pXtEIxc#uB><9UJD|`BcusBh$2}2QK)9oRF{y|}(EX`?@ zJzqagcnI_-()N4UQ~SdQ=tp~;D2|64^s6{f`)yzVC(Os6!}5pS-9y~JVJmNm+pW#UoD^);}SX7#{Y=;uVmW#V*7z837lkm85TpyJsZ z5a;g+^bY{^ck|`oz>YvW+Wi3Sm^UPkE1-_^Cqj>>8zAP%9avxJmqa%zULk>gevqy# zIAc0iC^^SeohdmtkH8Q}E0zS*G5$+tQ@l(UY8;PgB9YvmOxFr6Bl^@$d`u?6@$jh9KhjMtV`m z@$?Dv2@HTSh4=-+_#~hm<#C^IkA`!H6XMNLgZO&~1cm@N)|(pdWSA73AD>X=jxFUP z)N$U%0V3baEi^2c#bSkU!b5$$qFEL`)O_@wN6mv1AkLd2Ee})Fp-9e`(jNqNP(O#p zDriT&OTh=slb{ezSeOqdOnr9VIdq23lHZI@ShV99PSgs2?>Tt zLV0pu{Po^R?xW=1Sr|ygiQJ1qygWU?3`-95;CSCb%n-?a^(9@u0)xjm|9T%82t4#( z2oUqD8zAOoFYp`df4hE2K9YN0J@|_GI4{&Q5KOQoom;gC}@(%&g@4?WH>qiI>>nCEUaR|p!<75G19QH#y_6LRf zp?Ve{$m2YOx<%o&krn0d2QG(%b{rO(IA39qn4Hjn$WXT+$em{q)VX{E5bX&pp!_%s zbkBj^2-fxS-w7D>uGsTXn2?p+?&)F zQM^=WN52yQaon-AoSVB_$2sZ|8X6iF?Z*M^h%dnaki&TnTSDgR*|eE2d--j_!CL~4BSc?2>A)+f}_k1uq8H>eMWx+e#YOrKEJ9B4;> zbpRCr$$3o9;nC2J^C1U_@ges_a$hFvnw-zSp34J(hw*;3lJWx%`4BfR77Mm=7$J+5 zo=nXveq0RWc(T|akMZV&28YA-yyIQ~%aZkeDHVq^DU=^CppJeQq*8TqANLIO2n+EE z;JD4}P|pev@ll=!36q;f?XTB?Cl0**fVfX)0^+`>mQL-1E1}*oZ-D5x=xWLixv#iF z9p}j%`Z12ifT)MeM|%dv3v+Y#!1LAr< z1^tN8na9!9S_;x9RWE<^t?kW&W4b6W^d8W7ZW z;PUNM9s~nozX>Qtf7Ai{1KLBoBp_@d9eGihOZl+@5ci8IJ1IX?ppNSz1`y*gZWpCz z1dVVl>A2q&bFA0Owi>Q3sUA95Zt9fIa|R(#VpJ?~1-xWsw##?9TD zUz`d%^WCr8{vcW7hmx{S<<1Dm7SHUqv1;;{EkT8WV-Nc^d2DX?RJjZ6o*@l@-cyZXV|Em+cvoDyr_Gyyq-aC zk?}XC=U1A4-11`lx7|BtMF%YGyLo9w*`k|5X=2W9#mCpn5&2C~v0l^X$Jq?q#P>v_ z|KV3tr4*z3b)UUEEN9EM%{iN1R6Jj#YBg~7eUtMZ9_7P7gk)6DJuWo8sw}a`YNe_P zRaMQwQf+YuC3a_NT0glmUT9-}eSGNn8kO_uDl=0QkLYO&1nORTZMVK;et%uHqsRPi zeczVD}kE+dVfT-`pFl`DT-V=m<{A^|_jJcB+hilNnPrtnW1s<>(13wpFXiw4Qxb z|1zn1OlJ1yfVGQ71$W9>9QpC&@$4rKzZ*yD)`Je;=T|t8c>Ef_)4{{58W&oK*5$1b zxqG)~(90;z9-nCoJS^Muw#K|;^^*vA$lNOM@t@U>C=BmS9a{jGzmKj>O+}8WFM~&~p zqX(lkyNkbGHtp{CNr4F#%j4Hr3_oR7wNB)4tJK3)@tcc?UY!tk7rj9Rk**T9S{ogE zm!~daX*`uEyR_r*g*!*?rI|I~oA&xVUrL@FDZq z5-t93c3aA>7;~yqPj29_rFAQHVFRW9%(*B#6=fSdpU&RDP-rq5@ zb+ENg$vE|8qsY@`MP(@s^J13?=#1OaFx5i8p>}FR^!p?Ct0taU(AtmV+pbZ*&ehzb zx9oCy_Q&d!uM%=`CcUrp={GV-+fs6q1OwW8lrVA25vE4>s3@}!jhiS+bNR|bl#wsoEs20+uz{eyhx{niMNMXR9-Pn+bI30EnaigrhP3R zvs|mr4C8y|V%O9ZG~;wrkByJtD3zwf35)aHiE^^LZSCA#`qaxQrAcCjjmgEUua7L4 zV-q=c;S~m!V*X9LQUfaY;|{ey35h-s*PLU!GoP0ow$tb2aB9WiSIn(>_zrj-!Dfs^qY+mzgVTc9a}3mS9jzx*HT-Fm3e`8OKt=U zNh^)btr$`l{-y1VR_j%co#&GMoQjd!w#D1$MTAGU&yqBoxKd!b#gobn>&hg8{fm0v zzO$_`d4kf!mfVwHV$_UnMV@CW%Bng&8gNH;%#H&aPBrwA9^8Aeg4#feiMZqmxc1m!_CbP!F+h@PtWiV@B zN%8fP`?dV{1;q1ZU-nrn;*{-Utu)a@;NkZ?v%Bm7G>!lAk!9xkmfJrjeebi{#J*p`eN)MFivW+DjK~j;hPvk? zUF}9V@3=BywyV_Ed0Iy1ak6uJd!G9}KY>}Kfc_B&H`1@78R-qn!yR3mro z=Efe2a02M!fp^H2S<-L`ph-e{+X)B3-@XCPLSt#g`xzF@tR z zX#ASu5wu{6Thhi-lE-cCtgl8t#Mk&(`iiNnULJpORqwQkj&;KJ#U;f{qZQ{A zoSpN=PTZjox1^uM=4B<5^1ci2j7;!)ImR|zQ*hJMhY7u&tDhdd;o$^_K^76uEN-dV zq&SPno7hjx96h_dkM-@DN8XM|>@{Mu_4b3iCJZxkiCJx7xzcmZffEl)YeFwvth$={ zcJAKll17=((Gu5dPX=YDeyW+Naz~`T`-~MCB|S2K9C54vTDs&}-S-}xY8Tb12S*jB zd|s^(U9soW35~CPPC8{CaB=B#DysZZonD#IO6SY75*EA)vi1|!H_aKgCt|IuMq9wK z-HLT7H_lxn_r+iDo#Z}B?wvC(jhp(~qP3CSi_W;#Z+N2EyFJY%Wb+qOH*Lc?6HVC# z8{U%pDr@nnyepGKF4ddoJ}q{NxB2xxvTOMpj-s2Aslbo)Ev{ityETR>#b~cou#Ot) zQ~5N>rTK5y56MSz&l~wv%2ZNy)2@O=ua2hQ_14Vd+*T}4-K)}zZ9cy!RrhMY!56az zRgS;AW8~wN;pQVObiAJ4Uw0&7(g=O`_E_mY{o|hY zy3(yevPZ-Wa^3~&Ok1xbRd_Pax-npFuh#0#<2-B+T<{LtcHoELx0t(@@82n$-ljgT zyzQO^pNakTq+2^?czhhxXy*6Dxrfi9X!hU=l|C{jolGMho|-RvbeodGxq@72nQ*_} zb6b2g@+-I14lQ{tKR}~t?NcMW3NwjkJ3Qyi-)0p!jq|-gM^by?CpGax#h9^iiLN@| zdT!Vhmc4B9nb<^izo4{rrgNKzh|&c#U1azU&;-zjU2f}^Txh*(WnJO zKDP}qiN)xNbbvI zU6b?q*K=9T@6d;`in-pGN6d+jeCj2#yCuf&Q>x{h_Bz>*U&6%J`Hzrt&tKzidn2dj z_THnz@&{i@7kIREf5Bb#Pjy0vlsG%ZP38?ek)-x&Z*;oTv*0h;YYZ;jE}A}Q!#ep> z))~7#x}B4`Xqr9v6S=xvvz+OyBl(=@0p*NmXG7Y|8jUPdF6pruX*q+s&4z5VeKE(P0~F}qC>UVq#kox^oeLcvDP$x zsk*J9x%d42Yj>Y&y_u+eWP-D-(2Ck)?*s-6=$^Pt+0tWKSoKA_j|GC~pAA0oLv@v7 z@U2%t@n*+0XNe|{kqf(5@u4c(3 zIcV~E180J4b*tkk;x9RW_^Ox1WiM9`NUt*QcJPL4Vt~|#(|7L6YhSr`{k6mtmoY8J z-upV5&z0$A6B`*cqRD7;#0h1en>|9V)N2%m?|nyPLyF~8@h zA<|<%&z;sVaGYbb&!_VbY{&K!4yjN-DwDaNFZbK|d&Z56Ud76vTWIq%u%^UC--YkQ z?YI0jUf(OM6f4~`;Om9IDtt8C5fo{_a~G`g!;7h2!e0RdE8t@txomhbDTMz7NV>pB zZg+U`%Euqf=l~zNsDo)C_TAwP+DE(aT$a^?p#s9+3~#i656`+f>@)R&@EyVNu{6II zL)$1u_!oh%{TF;S7`Qs{;h7u@?GwFd<4=Xir32p(`0(t%OXI%@d{y9+xML17Da1Y> z5DkEj^M`Gi2TTg#2LK=Ezb8%Nb^Z?1eBwW^{C7Zf1p7?=CSxQ1PX@>JfzLEB?g4w12)aS;X42y z_b>R)pkw_q@f~G|{Z!y%{4wuH8xtKw_8Rc@=++jNRXp8VufKTGz75^(~`LB(n0iT?oyyzf&bNG^Q0@%m%6AP{*CWY{`fNutTJU_9JcB=OK zzeKJE_!vJ?5XIbMx`qi~4!*R*{KfSH-wX1b|DM3N1wQ647J^jm_kW4~a^S;veE;xC z`|p`l50R6FFArw`pVWChe`0};^Vik=uMGH@e`ueVHB9_v!~f7s8LG?RRzjM(|~|4Q(Iy52kwlf`KpXi0Re=J09G#s3G{-H3o@f!bmz&8Ot?i=v? z0Q?T0Q6ctE10UxP>m-MnC?NbE@TI>o@Nxc_u3gkm_~yVT_eUmni45T{0{#@RPvXYZ z2g1Jre2hPtJEDi!`5h9z2yEO&w0&H^sE0`*d^_NC-~V{!rvQHv*eCOk=LnNR?0*9S z?te_z4be^bnsD%W|AqaHz{l|u`@GKIec)>VpTv#$Mg06761jn}XwW`6cX^$ESKyQU zM_at|_W=KIKEJ#IKAt~a-TyDakHD;fkG^Bz~+Xnn`z{mM#Y8w?3{&U(swsnOs1DCG9iN7E4F@NyxM`D1!bXJJ}`+;u&d{Xa> zNBW8UJK!4vzpMFUAwlhbWc?Do#Ln-K$gKrF+5b?MwEvDr+KJpv;A?~b*p9i&bPfr> zH+<+b06zMUIYipw?H>z~vj;xjKT#OABA)mEG~k;6zpL?o1$?}}k#Q5h(4RjQBBwd@ z=jUg#2mXmi`UpP+_?Ca+|3l#8`X~Bu4`EV>{2&M%p8urIgo`pnelGAa{-jQ@Gd)CZ z5AgqH{pd^m-T4~@d_4cVnm>{7BT+m*aqe;dC+nE$_zwdg&o8F)M)Z>SH31*@Z>DyC z<;zP`&o43mdC@`a&jUW5e_f5=G2r9+?Ncah~eav07%`}Gz|0wWBgMF;y*hxFQ{bM0= z&wy`5^Z!WrrIYZ-DE_>^;`}i!gr5ogzp?)m_|w6E%pbT4GyV)p>}wBau?%Q_SMsj~ z_~U_(&wb!g9^*pnn<)MK{Lz*8EdqW3*Z6TAFe$|TTj0;;;`d-e1{uP)9Pu;$UGaZA z@C~`_!{aPQh1jnJK8K6X>*rtdk<|T_>_3c*gAlQQ0r=$k3C51JcczEPeFnZQ_>c0q z{(1F3auka-4fweBaqr+Yer3SN=Vxdeb>NFhA^wZP=7W6XpbmU7DTE&i{K>TcXq&Wm zrh~{810U~?Wd2AyQ~np=yK?b6^{+<84@}B`8 z?{Ap9U77!(D*yic&1?Ql1->EJ$K1v7^U8k?dB^wLuD_Kz9}-vjt_z&@^@uH@f2;N$x3 z>iXk{%@g_P555>VPs;+ZY=A$Hwl55IUeB+az<1;tKd*cxb@;d5G@l>r^Sb|K0zdLE z_tV}VcZ4}#!7<{*gf7>;78{ ze9RxBk6>p$5II?J9_?ct$3Vuxls_Bzy1++yrn!f*#C|sLasF`L&^E90_ZaxbG#~Xc zEyTVoIFI>r#(d=9{*5WXWMFN7eTa8M7ELinqJkMmD>q`fm8MD8x|G5>Mz!8Ts= zPi7+Z`zK)WPfgl>i^_zqs$BPNsek`-+Ct`bE2>4c>NIh-?(iN4rdI zqjJK3348u7(b?a4~B+}|2y#E3f|@X zafaaG`oXn_g-t=He~JAp;Qvkj-vmA!Aszc?SH?fc=I7^^9^f@o9mM}Rz#k3vaoi*Z zoemxZ2!AE;F@DJBWey4dBJlra|5330`TMc1?4OCi$LFV*|6SpK1U?L*&VwUEv=AKCXW}_sJY|Y8(WJeLg$t`(xze_?hMa;oAWpwxBMrztg}s06s6d z18)A~zaU&5asNazpv`HcGqi3gL|qYRN>1$@k3VxP2kriaK~0zP?u#ng9h`|ZFt0Q;DGSeWV{ z_Vpbp`(*v|%8vj(o%ZEGeN*5Y zaLpfS|1S=A8<9%{K1@M;SJ!_H@L>scdHrb4qUH~ML!U?-xqbbw_r(8b;FI$YxxCKb z5!ybEALowf{V$u`ZA7jW_&P9t?87!*?W@nG{`~^kKZst`_oqVSb^>1$>|-6SvOMqK zFK9lVKLh_{@RvSfU)z~Ff3X{Ni2Wk>yDH%?1O5cs|E}Dh%YY9*q3QVdQ}_&kX(9H% z10UBv@-TmJ3``2)o48Q(N7fG$F3J#o4)F2(z&g{tgPUJZ^U-f!bP)T)=TP@o3E*Sy zl6JK5r$XesfUg1mll8+i4ut>B75*RVf5CTf`?-H%{CKs$2l#(uzn44p{JX2;p8Dh(;5&Pr4{*E69{PDDX96QF4Ng?(R z10VMvtdllg_;tX?{U5nZV~_fYEmd#o{3T}(Y46MjB9{Ps^q=Gouj4PG`DFjcJY-Uc z{YK#9{RPL~mH6AurOq$3kG>PVo%ulI(tuC$7dcGlfbc7TuS?G#+UGTXy?vVuMqh7{EXP<)&B`^-=v-Re+BqB|3c8gl#4nD ze~ACj-)|zHSN|=6kMoB*kx%qu{ZEC+WdR@8FUn#JnHIt?2R`oq$R%^YLiRhj ze2kv}Jti_PsQ$4Kxfb9X10RJ++aHN^Cy~_+qU>YtU>nmI5`GNu@%sqv{e_RZnG|AwT=38PHxnL_A^c?EqyL!yycEK}3w)fvuJR>9e&%0S?9T)~ zu0M=BFFp|e*8txL_+6d9yTB*UZ_s~HhJzsX`-M{D=Vk9k6NGOEd>lX4ndTlhe; z`TW7eE|DSjM}<@Qi{s}dhX~&v_?W-FiDHIG_<6v`{K5F~k^_YQ5cm$jmjpiMAk#wl z6C$Y3AEGposSku75lQ|37rL51=YX#a{^R*C3@@U$vvCl)UQyKVN4gq+W8hnXeO_XR zz7hMYfRE=N)3}jw5&jwAj|V>1dC@`mEx@1r7xwj||L*&{RN&+JhvULMi0K%J|1W`W zK#w2yU(yb5|5%8eV$8q){oo%-T%Cj;1bhRqkNJ!CdG-Gy@NxYk7uT>LyqFYXe@HB~ z|L}75pnk%42EH*JKhnmF{jI<^06ucM!hZ_(f*kP#u#P2QeF@NyfLLI#NKYH=M@84uxXyZ?X$aw)D?@y%8bRQ@3Yk^Pp zZ>GMZUxa@h_;`L`8}fP0U)GYJe6k0kuFeXvuLgW0uut~wZk-Y7e!^b>e9Ry8o3t@e zL1d2uAM>Bw|9Q3FD}nm=%Ow8@cIE@IKOOiOe-iiZoe}AN!e0S=d*GAU^Xk9IQtJCR zwBMEeZ{f0^_g~@@lOYh<5-vX8pLiX=M&i%!AJHza>n9HQxc-ofbH{7^3W1OLNBD?L z3K@SL%}2Y~#;bk#q<{bWFJ8wV0DSWN9c^O_m=xmw4&WQW_>qUUNqc8Hh+Hl3Lx4}l zO^_+yaXIBbFLQ^wiTz~Yll>Fhd9{B5_{QKr$yraK)=U+kXKfJ^q^%A}j@X>!E zXcPaF!C(3aKL+>{fREj{2a5xEb*$NVGvS7$uZPxvEN z{@Xt3?+gjw8~7N%uG-%Md^4``^O`^JfsgwK<_&Urvz|HJiz zF+gNeh@FkV$N4ArdG-Gx@Nxc;k2>)TU{Z+vz9~PS|DbK+M`t<+-x2s|AGy5b0O2PC zAI{B=@2_wT@H+ld;FIUy7<*p*7f+@35A>bH5Z-oLi2uI8Hvs>80R!7eduIxW++o^2 zFTSI0!fyip6tK@U?}%T7ub)P(U#4;Ul^+3o6|j$U*9Tr?A0u+VLt?)e_&ERQKfZXK z|2M$L@uQut@by+v|9%ba5}#04XNAZn10SEC6Tb;Eb%un7_Bc z$MXyA|;`h{IE>w{6qWrBJG{&AaWew^Ncge9=f3|lUBiTb2>2S{Kbe1C&yQEYpUE|T zrg0$l4YMfwxPH)gUism`$N57Z)3IZ0iT(4y$Mu8uF$TQa|3uqIeN4F^`j7od*({a; z*zYQT3C+j*6WV9$!$0E(K3V@=iQf<4+k*dKx=Z&@n|0LriGK4E1LFS{;2Y5PasHT& zf$(d9ZvuRrf80Ot4#1=kzWjP>{UQhVAf|V4!sh@V^AGE|_DDOt{bM0=S->Ap^Kty7 z{f}fWxeDN`0-u+&6Lk|iV>eLi7we=A`#UQ{HURiKwEx(~YyRc|pRE7RY;yM#`=4q1 zO!J25Abi!0)cM_2eiZO0!}xLTcqznw74UKXyJ~;HChGSSUFC-ZALp;D{_g|65%6*B zWK2xrKxEs1KN0wtH@JS(nUFz-@F#5k_ve3x^ndtCz{mMxy6%a7V*fhu9clkb9}^^e z;lB!iPbG@&@>SGybVNsOQIc{$mW7`atZb03Yom9}DIXlS25nfRCRax*C7E zT_&s-0-`}8JY-6g2@aF&@07kXJZQR!WfN&7v7i0!3%R=4_;Wf5yxTxFVt%YFD$$u z@{QqzXbLaX17qz#b3iPJICl69(jhk$5DPaVZ(2v|e8_~`Zx*ZYyUkWdbQxd$e ze>uFca3i+E*Hs<;@U=}xK}23ERs9#DUU)p(ArFrkJ8(6P@Yt)PAmX{32QQS*hZh!Z zM7sqYtrX(8_Q4C=_tWi&{O~G*7wS0wzEY*dzddaGeYU6aiGg#@`@z zDboGii1RUmZs$fpXjiA(xe=Q*;18lE{K5EX0iqrqY@`wW)~D-;C}%*|xe?ZK_iDoZyJ4Q z^rg|C#y}c_X$++?91!O#fvztD#PTP^{cklbhlp=8Xk0_LBjVdk8rRb8h&YaHx{io% z*U@!EjO%7VjNev3?Aiu@khcRXzaY*}KHZLpZwu%;HzI!z-Oi0@?;zcdi1lN19T9oO zbR7}j9;fTvh;k?Bc0_!8lEzasp2kKf+=#rh(2jT>5ZCcFS`HE8P(jzZ5t}OE58@5F z9}(Z)gg?l;L$@Ph{XShs#5}DAM7xja`ZGX`XB{B?$Ev6CHCCV?qI@GD$~DvdALxEW z+*f*`5RDkmK6D)sMTO`(H{w1h2JPtQAVBnQC@n7uhqpfY`N+t}h2f`4!kmBg&;f9pkf_ZvQVtUIs0f4T$x1fEd3`fbbt{ z3;y{9v1u#(LHTVoZl~oC(f&?A-2V^J?f)+k$5}+%K}7o{bR7}jo}}yCi1~GqZs$hS zR|f4kzN<7|qva6s?RC1nf^J8|w>Rkan{+!jqP|;nJ2zs}9lHI$5YM|By8pir^Y|t7 zqevYshlp`#07ScubUPxpzoqMcLX5*lkVDbWv^*l}`$D(3()F)&|9>HNwbA{ExPE$| z6Evc}o^%}%>%HhY6GVM|L4F9}D4K_eCY5Paq1zErzbaklMrPrGdd&}u| zCW!JYX!-v_>|aUuBVs)n5bdSX^)wn+(U=Yh|FPE4^-LPqVk4CQLe!fD{V1}YmP5q$ z4S;BG6J6g-_akEe7C@Yz?R0$y-Tz;RUAyRhZp3x4AKKB*LAoCi^&g_^h}eGwPzmr6 z-HwR!^b8Q2UeN8_i2l{n?YtmT8fo5tA^P_Q`q8hqv>YP7ZKmspIKFRyDBlK%^6hj# zBIXktoJ2qQ;Sb6QV1-7k3(|FN#3o_79TD~RrR#{u>qplSvEHA?0W^xz{fO8v28i*L z0L1-S1`zei0b)T!e@D>mqv&=-lv4)8d$l&*j)>zoqU+pGE~WoH5251ozvm&;zP%cg z1qvd*{onHt>RkKZ^N{~N55aZuU(ZGGD)+zVAsC&%dv1dFxc@y5q4t~qJrC(fr;g_$ z9iJ=c&rK@y=O#ovpH%5OH)8w$o`+DMLv88!AYxpm&~L2!kPgdt~?;YY+*1qDGc7zQb8~L&=a)H;13gIuWk_N1pvh`)LdjFb%9x|ufEsrHe z-&ptf9DZL#^x|Gb3fscQp`pjjYc2C?ulP)OB6?w6>*XUiXZwVkKDx7|=v29Kw3249 zk<#Pj%7TjWmRsL9#P9boy|Jfn;9&dhDZ*MK@%tyDm)_nwRI|6f@IQ8Jt)WVa@79Ii z$H)(NKk9IpV_Dhq*i}JY!N*~q%GHPZDJ{L;y`8y4Rj52~WlE{R&1LF#!F`^5D_E+) zm&m1;ejG*V-KH&`B3X80E5clXTP25=D@EMY@d7m`N%Kx$@Etdt7LRvKa zP3~J=E4elAv+{>-Tl1G6-LgBG&%tJGsq2_hw%xV*;B9ZmazbI*1cHSZJSDiPtNu*i-)cQj34W0R$AL6+YfK-wep*fzqTNI;_b%$ zgHMiaPd=Ft?5))>w0wN}Tu?;fi_h>#VQVBG%jxFx`HHje9Ji~B$|}RAO)s!jblbGK zZGVZix6XE>ho4iv!jtPhtr+)pzO-c=njPI~_Yw@nFe@%s>>7r*Nwg{|!{ zH&7_4_|U?^ilZ+WKl|E!bK}n9kA_yJ--5KQO9S0@DeX!gv?|(+BU)(n#mvD=p1meK zQ~hdr`_1h`<)Zp6vb!|WY72MYH*qOd+J1ZXS(%1eN^?VU zKF_<`f9S=T{k$)M8t4%^<>?UiyP`cP5b=c+?TZja^bFC4#~N)~uZp%T2%cPUvoLxv%|=^oB2&gyXpM;g;VWfbe(z+dR8W} zd5}`wp{X0Lvv2R8J>aU=1gjAd@}Z@}LcgyySDQBQ^n%ypUw+TM$r)=Xh`)Ox{^D;( zNMTou*!imA)c#TZXGwq0ySq8X`TW2ZqY{tz3j%681>lrN6JhovCgKbzFM;aqErqGnPBO ze}7=`-Y*^pi@j9*Q^#sNlN`!YJ1*Prxpcu5^_=~u^#s37zA(vL?e>z-54vqIY1K4a z6{+(h!E9v7HtM%i)V|)ITd#hKEiNgSHy&0wj4|~Wf{}8^V zwmga7D_y%ZbHWu3-*08Ca=l|o2NvE^9J|~zcI!vUH5W@H`kUwWPqSJear63Iv$die zIk&7WTzc_08l!kPc_TorO!8y! z+*KX{;p^So6U5#|dE4(RG;OkV7$DiA^UVzu5q~i^NMXC#C8haDWFOABESz#6yRMh` z&2yz6OE0?|^d7&fcHEuoq53bwcg{&!DCT_Oo3m7FihZq)vtrLDJ(SC8F0S1FsU8#& zy%-Zx*ya1@7s?vg&a6sRm=rj7o|0X;>j~GRwnBD8XH+i>5($nOS3S#l4d3RlZMTcZ zw#3&hz4cb4B#xcORs%P5SZaU-`D;?fby>f^JuPNRIRoebAWJ z9-(c2W5g--iR*{Y>0wf%>9tNrDCpIt-cQnnv&z2P#6A5WU31A)V5`CiP(<{S-;ttj zc39)7>fUP~?b)w+)KvEQ;9M=~WZ#w3zAaMuwjnruzIMd6>B1Uqz@-<@W>VOmQtza8rVpMy@v~?~Tf^UA8C@J~QZ;9$cKOvqek+#*yusfv5`QI#Qb4xegP`^$ z@3mfLMR@3$S_{~#INHzTQ&wAkLep}w`+~e)HSBACPS-hYB_;c-qsm8Dlr8=o^GvbG zs#n5`NBz5-aJcm1nM4ZvqT3RgfCFFrgO91#E>q}z^uD>&;=mpUA`1exT%Rezzena^ zo4=k@?#XXKHRG!!J$IP;D1O>fR5I{r zo;5Zh`mJzlMe;hco`v@p1xGi{8nRSA^0;sMho(ZAvrRUOc4W&L37j%|J!8IsS>Q(b zdUg_*Uc6J0!d{>1@nYe2nRUyJzAPG1dpcywn3$0cjd`+jW?hRPJ#&M-wfo3~d%{Pz z*uIfpcloI13D3yBA*rq&*FCyNZ>v1L%M26|f2D|0Kz7UYmd9(7&ukb!LgMm|M{RaL z_OgtwESlmqY5c?j$Da30Jxbqc*~Hv_S0jEsXKVZN!4cP9_h3I*_;_2`6PZzd%eWPB_{jgN0}xUlVP%7n$^C1x_@F=+2yUT zdJhY+zA*pnnb&9c-&^m0clV1o{8iDDo&;ZcAK)N5aNdwb5(TTvL%H9-Eu_ny#y+iz7~N_|;zaKYtG=j=|khuz&K5mZ>Y=54!5pV?pD zjI82oJ{@0ksz#$t{nf+usXfm*3y+kZ?K!`t;hia$UO8^P14ange$*VPaW~|lPkg-e ze7VDia|1YLPvgrzHCbdF_fV+o^|somf98t`yEE0d23@r3cB{`AA)Q61y~VWpw_53O z>6Pc!E8%y1;6Md|)TZ&~Gwc-KZ|Cs!S*UczT<=Sse86$Pcwb-nLt4X&E?t^q7J69q zoWAUdr`p}T9E~q;6uJ?+Z0mO1%SoOoaO*7z7ulbbJAHd{^&BIYhnL$ z9`5mEakk61`pbv;S2pL|KB!%!y=2GknW1}9rr!A$RdgedhAv89=gMUv}1dmcTW5;Sy*wU%GZl8<>dCNCpPS8eJRfpBT*s6!zdf9`lp?Z8^PhVpZF`h6}SF`Ob+QnD2Nna#2O&vmMX89Lww!OF|CK z*6g{bhfrO8Y<`NX{=10SZ1LBxysu1p5(bKhzaxoKK=$3>{s*34>*@5-_~V?oqwX*3 z?k67Xbz5xZa}}R`PrM(UGmISCZld1iZ^%hL@m;FzX+rJV5!H*lHrYLc5{!MefIZt~sY(mR@4@3rT%SC&uW#IH-0eSGuO=KO{S#~%%8t+dk} z5WTAJ^Zn1gkKYwKoS`&BB*4_uQ)PPZA-Ak-C)9ikba~Nlj^42qOS$wabL*|xI%GuN zm7QBxOxt|0HphO6vh%U&TbJ^=&eBxy3>ww_N7jQ~u>z;u#h(b?Hpx_ZH}}oZ@5f)) z7YMIT>brUVs4*&h9;>7scZ-VJbLmy#)@yPwx?Ou|&@H1N&FJm- zGB)-vZHrZ(;VkktqPoSYWs^#S;>2v9F-b#|QdLam_E_4UeK637f=E za_Lp&)~k_h@+v#gU%^Fx~N>=QgeHx<=Dh6diq_RWhkG zN+sdexEhOu?FBna-;^wxIJ8ptr0jy?K~K~Jo@7d97%8q18?^GeMl>iQ@l_*A0onB* zs#~RG69v=iY97jd-*UHmujXl)M?8CN%PG3DH_uGdVe8eMe3#GVYm0Br%T^nld{*UU z-;nw@PFvSLdY!e~cm&Zfh>xwc+Z5RP#|mfy>|UyDghrAmN}?*>L&nrG%l! zA4Jbr4lGWI8y469Sk%QUvwSm#t*9^wA9CH`$+h?}b=e18dNsK9`bw`j6AZ2s z@^>dDbLrLO*86ruNM^&}NgwW1-GACwJJPPDu0Hcy{K)0|(qnb=Uxz+=`=;$?nQwT{ zjqGWqXY68i3v}P+4}6}mcZ!#A^0D`|J-PIbcgChxfkj={#%O7#oqXKB?D+)MmUKs(5YZxNPd*v{0Y3w7K=V zSOzThF@Gs?%qp|`_0#eZL1R(N6J_D2I2+`B%MbK?BTL$8X} z%%%<~Q%ctgS~Y5#?ws)J{^8hQ>Ufq{ET&bq^>5muH|c3 zB`Gn-xX*Sjy}I0b_ivkX@0FB+M2lIeic!!cjR|v}YSuf7O`dme@6DR<_r;NwGpYvo z6rH$vuhn7m_lF*trxTBN%PtRSG7SFyF7$#2mtMT1kitHBcy6JTiCvFKf7Q%yp2z(; zR-Y&ZWIN~$mfJnpJXCR{2fLrfd z@0&4ER_EOwjMX%alGalivAgfG4>RRQC)X^JJTuF(s^PA$|JP;@y$7SE2iRxl417P< zzE88o3kA_f{Kg+|h~qO7qSugHZ-l88|D*b=wmbGK4a#;qk-TeJ_a6f?>IBXz4q9V( zV8}YJrOhcheGcDRHbO;W>K*^(&4Cw2xv74WEBu^kcjm3$dM>^A?1U7y$xZtOPV7e) z)kn&WH0sS)VzX5Lt$o;Hn;XZn{aQ@5mg~&R7C1V*I%m|hPshgUtnGGm)#p`mI_4*y zJWoO!q7SZOClWR(@23MkBv-Q9S&dEl|zr-xJzl{&LZ zNnv+J#i;js!&*h2?Fd`7On+bd`w2US4xWC`(CH)SAaO9}*4yXWsea<@S@TYKd(^dh zIF$%hzgV`$Z2FlA>4l2BE@T~%J9Tr6==S4Y2loZ7biP_6d1mT3ty!)$>Skd(SJ}Qy z;l4+iaO(}cy0hh^-L>+&LZja<3&@ev3z$lsint}z>V92ty<1) zsI|*&k`{hiaNX!zwh8C^{reVgQp1JPeCLnTS}`(RNpHoe?Q@STe_))M3yMe_@UsRf z?1qeQEA_Kp$&9*lZRp~UWBm`RzA@K|Z!8W=^!HwI{^YaQ%Z`~(eDXZAq%04O4Q@v|o>?B`RqEiluGz0jOF()oyvi}JLQC#8*@G~OJJ zy8^Se?Q2U?8$H%8*;yu){7TH#@nd7RCX2AJwQ@uC#&_E< z^g#a94$-=bh$Zgaaj@XlYZkUbG-6ZA6z#22BKmp$-JE9k@ayO16tiR(%OzyUWLecv zHyQoIO(P7P%}QSMElipiym(>7oV8WeUUJ`6&l=q0^4F4E@6_=UJL}hG9+Fu#NZt0R zeCS$nJAEB-vlS&5mbvU16572ra^lmRQcAy^wNB~syO|@3+~?@5n!r~S z^ycUl^U1qB7O&S8TdH??!yq+XpVIlDh{V^LC1l!-&6@2%6 z^Vm&Mt@)g#cMd3ZyRIK>TbFepGx4}&OiTUkX{HfRtE+cf1vv#=v~db8SdMFf=(XY2 zyJyDeQ>EnsHy3W}x3OW6$a%TA81coIuB=oqJy2x(rrjemFKfU4^CRnJ>#f3MC$r1= zj~!51BE@o;xwvYAl*bJ2dz3A=-l*iy>(Bidp!R)={Y7!9=RLHgIIUxDDX>b{&dA;p zIn48Z|B-cal4(X`#Y1~4yU$UdJ$hElJH_sEEoE!IdYX&ivkcySAEt8aeSX9B4X1WmIOn0%O1~1TN$;C` z<=-<~`pu%?tg=AifxeTqZffXORb&e+o*|cAFSl>+c(XQ_AAYVXpN4qvf2Z-7D-P4R z^?r3J(0Dw@HPnr>vFMIiqx%M>)Z{bZw*ZnvNczY3X#7Qo(77@yrB(J*g`M% z`wHmn+nD}&tm{U#>|-l?TN=F_y4w9w#;(9ErQt_a)1vRT%$~9_L@uHKq4$f=H6>W< zP1Dm9o*);Ld3k}bCs(%AJZw;*&%282{WML@CcMm$ zdvbDN7Wch+I=5c2>IFyJ58TuCl>ai&#iKjRKe1;-`lryFk!zRC=;62EsF$++mrU!~ z=SN#E8k}WXT~M&ZFvt8P`|7ax*|!XOmb!BJJA+&An&_y=E!Q4!y)I|osuG{*X_KcvWcAsGO*)TbH>Ld_s_rtXs_uIj zHpoG`ySp1fIs~Lky1P52y9K0EIwb|^ltw~Iy1ToPdf@*3&pY-zzf3+|V~)A^S!?aN z4^Treb3QL~+Va=j^Wz`y7@J8n4+{55QZinEs||E<(XducgpoF$O2xH>>rPZPWC zoO%zhTkRc*c-k5r<~kaaiUI;jhEl`<9?sdke-X1qU^s8fb9oEnIN->A|T8P7K_-PSOUOn%g^O=oN} z3i)BHd%O9$Qtbvp$@5b)2BK5JBJTG4dqBN|RN^1%vplhG#% zk~pE_A{)fHIoQ@GI>~Y*$@Ha2Rhlqm_8&#zEpPFPKJ;GPq{NRuM(6|F*Pp=w3XmH5 zib#ZC*a8!H!W}_CKdOe;^d#II_W{MYkvS}LCMe?YcNgmDKMUCo*Fd!Xu`Mhd>-?CE zPu`$ZkKSF@&KC&$c{2c`FB!B#P=@_viw>K&^4aM0o8?Xhh%|8gYS(R55&N&`oZq^+ zbkDZ>?RPIwj)=Y&rPu1$VDXO2+-l2qviUO@UtQqb$Pnm?+d{HgJ3{~dPTc0l>ThB<=SazNZyr%j7otu2O<(yy+J4y7U}h=d#RAuB z1azmW;?bx)1)uX4KAjZfyP=SjND5Jr-g`G`jQ>EzY`9yfc}w_jqS@H&C_-ezEhamw z!b8BXxCEl>aOddAlGOp=zCIg)14R8blSckc8tw6jH=GpH-lwf1x3f#1%dI%q)y~v* z&k7ZItJn@&U-uSVo|mswthh!RYK4Wnf<)i+e@O^7I}Cq;!1bDd(U%Nbff0|Gb}CEg z{5yifDApvO5HE&w8tp(uW=z&>Tkvt{c|)amZZCFxG2??Bv#HZ^%$pxUxr}WMrYgTe z3?!Hi0j?>~iJr~u2>)X4rJfG)`1C2YdQ?l2hk zuap-a^tW%wR@@#0x}G2XIi34tU(Zh9dd+}t6&}=`dmHl1o6s&U7O&ddCE6mW*$hgB zT60vRMw~Q~-1LhmrvA>e^okcuAkY0zXKv5JfA2>jef(s?2k zKz>}VsMb}<%&SrI=Z?qQ*}g-m>)rtl&|Dhh1kRO8wFZSIL6`_n)Z-wbcOY>Z z$!`beYN~N;IKQ_jW}0Ec+JjKHH?o4CScl^NRFgdmFuwl;Y8 zk@H&8r$?`jaTa+0S_9p8KgY&fwJK#5b5?$gCPxT%b!NBkoWWvXTk&gD2yKK`GT4~H zdCoe@O5osP9v3zl^9#ZAM2b~Z(!39J`*{M~k8OZ%b_>tcR;HzyTdT=+tsur>Ru=W2 zu^g=P&rc_Dq8z(8SB`a}v&HX~n%;#{vgS5S9WEkgLeH|)LDD2CC~u1AzF6Qs*aBT> z;;B~FB*K%@1ynJu0XCVO0Sv9U%=YenPKLa<_mfoLrEW7|uo=T4GjB^=(ye~6r}y2E zGKkBTiDHiIxepHmTsxqvXPoTS@RKOuYOQNYX@ETc5KfMR;fvkf=BI4PKR z0D|0CF4YiJ5#KoB-$(6GeNVWE7fSqHOGsYr-QFfS)}SlV&>NGNWeU^^oO8WiLvVlu zutJD86PH$xgcD9OrunD_h#NF68xkscJDvF-4n2kM=F+@NBzj5D$ZMeY$L;R zx@7}*S-hM?Um1rEW7I}1wZC+)={=|1jNZ+_9dg|_S(7>&ru$D5hK~bgJ=-;(f>0)hMM3PxWtD0SowFE?I3 z3Fd7IjwsZ6RHzKPCMkMCQ)MTb3cIqiRW>YFj|4rzzPy?zsBVqw>NJqz*H-tf)&Bdv z)XhW@6oC5~=vwpY?M%jQ42JG|)gy2rGPSBSEy&&djk*?IP|7V`be*Kavp8lUY5m9c zL3Y-^-rb?stSOcH{JyhbCN5+-1-P!e0bPw%%ZCqdmB<;X=)F3Jo`>?0|Ec;YMJ#HS z+hN_cx)Z+Bm}U3I@gxumcP|i#qWc*d@OX{n@y_MxL!ksVcg^cF1-K9HK)3y3knS&W zngWmdRPd9YgNamldTa%A(T@DTAQ@9m?`%){RtxQ)WqKGk9MoGP8vO9`1Q!|AuKZca z-I)HWIFSI?1L(f#rRiH=`xr@HrIAj9ur~$iOW~A{5+~nx;JW^!ZzOWktCWGTpbl@VFbMr~HBa-a~R-sd|R1qU1TGvbf$x zObTxW?1MMZ6+UD5q}kX)u5}>2Nzt~SxjOH3V?Rnjrr<$YWmSl0M#RI8$@j)fj1%F! zv-GDLXOn9@OSvp&E)EjYZohR1@O<_zF_nvgA!MG zK4AK8hR&AvM(us2!?@eEL@-!SFe=#)*RLS{zO%cJAQn?r^^lz7sp#FNb0oDqzB^(* zvoRL?zTXB@1^Ax959snlw&=)i#8Pr0Bpfci!K;S(Q&b8!kSu(&NOV=0`8PqNmf2Ec z4?Vb|D7HOJ7v%ZCSf5m*E2#FNXcI<9zQO;+0@wTcGdMsJU5f%+X?eOe5(7mfPI`36 zv0`M}NA8#*`kILr5{x!E8}JI@*K)!e$-!!dJ>~o@&*ySA;uO&V{f~Q=j;MDp5ZDa> zqc0icu3OeaX_qLHLd0Q&Ty?&;KWu0f-5ogUih?POOxAp;CDN-Wc4j&s#Gk`f&8i{w z$xQ#UpN@G#tBQ5b{?zjIo&~#sK-ZNTFRXeEmQRG<4%O=8WsjDP7;pa9Y5gb3-%pQ! z7Z;hfe+iWd4bP1G3^0BzQE-=XFmt!Jt>Y`aix^+6sm27jK|q(VQAuNcJaXi2gnO9a z-_!d?S~z>=RI|&skYocsOGrM;L2qqgy7!sgFIH$W8+tsX$E^SS=C;5$59@`v6!-w# z=U?v)aDe(e7(F+H5&w`jm>u2{tno>EoeuCFn9-OnFb}J`%ye52sN_$P#YAchb;zxvE33h%6 zxDHd^ygrmRmXKd93aNv!5xhSk9ApS5^KcnQT7K0SzAE1}A?~Nf1Gu3;R||EzTU)nM z<nj$hqei4bF0X4ReBo&v- z{Tee|A%GhObhAG^UMdXU;ucu@wQEdV9bWv%|1zkVwPhmhD!MaKr#2Zma3%l=$*Zyr zd#Ls-Vk46kPg@|E$4WdOH%RI1wgYfqpEbY%nn=ca>o90?l$}Y@RS6}uXH0msSwE(> zn{dQ%(Z6>WsisnIUF=_Ac_vPtojk5owN_F86Xu(Mkk8PXC`Z4-#tQ`QZv+^9$)KTJ z&>xZA1TmJ;;h)UHKUDo{=V=6Cm=axfol>BYTlXG6UlU#%g~NWURMx!GLFbqYDStn3 zV5~{F%c&jRyU+k|zW`nO1mTYmToedT(X1TJQ&_6aYqx3EKR(%yAA923bYO1%Ihqr~ zzD-B6M<6z8n&r_U35l8a&7m0jGgVv;(xANoxUXv_I6&4RZ$A{qkYtsTo@Lb1&835&eW?IMo^3yP~+LSy$9hImtzvpkx4>X@R`=tw=$d zgID|9lGuEr{Kik7LE!v18tC?Jk6x%mJKRSXT->y9B~MP{^h6)@lRM*hitcybM#=9! zggj|YmUOwQ{L5oRd?*-ST1!>oOXtnlMNmDECwo2fg0I_GpgZ-DQyDyz=+%6{UB9P= zf&9!a4p)oSPwX_rl)ph%oeA~8mOMYuiqS!#U8Az4sw}=N-rJD2onuG+E9`eYNPbF_=j4#tQ~I}e&ch%{V~)baj2|l8 zyCAI7=wxr8S?t*x$zezO|Cy7gv1>}Jtfpb(rfq*S@ARdvEmng?6KWE~PY1XuK$kwS z4ZZq`6;DJ6%S8psMA!D08!}5$bx^s+yR)XmDzwyC6&+hb#IRym>g^@LCN>F#(9dH9 z6VImt?B7Hnj9>2oaDP*Q?w)e@*bQfL;(oXIm)uQdc2eIs3*lUWMt+onYLkF+ZPP7s zG__>Yj-@{wmlU3;?=hZTv2@3y>b|RTQ)%`jEdks#psV*K>I++%{bIwA>0#_j%nbC~ z2pw$mc(WW1hyLsad_%g##iV!E?~zep8C9sy>!LOW83>p)3ch|w>E#@1&3wHF!1ccN z1RS7C-&EH-LWcXVnK6SW*ZvFm&K9tgB0l#+oQZ7cEj;-n-}l93^oz%Q4SR)zl~Kg1 zX-Bntl74qN7!s(}xZX6sKw$S97=6hgOPZC9cfTpL>xBi+Z}n-Bhp(;o$xpjc19;T`Zcw z)M_fw!-_nddwa6>G0*MiTzv?65W`JoF75i>q>Go@@UGcKx%!jfM}l{pU%O}O=O<=r zU-uqxy_rBa>1%DM2mR~;@Rtt;kSHdKNjsfoL3<(?{Upw;8?1k3i z_#vVOm=j$v(m$mZXa%VimMKBYP3#i}Dz$x|S4ao0$aRB?)#XTcnw67E$=rzHA2aJt zbUE-0ULbHEa=_?I26egYV1H^i#-v_8Ju5KeIlR66S*x<%+4E$u*`W1fE>KEp3&P`1 zk#$IlqLnpavRhbG)}c$<@I<+Iq?}O`j}X zE!B(YueJRVL&y!p$~PZZx5%7x?Tz}i0{0O0{-Syps%QKOqr=(FAtg*p;Cg|;^}arX zg9DVO&?$T7j9Dn#ajeJfV%_ebN;K(o`Q@;}R=l7u_Ohe+i?WRFn<7X*#;K5QtfIUd zbW6)WKV>*w3^zZa(qF5;Kwvi?jJ{;hVYyb5#D_E*wJa+wTn)jZ1Y=r#W{&3b)7F~k zvRK3|dCoH#j?%$4sA}^oJJ~SwCs^XgAgz$6Po%-va@1w7YZ%xq0J>cc*Cq;ucNASu z`{)x_%NP?^_p;0ugI|&!9wB;ZSGsI|*9K^k=@1cps${NbO5vP8KbU@d^Hp!X6V{+B zmH>E8Ed;vMro-mt%&k0;;f~ZPiv=V3%_)%DxsPuN0x2ELf;q?H5P721JkF0tB&xz; z;Oa~NB1Qea6)lxiRsz*C$;A)?>V3V2-~d(U9g@^#83wJR*vTNTkAI9=zt5c)`0|fH zIWckRF>i5GieEZwd;ALXOvZ08A(L?$DMB97K@(zZFim9VGR*7+0{5X9jJ{+LZTyF7 z)Stg=)L_Tt+cM&i9bkPV<7kGSf>#v{EFb*&LzX0Rx+rdgK%Z7FgRG--rb4F%de&V( zxRrlDXH=X9o_D?jUGHb+`Hbu`BKYa*;wci#-*Q59JWm8QXYo^cF00Dlm4^&{2(D%D zSvAQRz8%OoOf~xm6b>MK*6|rfFif)RcwNh1>jk~!*BK}{Ks)$QK7QFO4fBvZ^MR%@ zh1IrQB;zM_MXZCRgeJ|KOed{GxWtXnw?rCgnYSC-vN37@mgU~hnEuJhc$bW`BKiV> z`%nr-UoxnE^Z{eQ!@dc3;!cg}5IL4}IQ2%xQPmyaIF^OcPI?%YdYIT<&Gt<<^s$^= z4gZszzhb2t+P8PbKm5Fhl=NQr2(ViQbg8WZ+a%2zqPH#QEOFQxp%MG$GPm~^#tOBA6h6pN_UFOaN667Bf8hA0+(YEqYu1rM%?xnMf$q{HGq*5m$CuD1 z(|R_Y*`WTZM<{dWbGpU^@eAJr=ACztc~is#YD9??s{wiFdJ;7rly-y&mv8ThTd13b z;$Qa&aJ>~kw>Z;t68~Exb$kX11zGDD;htq+_clZNfC^VP?TITC0S^b0U5n$mh+S2~ z4AISVXdMWaFLS`fbS9s4PZojH0N_>v-2g;o4uw9*bJ$A5Aw{`e8hQ`R<1jItwXfdX z&rsA*6?3@k<{Ef8#&=G__~uAbZ&P8lrH&pOh%%ojM<8#hIsxtvpv#x$e50epvyUT` zbDTo9lB{KQE6Fj|n^zZ4PGRZ?& zj|AXW0bSZ2JuK-8~my&}a2M zc<=DoUfy-~n`+VcRte-M@-(_6|BiHqvFWcYMv+y}jVhGMH^r!#*y}hj>yZipC4R zt_k4#p$6zC4zoFeqpDuQe8}F!B<*H&m=u(95yG$OhIM0 zB0;@R@9{>F2~00B>0(W~AUFl~w-)FcE1~8ocrU2GxsK@SPiOL1AOH4q`!=Sk8>9Nf z5Ao4x)O?bA-VT-^sTOnULF4CjKoDNOlSz{k%sOrtmaoE&Vd-Ks5-zE3dZ3_Qk7x*&)@nNvJnm;8(0x>B~)FI;xm zghxRFpBRH3eJhqk+ZmEep`pToeP{rqFBufh5JSjjQ0{t9V%Dxvl?9Oo<_sMzt8vYPz=Pyb7cNe!e6~W;CfrY=t~Ac zs+}&0eD<2&KZu;LWD))*vEijWf1cb|!f}}9Hcw7Lm(?zs$gNL#5E(O>eUq%9!iwox zwSum|&w3Z*Rrf{&;I;zY#OVnCn0nD9G+{hK2azy2s2EE(mA=oK=qebd(TG^W%ofsF zlM2y;w?w1Y;lF2_&HujROR=ByquCklLv41u2e@rOHzl~_fy2i0%VS4-aGP$s{3gwT zn{4du+|!_so+O#9_|#>If{czzb>{KOIVxWiTV3aewMIJOOC1T9H*JTbukV_`eP{=| z3HN=LzCuQ74ch!s@RwsepNUDm_PNWqcd)vm-2SKe#; zrI%(Le;U*F#mX2u)0FVLC5PE!e-p_&G>TjuNC~L71L$%e(UDk6?^TeQIS^SLOE$2L zQk1GBpYuian)iyKH6YV==vE~R$V(L+;j$(O1>{sBMcG(R^G!W4XuIE?MFHRAyw(m5 zkg1Et`a63yP?BiJ&|>YPmAHSMH-@UL*oB5o@^H{Bf`zXAsaojOmT>~{4n@_| z+!s80WZnGEU)=>7{x1-?zg=MTC4-82D~f&0nV)Ac4`=WX*5H28hw>z-eYKC)=VAA>jph!wiyB3ZlLSF6S0ZbmHL@Qxbm!F zyuih)rjaau>TAxW^-lk1>J_((2Tz%gQARSdFzhi5;q=sdHx;hLX=rcnc)S_ zX?uXK8dsRK(z~MPKfeY3j7Ns~IL9D{S34kC%_aFlZi3hVo_BhIZb`TR?PH^hpjF%tsf`8~OHKB%m2Yd8lNS?zu1R;I zh#jnC$Pr?!TRU6?>)?c~Fj9S8bZ$#|PbrYD^P+4t%mIDq1G;&lFo#<+H1!Nze+yPF zQ!2e0BmA6r73#M=Q`YI?=RNJ(-b1CwjG?8|cc$T5_-`(A+JiPnNF_lbc_V`kO4k6l zALzPUhu|Pj7EZSZeeo6c+R+wslJlETUH^bMx(fdnLhOi;dGng66F&3ZNhqhMg?VW? zsb6)CMX^Zvh%H5RVd5&l{S9>U6D@|yZ(SD?)qK*;syQJA9dF{#r+yS7AGJ_H*GnAxzv=}usCVV5ohF*m#@wjY{e_d`$;ABn0)hcw4Bq(GVQnH44-G@W#7-X z!%qa^8MYo-$J#IS7I5g=7CPtawJ_I&8{&+^5w ztiZC(W-v#t#dUS~OexZLfu;BRRvL}&IJH3<{t!^_DA0X==1*0Pry-&0VLWw#fRv5D zen%BBW1mI#br`WN{(F;u+r#n?CWXocd6{Mx|t&KS^@ zh!}-b=};E-LGks&mpi6*|FSwQ>FnwB@7*XauJYG) z!uCVfU9h8wXD1pfk^L%c*UjjJ(-G^@w<|he6mW9sQBW82M$B2@^vvG*2yp)b-N1*K zb!_Xv7NJgK{M?~4^RF=7;y2pe%Xi&u&b_XRwH(Lc-YV0-KbAsG)@rKqb>B;^yR+x} zzR9^*fI4m-e0>H2-@lVUmvqa}lz#P2X6nsvQAs|D--?0IQhuTi5Y*4)=0(PtS-1Us zr!DL=5i63UL96ngdFRNDeGf`li)>6mHt-K({s4Ch=<1td?=Es>Uq|_KI^9c8ltOO( z@>4T`)2wjF%xnz~FR44^C?)bmOoPIg66m$virZ8<{@BZEfVgh@eIrtw?{y{#u6G*f z<`ib}Gg=icha|T2sjI5|C0>ZVD}tS;>gOKz3(^_!-}%smT@LB%aIcx2+MKRgX#5Jf!$f4%gF95@Ck%^={pqj?#6)w zZHZm?7aas)s8-D8Rw$7XyvD*~aMb~2Rr>z1a#&w$nabXkCtGt4ytfs>2pPmf4ZwX} z+rR+|_Wb?z+Q#>9d22!O9EV0q#lQ)UuW&$0Fk|mGV@D}3vM*g@Ls`&;Ny(1*FqYOlb;`j z(yHc8CJ;wirLBZph$j#Jc+C1i(a9wsreEGCsB~RB*0wlrEBgfk_hA`~zGTq&J0tud zZ4rZzu4Vjq?#`fenU5SlV=gu|ku-CTYO>~XZping2p!NW$>A;$@Og8;gVmPov#wnI?vR}Wu{zo;BN@%Vv6W>2cQ?AhjL?U zk)=*RPuZU(NQvZwn@t34u|Gb+OIo0kaRB#=4WMiJhJ=u}VNuqGD|~cvDpZfqK=gsU zZ=}|r`wQRJ6x#}7wy2tb1>s7lBGUWosG>wo0@;V1bF4HNUzjRQ5dN+Y?nScM} z=SDd;1vm7=@0^2EOHW^dBTvZhawy=;AZEXPZ{KCi(T?Nk)p|zxv{Yqd+@Pi=bp=uL zw_1{<^W_&kUuS0EK5PM9b${`{P0WT=l(Liog!XUG-Wk4IbG_#5)pB7P5vua)IEYUS zfZJ&^cV@hx4fXuBlx(55l0EYo@%zdngYb7g1Aw~?bfXKOJz>m z0I!%RAO4I}OT$(Q`U^6WbFFfP>K&)6U4EUBfcv`#bP+eJ;P6wv)Q$||MBRsZ7$%fy z_S=osXkIi_DMeM;_Fd}|v(m%o5e)tDh$4$pCP0_iXlZ4eHG>&@%<(+?fdg>&fo@ra z*PBBwsEW^lhw0b|1X$a298b1$rI;M8ke?caCWNmfB7GuJ7k;bsyJ_wwgq7reviwoA z?O}KjdY`oPIpX!R0Iv7-Oa%^*Z0l41eUF~~?BUaC_9r;Zi8G@ls5NfHykU*KQ!FZ} z0k)PBLX2W(!em8z`NH>Mm%^gQYm%D{J%Pr^&RI~eGfA-fdIkgsXi?4__BVN9&nA2r zbjPTRt_!~X^u(<(WAwb4V3S@_xdX~lhuiNYbk67Yvr(6t9jxcb4Vm_x-O4%~;mH*< z;C_4rMqe_B5efHNR@Uf=4>xFFC?EDBY+r6EEG<;>!u40|=tOLBchdJA)39wFm9w~d z!Cq2@*q@HcfAO!;Dbr@&U+prpz8K(okAZHWmmqqZ`(1iZ4zqsn&MaKC47cOKIJ;m4 zG>j<=MgvmeF`Vy(M40m}w4YH$0+OJl{~IK(P5By_XOxVvO{iA%(9%7 zb$`H@VMQN7{szNh@SUEd&Dc9nYz;DyjW${2-;SvmT&T^2*g+0o+rdd)umZn>XEe)UWOQzT2j#7{N-gIaPv_-}ienHjeArsW8)#hnqN$pP*e(EXrx=`teGYF}xMTk&le`Muso@}l?W@A}F< z-A-llrd<;%f$@m!-I2d)nX2F;$@znY>^3axjj<+TJCo(Hvw-uR*JllIfR=mdZ8`~0 z>h=r&${(sYiH8e%*zSd`rNT8nmH((Trj%_#z#5Vsj?h-f-h@lcwbyvQ68NH3R75k@ zUmx#ie)|G}uiNY13=YuSmOf)|O&Lf+1oj{F9eJ}BFyDF0jYMNMuFrQ+b0{EFMA1QE zC&bnS= zv5tzvT~&>bNXRDD|M(pN>D0JojKxybOfMu6j{aUYHMJxHChD!(W3*|>HoeIX2f)1o zx@e??kLdPzY+`>1k>vyh6UR0mj3wAbzH#xfC`f<#czQk%e3*dhQR(_Viyg{PM;#We zA2nKMJPIbaZQ3$2pBLc1&J4f-V*c%QP}+y8Hs8|)MN*4@7p`^IjYZ+<&yW+=;2bv| zcE%lXXP!k)%orp=15=KlMNS`TZ3|yCbmdsK0xCh1d4a%vxB;Ut8MG6&Ax9HW0yCf8 z!A@i~XnU#_{*i(6y^S)|UnB}Gi$_JIH+Z%iDnXx{E)_)Yeed3JvOW{p_uF6M#CMLa z5*q;A*J}t4kP{<2Y(wS82kqP}@}DqrW-LeXOT6EDPWRWoL6aJ2HSL%ftB1=*Ewt)9 z+|J;=*-y&)nbZiw?$P4d=~GLG?C}DD>%9Y`FBx=@qt06NT>bGI+nAio(0sJ~`tw(` z_$sc^Yo@7@@g1D}hQZv6@Wh>{L=6VBam2UOii>`?q#Im*{ShUMaN5ARE5eN!<x=7q3Vio@v#4^vQVDKXOcNaw#5_p}!d5 zdLMx<5$c6)UOvJqvZm@8q{7*b|5vid{#_nN+w-XFF- z5qku68Ps7)grxRcj}0QYro1_#JYVVR@w^Pk2&2Hr!_y(@xJ3)N}{QFIqZj0oMl zw8@V~ENoAqKaa2a)hVJ*uf`Oq2OL1s+M>o+xy(B#1iaBN5V+pgYX}YyS8O}Bnx9?AwtP14xtjOC`XiaA3H)LtW680e zQZZHx#}Fk30iTDUfNpkumab7$hP5bE4Eq`TH08M&vt`;rbfD+g2gi`$BGP*t*45Op zsRx53@h_tgIO>eaem9600kKrXoEtrCeLn&9f`D$b&pVW-(w^-2@dGbyobW|ob*U3m zS=3KQHDR!>n{>p5jdo@otXmYEisO1ZCJf)@A&DFp-^s&j#BpXfHMVB}Txg){EzE$; zNHU49cpo|=oxX_l=ea*%Vz?bY#oA&N+7eOArsvHDQ_7>=#Z;Gj2 z2Pm#tONuN)&Rp0yK1Ou|na-t5aQ*?IqopfM%65ooM`Jw8;0f@J;*N2iipL|Ckh-#B_ymWWfx zOZ7humTTQAF5j}!s(hOCG;SS}7WLh+NyQzu3Uvaw@IY542K!G^%Sr1R$CsUBMES(v z=r`ZnOjwSEHOE~W!iljBVUZI{(~uQ_W0^)JF0Fk0&hIdoZ+4iW z<-S|IMY9nT9gSkIXMgZ@Lj=0PTIAG}TL&IH|74g54Q#!jIja0e{CEE z9|dSW&GN-55(|eIBS5_5gqZzaEB`aj!1O02)3L+DNjoi^j0-}WjyB4w*dbhf+U9iXcb zEHb^tD0HzeA{LAMyXDI8U|=o)hj^@_kovL1l{6IKVgp^-MjCdJoMp=HY7_;V%ca6o z_*wo9oVij(yK#0H)RaN!=wk2Ob}9=S`z==w<-ZVqBvAX45fQSLP>4ejebvbT7YFF# z()3JQ+YlNDGg9$;U3(eY?0us?=zq?X;u@;F<}blZH!h!%EiB$MfsM|A?v`(h7-+^* zMv6zM%e^;M?fAa&awCGW9^TK zAYfq4_#+!-fXkq^OLQ#94O_C=kx_)r~0(+1YNY8(v~v502d$VW_$5t zz!6~viV!#`&|{Nx5_%eXmDQk59qqyFnHZKW>iiEbV` z7dFh!;KSgwI>03Wx~NbfN&?&##+n8UHf?vlX2_WMdK>kulQEAU%a(Ob2-Gl}G-f*` zL2XxX*x>d$ zj72DXnABKE6+dTE!DugN6l0Zz|C>exh4)dXSd(yxNg(uXW@Z@AH2_>9pj*>RmN?VW zdj35PR%AL?FL99a$7RMMERx+IS9UwK$|(=idxuyOxg@t+o$DeNbg^?H(y+FJcgt+Q zK+3aJlE8T?G0<&jeB$EC$wd4M8M0XQ86l9auy)Ip&G9I4D|^>s=<@pmZskXEZyxGM z$F`dC+sLVz(~Eq0A#bv5CT%{;&$n*?^^ySH!WAg^C^I`4zA%bG-Ur+7GZaQaigN?Q_L;}u%=z1Yn5O}^3ivT2Lt0bEj`+wC51DUaOS z=`r^aCnCXy^B{$^;{?0;$<(RYM$JXEf_^}Ke|>$gKDg1gxuGz(q2Jci1I`pH>3(E6 zfixng3E+|e-NtflHxV+ngxo0DplyHX;wr0lVQ%CnzS4xix_tXAWEdD2ZLJyku>QNu z1iJ*Qy&dIYe7S``SC!kLKRIMlf&C>1y1}1SnL)w}f=HU(o|eqk!d!xfT~f_bl8yT_;0Z+lFkO!o?j zlEY&E!k@fYwkW06%#rW&YG}m9k@k$8e8zFxG{gpjTS{W>+12@3r$XiLCfwjP!+$QT-y$kYkA?ob2WPwyd=gihNTiK_Z9 za>;E9GPGlTEv5%9I(>wmKOpIA|Jq5TG)*IvOZe9^eM)P|ayLhLRp$Opv7|vJ^+JlU z5YPu2po^C;yc7K}v8Lx^LB`FhhH6pH6leTbYGM!a!ae zB5LiHeqzYN4!%G2%it9NxC}s7xsP&M1&uzZ01>z3DFIhu9o}Mj;YgyK!EH#2FYK+q zlx0WoKYy$I8-0RX%1@I>97JE=nkd}#)66n`iwiaR-<%c#7WKtv1iDYlf&1>kA9#yC za4MrrcE5c2o?uBfS-$P*kv?|IJW}!x!#9mkH>eRBNA1{|tYhIRSs7HhlZA>ap|Y(-4Yq{#qtCs(?Nt6Y;mwZAxu* zvcEYtYNgxQi4y-b92G?z#p)Lz{xq}G|DWssl9_=n#JH7a&}lq6y`bso`CTo3tQaxH zUdce)HFw^dtSh9d`0rI~mGhS~V@>U-moUhPL+jh@H{@oO;njxwB59xh_x|m_e>n}o z0(9MtR848%CF@O$xRoKq0_$26-u_V1-D@x8jl*x;ef^#E7OpV+ z8;UV6pMSn#Zy+xNKC)~6S1&BYYrU*MSI4%<5vRBO+w4GSZ2D<*oLZ`?4FonCw7TOJ}oDdyif(kWpP{NiSIP-Yc+DwURD#F7lCrJ;i0;z{Z!* zg(H44ejS49p*||-3xUMup5p-Gn$EuA;lWn%fAxa?tM?tywN&2b=(pVEv6!DKfL!oL zc~WM%P~P5WSXjbs=j&}{xD<7|uTwWg=|;w7f6B$I+Hy*vMSvQ1SK+=w5C{NMu}31tOJmqYQG>O9~T2 z9b&oLy|DHghZWps&M3Fz8P%3ANl0gY_KIOaZ;`R{;Qycd+TZs;7e&1t0;g$DNTJNU z`;O?`_Q)xb^rFQ}V-2pJU7%575r>1mVP{<%tER-+rmQlk{%Jf{K6D#hH{e@_KE~aH z*#Ehpm&^rpk1uB{A<20g&$9SPT~2-1nS0)0PZihA)Uh;;8EM4)@aPTxi#l*alqA-U z;1IP%3GqC(>ahIPj)W9;$Q@>_{y+DBe_xIp=yutg1a0NgA-TY+1_?%p_6S1T-Ja>cCg6KL9-#Zn5(@3u zD`^L#SuKcsLs^Jvd?*|NH!E%O=mbNPA>gxIWse}EN*|GqYIN^tjowg5y(-?0F!eKz zxwd^woIP-^!3%WnTuib16HbYSF3a=#(KmctBH7m%X!(dvS>-DGs&h5`L7jMsn}I(U zsk^01a#U~btq1)4#t(Fh#(yM$ zPVmOF5hV44zjLq&C5Y8Z<4=)m7)WMg6m4hR|LlPBdY>Cbg>SU&jr=R{Z=Bi~cv5nlSHeOBFr#zp41S29a(W+A$-n&41)_s1H>_ z63Iy(U4A1r-}1~bFQmV&e-w(k+=hDroP!Gj-3-{=Bm`Un8Xg$<=35zNyHg|sLpJyL zFvO$ruU@Ch^6!1hQRQHU7t75L115E$YSvm;x;j%09OK)(lQ-UlG6VW61ayz4$d3rR za)r*UhWzqxWVkYSzmMGx%F$GLkcq=Rc2|n5{v&~{`A*|!B)KbCqPV09^&4F%tL7by z=ys$!A}a8H5C*#El~d?YaN2?1b^TL9ETn(`>WIG8wTBcd#rdU~MoYoH^X$@xf*=nU zsZM~(#W$odlJX9gboJN9wNOUwc)UFDJWCW}rNDWVDA0viCzXQ8Dk9hDc@Y7?- z24U9RwmakIvg{oNkJu$ctj(<@i)KEcUNNBCyQgGL*1u9@fKjg&s?kztdmB9cC#5_8 zSA0^si0C@1E{d1o8Q13ZHGWl%V4CY!Gc=Qcl(XR4;vXREwLK-^b^8c(rG9>cm_s^{ zn~DtYF?$kV+LB`TWhX!&_>)0fF3pb4P*JtCLlvgY=Ud~87O@8jRj@6IEqs(!DJ6mT zBgOqN7f`P_(9JRMRmL;W{EZrqNPB7yB7iB%WwTvWLcS`Rx4}y%fc~9>o_1?;K9O*B zk-UtLJd{l9$4NG!ZrV|!X+Gjf2&`8E=yu@mI?6@Dxz7Jn4QS}GAVYn))M(`ygXDhy zD^}{PLsiNx=gdzm-Gt=s_hN&;Qwx&Dj32A|R8 zSTffXg-IbL+Mf*JF_de^sP?+bFhti!y;~|qGRF9h>%nb*g49q>#9F^{X%V8udv%hFPC$-f)KztgCcX5U8~DCk4(Mu0PZy8Jtro7(n!V$0N@z4Sn)(>x zhro5x^yoO^@ihGpdH*L)sgCH&Ina?YBxlcf;a_e+*_=aA#CXv=7-v#Iz4AcU|NpV~ z9#By!i}1T=A+HAP zrFW>vnjO|+j#~Pn?VXJu=Qg=ku{UWgQ*W!( z%=v0O-4hD}`w6=beV$lQ2lSO%_GH#Nm*wf83M<(Ajv7LB}VN6mF!r=0QZ zj8d#URlnyBN6ZLW_QoA^8cw^MldW1OVuwq6`Kd4Q(u5Z-=vv3Z6i@X7RFkdzTj^m1NJyNB`f==vsU!&7bJM?CDq9P-8%?;rM95Cl7&;_-;I zsBk_#Q~lVuOtNWf|EgW@LdV-pGM?^pCGYeNl3%Z!wJ%Hz)8 zqZ#Vz;)|JEp0qR~#^qWOirbMo7Q(?gp-Ig)AJ1%tKR42bz0Y^~>i9Pg) z&-Zna7ap;CY|J0o?F@pm+*h{g3C-&mJ?}bxpxf-r$h|48eX}f>kj~MdT^Vad9FqZR zuMX@TnI3#}<%KDBBcW}l(5-Kt$2B^*)$i;b6_|UUWcPO7|5nGRU!#!9@qw17f&l}Nl?QS<${yHD}Ydon7d+%oL$*OrwXMR-3emguAN}*u*_7au;lMfF{ zpFH{&&bitb{qo+eQ%ujpz2a0IL&k3r9ZwoF27MG`5{yefGHE%0+N%e9J?^C&Ty~oK zutZ0{n&vF*+`NY+0;ZRn~OYng)cP&A1@4GZ`s-KpyMp}^doKWZ{s^956O&9bX-P4 zw;4;vPKGNz$q=Jx4?v20=4#Ree)H~4cHL)d##Dn)ot zBUMw}?s-{aj9TQM@P(V2B5kh;j`ri6Ffnj9_PtN8789KVy3S^(#@*8D!PQ`>lmYi5MUW(M8~$eTin>$)eBrB8R=XfYwy6HpP9hk%qJ2* zpLICiDfMY$r81;0#ZWxYPgd^}Jof z_U;*JxgV0R8y2(fDVN&Vs;pZ&+*CiBC%tJ(AX25E7GU5pA{tugcJJ!RKnLVCgS~9s zl;%lkyB^OOs6J< zQ+@CA{R%vm=(+7*_Km7|9vqI5!F*yuzb+{cyo02h!@~RZ-IVCOC{wi< zKF12-&^Xs-zSFg7u{E>c{~pmahG5ZVxj22!iysqVGY(>v4LkXewlqA~qEHHXEn)AR ziZ(InZ_jbj?4$fBA!D&yn$ulfQCAm!Fl=qEDqOF(FuS4eqN8}h=et3h%hT<%Tux&o z7iG4%y7Vqoq>=VMgS>ZOFBN}&AkTp0uZ-RsEJbo@jptsAAILBCWpUWa_?Lg=jgrL| zlXzv5Z=T&8tcN8sTR6^rJfWR3MW2!TgNX2|Y5?T5g1zE_JNrRye+Io<@=eM-%=hY) zMTOe)3`#c`9q4*hr1;)V;qjYxe78~!l*UqeohX|WnKeUI#wTQV{B@sk!?qFfTEkv# zdn>`!%@hBw>c^KTRC@b^bfEW;E7ii=*uu} z9LjmmLZ)vdz>)!9f3tzTY(w298fG5rM)b?RdCpzIi?m*qM3q*C`V8DyW_UYt<|iwD zkyX^QE&*3+uRRrd>lHNMf8oNJS<4G!p$oD5UQl~&VehQDs*d037aD!1r|)COzZ6eu z`F3{&tN7lnViMxKlgyEVn+5U-MU8K#Jd&0|urHQqdN!r;k>V#dxl4;nlZwFCkL_S@ z+np-=dVweMxLX=Ue2lhUA*?UASPf(D_5Bw4>f9i1f0Km6__O7q9}jVo$6d$r<)zQ% zP5kjy=ZOrdRlNOmYN7Vtg}roknDwFwcgn@d-VKYfP}~enV(GU2P&s-0a5S+wVQ!E+ zAf+z%Nm6{xb?wfp_{RFLcuwz-jZhtEs%te2UONk)&)dUZmQAcyf-|gQjK+1QCJjGw zNvIrNO!JPuJ5ou|VN$sCy+hk~c@JA+Vr@U<>+anvl-eoCy-WIak}u%wzjR<60wKJxiXKJXVnGU zOz$SqABR2GeV-9L@;ijyaHw03_!dRuNqa}}j^c8TG9Bc-4|{KpRcasi@h~bmVYB~Q z`O@}=;@D)*XfrZsiiJM&MRPRHRkg$kX7zj;uzcE>fb$&)Moxb4CeH-$E!|eYzVfP!{{Eaun{rdP+!|BTC13{nY+2W9fM2i#O z+iyx;g>HLB z7w6v93BtJmd0k-dt0(EnyD#FGXLrB(4%hc5o&+T z$`>sr(DRzuFb{^0|^v z*Z4AHG|OM)FUZBMpIjwNN_!^8eg*s0%x6zBTz?M{uNU^6n+xxrq`1}`-BL8&)itkV zoc)3Ea})F3Q5@9Xhp;z2X@<ds!1_ zXSI_Wf7v<qLF_`X}+En&kUq zQcdPX&(w~dAJw?9MQ&ztu`ykWa+OC@uh!Ma*lm9zNZi#zSS_E~$8dglNa0oxM+~0Z_By`X&~=*!Hx3f=23(kP`Lp9^h+}1? zR0oD?!?sf-dw1lGhv*d{uQ%*%xUMj8sP{vJIq}GhiVZ(GJ(jOO^@8R1puG9Kc&&Tu z3RXdJctR5bkssCXNjX^GY3?wzcF~_n@Zh!_DXro9>pIzAdGLX~a(PGes;UJc0zWv3 z!nJ6(J=GQ!!&Gyua7fD)Pv|Z*2R`JCo}fQfvTnwt@vKYo+HAzvB|f&3oVAZvMp*E$ z;qk98?A1GMg1d;-wYHnR-yqH8J-^tMSclvDebc4t zem=$>UjvndAM6+zr*1iQC(E;z)tlbCIPdo6>ALGT6JaOa9i8|egdvRj92MybD^vwz z*kkbV*dO+0Oh%84x4j#<`3c*3(1S%HyL^cJN4$FL#i3E3B0}NXLO09)KW*+>zG|W@ zAz1s?lI^Jj2DUz{{ApSAmG?N2d#eBLe*<7|VYF?~g{WH}M51lj8SeB183@k`CmC;z z>rrW0eC~fTZ<{rh%-cchzvoB)vH587<@N0{mvn1yoosA{XMJ|rhLAT9_D*l)t&j5r zw>}U|FJV$IHmsEU!NvZfRz}k=CgKOP)_VMDjk>83S^iGL>a~{J8TU0yGICX%>Bk%? zS+A15P8Wi_L9o|6MTEOEfwbD9gBQDBjxbW!ytvmo&df{^(aT%9tb9HF-7bL++UU>u;@8Lp*F2oSfQ*f<*Xz{;{k6ew~HEUaE+! zSaYhnEAJK4`Fbl#+eKEpu5f(ZdlS6+YpzD^WkKqd7psBHUjy%orpU9oFK%n4;7s)7 zb7d<@%2eJ{EzXA88xDK%(lz~yqJx}XeIPuEo3^fTChmK-L%M%q7k|~iFD?nw*Nt#M z)not7I=EATTA59H?c1->i?uTmUwG98n%SA3>I**=|Mbd9MWp(c zs0QD|%vkfs!^&E{VpX;YVfxu$D)JKUitNw5p-qFl(Xf|2xtX&Z^BY-Ea~IC#o(9&Z z%D+;>o0rA;r7k2ii7Q1WPRO@&v}@O#WBolBa5LzYgz=fx``vQYw>68MV}?HyLf#nI zODMW)ke8HS%+`lHEhIRvf35DWmz(~h&&CbDnc9`xd-62H3rXjx1y_|~lfv5U(r|6> ztjHF+J*j;jVe#0|A0DU1!d^WkOQukTYfRU3Q(Ogu^%tn`zQM>1y;jba(6@2QbJnjm zX!2KG#b$quhc7S9+jf;;friqZQ(Lwf_Qt{9xAk%})6x>97&Z)44Z$SQ zk3$#)xaOOe7_e@NwD@}ai@$fB89E)w(R8rS@~7T@iK0i*cJaw#3mIpKdQ18Ne4Q*F z_BwDd$`P07a&%ZtmX4LZ^|x!GIrJvx3aSd#SmFADW$->KziKJPq34}G&l4Znm#1qi zJ1*$ki+FBJ^gbrbO@!aa39#2y4NjdB^NlK#F8^VK_-xzW9ly@TQZ(WLwNnz(QSdEU`jADFX=3ATH^NNAuV>u%vpN= zsY9LcmYDu4gyl9FVvCDp9V z9e;G!tB%kI=sxKssh?(e$ri*WBeC_$>0$S|r~K(GorTXLA#XD5eYGq4)^x(cXjMPW zshPaF=P>87mIYjazzBzKy`xX^;(BqK@ z`$Er~X?+q!Z0apZyieXbk7Bz)-c;CYb3SNg=+8h-<2QPhsq7L?C%tDC3{{#9&lQcc zbzhmfG_NvG=MD4L241nnXI_2TqY`cTX(xH;orli1!b_eaf8A&E*ZB7zC$(Tb$b>Dn zP$&9`SAl`HNUf!X`f#^TDiz19uI7dvo1ub6Y9$>T_#Ui}JF|Haw+HPq6K);KG7yGG&k0nC9s#{fzqxmX^CZu9aGyJ(Cm_ zLa#$_-(lbEEne@8+Z83#?2DunpnX5M%`?1P(v9~M@@Bx^cq95EPf<}WuT2hDHzn+g z`tMHKawpXYaPG91_{RPjWHb13yzKF_=xRu27yKj$-D)5}SXgT7h4uAP40) z2ligzUyb!NiB7Ox_NG4d>ne}8+jH-^X;c3IG7e#J6}S77cS{^v=flrMmsByo*ok`~ ze+wKsI}(F7#|2p(vBT^jZ!YYOwa!#-2_qY8y)zN8VOd0z@vbgIS6AIO4=+l6H_HzD zh(w{Q_|xQv9)8AP1uchdsaDdQ($YinKDom1!WW+*cM`q1@hl2!F35 zAND$`C@{SF9#E^nk!BZ0*+1Hl7lFZ5-K{=!&&s=C?5e(?-i*sR<^r89FKI_p1&Jeq zC%5%wpJNB%(VaQZPl#s$<)HxfhLyy*lt;UINr~Z6r>qh4(}yUR3^i3g3NEymPsV3m!)m!rph53B=6HK5l)&;3p4w zqm?}y#$R(6KP#84r`!{Eo@&W5?yr8?oz--H{M7G21$(TewVuM!);bM?mipu9Uohw7oy3e{6r+;gYB@Og#=58GyQ`O~wxOxB<4ta;8c z*<@zNzKIrn6e-%+cCpzc0scNt5$ttW-rZ`^c>aldVEWDcsvGsQX_g1}8O{C2Bu;e{ zfj3W9MQ!srOKAlHibH)HFEggvuV%&hTqaiv&6=3ctPo>?+FJ~J_Y*U_!`Cn2?p(Po zt3l}=`||9=BPIvRPZnh!+TXV|5~j1oj^EQ*`7`&oG!Lt~xY2SzN9Q?Yz|4A00+pEzp0r@g3J=_TNM=-EOqd>Oh`0SST6{x*su(yk;ozX3)C3~bY z{O0K+$rH7dI66tP-(6L`PR>GmUg}%?PY3F}gH}yvO~Ry;eccqpxT}m=4CH+Udx_ZB7DA_s+Id#5 zC|f#j7W%v^ey%^qYLN0eilj1)oGQlT4uc@IBr9pR#fPot!~8v=unq>|sZL%8KJ)Bh z3HZLC3fOy4y;u7Pd$uBYjp^sa^0>+&Sz=OCUW8YNBZ+>7sb2ZJ6>+X-TcdW@md=y$ zj((WTEvQN|%O;-HgstAJ*Hg5v=#U@P@oqu(w_j>sqxzt~MR- z+XK0Z*aFhQ=fPL!i_aL+;9fi#n_IF5qprKd4!^`BMXUJM=c2Z;=l-h$id@4C zJVVI;u=)EqUk!T)!d6DOzix`mku!CXx|76EKNWj=ut8k5P9QhJujg}yGA#U&vA*Ux z>zOY>YyGjor!=Frgk{Y{+jv8ra)YY+2;0 zQ(q%U@Oifi+s{O>y6$C?j2zKIv+c_7r|Yj=qVQ}n$t1{sclUq4#&s(f+$v{vy-Z$e z_|}4pnRqS>)ZRC+7iVzc%c6HRaTneF$FVGmhO!5IQ!cUEvy(0}9c5=*c_yArp0IP) zym#*&z%FpV72WhQNwferk?_L`XQ?jNZz;%I3wxW=466EUKR*p8XH{TH+#*tVUSNWA zk@*@GlOYFB#`71dO{$tfWz*A=${aYjjEPGULN{IPp7SkmD+pTQ4wS>k`M0oldtJ9^ zevIa--p=eJgO@R5gQcutjB;Pc&-UP59#y6H@eeX#>U)|%t!d<>9OAb<)O?c-GqZSX z?-MR@bNx~We7txEd#S%OW1Kl|Z}fj&%(pqiRLxza%yp1Nf7dT0=y>1NNwWAsz?Z(N zT>Rxw!H?v*{x1Xy1353b9$gO*)5+Dq;g^K+@E-P3^uEek%lpLoM}N&Z;(4fA@~y9Q z@Aa#Hk5w-b9wy08oaVaw;j&N0{RjG=u3|=h;N6@ZEK}|&BjSr`KY+rCO|GAyrJk}N!6P?b~?z9IB9gxIZwIClPiKw@)Jo^&K%`D z0)DA0*7_cbMHVfl0f$5T`H*8ONah}bQ>i+jBk3ZJ#6peV7;#FS|a2A++I}|VerZj%a z@vC@FVB^%3-yR6L&qb2(h+Y|LxY!m6bqg%3|Ca9RJ?`XZ%wdw z<*vh@hn2~dvm>X5xq}|$HJ4ZjvA9O*)kbcOU^wuo=f^BDaP8kQ>>e*7j`s33nYL-;khBKDG zZZSH~^s^>7*aYv4;9YBB#^#I^<8F1JSA3+Clkx}3!zb9wo{TS$j6r)-L&}=VB&pk> zT@{y5;Hw56Ul;qO$0wuFguB&d8D{9Z6KpteJpSz zxspI_@cMPnDg2)bEo>ZlL!a(+^0+EKIj|ApC79vPI?T1sX{*7?P!(2mQT|4_D-U_w zV6UH7++MKYo}_;;%}1sInSEoz=UFoN8dF4z9m2S{^XD#!zf$3nlw{~qG#mfpWO40~ z&W?zcnfOJSZl?&Qu+KE)ZHK+)r-p7NUvGGRs=Z%)BMAQsu8i{%*Av6jeOkft{r>FT zhgxQW&+w*|Seq$EUj=nO4DY2l8EVst&plVy7AP2{3wb+WZ_fKO~sgJYrU{ zlX{&<%nWP1LRyEKD?tfCu9EkC*fY%Lr(Av}n2=L?9%oz{QdB#%i+kdy?vJUlB3}yk2F!I8UTG6acli6ZX0;yY;WlskX@q&HZ`K zh536_G#kFFE zyj`%D%cg_h?f1D^y$>hE;I4i3vOE00Po2TvyZrc5P43ZA-QvY!ZLEL~PCABJCcRp| zZ}6_sbR_!u{(8Y^#~WGR2j`(1_NtE>3#SiZNw}Xa=P{sfx6{p4=;YHQyJCjV;HW=8 z5>DD3@XiYd2a8!GGj)|L#MI|N%-|)JN##qGXB}}#>HbiAdth%nf80FpG|q7guA&F0 z|(+7$V-7cb{P!! zb!4stB!tk_KM@eMQq98+VutVc?1jB+m5Eby1| zl`u51h}6ztypRzp-RiR+IkHW|UAj}%n#R?AyOcYU<6r{rfBRtX=b9#_XENsMS{rY$ zL(XNdxcF>5Tr=`2Wpfk$Ixl~5PmZBOH|(L*1^U@#N9mU>smGSA41^Z@SfqztVsiU$ z;P+cU?CqK}Ia7rnF%={&d#V#RXd!2BqwQyLu8*k`SD130#K^~Bwmv1BWn;F?CP~}o zz|W3{Y8@6DP0dC+Gvh<#cgvvtHUN7a&wbZ>?DO&IxgYL0YLd&6oOIYrG6^CbeSDlc zIyV|3gS4qsiM_hpT~+qGS?7vUHM3tA)jjg-)3UmPmDC%Wr9NL) z+YW%dL$KHFFwpbSZNecv|KvY!<__)-%?DrzY0ed^n7o~`bxnQop`q~MxA~#?ZRK!^ z`hKgNlk@8zUbPlPsg$cae_m!cg1p19H|2`X{ihiM$@g7NGAk^azh#;cyvZC86OEjF z^>FxGeG+kT;RV+NOi~TCqn09X-gDotJac$k6X*Zx%%9-pU{?70&DW5jVz_b3$HC*$xlLn`lEK%H$6#;%$FCMvE7kad739ua&!gFl6sY>~sEF6& z)LKdc_^|ZkmoOJkmZz*sPSHLs`p8c_L0X$z;Z$D|%icb+dPWd_zm3CQI^tl1vzmI{ z3%`gYEJ|)$J(;{roou1-!&T$X{5z{-vN!eLT5&cDhC_cW9X)9 znZAO~{5O<`3D|3SfAd#^O0-*jPf}3mMWV?ca=$OS$GP}Z6r}pd7f&!xTMG_5mN(LW zZ09s+o!GDGt28uK4azMS6YC6l`aK7J{eFkNLx&jCmZA)UT?)!lSJGZ( zP19@|xyjSo#l^E}N@%I*^(2yMlMXS-nLGF8rg(iGHW1P>-OFr%y_2w4+s!AyFPQk~ zc)zyAg(!sZyoLR~hS>LKq2sY18?1(AU)V-r9h9#>ttz0S76d<*EQG`I;8jJ@e2|rz zyGm?u9+ZbE*qixY0dNRMjm11@rrTG|4YuV|p2g928GVD8XbKL!Kv2^o`eN-1C zZ~TlqSMxK}B8r8_A-)IeT&Csv)wNK_I}Lj+AOGnpZhADpA~3y2k$Ou>&P2P!FHO-R zS}4WI>}0=!Acjgxrkh;-CN2h5xNx6OQlVr5P3S@4VH-ZSq5cK?2`F9<;|h;191`1B6<3Y&88sm-9iz+Z?>ScMe)HZR`?ph3xFY18gS{2!UMD;w z*=Jp~BvY<0?DJw$?u@@A?)s$NS5af_l&wV5f|nLum{RbTQ0&0kMfDCdi3@fMo{yVf z#qw&_rZq}H-g($-^5=rVT71RI52`Qqr!tKq*w3XT-(BSQD_q-HecXK%rx@}Yi&)9Y zez`$}JM~@Rh=KTbt&?W+o25kezj1zCr-ZyeVXttvl+?(+>E&sbH8FM-U;}A@CDcl-d={W z*4o!Z(%(CbVU`cQ{u0)^Wj~#llzHA(a9|`|!v9j~+2oGQ9(jQ!N5knRM|MZcO3&QP z0NvkY_w8=L-#1-^y(_;$tKVA9zOms9x-_JQclh;&38R_Ool6GcluN9R_6kE0gUa^1 zU&}ZqQizvFJV(RF|Hv$+f72Qjtg)gQ@O=g4VF~s=V3Fl|m-Z*rSl{3W2YuU&qkkuV zmI!|0*V)I;WO0^63AJR>U$%1JQ%BltDv~{l$|+Ne6e7WKc;a$GGBvLx2zi%buUk{} z^&!h;G7*hgc8p66YnBN~zFc8V#4*0~fgdwyolEbrY^xQFvxW(cE%`;{?wWQ5OC3^- za4a#+FVkIF>V>>3u=k^jj4;d9AB%ZslJltUR%w@zXsD3)yQn#3{yN?9;&9PT$h!u6(}{|D zqy3%_8L6&nh!>rHf?bk=>nb2MgU6*7iQ6A_ms}*&3ioVyO)wvUGYPjSr5>KJm2F@) z(K{7N#(OyC8<2M$_V!j6$k7k^OSHYZRzTNl=5;jXEhskWpHZH0@{x_ES9)9H*N@ZD zGYT}m<~LO70(-tVES8SE(CA2c#ZqQDdzKsWZouB=?+nrrXWw(r5qF80ItOg&h**E$ z{k|;|Lg+#6z+#NGXL{W+eQ1;BIx}ldj93YqM9_9@@7*B$OAZ`ZeY@_~karXI4v#xI z+@7|PDe`(s{H@t2cUo=Hi(th%GzrhF^_P;hX_CFd=b1!J(G?b+s1HdPW3`+q4_TXV zo%ir`x!!SmIzrwp*gHA$^Wy$s_gA%kYN?T~Kba$qJ5JlVH-4BaS1i*P-|~5J%2lxa zuDaTwoELLiXoK|obk8?Y7k87hbau@%zhT1X-P^F2`UNki@!_;r-?I_7AZ)29=s&$zmtfR ze^ZgTv}!?3=@SfjcVX{^oX0fRH1Qwfmw4Uowf*G8szZKe`(vGkrvG@?f-i?EE~N;g zdsfUW#us`9`+FzHSsVAV_P?6-712sGVT>5T_u1^hUh4^$>>lR+pi#9tG9S48N2ZtEYnqaFA%;oY82-O?`>>Z^ z&oFPmtA4fgB)I6^*wH8ZQ?58xj>+GM8nutq-jl|# +1>kGTuc+CG8|1~!w-2V87 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%0D5URtlt=+0TWIazr!!-h6hAA9amKRx%#Wov=S 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 cb(this.messages)) - this.messages.length = 0 + if (this.worker !== undefined && this.messages.length) { + requestIdleCb(() => { + this.messages.unshift(TabData(this.session.getTabId())) + this.messages.unshift(Timestamp(this.timestamp())) + // ? why I need to do this? + this.worker!.postMessage(this.messages) + this.commitCallbacks.forEach((cb) => cb(this.messages)) + this.messages.length = 0 + }) } } @@ -397,8 +408,14 @@ export default class App { if (useSafe) { listener = this.safe(listener) } - this.attachStartCallback(() => target?.addEventListener(type, listener, useCapture), useSafe) - this.attachStopCallback(() => target?.removeEventListener(type, listener, useCapture), useSafe) + this.attachStartCallback( + () => (target ? createEventListener(target, type, listener, useCapture) : null), + useSafe, + ) + this.attachStopCallback( + () => (target ? deleteEventListener(target, type, listener, useCapture) : null), + useSafe, + ) } // TODO: full correct semantic diff --git a/tracker/tracker/src/main/app/logger.ts b/tracker/tracker/src/main/app/logger.ts index 80012ba5f..b91c7d4ea 100644 --- a/tracker/tracker/src/main/app/logger.ts +++ b/tracker/tracker/src/main/app/logger.ts @@ -5,7 +5,7 @@ export const LogLevel = { Errors: 2, Silent: 0, } as const -type LogLevel = typeof LogLevel[keyof typeof LogLevel] +type LogLevel = (typeof LogLevel)[keyof typeof LogLevel] type CustomLevel = { error: boolean diff --git a/tracker/tracker/src/main/app/nodes.ts b/tracker/tracker/src/main/app/nodes.ts index 0e9eb3ed4..3901be780 100644 --- a/tracker/tracker/src/main/app/nodes.ts +++ b/tracker/tracker/src/main/app/nodes.ts @@ -1,3 +1,5 @@ +import { createEventListener, deleteEventListener } from '../utils.js' + type NodeCallback = (node: Node, isStart: boolean) => void type ElementListener = [string, EventListener, boolean] @@ -19,7 +21,7 @@ export default class Nodes { if (id === undefined) { return } - node.addEventListener(type, listener, useCapture) + createEventListener(node, type, listener, useCapture) let listeners = this.elementListeners.get(id) if (listeners === undefined) { listeners = [] @@ -49,7 +51,7 @@ export default class Nodes { if (listeners !== undefined) { this.elementListeners.delete(id) listeners.forEach((listener) => - node.removeEventListener(listener[0], listener[1], listener[2]), + deleteEventListener(node, listener[0], listener[1], listener[2]), ) } this.totalNodeAmount-- diff --git a/tracker/tracker/src/main/app/observer/observer.ts b/tracker/tracker/src/main/app/observer/observer.ts index 77d66e6a7..da02138ab 100644 --- a/tracker/tracker/src/main/app/observer/observer.ts +++ b/tracker/tracker/src/main/app/observer/observer.ts @@ -1,3 +1,4 @@ +import { createMutationObserver, ngSafeBrowserMethod } from '../../utils.js' import { RemoveNodeAttribute, SetNodeAttributeURLBased, @@ -66,8 +67,11 @@ export default abstract class Observer { private readonly indexes: Array = [] private readonly attributesMap: Map> = new Map() private readonly textSet: Set = new Set() - constructor(protected readonly app: App, protected readonly isTopContext = false) { - this.observer = new MutationObserver( + constructor( + protected readonly app: App, + protected readonly isTopContext = false, + ) { + this.observer = createMutationObserver( this.app.safe((mutations) => { for (const mutation of mutations) { // mutations order is sequential @@ -114,7 +118,7 @@ export default abstract class Observer { } } this.commitNodes() - }), + }) as MutationCallback, ) } private clear(): void { diff --git a/tracker/tracker/src/main/app/sanitizer.ts b/tracker/tracker/src/main/app/sanitizer.ts index faeda2702..8c13510c2 100644 --- a/tracker/tracker/src/main/app/sanitizer.ts +++ b/tracker/tracker/src/main/app/sanitizer.ts @@ -24,7 +24,10 @@ export default class Sanitizer { private readonly hidden: Set = new Set() private readonly options: Options - constructor(private readonly app: App, options: Partial) { + constructor( + private readonly app: App, + options: Partial, + ) { this.options = Object.assign( { obscureTextEmails: true, diff --git a/tracker/tracker/src/main/app/session.ts b/tracker/tracker/src/main/app/session.ts index 656bbae71..2580843b9 100644 --- a/tracker/tracker/src/main/app/session.ts +++ b/tracker/tracker/src/main/app/session.ts @@ -35,7 +35,10 @@ export default class Session { private tabId: string public userInfo: UserInfo - constructor(private readonly app: App, private readonly options: Options) { + constructor( + private readonly app: App, + private readonly options: Options, + ) { this.createTabId() } diff --git a/tracker/tracker/src/main/modules/attributeSender.ts b/tracker/tracker/src/main/modules/attributeSender.ts index c7ddb2a59..8d240dd1d 100644 --- a/tracker/tracker/src/main/modules/attributeSender.ts +++ b/tracker/tracker/src/main/modules/attributeSender.ts @@ -18,7 +18,10 @@ export class StringDictionary { export default class AttributeSender { private dict = new StringDictionary() - constructor(private readonly app: App, private readonly isDictDisabled: boolean) {} + constructor( + private readonly app: App, + private readonly isDictDisabled: boolean, + ) {} public sendSetAttribute(id: number, name: string, value: string) { if (this.isDictDisabled) { diff --git a/tracker/tracker/src/main/modules/img.ts b/tracker/tracker/src/main/modules/img.ts index d9ac6cd1c..eb6c6fa7f 100644 --- a/tracker/tracker/src/main/modules/img.ts +++ b/tracker/tracker/src/main/modules/img.ts @@ -1,5 +1,5 @@ import type App from '../app/index.js' -import { isURL, IS_FIREFOX, MAX_STR_LEN } from '../utils.js' +import { isURL, IS_FIREFOX, MAX_STR_LEN, createMutationObserver } from '../utils.js' import { ResourceTiming, SetNodeAttributeURLBased } from '../app/messages.gen.js' import { hasTag } from '../app/guards.js' @@ -81,24 +81,25 @@ export default function (app: App): void { sendSrcset(id, img) } }) - - const observer = new MutationObserver((mutations) => { - for (const mutation of mutations) { - if (mutation.type === 'attributes') { - const target = mutation.target as HTMLImageElement - const id = app.nodes.getID(target) - if (id === undefined) { - return - } - if (mutation.attributeName === 'src') { - sendSrc(id, target) - } - if (mutation.attributeName === 'srcset') { - sendSrcset(id, target) + const observer = createMutationObserver( + app.safe((mutations) => { + for (const mutation of mutations) { + if (mutation.type === 'attributes') { + const target = mutation.target as HTMLImageElement + const id = app.nodes.getID(target) + if (id === undefined) { + return + } + if (mutation.attributeName === 'src') { + sendSrc(id, target) + } + if (mutation.attributeName === 'srcset') { + sendSrcset(id, target) + } } } - } - }) + }) as MutationCallback, + ) app.attachStopCallback(() => { observer.disconnect() diff --git a/tracker/tracker/src/main/utils.ts b/tracker/tracker/src/main/utils.ts index ef8c8c30f..96dee8f17 100644 --- a/tracker/tracker/src/main/utils.ts +++ b/tracker/tracker/src/main/utils.ts @@ -113,3 +113,67 @@ export function inIframe() { return true } } + +/** + * Because angular devs decided that its a good idea to override a browser apis + * we need to use this to achieve safe behavior + * */ +export function ngSafeBrowserMethod(method: string): string { + // @ts-ignore + return window.Zone && '__symbol__' in window.Zone + ? // @ts-ignore + window['Zone']['__symbol__'](method) + : method +} + +export function createMutationObserver(cb: MutationCallback) { + const mObserver = ngSafeBrowserMethod('MutationObserver') as 'MutationObserver' + return new window[mObserver](cb) +} + +export function createEventListener( + target: EventTarget, + event: string, + cb: EventListenerOrEventListenerObject, + capture?: boolean, +) { + const safeAddEventListener = ngSafeBrowserMethod('addEventListener') as 'addEventListener' + target[safeAddEventListener](event, cb, capture) +} + +export function deleteEventListener( + target: EventTarget, + event: string, + cb: EventListenerOrEventListenerObject, + capture?: boolean, +) { + const safeRemoveEventListener = ngSafeBrowserMethod( + 'removeEventListener', + ) as 'removeEventListener' + target[safeRemoveEventListener](event, cb, capture) +} + +/** + * This is a brief polyfill that suits our needs + * I took inspiration from Microsoft Clarity polyfill on this one + * then adapted it a little bit + * + * I'm very grateful for their bright idea + * */ +export function requestIdleCb(callback: () => void) { + const taskTimeout = 3000 + if (window.requestIdleCallback) { + return window.requestIdleCallback(callback, { timeout: taskTimeout }) + } else { + const channel = new MessageChannel() + const incoming = channel.port1 + const outgoing = channel.port2 + + incoming.onmessage = (): void => { + callback() + } + requestAnimationFrame((): void => { + outgoing.postMessage(1) + }) + } +} diff --git a/tracker/tracker/src/tests/utils.unit.test.ts b/tracker/tracker/src/tests/utils.unit.test.ts index 2b7836a70..8aef77110 100644 --- a/tracker/tracker/src/tests/utils.unit.test.ts +++ b/tracker/tracker/src/tests/utils.unit.test.ts @@ -11,6 +11,8 @@ import { hasOpenreplayAttribute, canAccessIframe, generateRandomId, + ngSafeBrowserMethod, + requestIdleCb, } from '../main/utils.js' describe('adjustTimeOrigin', () => { @@ -184,3 +186,59 @@ describe('generateRandomId', () => { expect(/^[0-9a-f]+$/.test(id)).toBe(true) }) }) + +describe('ngSafeBrowserMethod', () => { + test('returns the method as-is if Zone and __symbol__ are not in window.Zone', () => { + //@ts-ignore + window.Zone = undefined // Ensure Zone is not in the window object + expect(ngSafeBrowserMethod('someMethod')).toBe('someMethod') + }) + + test('returns the __symbol__ of the method if Zone and __symbol__ are in window.Zone', () => { + //@ts-ignore + window.Zone = { + __symbol__: (method: string) => `__${method}__`, + } + expect(ngSafeBrowserMethod('someMethod')).toBe('__someMethod__') + }) +}) + +describe('requestIdleCb', () => { + test('uses window.requestIdleCallback when available', () => { + const callback = jest.fn() + // @ts-ignore + window.requestIdleCallback = callback + + requestIdleCb(callback) + + expect(callback).toBeCalled() + }) + + test('falls back to using a MessageChannel if requestIdleCallback is not available', () => { + const callback = jest.fn() + class MessageChannelMock { + port1 = { + // @ts-ignore + postMessage: (v: any) => this.port2.onmessage(v), + onmessage: null, + } + port2 = { + onmessage: null, + // @ts-ignore + postMessage: (v: any) => this.port1.onmessage(v), + } + } + // @ts-ignore + globalThis.MessageChannel = MessageChannelMock + // @ts-ignore + globalThis.requestAnimationFrame = (cb: () => void) => cb() + // @ts-ignore + window.requestIdleCallback = undefined + + requestIdleCb(callback) + + // You can assert that the callback was called using the MessageChannel approach. + // This is more challenging to test, so it's recommended to mock MessageChannel. + expect(callback).toBeCalled() + }) +})