[codex] Add grammar-driven C# parity support - #182
Conversation
📝 WalkthroughWalkthroughAdds C# semantic helper patterns, typed lexer lifecycle generation, channel and mode constants, a C# preprocessing support module, strict Rust code generation, and C# inclusion in the Rust/Go AST parity benchmark. ChangesC# semantic pattern lowering
Sequence Diagram(s)sequenceDiagram
participant ParseBench
participant RustGenerator
participant GeneratedLexer
participant CSharpLexerBase
participant ASTParity
ParseBench->>RustGenerator: Generate C# Rust modules with semantic configuration
RustGenerator->>GeneratedLexer: Emit typed hooks and channel/mode constants
ParseBench->>GeneratedLexer: Construct lexer with typed hooks
GeneratedLexer->>CSharpLexerBase: Process directives and lexer lifecycle events
GeneratedLexer->>ASTParity: Produce C# parse tree for comparison
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Claude finished @tinovyatkin's task in 23m 15s —— View job Code reviewNo blocking issues found. I reviewed the full diff for bugs and CLAUDE.md compliance (my own pass plus four independent sub-reviews: two CLAUDE.md-compliance, two bug-hunting). The change is well-scoped and the "grammar-agnostic boundary" claim in the PR body holds up — generic codegen/runtime carry no C# grammar, rule, or file names. What I verifiedRuntime API surface (the main compile-risk area). C# preprocessor state machine. Traced the Codegen changes ( Python harness ( CLAUDE.md compliance. The Notes (non-blocking)
Nice work — the refactor from name-recognition to pattern lowering plus benchmark-owned state is a clean way to keep the generic path grammar-agnostic.
|
📊 Source Code Metrics (this PR vs
|
| File | Cyclomatic | Cognitive | Functions | LLOC | MI |
|---|---|---|---|---|---|
| src/bin/antlr4-rust-gen.rs | 2246 (main: 2234) 🔴 | 1418 (main: 1411) 🔴 | 497 (main: 492) 🔴 | 3931 (main: 3905) 🔴 | 0 ⚪ |
Generated by mehen v1.6.0 — the code quality watcher.
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@tools/parse-bench/rust-support/csharp_lexer_base.rs`:
- Around line 383-396: Update parse_eq to repeatedly consume equality operators
after the initial parse_unary result, applying each == or != comparison to the
accumulated value and the next unary operand. Preserve the existing behavior
when no operator is present, and ensure chained expressions consume all equality
tokens.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: eb21cb04-0f57-47fc-879f-6fd3f49c6263
⛔ Files ignored due to path filters (5)
src/bin/snapshots/antlr4_rust_gen__tests__parses_supported_predicate_helpers.snapis excluded by!**/*.snapsrc/bin/snapshots/antlr4_rust_gen__tests__structural_channel_and_mode_constants.snapis excluded by!**/*.snapsrc/bin/snapshots/antlr4_rust_gen__tests__structural_parser_predicate_patterns.snapis excluded by!**/*.snapsrc/bin_support/grammar/generated/antlr_v4_lexer.rsis excluded by!**/generated/**src/bin_support/grammar/generated/antlr_v4_parser.rsis excluded by!**/generated/**
📒 Files selected for processing (9)
.github/workflows/parse-bench.ymlpatterns/csharp.tomlsrc/bin/antlr4-rust-gen.rstests/fixtures/antlr4-rust-gen/lexer-superclass/L.g4third_party/antlr-v4-grammar/self-hosted.sha256tools/parse-bench/README.mdtools/parse-bench/run.pytools/parse-bench/rust-support/csharp_lexer_base.rstools/parse-bench/test_run.py
| fn parse_eq(&mut self) -> bool { | ||
| let value = self.parse_unary(); | ||
| match self.peek() { | ||
| Some(OP_EQ) => { | ||
| let _ = self.consume(); | ||
| value == self.parse_unary() | ||
| } | ||
| Some(OP_NE) => { | ||
| let _ = self.consume(); | ||
| value != self.parse_unary() | ||
| } | ||
| _ => value, | ||
| } | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
parse_eq handles only a single equality operator, not chained ==/!=.
C#'s pp_equality_expression is pp_unary_expression ((== | !=) pp_unary_expression)*. Here only one operator is consumed, so #if A == B == C parses A == B and silently leaves == C unconsumed, yielding a wrong condition (and unconsumed tokens). Chaining is rare but legal; a loop matches the other levels.
🐛 Proposed fix
fn parse_eq(&mut self) -> bool {
- let value = self.parse_unary();
- match self.peek() {
- Some(OP_EQ) => {
- let _ = self.consume();
- value == self.parse_unary()
- }
- Some(OP_NE) => {
- let _ = self.consume();
- value != self.parse_unary()
- }
- _ => value,
- }
+ let mut value = self.parse_unary();
+ loop {
+ match self.peek() {
+ Some(OP_EQ) => {
+ let _ = self.consume();
+ value = value == self.parse_unary();
+ }
+ Some(OP_NE) => {
+ let _ = self.consume();
+ value = value != self.parse_unary();
+ }
+ _ => break,
+ }
+ }
+ value
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| fn parse_eq(&mut self) -> bool { | |
| let value = self.parse_unary(); | |
| match self.peek() { | |
| Some(OP_EQ) => { | |
| let _ = self.consume(); | |
| value == self.parse_unary() | |
| } | |
| Some(OP_NE) => { | |
| let _ = self.consume(); | |
| value != self.parse_unary() | |
| } | |
| _ => value, | |
| } | |
| } | |
| fn parse_eq(&mut self) -> bool { | |
| let mut value = self.parse_unary(); | |
| loop { | |
| match self.peek() { | |
| Some(OP_EQ) => { | |
| let _ = self.consume(); | |
| value = value == self.parse_unary(); | |
| } | |
| Some(OP_NE) => { | |
| let _ = self.consume(); | |
| value = value != self.parse_unary(); | |
| } | |
| _ => break, | |
| } | |
| } | |
| value | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@tools/parse-bench/rust-support/csharp_lexer_base.rs` around lines 383 - 396,
Update parse_eq to repeatedly consume equality operators after the initial
parse_unary result, applying each == or != comparison to the accumulated value
and the next unary operand. Preserve the existing behavior when no operator is
present, and ensure chained expressions consume all equality tokens.
Copy/Paste DetectionFound 1815 duplication(s) across 4 changed Rust file(s) (threshold: 100 tokens). Show duplicationsFound a 5 line (823 tokens) duplication in the following files:
&["DOC_COMMENT", "BLOCK_COMMENT", "LINE_COMMENT", "INT", "STRING_LITERAL", "UNTERMINATED_STRING_LITERAL", "BEGIN_ARGUMENT", "ACTION", "NESTED_ACTION", "OPTIONS", "TOKENS", "CHANNELS", "IMPORT", "FRAGMENT", "LEXER", "PARSER", "GRAMMAR", "PROTECTED", "PUBLIC", "PRIVATE", "RETURNS", "LOCALS", "THROWS", "CATCH", "FINALLY", "MODE", "COLON", "COLONCOLON", "COMMA", "SEMI", "LPAREN", "RPAREN", "RBRACE", "RARROW", "LT", "GT", "ASSIGN", "QUESTION", "STAR", "PLUS_ASSIGN", "PLUS", "OR", "DOLLAR", "RANGE", "DOT", "AT", "POUND", "NOT", "ID", "WS", "NESTED_ARGUMENT", "ARGUMENT_ESCAPE", "ARGUMENT_STRING_LITERAL", "ARGUMENT_CHAR_LITERAL", "END_ARGUMENT", "UNTERMINATED_ARGUMENT", "ARGUMENT_CONTENT", "LEXER_CHAR_SET_BODY", "LEXER_CHAR_SET", "UNTERMINATED_CHAR_SET", "ESC_SEQUENCE", "HexDigit", "UnicodeESC", "DoubleQuoteLiteral", "TripleQuoteLiteral", "BacktickQuoteLiteral", "NameChar", "NameStartChar"],
&[None, None, None, None, None, None, None, Some("\'=\'"), None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, Some("\'[\'"), None, None, None, Some("\'import\'"), Some("\'fragment\'"), Some("\'lexer\'"), Some("\'parser\'"), Some("\'grammar\'"), Some("\'protected\'"), Some("\'public\'"), Some("\'private\'"), Some("\'returns\'"), Some("\'locals\'"), Some("\'throws\'"), Some("\'catch\'"), Some("\'finally\'"), Some("\'mode\'"), Some("\':\'"), Some("\'::\'"), Some("\',\'"), Some("\';\'"), Some("\'(\'"), Some("\')\'"), Some("\'}\'"), Some("\'->\'"), Some("\'<\'"), Some("\'>\'"), Some("\'?\'"), Some("\'*\'"), Some("\'+=\'"), Some("\'+\'"), Some("\'|\'"), Some("\'$\'"), Some("\'..\'"), Some("\'.\'"), Some("\'@\'"), Some("\'#\'"), Some("\'~\'"), None, None, None, None, None],
&[None, None, None, None, Some("ACTION"), Some("ARG_ACTION"), Some("ARG_OR_CHARSET"), Some("ASSIGN"), Some("LEXER_CHAR_SET"), Some("RULE_REF"), Some("SEMPRED"), Some("STRING_LITERAL"), Some("TOKEN_REF"), Some("UNICODE_ESC"), Some("UNICODE_EXTENDED_ESC"), Some("WS"), Some("ALT"), Some("BLOCK"), Some("CLOSURE"), Some("ELEMENT_OPTIONS"), Some("EPSILON"), Some("LEXER_ACTION_CALL"), Some("LEXER_ALT_ACTION"), Some("OPTIONAL"), Some("POSITIVE_CLOSURE"), Some("RULE"), Some("RULEMODIFIERS"), Some("RULES"), Some("SET"), Some("WILDCARD"), Some("DOC_COMMENT"), Some("BLOCK_COMMENT"), Some("LINE_COMMENT"), Some("INT"), Some("UNTERMINATED_STRING_LITERAL"), Some("BEGIN_ARGUMENT"), Some("OPTIONS"), Some("TOKENS"), Some("CHANNELS"), Some("IMPORT"), Some("FRAGMENT"), Some("LEXER"), Some("PARSER"), Some("GRAMMAR"), Some("PROTECTED"), Some("PUBLIC"), Some("PRIVATE"), Some("RETURNS"), Some("LOCALS"), Some("THROWS"), Some("CATCH"), Some("FINALLY"), Some("MODE"), Some("COLON"), Some("COLONCOLON"), Some("COMMA"), Some("SEMI"), Some("LPAREN"), Some("RPAREN"), Some("RBRACE"), Some("RARROW"), Some("LT"), Some("GT"), Some("QUESTION"), Some("STAR"), Some("PLUS_ASSIGN"), Some("PLUS"), Some("OR"), Some("DOLLAR"), Some("RANGE"), Some("DOT"), Some("AT"), Some("POUND"), Some("NOT"), Some("ID"), Some("END_ARGUMENT"), Some("UNTERMINATED_ARGUMENT"), Some("ARGUMENT_CONTENT"), Some("UNTERMINATED_CHAR_SET")],
&[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None],
&["DEFAULT_TOKEN_CHANNEL", "HIDDEN", "", "", "OFF_CHANNEL", "COMMENT"],
```rust
---
Found a 80 line (613 tokens) duplication in the following files:
* Starting at line 14 of src/bin_support/grammar/generated/antlr_v4_lexer.rs
* Starting at line 16 of src/bin_support/grammar/generated/antlr_v4_parser.rs
```rust
use std::sync::OnceLock;
pub const EOF: i32 = antlr4_runtime::TOKEN_EOF;
pub const ACTION: i32 = 4;
pub const ARG_ACTION: i32 = 5;
pub const ARG_OR_CHARSET: i32 = 6;
pub const ASSIGN: i32 = 7;
pub const LEXER_CHAR_SET: i32 = 8;
pub const RULE_REF: i32 = 9;
pub const SEMPRED: i32 = 10;
pub const STRING_LITERAL: i32 = 11;
pub const TOKEN_REF: i32 = 12;
pub const UNICODE_ESC: i32 = 13;
pub const UNICODE_EXTENDED_ESC: i32 = 14;
pub const WS: i32 = 15;
pub const ALT: i32 = 16;
pub const BLOCK: i32 = 17;
pub const CLOSURE: i32 = 18;
pub const ELEMENT_OPTIONS: i32 = 19;
pub const EPSILON: i32 = 20;
pub const LEXER_ACTION_CALL: i32 = 21;
pub const LEXER_ALT_ACTION: i32 = 22;
pub const OPTIONAL: i32 = 23;
pub const POSITIVE_CLOSURE: i32 = 24;
pub const RULE: i32 = 25;
pub const RULEMODIFIERS: i32 = 26;
pub const RULES: i32 = 27;
pub const SET: i32 = 28;
pub const WILDCARD: i32 = 29;
pub const DOC_COMMENT: i32 = 30;
pub const BLOCK_COMMENT: i32 = 31;
pub const LINE_COMMENT: i32 = 32;
pub const INT: i32 = 33;
pub const UNTERMINATED_STRING_LITERAL: i32 = 34;
pub const BEGIN_ARGUMENT: i32 = 35;
pub const OPTIONS: i32 = 36;
pub const TOKENS: i32 = 37;
pub const CHANNELS: i32 = 38;
pub const IMPORT: i32 = 39;
pub const FRAGMENT: i32 = 40;
pub const LEXER: i32 = 41;
pub const PARSER: i32 = 42;
pub const GRAMMAR: i32 = 43;
pub const PROTECTED: i32 = 44;
pub const PUBLIC: i32 = 45;
pub const PRIVATE: i32 = 46;
pub const RETURNS: i32 = 47;
pub const LOCALS: i32 = 48;
pub const THROWS: i32 = 49;
pub const CATCH: i32 = 50;
pub const FINALLY: i32 = 51;
pub const MODE: i32 = 52;
pub const COLON: i32 = 53;
pub const COLONCOLON: i32 = 54;
pub const COMMA: i32 = 55;
pub const SEMI: i32 = 56;
pub const LPAREN: i32 = 57;
pub const RPAREN: i32 = 58;
pub const RBRACE: i32 = 59;
pub const RARROW: i32 = 60;
pub const LT: i32 = 61;
pub const GT: i32 = 62;
pub const QUESTION: i32 = 63;
pub const STAR: i32 = 64;
pub const PLUS_ASSIGN: i32 = 65;
pub const PLUS: i32 = 66;
pub const OR: i32 = 67;
pub const DOLLAR: i32 = 68;
pub const RANGE: i32 = 69;
pub const DOT: i32 = 70;
pub const AT: i32 = 71;
pub const POUND: i32 = 72;
pub const NOT: i32 = 73;
pub const ID: i32 = 74;
pub const END_ARGUMENT: i32 = 75;
pub const UNTERMINATED_ARGUMENT: i32 = 76;
pub const ARGUMENT_CONTENT: i32 = 77;
pub const UNTERMINATED_CHAR_SET: i32 = 78;
pub const CHANNEL_COMMENT: i32 = 3;Found a 1 line (391 tokens) duplication in the following files:
static LEXER_DFA_DATA: &[u32] = &[1280852999,3,0,4096,4133,4138,0,0,65535,4294967295,1,1,65535,0,2,1,65535,1,2,1,65535,2,3,2,65535,3,2,1,65535,4,2,1,65535,5,2,1,65535,6,4,1,65535,7,2,1,65535,8,5,1,65535,4294967295,6,1,65535,9,7,1,65535,4294967295,2,1,65535,10,8,1,65535,11,9,1,65535,12,2,1,65535,13,2,1,65535,14,2,1,65535,15,2,1,65535,16,2,1,65535,17,2,1,65535,18,10,3,65535,19,2,1,65535,20,11,3,65535,21,12,3,65535,22,13,3,65535,23,14,3,65535,24,15,3,65535,25,16,3,65535,26,17,3,65535,27,18,3,65535,28,19,3,65535,29,20,3,65535,30,21,4,65535,4294967295,2,1,65535,31,2,1,65535,32,2,1,65535,33,2,1,65535,34,22,2,68,4294967295,2,1,65535,35,2,1,65535,36,2,1,65535,37,23,5,70,4294967295,24,6,65535,38,2,1,65535,39,25,3,65535,40,26,3,65535,41,27,3,65535,42,28,3,65535,43,29,3,65535,44,30,3,65535,45,31,3,65535,46,32,3,65535,47,33,3,65535,48,34,3,65535,49,35,3,65535,50,36,3,65535,51,37,3,65535,52,38,3,65535,53,39,3,65535,54,40,3,65535,55,41,7,65535,4294967295,42,8,65535,4294967295,43,4,65535,4294967295,44,4,65535,4294967295,45,9,65535,4294967295,2,1,65535,56,46,10,65535,57,47,2,65535,58,2,1,65535,59,48,5,70,4294967295,49,11,102,4294967295,50,3,65535,60,51,3,65535,61,52,3,65535,62,53,3,65535,63,54,3,65535,64,55,3,65535,65,56,3,65535,66,57,3,65535,67,58,3,65535,68,59,3,65535,69,60,3,65535,70,61,3,65535,71,62,3,65535,72,63,3,65535,73,64,3,65535,74,65,3,65535,75,66,3,65535,76,67,7,65535,4294967295,68,4,65535,4294967295,69,7,124,4294967295,70,8,126,4294967295,71,12,65535,4294967295,72,13,65535,4294967295,73,9,142,4294967295,74,14,65535,4294967295,2,1,65535,77,75,10,68,4294967295,76,2,65535,78,77,5,70,4294967295,2,1,65535,79,78,11,102,4294967295,79,11,102,4294967295,80,15,152,80,81,3,65535,81,82,3,65535,82,83,3,65535,83,84,3,65535,84,85,3,65535,85,86,3,65535,86,87,3,65535,87,88,3,65535,88,10,3,65535,89,89,3,65535,90,90,3,65535,91,91,3,65535,92,92,3,65535,93,93,3,65535,94,94,3,65535,95,95,3,65535,96,96,3,65535,97,97,16,65535,4294967295,98,17,65535,4294967295,99,7,65535,4294967295,100,18,65535,4294967295,101,8,65535,4294967295,102,19,65535,4294967295,103,20,65535,4294967295,104,12,65535,4294967295,105,12,65535,4294967295,106,12,65535,4294967295,107,21,65535,4294967295,108,22,65535,98,109,13,65535,4294967295,110,23,65535,4294967295,111,24,65535,4294967295,112,25,65535,4294967295,109,13,65535,4294967295,113,26,65535,4294967295,109,13,65535,99,114,27,65535,4294967295,115,9,65535,4294967295,116,28,65535,4294967295,117,14,65535,4294967295,118,14,142,4294967295,119,29,65535,4294967295,120,10,65535,100,121,2,65535,101,2,1,65535,102,2,1,65535,103,2,1,65535,104,80,15,152,4294967295,122,15,152,4294967295,10,3,65535,105,123,3,65535,106,124,3,65535,107,125,3,65535,108,126,3,65535,109,127,3,65535,110,10,3,65535,111,128,3,65535,112,129,3,65535,113,130,3,65535,114,131,3,65535,115,132,3,65535,116,133,3,65535,117,134,3,65535,118,135,3,65535,119,136,3,65535,120,137,16,65535,4294967295,138,30,65535,4294967295,139,31,65535,4294967295,140,16,249,4294967295,141,32,65535,4294967295,142,17,124,4294967295,143,7,65535,4294967295,144,18,126,4294967295,145,8,65535,4294967295,146,19,65535,4294967295,108,22,65535,4294967295,147,12,65535,4294967295,148,19,65535,4294967295,149,19,124,4294967295,150,20,65535,4294967295,151,20,126,4294967295,152,33,65535,4294967295,153,34,65535,4294967295,154,21,65535,4294967295,155,21,142,4294967295,156,35,65535,4294967295,157,22,65535,4294967295,158,23,65535,4294967295,159,23,65535,4294967295,160,36,65535,4294967295,161,23,65535,4294967295,162,23,124,4294967295,163,37,65535,4294967295,164,38,65535,4294967295,165,24,65535,4294967295,166,24,126,4294967295,167,39,65535,4294967295,168,33,65535,4294967295,169,40,65535,4294967295,170,41,65535,4294967295,112,25,65535,4294967295,171,25,65535,4294967295,112,25,65535,4294967295,172,42,65535,4294967295,173,43,65535,4294967295,174,26,65535,4294967295,175,26,142,4294967295,176,27,142,4294967295,177,44,65535,4294967295,178,9,65535,4294967295,179,28,333,4294967295,180,45,65535,4294967295,181,14,65535,4294967295,182,46,65535,4294967295,183,29,65535,4294967295,184,29,142,4294967295,45,9,65535,121,185,10,65535,122,3,2,65535,123,2,1,65535,124,186,3,65535,125,187,3,65535,126,188,3,65535,127,189,3,65535,128,10,3,65535,129,10,3,65535,130,190,3,65535,131,10,3,65535,132,191,3,65535,133,192,3,65535,134,10,3,65535,135,193,3,65535,136,10,3,65535,137,194,3,65535,138,195,31,65535,4294967295,196,30,65535,4294967295,197,30,364,4294967295,198,31,65535,4294967295,199,16,65535,4294967295,200,47,65535,4294967295,201,31,65535,4294967295,202,31,364,4294967295,203,48,65535,4294967295,204,49,65535,4294967295,205,16,65535,4294967295,206,16,364,4294967295,207,16,65535,4294967295,208,17,65535,4294967295,209,32,65535,4294967295,210,32,65535,4294967295,2,1,65535,139,211,17,65535,4294967295,212,7,65535,4294967295,213,18,65535,4294967295,214,8,65535,4294967295,215,50,65535,4294967295,216,51,65535,4294967295,217,19,65535,4294967295,218,52,65535,4294967295,219,20,65535,4294967295,220,53,65535,4294967295,221,54,65535,4294967295,168,33,65535,4294967295,222,55,65535,4294967295,223,33,65535,4294967295,224,56,65535,4294967295,153,34,65535,4294967295,225,57,65535,4294967295,226,58,65535,4294967295,227,34,65535,4294967295,153,34,65535,4294967295,228,59,65535,4294967295,153,34,65535,140,229,60,65535,4294967295,230,21,65535,4294967295,231,61,65535,4294967295,232,35,65535,4294967295,233,35,65535,4294967295,234,35,142,4294967295,235,62,65535,4294967295,236,63,65535,4294967295,237,36,65535,4294967295,238,36,464,4294967295,239,64,65535,4294967295,240,65,65535,4294967295,241,66,65535,4294967295,158,23,65535,4294967295,242,23,65535,4294967295,243,67,65535,4294967295,244,37,65535,4294967295,245,37,484,4294967295,246,38,65535,4294967295,247,38,65535,4294967295,248,38,65535,4294967295,249,38,490,4294967295,250,68,65535,4294967295,251,69,65535,4294967295,252,70,65535,4294967295,111,24,65535,4294967295,253,24,65535,4294967295,254,39,65535,4294967295,255,39,507,4294967295,256,33,65535,4294967295,257,40,65535,4294967295,258,40,65535,4294967295,259,71,65535,4294967295,257,40,65535,4294967295,260,40,65535,4294967295,261,40,124,4294967295,262,72,65535,4294967295,263,73,65535,4294967295,170,41,65535,4294967295,264,41,65535,4294967295,265,41,126,4294967295,266,74,65535,4294967295,112,25,65535,4294967295,267,75,65535,4294967295,172,42,65535,4294967295,268,42,65535,4294967295,269,42,142,4294967295,270,43,65535,4294967295,271,43,333,4294967295,272,76,65535,4294967295,273,77,65535,4294967295,113,26,65535,4294967295,274,26,65535,4294967295,275,27,65535,4294967295,276,78,65535,4294967295,277,44,65535,4294967295,278,44,142,4294967295,279,79,65535,4294967295,280,9,65535,4294967295,281,28,65535,4294967295,282,80,65535,4294967295,283,81,65535,4294967295,284,45,65535,4294967295,285,82,333,4294967295,286,82,65535,4294967295,287,8,65535,141,288,14,65535,4294967295,289,46,507,4294967295,290,83,65535,4294967295,291,84,65535,4294967295,292,85,65535,4294967295,293,29,65535,4294967295,294,10,65535,142,295,3,65535,143,10,3,65535,144,296,3,65535,145,10,3,65535,146,297,3,65535,147,10,3,65535,148,298,3,65535,149,10,3,65535,150,299,1,65535,4294967295,2,1,65535,151,300,16,65535,4294967295,301,30,65535,4294967295,302,86,65535,4294967295,303,30,65535,4294967295,304,30,364,4294967295,305,30,65535,4294967295,300,16,65535,4294967295,306,31,65535,4294967295,307,47,65535,4294967295,308,47,610,4294967295,309,87,65535,4294967295,310,88,65535,4294967295,311,31,65535,4294967295,312,31,364,4294967295,313,31,65535,4294967295,314,48,629,4294967295,315,89,65535,4294967295,316,90,65535,4294967295,317,49,249,4294967295,318,31,65535,4294967295,319,16,65535,4294967295,320,16,65535,4294967295,321,32,65535,4294967295,322,91,65535,4294967295,323,92,65535,4294967295,324,17,65535,4294967295,67,7,65535,4294967295,325,18,65535,4294967295,42,8,65535,4294967295,326,50,65535,4294967295,327,93,65535,4294967295,328,87,65535,4294967295,329,50,65535,4294967295,330,50,249,4294967295,331,94,65535,4294967295,332,95,65535,4294967295,216,51,65535,4294967295,333,51,65535,4294967295,334,51,124,4294967295,335,96,65535,4294967295,336,19,65535,4294967295,337,97,65535,4294967295,338,98,65535,4294967295,218,52,65535,4294967295,339,52,65535,4294967295,340,52,126,4294967295,341,99,65535,4294967295,342,20,65535,4294967295,343,53,65535,4294967295,344,33,65535,4294967295,345,53,65535,4294967295,346,53,124,4294967295,347,54,65535,4294967295,348,54,126,4294967295,349,55,65535,4294967295,350,100,65535,4294967295,351,101,65535,4294967295,352,102,65535,4294967295,353,55,65535,4294967295,354,103,65535,4294967295,355,56,65535,4294967295,356,56,142,4294967295,357,104,65535,4294967295,358,57,65535,4294967295,359,57,65535,4294967295,360,105,65535,4294967295,361,57,65535,4294967295,358,57,65535,4294967295,362,57,124,4294967295,363,106,65535,4294967295,364,107,65535,4294967295,365,58,65535,4294967295,226,58,65535,4294967295,366,58,126,4294967295,367,108,65535,4294967295,349,55,65535,4294967295,368,109,65535,4294967295,369,59,65535,4294967295,228,59,65535,4294967295,370,59,142,4294967295,371,110,65535,4294967295,229,60,65535,4294967295,372,60,65535,4294967295,373,60,142,4294967295,374,21,65535,4294967295,375,61,65535,4294967295,376,61,333,4294967295,377,111,65535,4294967295,378,60,65535,4294967295,379,35,65535,4294967295,380,112,65535,4294967295,381,62,65535,4294967295,382,62,65535,4294967295,383,62,142,4294967295,107,21,65535,152,384,63,65535,4294967295,385,63,65535,4294967295,386,113,65535,4294967295,387,63,65535,4294967295,388,63,249,4294967295,389,114,65535,4294967295,390,115,65535,4294967295,391,116,65535,4294967295,392,117,65535,4294967295,160,36,65535,4294967295,393,36,65535,4294967295,394,64,65535,4294967295,395,64,829,4294967295,396,118,65535,4294967295,240,65,65535,4294967295,397,65,65535,4294967295,398,65,124,4294967295,399,119,65535,4294967295,400,120,65535,4294967295,401,80,65535,4294967295,402,66,65535,4294967295,403,66,124,4294967295,404,121,65535,4294967295,405,23,65535,4294967295,406,67,65535,4294967295,407,67,853,4294967295,408,122,65535,4294967295,409,123,65535,4294967295,410,124,65535,4294967295,163,37,65535,4294967295,411,37,65535,4294967295,412,125,65535,4294967295,413,126,65535,4294967295,414,127,65535,4294967295,415,128,65535,4294967295,246,38,65535,4294967295,416,38,65535,4294967295,417,68,65535,4294967295,418,68,887,4294967295,419,129,65535,4294967295,251,69,65535,4294967295,420,69,65535,4294967295,421,69,126,4294967295,422,130,65535,4294967295,423,131,65535,4294967295,424,132,65535,4294967295,425,70,65535,4294967295,426,70,126,4294967295,427,24,65535,4294967295,428,133,65535,4294967295,429,134,65535,4294967295,430,135,65535,4294967295,167,39,65535,4294967295,431,39,65535,4294967295,71,12,65535,4294967295,432,136,65535,4294967295,259,71,65535,4294967295,433,71,65535,4294967295,434,71,464,4294967295,435,137,65535,4294967295,240,65,65535,4294967295,436,138,65535,4294967295,257,40,65535,4294967295,437,40,65535,4294967295,438,139,65535,4294967295,262,72,65535,4294967295,439,72,65535,4294967295,440,72,484,4294967295,441,73,65535,4294967295,442,73,65535,4294967295,441,73,65535,4294967295,443,73,65535,4294967295,444,73,490,4294967295,445,140,65535,4294967295,251,69,65535,4294967295,446,141,65535,4294967295,170,41,65535,4294967295,447,41,65535,4294967295,266,74,65535,4294967295,448,74,65535,4294967295,449,74,507,4294967295,267,75,65535,4294967295,450,75,65535,4294967295,451,75,333,4294967295,272,76,65535,4294967295,452,142,65535,4294967295,172,42,65535,4294967295,453,42,65535,4294967295,454,143,65535,4294967295,455,144,65535,4294967295,173,43,65535,4294967295,456,43,65535,4294967295,457,145,65535,4294967295,272,76,65535,4294967295,458,76,65535,4294967295,459,76,142,4294967295,460,77,65535,4294967295,461,146,65535,4294967295,462,77,65535,4294967295,463,77,992,4294967295,464,26,65535,4294967295,465,27,65535,4294967295,466,78,333,4294967295,467,147,65535,4294967295,468,148,65535,4294967295,469,149,65535,4294967295,470,44,65535,4294967295,471,79,65535,4294967295,472,79,142,4294967295,114,27,65535,153,45,9,65535,4294967295,473,28,65535,4294967295,474,132,65535,4294967295,475,80,464,4294967295,476,81,65535,4294967295,477,81,333,4294967295,478,150,65535,4294967295,479,151,65535,4294967295,480,152,65535,4294967295,481,82,65535,4294967295,482,82,65535,4294967295,116,28,65535,154,483,14,65535,4294967295,484,46,65535,4294967295,485,83,65535,4294967295,486,83,507,4294967295,487,153,65535,4294967295,488,84,65535,4294967295,489,84,65535,4294967295,490,84,142,4294967295,224,56,65535,155,491,85,65535,4294967295,492,154,65535,4294967295,493,155,65535,4294967295,494,85,142,4294967295,495,156,65535,4294967295,491,85,65535,156,496,29,65535,4294967295,46,10,65535,157,497,3,65535,158,10,3,65535,159,498,1,65535,4294967295,2,1,65535,160,499,3,65535,161,500,31,65535,4294967295,501,31,65535,4294967295,502,86,65535,4294967295,503,86,364,4294967295,504,30,65535,4294967295,505,30,65535,4294967295,506,30,65535,4294967295,507,157,65535,4294967295,508,47,65535,4294967295,509,158,65535,4294967295,510,47,65535,4294967295,511,47,364,4294967295,512,47,65535,4294967295,513,50,65535,4294967295,514,159,65535,4294967295,515,87,65535,4294967295,516,87,65535,4294967295,517,87,364,4294967295,518,160,65535,4294967295,519,88,65535,4294967295,520,63,65535,4294967295,521,161,65535,4294967295,522,162,65535,4294967295,523,88,364,4294967295,524,163,65535,4294967295,300,16,65535,4294967295,525,31,65535,4294967295,526,31,65535,4294967295,527,164,65535,4294967295,528,48,65535,4294967295,529,48,364,4294967295,530,48,65535,4294967295,531,165,65535,4294967295,532,89,65535,4294967295,533,89,629,4294967295,534,166,65535,4294967295,535,90,65535,4294967295,536,49,65535,4294967295,537,90,65535,4294967295,538,90,364,4294967295,539,49,65535,4294967295,540,49,364,4294967295,541,49,65535,4294967295,542,157,65535,4294967295,543,16,65535,4294967295,544,16,65535,4294967295,545,49,65535,4294967295,546,167,65535,4294967295,547,168,65535,4294967295,548,91,65535,4294967295,549,91,65535,4294967295,550,91,65535,4294967295,551,169,65535,4294967295,552,170,65535,162,553,92,65535,4294967295,554,171,65535,4294967295,555,172,65535,4294967295,556,173,65535,4294967295,553,92,65535,4294967295,557,149,65535,4294967295,553,92,65535,163,558,17,65535,4294967295,559,18,65535,4294967295,560,87,65535,4294967295,561,93,65535,4294967295,562,93,65535,4294967295,563,93,364,4294967295,564,50,65535,4294967295,565,174,65535,4294967295,566,50,65535,4294967295,567,50,364,4294967295,568,50,65535,4294967295,569,94,65535,4294967295,570,51,65535,4294967295,571,97,65535,4294967295,572,94,65535,4294967295,573,94,65535,4294967295,574,94,124,4294967295,575,175,65535,4294967295,343,53,65535,164,576,95,65535,4294967295,577,176,464,4294967295,578,177,65535,4294967295,579,51,65535,4294967295,580,96,65535,4294967295,581,178,484,4294967295,582,179,65535,4294967295,583,19,65535,4294967295,584,52,65535,4294967295,585,97,65535,4294967295,586,180,490,4294967295,587,95,65535,4294967295,588,98,65535,4294967295,589,98,65535,4294967295,590,98,126,4294967295,221,54,65535,165,591,181,65535,4294967295,592,52,65535,4294967295,593,99,65535,4294967295,594,182,507,4294967295,595,183,65535,4294967295,596,20,65535,4294967295,597,184,65535,4294967295,598,185,65535,4294967295,599,53,65535,4294967295,600,186,65535,4294967295,601,54,65535,4294967295,349,55,65535,4294967295,602,100,65535,4294967295,603,187,65535,4294967295,604,188,65535,4294967295,605,100,65535,4294967295,602,100,65535,4294967295,606,100,124,4294967295,607,189,65535,4294967295,602,100,65535,166,608,190,65535,4294967295,609,191,65535,4294967295,610,101,65535,4294967295,351,101,65535,4294967295,611,101,126,4294967295,612,192,65535,4294967295,351,101,65535,167,352,102,65535,4294967295,613,193,65535,4294967295,614,194,65535,4294967295,615,102,65535,4294967295,616,102,65535,4294967295,617,102,65535,4294967295,618,195,65535,4294967295,619,187,65535,4294967295,349,55,65535,4294967295,620,196,65535,4294967295,349,55,65535,168,621,197,65535,4294967295,622,103,65535,4294967295,354,103,65535,4294967295,623,103,142,4294967295,624,198,65535,4294967295,354,103,65535,169,625,199,65535,4294967295,626,56,65535,4294967295,627,200,65535,4294967295,357,104,65535,4294967295,628,104,65535,4294967295,629,104,142,4294967295,630,201,65535,4294967295,631,105,65535,4294967295,360,105,65535,4294967295,632,105,464,4294967295,633,202,65535,4294967295,634,187,65535,4294967295,578,177,65535,4294967295,358,57,65535,4294967295,635,57,65535,4294967295,636,203,65535,4294967295,637,106,65535,4294967295,363,106,65535,4294967295,638,106,484,4294967295,639,107,65535,4294967295,640,107,65535,4294967295,641,107,65535,4294967295,639,107,65535,4294967295,642,107,490,4294967295,643,204,65535,4294967295,609,191,65535,4294967295,591,181,65535,4294967295,226,58,65535,4294967295,644,58,65535,4294967295,645,108,65535,4294967295,367,108,65535,4294967295,646,108,507,4294967295,647,109,65535,4294967295,368,109,65535,4294967295,648,109,333,4294967295,620,196,65535,4294967295,649,205,65535,4294967295,228,59,65535,4294967295,650,59,65535,4294967295,651,110,65535,4294967295,652,200,333,4294967295,156,35,65535,4294967295,653,60,65535,4294967295,654,21,65535,4294967295,655,206,65535,4294967295,656,61,65535,4294967295,657,207,65535,4294967295,658,208,65535,4294967295,659,111,65535,4294967295,660,111,65535,4294967295,661,209,333,4294967295,662,209,65535,4294967295,663,20,65535,170,664,196,65535,4294967295,665,35,65535,4294967295,666,112,65535,4294967295,667,112,507,4294967295,668,210,65535,4294967295,669,60,65535,4294967295,618,195,65535,4294967295,670,62,65535,4294967295,385,63,65535,4294967295,671,211,65535,4294967295,672,113,65535,4294967295,673,113,1429,4294967295,674,212,65535,4294967295,675,213,65535,4294967295,676,214,65535,4294967295,677,63,65535,4294967295,678,63,364,4294967295,679,63,65535,4294967295,680,215,65535,4294967295,681,114,65535,4294967295,682,114,1452,4294967295,390,115,65535,4294967295,683,115,65535,4294967295,684,115,464,4294967295,685,216,65535,4294967295,686,217,65535,4294967295,687,218,65535,4294967295,688,116,464,4294967295,689,219,65535,4294967295,690,220,65535,4294967295,691,117,65535,4294967295,692,117,464,4294967295,693,221,65535,4294967295,694,36,65535,4294967295,695,222,65535,4294967295,696,223,65535,4294967295,697,224,65535,4294967295,239,64,65535,4294967295,698,64,65535,4294967295,396,118,65535,4294967295,699,118,65535,4294967295,700,225,65535,4294967295,240,65,65535,4294967295,240,65,65535,4294967295,701,65,65535,4294967295,702,226,65535,4294967295,399,119,65535,4294967295,703,119,65535,4294967295,704,120,65535,4294967295,705,66,65535,4294967295,706,131,65535,4294967295,707,120,65535,4294967295,708,120,124,4294967295,709,227,65535,4294967295,67,7,65535,171,710,66,65535,4294967295,711,121,484,4294967295,712,23,65535,4294967295,713,228,65535,4294967295,714,229,65535,4294967295,715,230,65535,4294967295,243,67,65535,4294967295,716,67,65535,4294967295,717,231,65535,4294967295,408,122,65535,4294967295,718,122,65535,4294967295,719,122,484,4294967295,720,123,484,4294967295,721,232,65535,4294967295,722,233,65535,4294967295,723,124,65535,4294967295,724,124,484,4294967295,725,234,65535,4294967295,726,37,65535,4294967295,727,125,65535,4294967295,728,125,65535,4294967295,729,125,65535,4294967295,730,125,1539,4294967295,731,235,65535,4294967295,413,126,65535,4294967295,732,126,65535,4294967295,733,126,490,4294967295,734,236,65535,4294967295,735,237,65535,4294967295,736,238,65535,4294967295,737,127,490,4294967295,738,239,65535,4294967295,739,240,65535,4294967295,740,128,65535,4294967295,741,128,490,4294967295,742,241,65535,4294967295,743,38,65535,4294967295,744,242,65535,4294967295,745,243,65535,4294967295,746,244,65535,4294967295,250,68,65535,4294967295,747,68,65535,4294967295,748,129,65535,4294967295,749,129,65535,4294967295,748,129,65535,4294967295,750,129,65535,4294967295,751,245,65535,4294967295,251,69,65535,4294967295,251,69,65535,4294967295,752,69,65535,4294967295,422,130,65535,4294967295,753,130,65535,4294967295,754,70,65535,4294967295,755,131,490,4294967295,756,132,65535,4294967295,757,132,126,4294967295,42,8,65535,172,758,70,65535,4294967295,759,24,65535,4294967295,428,133,65535,4294967295,760,133,65535,4294967295,761,133,507,4294967295,762,134,507,4294967295,763,246,65535,4294967295,764,135,65535,4294967295,765,135,65535,4294967295,766,135,1604,4294967295,767,39,65535,4294967295,768,136,65535,4294967295,769,247,65535,4294967295,770,136,65535,4294967295,771,248,65535,4294967295,768,136,65535,4294967295,772,136,65535,4294967295,773,136,249,4294967295,774,249,65535,4294967295,390,115,65535,4294967295,775,250,65535,4294967295,259,71,65535,4294967295,776,71,65535,4294967295,435,137,65535,4294967295,777,137,65535,4294967295,778,137,829,4294967295,779,185,65535,4294967295,780,176,65535,4294967295,436,138,65535,4294967295,781,138,65535,4294967295,782,138,124,4294967295,783,178,65535,4294967295,784,40,65535,4294967295,438,139,65535,4294967295,785,139,65535,4294967295,786,139,853,4294967295,408,122,65535,4294967295,787,251,65535,4294967295,262,72,65535,4294967295,788,72,65535,4294967295,789,252,65535,4294967295,413,126,65535,4294967295,790,253,65535,4294967295,441,73,65535,4294967295,791,73,65535,4294967295,445,140,65535,4294967295,792,140,65535,4294967295,793,140,887,4294967295,794,180,65535,4294967295,446,141,65535,4294967295,795,141,65535,4294967295,796,141,126,4294967295,797,182,65535,4294967295,798,41,65535,4294967295,428,133,65535,4294967295,799,254,65535,4294967295,800,255,65535,4294967295,266,74,65535,4294967295,801,74,65535,4294967295,454,143,65535,4294967295,802,256,65535,4294967295,803,257,65535,4294967295,267,75,65535,4294967295,804,75,65535,4294967295,805,142,65535,4294967295,806,258,65535,4294967295,805,142,65535,4294967295,807,142,65535,4294967295,808,142,992,4294967295,809,42,65535,4294967295,454,143,65535,4294967295,810,143,65535,4294967295,811,143,333,4294967295,812,144,65535,4294967295,813,144,65535,4294967295,814,144,1707,4294967295,815,43,65535,4294967295,457,145,65535,4294967295,816,145,65535,4294967295,272,76,65535,4294967295,817,259,65535,4294967295,272,76,65535,4294967295,818,76,65535,4294967295,819,146,65535,4294967295,820,146,1719,4294967295,821,260,65535,4294967295,822,261,65535,4294967295,823,262,65535,4294967295,460,77,65535,4294967295,824,77,65535,4294967295,825,26,65535,4294967295,826,27,65535,4294967295,827,78,65535,4294967295,828,116,65535,4294967295,829,263,65535,4294967295,830,147,65535,4294967295,831,264,333,4294967295,832,264,65535,4294967295,833,18,65535,173,834,265,65535,4294967295,835,148,65535,4294967295,836,148,65535,4294967295,837,148,142,4294967295,838,266,65535,4294967295,839,267,65535,4294967295,840,268,65535,4294967295,841,149,142,4294967295,842,44,65535,4294967295,843,269,65535,4294967295,844,270,65535,4294967295,845,79,65535,4294967295,846,28,65535,4294967295,847,271,65535,4294967295,848,80,65535,4294967295,849,81,65535,4294967295,850,150,65535,4294967295,851,150,507,4294967295,182,46,65535,174,852,151,65535,4294967295,853,151,65535,4294967295,854,272,333,4294967295,855,273,65535,4294967295,856,54,65535,175,857,152,65535,4294967295,858,274,65535,4294967295,859,275,65535,4294967295,860,276,65535,4294967295,861,277,333,4294967295,862,278,65535,176,863,82,65535,4294967295,864,272,65535,4294967295,865,277,65535,4294967295,74,14,65535,4294967295,866,46,65535,4294967295,867,83,65535,4294967295,868,153,65535,4294967295,869,9,65535,177,870,199,65535,4294967295,871,84,65535,4294967295,872,154,65535,4294967295,873,279,507,4294967295,874,280,65535,4294967295,875,85,65535,178,876,281,65535,4294967295,493,155,65535,4294967295,877,155,65535,4294967295,878,155,142,4294967295,879,282,65535,4294967295,880,283,65535,4294967295,491,85,65535,4294967295,881,85,65535,4294967295,882,284,65535,4294967295,883,277,65535,4294967295,884,156,65535,4294967295,885,156,142,4294967295,886,285,65535,4294967295,887,29,65535,4294967295,888,1,65535,4294967295,2,1,65535,179,10,3,65535,180,889,157,65535,4294967295,890,286,65535,4294967295,891,86,65535,4294967295,892,86,65535,4294967295,893,86,364,4294967295,894,86,65535,4294967295,895,287,65535,4294967295,896,30,65535,4294967295,897,30,65535,4294967295,898,157,65535,4294967295,899,287,65535,4294967295,900,288,65535,4294967295,901,289,65535,4294967295,902,157,65535,4294967295,903,157,249,4294967295,904,290,65535,4294967295,137,16,65535,181,905,291,65535,4294967295,906,158,65535,4294967295,907,158,610,4294967295,908,47,65535,4294967295,909,47,65535,4294967295,910,47,65535,4294967295,911,87,65535,4294967295,912,159,65535,4294967295,913,159,65535,4294967295,914,159,610,4294967295,915,292,65535,4294967295,916,293,65535,4294967295,917,87,65535,4294967295,918,87,364,4294967295,919,87,65535,4294967295,920,160,65535,4294967295,921,160,629,4294967295,922,294,65535,4294967295,923,63,65535,4294967295,924,161,65535,4294967295,925,161,610,4294967295,926,295,65535,4294967295,927,292,65535,4294967295,928,296,65535,4294967295,929,297,65535,4294967295,522,162,65535,4294967295,930,162,65535,4294967295,931,162,364,4294967295,932,298,65535,4294967295,933,88,364,4294967295,934,88,65535,4294967295,935,299,65535,4294967295,936,163,65535,4294967295,937,163,629,4294967295,938,31,65535,4294967295,939,31,65535,4294967295,940,164,629,4294967295,941,300,65535,4294967295,942,48,65535,4294967295,943,48,65535,4294967295,944,165,1987,4294967295,945,301,65535,4294967295,946,89,65535,4294967295,947,89,364,4294967295,948,89,65535,4294967295,949,302,65535,4294967295,950,166,65535,4294967295,951,303,629,4294967295,952,9,65535,182,536,49,65535,4294967295,953,90,65535,4294967295,954,304,65535,4294967295,955,305,65535,4294967295,956,90,65535,4294967295,957,90,364,4294967295,958,90,65535,4294967295,959,90,65535,4294967295,960,49,65535,4294967295,961,49,65535,4294967295,962,288,65535,4294967295,963,16,65535,4294967295,137,16,65535,4294967295,964,90,65535,4294967295,965,167,65535,4294967295,552,170,65535,4294967295,966,91,65535,4294967295,967,167,65535,4294967295,968,167,124,4294967295,969,168,65535,4294967295,970,168,126,4294967295,971,306,65535,4294967295,972,307,65535,4294967295,973,169,65535,4294967295,974,169,142,4294967295,975,170,65535,4294967295,976,171,65535,4294967295,977,171,65535,4294967295,978,308,65535,4294967295,979,171,65535,4294967295,980,171,124,4294967295,981,309,65535,4294967295,982,310,65535,4294967295,983,172,65535,4294967295,984,172,126,4294967295,985,311,65535,4294967295,986,306,65535,4294967295,987,312,65535,4294967295,988,313,65535,4294967295,556,173,65535,4294967295,989,173,65535,4294967295,556,173,65535,4294967295,990,314,65535,4294967295,98,17,65535,4294967295,100,18,65535,4294967295,513,50,65535,4294967295,991,93,65535,4294967295,992,93,65535,4294967295,993,93,364,4294967295,994,93,65535,4294967295,995,87,65535,4294967295,996,315,65535,4294967295,997,316,65535,4294967295,565,174,65535,4294967295,998,174,65535,4294967295,999,174,249,4294967295,1000,317,65535,4294967295,1001,87,65535,4294967295,1002,50,65535,4294967295,1003,50,65535,4294967295,1004,51,65535,4294967295,1005,318,65535,4294967295,1006,185,65535,4294967295,1007,94,65535,4294967295,1008,175,65535,4294967295,1009,319,992,4294967295,1010,320,65535,4294967295,1011,321,65535,4294967295,1012,176,65535,4294967295,1013,176,65535,4294967295,1014,322,65535,4294967295,1015,207,65535,4294967295,1016,177,65535,4294967295,1017,177,65535,4294967295,1018,177,124,4294967295,1019,323,65535,4294967295,1020,51,65535,4294967295,1021,324,65535,4294967295,1022,178,65535,4294967295,1023,178,65535,4294967295,1024,325,65535,4294967295,582,179,65535,4294967295,1025,179,65535,4294967295,1026,251,484,4294967295,146,19,65535,4294967295,1027,326,65535,4294967295,1028,327,65535,4294967295,1029,180,65535,4294967295,1030,180,65535,4294967295,1031,180,65535,4294967295,1032,98,65535,4294967295,1033,186,65535,4294967295,1034,98,65535,4294967295,1035,328,65535,4294967295,1036,329,65535,4294967295,1037,181,65535,4294967295,1038,181,65535,4294967295,1039,181,126,4294967295,1040,52,65535,4294967295,1041,330,65535,4294967295,1042,182,65535,4294967295,1043,182,65535,4294967295,595,183,65535,4294967295,1044,183,65535,4294967295,1045,254,507,4294967295,103,20,65535,4294967295,1046,184,65535,4294967295,1047,331,65535,4294967295,1048,247,65535,4294967295,1049,184,65535,4294967295,1050,184,249,4294967295,1051,138,65535,4294967295,598,185,65535,4294967295,1052,185,65535,4294967295,1053,185,124,4294967295,1054,319,65535,4294967295,1055,53,65535,4294967295,1056,176,65535,4294967295,600,186,65535,4294967295,1057,186,65535,4294967295,1058,186,126,4294967295,1059,54,65535,4294967295,634,187,65535,4294967295,1060,332,65535,4294967295,1061,190,65535,4294967295,634,187,65535,4294967295,1062,187,65535,4294967295,1063,187,124,4294967295,1064,333,65535,4294967295,1065,334,65535,4294967295,1066,188,65535,4294967295,604,188,65535,4294967295,1067,335,490,4294967295,1068,336,65535,4294967295,1069,100,65535,183,1070,337,65535,4294967295,1071,100,65535,4294967295,602,100,65535,4294967295,1072,100,65535,4294967295,1073,338,65535,4294967295,1074,189,65535,4294967295,607,189,65535,4294967295,1075,339,992,4294967295,1076,100,65535,184,1077,190,65535,4294967295,1078,340,65535,4294967295,1079,190,65535,4294967295,1061,190,65535,4294967295,1080,341,464,4294967295,1081,342,65535,4294967295,1082,101,65535,185,1083,188,65535,4294967295,609,191,65535,4294967295,1084,191,65535,4294967295,1085,191,126,4294967295,1086,343,65535,4294967295,351,101,65535,4294967295,1087,101,65535,4294967295,1088,344,65535,4294967295,1089,192,65535,4294967295,612,192,65535,4294967295,1090,345,333,4294967295,1091,101,65535,186,1092,193,65535,4294967295,1093,346,65535,4294967295,1094,347,65535,4294967295,1095,193,65535,4294967295,1092,193,65535,4294967295,1096,193,124,4294967295,1097,348,65535,4294967295,1092,193,65535,187,1098,349,65535,4294967295,1099,350,65535,4294967295,1100,194,65535,4294967295,614,194,65535,4294967295,1101,194,126,4294967295,1102,351,65535,4294967295,614,194,65535,188,349,55,65535,4294967295,1103,346,65535,4294967295,352,102,65535,4294967295,352,102,65535,4294967295,1104,352,65535,4294967295,352,102,65535,189,1105,353,65535,4294967295,1106,195,65535,4294967295,1107,195,142,4294967295,1108,354,65535,4294967295,618,195,65535,190,1109,100,65535,4294967295,620,196,65535,4294967295,1110,196,142,4294967295,1111,197,65535,4294967295,621,197,65535,4294967295,1112,355,507,4294967295,1113,356,65535,4294967295,1114,103,65535,191,1115,357,65535,4294967295,1116,333,65535,4294967295,354,103,65535,4294967295,1117,103,65535,4294967295,1118,345,65535,4294967295,624,198,65535,4294967295,1119,198,65535,4294967295,1120,198,142,4294967295,1115,357,65535,4294967295,625,199,65535,4294967295,1121,199,65535,4294967295,1122,199,142,4294967295,1123,56,65535,4294967295,1124,200,65535,4294967295,1125,358,65535,4294967295,156,35,65535,4294967295,1126,104,65535,4294967295,1127,201,65535,4294967295,1128,201,65535,4294967295,1129,359,65535,4294967295,1130,201,65535,4294967295,1127,201,65535,4294967295,1131,201,249,4294967295,1132,360,65535,4294967295,1078,340,65535,4294967295,1133,361,65535,4294967295,360,105,65535,4294967295,1134,105,65535,4294967295,1135,202,65535,4294967295,633,202,65535,4294967295,1136,202,829,4294967295,1137,57,65535,4294967295,1138,203,65535,4294967295,636,203,65535,4294967295,1139,203,853,4294967295,1140,362,65535,4294967295,1141,363,65535,4294967295,363,106,65535,4294967295,1142,106,65535,4294967295,1143,364,65535,4294967295,1144,334,65535,4294967295,1145,365,65535,4294967295,639,107,65535,4294967295,1146,107,65535,4294967295,1147,204,65535,4294967295,643,204,65535,4294967295,1148,204,887,4294967295,1149,58,65535,4294967295,1150,366,65535,4294967295,1151,367,65535,4294967295,367,108,65535,4294967295,1152,108,65535,4294967295,1088,344,65535,4294967295,1153,368,65535,4294967295,368,109,65535,4294967295,1154,109,65535,4294967295,1155,205,65535,4294967295,1156,369,65535,4294967295,1157,205,65535,4294967295,1155,205,65535,4294967295,1158,205,992,4294967295,1159,59,65535,4294967295,1160,370,65535,4294967295,1161,200,65535,4294967295,1162,60,65535,4294967295,107,21,65535,4294967295,655,206,65535,4294967295,1163,206,65535,4294967295,1164,206,333,4294967295,1165,371,65535,4294967295,1166,61,65535,4294967295,1167,329,65535,4294967295,1168,207,65535,4294967295,1169,207,464,4294967295,1170,208,65535,4294967295,1171,208,65535,4294967295,1172,208,333,4294967295,1173,372,65535,4294967295,1174,206,65535,4294967295,1102,351,65535,4294967295,1175,209,65535,4294967295,1176,209,65535,4294967295,1177,209,65535,4294967295,231,61,65535,192,1104,352,65535,4294967295,1178,35,65535,4294967295,1179,373,65535,4294967295,1180,112,65535,4294967295,1181,210,65535,4294967295,1182,210,65535,4294967295,1183,210,507,4294967295,1184,374,65535,4294967295,1185,375,65535,4294967295,1186,62,65535,4294967295,1187,211,65535,4294967295,1188,211,65535,4294967295,1189,211,65535,4294967295,1190,211,2528,4294967295,1191,376,65535,4294967295,1192,377,65535,4294967295,1193,378,65535,4294967295,1194,379,65535,4294967295,1195,211,65535,4294967295,1196,113,364,4294967295,1197,113,65535,4294967295,1198,212,65535,4294967295,1199,212,2551,4294967295,1200,380,65535,4294967295,675,213,65535,4294967295,1201,213,65535,4294967295,1202,213,249,4294967295,1203,381,65535,4294967295,890,286,65535,4294967295,1204,271,65535,4294967295,1205,214,65535,4294967295,1206,214,249,4294967295,1207,382,65535,4294967295,923,63,65535,4294967295,1208,63,65535,4294967295,1209,63,65535,4294967295,1210,215,65535,4294967295,1211,215,2575,4294967295,1212,383,65535,4294967295,1213,384,65535,4294967295,1214,385,65535,4294967295,1215,386,65535,4294967295,1216,114,364,4294967295,1217,114,65535,4294967295,390,115,65535,4294967295,1218,387,65535,4294967295,390,115,65535,4294967295,1219,115,65535,4294967295,685,216,65535,4294967295,1220,216,65535,4294967295,1221,217,65535,4294967295,1222,217,126,4294967295,100,18,65535,193,1223,238,65535,4294967295,1224,218,65535,4294967295,1225,218,124,4294967295,1226,116,65535,4294967295,1227,219,65535,4294967295,1228,117,65535,4294967295,1229,239,65535,4294967295,1230,219,65535,4294967295,1231,219,490,4294967295,1232,388,65535,4294967295,706,131,65535,194,1233,240,65535,4294967295,1234,220,65535,4294967295,1235,240,464,4294967295,1236,8,65535,195,1237,117,65535,4294967295,1238,221,829,4294967295,1239,36,65535,4294967295,695,222,65535,4294967295,1240,222,65535,4294967295,1241,222,829,4294967295,1242,389,65535,4294967295,1243,223,829,4294967295,1244,390,65535,4294967295,1245,391,65535,4294967295,1246,224,65535,4294967295,1247,224,829,4294967295,1248,392,65535,4294967295,1249,64,65535,4294967295,390,115,65535,4294967295,700,225,65535,4294967295,1250,225,65535,4294967295,1251,65,65535,4294967295,702,226,65535,4294967295,1252,226,65535,4294967295,408,122,65535,4294967295,1253,66,65535,4294967295,1254,157,65535,4294967295,1255,284,65535,4294967295,1256,120,65535,4294967295,1257,227,992,4294967295,1258,393,65535,4294967295,1259,66,65535,4294967295,1260,121,65535,4294967295,158,23,65535,4294967295,713,228,65535,4294967295,1261,228,65535,4294967295,1262,228,853,4294967295,1263,229,853,4294967295,1264,394,65535,4294967295,1265,395,65535,4294967295,1266,230,65535,4294967295,1267,230,853,4294967295,1268,396,65535,4294967295,1269,67,65535,4294967295,717,231,65535,4294967295,1270,231,65535,4294967295,408,122,65535,4294967295,1271,397,65535,4294967295,408,122,65535,4294967295,1272,122,65535,4294967295,1273,123,65535,4294967295,1274,232,65535,4294967295,1275,232,484,4294967295,1276,233,853,4294967295,1277,124,65535,4294967295,1278,234,65535,4294967295,1279,398,484,4294967295,1280,9,65535,196,1281,37,65535,4294967295,1282,125,65535,4294967295,728,125,65535,4294967295,1283,399,65535,4294967295,1284,400,65535,4294967295,1285,401,65535,4294967295,1286,125,65535,4294967295,1287,125,364,4294967295,1288,125,65535,4294967295,1289,235,65535,4294967295,1290,235,2707,4294967295,413,126,65535,4294967295,1291,402,65535,4294967295,413,126,65535,4294967295,1292,126,65535,4294967295,734,236,65535,4294967295,1293,236,65535,4294967295,1294,127,65535,4294967295,1295,237,65535,4294967295,1296,237,126,4294967295,1297,218,65535,4294967295,1298,238,65535,4294967295,1299,238,124,4294967295,98,17,65535,197,1300,127,65535,4294967295,1301,128,65535,4294967295,1302,239,65535,4294967295,1303,403,65535,4294967295,1304,7,65535,198,1305,220,65535,4294967295,1306,240,65535,4294967295,1307,404,65535,4294967295,401,80,65535,199,1308,128,65535,4294967295,1309,398,65535,4294967295,1310,241,887,4294967295,1311,38,65535,4294967295,744,242,65535,4294967295,1312,242,65535,4294967295,1313,242,887,4294967295,1314,405,65535,4294967295,1315,243,887,4294967295,1316,406,65535,4294967295,1317,407,65535,4294967295,1318,244,65535,4294967295,1319,244,887,4294967295,1320,408,65535,4294967295,1321,68,65535,4294967295,1322,409,65535,4294967295,413,126,65535,4294967295,751,245,65535,4294967295,1323,245,65535,4294967295,1324,69,65535,4294967295,428,133,65535,4294967295,1325,289,65535,4294967295,1326,131,65535,4294967295,1327,278,65535,4294967295,1328,132,65535,4294967295,1329,70,65535,4294967295,111,24,65535,4294967295,428,133,65535,4294967295,1330,410,65535,4294967295,428,133,65535,4294967295,1331,133,65535,4294967295,1332,134,65535,4294967295,1333,246,65535,4294967295,1334,246,507,4294967295,1335,411,65535,4294967295,1336,412,65535,4294967295,1337,413,65535,4294967295,1338,414,65535,4294967295,764,135,65535,4294967295,1339,135,65535,4294967295,1340,39,65535,4294967295,1341,136,65535,4294967295,1342,184,65535,4294967295,1343,415,65535,4294967295,769,247,65535,4294967295,1344,247,65535,4294967295,1345,247,364,4294967295,1346,416,65535,4294967295,770,136,65535,4294967295,1347,417,65535,4294967295,771,248,65535,4294967295,1348,248,65535,4294967295,1349,248,1429,4294967295,1350,418,65535,4294967295,675,213,65535,4294967295,1351,419,65535,4294967295,1352,136,65535,4294967295,1353,136,364,4294967295,1354,136,65535,4294967295,1355,420,65535,4294967295,774,249,65535,4294967295,1356,249,65535,4294967295,1357,249,1452,4294967295,1358,421,65535,4294967295,1359,422,65535,4294967295,775,250,65535,4294967295,1360,250,65535,4294967295,1361,250,464,4294967295,1362,423,65535,4294967295,1363,71,65535,4294967295,695,222,65535,4294967295,1364,424,65535,4294967295,435,137,65535,4294967295,1365,137,65535,4294967295,1366,138,65535,4294967295,578,177,65535,4294967295,1367,138,65535,4294967295,1368,40,65535,4294967295,713,228,65535,4294967295,1369,425,65535,4294967295,438,139,65535,4294967295,1370,139,65535,4294967295,1371,426,65535,4294967295,787,251,65535,4294967295,1372,251,65535,4294967295,1373,427,65535,4294967295,1374,72,65535,4294967295,1375,252,65535,4294967295,1376,252,65535,4294967295,1375,252,65535,4294967295,1377,252,65535,4294967295,1378,252,1539,4294967295,1379,428,65535,4294967295,1380,429,65535,4294967295,1381,430,65535,4294967295,790,253,65535,4294967295,1382,253,65535,4294967295,1383,253,490,4294967295,1384,431,65535,4294967295,1385,73,65535,4294967295,744,242,65535,4294967295,1386,432,65535,4294967295,445,140,65535,4294967295,1387,140,65535,4294967295,1388,141,65535,4294967295,591,181,65535,4294967295,1389,141,65535,4294967295,1390,41,65535,4294967295,1391,433,65535,4294967295,799,254,65535,4294967295,1392,254,65535,4294967295,1393,434,65535,4294967295,1394,255,65535,4294967295,1394,255,65535,4294967295,1395,255,65535,4294967295,1396,255,1604,4294967295,1397,74,65535,4294967295,802,256,65535,4294967295,1398,256,65535,4294967295,1399,256,333,4294967295,1400,435,65535,4294967295,1401,257,65535,4294967295,1401,257,65535,4294967295,1402,257,65535,4294967295,1403,257,1707,4294967295,1404,75,65535,4294967295,806,258,65535,4294967295,1405,258,65535,4294967295,1406,258,1719,4294967295,821,260,65535,4294967295,1407,436,65535,4294967295,805,142,65535,4294967295,1408,142,65535,4294967295,1409,42,65535,4294967295,454,143,65535,4294967295,1410,437,65535,4294967295,454,143,65535,4294967295,1411,143,65535,4294967295,1412,438,65535,4294967295,1413,439,65535,4294967295,1414,440,65535,4294967295,812,144,65535,4294967295,1415,144,65535,4294967295,1416,43,65535,4294967295,454,143,65535,4294967295,1417,259,65535,4294967295,1418,441,65535,4294967295,1417,259,65535,4294967295,1419,259,65535,4294967295,1420,76,65535,4294967295,1421,442,65535,4294967295,1422,443,65535,4294967295,1423,444,65535,4294967295,461,146,65535,4294967295,1424,146,65535,4294967295,1425,445,65535,4294967295,821,260,65535,4294967295,1426,260,65535,4294967295,1427,260,992,4294967295,1428,261,992,4294967295,1429,446,65535,4294967295,1430,262,65535,4294967295,1431,262,992,4294967295,1432,77,65535,4294967295,113,26,65535,4294967295,114,27,65535,4294967295,1433,78,65535,4294967295,1434,217,65535,4294967295,1435,263,65535,4294967295,1436,263,333,4294967295,1437,447,65535,4294967295,1438,448,65535,4294967295,1439,449,65535,4294967295,1440,264,65535,4294967295,1441,264,65535,4294967295,276,78,65535,200,1442,265,65535,4294967295,1443,265,333,4294967295,1444,450,65535,4294967295,1445,451,65535,4294967295,1446,452,65535,4294967295,1447,148,65535,4294967295,1448,453,65535,4294967295,1449,266,65535,4294967295,1450,266,65535,4294967295,1451,266,142,4294967295,551,169,65535,201,1452,267,65535,4294967295,1453,267,333,4294967295,1454,454,65535,4294967295,840,268,65535,4294967295,1455,268,65535,4294967295,1456,268,142,4294967295,1457,455,65535,4294967295,557,149,65535,4294967295,1458,149,65535,4294967295,1459,44,65535,4294967295,1460,456,65535,4294967295,1461,269,65535,4294967295,1462,269,65535,4294967295,1463,269,142,4294967295,1464,457,65535,4294967295,1465,458,65535,202,1466,270,65535,4294967295,1467,459,65535,4294967295,1468,460,65535,4294967295,1469,270,142,4294967295,1470,461,65535,4294967295,1466,270,65535,203,1471,79,65535,4294967295,116,28,65535,4294967295,1472,291,65535,4294967295,1473,271,1429,4294967295,1474,80,65535,4294967295,1475,81,65535,4294967295,1476,462,65535,4294967295,1477,279,65535,4294967295,1478,150,65535,4294967295,1479,370,65535,4294967295,1480,272,65535,4294967295,1481,272,65535,4294967295,1482,273,65535,4294967295,1483,273,65535,4294967295,371,110,65535,204,1484,274,65535,4294967295,1485,274,65535,4294967295,1486,463,65535,4294967295,1487,274,65535,4294967295,1488,464,464,4294967295,1489,465,65535,4294967295,1490,278,65535,205,1491,466,65535,4294967295,1492,275,65535,4294967295,1493,275,333,4294967295,1494,467,65535,4294967295,1495,468,65535,4294967295,860,276,65535,4294967295,1496,276,65535,4294967295,1497,469,333,4294967295,1498,470,65535,4294967295,1499,471,65535,4294967295,883,277,65535,4294967295,1500,277,65535,4294967295,883,277,65535,206,1501,278,65535,4294967295,1502,472,65535,4294967295,1501,278,65535,207,1503,82,65535,4294967295,1504,272,65535,4294967295,627,200,65535,208,1505,469,65535,4294967295,1506,473,65535,4294967295,1507,46,65535,4294967295,1508,83,65535,4294967295,1509,474,65535,4294967295,1510,357,65535,4294967295,1511,84,65535,4294967295,1512,475,65535,4294967295,1513,279,65535,4294967295,1514,476,65535,4294967295,1513,279,65535,4294967295,1515,279,65535,4294967295,1513,279,65535,209,1516,280,65535,4294967295,1517,477,507,4294967295,1518,478,65535,4294967295,876,281,65535,4294967295,1519,281,65535,4294967295,1520,479,507,4294967295,1521,480,65535,4294967295,493,155,65535,4294967295,1522,481,65535,4294967295,493,155,65535,4294967295,1523,155,65535,4294967295,1524,482,65535,4294967295,879,282,65535,4294967295,1525,282,65535,4294967295,1526,282,142,4294967295,1527,483,65535,4294967295,1528,283,65535,4294967295,1529,484,65535,4294967295,1530,283,65535,4294967295,1531,485,484,4294967295,1532,486,65535,4294967295,1533,85,65535,210,1534,85,65535,4294967295,1535,284,65535,4294967295,1536,487,65535,4294967295,1537,466,65535,4294967295,1538,284,124,4294967295,1539,488,65535,4294967295,1535,284,65535,211,1540,486,65535,4294967295,1541,156,65535,4294967295,495,156,65535,4294967295,1542,156,65535,4294967295,495,156,65535,212,1543,285,65535,4294967295,1544,285,142,4294967295,119,29,65535,4294967295,900,288,65535,4294967295,1545,286,65535,4294967295,1546,214,65535,4294967295,1547,489,65535,4294967295,1548,286,65535,4294967295,1549,157,249,4294967295,1550,490,65535,4294967295,1551,7,65535,213,1552,90,65535,4294967295,1553,86,65535,4294967295,1554,86,65535,4294967295,1555,86,65535,4294967295,1556,288,65535,4294967295,1557,491,65535,4294967295,1558,287,65535,4294967295,1559,287,364,4294967295,1560,492,65535,4294967295,138,30,65535,214,1561,30,65535,4294967295,138,30,65535,4294967295,1562,288,65535,4294967295,1563,493,65535,4294967295,1564,288,65535,4294967295,507,157,65535,4294967295,1565,494,65535,4294967295,1566,288,65535,4294967295,1567,288,3260,4294967295,1568,495,65535,4294967295,1569,496,65535,4294967295,1570,289,1539,4294967295,1571,318,65535,4294967295,1572,497,65535,4294967295,1573,157,65535,4294967295,1574,157,364,4294967295,1575,157,65535,4294967295,1576,290,3287,4294967295,1577,498,65535,4294967295,1578,291,65535,4294967295,1579,499,65535,4294967295,1580,500,65535,4294967295,1581,291,65535,4294967295,1582,501,610,4294967295,1583,8,65535,215,1584,158,65535,4294967295,1585,158,65535,4294967295,1586,158,364,4294967295,1587,158,65535,4294967295,1588,501,65535,4294967295,1589,47,65535,4294967295,1590,47,65535,4294967295,1591,502,65535,4294967295,1592,159,65535,4294967295,1593,503,65535,4294967295,1594,159,65535,4294967295,1595,159,364,4294967295,1596,159,65535,4294967295,1597,504,65535,4294967295,1598,505,65535,4294967295,927,292,65535,4294967295,1599,506,65535,4294967295,1600,292,364,4294967295,1601,507,65535,4294967295,916,293,65535,4294967295,1602,201,65535,4294967295,1603,508,65535,4294967295,1604,293,65535,4294967295,1605,293,364,4294967295,1606,509,65535,4294967295,513,50,65535,4294967295,1607,87,65535,4294967295,1608,87,65535,4294967295,1609,510,65535,4294967295,1610,160,65535,4294967295,1611,160,364,4294967295,1612,160,65535,4294967295,1613,511,65535,4294967295,1614,294,65535,4294967295,1615,294,65535,4294967295,1616,294,629,4294967295,1617,512,65535,4294967295,385,63,65535,4294967295,1618,513,65535,4294967295,1619,161,364,4294967295,1620,161,65535,4294967295,1621,295,65535,4294967295,1622,295,3398,4294967295,1623,292,65535,4294967295,1624,296,65535,4294967295,1625,296,65535,4294967295,1626,514,65535,4294967295,1624,296,65535,4294967295,1627,296,65535,4294967295,1628,136,249,4294967295,1629,515,65535,4294967295,1630,516,65535,4294967295,929,297,65535,4294967295,1631,297,65535,4294967295,1632,517,610,4294967295,1633,518,65535,4294967295,522,162,65535,4294967295,1634,296,65535,4294967295,1635,162,364,4294967295,1636,162,65535,4294967295,1637,519,65535,4294967295,932,298,65535,4294967295,1638,298,65535,4294967295,1639,520,629,4294967295,1640,88,65535,4294967295,1641,88,65535,4294967295,1642,299,65535,4294967295,1643,299,1987,4294967295,1644,521,65535,4294967295,1645,163,364,4294967295,1646,163,65535,4294967295,1647,31,65535,4294967295,198,31,65535,4294967295,1648,164,65535,4294967295,1649,164,364,4294967295,1650,164,65535,4294967295,1651,522,65535,4294967295,1652,300,65535,4294967295,1653,300,629,4294967295,1654,523,65535,4294967295,1655,48,65535,4294967295,1656,48,65535,4294967295,1657,165,65535,4294967295,1658,165,364,4294967295,1659,165,65535,4294967295,1660,271,65535,4294967295,1661,524,65535,4294967295,1662,301,65535,4294967295,1663,525,1987,4294967295,1664,526,65535,4294967295,1665,8,65535,216,1666,89,65535,4294967295,1667,89,65535,4294967295,1668,302,3398,4294967295,1669,527,65535,4294967295,1670,528,65535,4294967295,1671,529,65535,4294967295,1672,303,65535,4294967295,1673,303,65535,4294967295,1674,303,364,4294967295,1675,303,65535,4294967295,1676,48,629,4294967295,1677,530,65535,4294967295,1678,531,65535,4294967295,1679,532,65535,4294967295,1680,304,65535,4294967295,1681,304,65535,4294967295,1682,304,364,4294967295,1683,533,65535,4294967295,1684,305,65535,4294967295,1685,534,65535,4294967295,1686,535,65535,4294967295,1687,536,65535,4294967295,1688,305,364,4294967295,1689,537,65535,4294967295,536,49,65535,4294967295,1690,90,65535,4294967295,1691,90,65535,4294967295,1692,530,65535,4294967295,1693,49,65535,4294967295,1694,49,65535,4294967295,889,157,65535,4294967295,137,16,65535,4294967295,1695,49,65535,4294967295,1696,531,65535,4294967295,1697,538,65535,4294967295,1698,167,65535,4294967295,1699,539,65535,4294967295,1700,168,65535,4294967295,1701,540,65535,4294967295,1702,541,65535,4294967295,986,306,65535,4294967295,1703,542,65535,4294967295,1704,306,65535,4294967295,1465,458,65535,4294967295,972,307,65535,4294967295,1705,543,65535,4294967295,1706,544,65535,4294967295,1707,307,65535,4294967295,972,307,65535,4294967295,1446,452,65535,4294967295,972,307,65535,217,1708,451,65535,4294967295,1709,169,65535,4294967295,1710,534,65535,4294967295,1711,308,65535,4294967295,1712,308,464,4294967295,1713,545,65535,4294967295,1714,546,65535,4294967295,976,171,65535,4294967295,1715,171,65535,4294967295,1716,547,65535,4294967295,1717,309,65535,4294967295,1718,309,484,4294967295,1719,310,65535,4294967295,1720,310,65535,4294967295,1721,310,65535,4294967295,1722,310,490,4294967295,1723,548,65535,4294967295,1724,549,65535,4294967295,555,172,65535,4294967295,1725,172,65535,4294967295,1726,311,65535,4294967295,1727,311,507,4294967295,1728,306,65535,4294967295,1729,312,65535,4294967295,1730,312,65535,4294967295,1731,550,65535,4294967295,1729,312,65535,4294967295,1732,312,65535,4294967295,1733,312,124,4294967295,1734,551,65535,4294967295,1735,552,65535,4294967295,988,313,65535,4294967295,1736,313,65535,4294967295,1737,313,126,4294967295,1738,553,65535,4294967295,556,173,65535,4294967295,1739,554,65535,4294967295,990,314,65535,4294967295,1740,314,65535,4294967295,1741,314,142,4294967295,1742,87,65535,4294967295,1743,93,65535,4294967295,1744,93,65535,4294967295,1745,93,65535,4294967295,1746,502,65535,4294967295,1747,315,65535,4294967295,1748,174,65535,4294967295,1749,555,65535,4294967295,1750,315,65535,4294967295,1751,315,65535,4294967295,1752,318,249,4294967295,1753,556,65535,4294967295,1754,53,65535,218,1755,557,65535,4294967295,1756,316,65535,4294967295,1757,558,1429,4294967295,1758,559,65535,4294967295,1759,174,65535,4294967295,1760,174,364,4294967295,1761,174,65535,4294967295,1762,317,65535,4294967295,1763,560,1452,4294967295,1764,561,65535,4294967295,1765,502,65535,4294967295,1766,50,65535,4294967295,1767,50,65535,4294967295,1768,94,65535,4294967295,1769,562,65535,4294967295,1770,563,65535,4294967295,1771,326,65535,4294967295,1772,318,65535,4294967295,1773,318,65535,4294967295,1774,318,249,4294967295,1775,564,65535,4294967295,1046,184,65535,219,1776,337,65535,4294967295,1777,94,65535,4294967295,1778,565,65535,4294967295,1779,319,65535,4294967295,1780,319,65535,4294967295,1781,566,65535,4294967295,1782,320,65535,4294967295,1783,320,65535,4294967295,1784,567,992,4294967295,1785,568,65535,4294967295,1786,53,65535,220,1787,569,65535,4294967295,1788,570,65535,4294967295,1011,321,65535,4294967295,1789,321,65535,4294967295,1790,430,464,4294967295,1791,176,65535,4294967295,1792,322,65535,4294967295,1793,177,65535,4294967295,1794,328,65535,4294967295,1795,322,65535,4294967295,1796,322,65535,4294967295,1797,322,124,4294967295,1798,571,65535,4294967295,146,19,65535,221,1799,51,65535,4294967295,1800,177,65535,4294967295,1801,323,65535,4294967295,1802,323,484,4294967295,1803,51,65535,4294967295,1804,572,65535,4294967295,1021,324,65535,4294967295,1805,324,65535,4294967295,1806,573,484,4294967295,1807,573,65535,4294967295,1808,178,65535,4294967295,1809,325,65535,4294967295,1810,426,853,4294967295,1811,574,65535,4294967295,1141,363,65535,4294967295,1812,251,65535,4294967295,1813,575,65535,4294967295,1814,326,65535,4294967295,1815,576,1539,4294967295,1816,577,65535,4294967295,1817,578,65535,4294967295,1028,327,65535,4294967295,1818,327,65535,4294967295,1819,421,490,4294967295,1820,579,65535,4294967295,1821,421,65535,4294967295,1822,180,65535,4294967295,1823,316,65535,4294967295,1824,343,65535,4294967295,1825,98,65535,4294967295,1826,181,65535,4294967295,1827,328,65535,4294967295,1828,328,490,4294967295,1829,329,65535,4294967295,1830,329,65535,4294967295,1831,329,126,4294967295,103,20,65535,222,1832,52,65535,4294967295,1833,181,65535,4294967295,1834,52,65535,4294967295,1041,330,65535,4294967295,1835,330,65535,4294967295,1836,435,507,4294967295,1837,182,65535,4294967295,668,210,65535,4294967295,1838,254,65535,4294967295,1839,247,65535,4294967295,1840,331,65535,4294967295,1841,331,65535,4294967295,1842,331,364,4294967295,1843,184,65535,4294967295,1844,580,65535,4294967295,1845,184,65535,4294967295,1846,184,364,4294967295,1847,184,65535,4294967295,1848,185,65535,4294967295,569,94,65535,4294967295,1849,482,65535,4294967295,1850,185,65535,4294967295,1851,581,65535,4294967295,1852,53,65535,4294967295,1853,186,65535,4294967295,338,98,65535,4294967295,1854,582,65535,4294967295,1855,186,65535,4294967295,1856,54,65535,4294967295,1857,332,65535,4294967295,1858,583,65535,4294967295,1859,584,65535,4294967295,1860,332,65535,4294967295,1857,332,65535,4294967
_(report truncated; full output in workflow logs)_ |
Fixes #109
Summary
Root cause
The divergence was not an ATN prediction difference. The Go target's
CSharpLexerBase.NextTokenconsumes directive lines, evaluates preprocessor conditions, and skips inactive source before normal lexing resumes. The Rust benchmark generated the grammar without an equivalent lifecycle extension, so inactive Mono source remained in the token stream and produced a larger CST.The Rust support now implements that state machine through generated lifecycle hooks. Inactive sections are consumed directly from the character stream, including nested conditionals, so malformed inactive source is never tokenized as C#.
Grammar-agnostic boundary
Generic runtime/codegen contains no C# grammar, rule, helper, or file names. It only exposes lifecycle callbacks from grammar metadata, emits structurally numbered channel/mode constants, and supports generic
token_index_adjacentand context-child-text predicate lowerings. C# helper mappings and state live inpatterns/csharp.tomlandtools/parse-bench/rust-support/csharp_lexer_base.rs.Validation
cargo test --locked --all-targets --all-featurescargo clippy --locked --all-targets --all-features -- -D warningspython3 -m unittest tools/parse-bench/test_run.py(17 passed)tools/grammar-frontend/update-stage0.sh --check(Stage 1/Stage 2 byte-identical; corpus checks pass)shasum -a 256 -c third_party/antlr-v4-grammar/self-hosted.sha256Summary by CodeRabbit
New Features
Documentation
Tests