nadesiko3 3.3.83 → 3.4.1
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/core/package.json +1 -1
- package/core/src/nako_core_version.mjs +3 -3
- package/core/src/nako_core_version.mts +3 -3
- package/core/src/nako_lex_rules.mjs +13 -4
- package/core/src/nako_lex_rules.mts +11 -4
- package/core/src/plugin_system.mts +1 -1
- package/core/test/andor_test.mjs +26 -0
- package/core/test/or_test.mjs +30 -0
- package/package.json +1 -1
- package/release/_hash.txt +16 -16
- package/release/_script-tags.txt +14 -14
- package/release/nako_gen_async.js +1 -1
- package/release/stats.json +1 -1
- package/release/version.js +1 -1
- package/release/wnako3.js +1 -1
- package/release/wnako3webworker.js +1 -1
- package/src/nako_version.mjs +3 -3
- package/src/nako_version.mts +3 -3
package/core/package.json
CHANGED
|
@@ -11,9 +11,9 @@ export interface NakoCoreVersion {
|
|
|
11
11
|
}
|
|
12
12
|
// 実際のバージョン定義 (自動生成されるので以下を編集しない)
|
|
13
13
|
const coreVersion: NakoCoreVersion = {
|
|
14
|
-
version: '3.
|
|
14
|
+
version: '3.4.1',
|
|
15
15
|
major: 3,
|
|
16
|
-
minor:
|
|
17
|
-
patch:
|
|
16
|
+
minor: 4,
|
|
17
|
+
patch: 1
|
|
18
18
|
}
|
|
19
19
|
export default coreVersion
|
|
@@ -6,6 +6,7 @@ const kanakanji = /^[\u3005\u4E00-\u9FCF_a-zA-Z0-9ァ-ヶー\u2460-\u24FF\u2776-
|
|
|
6
6
|
const hira = /^[ぁ-ん]/;
|
|
7
7
|
const allHiragana = /^[ぁ-ん]+$/;
|
|
8
8
|
const wordHasIjoIka = /^.+(以上|以下|超|未満)$/;
|
|
9
|
+
const wordSpecial = /^(かつ|または)/;
|
|
9
10
|
const errorRead = (ch) => {
|
|
10
11
|
return function () { throw new Error('突然の『' + ch + '』があります。'); };
|
|
11
12
|
};
|
|
@@ -148,12 +149,18 @@ function cbWordParser(src, isTrimOkurigana = true) {
|
|
|
148
149
|
let res = '';
|
|
149
150
|
let josi = '';
|
|
150
151
|
while (src !== '') {
|
|
152
|
+
// 1文字以上のとき
|
|
151
153
|
if (res.length > 0) {
|
|
154
|
+
// 「かつ」「または」なら分割する
|
|
155
|
+
const jsw = wordSpecial.exec(src);
|
|
156
|
+
if (jsw) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
152
159
|
// 助詞の判定
|
|
153
160
|
const j = josiRE.exec(src);
|
|
154
161
|
if (j) {
|
|
155
162
|
josi = j[0].replace(/^\s+/, '');
|
|
156
|
-
src = src.
|
|
163
|
+
src = src.substring(j[0].length);
|
|
157
164
|
// 助詞の直後にある「,」を飛ばす #877
|
|
158
165
|
if (src.charAt(0) === ',') {
|
|
159
166
|
src = src.substr(1);
|
|
@@ -165,18 +172,19 @@ function cbWordParser(src, isTrimOkurigana = true) {
|
|
|
165
172
|
const m = kanakanji.exec(src);
|
|
166
173
|
if (m) {
|
|
167
174
|
res += m[0];
|
|
168
|
-
src = src.
|
|
175
|
+
src = src.substring(m[0].length);
|
|
169
176
|
continue;
|
|
170
177
|
}
|
|
171
178
|
// ひらがな?
|
|
172
179
|
const h = hira.test(src);
|
|
173
180
|
if (h) {
|
|
174
181
|
res += src.charAt(0);
|
|
175
|
-
src = src.
|
|
182
|
+
src = src.substring(1);
|
|
176
183
|
continue;
|
|
177
184
|
}
|
|
178
185
|
break; // other chars
|
|
179
186
|
}
|
|
187
|
+
// --- 単語分割における特殊ルール ---
|
|
180
188
|
// 「間」の特殊ルール (#831)
|
|
181
189
|
// 「等しい間」や「一致する間」なら「間」をsrcに戻す。ただし「システム時間」はそのままにする。
|
|
182
190
|
if (/[ぁ-ん]間$/.test(res)) {
|
|
@@ -188,12 +196,13 @@ function cbWordParser(src, isTrimOkurigana = true) {
|
|
|
188
196
|
if (ii) {
|
|
189
197
|
src = ii[1] + josi + src;
|
|
190
198
|
josi = '';
|
|
191
|
-
res = res.
|
|
199
|
+
res = res.substring(0, res.length - ii[1].length);
|
|
192
200
|
}
|
|
193
201
|
// 助詞「こと」「である」「です」などは「**すること」のように使うので削除 #936 #939 #974
|
|
194
202
|
if (removeJosiMap[josi]) {
|
|
195
203
|
josi = '';
|
|
196
204
|
}
|
|
205
|
+
// 送り仮名の省略ルール
|
|
197
206
|
// 漢字カタカナ英語から始まる語句 --- 送り仮名を省略
|
|
198
207
|
if (isTrimOkurigana) {
|
|
199
208
|
res = trimOkurigana(res);
|
|
@@ -8,6 +8,7 @@ const kanakanji = /^[\u3005\u4E00-\u9FCF_a-zA-Z0-9ァ-ヶー\u2460-\u24FF\u2776-
|
|
|
8
8
|
const hira = /^[ぁ-ん]/
|
|
9
9
|
const allHiragana = /^[ぁ-ん]+$/
|
|
10
10
|
const wordHasIjoIka = /^.+(以上|以下|超|未満)$/
|
|
11
|
+
const wordSpecial = /^(かつ|または)/
|
|
11
12
|
const errorRead = (ch: string): any => {
|
|
12
13
|
return function () { throw new Error('突然の『' + ch + '』があります。') }
|
|
13
14
|
}
|
|
@@ -164,12 +165,16 @@ function cbWordParser (src: string, isTrimOkurigana = true): NakoLexParseResult
|
|
|
164
165
|
let res = ''
|
|
165
166
|
let josi = ''
|
|
166
167
|
while (src !== '') {
|
|
168
|
+
// 1文字以上のとき
|
|
167
169
|
if (res.length > 0) {
|
|
170
|
+
// 「かつ」「または」なら分割する
|
|
171
|
+
const jsw = wordSpecial.exec(src)
|
|
172
|
+
if (jsw) { break }
|
|
168
173
|
// 助詞の判定
|
|
169
174
|
const j = josiRE.exec(src)
|
|
170
175
|
if (j) {
|
|
171
176
|
josi = j[0].replace(/^\s+/, '')
|
|
172
|
-
src = src.
|
|
177
|
+
src = src.substring(j[0].length)
|
|
173
178
|
// 助詞の直後にある「,」を飛ばす #877
|
|
174
179
|
if (src.charAt(0) === ',') { src = src.substr(1) }
|
|
175
180
|
break
|
|
@@ -179,18 +184,19 @@ function cbWordParser (src: string, isTrimOkurigana = true): NakoLexParseResult
|
|
|
179
184
|
const m = kanakanji.exec(src)
|
|
180
185
|
if (m) {
|
|
181
186
|
res += m[0]
|
|
182
|
-
src = src.
|
|
187
|
+
src = src.substring(m[0].length)
|
|
183
188
|
continue
|
|
184
189
|
}
|
|
185
190
|
// ひらがな?
|
|
186
191
|
const h = hira.test(src)
|
|
187
192
|
if (h) {
|
|
188
193
|
res += src.charAt(0)
|
|
189
|
-
src = src.
|
|
194
|
+
src = src.substring(1)
|
|
190
195
|
continue
|
|
191
196
|
}
|
|
192
197
|
break // other chars
|
|
193
198
|
}
|
|
199
|
+
// --- 単語分割における特殊ルール ---
|
|
194
200
|
// 「間」の特殊ルール (#831)
|
|
195
201
|
// 「等しい間」や「一致する間」なら「間」をsrcに戻す。ただし「システム時間」はそのままにする。
|
|
196
202
|
if (/[ぁ-ん]間$/.test(res)) {
|
|
@@ -202,11 +208,12 @@ function cbWordParser (src: string, isTrimOkurigana = true): NakoLexParseResult
|
|
|
202
208
|
if (ii) {
|
|
203
209
|
src = ii[1] + josi + src
|
|
204
210
|
josi = ''
|
|
205
|
-
res = res.
|
|
211
|
+
res = res.substring(0, res.length - ii[1].length)
|
|
206
212
|
}
|
|
207
213
|
// 助詞「こと」「である」「です」などは「**すること」のように使うので削除 #936 #939 #974
|
|
208
214
|
if (removeJosiMap[josi]) { josi = '' }
|
|
209
215
|
|
|
216
|
+
// 送り仮名の省略ルール
|
|
210
217
|
// 漢字カタカナ英語から始まる語句 --- 送り仮名を省略
|
|
211
218
|
if (isTrimOkurigana) {
|
|
212
219
|
res = trimOkurigana(res)
|
|
@@ -463,7 +463,7 @@ export default {
|
|
|
463
463
|
},
|
|
464
464
|
'範囲内': { // @VがAからBの範囲内か // @はんいない
|
|
465
465
|
type: 'func',
|
|
466
|
-
josi: [['が'], ['から'], ['の','までの']],
|
|
466
|
+
josi: [['が'], ['から'], ['の', 'までの']],
|
|
467
467
|
pure: true,
|
|
468
468
|
fn: function (v: any, a: any, b: any) {
|
|
469
469
|
return (a <= v) && (v <= b)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable no-undef */
|
|
2
|
+
import assert from 'assert'
|
|
3
|
+
import { NakoCompiler } from '../src/nako3.mjs'
|
|
4
|
+
|
|
5
|
+
describe('or_test.js', async () => {
|
|
6
|
+
const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
|
|
7
|
+
const nako = new NakoCompiler()
|
|
8
|
+
assert.strictEqual((await nako.runAsync(code)).log, res)
|
|
9
|
+
}
|
|
10
|
+
it('『または』がうまく動いてない #1379', async () => {
|
|
11
|
+
await cmp('(0||0)を表示', '0')
|
|
12
|
+
await cmp('(0または0)を表示', '0')
|
|
13
|
+
await cmp('(0または1)を表示', '1')
|
|
14
|
+
await cmp('ゼロ=0;(ゼロ||ゼロ)を表示', '0')
|
|
15
|
+
await cmp('ゼロ=0;(ゼロまたはゼロ)を表示', '0')
|
|
16
|
+
await cmp('ゼロ=0;イチ=1;(ゼロまたはイチ)を表示', '1')
|
|
17
|
+
})
|
|
18
|
+
it('『かつ』がうまく動いてない #1379', async () => {
|
|
19
|
+
await cmp('(0かつ0)を表示', '0')
|
|
20
|
+
await cmp('(1かつ1)を表示', '1')
|
|
21
|
+
await cmp('ゼロ=0;イチ=1;(ゼロかつゼロ)を表示', '0')
|
|
22
|
+
await cmp('ゼロ=0;イチ=1;(ゼロかつイチ)を表示', '0')
|
|
23
|
+
await cmp('ゼロ=0;イチ=1;(ゼロかつゼロ)を表示', '0')
|
|
24
|
+
await cmp('ゼロ=0;イチ=1;(イチかつイチ)を表示', '1')
|
|
25
|
+
})
|
|
26
|
+
})
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* eslint-disable no-undef */
|
|
2
|
+
import assert from 'assert'
|
|
3
|
+
import { NakoCompiler } from '../src/nako3.mjs'
|
|
4
|
+
|
|
5
|
+
describe('or_test.js', async () => {
|
|
6
|
+
const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
|
|
7
|
+
const nako = new NakoCompiler()
|
|
8
|
+
assert.strictEqual((await nako.runAsync(code)).log, res)
|
|
9
|
+
}
|
|
10
|
+
it('『または』がうまく動いてない #1379', async () => {
|
|
11
|
+
await cmp('(0||0)を表示', '0')
|
|
12
|
+
await cmp('(0または0)を表示', '0')
|
|
13
|
+
await cmp('(0または1)を表示', '1')
|
|
14
|
+
await cmp('ゼロ=0;(ゼロ||ゼロ)を表示', '0')
|
|
15
|
+
await cmp('ゼロ=0;(ゼロまたはゼロ)を表示', '0')
|
|
16
|
+
await cmp('ゼロ=0;イチ=1;(ゼロまたはイチ)を表示', '1')
|
|
17
|
+
})
|
|
18
|
+
it('『かつ』がうまく動いてない #1379', async () => {
|
|
19
|
+
await cmp('(0かつ0)を表示', '0')
|
|
20
|
+
await cmp('(1かつ1)を表示', '1')
|
|
21
|
+
await cmp('ゼロ=0;イチ=1;(ゼロかつゼロ)を表示', '0')
|
|
22
|
+
await cmp('ゼロ=0;イチ=1;(ゼロかつイチ)を表示', '0')
|
|
23
|
+
await cmp('ゼロ=0;イチ=1;(ゼロかつゼロ)を表示', '0')
|
|
24
|
+
await cmp('ゼロ=0;イチ=1;(イチかつイチ)を表示', '1')
|
|
25
|
+
})
|
|
26
|
+
it('『または』が動かない #1379', async () => {
|
|
27
|
+
await cmp('条件イははい。条件ロはいいえ。もし、条件イまたは条件ロならば「AAA」と表示。', 'AAA')
|
|
28
|
+
await cmp('条件イははい。条件ロははい。もし、条件イかつ条件ロならば「BBB」と表示。', 'BBB')
|
|
29
|
+
})
|
|
30
|
+
})
|
package/package.json
CHANGED
package/release/_hash.txt
CHANGED
|
@@ -9,10 +9,10 @@ editor.js:
|
|
|
9
9
|
sha256(base64): AKs71TgblihDpp84UJZwzLbQRH4uHuwj7ZJMfMPZK8k=
|
|
10
10
|
sha512(base64): K9Hp76NUQnMlUeuV++HHrbnhlJpUH0lOXb6kewFf4VWqA7Cs7udcyiXAYZBZDDGZHEGfyHhU4TjPoivEKsikVQ==
|
|
11
11
|
nako_gen_async.js:
|
|
12
|
-
md5(hex):
|
|
13
|
-
sha256(hex):
|
|
14
|
-
sha256(base64):
|
|
15
|
-
sha512(base64):
|
|
12
|
+
md5(hex): fe5a301a302834cf168ea1b52ea1114a
|
|
13
|
+
sha256(hex): 3934d0e8c6fd8241f175640a895a07eec122c52bd579882f3770de518c4bf638
|
|
14
|
+
sha256(base64): OTTQ6Mb9gkHxdWQKiVoH7sEixSvVeYgvN3DeUYxL9jg=
|
|
15
|
+
sha512(base64): DZsoBWxek3lqI3AWSHDHDh8roGBwkjUxNFBYfMw/9P9pBDZle12XW64UHCY9Bs9ToDV9aMqn92oI57n1j2J6rA==
|
|
16
16
|
plugin_caniuse.js:
|
|
17
17
|
md5(hex): 95a7a5c98a92a46b6435e577daba3241
|
|
18
18
|
sha256(hex): 57638b3979be70b45ab8085861f6b2ece43200bd6aa92765d73caf76b9e6fea9
|
|
@@ -54,17 +54,17 @@ plugin_weykturtle3d.js:
|
|
|
54
54
|
sha256(base64): ND/1JqYrFVGTIPYsbBk+tScnF8RVzgYPM0/E2aE8GRw=
|
|
55
55
|
sha512(base64): T4B8Cvhn9j5YdMGk4rwPInfqmcXtGEjD2g6X6wSqXvYyIXuSy+t1RVf1viZ2zljHlk3wN6pwKvvg/NIJvfMAzw==
|
|
56
56
|
version.js:
|
|
57
|
-
md5(hex):
|
|
58
|
-
sha256(hex):
|
|
59
|
-
sha256(base64):
|
|
60
|
-
sha512(base64):
|
|
57
|
+
md5(hex): 8593908cb66e37f89a5c653b5baea398
|
|
58
|
+
sha256(hex): 61520bc06672ab62082211f93bc8ba87908e22a8e294c33677a25002e0206403
|
|
59
|
+
sha256(base64): YVILwGZyq2IIIhH5O8i6h5COIqjilMM2d6JQAuAgZAM=
|
|
60
|
+
sha512(base64): 6HnPJpnGj+vucUs4ktOTQL0sw5yL23IgOT9LJMruPOmF7mKcLE+xDA4D/fDVeY9szTt1PB2mlMc/+Q6MVG7pwg==
|
|
61
61
|
wnako3.js:
|
|
62
|
-
md5(hex):
|
|
63
|
-
sha256(hex):
|
|
64
|
-
sha256(base64):
|
|
65
|
-
sha512(base64):
|
|
62
|
+
md5(hex): 67df3591c0c30d500e576e6a6feba498
|
|
63
|
+
sha256(hex): 593374d615993d322871308aa6f437f7db83a8883049e212706dd9568bac2d1a
|
|
64
|
+
sha256(base64): WTN01hWZPTIocTCKpvQ399uDqIgwSeIScG3ZVousLRo=
|
|
65
|
+
sha512(base64): ZsWFnKhQ7uXqi7Bv9kdeAKznuLIu9Il3F9J+BYq2OubEaJCPIyY0aL0seYjX1jLIqtpgJMzLo1gBLxyDb9YJVw==
|
|
66
66
|
wnako3webworker.js:
|
|
67
|
-
md5(hex):
|
|
68
|
-
sha256(hex):
|
|
69
|
-
sha256(base64):
|
|
70
|
-
sha512(base64):
|
|
67
|
+
md5(hex): 090c10d08907019b43e0730d462d7960
|
|
68
|
+
sha256(hex): f2fd033e345e8ade4ca8c6bc648099e34605667ee7f2969c69c8943d73a1271a
|
|
69
|
+
sha256(base64): 8v0DPjReit5MqMa8ZICZ40YFZn7n8pacaciUPXOhJxo=
|
|
70
|
+
sha512(base64): OLJg7uNBJWVntCWlebkTG5JB7HQnXQBNbbuHK41vgdS3mMO8YzfPLJ3HMbqqtJwZzk0xLwa5U6k5g3gvhxT6XA==
|
package/release/_script-tags.txt
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
2
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
3
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
4
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
5
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
6
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
7
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
8
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
9
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
10
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
11
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
12
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
13
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
14
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.
|
|
1
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/command.json.js" integrity="sha512-SJzO+9IGCegE/L5x7MinvtrYbFHNZO2qt+bYsscZN0FKL6ADBXZp4GzFD0D7Xd7jNcw8vr4X4TkEsuyYGHLBrQ==" crossorigin="anonymous"></script>
|
|
2
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/editor.js" integrity="sha512-K9Hp76NUQnMlUeuV++HHrbnhlJpUH0lOXb6kewFf4VWqA7Cs7udcyiXAYZBZDDGZHEGfyHhU4TjPoivEKsikVQ==" crossorigin="anonymous"></script>
|
|
3
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/nako_gen_async.js" integrity="sha512-DZsoBWxek3lqI3AWSHDHDh8roGBwkjUxNFBYfMw/9P9pBDZle12XW64UHCY9Bs9ToDV9aMqn92oI57n1j2J6rA==" crossorigin="anonymous"></script>
|
|
4
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/plugin_caniuse.js" integrity="sha512-NbX6BKUNq1J8xwtv5CThQC54Lb/KxaPlimRpsF745nxqjYeuGD7S70j4yOgNm4Uwd7AN5FgezS6NDyhlvoJF2w==" crossorigin="anonymous"></script>
|
|
5
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/plugin_csv.js" integrity="sha512-mQvmj25L2Nc2L7gN1rTjayHVMMPhc7TCSiBsuKS4JKOQqN+91uj9qpLAOejzR1ib5jIOBdtrhN+secNTU9BJtw==" crossorigin="anonymous"></script>
|
|
6
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/plugin_datetime.js" integrity="sha512-1ADTZFkcfU6vpEEJZEYmIbqS6G2XViooDFD4198P61n7VKZ0PhEVj9l8ULFGrW7woSbDqfSPZmkZ7yvcRqPKYA==" crossorigin="anonymous"></script>
|
|
7
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/plugin_kansuji.js" integrity="sha512-tXC9Q6LejwYG+HUbXcwBHFmhwTsqiMHOBohLNcSx8b02hxk3waPUEQRWeNP7QxAFMv5BOAY+Grruf+XKmmU26g==" crossorigin="anonymous"></script>
|
|
8
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/plugin_markup.js" integrity="sha512-pvb+QYO9LMUH055nPJJ5QaWyEYR3wDkHHilV5LLNyxObs7enlHGiF7Jt3Csd93JTdJ3n9hxFbTqWa1QuzVmTfQ==" crossorigin="anonymous"></script>
|
|
9
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/plugin_turtle.js" integrity="sha512-ADtegZGlBz0Uk7DKn2zzkVUaA7cdVCRbyc4iOGwEFmXdx0KtzYKumgKIHQiniH3AdGMBhgGf6WZI3y7xcLoFmw==" crossorigin="anonymous"></script>
|
|
10
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/plugin_webworker.js" integrity="sha512-JLlIg9cW9UgM2AT+qMgEuKvea3t8R+1jihhlN/QGDQe7iCaGEfXfKG5gpvRb0IUyisNfzncUN8AfLn9wyxGGiw==" crossorigin="anonymous"></script>
|
|
11
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/plugin_weykturtle3d.js" integrity="sha512-T4B8Cvhn9j5YdMGk4rwPInfqmcXtGEjD2g6X6wSqXvYyIXuSy+t1RVf1viZ2zljHlk3wN6pwKvvg/NIJvfMAzw==" crossorigin="anonymous"></script>
|
|
12
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/version.js" integrity="sha512-6HnPJpnGj+vucUs4ktOTQL0sw5yL23IgOT9LJMruPOmF7mKcLE+xDA4D/fDVeY9szTt1PB2mlMc/+Q6MVG7pwg==" crossorigin="anonymous"></script>
|
|
13
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/wnako3.js" integrity="sha512-ZsWFnKhQ7uXqi7Bv9kdeAKznuLIu9Il3F9J+BYq2OubEaJCPIyY0aL0seYjX1jLIqtpgJMzLo1gBLxyDb9YJVw==" crossorigin="anonymous"></script>
|
|
14
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.4.1&f=release/wnako3webworker.js" integrity="sha512-OLJg7uNBJWVntCWlebkTG5JB7HQnXQBNbbuHK41vgdS3mMO8YzfPLJ3HMbqqtJwZzk0xLwa5U6k5g3gvhxT6XA==" crossorigin="anonymous"></script>
|