helloadhavan/github_issues huggingface dataset:
Repository: vercel/next.js
Pull request: Turbopack: improve cell order lint rule for ReadRef::cell

The "cell in async map" pattern

Changed files:
filename: .config/ast-grep/rules/no-map-async-cell.yml
patch: @@ -12,6 +12,7 @@ rule:
         - pattern: $_X.resolved_cell()
         - pattern: ResolvedVc::cell($_X)
         - pattern: Vc::cell($_X)
+        - pattern: ReadRef::cell($_X)
     - inside:
         stopBy: end
         all:

filename: turbopack/crates/turbopack-browser/src/ecmascript/merged/version.rs
patch: @@ -24,7 +24,8 @@ impl Version for EcmascriptBrowserMergedChunkVersion {
             let mut sorted_ids = self
                 .versions
                 .iter()
-                .map(|version| async move { ReadRef::cell(version.clone()).id().await })
+                // This ReadRef::cell call is important, as it means that `.id()` is cached.
+                .map(|version| ReadRef::cell(version.clone()).id())
                 .try_join()
                 .await?;
             sorted_ids.sort();
Repository: ollama/ollama
Pull request: win: revert CPU discovery logic to 0.12.3

The behavior change in 0.12.4 is the most likely the root cause of hangs some users are seeing.  This reverts to the 0.12.3 code, with some added trace logging.

Fixes #12699 
Fixes #12640 
Fixes #12942

Changed files:
filename: discover/cpu_windows.go
patch: @@ -5,6 +5,8 @@ import (
 	"log/slog"
 	"syscall"
 	"unsafe"
+
+	"github.com/ollama/ollama/logutil"
 )
 
 type MEMORYSTATUSEX struct {
@@ -99,22 +101,29 @@ func (pkg *winPackage) IsMember(target *GROUP_AFFINITY) bool {
 }
 
 func getLogicalProcessorInformationEx() ([]byte, error) {
-	buf := make([]byte, 1024)
+	buf := make([]byte, 1)
 	bufSize := len(buf)
-	var err error
-	for range 3 {
-		var ret uintptr
-		ret, _, err = GetLogicalProcessorInformationEx.Call(
-			uintptr(RelationAll),
-			uintptr(unsafe.Pointer(&buf[0])),
-			uintptr(unsafe.Pointer(&bufSize)),
-		)
-		if ret == 1 && bufSize <= len(buf) {
-			return buf, nil
-		}
-		buf = make([]byte, bufSize)
+	ret, _, err := GetLogicalProcessorInformationEx.Call(
+		uintptr(RelationAll),
+		uintptr(unsafe.Pointer(&buf[0])),
+		uintptr(unsafe.Pointer(&bufSize)),
+	)
+	if ret != 0 {
+		logutil.Trace("failed to retrieve CPU payload size", "ret", ret, "size", bufSize, "error", err)
+		return nil, fmt.Errorf("failed to determine size info ret:%d %w", ret, err)
+	}
+
+	buf = make([]byte, bufSize)
+	ret, _, err = GetLogicalProcessorInformationEx.Call(
+		uintptr(RelationAll),
+		uintptr(unsafe.Pointer(&buf[0])),
+		uintptr(unsafe.Pointer(&bufSize)),
+	)
+	if ret == 0 {
+		logutil.Trace("failed to retrieve CPU information", "ret", ret, "size", len(buf), "new_size", bufSize, "error", err)
+		return nil, fmt.Errorf("failed to gather processor information ret:%d buflen:%d %w", ret, bufSize, err)
 	}
-	return nil, fmt.Errorf("unable to determine CPU details: %w", err)
+	return buf, nil
 }
 
 func processSystemLogicalProcessorInforationList(buf []byte) []*winPackage {
Repository: electron/electron
Pull request: fix: don't call `TaskDialogIndirect` with disabled parent windows

Backport of #50078

See that PR for details.


Notes: Fixed bug where opening a message box immediately upon closing a child window may cause the parent window to freeze on Windows.

Changed files:
filename: shell/browser/ui/message_box_win.cc
patch: @@ -158,7 +158,7 @@ DialogResult ShowTaskDialogWstr(gfx::AcceleratedWidget parent,
   config.hInstance = GetModuleHandle(nullptr);
   config.dwFlags = flags;
 
-  if (parent) {
+  if (parent && ::IsWindowEnabled(parent)) {
     config.hwndParent = parent;
     config.dwFlags |= TDF_POSITION_RELATIVE_TO_WINDOW;
   }
Repository: facebook/react
Pull request: [Flight] Look for moved debugInfo when logging component performance track

In #34524 we started moving debug info from the Chunk to its inner value (e.g. lazy or array). That way it's not duplicated when the outer one is rendered and not missing when just the value is rendered.

However, we forgot that the component performance track only looks for this debugInfo recursively on the Chunks. This makes it look for it on the value if it can't find it on the chunk.

Flight fixture now logs the components again.

Changed files:
filename: packages/react-client/src/ReactFlightClient.js
patch: @@ -4318,7 +4318,26 @@ function flushComponentPerformance(
 
   // First find the start time of the first component to know if it was running
   // in parallel with the previous.
-  const debugInfo = __DEV__ && root._debugInfo;
+  let debugInfo = null;
+  if (__DEV__) {
+    debugInfo = root._debugInfo;
+    if (debugInfo.length === 0 && root.status === 'fulfilled') {
+      const resolvedValue = resolveLazy(root.value);
+      if (
+        typeof resolvedValue === 'object' &&
+        resolvedValue !== null &&
+        (isArray(resolvedValue) ||
+          typeof resolvedValue[ASYNC_ITERATOR] === 'function' ||
+          resolvedValue.$$typeof === REACT_ELEMENT_TYPE ||
+          resolvedValue.$$typeof === REACT_LAZY_TYPE) &&
+        isArray(resolvedValue._debugInfo)
+      ) {
+        // It's possible that the value has been given the debug info.
+        // In that case we need to look for it on the resolved value.
+        debugInfo = resolvedValue._debugInfo;
+      }
+    }
+  }
   if (debugInfo) {
     let startTime = 0;
     for (let i = 0; i < debugInfo.length; i++) {
Repository: huggingface/transformers
Pull request: Fix peft conversion mappings

# What does this PR do?

As per the title.

Changed files:
filename: src/transformers/integrations/peft.py
patch: @@ -226,7 +226,7 @@ def _build_peft_weight_mapping(
             new_weight_conversions.append(orig_conversion)
             continue
 
-        if orig_conversion.target_patterns == ["mlp.experts.gate_up_proj"]:
+        if len(orig_conversion.target_patterns) == 1 and orig_conversion.target_patterns[0].endswith("gate_up_proj"):
             # gate_up_proj requires both merging the experts and concatenating for the fusion of w1 and w3
             for lora in ("lora_A", "lora_B"):  # TODO: lora_embedding_A and lora_embedding_B
                 # deal with operations
@@ -262,11 +262,11 @@ def _build_peft_weight_mapping(
                     target_patterns=new_target_patterns,
                     distributed_operation=orig_conversion.distributed_operation,
                     quantization_operation=orig_conversion.quantization_operation,
-                    operations=new_weight_conversions,
+                    operations=peft_weight_operations,
                 )
                 new_weight_conversions.append(new_conversion)
 
-        elif orig_conversion.target_patterns == ["mlp.experts.down_proj"]:
+        elif len(orig_conversion.target_patterns) == 1 and orig_conversion.target_patterns[0].endswith("down_proj"):
             # down_proj only requires merging of experts
             for lora in ("lora_A", "lora_B"):  # TODO: lora_embedding_A and lora_embedding_B
                 peft_weight_operations = []
@@ -301,7 +301,7 @@ def _build_peft_weight_mapping(
                     target_patterns=new_target_patterns,
                     distributed_operation=orig_conversion.distributed_operation,
                     quantization_operation=orig_conversion.quantization_operation,
-                    operations=new_weight_conversions,
+                    operations=peft_weight_operations,
                 )
                 new_weight_conversions.append(new_conversion)
Repository: ollama/ollama
Pull request: README: Add handy-ollama to tutorial

Chinese Tutorial for Ollama by [Datawhale ](https://github.com/datawhalechina)- China's Largest Open Source AI Learning Community.

We'd like to contribute to the Ollama community by announcing the release of our open-source Chinese tutorial.

This tutorial aims to be comprehensive and easy to understand, covering:

- Ollama Introduction
- Ollama Installation and Configuration
- Custom Model Import
- Ollama REST API
- Using Ollama with LangChain
- Deployment of Ollama Visual Interfaces
- Application Examples

The repo is at : https://github.com/datawhalechina/handy-ollama

Changed files:
filename: README.md
patch: @@ -423,6 +423,10 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [Fly.io](https://fly.io/docs/python/do-more/add-ollama/)
 - [Koyeb](https://www.koyeb.com/deploy/ollama)
 
+### Tutorial
+
+- [handy-ollama](https://github.com/datawhalechina/handy-ollama) (Chinese Tutorial for Ollama by [Datawhale ](https://github.com/datawhalechina) - China's Largest Open Source AI Learning Community)
+
 ### Terminal
 
 - [oterm](https://github.com/ggozad/oterm)
Repository: facebook/react
Pull request: Fix/add missing else branch for renders with no props change

Stacked on https://github.com/facebook/react/pull/34822.
Fixes a bug introduced in https://github.com/facebook/react/pull/34370.

Just copying the lower else branch to the `properties.length` else branch at the top.

Changed files:
filename: packages/react-reconciler/src/ReactFiberPerformanceTrack.js
patch: @@ -305,6 +305,30 @@ export function logComponentRender(
           } else {
             performance.measure('\u200b' + name, reusableComponentOptions);
           }
+        } else {
+          if (debugTask != null) {
+            debugTask.run(
+              // $FlowFixMe[method-unbinding]
+              console.timeStamp.bind(
+                console,
+                name,
+                startTime,
+                endTime,
+                COMPONENTS_TRACK,
+                undefined,
+                color,
+              ),
+            );
+          } else {
+            console.timeStamp(
+              name,
+              startTime,
+              endTime,
+              COMPONENTS_TRACK,
+              undefined,
+              color,
+            );
+          }
         }
       } else {
         if (debugTask != null) {

filename: packages/react-reconciler/src/__tests__/ReactPerformanceTrack-test.js
patch: @@ -350,7 +350,7 @@ describe('ReactPerformanceTracks', () => {
   });
 
   // @gate __DEV__ && enableComponentPerformanceTrack
-  it('includes spans for Components with no prop changes', async () => {
+  it('includes console.timeStamp spans for Components with no prop changes', async () => {
     function Left({value}) {
       Scheduler.unstable_advanceTime(5000);
     }
@@ -436,6 +436,7 @@ describe('ReactPerformanceTracks', () => {
     ]);
     expect(getConsoleTimestampEntries()).toEqual([
       ['Render', 16000, 31000, 'Blocking', 'Scheduler ⚛', 'primary-dark'],
+      ['Right', 21000, 31000, 'Components ⚛', undefined, 'error'],
     ]);
     performanceMeasureCalls.length = 0;
   });
Repository: nodejs/node
Pull request: win,tools: Add description to signature

When signing files for Windows, add "Node.js" as the description.

This should cause the string highlighted in the UAC elevation prompt screenshot below to be replaced with the string specified as the description.

<img width="344" height="293" alt="image" src="https://github.com/user-attachments/assets/dd91c155-004f-479b-972a-b9006852aab2" />


Changed files:
filename: tools/sign.bat
patch: @@ -20,10 +20,10 @@ if "%AZURE_SIGN_METADATA_PATH%"=="" (
 )
 
 
-signtool sign /tr "http://timestamp.acs.microsoft.com" /td sha256 /fd sha256 /v /dlib %AZURE_SIGN_DLIB_PATH% /dmdf %AZURE_SIGN_METADATA_PATH% %1
+signtool sign /d "Node.js" /tr "http://timestamp.acs.microsoft.com" /td sha256 /fd sha256 /v /dlib %AZURE_SIGN_DLIB_PATH% /dmdf %AZURE_SIGN_METADATA_PATH% %1
 if not ERRORLEVEL 1 (
     echo Successfully signed %1 using signtool
     exit /b 0
 )
 echo Could not sign %1 using signtool
-exit /b 1
\ No newline at end of file
+exit /b 1
Repository: rust-lang/rust
Pull request: Cherry-pick 1.94.1 release notes

This also fixes the Cargo rendering bug noted in the pre-release thread (https://internals.rust-lang.org/t/rust-1-94-1-pre-release-testing/24107/2).



Changed files:
filename: RELEASES.md
patch: @@ -1,3 +1,17 @@
+Version 1.94.1 (2026-03-26)
+===========================
+
+<a id="1.94.1"></a>
+
+* [Fix `std::thread::spawn` on wasm32-wasip1-threads](https://github.com/rust-lang/rust/pull/153634)
+* [Remove new methods added to `std::os::windows::fs::OpenOptionsExt`](https://github.com/rust-lang/rust/pull/153491)
+  The new methods were unstable, but the trait itself is not sealed and so
+  cannot be extended with non-default methods.
+* [Clippy: fix ICE in `match_same_arms`](https://github.com/rust-lang/rust-clippy/pull/16685)
+* [Cargo: update tar to 0.4.45](https://github.com/rust-lang/cargo/pull/16769)
+  This resolves CVE-2026-33055 and CVE-2026-33056. Users of crates.io are not affected.
+  See [blog](https://blog.rust-lang.org/2026/03/21/cve-2026-33056/) for more details.
+
 Version 1.94.0 (2026-03-05)
 ==========================
Repository: ollama/ollama
Pull request: log: trace logging for scheduler

This adds some additional trace logging in the scheduler which may help narrow down a hang some windows users are reporting.

Changed files:
filename: server/sched.go
patch: @@ -143,6 +143,7 @@ func (s *Scheduler) processPending(ctx context.Context) {
 				slog.Debug("pending request cancelled or timed out, skipping scheduling")
 				continue
 			}
+			logutil.Trace("processing incoming request", "model", pending.model.ModelPath)
 
 			for {
 				var runnerToExpire *runnerRef
@@ -161,6 +162,7 @@ func (s *Scheduler) processPending(ctx context.Context) {
 						runnerToExpire = runner
 					} else {
 						// Runner is usable, return it
+						logutil.Trace("using existing loaded runner", "model", pending.model.ModelPath)
 						pending.useLoadedRunner(runner, s.finishedReqCh)
 						break
 					}
@@ -174,13 +176,16 @@ func (s *Scheduler) processPending(ctx context.Context) {
 					if pending.opts.NumGPU == 0 {
 						gpus = []ml.DeviceInfo{}
 					} else {
+						logutil.Trace("refreshing GPU list", "model", pending.model.ModelPath)
 						gpus = s.getGpuFn(ctx, runnersSnapshot)
 					}
+					logutil.Trace("refreshing system information", "model", pending.model.ModelPath)
 					systemInfo := s.getSystemInfoFn()
 					if maxRunners <= 0 {
 						// No user specified MaxRunners, so figure out what automatic setting to use for the next load attempt
 						if pending.opts.NumGPU == 0 {
 							// Need to get actual GPU list to set the correct default max models
+							logutil.Trace("refreshing GPU list", "model", pending.model.ModelPath)
 							g := s.getGpuFn(ctx, runnersSnapshot)
 							maxRunners = uint(defaultModelsPerGPU * max(len(g), 1))
 						} else {
@@ -190,13 +195,15 @@ func (s *Scheduler) processPending(ctx context.Context) {
 					}
 
 					// Load model for fitting
+					logutil.Trace("loading model metadata", "model", pending.model.ModelPath)
 					ggml, err := llm.LoadModel(pending.model.ModelPath, 1024)
 					if err != nil {
 						pending.errCh <- err
 						break
 					}
 
 					// Update free memory from currently loaded models
+					logutil.Trace("updating free space", "gpu_count", len(gpus), "model", pending.model.ModelPath)
 					s.updateFreeSpace(gpus)
 
 					if loadedCount == 0 {
@@ -208,7 +215,7 @@ func (s *Scheduler) processPending(ctx context.Context) {
 
 					// More than one loaded model, so we have to see if the
 					// new one fits
-
+					logutil.Trace("loading additional model", "model", pending.model.ModelPath)
 					needEvict := s.loadFn(pending, ggml, systemInfo, gpus, true)
 					if !needEvict {
 						slog.Debug("new model fits with existing models, loading")
Repository: vercel/next.js
Pull request: Use commit-based tarball URL in PR stats comment

The previous method of using the PR endpoint under the hood calls the GitHub API to get the commit SHA, which is a waste of resources, so just use the commit SHA directly in the tarball URL.

Changed files:
filename: .github/actions/next-stats-action/src/add-comment.js
patch: @@ -974,16 +974,13 @@ function generateDiffsSection(result) {
 }
 
 function generatePrTarballSection(actionInfo) {
-  if (actionInfo.isRelease || !actionInfo.issueId) return ''
-
-  const prNumber = String(actionInfo.issueId).trim()
-  if (!/^\d+$/.test(prNumber)) return ''
+  if (actionInfo.isRelease || !actionInfo.githubHeadSha) return ''
 
   return `<details>
 <summary><strong>📎 Tarball URL</strong></summary>
 
 \`\`\`
-next@https://vercel-packages.vercel.app/next/prs/${prNumber}/next
+https://vercel-packages.vercel.app/next/commits/${actionInfo.githubHeadSha}/next
 \`\`\`
 
 </details>

filename: .github/actions/next-stats-action/src/prepare/action-info.js
patch: @@ -8,6 +8,7 @@ module.exports = function actionInfo() {
     ISSUE_ID,
     SKIP_CLONE,
     GITHUB_REF,
+    GITHUB_SHA,
     LOCAL_STATS,
     GIT_ROOT_DIR,
     GITHUB_ACTION,
@@ -55,6 +56,9 @@ module.exports = function actionInfo() {
     prRef: GITHUB_REF,
     isLocal: LOCAL_STATS,
     commitId: null,
+    // Mirrors github.event.after || github.sha used by build_and_deploy.yml
+    // to ensure the tarball URL matches the deployed artifact.
+    githubHeadSha: GITHUB_SHA || null,
     issueId: ISSUE_ID,
     isRelease:
       GITHUB_REPOSITORY === 'vercel/next.js' &&
@@ -70,6 +74,10 @@ module.exports = function actionInfo() {
     const event = require(GITHUB_EVENT_PATH)
     info.actionName = event.action || info.actionName
 
+    if (event.after) {
+      info.githubHeadSha = event.after
+    }
+
     if (releaseTypes.has(info.actionName)) {
       info.isRelease = true
     } else {
Repository: rust-lang/rust
Pull request: doc: linker-plugin-based LTO: update list of good combinations

This PR is similar to https://github.com/rust-lang/rust/pull/146827 . I just ran the Python script as was [recommended](https://github.com/rust-lang/rust/pull/146827#pullrequestreview-3255349459) in this comment. Also updated the LOWER_BOUND in the script to skip a bit redundant work in the Python script.

@nnethercote pinging you as a reviewer here since the last time you did it too ;)

Changed files:
filename: src/doc/rustc/src/linker-plugin-lto.md
patch: @@ -194,7 +194,7 @@ def minor_version(version):
 INSTALL_TOOLCHAIN = ["rustup", "toolchain", "install", "--profile", "minimal"]
 subprocess.run(INSTALL_TOOLCHAIN + ["nightly"])
 
-LOWER_BOUND = 87
+LOWER_BOUND = 91
 NIGHTLY_VERSION = minor_version(subprocess.run(
     ["rustc", "+nightly", "--version"],
     capture_output=True,
@@ -256,6 +256,6 @@ The following table shows known good combinations of toolchain versions.
 | 1.78 - 1.81  |      18       |
 | 1.82 - 1.86  |      19       |
 | 1.87 - 1.90  |      20       |
-| 1.91 - 1.93  |      21       |
+| 1.91 - 1.94  |      21       |
 
 Note that the compatibility policy for this feature might change in the future.
Repository: electron/electron
Pull request: fix: bind offscreen paint callback to child `WebContents`

Backport of #49998

See that PR for details.


Notes: none

Changed files:
filename: shell/browser/api/electron_api_web_contents.cc
patch: @@ -1240,10 +1240,11 @@ void WebContents::MaybeOverrideCreateParamsForNewWindow(
          dict.Get(options::kOffscreen, &is_offscreen) && is_offscreen);
 
     if (is_offscreen) {
+      // Use a no-op callback here. The real OnPaint callback will be bound
+      // to the child WebContents in AddNewContents via SetCallback().
       auto* view = new OffScreenWebContentsView(
           false, offscreen_use_shared_texture_,
-          offscreen_shared_texture_pixel_format_,
-          base::BindRepeating(&WebContents::OnPaint, base::Unretained(this)));
+          offscreen_shared_texture_pixel_format_, base::DoNothing());
       create_params->view = view;
       create_params->delegate_view = view;
     }
@@ -1271,6 +1272,15 @@ content::WebContents* WebContents::AddNewContents(
   v8::HandleScope handle_scope(isolate);
   auto api_web_contents = CreateAndTake(isolate, std::move(new_contents), type);
 
+  // Rebind the paint callback to the child WebContents. The
+  // OffScreenWebContentsView was initially created with the parent's OnPaint
+  // in MaybeOverrideCreateParamsForNewWindow, but the paint data
+  // belongs to the child.
+  if (auto* osr_view = api_web_contents->GetOffScreenWebContentsView()) {
+    osr_view->SetCallback(base::BindRepeating(&WebContents::OnPaint,
+                                              api_web_contents->GetWeakPtr()));
+  }
+
   // We call RenderFrameCreated here as at this point the empty "about:blank"
   // render frame has already been created.  If the window never navigates again
   // RenderFrameCreated won't be called and certain prefs like

filename: shell/browser/osr/osr_web_contents_view.cc
patch: @@ -45,6 +45,10 @@ void OffScreenWebContentsView::SetWebContents(
     view->InstallTransparency();
 }
 
+void OffScreenWebContentsView::SetCallback(const OnPaintCallback& callback) {
+  callback_ = callback;
+}
+
 void OffScreenWebContentsView::SetNativeWindow(NativeWindow* window) {
   if (native_window_)
     native_window_->RemoveObserver(this);

filename: shell/browser/osr/osr_web_contents_view.h
patch: @@ -43,6 +43,7 @@ class OffScreenWebContentsView : public content::WebContentsView,
 
   void SetWebContents(content::WebContents*);
   void SetNativeWindow(NativeWindow* window);
+  void SetCallback(const OnPaintCallback& callback);
 
   // NativeWindowObserver:
   void OnWindowResize() override;
Repository: nodejs/node
Pull request: tools: add read permission to workflows that read contents

Not having this permission is OK because the repo is public, but on private forks (e.g. the one where security releases are getting prepared), it fails at the checkout step.

<!--
Before submitting a pull request, please read:

- the CONTRIBUTING guide at https://github.com/nodejs/node/blob/HEAD/CONTRIBUTING.md
- the commit message formatting guidelines at
  https://github.com/nodejs/node/blob/HEAD/doc/contributing/pull-requests.md#commit-message-guidelines

For code changes:
1. Include tests for any bug fixes or new features.
2. Update documentation if relevant.
3. Ensure that `make -j4 test` (UNIX), or `vcbuild test` (Windows) passes.

If you believe this PR should be highlighted in the Node.js CHANGELOG
please add the `notable-change` label.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.
-->


Changed files:
filename: .github/workflows/lint-release-proposal.yml
patch: @@ -20,6 +20,7 @@ jobs:
   lint-release-commit:
     runs-on: ubuntu-latest
     permissions:
+      contents: read
       pull-requests: read
     steps:
       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2

filename: .github/workflows/notify-on-push.yml
patch: @@ -32,6 +32,7 @@ jobs:
     if: github.repository == 'nodejs/node'
     runs-on: ubuntu-latest
     permissions:
+      contents: read
       pull-requests: write
     steps:
       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2