@kong-ui-public/analytics-utilities 9.9.1-pr.2221.17d4a7fef.0 → 9.9.1-pr.2221.bf6ac5c10.0

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.
@@ -355,7 +355,7 @@ const $s = [
355
355
  },
356
356
  required: ["type"],
357
357
  additionalProperties: !1
358
- }, va = {
358
+ }, Ma = {
359
359
  type: "object",
360
360
  properties: {
361
361
  tz: {
@@ -379,7 +379,7 @@ const $s = [
379
379
  "time_range"
380
380
  ],
381
381
  additionalProperties: !1
382
- }, Ma = {
382
+ }, va = {
383
383
  type: "object",
384
384
  description: "A duration representing an exact start and end time.",
385
385
  properties: {
@@ -415,8 +415,8 @@ const $s = [
415
415
  type: "object",
416
416
  description: "The time range to query.",
417
417
  anyOf: [
418
- va,
419
- Ma
418
+ Ma,
419
+ va
420
420
  ],
421
421
  default: {
422
422
  type: "relative",
@@ -497,7 +497,7 @@ const $s = [
497
497
  }
498
498
  ]
499
499
  }
500
- }), vr = {
500
+ }), Mr = {
501
501
  type: "object",
502
502
  description: "A query to launch at the advanced explore API",
503
503
  properties: {
@@ -514,7 +514,7 @@ const $s = [
514
514
  },
515
515
  required: ["datasource"],
516
516
  additionalProperties: !1
517
- }, Mr = {
517
+ }, vr = {
518
518
  type: "object",
519
519
  description: "A query to launch at the basic explore API",
520
520
  properties: {
@@ -549,7 +549,7 @@ const $s = [
549
549
  required: ["datasource"],
550
550
  additionalProperties: !1
551
551
  }, Er = {
552
- anyOf: [vr, Mr, xr]
552
+ anyOf: [Mr, vr, xr]
553
553
  }, Pr = {
554
554
  type: "object",
555
555
  properties: {
@@ -651,11 +651,11 @@ const $s = [
651
651
  __proto__: null,
652
652
  aiQuerySchema: xr,
653
653
  barChartSchema: _r,
654
- basicQuerySchema: Mr,
654
+ basicQuerySchema: vr,
655
655
  dashboardConfigSchema: xa,
656
656
  dashboardTileTypes: Sa,
657
657
  donutChartSchema: Tr,
658
- exploreV4QuerySchema: vr,
658
+ exploreV4QuerySchema: Mr,
659
659
  gaugeChartSchema: br,
660
660
  metricCardSchema: Or,
661
661
  singleValueSchema: Sr,
@@ -1101,10 +1101,6 @@ const $s = [
1101
1101
  }, io = {
1102
1102
  type: "object",
1103
1103
  properties: {
1104
- version: {
1105
- type: "string",
1106
- enum: ["v2"]
1107
- },
1108
1104
  tiles: {
1109
1105
  type: "array",
1110
1106
  items: Ua
@@ -1115,7 +1111,7 @@ const $s = [
1115
1111
  },
1116
1112
  preset_filters: Ne([.../* @__PURE__ */ new Set([...ue, ...oe, ...ce])])
1117
1113
  },
1118
- required: ["version", "tiles"],
1114
+ required: ["tiles"],
1119
1115
  additionalProperties: !1
1120
1116
  }, Yr = 6048e5, za = 864e5, $a = 60, Va = 3600, Lt = Symbol.for("constructDateFrom");
1121
1117
  function I(e, t) {
@@ -1532,11 +1528,11 @@ const Ti = /^(\d+)(th|st|nd|rd)?/i, Di = /\d+/i, Oi = {
1532
1528
  wide: /^(before christ|before common era|anno domini|common era)/i
1533
1529
  }, Si = {
1534
1530
  any: [/^b/i, /^(a|c)/i]
1535
- }, vi = {
1531
+ }, Mi = {
1536
1532
  narrow: /^[1234]/i,
1537
1533
  abbreviated: /^q[1234]/i,
1538
1534
  wide: /^[1234](th|st|nd|rd)? quarter/i
1539
- }, Mi = {
1535
+ }, vi = {
1540
1536
  any: [/1/i, /2/i, /3/i, /4/i]
1541
1537
  }, xi = {
1542
1538
  narrow: /^[jfmasond]/i,
@@ -1606,9 +1602,9 @@ const Ti = /^(\d+)(th|st|nd|rd)?/i, Di = /\d+/i, Oi = {
1606
1602
  defaultParseWidth: "any"
1607
1603
  }),
1608
1604
  quarter: ie({
1609
- matchPatterns: vi,
1605
+ matchPatterns: Mi,
1610
1606
  defaultMatchWidth: "wide",
1611
- parsePatterns: Mi,
1607
+ parsePatterns: vi,
1612
1608
  defaultParseWidth: "any",
1613
1609
  valueCallback: (e) => e + 1
1614
1610
  }),
@@ -2601,7 +2597,7 @@ function ar(e) {
2601
2597
  const t = new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()));
2602
2598
  return t.setUTCFullYear(e.getFullYear()), +e - +t;
2603
2599
  }
2604
- const Gr = /(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?)$/, Ve = 36e5, ir = 6e4, bs = 2, v = {
2600
+ const Gr = /(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?)$/, Ve = 36e5, ir = 6e4, bs = 2, M = {
2605
2601
  dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,
2606
2602
  datePattern: /^([0-9W+-]+)(.*)/,
2607
2603
  plainTime: /:/,
@@ -2636,7 +2632,7 @@ const Gr = /(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)
2636
2632
  // time zone tokens (to identify the presence of a tz)
2637
2633
  timeZone: Gr
2638
2634
  };
2639
- function ve(e, t = {}) {
2635
+ function Me(e, t = {}) {
2640
2636
  if (arguments.length < 1)
2641
2637
  throw new TypeError("1 argument required, but only " + arguments.length + " present");
2642
2638
  if (e === null)
@@ -2669,17 +2665,17 @@ function ve(e, t = {}) {
2669
2665
  }
2670
2666
  function Ts(e) {
2671
2667
  const t = {};
2672
- let r = v.dateTimePattern.exec(e), n;
2673
- if (r ? (t.date = r[1], n = r[3]) : (r = v.datePattern.exec(e), r ? (t.date = r[1], n = r[2]) : (t.date = null, n = e)), n) {
2674
- const i = v.timeZone.exec(n);
2668
+ let r = M.dateTimePattern.exec(e), n;
2669
+ if (r ? (t.date = r[1], n = r[3]) : (r = M.datePattern.exec(e), r ? (t.date = r[1], n = r[2]) : (t.date = null, n = e)), n) {
2670
+ const i = M.timeZone.exec(n);
2675
2671
  i ? (t.time = n.replace(i[1], ""), t.timeZone = i[1].trim()) : t.time = n;
2676
2672
  }
2677
2673
  return t;
2678
2674
  }
2679
2675
  function Ds(e, t) {
2680
2676
  if (e) {
2681
- const r = v.YYY[t], n = v.YYYYY[t];
2682
- let i = v.YYYY.exec(e) || n.exec(e);
2677
+ const r = M.YYY[t], n = M.YYYYY[t];
2678
+ let i = M.YYYY.exec(e) || n.exec(e);
2683
2679
  if (i) {
2684
2680
  const o = i[1];
2685
2681
  return {
@@ -2687,7 +2683,7 @@ function Ds(e, t) {
2687
2683
  restDateString: e.slice(o.length)
2688
2684
  };
2689
2685
  }
2690
- if (i = v.YY.exec(e) || r.exec(e), i) {
2686
+ if (i = M.YY.exec(e) || r.exec(e), i) {
2691
2687
  const o = i[1];
2692
2688
  return {
2693
2689
  year: parseInt(o, 10) * 100,
@@ -2705,22 +2701,22 @@ function Os(e, t) {
2705
2701
  let r, n, i;
2706
2702
  if (!e || !e.length)
2707
2703
  return r = /* @__PURE__ */ new Date(0), r.setUTCFullYear(t), r;
2708
- let o = v.MM.exec(e);
2704
+ let o = M.MM.exec(e);
2709
2705
  if (o)
2710
2706
  return r = /* @__PURE__ */ new Date(0), n = parseInt(o[1], 10) - 1, or(t, n) ? (r.setUTCFullYear(t, n), r) : /* @__PURE__ */ new Date(NaN);
2711
- if (o = v.DDD.exec(e), o) {
2707
+ if (o = M.DDD.exec(e), o) {
2712
2708
  r = /* @__PURE__ */ new Date(0);
2713
2709
  const c = parseInt(o[1], 10);
2714
2710
  return xs(t, c) ? (r.setUTCFullYear(t, 0, c), r) : /* @__PURE__ */ new Date(NaN);
2715
2711
  }
2716
- if (o = v.MMDD.exec(e), o) {
2712
+ if (o = M.MMDD.exec(e), o) {
2717
2713
  r = /* @__PURE__ */ new Date(0), n = parseInt(o[1], 10) - 1;
2718
2714
  const c = parseInt(o[2], 10);
2719
2715
  return or(t, n, c) ? (r.setUTCFullYear(t, n, c), r) : /* @__PURE__ */ new Date(NaN);
2720
2716
  }
2721
- if (o = v.Www.exec(e), o)
2717
+ if (o = M.Www.exec(e), o)
2722
2718
  return i = parseInt(o[1], 10) - 1, ur(i) ? sr(t, i) : /* @__PURE__ */ new Date(NaN);
2723
- if (o = v.WwwD.exec(e), o) {
2719
+ if (o = M.WwwD.exec(e), o) {
2724
2720
  i = parseInt(o[1], 10) - 1;
2725
2721
  const c = parseInt(o[2], 10) - 1;
2726
2722
  return ur(i, c) ? sr(t, i, c) : /* @__PURE__ */ new Date(NaN);
@@ -2728,12 +2724,12 @@ function Os(e, t) {
2728
2724
  return null;
2729
2725
  }
2730
2726
  function Ss(e) {
2731
- let t, r, n = v.HH.exec(e);
2727
+ let t, r, n = M.HH.exec(e);
2732
2728
  if (n)
2733
2729
  return t = parseFloat(n[1].replace(",", ".")), Xe(t) ? t % 24 * Ve : NaN;
2734
- if (n = v.HHMM.exec(e), n)
2730
+ if (n = M.HHMM.exec(e), n)
2735
2731
  return t = parseInt(n[1], 10), r = parseFloat(n[2].replace(",", ".")), Xe(t, r) ? t % 24 * Ve + r * ir : NaN;
2736
- if (n = v.HHMMSS.exec(e), n) {
2732
+ if (n = M.HHMMSS.exec(e), n) {
2737
2733
  t = parseInt(n[1], 10), r = parseInt(n[2], 10);
2738
2734
  const i = parseFloat(n[3].replace(",", "."));
2739
2735
  return Xe(t, r, i) ? t % 24 * Ve + r * ir + i * 1e3 : NaN;
@@ -2747,7 +2743,7 @@ function sr(e, t, r) {
2747
2743
  const i = n.getUTCDay() || 7, o = t * 7 + r + 1 - i;
2748
2744
  return n.setUTCDate(n.getUTCDate() + o), n;
2749
2745
  }
2750
- const vs = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Ms = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
2746
+ const Ms = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], vs = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
2751
2747
  function Fr(e) {
2752
2748
  return e % 400 === 0 || e % 4 === 0 && e % 100 !== 0;
2753
2749
  }
@@ -2758,7 +2754,7 @@ function or(e, t, r) {
2758
2754
  if (r < 1)
2759
2755
  return !1;
2760
2756
  const n = Fr(e);
2761
- if (n && r > Ms[t] || !n && r > vs[t])
2757
+ if (n && r > vs[t] || !n && r > Ms[t])
2762
2758
  return !1;
2763
2759
  }
2764
2760
  return !0;
@@ -2780,7 +2776,7 @@ function Ps(e, t, r = {}) {
2780
2776
  t = String(t);
2781
2777
  const n = t.match(Es);
2782
2778
  if (n) {
2783
- const i = ve(r.originalDate || e, r);
2779
+ const i = Me(r.originalDate || e, r);
2784
2780
  t = n.reduce(function(o, c) {
2785
2781
  if (c[0] === "'")
2786
2782
  return o;
@@ -2791,7 +2787,7 @@ function Ps(e, t, r = {}) {
2791
2787
  return jr(e, t, r);
2792
2788
  }
2793
2789
  function Wr(e, t, r) {
2794
- e = ve(e, r);
2790
+ e = Me(e, r);
2795
2791
  const n = he(t, e, !0), i = new Date(e.getTime() - n), o = /* @__PURE__ */ new Date(0);
2796
2792
  return o.setFullYear(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate()), o.setHours(i.getUTCHours(), i.getUTCMinutes(), i.getUTCSeconds(), i.getUTCMilliseconds()), o;
2797
2793
  }
@@ -2804,8 +2800,8 @@ function Ns(e, t, r, n) {
2804
2800
  }
2805
2801
  function Cs(e, t, r) {
2806
2802
  if (typeof e == "string" && !e.match(Gr))
2807
- return ve(e, { ...r, timeZone: t });
2808
- e = ve(e, r);
2803
+ return Me(e, { ...r, timeZone: t });
2804
+ e = Me(e, r);
2809
2805
  const n = st(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()).getTime(), i = he(t, new Date(n));
2810
2806
  return new Date(n + i);
2811
2807
  }
@@ -2831,7 +2827,7 @@ function cr(e, t = {}) {
2831
2827
  function oo(e, t) {
2832
2828
  return `${cr(e.getTime())} - ${cr(t.getTime(), { includeTZ: !0 })}`;
2833
2829
  }
2834
- const Me = {
2830
+ const ve = {
2835
2831
  secondly: 1e3,
2836
2832
  tenSecondly: 10 * 1e3,
2837
2833
  thirtySecondly: 30 * 1e3,
@@ -2860,12 +2856,12 @@ function Is(e, t) {
2860
2856
  };
2861
2857
  }
2862
2858
  function co(e) {
2863
- return e && Ze.find((r) => e <= Me[r]) || null;
2859
+ return e && Ze.find((r) => e <= ve[r]) || null;
2864
2860
  }
2865
2861
  function Ur(e, t, r, n) {
2866
- const i = Me[r];
2862
+ const i = ve[r];
2867
2863
  let o = 0;
2868
- return i >= Me.daily && (n ? o = -Lr(n, t) : o = t.getTimezoneOffset() * 60 * 1e3), new Date(e((t.getTime() - o) / i) * i + o);
2864
+ return i >= ve.daily && (n ? o = -Lr(n, t) : o = t.getTimezoneOffset() * 60 * 1e3), new Date(e((t.getTime() - o) / i) * i + o);
2869
2865
  }
2870
2866
  function ks(e, t, r) {
2871
2867
  return Ur(Math.floor, e, t, r);
@@ -2926,7 +2922,7 @@ class lo extends Ce {
2926
2922
  return zr(this.timeframe.rawEnd(), this.granularity, this.tz);
2927
2923
  }
2928
2924
  granularityMs() {
2929
- return Me[this.granularity];
2925
+ return ve[this.granularity];
2930
2926
  }
2931
2927
  }
2932
2928
  class Ys extends Ce {
@@ -2975,7 +2971,7 @@ xe.exports;
2975
2971
  return a;
2976
2972
  }
2977
2973
  function bt(a, s, u, l) {
2978
- for (var D = -1, M = a ? a.length : 0; ++D < M; )
2974
+ for (var D = -1, v = a ? a.length : 0; ++D < v; )
2979
2975
  u = s(u, a[D], D, a);
2980
2976
  return u;
2981
2977
  }
@@ -3016,9 +3012,9 @@ xe.exports;
3016
3012
  var on = Array.prototype, un = Function.prototype, ye = Object.prototype, ke = Y["__core-js_shared__"], St = function() {
3017
3013
  var a = /[^.]+$/.exec(ke && ke.keys && ke.keys.IE_PROTO || "");
3018
3014
  return a ? "Symbol(src)_1." + a : "";
3019
- }(), vt = un.toString, j = ye.hasOwnProperty, pe = ye.toString, cn = RegExp(
3020
- "^" + vt.call(j).replace(Vr, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
3021
- ), Mt = Jr ? Y.Buffer : void 0, xt = Y.Symbol, Et = Y.Uint8Array, ln = Ie(Object.getPrototypeOf, Object), dn = Object.create, fn = ye.propertyIsEnumerable, hn = on.splice, Pt = Object.getOwnPropertySymbols, mn = Mt ? Mt.isBuffer : void 0, yn = Ie(Object.keys, Object), Ye = Z(Y, "DataView"), re = Z(Y, "Map"), Re = Z(Y, "Promise"), qe = Z(Y, "Set"), He = Z(Y, "WeakMap"), ne = Z(Object, "create"), pn = U(Ye), gn = U(re), _n = U(Re), wn = U(qe), bn = U(He), Nt = xt ? xt.prototype : void 0, Ct = Nt ? Nt.valueOf : void 0;
3015
+ }(), Mt = un.toString, j = ye.hasOwnProperty, pe = ye.toString, cn = RegExp(
3016
+ "^" + Mt.call(j).replace(Vr, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
3017
+ ), vt = Jr ? Y.Buffer : void 0, xt = Y.Symbol, Et = Y.Uint8Array, ln = Ie(Object.getPrototypeOf, Object), dn = Object.create, fn = ye.propertyIsEnumerable, hn = on.splice, Pt = Object.getOwnPropertySymbols, mn = vt ? vt.isBuffer : void 0, yn = Ie(Object.keys, Object), Ye = Z(Y, "DataView"), re = Z(Y, "Map"), Re = Z(Y, "Promise"), qe = Z(Y, "Set"), He = Z(Y, "WeakMap"), ne = Z(Object, "create"), pn = U(Ye), gn = U(re), _n = U(Re), wn = U(qe), bn = U(He), Nt = xt ? xt.prototype : void 0, Ct = Nt ? Nt.valueOf : void 0;
3022
3018
  function W(a) {
3023
3019
  var s = -1, u = a ? a.length : 0;
3024
3020
  for (this.clear(); ++s < u; ) {
@@ -3044,11 +3040,11 @@ xe.exports;
3044
3040
  var s = this.__data__;
3045
3041
  return ne ? s[a] !== void 0 : j.call(s, a);
3046
3042
  }
3047
- function vn(a, s) {
3043
+ function Mn(a, s) {
3048
3044
  var u = this.__data__;
3049
3045
  return u[a] = ne && s === void 0 ? n : s, this;
3050
3046
  }
3051
- W.prototype.clear = Tn, W.prototype.delete = Dn, W.prototype.get = On, W.prototype.has = Sn, W.prototype.set = vn;
3047
+ W.prototype.clear = Tn, W.prototype.delete = Dn, W.prototype.get = On, W.prototype.has = Sn, W.prototype.set = Mn;
3052
3048
  function R(a) {
3053
3049
  var s = -1, u = a ? a.length : 0;
3054
3050
  for (this.clear(); ++s < u; ) {
@@ -3056,7 +3052,7 @@ xe.exports;
3056
3052
  this.set(l[0], l[1]);
3057
3053
  }
3058
3054
  }
3059
- function Mn() {
3055
+ function vn() {
3060
3056
  this.__data__ = [];
3061
3057
  }
3062
3058
  function xn(a) {
@@ -3077,7 +3073,7 @@ xe.exports;
3077
3073
  var u = this.__data__, l = ge(u, a);
3078
3074
  return l < 0 ? u.push([a, s]) : u[l][1] = s, this;
3079
3075
  }
3080
- R.prototype.clear = Mn, R.prototype.delete = xn, R.prototype.get = En, R.prototype.has = Pn, R.prototype.set = Nn;
3076
+ R.prototype.clear = vn, R.prototype.delete = xn, R.prototype.get = En, R.prototype.has = Pn, R.prototype.set = Nn;
3081
3077
  function X(a) {
3082
3078
  var s = -1, u = a ? a.length : 0;
3083
3079
  for (this.clear(); ++s < u; ) {
@@ -3133,8 +3129,8 @@ xe.exports;
3133
3129
  Q.prototype.clear = qn, Q.prototype.delete = Hn, Q.prototype.get = jn, Q.prototype.has = An, Q.prototype.set = Gn;
3134
3130
  function Fn(a, s) {
3135
3131
  var u = Ge(a) || da(a) ? an(a.length, String) : [], l = u.length, D = !!l;
3136
- for (var M in a)
3137
- j.call(a, M) && !(D && (M == "length" || oa(M, l))) && u.push(M);
3132
+ for (var v in a)
3133
+ j.call(a, v) && !(D && (v == "length" || oa(v, l))) && u.push(v);
3138
3134
  return u;
3139
3135
  }
3140
3136
  function It(a, s, u) {
@@ -3150,9 +3146,9 @@ xe.exports;
3150
3146
  function Wn(a, s) {
3151
3147
  return a && kt(s, Fe(s), a);
3152
3148
  }
3153
- function je(a, s, u, l, D, M, q) {
3149
+ function je(a, s, u, l, D, v, q) {
3154
3150
  var x;
3155
- if (l && (x = M ? l(a, D, M, q) : l(a)), x !== void 0)
3151
+ if (l && (x = v ? l(a, D, v, q) : l(a)), x !== void 0)
3156
3152
  return x;
3157
3153
  if (!we(a))
3158
3154
  return a;
@@ -3164,14 +3160,14 @@ xe.exports;
3164
3160
  var B = L(a), Gt = B == _ || B == y;
3165
3161
  if (ha(a))
3166
3162
  return Xn(a, s);
3167
- if (B == P || B == o || Gt && !M) {
3163
+ if (B == P || B == o || Gt && !v) {
3168
3164
  if (Tt(a))
3169
- return M ? a : {};
3165
+ return v ? a : {};
3170
3166
  if (x = ia(Gt ? {} : a), !s)
3171
3167
  return ra(a, Wn(x, a));
3172
3168
  } else {
3173
3169
  if (!w[B])
3174
- return M ? a : {};
3170
+ return v ? a : {};
3175
3171
  x = sa(a, B, je, s);
3176
3172
  }
3177
3173
  }
@@ -3250,7 +3246,7 @@ xe.exports;
3250
3246
  }
3251
3247
  function kt(a, s, u, l) {
3252
3248
  u || (u = {});
3253
- for (var D = -1, M = s.length; ++D < M; ) {
3249
+ for (var D = -1, v = s.length; ++D < v; ) {
3254
3250
  var q = s[D], x = void 0;
3255
3251
  It(u, q, x === void 0 ? a[q] : x);
3256
3252
  }
@@ -3345,7 +3341,7 @@ xe.exports;
3345
3341
  function U(a) {
3346
3342
  if (a != null) {
3347
3343
  try {
3348
- return vt.call(a);
3344
+ return Mt.call(a);
3349
3345
  } catch {
3350
3346
  }
3351
3347
  try {
@@ -3903,7 +3899,7 @@ function $r(e, t) {
3903
3899
  }
3904
3900
  export {
3905
3901
  fo as DeltaQueryTime,
3906
- Me as Granularities,
3902
+ ve as Granularities,
3907
3903
  zs as REFRESH_INTERVAL_MS,
3908
3904
  ot as SeededRandom,
3909
3905
  po as TIMEFRAME_LOOKUP,