@genai-fi/nanogpt 0.5.5 → 0.6.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.
- package/dist/Generator.js +8 -7
- package/dist/NanoGPTModel.js +8 -8
- package/dist/{Reshape-Biok_3X1.js → Reshape-CLOrdpve.js} +2 -2
- package/dist/TeachableLLM.js +18 -17
- package/dist/{TiedEmbedding-8S8xn8e6.js → TiedEmbedding-BhxWO8QR.js} +5 -5
- package/dist/{axis_util-BczFISHz.js → axis_util-D17qZRQm.js} +1 -1
- package/dist/{broadcast_to-B7NGsBSh.js → broadcast_to-BMQLjvt_.js} +2 -2
- package/dist/{concat-DdKPyAtw.js → concat-DhZfF1GY.js} +1 -1
- package/dist/{dataset-iqT4Otvb.js → dataset-oilnemHf.js} +3 -3
- package/dist/{dropout-B09InSJS.js → dropout-CrMQPCeG.js} +1 -1
- package/dist/{gather-D6MsdXqc.js → gather-DZCMHZuN.js} +1 -1
- package/dist/{gpgpu_math-BFbOyvk4.js → gpgpu_math-Ctc31slO.js} +1 -1
- package/dist/{index-Du-bmOP8.js → index-bMBtI-WR.js} +50 -50
- package/dist/{kernel_funcs_utils-DShm7-0k.js → kernel_funcs_utils-CNmjLWnB.js} +26 -24
- package/dist/layers/BaseLayer.js +2 -2
- package/dist/layers/CausalSelfAttention.js +6 -6
- package/dist/layers/MLP.js +5 -5
- package/dist/layers/RMSNorm.js +3 -3
- package/dist/layers/RoPECache.js +3 -3
- package/dist/layers/TiedEmbedding.js +6 -6
- package/dist/layers/TransformerBlock.js +1 -1
- package/dist/{log_sum_exp-CxfBtUaG.js → log_sum_exp-BHdkCb4s.js} +5 -5
- package/dist/main.d.ts +1 -0
- package/dist/main.js +20 -19
- package/dist/{mat_mul-CbiqIe2d.js → mat_mul-BsrLfy81.js} +1 -1
- package/dist/{max-0Xnlpv8k.js → max-DechV4Bc.js} +1 -1
- package/dist/{norm-01kY9I2B.js → norm-B9hWHZH1.js} +5 -5
- package/dist/{ones-CrutWGas.js → ones-g0K8jVwm.js} +2 -2
- package/dist/ops/appendCache.js +3 -3
- package/dist/ops/attentionMask.js +1 -1
- package/dist/ops/cpu/appendCache.js +2 -2
- package/dist/ops/cpu/attentionMask.js +5 -5
- package/dist/ops/cpu/fusedSoftmax.js +2 -2
- package/dist/ops/cpu/gatherSub.js +3 -3
- package/dist/ops/cpu/gelu.js +1 -1
- package/dist/ops/cpu/matMulGelu.js +1 -1
- package/dist/ops/cpu/matMulMul.js +1 -1
- package/dist/ops/cpu/mulDropout.js +1 -1
- package/dist/ops/cpu/normRMS.js +1 -1
- package/dist/ops/cpu/qkv.js +3 -3
- package/dist/ops/cpu/rope.js +5 -5
- package/dist/ops/cpu/scatterSub.js +4 -4
- package/dist/ops/fusedSoftmax.js +1 -1
- package/dist/ops/gatherSub.js +1 -1
- package/dist/ops/gelu.js +1 -1
- package/dist/ops/grads/attentionMask.js +15 -11
- package/dist/ops/grads/fusedSoftmax.js +12 -10
- package/dist/ops/grads/gelu.js +1 -1
- package/dist/ops/grads/matMulGelu.js +1 -1
- package/dist/ops/grads/normRMS.js +1 -1
- package/dist/ops/grads/qkv.js +1 -1
- package/dist/ops/grads/rope.js +1 -1
- package/dist/ops/log.d.ts +0 -0
- package/dist/ops/log.js +1 -0
- package/dist/ops/matMulGelu.js +1 -1
- package/dist/ops/matMulMul.js +1 -1
- package/dist/ops/mulDrop.js +1 -1
- package/dist/ops/node/sparseCrossEntropy.js +1 -1
- package/dist/ops/normRMS.js +1 -1
- package/dist/ops/qkv.js +1 -1
- package/dist/ops/scatterSub.js +1 -1
- package/dist/ops/webgl/appendCache.js +1 -1
- package/dist/ops/webgl/attentionMask.js +1 -1
- package/dist/ops/webgl/fusedSoftmax.js +205 -3022
- package/dist/ops/webgl/gatherSub.js +1 -1
- package/dist/ops/webgl/gelu.js +2 -2
- package/dist/ops/webgl/log.d.ts +17 -0
- package/dist/ops/webgl/log.js +39 -0
- package/dist/ops/webgl/matMulGelu.js +4 -4
- package/dist/ops/webgl/matMulMul.js +1 -1
- package/dist/ops/webgl/mulDropout.js +1 -1
- package/dist/ops/webgl/normRMS.js +2 -2
- package/dist/ops/webgl/qkv.js +1 -1
- package/dist/ops/webgl/rope.js +1 -1
- package/dist/ops/webgl/scatterSub.js +1 -1
- package/dist/{ops-CJNniCAV.js → ops-Mv7Ta72x.js} +13 -13
- package/dist/{random_width-C-v-35bY.js → random_width-BBAWzDym.js} +23 -23
- package/dist/{range-Bvs1hidm.js → range-DMaG9A3G.js} +1 -1
- package/dist/{reshape-BH7eBpwq.js → reshape-T4yDEqoF.js} +1 -1
- package/dist/shared-XNAoXhOa.js +2826 -0
- package/dist/{sin-CPAZXNjH.js → sin-EEhbrRO_.js} +1 -1
- package/dist/{slice_util-DskXqRZa.js → slice_util-Ddk0uxGJ.js} +1 -1
- package/dist/{softmax-DhWoBa7r.js → softmax-B2_IKPDR.js} +1 -1
- package/dist/{split-BCUhuU7B.js → split-dcks18H1.js} +1 -1
- package/dist/{stack-BV1v7l3S.js → stack-lpJ5kYvE.js} +1 -1
- package/dist/{sum-Cvq06317.js → sum-CutF5lj2.js} +1 -1
- package/dist/{tensor-DgTOPY6h.js → tensor-C15NA2LA.js} +1 -1
- package/dist/{tensor2d-CRWjDyUe.js → tensor2d-DZ_e5eKM.js} +1 -1
- package/dist/{tfjs_backend-D9Ytje0G.js → tfjs_backend-BDb8r9qx.js} +28 -28
- package/dist/training/AdamExt.js +1 -1
- package/dist/training/DatasetBuilder.js +2 -2
- package/dist/training/FullTrainer.js +1 -1
- package/dist/training/Trainer.js +3 -3
- package/dist/training/sparseCrossEntropy.js +4 -4
- package/dist/utilities/dummy.js +2 -2
- package/dist/utilities/generate.js +3 -3
- package/dist/utilities/load.d.ts +25 -0
- package/dist/utilities/load.js +89 -37
- package/dist/utilities/profile.js +4 -4
- package/dist/utilities/safetensors.d.ts +3 -0
- package/dist/utilities/safetensors.js +83 -0
- package/dist/utilities/save.js +47 -29
- package/dist/utilities/weights.js +2 -2
- package/dist/{variable-DZ3fF0R2.js → variable-CdRKKp8x.js} +1 -1
- package/dist/{zeros-BaHhQTWf.js → zeros-CAbHfODe.js} +1 -1
- package/package.json +1 -1
package/dist/ops/webgl/gelu.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as a } from "../../index-
|
|
2
|
-
import { u as s, C as x } from "../../kernel_funcs_utils-
|
|
1
|
+
import { r as a } from "../../index-bMBtI-WR.js";
|
|
2
|
+
import { u as s, C as x } from "../../kernel_funcs_utils-CNmjLWnB.js";
|
|
3
3
|
const t = 0.7978845608028654, r = 0.044715, c = x + `
|
|
4
4
|
float x3 = x * x * x;
|
|
5
5
|
float inner = x + ${r} * x3;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2020 Google LLC. All Rights Reserved.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
* =============================================================================
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { r, a7 as e } from "../../index-bMBtI-WR.js";
|
|
2
|
+
import { u as s, d as N } from "../../kernel_funcs_utils-CNmjLWnB.js";
|
|
3
|
+
import { l } from "../../shared-XNAoXhOa.js";
|
|
4
|
+
/**
|
|
5
|
+
* @license
|
|
6
|
+
* Copyright 2020 Google LLC. All Rights Reserved.
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
* =============================================================================
|
|
19
|
+
*/
|
|
20
|
+
const a = N + `
|
|
21
|
+
return x < 0.0 ? NAN : log(x);
|
|
22
|
+
`, t = `
|
|
23
|
+
vec4 result = log(x);
|
|
24
|
+
bvec4 isNaN = isnan(x);
|
|
25
|
+
result.r = isNaN.r ? x.r : (x.r < 0.0 ? NAN : result.r);
|
|
26
|
+
result.g = isNaN.g ? x.g : (x.g < 0.0 ? NAN : result.g);
|
|
27
|
+
result.b = isNaN.b ? x.b : (x.b < 0.0 ? NAN : result.b);
|
|
28
|
+
result.a = isNaN.a ? x.a : (x.a < 0.0 ? NAN : result.a);
|
|
29
|
+
return result;
|
|
30
|
+
`, n = s({
|
|
31
|
+
opSnippet: a,
|
|
32
|
+
packedOpSnippet: t,
|
|
33
|
+
cpuKernelImpl: l
|
|
34
|
+
}), o = {
|
|
35
|
+
kernelName: e,
|
|
36
|
+
backendName: "webgl",
|
|
37
|
+
kernelFunc: n
|
|
38
|
+
};
|
|
39
|
+
r(o);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as C, t as R, e as I, q as G, Q as L, l as U, U as F } from "../../index-
|
|
2
|
-
import { r as S } from "../../Reshape-
|
|
3
|
-
import { u as H } from "../../gpgpu_math-
|
|
4
|
-
import { m as B } from "../../mat_mul-
|
|
1
|
+
import { r as C, t as R, e as I, q as G, Q as L, l as U, U as F } from "../../index-bMBtI-WR.js";
|
|
2
|
+
import { r as S } from "../../Reshape-CLOrdpve.js";
|
|
3
|
+
import { u as H } from "../../gpgpu_math-Ctc31slO.js";
|
|
4
|
+
import { m as B } from "../../mat_mul-BsrLfy81.js";
|
|
5
5
|
/**
|
|
6
6
|
* @license
|
|
7
7
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as p, e as G } from "../../index-
|
|
2
|
-
import { s as x } from "../../sum-
|
|
1
|
+
import { r as p, e as G } from "../../index-bMBtI-WR.js";
|
|
2
|
+
import { s as x } from "../../sum-CutF5lj2.js";
|
|
3
3
|
class y {
|
|
4
4
|
variableNames = ["x", "meanSquare", "gamma"];
|
|
5
5
|
outputShape;
|
package/dist/ops/webgl/qkv.js
CHANGED
package/dist/ops/webgl/rope.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { o as h, j as l, E as f,
|
|
2
|
-
import { r as _ } from "./reshape-
|
|
3
|
-
import { s as un } from "./split-
|
|
4
|
-
import { s as q } from "./sum-
|
|
5
|
-
import { b as X } from "./broadcast_to-
|
|
6
|
-
import { r as O } from "./range-
|
|
7
|
-
import { t as Ln } from "./tensor-
|
|
8
|
-
import { s as Y } from "./stack-
|
|
9
|
-
import { c as Xn, z as Qn } from "./zeros-
|
|
10
|
-
import { n as ln } from "./norm-
|
|
11
|
-
import { c as Q } from "./concat-
|
|
12
|
-
import { m as T } from "./mat_mul-
|
|
13
|
-
import { t as H } from "./tensor2d-
|
|
1
|
+
import { o as h, j as l, E as f, aC as hn, l as p, aD as fn, Q as w, aE as dn, aF as bn, aG as gn, L as $n, ak as xn, u as j, aH as kn, aI as yn, aJ as In, aK as _n, aL as En, aM as Mn, aN as Nn, D, aO as An, aP as Tn, aQ as Sn, aR as wn, I as zn, J as Bn, K as qn, aS as Kn, t as Gn, aT as J, aU as Rn, aV as Dn, aW as Pn, aX as Vn, aY as vn, aZ as jn, f as Fn, a_ as Wn, a$ as On, b as k, a8 as Z, al as G, g as Yn, s as S, b0 as Cn, y as L, a as Jn } from "./index-bMBtI-WR.js";
|
|
2
|
+
import { r as _ } from "./reshape-T4yDEqoF.js";
|
|
3
|
+
import { s as un } from "./split-dcks18H1.js";
|
|
4
|
+
import { s as q } from "./sum-CutF5lj2.js";
|
|
5
|
+
import { b as X } from "./broadcast_to-BMQLjvt_.js";
|
|
6
|
+
import { r as O } from "./range-DMaG9A3G.js";
|
|
7
|
+
import { t as Ln } from "./tensor-C15NA2LA.js";
|
|
8
|
+
import { s as Y } from "./stack-lpJ5kYvE.js";
|
|
9
|
+
import { c as Xn, z as Qn } from "./zeros-CAbHfODe.js";
|
|
10
|
+
import { n as ln } from "./norm-B9hWHZH1.js";
|
|
11
|
+
import { c as Q } from "./concat-DhZfF1GY.js";
|
|
12
|
+
import { m as T } from "./mat_mul-BsrLfy81.js";
|
|
13
|
+
import { t as H } from "./tensor2d-DZ_e5eKM.js";
|
|
14
14
|
/**
|
|
15
15
|
* @license
|
|
16
16
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { o as F, j as D, E as M, ba as po, bb as fo, bc as fi, l as k,
|
|
2
|
-
import { s as yu, a as wu, g as ku, b as xu, V as d, N as G, r as bn, c as Jn, e as et, f as ye, h as Ge, i as Xn, j as Pi, k as Ui, t as Rt, R as $t, l as ht, A as Pt, m as K, n as ue, o as Yn, p as Qn, q as At, u as st, v as Pe, w as Nu, x as vu, y as Ue, z as Ut, B as Et, C as le, D as jt, E as Xe, F as ce, G as Su, H as en, I as yn, J as Vi, K as Ct, L as Rs, M as Au, O as Cu, P as Iu, Q as Du, S as zu, T as Tu, U as Ht, W as $u, X as ts, Y as Dt, Z as Ye, _ as Eu, $ as ot, a0 as ji, a1 as gt, a2 as se, a3 as _s, a4 as Ne, d as Lt, a5 as Bs, a6 as Ve, a7 as Ki, a8 as es, a9 as Lu, aa as Fu, ab as Hi, ac as Mu } from "./tfjs_backend-
|
|
3
|
-
import { e as Ou, l as Ru, n as pt, w as qt, c as je, g as Ke, d as ns, b as j, a as Ee, f as Gt, h as _u, s as be, u as nn, i as he, j as ss, t as Rn, m as qi, k as _t } from "./ops-
|
|
4
|
-
import { r as S } from "./reshape-
|
|
5
|
-
import { s as B } from "./sum-
|
|
6
|
-
import { m as Ot } from "./mat_mul-
|
|
7
|
-
import { s as Kt } from "./split-
|
|
8
|
-
import { s as Bu, c as Zi } from "./sin-
|
|
9
|
-
import { e as _n, g as Ji, d as is, c as Wu } from "./axis_util-
|
|
10
|
-
import { a as Zt, e as Jt, l as Gu } from "./log_sum_exp-
|
|
11
|
-
import { s as wn } from "./stack-
|
|
12
|
-
import { o as pe } from "./ones-
|
|
13
|
-
import { M as Pu, a as kn, f as Xi } from "./dropout-
|
|
14
|
-
import { z as mt } from "./zeros-
|
|
15
|
-
import { p as Uu } from "./slice_util-
|
|
16
|
-
import { c as rs } from "./concat-
|
|
17
|
-
import { g as Vu } from "./gather-
|
|
18
|
-
import { s as Yi } from "./softmax-
|
|
19
|
-
import { m as ve } from "./max-
|
|
20
|
-
import { t as ju } from "./tensor-
|
|
21
|
-
import { r as Ku } from "./range-
|
|
22
|
-
import { m as Hu } from "./norm-
|
|
23
|
-
import { v as qu } from "./variable-
|
|
1
|
+
import { o as F, j as D, E as M, ba as po, bb as fo, bc as fi, l as k, ap as Mn, bd as mi, D as L, be as gi, bf as bi, bg as yi, bh as wi, bi as ki, bj as xi, bk as Ni, bl as mo, bm as vi, bn as go, bo as Si, bp as bo, bq as Ai, u as qn, Q as wt, br as yo, bs as Ci, bt as Ii, bu as Di, c as On, s as P, b as w, bv as wo, bw as zi, bx as Ti, by as $i, a1 as ee, a4 as ut, bz as ko, bA as Ei, bB as Li, bC as Fi, bD as Mi, bE as Oi, bF as Ri, bG as _i, bH as Bi, n as xo, ak as No, bI as Wi, bJ as vo, a8 as $, bK as Ls, bL as So, bM as Ao, bN as Co, bO as Io, bP as Do, A as zo, bQ as To, bR as $o, bS as Eo, bT as A, t as x, f as tt, q as Gi, bU as Be, bV as We, ad as Ft, a as Z, N as Lo, bW as Fo, bX as Mo, a3 as ne, al as U, bY as Oo, bZ as Ro, az as lt, b_ as _o, z as Q, b$ as Bo, c0 as Wo, c1 as Go, c2 as Po, c3 as Uo, c4 as Vo, c5 as jo, c6 as Ko, B as Ho, c7 as qo, c8 as Zo, c9 as Jo, as as Xo, ca as Yo, C as Qo, cb as tl, _ as el, cc as nl, cd as sl, ce as il, at as rl, cf as al, a6 as ol, aG as ll, cg as ul, aj as cl, ch as hl, G as pl, aI as dl, ci as fl, cj as ml, ck as gl, cl as bl, au as yl, a7 as wl, cm as kl, cn as xl, co as Nl, M as vl, cp as Sl, cq as Al, cr as Cl, a0 as Il, aO as Dl, cs as zl, a9 as Tl, ct as $l, aM as El, P as Ll, cu as Fl, W as Zn, av as Ml, cv as Ol, cw as Rl, V as _l, ax as Bl, aw as Wl, w as Gl, a_ as Pl, cx as Ul, a$ as Vl, cy as jl, aQ as Kl, aE as Hl, ar as ql, cz as Zl, $ as Jl, aC as Xl, S as Yl, x as Ql, cA as tu, cB as eu, cC as nu, ay as su, cD as iu, F as ru, cE as au, L as ou, aT as lu, aS as uu, cF as Ie, cG as cu, h as hu, cH as Fs, H as Bt, a2 as Fe, g as pu, y as du, T as xe, cI as fu, cJ as mu, m as Ms, cK as gu, cL as Os, cM as bu } from "./index-bMBtI-WR.js";
|
|
2
|
+
import { s as yu, a as wu, g as ku, b as xu, V as d, N as G, r as bn, c as Jn, e as et, f as ye, h as Ge, i as Xn, j as Pi, k as Ui, t as Rt, R as $t, l as ht, A as Pt, m as K, n as ue, o as Yn, p as Qn, q as At, u as st, v as Pe, w as Nu, x as vu, y as Ue, z as Ut, B as Et, C as le, D as jt, E as Xe, F as ce, G as Su, H as en, I as yn, J as Vi, K as Ct, L as Rs, M as Au, O as Cu, P as Iu, Q as Du, S as zu, T as Tu, U as Ht, W as $u, X as ts, Y as Dt, Z as Ye, _ as Eu, $ as ot, a0 as ji, a1 as gt, a2 as se, a3 as _s, a4 as Ne, d as Lt, a5 as Bs, a6 as Ve, a7 as Ki, a8 as es, a9 as Lu, aa as Fu, ab as Hi, ac as Mu } from "./tfjs_backend-BDb8r9qx.js";
|
|
3
|
+
import { e as Ou, l as Ru, n as pt, w as qt, c as je, g as Ke, d as ns, b as j, a as Ee, f as Gt, h as _u, s as be, u as nn, i as he, j as ss, t as Rn, m as qi, k as _t } from "./ops-Mv7Ta72x.js";
|
|
4
|
+
import { r as S } from "./reshape-T4yDEqoF.js";
|
|
5
|
+
import { s as B } from "./sum-CutF5lj2.js";
|
|
6
|
+
import { m as Ot } from "./mat_mul-BsrLfy81.js";
|
|
7
|
+
import { s as Kt } from "./split-dcks18H1.js";
|
|
8
|
+
import { s as Bu, c as Zi } from "./sin-EEhbrRO_.js";
|
|
9
|
+
import { e as _n, g as Ji, d as is, c as Wu } from "./axis_util-D17qZRQm.js";
|
|
10
|
+
import { a as Zt, e as Jt, l as Gu } from "./log_sum_exp-BHdkCb4s.js";
|
|
11
|
+
import { s as wn } from "./stack-lpJ5kYvE.js";
|
|
12
|
+
import { o as pe } from "./ones-g0K8jVwm.js";
|
|
13
|
+
import { M as Pu, a as kn, f as Xi } from "./dropout-CrMQPCeG.js";
|
|
14
|
+
import { z as mt } from "./zeros-CAbHfODe.js";
|
|
15
|
+
import { p as Uu } from "./slice_util-Ddk0uxGJ.js";
|
|
16
|
+
import { c as rs } from "./concat-DhZfF1GY.js";
|
|
17
|
+
import { g as Vu } from "./gather-DZCMHZuN.js";
|
|
18
|
+
import { s as Yi } from "./softmax-B2_IKPDR.js";
|
|
19
|
+
import { m as ve } from "./max-DechV4Bc.js";
|
|
20
|
+
import { t as ju } from "./tensor-C15NA2LA.js";
|
|
21
|
+
import { r as Ku } from "./range-DMaG9A3G.js";
|
|
22
|
+
import { m as Hu } from "./norm-B9hWHZH1.js";
|
|
23
|
+
import { v as qu } from "./variable-CdRKKp8x.js";
|
|
24
24
|
/**
|
|
25
25
|
* @license
|
|
26
26
|
* Copyright 2020 Google LLC. All Rights Reserved.
|