anchor.diff:    mktplcRef = {
       name = "vsliveshare";
       publisher = "ms-vsliveshare";
  -    version = "1.0.2902";
  -    sha256 = "0fx2vi0wxamcwqcgcx7wpg8hi7f1c2pibrmd2qy2whilpsv3gzmb";
  +    version = "1.0.3912";
  +    sha256 = "1k5yy04q85jjr7hzrv0s7x1m2251kglb038wcvvbs568vpscghi8";
     };
  -}).overrideAttrs(attrs: {
  -  buildInputs = attrs.buildInputs ++ libs ++ [ autoPatchelfHook bash file makeWrapper ];
  +}).overrideAttrs({ nativeBuildInputs ? [], buildInputs ? [], ... }: {
  +  nativeBuildInputs = nativeBuildInputs ++ [
  +    bash
  +    jq
  +    autoPatchelfHook
  +    makeWrapper
  +  ];
  +  buildInputs = buildInputs ++ libs;
   
     # Using a patch file won't work, because the file changes too often, causing the patch to fail on most updates.
     # Rather than patching the calls to functions, we modify the functions to return what we want,
  
positive.code: 
      # Fix extension attempting to write to 'modifiedInternalSettings.json'.
      # Move this write to the tmp directory indexed by the nix store basename.
      sed -i \
        -E -e $'s/path\.resolve\(constants_1\.EXTENSION_ROOT_PATH, \'\.\/modifiedInternalSettings\.json\'\)/path.join\(os.tmpdir(), "'$ext_unique_id'" + "-modifiedInternalSettings.json"\)/g' \
        out/prod/extension-prod.js
  
      # Fix extension attempting to write to 'vsls-agent.lock'.
      # Move this write to the tmp directory indexed by the nix store basename.
      sed -i \
        -E -e $'s/(Agent_1.getAgentPath\(\) \+ \'.lock\')/path.join\(os.tmpdir(), "'$ext_unique_id'" + "-vsls-agent.lock"\)/g' \
        out/prod/extension-prod.js
  
      # TODO: Under 'node_modules/@vsliveshare/vscode-launcher-linux' need to hardcode path to 'desktop-file-install'
      # 'update-desktop-database' and 'xprop'. Might want to wrap the script instead.
    '';
  
    # Support for the `postInstall` hook was added only in nixos-20.03,
    # so for backwards compatibility reasons lets not use it yet.
    installPhase = attrs.installPhase + ''
      # Support both the new and old directory structure of vscode extensions.
      if [[ -d $out/ms-vsliveshare.vsliveshare ]]; then
        cd $out/ms-vsliveshare.vsliveshare
      elif [[ -d $out/share/vscode/extensions/ms-vsliveshare.vsliveshare ]]; then
        cd $out/share/vscode/extensions/ms-vsliveshare.vsliveshare
      else
        echo "Could not find extension directory 'ms-vsliveshare.vsliveshare'." >&2
        exit 1
      fi
  
      bash -s <<ENDSUBSHELL
      shopt -s extglob
  
negative.code: 
      # The required executables are already copied over,
      # and the other runtimes won't be used and thus are just a waste of space.
      rm -r dotnet_modules/exes dotnet_modules/runtimes/!(linux-x64|unix)
  
      # Not all executables and libraries are executable, so make sure that they are.
      jq <package.json '.executables.linux[]' -r | xargs chmod +x
  
      # Lock the extension downloader.
      touch install-linux.Lock externalDeps-linux.Lock
      ENDSUBSHELL
    '';
  
    postFixup = ''
      # We cannot use `wrapProgram`, because it will generate a relative path,
      # which will break when copying over the files.
      mv dotnet_modules/vsls-agent{,-wrapped}
      makeWrapper $PWD/dotnet_modules/vsls-agent{-wrapped,} \
        --prefix LD_LIBRARY_PATH : "${makeLibraryPath libs}" \
        --set LD_PRELOAD $PWD/dotnet_modules/noop-syslog.so \
        --set DOTNET_ROOT ${dotnet-sdk_3}
    '';
  
    meta = {
  