SOURCE_FILE@[0; 555) FN_DEF@[0; 554) FN_KW@[0; 2) "fn" WHITESPACE@[2; 3) " " NAME@[3; 7) IDENT@[3; 7) "main" PARAM_LIST@[7; 9) L_PAREN@[7; 8) "(" R_PAREN@[8; 9) ")" WHITESPACE@[9; 10) " " BLOCK_EXPR@[10; 554) BLOCK@[10; 554) L_CURLY@[10; 11) "{" WHITESPACE@[11; 16) "\n " LET_STMT@[16; 28) LET_KW@[16; 19) "let" WHITESPACE@[19; 20) " " DOT_DOT_PAT@[20; 22) DOTDOT@[20; 22) ".." WHITESPACE@[22; 23) " " EQ@[23; 24) "=" WHITESPACE@[24; 25) " " TUPLE_EXPR@[25; 27) L_PAREN@[25; 26) "(" R_PAREN@[26; 27) ")" SEMI@[27; 28) ";" WHITESPACE@[28; 33) "\n " COMMENT@[33; 35) "//" WHITESPACE@[35; 40) "\n " COMMENT@[40; 49) "// Tuples" WHITESPACE@[49; 54) "\n " COMMENT@[54; 56) "//" WHITESPACE@[56; 61) "\n " LET_STMT@[61; 78) LET_KW@[61; 64) "let" WHITESPACE@[64; 65) " " TUPLE_PAT@[65; 72) L_PAREN@[65; 66) "(" BIND_PAT@[66; 67) NAME@[66; 67) IDENT@[66; 67) "a" COMMA@[67; 68) "," WHITESPACE@[68; 69) " " DOT_DOT_PAT@[69; 71) DOTDOT@[69; 71) ".." R_PAREN@[71; 72) ")" WHITESPACE@[72; 73) " " EQ@[73; 74) "=" WHITESPACE@[74; 75) " " TUPLE_EXPR@[75; 77) L_PAREN@[75; 76) "(" R_PAREN@[76; 77) ")" SEMI@[77; 78) ";" WHITESPACE@[78; 83) "\n " LET_STMT@[83; 101) LET_KW@[83; 86) "let" WHITESPACE@[86; 87) " " TUPLE_PAT@[87; 95) L_PAREN@[87; 88) "(" BIND_PAT@[88; 89) NAME@[88; 89) IDENT@[88; 89) "a" COMMA@[89; 90) "," WHITESPACE@[90; 91) " " DOT_DOT_PAT@[91; 93) DOTDOT@[91; 93) ".." COMMA@[93; 94) "," R_PAREN@[94; 95) ")" WHITESPACE@[95; 96) " " EQ@[96; 97) "=" WHITESPACE@[97; 98) " " TUPLE_EXPR@[98; 100) L_PAREN@[98; 99) "(" R_PAREN@[99; 100) ")" SEMI@[100; 101) ";" WHITESPACE@[101; 106) "\n " LET_STMT@[106; 128) LET_KW@[106; 109) "let" WHITESPACE@[109; 110) " " TUPLE_STRUCT_PAT@[110; 122) PATH@[110; 115) PATH_SEGMENT@[110; 115) NAME_REF@[110; 115) IDENT@[110; 115) "Tuple" L_PAREN@[115; 116) "(" BIND_PAT@[116; 117) NAME@[116; 117) IDENT@[116; 117) "a" COMMA@[117; 118) "," WHITESPACE@[118; 119) " " DOT_DOT_PAT@[119; 121) DOTDOT@[119; 121) ".." R_PAREN@[121; 122) ")" WHITESPACE@[122; 123) " " EQ@[123; 124) "=" WHITESPACE@[124; 125) " " TUPLE_EXPR@[125; 127) L_PAREN@[125; 126) "(" R_PAREN@[126; 127) ")" SEMI@[127; 128) ";" WHITESPACE@[128; 133) "\n " LET_STMT@[133; 156) LET_KW@[133; 136) "let" WHITESPACE@[136; 137) " " TUPLE_STRUCT_PAT@[137; 150) PATH@[137; 142) PATH_SEGMENT@[137; 142) NAME_REF@[137; 142) IDENT@[137; 142) "Tuple" L_PAREN@[142; 143) "(" BIND_PAT@[143; 144) NAME@[143; 144) IDENT@[143; 144) "a" COMMA@[144; 145) "," WHITESPACE@[145; 146) " " DOT_DOT_PAT@[146; 148) DOTDOT@[146; 148) ".." COMMA@[148; 149) "," R_PAREN@[149; 150) ")" WHITESPACE@[150; 151) " " EQ@[151; 152) "=" WHITESPACE@[152; 153) " " TUPLE_EXPR@[153; 155) L_PAREN@[153; 154) "(" R_PAREN@[154; 155) ")" SEMI@[155; 156) ";" WHITESPACE@[156; 161) "\n " LET_STMT@[161; 179) LET_KW@[161; 164) "let" WHITESPACE@[164; 165) " " TUPLE_PAT@[165; 173) L_PAREN@[165; 166) "(" DOT_DOT_PAT@[166; 168) DOTDOT@[166; 168) ".." COMMA@[168; 169) "," WHITESPACE@[169; 170) " " DOT_DOT_PAT@[170; 172) DOTDOT@[170; 172) ".." R_PAREN@[172; 173) ")" WHITESPACE@[173; 174) " " EQ@[174; 175) "=" WHITESPACE@[175; 176) " " TUPLE_EXPR@[176; 178) L_PAREN@[176; 177) "(" R_PAREN@[177; 178) ")" SEMI@[178; 179) ";" WHITESPACE@[179; 184) "\n " LET_STMT@[184; 207) LET_KW@[184; 187) "let" WHITESPACE@[187; 188) " " TUPLE_STRUCT_PAT@[188; 201) PATH@[188; 193) PATH_SEGMENT@[188; 193) NAME_REF@[188; 193) IDENT@[188; 193) "Tuple" L_PAREN@[193; 194) "(" DOT_DOT_PAT@[194; 196) DOTDOT@[194; 196) ".." COMMA@[196; 197) "," WHITESPACE@[197; 198) " " DOT_DOT_PAT@[198; 200) DOTDOT@[198; 200) ".." R_PAREN@[200; 201) ")" WHITESPACE@[201; 202) " " EQ@[202; 203) "=" WHITESPACE@[203; 204) " " TUPLE_EXPR@[204; 206) L_PAREN@[204; 205) "(" R_PAREN@[205; 206) ")" SEMI@[206; 207) ";" WHITESPACE@[207; 212) "\n " LET_STMT@[212; 233) LET_KW@[212; 215) "let" WHITESPACE@[215; 216) " " TUPLE_PAT@[216; 227) L_PAREN@[216; 217) "(" DOT_DOT_PAT@[217; 219) DOTDOT@[217; 219) ".." COMMA@[219; 220) "," WHITESPACE@[220; 221) " " BIND_PAT@[221; 222) NAME@[221; 222) IDENT@[221; 222) "a" COMMA@[222; 223) "," WHITESPACE@[223; 224) " " DOT_DOT_PAT@[224; 226) DOTDOT@[224; 226) ".." R_PAREN@[226; 227) ")" WHITESPACE@[227; 228) " " EQ@[228; 229) "=" WHITESPACE@[229; 230) " " TUPLE_EXPR@[230; 232) L_PAREN@[230; 231) "(" R_PAREN@[231; 232) ")" SEMI@[232; 233) ";" WHITESPACE@[233; 238) "\n " LET_STMT@[238; 264) LET_KW@[238; 241) "let" WHITESPACE@[241; 242) " " TUPLE_STRUCT_PAT@[242; 258) PATH@[242; 247) PATH_SEGMENT@[242; 247) NAME_REF@[242; 247) IDENT@[242; 247) "Tuple" L_PAREN@[247; 248) "(" DOT_DOT_PAT@[248; 250) DOTDOT@[248; 250) ".." COMMA@[250; 251) "," WHITESPACE@[251; 252) " " BIND_PAT@[252; 253) NAME@[252; 253) IDENT@[252; 253) "a" COMMA@[253; 254) "," WHITESPACE@[254; 255) " " DOT_DOT_PAT@[255; 257) DOTDOT@[255; 257) ".." R_PAREN@[257; 258) ")" WHITESPACE@[258; 259) " " EQ@[259; 260) "=" WHITESPACE@[260; 261) " " TUPLE_EXPR@[261; 263) L_PAREN@[261; 262) "(" R_PAREN@[262; 263) ")" SEMI@[263; 264) ";" WHITESPACE@[264; 269) "\n " COMMENT@[269; 271) "//" WHITESPACE@[271; 276) "\n " COMMENT@[276; 285) "// Slices" WHITESPACE@[285; 290) "\n " COMMENT@[290; 292) "//" WHITESPACE@[292; 297) "\n " LET_STMT@[297; 311) LET_KW@[297; 300) "let" WHITESPACE@[300; 301) " " SLICE_PAT@[301; 305) L_BRACK@[301; 302) "[" DOT_DOT_PAT@[302; 304) DOTDOT@[302; 304) ".." R_BRACK@[304; 305) "]" WHITESPACE@[305; 306) " " EQ@[306; 307) "=" WHITESPACE@[307; 308) " " TUPLE_EXPR@[308; 310) L_PAREN@[308; 309) "(" R_PAREN@[309; 310) ")" SEMI@[310; 311) ";" WHITESPACE@[311; 316) "\n " LET_STMT@[316; 336) LET_KW@[316; 319) "let" WHITESPACE@[319; 320) " " SLICE_PAT@[320; 330) L_BRACK@[320; 321) "[" BIND_PAT@[321; 325) NAME@[321; 325) IDENT@[321; 325) "head" COMMA@[325; 326) "," WHITESPACE@[326; 327) " " DOT_DOT_PAT@[327; 329) DOTDOT@[327; 329) ".." R_BRACK@[329; 330) "]" WHITESPACE@[330; 331) " " EQ@[331; 332) "=" WHITESPACE@[332; 333) " " TUPLE_EXPR@[333; 335) L_PAREN@[333; 334) "(" R_PAREN@[334; 335) ")" SEMI@[335; 336) ";" WHITESPACE@[336; 341) "\n " LET_STMT@[341; 368) LET_KW@[341; 344) "let" WHITESPACE@[344; 345) " " SLICE_PAT@[345; 362) L_BRACK@[345; 346) "[" BIND_PAT@[346; 350) NAME@[346; 350) IDENT@[346; 350) "head" COMMA@[350; 351) "," WHITESPACE@[351; 352) " " BIND_PAT@[352; 361) NAME@[352; 356) IDENT@[352; 356) "tail" WHITESPACE@[356; 357) " " AT@[357; 358) "@" WHITESPACE@[358; 359) " " DOT_DOT_PAT@[359; 361) DOTDOT@[359; 361) ".." R_BRACK@[361; 362) "]" WHITESPACE@[362; 363) " " EQ@[363; 364) "=" WHITESPACE@[364; 365) " " TUPLE_EXPR@[365; 367) L_PAREN@[365; 366) "(" R_PAREN@[366; 367) ")" SEMI@[367; 368) ";" WHITESPACE@[368; 373) "\n " LET_STMT@[373; 399) LET_KW@[373; 376) "let" WHITESPACE@[376; 377) " " SLICE_PAT@[377; 393) L_BRACK@[377; 378) "[" BIND_PAT@[378; 382) NAME@[378; 382) IDENT@[378; 382) "head" COMMA@[382; 383) "," WHITESPACE@[383; 384) " " DOT_DOT_PAT@[384; 386) DOTDOT@[384; 386) ".." COMMA@[386; 387) "," WHITESPACE@[387; 388) " " BIND_PAT@[388; 392) NAME@[388; 392) IDENT@[388; 392) "cons" R_BRACK@[392; 393) "]" WHITESPACE@[393; 394) " " EQ@[394; 395) "=" WHITESPACE@[395; 396) " " TUPLE_EXPR@[396; 398) L_PAREN@[396; 397) "(" R_PAREN@[397; 398) ")" SEMI@[398; 399) ";" WHITESPACE@[399; 404) "\n " LET_STMT@[404; 436) LET_KW@[404; 407) "let" WHITESPACE@[407; 408) " " SLICE_PAT@[408; 430) L_BRACK@[408; 409) "[" BIND_PAT@[409; 413) NAME@[409; 413) IDENT@[409; 413) "head" COMMA@[413; 414) "," WHITESPACE@[414; 415) " " BIND_PAT@[415; 423) NAME@[415; 418) IDENT@[415; 418) "mid" WHITESPACE@[418; 419) " " AT@[419; 420) "@" WHITESPACE@[420; 421) " " DOT_DOT_PAT@[421; 423) DOTDOT@[421; 423) ".." COMMA@[423; 424) "," WHITESPACE@[424; 425) " " BIND_PAT@[425; 429) NAME@[425; 429) IDENT@[425; 429) "cons" R_BRACK@[429; 430) "]" WHITESPACE@[430; 431) " " EQ@[431; 432) "=" WHITESPACE@[432; 433) " " TUPLE_EXPR@[433; 435) L_PAREN@[433; 434) "(" R_PAREN@[434; 435) ")" SEMI@[435; 436) ";" WHITESPACE@[436; 441) "\n " LET_STMT@[441; 471) LET_KW@[441; 444) "let" WHITESPACE@[444; 445) " " SLICE_PAT@[445; 465) L_BRACK@[445; 446) "[" BIND_PAT@[446; 450) NAME@[446; 450) IDENT@[446; 450) "head" COMMA@[450; 451) "," WHITESPACE@[451; 452) " " DOT_DOT_PAT@[452; 454) DOTDOT@[452; 454) ".." COMMA@[454; 455) "," WHITESPACE@[455; 456) " " DOT_DOT_PAT@[456; 458) DOTDOT@[456; 458) ".." COMMA@[458; 459) "," WHITESPACE@[459; 460) " " BIND_PAT@[460; 464) NAME@[460; 464) IDENT@[460; 464) "cons" R_BRACK@[464; 465) "]" WHITESPACE@[465; 466) " " EQ@[466; 467) "=" WHITESPACE@[467; 468) " " TUPLE_EXPR@[468; 470) L_PAREN@[468; 469) "(" R_PAREN@[469; 470) ")" SEMI@[470; 471) ";" WHITESPACE@[471; 476) "\n " LET_STMT@[476; 512) LET_KW@[476; 479) "let" WHITESPACE@[479; 480) " " SLICE_PAT@[480; 506) L_BRACK@[480; 481) "[" BIND_PAT@[481; 485) NAME@[481; 485) IDENT@[481; 485) "head" COMMA@[485; 486) "," WHITESPACE@[486; 487) " " DOT_DOT_PAT@[487; 489) DOTDOT@[487; 489) ".." COMMA@[489; 490) "," WHITESPACE@[490; 491) " " BIND_PAT@[491; 494) NAME@[491; 494) IDENT@[491; 494) "mid" COMMA@[494; 495) "," WHITESPACE@[495; 496) " " BIND_PAT@[496; 505) NAME@[496; 500) IDENT@[496; 500) "tail" WHITESPACE@[500; 501) " " AT@[501; 502) "@" WHITESPACE@[502; 503) " " DOT_DOT_PAT@[503; 505) DOTDOT@[503; 505) ".." R_BRACK@[505; 506) "]" WHITESPACE@[506; 507) " " EQ@[507; 508) "=" WHITESPACE@[508; 509) " " TUPLE_EXPR@[509; 511) L_PAREN@[509; 510) "(" R_PAREN@[510; 511) ")" SEMI@[511; 512) ";" WHITESPACE@[512; 517) "\n " LET_STMT@[517; 552) LET_KW@[517; 520) "let" WHITESPACE@[520; 521) " " SLICE_PAT@[521; 546) L_BRACK@[521; 522) "[" BIND_PAT@[522; 526) NAME@[522; 526) IDENT@[522; 526) "head" COMMA@[526; 527) "," WHITESPACE@[527; 528) " " DOT_DOT_PAT@[528; 530) DOTDOT@[528; 530) ".." COMMA@[530; 531) "," WHITESPACE@[531; 532) " " BIND_PAT@[532; 535) NAME@[532; 535) IDENT@[532; 535) "mid" COMMA@[535; 536) "," WHITESPACE@[536; 537) " " DOT_DOT_PAT@[537; 539) DOTDOT@[537; 539) ".." COMMA@[539; 540) "," WHITESPACE@[540; 541) " " BIND_PAT@[541; 545) NAME@[541; 545) IDENT@[541; 545) "cons" R_BRACK@[545; 546) "]" WHITESPACE@[546; 547) " " EQ@[547; 548) "=" WHITESPACE@[548; 549) " " TUPLE_EXPR@[549; 551) L_PAREN@[549; 550) "(" R_PAREN@[550; 551) ")" SEMI@[551; 552) ";" WHITESPACE@[552; 553) "\n" R_CURLY@[553; 554) "}" WHITESPACE@[554; 555) "\n"