helloadhavan/github_issues huggingface dataset:
Repository: vuejs/vue
Pull request: fix(ssr): fix double escaping of staticClass values (fix #7859)

<!--
Please make sure to read the Pull Request Guidelines:
https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#pull-request-guidelines
-->

This fixes a double escaping of literal class values in the SSR optimizing compiler by unescaping the value in `genClassSegments`.

This bugfix is very similar to https://github.com/vuejs/vue/pull/7224. Literal class values get escaped twice during [`transformNode`](https://github.com/vuejs/vue/blob/79c0d7bcfbcd1ac492e7ceb77f5024d09efdc6b3/src/platforms/web/compiler/modules/class.js#L25) and [`flattenSegments`](https://github.com/vuejs/vue/blob/79c0d7bcfbcd1ac492e7ceb77f5024d09efdc6b3/src/server/optimizing-compiler/codegen.js#L240), causing the double escape.

fix #7859 


<!-- PULL REQUEST TEMPLATE -->
<!-- (Update "[ ]" to "[x]" to check a box) -->

**What kind of change does this PR introduce?** (check at least one)

- [x] Bugfix
- [ ] Feature
- [ ] Code style update
- [ ] Refactor
- [ ] Build-related changes
- [ ] Other, please describe:

**Does this PR introduce a breaking change?** (check one)

- [ ] Yes
- [x] No

If yes, please describe the impact and migration path for existing applications:

**The PR fulfills these requirements:**

- [x] It's submitted to the `dev` branch for v2.x (or to a previous version branch), _not_ the `master` branch
- [x] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number)
- [x] All tests are passing: https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#development-setup
- [x] New/updated tests are included

If adding a **new feature**, the PR's description includes:
- [ ] A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

**Other information:**


Changed files:
filename: src/server/optimizing-compiler/modules.js
patch: @@ -92,7 +92,7 @@ export function genClassSegments (
   classBinding: ?string
 ): Array<StringSegment> {
   if (staticClass && !classBinding) {
-    return [{ type: RAW, value: ` class=${staticClass}` }]
+    return [{ type: RAW, value: ` class="${JSON.parse(staticClass)}"` }]
   } else {
     return [{
       type: EXPRESSION,

filename: test/ssr/ssr-string.spec.js
patch: @@ -1245,6 +1245,20 @@ describe('SSR: renderToString', () => {
     })
   })
 
+  // #7859
+  it('should not double escape class values', done => {
+    renderVmWithOptions({
+      template: `
+      <div>
+        <div class="a\nb"></div>
+      </div>
+      `
+    }, result => {
+      expect(result).toContain(`<div class="a\nb"></div>`)
+      done()
+    })
+  })
+
   it('should expose ssr helpers on functional context', done => {
     let called = false
     renderVmWithOptions({
Repository: vercel/next.js
Pull request: Turbopack: use mimalloc on Linux musl

Closes #88174

With musl (i.e. Alpine), the system memory allocator can cause catastrophic slowdowns
- https://medium.com/p/stop-using-alpine-images-b51d12b0fde2
- https://nickb.dev/blog/default-musl-allocator-considered-harmful-to-performance/

We were seeing it cause a 10x slowdown, simply using mimalloc fixes this.

<img width="612" height="1091" alt="Bildschirmfoto 2026-01-12 um 15 00 29" src="https://github.com/user-attachments/assets/8de6dea3-012b-4c73-94e3-284d478bd7ef" />

<img width="1888" height="687" alt="Bildschirmfoto 2026-01-12 um 15 35 15" src="https://github.com/user-attachments/assets/d594d3ef-ae9b-468a-b022-032f1cf967e1" />


Changed files:
filename: turbopack/crates/turbo-tasks-malloc/Cargo.toml
patch: @@ -12,13 +12,13 @@ bench = false
 [dependencies]
 
 
-[target.'cfg(not(any(target_os = "linux", target_family = "wasm", target_env = "musl")))'.dependencies]
+[target.'cfg(not(any(target_os = "linux", target_family = "wasm")))'.dependencies]
 mimalloc = { version = "0.1.48", features = [
   "v3",
   "extended",
 ], optional = true }
 
-[target.'cfg(all(target_os = "linux", not(any(target_family = "wasm", target_env = "musl"))))'.dependencies]
+[target.'cfg(all(target_os = "linux", not(target_family = "wasm")))'.dependencies]
 mimalloc = { version = "0.1.48", features = [
   "v3",
   "extended",

filename: turbopack/crates/turbo-tasks-malloc/src/lib.rs
patch: @@ -114,29 +114,17 @@ impl TurboMalloc {
 /// Get the allocator for this platform that we should wrap with TurboMalloc.
 #[inline]
 fn base_alloc() -> &'static impl GlobalAlloc {
-    #[cfg(all(
-        feature = "custom_allocator",
-        not(any(target_family = "wasm", target_env = "musl"))
-    ))]
+    #[cfg(all(feature = "custom_allocator", not(target_family = "wasm")))]
     return &mimalloc::MiMalloc;
-    #[cfg(any(
-        not(feature = "custom_allocator"),
-        any(target_family = "wasm", target_env = "musl")
-    ))]
+    #[cfg(not(all(feature = "custom_allocator", not(target_family = "wasm"))))]
     return &std::alloc::System;
 }
 
 #[allow(unused_variables)]
 unsafe fn base_alloc_size(ptr: *const u8, layout: Layout) -> usize {
-    #[cfg(all(
-        feature = "custom_allocator",
-        not(any(target_family = "wasm", target_env = "musl"))
-    ))]
+    #[cfg(all(feature = "custom_allocator", not(target_family = "wasm")))]
     return unsafe { mimalloc::MiMalloc.usable_size(ptr) };
-    #[cfg(any(
-        not(feature = "custom_allocator"),
-        any(target_family = "wasm", target_env = "musl")
-    ))]
+    #[cfg(not(all(feature = "custom_allocator", not(target_family = "wasm"))))]
     return layout.size();
 }
Repository: ggml-org/llama.cpp
Pull request: vulkan: Fix data races in coopmat1 mul_mat(_id)

Add barriers between coopmat store and regular loads. We sort of got away with this because it was the same subgroup accessing the values, but it's still a race and may not work.

I added shared memory data race detection for coopmat1 (https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/11780) and this fixes the issues it found. No performance regressions on my system.

Changed files:
filename: ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp
patch: @@ -377,6 +377,7 @@ void main() {
         [[unroll]] for (uint cm_col = 0; cm_col < cms_per_col; cm_col++) {
             coopMatStore(sums[cm_col * cms_per_row + cm_row], coopmat_stage, warp_i * TM * TN, TM, gl_CooperativeMatrixLayoutColumnMajor);
 
+            barrier();
             [[unroll]] for (uint col = 0; col < TN; col += storestride) {
                 const uint row_i = dc + cm_col * TN + col + store_c;
                 if (row_i >= _ne1) break;
@@ -387,6 +388,7 @@ void main() {
                     data_d[row_idx.y * p.batch_stride_d + row_idx.x * p.stride_d + dr + cm_row * TM + store_r] = D_TYPE(coopmat_stage[warp_i * TM * TN + (col + store_c) * TM + store_r]);
                 }
             }
+            barrier();
         }
     }
 #else
@@ -404,18 +406,22 @@ void main() {
                 // Full coopMat is within bounds, but stride_d is not aligned
                 coopMatStore(sums[cm_col * cms_per_row + cm_row], coopmat_stage, warp_i * TM * TN, TM, gl_CooperativeMatrixLayoutColumnMajor);
 
+                controlBarrier(gl_ScopeSubgroup, gl_ScopeSubgroup, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease);
                 [[unroll]] for (uint col = 0; col < TN; col += storestride) {
                     data_d[offsets + (dc + cm_col * TN + col + store_c) * p.stride_d + dr + cm_row * TM + store_r] = D_TYPE(coopmat_stage[warp_i * TM * TN + (col + store_c) * TM + store_r]);
                 }
+                controlBarrier(gl_ScopeSubgroup, gl_ScopeSubgroup, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease);
             } else if (dr + cm_row * TM < p.M && dc + cm_col * TN < p.N) {
                 // Partial coopMat is within bounds
                 coopMatStore(sums[cm_col * cms_per_row + cm_row], coopmat_stage, warp_i * TM * TN, TM, gl_CooperativeMatrixLayoutColumnMajor);
 
+                controlBarrier(gl_ScopeSubgroup, gl_ScopeSubgroup, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease);
                 [[unroll]] for (uint col = 0; col < TN; col += storestride) {
                     if (dr + cm_row * TM + store_r < p.M && dc + cm_col * TN + col + store_c < p.N) {
                         data_d[offsets + (dc + cm_col * TN + col + store_c) * p.stride_d + dr + cm_row * TM + store_r] = D_TYPE(coopmat_stage[warp_i * TM * TN + (col + store_c) * TM + store_r]);
                     }
                 }
+                controlBarrier(gl_ScopeSubgroup, gl_ScopeSubgroup, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease);
             }
         }
     }
Repository: ollama/ollama
Pull request: ci: set owner/group in tarball

set owner and group to 0 when building the linux tarball so extracted files are consistent. this is the behaviour of release tarballs in version 0.5.7 and lower

Changed files:
filename: .github/workflows/release.yaml
patch: @@ -329,7 +329,9 @@ jobs:
           done
         working-directory: dist/${{ matrix.os }}-${{ matrix.arch }}
       - run: |
-          for ARCHIVE in dist/${{ matrix.os }}-${{ matrix.arch }}/*.tar.in; do tar c -C dist/${{ matrix.os }}-${{ matrix.arch }} -T $ARCHIVE | pigz -9vc >$(basename ${ARCHIVE//.*/}.tgz); done
+          for ARCHIVE in dist/${{ matrix.os }}-${{ matrix.arch }}/*.tar.in; do
+            tar c -C dist/${{ matrix.os }}-${{ matrix.arch }} -T $ARCHIVE --owner 0 --group 0 | pigz -9vc >$(basename ${ARCHIVE//.*/}.tgz);
+          done
       - uses: actions/upload-artifact@v4
         with:
           name: dist-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.target }}
Repository: huggingface/transformers
Pull request: [`Ernie 4.5 VL Moe`] Post merge adjustments

As per title, relevant PRs
- #42088
- #42697

Note that `grouped_mm` in moe leads to small fluctuations making the integration tests flaky

Changed files:
filename: src/transformers/models/ernie4_5_vl_moe/modeling_ernie4_5_vl_moe.py
patch: @@ -1705,6 +1705,8 @@ def prepare_inputs_for_generation(
         past_key_values=None,
         image_grid_thw=None,
         video_grid_thw=None,
+        use_cache=True,
+        is_first_iteration=False,
         # Intentionally ignore position ids to force custom cache logic
         position_ids=None,
         **kwargs,
@@ -1717,6 +1719,8 @@ def prepare_inputs_for_generation(
             past_key_values=past_key_values,
             image_grid_thw=image_grid_thw,
             video_grid_thw=video_grid_thw,
+            use_cache=use_cache,
+            is_first_iteration=is_first_iteration,
             **kwargs,
         )
 
@@ -1732,7 +1736,7 @@ def prepare_inputs_for_generation(
             mm_token_type_ids=model_inputs.get("mm_token_type_ids"),
         )
 
-        if model_inputs["cache_position"][0] != 0:
+        if not is_first_iteration and use_cache:
             model_inputs["pixel_values"] = None
             model_inputs["pixel_values_videos"] = None
             model_inputs["mm_token_type_ids"] = None

filename: src/transformers/models/ernie4_5_vl_moe/modular_ernie4_5_vl_moe.py
patch: @@ -1393,6 +1393,8 @@ def prepare_inputs_for_generation(
         past_key_values=None,
         image_grid_thw=None,
         video_grid_thw=None,
+        use_cache=True,
+        is_first_iteration=False,
         # Intentionally ignore position ids to force custom cache logic
         position_ids=None,
         **kwargs,
@@ -1405,6 +1407,8 @@ def prepare_inputs_for_generation(
             past_key_values=past_key_values,
             image_grid_thw=image_grid_thw,
             video_grid_thw=video_grid_thw,
+            use_cache=use_cache,
+            is_first_iteration=is_first_iteration,
             **kwargs,
         )
 
@@ -1420,7 +1424,7 @@ def prepare_inputs_for_generation(
             mm_token_type_ids=model_inputs.get("mm_token_type_ids"),
         )
 
-        if model_inputs["cache_position"][0] != 0:
+        if not is_first_iteration and use_cache:
             model_inputs["pixel_values"] = None
             model_inputs["pixel_values_videos"] = None
             model_inputs["mm_token_type_ids"] = None

filename: tests/models/ernie4_5_vl_moe/test_modeling_ernie4_5_vl_moe.py
patch: @@ -313,6 +313,7 @@ def load_model(self, dtype, attn_implementation="sdpa"):
             device_map="auto",
             dtype=dtype,
             attn_implementation=attn_implementation,
+            experts_implementation="eager",
             revision="refs/pr/10",
         )
 
@@ -549,6 +550,7 @@ def load_model(self, dtype, attn_implementation="sdpa"):
             device_map="auto",
             dtype=dtype,
             attn_implementation=attn_implementation,
+            experts_implementation="eager",
         )
 
     def test_small_model_integration_test(self):
Repository: ggml-org/llama.cpp
Pull request: ggml-cuda: disable gdn for musa


Changed files:
filename: ggml/src/ggml-cuda/ggml-cuda.cu
patch: @@ -4992,9 +4992,15 @@ static bool ggml_backend_cuda_device_supports_op(ggml_backend_dev_t dev, const g
         case GGML_OP_LEAKY_RELU:
         case GGML_OP_RWKV_WKV6:
         case GGML_OP_GATED_LINEAR_ATTN:
-        case GGML_OP_GATED_DELTA_NET:
         case GGML_OP_RWKV_WKV7:
             return true;
+        case GGML_OP_GATED_DELTA_NET:
+            //TODO: enable once MUSA compiler is solved https://github.com/ggml-org/llama.cpp/pull/19504#issuecomment-4018634327
+#ifdef GGML_USE_MUSA
+            return false;
+#else
+            return true;
+#endif // GGML_USE_MUSA
         case GGML_OP_FLASH_ATTN_EXT:
             return ggml_cuda_flash_attn_ext_supported(dev_ctx->device, op);
         case GGML_OP_CROSS_ENTROPY_LOSS:
Repository: huggingface/transformers
Pull request: [`GPT OSS`] Fix false flag

#42736 removed flex attn support but it turns out that #41083 added support for it in flex attention. There were typos that indicated wrong support for attn flavors, sorry about that should've noticed it / checked it properly.

So gpt oss does not support sdpa but everything else (limited FA support to the specific kernel).

Changed files:
filename: src/transformers/models/gpt_oss/modeling_gpt_oss.py
patch: @@ -434,7 +434,7 @@ class GptOssPreTrainedModel(PreTrainedModel):
     _skip_keys_device_placement = ["past_key_values"]
     _supports_flash_attn = True
     _supports_sdpa = False
-    _supports_flex_attn = False
+    _supports_flex_attn = True
 
     _can_compile_fullgraph = True
     _supports_attention_backend = True

filename: src/transformers/models/gpt_oss/modular_gpt_oss.py
patch: @@ -354,7 +354,6 @@ def forward(
 class GptOssPreTrainedModel(LlamaPreTrainedModel):
     _keep_in_fp32_modules = ["post_attention_layernorm", "input_layernorm", "norm"]
     _supports_sdpa = False
-    _supports_flex_attn = False
     _can_record_outputs = {
         "router_logits": OutputRecorder(GptOssTopKRouter, index=0),
         "hidden_states": GptOssDecoderLayer,
Repository: vuejs/vue
Pull request: Adding to backers

I am a bronze backer since today, just adding my info to the proper place.

<!--
Please make sure to read the Pull Request Guidelines:
https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#pull-request-guidelines
-->

<!-- PULL REQUEST TEMPLATE -->
<!-- (Update "[ ]" to "[x]" to check a box) -->

**What kind of change does this PR introduce?** (check at least one)

- [ ] Bugfix
- [ ] Feature
- [ ] Code style update
- [ ] Refactor
- [ ] Build-related changes
- [ ] Other, please describe:

**Does this PR introduce a breaking change?** (check one)

- [ ] Yes
- [ ] No

If yes, please describe the impact and migration path for existing applications:

**The PR fulfills these requirements:**

- [ ] It's submitted to the `dev` branch for v2.x (or to a previous version branch), _not_ the `master` branch
- [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number)
- [ ] All tests are passing: https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#development-setup
- [ ] New/updated tests are included

If adding a **new feature**, the PR's description includes:
- [ ] A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

**Other information:**


Changed files:
filename: BACKERS.md
patch: @@ -252,6 +252,11 @@ Funds donated via Patreon go directly to support Evan You's full-time work on Vu
           <img width="148px" src="https://i.imgur.com/qX0SNa7.png">
         </a>
       </td>
+      <td align="center" valign="middle">
+        <a href="https://polyglotengineer.com/derek.pollard" target="_blank">
+          <img width="148px" src="https://polyglotengineer.com/DP.png">
+        </a>
+      </td>
     </tr>
   </tbody>
 </table>
Repository: ggml-org/llama.cpp
Pull request: models : fix assert in mamba2 graph

cont #19802 
fix #20268

This fixes the model loading, but the reasoning parsing seems to be broken because the post-reasoning contents are not being displayed in the WebUI:

<img width="887" height="1205" alt="image" src="https://github.com/user-attachments/assets/bc8a0725-8ad4-4fb0-969f-2bdac8649494" />

cc @pwilkin 

Changed files:
filename: src/models/mamba-base.cpp
patch: @@ -155,7 +155,6 @@ ggml_tensor * llm_build_mamba_base::build_mamba2_layer(llm_graph_input_rs * inp,
 
     const auto kv_head = mctx_cur->get_head();
 
-    const int64_t n_embd   = hparams.n_embd;
     const int64_t d_conv   = hparams.ssm_d_conv;
     const int64_t d_inner  = hparams.ssm_d_inner;
     const int64_t d_state  = hparams.ssm_d_state;
@@ -170,7 +169,7 @@ ggml_tensor * llm_build_mamba_base::build_mamba2_layer(llm_graph_input_rs * inp,
     GGML_ASSERT(ubatch.equal_seqs());
     GGML_ASSERT(ubatch.n_tokens == n_seq_tokens * n_seqs);
     GGML_ASSERT(d_inner % n_head == 0);
-    GGML_ASSERT(d_inner % (n_group*n_embd) == 0);
+    GGML_ASSERT(d_inner % (n_group*d_state) == 0);
 
     ggml_tensor * conv_states_all = mctx_cur->get_r_l(il);
     ggml_tensor * ssm_states_all  = mctx_cur->get_s_l(il);
Repository: ollama/ollama
Pull request: llm_telegram_bot added to README.md

Another one telegram integration. Primary, for RP.
- buttons for changing characters, save history, change characters...
- buttons for regenerate phrase, impersonate, continue, return back through chat, impersonate generation.
- if you able to run stable diffusion - can generate a picture.
- change using model, parameters. ...e.t.c

Changed files:
filename: README.md
patch: @@ -548,6 +548,7 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [Alfred Ollama](https://github.com/zeitlings/alfred-ollama) (Alfred Workflow)
 - [TextLLaMA](https://github.com/adarshM84/TextLLaMA) A Chrome Extension that helps you write emails, correct grammar, and translate into any language
 - [Simple-Discord-AI](https://github.com/zyphixor/simple-discord-ai)
+- [LLM Telegram Bot](https://github.com/innightwolfsleep/llm_telegram_bot) (telegram bot, primary for RP. Oobabooga-like buttons, [A1111](https://github.com/AUTOMATIC1111/stable-diffusion-webui) API integration e.t.c)
 
 ### Supported backends
Repository: nodejs/node
Pull request: build: add --debug-symbols to build with -g without enabling DCHECKs

This is useful when debugging release builds on Linux without enabling DCHECKs.

<!--
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: configure.py
patch: @@ -107,6 +107,12 @@
     default=None,
     help='build the Node.js part of the binary with debugging symbols')
 
+parser.add_argument('--debug-symbols',
+    action='store_true',
+    dest='debug_symbols',
+    default=None,
+    help='add debugging symbols to release builds (adds -g without enabling DCHECKs)')
+
 parser.add_argument('--dest-cpu',
     action='store',
     dest='dest_cpu',
@@ -1560,6 +1566,9 @@ def configure_node(o):
   o['variables']['control_flow_guard'] = b(options.enable_cfg)
   o['variables']['node_use_amaro'] = b(not options.without_amaro)
   o['variables']['debug_node'] = b(options.debug_node)
+  o['variables']['debug_symbols'] = b(options.debug_symbols)
+  if options.debug_symbols:
+    o['cflags'] += ['-g']
   o['variables']['build_type%'] = 'Debug' if options.debug else 'Release'
   o['default_configuration'] = 'Debug' if options.debug else 'Release'
   if options.error_on_warn and options.suppress_all_error_on_warn:
Repository: ggml-org/llama.cpp
Pull request: server : add kill switch when server is stuck

ref https://github.com/ggml-org/llama.cpp/pull/20087#issuecomment-4021486697

Sometimes the server enters an infinite loop of empty batches. This change makes it easier to debug such cases.

Changed files:
filename: tools/server/server-context.cpp
patch: @@ -562,14 +562,15 @@ struct server_context_impl {
 
     llama_model_ptr model_dft;
 
-    bool add_bos_token  = true;
+    bool add_bos_token = true;
 
     int32_t n_ctx; // total context for all clients / slots
 
     // slots / clients
     std::vector<server_slot> slots;
 
     int slots_debug = 0;
+    int n_empty_consequtive = 0;
 
     std::unique_ptr<server_prompt_cache> prompt_cache;
 
@@ -2628,6 +2629,12 @@ struct server_context_impl {
 
         if (batch.n_tokens == 0) {
             SRV_WRN("%s", "no tokens to decode\n");
+
+            if (++n_empty_consequtive > 3) {
+                GGML_ABORT("fatal error - please provide logs and repro in %s\n", "https://github.com/ggml-org/llama.cpp/pull/20277");
+            }
+        } else {
+            n_empty_consequtive = 0;
         }
 
         int32_t i_next = 0;