From 468b09599bff1499eb9594bd9c1328fff11fdd72 Mon Sep 17 00:00:00 2001 From: Saravana Date: Thu, 3 Aug 2023 23:00:24 +0200 Subject: [PATCH] Migration to typescript (#61) * Adding package.json value * Simply converting all JS to TS * Main should be JS * Fix issue in index.ts * Print something in action() * Trying a different import * More logs * More logs * More logs * Fixing the util.test.ts * Migrating all tests to TS with the @ts-nocheck annotation * Fix all issues in util.ts expect return types * Fix all issues in util.ts * Fix all issues in render.ts * Fix all issues in process.ts * Fix some issues in action.ts * Fixing all issues in action.ts * Fixing all prettier issues * Fixing all errors * Changed from 1.6.1 * Changed from 1.6.1 - Build * Building --- .eslintignore | 6 +- .eslintrc.js | 24 - .eslintrc.json | 64 + .prettierignore | 5 +- .prettierrc.js | 12 - .prettierrc.json | 10 + __tests__/{action.test.js => action.test.ts} | 27 +- ...egate.test.js => action_aggregate.test.ts} | 25 +- ...ltiple.test.js => action_multiple.test.ts} | 17 +- ...n_single.test.js => action_single.test.ts} | 68 +- __tests__/{mocks.test.js => mocks.test.ts} | 87 +- .../{process.test.js => process.test.ts} | 96 +- __tests__/{render.test.js => render.test.ts} | 8 +- __tests__/{util.test.js => util.test.ts} | 310 +- dist/build/Release/node_expat.node | Bin 205732 -> 0 bytes dist/index.js | 2115 ++++----- dist/index.js.map | 1 + dist/sourcemap-register.js | 1 + jest.config.js | 9 + lib/__tests__/action.test.js | 121 + lib/__tests__/action_aggregate.test.js | 192 + lib/__tests__/action_multiple.test.js | 195 + lib/__tests__/action_single.test.js | 354 ++ lib/__tests__/mocks.test.js | 438 ++ lib/__tests__/process.test.js | 457 ++ lib/__tests__/render.test.js | 345 ++ lib/__tests__/util.test.js | 280 ++ lib/src/action.js | 209 + lib/src/index.js | 4 + lib/src/models/github.js | 2 + lib/src/models/jacoco.js | 2 + lib/src/models/project.js | 2 + lib/src/process.js | 200 + lib/src/render.js | 129 + lib/src/util.js | 101 + package-lock.json | 4136 +++++++++++++++-- package.json | 14 +- src/{action.js => action.ts} | 96 +- src/index.js | 6 - src/index.ts | 3 + src/models/github.ts | 5 + src/models/jacoco.ts | 21 + src/models/project.ts | 44 + src/{process.js => process.ts} | 151 +- src/{render.js => render.ts} | 132 +- src/{util.js => util.ts} | 75 +- tsconfig.json | 11 + 47 files changed, 8528 insertions(+), 2082 deletions(-) delete mode 100644 .eslintrc.js create mode 100644 .eslintrc.json delete mode 100644 .prettierrc.js create mode 100644 .prettierrc.json rename __tests__/{action.test.js => action.test.ts} (79%) rename __tests__/{action_aggregate.test.js => action_aggregate.test.ts} (89%) rename __tests__/{action_multiple.test.js => action_multiple.test.ts} (94%) rename __tests__/{action_single.test.js => action_single.test.ts} (86%) rename __tests__/{mocks.test.js => mocks.test.ts} (90%) rename __tests__/{process.test.js => process.test.ts} (81%) rename __tests__/{render.test.js => render.test.ts} (99%) rename __tests__/{util.test.js => util.test.ts} (50%) delete mode 100755 dist/build/Release/node_expat.node create mode 100644 dist/index.js.map create mode 100644 dist/sourcemap-register.js create mode 100644 jest.config.js create mode 100644 lib/__tests__/action.test.js create mode 100644 lib/__tests__/action_aggregate.test.js create mode 100644 lib/__tests__/action_multiple.test.js create mode 100644 lib/__tests__/action_single.test.js create mode 100644 lib/__tests__/mocks.test.js create mode 100644 lib/__tests__/process.test.js create mode 100644 lib/__tests__/render.test.js create mode 100644 lib/__tests__/util.test.js create mode 100644 lib/src/action.js create mode 100644 lib/src/index.js create mode 100644 lib/src/models/github.js create mode 100644 lib/src/models/jacoco.js create mode 100644 lib/src/models/project.js create mode 100644 lib/src/process.js create mode 100644 lib/src/render.js create mode 100644 lib/src/util.js rename src/{action.js => action.ts} (71%) delete mode 100644 src/index.js create mode 100644 src/index.ts create mode 100644 src/models/github.ts create mode 100644 src/models/jacoco.ts create mode 100644 src/models/project.ts rename src/{process.js => process.ts} (58%) rename src/{render.js => render.ts} (60%) rename src/{util.js => util.ts} (58%) create mode 100644 tsconfig.json diff --git a/.eslintignore b/.eslintignore index ea32dad..5105076 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,5 @@ -dist/index.js \ No newline at end of file +dist/ +node_modules/ +jest.config.js +lib/ +coverage/ diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 0f2b0d2..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports = { - env: { - node: true, - es2021: true, - jest: true, - jasmine: true, - }, - extends: ['standard', 'prettier'], - overrides: [ - { - files: ['.eslintrc.{js, cjs}'], - }, - ], - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: true, - }, - rules: { - quotes: ['error', 'single', { avoidEscape: true }], - 'no-var': ['error'], - 'dot-notation': ['off'], - }, -} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..95010d1 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,64 @@ +{ + "plugins": ["jest", "@typescript-eslint"], + "extends": ["plugin:github/recommended"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 9, + "sourceType": "module", + "project": "./tsconfig.json" + }, + "rules": { + "i18n-text/no-en": "off", + "eslint-comments/no-use": "off", + "import/no-namespace": "off", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/explicit-member-accessibility": [ + "error", + {"accessibility": "no-public"} + ], + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/ban-ts-comment": "error", + "camelcase": "off", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/explicit-function-return-type": [ + "error", + {"allowExpressions": true} + ], + "filenames/match-regex": "off", + "@typescript-eslint/func-call-spacing": ["error", "never"], + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-assertion": "warn", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/prefer-for-of": "warn", + "@typescript-eslint/prefer-function-type": "warn", + "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-string-starts-ends-with": "error", + "@typescript-eslint/promise-function-async": "error", + "@typescript-eslint/require-array-sort-compare": "error", + "@typescript-eslint/restrict-plus-operands": "error", + "semi": "off", + "@typescript-eslint/semi": ["error", "never"], + "@typescript-eslint/type-annotation-spacing": "error", + "@typescript-eslint/unbound-method": "error" + }, + "env": { + "node": true, + "es6": true, + "jest/globals": true, + "jasmine": true, + "jest": true + } +} diff --git a/.prettierignore b/.prettierignore index ea32dad..af7ce60 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,4 @@ -dist/index.js \ No newline at end of file +dist/ +node_modules/ +lib/ +coverage/ diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index eec4b7e..0000000 --- a/.prettierrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// prettier.config.js, .prettierrc.js, prettier.config.mjs, or .prettierrc.mjs - -/** @type {import("prettier").Options} */ -const config = { - trailingComma: 'es5', - tabWidth: 2, - semi: false, - singleQuote: true, - useTabs: false, -} - -module.exports = config diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..c00d385 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,10 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true, + "trailingComma": "es5", + "bracketSpacing": false, + "arrowParens": "avoid" +} diff --git a/__tests__/action.test.js b/__tests__/action.test.ts similarity index 79% rename from __tests__/action.test.js rename to __tests__/action.test.ts index 721c72b..674629e 100644 --- a/__tests__/action.test.js +++ b/__tests__/action.test.ts @@ -1,12 +1,12 @@ -const action = require('../src/action') -const core = require('@actions/core') -const github = require('@actions/github') +import * as action from '../src/action' +import * as core from '@actions/core' +import * as github from '@actions/github' jest.mock('@actions/core') jest.mock('@actions/github') describe('Input validation', function () { - function getInput(key) { + function getInput(key: string): string | undefined { switch (key) { case 'paths': return './__tests__/__fixtures__/report.xml' @@ -19,7 +19,10 @@ describe('Input validation', function () { const listComments = jest.fn() const updateComment = jest.fn() + /* eslint-disable @typescript-eslint/ban-ts-comment */ + // @ts-ignore core.getInput = jest.fn(getInput) + // @ts-ignore github.getOctokit = jest.fn(() => { return { repos: { @@ -50,12 +53,14 @@ describe('Input validation', function () { }, } }) - core.setFailed = jest.fn((c) => { + // @ts-ignore + core.setFailed = jest.fn(c => { fail(c) }) it('Fail if paths is not present', async () => { - core.getInput = jest.fn((c) => { + // @ts-ignore + core.getInput = jest.fn(c => { switch (c) { case 'paths': return '' @@ -65,14 +70,16 @@ describe('Input validation', function () { }) github.context.eventName = 'pull_request' - core.setFailed = jest.fn((c) => { + // @ts-ignore + core.setFailed = jest.fn(c => { expect(c).toEqual("'paths' is missing") }) await action.action() }) it('Fail if token is not present', async () => { - core.getInput = jest.fn((c) => { + // @ts-ignore + core.getInput = jest.fn(c => { switch (c) { case 'token': return '' @@ -81,8 +88,8 @@ describe('Input validation', function () { } }) github.context.eventName = 'pull_request' - - core.setFailed = jest.fn((c) => { + // @ts-ignore + core.setFailed = jest.fn(c => { expect(c).toEqual("'token' is missing") }) await action.action() diff --git a/__tests__/action_aggregate.test.js b/__tests__/action_aggregate.test.ts similarity index 89% rename from __tests__/action_aggregate.test.js rename to __tests__/action_aggregate.test.ts index ba3d543..e65749e 100644 --- a/__tests__/action_aggregate.test.js +++ b/__tests__/action_aggregate.test.ts @@ -1,8 +1,9 @@ -/* eslint-disable no-template-curly-in-string */ -const action = require('../src/action') -const core = require('@actions/core') -const github = require('@actions/github') -const { PATCH } = require('./mocks.test') +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// @ts-nocheck +import * as action from '../src/action' +import * as core from '@actions/core' +import * as github from '@actions/github' +import {PATCH} from './mocks.test' jest.mock('@actions/core') jest.mock('@actions/github') @@ -13,7 +14,7 @@ describe('Aggregate report', function () { let updateComment let output - function getInput(key) { + function getInput(key: string): string { switch (key) { case 'paths': return './__tests__/__fixtures__/aggregate-report.xml' @@ -39,6 +40,7 @@ describe('Aggregate report', function () { output = jest.fn() core.getInput = jest.fn(getInput) + // @ts-ignore github.getOctokit = jest.fn(() => { return { rest: { @@ -55,7 +57,8 @@ describe('Aggregate report', function () { }, } }) - core.setFailed = jest.fn((c) => { + // @ts-ignore + core.setFailed = jest.fn(c => { fail(c) }) }) @@ -123,7 +126,7 @@ describe('Aggregate report', function () { it('updates a previous comment', async () => { initContext(eventName, payload) const title = 'JaCoCo Report' - core.getInput = jest.fn((c) => { + core.getInput = jest.fn(c => { switch (c) { case 'title': return title @@ -136,8 +139,8 @@ describe('Aggregate report', function () { listComments.mockReturnValue({ data: [ - { id: 1, body: 'some comment' }, - { id: 2, body: `### ${title}\n to update` }, + {id: 1, body: 'some comment'}, + {id: 2, body: `### ${title}\n to update`}, ], }) @@ -169,7 +172,7 @@ describe('Aggregate report', function () { }) }) -function initContext(eventName, payload) { +function initContext(eventName, payload): void { const context = github.context context.eventName = eventName context.payload = payload diff --git a/__tests__/action_multiple.test.js b/__tests__/action_multiple.test.ts similarity index 94% rename from __tests__/action_multiple.test.js rename to __tests__/action_multiple.test.ts index 6060480..fabbeef 100644 --- a/__tests__/action_multiple.test.js +++ b/__tests__/action_multiple.test.ts @@ -1,8 +1,9 @@ -/* eslint-disable no-template-curly-in-string */ -const action = require('../src/action') -const core = require('@actions/core') -const github = require('@actions/github') -const { PATCH } = require('./mocks.test') +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// @ts-nocheck +import * as action from '../src/action' +import * as core from '@actions/core' +import * as github from '@actions/github' +import {PATCH} from './mocks.test' jest.mock('@actions/core') jest.mock('@actions/github') @@ -50,7 +51,7 @@ describe('Multiple reports', function () { }, } - core.getInput = jest.fn((c) => { + core.getInput = jest.fn(c => { switch (c) { case 'paths': return './__tests__/__fixtures__/multi_module/appCoverage.xml,./__tests__/__fixtures__/multi_module/mathCoverage.xml,./__tests__/__fixtures__/multi_module/textCoverage.xml' @@ -82,7 +83,7 @@ describe('Multiple reports', function () { }, } }) - core.setFailed = jest.fn((c) => { + core.setFailed = jest.fn(c => { fail(c) }) @@ -179,7 +180,7 @@ describe('Multiple reports', function () { }) }) -function initContext(eventName, payload) { +function initContext(eventName, payload): void { const context = github.context context.eventName = eventName context.payload = payload diff --git a/__tests__/action_single.test.js b/__tests__/action_single.test.ts similarity index 86% rename from __tests__/action_single.test.js rename to __tests__/action_single.test.ts index cd761f6..47cdc7e 100644 --- a/__tests__/action_single.test.js +++ b/__tests__/action_single.test.ts @@ -1,8 +1,9 @@ -/* eslint-disable no-template-curly-in-string */ -const action = require('../src/action') -const core = require('@actions/core') -const github = require('@actions/github') -const { PATCH } = require('./mocks.test') +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// @ts-nocheck +import * as action from '../src/action' +import * as core from '@actions/core' +import * as github from '@actions/github' +import {PATCH} from './mocks.test' jest.mock('@actions/core') jest.mock('@actions/github') @@ -13,7 +14,7 @@ describe('Single report', function () { let updateComment let output - function getInput(key) { + function getInput(key): string { switch (key) { case 'paths': return './__tests__/__fixtures__/report.xml' @@ -55,7 +56,7 @@ describe('Single report', function () { }, } }) - core.setFailed = jest.fn((c) => { + core.setFailed = jest.fn(c => { fail(c) }) }) @@ -135,7 +136,7 @@ describe('Single report', function () { describe('With update-comment ON', function () { const title = 'JaCoCo Report' - function mockInput(key) { + function mockInput(key): string { switch (key) { case 'title': return title @@ -148,14 +149,14 @@ describe('Single report', function () { it('if comment exists, update it', async () => { initContext(eventName, payload) - core.getInput = jest.fn((key) => { + core.getInput = jest.fn(key => { return mockInput(key) }) listComments.mockReturnValue({ data: [ - { id: 1, body: 'some comment' }, - { id: 2, body: `### ${title}\n to update` }, + {id: 1, body: 'some comment'}, + {id: 2, body: `### ${title}\n to update`}, ], }) @@ -167,11 +168,11 @@ describe('Single report', function () { it('if comment does not exist, create new comment', async () => { initContext(eventName, payload) - core.getInput = jest.fn((key) => { + core.getInput = jest.fn(key => { return mockInput(key) }) listComments.mockReturnValue({ - data: [{ id: 1, body: 'some comment' }], + data: [{id: 1, body: 'some comment'}], }) await action.action() @@ -182,7 +183,7 @@ describe('Single report', function () { it('if title not set, warn user and create new comment', async () => { initContext(eventName, payload) - core.getInput = jest.fn((c) => { + core.getInput = jest.fn(c => { switch (c) { case 'title': return '' @@ -193,8 +194,8 @@ describe('Single report', function () { listComments.mockReturnValue({ data: [ - { id: 1, body: 'some comment' }, - { id: 2, body: `### ${title}\n to update` }, + {id: 1, body: 'some comment'}, + {id: 2, body: `### ${title}\n to update`}, ], }) @@ -209,8 +210,8 @@ describe('Single report', function () { }) describe('Skip if no changes set to true', function () { - function mockInput() { - core.getInput = jest.fn((c) => { + function mockInput(): void { + core.getInput = jest.fn(c => { switch (c) { case 'skip-if-no-changes': return 'true' @@ -232,24 +233,23 @@ describe('Single report', function () { it("Don't add comment when coverage absent for changes files", async () => { initContext(eventName, payload) mockInput() - const compareCommitsResponse = { - data: { - files: [ - { - filename: '.github/workflows/coverage.yml', - blob_url: - 'https://github.com/thsaravana/jacoco-playground/blob/14a554976c0e5909d8e69bc8cce72958c49a7dc5/.github/workflows/coverage.yml', - patch: PATCH.SINGLE_MODULE.COVERAGE, - }, - ], - }, - } github.getOctokit = jest.fn(() => { return { rest: { repos: { compareCommits: jest.fn(() => { - return compareCommitsResponse + return { + data: { + files: [ + { + filename: '.github/workflows/coverage.yml', + blob_url: + 'https://github.com/thsaravana/jacoco-playground/blob/14a554976c0e5909d8e69bc8cce72958c49a7dc5/.github/workflows/coverage.yml', + patch: PATCH.SINGLE_MODULE.COVERAGE, + }, + ], + }, + } }), }, issues: { @@ -270,7 +270,7 @@ describe('Single report', function () { describe('With custom emoji', function () { it('publish proper comment', async () => { initContext(eventName, payload) - core.getInput = jest.fn((key) => { + core.getInput = jest.fn(key => { switch (key) { case 'pass-emoji': return ':green_circle:' @@ -351,7 +351,7 @@ describe('Single report', function () { describe('Other than push or pull_request or pull_request_target event', function () { it('Fail by throwing appropriate error', async () => { initContext('pr_review', {}) - core.setFailed = jest.fn((c) => { + core.setFailed = jest.fn(c => { expect(c).toEqual( 'Only pull requests and pushes are supported, pr_review not supported.' ) @@ -363,7 +363,7 @@ describe('Single report', function () { }) }) -function initContext(eventName, payload) { +function initContext(eventName, payload): void { const context = github.context context.eventName = eventName context.payload = payload diff --git a/__tests__/mocks.test.js b/__tests__/mocks.test.ts similarity index 90% rename from __tests__/mocks.test.js rename to __tests__/mocks.test.ts index dd2dcf4..c01b0ee 100644 --- a/__tests__/mocks.test.js +++ b/__tests__/mocks.test.ts @@ -1,5 +1,4 @@ -/* eslint-disable no-template-curly-in-string */ -const PATCH = { +export const PATCH = { SINGLE_MODULE: { COVERAGE: "@@ -10,10 +10,10 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v2\n- - name: Set up JDK 1.8\n+ - name: Set up JDK 17\n uses: actions/setup-java@v1\n with:\n- java-version: 1.8\n+ java-version: 17\n \n - name: Grant execute permission for gradlew\n run: chmod +x gradlew\n@@ -29,13 +29,15 @@ jobs:\n \n - name: Jacoco Report to PR\n id: jacoco\n- uses: madrapps/jacoco-report@v1.1\n+ uses: madrapps/jacoco-report@coverage-diff\n with:\n- path: ${{ github.workspace }}/build/reports/jacoco/testCoverage/testCoverage.xml\n+ paths: ${{ github.workspace }}/build/reports/jacoco/**/testCoverage.xml\n token: ${{ secrets.GITHUB_TOKEN }}\n min-coverage-overall: 40\n min-coverage-changed-files: 60\n- debug-mode: false\n+ update-comment: true\n+ title: '`Coverage Report`'\n+ debug-mode: true\n \n - name: Get the Coverage info\n run: | ", @@ -34,7 +33,7 @@ const PATCH = { }, } -const CHANGED_FILE = { +export const CHANGED_FILE = { MULTI_MODULE: [ { filePath: '.github/workflows/coverage.yml', @@ -120,7 +119,7 @@ const CHANGED_FILE = { ], } -const PROJECT = { +export const PROJECT = { SINGLE_MODULE: { modules: [ { @@ -137,7 +136,7 @@ const PROJECT = { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, lines: [], }, @@ -157,43 +156,43 @@ const PROJECT = { lines: [ { number: 6, - instruction: { missed: 0, covered: 3 }, - branch: { missed: 1, covered: 1 }, + instruction: {missed: 0, covered: 3}, + branch: {missed: 1, covered: 1}, }, { number: 13, - instruction: { missed: 3, covered: 0 }, - branch: { missed: 2, covered: 0 }, + instruction: {missed: 3, covered: 0}, + branch: {missed: 2, covered: 0}, }, { number: 14, - instruction: { missed: 4, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 4, covered: 0}, + branch: {missed: 0, covered: 0}, }, { number: 16, - instruction: { missed: 4, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 4, covered: 0}, + branch: {missed: 0, covered: 0}, }, { number: 26, - instruction: { missed: 0, covered: 3 }, - branch: { missed: 1, covered: 1 }, + instruction: {missed: 0, covered: 3}, + branch: {missed: 1, covered: 1}, }, { number: 27, - instruction: { missed: 0, covered: 4 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 0, covered: 4}, + branch: {missed: 0, covered: 0}, }, { number: 29, - instruction: { missed: 4, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 4, covered: 0}, + branch: {missed: 0, covered: 0}, }, { number: 43, - instruction: { missed: 6, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 6, covered: 0}, + branch: {missed: 0, covered: 0}, }, ], }, @@ -213,8 +212,8 @@ const PROJECT = { lines: [ { number: 3, - instruction: { missed: 0, covered: 3 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 0, covered: 3}, + branch: {missed: 0, covered: 0}, }, ], }, @@ -265,13 +264,13 @@ const PROJECT = { lines: [ { number: 6, - instruction: { missed: 0, covered: 3 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 0, covered: 3}, + branch: {missed: 0, covered: 0}, }, { number: 20, - instruction: { missed: 2, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 2, covered: 0}, + branch: {missed: 0, covered: 0}, }, ], }, @@ -306,8 +305,8 @@ const PROJECT = { lines: [ { number: 22, - instruction: { missed: 5, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 5, covered: 0}, + branch: {missed: 0, covered: 0}, }, ], }, @@ -327,13 +326,13 @@ const PROJECT = { lines: [ { number: 5, - instruction: { missed: 3, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 3, covered: 0}, + branch: {missed: 0, covered: 0}, }, { number: 8, - instruction: { missed: 2, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 2, covered: 0}, + branch: {missed: 0, covered: 0}, }, ], }, @@ -368,8 +367,8 @@ const PROJECT = { lines: [ { number: 16, - instruction: { missed: 8, covered: 0 }, - branch: { missed: 2, covered: 0 }, + instruction: {missed: 8, covered: 0}, + branch: {missed: 2, covered: 0}, }, ], }, @@ -389,8 +388,8 @@ const PROJECT = { lines: [ { number: 20, - instruction: { missed: 14, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 14, covered: 0}, + branch: {missed: 0, covered: 0}, }, ], }, @@ -410,13 +409,13 @@ const PROJECT = { lines: [ { number: 3, - instruction: { missed: 3, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 3, covered: 0}, + branch: {missed: 0, covered: 0}, }, { number: 7, - instruction: { missed: 1, covered: 0 }, - branch: { missed: 0, covered: 0 }, + instruction: {missed: 1, covered: 0}, + branch: {missed: 0, covered: 0}, }, ], }, @@ -448,12 +447,6 @@ const PROJECT = { }, } -module.exports = { - PATCH, - CHANGED_FILE, - PROJECT, -} - it('Empty test', function () { // To Suppress - Your test suite must contain at least one test. }) diff --git a/__tests__/process.test.js b/__tests__/process.test.ts similarity index 81% rename from __tests__/process.test.js rename to __tests__/process.test.ts index 52069da..ebd1bd5 100644 --- a/__tests__/process.test.js +++ b/__tests__/process.test.ts @@ -1,7 +1,8 @@ -const fs = require('fs') -const parser = require('xml2js') -const process = require('../src/process') -const { CHANGED_FILE, PROJECT } = require('./mocks.test') +import fs from 'fs' +import parser from 'xml2js' +import * as process from '../src/process' +import {CHANGED_FILE, PROJECT} from './mocks.test' +import {ChangedFile} from '../src/models/github' describe('process', function () { describe('get file coverage', function () { @@ -9,7 +10,7 @@ describe('process', function () { it('no files changed', async () => { const v = getSingleReport() const reports = await v - const changedFiles = [] + const changedFiles: ChangedFile[] = [] const actual = process.getProjectCoverage(reports, changedFiles) expect(actual).toEqual({ modules: [], @@ -23,14 +24,14 @@ describe('process', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, }) }) it('one file changed', async () => { const reports = await getSingleReport() - const changedFiles = CHANGED_FILE.SINGLE_MODULE.filter((file) => { + const changedFiles = CHANGED_FILE.SINGLE_MODULE.filter(file => { return file.filePath.endsWith('Math.kt') }) const actual = process.getProjectCoverage(reports, changedFiles) @@ -43,43 +44,43 @@ describe('process', function () { { lines: [ { - branch: { covered: 1, missed: 1 }, - instruction: { covered: 3, missed: 0 }, + branch: {covered: 1, missed: 1}, + instruction: {covered: 3, missed: 0}, number: 6, }, { - branch: { covered: 0, missed: 2 }, - instruction: { covered: 0, missed: 3 }, + branch: {covered: 0, missed: 2}, + instruction: {covered: 0, missed: 3}, number: 13, }, { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, number: 14, }, { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, number: 16, }, { - branch: { covered: 1, missed: 1 }, - instruction: { covered: 3, missed: 0 }, + branch: {covered: 1, missed: 1}, + instruction: {covered: 3, missed: 0}, number: 26, }, { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 4, missed: 0 }, + branch: {covered: 0, missed: 0}, + instruction: {covered: 4, missed: 0}, number: 27, }, { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, number: 29, }, { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 6 }, + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 6}, number: 43, }, ], @@ -134,7 +135,7 @@ describe('process', function () { describe('multiple reports', function () { it('no files changed', async () => { const reports = await getMultipleReports() - const changedFiles = [] + const changedFiles: ChangedFile[] = [] const actual = process.getProjectCoverage(reports, changedFiles) expect(actual).toEqual({ modules: [], @@ -148,14 +149,14 @@ describe('process', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, }) }) it('one file changed', async () => { const reports = await getMultipleReports() - const changedFiles = CHANGED_FILE.MULTI_MODULE.filter((file) => { + const changedFiles = CHANGED_FILE.MULTI_MODULE.filter(file => { return file.filePath.endsWith('StringOp.java') }) const actual = process.getProjectCoverage(reports, changedFiles) @@ -168,13 +169,13 @@ describe('process', function () { { lines: [ { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 3, missed: 0 }, + branch: {covered: 0, missed: 0}, + instruction: {covered: 3, missed: 0}, number: 6, }, { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 2 }, + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 2}, number: 20, }, ], @@ -229,7 +230,7 @@ describe('process', function () { describe('aggregate reports', function () { it('no files changed', async () => { const reports = await getAggregateReport() - const changedFiles = [] + const changedFiles: ChangedFile[] = [] const actual = process.getProjectCoverage(reports, changedFiles) expect(actual).toEqual({ modules: [], @@ -243,14 +244,14 @@ describe('process', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, }) }) it('one file changed', async () => { const reports = await getAggregateReport() - const changedFiles = CHANGED_FILE.MULTI_MODULE.filter((file) => { + const changedFiles = CHANGED_FILE.MULTI_MODULE.filter(file => { return file.filePath.endsWith('MainViewModel.kt') }) const actual = process.getProjectCoverage(reports, changedFiles) @@ -269,7 +270,7 @@ describe('process', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, lines: [], name: 'MainViewModel.kt', @@ -285,7 +286,7 @@ describe('process', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, }, ], @@ -297,14 +298,14 @@ describe('process', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, }) }) it('multiple files changed', async () => { const reports = await getAggregateReport() - const changedFiles = CHANGED_FILE.MULTI_MODULE.filter((file) => { + const changedFiles = CHANGED_FILE.MULTI_MODULE.filter(file => { return ( file.filePath.endsWith('MainViewModel.kt') || file.filePath.endsWith('Math.kt') || @@ -321,8 +322,8 @@ describe('process', function () { { lines: [ { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 5 }, + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 5}, number: 22, }, ], @@ -363,7 +364,7 @@ describe('process', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, name: 'MainViewModel.kt', lines: [], @@ -379,7 +380,7 @@ describe('process', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, }, ], @@ -399,29 +400,30 @@ describe('process', function () { }) }) -async function getAggregateReport() { +/* eslint-disable @typescript-eslint/no-explicit-any */ +async function getAggregateReport(): Promise { const reportPath = './__tests__/__fixtures__/aggregate-report.xml' const report = await getReport(reportPath) return [report] } -async function getMultipleReports() { +async function getMultipleReports(): Promise { const testFolder = './__tests__/__fixtures__/multi_module' return Promise.all( - fs.readdirSync(testFolder).map(async (file) => { - const reportPath = testFolder + '/' + file + fs.readdirSync(testFolder).map(async file => { + const reportPath = `${testFolder}/${file}` return await getReport(reportPath) }) ) } -async function getSingleReport() { +async function getSingleReport(): Promise { const reportPath = './__tests__/__fixtures__/report.xml' const report = await getReport(reportPath) return [report] } -async function getReport(path) { +async function getReport(path: string): Promise { const reportXml = await fs.promises.readFile(path, 'utf-8') const json = await parser.parseStringPromise(reportXml) return json['report'] diff --git a/__tests__/render.test.js b/__tests__/render.test.ts similarity index 99% rename from __tests__/render.test.js rename to __tests__/render.test.ts index d4890bc..e981417 100644 --- a/__tests__/render.test.js +++ b/__tests__/render.test.ts @@ -1,10 +1,10 @@ -const render = require('../src/render') -const { PROJECT } = require('./mocks.test') +import * as render from '../src/render' +import {PROJECT} from './mocks.test' describe('Render', function () { describe('getTitle', function () { it('title is not present', function () { - const title = render.getTitle(null) + const title = render.getTitle(undefined) expect(title).toEqual('') }) @@ -57,7 +57,7 @@ describe('Render', function () { changed: { covered: 0, missed: 0, - percentage: null, + percentage: undefined, }, } it('coverage greater than min coverage', function () { diff --git a/__tests__/util.test.js b/__tests__/util.test.ts similarity index 50% rename from __tests__/util.test.js rename to __tests__/util.test.ts index a718c9d..4d5164f 100644 --- a/__tests__/util.test.js +++ b/__tests__/util.test.ts @@ -1,6 +1,6 @@ -const util = require('../src/util') -const fs = require('fs') -const parser = require('xml2js') +import * as util from '../src/util' +import * as fs from 'fs' +import parser from 'xml2js' jest.mock('@actions/core') jest.mock('@actions/github') @@ -8,7 +8,7 @@ jest.mock('@actions/github') describe('Util', function () { describe('getChangedLines', function () { it('when patch is null', async () => { - const changedLines = util.getChangedLines(null) + const changedLines = util.getChangedLines(undefined) expect(changedLines).toEqual([]) }) @@ -26,7 +26,6 @@ describe('Util', function () { it('multiple patch of lines within same group', async () => { const patch = - // eslint-disable-next-line no-template-curly-in-string "@@ -23,17 +23,19 @@ jobs:\n \n - name: Jacoco Report to PR\n id: jacoco\n- uses: madrapps/jacoco-report@v1.2\n+ uses: madrapps/jacoco-report@coverage-diff\n with:\n paths: |\n- ${{ github.workspace }}/app/build/reports/jacoco/prodNormalDebugCoverage/prodNormalDebugCoverage.xml,\n- ${{ github.workspace }}/math/build/reports/jacoco/debugCoverage/mathCoverage.xml,\n- ${{ github.workspace }}/text/build/reports/jacoco/debugCoverage/mathCoverage.xml\n+ ${{ github.workspace }}/**/build/reports/jacoco/**/prodNormalDebugCoverage.xml,\n+ ${{ github.workspace }}/**/build/reports/jacoco/**/mathCoverage.xml\n token: ${{ secrets.GITHUB_TOKEN }}\n min-coverage-overall: 40\n min-coverage-changed-files: 60\n- title: Code Coverage\n- debug-mode: false\n+ title: ':lobster: Coverage Report'\n+ update-comment: true\n+ pass-emoji: ':green_circle:'\n+ fail-emoji: ':red_circle:'\n+ debug-mode: true\n \n - name: Get the Coverage info\n run: |" const changedLines = util.getChangedLines(patch) expect(changedLines).toEqual([26, 29, 30, 34, 35, 36, 37, 38]) @@ -34,7 +33,6 @@ describe('Util', function () { it('single line', async () => { const patch = - // eslint-disable-next-line no-template-curly-in-string '@@ -17,7 +17,7 @@ class MainActivity : AppCompatActivity() {\n val userId = \\"admin\\"\n val model: MainViewModel by viewModels()\n Log.d(\\"App\\", \\"Validate = ${model.validate(userId)}\\")\n- Log.d(\\"App\\", \\"Verify Access = ${model.verifyAccess(userId)}\\")\n+ Log.d(\\"App\\", \\"Verify Access = ${model.verifyAccess1(userId)}\\")\n \n // Math module\n val arithmetic = Arithmetic()' const changedLines = util.getChangedLines(patch) expect(changedLines).toEqual([20]) @@ -42,7 +40,6 @@ describe('Util', function () { it('full new file', async () => { const patch = - // eslint-disable-next-line no-template-curly-in-string '@@ -0,0 +1,8 @@\n+package com.madrapps.playground.events\n+\n+class OnClickEvent {\n+\n+ fun onClick() {\n+ // do nothing\n+ }\n+}\n\\\\ No newline at end of file' const changedLines = util.getChangedLines(patch) expect(changedLines).toEqual([1, 2, 3, 4, 5, 6, 7, 8]) @@ -50,7 +47,6 @@ describe('Util', function () { it('different groups', async () => { const patch = - // eslint-disable-next-line no-template-curly-in-string '@@ -3,7 +3,7 @@\n /**\n * String related operation\n */\n-public class StringOp implements StringOperation {\n+public class StringOp implements IStringOperation {\n \n @Override\n public boolean endsWith(String source, String chars) {\n@@ -14,4 +14,9 @@ public boolean endsWith(String source, String chars) {\n public boolean startsWith(String source, String chars) {\n return source.startsWith(chars);\n }\n+\n+ @Override\n+ public boolean replace(String from, String to) {\n+ return false;\n+ }\n }' const changedLines = util.getChangedLines(patch) expect(changedLines).toEqual([6, 17, 18, 19, 20, 21]) @@ -64,144 +60,177 @@ describe('Util', function () { const files = util.getFilesWithCoverage(packages) expect(files).toEqual([ { - class: { covered: 1, missed: 0 }, - complexity: { covered: 3, missed: 8 }, - instruction: { covered: 11, missed: 50 }, - line: { covered: 3, missed: 8 }, - lines: { - 3: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 3, missed: 0 }, - }, - 6: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 10: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 4, missed: 0 }, - }, - 14: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 4, missed: 0 }, - }, - 18: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 22: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 26: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 30: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 6 }, - }, - 34: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 8 }, - }, - 38: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 10 }, - }, - 42: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 10 }, - }, - }, - method: { covered: 3, missed: 8 }, + counters: [ + {covered: 11, missed: 50, name: 'instruction'}, + {covered: 3, missed: 8, name: 'line'}, + {covered: 3, missed: 8, name: 'complexity'}, + {covered: 3, missed: 8, name: 'method'}, + {covered: 1, missed: 0, name: 'class'}, + ], + lines: [ + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 3, missed: 0}, + number: 3, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 6, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 4, missed: 0}, + number: 10, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 4, missed: 0}, + number: 14, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 18, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 22, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 26, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 6}, + number: 30, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 8}, + number: 34, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 10}, + number: 38, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 10}, + number: 42, + }, + ], name: 'Utility.java', packageName: 'com/madrapps/jacoco', }, { - branch: { covered: 2, missed: 4 }, - class: { covered: 1, missed: 0 }, - complexity: { covered: 4, missed: 7 }, - instruction: { covered: 21, missed: 29 }, - line: { covered: 6, missed: 7 }, - lines: { - 3: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 3, missed: 0 }, - }, - 6: { - branch: { covered: 1, missed: 1 }, - instruction: { covered: 3, missed: 0 }, - }, - 9: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 4, missed: 0 }, - }, - 13: { - branch: { covered: 0, missed: 2 }, - instruction: { covered: 0, missed: 3 }, - }, - 14: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 16: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 22: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 4, missed: 0 }, - }, - 26: { - branch: { covered: 1, missed: 1 }, - instruction: { covered: 3, missed: 0 }, - }, - 27: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 4, missed: 0 }, - }, - 29: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 35: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 39: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 4 }, - }, - 43: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 0, missed: 6 }, - }, - }, - method: { covered: 4, missed: 4 }, + counters: [ + {covered: 21, missed: 29, name: 'instruction'}, + {covered: 2, missed: 4, name: 'branch'}, + {covered: 6, missed: 7, name: 'line'}, + {covered: 4, missed: 7, name: 'complexity'}, + {covered: 4, missed: 4, name: 'method'}, + {covered: 1, missed: 0, name: 'class'}, + ], + lines: [ + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 3, missed: 0}, + number: 3, + }, + { + branch: {covered: 1, missed: 1}, + instruction: {covered: 3, missed: 0}, + number: 6, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 4, missed: 0}, + number: 9, + }, + { + branch: {covered: 0, missed: 2}, + instruction: {covered: 0, missed: 3}, + number: 13, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 14, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 16, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 4, missed: 0}, + number: 22, + }, + { + branch: {covered: 1, missed: 1}, + instruction: {covered: 3, missed: 0}, + number: 26, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 4, missed: 0}, + number: 27, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 29, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 35, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 4}, + number: 39, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 0, missed: 6}, + number: 43, + }, + ], name: 'Math.kt', packageName: 'com/madrapps/jacoco', }, { - class: { covered: 1, missed: 0 }, - complexity: { covered: 3, missed: 0 }, - instruction: { covered: 11, missed: 0 }, - line: { covered: 3, missed: 0 }, - lines: { - 3: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 3, missed: 0 }, - }, - 12: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 4, missed: 0 }, - }, - 17: { - branch: { covered: 0, missed: 0 }, - instruction: { covered: 4, missed: 0 }, - }, - }, - method: { covered: 3, missed: 0 }, + counters: [ + {covered: 11, missed: 0, name: 'instruction'}, + {covered: 3, missed: 0, name: 'line'}, + {covered: 3, missed: 0, name: 'complexity'}, + {covered: 3, missed: 0, name: 'method'}, + {covered: 1, missed: 0, name: 'class'}, + ], + lines: [ + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 3, missed: 0}, + number: 3, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 4, missed: 0}, + number: 12, + }, + { + branch: {covered: 0, missed: 0}, + instruction: {covered: 4, missed: 0}, + number: 17, + }, + ], name: 'StringOp.java', packageName: 'com/madrapps/jacoco/operation', }, @@ -210,13 +239,14 @@ describe('Util', function () { }) }) -async function getSingleReport() { +/* eslint-disable @typescript-eslint/no-explicit-any */ +async function getSingleReport(): Promise { const reportPath = './__tests__/__fixtures__/report.xml' const report = await getReport(reportPath) return [report] } -async function getReport(path) { +async function getReport(path: string): Promise { const reportXml = await fs.promises.readFile(path, 'utf-8') const json = await parser.parseStringPromise(reportXml) return json['report'] diff --git a/dist/build/Release/node_expat.node b/dist/build/Release/node_expat.node deleted file mode 100755 index 8c69428aea7512498cbb3d9c577f4c768f9080b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205732 zcmd?Sdwf*Y)jvD~2@Z0ZK}DmY2927it%-_F1Z_qVIH$}&lxx)p8d2IRBFsoEx51f_ zIXMns(Mm6BT5F}PK8;!>h>`>_3EmpP3W`O%pK-jPwg{-q`~9wc<`%G@{+{3a{`I0K z`<#7Qd+oK?UVH7e*WUB@1D_l`!r^fCbvPU@JOlBR_j5R+At&A(j^pt(_Hj6-PoGpf zZIVRw`h�f9e}B9ff!p^5697ftif~^{&42;nmq03;(F<<#!(B0!JuYn(*cYg4fQ= zMD@mR%A*R-%PMg2+kTZYE*l=2D*qI`>9c0uIA`Wu#Po(&@>f;*BO57x|7ZLf<^|^d zWcCdi`1$SiJg(qP?yoZNyTH!NAP+Xar%!LVdG@?40ej;&XT5^A;7A38-?{KqZ1(T; z>A~6ae=_^J=|7o${mlYDAHR>EQ}8z1i152NPFZNgZ|1D&*U!D?rkN_XH-0VM3ZC`@ zmCkSS+;{yW-<6`m>C+Bn+&%5oWYj3`B`kcVr?}X<` zgF`EG@gf|5CXM*qaC5d74#m%7Q^~T+@Vhs>33>2tyyidQx6g(*%WfvWbK$YQH|D{+ z>1KB7PXg1g56*5lq`foxDnK0T{KxNHcs4t#MEpIJ@ACU&jt$Rok}AUQ|IByST@$z_ z1O5>F<`gUZs_iWN&c!cVQoWH+G(6L%`}FbSYHRegj4HPYmLB!?_aDAg%i z*9GR`LwM&R&t(#O_&-H2_HnE`Owx&nV?D-8dwx1|`1zmTvE|+)ZodEZEhUH(o;?Bs ze(;e>Zrgc@TS5PoXr9w?ZgAe*b8q~~wR{@RKKuI>-@ooQyh{GcoczuM@1fiB^H02O zUSQ@;-@nu@g4_ckHa3~i248TzsZ{Mz81fD=<$6V^@+zG zb~+eQpCGHPH{Bfmj9JKDjgr~(9wQEMF^~ytdH!t1+!dC39*lOK; zl*6GLn>C}$`T$8A2!$UV%oiVVfCk;=ixr3sijKt2Ca+s(7c0e>)R@5Df(W z4i*1cCjJA&TeDQ7zxorPY+aYaKa%1i#Og+u7HxM&?g4o$FS8k&eDRx_ea2^`>ZU(1 z<}K@dq<~6{x)V`$>H~NMjqzn&jaPs4y}%XLH&P@Q$b}N~mh~w@pYaud_>2QS<8A8+ ziTKPqkr~jB)=_*3Z?3%3dzH7|d$o6Z{U&P+;u6;YWos1Pk`JUgVWPJ5<4TM>FoI?l zR-?h130!M;TR#_Y&$fQeW_DU@9|V?Wzi^|+8Jw<}b6lF)&*%uh-B%0mcLx2MS)FpP ztsW5Gw`6{`7Qe4YioInO91VgtjMP$H)(ZegLYebiq}!<^lexg9#iP5KxvDF0q~uBV zt*uD4m6DYA69;1xvircOn*qxoO$A&&BW2w}Xl6gbB-{yzZ&^ErpdE|?Zq@2ByhU1E z+F*V2d)8N2zgIPJWbN+YU~TDUHvUSRNM6896Gjb?V%>OAGq&l*ULAGb02+Y8-K59E z0B22MghFnCyuRf#KG2Mf)(_k=ZmbcA&GL%R*lP`te4D^7fhxA+9>A&C0w9{P%V)e} z4M)20$S!L(F-CQkmoMSX#q3bko%0csY(Hc?Yr64`W*(uL(_C73lMv+=PBT?gyWr*Ux9pIW9S8iQR-R>kPg|ce*2&p)OYKGs`t| zQ4eTZV;rzf8}4uc5t<0G287*4gml2MGtq*vTn7jh~EU1 zWGL@z7F4WRNU`zQB(IYCs-yy?&#YB^B}#v@>%AV?BJF{SL(y9a^o&hbe`E-K>2yE! zf@Vg#Lnx*jV~Uc~tUUx3U(~|(m*d@f3xC)t+a+Pd+YsPcCbRy;SVK7M0(Rj}eA}o# zA_W$;Sf4#0AXi%-@Fl!i%as);AXoA^>u3atODQt?^X;L77^Lxwe=W1ch_xKO@jTKkbF%a52{mVR6=awUa9XMKU(B3E|wV$ZFppX@nEnB@PMJs(1GQsO0P&$BJI zusV{_<`E*S<|<(|*myqt4usVKXK;pQ>M{tz` zccc!(m>gb+szAm%>$gY&A#9}H_>Ds97Xn2Tlr5PI)<#L)p>~|wcl3T{HEVmcuIgftUD(npA$Gka*fhi?ijmtI&$qk2718w;1S~N424fWC zsR>_dJY9n7WIRowPFzf#coBid7wuq=J^O25LA4?~sSZOjht{u%#D6!bV!k^rd8C?D zKLbQ?b&>VJ#gP16)~srBBBTtapmNK}x}!S-r{>Vj*kx^Hp=f*1ZT*}G#m9J(1zNbh z5ptFD1hKV>m`4;@oEIB#XeNgtHmaZ+AV(JSBJFtEF?$U7h~G~ zuVi#?Yn_CQ)^0!_I;=?}bEK-YcZj5CrK+@KJW$AO$!V%3)gl=Oy^KJ$0gv@?Bcv0_0_#~-UBaGGgjksE{AF)70-Jt%NMm&qchn+jA zlRuJVrQna+9o7c~sAdv!=4trs#hJGwikx{0i2Yx-5b`Y}^d}Rd(FLIYt)kDllf(B! zm=|nC{~ZCcIj!hd328*pPfwIbTFgU5|2^GYQUs;hnmde25CtC8`wy*OAU(1(;Gv3K z?s7Q1ZL}36`+3_iR#c;ltnK$Y9X~Q_Dm5)Kr6zW>{G%S5qq7K+tLZ|Cfi*z8{iF`{#k-e@Xk?aq_xA9PBfP3y+-* z9)nP@zCbjV2ao`7G6TAOx5Qv=xM+=<0IX{z<}GV0LVGH!0y1{$C3b$0^4og=46@~9 z;HMikB@`Ro*4vB?Z?4X2AjhGI9>1!@lY9+i`lHZi#3m7ngD%6DB2yvi$m84a$3mwc zvO=3qO8~nUkM2U${{@{M6Nni)T~(#%^gJ6Obov`JfKIIvlS`+IB<3ya&j{0chmefZ zsCBHJA9VW1-G`&oI>zSF=`+M+>9kk~G~zcDXz@X1_)>KGCjcLgPRFrAn@&>+DSwuE z3Q_+TbTR~DhEC&P_a;C69?^BeiC@g-Ka)`x^*JSQ5> zw;W_feGis!-Jl^x!l%}iNUzw-)z_KCz}Q4{6dP*|!MC+Wig#k%#O#rA7Glso>(`R~ zEi%E|zsQW6eiAF~d=9a)ntKueQ2`~^&yXy08pI#h{7z=4c7mn-Nt#(sJQhf~_JCSV zGuKYUbQP2U4B9?o4uaZ>cJDgQjiQXb0mZ7@iV}->5Urx2$681*r1)3XNO|3nEVhAE z?Cn+FXMAprVW#lrX}PPq8pI{M&;!$gjml1u*nLic9i|utgJR7bD^{FBWgO@Z?;kS% zc=y_NpeM$Gj(J!f&p*YwAF6S3P`dHf(SlQ#wH={Yct-wrfR3{!6OgSHy@Yr4(FhY5W#dmhw!!)ii=wH|*2mjxaT zHY2z7BZBW5Ehg)Vls~#Ra1^+JCYcMFLIccb4~&@$-vtxFAhQd#yHxFo6PP1@@ko*X zBi4&}8+0DNo*sdIv%Xcy!&LHbRq|O(zL3egketTfHY+KH?&2N*0FU*s!In$FDD#pA z27GeZ5X#&3E1FOUP4=!F(6JJ>E^e#IR2Up-F*E$8*Z%}~5N9>Yd(1!?~4iNS>z>pC>v5vjhHCDQ#Yb<7X5W+0{ z>pO(i4tgBHu6+i{GPk3lgE`FDCH09@m^ps&Y*on%9Cz_SzhNbq3mn#LR6=^II-p;m zGp#Zh6v5`ORE^m9HVT+Se}llO_gmRP_k0l=tr3Ch3xm6{C+9>{VKng z!ggTSHj3ZVv)?{^gG=qE^hZJtu7&@@RGR?6+`95KQXt*%3n3+y@@ytYkj$3VC!jrM+i1a#liPkfm(34_mjk;jjfEN~ zS{D;fQwfVf)=B)bg@sKZ)|0z;f_Z7XW(1ox16EP9u#iASP4BUOC~aO8qUc_7C%XUp zjKCo6BVp|t-8@AG_XEHarUeg83(3LO?~pfnhV^R(ms((uZ;cWFfasV}AMD(J! z(fBu)+2bR|K`Laiv1%Br>iH?A;TCHgBC_e48Em$Svw8eld@>A0SHK8di;6GxY~YqE zuvl%KhYerIk&tyIY6l^o*~P%2jjZhno&?(GO=3%sC%M9EWblY}7b?i;3-*52S86BY zRvQX;GFk{YzNnQ%*wcjWct9dXG(k>eQMPVjtZLF#)GVZyY&v%!#%HrsqeVSzk?0tl znSbJvhO}D0Kpkkvm;X#RWOwj*Gz9xG%6R`Y(v$aDPcT?#y$F~Y-coA~ud!V>{-ql7 zs11e7zYhr*x(*w1Cf=>rBx1yi7@%21tu>6zHl*G9Du z|K?%z98!VNEk}2} zkA4yuo@pdD8$Y$yXR-$eSTpcJtKg~LsF2n8P7`V zS;;oy3lV&ot@;&=wMqMks7UoItzRG#3k5C+(xkQ51v69%_2mIpAwH4?m>PlUqSd6& zC#26Lg0$&_4sW(bGeQ}%PNB?2Cw*Z0@3f9q@d{XLB;8Lwa}ku?`Zd-7JKYS1G@x>F zwwJ9P$gR)@9*c5{2BFzv>g`eK+!{}}KbWX`d#lj%JOqa~IT}tk?uFEai zKT{H=+N~MsQis&{{oGR9!s$k0@U6rgQ@H^%BzjW%)w+lspnB4pfvo80j@KBdsh|AQ zn7e+BAWz~)wCVpEwWRq+=JiS zF6$=7+8ko2!PjHWQIWYEVpHjoOm_6lyQsk)eEF&Yb|C;t4=*Wp1P1C|V~g>HoyBC~ zdXPX6w5FphkZ=D-ngF|l#~C|7f{fA-MUKQx96rQ6qxGc6kER)ud%Rr#er>fAm@RW0 zc(?v4(8ock+Y-PMw}PtZ+e=B0&0>SKmP?5d0SKfVV$47+%q?J9cjPy~)VhJ$=-HCl zp-%t`Xkq;rDQfe^XMAK0l`r7ZX>F7YV!2q#SJ;Z`ty2UJJszy585ysKZrB%aYUqVB zxyPy{UCfbOxDT@KVwSGj7Q{)jtn(PrOS)W-xWttt&sBJ{p2eSv_T)opHt9_!T9bZ7 zFz9Q0XZ>WBi{g)N4lK!~)Y?#%Qf%u@Qm)Gy%e=;O)@AZds;q=uWTUsC1apo?N`@*> zynL_@Sr!iS4eJdo_`!ttv?u$tI5l(7ueK7A{@O@?Pw*)0o)ghrQE?kd z5Wje@G;+jWI7s7z{)Mlnm$I$nRq}R~e5Xo&o5{B``CKGt$JeBZUa>#=#E$Tl_0SUG z26k^VUS+EIz}Q#=tJ{GSY&0`=bW)UlbQN3b6IkdAh4~IL$U7`>9tg*S)v@!CZHom} zlAP_S-;~!Eb(j=k1!XUQpcle;)V2mwZ|YbXny29v^b}tfn0UgSuyG8~3=P3(mu}P+ zBlILMks{XZz*$Ot0@G;kQiGbG4I2o_1aN$MjwX~ug5gt6%-md5ll&A5gjgF|P zS9Bw4;YC23cxj{U$(uSBxu;3w&zM@sSVYa>KF>hE@z5H?Cd$DBZL{zP`6cf;h@}ZG z)=qjDu~rpO0^ndm=i%P)(3wX z2+%PhuB`D735~)TQ8pZ37D{_NqY*?7zaANT@GS|IDqFbxy-f+7{{Q&sF?6`fHS zgW-v1JXx(0XQ^O@3Z|)`P6ZkQx~K0$!hDjaN=Tv5uH4b7K>3Hyq&Ih2~7YC!h6v)Z)$R>ZazzX_n{A{ySk%OH zItQFm$$>c>@$3@Kyc#UF7-Mg(d~#CQh4uyE8mM6`FJocM!J2_qZw)>T(A73*fLOtP z)XX{$GGnkUlTV|=&inx~cjshQ_0^H3QQtCEUry$>9iWvrH5CL|wg<1ozd!KYjrSCM z-b3W@mHeE7i;)n&H%q6_RRnYsM?Y)JhIU3B?jpkX)Glu0&ycDK1(jTx2dI z7o?$+74o4=YA@)_1u#si*r^*2sP6}6N%RAX#~vV$*-H9i5W{b-T_eHurG9gErQY#= z-{gt#vm3^$2ZtMnIRY>|H5QW&^o!K1{u$h@hZlPsff7_=_S4PrkdmWzq%QMt53Z|# zlEa~;Ht8d;_RQVIW{xTHcHY5J?$E35;E)cS$D((*@T!~3OA%xsNMs(A`&nXc4*}g# z%o0^&Dg$Q_z!>z*cr8~dyzqUPqcw~S z4%B$tJ`}WuUJZ3f?K=(8;_Eqxxc4*!S(1G!+BGBGjch(+eTx)YFANobq8O3z!+#c@ zb-Q2=9?X2d zAw5xw)I~rJM&MC_O9dnj)eCIWl;gqlxu6b@hK#Gx4g@Pz5K}=&1&u10qk>r~n4yAc z2(Ir6HzQCL3Z>S&5Y!m!i&ds-6;!IATm_{FI>UAN>qJf*i(&n(D(FUl$T!s&B_Yyc z3g$`%vGuD}@GBMhTLj3`tb*ODzz#N7W)QLD%Iq;^BAfy_b9k}#GM5opxVukyU*AAE zCxsL2&bH1(bL?IQ(+3A7hiF~W=WM4}44gH_9x-30XC-b}VBn6a419>@)WC#yN8YWa-E3WMJ=( zoCW1mH+ppATg|+84d~?djGYBzN(f=2+p~gv;x3EN!5Rx+YYkY!k*Ye}J82Om5L>h^%Q^!Or!W_Y&zE z^I`Up+2%oEa#|wg;e)$2i|N@=1~=&`&e2bR`RX#ypqb_^`&D`3JMMyUE|vG9&ri zOD4(rXH>S%gQ8H=fGIj>qxH-vKw@H?Jt7nKTft{oBaSa%O!!-U=8PH0je5rOyG4tK z%B3l_AuWD~dX+BGJKlqr+1|v9M9!>j9dC{*msUL?5!k{pZ)d+~BX4g(5QMieusgek zWa&8H&~&DOLr-Pq)9 z8taLT_P`$GasoG#hOuYJTo-a6uI~vt2rJa3j~UQ*51Hr((+#(NTpQv zn&YAN0sZj8BDj_ul{i+KfQYUdMBtyE+N?K>EdnbR=~bH-E=^+u3q-3sdLP7|blBu> zIPbJudm~~8i2NNTK^-t@3#Uuzskkf-?cCOjcFu<+r@y^vDK$)TTH;TJ?9^bNT)LUUBxgN^$&T7i zXPA?z)2f_8(@Wt(mN&vhD3|O`Pi|?GTxnCk$DAB&R||ttgM##@i1EcArkbS3SEvE) zZ`b1!AXfZv_*%gUoss~l&7>ZL4mMzteZ5Wnfc3yp7YA+|HP9VxVwxE)=Rh7AE=3SL zj+@|mwHo0c3Jp}cjBb-zF}gK#RVChNhJXqGpjBFlIIwgSrBS|GxeRzNe@ZCy(zK#um$fDOz)B90aQRh`&w$C)W>@mClZ zMy<*xJ5YHoOrEb*^#ld=0vm46Y@h zqe+AHmk6)bXCP3{W_!Yvo=}@9pTdaRYDI8E0+gt8@`<0@Eq>!uZwRJMcl0AnHIF%= zWN&dl)d5YYG?!mF!QBZ~>dlo!aO>y+A5wix)@og$cD(SP-@F8;gR0S`J<85-bsbF? zC;H3=G(8Y%I1LhP^bGuj=dIKgj`+B?R+K2?eD!A0Hy3 zXG`qDk~-@;`>oNs!p_-@`mGjZXR#iBJctkMkOoiC&1XuKIIHhTO$0*Elu#bx6;-9l zO2KTlS|p)OXcg0l2Ia*xW_m(0G)~J)ZQXMS1X(4dVe*vB(mkkMh@ei*tlLd&kbp$v z?_kNIEK8TALkw!cVUsc|B&HW=#uAsZmhXm8p&i|`j0$l!2YQ}r8MNjf1X0y|yDD#H%~y$T zp+<2^TQfjwebT5HT^j<9`7zY*voY|)T)Pr6nsM*yyaX0z zLN+U7^7F88GxBsUt0OtGS@RQ|`3Y-~71g!ml^}2?WV15n&^)b&k*0KQiy)@CrZQCw!o9V4!9^ z#)V@}De;e_kin876&Px4i*9Xndnv;H1tJ88VG=6xb}cJL-*YHd>@;?y1=S|68jX-| z$A$Ox3ETt=O7KiO^KfKNzM|V^d1V6`4rHk|Qp-j*B1ZI4#icNjU~9PtpA@>k(i*nG z+D<2^mDkCR9Z!XSk*+wg5GCz;N&p~nJ%(CsZ0+5MmJNDrV!9&}5eeyTIO+@}};ka_cpuX{Zx+{AHz*zN{PpB;$p^hQ@MyB?Q(Nsh!v zSWMX1usMkx_y#H5(O2+-no)aOF=3esf%pm+5KT>;g%wOWDj-(t1yVB#*s@mk86l~{ zZR{{da51);cZU|^so0~fhKH%%@xjGe@0d?b=c$!fS^ znTP;2t$M^k1N)w479RB^qD-tlN6cYjeCSvNqIP=Mxlmn2yWiMjeRM5pFQ$gjdiISY za2$#}D)8vw?4e{&{PW9HN;oPVBeNm)DbOaxz&4YC!|e0^#y9Ap82w4SW~4+o6by7M z8R%4RSEPhRhm)44F^e4`U40ZHw1(Gov!2p<0123YyR%XK~+m$>@VgOtqOP%~vUa>_t?krIw=FSoh34U{gBv<8VC(4rQjz~ut z+r1DQX`3o&a}oxNx?_c1Thdgv%|Kwl-s&8!!4%A~4=AZs9Il4cgZj_HYJ(_qsmCB*cnz&s_QH0q z!lwkNB(FE6N;TDUh#v=cy1+>a5frtRfaE1?NI$Q*5Caq7ww_~KGX*^@ZrWoTCU)Q) zCeFztRXyw|u@~E_AgQQC`?a=chj0F|(13y`RY&#)&Qnr%II+tScF7S;9BM21fg+Xb zbmlry$y8#CIz_%xcH~O?j2cvrZVI=N%6)@l4?}K~mh9f-L~DDI^C()}ryb^VX5j#n=|j=$D;Vp^A~+@|DQ0c1UuW>yFdR6~Y^^ zWew2!PSCWoC!o#UxpOXTiz|e2lpEH)D*x6%LD?(mjI6!_)vF{}_%(9^OjcW9Zi5n0 zP}Xhq!$xetWsa>pd#uOk1O3#)?IWDJK*`J40+RY`nDEok&rWkw)faP5Ni$duXQlgq z%!M8y$H9mR>C00g73~6e{QnDpJp`PAnx!=kl^9>ur)HF9X?-M5nn+|(t~NXftu02p zX1rFP+MSz{Esz7{EKYY|A4i}V6s>0SFo=)U%(d+@#-QA5uKL7D$iYJ^Yt_h8bW1%(wDPRy#QH3?7WpKR*)2(6sZsfhptqwL^`Wa zGjKQR3$=-+5bO_OyRH$#?+Cn{w-^xOxjUq(9##hNr}zsT&%&rhMI?S^gU)ngUGBOX zr*A;6AgCakmCs0|Fr1~Q{H7nfwp(pM<8|MSnF6T4<1_Yqjdt(l-YM33tSPUnv+H*` z!m1qUH1h#!6y6QEQ4NfUi-F$53wQ#qh`#uv^rqX8LX0RAun${%V7ccOdeno79s%wP zWx#2l1`RF@V3!12q_$B-pe{ibrpR)`Hl{V~OKsDQNXZUj2jU##4Z%u+4@YpQ7C&k4 zEubZ~8ftsg9F?4a$c;kRC&jVPT+WI#^OvkvGrCgS2nFH@Mp(?;y9pNN3%>8cJFDXO z!33Uk3v(hjY?+JNQ#}yhhx+K{52~df$ADQaPcp`5QKIt7EqWcoE4&4Rca882ww9`7 zlm<@I<7z;|#|hb?Y|HRAYC~EaH-8zm&B+pEkx_+6yo%gKe6ND>W&79?LpJQtAXt`{ zaybPME0HxM^{S1exH!5XVNG_gYc(s8nW8oZxA2}s3oH+4es`$V0Voc4WZm%+(W8Z1 z2^TRBBgPy4wit~36!q%(p!E#gH5l!%@P*qNIoQx0zgN+(H}#ERr)_3?poR`9kW8ph zAGw0{;y?}#a#;(pn4+@NXBf5vMuQxZM}rAjH|}Njn6s%b3P;+5ZL-mfT4+)QHY-sC z?FNx~g!%()J+xXo&ve)ao5@(Skpl!~ek?DDT;eX(sB9~@6%h)YxJ=pa$KY9weD0@K zHA`Ur4groS>o{w+Ck>pik7DiN^)_YV0)>Jt#A-zIy$x|quF(Ec5(ibZ296HxAMcL- z2H1xhofF*AyYL456jh`*;1*A+TwkiF@-h0v&Y;0S4zDKW?R1p&DurtoP^uiIghnLj z+!M1!QFmVPG)z!i(Pjma<_ZkZ!2`{jQ3MxO>^v=7$<~yN!cXkapn*=<(_8eicFHx=zuGDUFQMvaP&gR_!d%)43j55*+7W2RQV9;%&lOv+ z%wrc1I>RO*n{Y1SWV-mz#}b|VF8(Fr{+C@GMosLe{$NPEH}m@F@LlXraa*F(hB5+!FTCCsI(v|%tr*>vn#e_^ zJCXnwVAs@V%qS9;D+4;I4tx&8Qviop)8EXYuNgy>I$DtJT);Ins&B)j$R34rE^q+_;i^%r8>JK=@Ps znu@^;;kxkpffy!^z^SUi-0nnmJwhIl{93pY5icTwo7>UtikRK@{;2GpVuX!yM=OpI zs!_J=0T4muB*dv*l_f4wZXf_tJ&7j}?F}Cs?2dke3nvrJQqtc7CxS-?*+9arYXAhB zB4H#Z{()?E2dL=C?J%rM>mgBO$Wg350AT|CX9h(8DKSaLg4%k-+KywsD?Eqo#Xs~` z;)epIzNa%x12zEGcBiQyUT@cQw&eK_q+es5sp_4TuJ=vhm)v?;*_YC`Y-RDG+pr_K zu9_7?k3vsbrz=3y07xXHv|@r9(Y-MX{2ct$0;(v%5^ROD8z>S=O`OBF_Yj8$@s`o! z$3Rg?bIKYX3K7{8#iVyrk5mK(Mt*V#3{MY3Vb{&5$a^D7veCa7IH47+F9{_jQ#0^x zwX601&8a}TBbN&Wa-`&uP|Dzr%$9+jzM&9R$e}ERWF9LM!B;r}vK=eY|2AH3g%@GK zW4sh4$;_0Uw$MZc9%109AJrv(sYEq7l6@)QOvI%*5(Yl9if-P^p2Lj6HmdUyaNO-$ z#zg+hoiDlv08lSs(kXG@Ax!=xiJZ8fP<#nf=LZ7`gzK4A!ZW6+sN0@eC5W2g%>3k1 zd=4Jx{N#@GlW*3A?OVx}b>K`Sgv0W>CN*&es2FXM8Z-TYd9KGDDOO_{Jj7c^cZp_l z6|{jY>%EF`2jUBl%ElgUf`K$yoX$k0l-(hueHfX2Rpsu;4YrI(Y!s>G?+&fA#pb^i z^;C_VC^>2=I@48hkh>%GIn~-jgVi39t`=iFQ)@-K*1n2TWQlfk8dyR&qf4@~8xt#R z0h>`B7pn-WjyB(Lu1MU_JKq$E$cO;&51b;7fzyyZrs|p%}!p!jpe{~fz4sPhku*Y?~Z(_n%kUJ5T&qLC)k==k>(=k{n-!ej2pC~2oOVojzI;OU_v z|LkH;86I6=A~q_q0NnynnRYpo`SqX+%~TqO)Xyo+9r>8CN|ywKk>_&dxYfdWlQQx~ z;ZHx<1ePs|l_x?Zo4JZy;WNWAA!0{r6=8EKS_Qy@g6K3%b_A-R-ALVmb1@G#+nxTM z@BpS_i-HL5&B&{tNkh`gmOCO>Hpp3r!^kV2WTw2r-RS9gWU5SGL!?Q{DNiW06{3R_ z)*B)vG2lzlL9=pt49eolx)0JoNb+NJpFM5t!2C(V`;E11sjbD@%ZS9;!Yb@R&_bqR zpn@L!98wA6aWzRt8dDHwoTi~hG?Hlem%M=t(Ydr4-%hMJop8uX`cxbjWsLiBGU6)n z@(Ewg#>+>1ITbG!UyjGi2Ym6QUucARA2EajNyf_XniZs*k7R@lU$wN0UJ3dn9#zrl zVHbQe@f(Rbw0U<>sW8GTZNO+^@b`%lHEJmoY=M21U7YlTnJkyZYXAX66bK~Hhqj1; zC(kra!uZ!2s>Yi$(Un1q-wt=AP$KBeCvJ3_*)#(QTEj2IVXnb<*Ed?n+l5^PE^1|o z9}AN8Jz#5mS3TjtxBK>c!93hIyh)g7eIt^bdkx8wnpm8kP}~s@8)bxJq6}HRbT4%z2YcJt3f`1R^awQ6YB%hh{u0pxmBYan zMcc71fh}=Sx7M&i8W+DTW!$U$0`JwB1xkpt-M3sCU1KafvLM{X9FRiW*f=^sfWQV~ zsIb8WdkqjV!z6RZ?!vy|Isvc`E>LPQaus+1%&&65i?k5iMZUOrcV_fTP+N_~R);tWtz{LNURl$3c&G z3d5s@^u_AL`AU})K8~2<+K7UKWHpzu3aziy*XdZ8c<2b?j}c=o6%-7nheo*;x+AZF z<2nmmaA(Wut;LdGMv(w@M~9*ji5n38U-We~vOz4jaN`M{d9W!r$Ys>n)@3)*!g#_d z*>!qsS%&GGq`eKe@Aq9W`SGy-0c{xx==~zNnA0`6onnYr&FzFPn`LLOKw&e%%7y?k z;C)-M1?_}QOLqpb3aIUN#>f;+&Bi@uE|e#Uh3B ziInuSzeP~8At{Lo%)qD7`!ELl=EKFPKk*VuFb~XO&1fawVP%6=6xGo5_<oIp3oaAGe?>+XMpD09yYQju&exed! z7}XV?1uo;i#ObUjUii%f2yR27r3^Vv7S_Sj>;--B1k9NVJzl$pIh*!%cjPuQWOzN5 z6-Tff`}~gqRNe})uaaiWAwuC6mguT3W&Iphp|pkKS7Kb2`CY)lel0N>Ef!7ez3{TG z7O7_nbpEgdBnT@CHx@x?_hVJ2Nu2_kY%$7%19O*Oz+7pL(U(zG;yC<4`x7^!dyui6 z7}`oXXD&<=Y$pCC_JaH}|7H}4z!}mJvgk=4mONB}NYWveT?lHk3%|4b?nGj!m1Y$% z&jmP6FOK>pXplFw_#(8eSiQp35j_I0IJtZ7x|%882(s>~Q@90VI>ZC&@YUx5CSF%a`! zl;!CItigvrU16#r#i%=D0kqW%wrn?ge`BJnF%R--gDN&FRVhZDvA zBB4i&XLKO*F`$;uU~lz3@&tqox*%BD%D7%q6c zEtwKpROATsr}JC%cYpwk=;wivy75oVypI69@i7HYgV7yTJ@bcdz<}YX3~_Ka6hK+% zN$vK2wTmb1;0Wb2lF&ytV9^9b)A)@CxQFdd9p^Qk^TunP;e8jomxbZF z20_L7DL&|j3MfvtbOUJk;J{W`$sFqt>%gWNB8F|i*mt;VKTm8_P3^JAKS*%VC?NQ>T;oXi zZsz9RA zDf`7S6sH@S{R37g`K8$1lm{h$$!Y`C0Y`G{1}N{2@hs~pMA*RLFaBm?u&c!V4A zOvdv(zALO$sv6J7cpr!GT0BqVIWv(;t^O#LIw^^Ac#i)#m0E+R2Tue?VLnCrgP){Q zM}L}1ZNl>go^vrtKaQtrPb&2+p0Dw^KToAj!*dRv5qK`aGZs%Bo}1oLPZQpMi)Z4y z>iOioREp0!oG;yi_?{2cGaL@&Gw>Y1^B$g$@%#%~Wa7&F3&MWYWn24X4n~DPtkkcG9Cb}lP z=v8O%4BVO)91ce360tKx=Eo@m?jkvZaQKq#B;>_#EJBhaFq6Yej%$YS>5D(8A*;{) z3%MHW5coe}Ravbybo-q9A>QN?p#v6vC{c}77SfF_)Heg=sPrO8j;v_sR*5J;_KBw4O9Sf~X*9Bl!^j=oh`-cA5tUpG-~!N)I>-y@ zZ;}UJHnFDRE3p$Lv0g+ceBzE=0XE?grYfImz0Z75^#mzTFH_YO3AK9SO<;dParOYY z;0p+K8S)3Moo`b1s8+zatrF;}Hf{~zh~asf0f(+ts*SH`#uxM*x01zZBUBJ^dTNC% zfFom?Hi{seR28iZQ#Hj@O)=S&@V=wq8kz$F3s-b~-p}M^+>fm7O5O+HJ%=A}8aWyV z?}58@6a*BG7vfwif6|Gk)W#Kc0*pDjnEq1$N3Xfw!%ma?o7AO-aKgsDBhWEL0OB|` zh2W>wR9Z`o4!=3rZ!Y%u<5RKz+@=kOzemCApdOAlu7-RL%&l#jiT$px^{;m7!(Y%l zKI%ht-c@ta@ZiZJ_iK!IB3s>&d4TS1nl!?3(J>WT{8ne+qv}X1SmecNTRBSN#OCi? z+P2SXhHtM9{oPsZeyU3=+tdn*ICS@=U79mpaqxG3_8kugV{EtLm`;(`{nQkf+^Oh% zMcZac-*Wr(;70E=2pq;M`nLCe6d(1zK;yYvc*bbPwiFy00gCDfSpuqo`zidiUv0aN z<740qxVypC4O0g0?3hm)fLNZJN7G=Yha6#W=j=H!k5Y^v1^E z4F2`tHSR}YCuH(!ZTL1odJEltm$YWL_SFt;IL*WDsV&;Jk2*f>GyJvc(96z>Eyf;L zo%$Hv?x(u7vKM6E0zLAg=6pdQ7#+cXCMU=Nyf{E%{pRYYca8B>$p5R{Y2X# zKaH8K8^jKUoztt%=gME$&4LQ0n^&U|F9?&3!5RoR1Q@9ld{c1zq~LY=Es9Y)=vI0r z&%d66!V*`o1FC_Z8iTcBKllyqNFK@hQ9T#9hh9?GbX;U>V5$}$>(pBvB@pz;$WtZ8 z%kB-&hxZrHKVEk~*gfxP##J4JchBNfap1_#ei%=&W3?2vd_Qjjn(dLT!56fu{Wx_J zzbzHIEmf?!Yxj2^VLK$^L>A9D=mtapcnv*C7g!3XioKz>yD|J7)$Y4HjSEU}m4?x7 z-3-ov>I(sV6o>VlKn%`N&{2sV9oFpQ2-%^`Q!NL5=EI!1c;c`b8Lb!9;rYN64Zq$L z$Js~w06kn(H(Gn`#42)oRZ#%G@sW~t6yv@mhg$Mf#_)|XOu;4{X}#z|uDgOfKNrQH180=Bk$lUN1b_|3^LH=F-Xo46!f9io^5zV8XG>p?t5#3=~8O@2pce`D}sZ)i!Mn}Qc2=zC-ETm%KPgQW-x z=LLs*o2K>)9k|FHaiav-!J{wjEXS+QxYd;yj+ct9Ntd_DcU&JWwK0O-XsXSj{TBt3 zxCx0=fYVD9hlqpS0mxR+c5jC>Acw(6p-)MeUm%lBn9)tXi=nRaVwGRA6)~5d!p|b* z5*6U|s<-B@!+4cL%zKFzep~IZqy^;~b@P|)0HqFOgMikn`#B9#N{r#JG6aTV&y_i} zDp%kn-H>jw3~Vq3JT9PRSU0m0Y_uAqU7cfw zIFpa(u~D5k!h&DLpBcZcQRE2XVAoq#scOyleDR+Z;aXrUFGpid0Dgq(f_obAOCnPn zak62qOp9LwX^fwpIAmGCxlrc8tn!{;quxOy0F?<&UKy#TE@jK{n^Q1=<u4^m>iI=juEFdAsfTHTd!k4*Mnaq5uc!{h5tU-C>gmbx%iO_oy~4hR=rEValn$WXpr|AhOGnfCpo0n`Ce`Gy~RKE zLOTGSi?4wcC63f00+V#3vjzr5REDX}XPl2DSTN=l`{RpI+eT1N{dU;>=a7UdO)J|2 zRihuVDZ(XHV1~`H2##fDC1A%>N#wCA+)Xd+mHbzRXVO35sTnWG9iJE$ z-}p?q00Rf{dq6OrYV$xu8MTk_m=<5rWwfU;6+N}6B{;~MFSWWO_aa%3M@p3Cxt1=< zE^>!a+e}>_`VR~*&Z2yLzIgMdwaj# zcIczd`Z89Y!Y}+aZTbCg2(xBReP1I5I-Aae3QH>i6{dAMY>D1dC$%jsp*fqEbnyp8 zX~Bnrfu)8Ys@l5Us1Px{5(6IPFdisdH4d9Ob#t9XbZ{CD8pxy)n5%L5K*e5f>MoY5 zjRi`?Vtu02qHMUZe&NQTnHUPx2)s?pxbXDGmXVB!LHLtyqq7sYsJ83oGO40!86k={ zF)nL|y@YebSmnyq%6C6Ppprq7=AHo`!K0+xjR)bP?Nz4b!H8Ns#@Dci z8tY-Ic?=UOtJwr#c7`V3NpLymOeFVS#az%leN|sBY-6*Mmw7u$7QA<3G1@NJO~NnO zHsG`%_9ZFG`SX{O3sdr&yiNyR)F&i(Z%95VnBd169=m(09sHS^xF3$mlS|`TL3saQ z_p%oO3wD9efF6fgLqSYzebi*36TrsEYkaL=an6Bs{F{=cV7kO=l*oQj4z$9D!I2!; z3fBc5tHPiM$XeWNq_{8m6Tk5{bwqIbp^30(Vc`I^sTBR3yd=LN$+KE%8zMAzd-9Pq zB>6d`#En?Sw$e(K&R}9-0Tc%oz|w4yd)0Dc6!Krcawq=2iPm3+a5|oac=+D?ISFyR za)j}GKRta6H*@J)_~TM_Q=reh$Uf14wN-bG;eQp^?U>hRp8TjwCMk!Zx$vQXN}D=)Bj7>$*xzlh{~Q$?R!#I9AwPf9GDuax>`FhUX9~x;EhW(xgexz+RNFr@DgetIczQb6>O0lXBT@(i!JRwg6!UMUWr zL0C2cg7cW)uzreD@Yv)4e|W%FQ^CqTdew7*;okJI*W+r+c6*I6$AHg{tw3YcQU7EK zn~47RLpq~fa!v_yUC1R3<(u410;CB(SIbYce)_5`^vaje4&Y@HBEj4d*#tndZEs~? z{G3Z=%zm1hSnX@r=XZYQkN-_H0f-1J0_>&TP?)oE9kMVU_aP_;btoB}qA63=jE%8> zFf~!r8dk-a$GKHnQTB=g#cBQ}n8*dlLjnZ7+GTmpXHW8X(P7EK1maEIT@pev;TLnz zfTO*%F~Crxr|%iQQzc~#nja>=@8w1-bOW{0b_8nG;?$bmiQYmlD+Pzx5-QIYWn+jx zztin0#kYc2BR4=Fj>hWLA#RvJt&YHrIFngKY;B`%{FvKuxn4DtAGF^32et{=ju|>; zceHufdB_Pho&;0G%DM`q+d4L5yA>*AnrbD#r>qVcvFqiWz3e$O^9MXm2Qk;nivS{w zsM%)*)V*W)l2+yzFmeSMts|Od7EYf>b(kH#hi7cFS9^R8pRi^^T^F1=Z_dn{Zk`7r zyF)X6v|C$u)6Lh-zGm*t*J%|Uh_JME*UX(cd*%(d-H5L}+PZl&1Gim!-OPYW-lrLt zV<~W{hjhdhX#qEmPcA$b)y6M(2LBB$dnd7CVNNf1z5tJ@O815>sV(9C{pMedZN!yqS;IhhRK1dV8+Oz2XTWo?THXe>pE8wc5$T<`eA^h zDr5vBx-nRf-)XOQu!C(xOVJSA2igqy_~MPKTn5c6$Vi0bX=_AfF%I<8X95kdZr|TSf?J|j(h9)J50;D znTs12dxMYI;AbBS9)}VIA-%Y1ARKskBj2(1%HivUPvJVe8z8`lk~?|;yXTard)RL3 zB4?m>5#hZ2_8^=h4uI73K~Onh(AX;xBIL^}wx(W5jEBCRk=5?#*GNxXggC4U%_WU! z9mT31FX&3#3bfR348qocQ_whQj%g3SVd9Ql$yY<}xrM!F#39YS2RpB%=8{2&qo!sI z?sN?FnP=0OC}k(3C;H&XHh}r`)N^|`I_2ii7RzS?x)6Yn8~RIr*QBYHp*KMS5P-l~ zwH5|#)x8BaoKMlx-Y|I3G^cw_q*vK3hkZrSUgpvB1d16yv-sTy>C`g zGVFvS<(zVh^(wd2(GYIg_!|}{~Yo$#zL+Jk(LFC zpTMOv!{mwKuAHxQ9(SaMexGt>u)p0_S=K)b4U)BiIy5uL|3 zceuR}yOi!_9|Ifj270+*4*3Hcn)a#jLkhKHaLJx{nT*pTsOc~+F^S&|_i?Ccec@Z# zB_1F6f}F(${Vsd2Tywr|FV%UPr9WH|Fz7VWniP1P%>o6|x|1U0WN50@g|^I0`hW7R;3a?$G76!gB=SSy-CF8xkwCErA=oO?S)12^jS=aQX2CdfzccO+)ZCL`!wV zxHZ+pH*83Jfik5mQ_eEHNf5b8_)d9lXFY5|SO=wcp^|RiS_Gl%0}{MssZqQ^-$uJ} zllh&bk~=b45VV!-vd@j@y{Xp{T@qPS(kN|cL4i)`)*}U~9B|d*(g7)$MKI$%Zqrn> z6!!hm>5fA6!|@KkE!#4Nq1uBRrbPb*E1|y0Ghzar=!}wDCXuS@v7~VLM zi8x10k4YZ&48q{I4%rjC@TYAWC`TWKB3s>NgN0;9S6gv94SHX-kZ(Vc#W@5-XuP~? z0=9LqS4WB&NBE6r?AHmfIhO;2@`W#dnBT)~894>S-8v!{$X+$B(rn`iX0Z-uT^J%L+%Rg!()EZmc= zmF{v|D^oEzHsTuYlt|@{HUIahuUbSLt=a5Rn`<%fQ zwZ_fmy0N6lA0Jz%$EO!{Qezj=qhq1dziti0fTBdW$7Ts70nWu(uqD9x+0oA)N(;`! zh0Ky(?J)(+=Z+k}z)9DDVS5Xl7Z9I#7t!lb0QO>NZ^)b;yMf8HCeLyN2IwXPBYxNg zV>(y%@HcO=3(;{9ye;bRYGA^5FGerGn1)$8y%c?x7*S-~Jh*c$cyJBja$QDoEK5?k z@{BQ9P(anxJa}NcfUvj8{h<}+HZT;>X!wH$HDaU4@>f8pM znbRP+t_%@l%Au=kPj6&_Vhi18fLtD~iQCBWX;cEa1MU5%)VT;xdS;m1j>>V)u(sK{ z8wMS6!3vbdp@??$lj_iD8DbJ9iIP5GjrPbvIkmI!EcJD^>=w8P<&4ymND`yV-etJ2 zROO-(Vg)k752zg!g!>Oy6`}R?HFRKqX1#K+jCkM|hXDa5UG0we0V>o;zxwg=#(juk z#7ItWMvqsoR7gL;U4&G}>)1VMPIX5jUT`6eaY%PSE{3LoHPRLMQ@v z78K9xxQDR>OAO1;9&8OnHj%-V0vBHfU1*> zBsffDy7AkR9=^-=op2u9J?bE4gMZC1Tn51?t&fS9@dq-9w;`#kfzX}ZU?6fj#RSLF zw2a8ADVafiz`%`wB26GOVAi8q%s4_&)FH{InfFkPm*H&IYvHf^%=;6o#ML}$h62me z=`N2l@xRF!S8Pv%F+ujrz1b1>0OCH(zrxQE^|dGV0dK`AiLd1KG`5C16#AQE6cwyN zBbu!nJ;-TvCP+?%IRo*48%5}B6Iul4tmyCX#^$Q2ls7zO=U%!K+kFtE6j)`zP*0woF-Z5VY@~Mm9AqivOx}$TAlrJW^4f7Z=)3) z>{Z^l#}G!~Iue`BLKneKq;6Rv`{#Pi(%sE)d6nPpn<#-#On{hn9m$ux8?bJ4B%jmb zg$)oy6kJ8%ndD=zhsd3g$v=C=vpe~FuX48iwQ}N4{sK!1u70sFb|j--aluXe91&h| z!%fh3pXp@uImSR7Rk5dSX#u)f4?Yh5hTB3~u8MHWNe?4kXc<_LPe*rjFe*rnR~#9? zk5m(*Fql%^mG+tRx$!#Z&m3+%nw&TZ-3pWxZWPZ`c(&m= z9e&0?!$UX=5#||wF~A?7;(-$()ROK--E>82Xeh^qHw5;A>hbX#&vg2#J`LQ4AF6=u z{nGfrVqe34EDJTcgLMBQSWn?9D|-$2`EPSvwN^E*h*w&3XB>_MaA`e~-U)IOW-+3x zaS17Z$Vqo%3wNFiK>fHJv4P5)^&@PV`i!5U>Jy1k^cIl+a6gO%d)r5OErHc%2e9`k z8;#s+j_reQHM6kmYHAV?U1Vux0W#FmHa@Ks`br&pn7UC5zNYG3pQ%b6t17`xsnNlj?0CN^0HQnb%Q;l(+{@ob zIT${WT~xFw)o@$JQj8LphaujuPI@Di>Z-jPQo|ul8zuE^_8VW}w+!@nR8$FNb>cpV zoIZ!ufbX>-pYdchs=*~>F}RGDz%v12>^3N4&?P&oQ!rl@lwi-JHhvS<+9I&E2H0jq z6VZ)=mwo2#LNRj@K<(o}9&c!&11CT(#3sALh3$5S2d4!%=pj{O*49@s!W&*PEb6|(hd{mJV9rF$>EYvkDUdhBYg~*z~ zrHMM!XMcIaoB9wAFP;&~hCBK|KGH0Rdo)!)k^H*x0(t^j1w7ozd?V%bg*!d~!2HI? ze&e5HJn=jPUjyi*da^UikkhB%zNqu)XfB^+Xfut!j9 zGg-=vszFq4-M1>A(RhqI^UFW<6x(QBv<=jwTC)~u#`0bhp0inR@r z5Nbbly<3rxh#`B$)>`~Vk8z*;)|#o#b>kWkfaCpvP`y$(eo_l(uT!zGsw()qJ94@# zwmSNFt6o_0Npb*wn{+n@3+bmB_mGaY@Ss%H6^D;;}Y z=;uQm0XTSlW_O+6c+;AUiOz4N$1D=20VweKX(EQDVdvNslpJ5t9;^iP23Vp8Zs%_c zv0syCBN4qRcV(owaw0m1$y^h^qK|IWYiYl3Gf7wtya55(MMX;#Ew~bhz-Xc~ICS`}MM z#V%@<%n+;*1}0Hv!T`0}YHO7)pMLE6bt}e|1eDb(O6x|eELHRNtrfJbBnb0+zV3a$ zCzF6}zu*6#2RHM6-|cT*=&_X&sD8d7X0_n+<-0ZZTYRW*3_8m2UQSyGKN ze#>@s;1092*xjMuK%fNx@)hZ_}awq6I4MR)=6TvY=*R#vt@s5BR1M}mx{*H zgZnal+mMDN-jC)s)uc^vMp+z5k+baU><2kfY6cA_spU+tBiE{05JcT4HH42O)U9dFLLtBuyT`V@*@#dQ?So#ZIGyKdh)%n~%yfV`jcRYitle$~)hI459F69o{mSVpxE6jG^ zIOPgw9DC??mzuMrx4vS&_l#*m3ss>2(Dd{;hU}=fYMQbJe`e>-&z3HXHO)-cR19v7 zrr&fL9|f+_^lPzW8ifPU6!>*v$@$sA3!_u7e5rSWEl*YyzbZ4Z8mosp*Tx0Mmj+Z# z8LFBRW6X5Olnw-3Bsx<{hpLzH54b3g^oF2D?#gi*f6KyKjc(tO;ijx+R5PE-h49+9 zHoDcTI>s73CO3yzht`&_w`d((2bW}wrgQ@p(pUqLFrX|Q z7ik*S4Wh@e$y(C(;Gga2PBSG8ME#1?`gP%)X&RTw*Rvn6 z=YmZ|k`~JByN^k?voi5Mwb58@^L({*5nw2}=4||EE;_Wg=lzses=CmCby#xh6m#9? zC*Dy+imq|5lW30-*-CG|GcW!jAeAda9c-&`lve9AD(2F&pcdOG2CZGdVlbts<(sa{UXx@^@?2F*H*CT3a zn~f9&jA#bFl!mU!>?wktYkzGVE(C;%Pk7M5q~vf2D97@t@$8$D2pz{(H!U3R4f7W! z?KJ>XOVUQhHYcDJ5E}^xo{?HCQi1#S7^x>Kx7pq z*Tl%|m)oADKvXAmfuk6I2)$lBj06O1D{lOvD&^j^>Me;OP1Seehgchsf*o>O4b_-U z3Kk^rh36W@f&=K+OGqH7m6>CMCM$1=G$C7QTDC+v6?akku06Ru@eINnTh`^kI5td{F}#<82y`)M#5`HX-k|WNn7O zD@t{gEtrt%=og=n>TsOK4^%90d44uZPnvfIx^J{i{y9_f^Qn%*60xoc_n_9OTN?^9 zyGYdNcs09ZzIVTx)@fKCKg~#AE}`|_&Dpu7tD*cw6$k2$<)|vnV`TQJ4@W|;}_`)doo`~9Dxmw61?eWj}6_-NbZ{@$Qw7CUCAHRVb4 zh^EKDIT>ZWyooTNQB#essJCmyUuhv`x49(Y1;QRe*WD;8F=kA3$wZ_H4uj37buf)i zLJR7cPsvgHlQXC^n*9Rmn3z543(~dGPqs-z!K{%ehgq<)QzaAWwT_e%R@`CjB`!fB z*XV&EjY{`LFO%VLZXY8mk?rxYejos|OHs|-o!efM-XCkag|i=23w~g_{?s^g_#>Fe zU?8!@p8LG&UCg{-oT|Ze$qzy2=s!6WnACzF^ zRcz^tYae1SgRP~d?igg+ir7QRUbRJ&bCb6|Rg^fj87Xp+Hzl=qyf`0o znXa0G)|d?AX=aOeIj5#p-SlvkLCw<&#aif{L6AtnTvuLUtM{(O&Fw*3Rh5-(`|a%$ zwAYH)kUt)*?fNt4$fC=@sl|k)1U>)We^*>#xSS5|Bn0^Pf2YfO4m&z%3L9yw%Q}&E zi<>Rts)%flcCGZEt=0O5k~_6pDe(LT5uQ#9{BCNnzau$lXI}9zs(t3IV3*N^jWrz? z%l>91Er?`64+hoU%u9_f#Kk!q(Nm3c4b*XKD&C1#`-WB@wrzdhGB;xF{H(eb(x|6= zUj=1m#VUAECI3h~i8caeRv)%4H+5(+v$;6@_vQX<5HTcfp_;%9iUwm&di}F>7{mz& z#{`&H_3_JiEU)I!fOnN-;i3u8hBKw(Dls)HXCN_b`oK~#YvFq+?ZE(0N|O6-NDN5MFRe}VP0sJZKJggHNy9d@ znAdvP{%w0ia@|<=*k5Cz6T=@bKM#gxJQn)b+7PQ!>cF_Vo@Y-fJ1&k5uo%}ts9p3Y zdbEiiN^}cWY-i~9P>g?_yVjz+@+?z)9K$m9b=cT_&Z>Iu2V{ zy&;@@TuW~#oO+Xu)lap`v0*`Zp;_CWczyNM__zrR@ULAzZfte-2JC52{NL=`U9pp; z-)x6TOJ6r`0@62$YFRE9sUk9ZbvSlu*hWjLve)%Fjy?a=crP-b8f0}e#}`c82LS}P z{{HKckkQ3oJ&~;TYs0Ksr$D>`0Z2HzV3=$n@q2B)PCUoTsu;2mracp?xs8ZT0 zFl}va-HR?tN_`a=5I2qEIQNw$RRf_&+%9YM-DkE$)4HF@9JEw%p%Pn~#K2}5A4W=y zF9YnX;$M!Xw;PXKoOLn$Y5;6sa%)1EiBy@M+GdISZDx^Lg z68S?bY|q@k^N1kzmk4{fztVlnqk_5a57)gF=<$%1TPzx|pR>h(~T zGRR)r68u~Mf|Ba=0c!wTs6Se$_Z^Xqi0((gGHT{iq6~q=76Or79x?PtJ8Hz|ff`=* zN|ZiZpva;XmkT*&`zm3^X=qE{s^~!5{1!7?orbNTiuA{>XEB9;pT&x0WK;K%fxXl> z_)avP{VG4PifdNJKNlSPT@83=ICrh{Pyh7c_}LhFCuX`6$Q({RZJdfL9$Q$095oLl zANP+6e__W*6(DWqQk6(WMjSx=X;m@GJ)UPiU`tEHWsef=la3M_l))Y)CiU3Fp|6Yp zzsn0cV5k6WkUk-sJuvn;|27(D)y$`Aa5u3+!@I6}G93qX?^@$DXbZdKB~0(#RYEsL z>u&d#_Q`beadXz`G+qTdxkLE_$7g(Pqj;tBk1vh2raN`VK>F2@LbIJ<6s+Bo*N0nS zoW^fzc$luk%!+zqbSfC17y|ya4PI}_x2z3K4l8$vjl;ZctUExl70h`&X!2-`!Nul8@TzQEjFlPUBm`V#Bot$Z#s`JVKT7HRc5BOJBt&P<6uxPQweVfaZe* zjkz5~aEU>FOD$a+Q?+EgamZvL0SJsSmc)l>TN&1Z8wSTF;Cg9!w1OEQzeE=0@e9&2 z)_SzCgheHN3%6aFSzH2l{v zvaTvLONp5Wje0wRKi(Y6mvq`Wi5rSlG>d~zTrJs@F`Zc?w$r=FT1=g6epHe1&r$KT z$$To#&`qurj0qIxRh(?f+D1}SWiG6_S1kRY;bftXU>FxG8@20B!`)^8!QLFKY96Mi zYMzh`=VS$T0lzZ|R}%ExJ)A;^-}due%=51a-T4Z<9IqBm!sf=W(@7ADxJInT#ojed z*CHW-hStoEj~k5QOmy~@GHF{2YmLE2{kV#v_*sZKTYyo-m}=-0Mb;jFP*mR91Bu*6 znhCzON9rCnE+-nWTNAjZy0Hi`O)Yt&56bL8^n}sJITC~$qYtOioY9KEtXLZ#2^m=d zH7Q9944*(FwYUtP)Z)GjnAqws!6q*%&FOSj{exUZ^n)UFP5Nm)h9_5ztKhgl+vDp$ z1h>S@C>ifGVZ)nr5xel={Suy_%jt=WJIM+=6S%@?*sUbejl0)^{w z_hB4XgIDo1r!$5-lrtBN$?SC!@-&@V98OO{(;Cb(@lBT$mxj|9m8K4qCfKE-%E#ho z+@e~4p-okx-WfL8i0bAd9y)zV-y{Y!5|Fsz^O5Z!t@U3sMIlRRJiG)0nya6W1|(X&V8DON#-SnyE~WY^-i)= z$0T9BJYpn1@=jzwm2M|8QMM#B`CM2!(mZ8YGLW;c)Oy?)w3@uzP_rssXH8TBzX{foq44e%v3 zqAHe*^w>!oz4M_;+z?rN#N*l)m$!O2UjoC^y^V7{w)c5=SoX@ZwsSEaNw<23%SaHw zeAM>iM-)N*136>qiu9dBGDbr(mZ~+6s6OPSY#S!Kbxg3wj}f-5W~=6>YghYc1N?$b zYTH`nTHFQToyerg%^FZJ368*J0E$BW6K9&mq3I}=3PV24aORHij*SmOzUTu5mCoY; z$VEOt`UC)(5y|#ji-iny+!E+NSQ1>bcC!}oIn`3q!Vk3e1OCIqndN?0de?B39eo+sy)W#Z?G$I< zv!ktkwMOosQ8VzhRaCMuNpA-9mzX$ z+q;Yo(_wNn%>+kuurJnh6x*i((QK)?`lqHvsvI@Vu5MVaX*v~^uxG7=U9M8$Q&vWs zPG^$=qONcIAkG$OqgcjwYPqT2 zBDS`b3bFlJ02?s_#&gDi#0av~q@QbBMlR*JpB&MqY8KzN;8^HF%YBA(FD~2=m8>2? zdsN<#L6KU&HJmJ*GXUq&a2OA;Fg!?4CQ9->MlD!eYanIZPQ@qsB_^s(;mkP*plUWO z30LqqMb2lNs#juY=QLKr*%@tIgH4kQ$RlXz2`6MlQn7blV$w!DY0t=2rPri(?p@Te zn;t-qI9E@#m(D%eJI5sKUevL@AfaULaPJh8uzgWSixP&}62-MB5JYkt^j5LA?ti?Y z)eSB4|IYbNs-?v1qf;r5Tkl%(*SJn1i^Ln_iY&a!#lqe{nOE z7QvpT=Z^^Z!dbW=r7y{kzP=2T5fA=Zli+*Y=rN3gcWN)hw9lL-k;QRR_5NK74)b9^X}xnQSq{-%G-dr(|8te5rEH3k~$X_MAK?! zOZX|5Mj)?&o!@fa>`|*CseQTl%y9ZG5PJR%seKEbP7fkIVye_Qlg3% zoW}S0?Ac2iPE*p^>#B~;h0a}4e{4}|UubwsRiC|c&Q3QZ+Q{Q_XiWy2F*N7w^)?zf zoV{M9@Z3!e;Z*KZXX)K!eXyiz{N64V7v&34+eR`Y21${#v1R@j7VXnuJIk-)-DpI$ z^=2*jJkla(Rax(s#M(e*RW%dC<6_UNm^@ z{A6c4y>qDf&!*|pWt!S`Pulfcqq%Y9naqC>?L#*fZS^U zqUC|MT)}}NGCwG4X>`#6u`$l#c}!6)z-%d|Os{YKut)0MUPgC7sx*wpCk)W3dy0yV8N4XH#m*sXKK<`1ECK!gU4^@L|Jw@F zt2Rs9ztO@}$F1|n6ybErlll8q1Ck3_2`{SnF>F>{i5dYV-~ zoEg<8%0WSP0h_z&OU6LGD>futE%z0FcN%9g&hX|v4B_g=QFh@jE;M`2=Q&QbJ+HmW z@ZI}sDo!0&d#SUkXV`hHp;~le4qfe`KH+ZfX?2K;Le!hi7F#=QwK$T-J_Q#i*^AKT z8a!@J8adr5v5Et8AFvLhP7UFgF|-j^t$fC*V&OVyI{zZtU0&gV`t%E#66~L>9fBPOFtqAa|CJ-M1HHf zoHk#Knm@OQqa(~Evdh9DC^2*Y6m$sNu3RkQmKdqMY-(-qXe!rp?%%?zfq70B#-IuY zY1wN#C7&q9{b7MqMQS|rI%=HsG6LjT?$uPMLFty`JaU-XV=`6xnJD^A5@xyoGtri+ zNuwqPhsBzKqSr?>7ZC)x&H!U6nM;h%CC1{kG?y5Fmkza!hD|&e`!B0W{}G>Z*pR0a zPa*wZLVsh~nw2%_ibz&h5KN9`s~@bvW6tb5mZ+BOsYnZ6U|YbKC*jv3TF$9FgRU*j zPK0f3e_mtde_O#4Brp#cbq+S+ECkmh8M*#J$iY?r&}dKs|2XgEF2?7SIeg@h0Ds(Q zc3?oyfiU-JN^A6bE?_qMoAgA_N$GGi?9MhQ$et&wb5Rt6vKY_MP&M5)rLD$q$N7cr zkTHqhhMlZBUEAO^JVFm?^GXDnD`M%>**3fyLyM~>{dp>9iB=!ksN^o5UsLgUZX>2P z=b7qPQ`_H4wX9C<9pR*;fy@WSvq%`mu_Ts;1C$@;58@*NPb29Lq_pGNmx z1EKHEw#BWTBGo)dB}Z0QgrM1eqr3ISz-b0>tt5|Hu#$pM9dm1>gkm%x+wY@~d>G)X zM1v4hGj9&BuP&nUBJVp|>ga$sNYyzFk^u-ZrU%L@2ar7(ak>`^Vh-tA-Qt{=1N zPx@eQeNg`d@965H=G9 z9@m6~x*(;V_l%qq=oHoQdjhcBvq-o1Jh^A^Xj3M8f9paa(YC)^y_IhTvhLe5l6J>SykT!dd4CY z5J$479m#ST$v!Q0rna|l)!@hbqSv7bSRDVYnWD$;fi%(-<&h%$w)30dZA7OYH3jg^ z%1%>u>8X7^=k9dbo8-9iWG_ww)ah)G9h9$Ws_#+c>hQg7F-)&n>rt+m91vZy{W?#M zaTD7~fuCm`>q>#IqHzHQhDhbPo`3?M22c2(C~!Ag_~zMpYIzEsIs~!UAG(>13qME4v7H|n*#q4 z0~Vgu1p|_ASP-`j{TP6Na=q3iHvzFD4qi1lIYvz}C!Q(wcNUju8s->lly+E$%+g+3 zVUw)~lI=%3w{JAbuRb$~IJ4w(ZVtovRv-EoICpvG@F3Al^1ZS0-F)9!_Nho*_QdI! zM6mJS0Dsg!oLSn(R=+RVex!5zx2T>P@z|FwiiOd-UgJh*${dQC>}d&%}5 z@zay-J>#>I?Y$CpaqU%*zg?#6znT z_h_;aiQxU-Oh9x=+}f)j_r4iY35yO3edir#s#xwCQm)kIpJg zlZU*4-e{gko6n3^C7<%gps@&!xpE`fJ`DAJ$}z>F>0#!6on-6wWP7P|yZj$nnqOB~ zooUlBRrfpops{KB;V5GJ?^~)8ztXM?l;>ugt~o3%iBGXPfK-t;wrdVc#p1(k4u+U- zY=;1&ZR!31=|)ZZ)N$U)sRM_{j}L%4M%5gxs3U@?BNgQktH{4d1NcD z-+3^i1=C-5FK{6|Krrw7tAK5Kn`!#H`SmgUG^X=LF2C%0J!DV22PhnB zg^Z9a_|G29MPnZsQFCsmB~>d8RG1ftCbTqKYGt9%W{B~$XIYnssMjY}h|cqtOuLK*Y@~hbIdYzYkTlkaCysD9RKx z^bk|=({WUiJ%=n>BFy6OMM@P;zSj3y`|7@J(QzCN&SQ5pdjVTD2#z@lSvK5$4u9zV zervR zV=3Z3sR%k_rqnTt`Bh;I{lG@AFy>grG%6-NtH`~X2UB#gqHo}hJq(90!`!c!lr!8f zDQmD+9i?0mKjz=T4~`+Z_LC&81}Y%t<_iNRBNuvz~n7=?r=gf*e%`&%tky z_dV+P4dwM)7z*?0S@}=kcbfmK_Z2*^CcH;jPkSx`zk;Cm{}hz>7=W*Q`YjAWS>@4l z@LL#v2Qc{s~QrIs6axi5OUOTEHISp=elsY5>XmnqFCjTRt z%_7p=F_f{1h0S|`JW}?ed3@Y7uZ7&mCa+U%ZZp8^Rto;|?t@Ehu%%9?REfLz z;8L(oUpu(e7E>yIk!TUCp*vk!vS-6gKZ}<0f|Hz8=ZDmeWM%)p5vOV`B+%->t^`aQ_DYqv%EhL@=#5f==C(Zb-lw+1Fj&Xt-ca1=@1NMC$6N_pAkA_WK9Cpig zL^yBF{V-_YF~|kvqO8bU=w~;RJJ|tOdMu@r9dMZri7`>?cRB#% zZmiA`U0$iVDCKZX;LoCL-ycbO_H4-3j)2iRjUq5w>U;ZO?vv(g$@Y;>W10t1m(Qwd z$x)itwW5Fl>DH#zC*5p@7Jkv}@uH?ekYuiT=#`jRh{R7*q#ND`IC2F^Mvcw=1|>Ch zy%B~7H+vVIPn*5VO!F|BDdv_lXb`7Ppe(yg)o1%jX5*|nJTrKx5h^gg3*kx%`M<(q z3;*PfRXI8zE&q$%j73wQ_H>pyM5D}~?f1oPSWgTtnKHPy(u6C!#xZh(b4yY)Zi`?}j_;lA+FQfQn52+`Ury=}f1WheMQ1?fs7H(FjmOSW~ z2#ZxoSCSD-hOs1B)oS+ftmonZnF|*lTq2kcf9FePC*4UfjLLC-b<=4$cy~GUzw1mn z4gT;mX39;>aOPgH*d6GcDYpRrE;HqvgR%xQPYsqV=Ra{ zN86Ao>l+ZHjr7ax1@5a;&sw2qm-PTPqh zZ6}=65TZJJX%?L=pdu~mQV*@E?3Z|)syGM5@yPiWRZpi|R&UR)%8=K_b?PdU()%2R zyrb;`)2|@o7I0J3G&lL}POqJV_GX!962_#PCqr@dm( zBcNi-e?be}D1RiZYiw7E?D?#g(u60Il^~Rpu8+YDvpw%J3ujQm;z19gcW??)fagp_ zBnZ#Cf74n7denc1QGgxh|Gzr-BFE^pgTpjJH-~!>&F-736@9>{tQ_3 zeTav97+7ZszWa5)pQrsmRa@zR3>m&9zcY&8WLDL#C4lkKhbUni7oTnx7x(1CZ@}!C zs}p@v7ktAuHQvvPX^T`RcW?SakNF%|Ve8~HN>HHFTu1}bkdXTo5)eo#ABWiPg*w)v zSo$?Bv^I}#Cs=RRR+D5bVlh}Kf8H#oUn3=1F%1WIXhh}#TxSKfZ~L-~T=?q&X$ zG2Be}knj}WIgI=YdJckM5j=PQRo)!19sx?~w=e{GFQcv?JV*Y!31j(QoZp`ilr|D- zA$gHDO_O*pd3;x@!+vV4;krZUk)YUeTODK2wuE3BxW?Rb1+$>|JoEa~G3{E&V@9)7cKn zZ)Fnum~B!d)zP=^n&|9H?&4JUJu9!Szn0B66hSWM?FyNgY1zL@t$p>8&g2c$$^QFv z%kquZ0#sk#nY_g&Tgwf@)&(a`%jeQlDTkT;^)NL%I}5=Q66M#MNwQ~-qN>TMNES{~ z?raU)7c_b{;Rw=M_BXl!!EhP}DJ}IJ=Y=OVj~Bhzr2cXOT<$hoZn_4%s39Sa~X zAuJ&%OM!oC8(b;9oVulHZ$0*=acatMI`KZJV-L|-|nfNObm*%Sf zP1S$WUjGNgN+Kj_5IV3 z5pML~f5q=s|5@q(DZEXdJiNZ$39qYx*A{i#!mBECr;&kIrMHysuk2Mf_OoC%$ZpmT z3nx3q#BVSF>;k!m1IVp4lXb1S`99rrcXCLt7nJJq@H+o9;AKE$iat~TGZV2=2tZ`p z37qbyTPL-oI3BKU<AuQg zby2z;on4xYg<5jk`NHJB#uMG^-W5~&a-AIKZMij>{yd)_JWp!jZF=ScGvrgw3z5G# z{wwc9XVoABn8`22kIF1Hm|*wDb%P?#Gp(#%Pe7)dN*75nc-Gn#g4AybD+ycvAH(-4 zcc`HH6fdwXBDX3lDN$U(ze7slD z0`v}hoV*cAl-}(P-a6hNI$wVJW|;!{1YWWAvgXJOgRXgXYxXYDUQY6_FM~UaT{#JcJ*V zRa2@n%N2*pa*nb*uFuf~_yww*YFFsW`H7n{mzE?uc)tyJu#A*Wf{kGp80JK2K~YpEZv0z-Hu%fg z^R}egPp>;gvuf@TRG2r;9md}cwMVtSTbivu;#b}P9{RMWU-Wv}n2n1trWsgt>nRyc zbv~15M&QJ`(WIR7OiQ+Gb+$gT#kX5?G90C?tDKs6dzL!{XHJHc+d0a$-LTE2adZ4&k^4ce+(MG5GrONA?E6vjy?@P`zJyUzHj-Q^|ds8Ap=0xHw z)ZM<5sBAu(EXf5W@x&x=QgYhWiQ`GVJ~6KOI1^udV`8{BoTwWU15JU$nzd9?pjN(< z{1zD|&B(+AH|RzKKhhEPd4PSDJ?dt4A?^~;U!cBw5rNq|E0Tk{LB|6IV8IY{(?ZFo z%$nF&cO9-n%)KXq^8m&UX88rYQu!~G1z3?>xOaYaUASo0T67ccChL8KUl3fvuL*Aw z>=L$#QZl|R-)$C)8km@GGRE&L-z+sNjrojHY%zzP18p&cHJaLYOx>g!=jX50a;Fhx zF^l*J_rD8Y_a+kidTlRUtls>#hliEYzYBsJzERWvHu=9p;3*2D_mcE}&TrfK*f_l}BHglchs zb1on2Nw<%PG+`TZE&{L6oT@Z$)9^b!_YK*iZ44*($j9qTp_eg>tOz+(YdY5t&Qza! z9$~rXzembZ(fyaR{5lZCv|671jKU2=G~I0GxKy?Luh=pyIKfXrLQUK6EEWA^CXT85 zQ!}S#MUNNtpD0b4m*)2J)-;O)?6!{rH-(c5lM2G=JYPZ(P3)dFjyMIw4iwyzJxs^P zSO=BwF}hIoEOCYVc7G054q13=Wsi8YvS0u>{_6K|VIL;u$(W^q|f6 zyC)@Oi-ihB23E5{hMK1xO)XwR8zyI|6)gv{ffc5_(;!n=D<7Drt&=_L>Kx>|{cO)E zn?B{S&(dl06-0DqTj^)JPuWb@$7?T{v1l0_tV|-+o?o%2%q!XHz{r;@EZk)Az1uD; zI}=Ao+U>P{#F2ougi^}{q4NbX+u5>UEpn2(%qP0c2&Zmhch!gcEGWB(NvwBMGZD_! zTsceNsITknqn!GKFyaKOY8opV3tFO?t}M^xL_ZDC!;HF5w9UA+aaov6y92>^WC-fpsM>0R*yW$TN^jsLk;}^aM&&qqN zpI^U)L3!RMh-Xmv9qB<3fATOvZsxkD1$p!<&5kbf7W!B?Y5xJdnY705t%Pmp&`7>gz3UlY=FJqIJFy^`H#&>4 z^XA(^6ldw-U9#DE6aSW-Gpy2@GrLuJUOH#zO#ECsUyeO!zSOY~!(`(UnQXils6`Y` zmOolDJEU?#aavDOvf}2)+{Yflq6mGg1YEY(ch?`qiD;d{T3t zJ-c|G0SU5|*5kW9peUB~IStym+Cz(<23cM0Xqi-MoXm^dt9YNY;@kYagYY<^h9KIl zpy&T4C~qU*P+t9BNT?(Hh_L^^4EIsCFt2>5>RrEuA;{Ae4=u-3AYgL^`t--iX(u|3 zQhb%LO-IJa;jDei1`{dSo9Oca-VPGF9p5Q*GYI&-@S=k>%up^za-n_FSD=72ckyOvubbAAFo{oePIL(lX%kZ$VYw*@cuJpu;hpAZM%LQRH z&sPy{At+5SUtcUoagp)^LNl=YKuO{v=NTu}K0jWTYQHQ|Wo8HhiH*)Pb)nRO>*IY> z2Wk>0nrNbmQwOe#_cw)82V#jK%$0$7zrb11`eN;^P0GP+SRt9w#d2N9j1@U0I|eNn zZHgy5j#xM=*>QOMn?}1z4qe>KDTD?W4hH#%(cs!+9ys+in(m+(+zloGOHU)`!Lw-u zv354?GUZU#5;c>?1O6v`v1(qG`!=F<>NFa7&lV52DM??b@dO2im;R(&n!Rrvt+i*nCNc)n92Ayj1{cU|TsnzN>N&x7Xx0 zd&lb(VZ4Euhpfv`%|3k68(KLi(a(=SDGkZ5A^P1&{hSrA38@Ij@$=q)8Q3Lv$ve+~ z*Kc76>g!4ejfUQ4X>J;SYj`J{iN41)4s6=K0wiRL+{AsE+)&gsvxpmDDz?-P&kR_? zt+p)^=83;Sx^u_cSjC>XJEJmHPdl-Sj@n*kUU~hTRa@<5X%CyFZv9nDE{-+zi8T#% z$1%*&ikF>~5QeQqah3DfYdC>1vaQNq@v2I+uIY&NdPe%JRcZ-eh-4dv87DhyTfM%EHW$5yQE)gt{8$N2`WYuX z;dGdfx0cd?Qm;DS;*$C=(9$wh8=_ijt?Gkk=T&DFQ)`!Imv~Mzw+5daYx8{pMt9(0 zqSaaaM-T9y5++vVEwF8GVLoyF*29ymisQ4?t#Rp00L$;z!&z9|_ChMk__o(jW)J}(w zNBZC%Z^&t;($eD84l2d`mD^5MT~K_;O8XX88b|{UYUSS^{I6U2_;3E(RxUS{{#UL1 zdSRsoD9LGS<~j)68#dnDn|nFhS35uSr9hcWi%kwBAhR>*hklqCjNE8-0v+I|>n?gm zK35)G?M+B_tgbsdb56)vwL96qJu$R$CF7WSr{(b$GT_?i&NaQ)ct<`QYG}E6c;)@h z57&^^Y|_>t4Ntazfcu&?&MIHvkh!45estr_m(rNJi!v7!)3o#ST%8%Jfl7AlP8^YJ zU*X)bCbh$_s+FpGZ}G-HsD6w{wlAj_BtB!lvj>mc$&P>U9dII$zXu!c;3UUM{SzcJ zwhS*pHBeZ#oYVuM_<%@i`vIrnd98+_?a_2=I1?KeN^eNEZ(DE)y7#bTj ztM4^@uLhTeEv}Sd!1^0v2DW7H_aVIsjJYeS1DHEY+0*m1-_Ru@$cb2i3MSEtbCVQxFQvs zouz+a3dXXdkEaasonxqvYQGAxH&6iFqv*WTs3Xy!jm~WksAJP1)K23)O0ZD5(?Uh3 z8JK|Ue3|)%Z0L?y=;hqbXf`&kIJLLjY4{yQbSHe{QXXheqeDYbq?67T#rk|%dA!m69DXvy^(;ROH>X5nk_-b5c zV@!d^xJONYXCx0CvEX90uuUzT%KPZ}0Pm3*nF=$YzxGOa1Vrm-M(MCF%_vtLsRp%Zcxioq z_q(K6exUf1*9yE@fN$PzGZ3-#CR8I#o@YS6qDaL@^{<38SB@)@9i4^Xsnmi$`-a&p z49R_r^;Y)($%_5X?ITEWpX1Hc6)oS`{0=QJXDrc*m+G@}Wn6->K^;{mE6~Wefd}(3 zi~Bl*RUR$~XuMe1&vPlt8PYIhEPB$;=A#9N8DuP&HpNbMBT6rBdDrL?C;PCX2N50R zlAYpM1-G;IQf1~Xy%B|Y)4B+)yFgyV^hI4K`79X3*i?->02kUrv%1i(`j@2ERP1mX ze!@d6y&+b-rwz`iB`Nq|MH@<2%b`FYr z?gSr>7y(9nsfyp&SDmHP3>sH4E^8{cVcS7Ng7LYN0jT6Im46Y3^Tfsuew|grt21|w zR!0zLV~;(7!Q%%eJ)DZ+A~+r`7sC0fu(j4 zkf{xez(|tJ#-%J13%!)vk=~PR9gqF_+za(IPL}A4rKfLdb5_0Z8I*dNq0}#sQDb5o zZE5s18da(J<;kCu{U!O_o&|BxhdUJa5d&mw3{P|DQGT5k-WUt|mq}-aV5hWQv(6YQ zy<(q$`cJeRj0N-poXQ-dF}}|Zx``O4h-^W`v5JrutA+I;XHz`{Uz3Ni5J}egptDp+ z77$1+mj*ZPG`Nvm^S;cnZr6%zJM%3DGv67$gf-g6Sose2eY31Cmeaw5QLSGPY4 zM#dKUyNdM5`cVSOH~k1iL5CtR!#@wA8bTMFUiB66LJy;&VJ%x{}yo=(n6> zSON}p9#i*x-uT&B`~#}+p6o-3J9(0=^W%gqgvGoo?p>b$N%$&YzloqBQ+)UE6XM5! zSjt;M59g96_|>z5%KV=2dGcLAkhNJ*&r>}Ak6ZHHJs1*dg|EHk5Q~a{} zEet9MpEL@k?mK7s&Hff}Ry-@mx1_L^3Op zvD(Qv9z#ND9Jm^Gf3h^%r3*=4L0XC9_kqLa_$g#oGvq)jD@@{-;4Lzd5F3+)!z>-GolAxiXW8AR=9W@#jgJzY)paSe%?+Qj|CitLFq4aCP*ozgU+xCB~suUn-@@k?xHw zSINoy=k@g_+m6m9BP#bYkfeRw;;@^7Fw0-3mvU3wQM>^2Uz`>Hg*?E-D?zwa=!UUS zoskW+rmcS*D`Rp=k=Vo6_7_R>jmhz=$p>HO+II`KJSX@2%sD<=^lb(#V2fVkS!~fw z{E97-Z6e3x)tQFDVvDNT;Bh_}PPTJSBLb|QEGvY?T z_y%^w2%8E(x$4X)TGFrke4U^ehjN>;*{F86ST+S!}Y2 z+y14pNe}ubJVev|jRy*SpP>q`?nOJ@nQBqj#sY=uww)#J)vCelxN1k{!31)TA%pjo z%n`|s{qst_OEX6pcBJ1+_ZxPkw_Mk-z~Nz-9V|``hcy34?8suN;9&f>j`qHVf}Qjv zoTV@G4YZRu7dyTmEz$}YPI5uOZ=>mH?hlxzi7zv171f!0D=nwHZ-}$ZY$S{(TsXOJ zX#B>okz(_V1p8u*GrUuLoI8o7U$a(hh_kqobupO3&SDvLg)2UUQBc>t!TMcVbv(clQ((Du{0?eo02 zK{suu2Lp}HPRkjGL@zLp{f_yp(dt{! zXvWJykF&~Q#v3ISP=}4s;TqfIUN%DVoWT{Fc;d`Pr8P*sp&wmG4ZVRi@z z0z5c44ml4&4RUalnym(Sdwe8lb(a2=n$hEu+(vp>I{R;wU7fRPS~zp3nIwUA^d;~v zRxYz57Fr`4j-WcmBDAo@ok?B!R*U}eUIV2VLqTOWltSp|o zRm5pL!O{-ANI+v)P;h`}>*^UP{}?{L%vrjf2xEQyr=Kvc3&f`W29`ZD)RBAn3eb>CC-ptD*HL3V;AyH{M|uYs^zl( z#1NzEehwrFgRp>XfOGrLC=R)oXWUm2JazH~26M$^`PjDscPdn5(dRl!iN7c~Tr^hS zy^$<59tCJ@i&Wgmb2hqyP=HFz=d8RKx#y~7nogtC32^{u!Wqn1<9~G%=9FZrLbi=Y zpp%xVKima$cpS52MrN|5!;^V&j{>#WKVy!a6iUNIB zP1j#bx-iDx(l+53a|XKX2!>OR{EfLQ6h$5y$y$O+sNstx7&@pYtS6Pi>2>h$N|aUa z?K_x;^z8}X6n&GEdXbne5C}QTzE2U01Q)C3^ltUbr?&=vYNu|g`V9}Cx{rbAPNU9c zomG=rG<=?dMPu1W%G(+8Ym)5@S!tg}$G_=*Q6K+|5$taoA=YeyX>+2#whpB85M zco8hp`2ZM zdnB|Mn-4PqgE?)Mk0;!rsw&-Lr1Xow%ZK&CDT=fBjgJhG$tB7RLxkLF12Je|d2C|yY+o>pf27IYwxqLG+AA|yb~N5iUi=u z4<^&b72#e^_X1)Dqnn*YX7{^=kt~)GMP5@7$zC#hiXty0Qm!$M^S@yhT!?0odpaph zDfd#y3=;z0C}y8}#;bUTFRIjg0bf)~3HNjPNcSJAGu`Um3Q)ML70m3wA6i=Dr;XwL6GDQxzml(%Up;?T7)1*z311_0 z&lB^@>9^%WtH*d71VPUy^Q$1;GQIz&puF|u`ve$H=UaMyn_q>iiPL-cP}?nDd2a+c zU!^_zEet93vCi^zXo(`p+fk zIl;72&~p&p^YaDog}=&sJY|=YN56$Z`6S1>kl!GPC%(WBva@d_C~X2kzW5{=(({ol z-wNBPQ}5k_4nhj!l=u4t#Rb2G>2pZiL0Vy`<^3VT9|_aDrAcPhd7?eRkRut~a*Az* zQxPMaT2lpc%3R#G;BcS#)>arJ2Dcq#4<}p3lURy7No!02f+3!jfJ%y9nl0YZ&BW!5 zZ8X+xPQzMLZm%z*dc;ni-JCDP%9%-+1ud2NRrvA4VJyO#8HmOfjwl@;Hv9}n-`|q@ z+=9CB6Jq|oD=TyHiP+3df#O5vI(-S&jTLv#9bKutz2eVfozrS-s6AeM>g4@(r`dOJ zMCrJE-Tl2I)q(}X!%t{_*MuOvezTy3-=Q0^bjX;dVq((OF5bEQ6eVYS?51Gek}<|Q zz|EgE<*fz?_Cqxs9Im#sMY_|phEvT?fgD?Mh|9}0<(s0Zj^g?sn{904PEx`~&hi>h zfQ!w z`lE5a*y=28 zQ7I$;l5izC9L<^w zmWq8e~|(7Ny#a*66IY#Q-8X~K5=+*%CrQG?Yf@TT$yrgIJeRJ zO(gw__e(8l_5DaF@qT1xBZ^PJIfu%VkmGpT?R`9F#oI(Fj3L}Y_@4j!I={LtNohs{ zt&KuoBx)`*A=`)qwf`w_q(838oR4p(4Ms9O!g?Hxh48Fm)P!}M{icfsND&*D z#3?8W2G-5iFK0C-Kq$K)|L9#enn}AhKUb{JP47{g&-*PKwjqgMMk+o|d|kj)zdlE` z-c_jKq5%6PrJSdfD`vU8xU4*0ja1FmB{pbJT_bq~fV}T!y5Ey$9Am6uu)KU3=2gpbM10eSU$X@>$ zkYg+$zoDMBU5@C#(|FsvLV%M&9X53}6XA^$%BbEJSNU26kOTVq#%dUI9?o+JEl z6~BZ1=b!QW7lL5v59Bf^lw*@?!Hf6CKk3ZslS)1(mu|io47rI!cA0NwJ z8Zyj%Y0_AyOTi6UsC*-M{q#}s+^I`>&76m-mtJcRGkYa#VcxJYP7kO*@o{p>{<^ol z_fhTaG>;r!yA?BT_Cx)SMu$mu>Cdl_sm)BnG{R&5kHMkbp@QmDykP9xq@N%)*1#rR z#)U^~$D0@>)AS=OkOSNF*FM8G{gozR^lq=W6+48sWGrS_uK4p{f@)~<%kC+ zbT?VAJvy*zA8xGLn+9+2nsr+Adv1naBPF8RUj#<&rgg^|)Anxm>~#Z-rF&mZ_(*nM zar`YB)lD%T8+T*b27=9Cm6wfsn^qUG9*vjj$q){Z1fzCjBb$k`Hr~5+V|FZk$s}Xc z&S^rCQ6;aQ#2p@FmQnkCWagzh{jsfYSz&#$0l!rl3QgO|?KE6V>;+RVnbg~9xJV^1 zbVq}Ur|Qgg<9dXX`;k(AApB2zc7btH;xl}?VAC0u(sWY@zdk)8@#O<%+m{6i7^}XW7#9`-U<2VH9X<>oH7gg^|Asq`! zfb_Nnr&Xo*0agnrt=`+J8*=eWNXsP_*jSmtKNn6;K}$=6J9nPCPGnsM?PZ8Crz_oUTe0V)b+*Q>7Tb?EK z)%(5tD(oQqo%ju(+IXcYC_Z@BuN==`<;MlTh3SeD%`%M9jmZV2^AlpSdVPkOesWq- zqSAThQf|eZ8jt%H`zIV^u|NDXE%rtCtkr(~Bf1P|T@QVUf2z5U^UOJ@a7~Sm@NM@C za=&46&00Il{nAp~WOKH?CDPh99ZjvsOE}`$TN=NJza>sX8Z6}r((^J;mjB#fo{Hm6 z<1;+5c9=7aM|n0@{?|QG$)l|NuWg=Yp4Pb9GTCepVtf=BlmE+Q^1r|^Kl8ERPbB6V z;9UpszLS`fT+pj1@zv&|P060|#7u9dA*?lW1%RUf_5gAeaDAfElsesa3s8Dv;soym zlY9)xHzr1#Rc#$)P2b=!;4~}4Mt#C;zf<`fJh?;6Z?m)klHT z0Hy)z1qB`i#QSu*5P*esmP@VF_z~E}!`+0N2ztJc@ESq52or)gQZX2LPXd;Et*O{h ze^YmV0tUL5Lae%Z6*$Fs6&PeIl3M|Gf1!mh75Wv})y1#Cp9}m7Y&3oa#PtW31YF`4 zj zQB~=!EnaDI^LFc$pd!3vWVmG~Uc+`)R;4%NeW0rM*5u{_Zv){aBfRO=nf}#gK(`*) z40l=^(WkV7+GlrAj;UG2O=Z2`2q!ne|9l1K1H-G991-|1Fg^(UNXPhKp*g{>?^H&> zG#G~nZ*kDi_OF?az{SMO!9VY24}!3pMWZA2ZV3%;^?GLOpA3c59bpVO_$vC#SLmzN zOAv05jD?E>K}fwjvCmt&+}gNNxLi5HOQwWdcChs9m{^^;s+j(j)WBc(&?u`)Z!^%? z8~~(GG^IE( zSnLhs*X)AVlz4YU(*xKP`n%xpRrn0UouBr%I+UpYpe8*m`CTZQY>aT&y0oX++Navb z)NO2**M=v2uML~#uJImQ@d)J=POU5&P6D-p`fA zgU@Xr6^P6wt)E1^EBQ%qQX;+6KuKdky*(W`=&aE;0Y7lp+QPv6+ zR-~E3bj5ynNi5Wgey>>%oW)upgOd$Ct1g-=_1-=@NJ7YBG=a)CVTX~?6*Y5EB#D)O zCf z=M6Mw9)VViHj@GeHjU;eiA$&dNjX4MM~dMUquB(6K?mxQigssdhv#ROVKe-LO*QAegZ&nub8TTe0S1jXCmWD|OP0v5{gPse6FX;gdfO5VPE&rEKIVIM9jDeLjy(+!d2-L6i zw{nZ`A%U1&e2(0|eFqZR|D4R7#z~tMm!Z6{4-Lcfln*~$%rNaM^KQC~=ns0zf!hVd zyZU1n%G#rYGzfucfFT4`nf}N-_Rs6>9!V5$>`GXGN8dD`{TgS5!}zmN228D9j|;M; zYe~Aawy5Z=rctRX=jWT9l;nYyUD+Bf|JZDoqZQjM64JQxo6Qn&G-aR(rK>Z=aV;JL#Gio>2H99Mkh! zKj`_t3Cb@zq`dlF!tb4gTM2spZ^BQzC-?L2Tin zlRdROJI<<5qa(q-vIe}vOBLdIkd-5wJWKFhu>{UiE2oFGzripBCy61L$iR=0i!Ec~ z%;5B{EC0gmQTNn@HivV&%<}#fzFXo=k#v2McYeSV)E?`>Q|%j>7#+)A#n^IY@&*m6 z|GeS;op5sMiHSbCsZ<01u}#OBpBM*c`DOInv*U{ANI-5OT+hSC7sPK1d_j2k7m%TsqUC#xyP?UOi*z@X2@4UNxnm-E<- z?1=xEPqeE)Rhco2naIvH_RS|d9ngt@?BGtRknFs5Lm}BYiDGt0yOJGAydXOd#|_!} z4P_uZ6If!aGKVBPG52o_XX30wk)2JX9Fpufi?wadlOBvh_4;3spIbVcY{`$X#QPS2 z>=FM8e|yHm{KbH71E}cL@CaeQ9)@kaWD zslDXZexFIa05Prr_TpOu#YG@=4%%K@W910v_Z8P~6V5x0;v%4@!!mY8CU;?#jEfD4 zA?O7Mk6W#lWpVwl&2IL7=5Lknp@3yAxwehF1)Y?rx_X_@A6mG@P0*!00d=xh^J;h$ zn{iTe9}2k_5_^`vaUbq99?2`|wDe=nz2v3M91tH*bn+HN)DxXmr|^9v{EKkO5a>HR z{xW|DB@8w1t2#dgf*f4BAMwjp&V7$xWpNt+suF%$Z+*(_bT(jM%YMD2-nXTI!US=;>HF;CK z6bF69MH_Ku!ohrwgM?6`#cXxJ`l3$R_QmE5FNRly)E6}$ntoumIN5Lru}J(%aD5WU z+q$baPhSqa431kG(NR;&?1Q_~ zz9mNb8G6*=6Sn2a3Zk8#uXPqDd5C1g*z(eYmAoV;ug3d#suhD0bz^`xLfz~ebTj_N z&MuCRri+`g=P2@d0QwU@mfUfzVDTZ|=i=|sm&*8dZ?x(ttt^QTjx;SCZ>yY`d`6Jz zk@y^^8U~1wrpoov^pwc#HIb&$^*Bo8lo%sBTRUQ{riEj@w+s}$tndX-By!QnZa!3d zRN$g9<9ldC#1KMc;yY+GyZQg@pt19?_W(5V-}y24GwFdJgR*hfjlsD(;F|ko?M<#? zZ*nc<0#m?$!1Ixl$g!eZv(R=GNJsdoj z8Q$sM;1cQ-^+9qi@c z67nbst=7DkgC6Xh5At$w0vQV?mGpr)criQtf@pS%cPd(r;r=hY930^5&w@}4Sk*WX z>Hm*j4r+ab`)|A)d@#X>XVKU|w)P++Aj=-zz9`F{BLr<{)s^E) zx_UV{kuikz0-F|?L6nz+O8XReIgtAU%??>557(Ug0|;ZM%OQ=B=TGX)kEV)$(et6b z9DIwa3^o+$n*y|)npt-ecsclp;+Ml;N4sR zH6eh2AgBQW!Ey@%f}#>gAkh$_1jP%4kQ_)#NJ4TVpeSe%2@pg@MWu?0iY+QtR8*=U zD5$8YShdoM)>>oGT17>R$@e@n@0>Gdb8-?d-`9TspPTH?ygSeH&V6=v&hER&fJt31 zo;XHQ$K>MK4yUGtJ`uEX@HHAkz{X-h-f56%#7|0j~5CF1T-H3%UrAnVy4I zb>{atcRvD@eS?9JOiGSt#MLH*Z}ymw6Btr%LJs43NfVODkP8u_EgyW2T&k6d4!5Ih z@aVY5^1%QgQDWIFvEbY2+W5h#90$et!I^9oG=9LzOwDSx16nKLy~&X^RYue?O`f4H z8x2h$q)g)isWyQy5gc|S{LD-9AYuc7H(Pwu4!LQ8i^P)Y}Qt48NwI|65+#fHWryG1-O%!4YcBSRHJP-2+pW~rtBvEzN_AH$=O;DC?y79!R za-xyqdT2nPi}D?08ZW3_VQeB)Lpy7;4HbQUi1$NG)JO2~dK2Y{O$1(~8?lLSHdNF; z{WiJqoe1^Iu-}b+C}f_ajf9=pSx2L>XJY4h?_PrQ{5Tx3Pa?b*x#H5#ot%8^E_zlX z_9W~^&kFeO#Ll(ac4)qL!=?XqYp2}QPW%vzk;Kupcb;p5bHvbZT>6b%j5Kry<`nGo za~}vl?Ia8V&bz;Yfs5zp_JSLay$o2}rTwgWKW$vX%XNOqu#+ z#bXa)9PW8w43fu(IUdR3+Ki-72RPM;mnGz zHA^tQES&2$!yW>cC7NXqp_TPu4&T6HpKWLm;m@tr#q+8(^%zBC1`!@y+ESZ|nu+={ zbEuEu=NxJ_T+X4&;o>twm_daxi0~)^kpdb-xK2me&>%tztBPh&)$fZ94I=bF_`+e@ z9zrx%f|9-V5Vo=ULYo67z3tHh!rDWyim0X(^GN->CSRBgYY$-5yxJnd@_0o06bleW zI{3RD?IB=k>^T2gT1Qv{sp7(f$FD^F+SU=4^U4^sjxgJ{j-XeDVI84o%^=Jef^R2R zfE0X#xFfP61w@D@+Vay}cBIQe4C~J|p=jNhLBA3+t*QrKfisQL(1g`RLt7c@|2gwwW!#r@cv zPm`Q#0}1@mE|_nA3Kfae*>)SNy-zL(=Gp;6eqsr=kPyYV_*F>Oul<8GYFTm6IUb6}n%w9`v zRpC|?y!ri^AMW9}u^7rZZtzug#vE!^;dZtw^%~%nz{7_-FaA;vAI&Nh@}&9E89yw1 zj9EfWG>b=>RoIUB-~;CY?Zdr4p8+xy{s{FJE>JZv7J`JS+Nq32LTtb$0vzUCna99Y zW|zDZh!?_dL7*z^>e$Dz7K9Ac@w*$>{88oRO3c$k%_C%@k%yQ^kTHGz^7I^9X#A7ZC+b8XSiJWzxV!Pr(C-3D?wMx`l?MOd9-^Q!jp5UMUVSY48y= znHXr&;1NJ;_@499%vfd9pgkH;Z8Ri(yHk7-lT3?mFNPX5m^d-mB=@7tF>Y$326#G& zj|K5d?MOf?{0?*S#k|9bKM{zO**WqE|J8Q_uGaNl zL<2F&O<4RaBxSP)%@FrF(NF*%exvyg-3LD0M{b3$<|V5#`2t)ai~1bsH0967G_rYe zt&POVvv{%_6I=O$JWmLd6euL8rU!!5S-wzgzn^*(0#qlaNex_`aM?K>K43AB8`Bsc zV}8br;Hi_FFp#2R-H{E3*vlsbYnJ1tegmElg6Nr)9yD%;D!wOulv)YV<`m|X;_}XS zj2&FPa62wD3TfqhamWXjYObeYwy0(#VNEEs!_zXViVW3V@M29La05k$^6U(mMN#uP zW~9oD0$(xJ*YAdA6lxJ+%F75f$doEvVOu2f zYxgiQa0|J%kp;ZaJrauXngYs6y|S>r<`s?`*Klz{UwdsU0a8hj|U(q-kkBP$Q5?-w_`Kyh`1BRSJYa0$J!)p>2 zy@!kjZ8*%tGACxi5o|a(Cu$oGcOiea4Tss3`7=LWbz{%T)iN$xmNg3W-P753+aV{G zk%OavwTv8`iblc;M!IR`;7*J|;jJ88lZ93+uGzr$!q3OILK69NE5Cb%>u`p-4yQp6vds@}W!8N&Kx^LWkIU$Jo1t9h{T39flR>1uwjfqkGN z!HjH|9#L~LPRjUDk&W>11H?t+g9F6noNpj<4h3z|*!b`ee-F{!i$7sNpZd`zVew{2 zHOY9rUB4lM%+X$}vWTJ0CiG+&pFHaDGHX1Lxkij9bVBA-xu3^=kAY5gz@RM-Z9U-# zRpuv4Is?W`(9hmMbXGsxR$CxNRW>tFOgG>yeC7Z}!B2(epj1#OVQkW*W(Es|_7GGh zsP?L>gez$8^Rh6Fv2t98or7CZ<7P{y;YhuSbn@}GqxCOdqiKA;HNe*?LO_7KcTto~I05vB)fUJabA*>!yWQ$< zP{=h8@g%J&+zXGgrtm&akHZZ@1?T~F=&FkVP|J0JlgL2{PoArtptA)HLkyG3~1ic=HEgyB(U+_WS= zi+1SLe22fUwyvf+>_ABhufT3&e#65>|2R;k#>ri%g$o@Rsx3Dw(b);n`(r`ZZOziKXO>)Nz zWJ=~ad$01y#Ga3yNQ`l9d~bwZf%MpW8_46Z7h-=8X|Th%CKmkloo}~$41$g|HW%<+ z$1o-r{)2`dFu8D=Jh_MVh4o=xH}@f!<6`ZJn{lqbW;bMIa^ZQ!gUJQG3ib#GD|Pt@ z+FV#oh}c|kMueJNC{iXD=84ILDR@9V2@i;kz!*8w4Y9e<4cG4${v;e*`d_weF8ro; zL^7AUeuB}3Vr0ZNy1=hT1g$(IT${x3>RA3P7I>4qQL78jz}5n0Rx#k{1)c9vcpj?@ zx53r|F#8dLXQD9p&}uUZENFG10`$&g_Zn$pZoFH=VQM?+`qu3kyeJO`UnmNKOoCtAH_xE{+h)>y9-Cjgrz*J*@gFO zc%#F2*as&(KHB|}b{8JiZ?4t;0XN_sD(Q>huFCPp+FfX>Ao&nn#Da`qcfl^m<8?u5y9;G)xulV_weq`;c*Clp-GvW2 z{EWhEw%vu!C^PO;upcdczAv#4JIhkqTP;4wNUIBMQm|`qS|*;gTgP@Nb{A*`0Y(?} zy+-+)rvX~Y;CdJg!nd5&1?I~XvAK{cHWw&Q6Qc`{*Q!t9^hR^VQ=DVm;ESG}=KLlD zHWx4e;pQMPsI#Ao)rB}&v8lWeX5{%7-%W&QKsJ52h#0tjIx%_ppy0GDF zPUNpr&vmm*_yp={*f;&eJs!MpJN5BA%eZm73wXEqxRhaI+~(R{n1a-Eh8?uK(8e~q zP@~N*{FC?eC*z(TADhW?m#$J@v{pu3JC~nm>@FN@*@i(L@_;9NF5zsQca1JK%sNer_!wdMa=~u%GLBk8QL-9)) zUci&uFuZVjSi=jGX?P*wnrkqeXoCf`udq!$7-!5cTweRffcb@~%{ISKGY|a_i!6A; zF8H?54}76Y8Fg6rAJ||xACSgvFbqQ|z(E@fC*efnHW-dze3o?(t{CgMv<(JYR}8Vi z@D5IRZ7}SxLD~ibpEIz2>RriiE!>N9QxM->@Ylglc@1Rlw6*Yeod45deV$?5dEWTx zev9xaa?ZGRIL~qXS~?~MHvllg5Zilr*+0e(Llh>Ye3A&0 z#GoAp{_ye`PU0oLq!&jtYKMWa<$%FRgj;zi*Kh1F;Bf%VUZa&A20RD=I}EYP4nvEe z9fp?L4g<#7OkD7k9R{#qhapRN~wb55M|f6op>$5c$VU^U_YlpO}xUV#0DDPn&?+hq9Pu)|On)(*po zw8PL7b{M8_+uACEErxe~ye)>c7-Ryr81TmBe{53>=kvYG`FQ&*V2S}2jc|M3mv3GU z;D=Yy2P|6*y&BkJ=u$g&A!g6bFvf6Ih%tthO&ept8=5f2z^}++78%hPgPDh~L|?ae zzI$or>Gt_@oafGQp=nzTG>js)7+NS(4C&@krzHr%O4s?g!sO`ZM{HXRe1sT}d|(xR zs`lZr1O6a~bF{_4pMB*)p6-E_aV*L6UFe#@IOqpe@G2yK_67~UQd z{IvmZX~|Dh?>A3$E*v(z>TM>i^X#AFgEb%0=ynwN2?4SlvReI zu!o05XuN$ere-Z@6{jQTSJnsbl(bz2-j;=ZLAoq2@NzV~)YYV625ppqlX?AS^h}gZ z?LaI*1`IRMN?mQ|fMJIAQha!k>j=>B<6=1D3^1`7FwF4bU!jvP7hQ*){vEQ@-<+NJ zPlZdj3i7Skuf$G&bN2f@xD1i$+B%=a@n_`y%H(k3B5F2Wj;W50T{YPb&;SaW5 zhC8g`$YYn`d(|TY!_hc19Q_sN)o^qHhof9wHz9Tz_`Wwf4eT;-G6Em$G8AcFM}I-h z8hAa!4`t#Y8Muwlvnvc;aD@KPMeqKgU*x@JP>U$9s7=jY6zKddWhM~*7!%!ZY z3eA+jKtmpm0Rs(u_O$j~oWa9?t$~3L5C84q+0(-qXn=*8;f}u_4K$n};}#4ww5^Ra zh#}8oqP3NVTabQ_l?GVK0SHpf=S{h9B zEqW1+IKAo{JifIS-(p#xQ8jLLT6M)%*y+otzT)kS>RG$SRb7Fq^1YK*HF0xBRn54n z{b^NKY^=Xv?zrJsV21EaMvr>67=@pGDi0+lT&q4A{G`*%aiE${2Eu5=f6yZ`s{XE@ zxy-<`UCXZ6n34AcU-eFRVR#=AR{P%0sPgS%yR;57A%tAQ`kcxTppD<@V;NOfgj600sJW`zjNw=8f)Neh+p3kMB&6(5t~`8F!nOZI%2Lpn zLi2VXWNeGD>!!1nzL40Eh1JZ7ZlGry)951gwUevU_Edg% zWLeLuZIvIqU%Bns%I}UX>r}b*&B{ZA=H#b6$!D%$vO!m0c4%CxX@<`kvc)(OQnsfI z-(PV%QiT#($P&rGhi{jSYXkEYn^_;Vu)={tuNsJl+$(pa*=yVElX!mlSfJ8i!IBRZ z>RwYdw$0A5oha(xnI>eVRsE;>%C9TyW9RhZ!}3G6AuKI##4~B`xAp&o4!$j&Ru#P& z6Je)@Pa9O$9anKF0{$%lY@sz*lT{tNmkz)xd9!h1yPOyXmk$)gKcY??Rhylz^OROS zcoc9q;&sc6Dp>Zw*Qd56*JlmGEmwD(=S-gpS(delm33V!;+CD$elu>>9ems&0f^rU zf>k1x^QW&&gTN5zX!XN3*O*S<+5{Z8~CIspsNc8Ym`@IU0g-W&BIm5 zcc_W@qbKkH3rz)XZKZ~a=biIKvJZPtllulvF&rV*J z8Ay6Y?dh9Up^OeKh^74-76jGdo<^xt1;Kom$qD2NKWo5tCw~8_{~h)}V#gy^YG>DA z+AHf4{9P*R`uH*7YFE(-be15psy>;DH*4+k9Un*}hD-cNgTG^CUFV9^5y}$`#nbRk?d)+? zu=BDzz3MGAm1{ZcVVn4KM%9PXCXNFm2l{GHVTqoSylhPSr&VLv>K{_u1EdQT2^YrC z73l&tq&SeubRzIZV0G-N$O@xmmhkXAKj4sjN%G|6Dakq3udmsxZlrR-$>~+EC2g(F z{JQeH*g5^vtM=mATfP||cy3$wjY^fXWBnznm2Muv{FGJJ9rn-SiFmv6FGeCB!KIV! zgNdj;TiOCF{z`L5uO6I&>|Ebhl|crq@9Iv0Z=S?{j>t(picv5_d@+nCSO?6C%7__w zwW9G*q(nE^G*rt9EJ>95hXDI%pF!*D28R{>J+!Bhf|4oSgghic^FT`<*aM~gc zH78p61~Se^u{r=iHwSK4>}*;nms&01VvFtx>E9*K|pf|)%V@s?`sAY-Vq5Lh?oYRb!p(Qe+f!c;c zLoB)?)7V|7QMHb+#rrQ5W5c|Ljx(QN{2->cR(2Adu*&WZs|*#O$E(>1S`X@h1;^$T zUe861>1nGf@@8og9E>7XBtNp;Fmr+Qd<#BWX3W#W$Qn^#m5!vz{hRjhDP{ zQNv9a{{Uurv^@}BiNf;^ghNr?|3ZJS&4A|_)I0ir^3E}F)cAB96NP3Hc7!}tX=^w_ z*62Y*4JaLuXefLdtu?|3IWakVLUZ%*6ly+P9?F?i=HYu)0?o`rxzg4!53{rqm4|b` zYa$P9`GF4pBABeEc%~;(eSUw)Tc06%Ob5ri+mZF~rNYp5f$OFJBq}>yT|t%wdu~6J z&(#*bwrk~r_MC71mZ`3er*R8>>K;av6PAsQ)7LO6>d8y+NrF97W4i{io6)BtCo#=#&xQ@@cofAY%u8@qko;_5 zT5uv#HybQ<`Qx-eUjaEQC;$oVytWPe-H;%5qG#FYwGnIYya10OB3Xkub-`sf{s69C z$Z|bQ;f3w`ui>qP&@7UUCf6B;7OP_)RP>gcS#q^Ku=EvH$3s@R*+ZfS}l zY+|&YX1Ck#@hU^89(+5&3}pUGb(Q&hvE`*DS6-=_>2?mf)$w;R323Hx&HriD^wLlY ze>>6CXUOEARf?&csvWd3HGvAw^*HI7jf4cpC^ZE(m)qkwgq{G*z4~&ubF3N{mA#gT zo%^^3nL|DnoV=OWK-S%GW^1VKQ1PEpIbOpeCm{uPZjY%&yKl!ib{};MfGLz3Q)nJ} z@^){h{tW4R@F2Jtb=c%;_c8f_PC!feSUK5h;!aq!O(o)(ghjkqFo&h%s-B0z?5YYF zQNLnW`m#yGGOBwfUBRaW>(iIT^-!j5zQG;r*7`TEfsO3+`km>^CJ%#MoK~B8{YxLd zv+Qlu%V=EbL$NAS+_COjR3JKMP_6rCMD}M8a9Ii7 zAdE+>Ddfw5v1$j2f-fnfm88|zh;4EJ-y zR*KlvC?Z2hJK*0&+gA7e2v8Ioj_Ox@Uqvd9r4MPt=x*C~2b!nha^yp!t zM&^%Lg^R4`O}r%*nl90!r*l}>R_RG>O3$(edIAM>R%KlWf9uM+P8?0+A3;6fGn>`% ze6FF<;u_Ihb$Lb|-%)8)-Dh8TbE*1o_5@~jtZKi<_{XrXUZmRZYwGSX{!~6UqLm*NE7vTF*&`(VzFgzdA$U1$Y~e z2sK(}?Ht_-49kpq1jpCOI*fCoo%yy+=-PSp^?JVQI_a z(aH*_=ekjUap~uCGjzl4TXFt%>>py+7ocMnbWs}F2xg*@R*XS)#H#Ei)Lv9s*Tats zRHq75Qf!RAD&qpBDx6omTIS$@z7U!7SQKiczs|%PbKZW|@yhPiV`?f79WiGJ`vdc4 z>H?i0^`LIDR|_eLq_AW1+jw;>SSPgEy%GCz?5hKL@~+330a4Y!NjfQEm0uR3oCOqU zYnjY6npTertc1lrpfAiJO{g!jG#_bbbU^FcKzm?9f~zy{x>>qmC+6>THl06sHEw!h z{s35ECgztSCJaVuV!ou-x*~_aXfjdAco#M4+o&&L$T-uhE$&8IG3X8b!RpdY&bl)+ zHPeCh9ZAprPs8cKdT3jJ52o!bR7(3WX&b9oGe*jN+RcPi$NQNoeNVT!J);iW8j8Zk ziQBWbERW9oL~`uOlE0SJGE6V^axAD3w3Ozjz_9voI18v$2RKNP958;V@GxD zq>jg`V^?)NUL6zFvAa6R>!{T*k2t7s^cJa9E@WDs@+j`w+haqZy+vE z1#9W+Mc;1vy3%)mzIOD*;i_4~t8T%$^wr@|P(>e24HfL8?^F7?;$O3$zTeXKXZr4> zZ#R8!(f1sEi?QTX!yk(ZUZn3K`s(OgM_(eWw$$84-z55I@UGw<`WDj{hoxBc3BH1} z=quy71@slr_Xql>(DyEV+4Ob5qH7JGH!YY*-$?pyrEe&G+vw{{Un_K!n(p*v(btK- zQui@qfMs8sU|eFgMw zqVFF1eox;Q^sS{Y73+&NH`BL>zUA~iP2bh@9i(qAeFL!WSHtOHK_-3q^cB;05q&G@ z%cAdj`o_@rF@5}zqTu*A_;?8{IG?`W^sS%|vpJ{WA^O_W_h2z_(udyYQ7_FnKgefjkLK;K31IZprn1By%Xef@lMOLP7G z^YR=@IZAR$bIZzoPPxyYTAWvsUsybY{)xpii%aGd2TsjEa9LSNnN#jBDRs(x<~mu7zs#BFpFV7Y zzl`xCwM=ksG57ujPLZ!Tal{#k>6zI%(hb;(R0feRKU9F*-ljpUWWaDJ?6>^Oct);`CyuuE_HjmJ~aAC9{;8xwDE= ze0fEH`wRW^l()iDHs|@KhbB3vWZG|idH$R^Wx1tDez#IzS$Sc(A1ZqH>7QPnI;+$_ zuXi73VsROm-p~ttxib-npz@r=Gm%N27@b>GG%Yu8rbCte&eVZtum~=|38#?=bTay# znO^Mol@;d}jVbgM<&Q3@U^1kynsgmU!}+y+P>HHxU)tHxXsr zH&KyH>pJbUiP>X@^+`mAfC$t4kX)0x@_EI11!X10B^BjG^AZb-FD;qr%TJtMRx&Fw zw>Z&LHHp4UQRs;UxyAWKY+|7mmpCi8RO`(vDP{#FmP}6^G-N2W`pcaO4LU(0`U|SH zJTX@>bIZzd=W!6gR#KtJvwX8k%H}ypqd#|UqEB_0;*vz4Zjy=9QS|xfdj7;YzM`Uj z(@V-`A?>}9iQJ;X{6s&pQryR>D9$S?DMx^kS?vD8+@eI5WNscR(wS9QJ}cLsS3pSa z3@5*$w5TvI*Y8Wr^`rkxtML1r-=ZKAbEgBHm|v2IzKT+iR5*o2MZOtO2*tUxe1zz> zorqTDLpRRzAqn}u>FCV)5`@;6SAjNssjne6*Q${qTr?pMtRt1ZKn4O~#SuJB=A>k&B$ii{QXMmq$}5GFms`xlq3Vif zFkZhO!(?I!+K5UTg@W92j2bg4ijnSVY~aX08qZuu^;ojmnpiR5=nxj=EaU}wnw48N zv!Ya$nx{EB-a4QvtKT?btK0^dh8}2mz03Qkm@1~B!z32wvu~;5tw7}?k%1GcLPAb5 zr@7NmHUgrI9#UA2UT8|GTr(I&px(pO0%E+BRjbM(u{SO-GP*HVjK6{6%4fsYMT!oR zi{JvZg<^Et^3q(?0DY*{hWd(;&p_!zqZGf=7u4=Z3T$K`HnceJw7u#by9ZDs0*`GC#W--6P(QP z*~!`I<1>3Z^BqpYtgXQBFFkF*fH`yK^q+G||B|v91E6I<((vKKFh!8^u;5NZ{GfpY z2M$147ncukrpwi|_pm-r>ZGjX?3~oh?DNKFU6_-SI%?urC&@`I_Lr5E&O0r!XL(}3 zez*$H?K$w|qPdB^dlpqBPQ%otybmXWf$c;`jRj763jWVa9ixvE9OzBYzEC^q$Z6)d z?D6No3Y@sOPtqF_c1FWAN6w?+hI29Li?|6V21_~DV#oAdZ}s&Hz~j#Cs|B6x!-A2BxpE;>tups+~`UI!$eM8c|Xh+L;c82@fS)v9h zt6vbMjsdMW)lw&y>8?{=BGfj&e!&1|DzGY<_^bfD^;EY1PW`G zf%q9G&und?{a!AN#@laQJzCh)9f`BrFS}knN?SIxUo7#TQ6G&(ZEj!HpLKlwYe?$n zce1@c|K^>;7jAqF4dNr+e&4)yxHDxd%Jy^Je!t?6{@VihSH8M#_|}cvAs^7~cl*vW z7CH+VuG{bS_s^K>sPLdXGAP$?e+_ub-c7gP`j#k4RbaaP)}NkpR-m;;*GI2?PPgB> z`u7u_t*bwaUyf^Pt3QFDwb<+G&$Qai3DbjZseVpWbWCiEmRLe@o;#()Q;Yw#< zYj?E68+L2!(9seac->!mJI0RUM<`bhCfnS`{GFqZ?b7u)tWTVf*sc4CJ$icc-^-K# zlm3t8KYhaZe#3?h8Qw3+nK+?e@`Tap=??B8`wdgaq@m)BN)=B=s=h#9d?|0mIaxRJ ze{0@7&sUC{GgaiKq3Y3q53%dbod5sI#WI`Pn(LZ$8NAR#9ESarJw%Bmgp13hg zCLKT3O&LEr`@*bLXTpUOvQx)7SrbQPq>nbUy5#KajPwcFPHIN#I85{c^H(Q5b9BbU zlvF2uZ07j$Qk_iRCPtbdhMgIvkITwPPfc;oOFegD`g!n-NuPvc>bNXSD3dcUbh7l6 zQ`Kcx)CbmYoxxHsbS2O3>yu*LZcdb&>qfh6kBY(j46e(CU0%MqpZ}n)LHb!=an9|| zTp>fRi`DSxv!b1t1JRBe*!#|QoO91{+!K(YSs6~upE8`-PU9SR#B3+Fa<=0x z^E=MJ{Z3S7g%k6a3db#<=ftF4?nK>xx#R9x=tQSoqL!M;yA09IPNL;J5kH-cic69aH3N-IPPZ;JJIKEble-CaGZCZaAL0C?6_xcaiZpL zaom;9V2Ix8xGy~CIDg-c@_XKKZhqd0`tErrdfW?+^T7*_TlbRVbb8r|y8LBa^Ik@E zzT!B?yn^)p%W>L&%14`x+_|^v7fbcoqk8UZmT}7v+y@=?79K2 zb1=zux8M!!zYcSw9yrZ)dY|q_T{6OTr;c=^<3_vAKU3W3`Dw1RC(VuCfS&=rKHGKY zibYs4|(~a$Ym+O3ckL#|%j~(sN?zp*^o#(i7+qiAwTDIcv9X)W4ZF}LF z`syFJ%qO>Qvp8yWJli}s;?NwNLcs-Y&OErjz!YK6FgP&Z%s%JfPKah(CyZmEf;yA|1r{K->pM zYyGG;y&3(P4fXRkpZ=*DpJfJOgAbEWRI!tprtx2jddJ|$R>rJ=4wlCT;5wyi9Gb4) z!r=A-_mtq!?8D-iufxDiI$P^wovY303zIK?qkZ!^8h?@(AEuly0e)jf^YQ#p(fV=C z$8Q0CZKlTOdeal8oDTs1`go0hOtKp&=XBkkSkCQH-czzPZmSnJCfM%yjm2*Sca%4N zPkB&p5%6#Dds5i)y?RGgB2?G&D)?HTr*RG1vxVCN+zo=`b0caq^=IKe0&cb7hDN}} z#W>D=f*TnDHyF5Q1b3SkCo=PU32+1X0X%GtjSIvr0iZJlpAq~GUcA+>7XjD% ze66=J9OK^r+zo;|?9~@0{(ZntxuEHM#b7Z1UT`T*lo!)682Hu~YP}=Tr_^TZD@^(3 z1AjbU;N~W9Z@;77<-mO-xCY~kM=$YPfdA|gt@mB8UJt$p!Vds{^JIQarr+2GHX`H`pn5zp)GS7jQ{XCl;Q(&K3-#PfQ4bh*Z_5O|4Rz5O- zTOqi>GE10z_<@@*xWGbB7~C4*ikgAj0o)~mJKCE*E5EpJbH)lTQaQJe!F;h9IDXc= zLo;ysz#W!$)-FQ&mIL>3GjN-L+atKn5%lc?Zd)_-@p}7*X5e_ey{Q@TW&^jl8Myht z&1nX19dHHBNZ)SY&T9tlAaEm^f$NGfs#h~`DZsT6T%`Ia0?uuQzE!~0&er2hr1rw= z?OV;jeFWUI&A`Rsy7_?M5+k&$!NA?s41JdXw@h%6%4HF7^P8b>18~!uf!hmQRx@yi zfjg}kxE@$u?;*He5y~Y4xbA{$Fs~OLuOoio1`6&bT!YkR#=kJvk#)eEez!y5)^#Uv zKe`*ZBpHw5yf~2=|3To)xW#)@wKWny@jdVm;*);e9>+9+?*V)^@UK;9e2LZ`oR5f1 z+y*TT-vJSZC1jlEu)n?KwBK7SC?qR`2x~?1q?oPq=5q_XNEqz^aleD%O zxD?>-5*(K2^cE(4MZi5FxC;$#jLc80`@>bheImH?BjC0G*Kv+6zewfs5pdCh3;ZAx zCVhN0@=J;LSQBp;++g575?rKsF9Gg#!8Mp)iGH@PMZkS0xL3XLdgg7c=S{%hBKbMN zix-)=eZZ{{9G(ExTbTUBptF=Wqa6DJH?;|U%uhCOse)^e?=by)5%502U+hh%bsw|= zxYdH2>BWV)FW3kCn}R>l+i%0nxA~y%3v+dQnq+QJOnHUDj{yGgEgC-%b1StOe3*JG zBK|gwAL~uOl}|q4+vRqRtnDW{J{F{QO$x^kM{8`t}kAPeBkk;Ga{#;J%S!s86wUJ`g9|6$s35%8H?HU8eX$og5nYk=RrTjLvBe_*8X-^c*2$Lku0pQH3<%Fk1O zO!s`?k9$Mo7d9gu8-Sm+SL5>|q+>5|4+t(Hrs;IV;HG)UJ6f-{?*~qVbPopp;=gG8 zz$Ws^^2;awJ&jNGrdwo|$8zB23hqfS&a<9M{1)KdeOm86FFs7Y9{~PA!Q*E>y+z1p zS1b;G{#UJkTQl@$0KedG8h@u3@2P*5%Y5n=e1mzTHIA(VF6Mo$w|x`s1W>g#_WR+U z{aVjr!3FABWTq-H29DQ;4T2lch(6|LIdG2(?prU;(;ig*fxqk@ zIzM-N@t*dq@(=t0!DDKpH&3||$2RkNGjJn-dt7jNUVYZ}Bpv#xvm{qVSt zb$+^gaUwH)n}9n;a6Kd7_5s&ka2Ue%7AC(jn4A0{=^N1qj^*7KxVECNOLOKkz#RTW z=Le4KMZXw1n=p0Oiw=WE05Iph2D1HNly>pR{Yprj11RQ@qd`oa=M8I7F+^2#& zIRb7Ga0die=`GLH;P3hyfZNnor*BgPeS3i$*-qnbh=4l`-0uZ^Y*SB-D5{-9H*p66Kv+@pfq?ydhY`P>Bjh7+{j zrJ^S=u6gjP{R7`3QR8#G=}rzlw-JYRzB9UMT)J1U$kaC&xG9307y)+)aLWXTBxpmdSDFwL2w0);MkrrfIFkR zF27^oSDVRidc)tL=L0jizs9%q-amTUE6ZsE@S8_!{5jrsBGD1I7r0iVHLk()URHe{ z2CkGJtj5+YLc8dJN$AQ{jXT+kv({lVfZH@iW2T%R59J|J0j5tTf|7at6iAw?Q+6;}0@s^M9h${jv zZ=A+G6+z!B;M!zr+)WX1TY$SlaQrP_ZKl0h^P7)=>z1YUEr_6x>zQ)}_a86Ly1yC> z+@f=}z8r5khH1C?z)zZ}@!xvWX$7vxHcCyou7Tc%@EuG zZ#u1bV=(90dx_T9V191J+m~~r$r`uMn?6flHgKD!Xk5DRz5Sps&d&$#Ey3lXFRIPt z*V7(}-vE54nOd*kJ6?nt_xAyR_zI10ux=yKu{^n+nYB>kW_t5wjTc6=nRO z;HG=qkEec^&J5tQ_)#TnPeh2Hb@#sDB8?YofO~qW))#5K*a2L@GL4HgUK{}KEx|<^ zFWTc~abC67R~aE6BY@j0xWitYHD2Tcw||A!m+LLZFyqB4;5Xl(@s9U8XZ5o!z@^-z zakNCEHq(DZWW9U@++3PM!4`4+!#dz=f*bBlr^L&CI2gE;+qAwLy*N*P+DkebTVGoF zJFTau;KH^46ogd^?p-g=y8ad+Y|o2R{@tMxJ0i$ky&nAu#XhnIxo(?z94L` z;Kq4zB2!-+>gYScH8vkq+$Nfp=+KS_Irjz-2W97l*c7D!2BAIUaqDY>ErWqN8H_X ze)j^`rwJVEh0n{S3vP!uzhUZ;>q~!aCZ6?k3GlP;X*#`&fV;jKxDCMlQE-{w^oq=Q z_X78};3C!IVc=S<)9GvQJGJOzIrWHfoZ*7ITh0f@0Z%zGey%V5LGa05yvW3HeQAf_ zQX}Bj0r!F6BDM3~z`6G}UET+Q>n6Ar-gvEXqbt^Bt`*#PFHYnha8rPLNN}Z%;8>1D zz*S;Geut=Z6-`)Ml<9ValD)%iVIn#z!i5J}BU>u zDL$XxhSmYFE%f3k?-afgXJPTa}j7K?kExSxvK^C`_Y<&I07 z+Gfjn6KbmUYR`F00oAt3qbEkruQBK41cqw0J!H;{+?X?CuMXL;U%Qj!!u!cVEieB@ zyIa52?(Rd{-SM4ve-QVy@3ovSZniAQw5rqRZxc7GUdwNZdm&ys=Vr=5hvL`)3tBR^ z2hQaA%#U!T97c2Zl%FkAbsFyOzw2EiS> z9@`bFxrK?Bry4tN;DK;EuRq8C->TQ_cwLi!6PHp*-LhWgnr!Fq|LuBh^)t8FCbkxy zttGcW23_}z1YHV?#eGlQzl+h8pHP{K8 z^8MOhSyA3`_?Pdm$NVDW@Xze7t(xerv7YYQ;@AEv-MG=~>n~HUP4&`X`2Ti))un~s zC7#oRV6C_Z#rLrunt|PK9<8=V-TRu6Fm#({9_#w7W#yKZ(2YN_~Fp0_~o&P`im& zY4ir~McDYj9j|%J;uL?*F&O;ltod|e z|4aS#$M=l?ZN{OFa@{>%yL&omcRfGBj?K6WyM~7Ux7x)ozmD?jJkM^S|E+p$)_vKJ z8pnT`di{0YrAOWWoq5+UQ?E^3m4o5`+t=s+JM*qz>-B$O9RB6!UB67d+GX?qXa9}- zVlcK_#a$!r-QrFW_W^Mq5%(!^M=Eyk&_;eI%?&QTtH5q@K8XC)_iG9KS^~e8z^^6n zYYF^X0>75PuO;wn3H(|Dzm~wSCGcwr{8|D(wFKIBYcsV|>eS&WQ`?Tt9+jOuwfCrn zF>Oi{r?wrqCklrpQB#k#eD6d}J>EK}AUM~_f~a$Hm^A9Vr&_3 z*;`}R9@1|o)YrQ!RX`B}yeIL!)`sWigq~{$b`HMGmNzpeuV7}*jEdZ{d}rYo_=2L^ zly-#Y3vJ3ptMG|2wsdg^)SWDdG?Skh4YWP0)RlJp4!b5c{0@ir>6nM1SG*MyS>rUpJb zpPF@P);TIYITzXC=2P-Iyl}#x9PWXCX22#);76?0$Lc}w1Sa7-<*D*9J0_Kx88mPV zJ|fPKQjeA|-Kz958$-^|EvoRPBHf{J3{r8V>JOFcWMv^e9@G%e7t{rqG>G5yHL37$ zhBf?<`p-z`@UcGs=n8y?yVySppW#hMjn4h)>IMxAs>{Il&NJ1A$$y5vq^z=%JYRV^ zJ`bHOLR`Jh`|CCJMoS&Zh!4v!?r9Xq7jjvwotQLm0 zfg!4A{B+Gj&ci3D{Xd;Q6#R-=zMrn()X^ogW}(UH+=XWD)Je07Qt*BAKqY%JKMcb` z_`W*~)t_2cR#Nuk6Q+jTg$rZ6gKPdz9dYGCGy9NxrW$)V;w7cwlk`Qt33(-@zNA5; zF{Ju^`c!IG=7gMKg~j^g_DKWNe7U81{A5T{&QKAYmCo#iQ9oYesp;hIl|hK@ZEYOEGY>+jXgZKIM0`g!WfcK zl9yYQ4j2IS1%*f>x1a@If~w;>5g z8fr#=lUhm2W=mxQOi~hBqajAj(bkA+1|d(Qi*n1$Gx1&aP(4E@_{%UbN@{jRR5R2R zZXge;%JxJgor=-dU*exv>I-GP6N%NZG_%HBiVNw4oW?GrsBLoB6oKc+XuPE~&w}m*7G#t%BUl2;lM)?YIFD*pBXTabIh55eJ>C=6A{%oXNHJbgw z1P>aRTAr6%nmesX`kv~JL)A(2kC2XNce_uTQW37ld|{E!AC@#IyF@kX)LEtedAd&= z3PqffQdnMEQtlgDR5C3WLtvxHSr{D{1qMO$Fij}D%y*t|x(`=#^r8@MplMTO=zy{$ zMAfiyxifv7nl%zRW?)jCVPdq3&Z3I; z6Dyo0H^Wz!Gz5B7M8)N*azZ2fEtB^}Lt4XeOeNrujnr4wBx}~Id-cMYK<_k#nKU@N zpsZw0>fAhEDeojgOE9ErmV{xSiVBu_y15>z{H_dQho#Qd^M{5h*UfIVg*8{E!Mvjh zO^Yd4)t5ajr!Y(EbFHPzTpUhm&@cw8ix$TOt!Hpbu0L1C2wq%DeP#Z6$$nhMrd42e z!kSngR6IOTSVQ!*E~J5nUi~(PqYYQ>M$HH#P&ZrDz-6Xk8HQ+RbWX5UlnpK}$;Ye) z6Ir+ylohJE7bbzGIizOg&C0|LZ=l1%Yc7I_X&6TEl6+p=Sth$|r9($m;Nn)s*<`u7 zsHdu1Q8Q%<4)1!(v?mN**F;3xJ7H);GknD}`~{KY+b_g(0{6#B1JM^x8Kg59Qjk_- zV@^M5KpmQ1o?V7JY}MMoXb_C@OfDBF~Jv^t(U#u!upPY7?udIaf7g`RkOHI!$EMmYR223x- zFB)tZzudkKXZKEJP67rlt3h53Z87SUfg%U3czKX)EauH{LymW3fkiN0BR zv#{8OI|Cz@D)43zXO&#)WAIjy%YA-|yIPzS7A*ZNtR-r$~Uy?JuqNpgR0@p(<)8&@s=0R<_ zv%7;6C2L{M)$Y$*Tw8jC(@G6(KW1g?ny4Yp(x@coyQpE#ve?1S+p#}o0pQLSgPaFi zoa*dpg)gwfEJ@UlU&J^V_2U;V*0qR^*#avoEq?OC-c_+bcgbyW?9X0i`=DiGD~cbt z9O%@xY~D)ZHAh6p?C#=3$2@*KDu8pwAH7`iMy$R5@&YPzF>KF7{ph8x+gjMmTU(&# zP%k9xx!yP|fwi1yYf|+SmlEG@`AaMa?rYi9BIL_R{OW#4_tpV8e3FF2`ec+zYO!;5 ztI)OPZLOTB{E$^)=ZRKLtzIugt!+(#)5V>J;i_K(A0Smb=wew=TX^IiKC-}KyyA~RQY?#JL&=D?(M?a@xO zUh;BoK2mjKXXBC7;%tkHcJ@t<${9D#x$nr#3CKZB zM8CMb6PN02JnB3jRs@POCuElumKFi?ZQMlXhqzI>NcN5K6JU&fwDbEmS4m=hz?@vI zpgGsJPIszXGjW)bqDA{F%AFh9tHEP5YTsGiUhYktJKB%IvL@DPGEmOW3&{dn;moNQ6V&?g1gsFDWX;(}+oqJ{`LSYTN3pOS?_kPHbMrz@ z--4LmX3SpI>)M1<{bV@Ri^Hq_9aMiz)zM}Kz#21&{AU}zaBk%L+vX$GlamMA#yDTA zatZh2iJ{)r7Bh@l!Dfe=b>2thi>_mvxLF<7tK&9xd=p3XMAf^Ej(@amSY+QL_J3UG zx~X$ZvE1z(gjlB(+_I92H>%@vI66_K{DDvE%P#e2+s!O4nNw_j05h>|L+bV_Vu|1R zuwA%{x&CN0IM%AIZrRajvc>tiMJ2_u=2zz2!(vuRIi!x)U(dwdqmGZMf+c(Uc!t&68KH;c@33JU)IW zk4x|3@lG6_X#NK0Y;PaD;5q+nZ~v6#eAeEH(tYJE1YmXBc@L_eP%8GTW7XX%0(D$_ z5B=ZZ=tPgxKj7Zf;XL^%_x28I_`Rz`jI(SVad)fZ7Il1G9shM7&#$=Ob@_v*vlYbQRy>^Q~Z-oRPhaRSyJ$4~eCp6NW$F}=9Z?>yWQ7ZKv#?U?1A8~kN z?EJ1{(opf<(-AeYJQ~VxUcuu>I66^Yg|Burt-`tOm>B0@E23RoGHR$2_i-|k%22%M zm?SKFdrn>l*6v#s>veeF)!w(^{aAbd3SDfMa#?U*IHs(ms6>r=_<0nW`4_NX->x+L z9o|>hF}3fh<0tBP!+kunXFZP#f8PQ$XQNjkz`IL3d^B zr%`)aeCfXAzTmEmULVE3527A(x4O%t@;A8shmO3>J+kYl)zLcuxdDHN-5u_ZsI4&z zqwbG-*UerYHKtA6@&9bGqt*A(lPIT zY%z98i|Lb>yE|jb_PcLI=X}<3OVr%!qrQy#DC$FZn|rzPVyXLnRQkkL=@U<=D7e4Vrk;mlRz~lN+Kpr-Upi!0%SYWsQE$07xx1qmY>Hac zYD4V4s0BB*%-$EB{#B<{y$%P#bB4Ux@`(Vr(%lrbq}3*(f7fzV%bs7kof5aW<68a2 z{Vr;`o0fLLxN&J|X{ZGFGcUOKZZ|nKEp3H6zVs`1MO1QDTH5&WZ@LdhEp+#|d);wU z?sdnf1ntT?xBplMr42yJkJ$mcp)C7TgW6YnBLiD(so%!~FyX$&26)gPpQY zaQC{dGYoEGtm~|UySk<8Y=XPy2v_O(0>-JyTh+x?@onzsI%^T%xFfdf5R9+YRXRTB8Xe!7B|5&5%XEBwF$tlb zRv6OBb8go7gW|5aRm+`jbDiD@AFX&-sDbTck9-jF^k~<4 zvHkH=3Bo|^^vA*2JN#{D)R!eMhP;SC*@*9f9j4mVMmZA)Tc$qqUeGO~&&Y-^WO?r;hubBtZW6MmBv446S_$(hI|G5!; zov9cb9p=xLsqZ?NXXEy*=rc0$EZ+wih|TbAnS5h+wY-Z?kCFcf*{-iwJhIWh(vx3X zrha2D_Ftmk$cF!0daU%>GWkQruI%8hI(fqX85*DelOG;w=-dnmFYKf8DzVE7=2q6I;hWA25WbNOUqx)iZ_A4R8w6sjF?^8?|0H^_(P8>+nf%E##E-2*cb$GC z6VLR&%Rp>~Z_6tFemZ=d@QuBD!_U^i0lqDhzf}0w3E#+uZ;#hZzb%u0vkZvag>PiT zALEJN$ln5=C}DKiZ)~|M8+}agK1pvq z!Z}_Txh)ENkpaUcp5@<0&QWImZJGKGh`uC%sn5v7lON~d+cNowgg-|3MmBu8yanpd zmdWopKu2(q@QrNvGop1kWv1Vj$-iQd4lfYCkqtj3CX{c>%o2OAy6 zZ_DIAJxm2V*9hOp#N!n1mGx%$woLxf!*%%0!Z)(vU*h50GWjLKzfbr^HvFqvgvM{n z9=L_Q-q%)d?Opa zbguy4mdP&@{sqD}vf+34q~DgwUnTq!;TzfTWx5`S-_#HibTPDB#SPi&M_(nGTP9DB3liyePPYK`1&E=;E|4rc=+3@AFDuME|WyXJj z@IMv4kqzH&FPS)L%j8cNev4kZ{TjKs{0iYG3g5`hD;oJ2UuKunU{-1BR7|yCj2*rZ{+6kFB1M|!Z&hr`9;Ey>7(o4$cB$$No|zb z{%x7{cZ2Xx5WbNOU#91Q>!&S~zf1T7g>PiTzlk1fbQr%alRx!zJ0$$zAcmAPxu!K-^hl)mmX|%$hT$k-Aoni6bRqQ#54V4 z=)p#Zd|M`etW3z}3E#-XlV5_Jo8j9s`Hu^~O87=L{JokU;M+3!OJzcTyYP){_~uhL zl$m~8CjU<1|55lxHhg=&N4_nS|Ag?j3*X3wkJDU-(8geECdap#9h~`Q3%@6TXoRUw*C#@NJp=5yGz!zL5>zPH(vMpDX;U zg>PiTm*x?O-d z-^j#s{I-9OA>WqCzobI*#|huahCk4={$|VMFQ2RVlZ9_&!yl`I1L?PA^4}DGvB|&4 zhTqB)zb%vh-sL)iONDP_!=LVn-0`vlnRo)515h;g@;hw`KDGF8rOsH?raH_wa3*{Ot=h;2q%` z+3??@2OFJC9Bi5V)mN)v=R@HenRvF}9333s+cNpz3jbT-8`i%zJ!^dMqYNNyS+cNoyOLX|L!Z$MUOusbeK>BT&{MEuABzz+qep`C5(P8|yO#TB^ zD%eR8zLAM%{AKiDqeH$eliy{T3U)3QzLAM1-~47___j>`g5{b&SNKLY{10_-AbwjW zKet)~t`)wKt06BEE*+z9o1CM}{Ma(}bzh+Y8$_RxiD!PU*TI4G*fRN#3jZnL8`<#R z_3&+({N>kaz)s;C+3@Z4d#2x($^S(7ZwTMWhTpfX)=!yyTPDB#T{`@)!Z$MU%>PR| zIFNr^CjW23KOlS~8~(j9=L_|FlU3I}?O&Wa68X{xhD?{2bvM+3@pqa3FqLX8d;ve}V9gZ20HIXa$s+ zep@F0z|%VXCgB^|@ORRKjSl&?O#Y*PQo+tc!Z$MU%>O`ou+bskmdXG7Gb-45O87=5 zp8QlD9N^nB`MsajfR}`CWW#^b!?$JfKM?*W!Z)(v@AL3&nfyO()qocLkzPwS{Mqzi zqmzk)EtB8>ITh?A3g5`YGymIkaDZ>i5oyZ9TbbPBt?j`bCkPiTM>A0y+Jh~V|2yH&7QT@Uzq==X zTPFWm;a??uBO88C58sx_|48^Z2;azt-`2yoW%9ok{(ZtXvf+>L@NJp=q*pcI3E>;r z@Vi9oaLSoD*fRMUuj}xg!Z)(vN6~|g4*9lBe&!o0*m+C%Mkb!)VZ06w@NJp=i-rG{ z@QvJDeu41Y4btt`$cAsXH>Tf~8UM?|?z@+ZJGQ`;ZGL6kqzIjFY;}f{H(n?{#n8|vf&@&sXtpL-+a&RTHzb{ zR>+HlOULL-jngM7Gd;FUeH-@c@GYXx$cDe6Z7AQC$)EJ44u4JfMmBu={SU@(%jAD@ zQ1kyOd?OqFI(o3tA>WqCU;d2>#)U$+M9=L_cYLS$ql9l{!ym4L1AJTlf7&}6Fu95{-?uEV35$RW zXn;k-DjNwfGd-D1CUE(f%yg0_lg^Nyd>}&8(|sms(qDA<*l^vZJIx9a~tr%rXxWD?Q)TyN%~$oW;( z|5TlG>eQ+8)_bZ||0?w7LrQDQn%}|A&O#MPn@3QKP(7y+IGWGv)fZc&| zM*ior>c?KS=~qHervA%b`7Wz|&VSkrH$hLP{$rlrWz}B`{r%9BslVIPyR7=r*KCG= zhMr9Q2R*&Zs^{;2z6d>;dfwB@8Tp^fs^{;?z5+d&`c+=}F01|))3W3|_SyS~O#Nov zkU#xL%XeAzhoXa<2R&Ky>;3Z;?|JC5>c1}EW9r`m=*iUY^4gEfsvntS^`}EmroLs9 z!}`0d`UmFP3~Qh#Q@_R3E;@dfRe$m!Rv$o5rv4=F_+3^#eUrs&`rSmqGts=*iT-&8xr5s=opH zA3#s0e$vystoozhq&a0C0(vs_n?1eDs^{-*&RJ~le=_w8yzzs}s=wuU%_-wt=*iT7 z`44Rclr!=_msP(J2DEPI$<%N6?thn6zgxb~*1wg|lc~STCWr0MWz}DV0l_%*Wa?LX zdY4sy>tdVXz0i}XAMx}qtN!JFo8fBc$Sl#sz3A$%_;A7(37dZ z)1*en@3QLehyKuh+y2SaA82!$RoE)PL72-(}T*Le>k=zh%&qslVFO zyR7UTj;rvAVKZ3UE7@3QLeSfMF$9-${|td2i!_xcZ)RsZgDtp4-Rlc|^G8O)#lqvgA- z`me}(4*K`^(33S*%XiP0>Rnd-5_AYpK~JXsYOnpftop~+XwF39htQL$A2X>@`*&IO z^GB`zC(x6rf5s+yR7>8vVM&I9S1#` z`l~&?%c{Q%`ct4MQ|~@+wEixu{<6z8XCko_dNTEwd*!>V`U5{;^(&w!Q|~@+w0xIU zKOpPo=-)c%$<)vBoK}*xTIk8tf6{CJE~~!$=bBT-!O)Yb{|iq~{yWL9^QF&We)2K$ z19pE;ksq}DJo)b}{{;LJI3b2H-QUaLL%_cT9}RxPLstLC;6uRO;3L83f{y`T06qbH zF?b<(3cMJ68F(ppm$E#|?!bKOHQ-&pZyU%L!57W7{1|xP4=ld`KH`m*4?4~6?>`Q+ zd?I-M;g);A8^LFRd){QzGvGN#TD}PU9455u;0NAp)87kz1^nmW-Scev&EQ*)wR{(N z=O0;q6uj}Rmh~#|S)%R7pKpFv@)tD$e=i7kns4R@6{Dxy{*PP~{s6`Dua>9du@e!e ztoMV<+MZ9mT2sW22>T;ztm=QFiSnncdY4r{PuA7azbm09Ypm+$X`=iotKMbR_dx%* z(37d3uVVS5e!d~gsvm{^e(1^6|5qo!mhZCa5B<32lFHfo{VwPamWii#I6PbZZs?DIo=p7)uY8xa`~}x(PWjFgdNTFy_0CA7 z%c^fd|90rfv(-Nc{i)ECsdvwpmhZBbKlgggDbIE2$+Oj;3;i+!z^{SN5K)Vu9f^)9P^{aHDE4Q-8imjn2Qzs{bPNSF`?L>TmM&E~`F!gXR>w zF7#yT2R*&Zs{c#qZ-bspeah3jtoo;*zZ-fo^?SPhC)}tx#V!UtdA9lz^p8MKrv9T| z{ax1j{~Y>nK~JWBji+~6^~-P4oQcHK(37dJdwQ2ue>e2cLrpDSCrv5OS96oLrTPLrD$n;c$$msP+0R-0iZ^knLHdgZ&U`d6S|3q6_o-JafM)j#rC z%_;Ah(37eEj;D87_1AyS>L;KlQ}2!!G7{;s>R*Ju4n3Lr3%&APR{e_GG-o2Q19~#` zf8*(0R{f8l{~+{a>fQFH^>sE z9|Qgf`0e1o0G|rJ2HXd}9(*SFCU6@3S@3%Bm%!uTd%-pEL*PFJ|08%8_&eZ_fu9Cn z4}K1O3;22P7nH>w&@;dD`|$meewbVeuAlrpFxNXyoRvtt^$k12^^AMLT<`a9!CW7; z?`*q2u6KHcuAhgCKl(#3*Ax8}nCpWcJ81P>?{guT>vx_8=J%fKz+7Lm0X}p)=J(c%!2EuAC79m>zZ=Z&dn;gm zuloTozrXz`nBUWW3e4|gzd-$Vdp!4m`TgpnV1AGK44B`S{s_$PMSlh6_n&iy?eX(_ z&SSt2?X=~+9n9}72f+M(@*ME<_#ohXFu!kXQoqaY?}K1|e|SBZ-xGcn%e~r{NCzDFu$L=2h8uGc7yqS(=%Xxuk<4@zdt%;xji0!PxMakeGk~< zT?Xd&KIen^{mv!ek3MAcUk>K?HM;Jbxj!GZ>9>OUy~0<({QlrkFux~w7R>Jhehj9+ zzpm@1`=`JA5i2aye|EHMRF#Q#O2B!bv!7@>-^`$@I(O~)qo&=`9-x*-~ z?`6UC$18y8UsngyU+z*c{ok$x)1U2HF#XeR2Gif{PB8t)9s<)J>^orkcl~!T{k47u zrvKI4bL{ccpXzup{iFK9^miHs(|>6TnEptYgXv#%HJJWFUjWnp=OHltd7c2%Kj-^k z`rG^xO#hjAt8D%057Pstf6FkK{wiZ&`kw?~`jc!0(?8@2F#SEQ1Ji%w4lw;Oz6qv( z#gkzAOZ*#{{tqvK>Cf;BF#Qwej@aX)zrnF!`VaJg=?}01%=!HsnDg~5Fz4Sd2Xj9C zS}^CwZv%6_`yMdouO9|;KKdyz=a*jwbG~@4yol-j#`)i4!JN-s0OtJcVld}hhrpaa z9R+hfbR5k2%@&yRmAk;4fBY*j=M!%Sb3W!SFy}|U0p@(i<6zETJO$=_#B*TIFZ>Y9 z`GQ}9Y5)Jdj6FZJ=f4q5d;MF$w71U((|*1XOnZ1AnD*_nz_eGV!L&cG1=F5^v=Uc|Ni(%y9>nD(pV!L&y$0Movd1k+x0I+*sK6qxp$ zHDKCj&I8llQUKF_QUTK*vJFi8#${mIE3O37{_t@y?Fl!5X&?AJnD6`dC?6>P8TZOb zk-y#G`@t`O9|Y^dM4Ep$_!w~FYgXT0JuvMxFMw&U`Cnk# zYhDG@UNdK{J%6;<90jJmW}+_L>ry_L>%$ z_L|GUwAXwDOnc3>VA^Xw4W_;3PB85?_kn4z`6ih5n#aMk*E}u!)iB;C1@H~v z*EIj3a{qwmWi9jj`o&=Se=G;n|Kmb1{XeF_^#AxvF#SKi1g8JT6JYv(JPW4($B)4D z|M=fv`hTdMLF-TdkK@7g|5ym7|HqkN`hSdq>HjefrvJw_F#SJ11g8D#TIDxJzgKX8 z^jZ382iLQEGnnhkEdX=9IB}0L`MLg^bZ>^a9(@hW^#MN!=6c^B19Sb$8^K&p@m?_3 zXZ$vp>lOY_FxNlS&x*AETo3X%FxQt;yT7J$y>IpFROb4N7l64QWfRQx#pQQ5O@6Ky zcmtU07k&ZE^$70=bA8fB!CbHNdtm;a!;it??*Jmb z=6dPN!2JD$EST$QH^5vU`YJHjJO3P*>mNS~=6bl#gSkHOLGrBC}g=G z=ez;T^^sfP33+eUzpKDp|MoU8*F)b8=KB2q4(58r2g$Qt>%;ZObuK`e>uE0sbA9-6 zFxQLz0GR6+-wft@*bjrbzW+aix!&)O!Ce3KRWN^#;E025efawZCxf|u!b&i|XWs5tY8ra#!ZV6G>! z16?qQqWCoK4%mc(z? z<8OHUlE(+iv&_{W@A3H_U+M9a9?v^0zQ2tgU*Yjx9_Qpby7jrv<;OTyU_1|=+$FeG7ELQ2AN2`eP5l#rHij)YYbMkK73kdd%P zg3g8Ob91ePtb{QM>m;m~utCB`3Fk?8mxS{ryj#Kr5-yaGlW>s)oj)I!P>@iR5J;Gi zut~yZ2_*>^OVH=B{x)z$LRG>g5*iYk5?T@_C2WAxxClVG&c&CJuBrKG0vV>D4 zoGL;7c50}}c3pzjPwVs^3Hz_t-e0fziQLB3Be~&VB0pJf4NW#0LA7P$QjJEfk!>|f z)lG=lUeCAI2aRT_R&9?-S0`$WZ3T^LzMQJIO0B8Ue4`mOh8jV>71;FUjUX7RRa;Wh z>RK@<+t?LBYgxXDEDDno6G0ys^WaNDEYdJ5z$W?QnO zX1L#MJt&kWNpYGcNRX)?@k)lB*{*UhBOc(T@2 zw^VD}s%%Jp?bcQ6+Lfa2ole?1>1g$q2^;vvO1V8>t5$dKSrIL-HGhRdGRZ5i2 zG1x>UYzwHArR!VQnn?DirT4a7eAwuxPc*#@lLuyywxvOtu9oC(a!PU|oIKtMl!K|1 zHLDj7g*il=A(PdOV4g;;Tr(ZF^z$Wc^p&!-KQ}HFyJ<|0Y-vZZX2L7gq?nUu4n@26 zN?CY-n0r@dQ6^ta_N*DdSo*~cjeI@XyCKML8Irz!JYU$7TDvOKyLBMh??&olH=XUt zrBaEU?4jRYxMYuXFKCFV(XFGaDIl#eckI~Gq%}Rb-x`B?W=srkR8|9qjC>w3Hqq;lEw~Mx(_?dkYrai zAeY*VW%sT^`La9+a^+H`)XKGLxrxbgIX5YtRIb1=nG9g%CewZ>X&(;RLaiPod+i9{ zMx{nG+1x-04~b;Y${=62y_%*ZbNzt5-qn(HvsRWDiCOGsC~0aDDms=moJ`rX<{!^+ zuanSct2-7{>RNa*DeYdz9{Fk^NXd~d9;p@b<+Nx z7tOFgWv^-nfw{}{gocL_D>B*7-j?-q3vWwICZ%CevFFOS>wBg8L*;z4sbiV=4*Koe z;>_jC*ukE;u)5I|XfJJv^lq)1j?!n7z5P^;F5fDBel|DVGf6HUA4$%!Wc%cKn#m64 z^qMZs$}M4D0p-9-5|LagSJ{p{YmH^W=KR)Dt)c2U)e zS;*J(<7Etj%{|j^BBd?I?iT;v=&YTtb@#3xNcN7^OoL2S>aD4$8Eev_;Zn0+YX&RI zwQ+et-$ThF7_d2IKqK!9ffxs*#mA}}HcH)B`<*R?4y?{^33SLZO>r_j!A0sYve_!< zT+eK5%o9Ji>j#z&m4kd^h9Y?H0u{aesn*XTA5+k`I+N2tz?8#Z6;y|*V@u5FXM zEOwJe_cyXF(i>?|yW5~RS~GoRy6Q>LrArHmA`j6l-ch+yVwrx^ssD?VR}?O2s0jz^>s3I)$6ZSuzAhJ4?9a9ML$|} zcrljf`PdXRl8Z%Yc3o|na~*#wT+Ab3{`O;y%EH4Z=?vha+lx0svTtm2qqZ%zy%5y( z?KXa1+D>sOTOwBowk$qG!h;#$OGbO`q9!uHUcFC;-SJ|1n#|qgUF_1Rb3q2!%`R%Y zqhkOeyV(v6@YoWyu5SCI*du*#l!Wq|A0# zV>Jv^W-nM*(sLDWhn-Fn+9t0>R97S{HBHNQbA{4q$#yP!zQTJP&B{oNd3%2s%l6-D zzM@y8x=sJd$skPbxm=?q=J;H0d`Hj_3w$mo!>hs;8L)53P2@{rU3X(PP39Y70M)2s z&}h^Xxrw@1_*)aQVeHMD0lz@!WVxZ1{~t zx0grBt4jb83D7>CKUmM8CqZxG9#xL#?T}+RwkaD!Bd{sl&W-T}3 zTs7F%7FUv29%BhNmfBoW%tY0)z5Q;&`l>`-M$#vX3B?$-i6 zrDXGM{eAhCj0ZMjBBzOg81jeqFLDpkP3P#$L@bim|7nuMGT)dsF)YB};qY`Ng_bu| zDLI?jff=Ve`lhiKCwt7igPElDt*6siReSfs+AhOGGgG~{7G0gY*_+v!y`CBAONn(i zRT_;oDCc1nHf#GLY3yeMyi0uDqCMOW`#y!0tm||qN9u0lmoW{Z#UN*D%eG=Q_Pr~9 z!?@!hqZwNdk?vq@ecRldd664gf$O^Ws8*k{m)Ta6Hjv0GAaW~`cMcd$+(WXyD`Jj!+>x|E%$U{Wjf9C(HQBG1 zsI?dlnyp4nUUBqHO*b)all*CPIil&@5cKsXHd7z@#;kB1Wdvq)6O#1Ku1I<|?Z6!! zzdZnnHhtbSY0;#yubR;%2j_EUj|}vNZ96Vb?*|lh&(k;xv6r4E`E~XQGS!*E`$K9o zL+YO0H)isOnbC2?RBXl^QneY=XY|vF-+24zH#DQ;jWsJ}l< zsQS^;2TbR46!&^E{a8ZnERB|K8}B5srqmiv&!YW>-ph^~qtUq$ItOkd;pf=yQ73yq z338EL??Gcr9TK~Sy|E?Vo*W_DT_-y_D`Gd1XM$gV>p5W4w4XKIZ_J@{4_=Fs9QhXd z{-@TmgIHULIpFy7V0P}Pa%y5OoOR>B<8}3=$b1q#giJ=~l5RE*jb39-E7xjUCdF=6tu@4yCdQi4$?)#P|k$7FsQL}nb;bo zT0%j+B-hV5M%jn+T#}39kdsY@9q60%3XRHZP)Yoc^Ti@|9gQ#SsYb<|J?JZEHSz$) zwGe}>b0(ea#-wRXhfW*PTU8HY`f*P0jH!zx)x2?-(!CpldzC9K$KX`OkvOq>sm64k zI~+HOcgU1IdJ`YrE?wMpc5+-!q+TN@G2fCiIy5{uHt0vDhudS;rj~b%%=)pZ%vgHt zypFNyR9o)M>ajJeQW-xxq9wbUM@xlLeDLY?R9)hz+sto@I%%gT>YA{Qw`yB{ z8v}nWMu+{<_w3Qlr{moiR@L`jls-?a70G@xhS%e*l&5!t)Hc@Ejf&N{utmq2GQyx! z{-kw@&6S$Ac{p5=ak=z8QB1nJRSru!07kWHYCrKf*>CD54+Tw(x-2_;*SQO_2c4@n zr5XvT5F0?-+XK#Zm0S- zEQRYR$TY|pOE)Nv!8nMhj%^1Bzt-uF0Lkt#XcX&c>+Hs$*3h|i)F`)B$fCPm7k6~l z6#GEbCyAVtvD%gyFNEH8dMO|(*e9o|!YHS|cH?8uG&dp7&pAvV=%zURoEzPg?#i}F z)S@a8tMe_L`xtB%bYjm*uv4>PR8zdrql1<b>XKxA@^`3x2+?1*#>geq7Xml)^JQ_3#a#CVh!sj?-=3X8xjhQL2 zSWdaQ<&IR3Le?Y#t%o6dyUSC{p+(XRo0&kSG@@wJ2RPXbOGe1hBSaYx(Uzl6MrI}X za3$z|A z4zI8w@A8_s&ezr?`4`qix>wai@RCNL*V9mVF+78^e`HGC-mz7$TyuMYL`+ro%TTPQBU$L0YRU2~Y?3&!bz~ZI3WFjZH zE}I+74yDr;#+K(~n4r`6M^qS_%OjhjwvSb{vZZJBZeb|b8g+{8El5n@Yp*piB1 zO9a@GePB!Ki>+ucaxjR~LhT9BL$+I5BfF(Fv0I|WmYxV37ipzjo=n*dH$}}&*(Enc zg|jVN(p?O%85%op)b>o-^Ri^59{9|6Zxs|p1*OzPa8ZGhR zyK}T{bEQ|0j-*p|H)~Vpu1l{4EKhI5R%-RAzNCwCFk}B6MGbHfdb`v-(A25BX`QMx z?Kj{UAH#)w%K(=@AHhj8Q_J}#g^1q zU`^TXWUv?uhwNuo(y_)KkeXkfp!#|E-c9b#JeA|kM%ZVrSC+n1!2dEF@!5<{h4xP% z=we?>sfJQ94j8^Y8v1*0RDqUhOHTGUzSe=LEp$0Me;t3`A~Lc2(<3y! ihodV_V@xM8Ga1vWOsfCR@;fqFL;JdG+6}+HNc { // webpackBootstrap +require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ -/***/ 9975: +/***/ 3767: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.action = void 0; +/* eslint-disable @typescript-eslint/no-explicit-any */ +const core = __importStar(__nccwpck_require__(2186)); +const github = __importStar(__nccwpck_require__(5438)); +const fs = __importStar(__nccwpck_require__(7147)); +const xml2js_1 = __importDefault(__nccwpck_require__(6189)); +const processors_1 = __nccwpck_require__(9236); +const glob = __importStar(__nccwpck_require__(8090)); +const process_1 = __nccwpck_require__(8578); +const render_1 = __nccwpck_require__(8523); +const util_1 = __nccwpck_require__(1597); +function action() { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + let continueOnError = true; + try { + const token = core.getInput('token'); + if (!token) { + core.setFailed("'token' is missing"); + return; + } + const pathsString = core.getInput('paths'); + if (!pathsString) { + core.setFailed("'paths' is missing"); + return; + } + const reportPaths = pathsString.split(','); + const minCoverageOverall = parseFloat(core.getInput('min-coverage-overall')); + const minCoverageChangedFiles = parseFloat(core.getInput('min-coverage-changed-files')); + const title = core.getInput('title'); + const updateComment = (0, processors_1.parseBooleans)(core.getInput('update-comment')); + if (updateComment) { + if (!title) { + core.info("'title' is not set. 'update-comment' does not work without 'title'"); + } + } + const skipIfNoChanges = (0, processors_1.parseBooleans)(core.getInput('skip-if-no-changes')); + const passEmoji = core.getInput('pass-emoji'); + const failEmoji = core.getInput('fail-emoji'); + continueOnError = (0, processors_1.parseBooleans)(core.getInput('continue-on-error')); + const debugMode = (0, processors_1.parseBooleans)(core.getInput('debug-mode')); + const event = github.context.eventName; + core.info(`Event is ${event}`); + if (debugMode) { + core.info(`passEmoji: ${passEmoji}`); + core.info(`failEmoji: ${failEmoji}`); + } + let base; + let head; + let prNumber; + switch (event) { + case 'pull_request': + case 'pull_request_target': + base = (_a = github.context.payload.pull_request) === null || _a === void 0 ? void 0 : _a.base.sha; + head = (_b = github.context.payload.pull_request) === null || _b === void 0 ? void 0 : _b.head.sha; + prNumber = (_c = github.context.payload.pull_request) === null || _c === void 0 ? void 0 : _c.number; + break; + case 'push': + base = github.context.payload.before; + head = github.context.payload.after; + break; + default: + core.setFailed(`Only pull requests and pushes are supported, ${github.context.eventName} not supported.`); + return; + } + core.info(`base sha: ${base}`); + core.info(`head sha: ${head}`); + const client = github.getOctokit(token); + if (debugMode) + core.info(`reportPaths: ${reportPaths}`); + const reportsJsonAsync = getJsonReports(reportPaths, debugMode); + const changedFiles = yield getChangedFiles(base, head, client, debugMode); + if (debugMode) + core.info(`changedFiles: ${(0, util_1.debug)(changedFiles)}`); + const reportsJson = yield reportsJsonAsync; + const reports = reportsJson.map(report => report['report']); + const project = (0, process_1.getProjectCoverage)(reports, changedFiles); + if (debugMode) + core.info(`project: ${(0, util_1.debug)(project)}`); + core.setOutput('coverage-overall', parseFloat(((_d = project.overall.percentage) !== null && _d !== void 0 ? _d : 0).toFixed(2))); + core.setOutput('coverage-changed-files', parseFloat(project['coverage-changed-files'].toFixed(2))); + const skip = skipIfNoChanges && project.modules.length === 0; + if (debugMode) + core.info(`skip: ${skip}`); + if (debugMode) + core.info(`prNumber: ${prNumber}`); + if (prNumber != null && !skip) { + const emoji = { + pass: passEmoji, + fail: failEmoji, + }; + yield addComment(prNumber, updateComment, (0, render_1.getTitle)(title), (0, render_1.getPRComment)(project, { + overall: minCoverageOverall, + changed: minCoverageChangedFiles, + }, title, emoji), client, debugMode); + } + } + catch (error) { + if (error instanceof Error) { + if (continueOnError) { + core.error(error); + } + else { + core.setFailed(error); + } + } + } + }); +} +exports.action = action; +function getJsonReports(xmlPaths, debugMode) { + return __awaiter(this, void 0, void 0, function* () { + const globber = yield glob.create(xmlPaths.join('\n')); + const files = yield globber.glob(); + if (debugMode) + core.info(`Resolved files: ${files}`); + return Promise.all(files.map((path) => __awaiter(this, void 0, void 0, function* () { + const reportXml = yield fs.promises.readFile(path.trim(), 'utf-8'); + return yield xml2js_1.default.parseStringPromise(reportXml); + }))); + }); +} +function getChangedFiles(base, head, client, debugMode) { + return __awaiter(this, void 0, void 0, function* () { + const response = yield client.rest.repos.compareCommits({ + base, + head, + owner: github.context.repo.owner, + repo: github.context.repo.repo, + }); + const changedFiles = []; + for (const file of response.data.files) { + if (debugMode) + core.info(`file: ${(0, util_1.debug)(file)}`); + const changedFile = { + filePath: file.filename, + url: file.blob_url, + lines: (0, util_1.getChangedLines)(file.patch), + }; + changedFiles.push(changedFile); + } + return changedFiles; + }); +} +function addComment(prNumber, update, title, body, client, debugMode) { + return __awaiter(this, void 0, void 0, function* () { + let commentUpdated = false; + if (debugMode) + core.info(`update: ${update}`); + if (debugMode) + core.info(`title: ${title}`); + if (debugMode) + core.info(`JaCoCo Comment: ${body}`); + if (update && title) { + if (debugMode) + core.info('Listing all comments'); + const comments = yield client.rest.issues.listComments(Object.assign({ issue_number: prNumber }, github.context.repo)); + const comment = comments.data.find((it) => it.body.startsWith(title)); + if (comment) { + if (debugMode) + core.info(`Updating existing comment: id=${comment.id} \n body=${comment.body}`); + yield client.rest.issues.updateComment(Object.assign({ comment_id: comment.id, body }, github.context.repo)); + commentUpdated = true; + } + } + if (!commentUpdated) { + if (debugMode) + core.info('Creating a new comment'); + yield client.rest.issues.createComment(Object.assign({ issue_number: prNumber, body }, github.context.repo)); + } + }); +} + + +/***/ }), + +/***/ 8578: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getProjectCoverage = void 0; +const util_1 = __nccwpck_require__(1597); +/* eslint-disable @typescript-eslint/no-explicit-any */ +function getProjectCoverage(reports, changedFiles) { + const moduleCoverages = []; + const modules = getModulesFromReports(reports); + for (const module of modules) { + const files = getFileCoverageFromPackages([].concat(...module.packages), changedFiles); + if (files.length !== 0) { + const moduleCoverage = getModuleCoverage(module.root); + const changedMissed = files + .map(file => file.changed.missed) + .reduce(sumReducer, 0.0); + const changedCovered = files + .map(file => file.changed.covered) + .reduce(sumReducer, 0.0); + moduleCoverages.push({ + name: module.name, + files, + overall: { + percentage: moduleCoverage.percentage, + covered: moduleCoverage.covered, + missed: moduleCoverage.missed, + }, + changed: { + covered: changedCovered, + missed: changedMissed, + percentage: calculatePercentage(changedCovered, changedMissed), + }, + }); + } + } + moduleCoverages.sort((a, b) => { var _a, _b; return ((_a = b.overall.percentage) !== null && _a !== void 0 ? _a : 0) - ((_b = a.overall.percentage) !== null && _b !== void 0 ? _b : 0); }); + const totalFiles = moduleCoverages.flatMap(module => { + return module.files; + }); + const changedMissed = moduleCoverages + .map(module => module.changed.missed) + .reduce(sumReducer, 0.0); + const changedCovered = moduleCoverages + .map(module => module.changed.covered) + .reduce(sumReducer, 0.0); + const projectCoverage = getOverallProjectCoverage(reports); + const totalPercentage = getTotalPercentage(totalFiles); + return { + modules: moduleCoverages, + isMultiModule: reports.length > 1 || modules.length > 1, + overall: { + covered: projectCoverage.covered, + missed: projectCoverage.missed, + percentage: projectCoverage.percentage, + }, + changed: { + covered: changedCovered, + missed: changedMissed, + percentage: calculatePercentage(changedCovered, changedMissed), + }, + 'coverage-changed-files': totalPercentage !== null && totalPercentage !== void 0 ? totalPercentage : 100, + }; +} +exports.getProjectCoverage = getProjectCoverage; +function sumReducer(total, value) { + return total + value; +} +function toFloat(value) { + return parseFloat(value.toFixed(2)); +} +function getModulesFromReports(reports) { + const modules = []; + for (const report of reports) { + const groupTag = report[util_1.TAG.GROUP]; + if (groupTag) { + const groups = groupTag.filter((group) => group !== undefined); + for (const group of groups) { + const module = getModuleFromParent(group); + modules.push(module); + } + } + const module = getModuleFromParent(report); + if (module) { + modules.push(module); + } + } + return modules; +} +function getModuleFromParent(parent) { + const packageTag = parent[util_1.TAG.PACKAGE]; + if (packageTag) { + const packages = packageTag.filter((pacage) => pacage !== undefined); + if (packages.length !== 0) { + return { + name: parent['$'].name, + packages, + root: parent, // TODO just pass array of 'counters' + }; + } + } + return null; +} +function getFileCoverageFromPackages(packages, files) { + const resultFiles = []; + const jacocoFiles = (0, util_1.getFilesWithCoverage)(packages); + for (const jacocoFile of jacocoFiles) { + const name = jacocoFile.name; + const packageName = jacocoFile.packageName; + const githubFile = files.find(function (f) { + return f.filePath.endsWith(`${packageName}/${name}`); + }); + if (githubFile) { + const instruction = jacocoFile.counters.find(counter => counter.name === 'instruction'); + if (instruction) { + const missed = instruction.missed; + const covered = instruction.covered; + const lines = []; + for (const lineNumber of githubFile.lines) { + const jacocoLine = jacocoFile.lines.find(line => line.number === lineNumber); + if (jacocoLine) { + lines.push(Object.assign({}, jacocoLine)); + } + } + const changedMissed = lines + .map(line => toFloat(line.instruction.missed)) + .reduce(sumReducer, 0.0); + const changedCovered = lines + .map(line => toFloat(line.instruction.covered)) + .reduce(sumReducer, 0.0); + resultFiles.push({ + name, + url: githubFile.url, + overall: { + missed, + covered, + percentage: calculatePercentage(covered, missed), + }, + changed: { + missed: changedMissed, + covered: changedCovered, + percentage: calculatePercentage(changedCovered, changedMissed), + }, + lines, + }); + } + } + } + resultFiles.sort((a, b) => { var _a, _b; return ((_a = b.overall.percentage) !== null && _a !== void 0 ? _a : 0) - ((_b = a.overall.percentage) !== null && _b !== void 0 ? _b : 0); }); + return resultFiles; +} +function calculatePercentage(covered, missed) { + const total = covered + missed; + if (total !== 0) { + return parseFloat(((covered / total) * 100).toFixed(2)); + } + else { + return undefined; + } +} +function getTotalPercentage(files) { + let missed = 0; + let covered = 0; + if (files.length !== 0) { + for (const file of files) { + missed += file.overall.missed; + covered += file.overall.covered; + } + return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)); + } + else { + return null; + } +} +function getModuleCoverage(report) { + const counters = report['counter']; + return getDetailedCoverage(counters, 'INSTRUCTION'); +} +function getOverallProjectCoverage(reports) { + const coverages = reports.map(report => getDetailedCoverage(report['counter'], 'INSTRUCTION')); + const covered = coverages.reduce((acc, coverage) => acc + coverage.covered, 0); + const missed = coverages.reduce((acc, coverage) => acc + coverage.missed, 0); + return { + covered, + missed, + percentage: parseFloat(((covered / (covered + missed)) * 100).toFixed(2)), + }; +} +function getDetailedCoverage(counters, type) { + const counterTag = counters.find(counter => counter[util_1.TAG.SELF].type === type); + if (counterTag) { + const attr = counterTag[util_1.TAG.SELF]; + const missed = parseFloat(attr.missed); + const covered = parseFloat(attr.covered); + return { + missed, + covered, + percentage: parseFloat(((covered / (covered + missed)) * 100).toFixed(2)), + }; + } + return { missed: 0, covered: 0, percentage: 100 }; +} + + +/***/ }), + +/***/ 8523: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getTitle = exports.getPRComment = void 0; +function getPRComment(project, minCoverage, title, emoji) { + const heading = getTitle(title); + const overallTable = getOverallTable(project, minCoverage, emoji); + const moduleTable = getModuleTable(project.modules, minCoverage, emoji); + const filesTable = getFileTable(project, minCoverage, emoji); + const tables = project.modules.length === 0 + ? '> There is no coverage information present for the Files changed' + : project.isMultiModule + ? `${moduleTable}\n\n${filesTable}` + : filesTable; + return `${heading + overallTable}\n\n${tables}`; +} +exports.getPRComment = getPRComment; +function getModuleTable(modules, minCoverage, emoji) { + const tableHeader = '|Module|Coverage||'; + const tableStructure = '|:-|:-|:-:|'; + let table = `${tableHeader}\n${tableStructure}`; + for (const module of modules) { + const coverageDifference = getCoverageDifference(module.overall, module.changed); + renderRow(module.name, module.overall.percentage, coverageDifference, module.changed.percentage); + } + return table; + function renderRow(name, overallCoverage, coverageDiff, changedCoverage) { + const status = getStatus(changedCoverage, minCoverage.changed, emoji); + let coveragePercentage = `${formatCoverage(overallCoverage)}`; + if (shouldShow(coverageDiff)) { + coveragePercentage += ` **\`${formatCoverage(coverageDiff)}\`**`; + } + const row = `|${name}|${coveragePercentage}|${status}|`; + table = `${table}\n${row}`; + } +} +function getFileTable(project, minCoverage, emoji) { + const tableHeader = project.isMultiModule + ? '|Module|File|Coverage||' + : '|File|Coverage||'; + const tableStructure = project.isMultiModule + ? '|:-|:-|:-|:-:|' + : '|:-|:-|:-:|'; + let table = `${tableHeader}\n${tableStructure}`; + for (const module of project.modules) { + for (let index = 0; index < module.files.length; index++) { + const file = module.files[index]; + let moduleName = module.name; + if (index !== 0) { + moduleName = ''; + } + const coverageDifference = getCoverageDifference(file.overall, file.changed); + renderRow(moduleName, `[${file.name}](${file.url})`, file.overall.percentage, coverageDifference, file.changed.percentage, project.isMultiModule); + } + } + return project.isMultiModule + ? `
\nFiles\n\n${table}\n\n
` + : table; + function renderRow(moduleName, fileName, overallCoverage, coverageDiff, changedCoverage, isMultiModule) { + const status = getStatus(changedCoverage, minCoverage.changed, emoji); + let coveragePercentage = `${formatCoverage(overallCoverage)}`; + if (shouldShow(coverageDiff)) { + coveragePercentage += ` **\`${formatCoverage(coverageDiff)}\`**`; + } + const row = isMultiModule + ? `|${moduleName}|${fileName}|${coveragePercentage}|${status}|` + : `|${fileName}|${coveragePercentage}|${status}|`; + table = `${table}\n${row}`; + } +} +function getCoverageDifference(overall, changed) { + const totalInstructions = overall.covered + overall.missed; + const missed = changed.missed; + return -(missed / totalInstructions) * 100; +} +function getOverallTable(project, minCoverage, emoji) { + const overallStatus = getStatus(project.overall.percentage, minCoverage.overall, emoji); + const coverageDifference = getCoverageDifference(project.overall, project.changed); + let coveragePercentage = `${formatCoverage(project.overall.percentage)}`; + if (shouldShow(coverageDifference)) { + coveragePercentage += ` **\`${formatCoverage(coverageDifference)}\`**`; + } + const tableHeader = `|Overall Project|${coveragePercentage}|${overallStatus}|`; + const tableStructure = '|:-|:-|:-:|'; + const missedLines = project.changed.missed; + const coveredLines = project.changed.covered; + const totalChangedLines = missedLines + coveredLines; + let changedCoverageRow = ''; + if (totalChangedLines !== 0) { + const changedLinesPercentage = (coveredLines / totalChangedLines) * 100; + const filesChangedStatus = getStatus(changedLinesPercentage, minCoverage.changed, emoji); + changedCoverageRow = + '\n' + + `|Files changed|${formatCoverage(changedLinesPercentage)}|${filesChangedStatus}|` + + '\n
'; + } + return `${tableHeader}\n${tableStructure}${changedCoverageRow}`; +} +function round(value) { + return Math.round((value + Number.EPSILON) * 100) / 100; +} +function shouldShow(value) { + const rounded = Math.abs(round(value)); + return rounded !== 0 && rounded !== 100; +} +function getTitle(title) { + if (title != null && title.trim().length > 0) { + const trimmed = title.trim(); + return trimmed.startsWith('#') ? `${trimmed}\n` : `### ${trimmed}\n`; + } + else { + return ''; + } +} +exports.getTitle = getTitle; +function getStatus(coverage, minCoverage, emoji) { + let status = emoji.pass; + if (coverage != null && coverage < minCoverage) { + status = emoji.fail; + } + return status; +} +function formatCoverage(coverage) { + if (coverage == null) + return 'NaN%'; + return `${toFloat(coverage)}%`; +} +function toFloat(value) { + return parseFloat(value.toFixed(2)); +} + + +/***/ }), + +/***/ 1597: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getFilesWithCoverage = exports.getChangedLines = exports.debug = exports.TAG = void 0; +exports.TAG = { + SELF: '$', + SOURCE_FILE: 'sourcefile', + LINE: 'line', + COUNTER: 'counter', + PACKAGE: 'package', + GROUP: 'group', +}; +function debug(obj) { + return JSON.stringify(obj, null, 4); +} +exports.debug = debug; +const pattern = /^@@ -([0-9]*),?\S* \+([0-9]*),?/; +function getChangedLines(patch) { + const lineNumbers = new Set(); + if (patch) { + const lines = patch.split('\n'); + const groups = getDiffGroups(lines); + for (const group of groups) { + const firstLine = group.shift(); + if (firstLine) { + const diffGroup = firstLine.match(pattern); + if (diffGroup) { + let bX = parseInt(diffGroup[2]); + for (const line of group) { + bX++; + if (line.startsWith('+')) { + lineNumbers.add(bX - 1); + } + else if (line.startsWith('-')) { + bX--; + } + } + } + } + } + } + return [...lineNumbers]; +} +exports.getChangedLines = getChangedLines; +function getDiffGroups(lines) { + const groups = []; + let group = []; + for (const line of lines) { + if (line.startsWith('@@')) { + group = []; + groups.push(group); + } + group.push(line); + } + return groups; +} +/* eslint-disable @typescript-eslint/no-explicit-any */ +function getFilesWithCoverage(packages) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; + const files = []; + for (const item of packages) { + const packageName = item[exports.TAG.SELF].name; + const sourceFiles = (_a = item[exports.TAG.SOURCE_FILE]) !== null && _a !== void 0 ? _a : []; + for (const sourceFile of sourceFiles) { + const sourceFileName = sourceFile[exports.TAG.SELF].name; + const file = { + name: sourceFileName, + packageName, + lines: [], + counters: [], + }; + const counters = (_b = sourceFile[exports.TAG.COUNTER]) !== null && _b !== void 0 ? _b : []; + for (const counter of counters) { + const counterSelf = counter[exports.TAG.SELF]; + const type = counterSelf.type; + file.counters.push({ + name: type.toLowerCase(), + missed: (_c = parseInt(counterSelf.missed)) !== null && _c !== void 0 ? _c : 0, + covered: (_d = parseInt(counterSelf.covered)) !== null && _d !== void 0 ? _d : 0, + }); + } + const lines = (_e = sourceFile[exports.TAG.LINE]) !== null && _e !== void 0 ? _e : []; + for (const line of lines) { + const lineSelf = line[exports.TAG.SELF]; + file.lines.push({ + number: (_f = parseInt(lineSelf.nr)) !== null && _f !== void 0 ? _f : 0, + instruction: { + missed: (_g = parseInt(lineSelf.mi)) !== null && _g !== void 0 ? _g : 0, + covered: (_h = parseInt(lineSelf.ci)) !== null && _h !== void 0 ? _h : 0, + }, + branch: { + missed: (_j = parseInt(lineSelf.mb)) !== null && _j !== void 0 ? _j : 0, + covered: (_k = parseInt(lineSelf.cb)) !== null && _k !== void 0 ? _k : 0, + }, + }); + } + files.push(file); + } + } + return files; +} +exports.getFilesWithCoverage = getFilesWithCoverage; + + +/***/ }), + +/***/ 7351: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -28,7 +699,7 @@ var __importStar = (this && this.__importStar) || function (mod) { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.issue = exports.issueCommand = void 0; const os = __importStar(__nccwpck_require__(2037)); -const utils_1 = __nccwpck_require__(2866); +const utils_1 = __nccwpck_require__(5278); /** * Commands * @@ -100,7 +771,7 @@ function escapeProperty(s) { /***/ }), -/***/ 6358: +/***/ 2186: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -135,12 +806,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; -const command_1 = __nccwpck_require__(9975); -const file_command_1 = __nccwpck_require__(7123); -const utils_1 = __nccwpck_require__(2866); +const command_1 = __nccwpck_require__(7351); +const file_command_1 = __nccwpck_require__(717); +const utils_1 = __nccwpck_require__(5278); const os = __importStar(__nccwpck_require__(2037)); const path = __importStar(__nccwpck_require__(1017)); -const oidc_utils_1 = __nccwpck_require__(4590); +const oidc_utils_1 = __nccwpck_require__(8041); /** * The code to exit an action */ @@ -425,17 +1096,17 @@ exports.getIDToken = getIDToken; /** * Summary exports */ -var summary_1 = __nccwpck_require__(8521); +var summary_1 = __nccwpck_require__(1327); Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); /** * @deprecated use core.summary */ -var summary_2 = __nccwpck_require__(8521); +var summary_2 = __nccwpck_require__(1327); Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); /** * Path exports */ -var path_utils_1 = __nccwpck_require__(7024); +var path_utils_1 = __nccwpck_require__(2981); Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); @@ -443,7 +1114,7 @@ Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: funct /***/ }), -/***/ 7123: +/***/ 717: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -474,8 +1145,8 @@ exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; /* eslint-disable @typescript-eslint/no-explicit-any */ const fs = __importStar(__nccwpck_require__(7147)); const os = __importStar(__nccwpck_require__(2037)); -const uuid_1 = __nccwpck_require__(632); -const utils_1 = __nccwpck_require__(2866); +const uuid_1 = __nccwpck_require__(5840); +const utils_1 = __nccwpck_require__(5278); function issueFileCommand(command, message) { const filePath = process.env[`GITHUB_${command}`]; if (!filePath) { @@ -508,7 +1179,7 @@ exports.prepareKeyValueMessage = prepareKeyValueMessage; /***/ }), -/***/ 4590: +/***/ 8041: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -524,9 +1195,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OidcClient = void 0; -const http_client_1 = __nccwpck_require__(7564); -const auth_1 = __nccwpck_require__(8292); -const core_1 = __nccwpck_require__(6358); +const http_client_1 = __nccwpck_require__(6255); +const auth_1 = __nccwpck_require__(5526); +const core_1 = __nccwpck_require__(2186); class OidcClient { static createHttpClient(allowRetry = true, maxRetry = 10) { const requestOptions = { @@ -592,7 +1263,7 @@ exports.OidcClient = OidcClient; /***/ }), -/***/ 7024: +/***/ 2981: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -657,7 +1328,7 @@ exports.toPlatformPath = toPlatformPath; /***/ }), -/***/ 8521: +/***/ 1327: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -947,7 +1618,7 @@ exports.summary = _summary; /***/ }), -/***/ 2866: +/***/ 5278: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -994,7 +1665,7 @@ exports.toCommandProperties = toCommandProperties; /***/ }), -/***/ 6840: +/***/ 4087: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -1055,7 +1726,7 @@ exports.Context = Context; /***/ }), -/***/ 9551: +/***/ 5438: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1081,8 +1752,8 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getOctokit = exports.context = void 0; -const Context = __importStar(__nccwpck_require__(6840)); -const utils_1 = __nccwpck_require__(127); +const Context = __importStar(__nccwpck_require__(4087)); +const utils_1 = __nccwpck_require__(3030); exports.context = new Context.Context(); /** * Returns a hydrated octokit ready to use for GitHub Actions @@ -1099,7 +1770,7 @@ exports.getOctokit = getOctokit; /***/ }), -/***/ 303: +/***/ 7914: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1125,7 +1796,7 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0; -const httpClient = __importStar(__nccwpck_require__(7564)); +const httpClient = __importStar(__nccwpck_require__(6255)); function getAuthString(token, options) { if (!token && !options.auth) { throw new Error('Parameter token or opts.auth is required'); @@ -1149,7 +1820,7 @@ exports.getApiBaseUrl = getApiBaseUrl; /***/ }), -/***/ 127: +/***/ 3030: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1175,12 +1846,12 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = void 0; -const Context = __importStar(__nccwpck_require__(6840)); -const Utils = __importStar(__nccwpck_require__(303)); +const Context = __importStar(__nccwpck_require__(4087)); +const Utils = __importStar(__nccwpck_require__(7914)); // octokit + plugins -const core_1 = __nccwpck_require__(7838); -const plugin_rest_endpoint_methods_1 = __nccwpck_require__(3271); -const plugin_paginate_rest_1 = __nccwpck_require__(3008); +const core_1 = __nccwpck_require__(6762); +const plugin_rest_endpoint_methods_1 = __nccwpck_require__(3044); +const plugin_paginate_rest_1 = __nccwpck_require__(4193); exports.context = new Context.Context(); const baseUrl = Utils.getApiBaseUrl(); exports.defaults = { @@ -1210,7 +1881,7 @@ exports.getOctokitOptions = getOctokitOptions; /***/ }), -/***/ 6562: +/***/ 8090: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1226,8 +1897,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.hashFiles = exports.create = void 0; -const internal_globber_1 = __nccwpck_require__(3767); -const internal_hash_files_1 = __nccwpck_require__(4286); +const internal_globber_1 = __nccwpck_require__(8298); +const internal_hash_files_1 = __nccwpck_require__(2448); /** * Constructs a globber * @@ -1263,7 +1934,7 @@ exports.hashFiles = hashFiles; /***/ }), -/***/ 9378: +/***/ 1026: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1289,7 +1960,7 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getOptions = void 0; -const core = __importStar(__nccwpck_require__(6358)); +const core = __importStar(__nccwpck_require__(2186)); /** * Returns a copy with defaults filled in. */ @@ -1325,7 +1996,7 @@ exports.getOptions = getOptions; /***/ }), -/***/ 3767: +/***/ 8298: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1379,14 +2050,14 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DefaultGlobber = void 0; -const core = __importStar(__nccwpck_require__(6358)); +const core = __importStar(__nccwpck_require__(2186)); const fs = __importStar(__nccwpck_require__(7147)); -const globOptionsHelper = __importStar(__nccwpck_require__(9378)); +const globOptionsHelper = __importStar(__nccwpck_require__(1026)); const path = __importStar(__nccwpck_require__(1017)); -const patternHelper = __importStar(__nccwpck_require__(5227)); -const internal_match_kind_1 = __nccwpck_require__(1143); -const internal_pattern_1 = __nccwpck_require__(6351); -const internal_search_state_1 = __nccwpck_require__(7499); +const patternHelper = __importStar(__nccwpck_require__(9005)); +const internal_match_kind_1 = __nccwpck_require__(1063); +const internal_pattern_1 = __nccwpck_require__(4536); +const internal_search_state_1 = __nccwpck_require__(9117); const IS_WINDOWS = process.platform === 'win32'; class DefaultGlobber { constructor(options) { @@ -1567,7 +2238,7 @@ exports.DefaultGlobber = DefaultGlobber; /***/ }), -/***/ 4286: +/***/ 2448: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1610,7 +2281,7 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.hashFiles = void 0; const crypto = __importStar(__nccwpck_require__(6113)); -const core = __importStar(__nccwpck_require__(6358)); +const core = __importStar(__nccwpck_require__(2186)); const fs = __importStar(__nccwpck_require__(7147)); const stream = __importStar(__nccwpck_require__(2781)); const util = __importStar(__nccwpck_require__(3837)); @@ -1671,7 +2342,7 @@ exports.hashFiles = hashFiles; /***/ }), -/***/ 1143: +/***/ 1063: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -1696,7 +2367,7 @@ var MatchKind; /***/ }), -/***/ 7110: +/***/ 1849: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1901,7 +2572,7 @@ exports.safeTrimTrailingSeparator = safeTrimTrailingSeparator; /***/ }), -/***/ 1673: +/***/ 6836: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1931,7 +2602,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Path = void 0; const path = __importStar(__nccwpck_require__(1017)); -const pathHelper = __importStar(__nccwpck_require__(7110)); +const pathHelper = __importStar(__nccwpck_require__(1849)); const assert_1 = __importDefault(__nccwpck_require__(9491)); const IS_WINDOWS = process.platform === 'win32'; /** @@ -2021,7 +2692,7 @@ exports.Path = Path; /***/ }), -/***/ 5227: +/***/ 9005: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -2047,8 +2718,8 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.partialMatch = exports.match = exports.getSearchPaths = void 0; -const pathHelper = __importStar(__nccwpck_require__(7110)); -const internal_match_kind_1 = __nccwpck_require__(1143); +const pathHelper = __importStar(__nccwpck_require__(1849)); +const internal_match_kind_1 = __nccwpck_require__(1063); const IS_WINDOWS = process.platform === 'win32'; /** * Given an array of patterns, returns an array of paths to search. @@ -2122,7 +2793,7 @@ exports.partialMatch = partialMatch; /***/ }), -/***/ 6351: +/***/ 4536: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -2153,11 +2824,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Pattern = void 0; const os = __importStar(__nccwpck_require__(2037)); const path = __importStar(__nccwpck_require__(1017)); -const pathHelper = __importStar(__nccwpck_require__(7110)); +const pathHelper = __importStar(__nccwpck_require__(1849)); const assert_1 = __importDefault(__nccwpck_require__(9491)); -const minimatch_1 = __nccwpck_require__(9490); -const internal_match_kind_1 = __nccwpck_require__(1143); -const internal_path_1 = __nccwpck_require__(1673); +const minimatch_1 = __nccwpck_require__(3973); +const internal_match_kind_1 = __nccwpck_require__(1063); +const internal_path_1 = __nccwpck_require__(6836); const IS_WINDOWS = process.platform === 'win32'; class Pattern { constructor(patternOrNegate, isImplicitPattern = false, segments, homedir) { @@ -2384,7 +3055,7 @@ exports.Pattern = Pattern; /***/ }), -/***/ 7499: +/***/ 9117: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -2402,7 +3073,7 @@ exports.SearchState = SearchState; /***/ }), -/***/ 8292: +/***/ 5526: /***/ (function(__unused_webpack_module, exports) { "use strict"; @@ -2490,7 +3161,7 @@ exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHand /***/ }), -/***/ 7564: +/***/ 6255: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -2528,8 +3199,8 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; const http = __importStar(__nccwpck_require__(3685)); const https = __importStar(__nccwpck_require__(5687)); -const pm = __importStar(__nccwpck_require__(794)); -const tunnel = __importStar(__nccwpck_require__(4103)); +const pm = __importStar(__nccwpck_require__(9835)); +const tunnel = __importStar(__nccwpck_require__(4294)); var HttpCodes; (function (HttpCodes) { HttpCodes[HttpCodes["OK"] = 200] = "OK"; @@ -3102,7 +3773,7 @@ const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCa /***/ }), -/***/ 794: +/***/ 9835: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -3185,7 +3856,7 @@ function isLoopbackAddress(host) { /***/ }), -/***/ 9709: +/***/ 334: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -3248,7 +3919,7 @@ exports.createTokenAuth = createTokenAuth; /***/ }), -/***/ 7838: +/***/ 6762: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -3256,11 +3927,11 @@ exports.createTokenAuth = createTokenAuth; Object.defineProperty(exports, "__esModule", ({ value: true })); -var universalUserAgent = __nccwpck_require__(3222); -var beforeAfterHook = __nccwpck_require__(8492); -var request = __nccwpck_require__(9939); -var graphql = __nccwpck_require__(6004); -var authToken = __nccwpck_require__(9709); +var universalUserAgent = __nccwpck_require__(5030); +var beforeAfterHook = __nccwpck_require__(3682); +var request = __nccwpck_require__(6234); +var graphql = __nccwpck_require__(8467); +var authToken = __nccwpck_require__(334); function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; @@ -3432,7 +4103,7 @@ exports.Octokit = Octokit; /***/ }), -/***/ 3554: +/***/ 9440: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -3440,8 +4111,8 @@ exports.Octokit = Octokit; Object.defineProperty(exports, "__esModule", ({ value: true })); -var isPlainObject = __nccwpck_require__(7449); -var universalUserAgent = __nccwpck_require__(3222); +var isPlainObject = __nccwpck_require__(3287); +var universalUserAgent = __nccwpck_require__(5030); function lowercaseKeys(object) { if (!object) { @@ -3830,7 +4501,7 @@ exports.endpoint = endpoint; /***/ }), -/***/ 6004: +/***/ 8467: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -3838,8 +4509,8 @@ exports.endpoint = endpoint; Object.defineProperty(exports, "__esModule", ({ value: true })); -var request = __nccwpck_require__(9939); -var universalUserAgent = __nccwpck_require__(3222); +var request = __nccwpck_require__(6234); +var universalUserAgent = __nccwpck_require__(5030); const VERSION = "4.8.0"; @@ -3956,7 +4627,7 @@ exports.withCustomRequest = withCustomRequest; /***/ }), -/***/ 3008: +/***/ 4193: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -4169,7 +4840,7 @@ exports.paginatingEndpoints = paginatingEndpoints; /***/ }), -/***/ 3271: +/***/ 3044: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -5284,7 +5955,7 @@ exports.restEndpointMethods = restEndpointMethods; /***/ }), -/***/ 3573: +/***/ 537: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -5294,8 +5965,8 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -var deprecation = __nccwpck_require__(996); -var once = _interopDefault(__nccwpck_require__(1215)); +var deprecation = __nccwpck_require__(8932); +var once = _interopDefault(__nccwpck_require__(1223)); const logOnceCode = once(deprecation => console.warn(deprecation)); const logOnceHeaders = once(deprecation => console.warn(deprecation)); @@ -5366,7 +6037,7 @@ exports.RequestError = RequestError; /***/ }), -/***/ 9939: +/***/ 6234: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -5376,11 +6047,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -var endpoint = __nccwpck_require__(3554); -var universalUserAgent = __nccwpck_require__(3222); -var isPlainObject = __nccwpck_require__(7449); -var nodeFetch = _interopDefault(__nccwpck_require__(3456)); -var requestError = __nccwpck_require__(3573); +var endpoint = __nccwpck_require__(9440); +var universalUserAgent = __nccwpck_require__(5030); +var isPlainObject = __nccwpck_require__(3287); +var nodeFetch = _interopDefault(__nccwpck_require__(467)); +var requestError = __nccwpck_require__(537); const VERSION = "5.6.3"; @@ -5551,7 +6222,7 @@ exports.request = request; /***/ }), -/***/ 7883: +/***/ 9417: /***/ ((module) => { "use strict"; @@ -5621,12 +6292,12 @@ function range(a, b, str) { /***/ }), -/***/ 8492: +/***/ 3682: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var register = __nccwpck_require__(240); -var addHook = __nccwpck_require__(7591); -var removeHook = __nccwpck_require__(5445); +var register = __nccwpck_require__(4670); +var addHook = __nccwpck_require__(5549); +var removeHook = __nccwpck_require__(6819); // bind with array of arguments: https://stackoverflow.com/a/21792913 var bind = Function.bind; @@ -5689,7 +6360,7 @@ module.exports.Collection = Hook.Collection; /***/ }), -/***/ 7591: +/***/ 5549: /***/ ((module) => { module.exports = addHook; @@ -5742,7 +6413,7 @@ function addHook(state, kind, name, hook) { /***/ }), -/***/ 240: +/***/ 4670: /***/ ((module) => { module.exports = register; @@ -5776,7 +6447,7 @@ function register(state, name, method, options) { /***/ }), -/***/ 5445: +/***/ 6819: /***/ ((module) => { module.exports = removeHook; @@ -5802,11 +6473,11 @@ function removeHook(state, name, method) { /***/ }), -/***/ 5504: +/***/ 3717: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var concatMap = __nccwpck_require__(8189); -var balanced = __nccwpck_require__(7883); +var concatMap = __nccwpck_require__(6891); +var balanced = __nccwpck_require__(9417); module.exports = expandTop; @@ -6010,7 +6681,7 @@ function expand(str, isTop) { /***/ }), -/***/ 8189: +/***/ 6891: /***/ ((module) => { module.exports = function (xs, fn) { @@ -6030,7 +6701,7 @@ var isArray = Array.isArray || function (xs) { /***/ }), -/***/ 996: +/***/ 8932: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -6058,7 +6729,7 @@ exports.Deprecation = Deprecation; /***/ }), -/***/ 7449: +/***/ 3287: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -6104,7 +6775,7 @@ exports.isPlainObject = isPlainObject; /***/ }), -/***/ 9490: +/***/ 3973: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { module.exports = minimatch @@ -6116,7 +6787,7 @@ var path = (function () { try { return __nccwpck_require__(1017) } catch (e) {}} minimatch.sep = path.sep var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = __nccwpck_require__(5504) +var expand = __nccwpck_require__(3717) var plTypes = { '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, @@ -7058,7 +7729,7 @@ function regExpEscape (s) { /***/ }), -/***/ 3456: +/***/ 467: /***/ ((module, exports, __nccwpck_require__) => { "use strict"; @@ -7071,7 +7742,7 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau var Stream = _interopDefault(__nccwpck_require__(2781)); var http = _interopDefault(__nccwpck_require__(3685)); var Url = _interopDefault(__nccwpck_require__(7310)); -var whatwgUrl = _interopDefault(__nccwpck_require__(2306)); +var whatwgUrl = _interopDefault(__nccwpck_require__(3323)); var https = _interopDefault(__nccwpck_require__(5687)); var zlib = _interopDefault(__nccwpck_require__(9796)); @@ -7224,7 +7895,7 @@ FetchError.prototype.name = 'FetchError'; let convert; try { - convert = (__nccwpck_require__(7914).convert); + convert = (__nccwpck_require__(2877).convert); } catch (e) {} const INTERNALS = Symbol('Body internals'); @@ -8856,7 +9527,7 @@ exports.FetchError = FetchError; /***/ }), -/***/ 4355: +/***/ 2299: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; @@ -9057,7 +9728,7 @@ module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; /***/ }), -/***/ 6104: +/***/ 5871: /***/ ((module) => { "use strict"; @@ -9254,12 +9925,12 @@ conversions["RegExp"] = function (V, opts) { /***/ }), -/***/ 5915: +/***/ 8262: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -const usm = __nccwpck_require__(9606); +const usm = __nccwpck_require__(33); exports.implementation = class URLImpl { constructor(constructorArgs) { @@ -9462,15 +10133,15 @@ exports.implementation = class URLImpl { /***/ }), -/***/ 5079: +/***/ 653: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -const conversions = __nccwpck_require__(6104); -const utils = __nccwpck_require__(3910); -const Impl = __nccwpck_require__(5915); +const conversions = __nccwpck_require__(5871); +const utils = __nccwpck_require__(276); +const Impl = __nccwpck_require__(8262); const impl = utils.implSymbol; @@ -9666,32 +10337,32 @@ module.exports = { /***/ }), -/***/ 2306: +/***/ 3323: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -exports.URL = __nccwpck_require__(5079)["interface"]; -exports.serializeURL = __nccwpck_require__(9606).serializeURL; -exports.serializeURLOrigin = __nccwpck_require__(9606).serializeURLOrigin; -exports.basicURLParse = __nccwpck_require__(9606).basicURLParse; -exports.setTheUsername = __nccwpck_require__(9606).setTheUsername; -exports.setThePassword = __nccwpck_require__(9606).setThePassword; -exports.serializeHost = __nccwpck_require__(9606).serializeHost; -exports.serializeInteger = __nccwpck_require__(9606).serializeInteger; -exports.parseURL = __nccwpck_require__(9606).parseURL; +exports.URL = __nccwpck_require__(653)["interface"]; +exports.serializeURL = __nccwpck_require__(33).serializeURL; +exports.serializeURLOrigin = __nccwpck_require__(33).serializeURLOrigin; +exports.basicURLParse = __nccwpck_require__(33).basicURLParse; +exports.setTheUsername = __nccwpck_require__(33).setTheUsername; +exports.setThePassword = __nccwpck_require__(33).setThePassword; +exports.serializeHost = __nccwpck_require__(33).serializeHost; +exports.serializeInteger = __nccwpck_require__(33).serializeInteger; +exports.parseURL = __nccwpck_require__(33).parseURL; /***/ }), -/***/ 9606: +/***/ 33: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; const punycode = __nccwpck_require__(5477); -const tr46 = __nccwpck_require__(4355); +const tr46 = __nccwpck_require__(2299); const specialSchemes = { ftp: 21, @@ -10990,7 +11661,7 @@ module.exports.parseURL = function (input, options) { /***/ }), -/***/ 3910: +/***/ 276: /***/ ((module) => { "use strict"; @@ -11018,10 +11689,10 @@ module.exports.implForWrapper = function (wrapper) { /***/ }), -/***/ 1215: +/***/ 1223: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var wrappy = __nccwpck_require__(7512) +var wrappy = __nccwpck_require__(2940) module.exports = wrappy(once) module.exports.strict = wrappy(onceStrict) @@ -11067,7 +11738,7 @@ function onceStrict (fn) { /***/ }), -/***/ 8445: +/***/ 2043: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { ;(function (sax) { // wrapper for non-node envs @@ -12639,15 +13310,15 @@ function onceStrict (fn) { /***/ }), -/***/ 4103: +/***/ 4294: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = __nccwpck_require__(4075); +module.exports = __nccwpck_require__(4219); /***/ }), -/***/ 4075: +/***/ 4219: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -12919,7 +13590,7 @@ exports.debug = debug; // for test /***/ }), -/***/ 3222: +/***/ 5030: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -12945,7 +13616,7 @@ exports.getUserAgent = getUserAgent; /***/ }), -/***/ 632: +/***/ 5840: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13009,29 +13680,29 @@ Object.defineProperty(exports, "parse", ({ } })); -var _v = _interopRequireDefault(__nccwpck_require__(9921)); +var _v = _interopRequireDefault(__nccwpck_require__(8628)); -var _v2 = _interopRequireDefault(__nccwpck_require__(5772)); +var _v2 = _interopRequireDefault(__nccwpck_require__(6409)); -var _v3 = _interopRequireDefault(__nccwpck_require__(7420)); +var _v3 = _interopRequireDefault(__nccwpck_require__(5122)); -var _v4 = _interopRequireDefault(__nccwpck_require__(5579)); +var _v4 = _interopRequireDefault(__nccwpck_require__(9120)); -var _nil = _interopRequireDefault(__nccwpck_require__(802)); +var _nil = _interopRequireDefault(__nccwpck_require__(5332)); -var _version = _interopRequireDefault(__nccwpck_require__(7945)); +var _version = _interopRequireDefault(__nccwpck_require__(1595)); -var _validate = _interopRequireDefault(__nccwpck_require__(8808)); +var _validate = _interopRequireDefault(__nccwpck_require__(6900)); -var _stringify = _interopRequireDefault(__nccwpck_require__(1343)); +var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); -var _parse = _interopRequireDefault(__nccwpck_require__(2590)); +var _parse = _interopRequireDefault(__nccwpck_require__(2746)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /***/ }), -/***/ 2317: +/***/ 4569: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13061,7 +13732,7 @@ exports["default"] = _default; /***/ }), -/***/ 802: +/***/ 5332: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -13076,7 +13747,7 @@ exports["default"] = _default; /***/ }), -/***/ 2590: +/***/ 2746: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13087,7 +13758,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _validate = _interopRequireDefault(__nccwpck_require__(8808)); +var _validate = _interopRequireDefault(__nccwpck_require__(6900)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13128,7 +13799,7 @@ exports["default"] = _default; /***/ }), -/***/ 92: +/***/ 814: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -13143,7 +13814,7 @@ exports["default"] = _default; /***/ }), -/***/ 9107: +/***/ 807: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13174,7 +13845,7 @@ function rng() { /***/ }), -/***/ 9984: +/***/ 5274: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13204,7 +13875,7 @@ exports["default"] = _default; /***/ }), -/***/ 1343: +/***/ 8950: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13215,7 +13886,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _validate = _interopRequireDefault(__nccwpck_require__(8808)); +var _validate = _interopRequireDefault(__nccwpck_require__(6900)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13250,7 +13921,7 @@ exports["default"] = _default; /***/ }), -/***/ 9921: +/***/ 8628: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13261,9 +13932,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _rng = _interopRequireDefault(__nccwpck_require__(9107)); +var _rng = _interopRequireDefault(__nccwpck_require__(807)); -var _stringify = _interopRequireDefault(__nccwpck_require__(1343)); +var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13364,7 +14035,7 @@ exports["default"] = _default; /***/ }), -/***/ 5772: +/***/ 6409: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13375,9 +14046,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _v = _interopRequireDefault(__nccwpck_require__(1699)); +var _v = _interopRequireDefault(__nccwpck_require__(5998)); -var _md = _interopRequireDefault(__nccwpck_require__(2317)); +var _md = _interopRequireDefault(__nccwpck_require__(4569)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13387,7 +14058,7 @@ exports["default"] = _default; /***/ }), -/***/ 1699: +/***/ 5998: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13399,9 +14070,9 @@ Object.defineProperty(exports, "__esModule", ({ exports["default"] = _default; exports.URL = exports.DNS = void 0; -var _stringify = _interopRequireDefault(__nccwpck_require__(1343)); +var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); -var _parse = _interopRequireDefault(__nccwpck_require__(2590)); +var _parse = _interopRequireDefault(__nccwpck_require__(2746)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13472,7 +14143,7 @@ function _default(name, version, hashfunc) { /***/ }), -/***/ 7420: +/***/ 5122: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13483,9 +14154,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _rng = _interopRequireDefault(__nccwpck_require__(9107)); +var _rng = _interopRequireDefault(__nccwpck_require__(807)); -var _stringify = _interopRequireDefault(__nccwpck_require__(1343)); +var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13516,7 +14187,7 @@ exports["default"] = _default; /***/ }), -/***/ 5579: +/***/ 9120: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13527,9 +14198,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _v = _interopRequireDefault(__nccwpck_require__(1699)); +var _v = _interopRequireDefault(__nccwpck_require__(5998)); -var _sha = _interopRequireDefault(__nccwpck_require__(9984)); +var _sha = _interopRequireDefault(__nccwpck_require__(5274)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13539,7 +14210,7 @@ exports["default"] = _default; /***/ }), -/***/ 8808: +/***/ 6900: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13550,7 +14221,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _regex = _interopRequireDefault(__nccwpck_require__(92)); +var _regex = _interopRequireDefault(__nccwpck_require__(814)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13563,7 +14234,7 @@ exports["default"] = _default; /***/ }), -/***/ 7945: +/***/ 1595: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -13574,7 +14245,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _validate = _interopRequireDefault(__nccwpck_require__(8808)); +var _validate = _interopRequireDefault(__nccwpck_require__(6900)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -13591,7 +14262,7 @@ exports["default"] = _default; /***/ }), -/***/ 7512: +/***/ 2940: /***/ ((module) => { // Returns a wrapper function that returns a wrapped callback @@ -13631,7 +14302,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 4952: +/***/ 2624: /***/ (function(__unused_webpack_module, exports) { // Generated by CoffeeScript 1.12.7 @@ -13650,7 +14321,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 2736: +/***/ 3337: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -13659,9 +14330,9 @@ function wrappy (fn, cb) { var builder, defaults, escapeCDATA, requiresCDATA, wrapCDATA, hasProp = {}.hasOwnProperty; - builder = __nccwpck_require__(480); + builder = __nccwpck_require__(2958); - defaults = (__nccwpck_require__(1412).defaults); + defaults = (__nccwpck_require__(7251).defaults); requiresCDATA = function(entry) { return typeof entry === "string" && (entry.indexOf('&') >= 0 || entry.indexOf('>') >= 0 || entry.indexOf('<') >= 0); @@ -13784,7 +14455,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 1412: +/***/ 7251: /***/ (function(__unused_webpack_module, exports) { // Generated by CoffeeScript 1.12.7 @@ -13863,7 +14534,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 2953: +/***/ 3314: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -13874,17 +14545,17 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - sax = __nccwpck_require__(8445); + sax = __nccwpck_require__(2043); events = __nccwpck_require__(2361); - bom = __nccwpck_require__(4952); + bom = __nccwpck_require__(2624); - processors = __nccwpck_require__(1406); + processors = __nccwpck_require__(9236); setImmediate = (__nccwpck_require__(9512).setImmediate); - defaults = (__nccwpck_require__(1412).defaults); + defaults = (__nccwpck_require__(7251).defaults); isEmpty = function(thing) { return typeof thing === "object" && (thing != null) && Object.keys(thing).length === 0; @@ -14265,7 +14936,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 1406: +/***/ 9236: /***/ (function(__unused_webpack_module, exports) { // Generated by CoffeeScript 1.12.7 @@ -14306,7 +14977,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 3374: +/***/ 6189: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -14316,13 +14987,13 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - defaults = __nccwpck_require__(1412); + defaults = __nccwpck_require__(7251); - builder = __nccwpck_require__(2736); + builder = __nccwpck_require__(3337); - parser = __nccwpck_require__(2953); + parser = __nccwpck_require__(3314); - processors = __nccwpck_require__(1406); + processors = __nccwpck_require__(9236); exports.defaults = defaults.defaults; @@ -14352,7 +15023,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 8378: +/***/ 2839: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -14371,7 +15042,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 6540: +/***/ 9267: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -14401,7 +15072,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 7362: +/***/ 8229: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -14491,7 +15162,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 805: +/***/ 9766: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -14508,16 +15179,16 @@ function wrappy (fn, cb) { /***/ }), -/***/ 637: +/***/ 8376: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 (function() { var NodeType, XMLAttribute, XMLNode; - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); module.exports = XMLAttribute = (function() { function XMLAttribute(parent, name, value) { @@ -14623,7 +15294,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 7683: +/***/ 333: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -14632,9 +15303,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLCharacterData = __nccwpck_require__(3281); + XMLCharacterData = __nccwpck_require__(7709); module.exports = XMLCData = (function(superClass) { extend(XMLCData, superClass); @@ -14666,7 +15337,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 3281: +/***/ 7709: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -14675,7 +15346,7 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); module.exports = XMLCharacterData = (function(superClass) { extend(XMLCharacterData, superClass); @@ -14752,7 +15423,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 7875: +/***/ 4407: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -14761,9 +15432,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLCharacterData = __nccwpck_require__(3281); + XMLCharacterData = __nccwpck_require__(7709); module.exports = XMLComment = (function(superClass) { extend(XMLComment, superClass); @@ -14795,16 +15466,16 @@ function wrappy (fn, cb) { /***/ }), -/***/ 1271: +/***/ 7465: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 (function() { var XMLDOMConfiguration, XMLDOMErrorHandler, XMLDOMStringList; - XMLDOMErrorHandler = __nccwpck_require__(5887); + XMLDOMErrorHandler = __nccwpck_require__(6744); - XMLDOMStringList = __nccwpck_require__(6062); + XMLDOMStringList = __nccwpck_require__(7028); module.exports = XMLDOMConfiguration = (function() { function XMLDOMConfiguration() { @@ -14866,7 +15537,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 5887: +/***/ 6744: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -14889,7 +15560,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 7877: +/***/ 8310: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -14928,7 +15599,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 6062: +/***/ 7028: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -14963,7 +15634,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 5451: +/***/ 1015: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -14972,9 +15643,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); module.exports = XMLDTDAttList = (function(superClass) { extend(XMLDTDAttList, superClass); @@ -15025,7 +15696,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 3873: +/***/ 2421: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -15034,9 +15705,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); module.exports = XMLDTDElement = (function(superClass) { extend(XMLDTDElement, superClass); @@ -15070,7 +15741,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 6928: +/***/ 53: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -15079,11 +15750,11 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - isObject = (__nccwpck_require__(7362).isObject); + isObject = (__nccwpck_require__(8229).isObject); - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); module.exports = XMLDTDEntity = (function(superClass) { extend(XMLDTDEntity, superClass); @@ -15174,7 +15845,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 7377: +/***/ 2837: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -15183,9 +15854,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); module.exports = XMLDTDNotation = (function(superClass) { extend(XMLDTDNotation, superClass); @@ -15233,7 +15904,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 1401: +/***/ 6364: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -15242,11 +15913,11 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - isObject = (__nccwpck_require__(7362).isObject); + isObject = (__nccwpck_require__(8229).isObject); - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); module.exports = XMLDeclaration = (function(superClass) { extend(XMLDeclaration, superClass); @@ -15283,7 +15954,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 5447: +/***/ 1801: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -15292,21 +15963,21 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - isObject = (__nccwpck_require__(7362).isObject); + isObject = (__nccwpck_require__(8229).isObject); - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLDTDAttList = __nccwpck_require__(5451); + XMLDTDAttList = __nccwpck_require__(1015); - XMLDTDEntity = __nccwpck_require__(6928); + XMLDTDEntity = __nccwpck_require__(53); - XMLDTDElement = __nccwpck_require__(3873); + XMLDTDElement = __nccwpck_require__(2421); - XMLDTDNotation = __nccwpck_require__(7377); + XMLDTDNotation = __nccwpck_require__(2837); - XMLNamedNodeMap = __nccwpck_require__(7417); + XMLNamedNodeMap = __nccwpck_require__(4361); module.exports = XMLDocType = (function(superClass) { extend(XMLDocType, superClass); @@ -15476,7 +16147,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 6381: +/***/ 3730: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -15485,19 +16156,19 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - isPlainObject = (__nccwpck_require__(7362).isPlainObject); + isPlainObject = (__nccwpck_require__(8229).isPlainObject); - XMLDOMImplementation = __nccwpck_require__(7877); + XMLDOMImplementation = __nccwpck_require__(8310); - XMLDOMConfiguration = __nccwpck_require__(1271); + XMLDOMConfiguration = __nccwpck_require__(7465); - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLStringifier = __nccwpck_require__(8081); + XMLStringifier = __nccwpck_require__(8594); - XMLStringWriter = __nccwpck_require__(8420); + XMLStringWriter = __nccwpck_require__(5913); module.exports = XMLDocument = (function(superClass) { extend(XMLDocument, superClass); @@ -15725,7 +16396,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 9962: +/***/ 7356: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -15733,43 +16404,43 @@ function wrappy (fn, cb) { var NodeType, WriterState, XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocument, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref, hasProp = {}.hasOwnProperty; - ref = __nccwpck_require__(7362), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue; + ref = __nccwpck_require__(8229), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue; - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLDocument = __nccwpck_require__(6381); + XMLDocument = __nccwpck_require__(3730); - XMLElement = __nccwpck_require__(3686); + XMLElement = __nccwpck_require__(9437); - XMLCData = __nccwpck_require__(7683); + XMLCData = __nccwpck_require__(333); - XMLComment = __nccwpck_require__(7875); + XMLComment = __nccwpck_require__(4407); - XMLRaw = __nccwpck_require__(3973); + XMLRaw = __nccwpck_require__(6329); - XMLText = __nccwpck_require__(7831); + XMLText = __nccwpck_require__(1318); - XMLProcessingInstruction = __nccwpck_require__(7272); + XMLProcessingInstruction = __nccwpck_require__(6939); - XMLDeclaration = __nccwpck_require__(1401); + XMLDeclaration = __nccwpck_require__(6364); - XMLDocType = __nccwpck_require__(5447); + XMLDocType = __nccwpck_require__(1801); - XMLDTDAttList = __nccwpck_require__(5451); + XMLDTDAttList = __nccwpck_require__(1015); - XMLDTDEntity = __nccwpck_require__(6928); + XMLDTDEntity = __nccwpck_require__(53); - XMLDTDElement = __nccwpck_require__(3873); + XMLDTDElement = __nccwpck_require__(2421); - XMLDTDNotation = __nccwpck_require__(7377); + XMLDTDNotation = __nccwpck_require__(2837); - XMLAttribute = __nccwpck_require__(637); + XMLAttribute = __nccwpck_require__(8376); - XMLStringifier = __nccwpck_require__(8081); + XMLStringifier = __nccwpck_require__(8594); - XMLStringWriter = __nccwpck_require__(8420); + XMLStringWriter = __nccwpck_require__(5913); - WriterState = __nccwpck_require__(805); + WriterState = __nccwpck_require__(9766); module.exports = XMLDocumentCB = (function() { function XMLDocumentCB(options, onData, onEnd) { @@ -16260,7 +16931,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 5759: +/***/ 3590: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -16269,9 +16940,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); module.exports = XMLDummy = (function(superClass) { extend(XMLDummy, superClass); @@ -16298,7 +16969,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 3686: +/***/ 9437: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -16307,15 +16978,15 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - ref = __nccwpck_require__(7362), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue; + ref = __nccwpck_require__(8229), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue; - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLAttribute = __nccwpck_require__(637); + XMLAttribute = __nccwpck_require__(8376); - XMLNamedNodeMap = __nccwpck_require__(7417); + XMLNamedNodeMap = __nccwpck_require__(4361); module.exports = XMLElement = (function(superClass) { extend(XMLElement, superClass); @@ -16603,7 +17274,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 7417: +/***/ 4361: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -16668,7 +17339,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 9033: +/***/ 7608: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -16676,7 +17347,7 @@ function wrappy (fn, cb) { var DocumentPosition, NodeType, XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNamedNodeMap, XMLNode, XMLNodeList, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref1, hasProp = {}.hasOwnProperty; - ref1 = __nccwpck_require__(7362), isObject = ref1.isObject, isFunction = ref1.isFunction, isEmpty = ref1.isEmpty, getValue = ref1.getValue; + ref1 = __nccwpck_require__(8229), isObject = ref1.isObject, isFunction = ref1.isFunction, isEmpty = ref1.isEmpty, getValue = ref1.getValue; XMLElement = null; @@ -16715,19 +17386,19 @@ function wrappy (fn, cb) { this.children = []; this.baseURI = null; if (!XMLElement) { - XMLElement = __nccwpck_require__(3686); - XMLCData = __nccwpck_require__(7683); - XMLComment = __nccwpck_require__(7875); - XMLDeclaration = __nccwpck_require__(1401); - XMLDocType = __nccwpck_require__(5447); - XMLRaw = __nccwpck_require__(3973); - XMLText = __nccwpck_require__(7831); - XMLProcessingInstruction = __nccwpck_require__(7272); - XMLDummy = __nccwpck_require__(5759); - NodeType = __nccwpck_require__(6540); - XMLNodeList = __nccwpck_require__(4417); - XMLNamedNodeMap = __nccwpck_require__(7417); - DocumentPosition = __nccwpck_require__(8378); + XMLElement = __nccwpck_require__(9437); + XMLCData = __nccwpck_require__(333); + XMLComment = __nccwpck_require__(4407); + XMLDeclaration = __nccwpck_require__(6364); + XMLDocType = __nccwpck_require__(1801); + XMLRaw = __nccwpck_require__(6329); + XMLText = __nccwpck_require__(1318); + XMLProcessingInstruction = __nccwpck_require__(6939); + XMLDummy = __nccwpck_require__(3590); + NodeType = __nccwpck_require__(9267); + XMLNodeList = __nccwpck_require__(6768); + XMLNamedNodeMap = __nccwpck_require__(4361); + DocumentPosition = __nccwpck_require__(2839); } } @@ -17460,7 +18131,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 4417: +/***/ 6768: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -17495,7 +18166,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 7272: +/***/ 6939: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -17504,9 +18175,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLCharacterData = __nccwpck_require__(3281); + XMLCharacterData = __nccwpck_require__(7709); module.exports = XMLProcessingInstruction = (function(superClass) { extend(XMLProcessingInstruction, superClass); @@ -17551,7 +18222,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 3973: +/***/ 6329: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -17560,9 +18231,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLNode = __nccwpck_require__(9033); + XMLNode = __nccwpck_require__(7608); module.exports = XMLRaw = (function(superClass) { extend(XMLRaw, superClass); @@ -17593,7 +18264,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 3887: +/***/ 8601: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -17602,11 +18273,11 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLWriterBase = __nccwpck_require__(3704); + XMLWriterBase = __nccwpck_require__(6752); - WriterState = __nccwpck_require__(805); + WriterState = __nccwpck_require__(9766); module.exports = XMLStreamWriter = (function(superClass) { extend(XMLStreamWriter, superClass); @@ -17776,7 +18447,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 8420: +/***/ 5913: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -17785,7 +18456,7 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - XMLWriterBase = __nccwpck_require__(3704); + XMLWriterBase = __nccwpck_require__(6752); module.exports = XMLStringWriter = (function(superClass) { extend(XMLStringWriter, superClass); @@ -17818,7 +18489,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 8081: +/***/ 8594: /***/ (function(module) { // Generated by CoffeeScript 1.12.7 @@ -18065,7 +18736,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 7831: +/***/ 1318: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -18074,9 +18745,9 @@ function wrappy (fn, cb) { extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLCharacterData = __nccwpck_require__(3281); + XMLCharacterData = __nccwpck_require__(7709); module.exports = XMLText = (function(superClass) { extend(XMLText, superClass); @@ -18141,7 +18812,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 3704: +/***/ 6752: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 @@ -18149,37 +18820,37 @@ function wrappy (fn, cb) { var NodeType, WriterState, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLText, XMLWriterBase, assign, hasProp = {}.hasOwnProperty; - assign = (__nccwpck_require__(7362).assign); + assign = (__nccwpck_require__(8229).assign); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - XMLDeclaration = __nccwpck_require__(1401); + XMLDeclaration = __nccwpck_require__(6364); - XMLDocType = __nccwpck_require__(5447); + XMLDocType = __nccwpck_require__(1801); - XMLCData = __nccwpck_require__(7683); + XMLCData = __nccwpck_require__(333); - XMLComment = __nccwpck_require__(7875); + XMLComment = __nccwpck_require__(4407); - XMLElement = __nccwpck_require__(3686); + XMLElement = __nccwpck_require__(9437); - XMLRaw = __nccwpck_require__(3973); + XMLRaw = __nccwpck_require__(6329); - XMLText = __nccwpck_require__(7831); + XMLText = __nccwpck_require__(1318); - XMLProcessingInstruction = __nccwpck_require__(7272); + XMLProcessingInstruction = __nccwpck_require__(6939); - XMLDummy = __nccwpck_require__(5759); + XMLDummy = __nccwpck_require__(3590); - XMLDTDAttList = __nccwpck_require__(5451); + XMLDTDAttList = __nccwpck_require__(1015); - XMLDTDElement = __nccwpck_require__(3873); + XMLDTDElement = __nccwpck_require__(2421); - XMLDTDEntity = __nccwpck_require__(6928); + XMLDTDEntity = __nccwpck_require__(53); - XMLDTDNotation = __nccwpck_require__(7377); + XMLDTDNotation = __nccwpck_require__(2837); - WriterState = __nccwpck_require__(805); + WriterState = __nccwpck_require__(9766); module.exports = XMLWriterBase = (function() { function XMLWriterBase(options) { @@ -18576,28 +19247,28 @@ function wrappy (fn, cb) { /***/ }), -/***/ 480: +/***/ 2958: /***/ (function(module, __unused_webpack_exports, __nccwpck_require__) { // Generated by CoffeeScript 1.12.7 (function() { var NodeType, WriterState, XMLDOMImplementation, XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref; - ref = __nccwpck_require__(7362), assign = ref.assign, isFunction = ref.isFunction; + ref = __nccwpck_require__(8229), assign = ref.assign, isFunction = ref.isFunction; - XMLDOMImplementation = __nccwpck_require__(7877); + XMLDOMImplementation = __nccwpck_require__(8310); - XMLDocument = __nccwpck_require__(6381); + XMLDocument = __nccwpck_require__(3730); - XMLDocumentCB = __nccwpck_require__(9962); + XMLDocumentCB = __nccwpck_require__(7356); - XMLStringWriter = __nccwpck_require__(8420); + XMLStringWriter = __nccwpck_require__(5913); - XMLStreamWriter = __nccwpck_require__(3887); + XMLStreamWriter = __nccwpck_require__(8601); - NodeType = __nccwpck_require__(6540); + NodeType = __nccwpck_require__(9267); - WriterState = __nccwpck_require__(805); + WriterState = __nccwpck_require__(9766); module.exports.create = function(name, xmldec, doctype, options) { var doc, root; @@ -18648,766 +19319,7 @@ function wrappy (fn, cb) { /***/ }), -/***/ 8993: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const core = __nccwpck_require__(6358) -const github = __nccwpck_require__(9551) -const fs = __nccwpck_require__(7147) -const parser = __nccwpck_require__(3374) -const { parseBooleans } = __nccwpck_require__(1406) -const process = __nccwpck_require__(4053) -const render = __nccwpck_require__(3080) -const { debug, getChangedLines } = __nccwpck_require__(683) -const glob = __nccwpck_require__(6562) - -async function action() { - let continueOnError = true - try { - const token = core.getInput('token') - if (!token) { - core.setFailed("'token' is missing") - return - } - const pathsString = core.getInput('paths') - if (!pathsString) { - core.setFailed("'paths' is missing") - return - } - - const reportPaths = pathsString.split(',') - const minCoverageOverall = parseFloat(core.getInput('min-coverage-overall')) - const minCoverageChangedFiles = parseFloat( - core.getInput('min-coverage-changed-files') - ) - const title = core.getInput('title') - const updateComment = parseBooleans(core.getInput('update-comment')) - if (updateComment) { - if (!title) { - core.info( - "'title' is not set. 'update-comment' does not work without 'title'" - ) - } - } - const skipIfNoChanges = parseBooleans(core.getInput('skip-if-no-changes')) - const passEmoji = core.getInput('pass-emoji') - const failEmoji = core.getInput('fail-emoji') - - continueOnError = parseBooleans(core.getInput('continue-on-error')) - const debugMode = parseBooleans(core.getInput('debug-mode')) - - const event = github.context.eventName - core.info(`Event is ${event}`) - if (debugMode) { - core.info(`passEmoji: ${passEmoji}`) - core.info(`failEmoji: ${failEmoji}`) - } - - let base - let head - let prNumber - switch (event) { - case 'pull_request': - case 'pull_request_target': - base = github.context.payload.pull_request.base.sha - head = github.context.payload.pull_request.head.sha - prNumber = github.context.payload.pull_request.number - break - case 'push': - base = github.context.payload.before - head = github.context.payload.after - break - default: - core.setFailed( - `Only pull requests and pushes are supported, ${github.context.eventName} not supported.` - ) - return - } - - core.info(`base sha: ${base}`) - core.info(`head sha: ${head}`) - - const client = github.getOctokit(token) - - if (debugMode) core.info(`reportPaths: ${reportPaths}`) - const reportsJsonAsync = getJsonReports(reportPaths, debugMode) - const changedFiles = await getChangedFiles(base, head, client, debugMode) - if (debugMode) core.info(`changedFiles: ${debug(changedFiles)}`) - - const reportsJson = await reportsJsonAsync - const reports = reportsJson.map((report) => report['report']) - - const project = process.getProjectCoverage(reports, changedFiles) - if (debugMode) core.info(`project: ${debug(project)}`) - core.setOutput( - 'coverage-overall', - parseFloat(project.overall.percentage.toFixed(2)) - ) - core.setOutput( - 'coverage-changed-files', - parseFloat(project['coverage-changed-files'].toFixed(2)) - ) - - const skip = skipIfNoChanges && project.modules.length === 0 - if (debugMode) core.info(`skip: ${skip}`) - if (debugMode) core.info(`prNumber: ${prNumber}`) - if (prNumber != null && !skip) { - const emoji = { - pass: passEmoji, - fail: failEmoji, - } - await addComment( - prNumber, - updateComment, - render.getTitle(title), - render.getPRComment( - project, - { - overall: minCoverageOverall, - changed: minCoverageChangedFiles, - }, - title, - emoji - ), - client, - debugMode - ) - } - } catch (error) { - if (continueOnError) { - core.error(error) - } else { - core.setFailed(error) - } - } -} - -async function getJsonReports(xmlPaths, debugMode) { - const globber = await glob.create(xmlPaths.join('\n')) - const files = await globber.glob() - if (debugMode) core.info(`Resolved files: ${files}`) - - return Promise.all( - files.map(async (path) => { - const reportXml = await fs.promises.readFile(path.trim(), 'utf-8') - return await parser.parseStringPromise(reportXml) - }) - ) -} - -async function getChangedFiles(base, head, client, debugMode) { - const response = await client.rest.repos.compareCommits({ - base, - head, - owner: github.context.repo.owner, - repo: github.context.repo.repo, - }) - - const changedFiles = [] - response.data.files.forEach((file) => { - if (debugMode) core.info(`file: ${debug(file)}`) - const changedFile = { - filePath: file.filename, - url: file.blob_url, - lines: getChangedLines(file.patch), - } - changedFiles.push(changedFile) - }) - return changedFiles -} - -async function addComment(prNumber, update, title, body, client, debugMode) { - let commentUpdated = false - - if (debugMode) core.info(`update: ${update}`) - if (debugMode) core.info(`title: ${title}`) - if (debugMode) core.info(`JaCoCo Comment: ${body}`) - if (update && title) { - if (debugMode) core.info('Listing all comments') - const comments = await client.rest.issues.listComments({ - issue_number: prNumber, - ...github.context.repo, - }) - const comment = comments.data.find((comment) => - comment.body.startsWith(title) - ) - - if (comment) { - if (debugMode) - core.info( - `Updating existing comment: id=${comment.id} \n body=${comment.body}` - ) - await client.rest.issues.updateComment({ - comment_id: comment.id, - body, - ...github.context.repo, - }) - commentUpdated = true - } - } - - if (!commentUpdated) { - if (debugMode) core.info('Creating a new comment') - await client.rest.issues.createComment({ - issue_number: prNumber, - body, - ...github.context.repo, - }) - } -} - -module.exports = { - action, -} - - -/***/ }), - -/***/ 4053: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const { TAG, getFilesWithCoverage } = __nccwpck_require__(683) - -function getProjectCoverage(reports, files) { - const moduleCoverages = [] - const modules = getModulesFromReports(reports) - modules.forEach((module) => { - const filesCoverage = getFileCoverageFromPackages( - [].concat(...module.packages), - files - ) - if (filesCoverage.files.length !== 0) { - const moduleCoverage = getModuleCoverage(module.root) - const changedMissed = filesCoverage.files - .map((file) => file.changed.missed) - .reduce(sumReducer, 0.0) - const changedCovered = filesCoverage.files - .map((file) => file.changed.covered) - .reduce(sumReducer, 0.0) - moduleCoverages.push({ - name: module.name, - files: filesCoverage.files, - overall: { - percentage: moduleCoverage.percentage, - covered: moduleCoverage.covered, - missed: moduleCoverage.missed, - }, - changed: { - covered: changedCovered, - missed: changedMissed, - percentage: calculatePercentage(changedCovered, changedMissed), - }, - }) - } - }) - moduleCoverages.sort((a, b) => b.overall.percentage - a.overall.percentage) - const totalFiles = moduleCoverages.flatMap((module) => { - return module.files - }) - - const changedMissed = moduleCoverages - .map((module) => module.changed.missed) - .reduce(sumReducer, 0.0) - const changedCovered = moduleCoverages - .map((module) => module.changed.covered) - .reduce(sumReducer, 0.0) - - const projectCoverage = getOverallProjectCoverage(reports) - const project = { - modules: moduleCoverages, - isMultiModule: reports.length > 1 || modules.length > 1, - overall: { - covered: projectCoverage.covered, - missed: projectCoverage.missed, - percentage: projectCoverage.percentage, - }, - changed: { - covered: changedCovered, - missed: changedMissed, - percentage: calculatePercentage(changedCovered, changedMissed), - }, - } - const totalPercentage = getTotalPercentage(totalFiles) - if (totalPercentage) { - project['coverage-changed-files'] = totalPercentage - } else { - project['coverage-changed-files'] = 100 - } - return project -} - -const sumReducer = (total, value) => { - return total + value -} - -function toFloat(value) { - return parseFloat(value.toFixed(2)) -} - -function getModulesFromReports(reports) { - const modules = [] - reports.forEach((report) => { - const groupTag = report[TAG.GROUP] - if (groupTag) { - const groups = groupTag.filter((group) => group !== undefined) - groups.forEach((group) => { - const module = getModuleFromParent(group) - modules.push(module) - }) - } - const module = getModuleFromParent(report) - if (module) { - modules.push(module) - } - }) - return modules -} - -function getModuleFromParent(parent) { - const packageTag = parent[TAG.PACKAGE] - if (packageTag) { - const packages = packageTag.filter((pacage) => pacage !== undefined) - if (packages.length !== 0) { - return { - name: parent['$'].name, - packages, - root: parent, // TODO just pass array of 'counters' - } - } - } - return null -} - -function getFileCoverageFromPackages(packages, files) { - const result = {} - const resultFiles = [] - const jacocoFiles = getFilesWithCoverage(packages) - jacocoFiles.forEach((jacocoFile) => { - const name = jacocoFile.name - const packageName = jacocoFile.packageName - const githubFile = files.find(function (f) { - return f.filePath.endsWith(`${packageName}/${name}`) - }) - if (githubFile) { - const instruction = jacocoFile.instruction - if (instruction) { - const missed = parseFloat(instruction.missed) - const covered = parseFloat(instruction.covered) - const lines = [] - githubFile.lines.forEach((lineNumber) => { - const jacocoLine = jacocoFile.lines[lineNumber] - if (jacocoLine) { - lines.push({ - number: lineNumber, - ...jacocoLine, - }) - } - }) - const changedMissed = lines - .map((line) => toFloat(line.instruction.missed)) - .reduce(sumReducer, 0.0) - const changedCovered = lines - .map((line) => toFloat(line.instruction.covered)) - .reduce(sumReducer, 0.0) - resultFiles.push({ - name, - url: githubFile.url, - overall: { - missed, - covered, - percentage: calculatePercentage(covered, missed), - }, - changed: { - missed: changedMissed, - covered: changedCovered, - percentage: calculatePercentage(changedCovered, changedMissed), - }, - lines, - }) - } - } - }) - resultFiles.sort((a, b) => b.overall.percentage - a.overall.percentage) - - result.files = resultFiles - if (resultFiles.length !== 0) { - result.percentage = getTotalPercentage(resultFiles) - } else { - result.percentage = 100 - } - return result -} - -function calculatePercentage(covered, missed) { - const total = covered + missed - if (total !== 0) { - return parseFloat(((covered / total) * 100).toFixed(2)) - } else { - return null - } -} - -function getTotalPercentage(files) { - let missed = 0 - let covered = 0 - if (files.length !== 0) { - files.forEach((file) => { - missed += file.overall.missed - covered += file.overall.covered - }) - return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)) - } else { - return null - } -} - -function getModuleCoverage(report) { - const counters = report['counter'] - return getDetailedCoverage(counters, 'INSTRUCTION') -} - -function getOverallProjectCoverage(reports) { - const coverages = reports.map((report) => - getDetailedCoverage(report['counter'], 'INSTRUCTION') - ) - const covered = coverages.reduce((acc, coverage) => acc + coverage.covered, 0) - const missed = coverages.reduce((acc, coverage) => acc + coverage.missed, 0) - return { - covered, - missed, - percentage: parseFloat(((covered / (covered + missed)) * 100).toFixed(2)), - } -} - -function getDetailedCoverage(counters, type) { - const counter = counters.find((counter) => counter[TAG.SELF].type === type) - if (counter) { - const attr = counter[TAG.SELF] - const missed = parseFloat(attr.missed) - const covered = parseFloat(attr.covered) - return { - missed, - covered, - percentage: parseFloat(((covered / (covered + missed)) * 100).toFixed(2)), - } - } - return { missed: 0, covered: 0, percentage: 100 } -} - -module.exports = { - getProjectCoverage, -} - - -/***/ }), - -/***/ 3080: -/***/ ((module) => { - -function getPRComment(project, minCoverage, title, emoji) { - const heading = getTitle(title) - const overallTable = getOverallTable(project, minCoverage, emoji) - const moduleTable = getModuleTable(project.modules, minCoverage, emoji) - const filesTable = getFileTable(project, minCoverage, emoji) - - const tables = - project.modules.length === 0 - ? '> There is no coverage information present for the Files changed' - : project.isMultiModule - ? moduleTable + '\n\n' + filesTable - : filesTable - - return heading + overallTable + '\n\n' + tables -} - -function getModuleTable(modules, minCoverage, emoji) { - const tableHeader = '|Module|Coverage||' - const tableStructure = '|:-|:-|:-:|' - let table = tableHeader + '\n' + tableStructure - modules.forEach((module) => { - const coverageDifference = getCoverageDifference( - module.overall, - module.changed - ) - renderRow( - module.name, - module.overall.percentage, - coverageDifference, - module.changed.percentage, - emoji - ) - }) - return table - - function renderRow( - name, - overallCoverage, - coverageDiff, - changedCoverage, - emoji - ) { - const status = getStatus(changedCoverage, minCoverage.changed, emoji) - let coveragePercentage = `${formatCoverage(overallCoverage)}` - if (shouldShow(coverageDiff)) { - coveragePercentage += ` **\`${formatCoverage(coverageDiff)}\`**` - } - const row = `|${name}|${coveragePercentage}|${status}|` - table = table + '\n' + row - } -} - -function getFileTable(project, minCoverage, emoji) { - const tableHeader = project.isMultiModule - ? '|Module|File|Coverage||' - : '|File|Coverage||' - const tableStructure = project.isMultiModule - ? '|:-|:-|:-|:-:|' - : '|:-|:-|:-:|' - let table = tableHeader + '\n' + tableStructure - project.modules.forEach((module) => { - module.files.forEach((file, index) => { - let moduleName = module.name - if (index !== 0) { - moduleName = '' - } - const coverageDifference = getCoverageDifference( - file.overall, - file.changed - ) - renderRow( - moduleName, - `[${file.name}](${file.url})`, - file.overall.percentage, - coverageDifference, - file.changed.percentage, - project.isMultiModule, - emoji - ) - }) - }) - return project.isMultiModule - ? '
\n' + 'Files\n\n' + table + '\n\n
' - : table - - function renderRow( - moduleName, - fileName, - overallCoverage, - coverageDiff, - changedCoverage, - isMultiModule, - emoji - ) { - const status = getStatus(changedCoverage, minCoverage.changed, emoji) - let coveragePercentage = `${formatCoverage(overallCoverage)}` - if (shouldShow(coverageDiff)) { - coveragePercentage += ` **\`${formatCoverage(coverageDiff)}\`**` - } - const row = isMultiModule - ? `|${moduleName}|${fileName}|${coveragePercentage}|${status}|` - : `|${fileName}|${coveragePercentage}|${status}|` - table = table + '\n' + row - } -} - -function getCoverageDifference(overall, changed) { - const totalInstructions = overall.covered + overall.missed - const missed = changed.missed - return -(missed / totalInstructions) * 100 -} - -function getOverallTable(project, minCoverage, emoji) { - const status = getStatus( - project.overall.percentage, - minCoverage.overall, - emoji - ) - const coverageDifference = getCoverageDifference( - project.overall, - project.changed - ) - let coveragePercentage = `${formatCoverage(project.overall.percentage)}` - if (shouldShow(coverageDifference)) { - coveragePercentage += ` **\`${formatCoverage(coverageDifference)}\`**` - } - const tableHeader = `|Overall Project|${coveragePercentage}|${status}|` - const tableStructure = '|:-|:-|:-:|' - - const missedLines = project.changed.missed - const coveredLines = project.changed.covered - const totalChangedLines = missedLines + coveredLines - let changedCoverageRow = '' - if (totalChangedLines !== 0) { - const changedLinesPercentage = (coveredLines / totalChangedLines) * 100 - const status = getStatus(changedLinesPercentage, minCoverage.changed, emoji) - changedCoverageRow = - '\n' + - `|Files changed|${formatCoverage(changedLinesPercentage)}|${status}|` + - '\n
' - } - return tableHeader + '\n' + tableStructure + changedCoverageRow -} - -function round(value) { - return Math.round((value + Number.EPSILON) * 100) / 100 -} - -function shouldShow(value) { - const rounded = Math.abs(round(value)) - return rounded !== 0 && rounded !== 100 -} - -function getTitle(title) { - if (title != null && title.trim().length > 0) { - const trimmed = title.trim() - if (trimmed.startsWith('#')) { - return trimmed + '\n' - } else { - return '### ' + trimmed + '\n' - } - } else { - return '' - } -} - -function getStatus(coverage, minCoverage, emoji) { - let status = emoji.pass - if (coverage != null && coverage < minCoverage) { - status = emoji.fail - } - return status -} - -function formatCoverage(coverage) { - return `${toFloat(coverage)}%` -} - -function toFloat(value) { - return parseFloat(value.toFixed(2)) -} - -module.exports = { - getPRComment, - getTitle, -} - - -/***/ }), - -/***/ 683: -/***/ ((module) => { - -const TAG = { - SELF: '$', - SOURCE_FILE: 'sourcefile', - LINE: 'line', - COUNTER: 'counter', - PACKAGE: 'package', - GROUP: 'group', -} - -function debug(obj) { - return JSON.stringify(obj, ' ', 4) -} - -const pattern = /^@@ -([0-9]*),?\S* \+([0-9]*),?/ - -function getChangedLines(patch) { - const lineNumbers = new Set() - if (patch) { - const lines = patch.split('\n') - const groups = getDiffGroups(lines) - groups.forEach((group) => { - const firstLine = group.shift() - if (firstLine) { - const diffGroup = firstLine.match(pattern) - if (diffGroup) { - let bX = parseInt(diffGroup[2]) - - group.forEach((line) => { - bX++ - - if (line.startsWith('+')) { - lineNumbers.add(bX - 1) - } else if (line.startsWith('-')) { - bX-- - } - }) - } - } - }) - } - return [...lineNumbers] -} - -function getDiffGroups(lines) { - const groups = [] - - let group = [] - lines.forEach((line) => { - if (line.startsWith('@@')) { - group = [] - groups.push(group) - } - group.push(line) - }) - - return groups -} - -function getFilesWithCoverage(packages) { - const files = [] - packages.forEach((item) => { - const packageName = item[TAG.SELF].name - const sourceFiles = item[TAG.SOURCE_FILE] ?? [] - sourceFiles.forEach((sourceFile) => { - const sourceFileName = sourceFile[TAG.SELF].name - const file = { - name: sourceFileName, - packageName, - } - const counters = sourceFile[TAG.COUNTER] ?? [] - counters.forEach((counter) => { - const counterSelf = counter[TAG.SELF] - const type = counterSelf.type - file[type.toLowerCase()] = { - missed: parseInt(counterSelf.missed) ?? 0, - covered: parseInt(counterSelf.covered) ?? 0, - } - }) - - file.lines = {} - const lines = sourceFile[TAG.LINE] ?? [] - lines.forEach((line) => { - const lineSelf = line[TAG.SELF] - file.lines[lineSelf.nr] = { - instruction: { - missed: parseInt(lineSelf.mi) ?? 0, - covered: parseInt(lineSelf.ci) ?? 0, - }, - branch: { - missed: parseInt(lineSelf.mb) ?? 0, - covered: parseInt(lineSelf.cb) ?? 0, - }, - } - }) - files.push(file) - }) - }) - return files -} - -module.exports = { - debug, - getChangedLines, - getFilesWithCoverage, - TAG, -} - - -/***/ }), - -/***/ 7914: +/***/ 2877: /***/ ((module) => { module.exports = eval("require")("encoding"); @@ -19598,17 +19510,18 @@ module.exports = JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"] /******/ /************************************************************************/ var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +// This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { -const core = __nccwpck_require__(6358) -const action = __nccwpck_require__(8993) +"use strict"; +var exports = __webpack_exports__; -action.action().catch((error) => { - core.setFailed(error.message) -}) +Object.defineProperty(exports, "__esModule", ({ value: true })); +const action_1 = __nccwpck_require__(3767); +(0, action_1.action)(); })(); module.exports = __webpack_exports__; /******/ })() -; \ No newline at end of file +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map new file mode 100644 index 0000000..3acf76b --- /dev/null +++ b/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACllCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACl7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC7vDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5hDA;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChEA;;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7BA;AACA;;;;;;;;ACDA;AACA;AACA;AACA","sources":["../webpack://jacoco-report/./lib/src/action.js","../webpack://jacoco-report/./lib/src/process.js","../webpack://jacoco-report/./lib/src/render.js","../webpack://jacoco-report/./lib/src/util.js","../webpack://jacoco-report/./node_modules/@actions/core/lib/command.js","../webpack://jacoco-report/./node_modules/@actions/core/lib/core.js","../webpack://jacoco-report/./node_modules/@actions/core/lib/file-command.js","../webpack://jacoco-report/./node_modules/@actions/core/lib/oidc-utils.js","../webpack://jacoco-report/./node_modules/@actions/core/lib/path-utils.js","../webpack://jacoco-report/./node_modules/@actions/core/lib/summary.js","../webpack://jacoco-report/./node_modules/@actions/core/lib/utils.js","../webpack://jacoco-report/./node_modules/@actions/github/lib/context.js","../webpack://jacoco-report/./node_modules/@actions/github/lib/github.js","../webpack://jacoco-report/./node_modules/@actions/github/lib/internal/utils.js","../webpack://jacoco-report/./node_modules/@actions/github/lib/utils.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/glob.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-glob-options-helper.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-globber.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-hash-files.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-match-kind.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-path-helper.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-path.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-pattern-helper.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-pattern.js","../webpack://jacoco-report/./node_modules/@actions/glob/lib/internal-search-state.js","../webpack://jacoco-report/./node_modules/@actions/http-client/lib/auth.js","../webpack://jacoco-report/./node_modules/@actions/http-client/lib/index.js","../webpack://jacoco-report/./node_modules/@actions/http-client/lib/proxy.js","../webpack://jacoco-report/./node_modules/@octokit/auth-token/dist-node/index.js","../webpack://jacoco-report/./node_modules/@octokit/core/dist-node/index.js","../webpack://jacoco-report/./node_modules/@octokit/endpoint/dist-node/index.js","../webpack://jacoco-report/./node_modules/@octokit/graphql/dist-node/index.js","../webpack://jacoco-report/./node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../webpack://jacoco-report/./node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js","../webpack://jacoco-report/./node_modules/@octokit/request-error/dist-node/index.js","../webpack://jacoco-report/./node_modules/@octokit/request/dist-node/index.js","../webpack://jacoco-report/./node_modules/balanced-match/index.js","../webpack://jacoco-report/./node_modules/before-after-hook/index.js","../webpack://jacoco-report/./node_modules/before-after-hook/lib/add.js","../webpack://jacoco-report/./node_modules/before-after-hook/lib/register.js","../webpack://jacoco-report/./node_modules/before-after-hook/lib/remove.js","../webpack://jacoco-report/./node_modules/brace-expansion/index.js","../webpack://jacoco-report/./node_modules/concat-map/index.js","../webpack://jacoco-report/./node_modules/deprecation/dist-node/index.js","../webpack://jacoco-report/./node_modules/is-plain-object/dist/is-plain-object.js","../webpack://jacoco-report/./node_modules/minimatch/minimatch.js","../webpack://jacoco-report/./node_modules/node-fetch/lib/index.js","../webpack://jacoco-report/./node_modules/node-fetch/node_modules/tr46/index.js","../webpack://jacoco-report/./node_modules/node-fetch/node_modules/webidl-conversions/lib/index.js","../webpack://jacoco-report/./node_modules/node-fetch/node_modules/whatwg-url/lib/URL-impl.js","../webpack://jacoco-report/./node_modules/node-fetch/node_modules/whatwg-url/lib/URL.js","../webpack://jacoco-report/./node_modules/node-fetch/node_modules/whatwg-url/lib/public-api.js","../webpack://jacoco-report/./node_modules/node-fetch/node_modules/whatwg-url/lib/url-state-machine.js","../webpack://jacoco-report/./node_modules/node-fetch/node_modules/whatwg-url/lib/utils.js","../webpack://jacoco-report/./node_modules/once/once.js","../webpack://jacoco-report/./node_modules/sax/lib/sax.js","../webpack://jacoco-report/./node_modules/tunnel/index.js","../webpack://jacoco-report/./node_modules/tunnel/lib/tunnel.js","../webpack://jacoco-report/./node_modules/universal-user-agent/dist-node/index.js","../webpack://jacoco-report/./node_modules/uuid/dist/index.js","../webpack://jacoco-report/./node_modules/uuid/dist/md5.js","../webpack://jacoco-report/./node_modules/uuid/dist/nil.js","../webpack://jacoco-report/./node_modules/uuid/dist/parse.js","../webpack://jacoco-report/./node_modules/uuid/dist/regex.js","../webpack://jacoco-report/./node_modules/uuid/dist/rng.js","../webpack://jacoco-report/./node_modules/uuid/dist/sha1.js","../webpack://jacoco-report/./node_modules/uuid/dist/stringify.js","../webpack://jacoco-report/./node_modules/uuid/dist/v1.js","../webpack://jacoco-report/./node_modules/uuid/dist/v3.js","../webpack://jacoco-report/./node_modules/uuid/dist/v35.js","../webpack://jacoco-report/./node_modules/uuid/dist/v4.js","../webpack://jacoco-report/./node_modules/uuid/dist/v5.js","../webpack://jacoco-report/./node_modules/uuid/dist/validate.js","../webpack://jacoco-report/./node_modules/uuid/dist/version.js","../webpack://jacoco-report/./node_modules/wrappy/wrappy.js","../webpack://jacoco-report/./node_modules/xml2js/lib/bom.js","../webpack://jacoco-report/./node_modules/xml2js/lib/builder.js","../webpack://jacoco-report/./node_modules/xml2js/lib/defaults.js","../webpack://jacoco-report/./node_modules/xml2js/lib/parser.js","../webpack://jacoco-report/./node_modules/xml2js/lib/processors.js","../webpack://jacoco-report/./node_modules/xml2js/lib/xml2js.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/DocumentPosition.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/NodeType.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/Utility.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/WriterState.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLAttribute.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLCData.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLCharacterData.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLComment.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDOMConfiguration.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDOMImplementation.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDOMStringList.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDTDAttList.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDTDElement.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDTDEntity.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDTDNotation.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDeclaration.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDocType.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDocument.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDocumentCB.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLDummy.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLElement.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLNamedNodeMap.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLNode.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLNodeList.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLProcessingInstruction.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLRaw.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLStreamWriter.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLStringWriter.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLStringifier.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLText.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/XMLWriterBase.js","../webpack://jacoco-report/./node_modules/xmlbuilder/lib/index.js","../webpack://jacoco-report/./node_modules/@vercel/ncc/dist/ncc/@@notfound.js","../webpack://jacoco-report/external node-commonjs \"assert\"","../webpack://jacoco-report/external node-commonjs \"crypto\"","../webpack://jacoco-report/external node-commonjs \"events\"","../webpack://jacoco-report/external node-commonjs \"fs\"","../webpack://jacoco-report/external node-commonjs \"http\"","../webpack://jacoco-report/external node-commonjs \"https\"","../webpack://jacoco-report/external node-commonjs \"net\"","../webpack://jacoco-report/external node-commonjs \"os\"","../webpack://jacoco-report/external node-commonjs \"path\"","../webpack://jacoco-report/external node-commonjs \"punycode\"","../webpack://jacoco-report/external node-commonjs \"stream\"","../webpack://jacoco-report/external node-commonjs \"string_decoder\"","../webpack://jacoco-report/external node-commonjs \"timers\"","../webpack://jacoco-report/external node-commonjs \"tls\"","../webpack://jacoco-report/external node-commonjs \"url\"","../webpack://jacoco-report/external node-commonjs \"util\"","../webpack://jacoco-report/external node-commonjs \"zlib\"","../webpack://jacoco-report/webpack/bootstrap","../webpack://jacoco-report/webpack/runtime/compat","../webpack://jacoco-report/./lib/src/index.js"],"sourcesContent":["\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.action = void 0;\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst core = __importStar(require(\"@actions/core\"));\nconst github = __importStar(require(\"@actions/github\"));\nconst fs = __importStar(require(\"fs\"));\nconst xml2js_1 = __importDefault(require(\"xml2js\"));\nconst processors_1 = require(\"xml2js/lib/processors\");\nconst glob = __importStar(require(\"@actions/glob\"));\nconst process_1 = require(\"./process\");\nconst render_1 = require(\"./render\");\nconst util_1 = require(\"./util\");\nfunction action() {\n var _a, _b, _c, _d;\n return __awaiter(this, void 0, void 0, function* () {\n let continueOnError = true;\n try {\n const token = core.getInput('token');\n if (!token) {\n core.setFailed(\"'token' is missing\");\n return;\n }\n const pathsString = core.getInput('paths');\n if (!pathsString) {\n core.setFailed(\"'paths' is missing\");\n return;\n }\n const reportPaths = pathsString.split(',');\n const minCoverageOverall = parseFloat(core.getInput('min-coverage-overall'));\n const minCoverageChangedFiles = parseFloat(core.getInput('min-coverage-changed-files'));\n const title = core.getInput('title');\n const updateComment = (0, processors_1.parseBooleans)(core.getInput('update-comment'));\n if (updateComment) {\n if (!title) {\n core.info(\"'title' is not set. 'update-comment' does not work without 'title'\");\n }\n }\n const skipIfNoChanges = (0, processors_1.parseBooleans)(core.getInput('skip-if-no-changes'));\n const passEmoji = core.getInput('pass-emoji');\n const failEmoji = core.getInput('fail-emoji');\n continueOnError = (0, processors_1.parseBooleans)(core.getInput('continue-on-error'));\n const debugMode = (0, processors_1.parseBooleans)(core.getInput('debug-mode'));\n const event = github.context.eventName;\n core.info(`Event is ${event}`);\n if (debugMode) {\n core.info(`passEmoji: ${passEmoji}`);\n core.info(`failEmoji: ${failEmoji}`);\n }\n let base;\n let head;\n let prNumber;\n switch (event) {\n case 'pull_request':\n case 'pull_request_target':\n base = (_a = github.context.payload.pull_request) === null || _a === void 0 ? void 0 : _a.base.sha;\n head = (_b = github.context.payload.pull_request) === null || _b === void 0 ? void 0 : _b.head.sha;\n prNumber = (_c = github.context.payload.pull_request) === null || _c === void 0 ? void 0 : _c.number;\n break;\n case 'push':\n base = github.context.payload.before;\n head = github.context.payload.after;\n break;\n default:\n core.setFailed(`Only pull requests and pushes are supported, ${github.context.eventName} not supported.`);\n return;\n }\n core.info(`base sha: ${base}`);\n core.info(`head sha: ${head}`);\n const client = github.getOctokit(token);\n if (debugMode)\n core.info(`reportPaths: ${reportPaths}`);\n const reportsJsonAsync = getJsonReports(reportPaths, debugMode);\n const changedFiles = yield getChangedFiles(base, head, client, debugMode);\n if (debugMode)\n core.info(`changedFiles: ${(0, util_1.debug)(changedFiles)}`);\n const reportsJson = yield reportsJsonAsync;\n const reports = reportsJson.map(report => report['report']);\n const project = (0, process_1.getProjectCoverage)(reports, changedFiles);\n if (debugMode)\n core.info(`project: ${(0, util_1.debug)(project)}`);\n core.setOutput('coverage-overall', parseFloat(((_d = project.overall.percentage) !== null && _d !== void 0 ? _d : 0).toFixed(2)));\n core.setOutput('coverage-changed-files', parseFloat(project['coverage-changed-files'].toFixed(2)));\n const skip = skipIfNoChanges && project.modules.length === 0;\n if (debugMode)\n core.info(`skip: ${skip}`);\n if (debugMode)\n core.info(`prNumber: ${prNumber}`);\n if (prNumber != null && !skip) {\n const emoji = {\n pass: passEmoji,\n fail: failEmoji,\n };\n yield addComment(prNumber, updateComment, (0, render_1.getTitle)(title), (0, render_1.getPRComment)(project, {\n overall: minCoverageOverall,\n changed: minCoverageChangedFiles,\n }, title, emoji), client, debugMode);\n }\n }\n catch (error) {\n if (error instanceof Error) {\n if (continueOnError) {\n core.error(error);\n }\n else {\n core.setFailed(error);\n }\n }\n }\n });\n}\nexports.action = action;\nfunction getJsonReports(xmlPaths, debugMode) {\n return __awaiter(this, void 0, void 0, function* () {\n const globber = yield glob.create(xmlPaths.join('\\n'));\n const files = yield globber.glob();\n if (debugMode)\n core.info(`Resolved files: ${files}`);\n return Promise.all(files.map((path) => __awaiter(this, void 0, void 0, function* () {\n const reportXml = yield fs.promises.readFile(path.trim(), 'utf-8');\n return yield xml2js_1.default.parseStringPromise(reportXml);\n })));\n });\n}\nfunction getChangedFiles(base, head, client, debugMode) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield client.rest.repos.compareCommits({\n base,\n head,\n owner: github.context.repo.owner,\n repo: github.context.repo.repo,\n });\n const changedFiles = [];\n for (const file of response.data.files) {\n if (debugMode)\n core.info(`file: ${(0, util_1.debug)(file)}`);\n const changedFile = {\n filePath: file.filename,\n url: file.blob_url,\n lines: (0, util_1.getChangedLines)(file.patch),\n };\n changedFiles.push(changedFile);\n }\n return changedFiles;\n });\n}\nfunction addComment(prNumber, update, title, body, client, debugMode) {\n return __awaiter(this, void 0, void 0, function* () {\n let commentUpdated = false;\n if (debugMode)\n core.info(`update: ${update}`);\n if (debugMode)\n core.info(`title: ${title}`);\n if (debugMode)\n core.info(`JaCoCo Comment: ${body}`);\n if (update && title) {\n if (debugMode)\n core.info('Listing all comments');\n const comments = yield client.rest.issues.listComments(Object.assign({ issue_number: prNumber }, github.context.repo));\n const comment = comments.data.find((it) => it.body.startsWith(title));\n if (comment) {\n if (debugMode)\n core.info(`Updating existing comment: id=${comment.id} \\n body=${comment.body}`);\n yield client.rest.issues.updateComment(Object.assign({ comment_id: comment.id, body }, github.context.repo));\n commentUpdated = true;\n }\n }\n if (!commentUpdated) {\n if (debugMode)\n core.info('Creating a new comment');\n yield client.rest.issues.createComment(Object.assign({ issue_number: prNumber, body }, github.context.repo));\n }\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getProjectCoverage = void 0;\nconst util_1 = require(\"./util\");\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction getProjectCoverage(reports, changedFiles) {\n const moduleCoverages = [];\n const modules = getModulesFromReports(reports);\n for (const module of modules) {\n const files = getFileCoverageFromPackages([].concat(...module.packages), changedFiles);\n if (files.length !== 0) {\n const moduleCoverage = getModuleCoverage(module.root);\n const changedMissed = files\n .map(file => file.changed.missed)\n .reduce(sumReducer, 0.0);\n const changedCovered = files\n .map(file => file.changed.covered)\n .reduce(sumReducer, 0.0);\n moduleCoverages.push({\n name: module.name,\n files,\n overall: {\n percentage: moduleCoverage.percentage,\n covered: moduleCoverage.covered,\n missed: moduleCoverage.missed,\n },\n changed: {\n covered: changedCovered,\n missed: changedMissed,\n percentage: calculatePercentage(changedCovered, changedMissed),\n },\n });\n }\n }\n moduleCoverages.sort((a, b) => { var _a, _b; return ((_a = b.overall.percentage) !== null && _a !== void 0 ? _a : 0) - ((_b = a.overall.percentage) !== null && _b !== void 0 ? _b : 0); });\n const totalFiles = moduleCoverages.flatMap(module => {\n return module.files;\n });\n const changedMissed = moduleCoverages\n .map(module => module.changed.missed)\n .reduce(sumReducer, 0.0);\n const changedCovered = moduleCoverages\n .map(module => module.changed.covered)\n .reduce(sumReducer, 0.0);\n const projectCoverage = getOverallProjectCoverage(reports);\n const totalPercentage = getTotalPercentage(totalFiles);\n return {\n modules: moduleCoverages,\n isMultiModule: reports.length > 1 || modules.length > 1,\n overall: {\n covered: projectCoverage.covered,\n missed: projectCoverage.missed,\n percentage: projectCoverage.percentage,\n },\n changed: {\n covered: changedCovered,\n missed: changedMissed,\n percentage: calculatePercentage(changedCovered, changedMissed),\n },\n 'coverage-changed-files': totalPercentage !== null && totalPercentage !== void 0 ? totalPercentage : 100,\n };\n}\nexports.getProjectCoverage = getProjectCoverage;\nfunction sumReducer(total, value) {\n return total + value;\n}\nfunction toFloat(value) {\n return parseFloat(value.toFixed(2));\n}\nfunction getModulesFromReports(reports) {\n const modules = [];\n for (const report of reports) {\n const groupTag = report[util_1.TAG.GROUP];\n if (groupTag) {\n const groups = groupTag.filter((group) => group !== undefined);\n for (const group of groups) {\n const module = getModuleFromParent(group);\n modules.push(module);\n }\n }\n const module = getModuleFromParent(report);\n if (module) {\n modules.push(module);\n }\n }\n return modules;\n}\nfunction getModuleFromParent(parent) {\n const packageTag = parent[util_1.TAG.PACKAGE];\n if (packageTag) {\n const packages = packageTag.filter((pacage) => pacage !== undefined);\n if (packages.length !== 0) {\n return {\n name: parent['$'].name,\n packages,\n root: parent, // TODO just pass array of 'counters'\n };\n }\n }\n return null;\n}\nfunction getFileCoverageFromPackages(packages, files) {\n const resultFiles = [];\n const jacocoFiles = (0, util_1.getFilesWithCoverage)(packages);\n for (const jacocoFile of jacocoFiles) {\n const name = jacocoFile.name;\n const packageName = jacocoFile.packageName;\n const githubFile = files.find(function (f) {\n return f.filePath.endsWith(`${packageName}/${name}`);\n });\n if (githubFile) {\n const instruction = jacocoFile.counters.find(counter => counter.name === 'instruction');\n if (instruction) {\n const missed = instruction.missed;\n const covered = instruction.covered;\n const lines = [];\n for (const lineNumber of githubFile.lines) {\n const jacocoLine = jacocoFile.lines.find(line => line.number === lineNumber);\n if (jacocoLine) {\n lines.push(Object.assign({}, jacocoLine));\n }\n }\n const changedMissed = lines\n .map(line => toFloat(line.instruction.missed))\n .reduce(sumReducer, 0.0);\n const changedCovered = lines\n .map(line => toFloat(line.instruction.covered))\n .reduce(sumReducer, 0.0);\n resultFiles.push({\n name,\n url: githubFile.url,\n overall: {\n missed,\n covered,\n percentage: calculatePercentage(covered, missed),\n },\n changed: {\n missed: changedMissed,\n covered: changedCovered,\n percentage: calculatePercentage(changedCovered, changedMissed),\n },\n lines,\n });\n }\n }\n }\n resultFiles.sort((a, b) => { var _a, _b; return ((_a = b.overall.percentage) !== null && _a !== void 0 ? _a : 0) - ((_b = a.overall.percentage) !== null && _b !== void 0 ? _b : 0); });\n return resultFiles;\n}\nfunction calculatePercentage(covered, missed) {\n const total = covered + missed;\n if (total !== 0) {\n return parseFloat(((covered / total) * 100).toFixed(2));\n }\n else {\n return undefined;\n }\n}\nfunction getTotalPercentage(files) {\n let missed = 0;\n let covered = 0;\n if (files.length !== 0) {\n for (const file of files) {\n missed += file.overall.missed;\n covered += file.overall.covered;\n }\n return parseFloat(((covered / (covered + missed)) * 100).toFixed(2));\n }\n else {\n return null;\n }\n}\nfunction getModuleCoverage(report) {\n const counters = report['counter'];\n return getDetailedCoverage(counters, 'INSTRUCTION');\n}\nfunction getOverallProjectCoverage(reports) {\n const coverages = reports.map(report => getDetailedCoverage(report['counter'], 'INSTRUCTION'));\n const covered = coverages.reduce((acc, coverage) => acc + coverage.covered, 0);\n const missed = coverages.reduce((acc, coverage) => acc + coverage.missed, 0);\n return {\n covered,\n missed,\n percentage: parseFloat(((covered / (covered + missed)) * 100).toFixed(2)),\n };\n}\nfunction getDetailedCoverage(counters, type) {\n const counterTag = counters.find(counter => counter[util_1.TAG.SELF].type === type);\n if (counterTag) {\n const attr = counterTag[util_1.TAG.SELF];\n const missed = parseFloat(attr.missed);\n const covered = parseFloat(attr.covered);\n return {\n missed,\n covered,\n percentage: parseFloat(((covered / (covered + missed)) * 100).toFixed(2)),\n };\n }\n return { missed: 0, covered: 0, percentage: 100 };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTitle = exports.getPRComment = void 0;\nfunction getPRComment(project, minCoverage, title, emoji) {\n const heading = getTitle(title);\n const overallTable = getOverallTable(project, minCoverage, emoji);\n const moduleTable = getModuleTable(project.modules, minCoverage, emoji);\n const filesTable = getFileTable(project, minCoverage, emoji);\n const tables = project.modules.length === 0\n ? '> There is no coverage information present for the Files changed'\n : project.isMultiModule\n ? `${moduleTable}\\n\\n${filesTable}`\n : filesTable;\n return `${heading + overallTable}\\n\\n${tables}`;\n}\nexports.getPRComment = getPRComment;\nfunction getModuleTable(modules, minCoverage, emoji) {\n const tableHeader = '|Module|Coverage||';\n const tableStructure = '|:-|:-|:-:|';\n let table = `${tableHeader}\\n${tableStructure}`;\n for (const module of modules) {\n const coverageDifference = getCoverageDifference(module.overall, module.changed);\n renderRow(module.name, module.overall.percentage, coverageDifference, module.changed.percentage);\n }\n return table;\n function renderRow(name, overallCoverage, coverageDiff, changedCoverage) {\n const status = getStatus(changedCoverage, minCoverage.changed, emoji);\n let coveragePercentage = `${formatCoverage(overallCoverage)}`;\n if (shouldShow(coverageDiff)) {\n coveragePercentage += ` **\\`${formatCoverage(coverageDiff)}\\`**`;\n }\n const row = `|${name}|${coveragePercentage}|${status}|`;\n table = `${table}\\n${row}`;\n }\n}\nfunction getFileTable(project, minCoverage, emoji) {\n const tableHeader = project.isMultiModule\n ? '|Module|File|Coverage||'\n : '|File|Coverage||';\n const tableStructure = project.isMultiModule\n ? '|:-|:-|:-|:-:|'\n : '|:-|:-|:-:|';\n let table = `${tableHeader}\\n${tableStructure}`;\n for (const module of project.modules) {\n for (let index = 0; index < module.files.length; index++) {\n const file = module.files[index];\n let moduleName = module.name;\n if (index !== 0) {\n moduleName = '';\n }\n const coverageDifference = getCoverageDifference(file.overall, file.changed);\n renderRow(moduleName, `[${file.name}](${file.url})`, file.overall.percentage, coverageDifference, file.changed.percentage, project.isMultiModule);\n }\n }\n return project.isMultiModule\n ? `
\\nFiles\\n\\n${table}\\n\\n
`\n : table;\n function renderRow(moduleName, fileName, overallCoverage, coverageDiff, changedCoverage, isMultiModule) {\n const status = getStatus(changedCoverage, minCoverage.changed, emoji);\n let coveragePercentage = `${formatCoverage(overallCoverage)}`;\n if (shouldShow(coverageDiff)) {\n coveragePercentage += ` **\\`${formatCoverage(coverageDiff)}\\`**`;\n }\n const row = isMultiModule\n ? `|${moduleName}|${fileName}|${coveragePercentage}|${status}|`\n : `|${fileName}|${coveragePercentage}|${status}|`;\n table = `${table}\\n${row}`;\n }\n}\nfunction getCoverageDifference(overall, changed) {\n const totalInstructions = overall.covered + overall.missed;\n const missed = changed.missed;\n return -(missed / totalInstructions) * 100;\n}\nfunction getOverallTable(project, minCoverage, emoji) {\n const overallStatus = getStatus(project.overall.percentage, minCoverage.overall, emoji);\n const coverageDifference = getCoverageDifference(project.overall, project.changed);\n let coveragePercentage = `${formatCoverage(project.overall.percentage)}`;\n if (shouldShow(coverageDifference)) {\n coveragePercentage += ` **\\`${formatCoverage(coverageDifference)}\\`**`;\n }\n const tableHeader = `|Overall Project|${coveragePercentage}|${overallStatus}|`;\n const tableStructure = '|:-|:-|:-:|';\n const missedLines = project.changed.missed;\n const coveredLines = project.changed.covered;\n const totalChangedLines = missedLines + coveredLines;\n let changedCoverageRow = '';\n if (totalChangedLines !== 0) {\n const changedLinesPercentage = (coveredLines / totalChangedLines) * 100;\n const filesChangedStatus = getStatus(changedLinesPercentage, minCoverage.changed, emoji);\n changedCoverageRow =\n '\\n' +\n `|Files changed|${formatCoverage(changedLinesPercentage)}|${filesChangedStatus}|` +\n '\\n
';\n }\n return `${tableHeader}\\n${tableStructure}${changedCoverageRow}`;\n}\nfunction round(value) {\n return Math.round((value + Number.EPSILON) * 100) / 100;\n}\nfunction shouldShow(value) {\n const rounded = Math.abs(round(value));\n return rounded !== 0 && rounded !== 100;\n}\nfunction getTitle(title) {\n if (title != null && title.trim().length > 0) {\n const trimmed = title.trim();\n return trimmed.startsWith('#') ? `${trimmed}\\n` : `### ${trimmed}\\n`;\n }\n else {\n return '';\n }\n}\nexports.getTitle = getTitle;\nfunction getStatus(coverage, minCoverage, emoji) {\n let status = emoji.pass;\n if (coverage != null && coverage < minCoverage) {\n status = emoji.fail;\n }\n return status;\n}\nfunction formatCoverage(coverage) {\n if (coverage == null)\n return 'NaN%';\n return `${toFloat(coverage)}%`;\n}\nfunction toFloat(value) {\n return parseFloat(value.toFixed(2));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFilesWithCoverage = exports.getChangedLines = exports.debug = exports.TAG = void 0;\nexports.TAG = {\n SELF: '$',\n SOURCE_FILE: 'sourcefile',\n LINE: 'line',\n COUNTER: 'counter',\n PACKAGE: 'package',\n GROUP: 'group',\n};\nfunction debug(obj) {\n return JSON.stringify(obj, null, 4);\n}\nexports.debug = debug;\nconst pattern = /^@@ -([0-9]*),?\\S* \\+([0-9]*),?/;\nfunction getChangedLines(patch) {\n const lineNumbers = new Set();\n if (patch) {\n const lines = patch.split('\\n');\n const groups = getDiffGroups(lines);\n for (const group of groups) {\n const firstLine = group.shift();\n if (firstLine) {\n const diffGroup = firstLine.match(pattern);\n if (diffGroup) {\n let bX = parseInt(diffGroup[2]);\n for (const line of group) {\n bX++;\n if (line.startsWith('+')) {\n lineNumbers.add(bX - 1);\n }\n else if (line.startsWith('-')) {\n bX--;\n }\n }\n }\n }\n }\n }\n return [...lineNumbers];\n}\nexports.getChangedLines = getChangedLines;\nfunction getDiffGroups(lines) {\n const groups = [];\n let group = [];\n for (const line of lines) {\n if (line.startsWith('@@')) {\n group = [];\n groups.push(group);\n }\n group.push(line);\n }\n return groups;\n}\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction getFilesWithCoverage(packages) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const files = [];\n for (const item of packages) {\n const packageName = item[exports.TAG.SELF].name;\n const sourceFiles = (_a = item[exports.TAG.SOURCE_FILE]) !== null && _a !== void 0 ? _a : [];\n for (const sourceFile of sourceFiles) {\n const sourceFileName = sourceFile[exports.TAG.SELF].name;\n const file = {\n name: sourceFileName,\n packageName,\n lines: [],\n counters: [],\n };\n const counters = (_b = sourceFile[exports.TAG.COUNTER]) !== null && _b !== void 0 ? _b : [];\n for (const counter of counters) {\n const counterSelf = counter[exports.TAG.SELF];\n const type = counterSelf.type;\n file.counters.push({\n name: type.toLowerCase(),\n missed: (_c = parseInt(counterSelf.missed)) !== null && _c !== void 0 ? _c : 0,\n covered: (_d = parseInt(counterSelf.covered)) !== null && _d !== void 0 ? _d : 0,\n });\n }\n const lines = (_e = sourceFile[exports.TAG.LINE]) !== null && _e !== void 0 ? _e : [];\n for (const line of lines) {\n const lineSelf = line[exports.TAG.SELF];\n file.lines.push({\n number: (_f = parseInt(lineSelf.nr)) !== null && _f !== void 0 ? _f : 0,\n instruction: {\n missed: (_g = parseInt(lineSelf.mi)) !== null && _g !== void 0 ? _g : 0,\n covered: (_h = parseInt(lineSelf.ci)) !== null && _h !== void 0 ? _h : 0,\n },\n branch: {\n missed: (_j = parseInt(lineSelf.mb)) !== null && _j !== void 0 ? _j : 0,\n covered: (_k = parseInt(lineSelf.cb)) !== null && _k !== void 0 ? _k : 0,\n },\n });\n }\n files.push(file);\n }\n }\n return files;\n}\nexports.getFilesWithCoverage = getFilesWithCoverage;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.issue = exports.issueCommand = void 0;\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Commands\n *\n * Command Format:\n * ::name key=value,key=value::message\n *\n * Examples:\n * ::warning::This is the message\n * ::set-env name=MY_VAR::some value\n */\nfunction issueCommand(command, properties, message) {\n const cmd = new Command(command, properties, message);\n process.stdout.write(cmd.toString() + os.EOL);\n}\nexports.issueCommand = issueCommand;\nfunction issue(name, message = '') {\n issueCommand(name, {}, message);\n}\nexports.issue = issue;\nconst CMD_STRING = '::';\nclass Command {\n constructor(command, properties, message) {\n if (!command) {\n command = 'missing.command';\n }\n this.command = command;\n this.properties = properties;\n this.message = message;\n }\n toString() {\n let cmdStr = CMD_STRING + this.command;\n if (this.properties && Object.keys(this.properties).length > 0) {\n cmdStr += ' ';\n let first = true;\n for (const key in this.properties) {\n if (this.properties.hasOwnProperty(key)) {\n const val = this.properties[key];\n if (val) {\n if (first) {\n first = false;\n }\n else {\n cmdStr += ',';\n }\n cmdStr += `${key}=${escapeProperty(val)}`;\n }\n }\n }\n }\n cmdStr += `${CMD_STRING}${escapeData(this.message)}`;\n return cmdStr;\n }\n}\nfunction escapeData(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A');\n}\nfunction escapeProperty(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A')\n .replace(/:/g, '%3A')\n .replace(/,/g, '%2C');\n}\n//# sourceMappingURL=command.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;\nconst command_1 = require(\"./command\");\nconst file_command_1 = require(\"./file-command\");\nconst utils_1 = require(\"./utils\");\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\nconst oidc_utils_1 = require(\"./oidc-utils\");\n/**\n * The code to exit an action\n */\nvar ExitCode;\n(function (ExitCode) {\n /**\n * A code indicating that the action was successful\n */\n ExitCode[ExitCode[\"Success\"] = 0] = \"Success\";\n /**\n * A code indicating that the action was a failure\n */\n ExitCode[ExitCode[\"Failure\"] = 1] = \"Failure\";\n})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));\n//-----------------------------------------------------------------------\n// Variables\n//-----------------------------------------------------------------------\n/**\n * Sets env variable for this action and future actions in the job\n * @param name the name of the variable to set\n * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction exportVariable(name, val) {\n const convertedVal = utils_1.toCommandValue(val);\n process.env[name] = convertedVal;\n const filePath = process.env['GITHUB_ENV'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val));\n }\n command_1.issueCommand('set-env', { name }, convertedVal);\n}\nexports.exportVariable = exportVariable;\n/**\n * Registers a secret which will get masked from logs\n * @param secret value of the secret\n */\nfunction setSecret(secret) {\n command_1.issueCommand('add-mask', {}, secret);\n}\nexports.setSecret = setSecret;\n/**\n * Prepends inputPath to the PATH (for this action and future actions)\n * @param inputPath\n */\nfunction addPath(inputPath) {\n const filePath = process.env['GITHUB_PATH'] || '';\n if (filePath) {\n file_command_1.issueFileCommand('PATH', inputPath);\n }\n else {\n command_1.issueCommand('add-path', {}, inputPath);\n }\n process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;\n}\nexports.addPath = addPath;\n/**\n * Gets the value of an input.\n * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.\n * Returns an empty string if the value is not defined.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string\n */\nfunction getInput(name, options) {\n const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';\n if (options && options.required && !val) {\n throw new Error(`Input required and not supplied: ${name}`);\n }\n if (options && options.trimWhitespace === false) {\n return val;\n }\n return val.trim();\n}\nexports.getInput = getInput;\n/**\n * Gets the values of an multiline input. Each value is also trimmed.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string[]\n *\n */\nfunction getMultilineInput(name, options) {\n const inputs = getInput(name, options)\n .split('\\n')\n .filter(x => x !== '');\n if (options && options.trimWhitespace === false) {\n return inputs;\n }\n return inputs.map(input => input.trim());\n}\nexports.getMultilineInput = getMultilineInput;\n/**\n * Gets the input value of the boolean type in the YAML 1.2 \"core schema\" specification.\n * Support boolean input list: `true | True | TRUE | false | False | FALSE` .\n * The return value is also in boolean type.\n * ref: https://yaml.org/spec/1.2/spec.html#id2804923\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns boolean\n */\nfunction getBooleanInput(name, options) {\n const trueValue = ['true', 'True', 'TRUE'];\n const falseValue = ['false', 'False', 'FALSE'];\n const val = getInput(name, options);\n if (trueValue.includes(val))\n return true;\n if (falseValue.includes(val))\n return false;\n throw new TypeError(`Input does not meet YAML 1.2 \"Core Schema\" specification: ${name}\\n` +\n `Support boolean input list: \\`true | True | TRUE | false | False | FALSE\\``);\n}\nexports.getBooleanInput = getBooleanInput;\n/**\n * Sets the value of an output.\n *\n * @param name name of the output to set\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setOutput(name, value) {\n const filePath = process.env['GITHUB_OUTPUT'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value));\n }\n process.stdout.write(os.EOL);\n command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value));\n}\nexports.setOutput = setOutput;\n/**\n * Enables or disables the echoing of commands into stdout for the rest of the step.\n * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.\n *\n */\nfunction setCommandEcho(enabled) {\n command_1.issue('echo', enabled ? 'on' : 'off');\n}\nexports.setCommandEcho = setCommandEcho;\n//-----------------------------------------------------------------------\n// Results\n//-----------------------------------------------------------------------\n/**\n * Sets the action status to failed.\n * When the action exits it will be with an exit code of 1\n * @param message add error issue message\n */\nfunction setFailed(message) {\n process.exitCode = ExitCode.Failure;\n error(message);\n}\nexports.setFailed = setFailed;\n//-----------------------------------------------------------------------\n// Logging Commands\n//-----------------------------------------------------------------------\n/**\n * Gets whether Actions Step Debug is on or not\n */\nfunction isDebug() {\n return process.env['RUNNER_DEBUG'] === '1';\n}\nexports.isDebug = isDebug;\n/**\n * Writes debug message to user log\n * @param message debug message\n */\nfunction debug(message) {\n command_1.issueCommand('debug', {}, message);\n}\nexports.debug = debug;\n/**\n * Adds an error issue\n * @param message error issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction error(message, properties = {}) {\n command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.error = error;\n/**\n * Adds a warning issue\n * @param message warning issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction warning(message, properties = {}) {\n command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.warning = warning;\n/**\n * Adds a notice issue\n * @param message notice issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction notice(message, properties = {}) {\n command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.notice = notice;\n/**\n * Writes info to log with console.log.\n * @param message info message\n */\nfunction info(message) {\n process.stdout.write(message + os.EOL);\n}\nexports.info = info;\n/**\n * Begin an output group.\n *\n * Output until the next `groupEnd` will be foldable in this group\n *\n * @param name The name of the output group\n */\nfunction startGroup(name) {\n command_1.issue('group', name);\n}\nexports.startGroup = startGroup;\n/**\n * End an output group.\n */\nfunction endGroup() {\n command_1.issue('endgroup');\n}\nexports.endGroup = endGroup;\n/**\n * Wrap an asynchronous function call in a group.\n *\n * Returns the same type as the function itself.\n *\n * @param name The name of the group\n * @param fn The function to wrap in the group\n */\nfunction group(name, fn) {\n return __awaiter(this, void 0, void 0, function* () {\n startGroup(name);\n let result;\n try {\n result = yield fn();\n }\n finally {\n endGroup();\n }\n return result;\n });\n}\nexports.group = group;\n//-----------------------------------------------------------------------\n// Wrapper action state\n//-----------------------------------------------------------------------\n/**\n * Saves state for current action, the state can only be retrieved by this action's post job execution.\n *\n * @param name name of the state to store\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction saveState(name, value) {\n const filePath = process.env['GITHUB_STATE'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value));\n }\n command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value));\n}\nexports.saveState = saveState;\n/**\n * Gets the value of an state set by this action's main execution.\n *\n * @param name name of the state to get\n * @returns string\n */\nfunction getState(name) {\n return process.env[`STATE_${name}`] || '';\n}\nexports.getState = getState;\nfunction getIDToken(aud) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield oidc_utils_1.OidcClient.getIDToken(aud);\n });\n}\nexports.getIDToken = getIDToken;\n/**\n * Summary exports\n */\nvar summary_1 = require(\"./summary\");\nObject.defineProperty(exports, \"summary\", { enumerable: true, get: function () { return summary_1.summary; } });\n/**\n * @deprecated use core.summary\n */\nvar summary_2 = require(\"./summary\");\nObject.defineProperty(exports, \"markdownSummary\", { enumerable: true, get: function () { return summary_2.markdownSummary; } });\n/**\n * Path exports\n */\nvar path_utils_1 = require(\"./path-utils\");\nObject.defineProperty(exports, \"toPosixPath\", { enumerable: true, get: function () { return path_utils_1.toPosixPath; } });\nObject.defineProperty(exports, \"toWin32Path\", { enumerable: true, get: function () { return path_utils_1.toWin32Path; } });\nObject.defineProperty(exports, \"toPlatformPath\", { enumerable: true, get: function () { return path_utils_1.toPlatformPath; } });\n//# sourceMappingURL=core.js.map","\"use strict\";\n// For internal use, subject to change.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.prepareKeyValueMessage = exports.issueFileCommand = void 0;\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fs = __importStar(require(\"fs\"));\nconst os = __importStar(require(\"os\"));\nconst uuid_1 = require(\"uuid\");\nconst utils_1 = require(\"./utils\");\nfunction issueFileCommand(command, message) {\n const filePath = process.env[`GITHUB_${command}`];\n if (!filePath) {\n throw new Error(`Unable to find environment variable for file command ${command}`);\n }\n if (!fs.existsSync(filePath)) {\n throw new Error(`Missing file at path: ${filePath}`);\n }\n fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {\n encoding: 'utf8'\n });\n}\nexports.issueFileCommand = issueFileCommand;\nfunction prepareKeyValueMessage(key, value) {\n const delimiter = `ghadelimiter_${uuid_1.v4()}`;\n const convertedValue = utils_1.toCommandValue(value);\n // These should realistically never happen, but just in case someone finds a\n // way to exploit uuid generation let's not allow keys or values that contain\n // the delimiter.\n if (key.includes(delimiter)) {\n throw new Error(`Unexpected input: name should not contain the delimiter \"${delimiter}\"`);\n }\n if (convertedValue.includes(delimiter)) {\n throw new Error(`Unexpected input: value should not contain the delimiter \"${delimiter}\"`);\n }\n return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`;\n}\nexports.prepareKeyValueMessage = prepareKeyValueMessage;\n//# sourceMappingURL=file-command.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OidcClient = void 0;\nconst http_client_1 = require(\"@actions/http-client\");\nconst auth_1 = require(\"@actions/http-client/lib/auth\");\nconst core_1 = require(\"./core\");\nclass OidcClient {\n static createHttpClient(allowRetry = true, maxRetry = 10) {\n const requestOptions = {\n allowRetries: allowRetry,\n maxRetries: maxRetry\n };\n return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);\n }\n static getRequestToken() {\n const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];\n if (!token) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');\n }\n return token;\n }\n static getIDTokenUrl() {\n const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];\n if (!runtimeUrl) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');\n }\n return runtimeUrl;\n }\n static getCall(id_token_url) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const httpclient = OidcClient.createHttpClient();\n const res = yield httpclient\n .getJson(id_token_url)\n .catch(error => {\n throw new Error(`Failed to get ID Token. \\n \n Error Code : ${error.statusCode}\\n \n Error Message: ${error.result.message}`);\n });\n const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;\n if (!id_token) {\n throw new Error('Response json body do not have ID Token field');\n }\n return id_token;\n });\n }\n static getIDToken(audience) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n // New ID Token is requested from action service\n let id_token_url = OidcClient.getIDTokenUrl();\n if (audience) {\n const encodedAudience = encodeURIComponent(audience);\n id_token_url = `${id_token_url}&audience=${encodedAudience}`;\n }\n core_1.debug(`ID token url is ${id_token_url}`);\n const id_token = yield OidcClient.getCall(id_token_url);\n core_1.setSecret(id_token);\n return id_token;\n }\n catch (error) {\n throw new Error(`Error message: ${error.message}`);\n }\n });\n }\n}\nexports.OidcClient = OidcClient;\n//# sourceMappingURL=oidc-utils.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;\nconst path = __importStar(require(\"path\"));\n/**\n * toPosixPath converts the given path to the posix form. On Windows, \\\\ will be\n * replaced with /.\n *\n * @param pth. Path to transform.\n * @return string Posix path.\n */\nfunction toPosixPath(pth) {\n return pth.replace(/[\\\\]/g, '/');\n}\nexports.toPosixPath = toPosixPath;\n/**\n * toWin32Path converts the given path to the win32 form. On Linux, / will be\n * replaced with \\\\.\n *\n * @param pth. Path to transform.\n * @return string Win32 path.\n */\nfunction toWin32Path(pth) {\n return pth.replace(/[/]/g, '\\\\');\n}\nexports.toWin32Path = toWin32Path;\n/**\n * toPlatformPath converts the given path to a platform-specific path. It does\n * this by replacing instances of / and \\ with the platform-specific path\n * separator.\n *\n * @param pth The path to platformize.\n * @return string The platform-specific path.\n */\nfunction toPlatformPath(pth) {\n return pth.replace(/[/\\\\]/g, path.sep);\n}\nexports.toPlatformPath = toPlatformPath;\n//# sourceMappingURL=path-utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;\nconst os_1 = require(\"os\");\nconst fs_1 = require(\"fs\");\nconst { access, appendFile, writeFile } = fs_1.promises;\nexports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY';\nexports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary';\nclass Summary {\n constructor() {\n this._buffer = '';\n }\n /**\n * Finds the summary file path from the environment, rejects if env var is not found or file does not exist\n * Also checks r/w permissions.\n *\n * @returns step summary file path\n */\n filePath() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._filePath) {\n return this._filePath;\n }\n const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];\n if (!pathFromEnv) {\n throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);\n }\n try {\n yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);\n }\n catch (_a) {\n throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);\n }\n this._filePath = pathFromEnv;\n return this._filePath;\n });\n }\n /**\n * Wraps content in an HTML tag, adding any HTML attributes\n *\n * @param {string} tag HTML tag to wrap\n * @param {string | null} content content within the tag\n * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add\n *\n * @returns {string} content wrapped in HTML element\n */\n wrap(tag, content, attrs = {}) {\n const htmlAttrs = Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${value}\"`)\n .join('');\n if (!content) {\n return `<${tag}${htmlAttrs}>`;\n }\n return `<${tag}${htmlAttrs}>${content}`;\n }\n /**\n * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default.\n *\n * @param {SummaryWriteOptions} [options] (optional) options for write operation\n *\n * @returns {Promise} summary instance\n */\n write(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite);\n const filePath = yield this.filePath();\n const writeFunc = overwrite ? writeFile : appendFile;\n yield writeFunc(filePath, this._buffer, { encoding: 'utf8' });\n return this.emptyBuffer();\n });\n }\n /**\n * Clears the summary buffer and wipes the summary file\n *\n * @returns {Summary} summary instance\n */\n clear() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.emptyBuffer().write({ overwrite: true });\n });\n }\n /**\n * Returns the current summary buffer as a string\n *\n * @returns {string} string of summary buffer\n */\n stringify() {\n return this._buffer;\n }\n /**\n * If the summary buffer is empty\n *\n * @returns {boolen} true if the buffer is empty\n */\n isEmptyBuffer() {\n return this._buffer.length === 0;\n }\n /**\n * Resets the summary buffer without writing to summary file\n *\n * @returns {Summary} summary instance\n */\n emptyBuffer() {\n this._buffer = '';\n return this;\n }\n /**\n * Adds raw text to the summary buffer\n *\n * @param {string} text content to add\n * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)\n *\n * @returns {Summary} summary instance\n */\n addRaw(text, addEOL = false) {\n this._buffer += text;\n return addEOL ? this.addEOL() : this;\n }\n /**\n * Adds the operating system-specific end-of-line marker to the buffer\n *\n * @returns {Summary} summary instance\n */\n addEOL() {\n return this.addRaw(os_1.EOL);\n }\n /**\n * Adds an HTML codeblock to the summary buffer\n *\n * @param {string} code content to render within fenced code block\n * @param {string} lang (optional) language to syntax highlight code\n *\n * @returns {Summary} summary instance\n */\n addCodeBlock(code, lang) {\n const attrs = Object.assign({}, (lang && { lang }));\n const element = this.wrap('pre', this.wrap('code', code), attrs);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML list to the summary buffer\n *\n * @param {string[]} items list of items to render\n * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false)\n *\n * @returns {Summary} summary instance\n */\n addList(items, ordered = false) {\n const tag = ordered ? 'ol' : 'ul';\n const listItems = items.map(item => this.wrap('li', item)).join('');\n const element = this.wrap(tag, listItems);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML table to the summary buffer\n *\n * @param {SummaryTableCell[]} rows table rows\n *\n * @returns {Summary} summary instance\n */\n addTable(rows) {\n const tableBody = rows\n .map(row => {\n const cells = row\n .map(cell => {\n if (typeof cell === 'string') {\n return this.wrap('td', cell);\n }\n const { header, data, colspan, rowspan } = cell;\n const tag = header ? 'th' : 'td';\n const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan }));\n return this.wrap(tag, data, attrs);\n })\n .join('');\n return this.wrap('tr', cells);\n })\n .join('');\n const element = this.wrap('table', tableBody);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds a collapsable HTML details element to the summary buffer\n *\n * @param {string} label text for the closed state\n * @param {string} content collapsable content\n *\n * @returns {Summary} summary instance\n */\n addDetails(label, content) {\n const element = this.wrap('details', this.wrap('summary', label) + content);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML image tag to the summary buffer\n *\n * @param {string} src path to the image you to embed\n * @param {string} alt text description of the image\n * @param {SummaryImageOptions} options (optional) addition image attributes\n *\n * @returns {Summary} summary instance\n */\n addImage(src, alt, options) {\n const { width, height } = options || {};\n const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height }));\n const element = this.wrap('img', null, Object.assign({ src, alt }, attrs));\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML section heading element\n *\n * @param {string} text heading text\n * @param {number | string} [level=1] (optional) the heading level, default: 1\n *\n * @returns {Summary} summary instance\n */\n addHeading(text, level) {\n const tag = `h${level}`;\n const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)\n ? tag\n : 'h1';\n const element = this.wrap(allowedTag, text);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML thematic break (
) to the summary buffer\n *\n * @returns {Summary} summary instance\n */\n addSeparator() {\n const element = this.wrap('hr', null);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML line break (
) to the summary buffer\n *\n * @returns {Summary} summary instance\n */\n addBreak() {\n const element = this.wrap('br', null);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML blockquote to the summary buffer\n *\n * @param {string} text quote text\n * @param {string} cite (optional) citation url\n *\n * @returns {Summary} summary instance\n */\n addQuote(text, cite) {\n const attrs = Object.assign({}, (cite && { cite }));\n const element = this.wrap('blockquote', text, attrs);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML anchor tag to the summary buffer\n *\n * @param {string} text link text/content\n * @param {string} href hyperlink\n *\n * @returns {Summary} summary instance\n */\n addLink(text, href) {\n const element = this.wrap('a', text, { href });\n return this.addRaw(element).addEOL();\n }\n}\nconst _summary = new Summary();\n/**\n * @deprecated use `core.summary`\n */\nexports.markdownSummary = _summary;\nexports.summary = _summary;\n//# sourceMappingURL=summary.js.map","\"use strict\";\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCommandProperties = exports.toCommandValue = void 0;\n/**\n * Sanitizes an input into a string so it can be passed into issueCommand safely\n * @param input input to sanitize into a string\n */\nfunction toCommandValue(input) {\n if (input === null || input === undefined) {\n return '';\n }\n else if (typeof input === 'string' || input instanceof String) {\n return input;\n }\n return JSON.stringify(input);\n}\nexports.toCommandValue = toCommandValue;\n/**\n *\n * @param annotationProperties\n * @returns The command properties to send with the actual annotation command\n * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646\n */\nfunction toCommandProperties(annotationProperties) {\n if (!Object.keys(annotationProperties).length) {\n return {};\n }\n return {\n title: annotationProperties.title,\n file: annotationProperties.file,\n line: annotationProperties.startLine,\n endLine: annotationProperties.endLine,\n col: annotationProperties.startColumn,\n endColumn: annotationProperties.endColumn\n };\n}\nexports.toCommandProperties = toCommandProperties;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Context = void 0;\nconst fs_1 = require(\"fs\");\nconst os_1 = require(\"os\");\nclass Context {\n /**\n * Hydrate the context from the environment\n */\n constructor() {\n var _a, _b, _c;\n this.payload = {};\n if (process.env.GITHUB_EVENT_PATH) {\n if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {\n this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));\n }\n else {\n const path = process.env.GITHUB_EVENT_PATH;\n process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);\n }\n }\n this.eventName = process.env.GITHUB_EVENT_NAME;\n this.sha = process.env.GITHUB_SHA;\n this.ref = process.env.GITHUB_REF;\n this.workflow = process.env.GITHUB_WORKFLOW;\n this.action = process.env.GITHUB_ACTION;\n this.actor = process.env.GITHUB_ACTOR;\n this.job = process.env.GITHUB_JOB;\n this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10);\n this.runId = parseInt(process.env.GITHUB_RUN_ID, 10);\n this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`;\n this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`;\n this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`;\n }\n get issue() {\n const payload = this.payload;\n return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });\n }\n get repo() {\n if (process.env.GITHUB_REPOSITORY) {\n const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');\n return { owner, repo };\n }\n if (this.payload.repository) {\n return {\n owner: this.payload.repository.owner.login,\n repo: this.payload.repository.name\n };\n }\n throw new Error(\"context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'\");\n }\n}\nexports.Context = Context;\n//# sourceMappingURL=context.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOctokit = exports.context = void 0;\nconst Context = __importStar(require(\"./context\"));\nconst utils_1 = require(\"./utils\");\nexports.context = new Context.Context();\n/**\n * Returns a hydrated octokit ready to use for GitHub Actions\n *\n * @param token the repo PAT or GITHUB_TOKEN\n * @param options other options to set\n */\nfunction getOctokit(token, options, ...additionalPlugins) {\n const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins);\n return new GitHubWithPlugins(utils_1.getOctokitOptions(token, options));\n}\nexports.getOctokit = getOctokit;\n//# sourceMappingURL=github.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0;\nconst httpClient = __importStar(require(\"@actions/http-client\"));\nfunction getAuthString(token, options) {\n if (!token && !options.auth) {\n throw new Error('Parameter token or opts.auth is required');\n }\n else if (token && options.auth) {\n throw new Error('Parameters token and opts.auth may not both be specified');\n }\n return typeof options.auth === 'string' ? options.auth : `token ${token}`;\n}\nexports.getAuthString = getAuthString;\nfunction getProxyAgent(destinationUrl) {\n const hc = new httpClient.HttpClient();\n return hc.getAgent(destinationUrl);\n}\nexports.getProxyAgent = getProxyAgent;\nfunction getApiBaseUrl() {\n return process.env['GITHUB_API_URL'] || 'https://api.github.com';\n}\nexports.getApiBaseUrl = getApiBaseUrl;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = void 0;\nconst Context = __importStar(require(\"./context\"));\nconst Utils = __importStar(require(\"./internal/utils\"));\n// octokit + plugins\nconst core_1 = require(\"@octokit/core\");\nconst plugin_rest_endpoint_methods_1 = require(\"@octokit/plugin-rest-endpoint-methods\");\nconst plugin_paginate_rest_1 = require(\"@octokit/plugin-paginate-rest\");\nexports.context = new Context.Context();\nconst baseUrl = Utils.getApiBaseUrl();\nexports.defaults = {\n baseUrl,\n request: {\n agent: Utils.getProxyAgent(baseUrl)\n }\n};\nexports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults);\n/**\n * Convience function to correctly format Octokit Options to pass into the constructor.\n *\n * @param token the repo PAT or GITHUB_TOKEN\n * @param options other options to set\n */\nfunction getOctokitOptions(token, options) {\n const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller\n // Auth\n const auth = Utils.getAuthString(token, opts);\n if (auth) {\n opts.auth = auth;\n }\n return opts;\n}\nexports.getOctokitOptions = getOctokitOptions;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hashFiles = exports.create = void 0;\nconst internal_globber_1 = require(\"./internal-globber\");\nconst internal_hash_files_1 = require(\"./internal-hash-files\");\n/**\n * Constructs a globber\n *\n * @param patterns Patterns separated by newlines\n * @param options Glob options\n */\nfunction create(patterns, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield internal_globber_1.DefaultGlobber.create(patterns, options);\n });\n}\nexports.create = create;\n/**\n * Computes the sha256 hash of a glob\n *\n * @param patterns Patterns separated by newlines\n * @param currentWorkspace Workspace used when matching files\n * @param options Glob options\n * @param verbose Enables verbose logging\n */\nfunction hashFiles(patterns, currentWorkspace = '', options, verbose = false) {\n return __awaiter(this, void 0, void 0, function* () {\n let followSymbolicLinks = true;\n if (options && typeof options.followSymbolicLinks === 'boolean') {\n followSymbolicLinks = options.followSymbolicLinks;\n }\n const globber = yield create(patterns, { followSymbolicLinks });\n return internal_hash_files_1.hashFiles(globber, currentWorkspace, verbose);\n });\n}\nexports.hashFiles = hashFiles;\n//# sourceMappingURL=glob.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOptions = void 0;\nconst core = __importStar(require(\"@actions/core\"));\n/**\n * Returns a copy with defaults filled in.\n */\nfunction getOptions(copy) {\n const result = {\n followSymbolicLinks: true,\n implicitDescendants: true,\n matchDirectories: true,\n omitBrokenSymbolicLinks: true\n };\n if (copy) {\n if (typeof copy.followSymbolicLinks === 'boolean') {\n result.followSymbolicLinks = copy.followSymbolicLinks;\n core.debug(`followSymbolicLinks '${result.followSymbolicLinks}'`);\n }\n if (typeof copy.implicitDescendants === 'boolean') {\n result.implicitDescendants = copy.implicitDescendants;\n core.debug(`implicitDescendants '${result.implicitDescendants}'`);\n }\n if (typeof copy.matchDirectories === 'boolean') {\n result.matchDirectories = copy.matchDirectories;\n core.debug(`matchDirectories '${result.matchDirectories}'`);\n }\n if (typeof copy.omitBrokenSymbolicLinks === 'boolean') {\n result.omitBrokenSymbolicLinks = copy.omitBrokenSymbolicLinks;\n core.debug(`omitBrokenSymbolicLinks '${result.omitBrokenSymbolicLinks}'`);\n }\n }\n return result;\n}\nexports.getOptions = getOptions;\n//# sourceMappingURL=internal-glob-options-helper.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nvar __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\nvar __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultGlobber = void 0;\nconst core = __importStar(require(\"@actions/core\"));\nconst fs = __importStar(require(\"fs\"));\nconst globOptionsHelper = __importStar(require(\"./internal-glob-options-helper\"));\nconst path = __importStar(require(\"path\"));\nconst patternHelper = __importStar(require(\"./internal-pattern-helper\"));\nconst internal_match_kind_1 = require(\"./internal-match-kind\");\nconst internal_pattern_1 = require(\"./internal-pattern\");\nconst internal_search_state_1 = require(\"./internal-search-state\");\nconst IS_WINDOWS = process.platform === 'win32';\nclass DefaultGlobber {\n constructor(options) {\n this.patterns = [];\n this.searchPaths = [];\n this.options = globOptionsHelper.getOptions(options);\n }\n getSearchPaths() {\n // Return a copy\n return this.searchPaths.slice();\n }\n glob() {\n var e_1, _a;\n return __awaiter(this, void 0, void 0, function* () {\n const result = [];\n try {\n for (var _b = __asyncValues(this.globGenerator()), _c; _c = yield _b.next(), !_c.done;) {\n const itemPath = _c.value;\n result.push(itemPath);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return result;\n });\n }\n globGenerator() {\n return __asyncGenerator(this, arguments, function* globGenerator_1() {\n // Fill in defaults options\n const options = globOptionsHelper.getOptions(this.options);\n // Implicit descendants?\n const patterns = [];\n for (const pattern of this.patterns) {\n patterns.push(pattern);\n if (options.implicitDescendants &&\n (pattern.trailingSeparator ||\n pattern.segments[pattern.segments.length - 1] !== '**')) {\n patterns.push(new internal_pattern_1.Pattern(pattern.negate, true, pattern.segments.concat('**')));\n }\n }\n // Push the search paths\n const stack = [];\n for (const searchPath of patternHelper.getSearchPaths(patterns)) {\n core.debug(`Search path '${searchPath}'`);\n // Exists?\n try {\n // Intentionally using lstat. Detection for broken symlink\n // will be performed later (if following symlinks).\n yield __await(fs.promises.lstat(searchPath));\n }\n catch (err) {\n if (err.code === 'ENOENT') {\n continue;\n }\n throw err;\n }\n stack.unshift(new internal_search_state_1.SearchState(searchPath, 1));\n }\n // Search\n const traversalChain = []; // used to detect cycles\n while (stack.length) {\n // Pop\n const item = stack.pop();\n // Match?\n const match = patternHelper.match(patterns, item.path);\n const partialMatch = !!match || patternHelper.partialMatch(patterns, item.path);\n if (!match && !partialMatch) {\n continue;\n }\n // Stat\n const stats = yield __await(DefaultGlobber.stat(item, options, traversalChain)\n // Broken symlink, or symlink cycle detected, or no longer exists\n );\n // Broken symlink, or symlink cycle detected, or no longer exists\n if (!stats) {\n continue;\n }\n // Directory\n if (stats.isDirectory()) {\n // Matched\n if (match & internal_match_kind_1.MatchKind.Directory && options.matchDirectories) {\n yield yield __await(item.path);\n }\n // Descend?\n else if (!partialMatch) {\n continue;\n }\n // Push the child items in reverse\n const childLevel = item.level + 1;\n const childItems = (yield __await(fs.promises.readdir(item.path))).map(x => new internal_search_state_1.SearchState(path.join(item.path, x), childLevel));\n stack.push(...childItems.reverse());\n }\n // File\n else if (match & internal_match_kind_1.MatchKind.File) {\n yield yield __await(item.path);\n }\n }\n });\n }\n /**\n * Constructs a DefaultGlobber\n */\n static create(patterns, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = new DefaultGlobber(options);\n if (IS_WINDOWS) {\n patterns = patterns.replace(/\\r\\n/g, '\\n');\n patterns = patterns.replace(/\\r/g, '\\n');\n }\n const lines = patterns.split('\\n').map(x => x.trim());\n for (const line of lines) {\n // Empty or comment\n if (!line || line.startsWith('#')) {\n continue;\n }\n // Pattern\n else {\n result.patterns.push(new internal_pattern_1.Pattern(line));\n }\n }\n result.searchPaths.push(...patternHelper.getSearchPaths(result.patterns));\n return result;\n });\n }\n static stat(item, options, traversalChain) {\n return __awaiter(this, void 0, void 0, function* () {\n // Note:\n // `stat` returns info about the target of a symlink (or symlink chain)\n // `lstat` returns info about a symlink itself\n let stats;\n if (options.followSymbolicLinks) {\n try {\n // Use `stat` (following symlinks)\n stats = yield fs.promises.stat(item.path);\n }\n catch (err) {\n if (err.code === 'ENOENT') {\n if (options.omitBrokenSymbolicLinks) {\n core.debug(`Broken symlink '${item.path}'`);\n return undefined;\n }\n throw new Error(`No information found for the path '${item.path}'. This may indicate a broken symbolic link.`);\n }\n throw err;\n }\n }\n else {\n // Use `lstat` (not following symlinks)\n stats = yield fs.promises.lstat(item.path);\n }\n // Note, isDirectory() returns false for the lstat of a symlink\n if (stats.isDirectory() && options.followSymbolicLinks) {\n // Get the realpath\n const realPath = yield fs.promises.realpath(item.path);\n // Fixup the traversal chain to match the item level\n while (traversalChain.length >= item.level) {\n traversalChain.pop();\n }\n // Test for a cycle\n if (traversalChain.some((x) => x === realPath)) {\n core.debug(`Symlink cycle detected for path '${item.path}' and realpath '${realPath}'`);\n return undefined;\n }\n // Update the traversal chain\n traversalChain.push(realPath);\n }\n return stats;\n });\n }\n}\nexports.DefaultGlobber = DefaultGlobber;\n//# sourceMappingURL=internal-globber.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hashFiles = void 0;\nconst crypto = __importStar(require(\"crypto\"));\nconst core = __importStar(require(\"@actions/core\"));\nconst fs = __importStar(require(\"fs\"));\nconst stream = __importStar(require(\"stream\"));\nconst util = __importStar(require(\"util\"));\nconst path = __importStar(require(\"path\"));\nfunction hashFiles(globber, currentWorkspace, verbose = false) {\n var e_1, _a;\n var _b;\n return __awaiter(this, void 0, void 0, function* () {\n const writeDelegate = verbose ? core.info : core.debug;\n let hasMatch = false;\n const githubWorkspace = currentWorkspace\n ? currentWorkspace\n : (_b = process.env['GITHUB_WORKSPACE']) !== null && _b !== void 0 ? _b : process.cwd();\n const result = crypto.createHash('sha256');\n let count = 0;\n try {\n for (var _c = __asyncValues(globber.globGenerator()), _d; _d = yield _c.next(), !_d.done;) {\n const file = _d.value;\n writeDelegate(file);\n if (!file.startsWith(`${githubWorkspace}${path.sep}`)) {\n writeDelegate(`Ignore '${file}' since it is not under GITHUB_WORKSPACE.`);\n continue;\n }\n if (fs.statSync(file).isDirectory()) {\n writeDelegate(`Skip directory '${file}'.`);\n continue;\n }\n const hash = crypto.createHash('sha256');\n const pipeline = util.promisify(stream.pipeline);\n yield pipeline(fs.createReadStream(file), hash);\n result.write(hash.digest());\n count++;\n if (!hasMatch) {\n hasMatch = true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) yield _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n result.end();\n if (hasMatch) {\n writeDelegate(`Found ${count} files to hash.`);\n return result.digest('hex');\n }\n else {\n writeDelegate(`No matches found for glob`);\n return '';\n }\n });\n}\nexports.hashFiles = hashFiles;\n//# sourceMappingURL=internal-hash-files.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MatchKind = void 0;\n/**\n * Indicates whether a pattern matches a path\n */\nvar MatchKind;\n(function (MatchKind) {\n /** Not matched */\n MatchKind[MatchKind[\"None\"] = 0] = \"None\";\n /** Matched if the path is a directory */\n MatchKind[MatchKind[\"Directory\"] = 1] = \"Directory\";\n /** Matched if the path is a regular file */\n MatchKind[MatchKind[\"File\"] = 2] = \"File\";\n /** Matched */\n MatchKind[MatchKind[\"All\"] = 3] = \"All\";\n})(MatchKind = exports.MatchKind || (exports.MatchKind = {}));\n//# sourceMappingURL=internal-match-kind.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.safeTrimTrailingSeparator = exports.normalizeSeparators = exports.hasRoot = exports.hasAbsoluteRoot = exports.ensureAbsoluteRoot = exports.dirname = void 0;\nconst path = __importStar(require(\"path\"));\nconst assert_1 = __importDefault(require(\"assert\"));\nconst IS_WINDOWS = process.platform === 'win32';\n/**\n * Similar to path.dirname except normalizes the path separators and slightly better handling for Windows UNC paths.\n *\n * For example, on Linux/macOS:\n * - `/ => /`\n * - `/hello => /`\n *\n * For example, on Windows:\n * - `C:\\ => C:\\`\n * - `C:\\hello => C:\\`\n * - `C: => C:`\n * - `C:hello => C:`\n * - `\\ => \\`\n * - `\\hello => \\`\n * - `\\\\hello => \\\\hello`\n * - `\\\\hello\\world => \\\\hello\\world`\n */\nfunction dirname(p) {\n // Normalize slashes and trim unnecessary trailing slash\n p = safeTrimTrailingSeparator(p);\n // Windows UNC root, e.g. \\\\hello or \\\\hello\\world\n if (IS_WINDOWS && /^\\\\\\\\[^\\\\]+(\\\\[^\\\\]+)?$/.test(p)) {\n return p;\n }\n // Get dirname\n let result = path.dirname(p);\n // Trim trailing slash for Windows UNC root, e.g. \\\\hello\\world\\\n if (IS_WINDOWS && /^\\\\\\\\[^\\\\]+\\\\[^\\\\]+\\\\$/.test(result)) {\n result = safeTrimTrailingSeparator(result);\n }\n return result;\n}\nexports.dirname = dirname;\n/**\n * Roots the path if not already rooted. On Windows, relative roots like `\\`\n * or `C:` are expanded based on the current working directory.\n */\nfunction ensureAbsoluteRoot(root, itemPath) {\n assert_1.default(root, `ensureAbsoluteRoot parameter 'root' must not be empty`);\n assert_1.default(itemPath, `ensureAbsoluteRoot parameter 'itemPath' must not be empty`);\n // Already rooted\n if (hasAbsoluteRoot(itemPath)) {\n return itemPath;\n }\n // Windows\n if (IS_WINDOWS) {\n // Check for itemPath like C: or C:foo\n if (itemPath.match(/^[A-Z]:[^\\\\/]|^[A-Z]:$/i)) {\n let cwd = process.cwd();\n assert_1.default(cwd.match(/^[A-Z]:\\\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`);\n // Drive letter matches cwd? Expand to cwd\n if (itemPath[0].toUpperCase() === cwd[0].toUpperCase()) {\n // Drive only, e.g. C:\n if (itemPath.length === 2) {\n // Preserve specified drive letter case (upper or lower)\n return `${itemPath[0]}:\\\\${cwd.substr(3)}`;\n }\n // Drive + path, e.g. C:foo\n else {\n if (!cwd.endsWith('\\\\')) {\n cwd += '\\\\';\n }\n // Preserve specified drive letter case (upper or lower)\n return `${itemPath[0]}:\\\\${cwd.substr(3)}${itemPath.substr(2)}`;\n }\n }\n // Different drive\n else {\n return `${itemPath[0]}:\\\\${itemPath.substr(2)}`;\n }\n }\n // Check for itemPath like \\ or \\foo\n else if (normalizeSeparators(itemPath).match(/^\\\\$|^\\\\[^\\\\]/)) {\n const cwd = process.cwd();\n assert_1.default(cwd.match(/^[A-Z]:\\\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`);\n return `${cwd[0]}:\\\\${itemPath.substr(1)}`;\n }\n }\n assert_1.default(hasAbsoluteRoot(root), `ensureAbsoluteRoot parameter 'root' must have an absolute root`);\n // Otherwise ensure root ends with a separator\n if (root.endsWith('/') || (IS_WINDOWS && root.endsWith('\\\\'))) {\n // Intentionally empty\n }\n else {\n // Append separator\n root += path.sep;\n }\n return root + itemPath;\n}\nexports.ensureAbsoluteRoot = ensureAbsoluteRoot;\n/**\n * On Linux/macOS, true if path starts with `/`. On Windows, true for paths like:\n * `\\\\hello\\share` and `C:\\hello` (and using alternate separator).\n */\nfunction hasAbsoluteRoot(itemPath) {\n assert_1.default(itemPath, `hasAbsoluteRoot parameter 'itemPath' must not be empty`);\n // Normalize separators\n itemPath = normalizeSeparators(itemPath);\n // Windows\n if (IS_WINDOWS) {\n // E.g. \\\\hello\\share or C:\\hello\n return itemPath.startsWith('\\\\\\\\') || /^[A-Z]:\\\\/i.test(itemPath);\n }\n // E.g. /hello\n return itemPath.startsWith('/');\n}\nexports.hasAbsoluteRoot = hasAbsoluteRoot;\n/**\n * On Linux/macOS, true if path starts with `/`. On Windows, true for paths like:\n * `\\`, `\\hello`, `\\\\hello\\share`, `C:`, and `C:\\hello` (and using alternate separator).\n */\nfunction hasRoot(itemPath) {\n assert_1.default(itemPath, `isRooted parameter 'itemPath' must not be empty`);\n // Normalize separators\n itemPath = normalizeSeparators(itemPath);\n // Windows\n if (IS_WINDOWS) {\n // E.g. \\ or \\hello or \\\\hello\n // E.g. C: or C:\\hello\n return itemPath.startsWith('\\\\') || /^[A-Z]:/i.test(itemPath);\n }\n // E.g. /hello\n return itemPath.startsWith('/');\n}\nexports.hasRoot = hasRoot;\n/**\n * Removes redundant slashes and converts `/` to `\\` on Windows\n */\nfunction normalizeSeparators(p) {\n p = p || '';\n // Windows\n if (IS_WINDOWS) {\n // Convert slashes on Windows\n p = p.replace(/\\//g, '\\\\');\n // Remove redundant slashes\n const isUnc = /^\\\\\\\\+[^\\\\]/.test(p); // e.g. \\\\hello\n return (isUnc ? '\\\\' : '') + p.replace(/\\\\\\\\+/g, '\\\\'); // preserve leading \\\\ for UNC\n }\n // Remove redundant slashes\n return p.replace(/\\/\\/+/g, '/');\n}\nexports.normalizeSeparators = normalizeSeparators;\n/**\n * Normalizes the path separators and trims the trailing separator (when safe).\n * For example, `/foo/ => /foo` but `/ => /`\n */\nfunction safeTrimTrailingSeparator(p) {\n // Short-circuit if empty\n if (!p) {\n return '';\n }\n // Normalize separators\n p = normalizeSeparators(p);\n // No trailing slash\n if (!p.endsWith(path.sep)) {\n return p;\n }\n // Check '/' on Linux/macOS and '\\' on Windows\n if (p === path.sep) {\n return p;\n }\n // On Windows check if drive root. E.g. C:\\\n if (IS_WINDOWS && /^[A-Z]:\\\\$/i.test(p)) {\n return p;\n }\n // Otherwise trim trailing slash\n return p.substr(0, p.length - 1);\n}\nexports.safeTrimTrailingSeparator = safeTrimTrailingSeparator;\n//# sourceMappingURL=internal-path-helper.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Path = void 0;\nconst path = __importStar(require(\"path\"));\nconst pathHelper = __importStar(require(\"./internal-path-helper\"));\nconst assert_1 = __importDefault(require(\"assert\"));\nconst IS_WINDOWS = process.platform === 'win32';\n/**\n * Helper class for parsing paths into segments\n */\nclass Path {\n /**\n * Constructs a Path\n * @param itemPath Path or array of segments\n */\n constructor(itemPath) {\n this.segments = [];\n // String\n if (typeof itemPath === 'string') {\n assert_1.default(itemPath, `Parameter 'itemPath' must not be empty`);\n // Normalize slashes and trim unnecessary trailing slash\n itemPath = pathHelper.safeTrimTrailingSeparator(itemPath);\n // Not rooted\n if (!pathHelper.hasRoot(itemPath)) {\n this.segments = itemPath.split(path.sep);\n }\n // Rooted\n else {\n // Add all segments, while not at the root\n let remaining = itemPath;\n let dir = pathHelper.dirname(remaining);\n while (dir !== remaining) {\n // Add the segment\n const basename = path.basename(remaining);\n this.segments.unshift(basename);\n // Truncate the last segment\n remaining = dir;\n dir = pathHelper.dirname(remaining);\n }\n // Remainder is the root\n this.segments.unshift(remaining);\n }\n }\n // Array\n else {\n // Must not be empty\n assert_1.default(itemPath.length > 0, `Parameter 'itemPath' must not be an empty array`);\n // Each segment\n for (let i = 0; i < itemPath.length; i++) {\n let segment = itemPath[i];\n // Must not be empty\n assert_1.default(segment, `Parameter 'itemPath' must not contain any empty segments`);\n // Normalize slashes\n segment = pathHelper.normalizeSeparators(itemPath[i]);\n // Root segment\n if (i === 0 && pathHelper.hasRoot(segment)) {\n segment = pathHelper.safeTrimTrailingSeparator(segment);\n assert_1.default(segment === pathHelper.dirname(segment), `Parameter 'itemPath' root segment contains information for multiple segments`);\n this.segments.push(segment);\n }\n // All other segments\n else {\n // Must not contain slash\n assert_1.default(!segment.includes(path.sep), `Parameter 'itemPath' contains unexpected path separators`);\n this.segments.push(segment);\n }\n }\n }\n }\n /**\n * Converts the path to it's string representation\n */\n toString() {\n // First segment\n let result = this.segments[0];\n // All others\n let skipSlash = result.endsWith(path.sep) || (IS_WINDOWS && /^[A-Z]:$/i.test(result));\n for (let i = 1; i < this.segments.length; i++) {\n if (skipSlash) {\n skipSlash = false;\n }\n else {\n result += path.sep;\n }\n result += this.segments[i];\n }\n return result;\n }\n}\nexports.Path = Path;\n//# sourceMappingURL=internal-path.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partialMatch = exports.match = exports.getSearchPaths = void 0;\nconst pathHelper = __importStar(require(\"./internal-path-helper\"));\nconst internal_match_kind_1 = require(\"./internal-match-kind\");\nconst IS_WINDOWS = process.platform === 'win32';\n/**\n * Given an array of patterns, returns an array of paths to search.\n * Duplicates and paths under other included paths are filtered out.\n */\nfunction getSearchPaths(patterns) {\n // Ignore negate patterns\n patterns = patterns.filter(x => !x.negate);\n // Create a map of all search paths\n const searchPathMap = {};\n for (const pattern of patterns) {\n const key = IS_WINDOWS\n ? pattern.searchPath.toUpperCase()\n : pattern.searchPath;\n searchPathMap[key] = 'candidate';\n }\n const result = [];\n for (const pattern of patterns) {\n // Check if already included\n const key = IS_WINDOWS\n ? pattern.searchPath.toUpperCase()\n : pattern.searchPath;\n if (searchPathMap[key] === 'included') {\n continue;\n }\n // Check for an ancestor search path\n let foundAncestor = false;\n let tempKey = key;\n let parent = pathHelper.dirname(tempKey);\n while (parent !== tempKey) {\n if (searchPathMap[parent]) {\n foundAncestor = true;\n break;\n }\n tempKey = parent;\n parent = pathHelper.dirname(tempKey);\n }\n // Include the search pattern in the result\n if (!foundAncestor) {\n result.push(pattern.searchPath);\n searchPathMap[key] = 'included';\n }\n }\n return result;\n}\nexports.getSearchPaths = getSearchPaths;\n/**\n * Matches the patterns against the path\n */\nfunction match(patterns, itemPath) {\n let result = internal_match_kind_1.MatchKind.None;\n for (const pattern of patterns) {\n if (pattern.negate) {\n result &= ~pattern.match(itemPath);\n }\n else {\n result |= pattern.match(itemPath);\n }\n }\n return result;\n}\nexports.match = match;\n/**\n * Checks whether to descend further into the directory\n */\nfunction partialMatch(patterns, itemPath) {\n return patterns.some(x => !x.negate && x.partialMatch(itemPath));\n}\nexports.partialMatch = partialMatch;\n//# sourceMappingURL=internal-pattern-helper.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pattern = void 0;\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\nconst pathHelper = __importStar(require(\"./internal-path-helper\"));\nconst assert_1 = __importDefault(require(\"assert\"));\nconst minimatch_1 = require(\"minimatch\");\nconst internal_match_kind_1 = require(\"./internal-match-kind\");\nconst internal_path_1 = require(\"./internal-path\");\nconst IS_WINDOWS = process.platform === 'win32';\nclass Pattern {\n constructor(patternOrNegate, isImplicitPattern = false, segments, homedir) {\n /**\n * Indicates whether matches should be excluded from the result set\n */\n this.negate = false;\n // Pattern overload\n let pattern;\n if (typeof patternOrNegate === 'string') {\n pattern = patternOrNegate.trim();\n }\n // Segments overload\n else {\n // Convert to pattern\n segments = segments || [];\n assert_1.default(segments.length, `Parameter 'segments' must not empty`);\n const root = Pattern.getLiteral(segments[0]);\n assert_1.default(root && pathHelper.hasAbsoluteRoot(root), `Parameter 'segments' first element must be a root path`);\n pattern = new internal_path_1.Path(segments).toString().trim();\n if (patternOrNegate) {\n pattern = `!${pattern}`;\n }\n }\n // Negate\n while (pattern.startsWith('!')) {\n this.negate = !this.negate;\n pattern = pattern.substr(1).trim();\n }\n // Normalize slashes and ensures absolute root\n pattern = Pattern.fixupPattern(pattern, homedir);\n // Segments\n this.segments = new internal_path_1.Path(pattern).segments;\n // Trailing slash indicates the pattern should only match directories, not regular files\n this.trailingSeparator = pathHelper\n .normalizeSeparators(pattern)\n .endsWith(path.sep);\n pattern = pathHelper.safeTrimTrailingSeparator(pattern);\n // Search path (literal path prior to the first glob segment)\n let foundGlob = false;\n const searchSegments = this.segments\n .map(x => Pattern.getLiteral(x))\n .filter(x => !foundGlob && !(foundGlob = x === ''));\n this.searchPath = new internal_path_1.Path(searchSegments).toString();\n // Root RegExp (required when determining partial match)\n this.rootRegExp = new RegExp(Pattern.regExpEscape(searchSegments[0]), IS_WINDOWS ? 'i' : '');\n this.isImplicitPattern = isImplicitPattern;\n // Create minimatch\n const minimatchOptions = {\n dot: true,\n nobrace: true,\n nocase: IS_WINDOWS,\n nocomment: true,\n noext: true,\n nonegate: true\n };\n pattern = IS_WINDOWS ? pattern.replace(/\\\\/g, '/') : pattern;\n this.minimatch = new minimatch_1.Minimatch(pattern, minimatchOptions);\n }\n /**\n * Matches the pattern against the specified path\n */\n match(itemPath) {\n // Last segment is globstar?\n if (this.segments[this.segments.length - 1] === '**') {\n // Normalize slashes\n itemPath = pathHelper.normalizeSeparators(itemPath);\n // Append a trailing slash. Otherwise Minimatch will not match the directory immediately\n // preceding the globstar. For example, given the pattern `/foo/**`, Minimatch returns\n // false for `/foo` but returns true for `/foo/`. Append a trailing slash to handle that quirk.\n if (!itemPath.endsWith(path.sep) && this.isImplicitPattern === false) {\n // Note, this is safe because the constructor ensures the pattern has an absolute root.\n // For example, formats like C: and C:foo on Windows are resolved to an absolute root.\n itemPath = `${itemPath}${path.sep}`;\n }\n }\n else {\n // Normalize slashes and trim unnecessary trailing slash\n itemPath = pathHelper.safeTrimTrailingSeparator(itemPath);\n }\n // Match\n if (this.minimatch.match(itemPath)) {\n return this.trailingSeparator ? internal_match_kind_1.MatchKind.Directory : internal_match_kind_1.MatchKind.All;\n }\n return internal_match_kind_1.MatchKind.None;\n }\n /**\n * Indicates whether the pattern may match descendants of the specified path\n */\n partialMatch(itemPath) {\n // Normalize slashes and trim unnecessary trailing slash\n itemPath = pathHelper.safeTrimTrailingSeparator(itemPath);\n // matchOne does not handle root path correctly\n if (pathHelper.dirname(itemPath) === itemPath) {\n return this.rootRegExp.test(itemPath);\n }\n return this.minimatch.matchOne(itemPath.split(IS_WINDOWS ? /\\\\+/ : /\\/+/), this.minimatch.set[0], true);\n }\n /**\n * Escapes glob patterns within a path\n */\n static globEscape(s) {\n return (IS_WINDOWS ? s : s.replace(/\\\\/g, '\\\\\\\\')) // escape '\\' on Linux/macOS\n .replace(/(\\[)(?=[^/]+\\])/g, '[[]') // escape '[' when ']' follows within the path segment\n .replace(/\\?/g, '[?]') // escape '?'\n .replace(/\\*/g, '[*]'); // escape '*'\n }\n /**\n * Normalizes slashes and ensures absolute root\n */\n static fixupPattern(pattern, homedir) {\n // Empty\n assert_1.default(pattern, 'pattern cannot be empty');\n // Must not contain `.` segment, unless first segment\n // Must not contain `..` segment\n const literalSegments = new internal_path_1.Path(pattern).segments.map(x => Pattern.getLiteral(x));\n assert_1.default(literalSegments.every((x, i) => (x !== '.' || i === 0) && x !== '..'), `Invalid pattern '${pattern}'. Relative pathing '.' and '..' is not allowed.`);\n // Must not contain globs in root, e.g. Windows UNC path \\\\foo\\b*r\n assert_1.default(!pathHelper.hasRoot(pattern) || literalSegments[0], `Invalid pattern '${pattern}'. Root segment must not contain globs.`);\n // Normalize slashes\n pattern = pathHelper.normalizeSeparators(pattern);\n // Replace leading `.` segment\n if (pattern === '.' || pattern.startsWith(`.${path.sep}`)) {\n pattern = Pattern.globEscape(process.cwd()) + pattern.substr(1);\n }\n // Replace leading `~` segment\n else if (pattern === '~' || pattern.startsWith(`~${path.sep}`)) {\n homedir = homedir || os.homedir();\n assert_1.default(homedir, 'Unable to determine HOME directory');\n assert_1.default(pathHelper.hasAbsoluteRoot(homedir), `Expected HOME directory to be a rooted path. Actual '${homedir}'`);\n pattern = Pattern.globEscape(homedir) + pattern.substr(1);\n }\n // Replace relative drive root, e.g. pattern is C: or C:foo\n else if (IS_WINDOWS &&\n (pattern.match(/^[A-Z]:$/i) || pattern.match(/^[A-Z]:[^\\\\]/i))) {\n let root = pathHelper.ensureAbsoluteRoot('C:\\\\dummy-root', pattern.substr(0, 2));\n if (pattern.length > 2 && !root.endsWith('\\\\')) {\n root += '\\\\';\n }\n pattern = Pattern.globEscape(root) + pattern.substr(2);\n }\n // Replace relative root, e.g. pattern is \\ or \\foo\n else if (IS_WINDOWS && (pattern === '\\\\' || pattern.match(/^\\\\[^\\\\]/))) {\n let root = pathHelper.ensureAbsoluteRoot('C:\\\\dummy-root', '\\\\');\n if (!root.endsWith('\\\\')) {\n root += '\\\\';\n }\n pattern = Pattern.globEscape(root) + pattern.substr(1);\n }\n // Otherwise ensure absolute root\n else {\n pattern = pathHelper.ensureAbsoluteRoot(Pattern.globEscape(process.cwd()), pattern);\n }\n return pathHelper.normalizeSeparators(pattern);\n }\n /**\n * Attempts to unescape a pattern segment to create a literal path segment.\n * Otherwise returns empty string.\n */\n static getLiteral(segment) {\n let literal = '';\n for (let i = 0; i < segment.length; i++) {\n const c = segment[i];\n // Escape\n if (c === '\\\\' && !IS_WINDOWS && i + 1 < segment.length) {\n literal += segment[++i];\n continue;\n }\n // Wildcard\n else if (c === '*' || c === '?') {\n return '';\n }\n // Character set\n else if (c === '[' && i + 1 < segment.length) {\n let set = '';\n let closed = -1;\n for (let i2 = i + 1; i2 < segment.length; i2++) {\n const c2 = segment[i2];\n // Escape\n if (c2 === '\\\\' && !IS_WINDOWS && i2 + 1 < segment.length) {\n set += segment[++i2];\n continue;\n }\n // Closed\n else if (c2 === ']') {\n closed = i2;\n break;\n }\n // Otherwise\n else {\n set += c2;\n }\n }\n // Closed?\n if (closed >= 0) {\n // Cannot convert\n if (set.length > 1) {\n return '';\n }\n // Convert to literal\n if (set) {\n literal += set;\n i = closed;\n continue;\n }\n }\n // Otherwise fall thru\n }\n // Append\n literal += c;\n }\n return literal;\n }\n /**\n * Escapes regexp special characters\n * https://javascript.info/regexp-escaping\n */\n static regExpEscape(s) {\n return s.replace(/[[\\\\^$.|?*+()]/g, '\\\\$&');\n }\n}\nexports.Pattern = Pattern;\n//# sourceMappingURL=internal-pattern.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SearchState = void 0;\nclass SearchState {\n constructor(path, level) {\n this.path = path;\n this.level = level;\n }\n}\nexports.SearchState = SearchState;\n//# sourceMappingURL=internal-search-state.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;\nclass BasicCredentialHandler {\n constructor(username, password) {\n this.username = username;\n this.password = password;\n }\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.BasicCredentialHandler = BasicCredentialHandler;\nclass BearerCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Bearer ${this.token}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.BearerCredentialHandler = BearerCredentialHandler;\nclass PersonalAccessTokenCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;\n//# sourceMappingURL=auth.js.map","\"use strict\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;\nconst http = __importStar(require(\"http\"));\nconst https = __importStar(require(\"https\"));\nconst pm = __importStar(require(\"./proxy\"));\nconst tunnel = __importStar(require(\"tunnel\"));\nvar HttpCodes;\n(function (HttpCodes) {\n HttpCodes[HttpCodes[\"OK\"] = 200] = \"OK\";\n HttpCodes[HttpCodes[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpCodes[HttpCodes[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpCodes[HttpCodes[\"ResourceMoved\"] = 302] = \"ResourceMoved\";\n HttpCodes[HttpCodes[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpCodes[HttpCodes[\"NotModified\"] = 304] = \"NotModified\";\n HttpCodes[HttpCodes[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpCodes[HttpCodes[\"SwitchProxy\"] = 306] = \"SwitchProxy\";\n HttpCodes[HttpCodes[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpCodes[HttpCodes[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpCodes[HttpCodes[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpCodes[HttpCodes[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpCodes[HttpCodes[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpCodes[HttpCodes[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpCodes[HttpCodes[\"NotFound\"] = 404] = \"NotFound\";\n HttpCodes[HttpCodes[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpCodes[HttpCodes[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpCodes[HttpCodes[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpCodes[HttpCodes[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpCodes[HttpCodes[\"Conflict\"] = 409] = \"Conflict\";\n HttpCodes[HttpCodes[\"Gone\"] = 410] = \"Gone\";\n HttpCodes[HttpCodes[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpCodes[HttpCodes[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpCodes[HttpCodes[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpCodes[HttpCodes[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpCodes[HttpCodes[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpCodes[HttpCodes[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));\nvar Headers;\n(function (Headers) {\n Headers[\"Accept\"] = \"accept\";\n Headers[\"ContentType\"] = \"content-type\";\n})(Headers = exports.Headers || (exports.Headers = {}));\nvar MediaTypes;\n(function (MediaTypes) {\n MediaTypes[\"ApplicationJson\"] = \"application/json\";\n})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));\n/**\n * Returns the proxy URL, depending upon the supplied url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\nfunction getProxyUrl(serverUrl) {\n const proxyUrl = pm.getProxyUrl(new URL(serverUrl));\n return proxyUrl ? proxyUrl.href : '';\n}\nexports.getProxyUrl = getProxyUrl;\nconst HttpRedirectCodes = [\n HttpCodes.MovedPermanently,\n HttpCodes.ResourceMoved,\n HttpCodes.SeeOther,\n HttpCodes.TemporaryRedirect,\n HttpCodes.PermanentRedirect\n];\nconst HttpResponseRetryCodes = [\n HttpCodes.BadGateway,\n HttpCodes.ServiceUnavailable,\n HttpCodes.GatewayTimeout\n];\nconst RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];\nconst ExponentialBackoffCeiling = 10;\nconst ExponentialBackoffTimeSlice = 5;\nclass HttpClientError extends Error {\n constructor(message, statusCode) {\n super(message);\n this.name = 'HttpClientError';\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, HttpClientError.prototype);\n }\n}\nexports.HttpClientError = HttpClientError;\nclass HttpClientResponse {\n constructor(message) {\n this.message = message;\n }\n readBody() {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let output = Buffer.alloc(0);\n this.message.on('data', (chunk) => {\n output = Buffer.concat([output, chunk]);\n });\n this.message.on('end', () => {\n resolve(output.toString());\n });\n }));\n });\n }\n}\nexports.HttpClientResponse = HttpClientResponse;\nfunction isHttps(requestUrl) {\n const parsedUrl = new URL(requestUrl);\n return parsedUrl.protocol === 'https:';\n}\nexports.isHttps = isHttps;\nclass HttpClient {\n constructor(userAgent, handlers, requestOptions) {\n this._ignoreSslError = false;\n this._allowRedirects = true;\n this._allowRedirectDowngrade = false;\n this._maxRedirects = 50;\n this._allowRetries = false;\n this._maxRetries = 1;\n this._keepAlive = false;\n this._disposed = false;\n this.userAgent = userAgent;\n this.handlers = handlers || [];\n this.requestOptions = requestOptions;\n if (requestOptions) {\n if (requestOptions.ignoreSslError != null) {\n this._ignoreSslError = requestOptions.ignoreSslError;\n }\n this._socketTimeout = requestOptions.socketTimeout;\n if (requestOptions.allowRedirects != null) {\n this._allowRedirects = requestOptions.allowRedirects;\n }\n if (requestOptions.allowRedirectDowngrade != null) {\n this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;\n }\n if (requestOptions.maxRedirects != null) {\n this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);\n }\n if (requestOptions.keepAlive != null) {\n this._keepAlive = requestOptions.keepAlive;\n }\n if (requestOptions.allowRetries != null) {\n this._allowRetries = requestOptions.allowRetries;\n }\n if (requestOptions.maxRetries != null) {\n this._maxRetries = requestOptions.maxRetries;\n }\n }\n }\n options(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});\n });\n }\n get(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('GET', requestUrl, null, additionalHeaders || {});\n });\n }\n del(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('DELETE', requestUrl, null, additionalHeaders || {});\n });\n }\n post(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('POST', requestUrl, data, additionalHeaders || {});\n });\n }\n patch(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('PATCH', requestUrl, data, additionalHeaders || {});\n });\n }\n put(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('PUT', requestUrl, data, additionalHeaders || {});\n });\n }\n head(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('HEAD', requestUrl, null, additionalHeaders || {});\n });\n }\n sendStream(verb, requestUrl, stream, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request(verb, requestUrl, stream, additionalHeaders);\n });\n }\n /**\n * Gets a typed object from an endpoint\n * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise\n */\n getJson(requestUrl, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n const res = yield this.get(requestUrl, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n postJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.post(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n putJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.put(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n patchJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.patch(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n /**\n * Makes a raw http request.\n * All other methods such as get, post, patch, and request ultimately call this.\n * Prefer get, del, post and patch\n */\n request(verb, requestUrl, data, headers) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._disposed) {\n throw new Error('Client has already been disposed.');\n }\n const parsedUrl = new URL(requestUrl);\n let info = this._prepareRequest(verb, parsedUrl, headers);\n // Only perform retries on reads since writes may not be idempotent.\n const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb)\n ? this._maxRetries + 1\n : 1;\n let numTries = 0;\n let response;\n do {\n response = yield this.requestRaw(info, data);\n // Check if it's an authentication challenge\n if (response &&\n response.message &&\n response.message.statusCode === HttpCodes.Unauthorized) {\n let authenticationHandler;\n for (const handler of this.handlers) {\n if (handler.canHandleAuthentication(response)) {\n authenticationHandler = handler;\n break;\n }\n }\n if (authenticationHandler) {\n return authenticationHandler.handleAuthentication(this, info, data);\n }\n else {\n // We have received an unauthorized response but have no handlers to handle it.\n // Let the response return to the caller.\n return response;\n }\n }\n let redirectsRemaining = this._maxRedirects;\n while (response.message.statusCode &&\n HttpRedirectCodes.includes(response.message.statusCode) &&\n this._allowRedirects &&\n redirectsRemaining > 0) {\n const redirectUrl = response.message.headers['location'];\n if (!redirectUrl) {\n // if there's no location to redirect to, we won't\n break;\n }\n const parsedRedirectUrl = new URL(redirectUrl);\n if (parsedUrl.protocol === 'https:' &&\n parsedUrl.protocol !== parsedRedirectUrl.protocol &&\n !this._allowRedirectDowngrade) {\n throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');\n }\n // we need to finish reading the response before reassigning response\n // which will leak the open socket.\n yield response.readBody();\n // strip authorization header if redirected to a different hostname\n if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {\n for (const header in headers) {\n // header names are case insensitive\n if (header.toLowerCase() === 'authorization') {\n delete headers[header];\n }\n }\n }\n // let's make the request with the new redirectUrl\n info = this._prepareRequest(verb, parsedRedirectUrl, headers);\n response = yield this.requestRaw(info, data);\n redirectsRemaining--;\n }\n if (!response.message.statusCode ||\n !HttpResponseRetryCodes.includes(response.message.statusCode)) {\n // If not a retry code, return immediately instead of retrying\n return response;\n }\n numTries += 1;\n if (numTries < maxTries) {\n yield response.readBody();\n yield this._performExponentialBackoff(numTries);\n }\n } while (numTries < maxTries);\n return response;\n });\n }\n /**\n * Needs to be called if keepAlive is set to true in request options.\n */\n dispose() {\n if (this._agent) {\n this._agent.destroy();\n }\n this._disposed = true;\n }\n /**\n * Raw request.\n * @param info\n * @param data\n */\n requestRaw(info, data) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n function callbackForResult(err, res) {\n if (err) {\n reject(err);\n }\n else if (!res) {\n // If `err` is not passed, then `res` must be passed.\n reject(new Error('Unknown error'));\n }\n else {\n resolve(res);\n }\n }\n this.requestRawWithCallback(info, data, callbackForResult);\n });\n });\n }\n /**\n * Raw request with callback.\n * @param info\n * @param data\n * @param onResult\n */\n requestRawWithCallback(info, data, onResult) {\n if (typeof data === 'string') {\n if (!info.options.headers) {\n info.options.headers = {};\n }\n info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');\n }\n let callbackCalled = false;\n function handleResult(err, res) {\n if (!callbackCalled) {\n callbackCalled = true;\n onResult(err, res);\n }\n }\n const req = info.httpModule.request(info.options, (msg) => {\n const res = new HttpClientResponse(msg);\n handleResult(undefined, res);\n });\n let socket;\n req.on('socket', sock => {\n socket = sock;\n });\n // If we ever get disconnected, we want the socket to timeout eventually\n req.setTimeout(this._socketTimeout || 3 * 60000, () => {\n if (socket) {\n socket.end();\n }\n handleResult(new Error(`Request timeout: ${info.options.path}`));\n });\n req.on('error', function (err) {\n // err has statusCode property\n // res should have headers\n handleResult(err);\n });\n if (data && typeof data === 'string') {\n req.write(data, 'utf8');\n }\n if (data && typeof data !== 'string') {\n data.on('close', function () {\n req.end();\n });\n data.pipe(req);\n }\n else {\n req.end();\n }\n }\n /**\n * Gets an http agent. This function is useful when you need an http agent that handles\n * routing through a proxy server - depending upon the url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\n getAgent(serverUrl) {\n const parsedUrl = new URL(serverUrl);\n return this._getAgent(parsedUrl);\n }\n _prepareRequest(method, requestUrl, headers) {\n const info = {};\n info.parsedUrl = requestUrl;\n const usingSsl = info.parsedUrl.protocol === 'https:';\n info.httpModule = usingSsl ? https : http;\n const defaultPort = usingSsl ? 443 : 80;\n info.options = {};\n info.options.host = info.parsedUrl.hostname;\n info.options.port = info.parsedUrl.port\n ? parseInt(info.parsedUrl.port)\n : defaultPort;\n info.options.path =\n (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');\n info.options.method = method;\n info.options.headers = this._mergeHeaders(headers);\n if (this.userAgent != null) {\n info.options.headers['user-agent'] = this.userAgent;\n }\n info.options.agent = this._getAgent(info.parsedUrl);\n // gives handlers an opportunity to participate\n if (this.handlers) {\n for (const handler of this.handlers) {\n handler.prepareRequest(info.options);\n }\n }\n return info;\n }\n _mergeHeaders(headers) {\n if (this.requestOptions && this.requestOptions.headers) {\n return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));\n }\n return lowercaseKeys(headers || {});\n }\n _getExistingOrDefaultHeader(additionalHeaders, header, _default) {\n let clientHeader;\n if (this.requestOptions && this.requestOptions.headers) {\n clientHeader = lowercaseKeys(this.requestOptions.headers)[header];\n }\n return additionalHeaders[header] || clientHeader || _default;\n }\n _getAgent(parsedUrl) {\n let agent;\n const proxyUrl = pm.getProxyUrl(parsedUrl);\n const useProxy = proxyUrl && proxyUrl.hostname;\n if (this._keepAlive && useProxy) {\n agent = this._proxyAgent;\n }\n if (this._keepAlive && !useProxy) {\n agent = this._agent;\n }\n // if agent is already assigned use that agent.\n if (agent) {\n return agent;\n }\n const usingSsl = parsedUrl.protocol === 'https:';\n let maxSockets = 100;\n if (this.requestOptions) {\n maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;\n }\n // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.\n if (proxyUrl && proxyUrl.hostname) {\n const agentOptions = {\n maxSockets,\n keepAlive: this._keepAlive,\n proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && {\n proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`\n })), { host: proxyUrl.hostname, port: proxyUrl.port })\n };\n let tunnelAgent;\n const overHttps = proxyUrl.protocol === 'https:';\n if (usingSsl) {\n tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;\n }\n else {\n tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;\n }\n agent = tunnelAgent(agentOptions);\n this._proxyAgent = agent;\n }\n // if reusing agent across request and tunneling agent isn't assigned create a new agent\n if (this._keepAlive && !agent) {\n const options = { keepAlive: this._keepAlive, maxSockets };\n agent = usingSsl ? new https.Agent(options) : new http.Agent(options);\n this._agent = agent;\n }\n // if not using private agent and tunnel agent isn't setup then use global agent\n if (!agent) {\n agent = usingSsl ? https.globalAgent : http.globalAgent;\n }\n if (usingSsl && this._ignoreSslError) {\n // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process\n // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options\n // we have to cast it to any and change it directly\n agent.options = Object.assign(agent.options || {}, {\n rejectUnauthorized: false\n });\n }\n return agent;\n }\n _performExponentialBackoff(retryNumber) {\n return __awaiter(this, void 0, void 0, function* () {\n retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);\n const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);\n return new Promise(resolve => setTimeout(() => resolve(), ms));\n });\n }\n _processResponse(res, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n const statusCode = res.message.statusCode || 0;\n const response = {\n statusCode,\n result: null,\n headers: {}\n };\n // not found leads to null obj returned\n if (statusCode === HttpCodes.NotFound) {\n resolve(response);\n }\n // get the result from the body\n function dateTimeDeserializer(key, value) {\n if (typeof value === 'string') {\n const a = new Date(value);\n if (!isNaN(a.valueOf())) {\n return a;\n }\n }\n return value;\n }\n let obj;\n let contents;\n try {\n contents = yield res.readBody();\n if (contents && contents.length > 0) {\n if (options && options.deserializeDates) {\n obj = JSON.parse(contents, dateTimeDeserializer);\n }\n else {\n obj = JSON.parse(contents);\n }\n response.result = obj;\n }\n response.headers = res.message.headers;\n }\n catch (err) {\n // Invalid resource (contents not json); leaving result obj null\n }\n // note that 3xx redirects are handled by the http layer.\n if (statusCode > 299) {\n let msg;\n // if exception/error in body, attempt to get better error\n if (obj && obj.message) {\n msg = obj.message;\n }\n else if (contents && contents.length > 0) {\n // it may be the case that the exception is in the body message as string\n msg = contents;\n }\n else {\n msg = `Failed request: (${statusCode})`;\n }\n const err = new HttpClientError(msg, statusCode);\n err.result = response.result;\n reject(err);\n }\n else {\n resolve(response);\n }\n }));\n });\n }\n}\nexports.HttpClient = HttpClient;\nconst lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkBypass = exports.getProxyUrl = void 0;\nfunction getProxyUrl(reqUrl) {\n const usingSsl = reqUrl.protocol === 'https:';\n if (checkBypass(reqUrl)) {\n return undefined;\n }\n const proxyVar = (() => {\n if (usingSsl) {\n return process.env['https_proxy'] || process.env['HTTPS_PROXY'];\n }\n else {\n return process.env['http_proxy'] || process.env['HTTP_PROXY'];\n }\n })();\n if (proxyVar) {\n return new URL(proxyVar);\n }\n else {\n return undefined;\n }\n}\nexports.getProxyUrl = getProxyUrl;\nfunction checkBypass(reqUrl) {\n if (!reqUrl.hostname) {\n return false;\n }\n const reqHost = reqUrl.hostname;\n if (isLoopbackAddress(reqHost)) {\n return true;\n }\n const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';\n if (!noProxy) {\n return false;\n }\n // Determine the request port\n let reqPort;\n if (reqUrl.port) {\n reqPort = Number(reqUrl.port);\n }\n else if (reqUrl.protocol === 'http:') {\n reqPort = 80;\n }\n else if (reqUrl.protocol === 'https:') {\n reqPort = 443;\n }\n // Format the request hostname and hostname with port\n const upperReqHosts = [reqUrl.hostname.toUpperCase()];\n if (typeof reqPort === 'number') {\n upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);\n }\n // Compare request host against noproxy\n for (const upperNoProxyItem of noProxy\n .split(',')\n .map(x => x.trim().toUpperCase())\n .filter(x => x)) {\n if (upperNoProxyItem === '*' ||\n upperReqHosts.some(x => x === upperNoProxyItem ||\n x.endsWith(`.${upperNoProxyItem}`) ||\n (upperNoProxyItem.startsWith('.') &&\n x.endsWith(`${upperNoProxyItem}`)))) {\n return true;\n }\n }\n return false;\n}\nexports.checkBypass = checkBypass;\nfunction isLoopbackAddress(host) {\n const hostLower = host.toLowerCase();\n return (hostLower === 'localhost' ||\n hostLower.startsWith('127.') ||\n hostLower.startsWith('[::1]') ||\n hostLower.startsWith('[0:0:0:0:0:0:0:1]'));\n}\n//# sourceMappingURL=proxy.js.map","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst REGEX_IS_INSTALLATION_LEGACY = /^v1\\./;\nconst REGEX_IS_INSTALLATION = /^ghs_/;\nconst REGEX_IS_USER_TO_SERVER = /^ghu_/;\nasync function auth(token) {\n const isApp = token.split(/\\./).length === 3;\n const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token);\n const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token);\n const tokenType = isApp ? \"app\" : isInstallation ? \"installation\" : isUserToServer ? \"user-to-server\" : \"oauth\";\n return {\n type: \"token\",\n token: token,\n tokenType\n };\n}\n\n/**\n * Prefix token for usage in the Authorization header\n *\n * @param token OAuth token or JSON Web Token\n */\nfunction withAuthorizationPrefix(token) {\n if (token.split(/\\./).length === 3) {\n return `bearer ${token}`;\n }\n\n return `token ${token}`;\n}\n\nasync function hook(token, request, route, parameters) {\n const endpoint = request.endpoint.merge(route, parameters);\n endpoint.headers.authorization = withAuthorizationPrefix(token);\n return request(endpoint);\n}\n\nconst createTokenAuth = function createTokenAuth(token) {\n if (!token) {\n throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n }\n\n if (typeof token !== \"string\") {\n throw new Error(\"[@octokit/auth-token] Token passed to createTokenAuth is not a string\");\n }\n\n token = token.replace(/^(token|bearer) +/i, \"\");\n return Object.assign(auth.bind(null, token), {\n hook: hook.bind(null, token)\n });\n};\n\nexports.createTokenAuth = createTokenAuth;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar universalUserAgent = require('universal-user-agent');\nvar beforeAfterHook = require('before-after-hook');\nvar request = require('@octokit/request');\nvar graphql = require('@octokit/graphql');\nvar authToken = require('@octokit/auth-token');\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nconst VERSION = \"3.6.0\";\n\nconst _excluded = [\"authStrategy\"];\nclass Octokit {\n constructor(options = {}) {\n const hook = new beforeAfterHook.Collection();\n const requestDefaults = {\n baseUrl: request.request.endpoint.DEFAULTS.baseUrl,\n headers: {},\n request: Object.assign({}, options.request, {\n // @ts-ignore internal usage only, no need to type\n hook: hook.bind(null, \"request\")\n }),\n mediaType: {\n previews: [],\n format: \"\"\n }\n }; // prepend default user agent with `options.userAgent` if set\n\n requestDefaults.headers[\"user-agent\"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(\" \");\n\n if (options.baseUrl) {\n requestDefaults.baseUrl = options.baseUrl;\n }\n\n if (options.previews) {\n requestDefaults.mediaType.previews = options.previews;\n }\n\n if (options.timeZone) {\n requestDefaults.headers[\"time-zone\"] = options.timeZone;\n }\n\n this.request = request.request.defaults(requestDefaults);\n this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults);\n this.log = Object.assign({\n debug: () => {},\n info: () => {},\n warn: console.warn.bind(console),\n error: console.error.bind(console)\n }, options.log);\n this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance\n // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered.\n // (2) If only `options.auth` is set, use the default token authentication strategy.\n // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance.\n // TODO: type `options.auth` based on `options.authStrategy`.\n\n if (!options.authStrategy) {\n if (!options.auth) {\n // (1)\n this.auth = async () => ({\n type: \"unauthenticated\"\n });\n } else {\n // (2)\n const auth = authToken.createTokenAuth(options.auth); // @ts-ignore ¯\\_(ツ)_/¯\n\n hook.wrap(\"request\", auth.hook);\n this.auth = auth;\n }\n } else {\n const {\n authStrategy\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded);\n\n const auth = authStrategy(Object.assign({\n request: this.request,\n log: this.log,\n // we pass the current octokit instance as well as its constructor options\n // to allow for authentication strategies that return a new octokit instance\n // that shares the same internal state as the current one. The original\n // requirement for this was the \"event-octokit\" authentication strategy\n // of https://github.com/probot/octokit-auth-probot.\n octokit: this,\n octokitOptions: otherOptions\n }, options.auth)); // @ts-ignore ¯\\_(ツ)_/¯\n\n hook.wrap(\"request\", auth.hook);\n this.auth = auth;\n } // apply plugins\n // https://stackoverflow.com/a/16345172\n\n\n const classConstructor = this.constructor;\n classConstructor.plugins.forEach(plugin => {\n Object.assign(this, plugin(this, options));\n });\n }\n\n static defaults(defaults) {\n const OctokitWithDefaults = class extends this {\n constructor(...args) {\n const options = args[0] || {};\n\n if (typeof defaults === \"function\") {\n super(defaults(options));\n return;\n }\n\n super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? {\n userAgent: `${options.userAgent} ${defaults.userAgent}`\n } : null));\n }\n\n };\n return OctokitWithDefaults;\n }\n /**\n * Attach a plugin (or many) to your Octokit instance.\n *\n * @example\n * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)\n */\n\n\n static plugin(...newPlugins) {\n var _a;\n\n const currentPlugins = this.plugins;\n const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a);\n return NewOctokit;\n }\n\n}\nOctokit.VERSION = VERSION;\nOctokit.plugins = [];\n\nexports.Octokit = Octokit;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isPlainObject = require('is-plain-object');\nvar universalUserAgent = require('universal-user-agent');\n\nfunction lowercaseKeys(object) {\n if (!object) {\n return {};\n }\n\n return Object.keys(object).reduce((newObj, key) => {\n newObj[key.toLowerCase()] = object[key];\n return newObj;\n }, {});\n}\n\nfunction mergeDeep(defaults, options) {\n const result = Object.assign({}, defaults);\n Object.keys(options).forEach(key => {\n if (isPlainObject.isPlainObject(options[key])) {\n if (!(key in defaults)) Object.assign(result, {\n [key]: options[key]\n });else result[key] = mergeDeep(defaults[key], options[key]);\n } else {\n Object.assign(result, {\n [key]: options[key]\n });\n }\n });\n return result;\n}\n\nfunction removeUndefinedProperties(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n\n return obj;\n}\n\nfunction merge(defaults, route, options) {\n if (typeof route === \"string\") {\n let [method, url] = route.split(\" \");\n options = Object.assign(url ? {\n method,\n url\n } : {\n url: method\n }, options);\n } else {\n options = Object.assign({}, route);\n } // lowercase header names before merging with defaults to avoid duplicates\n\n\n options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging\n\n removeUndefinedProperties(options);\n removeUndefinedProperties(options.headers);\n const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten\n\n if (defaults && defaults.mediaType.previews.length) {\n mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);\n }\n\n mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, \"\"));\n return mergedOptions;\n}\n\nfunction addQueryParameters(url, parameters) {\n const separator = /\\?/.test(url) ? \"&\" : \"?\";\n const names = Object.keys(parameters);\n\n if (names.length === 0) {\n return url;\n }\n\n return url + separator + names.map(name => {\n if (name === \"q\") {\n return \"q=\" + parameters.q.split(\"+\").map(encodeURIComponent).join(\"+\");\n }\n\n return `${name}=${encodeURIComponent(parameters[name])}`;\n }).join(\"&\");\n}\n\nconst urlVariableRegex = /\\{[^}]+\\}/g;\n\nfunction removeNonChars(variableName) {\n return variableName.replace(/^\\W+|\\W+$/g, \"\").split(/,/);\n}\n\nfunction extractUrlVariableNames(url) {\n const matches = url.match(urlVariableRegex);\n\n if (!matches) {\n return [];\n }\n\n return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n\nfunction omit(object, keysToOmit) {\n return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {\n obj[key] = object[key];\n return obj;\n }, {});\n}\n\n// Based on https://github.com/bramstein/url-template, licensed under BSD\n// TODO: create separate package.\n//\n// Copyright (c) 2012-2014, Bram Stein\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n// 1. Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// 3. The name of the author may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR IMPLIED\n// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/* istanbul ignore file */\nfunction encodeReserved(str) {\n return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {\n if (!/%[0-9A-Fa-f]/.test(part)) {\n part = encodeURI(part).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n }\n\n return part;\n }).join(\"\");\n}\n\nfunction encodeUnreserved(str) {\n return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\nfunction encodeValue(operator, value, key) {\n value = operator === \"+\" || operator === \"#\" ? encodeReserved(value) : encodeUnreserved(value);\n\n if (key) {\n return encodeUnreserved(key) + \"=\" + value;\n } else {\n return value;\n }\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nfunction isKeyOperator(operator) {\n return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\n\nfunction getValues(context, operator, key, modifier) {\n var value = context[key],\n result = [];\n\n if (isDefined(value) && value !== \"\") {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n value = value.toString();\n\n if (modifier && modifier !== \"*\") {\n value = value.substring(0, parseInt(modifier, 10));\n }\n\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n } else {\n if (modifier === \"*\") {\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : \"\"));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n result.push(encodeValue(operator, value[k], k));\n }\n });\n }\n } else {\n const tmp = [];\n\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n tmp.push(encodeValue(operator, value));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n tmp.push(encodeUnreserved(k));\n tmp.push(encodeValue(operator, value[k].toString()));\n }\n });\n }\n\n if (isKeyOperator(operator)) {\n result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n } else if (tmp.length !== 0) {\n result.push(tmp.join(\",\"));\n }\n }\n }\n } else {\n if (operator === \";\") {\n if (isDefined(value)) {\n result.push(encodeUnreserved(key));\n }\n } else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n result.push(encodeUnreserved(key) + \"=\");\n } else if (value === \"\") {\n result.push(\"\");\n }\n }\n\n return result;\n}\n\nfunction parseUrl(template) {\n return {\n expand: expand.bind(null, template)\n };\n}\n\nfunction expand(template, context) {\n var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n return template.replace(/\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g, function (_, expression, literal) {\n if (expression) {\n let operator = \"\";\n const values = [];\n\n if (operators.indexOf(expression.charAt(0)) !== -1) {\n operator = expression.charAt(0);\n expression = expression.substr(1);\n }\n\n expression.split(/,/g).forEach(function (variable) {\n var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n });\n\n if (operator && operator !== \"+\") {\n var separator = \",\";\n\n if (operator === \"?\") {\n separator = \"&\";\n } else if (operator !== \"#\") {\n separator = operator;\n }\n\n return (values.length !== 0 ? operator : \"\") + values.join(separator);\n } else {\n return values.join(\",\");\n }\n } else {\n return encodeReserved(literal);\n }\n });\n}\n\nfunction parse(options) {\n // https://fetch.spec.whatwg.org/#methods\n let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible\n\n let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{$1}\");\n let headers = Object.assign({}, options.headers);\n let body;\n let parameters = omit(options, [\"method\", \"baseUrl\", \"url\", \"headers\", \"request\", \"mediaType\"]); // extract variable names from URL to calculate remaining variables later\n\n const urlVariableNames = extractUrlVariableNames(url);\n url = parseUrl(url).expand(parameters);\n\n if (!/^http/.test(url)) {\n url = options.baseUrl + url;\n }\n\n const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat(\"baseUrl\");\n const remainingParameters = omit(parameters, omittedParameters);\n const isBinaryRequest = /application\\/octet-stream/i.test(headers.accept);\n\n if (!isBinaryRequest) {\n if (options.mediaType.format) {\n // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw\n headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(\",\");\n }\n\n if (options.mediaType.previews.length) {\n const previewsFromAcceptHeader = headers.accept.match(/[\\w-]+(?=-preview)/g) || [];\n headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {\n const format = options.mediaType.format ? `.${options.mediaType.format}` : \"+json\";\n return `application/vnd.github.${preview}-preview${format}`;\n }).join(\",\");\n }\n } // for GET/HEAD requests, set URL query parameters from remaining parameters\n // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters\n\n\n if ([\"GET\", \"HEAD\"].includes(method)) {\n url = addQueryParameters(url, remainingParameters);\n } else {\n if (\"data\" in remainingParameters) {\n body = remainingParameters.data;\n } else {\n if (Object.keys(remainingParameters).length) {\n body = remainingParameters;\n } else {\n headers[\"content-length\"] = 0;\n }\n }\n } // default content-type for JSON if body is set\n\n\n if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n headers[\"content-type\"] = \"application/json; charset=utf-8\";\n } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.\n // fetch does not allow to set `content-length` header, but we can set body to an empty string\n\n\n if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n body = \"\";\n } // Only return body/request keys if present\n\n\n return Object.assign({\n method,\n url,\n headers\n }, typeof body !== \"undefined\" ? {\n body\n } : null, options.request ? {\n request: options.request\n } : null);\n}\n\nfunction endpointWithDefaults(defaults, route, options) {\n return parse(merge(defaults, route, options));\n}\n\nfunction withDefaults(oldDefaults, newDefaults) {\n const DEFAULTS = merge(oldDefaults, newDefaults);\n const endpoint = endpointWithDefaults.bind(null, DEFAULTS);\n return Object.assign(endpoint, {\n DEFAULTS,\n defaults: withDefaults.bind(null, DEFAULTS),\n merge: merge.bind(null, DEFAULTS),\n parse\n });\n}\n\nconst VERSION = \"6.0.12\";\n\nconst userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.\n// So we use RequestParameters and add method as additional required property.\n\nconst DEFAULTS = {\n method: \"GET\",\n baseUrl: \"https://api.github.com\",\n headers: {\n accept: \"application/vnd.github.v3+json\",\n \"user-agent\": userAgent\n },\n mediaType: {\n format: \"\",\n previews: []\n }\n};\n\nconst endpoint = withDefaults(null, DEFAULTS);\n\nexports.endpoint = endpoint;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar request = require('@octokit/request');\nvar universalUserAgent = require('universal-user-agent');\n\nconst VERSION = \"4.8.0\";\n\nfunction _buildMessageForResponseErrors(data) {\n return `Request failed due to following response errors:\\n` + data.errors.map(e => ` - ${e.message}`).join(\"\\n\");\n}\n\nclass GraphqlResponseError extends Error {\n constructor(request, headers, response) {\n super(_buildMessageForResponseErrors(response));\n this.request = request;\n this.headers = headers;\n this.response = response;\n this.name = \"GraphqlResponseError\"; // Expose the errors and response data in their shorthand properties.\n\n this.errors = response.errors;\n this.data = response.data; // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n}\n\nconst NON_VARIABLE_OPTIONS = [\"method\", \"baseUrl\", \"url\", \"headers\", \"request\", \"query\", \"mediaType\"];\nconst FORBIDDEN_VARIABLE_OPTIONS = [\"query\", \"method\", \"url\"];\nconst GHES_V3_SUFFIX_REGEX = /\\/api\\/v3\\/?$/;\nfunction graphql(request, query, options) {\n if (options) {\n if (typeof query === \"string\" && \"query\" in options) {\n return Promise.reject(new Error(`[@octokit/graphql] \"query\" cannot be used as variable name`));\n }\n\n for (const key in options) {\n if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;\n return Promise.reject(new Error(`[@octokit/graphql] \"${key}\" cannot be used as variable name`));\n }\n }\n\n const parsedOptions = typeof query === \"string\" ? Object.assign({\n query\n }, options) : query;\n const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {\n if (NON_VARIABLE_OPTIONS.includes(key)) {\n result[key] = parsedOptions[key];\n return result;\n }\n\n if (!result.variables) {\n result.variables = {};\n }\n\n result.variables[key] = parsedOptions[key];\n return result;\n }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix\n // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451\n\n const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl;\n\n if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {\n requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, \"/api/graphql\");\n }\n\n return request(requestOptions).then(response => {\n if (response.data.errors) {\n const headers = {};\n\n for (const key of Object.keys(response.headers)) {\n headers[key] = response.headers[key];\n }\n\n throw new GraphqlResponseError(requestOptions, headers, response.data);\n }\n\n return response.data.data;\n });\n}\n\nfunction withDefaults(request$1, newDefaults) {\n const newRequest = request$1.defaults(newDefaults);\n\n const newApi = (query, options) => {\n return graphql(newRequest, query, options);\n };\n\n return Object.assign(newApi, {\n defaults: withDefaults.bind(null, newRequest),\n endpoint: request.request.endpoint\n });\n}\n\nconst graphql$1 = withDefaults(request.request, {\n headers: {\n \"user-agent\": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}`\n },\n method: \"POST\",\n url: \"/graphql\"\n});\nfunction withCustomRequest(customRequest) {\n return withDefaults(customRequest, {\n method: \"POST\",\n url: \"/graphql\"\n });\n}\n\nexports.GraphqlResponseError = GraphqlResponseError;\nexports.graphql = graphql$1;\nexports.withCustomRequest = withCustomRequest;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst VERSION = \"2.21.3\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\n/**\n * Some “list” response that can be paginated have a different response structure\n *\n * They have a `total_count` key in the response (search also has `incomplete_results`,\n * /installation/repositories also has `repository_selection`), as well as a key with\n * the list of the items which name varies from endpoint to endpoint.\n *\n * Octokit normalizes these responses so that paginated results are always returned following\n * the same structure. One challenge is that if the list response has only one page, no Link\n * header is provided, so this header alone is not sufficient to check wether a response is\n * paginated or not.\n *\n * We check if a \"total_count\" key is present in the response data, but also make sure that\n * a \"url\" property is not, as the \"Get the combined status for a specific ref\" endpoint would\n * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref\n */\nfunction normalizePaginatedListResponse(response) {\n // endpoints can respond with 204 if repository is empty\n if (!response.data) {\n return _objectSpread2(_objectSpread2({}, response), {}, {\n data: []\n });\n }\n\n const responseNeedsNormalization = \"total_count\" in response.data && !(\"url\" in response.data);\n if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way\n // to retrieve the same information.\n\n const incompleteResults = response.data.incomplete_results;\n const repositorySelection = response.data.repository_selection;\n const totalCount = response.data.total_count;\n delete response.data.incomplete_results;\n delete response.data.repository_selection;\n delete response.data.total_count;\n const namespaceKey = Object.keys(response.data)[0];\n const data = response.data[namespaceKey];\n response.data = data;\n\n if (typeof incompleteResults !== \"undefined\") {\n response.data.incomplete_results = incompleteResults;\n }\n\n if (typeof repositorySelection !== \"undefined\") {\n response.data.repository_selection = repositorySelection;\n }\n\n response.data.total_count = totalCount;\n return response;\n}\n\nfunction iterator(octokit, route, parameters) {\n const options = typeof route === \"function\" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);\n const requestMethod = typeof route === \"function\" ? route : octokit.request;\n const method = options.method;\n const headers = options.headers;\n let url = options.url;\n return {\n [Symbol.asyncIterator]: () => ({\n async next() {\n if (!url) return {\n done: true\n };\n\n try {\n const response = await requestMethod({\n method,\n url,\n headers\n });\n const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format:\n // '; rel=\"next\", ; rel=\"last\"'\n // sets `url` to undefined if \"next\" URL is not present or `link` header is not set\n\n url = ((normalizedResponse.headers.link || \"\").match(/<([^>]+)>;\\s*rel=\"next\"/) || [])[1];\n return {\n value: normalizedResponse\n };\n } catch (error) {\n if (error.status !== 409) throw error;\n url = \"\";\n return {\n value: {\n status: 200,\n headers: {},\n data: []\n }\n };\n }\n }\n\n })\n };\n}\n\nfunction paginate(octokit, route, parameters, mapFn) {\n if (typeof parameters === \"function\") {\n mapFn = parameters;\n parameters = undefined;\n }\n\n return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);\n}\n\nfunction gather(octokit, results, iterator, mapFn) {\n return iterator.next().then(result => {\n if (result.done) {\n return results;\n }\n\n let earlyExit = false;\n\n function done() {\n earlyExit = true;\n }\n\n results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);\n\n if (earlyExit) {\n return results;\n }\n\n return gather(octokit, results, iterator, mapFn);\n });\n}\n\nconst composePaginateRest = Object.assign(paginate, {\n iterator\n});\n\nconst paginatingEndpoints = [\"GET /app/hook/deliveries\", \"GET /app/installations\", \"GET /applications/grants\", \"GET /authorizations\", \"GET /enterprises/{enterprise}/actions/permissions/organizations\", \"GET /enterprises/{enterprise}/actions/runner-groups\", \"GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations\", \"GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners\", \"GET /enterprises/{enterprise}/actions/runners\", \"GET /enterprises/{enterprise}/audit-log\", \"GET /enterprises/{enterprise}/secret-scanning/alerts\", \"GET /enterprises/{enterprise}/settings/billing/advanced-security\", \"GET /events\", \"GET /gists\", \"GET /gists/public\", \"GET /gists/starred\", \"GET /gists/{gist_id}/comments\", \"GET /gists/{gist_id}/commits\", \"GET /gists/{gist_id}/forks\", \"GET /installation/repositories\", \"GET /issues\", \"GET /licenses\", \"GET /marketplace_listing/plans\", \"GET /marketplace_listing/plans/{plan_id}/accounts\", \"GET /marketplace_listing/stubbed/plans\", \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\", \"GET /networks/{owner}/{repo}/events\", \"GET /notifications\", \"GET /organizations\", \"GET /orgs/{org}/actions/cache/usage-by-repository\", \"GET /orgs/{org}/actions/permissions/repositories\", \"GET /orgs/{org}/actions/runner-groups\", \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\", \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\", \"GET /orgs/{org}/actions/runners\", \"GET /orgs/{org}/actions/secrets\", \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\", \"GET /orgs/{org}/audit-log\", \"GET /orgs/{org}/blocks\", \"GET /orgs/{org}/code-scanning/alerts\", \"GET /orgs/{org}/codespaces\", \"GET /orgs/{org}/credential-authorizations\", \"GET /orgs/{org}/dependabot/secrets\", \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\", \"GET /orgs/{org}/events\", \"GET /orgs/{org}/external-groups\", \"GET /orgs/{org}/failed_invitations\", \"GET /orgs/{org}/hooks\", \"GET /orgs/{org}/hooks/{hook_id}/deliveries\", \"GET /orgs/{org}/installations\", \"GET /orgs/{org}/invitations\", \"GET /orgs/{org}/invitations/{invitation_id}/teams\", \"GET /orgs/{org}/issues\", \"GET /orgs/{org}/members\", \"GET /orgs/{org}/migrations\", \"GET /orgs/{org}/migrations/{migration_id}/repositories\", \"GET /orgs/{org}/outside_collaborators\", \"GET /orgs/{org}/packages\", \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\", \"GET /orgs/{org}/projects\", \"GET /orgs/{org}/public_members\", \"GET /orgs/{org}/repos\", \"GET /orgs/{org}/secret-scanning/alerts\", \"GET /orgs/{org}/settings/billing/advanced-security\", \"GET /orgs/{org}/team-sync/groups\", \"GET /orgs/{org}/teams\", \"GET /orgs/{org}/teams/{team_slug}/discussions\", \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\", \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\", \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\", \"GET /orgs/{org}/teams/{team_slug}/invitations\", \"GET /orgs/{org}/teams/{team_slug}/members\", \"GET /orgs/{org}/teams/{team_slug}/projects\", \"GET /orgs/{org}/teams/{team_slug}/repos\", \"GET /orgs/{org}/teams/{team_slug}/teams\", \"GET /projects/columns/{column_id}/cards\", \"GET /projects/{project_id}/collaborators\", \"GET /projects/{project_id}/columns\", \"GET /repos/{owner}/{repo}/actions/artifacts\", \"GET /repos/{owner}/{repo}/actions/caches\", \"GET /repos/{owner}/{repo}/actions/runners\", \"GET /repos/{owner}/{repo}/actions/runs\", \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\", \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\", \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\", \"GET /repos/{owner}/{repo}/actions/secrets\", \"GET /repos/{owner}/{repo}/actions/workflows\", \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\", \"GET /repos/{owner}/{repo}/assignees\", \"GET /repos/{owner}/{repo}/branches\", \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\", \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\", \"GET /repos/{owner}/{repo}/code-scanning/alerts\", \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\", \"GET /repos/{owner}/{repo}/code-scanning/analyses\", \"GET /repos/{owner}/{repo}/codespaces\", \"GET /repos/{owner}/{repo}/codespaces/devcontainers\", \"GET /repos/{owner}/{repo}/codespaces/secrets\", \"GET /repos/{owner}/{repo}/collaborators\", \"GET /repos/{owner}/{repo}/comments\", \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\", \"GET /repos/{owner}/{repo}/commits\", \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\", \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\", \"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\", \"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\", \"GET /repos/{owner}/{repo}/commits/{ref}/status\", \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\", \"GET /repos/{owner}/{repo}/contributors\", \"GET /repos/{owner}/{repo}/dependabot/secrets\", \"GET /repos/{owner}/{repo}/deployments\", \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\", \"GET /repos/{owner}/{repo}/environments\", \"GET /repos/{owner}/{repo}/events\", \"GET /repos/{owner}/{repo}/forks\", \"GET /repos/{owner}/{repo}/git/matching-refs/{ref}\", \"GET /repos/{owner}/{repo}/hooks\", \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\", \"GET /repos/{owner}/{repo}/invitations\", \"GET /repos/{owner}/{repo}/issues\", \"GET /repos/{owner}/{repo}/issues/comments\", \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\", \"GET /repos/{owner}/{repo}/issues/events\", \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\", \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\", \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\", \"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\", \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\", \"GET /repos/{owner}/{repo}/keys\", \"GET /repos/{owner}/{repo}/labels\", \"GET /repos/{owner}/{repo}/milestones\", \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\", \"GET /repos/{owner}/{repo}/notifications\", \"GET /repos/{owner}/{repo}/pages/builds\", \"GET /repos/{owner}/{repo}/projects\", \"GET /repos/{owner}/{repo}/pulls\", \"GET /repos/{owner}/{repo}/pulls/comments\", \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\", \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\", \"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\", \"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\", \"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\", \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\", \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\", \"GET /repos/{owner}/{repo}/releases\", \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\", \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\", \"GET /repos/{owner}/{repo}/secret-scanning/alerts\", \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\", \"GET /repos/{owner}/{repo}/stargazers\", \"GET /repos/{owner}/{repo}/subscribers\", \"GET /repos/{owner}/{repo}/tags\", \"GET /repos/{owner}/{repo}/teams\", \"GET /repos/{owner}/{repo}/topics\", \"GET /repositories\", \"GET /repositories/{repository_id}/environments/{environment_name}/secrets\", \"GET /search/code\", \"GET /search/commits\", \"GET /search/issues\", \"GET /search/labels\", \"GET /search/repositories\", \"GET /search/topics\", \"GET /search/users\", \"GET /teams/{team_id}/discussions\", \"GET /teams/{team_id}/discussions/{discussion_number}/comments\", \"GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions\", \"GET /teams/{team_id}/discussions/{discussion_number}/reactions\", \"GET /teams/{team_id}/invitations\", \"GET /teams/{team_id}/members\", \"GET /teams/{team_id}/projects\", \"GET /teams/{team_id}/repos\", \"GET /teams/{team_id}/teams\", \"GET /user/blocks\", \"GET /user/codespaces\", \"GET /user/codespaces/secrets\", \"GET /user/emails\", \"GET /user/followers\", \"GET /user/following\", \"GET /user/gpg_keys\", \"GET /user/installations\", \"GET /user/installations/{installation_id}/repositories\", \"GET /user/issues\", \"GET /user/keys\", \"GET /user/marketplace_purchases\", \"GET /user/marketplace_purchases/stubbed\", \"GET /user/memberships/orgs\", \"GET /user/migrations\", \"GET /user/migrations/{migration_id}/repositories\", \"GET /user/orgs\", \"GET /user/packages\", \"GET /user/packages/{package_type}/{package_name}/versions\", \"GET /user/public_emails\", \"GET /user/repos\", \"GET /user/repository_invitations\", \"GET /user/starred\", \"GET /user/subscriptions\", \"GET /user/teams\", \"GET /users\", \"GET /users/{username}/events\", \"GET /users/{username}/events/orgs/{org}\", \"GET /users/{username}/events/public\", \"GET /users/{username}/followers\", \"GET /users/{username}/following\", \"GET /users/{username}/gists\", \"GET /users/{username}/gpg_keys\", \"GET /users/{username}/keys\", \"GET /users/{username}/orgs\", \"GET /users/{username}/packages\", \"GET /users/{username}/projects\", \"GET /users/{username}/received_events\", \"GET /users/{username}/received_events/public\", \"GET /users/{username}/repos\", \"GET /users/{username}/starred\", \"GET /users/{username}/subscriptions\"];\n\nfunction isPaginatingEndpoint(arg) {\n if (typeof arg === \"string\") {\n return paginatingEndpoints.includes(arg);\n } else {\n return false;\n }\n}\n\n/**\n * @param octokit Octokit instance\n * @param options Options passed to Octokit constructor\n */\n\nfunction paginateRest(octokit) {\n return {\n paginate: Object.assign(paginate.bind(null, octokit), {\n iterator: iterator.bind(null, octokit)\n })\n };\n}\npaginateRest.VERSION = VERSION;\n\nexports.composePaginateRest = composePaginateRest;\nexports.isPaginatingEndpoint = isPaginatingEndpoint;\nexports.paginateRest = paginateRest;\nexports.paginatingEndpoints = paginatingEndpoints;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nconst Endpoints = {\n actions: {\n addCustomLabelsToSelfHostedRunnerForOrg: [\"POST /orgs/{org}/actions/runners/{runner_id}/labels\"],\n addCustomLabelsToSelfHostedRunnerForRepo: [\"POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"],\n addSelectedRepoToOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\"],\n approveWorkflowRun: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve\"],\n cancelWorkflowRun: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel\"],\n createOrUpdateEnvironmentSecret: [\"PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}\"],\n createOrUpdateOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}\"],\n createOrUpdateRepoSecret: [\"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n createRegistrationTokenForOrg: [\"POST /orgs/{org}/actions/runners/registration-token\"],\n createRegistrationTokenForRepo: [\"POST /repos/{owner}/{repo}/actions/runners/registration-token\"],\n createRemoveTokenForOrg: [\"POST /orgs/{org}/actions/runners/remove-token\"],\n createRemoveTokenForRepo: [\"POST /repos/{owner}/{repo}/actions/runners/remove-token\"],\n createWorkflowDispatch: [\"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\"],\n deleteActionsCacheById: [\"DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}\"],\n deleteActionsCacheByKey: [\"DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}\"],\n deleteArtifact: [\"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"],\n deleteEnvironmentSecret: [\"DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}\"],\n deleteOrgSecret: [\"DELETE /orgs/{org}/actions/secrets/{secret_name}\"],\n deleteRepoSecret: [\"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n deleteSelfHostedRunnerFromOrg: [\"DELETE /orgs/{org}/actions/runners/{runner_id}\"],\n deleteSelfHostedRunnerFromRepo: [\"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}\"],\n deleteWorkflowRun: [\"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n deleteWorkflowRunLogs: [\"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs\"],\n disableSelectedRepositoryGithubActionsOrganization: [\"DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}\"],\n disableWorkflow: [\"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable\"],\n downloadArtifact: [\"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}\"],\n downloadJobLogsForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs\"],\n downloadWorkflowRunAttemptLogs: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs\"],\n downloadWorkflowRunLogs: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs\"],\n enableSelectedRepositoryGithubActionsOrganization: [\"PUT /orgs/{org}/actions/permissions/repositories/{repository_id}\"],\n enableWorkflow: [\"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable\"],\n getActionsCacheList: [\"GET /repos/{owner}/{repo}/actions/caches\"],\n getActionsCacheUsage: [\"GET /repos/{owner}/{repo}/actions/cache/usage\"],\n getActionsCacheUsageByRepoForOrg: [\"GET /orgs/{org}/actions/cache/usage-by-repository\"],\n getActionsCacheUsageForEnterprise: [\"GET /enterprises/{enterprise}/actions/cache/usage\"],\n getActionsCacheUsageForOrg: [\"GET /orgs/{org}/actions/cache/usage\"],\n getAllowedActionsOrganization: [\"GET /orgs/{org}/actions/permissions/selected-actions\"],\n getAllowedActionsRepository: [\"GET /repos/{owner}/{repo}/actions/permissions/selected-actions\"],\n getArtifact: [\"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"],\n getEnvironmentPublicKey: [\"GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key\"],\n getEnvironmentSecret: [\"GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}\"],\n getGithubActionsDefaultWorkflowPermissionsEnterprise: [\"GET /enterprises/{enterprise}/actions/permissions/workflow\"],\n getGithubActionsDefaultWorkflowPermissionsOrganization: [\"GET /orgs/{org}/actions/permissions/workflow\"],\n getGithubActionsDefaultWorkflowPermissionsRepository: [\"GET /repos/{owner}/{repo}/actions/permissions/workflow\"],\n getGithubActionsPermissionsOrganization: [\"GET /orgs/{org}/actions/permissions\"],\n getGithubActionsPermissionsRepository: [\"GET /repos/{owner}/{repo}/actions/permissions\"],\n getJobForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/jobs/{job_id}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/actions/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/actions/secrets/{secret_name}\"],\n getPendingDeploymentsForRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\"],\n getRepoPermissions: [\"GET /repos/{owner}/{repo}/actions/permissions\", {}, {\n renamed: [\"actions\", \"getGithubActionsPermissionsRepository\"]\n }],\n getRepoPublicKey: [\"GET /repos/{owner}/{repo}/actions/secrets/public-key\"],\n getRepoSecret: [\"GET /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n getReviewsForRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals\"],\n getSelfHostedRunnerForOrg: [\"GET /orgs/{org}/actions/runners/{runner_id}\"],\n getSelfHostedRunnerForRepo: [\"GET /repos/{owner}/{repo}/actions/runners/{runner_id}\"],\n getWorkflow: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}\"],\n getWorkflowAccessToRepository: [\"GET /repos/{owner}/{repo}/actions/permissions/access\"],\n getWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n getWorkflowRunAttempt: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}\"],\n getWorkflowRunUsage: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing\"],\n getWorkflowUsage: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing\"],\n listArtifactsForRepo: [\"GET /repos/{owner}/{repo}/actions/artifacts\"],\n listEnvironmentSecrets: [\"GET /repositories/{repository_id}/environments/{environment_name}/secrets\"],\n listJobsForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\"],\n listJobsForWorkflowRunAttempt: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\"],\n listLabelsForSelfHostedRunnerForOrg: [\"GET /orgs/{org}/actions/runners/{runner_id}/labels\"],\n listLabelsForSelfHostedRunnerForRepo: [\"GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"],\n listOrgSecrets: [\"GET /orgs/{org}/actions/secrets\"],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/actions/secrets\"],\n listRepoWorkflows: [\"GET /repos/{owner}/{repo}/actions/workflows\"],\n listRunnerApplicationsForOrg: [\"GET /orgs/{org}/actions/runners/downloads\"],\n listRunnerApplicationsForRepo: [\"GET /repos/{owner}/{repo}/actions/runners/downloads\"],\n listSelectedReposForOrgSecret: [\"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\"],\n listSelectedRepositoriesEnabledGithubActionsOrganization: [\"GET /orgs/{org}/actions/permissions/repositories\"],\n listSelfHostedRunnersForOrg: [\"GET /orgs/{org}/actions/runners\"],\n listSelfHostedRunnersForRepo: [\"GET /repos/{owner}/{repo}/actions/runners\"],\n listWorkflowRunArtifacts: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\"],\n listWorkflowRuns: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\"],\n listWorkflowRunsForRepo: [\"GET /repos/{owner}/{repo}/actions/runs\"],\n reRunJobForWorkflowRun: [\"POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun\"],\n reRunWorkflow: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun\"],\n reRunWorkflowFailedJobs: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs\"],\n removeAllCustomLabelsFromSelfHostedRunnerForOrg: [\"DELETE /orgs/{org}/actions/runners/{runner_id}/labels\"],\n removeAllCustomLabelsFromSelfHostedRunnerForRepo: [\"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"],\n removeCustomLabelFromSelfHostedRunnerForOrg: [\"DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}\"],\n removeCustomLabelFromSelfHostedRunnerForRepo: [\"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}\"],\n removeSelectedRepoFromOrgSecret: [\"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\"],\n reviewPendingDeploymentsForRun: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\"],\n setAllowedActionsOrganization: [\"PUT /orgs/{org}/actions/permissions/selected-actions\"],\n setAllowedActionsRepository: [\"PUT /repos/{owner}/{repo}/actions/permissions/selected-actions\"],\n setCustomLabelsForSelfHostedRunnerForOrg: [\"PUT /orgs/{org}/actions/runners/{runner_id}/labels\"],\n setCustomLabelsForSelfHostedRunnerForRepo: [\"PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"],\n setGithubActionsDefaultWorkflowPermissionsEnterprise: [\"PUT /enterprises/{enterprise}/actions/permissions/workflow\"],\n setGithubActionsDefaultWorkflowPermissionsOrganization: [\"PUT /orgs/{org}/actions/permissions/workflow\"],\n setGithubActionsDefaultWorkflowPermissionsRepository: [\"PUT /repos/{owner}/{repo}/actions/permissions/workflow\"],\n setGithubActionsPermissionsOrganization: [\"PUT /orgs/{org}/actions/permissions\"],\n setGithubActionsPermissionsRepository: [\"PUT /repos/{owner}/{repo}/actions/permissions\"],\n setSelectedReposForOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories\"],\n setSelectedRepositoriesEnabledGithubActionsOrganization: [\"PUT /orgs/{org}/actions/permissions/repositories\"],\n setWorkflowAccessToRepository: [\"PUT /repos/{owner}/{repo}/actions/permissions/access\"]\n },\n activity: {\n checkRepoIsStarredByAuthenticatedUser: [\"GET /user/starred/{owner}/{repo}\"],\n deleteRepoSubscription: [\"DELETE /repos/{owner}/{repo}/subscription\"],\n deleteThreadSubscription: [\"DELETE /notifications/threads/{thread_id}/subscription\"],\n getFeeds: [\"GET /feeds\"],\n getRepoSubscription: [\"GET /repos/{owner}/{repo}/subscription\"],\n getThread: [\"GET /notifications/threads/{thread_id}\"],\n getThreadSubscriptionForAuthenticatedUser: [\"GET /notifications/threads/{thread_id}/subscription\"],\n listEventsForAuthenticatedUser: [\"GET /users/{username}/events\"],\n listNotificationsForAuthenticatedUser: [\"GET /notifications\"],\n listOrgEventsForAuthenticatedUser: [\"GET /users/{username}/events/orgs/{org}\"],\n listPublicEvents: [\"GET /events\"],\n listPublicEventsForRepoNetwork: [\"GET /networks/{owner}/{repo}/events\"],\n listPublicEventsForUser: [\"GET /users/{username}/events/public\"],\n listPublicOrgEvents: [\"GET /orgs/{org}/events\"],\n listReceivedEventsForUser: [\"GET /users/{username}/received_events\"],\n listReceivedPublicEventsForUser: [\"GET /users/{username}/received_events/public\"],\n listRepoEvents: [\"GET /repos/{owner}/{repo}/events\"],\n listRepoNotificationsForAuthenticatedUser: [\"GET /repos/{owner}/{repo}/notifications\"],\n listReposStarredByAuthenticatedUser: [\"GET /user/starred\"],\n listReposStarredByUser: [\"GET /users/{username}/starred\"],\n listReposWatchedByUser: [\"GET /users/{username}/subscriptions\"],\n listStargazersForRepo: [\"GET /repos/{owner}/{repo}/stargazers\"],\n listWatchedReposForAuthenticatedUser: [\"GET /user/subscriptions\"],\n listWatchersForRepo: [\"GET /repos/{owner}/{repo}/subscribers\"],\n markNotificationsAsRead: [\"PUT /notifications\"],\n markRepoNotificationsAsRead: [\"PUT /repos/{owner}/{repo}/notifications\"],\n markThreadAsRead: [\"PATCH /notifications/threads/{thread_id}\"],\n setRepoSubscription: [\"PUT /repos/{owner}/{repo}/subscription\"],\n setThreadSubscription: [\"PUT /notifications/threads/{thread_id}/subscription\"],\n starRepoForAuthenticatedUser: [\"PUT /user/starred/{owner}/{repo}\"],\n unstarRepoForAuthenticatedUser: [\"DELETE /user/starred/{owner}/{repo}\"]\n },\n apps: {\n addRepoToInstallation: [\"PUT /user/installations/{installation_id}/repositories/{repository_id}\", {}, {\n renamed: [\"apps\", \"addRepoToInstallationForAuthenticatedUser\"]\n }],\n addRepoToInstallationForAuthenticatedUser: [\"PUT /user/installations/{installation_id}/repositories/{repository_id}\"],\n checkToken: [\"POST /applications/{client_id}/token\"],\n createFromManifest: [\"POST /app-manifests/{code}/conversions\"],\n createInstallationAccessToken: [\"POST /app/installations/{installation_id}/access_tokens\"],\n deleteAuthorization: [\"DELETE /applications/{client_id}/grant\"],\n deleteInstallation: [\"DELETE /app/installations/{installation_id}\"],\n deleteToken: [\"DELETE /applications/{client_id}/token\"],\n getAuthenticated: [\"GET /app\"],\n getBySlug: [\"GET /apps/{app_slug}\"],\n getInstallation: [\"GET /app/installations/{installation_id}\"],\n getOrgInstallation: [\"GET /orgs/{org}/installation\"],\n getRepoInstallation: [\"GET /repos/{owner}/{repo}/installation\"],\n getSubscriptionPlanForAccount: [\"GET /marketplace_listing/accounts/{account_id}\"],\n getSubscriptionPlanForAccountStubbed: [\"GET /marketplace_listing/stubbed/accounts/{account_id}\"],\n getUserInstallation: [\"GET /users/{username}/installation\"],\n getWebhookConfigForApp: [\"GET /app/hook/config\"],\n getWebhookDelivery: [\"GET /app/hook/deliveries/{delivery_id}\"],\n listAccountsForPlan: [\"GET /marketplace_listing/plans/{plan_id}/accounts\"],\n listAccountsForPlanStubbed: [\"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\"],\n listInstallationReposForAuthenticatedUser: [\"GET /user/installations/{installation_id}/repositories\"],\n listInstallations: [\"GET /app/installations\"],\n listInstallationsForAuthenticatedUser: [\"GET /user/installations\"],\n listPlans: [\"GET /marketplace_listing/plans\"],\n listPlansStubbed: [\"GET /marketplace_listing/stubbed/plans\"],\n listReposAccessibleToInstallation: [\"GET /installation/repositories\"],\n listSubscriptionsForAuthenticatedUser: [\"GET /user/marketplace_purchases\"],\n listSubscriptionsForAuthenticatedUserStubbed: [\"GET /user/marketplace_purchases/stubbed\"],\n listWebhookDeliveries: [\"GET /app/hook/deliveries\"],\n redeliverWebhookDelivery: [\"POST /app/hook/deliveries/{delivery_id}/attempts\"],\n removeRepoFromInstallation: [\"DELETE /user/installations/{installation_id}/repositories/{repository_id}\", {}, {\n renamed: [\"apps\", \"removeRepoFromInstallationForAuthenticatedUser\"]\n }],\n removeRepoFromInstallationForAuthenticatedUser: [\"DELETE /user/installations/{installation_id}/repositories/{repository_id}\"],\n resetToken: [\"PATCH /applications/{client_id}/token\"],\n revokeInstallationAccessToken: [\"DELETE /installation/token\"],\n scopeToken: [\"POST /applications/{client_id}/token/scoped\"],\n suspendInstallation: [\"PUT /app/installations/{installation_id}/suspended\"],\n unsuspendInstallation: [\"DELETE /app/installations/{installation_id}/suspended\"],\n updateWebhookConfigForApp: [\"PATCH /app/hook/config\"]\n },\n billing: {\n getGithubActionsBillingOrg: [\"GET /orgs/{org}/settings/billing/actions\"],\n getGithubActionsBillingUser: [\"GET /users/{username}/settings/billing/actions\"],\n getGithubAdvancedSecurityBillingGhe: [\"GET /enterprises/{enterprise}/settings/billing/advanced-security\"],\n getGithubAdvancedSecurityBillingOrg: [\"GET /orgs/{org}/settings/billing/advanced-security\"],\n getGithubPackagesBillingOrg: [\"GET /orgs/{org}/settings/billing/packages\"],\n getGithubPackagesBillingUser: [\"GET /users/{username}/settings/billing/packages\"],\n getSharedStorageBillingOrg: [\"GET /orgs/{org}/settings/billing/shared-storage\"],\n getSharedStorageBillingUser: [\"GET /users/{username}/settings/billing/shared-storage\"]\n },\n checks: {\n create: [\"POST /repos/{owner}/{repo}/check-runs\"],\n createSuite: [\"POST /repos/{owner}/{repo}/check-suites\"],\n get: [\"GET /repos/{owner}/{repo}/check-runs/{check_run_id}\"],\n getSuite: [\"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}\"],\n listAnnotations: [\"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\"],\n listForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\"],\n listForSuite: [\"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\"],\n listSuitesForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\"],\n rerequestRun: [\"POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest\"],\n rerequestSuite: [\"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest\"],\n setSuitesPreferences: [\"PATCH /repos/{owner}/{repo}/check-suites/preferences\"],\n update: [\"PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}\"]\n },\n codeScanning: {\n deleteAnalysis: [\"DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}\"],\n getAlert: [\"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\", {}, {\n renamedParameters: {\n alert_id: \"alert_number\"\n }\n }],\n getAnalysis: [\"GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\"],\n getSarif: [\"GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}\"],\n listAlertInstances: [\"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\"],\n listAlertsForOrg: [\"GET /orgs/{org}/code-scanning/alerts\"],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/code-scanning/alerts\"],\n listAlertsInstances: [\"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\", {}, {\n renamed: [\"codeScanning\", \"listAlertInstances\"]\n }],\n listRecentAnalyses: [\"GET /repos/{owner}/{repo}/code-scanning/analyses\"],\n updateAlert: [\"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\"],\n uploadSarif: [\"POST /repos/{owner}/{repo}/code-scanning/sarifs\"]\n },\n codesOfConduct: {\n getAllCodesOfConduct: [\"GET /codes_of_conduct\"],\n getConductCode: [\"GET /codes_of_conduct/{key}\"]\n },\n codespaces: {\n addRepositoryForSecretForAuthenticatedUser: [\"PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\"],\n codespaceMachinesForAuthenticatedUser: [\"GET /user/codespaces/{codespace_name}/machines\"],\n createForAuthenticatedUser: [\"POST /user/codespaces\"],\n createOrUpdateRepoSecret: [\"PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"],\n createOrUpdateSecretForAuthenticatedUser: [\"PUT /user/codespaces/secrets/{secret_name}\"],\n createWithPrForAuthenticatedUser: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces\"],\n createWithRepoForAuthenticatedUser: [\"POST /repos/{owner}/{repo}/codespaces\"],\n deleteForAuthenticatedUser: [\"DELETE /user/codespaces/{codespace_name}\"],\n deleteFromOrganization: [\"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\"],\n deleteRepoSecret: [\"DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"],\n deleteSecretForAuthenticatedUser: [\"DELETE /user/codespaces/secrets/{secret_name}\"],\n exportForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/exports\"],\n getExportDetailsForAuthenticatedUser: [\"GET /user/codespaces/{codespace_name}/exports/{export_id}\"],\n getForAuthenticatedUser: [\"GET /user/codespaces/{codespace_name}\"],\n getPublicKeyForAuthenticatedUser: [\"GET /user/codespaces/secrets/public-key\"],\n getRepoPublicKey: [\"GET /repos/{owner}/{repo}/codespaces/secrets/public-key\"],\n getRepoSecret: [\"GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"],\n getSecretForAuthenticatedUser: [\"GET /user/codespaces/secrets/{secret_name}\"],\n listDevcontainersInRepositoryForAuthenticatedUser: [\"GET /repos/{owner}/{repo}/codespaces/devcontainers\"],\n listForAuthenticatedUser: [\"GET /user/codespaces\"],\n listInOrganization: [\"GET /orgs/{org}/codespaces\", {}, {\n renamedParameters: {\n org_id: \"org\"\n }\n }],\n listInRepositoryForAuthenticatedUser: [\"GET /repos/{owner}/{repo}/codespaces\"],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/codespaces/secrets\"],\n listRepositoriesForSecretForAuthenticatedUser: [\"GET /user/codespaces/secrets/{secret_name}/repositories\"],\n listSecretsForAuthenticatedUser: [\"GET /user/codespaces/secrets\"],\n removeRepositoryForSecretForAuthenticatedUser: [\"DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\"],\n repoMachinesForAuthenticatedUser: [\"GET /repos/{owner}/{repo}/codespaces/machines\"],\n setRepositoriesForSecretForAuthenticatedUser: [\"PUT /user/codespaces/secrets/{secret_name}/repositories\"],\n startForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/start\"],\n stopForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/stop\"],\n stopInOrganization: [\"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\"],\n updateForAuthenticatedUser: [\"PATCH /user/codespaces/{codespace_name}\"]\n },\n dependabot: {\n addSelectedRepoToOrgSecret: [\"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\"],\n createOrUpdateOrgSecret: [\"PUT /orgs/{org}/dependabot/secrets/{secret_name}\"],\n createOrUpdateRepoSecret: [\"PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"],\n deleteOrgSecret: [\"DELETE /orgs/{org}/dependabot/secrets/{secret_name}\"],\n deleteRepoSecret: [\"DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/dependabot/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/dependabot/secrets/{secret_name}\"],\n getRepoPublicKey: [\"GET /repos/{owner}/{repo}/dependabot/secrets/public-key\"],\n getRepoSecret: [\"GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"],\n listOrgSecrets: [\"GET /orgs/{org}/dependabot/secrets\"],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/dependabot/secrets\"],\n listSelectedReposForOrgSecret: [\"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\"],\n removeSelectedRepoFromOrgSecret: [\"DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\"],\n setSelectedReposForOrgSecret: [\"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories\"]\n },\n dependencyGraph: {\n createRepositorySnapshot: [\"POST /repos/{owner}/{repo}/dependency-graph/snapshots\"],\n diffRange: [\"GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}\"]\n },\n emojis: {\n get: [\"GET /emojis\"]\n },\n enterpriseAdmin: {\n addCustomLabelsToSelfHostedRunnerForEnterprise: [\"POST /enterprises/{enterprise}/actions/runners/{runner_id}/labels\"],\n disableSelectedOrganizationGithubActionsEnterprise: [\"DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}\"],\n enableSelectedOrganizationGithubActionsEnterprise: [\"PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}\"],\n getAllowedActionsEnterprise: [\"GET /enterprises/{enterprise}/actions/permissions/selected-actions\"],\n getGithubActionsPermissionsEnterprise: [\"GET /enterprises/{enterprise}/actions/permissions\"],\n getServerStatistics: [\"GET /enterprise-installation/{enterprise_or_org}/server-statistics\"],\n listLabelsForSelfHostedRunnerForEnterprise: [\"GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels\"],\n listSelectedOrganizationsEnabledGithubActionsEnterprise: [\"GET /enterprises/{enterprise}/actions/permissions/organizations\"],\n removeAllCustomLabelsFromSelfHostedRunnerForEnterprise: [\"DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels\"],\n removeCustomLabelFromSelfHostedRunnerForEnterprise: [\"DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels/{name}\"],\n setAllowedActionsEnterprise: [\"PUT /enterprises/{enterprise}/actions/permissions/selected-actions\"],\n setCustomLabelsForSelfHostedRunnerForEnterprise: [\"PUT /enterprises/{enterprise}/actions/runners/{runner_id}/labels\"],\n setGithubActionsPermissionsEnterprise: [\"PUT /enterprises/{enterprise}/actions/permissions\"],\n setSelectedOrganizationsEnabledGithubActionsEnterprise: [\"PUT /enterprises/{enterprise}/actions/permissions/organizations\"]\n },\n gists: {\n checkIsStarred: [\"GET /gists/{gist_id}/star\"],\n create: [\"POST /gists\"],\n createComment: [\"POST /gists/{gist_id}/comments\"],\n delete: [\"DELETE /gists/{gist_id}\"],\n deleteComment: [\"DELETE /gists/{gist_id}/comments/{comment_id}\"],\n fork: [\"POST /gists/{gist_id}/forks\"],\n get: [\"GET /gists/{gist_id}\"],\n getComment: [\"GET /gists/{gist_id}/comments/{comment_id}\"],\n getRevision: [\"GET /gists/{gist_id}/{sha}\"],\n list: [\"GET /gists\"],\n listComments: [\"GET /gists/{gist_id}/comments\"],\n listCommits: [\"GET /gists/{gist_id}/commits\"],\n listForUser: [\"GET /users/{username}/gists\"],\n listForks: [\"GET /gists/{gist_id}/forks\"],\n listPublic: [\"GET /gists/public\"],\n listStarred: [\"GET /gists/starred\"],\n star: [\"PUT /gists/{gist_id}/star\"],\n unstar: [\"DELETE /gists/{gist_id}/star\"],\n update: [\"PATCH /gists/{gist_id}\"],\n updateComment: [\"PATCH /gists/{gist_id}/comments/{comment_id}\"]\n },\n git: {\n createBlob: [\"POST /repos/{owner}/{repo}/git/blobs\"],\n createCommit: [\"POST /repos/{owner}/{repo}/git/commits\"],\n createRef: [\"POST /repos/{owner}/{repo}/git/refs\"],\n createTag: [\"POST /repos/{owner}/{repo}/git/tags\"],\n createTree: [\"POST /repos/{owner}/{repo}/git/trees\"],\n deleteRef: [\"DELETE /repos/{owner}/{repo}/git/refs/{ref}\"],\n getBlob: [\"GET /repos/{owner}/{repo}/git/blobs/{file_sha}\"],\n getCommit: [\"GET /repos/{owner}/{repo}/git/commits/{commit_sha}\"],\n getRef: [\"GET /repos/{owner}/{repo}/git/ref/{ref}\"],\n getTag: [\"GET /repos/{owner}/{repo}/git/tags/{tag_sha}\"],\n getTree: [\"GET /repos/{owner}/{repo}/git/trees/{tree_sha}\"],\n listMatchingRefs: [\"GET /repos/{owner}/{repo}/git/matching-refs/{ref}\"],\n updateRef: [\"PATCH /repos/{owner}/{repo}/git/refs/{ref}\"]\n },\n gitignore: {\n getAllTemplates: [\"GET /gitignore/templates\"],\n getTemplate: [\"GET /gitignore/templates/{name}\"]\n },\n interactions: {\n getRestrictionsForAuthenticatedUser: [\"GET /user/interaction-limits\"],\n getRestrictionsForOrg: [\"GET /orgs/{org}/interaction-limits\"],\n getRestrictionsForRepo: [\"GET /repos/{owner}/{repo}/interaction-limits\"],\n getRestrictionsForYourPublicRepos: [\"GET /user/interaction-limits\", {}, {\n renamed: [\"interactions\", \"getRestrictionsForAuthenticatedUser\"]\n }],\n removeRestrictionsForAuthenticatedUser: [\"DELETE /user/interaction-limits\"],\n removeRestrictionsForOrg: [\"DELETE /orgs/{org}/interaction-limits\"],\n removeRestrictionsForRepo: [\"DELETE /repos/{owner}/{repo}/interaction-limits\"],\n removeRestrictionsForYourPublicRepos: [\"DELETE /user/interaction-limits\", {}, {\n renamed: [\"interactions\", \"removeRestrictionsForAuthenticatedUser\"]\n }],\n setRestrictionsForAuthenticatedUser: [\"PUT /user/interaction-limits\"],\n setRestrictionsForOrg: [\"PUT /orgs/{org}/interaction-limits\"],\n setRestrictionsForRepo: [\"PUT /repos/{owner}/{repo}/interaction-limits\"],\n setRestrictionsForYourPublicRepos: [\"PUT /user/interaction-limits\", {}, {\n renamed: [\"interactions\", \"setRestrictionsForAuthenticatedUser\"]\n }]\n },\n issues: {\n addAssignees: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\"],\n addLabels: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n checkUserCanBeAssigned: [\"GET /repos/{owner}/{repo}/assignees/{assignee}\"],\n create: [\"POST /repos/{owner}/{repo}/issues\"],\n createComment: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\"],\n createLabel: [\"POST /repos/{owner}/{repo}/labels\"],\n createMilestone: [\"POST /repos/{owner}/{repo}/milestones\"],\n deleteComment: [\"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n deleteLabel: [\"DELETE /repos/{owner}/{repo}/labels/{name}\"],\n deleteMilestone: [\"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\"],\n get: [\"GET /repos/{owner}/{repo}/issues/{issue_number}\"],\n getComment: [\"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n getEvent: [\"GET /repos/{owner}/{repo}/issues/events/{event_id}\"],\n getLabel: [\"GET /repos/{owner}/{repo}/labels/{name}\"],\n getMilestone: [\"GET /repos/{owner}/{repo}/milestones/{milestone_number}\"],\n list: [\"GET /issues\"],\n listAssignees: [\"GET /repos/{owner}/{repo}/assignees\"],\n listComments: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\"],\n listCommentsForRepo: [\"GET /repos/{owner}/{repo}/issues/comments\"],\n listEvents: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/events\"],\n listEventsForRepo: [\"GET /repos/{owner}/{repo}/issues/events\"],\n listEventsForTimeline: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\"],\n listForAuthenticatedUser: [\"GET /user/issues\"],\n listForOrg: [\"GET /orgs/{org}/issues\"],\n listForRepo: [\"GET /repos/{owner}/{repo}/issues\"],\n listLabelsForMilestone: [\"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\"],\n listLabelsForRepo: [\"GET /repos/{owner}/{repo}/labels\"],\n listLabelsOnIssue: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n listMilestones: [\"GET /repos/{owner}/{repo}/milestones\"],\n lock: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n removeAllLabels: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n removeAssignees: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\"],\n removeLabel: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\"],\n setLabels: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n unlock: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n update: [\"PATCH /repos/{owner}/{repo}/issues/{issue_number}\"],\n updateComment: [\"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n updateLabel: [\"PATCH /repos/{owner}/{repo}/labels/{name}\"],\n updateMilestone: [\"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\"]\n },\n licenses: {\n get: [\"GET /licenses/{license}\"],\n getAllCommonlyUsed: [\"GET /licenses\"],\n getForRepo: [\"GET /repos/{owner}/{repo}/license\"]\n },\n markdown: {\n render: [\"POST /markdown\"],\n renderRaw: [\"POST /markdown/raw\", {\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\"\n }\n }]\n },\n meta: {\n get: [\"GET /meta\"],\n getOctocat: [\"GET /octocat\"],\n getZen: [\"GET /zen\"],\n root: [\"GET /\"]\n },\n migrations: {\n cancelImport: [\"DELETE /repos/{owner}/{repo}/import\"],\n deleteArchiveForAuthenticatedUser: [\"DELETE /user/migrations/{migration_id}/archive\"],\n deleteArchiveForOrg: [\"DELETE /orgs/{org}/migrations/{migration_id}/archive\"],\n downloadArchiveForOrg: [\"GET /orgs/{org}/migrations/{migration_id}/archive\"],\n getArchiveForAuthenticatedUser: [\"GET /user/migrations/{migration_id}/archive\"],\n getCommitAuthors: [\"GET /repos/{owner}/{repo}/import/authors\"],\n getImportStatus: [\"GET /repos/{owner}/{repo}/import\"],\n getLargeFiles: [\"GET /repos/{owner}/{repo}/import/large_files\"],\n getStatusForAuthenticatedUser: [\"GET /user/migrations/{migration_id}\"],\n getStatusForOrg: [\"GET /orgs/{org}/migrations/{migration_id}\"],\n listForAuthenticatedUser: [\"GET /user/migrations\"],\n listForOrg: [\"GET /orgs/{org}/migrations\"],\n listReposForAuthenticatedUser: [\"GET /user/migrations/{migration_id}/repositories\"],\n listReposForOrg: [\"GET /orgs/{org}/migrations/{migration_id}/repositories\"],\n listReposForUser: [\"GET /user/migrations/{migration_id}/repositories\", {}, {\n renamed: [\"migrations\", \"listReposForAuthenticatedUser\"]\n }],\n mapCommitAuthor: [\"PATCH /repos/{owner}/{repo}/import/authors/{author_id}\"],\n setLfsPreference: [\"PATCH /repos/{owner}/{repo}/import/lfs\"],\n startForAuthenticatedUser: [\"POST /user/migrations\"],\n startForOrg: [\"POST /orgs/{org}/migrations\"],\n startImport: [\"PUT /repos/{owner}/{repo}/import\"],\n unlockRepoForAuthenticatedUser: [\"DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock\"],\n unlockRepoForOrg: [\"DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock\"],\n updateImport: [\"PATCH /repos/{owner}/{repo}/import\"]\n },\n orgs: {\n blockUser: [\"PUT /orgs/{org}/blocks/{username}\"],\n cancelInvitation: [\"DELETE /orgs/{org}/invitations/{invitation_id}\"],\n checkBlockedUser: [\"GET /orgs/{org}/blocks/{username}\"],\n checkMembershipForUser: [\"GET /orgs/{org}/members/{username}\"],\n checkPublicMembershipForUser: [\"GET /orgs/{org}/public_members/{username}\"],\n convertMemberToOutsideCollaborator: [\"PUT /orgs/{org}/outside_collaborators/{username}\"],\n createInvitation: [\"POST /orgs/{org}/invitations\"],\n createWebhook: [\"POST /orgs/{org}/hooks\"],\n deleteWebhook: [\"DELETE /orgs/{org}/hooks/{hook_id}\"],\n get: [\"GET /orgs/{org}\"],\n getMembershipForAuthenticatedUser: [\"GET /user/memberships/orgs/{org}\"],\n getMembershipForUser: [\"GET /orgs/{org}/memberships/{username}\"],\n getWebhook: [\"GET /orgs/{org}/hooks/{hook_id}\"],\n getWebhookConfigForOrg: [\"GET /orgs/{org}/hooks/{hook_id}/config\"],\n getWebhookDelivery: [\"GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}\"],\n list: [\"GET /organizations\"],\n listAppInstallations: [\"GET /orgs/{org}/installations\"],\n listBlockedUsers: [\"GET /orgs/{org}/blocks\"],\n listCustomRoles: [\"GET /organizations/{organization_id}/custom_roles\"],\n listFailedInvitations: [\"GET /orgs/{org}/failed_invitations\"],\n listForAuthenticatedUser: [\"GET /user/orgs\"],\n listForUser: [\"GET /users/{username}/orgs\"],\n listInvitationTeams: [\"GET /orgs/{org}/invitations/{invitation_id}/teams\"],\n listMembers: [\"GET /orgs/{org}/members\"],\n listMembershipsForAuthenticatedUser: [\"GET /user/memberships/orgs\"],\n listOutsideCollaborators: [\"GET /orgs/{org}/outside_collaborators\"],\n listPendingInvitations: [\"GET /orgs/{org}/invitations\"],\n listPublicMembers: [\"GET /orgs/{org}/public_members\"],\n listWebhookDeliveries: [\"GET /orgs/{org}/hooks/{hook_id}/deliveries\"],\n listWebhooks: [\"GET /orgs/{org}/hooks\"],\n pingWebhook: [\"POST /orgs/{org}/hooks/{hook_id}/pings\"],\n redeliverWebhookDelivery: [\"POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\"],\n removeMember: [\"DELETE /orgs/{org}/members/{username}\"],\n removeMembershipForUser: [\"DELETE /orgs/{org}/memberships/{username}\"],\n removeOutsideCollaborator: [\"DELETE /orgs/{org}/outside_collaborators/{username}\"],\n removePublicMembershipForAuthenticatedUser: [\"DELETE /orgs/{org}/public_members/{username}\"],\n setMembershipForUser: [\"PUT /orgs/{org}/memberships/{username}\"],\n setPublicMembershipForAuthenticatedUser: [\"PUT /orgs/{org}/public_members/{username}\"],\n unblockUser: [\"DELETE /orgs/{org}/blocks/{username}\"],\n update: [\"PATCH /orgs/{org}\"],\n updateMembershipForAuthenticatedUser: [\"PATCH /user/memberships/orgs/{org}\"],\n updateWebhook: [\"PATCH /orgs/{org}/hooks/{hook_id}\"],\n updateWebhookConfigForOrg: [\"PATCH /orgs/{org}/hooks/{hook_id}/config\"]\n },\n packages: {\n deletePackageForAuthenticatedUser: [\"DELETE /user/packages/{package_type}/{package_name}\"],\n deletePackageForOrg: [\"DELETE /orgs/{org}/packages/{package_type}/{package_name}\"],\n deletePackageForUser: [\"DELETE /users/{username}/packages/{package_type}/{package_name}\"],\n deletePackageVersionForAuthenticatedUser: [\"DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}\"],\n deletePackageVersionForOrg: [\"DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\"],\n deletePackageVersionForUser: [\"DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\"],\n getAllPackageVersionsForAPackageOwnedByAnOrg: [\"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\", {}, {\n renamed: [\"packages\", \"getAllPackageVersionsForPackageOwnedByOrg\"]\n }],\n getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [\"GET /user/packages/{package_type}/{package_name}/versions\", {}, {\n renamed: [\"packages\", \"getAllPackageVersionsForPackageOwnedByAuthenticatedUser\"]\n }],\n getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [\"GET /user/packages/{package_type}/{package_name}/versions\"],\n getAllPackageVersionsForPackageOwnedByOrg: [\"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\"],\n getAllPackageVersionsForPackageOwnedByUser: [\"GET /users/{username}/packages/{package_type}/{package_name}/versions\"],\n getPackageForAuthenticatedUser: [\"GET /user/packages/{package_type}/{package_name}\"],\n getPackageForOrganization: [\"GET /orgs/{org}/packages/{package_type}/{package_name}\"],\n getPackageForUser: [\"GET /users/{username}/packages/{package_type}/{package_name}\"],\n getPackageVersionForAuthenticatedUser: [\"GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}\"],\n getPackageVersionForOrganization: [\"GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\"],\n getPackageVersionForUser: [\"GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\"],\n listPackagesForAuthenticatedUser: [\"GET /user/packages\"],\n listPackagesForOrganization: [\"GET /orgs/{org}/packages\"],\n listPackagesForUser: [\"GET /users/{username}/packages\"],\n restorePackageForAuthenticatedUser: [\"POST /user/packages/{package_type}/{package_name}/restore{?token}\"],\n restorePackageForOrg: [\"POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}\"],\n restorePackageForUser: [\"POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}\"],\n restorePackageVersionForAuthenticatedUser: [\"POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"],\n restorePackageVersionForOrg: [\"POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"],\n restorePackageVersionForUser: [\"POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"]\n },\n projects: {\n addCollaborator: [\"PUT /projects/{project_id}/collaborators/{username}\"],\n createCard: [\"POST /projects/columns/{column_id}/cards\"],\n createColumn: [\"POST /projects/{project_id}/columns\"],\n createForAuthenticatedUser: [\"POST /user/projects\"],\n createForOrg: [\"POST /orgs/{org}/projects\"],\n createForRepo: [\"POST /repos/{owner}/{repo}/projects\"],\n delete: [\"DELETE /projects/{project_id}\"],\n deleteCard: [\"DELETE /projects/columns/cards/{card_id}\"],\n deleteColumn: [\"DELETE /projects/columns/{column_id}\"],\n get: [\"GET /projects/{project_id}\"],\n getCard: [\"GET /projects/columns/cards/{card_id}\"],\n getColumn: [\"GET /projects/columns/{column_id}\"],\n getPermissionForUser: [\"GET /projects/{project_id}/collaborators/{username}/permission\"],\n listCards: [\"GET /projects/columns/{column_id}/cards\"],\n listCollaborators: [\"GET /projects/{project_id}/collaborators\"],\n listColumns: [\"GET /projects/{project_id}/columns\"],\n listForOrg: [\"GET /orgs/{org}/projects\"],\n listForRepo: [\"GET /repos/{owner}/{repo}/projects\"],\n listForUser: [\"GET /users/{username}/projects\"],\n moveCard: [\"POST /projects/columns/cards/{card_id}/moves\"],\n moveColumn: [\"POST /projects/columns/{column_id}/moves\"],\n removeCollaborator: [\"DELETE /projects/{project_id}/collaborators/{username}\"],\n update: [\"PATCH /projects/{project_id}\"],\n updateCard: [\"PATCH /projects/columns/cards/{card_id}\"],\n updateColumn: [\"PATCH /projects/columns/{column_id}\"]\n },\n pulls: {\n checkIfMerged: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n create: [\"POST /repos/{owner}/{repo}/pulls\"],\n createReplyForReviewComment: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\"],\n createReview: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n createReviewComment: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments\"],\n deletePendingReview: [\"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"],\n deleteReviewComment: [\"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}\"],\n dismissReview: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals\"],\n get: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}\"],\n getReview: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"],\n getReviewComment: [\"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}\"],\n list: [\"GET /repos/{owner}/{repo}/pulls\"],\n listCommentsForReview: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\"],\n listCommits: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\"],\n listFiles: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\"],\n listRequestedReviewers: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"],\n listReviewComments: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\"],\n listReviewCommentsForRepo: [\"GET /repos/{owner}/{repo}/pulls/comments\"],\n listReviews: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n merge: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n removeRequestedReviewers: [\"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"],\n requestReviewers: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"],\n submitReview: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events\"],\n update: [\"PATCH /repos/{owner}/{repo}/pulls/{pull_number}\"],\n updateBranch: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch\"],\n updateReview: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"],\n updateReviewComment: [\"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}\"]\n },\n rateLimit: {\n get: [\"GET /rate_limit\"]\n },\n reactions: {\n createForCommitComment: [\"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions\"],\n createForIssue: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions\"],\n createForIssueComment: [\"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\"],\n createForPullRequestReviewComment: [\"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\"],\n createForRelease: [\"POST /repos/{owner}/{repo}/releases/{release_id}/reactions\"],\n createForTeamDiscussionCommentInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\"],\n createForTeamDiscussionInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\"],\n deleteForCommitComment: [\"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}\"],\n deleteForIssue: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}\"],\n deleteForIssueComment: [\"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}\"],\n deleteForPullRequestComment: [\"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}\"],\n deleteForRelease: [\"DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}\"],\n deleteForTeamDiscussion: [\"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}\"],\n deleteForTeamDiscussionComment: [\"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}\"],\n listForCommitComment: [\"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\"],\n listForIssue: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\"],\n listForIssueComment: [\"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\"],\n listForPullRequestReviewComment: [\"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\"],\n listForRelease: [\"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\"],\n listForTeamDiscussionCommentInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\"],\n listForTeamDiscussionInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\"]\n },\n repos: {\n acceptInvitation: [\"PATCH /user/repository_invitations/{invitation_id}\", {}, {\n renamed: [\"repos\", \"acceptInvitationForAuthenticatedUser\"]\n }],\n acceptInvitationForAuthenticatedUser: [\"PATCH /user/repository_invitations/{invitation_id}\"],\n addAppAccessRestrictions: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\", {}, {\n mapToData: \"apps\"\n }],\n addCollaborator: [\"PUT /repos/{owner}/{repo}/collaborators/{username}\"],\n addStatusCheckContexts: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\", {}, {\n mapToData: \"contexts\"\n }],\n addTeamAccessRestrictions: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\", {}, {\n mapToData: \"teams\"\n }],\n addUserAccessRestrictions: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\", {}, {\n mapToData: \"users\"\n }],\n checkCollaborator: [\"GET /repos/{owner}/{repo}/collaborators/{username}\"],\n checkVulnerabilityAlerts: [\"GET /repos/{owner}/{repo}/vulnerability-alerts\"],\n codeownersErrors: [\"GET /repos/{owner}/{repo}/codeowners/errors\"],\n compareCommits: [\"GET /repos/{owner}/{repo}/compare/{base}...{head}\"],\n compareCommitsWithBasehead: [\"GET /repos/{owner}/{repo}/compare/{basehead}\"],\n createAutolink: [\"POST /repos/{owner}/{repo}/autolinks\"],\n createCommitComment: [\"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments\"],\n createCommitSignatureProtection: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"],\n createCommitStatus: [\"POST /repos/{owner}/{repo}/statuses/{sha}\"],\n createDeployKey: [\"POST /repos/{owner}/{repo}/keys\"],\n createDeployment: [\"POST /repos/{owner}/{repo}/deployments\"],\n createDeploymentStatus: [\"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\"],\n createDispatchEvent: [\"POST /repos/{owner}/{repo}/dispatches\"],\n createForAuthenticatedUser: [\"POST /user/repos\"],\n createFork: [\"POST /repos/{owner}/{repo}/forks\"],\n createInOrg: [\"POST /orgs/{org}/repos\"],\n createOrUpdateEnvironment: [\"PUT /repos/{owner}/{repo}/environments/{environment_name}\"],\n createOrUpdateFileContents: [\"PUT /repos/{owner}/{repo}/contents/{path}\"],\n createPagesSite: [\"POST /repos/{owner}/{repo}/pages\"],\n createRelease: [\"POST /repos/{owner}/{repo}/releases\"],\n createTagProtection: [\"POST /repos/{owner}/{repo}/tags/protection\"],\n createUsingTemplate: [\"POST /repos/{template_owner}/{template_repo}/generate\"],\n createWebhook: [\"POST /repos/{owner}/{repo}/hooks\"],\n declineInvitation: [\"DELETE /user/repository_invitations/{invitation_id}\", {}, {\n renamed: [\"repos\", \"declineInvitationForAuthenticatedUser\"]\n }],\n declineInvitationForAuthenticatedUser: [\"DELETE /user/repository_invitations/{invitation_id}\"],\n delete: [\"DELETE /repos/{owner}/{repo}\"],\n deleteAccessRestrictions: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\"],\n deleteAdminBranchProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"],\n deleteAnEnvironment: [\"DELETE /repos/{owner}/{repo}/environments/{environment_name}\"],\n deleteAutolink: [\"DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n deleteBranchProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection\"],\n deleteCommitComment: [\"DELETE /repos/{owner}/{repo}/comments/{comment_id}\"],\n deleteCommitSignatureProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"],\n deleteDeployKey: [\"DELETE /repos/{owner}/{repo}/keys/{key_id}\"],\n deleteDeployment: [\"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}\"],\n deleteFile: [\"DELETE /repos/{owner}/{repo}/contents/{path}\"],\n deleteInvitation: [\"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}\"],\n deletePagesSite: [\"DELETE /repos/{owner}/{repo}/pages\"],\n deletePullRequestReviewProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"],\n deleteRelease: [\"DELETE /repos/{owner}/{repo}/releases/{release_id}\"],\n deleteReleaseAsset: [\"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n deleteTagProtection: [\"DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}\"],\n deleteWebhook: [\"DELETE /repos/{owner}/{repo}/hooks/{hook_id}\"],\n disableAutomatedSecurityFixes: [\"DELETE /repos/{owner}/{repo}/automated-security-fixes\"],\n disableLfsForRepo: [\"DELETE /repos/{owner}/{repo}/lfs\"],\n disableVulnerabilityAlerts: [\"DELETE /repos/{owner}/{repo}/vulnerability-alerts\"],\n downloadArchive: [\"GET /repos/{owner}/{repo}/zipball/{ref}\", {}, {\n renamed: [\"repos\", \"downloadZipballArchive\"]\n }],\n downloadTarballArchive: [\"GET /repos/{owner}/{repo}/tarball/{ref}\"],\n downloadZipballArchive: [\"GET /repos/{owner}/{repo}/zipball/{ref}\"],\n enableAutomatedSecurityFixes: [\"PUT /repos/{owner}/{repo}/automated-security-fixes\"],\n enableLfsForRepo: [\"PUT /repos/{owner}/{repo}/lfs\"],\n enableVulnerabilityAlerts: [\"PUT /repos/{owner}/{repo}/vulnerability-alerts\"],\n generateReleaseNotes: [\"POST /repos/{owner}/{repo}/releases/generate-notes\"],\n get: [\"GET /repos/{owner}/{repo}\"],\n getAccessRestrictions: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\"],\n getAdminBranchProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"],\n getAllEnvironments: [\"GET /repos/{owner}/{repo}/environments\"],\n getAllStatusCheckContexts: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\"],\n getAllTopics: [\"GET /repos/{owner}/{repo}/topics\"],\n getAppsWithAccessToProtectedBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\"],\n getAutolink: [\"GET /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n getBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}\"],\n getBranchProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection\"],\n getClones: [\"GET /repos/{owner}/{repo}/traffic/clones\"],\n getCodeFrequencyStats: [\"GET /repos/{owner}/{repo}/stats/code_frequency\"],\n getCollaboratorPermissionLevel: [\"GET /repos/{owner}/{repo}/collaborators/{username}/permission\"],\n getCombinedStatusForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/status\"],\n getCommit: [\"GET /repos/{owner}/{repo}/commits/{ref}\"],\n getCommitActivityStats: [\"GET /repos/{owner}/{repo}/stats/commit_activity\"],\n getCommitComment: [\"GET /repos/{owner}/{repo}/comments/{comment_id}\"],\n getCommitSignatureProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"],\n getCommunityProfileMetrics: [\"GET /repos/{owner}/{repo}/community/profile\"],\n getContent: [\"GET /repos/{owner}/{repo}/contents/{path}\"],\n getContributorsStats: [\"GET /repos/{owner}/{repo}/stats/contributors\"],\n getDeployKey: [\"GET /repos/{owner}/{repo}/keys/{key_id}\"],\n getDeployment: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}\"],\n getDeploymentStatus: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}\"],\n getEnvironment: [\"GET /repos/{owner}/{repo}/environments/{environment_name}\"],\n getLatestPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/latest\"],\n getLatestRelease: [\"GET /repos/{owner}/{repo}/releases/latest\"],\n getPages: [\"GET /repos/{owner}/{repo}/pages\"],\n getPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/{build_id}\"],\n getPagesHealthCheck: [\"GET /repos/{owner}/{repo}/pages/health\"],\n getParticipationStats: [\"GET /repos/{owner}/{repo}/stats/participation\"],\n getPullRequestReviewProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"],\n getPunchCardStats: [\"GET /repos/{owner}/{repo}/stats/punch_card\"],\n getReadme: [\"GET /repos/{owner}/{repo}/readme\"],\n getReadmeInDirectory: [\"GET /repos/{owner}/{repo}/readme/{dir}\"],\n getRelease: [\"GET /repos/{owner}/{repo}/releases/{release_id}\"],\n getReleaseAsset: [\"GET /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n getReleaseByTag: [\"GET /repos/{owner}/{repo}/releases/tags/{tag}\"],\n getStatusChecksProtection: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"],\n getTeamsWithAccessToProtectedBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\"],\n getTopPaths: [\"GET /repos/{owner}/{repo}/traffic/popular/paths\"],\n getTopReferrers: [\"GET /repos/{owner}/{repo}/traffic/popular/referrers\"],\n getUsersWithAccessToProtectedBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\"],\n getViews: [\"GET /repos/{owner}/{repo}/traffic/views\"],\n getWebhook: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}\"],\n getWebhookConfigForRepo: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}/config\"],\n getWebhookDelivery: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}\"],\n listAutolinks: [\"GET /repos/{owner}/{repo}/autolinks\"],\n listBranches: [\"GET /repos/{owner}/{repo}/branches\"],\n listBranchesForHeadCommit: [\"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head\"],\n listCollaborators: [\"GET /repos/{owner}/{repo}/collaborators\"],\n listCommentsForCommit: [\"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\"],\n listCommitCommentsForRepo: [\"GET /repos/{owner}/{repo}/comments\"],\n listCommitStatusesForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/statuses\"],\n listCommits: [\"GET /repos/{owner}/{repo}/commits\"],\n listContributors: [\"GET /repos/{owner}/{repo}/contributors\"],\n listDeployKeys: [\"GET /repos/{owner}/{repo}/keys\"],\n listDeploymentStatuses: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\"],\n listDeployments: [\"GET /repos/{owner}/{repo}/deployments\"],\n listForAuthenticatedUser: [\"GET /user/repos\"],\n listForOrg: [\"GET /orgs/{org}/repos\"],\n listForUser: [\"GET /users/{username}/repos\"],\n listForks: [\"GET /repos/{owner}/{repo}/forks\"],\n listInvitations: [\"GET /repos/{owner}/{repo}/invitations\"],\n listInvitationsForAuthenticatedUser: [\"GET /user/repository_invitations\"],\n listLanguages: [\"GET /repos/{owner}/{repo}/languages\"],\n listPagesBuilds: [\"GET /repos/{owner}/{repo}/pages/builds\"],\n listPublic: [\"GET /repositories\"],\n listPullRequestsAssociatedWithCommit: [\"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\"],\n listReleaseAssets: [\"GET /repos/{owner}/{repo}/releases/{release_id}/assets\"],\n listReleases: [\"GET /repos/{owner}/{repo}/releases\"],\n listTagProtection: [\"GET /repos/{owner}/{repo}/tags/protection\"],\n listTags: [\"GET /repos/{owner}/{repo}/tags\"],\n listTeams: [\"GET /repos/{owner}/{repo}/teams\"],\n listWebhookDeliveries: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\"],\n listWebhooks: [\"GET /repos/{owner}/{repo}/hooks\"],\n merge: [\"POST /repos/{owner}/{repo}/merges\"],\n mergeUpstream: [\"POST /repos/{owner}/{repo}/merge-upstream\"],\n pingWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/pings\"],\n redeliverWebhookDelivery: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\"],\n removeAppAccessRestrictions: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\", {}, {\n mapToData: \"apps\"\n }],\n removeCollaborator: [\"DELETE /repos/{owner}/{repo}/collaborators/{username}\"],\n removeStatusCheckContexts: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\", {}, {\n mapToData: \"contexts\"\n }],\n removeStatusCheckProtection: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"],\n removeTeamAccessRestrictions: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\", {}, {\n mapToData: \"teams\"\n }],\n removeUserAccessRestrictions: [\"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\", {}, {\n mapToData: \"users\"\n }],\n renameBranch: [\"POST /repos/{owner}/{repo}/branches/{branch}/rename\"],\n replaceAllTopics: [\"PUT /repos/{owner}/{repo}/topics\"],\n requestPagesBuild: [\"POST /repos/{owner}/{repo}/pages/builds\"],\n setAdminBranchProtection: [\"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"],\n setAppAccessRestrictions: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\", {}, {\n mapToData: \"apps\"\n }],\n setStatusCheckContexts: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\", {}, {\n mapToData: \"contexts\"\n }],\n setTeamAccessRestrictions: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\", {}, {\n mapToData: \"teams\"\n }],\n setUserAccessRestrictions: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\", {}, {\n mapToData: \"users\"\n }],\n testPushWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/tests\"],\n transfer: [\"POST /repos/{owner}/{repo}/transfer\"],\n update: [\"PATCH /repos/{owner}/{repo}\"],\n updateBranchProtection: [\"PUT /repos/{owner}/{repo}/branches/{branch}/protection\"],\n updateCommitComment: [\"PATCH /repos/{owner}/{repo}/comments/{comment_id}\"],\n updateInformationAboutPagesSite: [\"PUT /repos/{owner}/{repo}/pages\"],\n updateInvitation: [\"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}\"],\n updatePullRequestReviewProtection: [\"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"],\n updateRelease: [\"PATCH /repos/{owner}/{repo}/releases/{release_id}\"],\n updateReleaseAsset: [\"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n updateStatusCheckPotection: [\"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\", {}, {\n renamed: [\"repos\", \"updateStatusCheckProtection\"]\n }],\n updateStatusCheckProtection: [\"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"],\n updateWebhook: [\"PATCH /repos/{owner}/{repo}/hooks/{hook_id}\"],\n updateWebhookConfigForRepo: [\"PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config\"],\n uploadReleaseAsset: [\"POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}\", {\n baseUrl: \"https://uploads.github.com\"\n }]\n },\n search: {\n code: [\"GET /search/code\"],\n commits: [\"GET /search/commits\"],\n issuesAndPullRequests: [\"GET /search/issues\"],\n labels: [\"GET /search/labels\"],\n repos: [\"GET /search/repositories\"],\n topics: [\"GET /search/topics\"],\n users: [\"GET /search/users\"]\n },\n secretScanning: {\n getAlert: [\"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\"],\n listAlertsForEnterprise: [\"GET /enterprises/{enterprise}/secret-scanning/alerts\"],\n listAlertsForOrg: [\"GET /orgs/{org}/secret-scanning/alerts\"],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/secret-scanning/alerts\"],\n listLocationsForAlert: [\"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\"],\n updateAlert: [\"PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\"]\n },\n teams: {\n addOrUpdateMembershipForUserInOrg: [\"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}\"],\n addOrUpdateProjectPermissionsInOrg: [\"PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}\"],\n addOrUpdateRepoPermissionsInOrg: [\"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"],\n checkPermissionsForProjectInOrg: [\"GET /orgs/{org}/teams/{team_slug}/projects/{project_id}\"],\n checkPermissionsForRepoInOrg: [\"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"],\n create: [\"POST /orgs/{org}/teams\"],\n createDiscussionCommentInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\"],\n createDiscussionInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions\"],\n deleteDiscussionCommentInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"],\n deleteDiscussionInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"],\n deleteInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}\"],\n getByName: [\"GET /orgs/{org}/teams/{team_slug}\"],\n getDiscussionCommentInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"],\n getDiscussionInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"],\n getMembershipForUserInOrg: [\"GET /orgs/{org}/teams/{team_slug}/memberships/{username}\"],\n list: [\"GET /orgs/{org}/teams\"],\n listChildInOrg: [\"GET /orgs/{org}/teams/{team_slug}/teams\"],\n listDiscussionCommentsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\"],\n listDiscussionsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions\"],\n listForAuthenticatedUser: [\"GET /user/teams\"],\n listMembersInOrg: [\"GET /orgs/{org}/teams/{team_slug}/members\"],\n listPendingInvitationsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/invitations\"],\n listProjectsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/projects\"],\n listReposInOrg: [\"GET /orgs/{org}/teams/{team_slug}/repos\"],\n removeMembershipForUserInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}\"],\n removeProjectInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}\"],\n removeRepoInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"],\n updateDiscussionCommentInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"],\n updateDiscussionInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"],\n updateInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}\"]\n },\n users: {\n addEmailForAuthenticated: [\"POST /user/emails\", {}, {\n renamed: [\"users\", \"addEmailForAuthenticatedUser\"]\n }],\n addEmailForAuthenticatedUser: [\"POST /user/emails\"],\n block: [\"PUT /user/blocks/{username}\"],\n checkBlocked: [\"GET /user/blocks/{username}\"],\n checkFollowingForUser: [\"GET /users/{username}/following/{target_user}\"],\n checkPersonIsFollowedByAuthenticated: [\"GET /user/following/{username}\"],\n createGpgKeyForAuthenticated: [\"POST /user/gpg_keys\", {}, {\n renamed: [\"users\", \"createGpgKeyForAuthenticatedUser\"]\n }],\n createGpgKeyForAuthenticatedUser: [\"POST /user/gpg_keys\"],\n createPublicSshKeyForAuthenticated: [\"POST /user/keys\", {}, {\n renamed: [\"users\", \"createPublicSshKeyForAuthenticatedUser\"]\n }],\n createPublicSshKeyForAuthenticatedUser: [\"POST /user/keys\"],\n deleteEmailForAuthenticated: [\"DELETE /user/emails\", {}, {\n renamed: [\"users\", \"deleteEmailForAuthenticatedUser\"]\n }],\n deleteEmailForAuthenticatedUser: [\"DELETE /user/emails\"],\n deleteGpgKeyForAuthenticated: [\"DELETE /user/gpg_keys/{gpg_key_id}\", {}, {\n renamed: [\"users\", \"deleteGpgKeyForAuthenticatedUser\"]\n }],\n deleteGpgKeyForAuthenticatedUser: [\"DELETE /user/gpg_keys/{gpg_key_id}\"],\n deletePublicSshKeyForAuthenticated: [\"DELETE /user/keys/{key_id}\", {}, {\n renamed: [\"users\", \"deletePublicSshKeyForAuthenticatedUser\"]\n }],\n deletePublicSshKeyForAuthenticatedUser: [\"DELETE /user/keys/{key_id}\"],\n follow: [\"PUT /user/following/{username}\"],\n getAuthenticated: [\"GET /user\"],\n getByUsername: [\"GET /users/{username}\"],\n getContextForUser: [\"GET /users/{username}/hovercard\"],\n getGpgKeyForAuthenticated: [\"GET /user/gpg_keys/{gpg_key_id}\", {}, {\n renamed: [\"users\", \"getGpgKeyForAuthenticatedUser\"]\n }],\n getGpgKeyForAuthenticatedUser: [\"GET /user/gpg_keys/{gpg_key_id}\"],\n getPublicSshKeyForAuthenticated: [\"GET /user/keys/{key_id}\", {}, {\n renamed: [\"users\", \"getPublicSshKeyForAuthenticatedUser\"]\n }],\n getPublicSshKeyForAuthenticatedUser: [\"GET /user/keys/{key_id}\"],\n list: [\"GET /users\"],\n listBlockedByAuthenticated: [\"GET /user/blocks\", {}, {\n renamed: [\"users\", \"listBlockedByAuthenticatedUser\"]\n }],\n listBlockedByAuthenticatedUser: [\"GET /user/blocks\"],\n listEmailsForAuthenticated: [\"GET /user/emails\", {}, {\n renamed: [\"users\", \"listEmailsForAuthenticatedUser\"]\n }],\n listEmailsForAuthenticatedUser: [\"GET /user/emails\"],\n listFollowedByAuthenticated: [\"GET /user/following\", {}, {\n renamed: [\"users\", \"listFollowedByAuthenticatedUser\"]\n }],\n listFollowedByAuthenticatedUser: [\"GET /user/following\"],\n listFollowersForAuthenticatedUser: [\"GET /user/followers\"],\n listFollowersForUser: [\"GET /users/{username}/followers\"],\n listFollowingForUser: [\"GET /users/{username}/following\"],\n listGpgKeysForAuthenticated: [\"GET /user/gpg_keys\", {}, {\n renamed: [\"users\", \"listGpgKeysForAuthenticatedUser\"]\n }],\n listGpgKeysForAuthenticatedUser: [\"GET /user/gpg_keys\"],\n listGpgKeysForUser: [\"GET /users/{username}/gpg_keys\"],\n listPublicEmailsForAuthenticated: [\"GET /user/public_emails\", {}, {\n renamed: [\"users\", \"listPublicEmailsForAuthenticatedUser\"]\n }],\n listPublicEmailsForAuthenticatedUser: [\"GET /user/public_emails\"],\n listPublicKeysForUser: [\"GET /users/{username}/keys\"],\n listPublicSshKeysForAuthenticated: [\"GET /user/keys\", {}, {\n renamed: [\"users\", \"listPublicSshKeysForAuthenticatedUser\"]\n }],\n listPublicSshKeysForAuthenticatedUser: [\"GET /user/keys\"],\n setPrimaryEmailVisibilityForAuthenticated: [\"PATCH /user/email/visibility\", {}, {\n renamed: [\"users\", \"setPrimaryEmailVisibilityForAuthenticatedUser\"]\n }],\n setPrimaryEmailVisibilityForAuthenticatedUser: [\"PATCH /user/email/visibility\"],\n unblock: [\"DELETE /user/blocks/{username}\"],\n unfollow: [\"DELETE /user/following/{username}\"],\n updateAuthenticated: [\"PATCH /user\"]\n }\n};\n\nconst VERSION = \"5.16.2\";\n\nfunction endpointsToMethods(octokit, endpointsMap) {\n const newMethods = {};\n\n for (const [scope, endpoints] of Object.entries(endpointsMap)) {\n for (const [methodName, endpoint] of Object.entries(endpoints)) {\n const [route, defaults, decorations] = endpoint;\n const [method, url] = route.split(/ /);\n const endpointDefaults = Object.assign({\n method,\n url\n }, defaults);\n\n if (!newMethods[scope]) {\n newMethods[scope] = {};\n }\n\n const scopeMethods = newMethods[scope];\n\n if (decorations) {\n scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations);\n continue;\n }\n\n scopeMethods[methodName] = octokit.request.defaults(endpointDefaults);\n }\n }\n\n return newMethods;\n}\n\nfunction decorate(octokit, scope, methodName, defaults, decorations) {\n const requestWithDefaults = octokit.request.defaults(defaults);\n /* istanbul ignore next */\n\n function withDecorations(...args) {\n // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData`\n\n if (decorations.mapToData) {\n options = Object.assign({}, options, {\n data: options[decorations.mapToData],\n [decorations.mapToData]: undefined\n });\n return requestWithDefaults(options);\n }\n\n if (decorations.renamed) {\n const [newScope, newMethodName] = decorations.renamed;\n octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`);\n }\n\n if (decorations.deprecated) {\n octokit.log.warn(decorations.deprecated);\n }\n\n if (decorations.renamedParameters) {\n // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n const options = requestWithDefaults.endpoint.merge(...args);\n\n for (const [name, alias] of Object.entries(decorations.renamedParameters)) {\n if (name in options) {\n octokit.log.warn(`\"${name}\" parameter is deprecated for \"octokit.${scope}.${methodName}()\". Use \"${alias}\" instead`);\n\n if (!(alias in options)) {\n options[alias] = options[name];\n }\n\n delete options[name];\n }\n }\n\n return requestWithDefaults(options);\n } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n\n\n return requestWithDefaults(...args);\n }\n\n return Object.assign(withDecorations, requestWithDefaults);\n}\n\nfunction restEndpointMethods(octokit) {\n const api = endpointsToMethods(octokit, Endpoints);\n return {\n rest: api\n };\n}\nrestEndpointMethods.VERSION = VERSION;\nfunction legacyRestEndpointMethods(octokit) {\n const api = endpointsToMethods(octokit, Endpoints);\n return _objectSpread2(_objectSpread2({}, api), {}, {\n rest: api\n });\n}\nlegacyRestEndpointMethods.VERSION = VERSION;\n\nexports.legacyRestEndpointMethods = legacyRestEndpointMethods;\nexports.restEndpointMethods = restEndpointMethods;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar deprecation = require('deprecation');\nvar once = _interopDefault(require('once'));\n\nconst logOnceCode = once(deprecation => console.warn(deprecation));\nconst logOnceHeaders = once(deprecation => console.warn(deprecation));\n/**\n * Error with extra properties to help with debugging\n */\n\nclass RequestError extends Error {\n constructor(message, statusCode, options) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = \"HttpError\";\n this.status = statusCode;\n let headers;\n\n if (\"headers\" in options && typeof options.headers !== \"undefined\") {\n headers = options.headers;\n }\n\n if (\"response\" in options) {\n this.response = options.response;\n headers = options.response.headers;\n } // redact request credentials without mutating original request options\n\n\n const requestCopy = Object.assign({}, options.request);\n\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(/ .*$/, \" [REDACTED]\")\n });\n }\n\n requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit\n // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications\n .replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\") // OAuth tokens can be passed as URL query parameters, although it is not recommended\n // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header\n .replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy; // deprecations\n\n Object.defineProperty(this, \"code\", {\n get() {\n logOnceCode(new deprecation.Deprecation(\"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"));\n return statusCode;\n }\n\n });\n Object.defineProperty(this, \"headers\", {\n get() {\n logOnceHeaders(new deprecation.Deprecation(\"[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.\"));\n return headers || {};\n }\n\n });\n }\n\n}\n\nexports.RequestError = RequestError;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar endpoint = require('@octokit/endpoint');\nvar universalUserAgent = require('universal-user-agent');\nvar isPlainObject = require('is-plain-object');\nvar nodeFetch = _interopDefault(require('node-fetch'));\nvar requestError = require('@octokit/request-error');\n\nconst VERSION = \"5.6.3\";\n\nfunction getBufferResponse(response) {\n return response.arrayBuffer();\n}\n\nfunction fetchWrapper(requestOptions) {\n const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;\n\n if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {\n requestOptions.body = JSON.stringify(requestOptions.body);\n }\n\n let headers = {};\n let status;\n let url;\n const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;\n return fetch(requestOptions.url, Object.assign({\n method: requestOptions.method,\n body: requestOptions.body,\n headers: requestOptions.headers,\n redirect: requestOptions.redirect\n }, // `requestOptions.request.agent` type is incompatible\n // see https://github.com/octokit/types.ts/pull/264\n requestOptions.request)).then(async response => {\n url = response.url;\n status = response.status;\n\n for (const keyAndValue of response.headers) {\n headers[keyAndValue[0]] = keyAndValue[1];\n }\n\n if (\"deprecation\" in headers) {\n const matches = headers.link && headers.link.match(/<([^>]+)>; rel=\"deprecation\"/);\n const deprecationLink = matches && matches.pop();\n log.warn(`[@octokit/request] \"${requestOptions.method} ${requestOptions.url}\" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : \"\"}`);\n }\n\n if (status === 204 || status === 205) {\n return;\n } // GitHub API returns 200 for HEAD requests\n\n\n if (requestOptions.method === \"HEAD\") {\n if (status < 400) {\n return;\n }\n\n throw new requestError.RequestError(response.statusText, status, {\n response: {\n url,\n status,\n headers,\n data: undefined\n },\n request: requestOptions\n });\n }\n\n if (status === 304) {\n throw new requestError.RequestError(\"Not modified\", status, {\n response: {\n url,\n status,\n headers,\n data: await getResponseData(response)\n },\n request: requestOptions\n });\n }\n\n if (status >= 400) {\n const data = await getResponseData(response);\n const error = new requestError.RequestError(toErrorMessage(data), status, {\n response: {\n url,\n status,\n headers,\n data\n },\n request: requestOptions\n });\n throw error;\n }\n\n return getResponseData(response);\n }).then(data => {\n return {\n status,\n url,\n headers,\n data\n };\n }).catch(error => {\n if (error instanceof requestError.RequestError) throw error;\n throw new requestError.RequestError(error.message, 500, {\n request: requestOptions\n });\n });\n}\n\nasync function getResponseData(response) {\n const contentType = response.headers.get(\"content-type\");\n\n if (/application\\/json/.test(contentType)) {\n return response.json();\n }\n\n if (!contentType || /^text\\/|charset=utf-8$/.test(contentType)) {\n return response.text();\n }\n\n return getBufferResponse(response);\n}\n\nfunction toErrorMessage(data) {\n if (typeof data === \"string\") return data; // istanbul ignore else - just in case\n\n if (\"message\" in data) {\n if (Array.isArray(data.errors)) {\n return `${data.message}: ${data.errors.map(JSON.stringify).join(\", \")}`;\n }\n\n return data.message;\n } // istanbul ignore next - just in case\n\n\n return `Unknown error: ${JSON.stringify(data)}`;\n}\n\nfunction withDefaults(oldEndpoint, newDefaults) {\n const endpoint = oldEndpoint.defaults(newDefaults);\n\n const newApi = function (route, parameters) {\n const endpointOptions = endpoint.merge(route, parameters);\n\n if (!endpointOptions.request || !endpointOptions.request.hook) {\n return fetchWrapper(endpoint.parse(endpointOptions));\n }\n\n const request = (route, parameters) => {\n return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));\n };\n\n Object.assign(request, {\n endpoint,\n defaults: withDefaults.bind(null, endpoint)\n });\n return endpointOptions.request.hook(request, endpointOptions);\n };\n\n return Object.assign(newApi, {\n endpoint,\n defaults: withDefaults.bind(null, endpoint)\n });\n}\n\nconst request = withDefaults(endpoint.endpoint, {\n headers: {\n \"user-agent\": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`\n }\n});\n\nexports.request = request;\n//# sourceMappingURL=index.js.map\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var register = require(\"./lib/register\");\nvar addHook = require(\"./lib/add\");\nvar removeHook = require(\"./lib/remove\");\n\n// bind with array of arguments: https://stackoverflow.com/a/21792913\nvar bind = Function.bind;\nvar bindable = bind.bind(bind);\n\nfunction bindApi(hook, state, name) {\n var removeHookRef = bindable(removeHook, null).apply(\n null,\n name ? [state, name] : [state]\n );\n hook.api = { remove: removeHookRef };\n hook.remove = removeHookRef;\n [\"before\", \"error\", \"after\", \"wrap\"].forEach(function (kind) {\n var args = name ? [state, kind, name] : [state, kind];\n hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args);\n });\n}\n\nfunction HookSingular() {\n var singularHookName = \"h\";\n var singularHookState = {\n registry: {},\n };\n var singularHook = register.bind(null, singularHookState, singularHookName);\n bindApi(singularHook, singularHookState, singularHookName);\n return singularHook;\n}\n\nfunction HookCollection() {\n var state = {\n registry: {},\n };\n\n var hook = register.bind(null, state);\n bindApi(hook, state);\n\n return hook;\n}\n\nvar collectionHookDeprecationMessageDisplayed = false;\nfunction Hook() {\n if (!collectionHookDeprecationMessageDisplayed) {\n console.warn(\n '[before-after-hook]: \"Hook()\" repurposing warning, use \"Hook.Collection()\". Read more: https://git.io/upgrade-before-after-hook-to-1.4'\n );\n collectionHookDeprecationMessageDisplayed = true;\n }\n return HookCollection();\n}\n\nHook.Singular = HookSingular.bind();\nHook.Collection = HookCollection.bind();\n\nmodule.exports = Hook;\n// expose constructors as a named property for TypeScript\nmodule.exports.Hook = Hook;\nmodule.exports.Singular = Hook.Singular;\nmodule.exports.Collection = Hook.Collection;\n","module.exports = addHook;\n\nfunction addHook(state, kind, name, hook) {\n var orig = hook;\n if (!state.registry[name]) {\n state.registry[name] = [];\n }\n\n if (kind === \"before\") {\n hook = function (method, options) {\n return Promise.resolve()\n .then(orig.bind(null, options))\n .then(method.bind(null, options));\n };\n }\n\n if (kind === \"after\") {\n hook = function (method, options) {\n var result;\n return Promise.resolve()\n .then(method.bind(null, options))\n .then(function (result_) {\n result = result_;\n return orig(result, options);\n })\n .then(function () {\n return result;\n });\n };\n }\n\n if (kind === \"error\") {\n hook = function (method, options) {\n return Promise.resolve()\n .then(method.bind(null, options))\n .catch(function (error) {\n return orig(error, options);\n });\n };\n }\n\n state.registry[name].push({\n hook: hook,\n orig: orig,\n });\n}\n","module.exports = register;\n\nfunction register(state, name, method, options) {\n if (typeof method !== \"function\") {\n throw new Error(\"method for before hook must be a function\");\n }\n\n if (!options) {\n options = {};\n }\n\n if (Array.isArray(name)) {\n return name.reverse().reduce(function (callback, name) {\n return register.bind(null, state, name, callback, options);\n }, method)();\n }\n\n return Promise.resolve().then(function () {\n if (!state.registry[name]) {\n return method(options);\n }\n\n return state.registry[name].reduce(function (method, registered) {\n return registered.hook.bind(null, method, options);\n }, method)();\n });\n}\n","module.exports = removeHook;\n\nfunction removeHook(state, name, method) {\n if (!state.registry[name]) {\n return;\n }\n\n var index = state.registry[name]\n .map(function (registered) {\n return registered.orig;\n })\n .indexOf(method);\n\n if (index === -1) {\n return;\n }\n\n state.registry[name].splice(index, 1);\n}\n","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass Deprecation extends Error {\n constructor(message) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = 'Deprecation';\n }\n\n}\n\nexports.Deprecation = Deprecation;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return require('path') } catch (e) {}}()) || {\n sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n b = b || {}\n var t = {}\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch\n }\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n m.Minimatch.defaults = function defaults (options) {\n return orig.defaults(ext(def, options)).Minimatch\n }\n\n m.filter = function filter (pattern, options) {\n return orig.filter(pattern, ext(def, options))\n }\n\n m.defaults = function defaults (options) {\n return orig.defaults(ext(def, options))\n }\n\n m.makeRe = function makeRe (pattern, options) {\n return orig.makeRe(pattern, ext(def, options))\n }\n\n m.braceExpand = function braceExpand (pattern, options) {\n return orig.braceExpand(pattern, ext(def, options))\n }\n\n m.match = function (list, pattern, options) {\n return orig.match(list, pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (!options.allowWindowsEscape && path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n this.partial = !!options.partial\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n assertValidPattern(pattern)\n\n // Thanks to Yeting Li for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern')\n }\n\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long')\n }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n assertValidPattern(pattern)\n\n var options = this.options\n\n // shortcuts\n if (pattern === '**') {\n if (!options.noglobstar)\n return GLOBSTAR\n else\n pattern = '*'\n }\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n /* istanbul ignore next */\n case '/': {\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n }\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:)\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '[': case '.': case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) /* istanbul ignore next - should be impossible */ {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) /* istanbul ignore next - should be impossible */ {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n if (typeof partial === 'undefined') partial = this.partial\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* istanbul ignore if */\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n /* istanbul ignore if */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n hit = f === p\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else /* istanbul ignore else */ if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return (fi === fl - 1) && (file[fi] === '')\n }\n\n // should be unreachable.\n /* istanbul ignore next */\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Stream = _interopDefault(require('stream'));\nvar http = _interopDefault(require('http'));\nvar Url = _interopDefault(require('url'));\nvar whatwgUrl = _interopDefault(require('whatwg-url'));\nvar https = _interopDefault(require('https'));\nvar zlib = _interopDefault(require('zlib'));\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\nconst URL = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\n/**\n * Wrapper around `new URL` to handle arbitrary URLs\n *\n * @param {string} urlStr\n * @return {void}\n */\nfunction parseURL(urlStr) {\n\t/*\n \tCheck whether the URL is absolute or not\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\n */\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\n\t\turlStr = new URL(urlStr).toString();\n\t}\n\n\t// Fallback to old implementation for arbitrary URLs\n\treturn parse_url(urlStr);\n}\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parseURL(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parseURL(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parseURL(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\nconst URL$1 = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\n\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\n\tconst orig = new URL$1(original).hostname;\n\tconst dest = new URL$1(destination).hostname;\n\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\n};\n\n/**\n * isSameProtocol reports whether the two provided URLs use the same protocol.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nconst isSameProtocol = function isSameProtocol(destination, original) {\n\tconst orig = new URL$1(original).protocol;\n\tconst dest = new URL$1(destination).protocol;\n\n\treturn orig === dest;\n};\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\tdestroyStream(request.body, error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(req, function (err) {\n\t\t\tif (signal && signal.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (parseInt(process.version.substring(1)) < 14) {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\treq.on('socket', function (s) {\n\t\t\t\ts.addListener('close', function (hadError) {\n\t\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\t\tconst hasDataListener = s.listenerCount('data') > 0;\n\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && hasDataListener && !hadError && !(signal && signal.aborted)) {\n\t\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', err);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\traw.on('end', function () {\n\t\t\t\t\t// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.\n\t\t\t\t\tif (!response) {\n\t\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tlet socket;\n\n\trequest.on('socket', function (s) {\n\t\tsocket = s;\n\t});\n\n\trequest.on('response', function (response) {\n\t\tconst headers = response.headers;\n\n\t\tif (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {\n\t\t\tresponse.once('close', function (hadError) {\n\t\t\t\t// tests for socket presence, as in some situations the\n\t\t\t\t// the 'socket' event is not triggered for the request\n\t\t\t\t// (happens in deno), avoids `TypeError`\n\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\tconst hasDataListener = socket && socket.listenerCount('data') > 0;\n\n\t\t\t\tif (hasDataListener && !hadError) {\n\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\terrorCallback(err);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nfunction destroyStream(stream, err) {\n\tif (stream.destroy) {\n\t\tstream.destroy(err);\n\t} else {\n\t\t// node < 8\n\t\tstream.emit('error', err);\n\t\tstream.end();\n\t}\n}\n\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nmodule.exports = exports = fetch;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports;\nexports.Headers = Headers;\nexports.Request = Request;\nexports.Response = Response;\nexports.FetchError = FetchError;\n","\"use strict\";\n\nvar punycode = require(\"punycode\");\nvar mappingTable = require(\"./lib/mappingTable.json\");\n\nvar PROCESSING_OPTIONS = {\n TRANSITIONAL: 0,\n NONTRANSITIONAL: 1\n};\n\nfunction normalize(str) { // fix bug in v8\n return str.split('\\u0000').map(function (s) { return s.normalize('NFC'); }).join('\\u0000');\n}\n\nfunction findStatus(val) {\n var start = 0;\n var end = mappingTable.length - 1;\n\n while (start <= end) {\n var mid = Math.floor((start + end) / 2);\n\n var target = mappingTable[mid];\n if (target[0][0] <= val && target[0][1] >= val) {\n return target;\n } else if (target[0][0] > val) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n\n return null;\n}\n\nvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\nfunction countSymbols(string) {\n return string\n // replace every surrogate pair with a BMP symbol\n .replace(regexAstralSymbols, '_')\n // then get the length\n .length;\n}\n\nfunction mapChars(domain_name, useSTD3, processing_option) {\n var hasError = false;\n var processed = \"\";\n\n var len = countSymbols(domain_name);\n for (var i = 0; i < len; ++i) {\n var codePoint = domain_name.codePointAt(i);\n var status = findStatus(codePoint);\n\n switch (status[1]) {\n case \"disallowed\":\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n break;\n case \"ignored\":\n break;\n case \"mapped\":\n processed += String.fromCodePoint.apply(String, status[2]);\n break;\n case \"deviation\":\n if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {\n processed += String.fromCodePoint.apply(String, status[2]);\n } else {\n processed += String.fromCodePoint(codePoint);\n }\n break;\n case \"valid\":\n processed += String.fromCodePoint(codePoint);\n break;\n case \"disallowed_STD3_mapped\":\n if (useSTD3) {\n hasError = true;\n processed += String.fromCodePoint(codePoint);\n } else {\n processed += String.fromCodePoint.apply(String, status[2]);\n }\n break;\n case \"disallowed_STD3_valid\":\n if (useSTD3) {\n hasError = true;\n }\n\n processed += String.fromCodePoint(codePoint);\n break;\n }\n }\n\n return {\n string: processed,\n error: hasError\n };\n}\n\nvar combiningMarksRegex = /[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2D]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDE2C-\\uDE37\\uDEDF-\\uDEEA\\uDF01-\\uDF03\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDE30-\\uDE40\\uDEAB-\\uDEB7]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF51-\\uDF7E\\uDF8F-\\uDF92]|\\uD82F[\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD83A[\\uDCD0-\\uDCD6]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nfunction validateLabel(label, processing_option) {\n if (label.substr(0, 4) === \"xn--\") {\n label = punycode.toUnicode(label);\n processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;\n }\n\n var error = false;\n\n if (normalize(label) !== label ||\n (label[3] === \"-\" && label[4] === \"-\") ||\n label[0] === \"-\" || label[label.length - 1] === \"-\" ||\n label.indexOf(\".\") !== -1 ||\n label.search(combiningMarksRegex) === 0) {\n error = true;\n }\n\n var len = countSymbols(label);\n for (var i = 0; i < len; ++i) {\n var status = findStatus(label.codePointAt(i));\n if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== \"valid\") ||\n (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&\n status[1] !== \"valid\" && status[1] !== \"deviation\")) {\n error = true;\n break;\n }\n }\n\n return {\n label: label,\n error: error\n };\n}\n\nfunction processing(domain_name, useSTD3, processing_option) {\n var result = mapChars(domain_name, useSTD3, processing_option);\n result.string = normalize(result.string);\n\n var labels = result.string.split(\".\");\n for (var i = 0; i < labels.length; ++i) {\n try {\n var validation = validateLabel(labels[i]);\n labels[i] = validation.label;\n result.error = result.error || validation.error;\n } catch(e) {\n result.error = true;\n }\n }\n\n return {\n string: labels.join(\".\"),\n error: result.error\n };\n}\n\nmodule.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {\n var result = processing(domain_name, useSTD3, processing_option);\n var labels = result.string.split(\".\");\n labels = labels.map(function(l) {\n try {\n return punycode.toASCII(l);\n } catch(e) {\n result.error = true;\n return l;\n }\n });\n\n if (verifyDnsLength) {\n var total = labels.slice(0, labels.length - 1).join(\".\").length;\n if (total.length > 253 || total.length === 0) {\n result.error = true;\n }\n\n for (var i=0; i < labels.length; ++i) {\n if (labels.length > 63 || labels.length === 0) {\n result.error = true;\n break;\n }\n }\n }\n\n if (result.error) return null;\n return labels.join(\".\");\n};\n\nmodule.exports.toUnicode = function(domain_name, useSTD3) {\n var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);\n\n return {\n domain: result.string,\n error: result.error\n };\n};\n\nmodule.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;\n","\"use strict\";\n\nvar conversions = {};\nmodule.exports = conversions;\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction evenRound(x) {\n // Round x to the nearest integer, choosing the even integer if it lies halfway between two.\n if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)\n return Math.floor(x);\n } else {\n return Math.round(x);\n }\n}\n\nfunction createNumberConversion(bitLength, typeOpts) {\n if (!typeOpts.unsigned) {\n --bitLength;\n }\n const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);\n const upperBound = Math.pow(2, bitLength) - 1;\n\n const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);\n const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);\n\n return function(V, opts) {\n if (!opts) opts = {};\n\n let x = +V;\n\n if (opts.enforceRange) {\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite number\");\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(\"Argument is not in byte range\");\n }\n\n return x;\n }\n\n if (!isNaN(x) && opts.clamp) {\n x = evenRound(x);\n\n if (x < lowerBound) x = lowerBound;\n if (x > upperBound) x = upperBound;\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n\n x = sign(x) * Math.floor(Math.abs(x));\n x = x % moduloVal;\n\n if (!typeOpts.unsigned && x >= moduloBound) {\n return x - moduloVal;\n } else if (typeOpts.unsigned) {\n if (x < 0) {\n x += moduloVal;\n } else if (x === -0) { // don't return negative zero\n return 0;\n }\n }\n\n return x;\n }\n}\n\nconversions[\"void\"] = function () {\n return undefined;\n};\n\nconversions[\"boolean\"] = function (val) {\n return !!val;\n};\n\nconversions[\"byte\"] = createNumberConversion(8, { unsigned: false });\nconversions[\"octet\"] = createNumberConversion(8, { unsigned: true });\n\nconversions[\"short\"] = createNumberConversion(16, { unsigned: false });\nconversions[\"unsigned short\"] = createNumberConversion(16, { unsigned: true });\n\nconversions[\"long\"] = createNumberConversion(32, { unsigned: false });\nconversions[\"unsigned long\"] = createNumberConversion(32, { unsigned: true });\n\nconversions[\"long long\"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });\nconversions[\"unsigned long long\"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });\n\nconversions[\"double\"] = function (V) {\n const x = +V;\n\n if (!Number.isFinite(x)) {\n throw new TypeError(\"Argument is not a finite floating-point value\");\n }\n\n return x;\n};\n\nconversions[\"unrestricted double\"] = function (V) {\n const x = +V;\n\n if (isNaN(x)) {\n throw new TypeError(\"Argument is NaN\");\n }\n\n return x;\n};\n\n// not quite valid, but good enough for JS\nconversions[\"float\"] = conversions[\"double\"];\nconversions[\"unrestricted float\"] = conversions[\"unrestricted double\"];\n\nconversions[\"DOMString\"] = function (V, opts) {\n if (!opts) opts = {};\n\n if (opts.treatNullAsEmptyString && V === null) {\n return \"\";\n }\n\n return String(V);\n};\n\nconversions[\"ByteString\"] = function (V, opts) {\n const x = String(V);\n let c = undefined;\n for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {\n if (c > 255) {\n throw new TypeError(\"Argument is not a valid bytestring\");\n }\n }\n\n return x;\n};\n\nconversions[\"USVString\"] = function (V) {\n const S = String(V);\n const n = S.length;\n const U = [];\n for (let i = 0; i < n; ++i) {\n const c = S.charCodeAt(i);\n if (c < 0xD800 || c > 0xDFFF) {\n U.push(String.fromCodePoint(c));\n } else if (0xDC00 <= c && c <= 0xDFFF) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n if (i === n - 1) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n const d = S.charCodeAt(i + 1);\n if (0xDC00 <= d && d <= 0xDFFF) {\n const a = c & 0x3FF;\n const b = d & 0x3FF;\n U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));\n ++i;\n } else {\n U.push(String.fromCodePoint(0xFFFD));\n }\n }\n }\n }\n\n return U.join('');\n};\n\nconversions[\"Date\"] = function (V, opts) {\n if (!(V instanceof Date)) {\n throw new TypeError(\"Argument is not a Date object\");\n }\n if (isNaN(V)) {\n return undefined;\n }\n\n return V;\n};\n\nconversions[\"RegExp\"] = function (V, opts) {\n if (!(V instanceof RegExp)) {\n V = new RegExp(V);\n }\n\n return V;\n};\n","\"use strict\";\nconst usm = require(\"./url-state-machine\");\n\nexports.implementation = class URLImpl {\n constructor(constructorArgs) {\n const url = constructorArgs[0];\n const base = constructorArgs[1];\n\n let parsedBase = null;\n if (base !== undefined) {\n parsedBase = usm.basicURLParse(base);\n if (parsedBase === \"failure\") {\n throw new TypeError(\"Invalid base URL\");\n }\n }\n\n const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n\n // TODO: query stuff\n }\n\n get href() {\n return usm.serializeURL(this._url);\n }\n\n set href(v) {\n const parsedURL = usm.basicURLParse(v);\n if (parsedURL === \"failure\") {\n throw new TypeError(\"Invalid URL\");\n }\n\n this._url = parsedURL;\n }\n\n get origin() {\n return usm.serializeURLOrigin(this._url);\n }\n\n get protocol() {\n return this._url.scheme + \":\";\n }\n\n set protocol(v) {\n usm.basicURLParse(v + \":\", { url: this._url, stateOverride: \"scheme start\" });\n }\n\n get username() {\n return this._url.username;\n }\n\n set username(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setTheUsername(this._url, v);\n }\n\n get password() {\n return this._url.password;\n }\n\n set password(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n usm.setThePassword(this._url, v);\n }\n\n get host() {\n const url = this._url;\n\n if (url.host === null) {\n return \"\";\n }\n\n if (url.port === null) {\n return usm.serializeHost(url.host);\n }\n\n return usm.serializeHost(url.host) + \":\" + usm.serializeInteger(url.port);\n }\n\n set host(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"host\" });\n }\n\n get hostname() {\n if (this._url.host === null) {\n return \"\";\n }\n\n return usm.serializeHost(this._url.host);\n }\n\n set hostname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n usm.basicURLParse(v, { url: this._url, stateOverride: \"hostname\" });\n }\n\n get port() {\n if (this._url.port === null) {\n return \"\";\n }\n\n return usm.serializeInteger(this._url.port);\n }\n\n set port(v) {\n if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n if (v === \"\") {\n this._url.port = null;\n } else {\n usm.basicURLParse(v, { url: this._url, stateOverride: \"port\" });\n }\n }\n\n get pathname() {\n if (this._url.cannotBeABaseURL) {\n return this._url.path[0];\n }\n\n if (this._url.path.length === 0) {\n return \"\";\n }\n\n return \"/\" + this._url.path.join(\"/\");\n }\n\n set pathname(v) {\n if (this._url.cannotBeABaseURL) {\n return;\n }\n\n this._url.path = [];\n usm.basicURLParse(v, { url: this._url, stateOverride: \"path start\" });\n }\n\n get search() {\n if (this._url.query === null || this._url.query === \"\") {\n return \"\";\n }\n\n return \"?\" + this._url.query;\n }\n\n set search(v) {\n // TODO: query stuff\n\n const url = this._url;\n\n if (v === \"\") {\n url.query = null;\n return;\n }\n\n const input = v[0] === \"?\" ? v.substring(1) : v;\n url.query = \"\";\n usm.basicURLParse(input, { url, stateOverride: \"query\" });\n }\n\n get hash() {\n if (this._url.fragment === null || this._url.fragment === \"\") {\n return \"\";\n }\n\n return \"#\" + this._url.fragment;\n }\n\n set hash(v) {\n if (v === \"\") {\n this._url.fragment = null;\n return;\n }\n\n const input = v[0] === \"#\" ? v.substring(1) : v;\n this._url.fragment = \"\";\n usm.basicURLParse(input, { url: this._url, stateOverride: \"fragment\" });\n }\n\n toJSON() {\n return this.href;\n }\n};\n","\"use strict\";\n\nconst conversions = require(\"webidl-conversions\");\nconst utils = require(\"./utils.js\");\nconst Impl = require(\".//URL-impl.js\");\n\nconst impl = utils.implSymbol;\n\nfunction URL(url) {\n if (!this || this[impl] || !(this instanceof URL)) {\n throw new TypeError(\"Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.\");\n }\n if (arguments.length < 1) {\n throw new TypeError(\"Failed to construct 'URL': 1 argument required, but only \" + arguments.length + \" present.\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 2; ++i) {\n args[i] = arguments[i];\n }\n args[0] = conversions[\"USVString\"](args[0]);\n if (args[1] !== undefined) {\n args[1] = conversions[\"USVString\"](args[1]);\n }\n\n module.exports.setup(this, args);\n}\n\nURL.prototype.toJSON = function toJSON() {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n const args = [];\n for (let i = 0; i < arguments.length && i < 0; ++i) {\n args[i] = arguments[i];\n }\n return this[impl].toJSON.apply(this[impl], args);\n};\nObject.defineProperty(URL.prototype, \"href\", {\n get() {\n return this[impl].href;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].href = V;\n },\n enumerable: true,\n configurable: true\n});\n\nURL.prototype.toString = function () {\n if (!this || !module.exports.is(this)) {\n throw new TypeError(\"Illegal invocation\");\n }\n return this.href;\n};\n\nObject.defineProperty(URL.prototype, \"origin\", {\n get() {\n return this[impl].origin;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"protocol\", {\n get() {\n return this[impl].protocol;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].protocol = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"username\", {\n get() {\n return this[impl].username;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].username = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"password\", {\n get() {\n return this[impl].password;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].password = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"host\", {\n get() {\n return this[impl].host;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].host = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hostname\", {\n get() {\n return this[impl].hostname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hostname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"port\", {\n get() {\n return this[impl].port;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].port = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"pathname\", {\n get() {\n return this[impl].pathname;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].pathname = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"search\", {\n get() {\n return this[impl].search;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].search = V;\n },\n enumerable: true,\n configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hash\", {\n get() {\n return this[impl].hash;\n },\n set(V) {\n V = conversions[\"USVString\"](V);\n this[impl].hash = V;\n },\n enumerable: true,\n configurable: true\n});\n\n\nmodule.exports = {\n is(obj) {\n return !!obj && obj[impl] instanceof Impl.implementation;\n },\n create(constructorArgs, privateData) {\n let obj = Object.create(URL.prototype);\n this.setup(obj, constructorArgs, privateData);\n return obj;\n },\n setup(obj, constructorArgs, privateData) {\n if (!privateData) privateData = {};\n privateData.wrapper = obj;\n\n obj[impl] = new Impl.implementation(constructorArgs, privateData);\n obj[impl][utils.wrapperSymbol] = obj;\n },\n interface: URL,\n expose: {\n Window: { URL: URL },\n Worker: { URL: URL }\n }\n};\n\n","\"use strict\";\n\nexports.URL = require(\"./URL\").interface;\nexports.serializeURL = require(\"./url-state-machine\").serializeURL;\nexports.serializeURLOrigin = require(\"./url-state-machine\").serializeURLOrigin;\nexports.basicURLParse = require(\"./url-state-machine\").basicURLParse;\nexports.setTheUsername = require(\"./url-state-machine\").setTheUsername;\nexports.setThePassword = require(\"./url-state-machine\").setThePassword;\nexports.serializeHost = require(\"./url-state-machine\").serializeHost;\nexports.serializeInteger = require(\"./url-state-machine\").serializeInteger;\nexports.parseURL = require(\"./url-state-machine\").parseURL;\n","\"use strict\";\r\nconst punycode = require(\"punycode\");\r\nconst tr46 = require(\"tr46\");\r\n\r\nconst specialSchemes = {\r\n ftp: 21,\r\n file: null,\r\n gopher: 70,\r\n http: 80,\r\n https: 443,\r\n ws: 80,\r\n wss: 443\r\n};\r\n\r\nconst failure = Symbol(\"failure\");\r\n\r\nfunction countSymbols(str) {\r\n return punycode.ucs2.decode(str).length;\r\n}\r\n\r\nfunction at(input, idx) {\r\n const c = input[idx];\r\n return isNaN(c) ? undefined : String.fromCodePoint(c);\r\n}\r\n\r\nfunction isASCIIDigit(c) {\r\n return c >= 0x30 && c <= 0x39;\r\n}\r\n\r\nfunction isASCIIAlpha(c) {\r\n return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);\r\n}\r\n\r\nfunction isASCIIAlphanumeric(c) {\r\n return isASCIIAlpha(c) || isASCIIDigit(c);\r\n}\r\n\r\nfunction isASCIIHex(c) {\r\n return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);\r\n}\r\n\r\nfunction isSingleDot(buffer) {\r\n return buffer === \".\" || buffer.toLowerCase() === \"%2e\";\r\n}\r\n\r\nfunction isDoubleDot(buffer) {\r\n buffer = buffer.toLowerCase();\r\n return buffer === \"..\" || buffer === \"%2e.\" || buffer === \".%2e\" || buffer === \"%2e%2e\";\r\n}\r\n\r\nfunction isWindowsDriveLetterCodePoints(cp1, cp2) {\r\n return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);\r\n}\r\n\r\nfunction isWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === \":\" || string[1] === \"|\");\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetterString(string) {\r\n return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === \":\";\r\n}\r\n\r\nfunction containsForbiddenHostCodePoint(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|%|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction containsForbiddenHostCodePointExcludingPercent(string) {\r\n return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction isSpecialScheme(scheme) {\r\n return specialSchemes[scheme] !== undefined;\r\n}\r\n\r\nfunction isSpecial(url) {\r\n return isSpecialScheme(url.scheme);\r\n}\r\n\r\nfunction defaultPort(scheme) {\r\n return specialSchemes[scheme];\r\n}\r\n\r\nfunction percentEncode(c) {\r\n let hex = c.toString(16).toUpperCase();\r\n if (hex.length === 1) {\r\n hex = \"0\" + hex;\r\n }\r\n\r\n return \"%\" + hex;\r\n}\r\n\r\nfunction utf8PercentEncode(c) {\r\n const buf = new Buffer(c);\r\n\r\n let str = \"\";\r\n\r\n for (let i = 0; i < buf.length; ++i) {\r\n str += percentEncode(buf[i]);\r\n }\r\n\r\n return str;\r\n}\r\n\r\nfunction utf8PercentDecode(str) {\r\n const input = new Buffer(str);\r\n const output = [];\r\n for (let i = 0; i < input.length; ++i) {\r\n if (input[i] !== 37) {\r\n output.push(input[i]);\r\n } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {\r\n output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));\r\n i += 2;\r\n } else {\r\n output.push(input[i]);\r\n }\r\n }\r\n return new Buffer(output).toString();\r\n}\r\n\r\nfunction isC0ControlPercentEncode(c) {\r\n return c <= 0x1F || c > 0x7E;\r\n}\r\n\r\nconst extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);\r\nfunction isPathPercentEncode(c) {\r\n return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);\r\n}\r\n\r\nconst extraUserinfoPercentEncodeSet =\r\n new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);\r\nfunction isUserinfoPercentEncode(c) {\r\n return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);\r\n}\r\n\r\nfunction percentEncodeChar(c, encodeSetPredicate) {\r\n const cStr = String.fromCodePoint(c);\r\n\r\n if (encodeSetPredicate(c)) {\r\n return utf8PercentEncode(cStr);\r\n }\r\n\r\n return cStr;\r\n}\r\n\r\nfunction parseIPv4Number(input) {\r\n let R = 10;\r\n\r\n if (input.length >= 2 && input.charAt(0) === \"0\" && input.charAt(1).toLowerCase() === \"x\") {\r\n input = input.substring(2);\r\n R = 16;\r\n } else if (input.length >= 2 && input.charAt(0) === \"0\") {\r\n input = input.substring(1);\r\n R = 8;\r\n }\r\n\r\n if (input === \"\") {\r\n return 0;\r\n }\r\n\r\n const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);\r\n if (regex.test(input)) {\r\n return failure;\r\n }\r\n\r\n return parseInt(input, R);\r\n}\r\n\r\nfunction parseIPv4(input) {\r\n const parts = input.split(\".\");\r\n if (parts[parts.length - 1] === \"\") {\r\n if (parts.length > 1) {\r\n parts.pop();\r\n }\r\n }\r\n\r\n if (parts.length > 4) {\r\n return input;\r\n }\r\n\r\n const numbers = [];\r\n for (const part of parts) {\r\n if (part === \"\") {\r\n return input;\r\n }\r\n const n = parseIPv4Number(part);\r\n if (n === failure) {\r\n return input;\r\n }\r\n\r\n numbers.push(n);\r\n }\r\n\r\n for (let i = 0; i < numbers.length - 1; ++i) {\r\n if (numbers[i] > 255) {\r\n return failure;\r\n }\r\n }\r\n if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {\r\n return failure;\r\n }\r\n\r\n let ipv4 = numbers.pop();\r\n let counter = 0;\r\n\r\n for (const n of numbers) {\r\n ipv4 += n * Math.pow(256, 3 - counter);\r\n ++counter;\r\n }\r\n\r\n return ipv4;\r\n}\r\n\r\nfunction serializeIPv4(address) {\r\n let output = \"\";\r\n let n = address;\r\n\r\n for (let i = 1; i <= 4; ++i) {\r\n output = String(n % 256) + output;\r\n if (i !== 4) {\r\n output = \".\" + output;\r\n }\r\n n = Math.floor(n / 256);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseIPv6(input) {\r\n const address = [0, 0, 0, 0, 0, 0, 0, 0];\r\n let pieceIndex = 0;\r\n let compress = null;\r\n let pointer = 0;\r\n\r\n input = punycode.ucs2.decode(input);\r\n\r\n if (input[pointer] === 58) {\r\n if (input[pointer + 1] !== 58) {\r\n return failure;\r\n }\r\n\r\n pointer += 2;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n }\r\n\r\n while (pointer < input.length) {\r\n if (pieceIndex === 8) {\r\n return failure;\r\n }\r\n\r\n if (input[pointer] === 58) {\r\n if (compress !== null) {\r\n return failure;\r\n }\r\n ++pointer;\r\n ++pieceIndex;\r\n compress = pieceIndex;\r\n continue;\r\n }\r\n\r\n let value = 0;\r\n let length = 0;\r\n\r\n while (length < 4 && isASCIIHex(input[pointer])) {\r\n value = value * 0x10 + parseInt(at(input, pointer), 16);\r\n ++pointer;\r\n ++length;\r\n }\r\n\r\n if (input[pointer] === 46) {\r\n if (length === 0) {\r\n return failure;\r\n }\r\n\r\n pointer -= length;\r\n\r\n if (pieceIndex > 6) {\r\n return failure;\r\n }\r\n\r\n let numbersSeen = 0;\r\n\r\n while (input[pointer] !== undefined) {\r\n let ipv4Piece = null;\r\n\r\n if (numbersSeen > 0) {\r\n if (input[pointer] === 46 && numbersSeen < 4) {\r\n ++pointer;\r\n } else {\r\n return failure;\r\n }\r\n }\r\n\r\n if (!isASCIIDigit(input[pointer])) {\r\n return failure;\r\n }\r\n\r\n while (isASCIIDigit(input[pointer])) {\r\n const number = parseInt(at(input, pointer));\r\n if (ipv4Piece === null) {\r\n ipv4Piece = number;\r\n } else if (ipv4Piece === 0) {\r\n return failure;\r\n } else {\r\n ipv4Piece = ipv4Piece * 10 + number;\r\n }\r\n if (ipv4Piece > 255) {\r\n return failure;\r\n }\r\n ++pointer;\r\n }\r\n\r\n address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;\r\n\r\n ++numbersSeen;\r\n\r\n if (numbersSeen === 2 || numbersSeen === 4) {\r\n ++pieceIndex;\r\n }\r\n }\r\n\r\n if (numbersSeen !== 4) {\r\n return failure;\r\n }\r\n\r\n break;\r\n } else if (input[pointer] === 58) {\r\n ++pointer;\r\n if (input[pointer] === undefined) {\r\n return failure;\r\n }\r\n } else if (input[pointer] !== undefined) {\r\n return failure;\r\n }\r\n\r\n address[pieceIndex] = value;\r\n ++pieceIndex;\r\n }\r\n\r\n if (compress !== null) {\r\n let swaps = pieceIndex - compress;\r\n pieceIndex = 7;\r\n while (pieceIndex !== 0 && swaps > 0) {\r\n const temp = address[compress + swaps - 1];\r\n address[compress + swaps - 1] = address[pieceIndex];\r\n address[pieceIndex] = temp;\r\n --pieceIndex;\r\n --swaps;\r\n }\r\n } else if (compress === null && pieceIndex !== 8) {\r\n return failure;\r\n }\r\n\r\n return address;\r\n}\r\n\r\nfunction serializeIPv6(address) {\r\n let output = \"\";\r\n const seqResult = findLongestZeroSequence(address);\r\n const compress = seqResult.idx;\r\n let ignore0 = false;\r\n\r\n for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {\r\n if (ignore0 && address[pieceIndex] === 0) {\r\n continue;\r\n } else if (ignore0) {\r\n ignore0 = false;\r\n }\r\n\r\n if (compress === pieceIndex) {\r\n const separator = pieceIndex === 0 ? \"::\" : \":\";\r\n output += separator;\r\n ignore0 = true;\r\n continue;\r\n }\r\n\r\n output += address[pieceIndex].toString(16);\r\n\r\n if (pieceIndex !== 7) {\r\n output += \":\";\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseHost(input, isSpecialArg) {\r\n if (input[0] === \"[\") {\r\n if (input[input.length - 1] !== \"]\") {\r\n return failure;\r\n }\r\n\r\n return parseIPv6(input.substring(1, input.length - 1));\r\n }\r\n\r\n if (!isSpecialArg) {\r\n return parseOpaqueHost(input);\r\n }\r\n\r\n const domain = utf8PercentDecode(input);\r\n const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);\r\n if (asciiDomain === null) {\r\n return failure;\r\n }\r\n\r\n if (containsForbiddenHostCodePoint(asciiDomain)) {\r\n return failure;\r\n }\r\n\r\n const ipv4Host = parseIPv4(asciiDomain);\r\n if (typeof ipv4Host === \"number\" || ipv4Host === failure) {\r\n return ipv4Host;\r\n }\r\n\r\n return asciiDomain;\r\n}\r\n\r\nfunction parseOpaqueHost(input) {\r\n if (containsForbiddenHostCodePointExcludingPercent(input)) {\r\n return failure;\r\n }\r\n\r\n let output = \"\";\r\n const decoded = punycode.ucs2.decode(input);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);\r\n }\r\n return output;\r\n}\r\n\r\nfunction findLongestZeroSequence(arr) {\r\n let maxIdx = null;\r\n let maxLen = 1; // only find elements > 1\r\n let currStart = null;\r\n let currLen = 0;\r\n\r\n for (let i = 0; i < arr.length; ++i) {\r\n if (arr[i] !== 0) {\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n currStart = null;\r\n currLen = 0;\r\n } else {\r\n if (currStart === null) {\r\n currStart = i;\r\n }\r\n ++currLen;\r\n }\r\n }\r\n\r\n // if trailing zeros\r\n if (currLen > maxLen) {\r\n maxIdx = currStart;\r\n maxLen = currLen;\r\n }\r\n\r\n return {\r\n idx: maxIdx,\r\n len: maxLen\r\n };\r\n}\r\n\r\nfunction serializeHost(host) {\r\n if (typeof host === \"number\") {\r\n return serializeIPv4(host);\r\n }\r\n\r\n // IPv6 serializer\r\n if (host instanceof Array) {\r\n return \"[\" + serializeIPv6(host) + \"]\";\r\n }\r\n\r\n return host;\r\n}\r\n\r\nfunction trimControlChars(url) {\r\n return url.replace(/^[\\u0000-\\u001F\\u0020]+|[\\u0000-\\u001F\\u0020]+$/g, \"\");\r\n}\r\n\r\nfunction trimTabAndNewline(url) {\r\n return url.replace(/\\u0009|\\u000A|\\u000D/g, \"\");\r\n}\r\n\r\nfunction shortenPath(url) {\r\n const path = url.path;\r\n if (path.length === 0) {\r\n return;\r\n }\r\n if (url.scheme === \"file\" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {\r\n return;\r\n }\r\n\r\n path.pop();\r\n}\r\n\r\nfunction includesCredentials(url) {\r\n return url.username !== \"\" || url.password !== \"\";\r\n}\r\n\r\nfunction cannotHaveAUsernamePasswordPort(url) {\r\n return url.host === null || url.host === \"\" || url.cannotBeABaseURL || url.scheme === \"file\";\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetter(string) {\r\n return /^[A-Za-z]:$/.test(string);\r\n}\r\n\r\nfunction URLStateMachine(input, base, encodingOverride, url, stateOverride) {\r\n this.pointer = 0;\r\n this.input = input;\r\n this.base = base || null;\r\n this.encodingOverride = encodingOverride || \"utf-8\";\r\n this.stateOverride = stateOverride;\r\n this.url = url;\r\n this.failure = false;\r\n this.parseError = false;\r\n\r\n if (!this.url) {\r\n this.url = {\r\n scheme: \"\",\r\n username: \"\",\r\n password: \"\",\r\n host: null,\r\n port: null,\r\n path: [],\r\n query: null,\r\n fragment: null,\r\n\r\n cannotBeABaseURL: false\r\n };\r\n\r\n const res = trimControlChars(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n }\r\n\r\n const res = trimTabAndNewline(this.input);\r\n if (res !== this.input) {\r\n this.parseError = true;\r\n }\r\n this.input = res;\r\n\r\n this.state = stateOverride || \"scheme start\";\r\n\r\n this.buffer = \"\";\r\n this.atFlag = false;\r\n this.arrFlag = false;\r\n this.passwordTokenSeenFlag = false;\r\n\r\n this.input = punycode.ucs2.decode(this.input);\r\n\r\n for (; this.pointer <= this.input.length; ++this.pointer) {\r\n const c = this.input[this.pointer];\r\n const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);\r\n\r\n // exec state machine\r\n const ret = this[\"parse \" + this.state](c, cStr);\r\n if (!ret) {\r\n break; // terminate algorithm\r\n } else if (ret === failure) {\r\n this.failure = true;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nURLStateMachine.prototype[\"parse scheme start\"] = function parseSchemeStart(c, cStr) {\r\n if (isASCIIAlpha(c)) {\r\n this.buffer += cStr.toLowerCase();\r\n this.state = \"scheme\";\r\n } else if (!this.stateOverride) {\r\n this.state = \"no scheme\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse scheme\"] = function parseScheme(c, cStr) {\r\n if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {\r\n this.buffer += cStr.toLowerCase();\r\n } else if (c === 58) {\r\n if (this.stateOverride) {\r\n if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {\r\n return false;\r\n }\r\n\r\n if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === \"file\") {\r\n return false;\r\n }\r\n\r\n if (this.url.scheme === \"file\" && (this.url.host === \"\" || this.url.host === null)) {\r\n return false;\r\n }\r\n }\r\n this.url.scheme = this.buffer;\r\n this.buffer = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n if (this.url.scheme === \"file\") {\r\n if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file\";\r\n } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {\r\n this.state = \"special relative or authority\";\r\n } else if (isSpecial(this.url)) {\r\n this.state = \"special authority slashes\";\r\n } else if (this.input[this.pointer + 1] === 47) {\r\n this.state = \"path or authority\";\r\n ++this.pointer;\r\n } else {\r\n this.url.cannotBeABaseURL = true;\r\n this.url.path.push(\"\");\r\n this.state = \"cannot-be-a-base-URL path\";\r\n }\r\n } else if (!this.stateOverride) {\r\n this.buffer = \"\";\r\n this.state = \"no scheme\";\r\n this.pointer = -1;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse no scheme\"] = function parseNoScheme(c) {\r\n if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {\r\n return failure;\r\n } else if (this.base.cannotBeABaseURL && c === 35) {\r\n this.url.scheme = this.base.scheme;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.url.cannotBeABaseURL = true;\r\n this.state = \"fragment\";\r\n } else if (this.base.scheme === \"file\") {\r\n this.state = \"file\";\r\n --this.pointer;\r\n } else {\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special relative or authority\"] = function parseSpecialRelativeOrAuthority(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"relative\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path or authority\"] = function parsePathOrAuthority(c) {\r\n if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative\"] = function parseRelative(c) {\r\n this.url.scheme = this.base.scheme;\r\n if (isNaN(c)) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 47) {\r\n this.state = \"relative slash\";\r\n } else if (c === 63) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n this.state = \"relative slash\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.url.path = this.base.path.slice(0, this.base.path.length - 1);\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative slash\"] = function parseRelativeSlash(c) {\r\n if (isSpecial(this.url) && (c === 47 || c === 92)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"special authority ignore slashes\";\r\n } else if (c === 47) {\r\n this.state = \"authority\";\r\n } else {\r\n this.url.username = this.base.username;\r\n this.url.password = this.base.password;\r\n this.url.host = this.base.host;\r\n this.url.port = this.base.port;\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority slashes\"] = function parseSpecialAuthoritySlashes(c) {\r\n if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n this.state = \"special authority ignore slashes\";\r\n ++this.pointer;\r\n } else {\r\n this.parseError = true;\r\n this.state = \"special authority ignore slashes\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority ignore slashes\"] = function parseSpecialAuthorityIgnoreSlashes(c) {\r\n if (c !== 47 && c !== 92) {\r\n this.state = \"authority\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse authority\"] = function parseAuthority(c, cStr) {\r\n if (c === 64) {\r\n this.parseError = true;\r\n if (this.atFlag) {\r\n this.buffer = \"%40\" + this.buffer;\r\n }\r\n this.atFlag = true;\r\n\r\n // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars\r\n const len = countSymbols(this.buffer);\r\n for (let pointer = 0; pointer < len; ++pointer) {\r\n const codePoint = this.buffer.codePointAt(pointer);\r\n\r\n if (codePoint === 58 && !this.passwordTokenSeenFlag) {\r\n this.passwordTokenSeenFlag = true;\r\n continue;\r\n }\r\n const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);\r\n if (this.passwordTokenSeenFlag) {\r\n this.url.password += encodedCodePoints;\r\n } else {\r\n this.url.username += encodedCodePoints;\r\n }\r\n }\r\n this.buffer = \"\";\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n if (this.atFlag && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.pointer -= countSymbols(this.buffer) + 1;\r\n this.buffer = \"\";\r\n this.state = \"host\";\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse hostname\"] =\r\nURLStateMachine.prototype[\"parse host\"] = function parseHostName(c, cStr) {\r\n if (this.stateOverride && this.url.scheme === \"file\") {\r\n --this.pointer;\r\n this.state = \"file host\";\r\n } else if (c === 58 && !this.arrFlag) {\r\n if (this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"port\";\r\n if (this.stateOverride === \"hostname\") {\r\n return false;\r\n }\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92)) {\r\n --this.pointer;\r\n if (isSpecial(this.url) && this.buffer === \"\") {\r\n this.parseError = true;\r\n return failure;\r\n } else if (this.stateOverride && this.buffer === \"\" &&\r\n (includesCredentials(this.url) || this.url.port !== null)) {\r\n this.parseError = true;\r\n return false;\r\n }\r\n\r\n const host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n\r\n this.url.host = host;\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n } else {\r\n if (c === 91) {\r\n this.arrFlag = true;\r\n } else if (c === 93) {\r\n this.arrFlag = false;\r\n }\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse port\"] = function parsePort(c, cStr) {\r\n if (isASCIIDigit(c)) {\r\n this.buffer += cStr;\r\n } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n (isSpecial(this.url) && c === 92) ||\r\n this.stateOverride) {\r\n if (this.buffer !== \"\") {\r\n const port = parseInt(this.buffer);\r\n if (port > Math.pow(2, 16) - 1) {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n this.url.port = port === defaultPort(this.url.scheme) ? null : port;\r\n this.buffer = \"\";\r\n }\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n --this.pointer;\r\n } else {\r\n this.parseError = true;\r\n return failure;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);\r\n\r\nURLStateMachine.prototype[\"parse file\"] = function parseFile(c) {\r\n this.url.scheme = \"file\";\r\n\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file slash\";\r\n } else if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNaN(c)) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n } else if (c === 63) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n this.url.query = this.base.query;\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points\r\n !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||\r\n (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points\r\n !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {\r\n this.url.host = this.base.host;\r\n this.url.path = this.base.path.slice();\r\n shortenPath(this.url);\r\n } else {\r\n this.parseError = true;\r\n }\r\n\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n } else {\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file slash\"] = function parseFileSlash(c) {\r\n if (c === 47 || c === 92) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"file host\";\r\n } else {\r\n if (this.base !== null && this.base.scheme === \"file\") {\r\n if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {\r\n this.url.path.push(this.base.path[0]);\r\n } else {\r\n this.url.host = this.base.host;\r\n }\r\n }\r\n this.state = \"path\";\r\n --this.pointer;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file host\"] = function parseFileHost(c, cStr) {\r\n if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {\r\n --this.pointer;\r\n if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {\r\n this.parseError = true;\r\n this.state = \"path\";\r\n } else if (this.buffer === \"\") {\r\n this.url.host = \"\";\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n this.state = \"path start\";\r\n } else {\r\n let host = parseHost(this.buffer, isSpecial(this.url));\r\n if (host === failure) {\r\n return failure;\r\n }\r\n if (host === \"localhost\") {\r\n host = \"\";\r\n }\r\n this.url.host = host;\r\n\r\n if (this.stateOverride) {\r\n return false;\r\n }\r\n\r\n this.buffer = \"\";\r\n this.state = \"path start\";\r\n }\r\n } else {\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path start\"] = function parsePathStart(c) {\r\n if (isSpecial(this.url)) {\r\n if (c === 92) {\r\n this.parseError = true;\r\n }\r\n this.state = \"path\";\r\n\r\n if (c !== 47 && c !== 92) {\r\n --this.pointer;\r\n }\r\n } else if (!this.stateOverride && c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (!this.stateOverride && c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else if (c !== undefined) {\r\n this.state = \"path\";\r\n if (c !== 47) {\r\n --this.pointer;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path\"] = function parsePath(c) {\r\n if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||\r\n (!this.stateOverride && (c === 63 || c === 35))) {\r\n if (isSpecial(this.url) && c === 92) {\r\n this.parseError = true;\r\n }\r\n\r\n if (isDoubleDot(this.buffer)) {\r\n shortenPath(this.url);\r\n if (c !== 47 && !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n }\r\n } else if (isSingleDot(this.buffer) && c !== 47 &&\r\n !(isSpecial(this.url) && c === 92)) {\r\n this.url.path.push(\"\");\r\n } else if (!isSingleDot(this.buffer)) {\r\n if (this.url.scheme === \"file\" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {\r\n if (this.url.host !== \"\" && this.url.host !== null) {\r\n this.parseError = true;\r\n this.url.host = \"\";\r\n }\r\n this.buffer = this.buffer[0] + \":\";\r\n }\r\n this.url.path.push(this.buffer);\r\n }\r\n this.buffer = \"\";\r\n if (this.url.scheme === \"file\" && (c === undefined || c === 63 || c === 35)) {\r\n while (this.url.path.length > 1 && this.url.path[0] === \"\") {\r\n this.parseError = true;\r\n this.url.path.shift();\r\n }\r\n }\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n }\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += percentEncodeChar(c, isPathPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse cannot-be-a-base-URL path\"] = function parseCannotBeABaseURLPath(c) {\r\n if (c === 63) {\r\n this.url.query = \"\";\r\n this.state = \"query\";\r\n } else if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n } else {\r\n // TODO: Add: not a URL code point\r\n if (!isNaN(c) && c !== 37) {\r\n this.parseError = true;\r\n }\r\n\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n if (!isNaN(c)) {\r\n this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse query\"] = function parseQuery(c, cStr) {\r\n if (isNaN(c) || (!this.stateOverride && c === 35)) {\r\n if (!isSpecial(this.url) || this.url.scheme === \"ws\" || this.url.scheme === \"wss\") {\r\n this.encodingOverride = \"utf-8\";\r\n }\r\n\r\n const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead\r\n for (let i = 0; i < buffer.length; ++i) {\r\n if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||\r\n buffer[i] === 0x3C || buffer[i] === 0x3E) {\r\n this.url.query += percentEncode(buffer[i]);\r\n } else {\r\n this.url.query += String.fromCodePoint(buffer[i]);\r\n }\r\n }\r\n\r\n this.buffer = \"\";\r\n if (c === 35) {\r\n this.url.fragment = \"\";\r\n this.state = \"fragment\";\r\n }\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.buffer += cStr;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse fragment\"] = function parseFragment(c) {\r\n if (isNaN(c)) { // do nothing\r\n } else if (c === 0x0) {\r\n this.parseError = true;\r\n } else {\r\n // TODO: If c is not a URL code point and not \"%\", parse error.\r\n if (c === 37 &&\r\n (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n !isASCIIHex(this.input[this.pointer + 2]))) {\r\n this.parseError = true;\r\n }\r\n\r\n this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nfunction serializeURL(url, excludeFragment) {\r\n let output = url.scheme + \":\";\r\n if (url.host !== null) {\r\n output += \"//\";\r\n\r\n if (url.username !== \"\" || url.password !== \"\") {\r\n output += url.username;\r\n if (url.password !== \"\") {\r\n output += \":\" + url.password;\r\n }\r\n output += \"@\";\r\n }\r\n\r\n output += serializeHost(url.host);\r\n\r\n if (url.port !== null) {\r\n output += \":\" + url.port;\r\n }\r\n } else if (url.host === null && url.scheme === \"file\") {\r\n output += \"//\";\r\n }\r\n\r\n if (url.cannotBeABaseURL) {\r\n output += url.path[0];\r\n } else {\r\n for (const string of url.path) {\r\n output += \"/\" + string;\r\n }\r\n }\r\n\r\n if (url.query !== null) {\r\n output += \"?\" + url.query;\r\n }\r\n\r\n if (!excludeFragment && url.fragment !== null) {\r\n output += \"#\" + url.fragment;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction serializeOrigin(tuple) {\r\n let result = tuple.scheme + \"://\";\r\n result += serializeHost(tuple.host);\r\n\r\n if (tuple.port !== null) {\r\n result += \":\" + tuple.port;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nmodule.exports.serializeURL = serializeURL;\r\n\r\nmodule.exports.serializeURLOrigin = function (url) {\r\n // https://url.spec.whatwg.org/#concept-url-origin\r\n switch (url.scheme) {\r\n case \"blob\":\r\n try {\r\n return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));\r\n } catch (e) {\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n case \"ftp\":\r\n case \"gopher\":\r\n case \"http\":\r\n case \"https\":\r\n case \"ws\":\r\n case \"wss\":\r\n return serializeOrigin({\r\n scheme: url.scheme,\r\n host: url.host,\r\n port: url.port\r\n });\r\n case \"file\":\r\n // spec says \"exercise to the reader\", chrome says \"file://\"\r\n return \"file://\";\r\n default:\r\n // serializing an opaque origin returns \"null\"\r\n return \"null\";\r\n }\r\n};\r\n\r\nmodule.exports.basicURLParse = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);\r\n if (usm.failure) {\r\n return \"failure\";\r\n }\r\n\r\n return usm.url;\r\n};\r\n\r\nmodule.exports.setTheUsername = function (url, username) {\r\n url.username = \"\";\r\n const decoded = punycode.ucs2.decode(username);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.setThePassword = function (url, password) {\r\n url.password = \"\";\r\n const decoded = punycode.ucs2.decode(password);\r\n for (let i = 0; i < decoded.length; ++i) {\r\n url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n }\r\n};\r\n\r\nmodule.exports.serializeHost = serializeHost;\r\n\r\nmodule.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;\r\n\r\nmodule.exports.serializeInteger = function (integer) {\r\n return String(integer);\r\n};\r\n\r\nmodule.exports.parseURL = function (input, options) {\r\n if (options === undefined) {\r\n options = {};\r\n }\r\n\r\n // We don't handle blobs, so this just delegates:\r\n return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });\r\n};\r\n","\"use strict\";\n\nmodule.exports.mixin = function mixin(target, source) {\n const keys = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keys.length; ++i) {\n Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));\n }\n};\n\nmodule.exports.wrapperSymbol = Symbol(\"wrapper\");\nmodule.exports.implSymbol = Symbol(\"impl\");\n\nmodule.exports.wrapperForImpl = function (impl) {\n return impl[module.exports.wrapperSymbol];\n};\n\nmodule.exports.implForWrapper = function (wrapper) {\n return wrapper[module.exports.implSymbol];\n};\n\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n",";(function (sax) { // wrapper for non-node envs\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n 'procInstName', 'procInstBody', 'entity', 'attribName',\n 'attribValue', 'cdata', 'script'\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace'\n ]\n\n function SAXParser (strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F () {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength (parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers (parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers (parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () { end(this) },\n write: write,\n resume: function () { this.error = null; return this },\n close: function () { return this.write(null) },\n flush: function () { flushBuffers(this) }\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream (strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream (strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream\n }\n })\n\n SAXStream.prototype.write = function (data) {\n if (typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)) {\n if (!this._decoder) {\n var SD = require('string_decoder').StringDecoder\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace (c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote (c) {\n return c === '\"' || c === '\\''\n }\n\n function isAttribEnd (c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch (regex, c) {\n return regex.test(c)\n }\n\n function notMatch (regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // \n SCRIPT: S++, //