From 03f3f448b13a496342529eda050407f6389f6ffe Mon Sep 17 00:00:00 2001 From: Merlin Beutlberger Date: Mon, 16 Jun 2025 11:24:17 +0200 Subject: [PATCH 1/4] refactor(autofix): Enable import of multiple modules/globals in generator-fixes --- .../ui5Types/fix/AccessExpressionFix.ts | 17 +--- .../fix/AccessExpressionGeneratorFix.ts | 89 ++++++++++++++--- src/linter/ui5Types/fix/BaseFix.ts | 88 ++++++++++++++--- src/linter/ui5Types/fix/CallExpressionFix.ts | 16 +-- .../fix/CallExpressionGeneratorFix.ts | 99 ++++++++++++++++--- .../ui5Types/fix/collections/jqueryFixes.ts | 39 ++++---- .../fix/collections/sapUiCoreFixes.ts | 10 +- 7 files changed, 272 insertions(+), 86 deletions(-) diff --git a/src/linter/ui5Types/fix/AccessExpressionFix.ts b/src/linter/ui5Types/fix/AccessExpressionFix.ts index f43969f9e..cf555bb4b 100644 --- a/src/linter/ui5Types/fix/AccessExpressionFix.ts +++ b/src/linter/ui5Types/fix/AccessExpressionFix.ts @@ -16,22 +16,13 @@ export default class AccessExpressionFix extends AccessExpressionBaseFix { if (this.startPos === undefined || this.endPos === undefined) { throw new Error("Start and end position are not defined"); } - if (this.params.moduleName && !this.moduleIdentifierName) { - // The identifier for the requested module has not been set - // This can happen for example if the position of the autofix is not inside - // a module definition or require block. Therefore the required dependency can not be added - // and the fix can not be applied. - return; - } - if (this.params.globalName && !this.globalIdentifierName) { - // This should not happen - throw new Error("Global identifier has not been provided"); - } - let value = this.globalIdentifierName ?? this.moduleIdentifierName; - if (!value) { + + const identifier = this.getIdentifiersForSingleRequest(this.params.moduleName, this.params.globalName); + if (!identifier) { return; } + let value = identifier; if (this.params.propertyAccess) { // If a property is defined, we need to access it on the identifier value = `${value}.${this.params.propertyAccess}`; diff --git a/src/linter/ui5Types/fix/AccessExpressionGeneratorFix.ts b/src/linter/ui5Types/fix/AccessExpressionGeneratorFix.ts index 3a95298c8..3a3006b43 100644 --- a/src/linter/ui5Types/fix/AccessExpressionGeneratorFix.ts +++ b/src/linter/ui5Types/fix/AccessExpressionGeneratorFix.ts @@ -2,6 +2,26 @@ import {ChangeAction} from "../../../autofix/autofix.js"; import AccessExpressionBaseFix, {AccessExpressionBaseFixParams} from "./AccessExpressionBaseFix.js"; export interface AccessExpressionGeneratorFixParams extends AccessExpressionBaseFixParams { + /** + * Modules to import. If this parameter is specified, the standalone parameters "moduleName" and + * "preferredIdentifier" must not be provided. + */ + moduleImports?: { + moduleName: string; + preferredIdentifier?: string; + }[]; + + /** + * Names of a global variable to use in the fix (e.g. "document"). If this parameter is specified, parameter + * "globalName" must not be provided. + * + * The fix will be provided with the identifier names or property access strings to use via + * the setIdentifierForGlobal method. + * + * For example, if there is already a conflicting identifier within the same file, + * the fix will be provided with an alternative like "globalThis.document" + */ + globalNames?: string[]; /** * The generator function will be used to determine the value of the replacement, affecting @@ -9,7 +29,7 @@ export interface AccessExpressionGeneratorFixParams extends AccessExpressionBase * * If the return value is undefined, no change will be generated */ - generator: (identifierName: string | undefined) => string | undefined; + generator: (identifierNames: string[]) => string | undefined; } /** @@ -21,24 +41,71 @@ export default class AccessExpressionGeneratorFix extends AccessExpressionBaseFi super(params); } + getNewModuleDependencies() { + if (this.params.moduleName && this.params.moduleImports) { + throw new Error( + "Parameters 'moduleName' and 'moduleImports' are both defined. Only one may be used at a time."); + } else if (this.params.moduleName) { + return super.getNewModuleDependencies(); + } else if (!this.params.moduleImports) { + return; + } + + const usagePosition = this.startPos; + if (usagePosition === undefined) { + throw new Error("Start position is not defined"); + } + return this.params.moduleImports.map((moduleImport) => { + return { + ...moduleImport, + usagePosition, + }; + }); + } + + getNewGlobalAccess() { + if (this.params.globalName && this.params.globalNames) { + throw new Error( + "Parameters 'globalName' and 'globalNames' are both defined. Only one may be used at a time."); + } else if (this.params.globalName) { + return super.getNewGlobalAccess(); + } else if (!this.params.globalNames) { + return; + } + const usagePosition = this.startPos; + if (usagePosition === undefined) { + throw new Error("Start position is not defined"); + } + + return this.params.globalNames.map((globalName) => { + return { + globalName, + usagePosition, + }; + }); + } + generateChanges() { if (this.startPos === undefined || this.endPos === undefined) { throw new Error("Start and end position are not defined"); } - if (this.params.moduleName && !this.moduleIdentifierName) { - // The identifier for the requested module has not been set - // This can happen for example if the position of the autofix is not inside - // a module definition or require block. Therefore the required dependency can not be added - // and the fix can not be applied. - return; + + let moduleNames: string[] | undefined; + if (this.params.moduleName) { + moduleNames = [this.params.moduleName]; + } else if (this.params.moduleImports) { + moduleNames = this.params.moduleImports.map((moduleImport) => moduleImport.moduleName); } - if (this.params.globalName && !this.globalIdentifierName) { - // This should not happen - throw new Error("Global identifier has not been provided"); + + const globalNames = this.params.globalName ? [this.params.globalName] : this.params.globalNames; + + const identifiers = this.getIdentifiersForMultipleRequests(moduleNames, globalNames); + if (!identifiers) { + return; } // If a generator function is provided, use it to generate the change - const value = this.params.generator(this.globalIdentifierName ?? this.moduleIdentifierName); + const value = this.params.generator(identifiers); if (!value) { return; } diff --git a/src/linter/ui5Types/fix/BaseFix.ts b/src/linter/ui5Types/fix/BaseFix.ts index ee0354d5b..7f604295c 100644 --- a/src/linter/ui5Types/fix/BaseFix.ts +++ b/src/linter/ui5Types/fix/BaseFix.ts @@ -1,26 +1,24 @@ import ts from "typescript"; import {PositionInfo} from "../../LinterContext.js"; -import Fix from "./Fix.js"; +import Fix, {GlobalAccessRequest, ModuleDependencyRequest} from "./Fix.js"; export interface BaseFixParams { /** * Name of the module to import for use in the fix */ moduleName?: string; + /** * The preferred identifier to use for the module import. * If not provided, the identifier will be derived from the module name */ preferredIdentifier?: string; - // Not yet implemented: Requesting multiple modules - // modules?: Omit[]; - /** * Name of a global variable to use in the fix (e.g. "document") * * The fix will be provided with the identifier name or property access to use via - * the setIdentifierForDependency method. + * the setIdentifierForGlobal method. * * For example, if there is already a conflicting identifier within the same file, * the fix will be provided with an alternative like "globalThis.document" @@ -73,8 +71,8 @@ export enum FixScope { export default abstract class BaseFix extends Fix { protected startPos: number | undefined; protected endPos: number | undefined; - protected moduleIdentifierName: string | undefined; - protected globalIdentifierName: string | undefined; + protected moduleIdentifierNames: Map | undefined; + protected globalIdentifierNames: Map | undefined; protected sourcePosition: PositionInfo | undefined; protected nodeTypes: ts.SyntaxKind[] = []; @@ -105,15 +103,79 @@ export default abstract class BaseFix extends Fix { }; } - setIdentifierForDependency(identifier: string) { - this.moduleIdentifierName = identifier; + setIdentifierForDependency(identifier: string, moduleName: string) { + this.moduleIdentifierNames ??= new Map(); + this.moduleIdentifierNames.set(moduleName, identifier); + } + + setIdentifierForGlobal(identifier: string, globalName: string) { + this.globalIdentifierNames ??= new Map(); + this.globalIdentifierNames.set(globalName, identifier); + } + + protected getIdentifiersForSingleRequest( + moduleName: string | undefined, globalName: string | undefined + ): string | undefined { + if (moduleName) { + if (!this.moduleIdentifierNames?.has(moduleName)) { + // The identifier for the requested module has not been set + // This can happen for example if the position of the autofix is not inside + // a module definition or require block. Therefore the required dependency can not be added + // and the fix can not be applied. + return; + } + return this.moduleIdentifierNames.get(moduleName)!; + } else if (globalName) { + if (!this.globalIdentifierNames?.has(globalName)) { + // This should not happen, globals can always be provided + throw new Error("Global identifier has not been provided"); + } + return this.globalIdentifierNames.get(globalName)!; + } } - setIdentifierForGlobal(identifier: string) { - this.globalIdentifierName = identifier; + /** + * Helper method for fix classes that feature multiple imports/globals. + * + * Returns undefined if any of the requested identifiers could not be set, indicating that the + * fix must not be applied + */ + protected getIdentifiersForMultipleRequests( + moduleNames: string[] | undefined, globalNames: string[] | undefined + ): string[] | undefined { + const identifiers = []; // Modules first, then globals. Both in the order they have been requested in + if (moduleNames?.length) { + if (!this.moduleIdentifierNames) { + // No modules have been set. Change can not be applied + return; + } + for (const moduleName of moduleNames) { + if (!this.moduleIdentifierNames.has(moduleName)) { + // The identifier for the requested module has not been set + // Change can not be applied + return; + } + identifiers.push(this.moduleIdentifierNames.get(moduleName)!); + } + } + + if (globalNames?.length) { + if (!this.globalIdentifierNames) { + // This should not happen, globals can always be provided + throw new Error("Global identifier has not been provided"); + } + for (const globalName of globalNames) { + if (!this.globalIdentifierNames.has(globalName)) { + // This should not happen, globals can always be provided + throw new Error("Global identifier has not been provided"); + } + identifiers.push(this.globalIdentifierNames.get(globalName)!); + } + } + return identifiers; } - getNewModuleDependencies() { + getNewModuleDependencies(): ModuleDependencyRequest | ModuleDependencyRequest[] | undefined { if (this.startPos === undefined) { throw new Error("Start position is not defined"); } @@ -127,7 +189,7 @@ export default abstract class BaseFix extends Fix { }; } - getNewGlobalAccess() { + getNewGlobalAccess(): GlobalAccessRequest | GlobalAccessRequest[] | undefined { if (this.startPos === undefined) { throw new Error("Start position is not defined"); } diff --git a/src/linter/ui5Types/fix/CallExpressionFix.ts b/src/linter/ui5Types/fix/CallExpressionFix.ts index 0cc3c3832..576092bb5 100644 --- a/src/linter/ui5Types/fix/CallExpressionFix.ts +++ b/src/linter/ui5Types/fix/CallExpressionFix.ts @@ -57,23 +57,13 @@ export default class CallExpressionFix extends CallExpressionBaseFix { if (this.startPos === undefined || this.endPos === undefined) { throw new Error("Start or end position is not defined"); } - if (this.params.moduleName && !this.moduleIdentifierName) { - // The identifier for the requested module has not been set - // This can happen for example if the position of the autofix is not inside - // a module definition or require block. Therefore the required dependency can not be added - // and the fix can not be applied. - return; - } - if (this.params.globalName && !this.globalIdentifierName) { - // This should not happen - throw new Error("Global identifier has not been provided"); - } - let value = this.globalIdentifierName ?? this.moduleIdentifierName; - if (!value) { + const identifier = this.getIdentifiersForSingleRequest(this.params.moduleName, this.params.globalName); + if (!identifier) { return; } + let value = identifier; if (this.params.propertyAccess) { // If a property is defined, we need to access it on the identifier value = `${value}.${this.params.propertyAccess}`; diff --git a/src/linter/ui5Types/fix/CallExpressionGeneratorFix.ts b/src/linter/ui5Types/fix/CallExpressionGeneratorFix.ts index f8bf66456..db98beb3a 100644 --- a/src/linter/ui5Types/fix/CallExpressionGeneratorFix.ts +++ b/src/linter/ui5Types/fix/CallExpressionGeneratorFix.ts @@ -10,14 +10,42 @@ export interface CallExpressionGeneratorFixParams string | undefined; /** @@ -67,24 +95,71 @@ export default class CallExpressionGeneratorFix return true; } + getNewModuleDependencies() { + if (this.params.moduleName && this.params.moduleImports) { + throw new Error( + "Parameters 'moduleName' and 'moduleImports' are both defined. Only one may be used at a time."); + } else if (this.params.moduleName) { + return super.getNewModuleDependencies(); + } else if (!this.params.moduleImports) { + return; + } + + const usagePosition = this.startPos; + if (usagePosition === undefined) { + throw new Error("Start position is not defined"); + } + return this.params.moduleImports.map((moduleImport) => { + return { + ...moduleImport, + usagePosition, + }; + }); + } + + getNewGlobalAccess() { + if (this.params.globalName && this.params.globalNames) { + throw new Error( + "Parameters 'globalName' and 'globalNames' are both defined. Only one may be used at a time."); + } else if (this.params.globalName) { + return super.getNewGlobalAccess(); + } else if (!this.params.globalNames) { + return; + } + const usagePosition = this.startPos; + if (usagePosition === undefined) { + throw new Error("Start position is not defined"); + } + + return this.params.globalNames.map((globalName) => { + return { + globalName, + usagePosition, + }; + }); + } + generateChanges() { if (this.startPos === undefined || this.endPos === undefined || !this.generatorArgs) { throw new Error("Start, end position or arguments are not defined"); } - if (this.params.moduleName && !this.moduleIdentifierName) { - // The identifier for the requested module has not been set - // This can happen for example if the position of the autofix is not inside - // a module definition or require block. Therefore the required dependency can not be added - // and the fix can not be applied. - return; + + let moduleNames: string[] | undefined; + if (this.params.moduleName) { + moduleNames = [this.params.moduleName]; + } else if (this.params.moduleImports) { + moduleNames = this.params.moduleImports.map((moduleImport) => moduleImport.moduleName); } - if (this.params.globalName && !this.globalIdentifierName) { - // This should not happen - throw new Error("Global identifier has not been provided"); + + const globalNames = this.params.globalName ? [this.params.globalName] : this.params.globalNames; + + const identifiers = this.getIdentifiersForMultipleRequests(moduleNames, globalNames); + if (!identifiers) { + return; } const value = this.params.generator( - this.generatorContext, this.globalIdentifierName ?? this.moduleIdentifierName, ...this.generatorArgs); + this.generatorContext, identifiers, ...this.generatorArgs); if (!value) { return; } diff --git a/src/linter/ui5Types/fix/collections/jqueryFixes.ts b/src/linter/ui5Types/fix/collections/jqueryFixes.ts index 0de3e5985..bf6aed2ee 100644 --- a/src/linter/ui5Types/fix/collections/jqueryFixes.ts +++ b/src/linter/ui5Types/fix/collections/jqueryFixes.ts @@ -174,7 +174,7 @@ t.declareModule("jQuery", [ } return true; }, - generator(ctx, moduleIdentifierName, _, arg2, arg3) { + generator(ctx, [moduleIdentifierName], _, arg2, arg3) { return `${moduleIdentifierName}(${arg2.trim()},${arg3})`; }, })), @@ -207,7 +207,7 @@ t.declareModule("jQuery", [ } return true; }, - generator(ctx, moduleIdentifier, ...args) { + generator(ctx, [moduleIdentifier], ...args) { if (ctx.shortCircuit) { args[0] = `(${args[0]} || "")`; // Short-circuit the first argument to avoid undefined/null } @@ -283,7 +283,7 @@ t.declareModule("jQuery", [ t.namespace("measure", [ // https://github.com/SAP/ui5-linter/issues/555 t.namespace("getRequestTimings", callExpressionGeneratorFix({ globalName: "performance", - generator(ctx, moduleIdentifierName) { + generator(ctx, [moduleIdentifierName]) { return `${moduleIdentifierName}.getEntriesByType("resource")`; }, })), @@ -600,7 +600,7 @@ t.declareModule("jQuery", [ } return true; }, - generator: (ctx, moduleIdentifier, arg1, arg2) => { + generator: (ctx, [moduleIdentifier], arg1, arg2) => { if (ctx.replaceWithNull) { return "null"; } @@ -660,7 +660,7 @@ t.declareModule("jQuery", [ } return true; }, - generator: (ctx, moduleIdentifier, arg1, arg2) => { + generator: (ctx, [moduleIdentifier], arg1, arg2) => { if (ctx.argValue) { // Use the modified value arg1 = ctx.argValue; @@ -677,7 +677,7 @@ t.declareModule("jQuery", [ })), t.namespace("getResourcePath", callExpressionGeneratorFix({ globalName: "sap.ui.require", - generator: (ctx, moduleIdentifier, arg1, arg2) => { + generator: (ctx, [moduleIdentifier], arg1, arg2) => { let res = `${moduleIdentifier}.toUrl(${arg1})`; if (arg2) { res = `${res} +${arg2}`; @@ -730,28 +730,28 @@ t.declareModule("jQuery", [ })), t.namespace("android_phone", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => ( + generator: ([moduleIdentifier]) => ( `${moduleIdentifier}.os.android && ` + `${moduleIdentifier}.system.phone` ), })), t.namespace("android_tablet", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => ( + generator: ([moduleIdentifier]) => ( `${moduleIdentifier}.os.android && ` + `${moduleIdentifier}.system.tablet` ), })), t.namespace("iphone", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => ( + generator: ([moduleIdentifier]) => ( `${moduleIdentifier}.os.ios && ` + `${moduleIdentifier}.system.phone` ), })), t.namespace("ipad", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => ( + generator: ([moduleIdentifier]) => ( `${moduleIdentifier}.os.ios && ` + `${moduleIdentifier}.system.tablet` ), @@ -773,31 +773,31 @@ t.declareModule("jQuery", [ })), t.namespace("Android", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => `${moduleIdentifier}.os.name === "Android"`, + generator: ([moduleIdentifier]) => `${moduleIdentifier}.os.name === "Android"`, })), t.namespace("bb", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => `${moduleIdentifier}.os.name === "bb"`, + generator: ([moduleIdentifier]) => `${moduleIdentifier}.os.name === "bb"`, })), t.namespace("iOS", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => `${moduleIdentifier}.os.name === "iOS"`, + generator: ([moduleIdentifier]) => `${moduleIdentifier}.os.name === "iOS"`, })), t.namespace("winphone", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => `${moduleIdentifier}.os.name === "winphone"`, + generator: ([moduleIdentifier]) => `${moduleIdentifier}.os.name === "winphone"`, })), t.namespace("win", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => `${moduleIdentifier}.os.name === "win"`, + generator: ([moduleIdentifier]) => `${moduleIdentifier}.os.name === "win"`, })), t.namespace("linux", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => `${moduleIdentifier}.os.name === "linux"`, + generator: ([moduleIdentifier]) => `${moduleIdentifier}.os.name === "linux"`, })), t.namespace("mac", accessExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (moduleIdentifier) => `${moduleIdentifier}.os.name === "mac"`, + generator: ([moduleIdentifier]) => `${moduleIdentifier}.os.name === "mac"`, })), ]), ]); @@ -1036,13 +1036,14 @@ class CharToUpperCaseFix extends CallExpressionFix { throw new Error("Start or end position or argument is not defined"); } - if (!this.moduleIdentifierName || (this.argIdentifierName === undefined && this.argStringValue === undefined)) { + if (!this.moduleIdentifierNames?.has("sap/base/strings/capitalize") || + (this.argIdentifierName === undefined && this.argStringValue === undefined)) { // Identifier has not been set. This can happen if the relevant position is not inside a // module definition or require block. Therefore the fix can not be applied. return; } const arg = this.argStringValue ?? this.argIdentifierName; - const value = `${this.moduleIdentifierName}(${arg})`; + const value = `${this.moduleIdentifierNames.get("sap/base/strings/capitalize")!}(${arg})`; return { action: ChangeAction.REPLACE, start: this.startPos, diff --git a/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts b/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts index f31c615be..1f17739bf 100644 --- a/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts +++ b/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts @@ -53,7 +53,7 @@ t.declareModule("sap/ui/core/Core", [ })), t.method("isMobile", callExpressionGeneratorFix({ moduleName: "sap/ui/Device", - generator: (ctx, moduleIdentifier) => { + generator: (ctx, [moduleIdentifier]) => { return `${moduleIdentifier}.browser.mobile`; }, })), @@ -64,19 +64,19 @@ t.declareModule("sap/ui/core/Core", [ t.method("getCurrentFocusedControlId", callExpressionGeneratorFix({ moduleName: "sap/ui/core/Element", // The legacy API used to return null if no control was focused. - generator: (ctx, moduleIdentifier) => { + generator: (ctx, [moduleIdentifier]) => { return `${moduleIdentifier}.getActiveElement()?.getId() || null`; }, })), t.method("byFieldGroupId", callExpressionGeneratorFix({ moduleName: "sap/ui/core/Control", - generator: (ctx, moduleIdentifier, arg1) => { + generator: (ctx, [moduleIdentifier], arg1) => { return `${moduleIdentifier}.getControlsByFieldGroupId(${arg1})`; }, })), t.method("isStaticAreaRef", callExpressionGeneratorFix({ moduleName: "sap/ui/core/StaticArea", - generator: (ctx, moduleIdentifier, arg1) => { + generator: (ctx, [moduleIdentifier], arg1) => { return `${moduleIdentifier}.getDomRef() === ${arg1}`; }, })), @@ -89,7 +89,7 @@ t.declareModule("sap/ui/core/Core", [ } return false; }, - generator: (ctx, moduleIdentifier, arg1) => { + generator: (ctx, [moduleIdentifier], arg1) => { return `${moduleIdentifier}.setTheme(${arg1})`; }, })), From e3ab2c72070c1999783996ddedb1e112b92f1aff Mon Sep 17 00:00:00 2001 From: Merlin Beutlberger Date: Mon, 16 Jun 2025 13:45:15 +0200 Subject: [PATCH 2/4] refactor(autofix): Add migration and test case for multiple module imports --- .../fix/collections/sapUiCoreFixes.ts | 10 ++++++++++ test/fixtures/autofix/Configuration.js | 2 ++ .../autofix/snapshots/autofix.fixtures.ts.md | 4 +++- .../snapshots/autofix.fixtures.ts.snap | Bin 36737 -> 36789 bytes 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts b/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts index 1f17739bf..a8b63e45c 100644 --- a/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts +++ b/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts @@ -18,6 +18,16 @@ t.declareModule("sap/ui/core/Configuration", [ moduleName: "sap/base/i18n/Localization", mustNotUseReturnValue: true, })), + t.method("getLocale", callExpressionGeneratorFix({ + moduleImports: [{ + moduleName: "sap/ui/core/Locale", + }, { + moduleName: "sap/base/i18n/Localization", + }], + generator(ctx, identifierNames) { + return `new ${identifierNames[0]}(${identifierNames[1]}.getLanguageTag())`; + }, + })), ]), ]); t.declareModule("sap/ui/core/Core", [ diff --git a/test/fixtures/autofix/Configuration.js b/test/fixtures/autofix/Configuration.js index 0b4b23544..74ecc9bf1 100644 --- a/test/fixtures/autofix/Configuration.js +++ b/test/fixtures/autofix/Configuration.js @@ -5,4 +5,6 @@ sap.ui.define(["sap/ui/core/Core", "sap/ui/core/Configuration"], function(Core, // setRTL is not chainable and setLanguage can't be applied because // its expression contains a non-side-effect-free call expression Configuration.setRTL(false).setLanguage("en"); + + Configuration.getLocale(); }); \ No newline at end of file diff --git a/test/lib/autofix/snapshots/autofix.fixtures.ts.md b/test/lib/autofix/snapshots/autofix.fixtures.ts.md index b8c9337f4..16d511f28 100644 --- a/test/lib/autofix/snapshots/autofix.fixtures.ts.md +++ b/test/lib/autofix/snapshots/autofix.fixtures.ts.md @@ -8,13 +8,15 @@ Generated by [AVA](https://avajs.dev). > AutofixResult: /Configuration.js - `sap.ui.define(["sap/ui/core/Core", "sap/ui/core/Configuration"], function(Core, Configuration) {␊ + `sap.ui.define(["sap/ui/core/Core", "sap/ui/core/Configuration", "sap/base/i18n/Localization", "sap/ui/core/Locale"], function(Core, Configuration, Localization, Locale) {␊ Configuration.setRTL(false).setLanguage("en");␊ ␊ // Currently not fixable:␊ // setRTL is not chainable and setLanguage can't be applied because␊ // its expression contains a non-side-effect-free call expression␊ Configuration.setRTL(false).setLanguage("en");␊ + ␊ + new Locale(Localization.getLanguageTag());␊ });` > LintResult: Configuration.js diff --git a/test/lib/autofix/snapshots/autofix.fixtures.ts.snap b/test/lib/autofix/snapshots/autofix.fixtures.ts.snap index 9e9f06478c4c35c9bc13e0fea1ee468b12499e2e..b19b2944bd91b40a4ba1f9dd89e49aa1d5fb0633 100644 GIT binary patch literal 36789 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 L`494Re&7QD_t~{c literal 36737 zcmV*EKx@B2RzVjwh8sgJijv^@_lu2C1zp782L>B6UM<5vEJW{MEUIN-65D-COG094Mya_gnN(tGv`31?RjDm zBw32ZW3y6`urf<&Yg0n%thS^g@`^^Y()aqCj!$2zMCDc`dQ@87rN-MLM|UZyuBf_1 zYP43FQBPGrH|wd&N(=rUAGqyxxYT6pI8AG~-o5(V7lS*E@)_qluU3;m!w|4EisM4v# zRO{{C9ZF{;)*fiETe^lsgJh)9j9uee7=hwasSl{)&o;SJ5r$y3_5s2o?J*vQx>9Pq zQ~M#_-4=<38#{X%HL1o9B`L(D#zv{7Bi}`72}_YSNfpV2K`cv6v9Kg3 z+q*=;@)aigZF;`Va!h2{8EH>yReq#HiHRI@vJ#nh#dIvge&Z{WiX85#H$j;$9Sg-{ zsd!WgM&s@E)0ZCCjQQRsl~q*^b!>{MO0rvy?v8XSNe98wE;$By?IN`JLc+rf54 zH7?imYzo&0BH>o@kjqLn6GCTrgN zdKcW`f_J&#BTiPlZkm6>wBrBlGOhSoh817ss_bw>%nh$~!w1}e2Ud6>=5e&wZ}q^N zJaE4UzV3lWFLZk09adA{Zm&P$g~z<`3orcF3m5s|?LPRb)zq)-rR8iLau#!P*=&f$ zTjgk~IUWl~#P`b4)uE7*O69e7yuZt_c7Ez@Y?SthFA#XhQoELy)Ga3?nrkc`i}pxz zo2n$GL^9qQiM2~@@ucAdi=u$0S8=SCXPqlvr4a zg?jw?jH}MZHC?J|@d@g;gk|Kf?v|5MTWo`(wkXN&NJx>EOIkju4ka3urcKNG6>QcW za!Rt$eK8Ij`7HHUN7|(N?5s6YtXh}~suXWd##5=)iNrR!JJK$z@uajoryTWxbc$#s zq*9<_;xvcuo9hrmD;mq#s#cY@(Qcyj+SYN2J{B>ib

4!+4IxtpyUDy77WYOfS3s)oHxr##6mc^&g@xg=OtGriwGI zwsny{)95Hir^;e)pY4LhrP|vE`)qGl4UD}#r3g-139s(E4eoM(!SIw9GsdgG?Sdb; z;29VE&ISK;fyWKQ-5@;XQ{A~4`103Eqg$&LzcBvA?^bu(V1Gx(?f!#|+kK43bh~f! z=x+BKm+M9kX}|p!#bt$d`I5M-6s7eo@xm%ETB6Bd``}6+-06c~ z`QSqp@ExmD-EQCir2<~4fC-f_w-Rowge_IjW%Z2P{qeU~!JSp`$trld3Kmqu3)K+t zJNo0-_+g_T+Wc^hAD;EY`)lAEHO2k$Rj$fE)WF|FvRY`Yg)3`e%`iAT%p&TyiQYU6 zUOx;zHVmE`22+N^PlrS02#aWqO|)(V%o+jbkAU_O@QD#{*+_WLNQ-E#P4uym@a2*4 ztC8Rt1?{6?#%O36Z4n)2Q(>=FxrFi89#5uiJnITWt}#5ih%r2&xH0U0CwugTO*Jmb zF*(|EnPPODT7RssNg8XK+6bX_+VM6i5>{erq%EQ(r9kc=6%d_opqB$$ARvXZ$I-B& zD#=da2r6MVFs=vyR%orWfd;*k5}#x>XvNY@oni85rqlG241f2Xtc`2mAuzLKn$m#Q zU%6+~d}Dk{N%5q#ddH?zP-;;WX^ogI>`2NXH4;)%+Tgxc=~kj*Ku<~a9jcm0Eop4* zip&p+!iD0UjpsJ1@kAul*tDoE6rMl7b@sdk^XDyIxUhA>+^`&KRg~HD=Qk~!(`5Yw z%k0A+i_g+aZ0(u*GD|zRAN8`J7xj`cX@_d4cQv%MA2qbPPc@V^=@_c4-c{DwMJlU$ zsIpG3%CbJquB=*z%9>qTWo4$}Lv=G?bu(%}>L$zcFjP0as+&ng>SoMP-3)5o^kbso zT3c$LCguyl{Oh1Y^<|H2sLS^I7jsn^YXN82*8-ACvsm27Sp&E_9U=P0vbeS;xL{7H zuC3jJy_7sA4^&#odivwidViiJW83=jLoWD?3%=xnZ@EfxU;VEu?Y`1|QX@?F)#i-* z>RNNX+4ra$zT}4gbA#6dl69Tg?uYuM2R`S4pLpN}51j9X;XYXC92dIJ2Zwxc%m;V) z;MYF*NCiCY92fex3ix*gOsa(Wm2iC}Y_5Wo)rD0xzz&vT!Dmj3vpoagU(q6o(q0v_ zj}&+7`{y_rTjay6(bd)uYwA^pE($x;eGgpBqf@gRs-1GzPBGmXF;qJz!1Osguj!K+ zqSGeNe5=W`POOwhV(n|S$bxP0Sc{sB#M-w+RFQ10lE@nmvH!W8aER|=iBIrXYwMUA zsv;7z!C##lvf$5-S;(Yqkh0?!EDMv>#!HgQrCpJvQh%Y4+b-5XvtA?_@7WYfbg2RB zTe4C&NLmtoT~@qF`>C&HTb4nW6<7u>3A^+*u=ftA@%S0w8KBVxn@TkvqkT0VtyWn^=E~nj`sg7N6Wrx)v{8e zfJF3wQ3k0yl8#i`EzB+>?m>>G;%RFsBm%U=zP?N-ja3OP`K6R-Tc2{u(yyf@=~sTx z((3h|vZ$BXxwo-Y^*TJr>NT?$uxSOpesHvFp`&&csA@yG8j35|?s$Bw9P3$~Y|lT9 zpWIfKX?&dvR+rjT!hN2`4;z@aa&8IGX(hd}Kht`#N%NNu)B54Rcfns>@S+Q<-7wY- zXS-pB8|J%Vl^f1?!(KPYZiu?!NNLe4*O<{O!?fQYH>dx9%uN4hdd%pRwoLTOyE4%$ z|C@z=#?6m>lR%l#O0IXvRb?J`1DuTxLhm5WsPyzK$HRv4@TT#wZvtF3!6G`+Ci>0^ z@cs$##R>592{3yi#3sUB6D^{n>}_}=d~qT?GZ9{#2p3F(Gbh9P$rjPk1MIr8?j_Bh zrCQzj*4UsM2O>5|O-9<=m1Ik2D&xWG4DQ*rWup>JD9K>vc^Q3KPCII67MYJt=jE>SjUFT{K38^s$CcrkzGoKQL-4 zicxFNrtnF=wW!Rom%$R(>y4THkaiE4c02I^%y+DrBav7*ek3?lL4B{FDg9XASzhYU z*cB6oSU9*o5>@sjw2e+fQL+PQ!#M3WUDd0lp1pFkOKDMMRSC9qX@Wy_HE?xh^&?s9 zYF2ORYN%p*S21T4shHtIz1_)EQN>&aPSLR?YfyJYIWkl+y{i~&jDN4fmWxhBL~Zn? zZce6&NIyJXu4N@oMDn?aB3}8wIwi1aG2zlA&ca~U#*oOEwZ{>R^?_C}`{nK-^(mTX-v9)9=ty64`hqccT!ESor7SXa^t_RE5iYso;XiUG~ zR$48KWS4l2z92QDQPP8Uv}}V~AkJ#FKA`>7m{X41Uy?4TQ8>Rp)30tUsb4KYmD0WK zy=Ccbm%3n2slDydLGEoA^%X;{^luuRK6tHTA6!Z!FnZ?c&OLLXIMf5)B{@CtOs_2v zHMe`q1frUqSNcXY(wdZ$J?0%7PpRd8p7h3)yD@vpEuPouZ)lEpw#L`QkJdHhgunW$ z^}_8^L_Z&HFgqH5b>|lSB@HGWW`pP{l1k=&_PhL9R+6mcv3C1bX}P2?*VYHl4W)N8 z&r;*z_^es8a*nBK1jA@A#R9g zSAr(pZ8|TPNLlrj$ElfN%^#(0sMp$v9F4aJ%mD4JdS|seE~iWm;5JjKvh_okY>=`g8l<)@kybr;TU-V8 z5(vvLxG5BmEzNhoQ*Kv`@b0Y1!t9a-ic( zj^&fYvFubar?_L;7!Mmtvh6J!UKW*R!;8OL1@-&RuDGh?H|brqIVSyo?R(4WvQ7HB zd?tNemN%j_mh%Q8|{_R2`H!<@$Up0Z51 zn_RG^RGTF}$P@0~LZ=n_=E0d~FD+RY^HjN^nhQ%)%~!2XCgVre8(NT8Gd;h|(afhk zB~P}?IJYh|olon!w$-#gSEVI$UY$8pBzsn!GqIX3Enji6O{<4y&8OU~`Ba-0ujti? zW9vQAljNV2Ws-bi2AqMKBnNv3T{#CFm-k^8e74lH7Cp{qEmpZI#aWBDyWs&he8UZs z4LY0(=TjA@d7;4zo4wHHg$KOQ?Ss3Wr_7)8!Q(!7)(0>7V0#7JQUQ;YbIR-#i#jxA z9+WAwHK1;2%6yVcnVl-;^q4X)DcMZ7kCTR#zNRl$`m46Z*Cgf8VMWc)AMxoNd;KHD z`6Dvt@O8$+O0@BkR6N$Wxn=vdt>R}OV?{Se=G|P|IA35+A)`>7O{2ZXNN#3nnfPw% zhZ&L!PkIV`Us33Gf>31OG^m~&V-sXmf-SAyO+2w&}JW%88^qc90 zIbPWAg~MKW*sF73zt`F6_eCFk#Rt#(z*_;kE8qp=^=eLU*!%D@Su43y`vY>()+lJSwt@ z#XeX95yNr|7@r-{G%CpGx1 z^-pQ=S8Jaj{whbcpQ6YO{%UJc8~oMwA~yJ|^`d3R6@|4&hQY0;tIsyrJ6q$e=6THN zqGzQrwh>9Wyw=9_Nqm;^O#8%o+tf;X6iH=ECB)Yok2EB*pXrFCpX$G|o~JaNjK?}? zSx;51N7f%|KxRKvj;7@Vw%Jbv#_31mI_p`N1$QHvwK}pSx^2~B$k^*EOX`SLZ$?VJ z68q;WapwIpnVeW(<~e%W>>cna?{h1pb;kI- zvLEAfQ~m+^>YM>OIW$0L4bZuJ(Z`RL?0%DjbceE zDXJscxH=)6I_aOr^Pu*BcF=n;*ccaQ73JPEfBAb&kW*lFDXTAB-n+igf@M0o=6z*} zu9@wE&82pMor4@*Gpkp?_4kyG{zTL)E?ot!)op0rVrR|E+)3!#n~3HQpy|n0KG)&W z7SinJe5HfbGRJ!bgtIoKCL z7sn!>Uuuhw4RVVwyvrjma$1>h8l3iCTD)@p3O8E&s?uBgo>*5(37c9|Xx(CecTThK zD0y?CJ_PjMB+6BU4ZT)`{NI(w*;BTmd*aDX&oVILtZ=UmW9HJW>+8U>m_>7K&^ z85J^-uFO%9OY@HmhDT5;JW!Nq8Wl8@N_U$S{l2uSe6%d8a$?ps21r#3drgWWSk83~ zCrv4B{$9KR^m{N#MDzRD_g|W$DWNiJ%0P}I#wQJpBYhu73~p*w<|1WPq`5QF+5a|HBohHOnUV+*7lookTN z!o42Gv|nlIGN|MHA$9DpI?g}E)p357Ixg>vI-VpB=(YV&2b&xEBW2Nr6SMnhfOKJA zU+^pE?jt8fSk*^Gu(_m5IN>8VmmS(k4E=Yw<|RgJ#-qAlMt@6R@Q3uN# z2dCw)=w-{dR($E?l$ktAB%j)UU5+vwEkZq2sL5xVyN!3pL7D6vIHmJUI(_L7&twTa zlTIL>{5+G6&A`x|xz4(?J1Iw^+BbA|%K1l*FXXI_JkT#D*M@vEZ}V|O-!_tzOz66# zWJR;VlGdzumqoK?xnM)7nsvz_Yu1d?QPawM-QcLwf|69pUeSi`G&t){yh|;3IB3P1 z9IcsKkxy%sR7Yb&Z!#G?F(jg8W_xOl_vjz~%h$+0?dY_ybAv_ql8lAMwvYF$dYq)W7pG__T#Bc4=4 zU1BS>rfQNbN|;nqiFhm=iM1OWPfhY+ySI{kAcUM_RF_fupmAHPG2`A6DX>10OsSIA zeW#fu#mZ<*4agZcXrvu&)4b#%eo`76jM?HV6}On$Y9EG4>H zqmfX$9Pu`@WP&?2m5@V9x^SWa))9%z$K! zLbZ#^!U|C5(%q#cnJeKwvjSLmviH$mIkyD7w31#`CJKPcPrBf9F8HzwzUzXYx#0h~ z;BQW}02Nwg;7-$FF3r$kb{lkDJ-@ZC!IV(==FZM z#Sb6$!xMgJsDVG!z{FaMsDFsy^K{^mEXIZ5bUyJA!RH_md^%OkDNgWN0y?9Mpfk<^ zo%y9U+idH3sQC_D^PS>QK^ym^6br#lA}Ih+d!)K7JHAe;FKXeRdd+%55!B9eKy6(~ z&Dz1}9%|-xqNK)>oM>6|4#Ru4q-5_|31|PhAItHjJ?I|9a}KhPB0FtQ@*Q%44Xg_+ zYcjvOx0CsTr`!I#EK~avvm)*qpwlkq^cuZ#u86z5pLW6LUGS6(zE|2=7r!vix;P^< zx!;#L>*5V=c#9hza>KXXaHa=-?tyCOx%+f4GRoNkvv{xo+=`?(KH6(41{-iASXp;-JlxmO02iqPk%)^%#I<3$* zm&+JU6Hg0P>F<H6HM ze0ItJnXZL*UKfS1tY@cqA9cZ(T<}d7{J1m|_Ww*1_MD6fdoW|dij!2{;f7DU;rng~ zc;Gn?40kqRgI<{DgB)LD_~y*++G2X51Fv1rKL1v z!k(lRGi1V+##d2%-0Zz6yCohnPH<_C$J(NikedH^LUK&mKNWDU8pi?_Ay3wi-IH46 zgh5R)M>Arzn0!TQi$|mJBU-$=D3>0|Ey+nmi)c?Il{O`rRKikMEOKd=VmuaYKKp%H zA^uvmDX~;nQfO0$EH*0$gDp#5Y!GPI;8L~S0lJm9CfkI~Ds0wCa>tB&$ED@w^%8sf zi)DB0m9S4~? znM%}xQCt4%JPf1SBkdpk-NlY5ECDhzQRnVFCkIN6jnXbrwOWst)sm#PWV}<#X==uP z2Qx#}ENFJ7**Ul9djPbylg>XEf}GbF_?hoH-dAd&q8c_tEz}DGH!p%GKebTt24Hm6 zi%RdRvrfFr-$#dX`sm%(BV-HGrKXQvEkK`YoE~fb)DDkL|1!>wHGig$j!oZ4pByXY zA0hN}W6fXsv9al&c}|T@KgxG%Z2FmTXl#BqSK|QJGzXu4UaWR-YJ+}8YD4-k)CS|& zQ=>C%&`vXL&<`$cupLa=kmuOZ2IGLyp+jO%yF+4E_Ien|)!wwqo?R9X$B8)=ZlF$w z?JaiYJQdF6zRv}pDD7C-&zr}>{>KI4@OI(aSnh_`8|!c{x%+o4tou_|^s?tgR{T%j zb77bEYQVLqnlaMOC^XWhSul6$mS5hn)%*RNvGqxBeSJD|xUk)wIh8DZXSL>f&%Tp& zmTPr>_pHCVx-NI*u4~A(+5Oek`m1&+Vn!1dBKn)emARncudX&S^;c(G_5E8q7_ha2 zjLUnC96H>djCaMtYn4=_Jr-<dj1Sj*@7B-~-OpZRoxxGqf|MbwBdkxq zv_#g1P{6uMZwZOZ89S=YYzKJ`x|gyg8l<)@kygF>#8pr)hPJ_EQz#x=n(uz6w$(nf zx7=vy+75oPhg|HuZV-!WD{r!ME(*Nlp`fKpbCdbMnnlY8EU zqu#6>m9}(bytB~ak@M=2by_>e!Je`Ak?A#>Zu`URfI&|*r^U!Hk z-98STBds`T#p*26Na=aA3*PR6_dAV}2A88bO8(ZRkCIic$~rg9a>MyxD`m%yt+W`_++phsL*)aeVVRRLis?)iSkCs-GH+#p8*g z8nJiXXXNR+&Hg3bQ=eh&skg=TgB((MJL}1N%hFj-c-eBFQ)*|uyU(5Vuz~5U$K-*^ zcDzV0`)il`>jn>Rv5tGV*bDtj7yRA@FSx+#h7n@Vvm4HH!)!MQKHl|i*y)CYM(3QJ zsV{#GC3QkyzlL;;%k@5!;P>a5snHaVN$|VZV-ozn-eVH{e$^oOt#P?3#fRx+!E3~2 zrFMB-AD+bJ!{V}9yZnn+e|3$^74(U>YL{ZV{tmSA5E)YQQA8dz5YchtbsHQ=*S{n}ZA&#Q%*wXmrclv;S87P^PQ z-NTBr1dEOA!{G5@@a!;nX&CGt4iiSesu32^8k^|FBcN>ryk-Qva|HbNWwA#`!mmeK zL~CuL)uUj=~Euy3BZFnL)I1#=*5q>`rHcx_KlVQPRi|A-uXKA%}szL_a zywMq21E_L`Z0plrcnaJ%vL~hu&|*N1$PDSmAhc)M%)T)GJF$#;l4dQSB zF~CQ{N=y}g_oNiaxGDqUXo7&wm6_j_83-6>CKz1zVMSGvospOlF2Oh%(~lstA)B#m zHluZ6x;J|WXP4>|X;;+dcyfqKxR-TPETF)tZWa`Eix?Hs#~M1Bn1j#m2S!arF>3AE z6s{9(JEWc6QKtcR%HdPY6>VLQu;LReky+U|A9_f;2TZ%IlD(&LKN5+B<41x+71Z|% znp~uUtR8D?1uZXiXfy&Kf;lm$Llre(HjFjM$XZdWdUYs*Jvd;ft_H5IY6of!E;M9p z_PS!Mhf`!%jMbqx)Y}bWMHO=yj2v3U9=wXF>PN+#;;Y#GY_?7@G0RGvh~#ry4YgwX zlGWLHmaMW@S<Vs=5#2nWfQ(}R|Gn0A&YC3P*hF|x)%c@<4jgLkx=BM@OcWw zNcpR?W=#4k1m}uiR z?np>kk}0?zn3?8Z(cW8q++TfsY5FUoimGJJ&(&}eg%8PwbJy5%Yn)UXNl9T%B;*=0Op3%rQO$#=;%%8@d5w1%s$c-26~%munRPJpnM?iI!JktL1b^nV zEu%qI?k~$a=tP%JE?v?(=$^rj_Z*uKAgySZmMg^bE*HGl1s`?6Crb-twGm}9BXijtFckqBLL5_Da@LS>lx|~bNSc| z7U1HxVtuYHm1mn&wllmwYfDcd@~V97PT8auA>&>?Dy4!uuB?SPKD|C;8`TxCjjUj& zV|rW5VjfL#>1V-}WFGAw?3msO1u)V|rHj|={%w9wv%P3!0{nb6*#8|JxT zmm6Yk_>3E_^uPz4O`<0~@O2OT)&o^u*z1K!Vhc-uLwk#@N)4?S4(5P4z8@ydP|fsr zpgcFvKxylhjj{3^>sYxX8E?&OC~ zomdE?a*kw9G^A7Ww0nCc8V$eB+VFR2?yTl`XCfX`Vybr3c79vYlhgkHnz#L@c?9-s zGIPw<1*tykf!3k}qGw8}$w){I2v?WkUCT-qRF0}jEG#y32Q!&AXzI|ZsIn;B65Tb| zDaRshN=j^Tza$lpX`D}j?<^9FsCGwQ_B#^ExEdG1mqC#>DB?2fMWE*Nw39D)cXY6T z?i2tsjo_QhqCw}lU}>oubkQJd&{@Ti(#m+*;ONneJbF~9LJN7{#h(0@P%@HGgKC~l zBc5ZYva@u6h(5>W!>X*#Qg?cnUkPlU?>E^z#nI2da)Hla^o+Zq$paTU*#7-8;GOp7 z4Vj7M@TcT7#k6uyG?jaYoJ>Vx?OIFEyBVx9%tv!Hk%a!lT9{7d_{@{UOUYPEDe$g{tc-{*YJ_z{Wun#`ygCANQ2KKF1FBnH} zo+&nWRlqgIS@3_f?hUIN;LS0`ocIpD2=|)?Vsng~N-0TI-x#BBFVT7!{dT>Y>{1$} z!0rxNtxJiOQzN<4KAG}?;t)3Me#_v2(jXl>-oFh*{b&uY>3dR&g`#@(j!o&!Ls{iN z^#c6+(H>4&Sd77TO7>uD86VQ)>`Zf<)jw)otV524l&~J`vP)k)(74+2O-pOPoHH%` zRBeH2soD`qh7)p9?Pg7IWTiK()9 zQ!tu-yfiJaBc4>{h?+mSh#*PI5!Fn+R!JRJTekRwBcucXSN{G8= zn%$xUQf-N}gB&t%TpbH1!+0tv>kp)9(~7>ukhi|9SO%67Y_h*Q5>Gk3che3z z>@1UhRd4INNq5+*;7EEwKbD=)Ap7EsUq83GRgKuV)pvTq&*UeY4wmJP&jQS z*_KGG>u7<5QSmI3bgLXHkg!t@1$teXix&B-v-;Vj(jG~vN>cBagymZw5Hp%YGA<0N zpguENE&3IaTcdHmF@0b7l6sxp8Zj(O30dt}k~iBm0ZCiO6aeUVjE0vdujYVb2{Ks} ze{Hk=+PvBAQd04*WXSlWPNlI;j)i&}HDI!GTHRO(kpda$P;@1uOQgE2eAYD9=@2;O zl>2SAe434XdfP}A>)`84$l^tFY>xe)8sC$QTHX87Oeyg4Fc{E|Crc`+c(hxeZ3mJ@ zu~UsX2ijed3RvIO)QfjD+TT>@RgJb6&F#gDO8%nK-=dG>q6Kw|f6^xk1}}+6V)cPw zVEXixK_kpybu=pO2rUduFI#!EUHAc!d#C;<4M34{^uDsK<(XGfEeP4^{b^P6i@he; zo7V)3y=Fm4uPIqkioR<|DSN2|@vU+swpLc<7A=hkj7}K`Wi648Y3Fk8Nk*3FbQI~$ zcX45o2fLes>4ll#(avb#`0=Gy_Sv)=S>6&%zap4^L0X&Y16o!MQlPl5YpHr~w$0W* zI@Fa+Dlv73oRm9LCdafkq_ivQo@7LOBBsRp@fkuUp(S3^vnLsKkO(xU^l0mqN0-l; z*0a26+GWedWIT|&xYT4_TymZk8FQhDV^#U*$rvkoYO})WWX6Nt)TDi zhi9_-IT!rK1%DHsL^lXO;&@}7pur6b-NikY)oa|a(FiO$;hMHT<#~ynYDyVTF~b%I0|Wjje&nHL#=x_Sb+~ z!FPwjA04@@eD4|#_Y8+8hQo8iHKlRl zuzG3)d}{>!VFc8Sgo{VQT_fS^Rt_sW5!LTU!e2+i=ur?H1+N|jpC1K(8s$htHEJ|W z7!C7B!_Lw0{?YKu(J*$5BN5fSF|cF|>>mT_7*Rh6sqJ>%hnAr`z+Pw z*zWhte9)EytXsOR2tIXEAy|?#V$iTW(*esz2M^0$xm5-YKr2y`6~K=VB!JnjnSv1Z z!j&{=s7Vf}efDHQt*HNO(BM1A0lv=+E_@|94a*8%v7qvK4&dE35a3zou{PlBQ{%D% zQj9Ncz5^g192`Ij&-}}_-tJ(Vx#l}BEZYaNlWdW>pAb11UqcW%+EhajIa*Dwg{4E3 zJ@TAhAUPOGLm-u43cYeb>W9hWn(GXbb$CAY0P2ScbQ%DZ-h`7KTUNpvi4kr#)e>&D zO;#h_*=h4{e;TtiC(f*4Ov!O(1;fgEA5OM-wm%)~(xS?-@am`@a1)ceBki&pPX<%s zwj9j_JS7Edki0gMN<`(JtOcsBgoq&v>W_`IN@qgtG2@K_>A;$lDks&HINWNZxUHWa z8qD0S4{Qufx2J8&T@K4iZ%@1~=gs-0j2Aa#7gJws!lG zQkxu2DcT+dEhBCBS*%?wt4gh1k*GQ=5|i}Y&&|Bulon=tkUM0v+OEtScI|sh0SH-5tsJ5iML>IT}(D zq919{N)!>_Agj_5xksZ)>rkYq(k_R3q)iSHJ-aenKkKK?$@96}lO0)Iof_YhNGQo>Ii=L+ zV%1@Jm_Mt6ox-N}SUjm{q9wqXn`yxs=})EwRVsg`b7l`nHlop|Gg4w@4}I` zHbq35MSIL*?$S6<&1zT|3)@lA(%5T3yIr^%w8u{MQ22fJYS7=;+j`KX>=jWovlChq zMihOI9zK!gmQDW-cJ{1KPvDkk$RxDzzc~$h7+}+MT}I>+R-$r`5*Dn{o5HzYo%N`G z&g|K<8_buA0B7?xW=-T|)l_<3d5Yd3T^Q)>(Wdru0*CUxV6M{(bn43nNsC7dMpD{e zd&XILgrbU^T$`0q&I{9}(B`_`ax@=g+0RPCEH|^JUgTCXYPqkN>-dU3;<})lK!X&O&0AX|(WsIPNNH7$DMz-q zULq}*jD`_PDzd87>-kO3Nz`OZm2JT3Y37!YW}Yq0F>{|!yQ1z$e@cCQw>a=*y0mk=8tU7>wz=eZU@GeC8YUm7c4F{r1@ZBxS zt%U#WM=bL>Z*#*t-S8oU_W4maJmrS(x#1UX_^liM;Rd&$GVs7e51i|Ppa&L5F>ua13&e^ue0f;3&cuGFL}V{g%JkH z^m$&G?S-XYSnq|MUO4E5b}xuXWpS|X4PJPo7w+=H2fgs17e42OuXy2UFZ|pKzwyG~ zy_!RpS|3a>h!5|F7>mE z&#eMM)+>%FuF@KsxV%wZj?^wcBQ8g2mwynKqqWOGHHh;-Yh129;&QBZd4sqdr(J$p zT#nZ+e=ja4XqV!cU)MzKa<{mgq+MPwE+=c3pAwf-w9DU#%QLh~sRqPSbB)W@A}-I; zF0T`pXKP=2wszx_HEEFlT4RFTSZjiONv#R;`)W;)e_m^XJY|>(^4?)4$gdw}g8bEC zCdie;O_0|NH$gr=+ywdI;U>s`8E%3c9ASbS8DWC_-Vr9qKO13!Jb7dWXbU#SX`2QIT?r{(p2dl=xL2H<`Js7`sJd7R>P2*w5c!*lV ztL?$~XH0;=1XwcxE}j6FTf?gD!T1dmp=l!Qnh1%B@LFp)wLKU=I0@!Wg58rKISFo^ zhFuw1aDR9FS_`nqS(iC`Riqk>TzK70$&zu4Odj|aL z3>bf=Q{2Aqf6s(x&II>aAe{xv&T@*^_j%6-|Jg9(Y}j}ia_03QfA#pC<-o(l)hh0D){x19?Q zo$C~b?>jsdE}aUmp9&wF3QtWf9)Dlu@*O!3j-LnbI1fI39(?~ii^w>e$UW2Gf2P6L zronHfL1mpqWV}t}!8-U<9sH;c{#gfO>n$P^Y$89Xho9ENi}i5EbXYXqA~Mk?^0(>m z@98jQ1}vTdduCWfCfOUzOz_Wy88czyObE}kh)lML%xHkw4X~pDVhwOpgGFSDO=Qz7 z*ggy5v*4Cl@WELYkuz)}(I6y)@P;7V8-%Y0Eh1;yMBdv7A8LfJG{WH~FmVpdn`03<+a~hoIq=UpFtG_1G{LSWi-=?snJ^d5oD0k6!i96;$Xtua zIrcqO^I+dRI5H1zp9lBNvxo$2BCnngH_nF-&W9)F!?W`(BInxnt-N;ud}skYxd48- z0Ol-&_(HgQp+)pOo9O2j!s83!*@f`ZLfEnhZdwGNT4WKOW)uCBSb&I-BU<7Q??6!=xoJe+gW(1Rh-ie_Ub_t+$DeTngit!n~!hV=262Dg1aT z)GV`zPPd89Tn2NN!S-cvco{sr4F0|hrY*OK&ajEDUk+QA!zIh%y5;bbZ?1&8RiLbb+gDjcXW2wQ zz6w6Q3Vyf>{3kTM1%HvT@6294KJ>S$!kDa1MgV_-&tc3ZM2F0WevQr z1|~Ga+-A6<89vhtziqaN&bEoxu7%NSVfI?svKH=G3s0{F-#Uxv9GmEQ>tN0tMvLe?n`mMqbZ>+=ZG?L_f^QQvZ-Ue&i|Blt=o>e|TQ|WcHoR>kUAgUbG}7%p-uF$^Wn?q!>`T<&lcFa1#aE~pWb2- zU1Sse@fP^S7I!f87fI+6oi5!Mts7n_*X)Fi zJE3hST(c9txf6!(f)%?gqRVZf7wv-ZF1ThF+_ejSy9;Ktzy&Q9(G@n)%Ua;77PzYg zKGg!lcEkC*;n;4A=t`UDox9;(yWw-Y;m5mS#vbU{18>=55nW{yeRvOib`SjT9{A@T z*svF_-3uSzYY|;-6McFw{CF?CuouSdgYZ6h_dfXcK8xrYo9LhS!9VxG`2EndAFkUE zU)&EQT?JGdP1lA52=4Aqad$0H+}&LZ#fuk`Qrw{wFBB;5?hVD=-GaMofzm(U`=66@ z&(7Uzvpc()nfuIa=(;=Jhvv4-rxuz5(%j0Anq42I`&>|Lq~#sX2AT=z#Sbegvt=jP z0H1r6VZh!tBXZP$#l2DVxOwE|*wmKw8VV#Ufc?gZA!cG$DsEzXdrxogR^!Fno}KMj zkbBKGDoCQ53q<{g9xxgsQ+L(3MQZi1&Qkr3F!lp0yA(kz%(j0bW)cXD)nuM4LDgXz z0Ai6lEUZ(@Wr*4e^&mDpa2QMySp(vIe|gM0!>V2`H58v6s(qF0&9+Y>=vE-Ys?j~elt+#1~0C^@q^E@jQ7&5 zpi|Xww7^vt5TbD}#Yw^U)7^nWV6luKd7A}9QuOw`GKQ`NirDsy0&Gid?=U$8FNuRH zJ67~Cg$BpJ{oOu3Rs5RZ@{Ql#aDYu>c&J?kTuf6ZULr2=H)Fx8`~Tc_4cKUn5E}jVDKmFwfs8d(ke)k)o9{Ex3*xXFTFcISYlG>|vd3Xb4WX=J)JM@|JX5Zu0==$zKwKt zR!okK8eknU++4q*&@yS;Z-1U>ktpc_s#6>7L$Iiq_8@Z9hnF%VKtq3+0#4^J&@Tuk zNB!6eqP~ObQa^qNg=|4K17S4O9zoU_B+P+ZX52_!wM!T-UA5~NB>r!&WPf7}c6#KJ zSX_j+1Z`1suU&*Ic3u{dbnk@c1#T@`JXVlcTz}pK?F7^Qv4Uf+jNT+y1&?DGK3j$1 z_&&k%aaKMh-S&9WtXHP2^#WY-Wnsq7Tg_x_m`%tpP~sB5LZvVO%g4qRU|97x=Q{ zO7O7?sVSPH;qN$=3`?{MwyhVHB~vsnCV6)Fq>-5}T8rL($fJbIb6!=`zZSh>=a{^5 z0p}RYN;o;t%M|F}VoNQ4O!yyR*JoD03awDf+FqV#R`)DjDPj%rZc^5L*?SK^EB!xS z;bsx5+g-Lmf6KFa);7yuxWX?u@vI#vV*Ta<*A$-55a`#OgOh*dyv{L>^H~D@B#Ut3 zUMc7t^GnZVhVYjboCss`!-EhUgS+VENyT`&vMw^t|HsPpap5fUv)>=evuk=!vZ+5g z{d;XIdnEmPdS}-(+t(6jUJ?0L-;2$u@zXzwUDUT$E^^Tjq|Y{u{)!zXTiNsJ8IaKJ zka)vI(KxyoJ!%YB?X%bFc*$;coqO*9@huF|YuEmwkQu*St?f|wxb>z%JC5puP|R83 zxPs@bQ-ijI)QT%%94|%x46j4sA+@bg%=17-{C11&m;#+s_H4XOi-UU}eX;K%V z7~Y*Rg}M(p%WvE$9fe}J6Zk3mRsYAb>s)@*K9C*1y>SKiGVb4?t(I*igdXr2t}NB# zO1PP4B@{DFFs@Mdu>h`|;Up9@$eb0w-5>2xXe2T0N_foJpdIX*vi#hNrI3-=9kftdsmk8?gtM4LypG{~_WsSAJI}KYTjxI}H%}AFQo_ML z2yWI=l&U%x`yv|-Vv5W&{!hkl0_-;qo}2{dje|o?|6}E4pe2rd$s79u@6@CH=lwyL z0v3dI`G7(yj^SWhmJPT4D;GKRJ91$dk2tDn<$tx@iifXe*cbd=tq>(BhVPe{i?rQ}P$cScPiZ6y!XAfEv#&PfwsusbISBSFFpI1qE&ji2PVX(K*82Z?<~jJ)@f~(f{l`Zy{eUBVW!UU*;k6 zOpjc{?@P#gx?mT&7iYRSBP9N+(+RjGfe!xIt;+t|zL8_N!0WTk-Al$Xq9;ed7S1_0Ln}+W97yxnRC&xwgDoqpo#`6(*jKV5_N$e&JwjC(aTikyKig-(MSmKaWM=}`vcA$uCxfsFnI79K@ zMDce8zKp5Nx$d0bclk1OS~INu!s~9s3vpp`YWDPf-e^KQUq;e&{d^z<86By1-8sHr zuOr*2Bcoo%l-|JnR~xe=(*Eg}D9x*nRNM+6-V_$ho?RcGy~>jDHM9wtt>t%ssdZD@ zyXAr5v*&q($8`hJW-JG{Ff4<6I|`B(%@yp~=H90>+zo8Q4}ROQd-XL$$1^aII1Gj@ z@}9}0+0*^m#P>HOcdCKld=Wmu5ynd;vcq}Akeh!+8q=~y&R^v)x<4!(TjA+7hUbu-AXsSSf8sS~kc(4@^cloD zXlu%%)tg(w-d?$x!1130_lq-k+!BcYp=bKjQ1UgOvZ6JY)lKh^)po(tb z?!rwlLv67{eK1F*{6Ykx^PNf-d0q&+EDrPd_xADWZALKaJ4uswob$q^gwy)I>wW@L~^{vk(0kE(=j#_yM-u5LGS+ju}9@ zwU54infYl_71pl`i|egDK zn%-xqJwk1yff&+2YG@!Ug|(-p?|f?1Z(-U_lIVt1;Vm@b2MNF1B&TL<@zxy))bC_8 zan`1RIJe*nKBsO>opfXQhgJDaf3nUyzQ;cM%iK{|oUKO>Z|hOUyIZjOt=u4N!}jvd z_VQoC+u6OOR?3Zlws*Ji!DnH5Z#q|`rA0OOs;db0B6VaUO-q!86Tzn^k(Wo2P7lff zbHvDMuy_r)q`EeWx^WfX5SmvF#xwjq#=a$J_&cJ4)-&zhZIb$Ja|LYNuqVv0N4Vzm zuwn0O#a2WGX93Cb;9|vAp<%CKO~gS>gy^Eo3wi4^dF)|@Ye8NI3iU6P?_DSsfqw$m zE4JoqB0v@&@Vb_mpK=X*aV)X^;VN4KNq(W62Vw>P6(rV%HnE%W@q=dI* zTz3yWd2_VTIzp@)xJy{(8pZz<#bX`S+pRH*?f%Cfg(W`*pLNulUw9#23~Fs?6TgP( zR~%@v+&`WGl28upow@I z-j2vxWMITbA2BF9kQD`hjj3 zvS~P$1v}AdDZ_KvhI~auuFwq4zB(@e%k6b#{&kiz(YT59%{lOw+y zN<;VBGqU1#wX-p?6=L{$wJR+@iXBf==hgZ!Xqa^ zfE4!?S~Np;VUTlK_frglOLU^iEGi>FTM~d~uiZ{0F0Esd+Skj+KD|UwD}s0ZD?sM4 zNyp|AcX>CQ?xt0W+StJx^%0fab@u^7J-juauNwb6u;q4?>v=n4l&y0uzM@nIc z&I0dsu=i+E;i^;rsZM-^?wbQ4@p$m@4%LpakkmjGL6jEn>co*+m_AvK0olkg;h`n2eyz&JfYi4Al=7%ub1WouLBGSM#hlWX-8OwVUC}`Z zm+WYs1MLnhr2W|2a^5q*Jn1VIb`%Wumzkbg^5`#FmP8AfnWIVFWlE{_q$pZo(xK&G zMJyW&X|Z|zM#f@;pTAS<`LH0Xt|(EC!=YNaw89W=i}p>B*#NUZOf=Vxm)3&h@8|6>(st{!4k5vjj9`W=E`PAOsV|Y)b)0TZ6z%cK@>G9EN2(RD~}P;D^Eajrn|dQ z{duL^BH)bs%;jc=;mjqw`RH!N($TlcWL(9BY?zedu{XGhKW{mAa*coUPsoQitHwOu z^Tx^zeWU}QEW|fy!dDK)RZt0};+{KwL!{8_@ehe)b+okl(|AwlX9$ahivxdcu6>J0 zq!72HMiw=l6Y^+SAa)^~#0^Rua|m3TSeJckgobL(`*i{1JKnbEjrY%tf@{?;wL>jv zF(WvIEuP|r=pE?4RT6Pc>1yH>`i%nJbb2MvFQII7ge+1*k*&Y&8mO!f_e1Z4%yMw6H9y1=ylb`~%_t3ZT)#H@=7E?Z`FDeb` zX=&#?WlvPrHA>lP{3TmCO#A&tVp6)Q9j0ND{75{$y_}P40M|-2nHHkjCZBOGN zqhKQ;jc0vc{Kn=FPfLYo^zKFL=JmNaAN|tDN0w4fi#)oJVT|+-#;DOlpX53NQmfcF zn##~Oxs*DTj*m>TBJg&XOIiQSltFf5qtp9;W*q9;*H@+9)8$$aoS28uXEZ@7$|KsD z?RR{ZtxJ_XhgTZ6bv&Y6@K5q4a!&Rlca;3nNOhwsw1iIn7hFuugdu-iMLaeIu>~g* z#)u5#)DP@0efvrIMyq=7YX_@Pr_*#IecF~dA`4|@J_a4J4-;RrDWBfx;o%f=rr@S@ zM1B+Tl@vqWZhifIT9%6G^5v%vk1GL`NQh|v?z0}L_PpDy(TNIu-wtzcEjQyEHoPIv zIU80&eB1L~+^*yc`qiKNSAnI^%dR121}j<*HjoKxKCQ)ZEk_TzdzBkT&JM{b2{(RE z{rh{FrVd5L47@2yr{Ntjf`g`#{?=fD>x|)rn59h2(XqDsu`j#l$%D$&!tJfYqMj+8 zX@b{F!#f3rT;JtVPva!sU$+9j#R@u%5>+P;YEifR_PQdq@0t^Ae^c*GE+#1)!|~9r zK&={JhBMmF*7+x4afpFs6~W3CoA*Y_GytQt`!d zQ3J9-?*I5*TyW?`v8oqCVzva=!k&&x+^8o*Vx|Pw>fU~@aR;yPb=2?j@}MSl`n6XkLw5CiJeS+)8tFmppnaF7@b#OKod^pq zxpdFb|3!BYClr|w*=8$z{W!c+ZoxIkx8LE*keDOEb-q_%nB;Zkwp*7vSk+}_a2Q?T z$B>vIaelQ|F#FSdkRqUQ*Rz4UL|^{6tMfm1&t7FhD^y*{imKEkuOgb*41{g1!q-N_ zJIyqPnLu{gd`F*T8*g#$^m1AE<#-8$dcpj6LX~4q=t%PK==yvjcQxqx9?*HC-`kvw z>0MLj(kmMi;}=C0D~+GG6ql4a37goJ3&T5mnZj@MmQ92HjUYD#X9U(8`im;4C|q4p z6%0+%t#QSoA?l+?p>Hw`J`xuk$)4k|cCuK@GIPzpzxgP7ng=u7Dl#OE<+Dlj`E)QmnsNYiu<#LX^znY*~qUWjC__n?ZQG`}lZ~SkYo{ zeCOPjE3Cjb+;ew2W%6v0vJuMQwK=rInAnlrM)`s9f-!;X{b{wxzLxp+463VafEjq~ z=iqz|Z-RtHJymB5O@HUEr@jD*`rKUhcZS685?l)V^~fL0+$aOac0Dh6NgUc0x%iib zMi!RNX!pDMM4O3O&FU&84LExBIZj3YSjGHo$}~$du=iH9Aw@379KsW1j$~6Vb0)k_ z!*C`WXDpYfqT}UIm@`&10x?8<(cqnv?pBW}JuAS+DZA@5X!tf1>&z9L&W00PUKG*y zDB8;8ck+`a zHsGF3);9%~566dlsfkexa-kg|P5v4Z_?XeGTYam!e_H5Kwi)GKi~PbkdN3Ly@Pi&L z3>Q37!yh@&@Kj;WVTR2u$*YbP0{Q^aZ{(`+%E@m1nwl{`NBc1$+R8+HC?%w4YU8og z4D$*0?E*tTw4V?Ho#;!;YFpXDUv6Pg8ph^VzAw(E2UL8z8v+VigoRaej5$nE#$1(aevk49;GsxH+RAycW6@`~67Wbh0Yfclt1 zWfG!82Behfg*}I9zV?R9c%tga8W{$J8jPT?~x`o0MqcpOg z(w6@lxz2an2%>oEtSFLBne+o;Ud4+wNjs45M113eHgx1n6AmfK1vYWbl}a+V+{DOC z)P;XPMUdVSe-3qXQ4Cr@#XvQel^Km1O{*cchRAu#FHp|7hHM z>w5-g@%_!63G51131hM+xW7K4C`{LM4z}1>Tk4dUE$<92APNZZF1)&SCXY@RZUS*@ zvUM%?XO}mpYwB5YyH{6QSX6wsu&7D0*eLzncUmxeaX>&Y>85-Z?KczPs5r~VhXddK zdWiicrJ(O!zojYv@?PUd?sXWsYxz7E3-903>)b|o9$gLN64|C8KjwQpSIO*xbAz|H zKJYKtS35ceG0kL)ZvNe=q4|Vfq5FP-Uc2&aU_-wOD?Xkr6=G&1mN$nALpDS$dE9uI zj@!gRhz3w1h^8Uu)w0m{s33LMtRqLS;xEI``dc`qdf@a?R8U2wbqiBOP(!^~DcZkD)ohwsnnQlUrnqLYvr#C+ z-<7{VzaB56v%L!Bc<-)avGlEHyySJb&A)4|aDN*~CowBlQ(m&XD^W($hKuXwwzTaj zk>TYQowrKpXa{?9$aF~wfgFGOZa$CLP*2_>%9*+Kvxy8JbDc4ZVjrqAzT1b1R40OU zn=!vK*?sHtufKUhvT8GW%+2x8%W zN0>JDE;u++E$%Zi(t1b+u`d57Rb2+csdyCL!}%wn`T~Q%v2VYA>-fc0TAY|qG-B&l zG~#O*xW&&XY!Dc05 z`@5fCJHJAG(tF18Pk|(7Z=Dsbj^8$Ic;n^{I1~n=1~Y8BGjTjH=aN$6NX853?Judn zufg8EI#$odzM9ub|0#CxGUGk@QFJyv^nQ^UMY;RkK2c@{(^vX+u7mxTZim@o+0giD zLwuJ_6M?Q8)r$lF^O>I}RX(C&UW)XriIKj#-{a|)S7gVB#!V)z-#S2ezza$A$NBPd ze21#RX4uA4ETw9{+3hlwvxj}@_sRq#Md)&}a*750d@kdI%X@WZIoz!I1h$4}3ES(t z#!(&2&59LNx#Y(YOg9sY<%f!EAm*tPECsCB3LpnWcc>S;uQgQGXk~>`oN2an-wR!YT7PYwX3TNW%XFS@|TFHwRD?K z;Y<~kAREhKro61?L`(V`*-CK@U$?JzC?-c-rnTm$%mfua)ljuIbIvl!GaCU$q&^tm zb&Dc4^3k;@OP+C{N^~qoFar@mb&=XdX5P{wMv6!@jdG-F*ads>$zO^)^*-Timvt|- zD5vKFS%LDiY+rOdI{MZ{;SBmkp5#oC-LGHV)y}2rHxkE`)vZ%TGD_(O^>~*k@x!A? zUFnr?;)~74znK2$Y2cCjmz5!+Xb{wRMjGyBb{#)lr6XP=iN$sBBd~7zz69mOv_Eq{ zH_YQGWm5GBU2XayB6VeLc;I`%?%8q%mVCJm&HCn@JyL2!hmG^-%+p+korNknKkrW} z+HqMee8qn&^kzY<^Y5`|0#cpx#8VTA|EdD%L}gd#*D)W8JWXv927SES2MGY^IEOLk zM`AR(=(;n-waqJ|i~fIDPr6=K#JHu$M>QX=`4?81gamDEuA+S9sVMDYnw)jx`sC=i zHD{PoKG1&*SF$r%k&g=w_|r5jvGP+;@`Fj2Y-N_-tC9K>9>ZT5`H#k^UrFfS#t3ye zDXfs_FD`|0-ZWERD`Z~a9V!TAiXQcb5fT&WqbjB;NvtUkQXktZ)D+n*W{p{-vWN_5 z_(9BTNjv=6nfO$+K}=5#7Tw8?UA~N;m4Go(pN@VLB(TBX!!*JqSX_?R9I=OJ)a}n< zKh%#)-?5xvo99p6DXTOLkN%b2uZG@sXT@=IEU_2c1%{Vlu#aUII|QaK>`GyhdpB7boIhAq@m;X3qO;SyNYu?% z+?X#{aJJ1XLe5F^Zg=>IM=%U2Iqbv-_pi*Vu4LQF>vML>CN~StuRjX=0um(k_(yN- zl2@EWrC2aV5sp;gshu(!&!0J^sid+3#~1kY5X4_oEGbRjE_B*|%H|0=C;EhwIVdtD z6CTy4QES_!=ni>X$|x5r*!m`AobSeYX6B;=9%ixFH+-pXG5N;D<^MA}+B$H6>i%Q@ z?qz*QVn;jIihHnDqa}{MJvlK!Z)ELlmKamAq`Efb4GH5n%A-3H3A^Aq_)fl(=RDB_ zi76Yt-q-;G`can%>NZljib>0#Bg+w{IW=zT!BTh0f7H`PGYh1*PQKFj6i0naU=ftO z{x&ys6{YUej(`!KwP(T0j3P+5nNeQ9H9Pn9c45 zWc4pBOw&hvL2RZ_BA^S9FZGe{2Qz*d`uy!JlbqKuQm!>Y6Aig_U9)oU8_YjC42Pvy zS@?J#27?QK=xE!HJLK^I7= zocY#^t&)_}+%`@gMUQ533eUC|HL5Zz|Ej)L&W0TSn`Z_c?P8cRoMH?Ia%7?vDjpL> z8yLv0GwoqC< z9HV$AC8FqUpF9(_2F~>787s!0tobTkHd&a{2m9x5(`0`%))6r@`@S|U^p%uxS(ct{ z6o-(A_9^S8{RVp9Rf*WvxE3B+OJ3Arc0XbB{91n8_N~iyQs@`k_6e$Br>>tWcxR;c zcbzP6`t;sJ3aXlbgP*8&TNT%Lx`Cg#d-wfTdHP8~M>mdM=O;X+dq5G8D#eq#?v&;` z0gZu_9`gF!IvwwqHkL8zy%;!^1uQAWlol&w5?mbPH=*%mZsRm>R#y0mhD*KGDWiX* zo1P*8$1Yt@XRv;p+Y>lSOnLRtFe7t{9&AkZLzi@$-mpnXKe8_tVYiXB3L`uc+W0U~ zB1GV=ByaGu8iK7K=j$XXb@q6)JIlztkwv{+-T~2|k)zOZ-rj=jClM~m#Z_+e#-AI9+sTjTSZ~vF5f^cqHpo465ro3Ci zppA{Zxpjg~Cl~W*Ir6jyO^Te@j`P#8N)sW$N{)irlaHIyp@EVg!Po7``qT2+2ZnYv zm8GYJLSyb{TnE*Uy7ijA&ZU2<5yxAL@Xg<8ix>Pb5!3#pQK=p_sX{h4Ru{kT()@u~ z>r?cV=IG~Qi}O_a6cr4`e^pV(0KOTmcLyU*iIjNkCjsgijL5q~{U1}GPne$zlFwCY z@b+G^?20l6lw~r8vLOyA>%j zUtMLcXz>?dysqvsa@MaB}juNCr~vK3)ZoCuncOaWpsGo=Gsxiqy7NlKr#73aPS=uI!tS?`(K!HORj{keWZa<(RX zBI`)lc5T3iw>Sz-P8vCUSMypl{#-dYugCKRhshsbc>aalrf%d zO0h*xh}-tb&_PO8#iqVw7i;y1xlZVId--NCh5oP4fgWw1$W1xy*ML$)4|>Buz(IcG z4rO{$g7mAu2N&)t1`(w&KO)-+u$Bz!hLDGNsf%DMYDHhdqE|i+Yo(W?6!&%AM!#ke zapMIsp06jM4XtcPI$iMjd6_pFW$pRP&%5tw*xOKQHm#dxI$2%Z`zq5V=a7n!gc5^1Qh}|5h!Wcf_u}A1 zN+<~xRG1Rlferfvx-*eN8XpJgFIvvn&4`mqvYo;SQrX#-c<#%H` zajI4&_p=Jt=Tw**pj5H}xmbZhUlF_Pq4W08czfu&J+#*z+RX=>=Yv)8!A|UlV;%rb4XZMO)+w|o4ccQQ zAu-6=#2jXgbv6ur1L4+zQ6i}^HTZSO zF~8`yIoQ5?^2wZD7Ui&V?!JY zx%jA4{__MM`QhXwoFKKpJ$u28Tfh(g&3+J=+F>EZ^4UTvgt+Bd2~2UT!Cgr+lVUZ# zx)wt2zrzI%CWXik-6!Cr&pQrfP1A%DHN3-U+H~kZKjHAf`(vrpq=Jld7RoF;OQkokR&u+0<&lifToA2 zL*(&^=u)2O(trra+92~y4aqbr)v>F(8 zX(UDm$U*@Sa|@U~H_+3V_JkQRHx?Ny&@qZ;LAQ_KlVIqM6bwTOg>S%w zDr~vghO(yAe9;DW+Ftb!E7Frda(X7 z%-z(5nHpq+c|cbal&T5Z(1f`wkHKgFx?Mzkm_y`VMBFU5rDZXu^-}}-ssk=$b>9$yro=rZ8X0w(O4A1pnIpivEae@r&SN<8F#4BxmA z$Rda!hy_hSLGda_=JRFtxK_(|W3IJf#?2j;k@^7fr+{QByKTu>y!| zZHV(H0KOA|`$-$x9gZYbN8t1_6#l`RzYUO@F$dZbQ`+Pk#Jgbl<%S$gg1SSbfMo6v zvqhw}HKbE_K=%UDOJ_7B#~QLG0$LIU`G;U%(s+Y$4tSFIIg{4Mp>pHUgKWq{7UY*8 zKkfz~ARpPk68TXF<8qc5mdA;?%Ym`GZU7ssLf8j5jv*f(@Zq)~U;o<&NM~bw9Rsf2 zfQ@fRhmbJ7WaE4t2eBOht8NgjrGTQV08x8Ho)E;TRs^FCghNxP%tW2cdt$&W3BZLI z(1iiX#ULAMBOY3NC$maV+lbm~jd%G-kD}vDm9m0RhSl1Qq%Qb@YaU%0?X=U7Pt`ss$iFI2soUG8)m;{m`!Lg(gCC20MkFAiKAAq%{H)4-@{QepzhfTnPB3f zJ1QtA6%>LE%f*JJQ(^YGLnP_}OC13JAmqy)^n5!eV5aMtl_7w;2C2IP|FKsE_C+7F zXa(?Rj15+$57jh8Tze0To5w5~0Q}j14-2Y*BpL$qOn`Hh*0j1DNi>y+8>YY)Z!Dfy zK>jNLg>N44Cl3RR!;LUthN{+yo8d=Ckw43&Zs383FQQqHONRcVUxCC zI~jq@YOxQ^2W5(lY2!~I`*$){k{)+~u-7|GyLM#!cGM_yq|;7R|9g5^ZY=2#CdO`c zEJTt72;xTB=puc5v_a8vhrApxK|9hBLc5Se^by`8qs&-ATE!7HS$KXC93CT8AKB5u zn+HDtx{R35gy4e$W(Q&xO#?(lQFEw~98e$_VKSCUkg@t^6}+ezXcc{}B~mvVU()h| z*a9+q)1Q|H4AM=kIY0iS8_pzYA7JPiipB|I@dE;T5UElsvJN{U7JjV(0EH386%84y zyZ@FBph^df{Dgi;2Rw7z(~c7>U7%RaqF7C$!0xc14?;Xi#2CBLxV79!odkdoBEU#5 zX3;z#fETlq8f60u7>W(di{VLvx2I7&m=)5aHPWLClE^y;T6ilUv4aVcJwh;pIe;wh z$cBP3b~g*4iv`d~ZRkfbtpGBhu@&UyoDa4$3f8re`GDz^$eR>StdtD+$_`dU+-H-K zv8IjXNNUi_*FoMd1D66!^-yLUAOeFBWKWqG;Nk#8aR<|`4tZt+qw)y(DG1UL2q6h1 z8^U)9KLQHfAqG8x7oWiwcf3hIiH8oh@!e0o1Z?H3VS%s>*K zs4lNQ%ADPS{Uw22eSmde$=aPjtBX5mdNoL+711aV=&^@|saGpQ(~1ZOtHG)$zz=Q+ z%;yM!z6cMeR{6QahZW*rVLt@vHAMI-t|>2u+C2r>9||%jDB$lxJoLdG>D7nfayT0t z>jt=ALkd1)Mj>yMk?ur${HqRK%0|2xm)RVLstN-yHpgV%Va$1AXu*FUF{T1BJf1nB z!tRKzresd($bk!0GJ91rCskk%b`O{VY_SEf<8GV3PVBVvLFVQI*n^_>j}Yu^6eQ|?*>wrvdjLY;A9|rlsD}_b43Csz=sokQsx{!q8oLlGP zVcc>*ApGkDk%n^f>{wW>c0o-a05t2PGWHm^edf>-Kg3yIM5+!j$QMz11(~uX8=}BD zrQ88w?SSlcKrY>2P3zFX4#tEATSXQf+>wvemU~fArPvI zgYfSa;j#e)ZU-UWy@gGK$eh*yf49S+hSW$Que4g%xV6W0u!Kl3w^W}@5a(2$B+|<@ zUH*$TEGH7u9SKQ?zga>vAos>W(Td<0MR2(yxGfO@M*`p@g?{S)6>@KyuPKc#@$lv{ zUJ-&rgZ!Qb_;nDhNNt-BTsZzmdU#omV2jE_eVngOEH4?3Wu) z*ewgf6&fs=1?(=}BO`2*Pa}!=vWEuy$^t3V1Z3wSZTRCq&ZlDfq#~Qtk%(Ax!!|J* z&ydg8FoJ`)wO$B;>#h(DfArEo^o$2W++g&j2g1vW60oNx{}emNR744+xC9cLhax12 z6@28J|43#v!jE~Yg3-7`2K(#??sf!=e@6_t#pH3LsdchsYdmB#8r=T`wSNYi-Xl() z0$)3EN>_1w&KzqEP3u-4fWqgX?<+XLnSIg-9MTA8pTIqCbv86&2ojzMk28p{UpNTe zj*zJa=yyl5Q$d5%9!Chb1jfswG3?)WWMT=B*)!$kh&QHh1<`ZY0hmS-^l~N&n>&C^ z-9U9GffrJfRxQSLp`WOs7*H~91T1cZ#V&-GRSamJg;nip)l#Y@l13k-u^S4z^gUzZX;zB3j_LcqotOnti zKXPd>k-zv8jpD|68Js0+&``LDyb({vm6vt zz(M_HV)PtRa2Qw_rzKa_XR9cWie*;KJ{@tijxe6%P(n&8te_Kzp!}A%K*cAV5!WxP=8q2wU>SzS)_j$)tH zaITV5+#ehwo3TZAp`YWS)eF0kUw^osCzDXwMzPcR z(P3x)SdX;d$e8~Lt)2hgY}+(ge80piu;PMqBD^>@zHQqS$xau_$Je-PbT&LRe*K?7 zBh6kD%c=&Hjl!*(6-oFOJ;cOqtlBl=gL&gXL|7086md96>_EOV*N;BLdwz=oD1OU_KaUYoG#$Kiym9zn${ziO`X3CRZ~V^Jmy z_Aa5yQ#K@ah~A<;u?k@MB_E4I&~Qo1``JUQ@DDSEkVbXmmffU>$M05i3LUTa*twMF zGrwDiT7WBbG2JJJ{vxV`i9yCi+p#;fP@7PdSAU zv+pvmb`q<+FEihtH3}ge-_>NV$t^mj!V9RitwSOezj(xVvV~7uwaK2FynHEkYwn5z z6F*oO!Zb&$cXkoQHJWiGS(rDodIx&L6lLVB%|o$S$x<7Vu3FdSJAWaV9lnYP^65zW zz>)2N(;*!umo{|oAzMDvI(XM!4x(l;C+|R~MnNyNb-wa9x0O_y&)6iIVV>+_u0E2E zii@d{vDK8H3b9ueW+;5ss5r)&-VS({gx7VN1z|77rxt|yo_?z0aU@6EEOMUUL%(SD zX%*m#m9iD~TQWl66QrpmPd3P_l*@XE;Rpzw<+}KUJS2X_lReh9ym?xCCvDm6@^+JL zXgAZ}dEP7J@ue9%-OX%z)i>w09XDr$LI;(~SGqw?<-zmMlsT$7f6GMSz#rO7>gI*N z`r_}UOi|zSwGu3pvPJD|ZM82M-X>5%{D}5T2e_z{+Ou0SD ziAZ`Y@`<{c_>oh*0Gm)=TdbkbDZb@xP&#$BD(AZk>Tm0vUpLkkcCM3Bw7-YPSuQ7g z>eCJJbow4k`jT_E^e#*XI|*}h_YuvW3m|1k9AKLsTv2pv|Ej|6pM0cW5UKSvkZ}F_ zGLewd6`udaGr{$z9qvYIWPJH14Y6Pvq5ITw6kpCe911#`Wjrs-EmUQ(UlV=G%nwVw z3X?RahXJ+VJEkL;xNYw6Azttj>C=w&w71Gf&+ko7S|o?P3WIs4hi|^jbY*`$a${ly zm0a`=Ob_}}t{dSd%=igp2Cw2!P=rcRijUc}D==U`AKs+*CO^n15!x)Q%?|cD(v%%u z_*Ui9qRd3Gd-CE75O+DCq*%+T^$r_5Jw{StA;Z^JaF&l>8L7pU!t(&~)2K%IEzxkO z4sKXkH)dT#My_k1#6Jm+*mXDU59#)TR5U9$)|6U3vXOle91Uy2q#`-0uLKRXR*-s* zH7!))xeQ#~gNQF~;XmleV4jiv`GhpbJEDHXTse_H6_jGyWHauK!okO?NGr`43;7D? z4|&Tc*QZ1N=PKbL-db@3^1nYMxtlbDYt*`;OoofD(InG|wTX(7Qv8EeRQZU!k{PXe zKL33(l3?UQWe)j{o6N#wDXko(;+n~BQ$w0M2eA`x*<++p9ofhcnZ~q_lW@4^k(3z8 z9PVYjdgI89!{1++lPRG_lIZ1d&Fd)9o;f@?cXjB%Ov67^n4KA{#+a8*!QXdyGQ_}4 z^E_PGF|uoG8sNj9nz+8Fy`FK+Gcxwai$OscAb8z6+)H^=dcce$H&)nLG2DxJqiybT z+Df+G#Ef$@TG+j?YwiE%O|_tqLwe$|iLI?iz}Lkri80QD5lq2V5jeE8ckc3k5yf`= zFQT~N1b9TXc_Z^H{I-Ih#NbfL-V8QFTTMLMSr4BpTU+hB(u2VX@ZmI6Q_4Xx5&d&L zEBS`A;#6F*jEo-PZ*4!Nb3)lZ|1^0)C!Z9y08KGqw!Y|i}WpFqHpZ z^r=n%y0=j^8W4K2*p|6PBXLE9fi4m}v9<^z>bV*ZXT;++p>mk^!4F z&t2`Wi9||nI$YunXmSZ~nClA1TJT0f_VHWSD5u4X#1CIE%Y7zBb;NxCFS89y^7h$| zmCjI?PCmxpxVjv=UaQ%*k=McGV+oG)=R#7_l-tN-r#c^Yjy3QhZs7UcuFa+Hny<(n zVRcsw37ul7|I{`qqPB}lJftSPVs{8p-=)gKqAIB&v7etOM#Pv9GKIDf8}kw|3845c zRU{=MM3o*{Rjz(G7!*|D0>|6MCGc55Q&sy8(O#z)$}rkK=$^PEV**o6d7ZhB$WY*hGncg5%b3KqBvB0&=ey z6S~C(kuI6x#YJ@yn&o&z)tO=Std8#zR3X&LL}Qz7d6yItmkDZ*QH~ktqF<+)zOGy^ zV75Mw(KXdlUs|5RV{r0jn3=@lGTRD?uHG!n6h z7Day%a77WYrwDkJJT3-i7XxxJQxuNWqA2IeZYc)tECyaE2EI`Yj4uJ!mH<0S7-*>l z`g95KTnX@v65v-QK!XDqZ~%K9474m=1vs?j6z9l)M@uufe1x_2JZUMjp(O{+OG#-Z zHocd~!6U67%#$0Z4L6hRxk<4XeT1>2j}jBojuNRITb2Q%m2UGck>^VNX$Opwbt8Ge zV5>*o14b%cLpop--^T%uaKJvh!J>!~{;Dxpe8g#kMLAdID*~n#0qsRVqzHJW2>4?W zaE|>5(OL{FDh8xtU|TWp^}eio7|n!cWu%8uHxSteU}3#6#cZA@DP`LnjQoj%AI zom^x!$0olsMy3Xy%(3Z%jM4Qj*9_1fSqqC%g3cuuE~hgma!5S;Y?4^HN;-lNB8Ova%Rd@ZeW zR?bV;1TJCU>^Xa*sc1~-%~j^Fx`ftS7pb{=k8);HT$Q_|{zRwZXF3bLhZytTkj!pQ z{MV>GDc9M}vf-ZH9M5n=ziQi|&uX~R{T%Qj2fWDvZ*#zZa=?4cEXFe3`6UPZmIMCE zM0Bzx;GiYoC`wFsrYG0N8}zkt1;^d5t%r&DO(K?ad@iSq30>~hX=lM}ez3B2G0zUc&h?PMV3mg(MJ7jVD@yyF6X;R0$a0Hp$W zq=JFEEYPJ8U|O#0y$cU{y~p-^ zhq&JRbViow_g$IC%CG2A4tUCDrB_6jhOaY`9O-%gqPD4R{Qj8J%fV4o1dx^Anj)aL z2-sObWYmN*3u(o z?snU$wE-=rlD6C3m$I>aKQi~2`d+i&&nGm0x+S$I-bodII+~UdMW9I`iFn-bONtT~ z6@P8bw8S2tq%4`+%s29GN*j?CHAWV^zK9$P3nA%p(c@k+x7l4qxA`p58eBQ`)@+9L z-kQ6upuP1$0RIi(bPlM?wYR?DP_kJyVF`$=Ky9pfD0W!uLJnJ1K3&$>?^g^aC)Z{_;xAq zyHen|G9Xq4JX;3*nBAFIi$8bT#b3%AC9(25JN?R!T2WM@LLmM2#s%DyDf=7uav2r(^o=dz zy*;BYoEFE+>pF3CGo($5hORcVuTlB-El&@;&SR6V=kvt+Z%H^o$eJq zf?BEYLWI{}>T*&|rwpk@W2CyP1A1#Qw5H^4Z4%8l>YVsAT|t*KBzNbY9xp_+y}v}l z;Q>vdi*FBo2;% zF8ceBEb-6efEl?i@z)LaR{XduJkc-gAEI@BQ9`*q>v~=zd|zVEz3k^4@EZ;oQv`T) zjq+!TfFH7Z?~XyP6|$ zs^gB74t1L&U56T%{3KOBNhr~yCZ8p|xLX3~NX9sE}l%U5p4}G3e!u?BT-F8VwETu>x^LmBaK0$x@dT z3HrkWehT*Yh%tiZNjKeNK6Meao>dI;QWrVjiHVx>K#i%JPWMgbw`u7%3lWlFSn7_^ z`rX$fM(Bx=IVqBOJfhW$per>qF;NH(c+6+9WayDYB57crss>GS{7?|IM5t?PO;qL# z%$3AYa9&J~M;8P=ZYii!YZr4ZiR$IuQn1Foo~EuBGr{QMoPlJLBu%|)XsPNyv^asp z&jotqOo{0ex-`+W8^-zrPt|Plj5w?2H*Ml0@lYsRs-pJ8NL8<=G>M3!3Xy=Q4erS* zOTt>@aJ$&0g|tbXK5`SxL$s}X#h4<=k$T=;?VIeI>?ZRXQc(4@A(0LtK-<2{=?scd zF%lFb0ZCNq`L!wG>q!K1%t%9sP)#T&LX8$k&y%`H=S5-|zi2e$mmXKAj>gnw8c&z? zSUMFnmM+s+x~#{F$Zb+*Oo$CMcXZVA#2q%pl8YoH<4V1DCqj|KVr$}IJ-=}?x%-f~ z`JlCQUuR72Q^c4rEO$yFF*C{Z;7itikyweA7?D+}Yk<^JYC$5RNa{dyj}Yk=gQR3k zlP51bdCJzeClnc;8j{)5sT@#~>+EUea4W8#l#U?!X_pPvoxEKf@L(DphYWY}UNY|F z{Wf_g@4O@8o?Vk2`tO zvo3X$BOqPv210_O@Rg*zj<6|No(gt$YGm_G*$C)_8J%;Lk6)>)Z)_Bz(yBy1U9*{w z3Nax}G%t85qNt(}%#F4BMB3^1TdIB4HIw}l{6bXno4R&io78Eu#d64VU5|OLo3)G6 zC%ZNFlU*`Xmg8!gljOwAxAgs#neTT?v(J17H_J^oQy!j~Z|cO?I@cv%dgwD=ZHGbI zSR*O%jl51HoifGrS%}@ln8h54v*TofIZuxVF)z+3>fjO`zNvE|XV$|%3qQa;j-f5Az4?P!vV8%T~~A-^16bZy&dAZ;w)RX z=yzT*M2n2FS2*A^96-!JeTxHr!~taM^&`7QM=33ee;A978A<&sHK~7fAgO=#%cTC* zIlBH;IahW`G0;^EY}IeW{+8H@Dgl1Tt}?6(l)sk%MGk=1m9KU>fd6m+uvfa`OM!Ds zftFI>l2YK=Qa~vK_Sh?39V`RBpzCM-y$onC2W~9~KF8jawJKfxxE%POa-hTs@J^uL z3B2qC{)g4qvMODbx_~h*V4@3{>jL(>fa5EG*)}(3^D*1V*=bHq&T<^A2+>O3lR67K zb|zdfyQ8*cQ Date: Mon, 16 Jun 2025 13:51:13 +0200 Subject: [PATCH 3/4] refactor(autofix): Add comments to fixes --- src/linter/ui5Types/fix/collections/jqueryFixes.ts | 6 ++++++ src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/src/linter/ui5Types/fix/collections/jqueryFixes.ts b/src/linter/ui5Types/fix/collections/jqueryFixes.ts index bf6aed2ee..3de30e742 100644 --- a/src/linter/ui5Types/fix/collections/jqueryFixes.ts +++ b/src/linter/ui5Types/fix/collections/jqueryFixes.ts @@ -21,14 +21,17 @@ export default t; t.declareModule("jQuery", [ t.namespace("sap", [ + // jQuery.sap.assert => sap.base.assert t.namespace("assert", accessExpressionFix({ // https://github.com/SAP/ui5-linter/issues/520 moduleName: "sap/base/assert", })), t.namespace("log", [ // https://github.com/SAP/ui5-linter/issues/522 + // jQuery.sap.log.Level|LogLevel => Log.Level ...t.namespaces(["Level", "LogLevel"], accessExpressionFix({ moduleName: "sap/base/Log", propertyAccess: "Level", })), + // jQuery.sap.log.debug|warn|info|error|fatal|trace() => Log.debug|warn|info|error|fatal|trace() ...t.namespaces(["debug", "error", "fatal", "info", "trace", "warning"], callExpressionFix({ moduleName: "sap/base/Log", @@ -38,10 +41,12 @@ t.declareModule("jQuery", [ // is only safe if the return value is not used in the code mustNotUseReturnValue: true, })), + // jQuery.sap.log.getLevel => Log.getLevel t.namespace("getLevel", accessExpressionFix({ moduleName: "sap/base/Log", scope: FixScope.FirstChild, })), + // jQuery.sap.log.getLog => Log.getLogEntries t.namespace("getLog", accessExpressionFix({ moduleName: "sap/base/Log", propertyAccess: "getLogEntries", @@ -71,6 +76,7 @@ t.declareModule("jQuery", [ scope: FixScope.FirstChild, })), ]), + // jQuery.sap.resources => ResourceBundle.create t.namespace("resources", accessExpressionFix({ // https://github.com/SAP/ui5-linter/issues/521 moduleName: "sap/base/i18n/ResourceBundle", propertyAccess: "create", diff --git a/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts b/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts index a8b63e45c..ee3cfb1fa 100644 --- a/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts +++ b/src/linter/ui5Types/fix/collections/sapUiCoreFixes.ts @@ -30,8 +30,10 @@ t.declareModule("sap/ui/core/Configuration", [ })), ]), ]); + t.declareModule("sap/ui/core/Core", [ t.class("Core", [ + // Core.attachInit|attachInitEvent => Core.ready ...t.methods(["attachInit", "attachInitEvent"], accessExpressionFix({ scope: FixScope.FullExpression, moduleName: "sap/ui/core/Core", @@ -42,35 +44,42 @@ t.declareModule("sap/ui/core/Core", [ moduleName: "sap/ui/core/Element", propertyAccess: "getElementById", })), + // Core.getEventBus => EventBus.getInstance t.method("getEventBus", accessExpressionFix({ scope: FixScope.FullExpression, moduleName: "sap/ui/core/EventBus", propertyAccess: "getInstance", })), + // Core.getConfiguration() => Configuration t.method("getConfiguration", callExpressionFix({ scope: FixScope.FullExpression, moduleName: "sap/ui/core/Configuration", })), + // Core.getStaticAreaRef => StaticArea.getDomRef t.method("getStaticAreaRef", accessExpressionFix({ scope: FixScope.FullExpression, moduleName: "sap/ui/core/StaticArea", propertyAccess: "getDomRef", })), + // Core.initLibrary => Lib.init t.method("initLibrary", accessExpressionFix({ scope: FixScope.FullExpression, moduleName: "sap/ui/core/Lib", propertyAccess: "init", })), + // Core.isMobile() => Device.browser.mobile t.method("isMobile", callExpressionGeneratorFix({ moduleName: "sap/ui/Device", generator: (ctx, [moduleIdentifier]) => { return `${moduleIdentifier}.browser.mobile`; }, })), + // Core.notifyContentDensityChanged => Theming.notifyContentDensityChanged t.method("notifyContentDensityChanged", accessExpressionFix({ scope: FixScope.FirstChild, moduleName: "sap/ui/core/Theming", })), + // Core.getCurrentFocusedControlId => Element.getActiveElement()?.getId() || null t.method("getCurrentFocusedControlId", callExpressionGeneratorFix({ moduleName: "sap/ui/core/Element", // The legacy API used to return null if no control was focused. From 09541745527e6736b3b650adff0999e0d50968f1 Mon Sep 17 00:00:00 2001 From: Merlin Beutlberger Date: Mon, 16 Jun 2025 14:11:49 +0200 Subject: [PATCH 4/4] refactor(autofix): Use CallExpressionGeneratorFix for jQuery.sap.isStringNFC --- .../ui5Types/fix/collections/jqueryFixes.ts | 74 ++++++------------ test/fixtures/autofix/jQuerySap.js | 5 ++ .../autofix/snapshots/autofix.fixtures.ts.md | 21 ++++- .../snapshots/autofix.fixtures.ts.snap | Bin 36789 -> 36949 bytes 4 files changed, 48 insertions(+), 52 deletions(-) diff --git a/src/linter/ui5Types/fix/collections/jqueryFixes.ts b/src/linter/ui5Types/fix/collections/jqueryFixes.ts index 3de30e742..68eacc134 100644 --- a/src/linter/ui5Types/fix/collections/jqueryFixes.ts +++ b/src/linter/ui5Types/fix/collections/jqueryFixes.ts @@ -136,7 +136,29 @@ t.declareModule("jQuery", [ t.namespace("hyphen", accessExpressionFix({ moduleName: "sap/base/strings/hyphenate", })), - t.namespace("isStringNFC", () => new IsStringNfcFix()), + // jQuery.sap.isStringNFC("foo") => "foo".normalize("NFC") === "foo" + // Note: This API only exists in old UI5 releases + t.namespace("isStringNFC", callExpressionGeneratorFix({ + validateArguments(ctx, checker, ...args) { + if (!args.length) { + return false; + } + // Ensure that the first argument is a string literal + const firstArg = args[0]; + if (ts.isStringLiteralLike(firstArg)) { + return true; + } else if (ts.isIdentifier(firstArg)) { + const argType = checker.getTypeAtLocation(firstArg); + if (argType.isStringLiteral()) { + return true; + } + } + return false; + }, + generator(ctx, identifierNames, ...args) { + return `${args[0]}.normalize("NFC") === ${args[0]}`; + }, + })), t.namespace("arraySymbolDiff", accessExpressionFix({ // https://github.com/SAP/ui5-linter/issues/528 moduleName: "sap/base/util/array/diff", })), @@ -886,56 +908,6 @@ function validatePadLeftRightArguments( return true; }; -/** - * Fix for jQuery.sap.isStringNFC - * Source: jQuery.sap.isStringNFC("foo") - * Target: "foo".normalize("NFC") === "foo" - */ -class IsStringNfcFix extends CallExpressionFix { - private arg?: string; - - constructor() { - super({ - scope: FixScope.FullExpression, - }); - } - - // visitLinterNode(node: ts.Node, sourcePosition: PositionInfo, checker: ts.TypeChecker) { - // // TODO: Check whether argument is identifier or string literal - // // In case of identifier, we need to check whether it's type is a string literal - // } - - visitAutofixNode(node: ts.Node, position: number, sourceFile: ts.SourceFile) { - if (!super.visitAutofixNode(node, position, sourceFile)) { - return false; - } - if (!ts.isCallExpression(node) || !node.arguments.length) { - return false; - } - - if (!ts.isStringLiteralLike(node.arguments[0])) { - return false; - } - - this.arg = node.arguments[0].text; - return true; - } - - generateChanges() { - if (this.startPos === undefined || this.endPos === undefined || this.arg === undefined) { - throw new Error("Start or end position or argument is not defined"); - } - - const value = `"${this.arg}".normalize("NFC") === "${this.arg}"`; - return { - action: ChangeAction.REPLACE, - start: this.startPos, - end: this.endPos, - value, - }; - } -} - /** * Fix for jQuery.sap.charToUpperCase * Source: jQuery.sap.charToUpperCase("foo") diff --git a/test/fixtures/autofix/jQuerySap.js b/test/fixtures/autofix/jQuerySap.js index 2aaf9c2fd..e952f0ea7 100644 --- a/test/fixtures/autofix/jQuerySap.js +++ b/test/fixtures/autofix/jQuerySap.js @@ -276,4 +276,9 @@ sap.ui.define(["sap/base/strings/NormalizePolyfill"], async function (NormalizeP var parseError = jQuery.sap.getParseError(jQuery.sap.parseXML(errorXML)); var validXML = ""; var xmlDocument = jQuery.sap.serializeXML(jQuery.sap.parseXML(validXML)); + + const str = "test NFC string"; + jQuery.sap.isStringNFC(`test NFC string`); + jQuery.sap.isStringNFC(str); + jQuery.sap.isStringNFC(unknownVar); }); diff --git a/test/lib/autofix/snapshots/autofix.fixtures.ts.md b/test/lib/autofix/snapshots/autofix.fixtures.ts.md index 16d511f28..f7ef4d8b0 100644 --- a/test/lib/autofix/snapshots/autofix.fixtures.ts.md +++ b/test/lib/autofix/snapshots/autofix.fixtures.ts.md @@ -4179,6 +4179,11 @@ Generated by [AVA](https://avajs.dev). var parseError = XMLHelper.getParseError(XMLHelper.parse(errorXML));␊ var validXML = "";␊ var xmlDocument = XMLHelper.serialize(XMLHelper.parse(validXML));␊ + ␊ + const str = "test NFC string";␊ + \`test NFC string\`.normalize("NFC") === \`test NFC string\`;␊ + str.normalize("NFC") === str;␊ + jQuery.sap.isStringNFC(unknownVar);␊ });␊ ` @@ -4697,8 +4702,14 @@ Generated by [AVA](https://avajs.dev). line: 265, message: 'Unable to analyze this method call because the type of identifier "isActive" in "jQuery.sap.act.isActive()"" could not be determined', }, + { + category: 1, + column: 2, + line: 293, + message: 'Unable to analyze this method call because the type of identifier "isStringNFC" in "jQuery.sap.isStringNFC(unknownVar)"" could not be determined', + }, ], - errorCount: 52, + errorCount: 53, fatalErrorCount: 0, filePath: 'jQuerySap.js', messages: [ @@ -5118,6 +5129,14 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, + { + column: 2, + line: 293, + message: 'Use of deprecated API \'jQuery.sap.isStringNFC\'', + messageDetails: 'Deprecated test message', + ruleId: 'no-deprecated-api', + severity: 2, + }, ], warningCount: 0, }, diff --git a/test/lib/autofix/snapshots/autofix.fixtures.ts.snap b/test/lib/autofix/snapshots/autofix.fixtures.ts.snap index b19b2944bd91b40a4ba1f9dd89e49aa1d5fb0633..b07e489cace7e9a8cf410fcd8e0214fcaa28f487 100644 GIT binary patch delta 16085 zcmb80Wm8;T)3%wx9fAgTg1fuBySoQ>2{Qx|+}+*X9VQ8`!5s#73vS87b=Ug`-VeL0 zt81UVs`jd`RlECGt@*%(0wAY^t^|dai-nt~y{i|64;Kn7%+FypN_48PF;dzMY#7$3 zQ^DKtx~sEgImB=3!W>q4agChFnxJmjHU7HWejCJ3?HxnjXhu|@B*5~Kj3u8kRVK9? zD{RN(dg0Rc3?Zy7-39V^zMa0qy+(0?Y>m4m<%)w+68}>cQ=@BJj^F0Lqj8!)hzGRC;?G&B*rLh zS7a6Z-LRd`BPbH(j0tfsVcwBgsio!8%T4Fji*a8+y!-Q}QT1iBC(Lbow`2Nr|FD>b zDMW&Uby!-;u)dQZF^;{OgGY{Ps*O8%-S6qor_q(7&XDZ(wvJ-B;pISU(Yary7x;=l z6}6S+uX9YV&JxVQ%!xc36xE=CFzGIt4T{|(=k@W_pCYstHsbS(m8Z!H3geS1K7Q;8 zgqsvYTJysPgnAi4ZPYzMbSWjnskapwDT|74CQ=FyJww>?8*$%@t&FuEMd0X3Z$yqh zMWRNE>L^7FDLPey52=~B36HSD6*l4wx=(=fli!a$JY&9m-Xks~IEx11JOMPwkJPPP zTxJ13U|OTt<6Pvj9|r&agt&Q#Yp&BY4F3?%uWE~4B}|57Klvs#_~nyG%|%~}{E9T? z*<^UQ>pXm2*_LS3;vV>pW$}+Mjzyqn-=1E;nQYHk7sW#}s)uLah3>#AIcmj92>^;Z zDJk$YJG)Xc(h^V=Th;=3>Xn8#S8^wrP$skPW=H&4*b&Eyb_i4WkvehI$k`iGtO7$=F!~i%0O#`LXJ_i z4@ij;L@Pn|0HYy8UuN>rabfwtGLhf^>|c;&iA??$t|^-pp3Vei2p?u+dj(z@Q^n6_ zZ356Icoy4x;)9dCfJzF#jc^U*KGmSMs;B~o_{-}cHgsJS>n^65UAfA@SL zU6SQIQrI%nG5#L}gH`;Raxz&V8;-jBcoz59059ADWT{fnidOkYUgYsI^L0A#sW9UN zF>NJ#lEr43`%%YtlrSunRCrUKas_^&!S?iry>=B zrP7D&)apyq8g`yi4~o$=Ed3(Csa&{_?>6tnC%ffdGO>RH?HP6ild=Ak4fX|bUuTRi zMLlMsO;2!xTy1w8{|)SxL=c<&toh16x;~cWcZTaeQ;juU_|b=sj7P>8z%)SAe2TI( zU{w)eWbw@}#>4C+%NW;R06o`?P^K=>1Sh_fsxBPQ5^vLg*l8y**%jvI556J9D?Euy zB9mc9GWWMSAy=l5J5GEa73(72s)*fIboP4!|50X8gLC7Wdvf$gHoi=F&R-WpDy+7` zb<22TXx$(AIy0_2%=IFY+iq1lM`dEtofd%AXx#+=i<|025OWUGc18}XU=y68RPx;K zcSH^=W2c{^+-!f|%*gf|z;y@IUokcZJ3kCql|_vE{an{zPwtfEyXI%y`Cv+!9g-R7 z1;UBXqN>}$+ic)fk+zNM2&d=9cau;367Aw~z3YBlXI>tRlU+!40mah{?I8BTiO;8E z-N)mU^D(Z@HeUDZr^@oZclJ8HddJE|YZmcuySP_4`)Ynn_eg zoCW&-Z@mXRP3H-r0G#+VD%MxzA3)hp0q(9ljhX|_Vuf`ux&ud$J*vT7A5%)5ZyQb7 zel>ee;&uTIO$97Osb0As=E(H|2l+qZ@?<(#8cob67RV&l)JH})Su$$gywrj^9T>X_ zavA5c%L3NciM`6soclm;f9R6T^Ul1B99yh!*^d)xW>q^)iX%0o;uHmswRmO~cubDo zD0AWF=&Ut8k_F84a1!UJzGtNrCk{P*nbFtMx~viK%sybw;H&q&ILjbBPc1P}QHi}F zB6?zWv)R|1&paSFwGz(!({Tm*r2J6Vwb(issplWv@uELcU~g)Xa-vs1M9uw zbzyRs&7eNhab?Gh@xj1*lztPfqt#Kk1K?KA-Mhd}Dk)|e2)&0{$$_kJI(;2G zznXAbC~#I^C_89k;lzpWWo$7IjXAYgC5gsMNTSxzNv6vAlH}#0=|NLQN7b^6Wg}x& z%YovBn1wJ*^9__n$a0-mQ8u)DuGwExW3qIPS8sH}wLWvCY?n>tKx{*swoQ#=Zy6|4 zJFGESV{Q;Rq{Wfdlf(V^xdeCRH?>n~7%UCCVpO4A5v-=yxFS!fl1UV$Lv^c*0!hmH zwcrG6OZ1xuB3ov+B1y`N40X08)9ugNmiIHmEj~wnP!1H~TgI)dCfywM1I4gdsWL-w z_H?PT@(3cBx^GpQp{!}gl_{^FV8x;oshF6WR8h{oxD}5Tx*-|Ce0*Y%&G*woF`bZy zYiAnAJ+|UhL2gcQG*i?L`Mgn=-hpb$xDlmW^E`F;!@rhcbso9Hgy0?rn+HyYyp$G* zKPA` zsuCzI^&}j9W(Xn^ZU>spco8&vKX0zgwSAwGvKz8_j*6%`Wl)Ic=9&8QBD|s0{wSC2 z7`g?LQxPL7N!Rh49cu-JtbS!rPEh%Wj z@GaAw)`Y6aHVYb+3CPTtx6Q4RM{)iD@SI9^!Ffxb`goHot?Ly!CG)dHu2l9%QIU<LrkEKU=xfLO^pESL#|xODY^r0BGd7EMT_l)0=-Z zOUU=7WZNVz9iqjZ2ZL6=!iVG`@lU?m_^VhI)7WAeC5>{bg_J$5 zWKt&iTZSzF)Ye^_XE7e(iG$JpDJrk>NFT6ZOETdCV5wz25*_Isg9FG}#aPGqJYh4S#>UNvgORCu4{gX&_Lo`A!t-k{d?!>TFxey>&Tem38y zLy&Vo0!=RCjE-ZPy6*E^pUL2t$*J7ZzeL^jC5wHN_PS>2Ytz?B3)Pc`#}9+^d0v`7 zC{D}13hh*Ne-ljXp2++4Z2}gw4P)YN(j-Mr|uTPWq^SZ6w4uI|pX|r6;W2ujoSxE`S?-NXTarL|FH(brw>% zaAKc48;73ta|e!B5;!P8jMn%f_$PL!;*&v=RJcIT#2?%CvD8Ty_wogt2qBSxt`8iK)5zs#9xVB>MPnMPB4P!nWE zOQ|WyJJ~)YJ_PS6gB*F&=OZFds%+&O<2q;xf_v zd}5|}SrwdYtLMj^)S|cA+f6@Dyj9LT>t65s9ey(I!oAUK1J2dMzw~9dEjQW6Ep1XnKq1rqKIY`bL5ywsHpRiL2rG!jdC=R2Eh*S;V76W&<3n5|LU30PffWnoLg}^fE(UCW^F{p4RLfl{ZAbY^5fZ zCQhJo9>>e`(Uve&;Ba9zeC?Ysz+b>w4}3th%AN;AgQn(5+r%wSlWT0XQeM6#b_0iB zh~$DSMol>aOZ51=8fJSOrsQ2Y1J`>4M?W3vdJ@g;1_us{oQrRrA6*SkAN~qZx~pMPC#Nz^T!p>&X*%O~vi0o5#wZL$Z?@h4$sPAW8nez* zq6YTd9Q3OO;quaTJg7fQ;FYd+-NBF2x^!;ln5uQbJ4lrvO=C5+Z66_UhYbrEelmT;v8QTV$+ZA~Vv4dxY9I%-m zcZp^qFdBH&7HyG@T)pc|4gM$=DCAHSAuUXIV^BRz~M)~ImIA={SAZ6%Qkl=?~Ap*HySNRg&+GuRf%JGG6; zE`zkSnk=(%au>e%?|z>|&rWNx4BH3usLf+xukm;>9>Qv(4Nu3a$)}U^e z|Ha{*ZMi7#lpMP@+1UQ_(>j(8b5?FH=Xt2iwz1pWOVQmu;}XF`dV~b~L_~psG1|SW zU|&5mL6Y-_?XvcHxQxDo%d8uU)b<$?zGHNy^uQ{IL#ubxPm}6J?^+e#DND|(pbU?acmS&LAgStpAHA)6VLrgqqe4{OKFiHOJYU9m5ZDc-e2g3n}eS7 z<#VB09C6Kfb39>=`=t6XjtHUlWN1apMF>$_MQL@H7u$A8HZv6$@rY$nl5N|7%P8~Q zfS>R~;0tXr3)yslYe29$*YS7$U_r%cGXBb?R()1h19^-vy5mY|mxzxku+*m@XALQ` z6c6hN5nmt7?f(YxT-gfe{f@MieMh2FwM9-XNp_a++t_tQD%n%1+M zog$aq=E_;eU{EyIraYVHfI)fW3`^6jYyVp0vqTU2mbkGSbSpwxTkI%|G ztC{9Bm7P3S-B;#l-5bryH&m2W&nKIl>RQQX4%L6QwUOlptORlxWeExWvrhjecuCX{ zGmfyJlQKa~R92eYaxief{WxDEG5K-LrB8LuR)ac+?B4`)#>u{g0Vok&mw(aKgfnd} z@jHXy5-p;(OqCN|8M{_o)!37#9r|Q0o+{&;H>J?n$Jk8yEbEadzhJ4|n!@k0a?+uy z;^;)vDHHPtlcZUE>G9Tdb}~xkOY{8mzvqwq8tEGGE0r1rm59HIUf>`){NxVFC~@VO zx7LrV@?N~wrb{O--2}B+H%TdTnwV85Wjf}c@jKLZwyWs5R$3cV87j`G*=(a*Smqv= z#iumo9A%w6TL}IQ+jZ2AK_sl=2<60Ev-+??M+{r`9ZVEoy=Gn7pE;P@8PRauFR?&1 zA!xq=M7r-tvMc@+?TEQB2q2b=Y@rL*J|ETIM`kt_PKijC@B|I_-K~pD`7L&a$e^Mt zDA%MMX&RWdu>XMb3{1RGXv-tE*Rsr_IXOhYm!0@6gG#Nc49R14>`Kv1ZgG`q2p+>g zw#{ok`f>ZPGR|8Tl6)CTkbV&z{^45H36<_N*;^r5pq>7d_Bw%)RRnd6H@Kto)>J(p*xDuRYmB%BD7EudaMX- zPK9jg0{-QR)qF5h5TWJ{$>P0lXW1+I^rcL_I1FnDlm@@L^;ASd@+@8e8>1gBKx7smJPVNW>JY^0kn*Y!z3Px@Jy^3U5JI00 zdXE|UYa7vH1<|K!07fMst{R|P4fx3e`ASsKjG%76H0&3CZy;;nb)w1uN0#R@<>Gs?m{>fqJZ z3cN5?MzZk%XKmrQNHvY?WaU>;ym-5v?Qp<+uw^ZUm-@9d9fsyL4V|dMU~=Z82xH#Q zfnOMi75N>8687agmCDK*9FPI}3O^#8ex<>=Our*+FnemGvv$sqbZC^fa!^i`1YK}= z)Sa^M9uCaih9(n|ojS-J0mqy1d&VOno*n1)RwbeBP6{>PB=^6H(Q?Pf;bG)uzvj~Z zY`xR3;m(WW6b}p&P&Sqxq@!~w-7%&URUGtJe&xkGL-BjVe0gcnFhM5#!X_7eHd0F4c0m=Isj$ z^vlk7t2k$Epl8f?7mt3`xpiNz3>iz5Wp6vSF=qk6aoqW_fZ|m}`+R!!oFRPf!d#J|2$0%0q zU4t_>(Pl`k{nv}=>eK<;kAbuZ$n{>=uBHmC(s>W}fiNDmNZqut?9qVLUr9=4;h)%% zUImbXn#eNrFmLBQ6Br5hLIa@10np`R@i{MO%`r*ID*V%?7j$?or0F9}CV)BThlHbX z0{H|?upn#&5+DSt;nRRb5bKDV6r^4X45GuzLH3&3qX;J0TjB~4n}EZ>gxzLupqh|y zG)WKxg@yb>fgP3x3t*e8goP@*rz^odYQgb4;{WDH)#r&0CE5A<>VtnZYyhDr0vn)< z`@$j$%;%;fKrzuF+p*#u*!nXg5*VHm!JA00ZP*!{#2KQ*`kdLJBo}o4yjQ0yU=RjY z4y@PIHicXVg;*Z!s|SYq9GtQfa5bBMgnk`Vx&`;zf?Sb-3U>gEKJZAOHo=;JtvUeA z9RPA~z^DiA3B|?h+~Im{LqX=ELl!iP5DLlg0#H!P3`L;ewW))83L5IF)Ms2}U`S`xbZ4Meh+ z%sN6`3pq3jA#Vkew*!aSb|{9siT_YRhoiwwgD?hY%*GQEs%{d0139j)Euni{;BR&? z*;7yo`YsBP0PH6xSfDfHqcfz_nPiWKU@yZ5I^bh&A>^hi#J)Twq3R2z~6cSjJm}vc)tu+*+7UYNer)iNSbsf4 z670RIfLoB4dy$u$ksn{_FgVxXkHv`PbI{k_c&~0(AOzC~APP@otX&fG7XgUKAxwQf zY|sq}#_Zl#8eZ6ETWH%PBsx2U&Gmr7(?9-KqCQAazt=Gnp*-d!Jf%SKQ)A4S`h340kGU`L}GQLcmEsYg#h>yADY4f z`N=|3@(aE)0`@OIy9fqzG^}P$s8<(-3UUE0;Ik^sFJx#O9OAKu#44V7CJ^ltBo(DW zZks~MI6)OpzYs`J1zBLc`j{HZ>@BgH1evAzoe$?jA0n4TVx5WF00sKDir!mg9zFDYbO z2y7q())4};2=R{?66{6fLK=la{Dng9gaFR;h{x^{RNde*6Ueg(xDU0%p8(O|kj#_~ zcwhqexd%z!1a3V58`0qM>qIx9eJ>&ZrKS1sAjE{gGXb4dewY^WM+xTX0~A!H1eRml zrXV&+*iQ#mv%$|Rg%GpC=XIroe%_&6$Yz5b7zanQ!Ct&ozy7s>Fr>p)vmF*3b`+fK zi=WibxO9{F{q=x?*bwoJ0V8^Dzb9Fbc=TZSOaQ`x@K>97keTj~ybZ{Hx4=;+>(RTH z+#SMph7jCD9AS)1QwMhe>Q4&IJN(-Bh4$(q74o77{CBBn{-guZ(F4?*3`&UYe+_oh^vpIzqRrL+VW@C8m8P#5#x`j~t;#PT=oOV3Q>nS5w&610sxo5LClJ z7Po;`@jXN6gj0x6J$#=(i@HB4BA&_b$|V3-9c-EzqWlto%@h&zI_wQ$Sn~XBO5k;U zC%$wiej5PYISm1IkyUg8GC;71v0Vk(E-<3runji|&^lsp{w55Z3*6%7h=dhug%35m z7q#1PEJTS9NWO){+=CpkH6TGtaQmDMHgW};b|60h_fJ3sop zmv(P%_xyfmQ87PjH1L>qmdQcP7#Hkr3-be+0Dy=!1wd9vsXc%0qm`(1RWwFaiou1NP1# z^sa~p8yL6i7{Y!+S8r<}QWwwyBjewhzA(*~FjHNyAo+Dbk3Ztop%D04NWgv_-Xxg5 z;aQc!o!)IS7sAJ|$6Bz{l%=sebcK8M%xHv4xLVb>Y3EA4f zoEL?e7lAp#gkckf>G=nPxL~5bEm80+VSW-Sz7`50#RP8oVO97=gc7kH9b*FK$bo4h za06sO(HE?%@^J7R`9T2#LCcMW`QR@I^j`vvdK-TZVo8MFw4#3%QF2c9ZWHNL`rjXh4tULLSKA zga3YNc;pgav4X@5^B*;!1{_#H4B`PNR*<`Rz*b4Za7f&+z>$yd9f%}>9I-Bd1mt(? z4)u+P<;sKM75gFK+fg8t2gCXW=y!z-t)&N#(TBv*1Kt!cy5`_}&lR8-^dU=maDCS_ zZnIjDgL3d`-cCWc@$d3{plJ}wJkz5^kLR|B98`8TPTc=^=gfXS_5WDgbF9OIO7jMKDP)Y7N`FvJU#gE|42T{fU zp+d&lV90x5a-ONed)H%~1F`j=sVI7pjPI$g_6b55*Z`;0oSK~tuQ1}+*YKjTs zYXE9a^-1C@EIg#8u^7(8yK?LdnQuToL zeuURo9_Z*&NPX{=1*qQL>ffW_)mA<1a1chun*cOx8esNFay4_vf7a@9*60dD-wSBz z0elXC^?OB!+PT8W^^aQAds=00!WnMDO$Fl+2H`yZ%!ahO0@(ToE$V%(`v2lzUAh9u zd*Mm$c(J|^`#m~Ct6e>piPx7gHxWbwi20vM3$96_NxooT&?X@GA4Yg@;xDqFakI?} zkl6<**(?8)^ZH`u`2M($PjB8SCZTsITuw@F*`F+f{JKj$a?JS{ly{4JHB&b0M>#WT zhG_;9UaS?ULq2P@0|JED*^`jhVR~hc*liS9>g|yOD&1l-uiPR`d}J6h63$-_TgSWl zlPHX}ff)L_pqoVYvd;WG`Ue)W&MnQL3x_(=GOuCo>YE4AYMb=5qPD=)+YBx@X)*-- z0QQDJGxmfwb>TARASz7MT0}HdxkC$!8Ne^ezODwpS>L~Zg*#odZ#$>?u6&iB*YowI zFMQ+n=UsEkgL0Gm_HOq3oMsRIK2mvz&78h%`~T_t39_01b>Ld{c~3Li{Y7o<6)QvA z_oVxBAn`p6C4kzh{$rPK{si%jpgCdt>fD!xd%t-yw(oR-=i9w#LY)Tw4fjZRx6=`5 zwSxMAvU>+Lp{>Kk_cbCAC$+v@Fgn?~u_=m6h6FfgouBky%vzUyG9sdHIv6(V!MH9b zBAt!C2~-{YIa8nz$rdAQ)x8Z7kuT2ReB`jsN%@$+3P}(njL|&~5z#fJPtjVynmR1O zn04joM)Gy+oT&f$U_Ep}?lA=sF+N7+&b@0xX{q2WV7o$W{%(^{FF6R8R^(GxFYdy? zIn|Vooku_-v6gP!T-J#g5XyJ-ZXWN_*rHWb$(?v|lx`E(+ZOZITfT;2-t zmt~4DsM%g#F}`Li7M&d4a@gVbhU0X(GrbA*B6SwxhUsr!DKnzDCG(Yek)(ykb@v{1 zbb)AaJPwK`7wGr?obkCRukQ{@E0ke9WfG1`ZFeMk)DtlHo)c@z-nQ_&OspRcPIy~Q zqg|f4ua9*6qxkrdlkAFWcd?P)3Jx=GcW5-!G{;!rK8Ig8F^(7$^BfWVn{SF>nf1h& z)R2`a&UN7jHw%9@p3#weJ3-UHBb#aeg|8qzMGe%?1gUjV>M8FujixbM;AV8|@cl=p z7alb>zw6txz8wc{RsG@EI)dJ#086tOodWt5_ci%|x#-GvMNj7hPtOy}non{SyWYDc zXDn>@e>=JDh#b`F1g1C@FZaBAxLL*`u9vLYEzPVrEy45@t-JdzsHIJf3}*J?nAlF2*Z?ra6D>aC54Rnvh6+>wBye zA1DWZo1mC9g9nR8pFU-hwJ*NWvN`@O!<~gEd z;ItSAmkc|9{b$2wO2&rH_K|H_0O=#>TlAT`Q;69O)yY%RC&l1rARt^VSOJDWb{5 zDV~^;JOJARbc{6GfkGacoR||CPb>oZQ*>DPVKF^M=ob5QBI57daBShfb@~9+6^!j0 zUGf9=;Ps%!pyMI^ZOi4`4KE!$Wa(4;v z$~YW;D0ntMXZWR_dTq7a|1gLFYEG%1k>3@4e)Tuo6Cp~Mp3Dur_j^5~PJJ7!#!DFx zC-UxLW#9;$Ikl$1;T_^8Ne=%W-)sMA^gJYZ^hn+ztAy~BTVqBAm}cZ``A#6sn>+f2 z>03>xii+g@TceNO2p-k1u99UHojBa(FZdcB7m04*(&@_8z?S|hcVO`Y1ix?4(T2-R zm_?YHHZT~RTTF?Ag+^17kwbL4+bK@Q8uU^kJJQuG$$zguSb?pI7-!X;aWeRGl6KXZ z_Z==XYb~K(vh@^X&d_`x?(^D&R`_%L%qC=bmF0I82j?>>8`U>o#w#eO6bTQ@uVw9* zu)a9Dkfx6n>N4ggQI5HTMBW~kr<56Q9aUDt5dPg6GP1J7mx9O&E4aAo^BL%D`d+;q z)Mu@&__coK<=|Qw32I}}mmMekhk6cW&f7zOeu3962-0}GTNO*g{DRRyLBi!d(^}!id|mh*hvMutO65ixN8yd46frL zqpP6zuVwfN<6StxE|rE8pGg(NrsiQA)gU1}n#u69=Yqzr3@N%vGMSId#i{`(zKCjK z93^%W*Ik#4o&Y39#%qh|7u=&YZY+^rudY9vVU$0$6_BXOKVb2ayPtS%Aq>x zKdPKPL{%9F=b1@T%N9}I6gX4K`9@e3_^VgK4n^qTWr@v|3YjOZNKGdeKZ%S^BuRRe zq0=dY%1(P$A-^h7)j>U~T0vn>!41Nm6yQmdl$1R&s}1`9K{vnsKXjA!Q>mr$ca*!$ zg=KCT-fKr!4g_gTZPT955o8rTeg;?~>i*Z9bO8l_c5L)+#rFrt+m1rUqSI?rt!l3IL7-J*9t=|!$^GTl-HW? zS}?=%^Dc6tr2H6Rd$!*hH}0>g9|)pD=sg)PL*M324okNq^?aj2o#Dn2f@!;S*TJ%J zxCDWvkH6hFnk?V3GwpSGA&pDyl zffCUIqUX~10m~xFJd-C=fhviA$UKq;NaECB>TgxlVPm{1IN|V=ETlfm76m7Sz_9lg zc?N=xD{KQQq!$LXiEx$NKSqxvo@`F5ZByqR#%Uz{di84#KDdJ7^9QikX1Vl&gaXb> z>AqtA*!7NG6cMSTA_udrA8pI8XKASzU-y~E;My{^I3*`(D+uc__K~HT9e-cl5Tkit zqgvzqW0RR-@}QMJemsxl;4k1+2Tac=7+2(#61}UEbgo%YKLz`&6MSI}+HsP7spUte zs6tL?5ht{d6YBlkL85PrQL%5Vp>0bb6RZA3OTaBq;L1bbD%As8f@1Co?`8szSnDB? zUk77a^WTi-wG3!q3HO~Tgq}&j-n$N^!I#Cff;qT*x@EdIzx9sFp^{ZbY*|JHQm<*1 z?392NL9LEG})Mdxpt0FA|hH}0IrC+ z^&C$btnAYput5$c?~aIhjBvYtEp#yatAPGI(!w^Ux$4J;HZ=7y@X{FgA2V!OKs=Vo zJ|uG=Y>aWnir8n2p({LDF3%6-+^&

Bc_!h*zL}eo@;K6*O4FPHBCFpVl7M$C!Tr+#>2%I2qglA?L8c># z>>wrg6oqGFg|0rao3FQeFG0orKUklA30_`r+Z$OIkZmxHe|vc?_6rs_BT~zjw+H1m z9$#Wpa|N1DEuZ~}n5ku5LT(`IM2()qVxu7l&abENuou4kJgfh0FMfzvWvHmCh+z7;KoOG*^(5rtzEx{z~M28WLb#dls*3Yen z(*Xu~Ufq($6}cDqE(rCX0Cip8S`G|F#u%I#q|TGWXLA+9PMK@SEXOd1t$jTA%;e59 zzfHL;#yp%Iu*VVK>vTT^>r!ir(8JUtL4<%;c`!jzFu@~}md10rW~dNyI4Gzi0wmf8 z$7q18omN^dbi?Je%d)uIp^HVvzVu7`l@X7LM5{FF4|iH!+GM5X{(Zk_PYH=%1&Lod z$s>lCOck_TKJ`2m(xhl!@S&sWgI|~#pxag_b*mB>tPTI$(bt3LxAA%FW}UGiY)uW| z0}sTT2eQlaw6ww_xsNUi zd#LxLKD)47nX+6(8x{nixGmyB%NQVA%G(94b#&~uWhf?d44azUnuTy_D7EkHP)+?S z3P~i&Z|Ky_wg6b?sjxrNUJGRosU6po8K^1Bn@liJY zv@hg}JH$yJnlYC*T@8BLahW+C@3RJr&X(~LA0#iQn$$L@d9hK?9IgHoxd{_*4L9G0L8EK##&j0y5#Wd`rlF4{dr^~U)wlKhBG%UJni+o59l3! z2ny`neA$a&ZoKU7h)6YCDF$Ap3@g^hu%d54sdNqw-YzFqoL?T~zUpA4#@fJ`JUKJM zB8-EL#(UD72G8sX_&!}1PF)O-7d_X~UNa996|YqVZSoq<>uXD=f#}Z+>K2$(CRbLv z0!k9QH(DofLqBRwubhi!w>G}P$X;;N_8!QGl`IrJ+gMR7jJFg8tS+jvRA#zo3ff1G zbmb-8%4_ZR+>+(j)EmyeQ)b{9S)1JB3Amq8RkQ;gJtim!6`6kn+9nU97I)Yx+7Gxs z-!1-Rp*^qN0$y3cfap;m>ym+|%@1wu2i@C6LQZ)!_x_cQ0zo9#JshrhzIeqtgKF-2 z*Rf3;4Z=UxgZ2cyMfc{cI918nU_4P+o?-(!D z!iciLn0)}dB12w)S4M!xkyDDU)kPgiS)EbljKYbjv+>Ma(8`vPP;={7b+fqJMVFW; zof=$nW<*gfj2fq+Z)*HiEqJk;}{$2$BU#kr!`><{Pmype4*oy~%>oeH( zya=`%kr3J2% z0#8Z7>|#w%uJ!Vj{bc&n83RX97Z9X=+~LLR;Z^iNlt64S-(s0hzO#di(?!3 zSC4?ld-=q^G7~qc3$G>ypVg?nshf$FmS#}DC4aIMgj#UcL4|9JvAD-kJsK;6JN_f< ztf=O|TxFBosY$O2a~YG!?n*bY_A`rLJ$C8nao z&iV5_+J|w5eF_47X7)GkC-rLyV9YfH9iF~TCxHuJq-R`qK z=$z`lVm4$Q35tSY{^S)2y6|%y%ufiXzyBs>1!|dMQ({U#G?~s06U*N8tp8gI^J)rH zmI9DaDt^u6ga*ED2JU}aih4SuyulBl|Aweqy)hrVoa*5`bfQ+i`sSd$P|{XHG8*I> z{zPLJZuoRugW>IKQ-{GrD`#JYou%F-Hz}+{qa&k<<_kkS`Z&CZbP%A-HrrC}_1C|B z9W*X>!XYgc*XEEk5?(``@WIPdV6Q#jS25H>8zn49?i)9;6RnK0d?Qw4e}2?iwA8@! z5S9W+C&Fv|{l0*|XN3MG3ib{9XSR(1*$r+j4HN{l=PgDKi>hHkQxg2-(Z>cnrmR_X zo*%)#neRpwnUe_P*xjtfXFp~Ab_sy^pMa>cM5=MAJ;+72W@xnh3ub0i4xi}`*CxD# zq`%Q+B)stG_P3+UqX=<$(8=JaG1&G-JT-F_D_DN!KN5~Em5L`yw}(YtY|qHr4GcA> z{V80SU9>6MBb~O>Selik$Qln1>oHNZ$aG*!#3K##sNrxUQ`%s(jcOdY-&RiIRsmHz zW>gxAP4Lg$PVejPC4Ok8^Aae^T&k}{{P8?^`|-|M)#rldour*kud@Ezpw)W9pd>ki zt`Vtt0L`mx;;zwBsY!jFNO0-oQ+E9dU)gq7P;%T<#hv`l6zTfuf~TD9C3u>@OACd4 za(W5QXQQK~rKMxgFqq9AJ*c_5u?N8gOpHiY{1#^@mn{A`GL`&ne<)+M+^^65l8(1j z6gSvnjX#}KtB;SzoJQNMpZ0lBbKa#>52tlIE-%kkvbUUzxmRA2tBx<*m&%KW(z}$L zH<`5iXe0b~60x~7Jn(-E=XTgC({O2`f-Rz1)l>A4V!QNz1e}GTQl>u$T_!ztI}V_6 zoNn1-O_E%WCFVc2)LxGFF^?#DWzHS=TmR_H;mwb!jyyG*;@-h%_(XM61bC&6K^l&I zvDfRkHToiTpt>2uSx|_kZ-Suy?asG0dkuZl_sJ(L8G&&&`8YtCYOWPNa;#gF|wR$|bMRUgR_zd~*|oC$}TM;32sYOFp#Ln|1pb*MR2GYrD- zi$6RIr$=UXO5bquUiwP4p%7FaJ)6{Id)=Os}vFtJAIM_Ur+;0k#L>HC$zJtRkMn&m|lBc6?-mbZc z@?xU-J@Xkf(`_`SDIjffy$98%TKv8#jBbo`MJfH*{Ec+&d7M~=SY?Ie)7`@e6~AD| iN7-MhVgwx@(?DD`l?9XR!K+XI0OwftRcpJjF#iX~)+;~& delta 15923 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