From f36d945a33418e991d3ebee27956976ffd5ef446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Tue, 7 Feb 2023 23:33:13 +0900 Subject: [PATCH] fix(es/parser): Fix stack overflow due to deeply nested if (#6910) **Related issue:** - Closes https://github.com/swc-project/swc/issues/6813. --- .github/workflows/CI.yml | 1 + Cargo.lock | 23 + crates/swc_ecma_parser/Cargo.toml | 3 + crates/swc_ecma_parser/src/lib.rs | 10 + crates/swc_ecma_parser/src/parser/stmt.rs | 35 +- crates/swc_ecma_parser/tests/js.rs | 115 + .../tests/js/stack-overflow/1.js | 201 ++ .../tests/js/stack-overflow/1.js.json | 2870 +++++++++++++++++ 8 files changed, 3243 insertions(+), 15 deletions(-) create mode 100644 crates/swc_ecma_parser/tests/js.rs create mode 100644 crates/swc_ecma_parser/tests/js/stack-overflow/1.js create mode 100644 crates/swc_ecma_parser/tests/js/stack-overflow/1.js.json diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index c100e6278ef7..2e7524f47d5f 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -660,6 +660,7 @@ jobs: - name: Run cargo test (plugin) if: matrix.settings.crate == 'swc_plugin_runner' run: | + # export CARGO_TARGET_DIR=$(pwd)/target cargo test -p swc_plugin_runner --release --features plugin_transform_schema_v1 --features rkyv-impl --features ecma --features css - name: Run cargo test (swc_ecma_minifier) diff --git a/Cargo.lock b/Cargo.lock index b70c3176ba03..4f5abfa843ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2332,6 +2332,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + [[package]] name = "ptr_meta" version = "0.1.4" @@ -2936,6 +2945,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "stacker" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +dependencies = [ + "cc", + "cfg-if 1.0.0", + "libc", + "psm", + "winapi", +] + [[package]] name = "standback" version = "0.2.17" @@ -3695,6 +3717,7 @@ dependencies = [ "serde", "serde_json", "smallvec", + "stacker", "swc_atoms", "swc_common", "swc_ecma_ast", diff --git a/crates/swc_ecma_parser/Cargo.toml b/crates/swc_ecma_parser/Cargo.toml index 28f7744a5aac..299a53b4149a 100644 --- a/crates/swc_ecma_parser/Cargo.toml +++ b/crates/swc_ecma_parser/Cargo.toml @@ -37,6 +37,9 @@ swc_ecma_visit = { version = "0.82.3", path = "../swc_ecma_visit", optional = tr tracing = "0.1.32" typed-arena = "2.0.1" +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +stacker = "0.1.15" + [dev-dependencies] criterion = "0.3" pretty_assertions = "1.1" diff --git a/crates/swc_ecma_parser/src/lib.rs b/crates/swc_ecma_parser/src/lib.rs index ff3e9dbbffd4..6b9870c7ac42 100644 --- a/crates/swc_ecma_parser/src/lib.rs +++ b/crates/swc_ecma_parser/src/lib.rs @@ -446,3 +446,13 @@ expose!(parse_file_as_expr, Box, |p| { expose!(parse_file_as_module, Module, |p| { p.parse_module() }); expose!(parse_file_as_script, Script, |p| { p.parse_script() }); expose!(parse_file_as_program, Program, |p| { p.parse_program() }); + +#[inline(always)] +#[cfg_attr(target_arch = "wasm32", allow(unused))] +fn maybe_grow R>(red_zone: usize, stack_size: usize, callback: F) -> R { + #[cfg(target_arch = "wasm32")] + return callback(); + + #[cfg(not(target_arch = "wasm32"))] + return stacker::maybe_grow(red_zone, stack_size, callback); +} diff --git a/crates/swc_ecma_parser/src/parser/stmt.rs b/crates/swc_ecma_parser/src/parser/stmt.rs index 8e10d4e6b1d8..e96eb4dc5343 100644 --- a/crates/swc_ecma_parser/src/parser/stmt.rs +++ b/crates/swc_ecma_parser/src/parser/stmt.rs @@ -486,15 +486,18 @@ impl<'a, I: Tokens> Parser { } let cons = { - // Annex B - if !self.ctx().strict && is!(self, "function") { - // TODO: report error? - } - let ctx = Context { - ignore_else_clause: false, - ..self.ctx() - }; - self.with_ctx(ctx).parse_stmt(false).map(Box::new)? + // Prevent stack overflow + crate::maybe_grow(512 * 1024, 2 * 1024 * 1024, || { + // Annex B + if !self.ctx().strict && is!(self, "function") { + // TODO: report error? + } + let ctx = Context { + ignore_else_clause: false, + ..self.ctx() + }; + self.with_ctx(ctx).parse_stmt(false).map(Box::new) + })? }; // We parse `else` branch iteratively, to avoid stack overflow @@ -516,13 +519,15 @@ impl<'a, I: Tokens> Parser { } if !is!(self, "if") { - let ctx = Context { - ignore_else_clause: false, - ..self.ctx() - }; - // As we eat `else` above, we need to parse statement once. - let last = self.with_ctx(ctx).parse_stmt(false)?; + let last = crate::maybe_grow(512 * 1024, 2 * 1024 * 1024, || { + let ctx = Context { + ignore_else_clause: false, + ..self.ctx() + }; + + self.with_ctx(ctx).parse_stmt(false) + })?; break Some(last); } diff --git a/crates/swc_ecma_parser/tests/js.rs b/crates/swc_ecma_parser/tests/js.rs new file mode 100644 index 000000000000..6bd767ecba95 --- /dev/null +++ b/crates/swc_ecma_parser/tests/js.rs @@ -0,0 +1,115 @@ +#![allow(clippy::needless_update)] + +use std::{ + fs::File, + io::Read, + path::{Path, PathBuf}, +}; + +use swc_common::{comments::SingleThreadedComments, FileName}; +use swc_ecma_ast::*; +use swc_ecma_parser::{lexer::Lexer, EsConfig, PResult, Parser, StringInput, Syntax}; +use swc_ecma_visit::FoldWith; +use testing::StdErr; + +use crate::common::Normalizer; + +#[path = "common/mod.rs"] +mod common; + +#[testing::fixture("tests/js/**/*.js")] +fn spec(file: PathBuf) { + let output = file.parent().unwrap().join(format!( + "{}.json", + file.file_name().unwrap().to_string_lossy() + )); + run_spec(&file, &output); +} + +fn run_spec(file: &Path, output_json: &Path) { + let file_name = file + .display() + .to_string() + .replace("\\\\", "/") + .replace('\\', "/"); + + { + // Drop to reduce memory usage. + // + // Because the test suite contains lots of test cases, it results in oom in + // github actions. + let input = { + let mut buf = String::new(); + File::open(file).unwrap().read_to_string(&mut buf).unwrap(); + buf + }; + + eprintln!( + "\n\n========== Running reference test {}\nSource:\n{}\n", + file_name, input + ); + } + + with_parser(false, file, false, |p, _| { + let program = p.parse_program()?.fold_with(&mut Normalizer { + drop_span: false, + is_test262: false, + }); + + let json = + serde_json::to_string_pretty(&program).expect("failed to serialize module as json"); + + if StdErr::from(json).compare_to_file(output_json).is_err() { + panic!() + } + + Ok(()) + }) + .map_err(|_| ()) + .unwrap(); +} + +fn with_parser( + treat_error_as_bug: bool, + file_name: &Path, + shift: bool, + f: F, +) -> Result +where + F: FnOnce(&mut Parser>>, &SingleThreadedComments) -> PResult, +{ + ::testing::run_test(treat_error_as_bug, |cm, handler| { + if shift { + cm.new_source_file(FileName::Anon, "".into()); + } + + let comments = SingleThreadedComments::default(); + + let fm = cm + .load_file(file_name) + .unwrap_or_else(|e| panic!("failed to load {}: {}", file_name.display(), e)); + + let lexer = Lexer::new( + Syntax::Es(EsConfig { + ..Default::default() + }), + EsVersion::Es2015, + (&*fm).into(), + Some(&comments), + ); + + let mut p = Parser::new_from(lexer); + + let res = f(&mut p, &comments).map_err(|e| e.into_diagnostic(handler).emit()); + + for err in p.take_errors() { + err.into_diagnostic(handler).emit(); + } + + if handler.has_errors() { + return Err(()); + } + + res + }) +} diff --git a/crates/swc_ecma_parser/tests/js/stack-overflow/1.js b/crates/swc_ecma_parser/tests/js/stack-overflow/1.js new file mode 100644 index 000000000000..a79add745361 --- /dev/null +++ b/crates/swc_ecma_parser/tests/js/stack-overflow/1.js @@ -0,0 +1,201 @@ +if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + if (true) { + console.log(true); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/crates/swc_ecma_parser/tests/js/stack-overflow/1.js.json b/crates/swc_ecma_parser/tests/js/stack-overflow/1.js.json new file mode 100644 index 000000000000..4438cd8e298d --- /dev/null +++ b/crates/swc_ecma_parser/tests/js/stack-overflow/1.js.json @@ -0,0 +1,2870 @@ +{ + "type": "Script", + "span": { + "start": 1, + "end": 41419, + "ctxt": 0 + }, + "body": [ + { + "type": "IfStatement", + "span": { + "start": 1, + "end": 41419, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 5, + "end": 9, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 11, + "end": 41419, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 17, + "end": 41417, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 21, + "end": 25, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 27, + "end": 41417, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 37, + "end": 41411, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 41, + "end": 45, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 47, + "end": 41411, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 61, + "end": 41401, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 65, + "end": 69, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 71, + "end": 41401, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 89, + "end": 41387, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 93, + "end": 97, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 99, + "end": 41387, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 121, + "end": 41369, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 125, + "end": 129, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 131, + "end": 41369, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 157, + "end": 41347, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 161, + "end": 165, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 167, + "end": 41347, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 197, + "end": 41321, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 201, + "end": 205, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 207, + "end": 41321, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 241, + "end": 41291, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 245, + "end": 249, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 251, + "end": 41291, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 289, + "end": 41257, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 293, + "end": 297, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 299, + "end": 41257, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 341, + "end": 41219, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 345, + "end": 349, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 351, + "end": 41219, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 397, + "end": 41177, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 401, + "end": 405, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 407, + "end": 41177, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 457, + "end": 41131, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 461, + "end": 465, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 467, + "end": 41131, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 521, + "end": 41081, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 525, + "end": 529, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 531, + "end": 41081, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 589, + "end": 41027, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 593, + "end": 597, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 599, + "end": 41027, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 661, + "end": 40969, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 665, + "end": 669, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 671, + "end": 40969, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 737, + "end": 40907, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 741, + "end": 745, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 747, + "end": 40907, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 817, + "end": 40841, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 821, + "end": 825, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 827, + "end": 40841, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 901, + "end": 40771, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 905, + "end": 909, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 911, + "end": 40771, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 989, + "end": 40697, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 993, + "end": 997, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 999, + "end": 40697, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1081, + "end": 40619, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1085, + "end": 1089, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1091, + "end": 40619, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1177, + "end": 40537, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1181, + "end": 1185, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1187, + "end": 40537, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1277, + "end": 40451, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1281, + "end": 1285, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1287, + "end": 40451, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1381, + "end": 40361, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1385, + "end": 1389, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1391, + "end": 40361, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1489, + "end": 40267, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1493, + "end": 1497, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1499, + "end": 40267, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1601, + "end": 40169, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1605, + "end": 1609, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1611, + "end": 40169, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1717, + "end": 40067, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1721, + "end": 1725, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1727, + "end": 40067, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1837, + "end": 39961, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1841, + "end": 1845, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1847, + "end": 39961, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 1961, + "end": 39851, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 1965, + "end": 1969, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 1971, + "end": 39851, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 2089, + "end": 39737, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 2093, + "end": 2097, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 2099, + "end": 39737, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 2221, + "end": 39619, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 2225, + "end": 2229, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 2231, + "end": 39619, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 2357, + "end": 39497, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 2361, + "end": 2365, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 2367, + "end": 39497, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 2497, + "end": 39371, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 2501, + "end": 2505, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 2507, + "end": 39371, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 2641, + "end": 39241, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 2645, + "end": 2649, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 2651, + "end": 39241, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 2789, + "end": 39107, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 2793, + "end": 2797, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 2799, + "end": 39107, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 2941, + "end": 38969, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 2945, + "end": 2949, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 2951, + "end": 38969, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 3097, + "end": 38827, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 3101, + "end": 3105, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 3107, + "end": 38827, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 3257, + "end": 38681, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 3261, + "end": 3265, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 3267, + "end": 38681, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 3421, + "end": 38531, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 3425, + "end": 3429, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 3431, + "end": 38531, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 3589, + "end": 38377, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 3593, + "end": 3597, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 3599, + "end": 38377, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 3761, + "end": 38219, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 3765, + "end": 3769, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 3771, + "end": 38219, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 3937, + "end": 38057, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 3941, + "end": 3945, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 3947, + "end": 38057, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 4117, + "end": 37891, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 4121, + "end": 4125, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 4127, + "end": 37891, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 4301, + "end": 37721, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 4305, + "end": 4309, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 4311, + "end": 37721, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 4489, + "end": 37547, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 4493, + "end": 4497, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 4499, + "end": 37547, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 4681, + "end": 37369, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 4685, + "end": 4689, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 4691, + "end": 37369, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 4877, + "end": 37187, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 4881, + "end": 4885, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 4887, + "end": 37187, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 5077, + "end": 37001, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 5081, + "end": 5085, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 5087, + "end": 37001, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 5281, + "end": 36811, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 5285, + "end": 5289, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 5291, + "end": 36811, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 5489, + "end": 36617, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 5493, + "end": 5497, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 5499, + "end": 36617, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 5701, + "end": 36419, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 5705, + "end": 5709, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 5711, + "end": 36419, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 5917, + "end": 36217, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 5921, + "end": 5925, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 5927, + "end": 36217, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 6137, + "end": 36011, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 6141, + "end": 6145, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 6147, + "end": 36011, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 6361, + "end": 35801, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 6365, + "end": 6369, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 6371, + "end": 35801, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 6589, + "end": 35587, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 6593, + "end": 6597, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 6599, + "end": 35587, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 6821, + "end": 35369, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 6825, + "end": 6829, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 6831, + "end": 35369, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 7057, + "end": 35147, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 7061, + "end": 7065, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 7067, + "end": 35147, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 7297, + "end": 34921, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 7301, + "end": 7305, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 7307, + "end": 34921, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 7541, + "end": 34691, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 7545, + "end": 7549, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 7551, + "end": 34691, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 7789, + "end": 34457, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 7793, + "end": 7797, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 7799, + "end": 34457, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 8041, + "end": 34219, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 8045, + "end": 8049, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 8051, + "end": 34219, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 8297, + "end": 33977, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 8301, + "end": 8305, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 8307, + "end": 33977, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 8557, + "end": 33731, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 8561, + "end": 8565, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 8567, + "end": 33731, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 8821, + "end": 33481, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 8825, + "end": 8829, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 8831, + "end": 33481, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 9089, + "end": 33227, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 9093, + "end": 9097, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 9099, + "end": 33227, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 9361, + "end": 32969, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 9365, + "end": 9369, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 9371, + "end": 32969, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 9637, + "end": 32707, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 9641, + "end": 9645, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 9647, + "end": 32707, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 9917, + "end": 32441, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 9921, + "end": 9925, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 9927, + "end": 32441, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 10201, + "end": 32171, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 10205, + "end": 10209, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 10211, + "end": 32171, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 10489, + "end": 31897, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 10493, + "end": 10497, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 10499, + "end": 31897, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 10781, + "end": 31619, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 10785, + "end": 10789, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 10791, + "end": 31619, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 11077, + "end": 31337, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 11081, + "end": 11085, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 11087, + "end": 31337, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 11377, + "end": 31051, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 11381, + "end": 11385, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 11387, + "end": 31051, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 11681, + "end": 30761, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 11685, + "end": 11689, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 11691, + "end": 30761, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 11989, + "end": 30467, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 11993, + "end": 11997, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 11999, + "end": 30467, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 12301, + "end": 30169, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 12305, + "end": 12309, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 12311, + "end": 30169, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 12617, + "end": 29867, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 12621, + "end": 12625, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 12627, + "end": 29867, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 12937, + "end": 29561, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 12941, + "end": 12945, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 12947, + "end": 29561, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 13261, + "end": 29251, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 13265, + "end": 13269, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 13271, + "end": 29251, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 13589, + "end": 28937, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 13593, + "end": 13597, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 13599, + "end": 28937, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 13921, + "end": 28619, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 13925, + "end": 13929, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 13931, + "end": 28619, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 14257, + "end": 28297, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 14261, + "end": 14265, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 14267, + "end": 28297, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 14597, + "end": 27971, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 14601, + "end": 14605, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 14607, + "end": 27971, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 14941, + "end": 27641, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 14945, + "end": 14949, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 14951, + "end": 27641, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 15289, + "end": 27307, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 15293, + "end": 15297, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 15299, + "end": 27307, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 15641, + "end": 26969, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 15645, + "end": 15649, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 15651, + "end": 26969, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 15997, + "end": 26627, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 16001, + "end": 16005, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 16007, + "end": 26627, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 16357, + "end": 26281, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 16361, + "end": 16365, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 16367, + "end": 26281, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 16721, + "end": 25931, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 16725, + "end": 16729, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 16731, + "end": 25931, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 17089, + "end": 25577, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 17093, + "end": 17097, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 17099, + "end": 25577, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 17461, + "end": 25219, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 17465, + "end": 17469, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 17471, + "end": 25219, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 17837, + "end": 24857, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 17841, + "end": 17845, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 17847, + "end": 24857, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 18217, + "end": 24491, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 18221, + "end": 18225, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 18227, + "end": 24491, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 18601, + "end": 24121, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 18605, + "end": 18609, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 18611, + "end": 24121, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 18989, + "end": 23747, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 18993, + "end": 18997, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 18999, + "end": 23747, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 19381, + "end": 23369, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 19385, + "end": 19389, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 19391, + "end": 23369, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 19777, + "end": 22987, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 19781, + "end": 19785, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 19787, + "end": 22987, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 20177, + "end": 22601, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 20181, + "end": 20185, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 20187, + "end": 22601, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 20581, + "end": 22211, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 20585, + "end": 20589, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 20591, + "end": 22211, + "ctxt": 0 + }, + "stmts": [ + { + "type": "IfStatement", + "span": { + "start": 20989, + "end": 21817, + "ctxt": 0 + }, + "test": { + "type": "BooleanLiteral", + "span": { + "start": 20993, + "end": 20997, + "ctxt": 0 + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "span": { + "start": 20999, + "end": 21817, + "ctxt": 0 + }, + "stmts": [ + { + "type": "ExpressionStatement", + "span": { + "start": 21401, + "end": 21419, + "ctxt": 0 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 21401, + "end": 21418, + "ctxt": 0 + }, + "callee": { + "type": "MemberExpression", + "span": { + "start": 21401, + "end": 21412, + "ctxt": 0 + }, + "object": { + "type": "Identifier", + "span": { + "start": 21401, + "end": 21408, + "ctxt": 0 + }, + "value": "console", + "optional": false + }, + "property": { + "type": "Identifier", + "span": { + "start": 21409, + "end": 21412, + "ctxt": 0 + }, + "value": "log", + "optional": false + } + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "BooleanLiteral", + "span": { + "start": 21413, + "end": 21417, + "ctxt": 0 + }, + "value": true + } + } + ], + "typeArguments": null + } + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ] + }, + "alternate": null + } + ], + "interpreter": null +}