Coverage Report

Created: 2025-07-23 06:33

/src/php-src/ext/json/json_scanner.c
Line
Count
Source (jump to first uncovered line)
1
/* Generated by re2c 1.3 */
2
/*
3
  +----------------------------------------------------------------------+
4
  | Copyright (c) The PHP Group                                          |
5
  +----------------------------------------------------------------------+
6
  | This source file is subject to version 3.01 of the PHP license,      |
7
  | that is bundled with this package in the file LICENSE, and is        |
8
  | available through the world-wide-web at the following url:           |
9
  | https://www.php.net/license/3_01.txt                                 |
10
  | If you did not receive a copy of the PHP license and are unable to   |
11
  | obtain it through the world-wide-web, please send a note to          |
12
  | license@php.net so we can mail you a copy immediately.               |
13
  +----------------------------------------------------------------------+
14
  | Author: Jakub Zelenka <bukka@php.net>                                |
15
  +----------------------------------------------------------------------+
16
*/
17
18
#include "php.h"
19
#include "php_json_scanner.h"
20
#include "php_json_scanner_defs.h"
21
#include "php_json_parser.h"
22
#include "json_parser.tab.h"
23
24
14.3M
#define YYCTYPE     php_json_ctype
25
202M
#define YYCURSOR    s->cursor
26
#define YYLIMIT     s->limit
27
98.5M
#define YYMARKER    s->marker
28
#define YYCTXMARKER s->ctxmarker
29
30
28.7M
#define YYGETCONDITION()        s->state
31
134k
#define YYSETCONDITION(yystate) s->state = yystate
32
33
#define YYFILL(n)
34
35
131k
#define PHP_JSON_CONDITION_SET(condition) YYSETCONDITION(yyc##condition)
36
37.4M
#define PHP_JSON_CONDITION_GOTO(condition) goto yyc_##condition
37
#define PHP_JSON_CONDITION_SET_AND_GOTO(condition) \
38
61.7k
  PHP_JSON_CONDITION_SET(condition); \
39
61.7k
  PHP_JSON_CONDITION_GOTO(condition)
40
#define PHP_JSON_CONDITION_GOTO_STR_P2() \
41
243k
  do { \
42
243k
    if (s->utf8_invalid) { \
43
0
      PHP_JSON_CONDITION_GOTO(STR_P2_BIN); \
44
243k
    } else { \
45
243k
      PHP_JSON_CONDITION_GOTO(STR_P2_UTF); \
46
243k
    } \
47
243k
  } while(0)
48
49
50
31.4k
#define PHP_JSON_SCANNER_COPY_ESC() php_json_scanner_copy_string(s, 0)
51
209k
#define PHP_JSON_SCANNER_COPY_UTF() php_json_scanner_copy_string(s, 5)
52
1.64k
#define PHP_JSON_SCANNER_COPY_UTF_SP() php_json_scanner_copy_string(s, 11)
53
54
3.93M
#define PHP_JSON_INT_MAX_LENGTH (MAX_LENGTH_OF_LONG - 1)
55
56
57
static void php_json_scanner_copy_string(php_json_scanner *s, size_t esc_size)
58
243k
{
59
243k
  size_t len = (size_t)(s->cursor - s->str_start - esc_size - 1);
60
243k
  if (len) {
61
100k
    memcpy(s->pstr, s->str_start, len);
62
100k
    s->pstr += len;
63
100k
  }
64
243k
}
65
66
static int php_json_hex_to_int(unsigned char code)
67
610k
{
68
610k
  if (code >= '0' && code <= '9') {
69
280k
    return code - '0';
70
329k
  } else if (code >= 'A' && code <= 'F') {
71
263k
    return code - ('A' - 10);
72
263k
  } else if (code >= 'a' && code <= 'f') {
73
66.8k
    return code - ('a' - 10);
74
66.8k
  } else {
75
    /* this should never happened (just to suppress compiler warning) */
76
0
    return -1;
77
0
  }
78
610k
}
79
80
static int php_json_ucs2_to_int_ex(php_json_scanner *s, int size, int start)
81
213k
{
82
213k
  int i, code = 0;
83
213k
  php_json_ctype *pc = s->cursor - start;
84
823k
  for (i = 0; i < size; i++) {
85
610k
    code |= php_json_hex_to_int(*(pc--)) << (i * 4);
86
610k
  }
87
213k
  return code;
88
213k
}
89
90
static int php_json_ucs2_to_int(php_json_scanner *s, int size)
91
211k
{
92
211k
  return php_json_ucs2_to_int_ex(s, size, 1);
93
211k
}
94
95
void php_json_scanner_init(php_json_scanner *s, const char *str, size_t str_len, int options)
96
13.2k
{
97
13.2k
  s->cursor = (php_json_ctype *) str;
98
13.2k
  s->limit = (php_json_ctype *) str + str_len;
99
13.2k
  s->options = options;
100
13.2k
  PHP_JSON_CONDITION_SET(JS);
101
13.2k
}
102
103
int php_json_scan(php_json_scanner *s)
104
14.3M
{
105
14.3M
  ZVAL_NULL(&s->value);
106
107
14.3M
std:
108
14.3M
  s->token = s->cursor;
109
110
111
14.3M
  {
112
14.3M
    YYCTYPE yych;
113
14.3M
    unsigned int yyaccept = 0;
114
14.3M
    if (YYGETCONDITION() < 2) {
115
14.3M
      if (YYGETCONDITION() < 1) {
116
14.3M
        goto yyc_JS;
117
14.3M
      } else {
118
0
        goto yyc_STR_P1;
119
0
      }
120
14.3M
    } else {
121
0
      if (YYGETCONDITION() < 3) {
122
0
        goto yyc_STR_P2_BIN;
123
0
      } else {
124
0
        goto yyc_STR_P2_UTF;
125
0
      }
126
0
    }
127
/* *********************************** */
128
14.3M
yyc_JS:
129
14.3M
    {
130
14.3M
      static const unsigned char yybm[] = {
131
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
132
14.3M
          0,  64,   0,   0,   0,  64,   0,   0, 
133
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
134
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
135
14.3M
         64,   0,   0,   0,   0,   0,   0,   0, 
136
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
137
14.3M
        128, 128, 128, 128, 128, 128, 128, 128, 
138
14.3M
        128, 128,   0,   0,   0,   0,   0,   0, 
139
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
140
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
141
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
142
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
143
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
144
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
145
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
146
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
147
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
148
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
149
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
150
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
151
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
152
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
153
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
154
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
155
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
156
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
157
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
158
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
159
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
160
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
161
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
162
14.3M
          0,   0,   0,   0,   0,   0,   0,   0, 
163
14.3M
      };
164
14.3M
      yych = *YYCURSOR;
165
14.3M
      if (yych <= ']') {
166
10.1M
        if (yych <= '"') {
167
70.9k
          if (yych <= '\f') {
168
8.50k
            if (yych <= 0x08) {
169
7.65k
              if (yych >= 0x01) goto yy5;
170
7.65k
            } else {
171
851
              if (yych <= '\t') goto yy7;
172
603
              if (yych <= '\n') goto yy10;
173
7
              goto yy5;
174
603
            }
175
62.4k
          } else {
176
62.4k
            if (yych <= 0x1F) {
177
466
              if (yych <= '\r') goto yy11;
178
37
              goto yy5;
179
61.9k
            } else {
180
61.9k
              if (yych <= ' ') goto yy7;
181
61.7k
              if (yych <= '!') goto yy12;
182
61.7k
              goto yy14;
183
61.7k
            }
184
62.4k
          }
185
10.0M
        } else {
186
10.0M
          if (yych <= '0') {
187
8.47M
            if (yych <= ',') {
188
6.05M
              if (yych <= '+') goto yy12;
189
6.05M
              goto yy16;
190
6.05M
            } else {
191
2.42M
              if (yych <= '-') goto yy18;
192
2.41M
              if (yych <= '/') goto yy12;
193
2.41M
              goto yy19;
194
2.41M
            }
195
8.47M
          } else {
196
1.60M
            if (yych <= 'Z') {
197
1.58M
              if (yych <= '9') goto yy21;
198
55.6k
              if (yych <= ':') goto yy23;
199
119
              goto yy12;
200
55.6k
            } else {
201
14.2k
              if (yych <= '[') goto yy25;
202
6.05k
              if (yych <= '\\') goto yy12;
203
6.01k
              goto yy27;
204
6.05k
            }
205
1.60M
          }
206
10.0M
        }
207
10.1M
      } else {
208
4.23M
        if (yych <= '}') {
209
4.23M
          if (yych <= 's') {
210
771
            if (yych <= 'f') {
211
489
              if (yych <= 'e') goto yy12;
212
296
              goto yy29;
213
489
            } else {
214
282
              if (yych == 'n') goto yy30;
215
27
              goto yy12;
216
282
            }
217
4.23M
          } else {
218
4.23M
            if (yych <= 'z') {
219
283
              if (yych <= 't') goto yy31;
220
20
              goto yy12;
221
4.23M
            } else {
222
4.23M
              if (yych <= '{') goto yy32;
223
2.11M
              if (yych <= '|') goto yy12;
224
2.11M
              goto yy34;
225
2.11M
            }
226
4.23M
          }
227
4.23M
        } else {
228
495
          if (yych <= 0xEC) {
229
273
            if (yych <= 0xC1) {
230
88
              if (yych <= 0x7F) goto yy12;
231
75
              goto yy36;
232
185
            } else {
233
185
              if (yych <= 0xDF) goto yy38;
234
92
              if (yych <= 0xE0) goto yy39;
235
45
              goto yy40;
236
92
            }
237
273
          } else {
238
222
            if (yych <= 0xF0) {
239
107
              if (yych <= 0xED) goto yy41;
240
73
              if (yych <= 0xEF) goto yy40;
241
57
              goto yy42;
242
115
            } else {
243
115
              if (yych <= 0xF3) goto yy43;
244
66
              if (yych <= 0xF4) goto yy44;
245
29
              goto yy36;
246
66
            }
247
222
          }
248
495
        }
249
4.23M
      }
250
7.63k
      ++YYCURSOR;
251
7.63k
      {
252
7.63k
    if (s->limit < s->cursor) {
253
7.61k
      return PHP_JSON_T_EOI;
254
7.61k
    } else {
255
23
      s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
256
23
      return PHP_JSON_T_ERROR;
257
23
    }
258
7.63k
  }
259
65
yy5:
260
65
      ++YYCURSOR;
261
65
      {
262
65
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
263
65
    return PHP_JSON_T_ERROR;
264
7.63k
  }
265
695
yy7:
266
695
      yych = *++YYCURSOR;
267
930
yy8:
268
930
      if (yybm[0+yych] & 64) {
269
204
        goto yy7;
270
204
      }
271
1.51k
yy9:
272
1.51k
      { goto std; }
273
790
yy10:
274
790
      ++YYCURSOR;
275
790
      goto yy9;
276
429
yy11:
277
429
      yych = *++YYCURSOR;
278
429
      if (yych == '\n') goto yy10;
279
235
      goto yy8;
280
595
yy12:
281
595
      ++YYCURSOR;
282
855
yy13:
283
855
      {
284
855
    s->errcode = PHP_JSON_ERROR_SYNTAX;
285
855
    return PHP_JSON_T_ERROR;
286
595
  }
287
61.7k
yy14:
288
61.7k
      ++YYCURSOR;
289
61.7k
      {
290
61.7k
    s->str_start = s->cursor;
291
61.7k
    s->str_esc = 0;
292
61.7k
    s->utf8_invalid = 0;
293
61.7k
    s->utf8_invalid_count = 0;
294
61.7k
    PHP_JSON_CONDITION_SET_AND_GOTO(STR_P1);
295
595
  }
296
6.05M
yy16:
297
6.05M
      ++YYCURSOR;
298
6.05M
      { return ','; }
299
1.49k
yy18:
300
1.49k
      yych = *++YYCURSOR;
301
1.49k
      if (yych <= '/') goto yy13;
302
1.46k
      if (yych <= '0') goto yy19;
303
1.15k
      if (yych <= '9') goto yy21;
304
21
      goto yy13;
305
2.42M
yy19:
306
2.42M
      yyaccept = 0;
307
2.42M
      yych = *(YYMARKER = ++YYCURSOR);
308
2.42M
      if (yych <= 'D') {
309
2.41M
        if (yych == '.') goto yy45;
310
2.41M
      } else {
311
4.08k
        if (yych <= 'E') goto yy47;
312
3.78k
        if (yych == 'e') goto yy47;
313
3.78k
      }
314
3.92M
yy20:
315
3.92M
      {
316
3.92M
    bool bigint = 0, negative = s->token[0] == '-';
317
3.92M
    size_t digits = (size_t) (s->cursor - s->token - negative);
318
3.92M
    if (digits >= PHP_JSON_INT_MAX_LENGTH) {
319
2.61k
      if (digits == PHP_JSON_INT_MAX_LENGTH) {
320
1.01k
        int cmp = strncmp((char *) (s->token + negative), LONG_MIN_DIGITS, PHP_JSON_INT_MAX_LENGTH);
321
1.01k
        if (!(cmp < 0 || (cmp == 0 && negative))) {
322
588
          bigint = 1;
323
588
        }
324
1.59k
      } else {
325
1.59k
        bigint = 1;
326
1.59k
      }
327
2.61k
    }
328
3.92M
    if (!bigint) {
329
3.92M
      ZVAL_LONG(&s->value, ZEND_STRTOL((char *) s->token, NULL, 10));
330
3.92M
      return PHP_JSON_T_INT;
331
3.92M
    } else if (s->options & PHP_JSON_BIGINT_AS_STRING) {
332
0
      ZVAL_STRINGL(&s->value, (char *) s->token, (size_t)(s->cursor - s->token));
333
0
      return PHP_JSON_T_STRING;
334
2.18k
    } else {
335
2.18k
      ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
336
2.18k
      return PHP_JSON_T_DOUBLE;
337
2.18k
    }
338
3.92M
  }
339
21.3M
yy21:
340
21.3M
      yyaccept = 0;
341
21.3M
      yych = *(YYMARKER = ++YYCURSOR);
342
21.3M
      if (yybm[0+yych] & 128) {
343
19.7M
        goto yy21;
344
19.7M
      }
345
1.53M
      if (yych <= 'D') {
346
1.51M
        if (yych == '.') goto yy45;
347
1.50M
        goto yy20;
348
1.51M
      } else {
349
14.9k
        if (yych <= 'E') goto yy47;
350
13.4k
        if (yych == 'e') goto yy47;
351
3.25k
        goto yy20;
352
13.4k
      }
353
55.5k
yy23:
354
55.5k
      ++YYCURSOR;
355
55.5k
      { return ':'; }
356
8.18k
yy25:
357
8.18k
      ++YYCURSOR;
358
8.18k
      { return '['; }
359
6.01k
yy27:
360
6.01k
      ++YYCURSOR;
361
6.01k
      { return ']'; }
362
296
yy29:
363
296
      yyaccept = 1;
364
296
      yych = *(YYMARKER = ++YYCURSOR);
365
296
      if (yych == 'a') goto yy48;
366
23
      goto yy13;
367
255
yy30:
368
255
      yyaccept = 1;
369
255
      yych = *(YYMARKER = ++YYCURSOR);
370
255
      if (yych == 'u') goto yy49;
371
19
      goto yy13;
372
263
yy31:
373
263
      yyaccept = 1;
374
263
      yych = *(YYMARKER = ++YYCURSOR);
375
263
      if (yych == 'r') goto yy50;
376
25
      goto yy13;
377
2.12M
yy32:
378
2.12M
      ++YYCURSOR;
379
2.12M
      { return '{'; }
380
2.11M
yy34:
381
2.11M
      ++YYCURSOR;
382
2.11M
      { return '}'; }
383
104
yy36:
384
104
      ++YYCURSOR;
385
452
yy37:
386
452
      {
387
452
    s->errcode = PHP_JSON_ERROR_UTF8;
388
452
    return PHP_JSON_T_ERROR;
389
104
  }
390
93
yy38:
391
93
      yych = *++YYCURSOR;
392
93
      if (yych <= 0x7F) goto yy37;
393
42
      if (yych <= 0xBF) goto yy12;
394
27
      goto yy37;
395
47
yy39:
396
47
      yyaccept = 2;
397
47
      yych = *(YYMARKER = ++YYCURSOR);
398
47
      if (yych <= 0x9F) goto yy37;
399
28
      if (yych <= 0xBF) goto yy51;
400
7
      goto yy37;
401
61
yy40:
402
61
      yyaccept = 2;
403
61
      yych = *(YYMARKER = ++YYCURSOR);
404
61
      if (yych <= 0x7F) goto yy37;
405
41
      if (yych <= 0xBF) goto yy51;
406
15
      goto yy37;
407
34
yy41:
408
34
      yyaccept = 2;
409
34
      yych = *(YYMARKER = ++YYCURSOR);
410
34
      if (yych <= 0x7F) goto yy37;
411
31
      if (yych <= 0x9F) goto yy51;
412
13
      goto yy37;
413
57
yy42:
414
57
      yyaccept = 2;
415
57
      yych = *(YYMARKER = ++YYCURSOR);
416
57
      if (yych <= 0x8F) goto yy37;
417
28
      if (yych <= 0xBF) goto yy52;
418
9
      goto yy37;
419
49
yy43:
420
49
      yyaccept = 2;
421
49
      yych = *(YYMARKER = ++YYCURSOR);
422
49
      if (yych <= 0x7F) goto yy37;
423
42
      if (yych <= 0xBF) goto yy52;
424
13
      goto yy37;
425
37
yy44:
426
37
      yyaccept = 2;
427
37
      yych = *(YYMARKER = ++YYCURSOR);
428
37
      if (yych <= 0x7F) goto yy37;
429
34
      if (yych <= 0x8F) goto yy52;
430
19
      goto yy37;
431
9.88k
yy45:
432
9.88k
      yych = *++YYCURSOR;
433
9.88k
      if (yych <= '/') goto yy46;
434
9.84k
      if (yych <= '9') goto yy53;
435
532
yy46:
436
532
      YYCURSOR = YYMARKER;
437
532
      if (yyaccept <= 1) {
438
330
        if (yyaccept == 0) {
439
187
          goto yy20;
440
187
        } else {
441
143
          goto yy13;
442
143
        }
443
330
      } else {
444
202
        if (yyaccept == 2) {
445
113
          goto yy37;
446
113
        } else {
447
89
          goto yy55;
448
89
        }
449
202
      }
450
14.8k
yy47:
451
14.8k
      yych = *++YYCURSOR;
452
14.8k
      if (yych <= ',') {
453
403
        if (yych == '+') goto yy56;
454
131
        goto yy46;
455
14.4k
      } else {
456
14.4k
        if (yych <= '-') goto yy56;
457
8.69k
        if (yych <= '/') goto yy46;
458
8.69k
        if (yych <= '9') goto yy57;
459
40
        goto yy46;
460
8.69k
      }
461
273
yy48:
462
273
      yych = *++YYCURSOR;
463
273
      if (yych == 'l') goto yy59;
464
21
      goto yy46;
465
236
yy49:
466
236
      yych = *++YYCURSOR;
467
236
      if (yych == 'l') goto yy60;
468
21
      goto yy46;
469
238
yy50:
470
238
      yych = *++YYCURSOR;
471
238
      if (yych == 'u') goto yy61;
472
23
      goto yy46;
473
72
yy51:
474
72
      yych = *++YYCURSOR;
475
72
      if (yych <= 0x7F) goto yy46;
476
30
      if (yych <= 0xBF) goto yy12;
477
15
      goto yy46;
478
63
yy52:
479
63
      yych = *++YYCURSOR;
480
63
      if (yych <= 0x7F) goto yy46;
481
14
      if (yych <= 0xBF) goto yy51;
482
7
      goto yy46;
483
74.2M
yy53:
484
74.2M
      yyaccept = 3;
485
74.2M
      yych = *(YYMARKER = ++YYCURSOR);
486
74.2M
      if (yych <= 'D') {
487
74.2M
        if (yych <= '/') goto yy55;
488
74.2M
        if (yych <= '9') goto yy53;
489
74.2M
      } else {
490
3.08k
        if (yych <= 'E') goto yy47;
491
2.78k
        if (yych == 'e') goto yy47;
492
2.78k
      }
493
22.3k
yy55:
494
22.3k
      {
495
22.3k
    ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
496
22.3k
    return PHP_JSON_T_DOUBLE;
497
74.2M
  }
498
5.97k
yy56:
499
5.97k
      yych = *++YYCURSOR;
500
5.97k
      if (yych <= '/') goto yy46;
501
5.93k
      if (yych >= ':') goto yy46;
502
2.02M
yy57:
503
2.02M
      yych = *++YYCURSOR;
504
2.02M
      if (yych <= '/') goto yy55;
505
2.00M
      if (yych <= '9') goto yy57;
506
276
      goto yy55;
507
276
yy59:
508
252
      yych = *++YYCURSOR;
509
252
      if (yych == 's') goto yy62;
510
21
      goto yy46;
511
215
yy60:
512
215
      yych = *++YYCURSOR;
513
215
      if (yych == 'l') goto yy63;
514
17
      goto yy46;
515
215
yy61:
516
215
      yych = *++YYCURSOR;
517
215
      if (yych == 'e') goto yy65;
518
19
      goto yy46;
519
231
yy62:
520
231
      yych = *++YYCURSOR;
521
231
      if (yych == 'e') goto yy67;
522
21
      goto yy46;
523
198
yy63:
524
198
      ++YYCURSOR;
525
198
      {
526
198
    ZVAL_NULL(&s->value);
527
198
    return PHP_JSON_T_NUL;
528
231
  }
529
196
yy65:
530
196
      ++YYCURSOR;
531
196
      {
532
196
    ZVAL_TRUE(&s->value);
533
196
    return PHP_JSON_T_TRUE;
534
231
  }
535
210
yy67:
536
210
      ++YYCURSOR;
537
210
      {
538
210
    ZVAL_FALSE(&s->value);
539
210
    return PHP_JSON_T_FALSE;
540
231
  }
541
231
    }
542
/* *********************************** */
543
21.3M
yyc_STR_P1:
544
21.3M
    yych = *YYCURSOR;
545
21.3M
    if (yych <= 0xDF) {
546
21.3M
      if (yych <= '[') {
547
16.0M
        if (yych <= 0x1F) goto yy71;
548
16.0M
        if (yych == '"') goto yy75;
549
15.9M
        goto yy73;
550
16.0M
      } else {
551
5.31M
        if (yych <= '\\') goto yy77;
552
5.07M
        if (yych <= 0x7F) goto yy73;
553
325
        if (yych <= 0xC1) goto yy79;
554
306
        goto yy81;
555
325
      }
556
21.3M
    } else {
557
1.74k
      if (yych <= 0xEF) {
558
795
        if (yych <= 0xE0) goto yy82;
559
551
        if (yych == 0xED) goto yy84;
560
312
        goto yy83;
561
954
      } else {
562
954
        if (yych <= 0xF0) goto yy85;
563
593
        if (yych <= 0xF3) goto yy86;
564
295
        if (yych <= 0xF4) goto yy87;
565
13
        goto yy79;
566
295
      }
567
1.74k
    }
568
464
yy71:
569
464
    ++YYCURSOR;
570
464
    {
571
464
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
572
464
    return PHP_JSON_T_ERROR;
573
21.3M
  }
574
21.0M
yy73:
575
21.0M
    ++YYCURSOR;
576
21.0M
    { PHP_JSON_CONDITION_GOTO(STR_P1); }
577
59.4k
yy75:
578
59.4k
    ++YYCURSOR;
579
59.4k
    {
580
59.4k
    zend_string *str;
581
59.4k
    size_t len = (size_t)(s->cursor - s->str_start - s->str_esc - 1 + s->utf8_invalid_count);
582
59.4k
    if (len == 0) {
583
20.3k
      PHP_JSON_CONDITION_SET(JS);
584
20.3k
      ZVAL_EMPTY_STRING(&s->value);
585
20.3k
      return PHP_JSON_T_ESTRING;
586
20.3k
    }
587
39.0k
    str = zend_string_alloc(len, 0);
588
39.0k
    ZSTR_VAL(str)[len] = '\0';
589
39.0k
    ZVAL_STR(&s->value, str);
590
39.0k
    if (s->str_esc || s->utf8_invalid) {
591
3.32k
      s->pstr = (php_json_ctype *) Z_STRVAL(s->value);
592
3.32k
      s->cursor = s->str_start;
593
3.32k
      PHP_JSON_CONDITION_GOTO_STR_P2();
594
35.7k
    } else {
595
35.7k
      memcpy(Z_STRVAL(s->value), s->str_start, len);
596
35.7k
      PHP_JSON_CONDITION_SET(JS);
597
35.7k
      return PHP_JSON_T_STRING;
598
35.7k
    }
599
39.0k
  }
600
245k
yy77:
601
245k
    yyaccept = 0;
602
245k
    yych = *(YYMARKER = ++YYCURSOR);
603
245k
    if (yych <= 'e') {
604
27.3k
      if (yych <= '/') {
605
24.0k
        if (yych == '"') goto yy88;
606
542
        if (yych >= '/') goto yy88;
607
3.38k
      } else {
608
3.38k
        if (yych <= '\\') {
609
2.92k
          if (yych >= '\\') goto yy88;
610
2.92k
        } else {
611
453
          if (yych == 'b') goto yy88;
612
453
        }
613
3.38k
      }
614
218k
    } else {
615
218k
      if (yych <= 'q') {
616
1.09k
        if (yych <= 'f') goto yy88;
617
496
        if (yych == 'n') goto yy88;
618
217k
      } else {
619
217k
        if (yych <= 's') {
620
466
          if (yych <= 'r') goto yy88;
621
216k
        } else {
622
216k
          if (yych <= 't') goto yy88;
623
216k
          if (yych <= 'u') goto yy90;
624
216k
        }
625
217k
      }
626
218k
    }
627
1.15k
yy78:
628
1.15k
    {
629
1.15k
    s->errcode = PHP_JSON_ERROR_SYNTAX;
630
1.15k
    return PHP_JSON_T_ERROR;
631
245k
  }
632
32
yy79:
633
32
    ++YYCURSOR;
634
408
yy80:
635
408
    {
636
408
    if (s->options & (PHP_JSON_INVALID_UTF8_IGNORE | PHP_JSON_INVALID_UTF8_SUBSTITUTE)) {
637
0
      if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
638
0
        if (s->utf8_invalid_count > INT_MAX - 2) {
639
0
          s->errcode = PHP_JSON_ERROR_UTF8;
640
0
          return PHP_JSON_T_ERROR;
641
0
        }
642
0
        s->utf8_invalid_count += 2;
643
0
      } else {
644
0
        s->utf8_invalid_count--;
645
0
      }
646
0
      s->utf8_invalid = 1;
647
0
      PHP_JSON_CONDITION_GOTO(STR_P1);
648
0
    }
649
408
    s->errcode = PHP_JSON_ERROR_UTF8;
650
408
    return PHP_JSON_T_ERROR;
651
408
  }
652
306
yy81:
653
306
    yych = *++YYCURSOR;
654
306
    if (yych <= 0x7F) goto yy80;
655
291
    if (yych <= 0xBF) goto yy73;
656
15
    goto yy80;
657
244
yy82:
658
244
    yyaccept = 1;
659
244
    yych = *(YYMARKER = ++YYCURSOR);
660
244
    if (yych <= 0x9F) goto yy80;
661
229
    if (yych <= 0xBF) goto yy92;
662
11
    goto yy80;
663
312
yy83:
664
312
    yyaccept = 1;
665
312
    yych = *(YYMARKER = ++YYCURSOR);
666
312
    if (yych <= 0x7F) goto yy80;
667
297
    if (yych <= 0xBF) goto yy92;
668
15
    goto yy80;
669
239
yy84:
670
239
    yyaccept = 1;
671
239
    yych = *(YYMARKER = ++YYCURSOR);
672
239
    if (yych <= 0x7F) goto yy80;
673
236
    if (yych <= 0x9F) goto yy92;
674
13
    goto yy80;
675
361
yy85:
676
361
    yyaccept = 1;
677
361
    yych = *(YYMARKER = ++YYCURSOR);
678
361
    if (yych <= 0x8F) goto yy80;
679
342
    if (yych <= 0xBF) goto yy93;
680
3
    goto yy80;
681
298
yy86:
682
298
    yyaccept = 1;
683
298
    yych = *(YYMARKER = ++YYCURSOR);
684
298
    if (yych <= 0x7F) goto yy80;
685
293
    if (yych <= 0xBF) goto yy93;
686
19
    goto yy80;
687
282
yy87:
688
282
    yyaccept = 1;
689
282
    yych = *(YYMARKER = ++YYCURSOR);
690
282
    if (yych <= 0x7F) goto yy80;
691
279
    if (yych <= 0x8F) goto yy93;
692
19
    goto yy80;
693
29.3k
yy88:
694
29.3k
    ++YYCURSOR;
695
29.3k
    {
696
29.3k
    s->str_esc++;
697
29.3k
    PHP_JSON_CONDITION_GOTO(STR_P1);
698
279
  }
699
216k
yy90:
700
216k
    yych = *++YYCURSOR;
701
216k
    if (yych <= 'D') {
702
212k
      if (yych <= '9') {
703
209k
        if (yych <= '/') goto yy91;
704
209k
        if (yych <= '0') goto yy94;
705
23.2k
        goto yy95;
706
209k
      } else {
707
3.30k
        if (yych <= '@') goto yy91;
708
3.29k
        if (yych <= 'C') goto yy95;
709
2.27k
        goto yy96;
710
3.29k
      }
711
212k
    } else {
712
3.33k
      if (yych <= 'c') {
713
738
        if (yych <= 'F') goto yy95;
714
307
        if (yych >= 'a') goto yy95;
715
2.60k
      } else {
716
2.60k
        if (yych <= 'd') goto yy96;
717
623
        if (yych <= 'f') goto yy95;
718
623
      }
719
3.33k
    }
720
1.45k
yy91:
721
1.45k
    YYCURSOR = YYMARKER;
722
1.45k
    if (yyaccept <= 1) {
723
1.25k
      if (yyaccept == 0) {
724
1.04k
        goto yy78;
725
1.04k
      } else {
726
206
        goto yy80;
727
206
      }
728
1.25k
    } else {
729
205
      goto yy114;
730
205
    }
731
1.51k
yy92:
732
1.51k
    yych = *++YYCURSOR;
733
1.51k
    if (yych <= 0x7F) goto yy91;
734
1.40k
    if (yych <= 0xBF) goto yy73;
735
15
    goto yy91;
736
873
yy93:
737
873
    yych = *++YYCURSOR;
738
873
    if (yych <= 0x7F) goto yy91;
739
803
    if (yych <= 0xBF) goto yy92;
740
15
    goto yy91;
741
186k
yy94:
742
186k
    yych = *++YYCURSOR;
743
186k
    if (yych <= '9') {
744
182k
      if (yych <= '/') goto yy91;
745
182k
      if (yych <= '0') goto yy97;
746
3.47k
      if (yych <= '7') goto yy98;
747
636
      goto yy99;
748
3.48k
    } else {
749
3.48k
      if (yych <= 'F') {
750
381
        if (yych <= '@') goto yy91;
751
378
        goto yy99;
752
3.10k
      } else {
753
3.10k
        if (yych <= '`') goto yy91;
754
3.09k
        if (yych <= 'f') goto yy99;
755
17
        goto yy91;
756
3.09k
      }
757
3.48k
    }
758
25.6k
yy95:
759
25.6k
    yych = *++YYCURSOR;
760
25.6k
    if (yych <= '@') {
761
4.19k
      if (yych <= '/') goto yy91;
762
4.11k
      if (yych <= '9') goto yy99;
763
5
      goto yy91;
764
21.4k
    } else {
765
21.4k
      if (yych <= 'F') goto yy99;
766
20.2k
      if (yych <= '`') goto yy91;
767
20.2k
      if (yych <= 'f') goto yy99;
768
19
      goto yy91;
769
20.2k
    }
770
4.25k
yy96:
771
4.25k
    yych = *++YYCURSOR;
772
4.25k
    if (yych <= 'B') {
773
2.66k
      if (yych <= '7') {
774
870
        if (yych <= '/') goto yy91;
775
838
        goto yy99;
776
1.79k
      } else {
777
1.79k
        if (yych <= '9') goto yy100;
778
1.19k
        if (yych <= '@') goto yy91;
779
1.18k
        goto yy100;
780
1.19k
      }
781
2.66k
    } else {
782
1.59k
      if (yych <= '`') {
783
97
        if (yych <= 'F') goto yy101;
784
9
        goto yy91;
785
1.49k
      } else {
786
1.49k
        if (yych <= 'b') goto yy100;
787
57
        if (yych <= 'f') goto yy101;
788
17
        goto yy91;
789
57
      }
790
1.59k
    }
791
179k
yy97:
792
179k
    yych = *++YYCURSOR;
793
179k
    if (yych <= '@') {
794
63.1k
      if (yych <= '/') goto yy91;
795
63.1k
      if (yych <= '7') goto yy102;
796
879
      if (yych <= '9') goto yy103;
797
9
      goto yy91;
798
116k
    } else {
799
116k
      if (yych <= 'F') goto yy103;
800
1.54k
      if (yych <= '`') goto yy91;
801
1.53k
      if (yych <= 'f') goto yy103;
802
19
      goto yy91;
803
1.53k
    }
804
2.83k
yy98:
805
2.83k
    yych = *++YYCURSOR;
806
2.83k
    if (yych <= '@') {
807
607
      if (yych <= '/') goto yy91;
808
598
      if (yych <= '9') goto yy103;
809
3
      goto yy91;
810
2.22k
    } else {
811
2.22k
      if (yych <= 'F') goto yy103;
812
1.25k
      if (yych <= '`') goto yy91;
813
1.24k
      if (yych <= 'f') goto yy103;
814
15
      goto yy91;
815
1.24k
    }
816
30.4k
yy99:
817
30.4k
    yych = *++YYCURSOR;
818
30.4k
    if (yych <= '@') {
819
25.4k
      if (yych <= '/') goto yy91;
820
25.3k
      if (yych <= '9') goto yy104;
821
5
      goto yy91;
822
25.3k
    } else {
823
4.95k
      if (yych <= 'F') goto yy104;
824
849
      if (yych <= '`') goto yy91;
825
838
      if (yych <= 'f') goto yy104;
826
17
      goto yy91;
827
838
    }
828
3.22k
yy100:
829
3.22k
    yych = *++YYCURSOR;
830
3.22k
    if (yych <= '@') {
831
836
      if (yych <= '/') goto yy91;
832
796
      if (yych <= '9') goto yy105;
833
11
      goto yy91;
834
2.39k
    } else {
835
2.39k
      if (yych <= 'F') goto yy105;
836
1.30k
      if (yych <= '`') goto yy91;
837
1.30k
      if (yych <= 'f') goto yy105;
838
19
      goto yy91;
839
1.30k
    }
840
128
yy101:
841
128
    yych = *++YYCURSOR;
842
128
    if (yych <= '@') {
843
57
      if (yych <= '/') goto yy91;
844
39
      if (yych <= '9') goto yy106;
845
5
      goto yy91;
846
71
    } else {
847
71
      if (yych <= 'F') goto yy106;
848
46
      if (yych <= '`') goto yy91;
849
33
      if (yych <= 'f') goto yy106;
850
13
      goto yy91;
851
33
    }
852
62.2k
yy102:
853
62.2k
    yych = *++YYCURSOR;
854
62.2k
    if (yych <= '@') {
855
11.7k
      if (yych <= '/') goto yy91;
856
11.7k
      if (yych <= '9') goto yy107;
857
9
      goto yy91;
858
50.4k
    } else {
859
50.4k
      if (yych <= 'F') goto yy107;
860
34.0k
      if (yych <= '`') goto yy91;
861
34.0k
      if (yych <= 'f') goto yy107;
862
15
      goto yy91;
863
34.0k
    }
864
119k
yy103:
865
119k
    yych = *++YYCURSOR;
866
119k
    if (yych <= '@') {
867
3.75k
      if (yych <= '/') goto yy91;
868
3.64k
      if (yych <= '9') goto yy109;
869
5
      goto yy91;
870
116k
    } else {
871
116k
      if (yych <= 'F') goto yy109;
872
615
      if (yych <= '`') goto yy91;
873
608
      if (yych <= 'f') goto yy109;
874
17
      goto yy91;
875
608
    }
876
30.2k
yy104:
877
30.2k
    yych = *++YYCURSOR;
878
30.2k
    if (yych <= '@') {
879
25.3k
      if (yych <= '/') goto yy91;
880
25.2k
      if (yych <= '9') goto yy111;
881
7
      goto yy91;
882
25.2k
    } else {
883
4.93k
      if (yych <= 'F') goto yy111;
884
1.10k
      if (yych <= '`') goto yy91;
885
1.09k
      if (yych <= 'f') goto yy111;
886
15
      goto yy91;
887
1.09k
    }
888
3.14k
yy105:
889
3.14k
    yych = *++YYCURSOR;
890
3.14k
    if (yych <= '@') {
891
686
      if (yych <= '/') goto yy91;
892
630
      if (yych <= '9') goto yy113;
893
9
      goto yy91;
894
2.46k
    } else {
895
2.46k
      if (yych <= 'F') goto yy113;
896
777
      if (yych <= '`') goto yy91;
897
766
      if (yych <= 'f') goto yy113;
898
17
      goto yy91;
899
766
    }
900
79
yy106:
901
79
    yych = *++YYCURSOR;
902
79
    if (yych <= '@') {
903
37
      if (yych <= '/') goto yy91;
904
12
      if (yych <= '9') goto yy115;
905
7
      goto yy91;
906
42
    } else {
907
42
      if (yych <= 'F') goto yy115;
908
35
      if (yych <= '`') goto yy91;
909
28
      if (yych <= 'f') goto yy115;
910
21
      goto yy91;
911
28
    }
912
62.2k
yy107:
913
62.2k
    ++YYCURSOR;
914
62.2k
    {
915
62.2k
    s->str_esc += 5;
916
62.2k
    PHP_JSON_CONDITION_GOTO(STR_P1);
917
79
  }
918
119k
yy109:
919
119k
    ++YYCURSOR;
920
119k
    {
921
119k
    s->str_esc += 4;
922
119k
    PHP_JSON_CONDITION_GOTO(STR_P1);
923
79
  }
924
30.1k
yy111:
925
30.1k
    ++YYCURSOR;
926
30.1k
    {
927
30.1k
    s->str_esc += 3;
928
30.1k
    PHP_JSON_CONDITION_GOTO(STR_P1);
929
79
  }
930
3.05k
yy113:
931
3.05k
    yyaccept = 2;
932
3.05k
    yych = *(YYMARKER = ++YYCURSOR);
933
3.05k
    if (yych == '\\') goto yy116;
934
286
yy114:
935
286
    {
936
286
    s->errcode = PHP_JSON_ERROR_UTF16;
937
286
    return PHP_JSON_T_ERROR;
938
3.05k
  }
939
19
yy115:
940
19
    ++YYCURSOR;
941
19
    goto yy114;
942
2.99k
yy116:
943
2.99k
    yych = *++YYCURSOR;
944
2.99k
    if (yych != 'u') goto yy91;
945
2.96k
    yych = *++YYCURSOR;
946
2.96k
    if (yych == 'D') goto yy118;
947
791
    if (yych != 'd') goto yy91;
948
2.95k
yy118:
949
2.95k
    yych = *++YYCURSOR;
950
2.95k
    if (yych <= 'B') goto yy91;
951
2.92k
    if (yych <= 'F') goto yy119;
952
1.51k
    if (yych <= 'b') goto yy91;
953
1.51k
    if (yych >= 'g') goto yy91;
954
2.90k
yy119:
955
2.90k
    yych = *++YYCURSOR;
956
2.90k
    if (yych <= '@') {
957
853
      if (yych <= '/') goto yy91;
958
829
      if (yych >= ':') goto yy91;
959
2.05k
    } else {
960
2.05k
      if (yych <= 'F') goto yy120;
961
1.02k
      if (yych <= '`') goto yy91;
962
1.01k
      if (yych >= 'g') goto yy91;
963
1.01k
    }
964
2.85k
yy120:
965
2.85k
    yych = *++YYCURSOR;
966
2.85k
    if (yych <= '@') {
967
979
      if (yych <= '/') goto yy91;
968
940
      if (yych >= ':') goto yy91;
969
1.87k
    } else {
970
1.87k
      if (yych <= 'F') goto yy121;
971
902
      if (yych <= '`') goto yy91;
972
893
      if (yych >= 'g') goto yy91;
973
893
    }
974
2.78k
yy121:
975
2.78k
    ++YYCURSOR;
976
2.78k
    {
977
2.78k
    s->str_esc += 8;
978
2.78k
    PHP_JSON_CONDITION_GOTO(STR_P1);
979
2.85k
  }
980
/* *********************************** */
981
0
yyc_STR_P2_BIN:
982
0
    yych = *YYCURSOR;
983
0
    if (yych <= 0xDF) {
984
0
      if (yych <= '[') {
985
0
        if (yych == '"') goto yy127;
986
0
      } else {
987
0
        if (yych <= '\\') goto yy129;
988
0
        if (yych <= 0x7F) goto yy125;
989
0
        if (yych <= 0xC1) goto yy131;
990
0
        goto yy133;
991
0
      }
992
0
    } else {
993
0
      if (yych <= 0xEF) {
994
0
        if (yych <= 0xE0) goto yy134;
995
0
        if (yych == 0xED) goto yy136;
996
0
        goto yy135;
997
0
      } else {
998
0
        if (yych <= 0xF0) goto yy137;
999
0
        if (yych <= 0xF3) goto yy138;
1000
0
        if (yych <= 0xF4) goto yy139;
1001
0
        goto yy131;
1002
0
      }
1003
0
    }
1004
0
yy125:
1005
0
    ++YYCURSOR;
1006
0
    { PHP_JSON_CONDITION_GOTO(STR_P2_BIN); }
1007
0
yy127:
1008
0
    ++YYCURSOR;
1009
0
    YYSETCONDITION(yycJS);
1010
0
    {
1011
0
    PHP_JSON_SCANNER_COPY_ESC();
1012
0
    return PHP_JSON_T_STRING;
1013
0
  }
1014
0
yy129:
1015
0
    yyaccept = 0;
1016
0
    yych = *(YYMARKER = ++YYCURSOR);
1017
0
    if (yych == 'u') goto yy140;
1018
0
yy130:
1019
0
    {
1020
0
    unsigned char esc;
1021
0
    PHP_JSON_SCANNER_COPY_ESC();
1022
0
    switch (*s->cursor) {
1023
0
      case 'b':
1024
0
        esc = '\b';
1025
0
        break;
1026
0
      case 'f':
1027
0
        esc = '\f';       break;
1028
0
      case 'n':
1029
0
        esc = '\n';
1030
0
        break;
1031
0
      case 'r':
1032
0
        esc = '\r';
1033
0
        break;
1034
0
      case 't':
1035
0
        esc = '\t';
1036
0
        break;
1037
0
      case '\\':
1038
0
      case '/':
1039
0
      case '"':
1040
0
        esc = *s->cursor;
1041
0
        break;
1042
0
      default:
1043
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1044
0
        return PHP_JSON_T_ERROR;
1045
0
    }
1046
0
    *(s->pstr++) = esc;
1047
0
    ++YYCURSOR;
1048
0
    s->str_start = s->cursor;
1049
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1050
0
  }
1051
0
yy131:
1052
0
    ++YYCURSOR;
1053
0
yy132:
1054
0
    {
1055
0
    if (s->utf8_invalid) {
1056
0
      PHP_JSON_SCANNER_COPY_ESC();
1057
0
      if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
1058
0
        *(s->pstr++) = (unsigned char) (0xe0 | (0xfffd >> 12));
1059
0
        *(s->pstr++) = (unsigned char) (0x80 | ((0xfffd >> 6) & 0x3f));
1060
0
        *(s->pstr++) = (unsigned char) (0x80 | (0xfffd & 0x3f));
1061
0
      }
1062
0
      s->str_start = s->cursor;
1063
0
    }
1064
0
    PHP_JSON_CONDITION_GOTO(STR_P2_BIN);
1065
0
  }
1066
0
yy133:
1067
0
    yych = *++YYCURSOR;
1068
0
    if (yych <= 0x7F) goto yy132;
1069
0
    if (yych <= 0xBF) goto yy125;
1070
0
    goto yy132;
1071
0
yy134:
1072
0
    yyaccept = 1;
1073
0
    yych = *(YYMARKER = ++YYCURSOR);
1074
0
    if (yych <= 0x9F) goto yy132;
1075
0
    if (yych <= 0xBF) goto yy142;
1076
0
    goto yy132;
1077
0
yy135:
1078
0
    yyaccept = 1;
1079
0
    yych = *(YYMARKER = ++YYCURSOR);
1080
0
    if (yych <= 0x7F) goto yy132;
1081
0
    if (yych <= 0xBF) goto yy142;
1082
0
    goto yy132;
1083
0
yy136:
1084
0
    yyaccept = 1;
1085
0
    yych = *(YYMARKER = ++YYCURSOR);
1086
0
    if (yych <= 0x7F) goto yy132;
1087
0
    if (yych <= 0x9F) goto yy142;
1088
0
    goto yy132;
1089
0
yy137:
1090
0
    yyaccept = 1;
1091
0
    yych = *(YYMARKER = ++YYCURSOR);
1092
0
    if (yych <= 0x8F) goto yy132;
1093
0
    if (yych <= 0xBF) goto yy143;
1094
0
    goto yy132;
1095
0
yy138:
1096
0
    yyaccept = 1;
1097
0
    yych = *(YYMARKER = ++YYCURSOR);
1098
0
    if (yych <= 0x7F) goto yy132;
1099
0
    if (yych <= 0xBF) goto yy143;
1100
0
    goto yy132;
1101
0
yy139:
1102
0
    yyaccept = 1;
1103
0
    yych = *(YYMARKER = ++YYCURSOR);
1104
0
    if (yych <= 0x7F) goto yy132;
1105
0
    if (yych <= 0x8F) goto yy143;
1106
0
    goto yy132;
1107
0
yy140:
1108
0
    yych = *++YYCURSOR;
1109
0
    if (yych <= 'D') {
1110
0
      if (yych <= '9') {
1111
0
        if (yych <= '/') goto yy141;
1112
0
        if (yych <= '0') goto yy144;
1113
0
        goto yy145;
1114
0
      } else {
1115
0
        if (yych <= '@') goto yy141;
1116
0
        if (yych <= 'C') goto yy145;
1117
0
        goto yy146;
1118
0
      }
1119
0
    } else {
1120
0
      if (yych <= 'c') {
1121
0
        if (yych <= 'F') goto yy145;
1122
0
        if (yych >= 'a') goto yy145;
1123
0
      } else {
1124
0
        if (yych <= 'd') goto yy146;
1125
0
        if (yych <= 'f') goto yy145;
1126
0
      }
1127
0
    }
1128
0
yy141:
1129
0
    YYCURSOR = YYMARKER;
1130
0
    if (yyaccept == 0) {
1131
0
      goto yy130;
1132
0
    } else {
1133
0
      goto yy132;
1134
0
    }
1135
0
yy142:
1136
0
    yych = *++YYCURSOR;
1137
0
    if (yych <= 0x7F) goto yy141;
1138
0
    if (yych <= 0xBF) goto yy125;
1139
0
    goto yy141;
1140
0
yy143:
1141
0
    yych = *++YYCURSOR;
1142
0
    if (yych <= 0x7F) goto yy141;
1143
0
    if (yych <= 0xBF) goto yy142;
1144
0
    goto yy141;
1145
0
yy144:
1146
0
    yych = *++YYCURSOR;
1147
0
    if (yych <= '9') {
1148
0
      if (yych <= '/') goto yy141;
1149
0
      if (yych <= '0') goto yy147;
1150
0
      if (yych <= '7') goto yy148;
1151
0
      goto yy149;
1152
0
    } else {
1153
0
      if (yych <= 'F') {
1154
0
        if (yych <= '@') goto yy141;
1155
0
        goto yy149;
1156
0
      } else {
1157
0
        if (yych <= '`') goto yy141;
1158
0
        if (yych <= 'f') goto yy149;
1159
0
        goto yy141;
1160
0
      }
1161
0
    }
1162
0
yy145:
1163
0
    yych = *++YYCURSOR;
1164
0
    if (yych <= '@') {
1165
0
      if (yych <= '/') goto yy141;
1166
0
      if (yych <= '9') goto yy149;
1167
0
      goto yy141;
1168
0
    } else {
1169
0
      if (yych <= 'F') goto yy149;
1170
0
      if (yych <= '`') goto yy141;
1171
0
      if (yych <= 'f') goto yy149;
1172
0
      goto yy141;
1173
0
    }
1174
0
yy146:
1175
0
    yych = *++YYCURSOR;
1176
0
    if (yych <= '@') {
1177
0
      if (yych <= '/') goto yy141;
1178
0
      if (yych <= '7') goto yy149;
1179
0
      if (yych <= '9') goto yy150;
1180
0
      goto yy141;
1181
0
    } else {
1182
0
      if (yych <= 'B') goto yy150;
1183
0
      if (yych <= '`') goto yy141;
1184
0
      if (yych <= 'b') goto yy150;
1185
0
      goto yy141;
1186
0
    }
1187
0
yy147:
1188
0
    yych = *++YYCURSOR;
1189
0
    if (yych <= '@') {
1190
0
      if (yych <= '/') goto yy141;
1191
0
      if (yych <= '7') goto yy151;
1192
0
      if (yych <= '9') goto yy152;
1193
0
      goto yy141;
1194
0
    } else {
1195
0
      if (yych <= 'F') goto yy152;
1196
0
      if (yych <= '`') goto yy141;
1197
0
      if (yych <= 'f') goto yy152;
1198
0
      goto yy141;
1199
0
    }
1200
0
yy148:
1201
0
    yych = *++YYCURSOR;
1202
0
    if (yych <= '@') {
1203
0
      if (yych <= '/') goto yy141;
1204
0
      if (yych <= '9') goto yy152;
1205
0
      goto yy141;
1206
0
    } else {
1207
0
      if (yych <= 'F') goto yy152;
1208
0
      if (yych <= '`') goto yy141;
1209
0
      if (yych <= 'f') goto yy152;
1210
0
      goto yy141;
1211
0
    }
1212
0
yy149:
1213
0
    yych = *++YYCURSOR;
1214
0
    if (yych <= '@') {
1215
0
      if (yych <= '/') goto yy141;
1216
0
      if (yych <= '9') goto yy153;
1217
0
      goto yy141;
1218
0
    } else {
1219
0
      if (yych <= 'F') goto yy153;
1220
0
      if (yych <= '`') goto yy141;
1221
0
      if (yych <= 'f') goto yy153;
1222
0
      goto yy141;
1223
0
    }
1224
0
yy150:
1225
0
    yych = *++YYCURSOR;
1226
0
    if (yych <= '@') {
1227
0
      if (yych <= '/') goto yy141;
1228
0
      if (yych <= '9') goto yy154;
1229
0
      goto yy141;
1230
0
    } else {
1231
0
      if (yych <= 'F') goto yy154;
1232
0
      if (yych <= '`') goto yy141;
1233
0
      if (yych <= 'f') goto yy154;
1234
0
      goto yy141;
1235
0
    }
1236
0
yy151:
1237
0
    yych = *++YYCURSOR;
1238
0
    if (yych <= '@') {
1239
0
      if (yych <= '/') goto yy141;
1240
0
      if (yych <= '9') goto yy155;
1241
0
      goto yy141;
1242
0
    } else {
1243
0
      if (yych <= 'F') goto yy155;
1244
0
      if (yych <= '`') goto yy141;
1245
0
      if (yych <= 'f') goto yy155;
1246
0
      goto yy141;
1247
0
    }
1248
0
yy152:
1249
0
    yych = *++YYCURSOR;
1250
0
    if (yych <= '@') {
1251
0
      if (yych <= '/') goto yy141;
1252
0
      if (yych <= '9') goto yy157;
1253
0
      goto yy141;
1254
0
    } else {
1255
0
      if (yych <= 'F') goto yy157;
1256
0
      if (yych <= '`') goto yy141;
1257
0
      if (yych <= 'f') goto yy157;
1258
0
      goto yy141;
1259
0
    }
1260
0
yy153:
1261
0
    yych = *++YYCURSOR;
1262
0
    if (yych <= '@') {
1263
0
      if (yych <= '/') goto yy141;
1264
0
      if (yych <= '9') goto yy159;
1265
0
      goto yy141;
1266
0
    } else {
1267
0
      if (yych <= 'F') goto yy159;
1268
0
      if (yych <= '`') goto yy141;
1269
0
      if (yych <= 'f') goto yy159;
1270
0
      goto yy141;
1271
0
    }
1272
0
yy154:
1273
0
    yych = *++YYCURSOR;
1274
0
    if (yych <= '@') {
1275
0
      if (yych <= '/') goto yy141;
1276
0
      if (yych <= '9') goto yy161;
1277
0
      goto yy141;
1278
0
    } else {
1279
0
      if (yych <= 'F') goto yy161;
1280
0
      if (yych <= '`') goto yy141;
1281
0
      if (yych <= 'f') goto yy161;
1282
0
      goto yy141;
1283
0
    }
1284
0
yy155:
1285
0
    ++YYCURSOR;
1286
0
    {
1287
0
    int utf16 = php_json_ucs2_to_int(s, 2);
1288
0
    PHP_JSON_SCANNER_COPY_UTF();
1289
0
    *(s->pstr++) = (unsigned char) utf16;
1290
0
    s->str_start = s->cursor;
1291
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1292
0
  }
1293
0
yy157:
1294
0
    ++YYCURSOR;
1295
0
    {
1296
0
    int utf16 = php_json_ucs2_to_int(s, 3);
1297
0
    PHP_JSON_SCANNER_COPY_UTF();
1298
0
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1299
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1300
0
    s->str_start = s->cursor;
1301
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1302
0
  }
1303
0
yy159:
1304
0
    ++YYCURSOR;
1305
0
    {
1306
0
    int utf16 = php_json_ucs2_to_int(s, 4);
1307
0
    PHP_JSON_SCANNER_COPY_UTF();
1308
0
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1309
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1310
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1311
0
    s->str_start = s->cursor;
1312
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1313
0
  }
1314
0
yy161:
1315
0
    yych = *++YYCURSOR;
1316
0
    if (yych != '\\') goto yy141;
1317
0
    yych = *++YYCURSOR;
1318
0
    if (yych != 'u') goto yy141;
1319
0
    yych = *++YYCURSOR;
1320
0
    if (yych == 'D') goto yy164;
1321
0
    if (yych != 'd') goto yy141;
1322
0
yy164:
1323
0
    yych = *++YYCURSOR;
1324
0
    if (yych <= 'B') goto yy141;
1325
0
    if (yych <= 'F') goto yy165;
1326
0
    if (yych <= 'b') goto yy141;
1327
0
    if (yych >= 'g') goto yy141;
1328
0
yy165:
1329
0
    yych = *++YYCURSOR;
1330
0
    if (yych <= '@') {
1331
0
      if (yych <= '/') goto yy141;
1332
0
      if (yych >= ':') goto yy141;
1333
0
    } else {
1334
0
      if (yych <= 'F') goto yy166;
1335
0
      if (yych <= '`') goto yy141;
1336
0
      if (yych >= 'g') goto yy141;
1337
0
    }
1338
0
yy166:
1339
0
    yych = *++YYCURSOR;
1340
0
    if (yych <= '@') {
1341
0
      if (yych <= '/') goto yy141;
1342
0
      if (yych >= ':') goto yy141;
1343
0
    } else {
1344
0
      if (yych <= 'F') goto yy167;
1345
0
      if (yych <= '`') goto yy141;
1346
0
      if (yych >= 'g') goto yy141;
1347
0
    }
1348
0
yy167:
1349
0
    ++YYCURSOR;
1350
0
    {
1351
0
    int utf32, utf16_hi, utf16_lo;
1352
0
    utf16_hi = php_json_ucs2_to_int(s, 4);
1353
0
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1354
0
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1355
0
    PHP_JSON_SCANNER_COPY_UTF_SP();
1356
0
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1357
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1358
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1359
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1360
0
    s->str_start = s->cursor;
1361
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1362
0
  }
1363
/* *********************************** */
1364
16.3M
yyc_STR_P2_UTF:
1365
16.3M
    yych = *YYCURSOR;
1366
16.3M
    if (yych == '"') goto yy173;
1367
16.3M
    if (yych == '\\') goto yy175;
1368
16.0M
    ++YYCURSOR;
1369
16.0M
    { PHP_JSON_CONDITION_GOTO(STR_P2_UTF); }
1370
3.32k
yy173:
1371
3.32k
    ++YYCURSOR;
1372
3.32k
    YYSETCONDITION(yycJS);
1373
3.32k
    {
1374
3.32k
    PHP_JSON_SCANNER_COPY_ESC();
1375
3.32k
    return PHP_JSON_T_STRING;
1376
16.3M
  }
1377
239k
yy175:
1378
239k
    yych = *(YYMARKER = ++YYCURSOR);
1379
239k
    if (yych == 'u') goto yy177;
1380
28.1k
yy176:
1381
28.1k
    {
1382
28.1k
    unsigned char esc;
1383
28.1k
    PHP_JSON_SCANNER_COPY_ESC();
1384
28.1k
    switch (*s->cursor) {
1385
250
      case 'b':
1386
250
        esc = '\b';
1387
250
        break;
1388
530
      case 'f':
1389
530
        esc = '\f';       break;
1390
413
      case 'n':
1391
413
        esc = '\n';
1392
413
        break;
1393
271
      case 'r':
1394
271
        esc = '\r';
1395
271
        break;
1396
252
      case 't':
1397
252
        esc = '\t';
1398
252
        break;
1399
2.71k
      case '\\':
1400
3.16k
      case '/':
1401
26.4k
      case '"':
1402
26.4k
        esc = *s->cursor;
1403
26.4k
        break;
1404
0
      default:
1405
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1406
0
        return PHP_JSON_T_ERROR;
1407
28.1k
    }
1408
28.1k
    *(s->pstr++) = esc;
1409
28.1k
    ++YYCURSOR;
1410
28.1k
    s->str_start = s->cursor;
1411
28.1k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1412
28.1k
  }
1413
211k
yy177:
1414
211k
    yych = *++YYCURSOR;
1415
211k
    if (yych <= 'D') {
1416
209k
      if (yych <= '9') {
1417
207k
        if (yych <= '/') goto yy178;
1418
207k
        if (yych <= '0') goto yy179;
1419
22.9k
        goto yy180;
1420
207k
      } else {
1421
2.33k
        if (yych <= '@') goto yy178;
1422
2.33k
        if (yych <= 'C') goto yy180;
1423
1.43k
        goto yy181;
1424
2.33k
      }
1425
209k
    } else {
1426
1.69k
      if (yych <= 'c') {
1427
429
        if (yych <= 'F') goto yy180;
1428
211
        if (yych >= 'a') goto yy180;
1429
1.26k
      } else {
1430
1.26k
        if (yych <= 'd') goto yy181;
1431
479
        if (yych <= 'f') goto yy180;
1432
479
      }
1433
1.69k
    }
1434
0
yy178:
1435
0
    YYCURSOR = YYMARKER;
1436
0
    goto yy176;
1437
184k
yy179:
1438
184k
    yych = *++YYCURSOR;
1439
184k
    if (yych <= '9') {
1440
181k
      if (yych <= '/') goto yy178;
1441
181k
      if (yych <= '0') goto yy182;
1442
2.79k
      if (yych <= '7') goto yy183;
1443
296
      goto yy184;
1444
3.31k
    } else {
1445
3.31k
      if (yych <= 'F') {
1446
298
        if (yych <= '@') goto yy178;
1447
298
        goto yy184;
1448
3.01k
      } else {
1449
3.01k
        if (yych <= '`') goto yy178;
1450
3.01k
        if (yych <= 'f') goto yy184;
1451
0
        goto yy178;
1452
3.01k
      }
1453
3.31k
    }
1454
24.7k
yy180:
1455
24.7k
    yych = *++YYCURSOR;
1456
24.7k
    if (yych <= '@') {
1457
3.79k
      if (yych <= '/') goto yy178;
1458
3.79k
      if (yych <= '9') goto yy184;
1459
0
      goto yy178;
1460
20.9k
    } else {
1461
20.9k
      if (yych <= 'F') goto yy184;
1462
20.0k
      if (yych <= '`') goto yy178;
1463
20.0k
      if (yych <= 'f') goto yy184;
1464
0
      goto yy178;
1465
20.0k
    }
1466
2.21k
yy181:
1467
2.21k
    yych = *++YYCURSOR;
1468
2.21k
    if (yych <= '@') {
1469
953
      if (yych <= '/') goto yy178;
1470
953
      if (yych <= '7') goto yy184;
1471
380
      if (yych <= '9') goto yy185;
1472
0
      goto yy178;
1473
1.26k
    } else {
1474
1.26k
      if (yych <= 'B') goto yy185;
1475
515
      if (yych <= '`') goto yy178;
1476
515
      if (yych <= 'b') goto yy185;
1477
0
      goto yy178;
1478
515
    }
1479
178k
yy182:
1480
178k
    yych = *++YYCURSOR;
1481
178k
    if (yych <= '@') {
1482
62.5k
      if (yych <= '/') goto yy178;
1483
62.5k
      if (yych <= '7') goto yy186;
1484
801
      if (yych <= '9') goto yy187;
1485
0
      goto yy178;
1486
115k
    } else {
1487
115k
      if (yych <= 'F') goto yy187;
1488
1.39k
      if (yych <= '`') goto yy178;
1489
1.39k
      if (yych <= 'f') goto yy187;
1490
0
      goto yy178;
1491
1.39k
    }
1492
2.50k
yy183:
1493
2.50k
    yych = *++YYCURSOR;
1494
2.50k
    if (yych <= '@') {
1495
472
      if (yych <= '/') goto yy178;
1496
472
      if (yych <= '9') goto yy187;
1497
0
      goto yy178;
1498
2.03k
    } else {
1499
2.03k
      if (yych <= 'F') goto yy187;
1500
1.14k
      if (yych <= '`') goto yy178;
1501
1.14k
      if (yych <= 'f') goto yy187;
1502
0
      goto yy178;
1503
1.14k
    }
1504
28.9k
yy184:
1505
28.9k
    yych = *++YYCURSOR;
1506
28.9k
    if (yych <= '@') {
1507
24.5k
      if (yych <= '/') goto yy178;
1508
24.5k
      if (yych <= '9') goto yy188;
1509
0
      goto yy178;
1510
24.5k
    } else {
1511
4.39k
      if (yych <= 'F') goto yy188;
1512
589
      if (yych <= '`') goto yy178;
1513
589
      if (yych <= 'f') goto yy188;
1514
0
      goto yy178;
1515
589
    }
1516
1.64k
yy185:
1517
1.64k
    yych = *++YYCURSOR;
1518
1.64k
    if (yych <= '@') {
1519
554
      if (yych <= '/') goto yy178;
1520
554
      if (yych <= '9') goto yy189;
1521
0
      goto yy178;
1522
1.08k
    } else {
1523
1.08k
      if (yych <= 'F') goto yy189;
1524
618
      if (yych <= '`') goto yy178;
1525
618
      if (yych <= 'f') goto yy189;
1526
0
      goto yy178;
1527
618
    }
1528
61.7k
yy186:
1529
61.7k
    yych = *++YYCURSOR;
1530
61.7k
    if (yych <= '@') {
1531
11.5k
      if (yych <= '/') goto yy178;
1532
11.5k
      if (yych <= '9') goto yy190;
1533
0
      goto yy178;
1534
50.1k
    } else {
1535
50.1k
      if (yych <= 'F') goto yy190;
1536
33.9k
      if (yych <= '`') goto yy178;
1537
33.9k
      if (yych <= 'f') goto yy190;
1538
0
      goto yy178;
1539
33.9k
    }
1540
119k
yy187:
1541
119k
    yych = *++YYCURSOR;
1542
119k
    if (yych <= '@') {
1543
3.48k
      if (yych <= '/') goto yy178;
1544
3.48k
      if (yych <= '9') goto yy192;
1545
0
      goto yy178;
1546
115k
    } else {
1547
115k
      if (yych <= 'F') goto yy192;
1548
445
      if (yych <= '`') goto yy178;
1549
445
      if (yych <= 'f') goto yy192;
1550
0
      goto yy178;
1551
445
    }
1552
28.9k
yy188:
1553
28.9k
    yych = *++YYCURSOR;
1554
28.9k
    if (yych <= '@') {
1555
24.5k
      if (yych <= '/') goto yy178;
1556
24.5k
      if (yych <= '9') goto yy194;
1557
0
      goto yy178;
1558
24.5k
    } else {
1559
4.37k
      if (yych <= 'F') goto yy194;
1560
897
      if (yych <= '`') goto yy178;
1561
897
      if (yych <= 'f') goto yy194;
1562
0
      goto yy178;
1563
897
    }
1564
1.64k
yy189:
1565
1.64k
    yych = *++YYCURSOR;
1566
1.64k
    if (yych <= '@') {
1567
437
      if (yych <= '/') goto yy178;
1568
437
      if (yych <= '9') goto yy196;
1569
0
      goto yy178;
1570
1.20k
    } else {
1571
1.20k
      if (yych <= 'F') goto yy196;
1572
362
      if (yych <= '`') goto yy178;
1573
362
      if (yych <= 'f') goto yy196;
1574
0
      goto yy178;
1575
362
    }
1576
61.7k
yy190:
1577
61.7k
    ++YYCURSOR;
1578
61.7k
    {
1579
61.7k
    int utf16 = php_json_ucs2_to_int(s, 2);
1580
61.7k
    PHP_JSON_SCANNER_COPY_UTF();
1581
61.7k
    *(s->pstr++) = (unsigned char) utf16;
1582
61.7k
    s->str_start = s->cursor;
1583
61.7k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1584
61.7k
  }
1585
119k
yy192:
1586
119k
    ++YYCURSOR;
1587
119k
    {
1588
119k
    int utf16 = php_json_ucs2_to_int(s, 3);
1589
119k
    PHP_JSON_SCANNER_COPY_UTF();
1590
119k
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1591
119k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1592
119k
    s->str_start = s->cursor;
1593
119k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1594
119k
  }
1595
28.9k
yy194:
1596
28.9k
    ++YYCURSOR;
1597
28.9k
    {
1598
28.9k
    int utf16 = php_json_ucs2_to_int(s, 4);
1599
28.9k
    PHP_JSON_SCANNER_COPY_UTF();
1600
28.9k
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1601
28.9k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1602
28.9k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1603
28.9k
    s->str_start = s->cursor;
1604
28.9k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1605
28.9k
  }
1606
1.64k
yy196:
1607
1.64k
    yych = *++YYCURSOR;
1608
1.64k
    if (yych != '\\') goto yy178;
1609
1.64k
    yych = *++YYCURSOR;
1610
1.64k
    if (yych != 'u') goto yy178;
1611
1.64k
    yych = *++YYCURSOR;
1612
1.64k
    if (yych == 'D') goto yy199;
1613
412
    if (yych != 'd') goto yy178;
1614
1.64k
yy199:
1615
1.64k
    yych = *++YYCURSOR;
1616
1.64k
    if (yych <= 'B') goto yy178;
1617
1.64k
    if (yych <= 'F') goto yy200;
1618
872
    if (yych <= 'b') goto yy178;
1619
872
    if (yych >= 'g') goto yy178;
1620
1.64k
yy200:
1621
1.64k
    yych = *++YYCURSOR;
1622
1.64k
    if (yych <= '@') {
1623
526
      if (yych <= '/') goto yy178;
1624
526
      if (yych >= ':') goto yy178;
1625
1.11k
    } else {
1626
1.11k
      if (yych <= 'F') goto yy201;
1627
572
      if (yych <= '`') goto yy178;
1628
572
      if (yych >= 'g') goto yy178;
1629
572
    }
1630
1.64k
yy201:
1631
1.64k
    yych = *++YYCURSOR;
1632
1.64k
    if (yych <= '@') {
1633
619
      if (yych <= '/') goto yy178;
1634
619
      if (yych >= ':') goto yy178;
1635
1.02k
    } else {
1636
1.02k
      if (yych <= 'F') goto yy202;
1637
520
      if (yych <= '`') goto yy178;
1638
520
      if (yych >= 'g') goto yy178;
1639
520
    }
1640
1.64k
yy202:
1641
1.64k
    ++YYCURSOR;
1642
1.64k
    {
1643
1.64k
    int utf32, utf16_hi, utf16_lo;
1644
1.64k
    utf16_hi = php_json_ucs2_to_int(s, 4);
1645
1.64k
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1646
1.64k
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1647
1.64k
    PHP_JSON_SCANNER_COPY_UTF_SP();
1648
1.64k
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1649
1.64k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1650
1.64k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1651
1.64k
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1652
1.64k
    s->str_start = s->cursor;
1653
1.64k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1654
1.64k
  }
1655
1.64k
  }
1656
1657
1658
1.64k
}