@vue/runtime-core 3.4.22 → 3.4.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vue/runtime-core v3.4.22
2
+ * @vue/runtime-core v3.4.24
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -850,21 +850,21 @@ function renderComponentRoot(instance) {
850
850
  vnode,
851
851
  proxy,
852
852
  withProxy,
853
- props,
854
853
  propsOptions: [propsOptions],
855
854
  slots,
856
855
  attrs,
857
856
  emit,
858
857
  render,
859
858
  renderCache,
859
+ props,
860
860
  data,
861
861
  setupState,
862
862
  ctx,
863
863
  inheritAttrs
864
864
  } = instance;
865
+ const prev = setCurrentRenderingInstance(instance);
865
866
  let result;
866
867
  let fallthroughAttrs;
867
- const prev = setCurrentRenderingInstance(instance);
868
868
  {
869
869
  accessedAttrs = false;
870
870
  }
@@ -886,7 +886,7 @@ function renderComponentRoot(instance) {
886
886
  thisProxy,
887
887
  proxyToUse,
888
888
  renderCache,
889
- props,
889
+ true ? reactivity.shallowReadonly(props) : props,
890
890
  setupState,
891
891
  data,
892
892
  ctx
@@ -900,7 +900,7 @@ function renderComponentRoot(instance) {
900
900
  }
901
901
  result = normalizeVNode(
902
902
  render2.length > 1 ? render2(
903
- props,
903
+ true ? reactivity.shallowReadonly(props) : props,
904
904
  true ? {
905
905
  get attrs() {
906
906
  markAttrsAccessed();
@@ -910,9 +910,8 @@ function renderComponentRoot(instance) {
910
910
  emit
911
911
  } : { attrs, slots, emit }
912
912
  ) : render2(
913
- props,
913
+ true ? reactivity.shallowReadonly(props) : props,
914
914
  null
915
- /* we know it doesn't need it */
916
915
  )
917
916
  );
918
917
  fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);
@@ -2400,11 +2399,19 @@ function emptyPlaceholder(vnode) {
2400
2399
  }
2401
2400
  }
2402
2401
  function getKeepAliveChild(vnode) {
2403
- return isKeepAlive(vnode) ? (
2404
- // #7121 ensure get the child component subtree in case
2405
- // it's been replaced during HMR
2406
- vnode.component ? vnode.component.subTree : vnode.children ? vnode.children[0] : void 0
2407
- ) : vnode;
2402
+ if (!isKeepAlive(vnode)) {
2403
+ return vnode;
2404
+ }
2405
+ if (vnode.component) {
2406
+ return vnode.component.subTree;
2407
+ }
2408
+ const { shapeFlag, children } = vnode;
2409
+ if (shapeFlag & 16) {
2410
+ return children[0];
2411
+ }
2412
+ if (shapeFlag & 32 && shared.isFunction(children.default)) {
2413
+ return children.default();
2414
+ }
2408
2415
  }
2409
2416
  function setTransitionHooks(vnode, hooks) {
2410
2417
  if (vnode.shapeFlag & 6 && vnode.component) {
@@ -3084,7 +3091,7 @@ const PublicInstanceProxyHandlers = {
3084
3091
  let cssModule, globalProperties;
3085
3092
  if (publicGetter) {
3086
3093
  if (key === "$attrs") {
3087
- reactivity.track(instance, "get", key);
3094
+ reactivity.track(instance.attrs, "get", "");
3088
3095
  markAttrsAccessed();
3089
3096
  } else if (key === "$slots") {
3090
3097
  reactivity.track(instance, "get", key);
@@ -4009,10 +4016,13 @@ function hasInjectionContext() {
4009
4016
  return !!(currentInstance || currentRenderingInstance || currentApp);
4010
4017
  }
4011
4018
 
4012
- const attrsProto = {};
4019
+ const internalObjectProto = /* @__PURE__ */ Object.create(null);
4020
+ const createInternalObject = () => Object.create(internalObjectProto);
4021
+ const isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;
4022
+
4013
4023
  function initProps(instance, rawProps, isStateful, isSSR = false) {
4014
4024
  const props = {};
4015
- const attrs = Object.create(attrsProto);
4025
+ const attrs = createInternalObject();
4016
4026
  instance.propsDefaults = /* @__PURE__ */ Object.create(null);
4017
4027
  setFullProps(instance, rawProps, props, attrs);
4018
4028
  for (const key in instance.propsOptions[0]) {
@@ -4459,21 +4469,17 @@ const normalizeVNodeSlots = (instance, children) => {
4459
4469
  instance.slots.default = () => normalized;
4460
4470
  };
4461
4471
  const initSlots = (instance, children) => {
4472
+ const slots = instance.slots = createInternalObject();
4462
4473
  if (instance.vnode.shapeFlag & 32) {
4463
4474
  const type = children._;
4464
4475
  if (type) {
4465
- instance.slots = reactivity.toRaw(children);
4466
- shared.def(instance.slots, "_", type);
4476
+ shared.extend(slots, children);
4477
+ shared.def(slots, "_", type);
4467
4478
  } else {
4468
- normalizeObjectSlots(
4469
- children,
4470
- instance.slots = {});
4471
- }
4472
- } else {
4473
- instance.slots = {};
4474
- if (children) {
4475
- normalizeVNodeSlots(instance, children);
4479
+ normalizeObjectSlots(children, slots);
4476
4480
  }
4481
+ } else if (children) {
4482
+ normalizeVNodeSlots(instance, children);
4477
4483
  }
4478
4484
  };
4479
4485
  const updateSlots = (instance, children, optimized) => {
@@ -7213,7 +7219,7 @@ Component that was made reactive: `,
7213
7219
  function guardReactiveProps(props) {
7214
7220
  if (!props)
7215
7221
  return null;
7216
- return reactivity.isProxy(props) || Object.getPrototypeOf(props) === attrsProto ? shared.extend({}, props) : props;
7222
+ return reactivity.isProxy(props) || isInternalObject(props) ? shared.extend({}, props) : props;
7217
7223
  }
7218
7224
  function cloneVNode(vnode, extraProps, mergeRef = false) {
7219
7225
  const { props, ref, patchFlag, children } = vnode;
@@ -7318,7 +7324,7 @@ function normalizeChildren(vnode, children) {
7318
7324
  } else {
7319
7325
  type = 32;
7320
7326
  const slotFlag = children._;
7321
- if (!slotFlag) {
7327
+ if (!slotFlag && !isInternalObject(children)) {
7322
7328
  children._ctx = currentRenderingInstance;
7323
7329
  } else if (slotFlag === 3 && currentRenderingInstance) {
7324
7330
  if (currentRenderingInstance.slots._ === 1) {
@@ -8084,7 +8090,7 @@ function isMemoSame(cached, memo) {
8084
8090
  return true;
8085
8091
  }
8086
8092
 
8087
- const version = "3.4.22";
8093
+ const version = "3.4.24";
8088
8094
  const warn = warn$1 ;
8089
8095
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
8090
8096
  const devtools = devtools$1 ;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vue/runtime-core v3.4.22
2
+ * @vue/runtime-core v3.4.24
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -421,21 +421,21 @@ function renderComponentRoot(instance) {
421
421
  vnode,
422
422
  proxy,
423
423
  withProxy,
424
- props,
425
424
  propsOptions: [propsOptions],
426
425
  slots,
427
426
  attrs,
428
427
  emit,
429
428
  render,
430
429
  renderCache,
430
+ props,
431
431
  data,
432
432
  setupState,
433
433
  ctx,
434
434
  inheritAttrs
435
435
  } = instance;
436
+ const prev = setCurrentRenderingInstance(instance);
436
437
  let result;
437
438
  let fallthroughAttrs;
438
- const prev = setCurrentRenderingInstance(instance);
439
439
  try {
440
440
  if (vnode.shapeFlag & 4) {
441
441
  const proxyToUse = withProxy || proxy;
@@ -454,7 +454,7 @@ function renderComponentRoot(instance) {
454
454
  thisProxy,
455
455
  proxyToUse,
456
456
  renderCache,
457
- props,
457
+ false ? shallowReadonly(props) : props,
458
458
  setupState,
459
459
  data,
460
460
  ctx
@@ -466,7 +466,7 @@ function renderComponentRoot(instance) {
466
466
  if (false) ;
467
467
  result = normalizeVNode(
468
468
  render2.length > 1 ? render2(
469
- props,
469
+ false ? shallowReadonly(props) : props,
470
470
  false ? {
471
471
  get attrs() {
472
472
  markAttrsAccessed();
@@ -476,9 +476,8 @@ function renderComponentRoot(instance) {
476
476
  emit
477
477
  } : { attrs, slots, emit }
478
478
  ) : render2(
479
- props,
479
+ false ? shallowReadonly(props) : props,
480
480
  null
481
- /* we know it doesn't need it */
482
481
  )
483
482
  );
484
483
  fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);
@@ -1792,11 +1791,16 @@ function emptyPlaceholder(vnode) {
1792
1791
  }
1793
1792
  }
1794
1793
  function getKeepAliveChild(vnode) {
1795
- return isKeepAlive(vnode) ? (
1796
- // #7121 ensure get the child component subtree in case
1797
- // it's been replaced during HMR
1798
- vnode.children ? vnode.children[0] : void 0
1799
- ) : vnode;
1794
+ if (!isKeepAlive(vnode)) {
1795
+ return vnode;
1796
+ }
1797
+ const { shapeFlag, children } = vnode;
1798
+ if (shapeFlag & 16) {
1799
+ return children[0];
1800
+ }
1801
+ if (shapeFlag & 32 && shared.isFunction(children.default)) {
1802
+ return children.default();
1803
+ }
1800
1804
  }
1801
1805
  function setTransitionHooks(vnode, hooks) {
1802
1806
  if (vnode.shapeFlag & 6 && vnode.component) {
@@ -2434,7 +2438,7 @@ const PublicInstanceProxyHandlers = {
2434
2438
  let cssModule, globalProperties;
2435
2439
  if (publicGetter) {
2436
2440
  if (key === "$attrs") {
2437
- reactivity.track(instance, "get", key);
2441
+ reactivity.track(instance.attrs, "get", "");
2438
2442
  }
2439
2443
  return publicGetter(instance);
2440
2444
  } else if (
@@ -3075,10 +3079,13 @@ function hasInjectionContext() {
3075
3079
  return !!(currentInstance || currentRenderingInstance || currentApp);
3076
3080
  }
3077
3081
 
3078
- const attrsProto = {};
3082
+ const internalObjectProto = /* @__PURE__ */ Object.create(null);
3083
+ const createInternalObject = () => Object.create(internalObjectProto);
3084
+ const isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;
3085
+
3079
3086
  function initProps(instance, rawProps, isStateful, isSSR = false) {
3080
3087
  const props = {};
3081
- const attrs = Object.create(attrsProto);
3088
+ const attrs = createInternalObject();
3082
3089
  instance.propsDefaults = /* @__PURE__ */ Object.create(null);
3083
3090
  setFullProps(instance, rawProps, props, attrs);
3084
3091
  for (const key in instance.propsOptions[0]) {
@@ -3387,21 +3394,17 @@ const normalizeVNodeSlots = (instance, children) => {
3387
3394
  instance.slots.default = () => normalized;
3388
3395
  };
3389
3396
  const initSlots = (instance, children) => {
3397
+ const slots = instance.slots = createInternalObject();
3390
3398
  if (instance.vnode.shapeFlag & 32) {
3391
3399
  const type = children._;
3392
3400
  if (type) {
3393
- instance.slots = reactivity.toRaw(children);
3394
- shared.def(instance.slots, "_", type);
3401
+ shared.extend(slots, children);
3402
+ shared.def(slots, "_", type);
3395
3403
  } else {
3396
- normalizeObjectSlots(
3397
- children,
3398
- instance.slots = {});
3399
- }
3400
- } else {
3401
- instance.slots = {};
3402
- if (children) {
3403
- normalizeVNodeSlots(instance, children);
3404
+ normalizeObjectSlots(children, slots);
3404
3405
  }
3406
+ } else if (children) {
3407
+ normalizeVNodeSlots(instance, children);
3405
3408
  }
3406
3409
  };
3407
3410
  const updateSlots = (instance, children, optimized) => {
@@ -5733,7 +5736,7 @@ function _createVNode(type, props = null, children = null, patchFlag = 0, dynami
5733
5736
  function guardReactiveProps(props) {
5734
5737
  if (!props)
5735
5738
  return null;
5736
- return reactivity.isProxy(props) || Object.getPrototypeOf(props) === attrsProto ? shared.extend({}, props) : props;
5739
+ return reactivity.isProxy(props) || isInternalObject(props) ? shared.extend({}, props) : props;
5737
5740
  }
5738
5741
  function cloneVNode(vnode, extraProps, mergeRef = false) {
5739
5742
  const { props, ref, patchFlag, children } = vnode;
@@ -5831,7 +5834,7 @@ function normalizeChildren(vnode, children) {
5831
5834
  } else {
5832
5835
  type = 32;
5833
5836
  const slotFlag = children._;
5834
- if (!slotFlag) {
5837
+ if (!slotFlag && !isInternalObject(children)) {
5835
5838
  children._ctx = currentRenderingInstance;
5836
5839
  } else if (slotFlag === 3 && currentRenderingInstance) {
5837
5840
  if (currentRenderingInstance.slots._ === 1) {
@@ -6275,7 +6278,7 @@ function isMemoSame(cached, memo) {
6275
6278
  return true;
6276
6279
  }
6277
6280
 
6278
- const version = "3.4.22";
6281
+ const version = "3.4.24";
6279
6282
  const warn$1 = shared.NOOP;
6280
6283
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
6281
6284
  const devtools = void 0;
@@ -1,9 +1,9 @@
1
1
  /**
2
- * @vue/runtime-core v3.4.22
2
+ * @vue/runtime-core v3.4.24
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
6
- import { pauseTracking, resetTracking, isRef, toRaw, isShallow, isReactive, ReactiveEffect, getCurrentScope, ref, shallowReadonly, track, reactive, shallowReactive, trigger, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1, customRef, isReadonly } from '@vue/reactivity';
6
+ import { pauseTracking, resetTracking, isRef, toRaw, shallowReadonly, isShallow, isReactive, ReactiveEffect, getCurrentScope, ref, track, reactive, shallowReactive, trigger, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1, customRef, isReadonly } from '@vue/reactivity';
7
7
  export { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';
8
8
  import { isString, isFunction, isPromise, isArray, NOOP, getGlobalThis, extend, EMPTY_OBJ, toHandlerKey, looseToNumber, hyphenate, camelize, isObject, isOn, hasOwn, isModelListener, capitalize, toNumber, hasChanged, remove, isSet, isMap, isPlainObject, isBuiltInDirective, invokeArrayFns, isRegExp, isGloballyAllowed, NO, isReservedProp, EMPTY_ARR, toRawType, makeMap, def, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue } from '@vue/shared';
9
9
  export { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';
@@ -852,21 +852,21 @@ function renderComponentRoot(instance) {
852
852
  vnode,
853
853
  proxy,
854
854
  withProxy,
855
- props,
856
855
  propsOptions: [propsOptions],
857
856
  slots,
858
857
  attrs,
859
858
  emit,
860
859
  render,
861
860
  renderCache,
861
+ props,
862
862
  data,
863
863
  setupState,
864
864
  ctx,
865
865
  inheritAttrs
866
866
  } = instance;
867
+ const prev = setCurrentRenderingInstance(instance);
867
868
  let result;
868
869
  let fallthroughAttrs;
869
- const prev = setCurrentRenderingInstance(instance);
870
870
  if (!!(process.env.NODE_ENV !== "production")) {
871
871
  accessedAttrs = false;
872
872
  }
@@ -888,7 +888,7 @@ function renderComponentRoot(instance) {
888
888
  thisProxy,
889
889
  proxyToUse,
890
890
  renderCache,
891
- props,
891
+ !!(process.env.NODE_ENV !== "production") ? shallowReadonly(props) : props,
892
892
  setupState,
893
893
  data,
894
894
  ctx
@@ -902,7 +902,7 @@ function renderComponentRoot(instance) {
902
902
  }
903
903
  result = normalizeVNode(
904
904
  render2.length > 1 ? render2(
905
- props,
905
+ !!(process.env.NODE_ENV !== "production") ? shallowReadonly(props) : props,
906
906
  !!(process.env.NODE_ENV !== "production") ? {
907
907
  get attrs() {
908
908
  markAttrsAccessed();
@@ -912,9 +912,8 @@ function renderComponentRoot(instance) {
912
912
  emit
913
913
  } : { attrs, slots, emit }
914
914
  ) : render2(
915
- props,
915
+ !!(process.env.NODE_ENV !== "production") ? shallowReadonly(props) : props,
916
916
  null
917
- /* we know it doesn't need it */
918
917
  )
919
918
  );
920
919
  fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);
@@ -2404,11 +2403,19 @@ function emptyPlaceholder(vnode) {
2404
2403
  }
2405
2404
  }
2406
2405
  function getKeepAliveChild(vnode) {
2407
- return isKeepAlive(vnode) ? (
2408
- // #7121 ensure get the child component subtree in case
2409
- // it's been replaced during HMR
2410
- !!(process.env.NODE_ENV !== "production") && vnode.component ? vnode.component.subTree : vnode.children ? vnode.children[0] : void 0
2411
- ) : vnode;
2406
+ if (!isKeepAlive(vnode)) {
2407
+ return vnode;
2408
+ }
2409
+ if (!!(process.env.NODE_ENV !== "production") && vnode.component) {
2410
+ return vnode.component.subTree;
2411
+ }
2412
+ const { shapeFlag, children } = vnode;
2413
+ if (shapeFlag & 16) {
2414
+ return children[0];
2415
+ }
2416
+ if (shapeFlag & 32 && isFunction(children.default)) {
2417
+ return children.default();
2418
+ }
2412
2419
  }
2413
2420
  function setTransitionHooks(vnode, hooks) {
2414
2421
  if (vnode.shapeFlag & 6 && vnode.component) {
@@ -3088,7 +3095,7 @@ const PublicInstanceProxyHandlers = {
3088
3095
  let cssModule, globalProperties;
3089
3096
  if (publicGetter) {
3090
3097
  if (key === "$attrs") {
3091
- track(instance, "get", key);
3098
+ track(instance.attrs, "get", "");
3092
3099
  !!(process.env.NODE_ENV !== "production") && markAttrsAccessed();
3093
3100
  } else if (!!(process.env.NODE_ENV !== "production") && key === "$slots") {
3094
3101
  track(instance, "get", key);
@@ -4017,10 +4024,13 @@ function hasInjectionContext() {
4017
4024
  return !!(currentInstance || currentRenderingInstance || currentApp);
4018
4025
  }
4019
4026
 
4020
- const attrsProto = {};
4027
+ const internalObjectProto = /* @__PURE__ */ Object.create(null);
4028
+ const createInternalObject = () => Object.create(internalObjectProto);
4029
+ const isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;
4030
+
4021
4031
  function initProps(instance, rawProps, isStateful, isSSR = false) {
4022
4032
  const props = {};
4023
- const attrs = Object.create(attrsProto);
4033
+ const attrs = createInternalObject();
4024
4034
  instance.propsDefaults = /* @__PURE__ */ Object.create(null);
4025
4035
  setFullProps(instance, rawProps, props, attrs);
4026
4036
  for (const key in instance.propsOptions[0]) {
@@ -4467,21 +4477,17 @@ const normalizeVNodeSlots = (instance, children) => {
4467
4477
  instance.slots.default = () => normalized;
4468
4478
  };
4469
4479
  const initSlots = (instance, children) => {
4480
+ const slots = instance.slots = createInternalObject();
4470
4481
  if (instance.vnode.shapeFlag & 32) {
4471
4482
  const type = children._;
4472
4483
  if (type) {
4473
- instance.slots = toRaw(children);
4474
- def(instance.slots, "_", type);
4484
+ extend(slots, children);
4485
+ def(slots, "_", type);
4475
4486
  } else {
4476
- normalizeObjectSlots(
4477
- children,
4478
- instance.slots = {});
4479
- }
4480
- } else {
4481
- instance.slots = {};
4482
- if (children) {
4483
- normalizeVNodeSlots(instance, children);
4487
+ normalizeObjectSlots(children, slots);
4484
4488
  }
4489
+ } else if (children) {
4490
+ normalizeVNodeSlots(instance, children);
4485
4491
  }
4486
4492
  };
4487
4493
  const updateSlots = (instance, children, optimized) => {
@@ -7269,7 +7275,7 @@ Component that was made reactive: `,
7269
7275
  function guardReactiveProps(props) {
7270
7276
  if (!props)
7271
7277
  return null;
7272
- return isProxy(props) || Object.getPrototypeOf(props) === attrsProto ? extend({}, props) : props;
7278
+ return isProxy(props) || isInternalObject(props) ? extend({}, props) : props;
7273
7279
  }
7274
7280
  function cloneVNode(vnode, extraProps, mergeRef = false) {
7275
7281
  const { props, ref, patchFlag, children } = vnode;
@@ -7374,7 +7380,7 @@ function normalizeChildren(vnode, children) {
7374
7380
  } else {
7375
7381
  type = 32;
7376
7382
  const slotFlag = children._;
7377
- if (!slotFlag) {
7383
+ if (!slotFlag && !isInternalObject(children)) {
7378
7384
  children._ctx = currentRenderingInstance;
7379
7385
  } else if (slotFlag === 3 && currentRenderingInstance) {
7380
7386
  if (currentRenderingInstance.slots._ === 1) {
@@ -8154,7 +8160,7 @@ function isMemoSame(cached, memo) {
8154
8160
  return true;
8155
8161
  }
8156
8162
 
8157
- const version = "3.4.22";
8163
+ const version = "3.4.24";
8158
8164
  const warn = !!(process.env.NODE_ENV !== "production") ? warn$1 : NOOP;
8159
8165
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
8160
8166
  const devtools = !!(process.env.NODE_ENV !== "production") || true ? devtools$1 : void 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/runtime-core",
3
- "version": "3.4.22",
3
+ "version": "3.4.24",
4
4
  "description": "@vue/runtime-core",
5
5
  "main": "index.js",
6
6
  "module": "dist/runtime-core.esm-bundler.js",
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-core#readme",
48
48
  "dependencies": {
49
- "@vue/shared": "3.4.22",
50
- "@vue/reactivity": "3.4.22"
49
+ "@vue/shared": "3.4.24",
50
+ "@vue/reactivity": "3.4.24"
51
51
  }
52
52
  }