Compare commits

...
Author SHA1 Message Date
Sean McManus fe9cfe318a Merge pull request #9518 from microsoft/seanmcm/1_10_8_release
1.10.8 release
2022-07-06 18:07:58 -07:00
Colen Garoutte-Carson 2080e28813 Fix issue in which duplicate compiler args might be used in compiler query (#9532) 2022-07-06 17:19:16 -07:00
Sean McManus 79e846844f Update changelog. 2022-07-06 17:19:06 -07:00
Sean McManus 3a74d10317 Update changelog for 1.10.8 2022-06-28 21:15:10 -07:00
Sean McManus ef637af801 Change C_Cpp.debugShortcut to resource scope (#9514)
Make C_Cpp.debugShortcut resource scope.
2022-06-28 21:12:12 -07:00
Sean McManus 833795da79 Update ThirdPartyNotices.txt (#9516)
* Update ThirdPartyNotices.txt
2022-06-28 21:11:50 -07:00
Chuck Ries 68bc9642f4 Contribute breakpoints for the "rust" language (#9484)
* Contribute breakpoints for the "rust" language

Since rust code can be debugged with this extension, contribute breakpoints for the "rust" language such that the workaround of "allow breakpoints in all files" is no longer required.
2022-06-28 21:11:03 -07:00
Sean McManus a8bae9e3a6 Update yarn.lock. (#9513) 2022-06-28 21:10:32 -07:00
Andrew Wang fe2c5ef04b Update VSCode Telemetry Package to v0.6.2 (#9512)
* Update VSCode Telemetry Package to v0.6.2
2022-06-28 21:10:10 -07:00
Elaheh Rashedi 83521bc682 rename "success" to "succeeded" in telemetry (#9509) 2022-06-28 21:09:32 -07:00
Sean McManus 3263fab54f Merge pull request #9455 from microsoft/seanmcm/1_10_7_cherrypick
Update version and changelog for 1.10.7. (#9454)
2022-06-15 14:10:00 -07:00
Sean McManus 3254d7db33 Update version and changelog for 1.10.7. (#9454) 2022-06-15 13:52:15 -07:00
Sean McManus 77bdf4b028 Merge pull request #9449 from microsoft/seanmcm/1_10_6_cherryPick2
1.10.6 another cherry-pick
2022-06-14 16:40:59 -07:00
Elaheh Rashedi ca16d85890 resolve tasks when IntelliSense is disabled (#9448) 2022-06-14 16:38:11 -07:00
Sean McManus 74f12d8071 Merge pull request #9447 from microsoft/seanmcm/1_10_6_cherryPick
Merge for 1.10.6
2022-06-14 14:30:26 -07:00
Sean McManus dc6b33eda2 Update version and changelog. (#9440)
* Update version and changelog.
2022-06-14 14:09:36 -07:00
Sean McManus bde931bc3a Remove legacyCompilerArgsBehavior deprecation. (#9439) 2022-06-14 14:09:07 -07:00
Sean McManus 872c86ad20 Fix error that occurred when resolving a merge conflict. (#9424) 2022-06-08 10:47:07 -07:00
Sean McManus 6736b6771f Merge pull request #9421 from microsoft/seanmcm/1_10_5_release
Merge for 1.10.5
2022-06-08 10:07:33 -07:00
Sean McManus 4b4ea51138 Merge branch 'release' into seanmcm/1_10_5_release 2022-06-07 21:48:48 -07:00
Colen Garoutte-Carson 380dcbbb58 Fix changelog release date for 1.9.8 (#9210) 2022-04-20 11:26:20 -07:00
Colen Garoutte-Carson 0a002db1e5 Merge pull request #9206 from microsoft/coleng/1.9.8-cherry-picks 2022-04-19 17:12:24 -07:00
Colen Garoutte-Carson b5b1c2b9df Update changelog for 1.9.8 (#9207) 2022-04-19 17:10:46 -07:00
Colen Garoutte-Carson dd8f358076 Fix exception when IntelliSenseEngine is Diabled (#9178) 2022-04-19 16:34:07 -07:00
Andrew Wang 34cd49174e Add back 'aiKey' in package.json (#9183)
* Add back 'aiKey' in package.json

* Add _aiKeyComment
2022-04-19 16:33:47 -07:00
Sean McManus 2874fd2600 Merge pull request #9070 from microsoft/main
Merge for 1.9.7
2022-03-22 18:52:16 -07:00
7 changed files with 3169 additions and 2846 deletions
+23
View File
@@ -1,5 +1,28 @@
# C/C++ for Visual Studio Code Change Log
## Version 1.10.8: July 7, 2022
### Enhancements
* Allow breakpoints for Rust debugging. [PR #9484](https://github.com/microsoft/vscode-cpptools/pull/9484)
* Make `C_Cpp.debugShortcut` settable per-workspace folder. [PR #9514](https://github.com/microsoft/vscode-cpptools/pull/9514)
### Bug Fixes
* Fix crash if clang-tidy returns a replacement with an empty FilePath. [#9437](https://github.com/microsoft/vscode-cpptools/issues/9437)
* Fix skipping the compiler argument after `-c`. [#9453](https://github.com/microsoft/vscode-cpptools/issues/9453)
* Fix `-std:c++20` not being handled with cl.exe. [#9458](https://github.com/microsoft/vscode-cpptools/issues/9458)
* Fix bug with the environment being incorrect when compiler querying. [#9472](https://github.com/microsoft/vscode-cpptools/issues/9472)
* Fix duplicate compiler args in compiler query with custom configuration providers using cpptools-api prior to v6. [#9531](https://github.com/microsoft/vscode-cpptools/issues/9531)
* Fix process launching concurrency issues on Windows.
## Version 1.10.7: June 15, 2022
### Bug Fixes
* Fix bugs with process creation on Windows (which caused IntelliSense to fail). [#9431](https://github.com/microsoft/vscode-cpptools/issues/9431)
## Version 1.10.6: June 14, 2022
### Bug Fixes
* Fix `@responseFile` in `compilerArgs` not being handled on Linux/Mac. [#9434](https://github.com/microsoft/vscode-cpptools/issues/9434)
* Fix debug preLaunchTask not working when `C_Cpp.intelliSenseEngine` is `"Disabled"`. [#9446](https://github.com/microsoft/vscode-cpptools/issues/9446)
* Make the `C_Cpp.legacyCompilerArgsBehavior` setting non-deprecated.
## Version 1.10.5: June 8, 2022
### New Features
* Add code actions to apply clang-tidy fixes (and other actions). [#8476](https://github.com/microsoft/vscode-cpptools/issues/8476)
File diff suppressed because it is too large Load Diff
+12 -8
View File
@@ -2,7 +2,7 @@
"name": "cpptools",
"displayName": "C/C++",
"description": "C/C++ IntelliSense, debugging, and code browsing.",
"version": "1.10.5-main",
"version": "1.10.8-main",
"publisher": "ms-vscode",
"icon": "LanguageCCPP_color_128x.png",
"readme": "README.md",
@@ -2664,14 +2664,13 @@
"type": "boolean",
"default": true,
"description": "%c_cpp.configuration.debugShortcut.description%",
"scope": "application"
"scope": "resource"
},
"C_Cpp.legacyCompilerArgsBehavior": {
"type": "boolean",
"default": false,
"markdownDescription": "%c_cpp.configuration.legacyCompilerArgsBehavior.markdownDescription%",
"scope": "resource",
"deprecationMessage": "%c_cpp.configuration.legacyCompilerArgsBehavior.deprecationMessage%"
"scope": "resource"
}
}
},
@@ -2842,7 +2841,8 @@
"languages": [
"c",
"cpp",
"cuda-cpp"
"cuda-cpp",
"rust"
],
"_aiKeyComment": "Ignore 'Property aiKey is not allowed'. See https://github.com/microsoft/vscode/issues/76493",
"aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217",
@@ -3520,7 +3520,8 @@
"languages": [
"c",
"cpp",
"cuda-cpp"
"cuda-cpp",
"rust"
],
"_aiKeyComment": "Ignore 'Property aiKey is not allowed'. See https://github.com/microsoft/vscode/issues/76493",
"aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217",
@@ -3924,6 +3925,9 @@
},
{
"language": "cuda"
},
{
"language": "rust"
}
],
"jsonValidation": [
@@ -4529,7 +4533,7 @@
"plist": "^3.0.5",
"tmp": "^0.2.1",
"vscode-cpptools": "^6.1.0",
"vscode-extension-telemetry": "^0.4.4",
"@vscode/extension-telemetry": "^0.6.2",
"vscode-languageclient": "^5.2.1",
"vscode-nls": "^5.0.0",
"vscode-tas-client": "^0.1.27",
@@ -4550,4 +4554,4 @@
"y18n": "^5.0.5",
"minimist": "^1.2.6"
}
}
}
+20 -10
View File
@@ -95,7 +95,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
const selection: ConfigMenu | undefined = await vscode.window.showQuickPick(this.localizeConfigDetail(items), {placeHolder: localize("select.configuration", "Select a configuration")});
if (!selection) {
Telemetry.logDebuggerEvent(DebuggerEvent.debugPanel, { "debugType": "debug", "configSource": ConfigSource.unknown, "configMode": ConfigMode.unknown, "cancelled": "true", "success": "true" });
Telemetry.logDebuggerEvent(DebuggerEvent.debugPanel, { "debugType": "debug", "configSource": ConfigSource.unknown, "configMode": ConfigMode.unknown, "cancelled": "true", "succeeded": "true" });
return []; // User canceled it.
}
@@ -113,14 +113,13 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
* resolveDebugConfigurationWithSubstitutedVariables will be automatically called after this function.
*/
async resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: CppDebugConfiguration, token?: vscode.CancellationToken): Promise<CppDebugConfiguration | null | undefined> {
const isIntelliSenseDisabled: boolean = new CppSettings((vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) ? vscode.workspace.workspaceFolders[0]?.uri : undefined).intelliSenseEngine === "Disabled";
if (!config || !config.type) {
// When DebugConfigurationProviderTriggerKind is Dynamic, this function will be called with an empty config.
// Hence, providing debug configs, and start debugging should be done manually.
// resolveDebugConfiguration will be automatically called after calling provideDebugConfigurations.
const configs: CppDebugConfiguration[]= await this.provideDebugConfigurations(folder);
if (!configs || configs.length === 0) {
Telemetry.logDebuggerEvent(DebuggerEvent.debugPanel, { "debugType": DebugType.debug, "configSource": folder ? ConfigSource.workspaceFolder : ConfigSource.singleFile, "configMode": ConfigMode.noLaunchConfig, "cancelled": "true", "success": "true" });
Telemetry.logDebuggerEvent(DebuggerEvent.debugPanel, { "debugType": DebugType.debug, "configSource": folder ? ConfigSource.workspaceFolder : ConfigSource.singleFile, "configMode": ConfigMode.noLaunchConfig, "cancelled": "true", "succeeded": "true" });
return undefined; // aborts debugging silently
} else {
// Currently, we expect only one debug config to be selected.
@@ -148,6 +147,18 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
if (config.preLaunchTask) {
config.configSource = this.getDebugConfigSource(config, folder);
const isIntelliSenseDisabled: boolean = new CppSettings((vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) ? vscode.workspace.workspaceFolders[0]?.uri : undefined).intelliSenseEngine === "Disabled";
// Run the build task if IntelliSense is disabled.
if (isIntelliSenseDisabled) {
try {
await cppBuildTaskProvider.runBuildTask(config.preLaunchTask);
config.preLaunchTask = undefined;
Telemetry.logDebuggerEvent(DebuggerEvent.debugPanel, { "debugType": DebugType.debug, "configSource": config.configSource || ConfigSource.unknown, "configMode": ConfigMode.launchConfig, "cancelled": "false", "succeeded": "true" });
} catch (err) {
Telemetry.logDebuggerEvent(DebuggerEvent.debugPanel, { "debugType": DebugType.debug, "configSource": config.configSource || ConfigSource.unknown, "configMode": ConfigMode.launchConfig, "cancelled": "false", "succeeded": "false" });
}
return config;
}
let resolveByVsCode: boolean = false;
const isDebugPanel: boolean = !config.debuggerEvent || (config.debuggerEvent && config.debuggerEvent === DebuggerEvent.debugPanel);
const singleFile: boolean = config.configSource === ConfigSource.singleFile;
@@ -169,11 +180,10 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
config.debugType = config.debugType ? config.debugType : DebugType.debug;
const configMode: ConfigMode = isExistingConfig ? ConfigMode.launchConfig : ConfigMode.noLaunchConfig;
// if configuration.debuggerEvent === undefined, it means this configuration is already defined in launch.json and is shown in debugPanel.
Telemetry.logDebuggerEvent(config.debuggerEvent || DebuggerEvent.debugPanel, { "debugType": config.debugType || DebugType.debug, "configSource": config.configSource || ConfigSource.unknown, "configMode": configMode, "cancelled": "false", "success": "true" });
Telemetry.logDebuggerEvent(config.debuggerEvent || DebuggerEvent.debugPanel, { "debugType": config.debugType || DebugType.debug, "configSource": config.configSource || ConfigSource.unknown, "configMode": configMode, "cancelled": "false", "succeeded": "true" });
if (!resolveByVsCode) {
if ((singleFile || isIntelliSenseDisabled ||
(isDebugPanel && !folder && isExistingTask))) {
if ((singleFile || (isDebugPanel && !folder && isExistingTask))) {
await this.resolvePreLaunchTask(config, configMode);
config.preLaunchTask = undefined;
} else {
@@ -753,7 +763,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
}
const selectedConfig: vscode.DebugConfiguration | undefined = await this.selectConfiguration(textEditor, false, true);
if (!selectedConfig) {
Telemetry.logDebuggerEvent(DebuggerEvent.addConfigGear, { "configSource": ConfigSource.workspaceFolder, "configMode": ConfigMode.launchConfig, "cancelled": "true", "success": "true" });
Telemetry.logDebuggerEvent(DebuggerEvent.addConfigGear, { "configSource": ConfigSource.workspaceFolder, "configMode": ConfigMode.launchConfig, "cancelled": "true", "succeeded": "true" });
return; // User canceled it.
}
@@ -770,7 +780,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
selectedConfig.debuggerEvent = undefined;
// Write debug configuration in launch.json file.
await this.writeDebugConfig(selectedConfig, isExistingConfig, folder);
Telemetry.logDebuggerEvent(DebuggerEvent.addConfigGear, { "configSource": ConfigSource.workspaceFolder, "configMode": ConfigMode.launchConfig, "cancelled": "false", "success": "true" });
Telemetry.logDebuggerEvent(DebuggerEvent.addConfigGear, { "configSource": ConfigSource.workspaceFolder, "configMode": ConfigMode.launchConfig, "cancelled": "false", "succeeded": "true" });
}
public async buildAndRun(textEditor: vscode.TextEditor): Promise<void> {
@@ -782,7 +792,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
let folder: vscode.WorkspaceFolder | undefined = vscode.workspace.getWorkspaceFolder(textEditor.document.uri);
const selectedConfig: CppDebugConfiguration | undefined = await this.selectConfiguration(textEditor);
if (!selectedConfig) {
Telemetry.logDebuggerEvent(DebuggerEvent.playButton, { "debugType": debugModeOn ? DebugType.debug : DebugType.run, "configSource": ConfigSource.unknown, "cancelled": "true", "success": "true" });
Telemetry.logDebuggerEvent(DebuggerEvent.playButton, { "debugType": debugModeOn ? DebugType.debug : DebugType.run, "configSource": ConfigSource.unknown, "cancelled": "true", "succeeded": "true" });
return; // User canceled it.
}
@@ -860,7 +870,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
if (e && e.message === util.failedToParseJson) {
vscode.window.showErrorMessage(util.failedToParseJson);
}
Telemetry.logDebuggerEvent(config.debuggerEvent || DebuggerEvent.debugPanel, { "debugType": config.debugType || DebugType.debug, "configSource": config.configSource || ConfigSource.unknown, "configMode": configMode, "cancelled": "false", "success": "false" });
Telemetry.logDebuggerEvent(config.debuggerEvent || DebuggerEvent.debugPanel, { "debugType": config.debugType || DebugType.debug, "configSource": config.configSource || ConfigSource.unknown, "configMode": configMode, "cancelled": "false", "succeeded": "false" });
}
}
}
+2
View File
@@ -3215,6 +3215,7 @@ export class DefaultClient implements Client {
itemConfig.compilerPath = compilerPathAndArgs.compilerPath;
if (providerVersion < Version.v6) {
itemConfig.compilerArgsLegacy = compilerPathAndArgs.allCompilerArgs;
itemConfig.compilerArgs = undefined;
} else {
itemConfig.compilerArgs = compilerPathAndArgs.allCompilerArgs;
}
@@ -3306,6 +3307,7 @@ export class DefaultClient implements Client {
sanitized.compilerPath = compilerPathAndArgs.compilerPath;
if (providerVersion < Version.v6) {
sanitized.compilerArgsLegacy = compilerPathAndArgs.allCompilerArgs;
sanitized.compilerArgs = undefined;
} else {
sanitized.compilerArgs = compilerPathAndArgs.allCompilerArgs;
}
+1 -1
View File
@@ -4,7 +4,7 @@
* ------------------------------------------------------------------------------------------ */
'use strict';
import TelemetryReporter from 'vscode-extension-telemetry';
import TelemetryReporter from '@vscode/extension-telemetry';
import { getExperimentationServiceAsync, IExperimentationService, IExperimentationTelemetry, TargetPopulation } from 'vscode-tas-client';
import * as util from './common';
+44 -5
View File
@@ -101,6 +101,42 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
"@microsoft/[email protected]", "@microsoft/1ds-core-js@^3.2.3":
version "3.2.3"
resolved "https://registry.yarnpkg.com/@microsoft/1ds-core-js/-/1ds-core-js-3.2.3.tgz#2217d92ec8b073caa4577a13f40ea3a5c4c4d4e7"
integrity sha512-796A8fd90oUKDRO7UXUT9BwZ3G+a9XzJj5v012FcCN/2qRhEsIV3x/0wkx2S08T4FiQEUPkB2uoYHpEjEneM7g==
dependencies:
"@microsoft/applicationinsights-core-js" "2.8.4"
"@microsoft/applicationinsights-shims" "^2.0.1"
"@microsoft/dynamicproto-js" "^1.1.6"
"@microsoft/1ds-post-js@^3.2.3":
version "3.2.3"
resolved "https://registry.yarnpkg.com/@microsoft/1ds-post-js/-/1ds-post-js-3.2.3.tgz#1fa7d51615a44f289632ae8c588007ba943db216"
integrity sha512-tcGJQXXr2LYoBbIXPoUVe1KCF3OtBsuKDFL7BXfmNtuSGtWF0yejm6H83DrR8/cUIGMRMUP9lqNlqFGwDYiwAQ==
dependencies:
"@microsoft/1ds-core-js" "3.2.3"
"@microsoft/applicationinsights-shims" "^2.0.1"
"@microsoft/dynamicproto-js" "^1.1.6"
"@microsoft/[email protected]":
version "2.8.4"
resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.4.tgz#607e531bb241a8920d43960f68a7c76a6f9af596"
integrity sha512-FoA0FNOsFbJnLyTyQlYs6+HR7HMEa6nAOE6WOm9WVejBHMHQ/Bdb+hfVFi6slxwCimr/ner90jchi4/sIYdnyQ==
dependencies:
"@microsoft/applicationinsights-shims" "2.0.1"
"@microsoft/dynamicproto-js" "^1.1.6"
"@microsoft/[email protected]", "@microsoft/applicationinsights-shims@^2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.1.tgz#5d72fb7aaf4056c4fda54f9d7c93ccf8ca9bcbfd"
integrity sha512-G0MXf6R6HndRbDy9BbEj0zrLeuhwt2nsXk2zKtF0TnYo39KgYqhYC2ayIzKPTm2KAE+xzD7rgyLdZnrcRvt9WQ==
"@microsoft/dynamicproto-js@^1.1.6":
version "1.1.6"
resolved "https://registry.yarnpkg.com/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.6.tgz#6fe03468862861f5f88ac4c3959a652b3797f1bc"
integrity sha512-D1Oivw1A4bIXhzBIy3/BBPn3p2On+kpO2NiYt9shICDK7L/w+cR6FFBUsBZ05l6iqzTeL+Jm8lAYn0g6G7DmDg==
"@nodelib/[email protected]":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
@@ -415,6 +451,14 @@
resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
"@vscode/extension-telemetry@^0.6.2":
version "0.6.2"
resolved "https://registry.yarnpkg.com/@vscode/extension-telemetry/-/extension-telemetry-0.6.2.tgz#b86814ee680615730da94220c2b03ea9c3c14a8e"
integrity sha512-yb/wxLuaaCRcBAZtDCjNYSisAXz3FWsSqAha5nhHcYxx2ZPdQdWuZqVXGKq0ZpHVndBWWtK6XqtpCN2/HB4S1w==
dependencies:
"@microsoft/1ds-core-js" "^3.2.3"
"@microsoft/1ds-post-js" "^3.2.3"
"@vscode/test-electron@^1.6.1":
version "1.6.1"
resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-1.6.1.tgz#2b282154097e250ee9b94b6a284eb5804e53a3d7"
@@ -5790,11 +5834,6 @@ [email protected], vscode-debugprotocol@^1.35.0:
resolved "https://registry.yarnpkg.com/vscode-debugprotocol/-/vscode-debugprotocol-1.38.0.tgz#7a9bcd457e6642f48fabef114c0fa1c25a2fb1e7"
integrity sha512-oam9iSjNfXSn71a8bmNsXv8k/rIKSOcllIPrFnNgxd1EMBpfnum+gb7lmRpcH0zSjGb+OH8Ncn8B5tv8srWbNQ==
vscode-extension-telemetry@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.4.4.tgz#e5d5ac90ea7d07ec054f5310893d95d43d5984b0"
integrity sha512-LzirNf2GnykXCAqqWrvj+snYqgkPVyjwM72tYOHgcZiG/ZRuNjmqlgvs+SomEJdmD8cutduitPmhoyIuzOrVfA==
vscode-jsonrpc@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9"