aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorMelanie Thielker2008-09-26 16:11:53 +0000
committerMelanie Thielker2008-09-26 16:11:53 +0000
commitd8c470343e50b342024491219bd43678a24b4a03 (patch)
tree2ee37a53c9d976e4b88706a1634c5ffdb69b0aae /OpenSim
parentAfter the last commit, the old Common assembly was still being loaded. (diff)
downloadopensim-SC_OLD-d8c470343e50b342024491219bd43678a24b4a03.zip
opensim-SC_OLD-d8c470343e50b342024491219bd43678a24b4a03.tar.gz
opensim-SC_OLD-d8c470343e50b342024491219bd43678a24b4a03.tar.bz2
opensim-SC_OLD-d8c470343e50b342024491219bd43678a24b4a03.tar.xz
Compiler Connection! One world, one compiler!
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs946
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs509
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSCodeTransformer.cs183
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs116
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.lexer.cs18447
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.parser.cs11001
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs218
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs239
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs108
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs196
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs124
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs163
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs141
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs385
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs166
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs4575
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs159
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT514
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/UndefinedPredicateException.cs62
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Variable.cs222
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YP.cs2701
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YPCompiler.cs6382
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt12
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs39
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs4
25 files changed, 22 insertions, 47590 deletions
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs
deleted file mode 100644
index c4b0fd4..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs
+++ /dev/null
@@ -1,946 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.IO;
30using System.Collections.Generic;
31using Tools;
32
33namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
34{
35 public class CSCodeGenerator
36 {
37 private SYMBOL m_astRoot = null;
38 private Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> m_positionMap;
39 private int m_indentWidth = 4; // for indentation
40 private int m_braceCount; // for indentation
41 private int m_CSharpLine; // the current line of generated C# code
42 private int m_CSharpCol; // the current column of generated C# code
43
44 /// <summary>
45 /// Creates an 'empty' CSCodeGenerator instance.
46 /// </summary>
47 public CSCodeGenerator()
48 {
49 ResetCounters();
50 }
51
52 /// <summary>
53 /// Get the mapping between LSL and C# line/column number.
54 /// </summary>
55 /// <returns>Dictionary\<KeyValuePair\<int, int\>, KeyValuePair\<int, int\>\>.</returns>
56 public Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> PositionMap
57 {
58 get { return m_positionMap; }
59 }
60
61 /// <summary>
62 /// Get the mapping between LSL and C# line/column number.
63 /// </summary>
64 /// <returns>SYMBOL pointing to root of the abstract syntax tree.</returns>
65 public SYMBOL ASTRoot
66 {
67 get { return m_astRoot; }
68 }
69
70 /// <summary>
71 /// Resets various counters and metadata.
72 /// </summary>
73 private void ResetCounters()
74 {
75 m_braceCount = 0;
76 m_CSharpLine = 0;
77 m_CSharpCol = 1;
78 m_positionMap = new Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>>();
79 m_astRoot = null;
80 }
81
82 /// <summary>
83 /// Generate the code from the AST we have.
84 /// </summary>
85 /// <param name="script">The LSL source as a string.</param>
86 /// <returns>String containing the generated C# code.</returns>
87 public string Convert(string script)
88 {
89 ResetCounters();
90 Parser p = new LSLSyntax(new yyLSLSyntax(), new ErrorHandler(true));
91 // Obviously this needs to be in a try/except block.
92 LSL2CSCodeTransformer codeTransformer = new LSL2CSCodeTransformer(p.Parse(script));
93 m_astRoot = codeTransformer.Transform();
94
95 string retstr = String.Empty;
96
97 // standard preamble
98 //retstr = GenerateLine("using OpenSim.Region.ScriptEngine.Common;");
99 //retstr += GenerateLine("using System.Collections.Generic;");
100 //retstr += GenerateLine("");
101 //retstr += GenerateLine("namespace SecondLife");
102 //retstr += GenerateLine("{");
103 m_braceCount++;
104 //retstr += GenerateIndentedLine("public class Script : OpenSim.Region.ScriptEngine.Common");
105 //retstr += GenerateIndentedLine("{");
106 m_braceCount++;
107
108 // line number
109 m_CSharpLine += 3;
110
111 // here's the payload
112 retstr += GenerateLine();
113 foreach (SYMBOL s in m_astRoot.kids)
114 retstr += GenerateNode(s);
115
116 // close braces!
117 m_braceCount--;
118 //retstr += GenerateIndentedLine("}");
119 m_braceCount--;
120 //retstr += GenerateLine("}");
121
122 return retstr;
123 }
124
125 /// <summary>
126 /// Recursively called to generate each type of node. Will generate this
127 /// node, then all it's children.
128 /// </summary>
129 /// <param name="s">The current node to generate code for.</param>
130 /// <returns>String containing C# code for SYMBOL s.</returns>
131 private string GenerateNode(SYMBOL s)
132 {
133 string retstr = String.Empty;
134
135 // make sure to put type lower in the inheritance hierarchy first
136 // ie: since IdentArgument and ExpressionArgument inherit from
137 // Argument, put IdentArgument and ExpressionArgument before Argument
138 if (s is GlobalFunctionDefinition)
139 retstr += GenerateGlobalFunctionDefinition((GlobalFunctionDefinition) s);
140 else if (s is GlobalVariableDeclaration)
141 retstr += GenerateGlobalVariableDeclaration((GlobalVariableDeclaration) s);
142 else if (s is State)
143 retstr += GenerateState((State) s);
144 else if (s is CompoundStatement)
145 retstr += GenerateCompoundStatement((CompoundStatement) s);
146 else if (s is Declaration)
147 retstr += GenerateDeclaration((Declaration) s);
148 else if (s is Statement)
149 retstr += GenerateStatement((Statement) s);
150 else if (s is ReturnStatement)
151 retstr += GenerateReturnStatement((ReturnStatement) s);
152 else if (s is JumpLabel)
153 retstr += GenerateJumpLabel((JumpLabel) s);
154 else if (s is JumpStatement)
155 retstr += GenerateJumpStatement((JumpStatement) s);
156 else if (s is StateChange)
157 retstr += GenerateStateChange((StateChange) s);
158 else if (s is IfStatement)
159 retstr += GenerateIfStatement((IfStatement) s);
160 else if (s is WhileStatement)
161 retstr += GenerateWhileStatement((WhileStatement) s);
162 else if (s is DoWhileStatement)
163 retstr += GenerateDoWhileStatement((DoWhileStatement) s);
164 else if (s is ForLoop)
165 retstr += GenerateForLoop((ForLoop) s);
166 else if (s is ArgumentList)
167 retstr += GenerateArgumentList((ArgumentList) s);
168 else if (s is Assignment)
169 retstr += GenerateAssignment((Assignment) s);
170 else if (s is BinaryExpression)
171 retstr += GenerateBinaryExpression((BinaryExpression) s);
172 else if (s is ParenthesisExpression)
173 retstr += GenerateParenthesisExpression((ParenthesisExpression) s);
174 else if (s is UnaryExpression)
175 retstr += GenerateUnaryExpression((UnaryExpression) s);
176 else if (s is IncrementDecrementExpression)
177 retstr += GenerateIncrementDecrementExpression((IncrementDecrementExpression) s);
178 else if (s is TypecastExpression)
179 retstr += GenerateTypecastExpression((TypecastExpression) s);
180 else if (s is FunctionCall)
181 retstr += GenerateFunctionCall((FunctionCall) s);
182 else if (s is VectorConstant)
183 retstr += GenerateVectorConstant((VectorConstant) s);
184 else if (s is RotationConstant)
185 retstr += GenerateRotationConstant((RotationConstant) s);
186 else if (s is ListConstant)
187 retstr += GenerateListConstant((ListConstant) s);
188 else if (s is Constant)
189 retstr += GenerateConstant((Constant) s);
190 else if (s is IdentDotExpression)
191 retstr += Generate(((IdentDotExpression) s).Name + "." + ((IdentDotExpression) s).Member, s);
192 else if (s is IdentExpression)
193 retstr += Generate(((IdentExpression) s).Name, s);
194 else if (s is IDENT)
195 retstr += Generate(((TOKEN) s).yytext, s);
196 else
197 {
198 foreach (SYMBOL kid in s.kids)
199 retstr += GenerateNode(kid);
200 }
201
202 return retstr;
203 }
204
205 /// <summary>
206 /// Generates the code for a GlobalFunctionDefinition node.
207 /// </summary>
208 /// <param name="gf">The GlobalFunctionDefinition node.</param>
209 /// <returns>String containing C# code for GlobalFunctionDefinition gf.</returns>
210 private string GenerateGlobalFunctionDefinition(GlobalFunctionDefinition gf)
211 {
212 string retstr = String.Empty;
213
214 // we need to separate the argument declaration list from other kids
215 List<SYMBOL> argumentDeclarationListKids = new List<SYMBOL>();
216 List<SYMBOL> remainingKids = new List<SYMBOL>();
217
218 foreach (SYMBOL kid in gf.kids)
219 if (kid is ArgumentDeclarationList)
220 argumentDeclarationListKids.Add(kid);
221 else
222 remainingKids.Add(kid);
223
224 retstr += GenerateIndented(String.Format("{0} {1}(", gf.ReturnType, gf.Name), gf);
225
226 // print the state arguments, if any
227 foreach (SYMBOL kid in argumentDeclarationListKids)
228 retstr += GenerateArgumentDeclarationList((ArgumentDeclarationList) kid);
229
230 retstr += GenerateLine(")");
231
232 foreach (SYMBOL kid in remainingKids)
233 retstr += GenerateNode(kid);
234
235 return retstr;
236 }
237
238 /// <summary>
239 /// Generates the code for a GlobalVariableDeclaration node.
240 /// </summary>
241 /// <param name="gv">The GlobalVariableDeclaration node.</param>
242 /// <returns>String containing C# code for GlobalVariableDeclaration gv.</returns>
243 private string GenerateGlobalVariableDeclaration(GlobalVariableDeclaration gv)
244 {
245 string retstr = String.Empty;
246
247 foreach (SYMBOL s in gv.kids)
248 {
249 retstr += Indent();
250 retstr += GenerateNode(s);
251 retstr += GenerateLine(";");
252 }
253
254 return retstr;
255 }
256
257 /// <summary>
258 /// Generates the code for a State node.
259 /// </summary>
260 /// <param name="s">The State node.</param>
261 /// <returns>String containing C# code for State s.</returns>
262 private string GenerateState(State s)
263 {
264 string retstr = String.Empty;
265
266 foreach (SYMBOL kid in s.kids)
267 if (kid is StateEvent)
268 retstr += GenerateStateEvent((StateEvent) kid, s.Name);
269
270 return retstr;
271 }
272
273 /// <summary>
274 /// Generates the code for a StateEvent node.
275 /// </summary>
276 /// <param name="se">The StateEvent node.</param>
277 /// <param name="parentStateName">The name of the parent state.</param>
278 /// <returns>String containing C# code for StateEvent se.</returns>
279 private string GenerateStateEvent(StateEvent se, string parentStateName)
280 {
281 string retstr = String.Empty;
282
283 // we need to separate the argument declaration list from other kids
284 List<SYMBOL> argumentDeclarationListKids = new List<SYMBOL>();
285 List<SYMBOL> remainingKids = new List<SYMBOL>();
286
287 foreach (SYMBOL kid in se.kids)
288 if (kid is ArgumentDeclarationList)
289 argumentDeclarationListKids.Add(kid);
290 else
291 remainingKids.Add(kid);
292
293 // "state" (function) declaration
294 retstr += GenerateIndented(String.Format("public void {0}_event_{1}(", parentStateName, se.Name), se);
295
296 // print the state arguments, if any
297 foreach (SYMBOL kid in argumentDeclarationListKids)
298 retstr += GenerateArgumentDeclarationList((ArgumentDeclarationList) kid);
299
300 retstr += GenerateLine(")");
301
302 foreach (SYMBOL kid in remainingKids)
303 retstr += GenerateNode(kid);
304
305 return retstr;
306 }
307
308 /// <summary>
309 /// Generates the code for an ArgumentDeclarationList node.
310 /// </summary>
311 /// <param name="adl">The ArgumentDeclarationList node.</param>
312 /// <returns>String containing C# code for ArgumentDeclarationList adl.</returns>
313 private string GenerateArgumentDeclarationList(ArgumentDeclarationList adl)
314 {
315 string retstr = String.Empty;
316
317 int comma = adl.kids.Count - 1; // tells us whether to print a comma
318
319 foreach (Declaration d in adl.kids)
320 {
321 retstr += Generate(String.Format("{0} {1}", d.Datatype, d.Id), d);
322 if (0 < comma--)
323 retstr += Generate(", ");
324 }
325
326 return retstr;
327 }
328
329 /// <summary>
330 /// Generates the code for an ArgumentList node.
331 /// </summary>
332 /// <param name="al">The ArgumentList node.</param>
333 /// <returns>String containing C# code for ArgumentList al.</returns>
334 private string GenerateArgumentList(ArgumentList al)
335 {
336 string retstr = String.Empty;
337
338 int comma = al.kids.Count - 1; // tells us whether to print a comma
339
340 foreach (SYMBOL s in al.kids)
341 {
342 retstr += GenerateNode(s);
343 if (0 < comma--)
344 retstr += Generate(", ");
345 }
346
347 return retstr;
348 }
349
350 /// <summary>
351 /// Generates the code for a CompoundStatement node.
352 /// </summary>
353 /// <param name="cs">The CompoundStatement node.</param>
354 /// <returns>String containing C# code for CompoundStatement cs.</returns>
355 private string GenerateCompoundStatement(CompoundStatement cs)
356 {
357 string retstr = String.Empty;
358
359 // opening brace
360 retstr += GenerateIndentedLine("{");
361 m_braceCount++;
362
363 foreach (SYMBOL kid in cs.kids)
364 retstr += GenerateNode(kid);
365
366 // closing brace
367 m_braceCount--;
368 retstr += GenerateIndentedLine("}");
369
370 return retstr;
371 }
372
373 /// <summary>
374 /// Generates the code for a Declaration node.
375 /// </summary>
376 /// <param name="d">The Declaration node.</param>
377 /// <returns>String containing C# code for Declaration d.</returns>
378 private string GenerateDeclaration(Declaration d)
379 {
380 return Generate(String.Format("{0} {1}", d.Datatype, d.Id), d);
381 }
382
383 /// <summary>
384 /// Generates the code for a Statement node.
385 /// </summary>
386 /// <param name="s">The Statement node.</param>
387 /// <returns>String containing C# code for Statement s.</returns>
388 private string GenerateStatement(Statement s)
389 {
390 string retstr = String.Empty;
391 bool printSemicolon = true;
392
393 retstr += Indent();
394
395 if (0 < s.kids.Count)
396 {
397 // Jump label prints its own colon, we don't need a semicolon.
398 printSemicolon = !(s.kids.Top is JumpLabel);
399
400 foreach (SYMBOL kid in s.kids)
401 retstr += GenerateNode(kid);
402 }
403
404 if (printSemicolon)
405 retstr += GenerateLine(";");
406
407 return retstr;
408 }
409
410 /// <summary>
411 /// Generates the code for an Assignment node.
412 /// </summary>
413 /// <param name="a">The Assignment node.</param>
414 /// <returns>String containing C# code for Assignment a.</returns>
415 private string GenerateAssignment(Assignment a)
416 {
417 string retstr = String.Empty;
418
419 retstr += GenerateNode((SYMBOL) a.kids.Pop());
420 retstr += Generate(String.Format(" {0} ", a.AssignmentType), a);
421 foreach (SYMBOL kid in a.kids)
422 retstr += GenerateNode(kid);
423
424 return retstr;
425 }
426
427 /// <summary>
428 /// Generates the code for a ReturnStatement node.
429 /// </summary>
430 /// <param name="rs">The ReturnStatement node.</param>
431 /// <returns>String containing C# code for ReturnStatement rs.</returns>
432 private string GenerateReturnStatement(ReturnStatement rs)
433 {
434 string retstr = String.Empty;
435
436 retstr += Generate("return ", rs);
437
438 foreach (SYMBOL kid in rs.kids)
439 retstr += GenerateNode(kid);
440
441 return retstr;
442 }
443
444 /// <summary>
445 /// Generates the code for a JumpLabel node.
446 /// </summary>
447 /// <param name="jl">The JumpLabel node.</param>
448 /// <returns>String containing C# code for JumpLabel jl.</returns>
449 private string GenerateJumpLabel(JumpLabel jl)
450 {
451 return Generate(String.Format("{0}:\n", jl.LabelName), jl);
452 }
453
454 /// <summary>
455 /// Generates the code for a JumpStatement node.
456 /// </summary>
457 /// <param name="js">The JumpStatement node.</param>
458 /// <returns>String containing C# code for JumpStatement js.</returns>
459 private string GenerateJumpStatement(JumpStatement js)
460 {
461 return Generate(String.Format("goto {0}", js.TargetName), js);
462 }
463
464 /// <summary>
465 /// Generates the code for an IfStatement node.
466 /// </summary>
467 /// <param name="ifs">The IfStatement node.</param>
468 /// <returns>String containing C# code for IfStatement ifs.</returns>
469 private string GenerateIfStatement(IfStatement ifs)
470 {
471 string retstr = String.Empty;
472
473 retstr += GenerateIndented("if (", ifs);
474 retstr += GenerateNode((SYMBOL) ifs.kids.Pop());
475 retstr += GenerateLine(")");
476
477 // CompoundStatement handles indentation itself but we need to do it
478 // otherwise.
479 bool indentHere = ifs.kids.Top is Statement;
480 if (indentHere) m_braceCount++;
481 retstr += GenerateNode((SYMBOL) ifs.kids.Pop());
482 if (indentHere) m_braceCount--;
483
484 if (0 < ifs.kids.Count) // do it again for an else
485 {
486 retstr += GenerateIndentedLine("else", ifs);
487
488 indentHere = ifs.kids.Top is Statement;
489 if (indentHere) m_braceCount++;
490 retstr += GenerateNode((SYMBOL) ifs.kids.Pop());
491 if (indentHere) m_braceCount--;
492 }
493
494 return retstr;
495 }
496
497 /// <summary>
498 /// Generates the code for a StateChange node.
499 /// </summary>
500 /// <param name="sc">The StateChange node.</param>
501 /// <returns>String containing C# code for StateChange sc.</returns>
502 private string GenerateStateChange(StateChange sc)
503 {
504 return Generate(String.Format("state(\"{0}\")", sc.NewState), sc);
505 }
506
507 /// <summary>
508 /// Generates the code for a WhileStatement node.
509 /// </summary>
510 /// <param name="ws">The WhileStatement node.</param>
511 /// <returns>String containing C# code for WhileStatement ws.</returns>
512 private string GenerateWhileStatement(WhileStatement ws)
513 {
514 string retstr = String.Empty;
515
516 retstr += GenerateIndented("while (", ws);
517 retstr += GenerateNode((SYMBOL) ws.kids.Pop());
518 retstr += GenerateLine(")");
519
520 // CompoundStatement handles indentation itself but we need to do it
521 // otherwise.
522 bool indentHere = ws.kids.Top is Statement;
523 if (indentHere) m_braceCount++;
524 retstr += GenerateNode((SYMBOL) ws.kids.Pop());
525 if (indentHere) m_braceCount--;
526
527 return retstr;
528 }
529
530 /// <summary>
531 /// Generates the code for a DoWhileStatement node.
532 /// </summary>
533 /// <param name="dws">The DoWhileStatement node.</param>
534 /// <returns>String containing C# code for DoWhileStatement dws.</returns>
535 private string GenerateDoWhileStatement(DoWhileStatement dws)
536 {
537 string retstr = String.Empty;
538
539 retstr += GenerateIndentedLine("do", dws);
540
541 // CompoundStatement handles indentation itself but we need to do it
542 // otherwise.
543 bool indentHere = dws.kids.Top is Statement;
544 if (indentHere) m_braceCount++;
545 retstr += GenerateNode((SYMBOL) dws.kids.Pop());
546 if (indentHere) m_braceCount--;
547
548 retstr += GenerateIndented("while (", dws);
549 retstr += GenerateNode((SYMBOL) dws.kids.Pop());
550 retstr += GenerateLine(");");
551
552 return retstr;
553 }
554
555 /// <summary>
556 /// Generates the code for a ForLoop node.
557 /// </summary>
558 /// <param name="fl">The ForLoop node.</param>
559 /// <returns>String containing C# code for ForLoop fl.</returns>
560 private string GenerateForLoop(ForLoop fl)
561 {
562 string retstr = String.Empty;
563
564 retstr += GenerateIndented("for (", fl);
565
566 // for ( x = 0 ; x < 10 ; x++ )
567 // ^^^^^^^
568 retstr += GenerateForLoopStatement((ForLoopStatement) fl.kids.Pop());
569 retstr += Generate("; ");
570 // for ( x = 0 ; x < 10 ; x++ )
571 // ^^^^^^^^
572 retstr += GenerateNode((SYMBOL) fl.kids.Pop());
573 retstr += Generate("; ");
574 // for ( x = 0 ; x < 10 ; x++ )
575 // ^^^^^
576 retstr += GenerateForLoopStatement((ForLoopStatement) fl.kids.Pop());
577 retstr += GenerateLine(")");
578
579 // CompoundStatement handles indentation itself but we need to do it
580 // otherwise.
581 bool indentHere = fl.kids.Top is Statement;
582 if (indentHere) m_braceCount++;
583 retstr += GenerateNode((SYMBOL) fl.kids.Pop());
584 if (indentHere) m_braceCount--;
585
586 return retstr;
587 }
588
589 /// <summary>
590 /// Generates the code for a ForLoopStatement node.
591 /// </summary>
592 /// <param name="fls">The ForLoopStatement node.</param>
593 /// <returns>String containing C# code for ForLoopStatement fls.</returns>
594 private string GenerateForLoopStatement(ForLoopStatement fls)
595 {
596 string retstr = String.Empty;
597
598 int comma = fls.kids.Count - 1; // tells us whether to print a comma
599
600 foreach (SYMBOL s in fls.kids)
601 {
602 retstr += GenerateNode(s);
603 if (0 < comma--)
604 retstr += Generate(", ");
605 }
606
607 return retstr;
608 }
609
610 /// <summary>
611 /// Generates the code for a BinaryExpression node.
612 /// </summary>
613 /// <param name="be">The BinaryExpression node.</param>
614 /// <returns>String containing C# code for BinaryExpression be.</returns>
615 private string GenerateBinaryExpression(BinaryExpression be)
616 {
617 string retstr = String.Empty;
618
619 retstr += GenerateNode((SYMBOL) be.kids.Pop());
620 retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol), be);
621 foreach (SYMBOL kid in be.kids)
622 retstr += GenerateNode(kid);
623
624 return retstr;
625 }
626
627 /// <summary>
628 /// Generates the code for a UnaryExpression node.
629 /// </summary>
630 /// <param name="ue">The UnaryExpression node.</param>
631 /// <returns>String containing C# code for UnaryExpression ue.</returns>
632 private string GenerateUnaryExpression(UnaryExpression ue)
633 {
634 string retstr = String.Empty;
635
636 retstr += Generate(ue.UnarySymbol, ue);
637 retstr += GenerateNode((SYMBOL) ue.kids.Pop());
638
639 return retstr;
640 }
641
642 /// <summary>
643 /// Generates the code for a ParenthesisExpression node.
644 /// </summary>
645 /// <param name="pe">The ParenthesisExpression node.</param>
646 /// <returns>String containing C# code for ParenthesisExpression pe.</returns>
647 private string GenerateParenthesisExpression(ParenthesisExpression pe)
648 {
649 string retstr = String.Empty;
650
651 retstr += Generate("(");
652 foreach (SYMBOL kid in pe.kids)
653 retstr += GenerateNode(kid);
654 retstr += Generate(")");
655
656 return retstr;
657 }
658
659 /// <summary>
660 /// Generates the code for a IncrementDecrementExpression node.
661 /// </summary>
662 /// <param name="ide">The IncrementDecrementExpression node.</param>
663 /// <returns>String containing C# code for IncrementDecrementExpression ide.</returns>
664 private string GenerateIncrementDecrementExpression(IncrementDecrementExpression ide)
665 {
666 string retstr = String.Empty;
667
668 if (0 < ide.kids.Count)
669 {
670 IdentDotExpression dot = (IdentDotExpression) ide.kids.Top;
671 retstr += Generate(String.Format("{0}", ide.PostOperation ? dot.Name + "." + dot.Member + ide.Operation : ide.Operation + dot.Name + "." + dot.Member), ide);
672 }
673 else
674 retstr += Generate(String.Format("{0}", ide.PostOperation ? ide.Name + ide.Operation : ide.Operation + ide.Name), ide);
675
676 return retstr;
677 }
678
679 /// <summary>
680 /// Generates the code for a TypecastExpression node.
681 /// </summary>
682 /// <param name="te">The TypecastExpression node.</param>
683 /// <returns>String containing C# code for TypecastExpression te.</returns>
684 private string GenerateTypecastExpression(TypecastExpression te)
685 {
686 string retstr = String.Empty;
687
688 // we wrap all typecasted statements in parentheses
689 retstr += Generate(String.Format("({0}) (", te.TypecastType), te);
690 retstr += GenerateNode((SYMBOL) te.kids.Pop());
691 retstr += Generate(")");
692
693 return retstr;
694 }
695
696 /// <summary>
697 /// Generates the code for a FunctionCall node.
698 /// </summary>
699 /// <param name="fc">The FunctionCall node.</param>
700 /// <returns>String containing C# code for FunctionCall fc.</returns>
701 private string GenerateFunctionCall(FunctionCall fc)
702 {
703 string retstr = String.Empty;
704
705 retstr += Generate(String.Format("{0}(", fc.Id), fc);
706
707 foreach (SYMBOL kid in fc.kids)
708 retstr += GenerateNode(kid);
709
710 retstr += Generate(")");
711
712 return retstr;
713 }
714
715 /// <summary>
716 /// Generates the code for a Constant node.
717 /// </summary>
718 /// <param name="c">The Constant node.</param>
719 /// <returns>String containing C# code for Constant c.</returns>
720 private string GenerateConstant(Constant c)
721 {
722 string retstr = String.Empty;
723
724 // Supprt LSL's weird acceptance of floats with no trailing digits
725 // after the period. Turn float x = 10.; into float x = 10.0;
726 if ("LSL_Types.LSLFloat" == c.Type)
727 {
728 int dotIndex = c.Value.IndexOf('.') + 1;
729 if (0 < dotIndex && (dotIndex == c.Value.Length || !Char.IsDigit(c.Value[dotIndex])))
730 c.Value = c.Value.Insert(dotIndex, "0");
731 c.Value = "new LSL_Types.LSLFloat("+c.Value+")";
732 }
733 else if ("LSL_Types.LSLInteger" == c.Type)
734 {
735 c.Value = "new LSL_Types.LSLInteger("+c.Value+")";
736 }
737 else if ("LSL_Types.LSLString" == c.Type)
738 {
739 c.Value = "new LSL_Types.LSLString(\""+c.Value+"\")";
740 }
741
742 retstr += Generate(c.Value, c);
743
744 return retstr;
745 }
746
747 /// <summary>
748 /// Generates the code for a VectorConstant node.
749 /// </summary>
750 /// <param name="vc">The VectorConstant node.</param>
751 /// <returns>String containing C# code for VectorConstant vc.</returns>
752 private string GenerateVectorConstant(VectorConstant vc)
753 {
754 string retstr = String.Empty;
755
756 retstr += Generate(String.Format("new {0}(", vc.Type), vc);
757 retstr += GenerateNode((SYMBOL) vc.kids.Pop());
758 retstr += Generate(", ");
759 retstr += GenerateNode((SYMBOL) vc.kids.Pop());
760 retstr += Generate(", ");
761 retstr += GenerateNode((SYMBOL) vc.kids.Pop());
762 retstr += Generate(")");
763
764 return retstr;
765 }
766
767 /// <summary>
768 /// Generates the code for a RotationConstant node.
769 /// </summary>
770 /// <param name="rc">The RotationConstant node.</param>
771 /// <returns>String containing C# code for RotationConstant rc.</returns>
772 private string GenerateRotationConstant(RotationConstant rc)
773 {
774 string retstr = String.Empty;
775
776 retstr += Generate(String.Format("new {0}(", rc.Type), rc);
777 retstr += GenerateNode((SYMBOL) rc.kids.Pop());
778 retstr += Generate(", ");
779 retstr += GenerateNode((SYMBOL) rc.kids.Pop());
780 retstr += Generate(", ");
781 retstr += GenerateNode((SYMBOL) rc.kids.Pop());
782 retstr += Generate(", ");
783 retstr += GenerateNode((SYMBOL) rc.kids.Pop());
784 retstr += Generate(")");
785
786 return retstr;
787 }
788
789 /// <summary>
790 /// Generates the code for a ListConstant node.
791 /// </summary>
792 /// <param name="lc">The ListConstant node.</param>
793 /// <returns>String containing C# code for ListConstant lc.</returns>
794 private string GenerateListConstant(ListConstant lc)
795 {
796 string retstr = String.Empty;
797
798 retstr += Generate(String.Format("new {0}(", lc.Type), lc);
799
800 foreach (SYMBOL kid in lc.kids)
801 retstr += GenerateNode(kid);
802
803 retstr += Generate(")");
804
805 return retstr;
806 }
807
808 /// <summary>
809 /// Prints a newline.
810 /// </summary>
811 /// <returns>A newline.</returns>
812 private string GenerateLine()
813 {
814 return GenerateLine("");
815 }
816
817 /// <summary>
818 /// Prints text, followed by a newline.
819 /// </summary>
820 /// <param name="s">String of text to print.</param>
821 /// <returns>String s followed by newline.</returns>
822 private string GenerateLine(string s)
823 {
824 return GenerateLine(s, null);
825 }
826
827 /// <summary>
828 /// Prints text, followed by a newline.
829 /// </summary>
830 /// <param name="s">String of text to print.</param>
831 /// <param name="sym">Symbol being generated to extract original line
832 /// number and column from.</param>
833 /// <returns>String s followed by newline.</returns>
834 private string GenerateLine(string s, SYMBOL sym)
835 {
836 string retstr = Generate(s, sym) + "\n";
837
838 m_CSharpLine++;
839 m_CSharpCol = 1;
840
841 return retstr;
842 }
843
844 /// <summary>
845 /// Prints text.
846 /// </summary>
847 /// <param name="s">String of text to print.</param>
848 /// <returns>String s.</returns>
849 private string Generate(string s)
850 {
851 return Generate(s, null);
852 }
853
854 /// <summary>
855 /// Prints text.
856 /// </summary>
857 /// <param name="s">String of text to print.</param>
858 /// <param name="sym">Symbol being generated to extract original line
859 /// number and column from.</param>
860 /// <returns>String s.</returns>
861 private string Generate(string s, SYMBOL sym)
862 {
863 if (null != sym)
864 m_positionMap.Add(new KeyValuePair<int, int>(m_CSharpLine, m_CSharpCol), new KeyValuePair<int, int>(sym.Line, sym.Position));
865
866 m_CSharpCol += s.Length;
867
868 return s;
869 }
870
871 /// <summary>
872 /// Prints text correctly indented, followed by a newline.
873 /// </summary>
874 /// <param name="s">String of text to print.</param>
875 /// <returns>Properly indented string s followed by newline.</returns>
876 private string GenerateIndentedLine(string s)
877 {
878 return GenerateIndentedLine(s, null);
879 }
880
881 /// <summary>
882 /// Prints text correctly indented, followed by a newline.
883 /// </summary>
884 /// <param name="s">String of text to print.</param>
885 /// <param name="sym">Symbol being generated to extract original line
886 /// number and column from.</param>
887 /// <returns>Properly indented string s followed by newline.</returns>
888 private string GenerateIndentedLine(string s, SYMBOL sym)
889 {
890 string retstr = GenerateIndented(s, sym) + "\n";
891
892 m_CSharpLine++;
893 m_CSharpCol = 1;
894
895 return retstr;
896 }
897
898 /// <summary>
899 /// Prints text correctly indented.
900 /// </summary>
901 /// <param name="s">String of text to print.</param>
902 /// <returns>Properly indented string s.</returns>
903 //private string GenerateIndented(string s)
904 //{
905 // return GenerateIndented(s, null);
906 //}
907 // THIS FUNCTION IS COMMENTED OUT TO SUPPRESS WARNINGS
908
909 /// <summary>
910 /// Prints text correctly indented.
911 /// </summary>
912 /// <param name="s">String of text to print.</param>
913 /// <param name="sym">Symbol being generated to extract original line
914 /// number and column from.</param>
915 /// <returns>Properly indented string s.</returns>
916 private string GenerateIndented(string s, SYMBOL sym)
917 {
918 string retstr = Indent() + s;
919
920 if (null != sym)
921 m_positionMap.Add(new KeyValuePair<int, int>(m_CSharpLine, m_CSharpCol), new KeyValuePair<int, int>(sym.Line, sym.Position));
922
923 m_CSharpCol += s.Length;
924
925 return retstr;
926 }
927
928 /// <summary>
929 /// Prints correct indentation.
930 /// </summary>
931 /// <returns>Indentation based on brace count.</returns>
932 private string Indent()
933 {
934 string retstr = String.Empty;
935
936 for (int i = 0; i < m_braceCount; i++)
937 for (int j = 0; j < m_indentWidth; j++)
938 {
939 retstr += " ";
940 m_CSharpCol++;
941 }
942
943 return retstr;
944 }
945 }
946}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
deleted file mode 100644
index 4adedc3..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
+++ /dev/null
@@ -1,509 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.CodeDom.Compiler;
30using System.Collections.Generic;
31using System.Globalization;
32using System.IO;
33using Microsoft.CSharp;
34using Microsoft.JScript;
35using Microsoft.VisualBasic;
36using OpenSim.Region.Environment.Interfaces;
37
38namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
39{
40 public class Compiler
41 {
42 private static readonly log4net.ILog m_log
43 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
44
45 // * Uses "LSL2Converter" to convert LSL to C# if necessary.
46 // * Compiles C#-code into an assembly
47 // * Returns assembly name ready for AppDomain load.
48 //
49 // Assembly is compiled using LSL_BaseClass as base. Look at debug C# code file created when LSL script is compiled for full details.
50 //
51
52 internal enum enumCompileType
53 {
54 lsl = 0,
55 cs = 1,
56 vb = 2,
57 js = 3,
58 yp = 4
59 }
60
61 /// <summary>
62 /// This contains number of lines WE use for header when compiling script. User will get error in line x-LinesToRemoveOnError when error occurs.
63 /// </summary>
64 public int LinesToRemoveOnError = 3;
65 private enumCompileType DefaultCompileLanguage;
66 private bool WriteScriptSourceToDebugFile;
67 private bool CompileWithDebugInformation;
68 // private bool CleanUpOldScriptsOnStartup;
69 private Dictionary<string, bool> AllowedCompilers = new Dictionary<string, bool>(StringComparer.CurrentCultureIgnoreCase);
70 private Dictionary<string, enumCompileType> LanguageMapping = new Dictionary<string, enumCompileType>(StringComparer.CurrentCultureIgnoreCase);
71
72 private string FilePrefix;
73 private string ScriptEnginesPath = "ScriptEngines";
74
75 private static CSCodeGenerator LSL_Converter = new CSCodeGenerator();
76 private static Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> m_positionMap; // mapping between LSL and C# line/column numbers
77 private static CSharpCodeProvider CScodeProvider = new CSharpCodeProvider();
78 private static VBCodeProvider VBcodeProvider = new VBCodeProvider();
79 private static JScriptCodeProvider JScodeProvider = new JScriptCodeProvider();
80 private static CSharpCodeProvider YPcodeProvider = new CSharpCodeProvider(); // YP is translated into CSharp
81 private static YP2CSConverter YP_Converter = new YP2CSConverter();
82
83 private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files
84 private static UInt64 scriptCompileCounter = 0; // And a counter
85
86 public ScriptEngine m_scriptEngine;
87 public Compiler(ScriptEngine scriptEngine)
88 {
89 m_scriptEngine = scriptEngine;
90 ReadConfig();
91 }
92 public bool in_startup = true;
93 public void ReadConfig()
94 {
95
96 // Get some config
97 WriteScriptSourceToDebugFile = m_scriptEngine.ScriptConfigSource.GetBoolean("WriteScriptSourceToDebugFile", true);
98 CompileWithDebugInformation = m_scriptEngine.ScriptConfigSource.GetBoolean("CompileWithDebugInformation", true);
99 // CleanUpOldScriptsOnStartup = m_scriptEngine.ScriptConfigSource.GetBoolean("CleanUpOldScriptsOnStartup", true);
100
101 // Get file prefix from scriptengine name and make it file system safe:
102 FilePrefix = m_scriptEngine.ScriptEngineName;
103 foreach (char c in Path.GetInvalidFileNameChars())
104 {
105 FilePrefix = FilePrefix.Replace(c, '_');
106 }
107
108 // First time we start? Delete old files
109 if (in_startup)
110 {
111 in_startup = false;
112 DeleteOldFiles();
113 }
114
115 // Map name and enum type of our supported languages
116 LanguageMapping.Add(enumCompileType.cs.ToString(), enumCompileType.cs);
117 LanguageMapping.Add(enumCompileType.vb.ToString(), enumCompileType.vb);
118 LanguageMapping.Add(enumCompileType.lsl.ToString(), enumCompileType.lsl);
119 LanguageMapping.Add(enumCompileType.js.ToString(), enumCompileType.js);
120 LanguageMapping.Add(enumCompileType.yp.ToString(), enumCompileType.yp);
121
122 // Allowed compilers
123 string allowComp = m_scriptEngine.ScriptConfigSource.GetString("AllowedCompilers", "lsl,cs,vb,js,yp");
124 AllowedCompilers.Clear();
125
126#if DEBUG
127 m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Allowed languages: " + allowComp);
128#endif
129
130
131 foreach (string strl in allowComp.Split(','))
132 {
133 string strlan = strl.Trim(" \t".ToCharArray()).ToLower();
134 if (!LanguageMapping.ContainsKey(strlan))
135 {
136 m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Config error. Compiler is unable to recognize language type \"" + strlan + "\" specified in \"AllowedCompilers\".");
137 }
138 else
139 {
140#if DEBUG
141 //m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Config OK. Compiler recognized language type \"" + strlan + "\" specified in \"AllowedCompilers\".");
142#endif
143 }
144 AllowedCompilers.Add(strlan, true);
145 }
146 if (AllowedCompilers.Count == 0)
147 m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Config error. Compiler could not recognize any language in \"AllowedCompilers\". Scripts will not be executed!");
148
149 // Default language
150 string defaultCompileLanguage = m_scriptEngine.ScriptConfigSource.GetString("DefaultCompileLanguage", "lsl").ToLower();
151
152 // Is this language recognized at all?
153 if (!LanguageMapping.ContainsKey(defaultCompileLanguage))
154 {
155 m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: " +
156 "Config error. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is not recognized as a valid language. Changing default to: \"lsl\".");
157 defaultCompileLanguage = "lsl";
158 }
159
160 // Is this language in allow-list?
161 if (!AllowedCompilers.ContainsKey(defaultCompileLanguage))
162 {
163 m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: " +
164 "Config error. Default language \"" + defaultCompileLanguage + "\"specified in \"DefaultCompileLanguage\" is not in list of \"AllowedCompilers\". Scripts may not be executed!");
165 }
166 else
167 {
168#if DEBUG
169// m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: " +
170// "Config OK. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is recognized as a valid language.");
171#endif
172 // LANGUAGE IS IN ALLOW-LIST
173 DefaultCompileLanguage = LanguageMapping[defaultCompileLanguage];
174 }
175
176 // We now have an allow-list, a mapping list, and a default language
177
178 }
179
180 /// <summary>
181 /// Delete old script files
182 /// </summary>
183 private void DeleteOldFiles()
184 {
185
186 // CREATE FOLDER IF IT DOESNT EXIST
187 if (!Directory.Exists(ScriptEnginesPath))
188 {
189 try
190 {
191 Directory.CreateDirectory(ScriptEnginesPath);
192 }
193 catch (Exception ex)
194 {
195 m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying to create ScriptEngine directory \"" + ScriptEnginesPath + "\": " + ex.ToString());
196 }
197 }
198
199 foreach (string file in Directory.GetFiles(ScriptEnginesPath))
200 {
201 //m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: FILE FOUND: " + file);
202
203 if (file.ToLower().StartsWith(FilePrefix + "_compiled_") ||
204 file.ToLower().StartsWith(FilePrefix + "_source_"))
205 {
206 try
207 {
208 File.Delete(file);
209 }
210 catch (Exception ex)
211 {
212 m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying delete old script file \"" + file + "\": " + ex.ToString());
213 }
214
215 }
216 }
217
218 }
219
220 /// <summary>
221 /// Converts script from LSL to CS and calls CompileFromCSText
222 /// </summary>
223 /// <param name="Script">LSL script</param>
224 /// <returns>Filename to .dll assembly</returns>
225 public string PerformScriptCompile(string Script)
226 {
227 enumCompileType l = DefaultCompileLanguage;
228
229
230 if (Script.StartsWith("//c#", true, CultureInfo.InvariantCulture))
231 l = enumCompileType.cs;
232 if (Script.StartsWith("//vb", true, CultureInfo.InvariantCulture))
233 {
234 l = enumCompileType.vb;
235 // We need to remove //vb, it won't compile with that
236
237 Script = Script.Substring(4, Script.Length - 4);
238 }
239 if (Script.StartsWith("//lsl", true, CultureInfo.InvariantCulture))
240 l = enumCompileType.lsl;
241
242 if (Script.StartsWith("//js", true, CultureInfo.InvariantCulture))
243 l = enumCompileType.js;
244
245 if (Script.StartsWith("//yp", true, CultureInfo.InvariantCulture))
246 l = enumCompileType.yp;
247
248 if (!AllowedCompilers.ContainsKey(l.ToString()))
249 {
250 // Not allowed to compile to this language!
251 string errtext = String.Empty;
252 errtext += "The compiler for language \"" + l.ToString() + "\" is not in list of allowed compilers. Script will not be executed!";
253 throw new Exception(errtext);
254 }
255
256 string compileScript = Script;
257
258 if (l == enumCompileType.lsl)
259 {
260 // Its LSL, convert it to C#
261 compileScript = LSL_Converter.Convert(Script);
262 m_positionMap = LSL_Converter.PositionMap;
263 l = enumCompileType.cs;
264 }
265
266 if (l == enumCompileType.yp)
267 {
268 // Its YP, convert it to C#
269 compileScript = YP_Converter.Convert(Script);
270 // We have our own processor now
271 //l = enumCompileType.cs;
272 }
273
274 // Insert additional assemblies here
275
276 //ADAM: Disabled for the moment until it's working right.
277 bool enableCommanderLSL = false;
278
279 if (enableCommanderLSL == true && ((l == enumCompileType.cs) || (l == enumCompileType.yp)))
280 {
281 foreach (KeyValuePair<string,
282 ICommander> com
283 in m_scriptEngine.World.GetCommanders())
284 {
285 compileScript = com.Value.GenerateRuntimeAPI() + compileScript;
286 }
287 }
288
289 // End of insert
290
291
292 switch (l)
293 {
294 case enumCompileType.cs:
295 compileScript = CreateCSCompilerScript(compileScript);
296 break;
297 case enumCompileType.vb:
298 compileScript = CreateVBCompilerScript(compileScript);
299 break;
300 case enumCompileType.js:
301 compileScript = CreateJSCompilerScript(compileScript);
302 break;
303 case enumCompileType.yp:
304 compileScript = CreateYPCompilerScript(compileScript);
305 break;
306 }
307
308 m_log.Debug("[ScriptEngine.DotNetEngine]: Preparing to compile the following LSL to C# translated code");
309 m_log.Debug("");
310 m_log.Debug(compileScript);
311
312 return CompileFromDotNetText(compileScript, l);
313 }
314
315 private static string CreateJSCompilerScript(string compileScript)
316 {
317 compileScript = String.Empty +
318 "import OpenSim.Region.ScriptEngine.Shared; import System.Collections.Generic;\r\n" +
319 "package SecondLife {\r\n" +
320 "class Script extends OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" +
321 compileScript +
322 "} }\r\n";
323 return compileScript;
324 }
325
326 private static string CreateCSCompilerScript(string compileScript)
327 {
328 compileScript = String.Empty +
329 "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" +
330 String.Empty + "namespace SecondLife { " +
331 String.Empty + "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" +
332 @"public Script() { } " +
333 compileScript +
334 "} }\r\n";
335 return compileScript;
336 }
337
338 private static string CreateYPCompilerScript(string compileScript)
339 {
340 compileScript = String.Empty +
341 "using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog; " +
342 "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" +
343 String.Empty + "namespace SecondLife { " +
344 String.Empty + "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" +
345 //@"public Script() { } " +
346 @"static OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP YP=null; " +
347 @"public Script() { YP= new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP(); } "+
348
349 compileScript +
350 "} }\r\n";
351 return compileScript;
352 }
353
354 private static string CreateVBCompilerScript(string compileScript)
355 {
356 compileScript = String.Empty +
357 "Imports OpenSim.Region.ScriptEngine.Shared: Imports System.Collections.Generic: " +
358 String.Empty + "NameSpace SecondLife:" +
359 String.Empty + "Public Class Script: Inherits OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass: " +
360 "\r\nPublic Sub New()\r\nEnd Sub: " +
361 compileScript +
362 ":End Class :End Namespace\r\n";
363 return compileScript;
364 }
365
366 /// <summary>
367 /// Compile .NET script to .Net assembly (.dll)
368 /// </summary>
369 /// <param name="Script">CS script</param>
370 /// <returns>Filename to .dll assembly</returns>
371 internal string CompileFromDotNetText(string Script, enumCompileType lang)
372 {
373 string ext = "." + lang.ToString();
374
375 // Output assembly name
376 scriptCompileCounter++;
377 string OutFile =
378 Path.Combine("ScriptEngines",
379 FilePrefix + "_compiled_" + instanceID.ToString() + "_" + scriptCompileCounter.ToString() + ".dll");
380#if DEBUG
381 m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Starting compile of \"" + OutFile + "\".");
382#endif
383 try
384 {
385 File.Delete(OutFile);
386 }
387 catch (Exception e) // NOTLEGIT - Should be just catching FileIOException
388 {
389 //m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString());
390 throw new Exception("Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString());
391 }
392 //string OutFile = Path.Combine("ScriptEngines", "SecondLife.Script.dll");
393
394 // DEBUG - write source to disk
395 if (WriteScriptSourceToDebugFile)
396 {
397 string srcFileName = FilePrefix + "_source_" + Path.GetFileNameWithoutExtension(OutFile) + ext;
398 try
399 {
400 File.WriteAllText(
401 Path.Combine("ScriptEngines", srcFileName),
402 Script);
403 }
404 catch (Exception ex) // NOTLEGIT - Should be just catching FileIOException
405 {
406 m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception while trying to write script source to file \"" + srcFileName + "\": " + ex.ToString());
407 }
408 }
409
410 // Do actual compile
411 CompilerParameters parameters = new CompilerParameters();
412
413 parameters.IncludeDebugInformation = true;
414
415 // Add all available assemblies
416// foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
417// {
418// Console.WriteLine("Adding assembly: " + asm.Location);
419// parameters.ReferencedAssemblies.Add(asm.Location);
420// }
421
422 string rootPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
423 string rootPathSE = Path.GetDirectoryName(GetType().Assembly.Location);
424 //Console.WriteLine("Assembly location: " + rootPath);
425 parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll"));
426 parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll"));
427
428 if (lang == enumCompileType.yp)
429 {
430 parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.YieldProlog.dll"));
431 }
432
433 //parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment");
434 parameters.GenerateExecutable = false;
435 parameters.OutputAssembly = OutFile;
436 parameters.IncludeDebugInformation = CompileWithDebugInformation;
437 //parameters.WarningLevel = 1; // Should be 4?
438 parameters.TreatWarningsAsErrors = false;
439
440 CompilerResults results;
441 switch (lang)
442 {
443 case enumCompileType.vb:
444 results = VBcodeProvider.CompileAssemblyFromSource(parameters, Script);
445 break;
446 case enumCompileType.cs:
447 results = CScodeProvider.CompileAssemblyFromSource(parameters, Script);
448 break;
449 case enumCompileType.js:
450 results = JScodeProvider.CompileAssemblyFromSource(parameters, Script);
451 break;
452 case enumCompileType.yp:
453 results = YPcodeProvider.CompileAssemblyFromSource(parameters, Script);
454 break;
455 default:
456 throw new Exception("Compiler is not able to recongnize language type \"" + lang.ToString() + "\"");
457 }
458
459 // Check result
460 // Go through errors
461
462 //
463 // WARNINGS AND ERRORS
464 //
465 if (results.Errors.Count > 0)
466 {
467 string errtext = String.Empty;
468 foreach (CompilerError CompErr in results.Errors)
469 {
470 KeyValuePair<int, int> lslPos;
471
472 try
473 {
474 lslPos = m_positionMap[new KeyValuePair<int, int>(CompErr.Line, CompErr.Column)];
475 }
476 catch (KeyNotFoundException) // we don't have this line/column mapped
477 {
478 m_scriptEngine.Log.Debug(String.Format("[{0}]: Lookup of C# line {1}, column {2} failed.", m_scriptEngine.ScriptEngineName, CompErr.Line, CompErr.Column));
479 lslPos = new KeyValuePair<int, int>(-CompErr.Line, -CompErr.Column);
480 }
481
482 // The Second Life viewer's script editor begins
483 // countingn lines and columns at 0, so we subtract 1.
484 errtext += String.Format("Line {0}, column {1}, Error Number: {2}, '{3}'\r\n", lslPos.Key - 1, lslPos.Value - 1, CompErr.ErrorNumber, CompErr.ErrorText);
485 //errtext += "Line number " + (CompErr.Line - LinesToRemoveOnError) +
486 // ", Error Number: " + CompErr.ErrorNumber +
487 // ", '" + CompErr.ErrorText + "'\r\n";
488 }
489 Console.WriteLine("[COMPILER ERROR]:" + errtext);
490 if (!File.Exists(OutFile))
491 {
492 throw new Exception(errtext);
493 }
494 }
495
496
497 //
498 // NO ERRORS, BUT NO COMPILED FILE
499 //
500 if (!File.Exists(OutFile))
501 {
502 string errtext = String.Empty;
503 errtext += "No compile error. But not able to locate compiled file.";
504 throw new Exception(errtext);
505 }
506 return OutFile;
507 }
508 }
509}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSCodeTransformer.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSCodeTransformer.cs
deleted file mode 100644
index 8abf3b9..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSCodeTransformer.cs
+++ /dev/null
@@ -1,183 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using Tools;
31
32namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
33{
34 public class LSL2CSCodeTransformer
35 {
36 private SYMBOL m_astRoot = null;
37 private static Dictionary<string, string> m_datatypeLSL2OpenSim = null;
38
39 /// <summary>
40 /// Pass the new CodeTranformer an abstract syntax tree.
41 /// </summary>
42 /// <param name="astRoot">The root node of the AST.</param>
43 public LSL2CSCodeTransformer(SYMBOL astRoot)
44 {
45 m_astRoot = astRoot;
46
47 // let's populate the dictionary
48 if (null == m_datatypeLSL2OpenSim)
49 {
50 m_datatypeLSL2OpenSim = new Dictionary<string, string>();
51 m_datatypeLSL2OpenSim.Add("integer", "LSL_Types.LSLInteger");
52 m_datatypeLSL2OpenSim.Add("float", "LSL_Types.LSLFloat");
53 //m_datatypeLSL2OpenSim.Add("key", "LSL_Types.key"); // key doesn't seem to be used
54 m_datatypeLSL2OpenSim.Add("key", "LSL_Types.LSLString");
55 m_datatypeLSL2OpenSim.Add("string", "LSL_Types.LSLString");
56 m_datatypeLSL2OpenSim.Add("vector", "LSL_Types.Vector3");
57 m_datatypeLSL2OpenSim.Add("rotation", "LSL_Types.Quaternion");
58 m_datatypeLSL2OpenSim.Add("list", "LSL_Types.list");
59 }
60 }
61
62 /// <summary>
63 /// Transform the code in the AST we have.
64 /// </summary>
65 /// <returns>The root node of the transformed AST</returns>
66 public SYMBOL Transform()
67 {
68 foreach (SYMBOL s in m_astRoot.kids)
69 TransformNode(s);
70
71 return m_astRoot;
72 }
73
74 /// <summary>
75 /// Recursively called to transform each type of node. Will transform this
76 /// node, then all it's children.
77 /// </summary>
78 /// <param name="s">The current node to transform.</param>
79 private void TransformNode(SYMBOL s)
80 {
81 // make sure to put type lower in the inheritance hierarchy first
82 // ie: since IdentConstant and StringConstant inherit from Constant,
83 // put IdentConstant and StringConstant before Constant
84 if (s is Declaration)
85 ((Declaration) s).Datatype = m_datatypeLSL2OpenSim[((Declaration) s).Datatype];
86 else if (s is Constant)
87 ((Constant) s).Type = m_datatypeLSL2OpenSim[((Constant) s).Type];
88 else if (s is TypecastExpression)
89 ((TypecastExpression) s).TypecastType = m_datatypeLSL2OpenSim[((TypecastExpression) s).TypecastType];
90 else if (s is GlobalFunctionDefinition && "void" != ((GlobalFunctionDefinition) s).ReturnType) // we don't need to translate "void"
91 ((GlobalFunctionDefinition) s).ReturnType = m_datatypeLSL2OpenSim[((GlobalFunctionDefinition) s).ReturnType];
92
93 for (int i = 0; i < s.kids.Count; i++)
94 {
95 if (!(s is Assignment || s is ArgumentDeclarationList) && s.kids[i] is Declaration)
96 AddImplicitInitialization(s, i);
97
98 TransformNode((SYMBOL) s.kids[i]);
99 }
100 }
101
102 /// <summary>
103 /// Replaces an instance of the node at s.kids[didx] with an assignment
104 /// node. The assignment node has the Declaration node on the left hand
105 /// side and a default initializer on the right hand side.
106 /// </summary>
107 /// <param name="s">
108 /// The node containing the Declaration node that needs replacing.
109 /// </param>
110 /// <param name="didx">Index of the Declaration node to replace.</param>
111 private void AddImplicitInitialization(SYMBOL s, int didx)
112 {
113 // We take the kids for a while to play with them.
114 int sKidSize = s.kids.Count;
115 object [] sKids = new object[sKidSize];
116 for (int i = 0; i < sKidSize; i++)
117 sKids[i] = s.kids.Pop();
118
119 // The child to be changed.
120 Declaration currentDeclaration = (Declaration) sKids[didx];
121
122 // We need an assignment node.
123 Assignment newAssignment = new Assignment(currentDeclaration.yyps,
124 currentDeclaration,
125 GetZeroConstant(currentDeclaration.yyps, currentDeclaration.Datatype),
126 "=");
127 sKids[didx] = newAssignment;
128
129 // Put the kids back where they belong.
130 for (int i = 0; i < sKidSize; i++)
131 s.kids.Add(sKids[i]);
132 }
133
134 /// <summary>
135 /// Generates the node structure required to generate a default
136 /// initialization.
137 /// </summary>
138 /// <param name="p">
139 /// Tools.Parser instance to use when instantiating nodes.
140 /// </param>
141 /// <param name="constantType">String describing the datatype.</param>
142 /// <returns>
143 /// A SYMBOL node conaining the appropriate structure for intializing a
144 /// constantType.
145 /// </returns>
146 private SYMBOL GetZeroConstant(Parser p, string constantType)
147 {
148 switch (constantType)
149 {
150 case "integer":
151 return new Constant(p, constantType, "0");
152 case "float":
153 return new Constant(p, constantType, "0.0");
154 case "string":
155 case "key":
156 return new Constant(p, constantType, "");
157 case "list":
158 ArgumentList al = new ArgumentList(p);
159 return new ListConstant(p, al);
160 case "vector":
161 Constant vca = new Constant(p, "float", "0.0");
162 Constant vcb = new Constant(p, "float", "0.0");
163 Constant vcc = new Constant(p, "float", "0.0");
164 ConstantExpression vcea = new ConstantExpression(p, vca);
165 ConstantExpression vceb = new ConstantExpression(p, vcb);
166 ConstantExpression vcec = new ConstantExpression(p, vcc);
167 return new VectorConstant(p, vcea, vceb, vcec);
168 case "rotation":
169 Constant rca = new Constant(p, "float", "0.0");
170 Constant rcb = new Constant(p, "float", "0.0");
171 Constant rcc = new Constant(p, "float", "0.0");
172 Constant rcd = new Constant(p, "float", "0.0");
173 ConstantExpression rcea = new ConstantExpression(p, rca);
174 ConstantExpression rceb = new ConstantExpression(p, rcb);
175 ConstantExpression rcec = new ConstantExpression(p, rcc);
176 ConstantExpression rced = new ConstantExpression(p, rcd);
177 return new RotationConstant(p, rcea, rceb, rcec, rced);
178 default:
179 return null; // this will probably break stuff
180 }
181 }
182 }
183}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs
deleted file mode 100644
index 8618d6c..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs
+++ /dev/null
@@ -1,116 +0,0 @@
1/*
2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28
29using System;
30using System.IO;
31using System.Collections.Generic;
32using System.Text;
33using System.Text.RegularExpressions;
34using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog;
35
36namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
37{
38 public class YP2CSConverter
39 {
40 public YP2CSConverter()
41 {
42 }
43
44 public string Convert(string Script)
45 {
46 string CS_code = GenCode(Script);
47 return CS_code;
48 }
49
50 static string GenCode(string myCode)
51 {
52 Variable TermList = new Variable();
53 Variable FunctionCode = new Variable();
54
55 string CS_code = "";
56
57 int cs_pointer = myCode.IndexOf("\n//cs");
58 if (cs_pointer > 0)
59 {
60 CS_code = myCode.Substring(cs_pointer); // CS code comes after
61 myCode = myCode.Substring(0, cs_pointer);
62 }
63 myCode.Replace("//yp", "%YPCode");
64
65 StringWriter myCS_SW = new StringWriter();
66 StringReader myCode_SR = new StringReader(" yp_nop_header_nop. \n "+myCode + "\n");
67
68 YP.see(myCode_SR);
69 YP.tell(myCS_SW);
70
71 //Console.WriteLine("Mycode\n ===================================\n" + myCode+"\n");
72 // disable warning on l1, don't see how we can
73 // code this differently
74 #pragma warning disable 0168
75 foreach (bool l1 in Parser.parseInput(TermList))
76 {
77 foreach (bool l2 in YPCompiler.makeFunctionPseudoCode(TermList, FunctionCode))
78 {
79 // ListPair VFC = new ListPair(FunctionCode, new Variable());
80 //Console.WriteLine("-------------------------")
81 //Console.WriteLine(FunctionCode.ToString())
82 //Console.WriteLine("-------------------------")
83 YPCompiler.convertFunctionCSharp(FunctionCode);
84 //YPCompiler.convertStringCodesCSharp(VFC);
85 }
86 }
87 #pragma warning restore 0168
88 YP.seen();
89 myCS_SW.Close();
90 YP.told();
91 StringBuilder bu = myCS_SW.GetStringBuilder();
92 string finalcode = "//YPEncoded\n" + bu.ToString();
93 // FIX script events (we're in the same script)
94 // 'YP.script_event(Atom.a(@"sayit"),' ==> 'sayit('
95 finalcode = Regex.Replace(finalcode,
96 @"YP.script_event\(Atom.a\(\@\""(.*?)""\)\,",
97 @"this.$1(",
98 RegexOptions.Compiled | RegexOptions.Singleline);
99 finalcode = Regex.Replace(finalcode,
100 @"YP.script_event\(Atom.a\(\""(.*?)""\)\,",
101 @"this.$1(",
102 RegexOptions.Compiled | RegexOptions.Singleline);
103 finalcode = Regex.Replace(finalcode,
104 @" static ",
105 @" ",
106 RegexOptions.Compiled | RegexOptions.Singleline);
107
108 finalcode = CS_code+"\n\r"+ finalcode;
109 finalcode = Regex.Replace(finalcode,
110 @"PrologCallback",
111 @"public IEnumerable<bool> ",
112 RegexOptions.Compiled | RegexOptions.Singleline);
113 return finalcode;
114 }
115 }
116}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.lexer.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.lexer.cs
deleted file mode 100644
index 6020dc3..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.lexer.cs
+++ /dev/null
@@ -1,18447 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;using Tools;
29namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL {
30//%+STRING_CONSTANT+3
31public class STRING_CONSTANT : TOKEN{
32public override string yyname { get { return "STRING_CONSTANT"; }}
33public override int yynum { get { return 3; }}
34public STRING_CONSTANT(Lexer yyl):base(yyl){}}
35//%INCREMENT+4
36public class INCREMENT : TOKEN{ public override string yyname { get { return "INCREMENT";}}
37public override int yynum { get { return 4; }}
38 public INCREMENT(Lexer yyl):base(yyl) {}}
39//%DECREMENT+5
40public class DECREMENT : TOKEN{ public override string yyname { get { return "DECREMENT";}}
41public override int yynum { get { return 5; }}
42 public DECREMENT(Lexer yyl):base(yyl) {}}
43//%PLUS_EQUALS+6
44public class PLUS_EQUALS : TOKEN{ public override string yyname { get { return "PLUS_EQUALS";}}
45public override int yynum { get { return 6; }}
46 public PLUS_EQUALS(Lexer yyl):base(yyl) {}}
47//%MINUS_EQUALS+7
48public class MINUS_EQUALS : TOKEN{ public override string yyname { get { return "MINUS_EQUALS";}}
49public override int yynum { get { return 7; }}
50 public MINUS_EQUALS(Lexer yyl):base(yyl) {}}
51//%STAR_EQUALS+8
52public class STAR_EQUALS : TOKEN{ public override string yyname { get { return "STAR_EQUALS";}}
53public override int yynum { get { return 8; }}
54 public STAR_EQUALS(Lexer yyl):base(yyl) {}}
55//%SLASH_EQUALS+9
56public class SLASH_EQUALS : TOKEN{ public override string yyname { get { return "SLASH_EQUALS";}}
57public override int yynum { get { return 9; }}
58 public SLASH_EQUALS(Lexer yyl):base(yyl) {}}
59//%PERCENT_EQUALS+10
60public class PERCENT_EQUALS : TOKEN{ public override string yyname { get { return "PERCENT_EQUALS";}}
61public override int yynum { get { return 10; }}
62 public PERCENT_EQUALS(Lexer yyl):base(yyl) {}}
63//%SEMICOLON+11
64public class SEMICOLON : TOKEN{ public override string yyname { get { return "SEMICOLON";}}
65public override int yynum { get { return 11; }}
66 public SEMICOLON(Lexer yyl):base(yyl) {}}
67//%LEFT_BRACE+12
68public class LEFT_BRACE : TOKEN{ public override string yyname { get { return "LEFT_BRACE";}}
69public override int yynum { get { return 12; }}
70 public LEFT_BRACE(Lexer yyl):base(yyl) {}}
71//%RIGHT_BRACE+13
72public class RIGHT_BRACE : TOKEN{ public override string yyname { get { return "RIGHT_BRACE";}}
73public override int yynum { get { return 13; }}
74 public RIGHT_BRACE(Lexer yyl):base(yyl) {}}
75//%COMMA+14
76public class COMMA : TOKEN{ public override string yyname { get { return "COMMA";}}
77public override int yynum { get { return 14; }}
78 public COMMA(Lexer yyl):base(yyl) {}}
79//%EQUALS+15
80public class EQUALS : TOKEN{ public override string yyname { get { return "EQUALS";}}
81public override int yynum { get { return 15; }}
82 public EQUALS(Lexer yyl):base(yyl) {}}
83//%LEFT_PAREN+16
84public class LEFT_PAREN : TOKEN{ public override string yyname { get { return "LEFT_PAREN";}}
85public override int yynum { get { return 16; }}
86 public LEFT_PAREN(Lexer yyl):base(yyl) {}}
87//%RIGHT_PAREN+17
88public class RIGHT_PAREN : TOKEN{ public override string yyname { get { return "RIGHT_PAREN";}}
89public override int yynum { get { return 17; }}
90 public RIGHT_PAREN(Lexer yyl):base(yyl) {}}
91//%PLUS+18
92public class PLUS : TOKEN{ public override string yyname { get { return "PLUS";}}
93public override int yynum { get { return 18; }}
94 public PLUS(Lexer yyl):base(yyl) {}}
95//%MINUS+19
96public class MINUS : TOKEN{ public override string yyname { get { return "MINUS";}}
97public override int yynum { get { return 19; }}
98 public MINUS(Lexer yyl):base(yyl) {}}
99//%STAR+20
100public class STAR : TOKEN{ public override string yyname { get { return "STAR";}}
101public override int yynum { get { return 20; }}
102 public STAR(Lexer yyl):base(yyl) {}}
103//%SLASH+21
104public class SLASH : TOKEN{ public override string yyname { get { return "SLASH";}}
105public override int yynum { get { return 21; }}
106 public SLASH(Lexer yyl):base(yyl) {}}
107//%PERCENT+22
108public class PERCENT : TOKEN{ public override string yyname { get { return "PERCENT";}}
109public override int yynum { get { return 22; }}
110 public PERCENT(Lexer yyl):base(yyl) {}}
111//%AT+23
112public class AT : TOKEN{ public override string yyname { get { return "AT";}}
113public override int yynum { get { return 23; }}
114 public AT(Lexer yyl):base(yyl) {}}
115//%PERIOD+24
116public class PERIOD : TOKEN{ public override string yyname { get { return "PERIOD";}}
117public override int yynum { get { return 24; }}
118 public PERIOD(Lexer yyl):base(yyl) {}}
119//%LEFT_ANGLE+25
120public class LEFT_ANGLE : TOKEN{ public override string yyname { get { return "LEFT_ANGLE";}}
121public override int yynum { get { return 25; }}
122 public LEFT_ANGLE(Lexer yyl):base(yyl) {}}
123//%RIGHT_ANGLE+26
124public class RIGHT_ANGLE : TOKEN{ public override string yyname { get { return "RIGHT_ANGLE";}}
125public override int yynum { get { return 26; }}
126 public RIGHT_ANGLE(Lexer yyl):base(yyl) {}}
127//%LEFT_BRACKET+27
128public class LEFT_BRACKET : TOKEN{ public override string yyname { get { return "LEFT_BRACKET";}}
129public override int yynum { get { return 27; }}
130 public LEFT_BRACKET(Lexer yyl):base(yyl) {}}
131//%RIGHT_BRACKET+28
132public class RIGHT_BRACKET : TOKEN{ public override string yyname { get { return "RIGHT_BRACKET";}}
133public override int yynum { get { return 28; }}
134 public RIGHT_BRACKET(Lexer yyl):base(yyl) {}}
135//%EQUALS_EQUALS+29
136public class EQUALS_EQUALS : TOKEN{ public override string yyname { get { return "EQUALS_EQUALS";}}
137public override int yynum { get { return 29; }}
138 public EQUALS_EQUALS(Lexer yyl):base(yyl) {}}
139//%EXCLAMATION_EQUALS+30
140public class EXCLAMATION_EQUALS : TOKEN{ public override string yyname { get { return "EXCLAMATION_EQUALS";}}
141public override int yynum { get { return 30; }}
142 public EXCLAMATION_EQUALS(Lexer yyl):base(yyl) {}}
143//%LESS_EQUALS+31
144public class LESS_EQUALS : TOKEN{ public override string yyname { get { return "LESS_EQUALS";}}
145public override int yynum { get { return 31; }}
146 public LESS_EQUALS(Lexer yyl):base(yyl) {}}
147//%GREATER_EQUALS+32
148public class GREATER_EQUALS : TOKEN{ public override string yyname { get { return "GREATER_EQUALS";}}
149public override int yynum { get { return 32; }}
150 public GREATER_EQUALS(Lexer yyl):base(yyl) {}}
151//%AMP+33
152public class AMP : TOKEN{ public override string yyname { get { return "AMP";}}
153public override int yynum { get { return 33; }}
154 public AMP(Lexer yyl):base(yyl) {}}
155//%STROKE+34
156public class STROKE : TOKEN{ public override string yyname { get { return "STROKE";}}
157public override int yynum { get { return 34; }}
158 public STROKE(Lexer yyl):base(yyl) {}}
159//%CARET+35
160public class CARET : TOKEN{ public override string yyname { get { return "CARET";}}
161public override int yynum { get { return 35; }}
162 public CARET(Lexer yyl):base(yyl) {}}
163//%TILDE+36
164public class TILDE : TOKEN{ public override string yyname { get { return "TILDE";}}
165public override int yynum { get { return 36; }}
166 public TILDE(Lexer yyl):base(yyl) {}}
167//%EXCLAMATION+37
168public class EXCLAMATION : TOKEN{ public override string yyname { get { return "EXCLAMATION";}}
169public override int yynum { get { return 37; }}
170 public EXCLAMATION(Lexer yyl):base(yyl) {}}
171//%AMP_AMP+38
172public class AMP_AMP : TOKEN{ public override string yyname { get { return "AMP_AMP";}}
173public override int yynum { get { return 38; }}
174 public AMP_AMP(Lexer yyl):base(yyl) {}}
175//%STROKE_STROKE+39
176public class STROKE_STROKE : TOKEN{ public override string yyname { get { return "STROKE_STROKE";}}
177public override int yynum { get { return 39; }}
178 public STROKE_STROKE(Lexer yyl):base(yyl) {}}
179//%LEFT_SHIFT+40
180public class LEFT_SHIFT : TOKEN{ public override string yyname { get { return "LEFT_SHIFT";}}
181public override int yynum { get { return 40; }}
182 public LEFT_SHIFT(Lexer yyl):base(yyl) {}}
183//%RIGHT_SHIFT+41
184public class RIGHT_SHIFT : TOKEN{ public override string yyname { get { return "RIGHT_SHIFT";}}
185public override int yynum { get { return 41; }}
186 public RIGHT_SHIFT(Lexer yyl):base(yyl) {}}
187//%IF+42
188public class IF : TOKEN{ public override string yyname { get { return "IF";}}
189public override int yynum { get { return 42; }}
190 public IF(Lexer yyl):base(yyl) {}}
191//%ELSE+43
192public class ELSE : TOKEN{ public override string yyname { get { return "ELSE";}}
193public override int yynum { get { return 43; }}
194 public ELSE(Lexer yyl):base(yyl) {}}
195//%DO+44
196public class DO : TOKEN{ public override string yyname { get { return "DO";}}
197public override int yynum { get { return 44; }}
198 public DO(Lexer yyl):base(yyl) {}}
199//%WHILE+45
200public class WHILE : TOKEN{ public override string yyname { get { return "WHILE";}}
201public override int yynum { get { return 45; }}
202 public WHILE(Lexer yyl):base(yyl) {}}
203//%FOR+46
204public class FOR : TOKEN{ public override string yyname { get { return "FOR";}}
205public override int yynum { get { return 46; }}
206 public FOR(Lexer yyl):base(yyl) {}}
207//%DEFAULT_STATE+47
208public class DEFAULT_STATE : TOKEN{ public override string yyname { get { return "DEFAULT_STATE";}}
209public override int yynum { get { return 47; }}
210 public DEFAULT_STATE(Lexer yyl):base(yyl) {}}
211//%STATE+48
212public class STATE : TOKEN{ public override string yyname { get { return "STATE";}}
213public override int yynum { get { return 48; }}
214 public STATE(Lexer yyl):base(yyl) {}}
215//%JUMP+49
216public class JUMP : TOKEN{ public override string yyname { get { return "JUMP";}}
217public override int yynum { get { return 49; }}
218 public JUMP(Lexer yyl):base(yyl) {}}
219//%RETURN+50
220public class RETURN : TOKEN{ public override string yyname { get { return "RETURN";}}
221public override int yynum { get { return 50; }}
222 public RETURN(Lexer yyl):base(yyl) {}}
223//%INTEGER_TYPE+51
224public class INTEGER_TYPE : TOKEN{ public override string yyname { get { return "INTEGER_TYPE";}}
225public override int yynum { get { return 51; }}
226 public INTEGER_TYPE(Lexer yyl):base(yyl) {}}
227//%FLOAT_TYPE+52
228public class FLOAT_TYPE : TOKEN{ public override string yyname { get { return "FLOAT_TYPE";}}
229public override int yynum { get { return 52; }}
230 public FLOAT_TYPE(Lexer yyl):base(yyl) {}}
231//%STRING_TYPE+53
232public class STRING_TYPE : TOKEN{ public override string yyname { get { return "STRING_TYPE";}}
233public override int yynum { get { return 53; }}
234 public STRING_TYPE(Lexer yyl):base(yyl) {}}
235//%KEY_TYPE+54
236public class KEY_TYPE : TOKEN{ public override string yyname { get { return "KEY_TYPE";}}
237public override int yynum { get { return 54; }}
238 public KEY_TYPE(Lexer yyl):base(yyl) {}}
239//%VECTOR_TYPE+55
240public class VECTOR_TYPE : TOKEN{ public override string yyname { get { return "VECTOR_TYPE";}}
241public override int yynum { get { return 55; }}
242 public VECTOR_TYPE(Lexer yyl):base(yyl) {}}
243//%ROTATION_TYPE+56
244public class ROTATION_TYPE : TOKEN{ public override string yyname { get { return "ROTATION_TYPE";}}
245public override int yynum { get { return 56; }}
246 public ROTATION_TYPE(Lexer yyl):base(yyl) {}}
247//%LIST_TYPE+57
248public class LIST_TYPE : TOKEN{ public override string yyname { get { return "LIST_TYPE";}}
249public override int yynum { get { return 57; }}
250 public LIST_TYPE(Lexer yyl):base(yyl) {}}
251//%AT_ROT_TARGET_EVENT+58
252public class AT_ROT_TARGET_EVENT : TOKEN{ public override string yyname { get { return "AT_ROT_TARGET_EVENT";}}
253public override int yynum { get { return 58; }}
254 public AT_ROT_TARGET_EVENT(Lexer yyl):base(yyl) {}}
255//%AT_TARGET_EVENT+59
256public class AT_TARGET_EVENT : TOKEN{ public override string yyname { get { return "AT_TARGET_EVENT";}}
257public override int yynum { get { return 59; }}
258 public AT_TARGET_EVENT(Lexer yyl):base(yyl) {}}
259//%ATTACH_EVENT+60
260public class ATTACH_EVENT : TOKEN{ public override string yyname { get { return "ATTACH_EVENT";}}
261public override int yynum { get { return 60; }}
262 public ATTACH_EVENT(Lexer yyl):base(yyl) {}}
263//%CHANGED_EVENT+61
264public class CHANGED_EVENT : TOKEN{ public override string yyname { get { return "CHANGED_EVENT";}}
265public override int yynum { get { return 61; }}
266 public CHANGED_EVENT(Lexer yyl):base(yyl) {}}
267//%COLLISION_EVENT+62
268public class COLLISION_EVENT : TOKEN{ public override string yyname { get { return "COLLISION_EVENT";}}
269public override int yynum { get { return 62; }}
270 public COLLISION_EVENT(Lexer yyl):base(yyl) {}}
271//%COLLISION_END_EVENT+63
272public class COLLISION_END_EVENT : TOKEN{ public override string yyname { get { return "COLLISION_END_EVENT";}}
273public override int yynum { get { return 63; }}
274 public COLLISION_END_EVENT(Lexer yyl):base(yyl) {}}
275//%COLLISION_START_EVENT+64
276public class COLLISION_START_EVENT : TOKEN{ public override string yyname { get { return "COLLISION_START_EVENT";}}
277public override int yynum { get { return 64; }}
278 public COLLISION_START_EVENT(Lexer yyl):base(yyl) {}}
279//%CONTROL_EVENT+65
280public class CONTROL_EVENT : TOKEN{ public override string yyname { get { return "CONTROL_EVENT";}}
281public override int yynum { get { return 65; }}
282 public CONTROL_EVENT(Lexer yyl):base(yyl) {}}
283//%DATASERVER_EVENT+66
284public class DATASERVER_EVENT : TOKEN{ public override string yyname { get { return "DATASERVER_EVENT";}}
285public override int yynum { get { return 66; }}
286 public DATASERVER_EVENT(Lexer yyl):base(yyl) {}}
287//%EMAIL_EVENT+67
288public class EMAIL_EVENT : TOKEN{ public override string yyname { get { return "EMAIL_EVENT";}}
289public override int yynum { get { return 67; }}
290 public EMAIL_EVENT(Lexer yyl):base(yyl) {}}
291//%HTTP_RESPONSE_EVENT+68
292public class HTTP_RESPONSE_EVENT : TOKEN{ public override string yyname { get { return "HTTP_RESPONSE_EVENT";}}
293public override int yynum { get { return 68; }}
294 public HTTP_RESPONSE_EVENT(Lexer yyl):base(yyl) {}}
295//%LAND_COLLISION_EVENT+69
296public class LAND_COLLISION_EVENT : TOKEN{ public override string yyname { get { return "LAND_COLLISION_EVENT";}}
297public override int yynum { get { return 69; }}
298 public LAND_COLLISION_EVENT(Lexer yyl):base(yyl) {}}
299//%LAND_COLLISION_END_EVENT+70
300public class LAND_COLLISION_END_EVENT : TOKEN{ public override string yyname { get { return "LAND_COLLISION_END_EVENT";}}
301public override int yynum { get { return 70; }}
302 public LAND_COLLISION_END_EVENT(Lexer yyl):base(yyl) {}}
303//%LAND_COLLISION_START_EVENT+71
304public class LAND_COLLISION_START_EVENT : TOKEN{ public override string yyname { get { return "LAND_COLLISION_START_EVENT";}}
305public override int yynum { get { return 71; }}
306 public LAND_COLLISION_START_EVENT(Lexer yyl):base(yyl) {}}
307//%LINK_MESSAGE_EVENT+72
308public class LINK_MESSAGE_EVENT : TOKEN{ public override string yyname { get { return "LINK_MESSAGE_EVENT";}}
309public override int yynum { get { return 72; }}
310 public LINK_MESSAGE_EVENT(Lexer yyl):base(yyl) {}}
311//%LISTEN_EVENT+73
312public class LISTEN_EVENT : TOKEN{ public override string yyname { get { return "LISTEN_EVENT";}}
313public override int yynum { get { return 73; }}
314 public LISTEN_EVENT(Lexer yyl):base(yyl) {}}
315//%MONEY_EVENT+74
316public class MONEY_EVENT : TOKEN{ public override string yyname { get { return "MONEY_EVENT";}}
317public override int yynum { get { return 74; }}
318 public MONEY_EVENT(Lexer yyl):base(yyl) {}}
319//%MOVING_END_EVENT+75
320public class MOVING_END_EVENT : TOKEN{ public override string yyname { get { return "MOVING_END_EVENT";}}
321public override int yynum { get { return 75; }}
322 public MOVING_END_EVENT(Lexer yyl):base(yyl) {}}
323//%MOVING_START_EVENT+76
324public class MOVING_START_EVENT : TOKEN{ public override string yyname { get { return "MOVING_START_EVENT";}}
325public override int yynum { get { return 76; }}
326 public MOVING_START_EVENT(Lexer yyl):base(yyl) {}}
327//%NO_SENSOR_EVENT+77
328public class NO_SENSOR_EVENT : TOKEN{ public override string yyname { get { return "NO_SENSOR_EVENT";}}
329public override int yynum { get { return 77; }}
330 public NO_SENSOR_EVENT(Lexer yyl):base(yyl) {}}
331//%NOT_AT_ROT_TARGET_EVENT+78
332public class NOT_AT_ROT_TARGET_EVENT : TOKEN{ public override string yyname { get { return "NOT_AT_ROT_TARGET_EVENT";}}
333public override int yynum { get { return 78; }}
334 public NOT_AT_ROT_TARGET_EVENT(Lexer yyl):base(yyl) {}}
335//%NOT_AT_TARGET_EVENT+79
336public class NOT_AT_TARGET_EVENT : TOKEN{ public override string yyname { get { return "NOT_AT_TARGET_EVENT";}}
337public override int yynum { get { return 79; }}
338 public NOT_AT_TARGET_EVENT(Lexer yyl):base(yyl) {}}
339//%OBJECT_REZ_EVENT+80
340public class OBJECT_REZ_EVENT : TOKEN{ public override string yyname { get { return "OBJECT_REZ_EVENT";}}
341public override int yynum { get { return 80; }}
342 public OBJECT_REZ_EVENT(Lexer yyl):base(yyl) {}}
343//%ON_REZ_EVENT+81
344public class ON_REZ_EVENT : TOKEN{ public override string yyname { get { return "ON_REZ_EVENT";}}
345public override int yynum { get { return 81; }}
346 public ON_REZ_EVENT(Lexer yyl):base(yyl) {}}
347//%REMOTE_DATA_EVENT+82
348public class REMOTE_DATA_EVENT : TOKEN{ public override string yyname { get { return "REMOTE_DATA_EVENT";}}
349public override int yynum { get { return 82; }}
350 public REMOTE_DATA_EVENT(Lexer yyl):base(yyl) {}}
351//%RUN_TIME_PERMISSIONS_EVENT+83
352public class RUN_TIME_PERMISSIONS_EVENT : TOKEN{ public override string yyname { get { return "RUN_TIME_PERMISSIONS_EVENT";}}
353public override int yynum { get { return 83; }}
354 public RUN_TIME_PERMISSIONS_EVENT(Lexer yyl):base(yyl) {}}
355//%SENSOR_EVENT+84
356public class SENSOR_EVENT : TOKEN{ public override string yyname { get { return "SENSOR_EVENT";}}
357public override int yynum { get { return 84; }}
358 public SENSOR_EVENT(Lexer yyl):base(yyl) {}}
359//%STATE_ENTRY_EVENT+85
360public class STATE_ENTRY_EVENT : TOKEN{ public override string yyname { get { return "STATE_ENTRY_EVENT";}}
361public override int yynum { get { return 85; }}
362 public STATE_ENTRY_EVENT(Lexer yyl):base(yyl) {}}
363//%STATE_EXIT_EVENT+86
364public class STATE_EXIT_EVENT : TOKEN{ public override string yyname { get { return "STATE_EXIT_EVENT";}}
365public override int yynum { get { return 86; }}
366 public STATE_EXIT_EVENT(Lexer yyl):base(yyl) {}}
367//%TIMER_EVENT+87
368public class TIMER_EVENT : TOKEN{ public override string yyname { get { return "TIMER_EVENT";}}
369public override int yynum { get { return 87; }}
370 public TIMER_EVENT(Lexer yyl):base(yyl) {}}
371//%TOUCH_EVENT+88
372public class TOUCH_EVENT : TOKEN{ public override string yyname { get { return "TOUCH_EVENT";}}
373public override int yynum { get { return 88; }}
374 public TOUCH_EVENT(Lexer yyl):base(yyl) {}}
375//%TOUCH_START_EVENT+89
376public class TOUCH_START_EVENT : TOKEN{ public override string yyname { get { return "TOUCH_START_EVENT";}}
377public override int yynum { get { return 89; }}
378 public TOUCH_START_EVENT(Lexer yyl):base(yyl) {}}
379//%TOUCH_END_EVENT+90
380public class TOUCH_END_EVENT : TOKEN{ public override string yyname { get { return "TOUCH_END_EVENT";}}
381public override int yynum { get { return 90; }}
382 public TOUCH_END_EVENT(Lexer yyl):base(yyl) {}}
383//%IDENT+91
384public class IDENT : TOKEN{ public override string yyname { get { return "IDENT";}}
385public override int yynum { get { return 91; }}
386 public IDENT(Lexer yyl):base(yyl) {}}
387//%INTEGER_CONSTANT+92
388public class INTEGER_CONSTANT : TOKEN{ public override string yyname { get { return "INTEGER_CONSTANT";}}
389public override int yynum { get { return 92; }}
390 public INTEGER_CONSTANT(Lexer yyl):base(yyl) {}}
391//%HEX_INTEGER_CONSTANT+93
392public class HEX_INTEGER_CONSTANT : TOKEN{ public override string yyname { get { return "HEX_INTEGER_CONSTANT";}}
393public override int yynum { get { return 93; }}
394 public HEX_INTEGER_CONSTANT(Lexer yyl):base(yyl) {}}
395//%FLOAT_CONSTANT+94
396public class FLOAT_CONSTANT : TOKEN{ public override string yyname { get { return "FLOAT_CONSTANT";}}
397public override int yynum { get { return 94; }}
398 public FLOAT_CONSTANT(Lexer yyl):base(yyl) {}}
399//%|LSLTokens
400public class yyLSLTokens : YyLexer {
401 public yyLSLTokens(ErrorHandler eh):base(eh) { arr = new int[] {
402101,4,6,52,0,
40346,0,53,0,6,
404102,4,16,117,0,
405115,0,45,0,97,
4060,115,0,99,0,
407105,0,105,0,2,
4080,103,5,27,7,
4090,104,9,1,0,
4103,192,0,105,5,
41127,3,65,0,2,
4121,3,66,0,2,
4131,3,67,0,2,
4141,3,68,0,2,
4151,3,69,0,2,
4161,3,70,0,2,
4171,3,71,0,2,
4181,3,72,0,2,
4191,3,73,0,2,
4201,3,74,0,2,
4211,3,75,0,2,
4221,3,76,0,2,
4231,3,77,0,2,
4241,3,78,0,2,
4251,3,79,0,2,
4261,3,80,0,2,
4271,3,81,0,2,
4281,3,82,0,2,
4291,3,83,0,2,
4301,3,84,0,2,
4311,3,85,0,2,
4321,3,86,0,2,
4331,3,87,0,2,
4341,3,88,0,2,
4351,3,89,0,2,
4361,3,90,0,2,
4371,3,192,0,2,
4381,7,1,106,9,
4391,1,3,170,0,
440107,5,27,3,109,
4410,2,1,3,110,
4420,2,1,3,111,
4430,2,1,3,112,
4440,2,1,3,113,
4450,2,1,3,114,
4460,2,1,3,115,
4470,2,1,3,116,
4480,2,1,3,117,
4490,2,1,3,118,
4500,2,1,3,119,
4510,2,1,3,120,
4520,2,1,3,121,
4530,2,1,3,122,
4540,2,1,3,170,
4550,2,1,3,97,
4560,2,1,3,98,
4570,2,1,3,99,
4580,2,1,3,100,
4590,2,1,3,101,
4600,2,1,3,102,
4610,2,1,3,103,
4620,2,1,3,104,
4630,2,1,3,105,
4640,2,1,3,106,
4650,2,1,3,107,
4660,2,1,3,108,
4670,2,1,7,2,
468108,9,1,2,3,
469197,1,109,5,1,
4703,197,1,2,1,
4717,3,110,9,1,
4723,3,176,2,111,
4735,1,3,176,2,
4742,1,7,4,112,
4759,1,4,3,187,
4761,113,5,1,3,
477187,1,2,1,7,
4785,114,9,1,5,
4793,0,3,115,5,
4801,3,0,3,2,
4811,7,6,116,9,
4821,6,3,3,9,
483117,5,1,3,3,
4849,2,1,7,7,
485118,9,1,7,3,
486136,4,119,5,1,
4873,136,4,2,1,
4887,8,120,9,1,
4898,3,96,6,121,
4905,11,3,96,6,
4912,1,3,48,0,
4922,1,3,49,0,
4932,1,3,50,0,
4942,1,3,51,0,
4952,1,3,52,0,
4962,1,3,53,0,
4972,1,3,54,0,
4982,1,3,55,0,
4992,1,3,56,0,
5002,1,3,57,0,
5012,1,7,9,122,
5029,1,9,3,96,
50333,123,5,1,3,
50496,33,2,1,7,
50510,124,9,1,10,
5063,178,0,125,5,
5071,3,178,0,2,
5081,7,11,126,9,
5091,11,3,160,0,
510127,5,2,3,160,
5110,2,1,3,32,
5120,2,1,7,12,
513128,9,1,12,3,
51440,32,129,5,1,
5153,40,32,2,1,
5167,13,130,9,1,
51713,3,41,32,131,
5185,1,3,41,32,
5192,1,7,14,132,
5209,1,14,3,1,
5210,133,5,5,3,
5220,0,2,1,3,
5231,0,2,1,3,
52413,0,2,1,3,
5259,0,2,1,3,
52610,0,2,1,7,
52715,134,9,1,15,
5283,15,7,135,5,
5291,3,15,7,2,
5301,7,17,136,9,
5311,17,3,0,224,
532137,5,1,3,0,
533224,2,1,7,18,
534138,9,1,18,3,
53563,32,139,5,2,
5363,63,32,2,1,
5373,95,0,2,1,
5387,19,140,9,1,
53919,3,173,0,141,
5405,2,3,45,0,
5412,1,3,173,0,
5422,1,7,20,142,
5439,1,20,3,58,
54415,143,5,4,3,
545123,0,2,1,3,
54691,0,2,1,3,
54758,15,2,1,3,
54840,0,2,1,7,
54921,144,9,1,21,
5503,59,15,145,5,
5514,3,59,15,2,
5521,3,125,0,2,
5531,3,93,0,2,
5541,3,41,0,2,
5551,7,22,146,9,
5561,22,3,171,0,
557147,5,1,3,171,
5580,2,1,7,23,
559148,9,1,23,3,
560187,0,149,5,1,
5613,187,0,2,1,
5627,24,150,9,1,
56324,3,35,0,151,
5645,12,3,37,0,
5652,1,3,38,0,
5662,1,3,42,0,
5672,1,3,44,0,
5682,1,3,46,0,
5692,1,3,47,0,
5702,1,3,92,0,
5712,1,3,59,0,
5722,1,3,64,0,
5732,1,3,33,0,
5742,1,3,34,0,
5752,1,3,35,0,
5762,1,7,25,152,
5779,1,25,3,172,
5780,153,5,7,3,
579172,0,2,1,3,
580124,0,2,1,3,
581126,0,2,1,3,
58260,0,2,1,3,
58361,0,2,1,3,
58462,0,2,1,3,
58543,0,2,1,7,
58626,154,9,1,26,
5873,36,0,155,5,
5881,3,36,0,2,
5891,7,27,156,9,
5901,27,3,96,0,
591157,5,2,3,94,
5920,2,1,3,96,
5930,2,1,7,27,
5942,0,158,5,2,
595159,4,18,89,0,
59689,0,73,0,78,
5970,73,0,84,0,
59873,0,65,0,76,
5990,160,12,1,1022,
600161,5,91,3,9,
6010,162,12,1,39257,
602163,5,0,164,11,
6031,999,0,165,4,
6040,1,-1,3,10,
6050,162,3,13,0,
606162,3,32,0,162,
6073,33,0,166,12,
6081,42170,167,5,1,
6093,61,0,168,12,
6101,42285,169,5,0,
611170,11,1,142,0,
612171,4,36,69,0,
61388,0,67,0,76,
6140,65,0,77,0,
61565,0,84,0,73,
6160,79,0,78,0,
61795,0,69,0,81,
6180,85,0,65,0,
61976,0,83,0,1,
620-1,172,11,1,180,
6210,173,4,22,69,
6220,88,0,67,0,
62376,0,65,0,77,
6240,65,0,84,0,
62573,0,79,0,78,
6260,1,-1,3,34,
6270,174,12,1,42411,
628175,5,0,176,11,
6291,925,0,165,1,
630-1,3,37,0,177,
63112,1,40481,178,5,
6321,3,61,0,179,
63312,1,40596,180,5,
6340,181,11,1,40,
6350,182,4,28,80,
6360,69,0,82,0,
63767,0,69,0,78,
6380,84,0,95,0,
63969,0,81,0,85,
6400,65,0,76,0,
64183,0,1,-1,183,
64211,1,101,0,184,
6434,14,80,0,69,
6440,82,0,67,0,
64569,0,78,0,84,
6460,1,-1,3,38,
6470,185,12,1,40722,
648186,5,1,3,38,
6490,187,12,1,40822,
650188,5,0,189,11,
6511,185,0,190,4,
65214,65,0,77,0,
65380,0,95,0,65,
6540,77,0,80,0,
6551,-1,191,11,1,
656160,0,192,4,6,
65765,0,77,0,80,
6580,1,-1,3,40,
6590,193,12,1,39994,
660194,5,0,195,11,
6611,71,0,196,4,
66220,76,0,69,0,
66370,0,84,0,95,
6640,80,0,65,0,
66582,0,69,0,78,
6660,1,-1,3,41,
6670,197,12,1,40358,
668198,5,0,199,11,
6691,76,0,200,4,
67022,82,0,73,0,
67171,0,72,0,84,
6720,95,0,80,0,
67365,0,82,0,69,
6740,78,0,1,-1,
6753,42,0,201,12,
6761,40963,202,5,1,
6773,61,0,203,12,
6781,41078,204,5,0,
679205,11,1,28,0,
680206,4,22,83,0,
68184,0,65,0,82,
6820,95,0,69,0,
68381,0,85,0,65,
6840,76,0,83,0,
6851,-1,207,11,1,
68691,0,208,4,8,
68783,0,84,0,65,
6880,82,0,1,-1,
6893,43,0,209,12,
6901,43859,210,5,2,
6913,61,0,211,12,
6921,43974,212,5,0,
693213,11,1,16,0,
694214,4,22,80,0,
69576,0,85,0,83,
6960,95,0,69,0,
69781,0,85,0,65,
6980,76,0,83,0,
6991,-1,3,43,0,
700215,12,1,44096,216,
7015,0,217,11,1,
7022,0,218,4,18,
70373,0,78,0,67,
7040,82,0,69,0,
70577,0,69,0,78,
7060,84,0,1,-1,
707219,11,1,81,0,
708220,4,8,80,0,
70976,0,85,0,83,
7100,1,-1,3,44,
7110,221,12,1,41204,
712222,5,0,223,11,
7131,61,0,224,4,
71410,67,0,79,0,
71577,0,77,0,65,
7160,1,-1,3,45,
7170,225,12,1,39389,
718226,5,2,3,45,
7190,227,12,1,39476,
720228,5,0,229,11,
7211,10,0,230,4,
72218,68,0,69,0,
72367,0,82,0,69,
7240,77,0,69,0,
72578,0,84,0,1,
726-1,3,61,0,231,
72712,1,39624,232,5,
7280,233,11,1,22,
7290,234,4,24,77,
7300,73,0,78,0,
73185,0,83,0,95,
7320,69,0,81,0,
73385,0,65,0,76,
7340,83,0,1,-1,
735235,11,1,86,0,
736236,4,10,77,0,
73773,0,78,0,85,
7380,83,0,1,-1,
7393,46,0,237,12,
7401,41325,238,5,14,
7413,48,0,239,12,
7421,38991,240,5,14,
7433,48,0,239,3,
74449,0,239,3,50,
7450,239,3,51,0,
746239,3,52,0,239,
7473,53,0,239,3,
74854,0,239,3,55,
7490,239,3,56,0,
750239,3,57,0,239,
7513,101,0,241,12,
7521,38454,242,5,12,
7533,43,0,243,12,
7541,38781,244,5,10,
7553,48,0,245,12,
7561,38516,246,5,12,
7573,48,0,245,3,
75849,0,245,3,50,
7590,245,3,51,0,
760245,3,52,0,245,
7613,53,0,245,3,
76254,0,245,3,55,
7630,245,3,56,0,
764245,3,57,0,245,
7653,102,0,247,12,
7661,38522,248,5,0,
767249,11,1,866,0,
768250,4,28,70,0,
76976,0,79,0,65,
7700,84,0,95,0,
77167,0,79,0,78,
7720,83,0,84,0,
77365,0,78,0,84,
7740,1,-1,3,70,
7750,247,251,11,1,
776866,0,250,1,-1,
7773,49,0,245,3,
77850,0,245,3,51,
7790,245,3,52,0,
780245,3,53,0,245,
7813,54,0,245,3,
78255,0,245,3,56,
7830,245,3,57,0,
784245,0,165,1,-1,
7853,45,0,243,3,
78648,0,245,3,49,
7870,245,3,50,0,
788245,3,51,0,245,
7893,52,0,245,3,
79053,0,245,3,54,
7910,245,3,55,0,
792245,3,56,0,245,
7933,57,0,245,0,
794165,1,-1,3,102,
7950,247,3,69,0,
796241,3,70,0,247,
797252,11,1,866,0,
798250,1,-1,3,49,
7990,239,3,50,0,
800239,3,51,0,239,
8013,52,0,239,3,
80253,0,239,3,54,
8030,239,3,55,0,
804239,3,56,0,239,
8053,57,0,239,3,
806101,0,241,3,102,
8070,247,3,69,0,
808241,3,70,0,247,
809253,11,1,111,0,
810254,4,12,80,0,
81169,0,82,0,73,
8120,79,0,68,0,
8131,-1,3,47,0,
814255,12,1,41446,256,
8155,2,3,47,0,
816257,12,1,41550,258,
8175,118,3,1,0,
818259,12,1,41551,260,
8195,118,3,1,0,
820259,3,9,0,259,
8213,96,33,259,3,
82213,0,259,3,0,
8233,259,3,32,0,
824259,3,33,0,259,
8253,34,0,259,3,
82635,0,259,3,36,
8270,259,3,37,0,
828259,3,38,0,259,
8293,40,0,259,3,
83041,0,259,3,42,
8310,259,3,43,0,
832259,3,44,0,259,
8333,45,0,259,3,
83446,0,259,3,47,
8350,259,3,3,9,
836259,3,49,0,259,
8373,50,0,259,3,
83848,0,259,3,52,
8390,259,3,53,0,
840259,3,51,0,259,
8413,55,0,259,3,
84256,0,259,3,54,
8430,259,3,59,0,
844259,3,57,0,259,
8453,61,0,259,3,
84662,0,259,3,60,
8470,259,3,64,0,
848259,3,65,0,259,
8493,66,0,259,3,
85067,0,259,3,68,
8510,259,3,69,0,
852259,3,70,0,259,
8533,71,0,259,3,
85472,0,259,3,73,
8550,259,3,74,0,
856259,3,75,0,259,
8573,76,0,259,3,
85877,0,259,3,78,
8590,259,3,79,0,
860259,3,80,0,259,
8613,81,0,259,3,
86282,0,259,3,83,
8630,259,3,84,0,
864259,3,85,0,259,
8653,86,0,259,3,
86687,0,259,3,88,
8670,259,3,89,0,
868259,3,90,0,259,
8693,91,0,259,3,
87092,0,259,3,93,
8710,259,3,94,0,
872259,3,95,0,259,
8733,96,0,259,3,
87497,0,259,3,98,
8750,259,3,99,0,
876259,3,100,0,259,
8773,101,0,259,3,
878102,0,259,3,103,
8790,259,3,104,0,
880259,3,105,0,259,
8813,106,0,259,3,
882107,0,259,3,15,
8837,259,3,109,0,
884259,3,110,0,259,
8853,111,0,259,3,
886112,0,259,3,113,
8870,259,3,114,0,
888259,3,115,0,259,
8893,116,0,259,3,
890117,0,259,3,118,
8910,259,3,119,0,
892259,3,120,0,259,
8933,121,0,259,3,
894122,0,259,3,108,
8950,259,3,124,0,
896259,3,125,0,259,
8973,96,6,259,3,
898123,0,259,3,126,
8990,259,3,58,15,
900259,3,59,15,259,
9013,136,4,259,3,
902160,0,259,3,170,
9030,259,3,171,0,
904259,3,172,0,259,
9053,173,0,259,3,
906178,0,259,3,176,
9072,259,3,187,0,
908259,3,187,1,259,
9093,192,0,259,3,
91041,32,259,3,197,
9111,259,3,0,224,
912259,3,40,32,259,
9133,63,32,259,261,
91411,1,1003,0,165,
9151,-1,3,9,0,
916259,3,96,33,259,
9173,13,0,259,3,
9180,3,259,3,32,
9190,259,3,33,0,
920259,3,34,0,259,
9213,35,0,259,3,
92236,0,259,3,37,
9230,259,3,38,0,
924259,3,40,0,259,
9253,41,0,259,3,
92642,0,259,3,43,
9270,259,3,44,0,
928259,3,45,0,259,
9293,46,0,259,3,
93047,0,259,3,3,
9319,259,3,49,0,
932259,3,50,0,259,
9333,48,0,259,3,
93452,0,259,3,53,
9350,259,3,51,0,
936259,3,55,0,259,
9373,56,0,259,3,
93854,0,259,3,59,
9390,259,3,57,0,
940259,3,61,0,259,
9413,62,0,259,3,
94260,0,259,3,64,
9430,259,3,65,0,
944259,3,66,0,259,
9453,67,0,259,3,
94668,0,259,3,69,
9470,259,3,70,0,
948259,3,71,0,259,
9493,72,0,259,3,
95073,0,259,3,74,
9510,259,3,75,0,
952259,3,76,0,259,
9533,77,0,259,3,
95478,0,259,3,79,
9550,259,3,80,0,
956259,3,81,0,259,
9573,82,0,259,3,
95883,0,259,3,84,
9590,259,3,85,0,
960259,3,86,0,259,
9613,87,0,259,3,
96288,0,259,3,89,
9630,259,3,90,0,
964259,3,91,0,259,
9653,92,0,259,3,
96693,0,259,3,94,
9670,259,3,95,0,
968259,3,96,0,259,
9693,97,0,259,3,
97098,0,259,3,99,
9710,259,3,100,0,
972259,3,101,0,259,
9733,102,0,259,3,
974103,0,259,3,104,
9750,259,3,105,0,
976259,3,106,0,259,
9773,107,0,259,3,
97815,7,259,3,109,
9790,259,3,110,0,
980259,3,111,0,259,
9813,112,0,259,3,
982113,0,259,3,114,
9830,259,3,115,0,
984259,3,116,0,259,
9853,117,0,259,3,
986118,0,259,3,119,
9870,259,3,120,0,
988259,3,121,0,259,
9893,122,0,259,3,
990108,0,259,3,124,
9910,259,3,125,0,
992259,3,96,6,259,
9933,123,0,259,3,
994126,0,259,3,58,
99515,259,3,59,15,
996259,3,136,4,259,
9973,160,0,259,3,
998170,0,259,3,171,
9990,259,3,172,0,
1000259,3,173,0,259,
10013,178,0,259,3,
1002176,2,259,3,187,
10030,259,3,187,1,
1004259,3,192,0,259,
10053,41,32,259,3,
1006197,1,259,3,0,
1007224,259,3,40,32,
1008259,3,63,32,259,
1009262,11,1,1003,0,
1010165,1,-1,3,61,
10110,263,12,1,41801,
1012264,5,0,265,11,
10131,34,0,266,4,
101424,83,0,76,0,
101565,0,83,0,72,
10160,95,0,69,0,
101781,0,85,0,65,
10180,76,0,83,0,
10191,-1,267,11,1,
102096,0,268,4,10,
102183,0,76,0,65,
10220,83,0,72,0,
10231,-1,3,48,0,
1024269,12,1,38044,270,
10255,13,3,120,0,
1026271,12,1,38068,272,
10275,22,3,102,0,
1028273,12,1,38069,274,
10295,22,3,102,0,
1030273,3,48,0,273,
10313,49,0,273,3,
103250,0,273,3,51,
10330,273,3,52,0,
1034273,3,53,0,273,
10353,54,0,273,3,
103655,0,273,3,56,
10370,273,3,57,0,
1038273,3,97,0,273,
10393,98,0,273,3,
104099,0,273,3,100,
10410,273,3,101,0,
1042273,3,65,0,273,
10433,66,0,273,3,
104467,0,273,3,68,
10450,273,3,69,0,
1046273,3,70,0,273,
1047275,11,1,847,0,
1048276,4,40,72,0,
104969,0,88,0,95,
10500,73,0,78,0,
105184,0,69,0,71,
10520,69,0,82,0,
105395,0,67,0,79,
10540,78,0,83,0,
105584,0,65,0,78,
10560,84,0,1,-1,
10573,48,0,273,3,
105849,0,273,3,50,
10590,273,3,51,0,
1060273,3,52,0,273,
10613,53,0,273,3,
106254,0,273,3,55,
10630,273,3,56,0,
1064273,3,57,0,273,
10653,97,0,273,3,
106698,0,273,3,99,
10670,273,3,100,0,
1068273,3,101,0,273,
10693,65,0,273,3,
107066,0,273,3,67,
10710,273,3,68,0,
1072273,3,69,0,273,
10733,70,0,273,0,
1074165,1,-1,3,48,
10750,277,12,1,38346,
1076278,5,11,3,46,
10770,279,12,1,38449,
1078280,5,14,3,48,
10790,239,3,49,0,
1080239,3,50,0,239,
10813,51,0,239,3,
108252,0,239,3,53,
10830,239,3,54,0,
1084239,3,55,0,239,
10853,56,0,239,3,
108657,0,239,3,101,
10870,241,3,102,0,
1088247,3,69,0,241,
10893,70,0,247,281,
109011,1,866,0,250,
10911,-1,3,48,0,
1092277,3,49,0,277,
10933,50,0,277,3,
109451,0,277,3,52,
10950,277,3,53,0,
1096277,3,54,0,277,
10973,55,0,277,3,
109856,0,277,3,57,
10990,277,282,11,1,
1100841,0,283,4,32,
110173,0,78,0,84,
11020,69,0,71,0,
110369,0,82,0,95,
11040,67,0,79,0,
110578,0,83,0,84,
11060,65,0,78,0,
110784,0,1,-1,3,
110849,0,277,3,50,
11090,277,3,88,0,
1110271,3,52,0,277,
11113,53,0,277,3,
111251,0,277,3,55,
11130,277,3,56,0,
1114277,3,54,0,277,
11153,46,0,279,3,
111657,0,277,284,11,
11171,841,0,283,1,
1118-1,3,49,0,277,
11193,50,0,277,3,
112051,0,277,3,52,
11210,277,3,53,0,
1122277,3,54,0,277,
11233,55,0,277,3,
112456,0,277,3,57,
11250,277,3,59,0,
1126285,12,1,41928,286,
11275,0,287,11,1,
112846,0,288,4,18,
112983,0,69,0,77,
11300,73,0,67,0,
113179,0,76,0,79,
11320,78,0,1,-1,
11333,60,0,289,12,
11341,42896,290,5,2,
11353,60,0,291,12,
11361,43010,292,5,0,
1137293,11,1,197,0,
1138294,4,20,76,0,
113969,0,70,0,84,
11400,95,0,83,0,
114172,0,73,0,70,
11420,84,0,1,-1,
11433,61,0,295,12,
11441,43131,296,5,0,
1145297,11,1,148,0,
1146298,4,22,76,0,
114769,0,83,0,83,
11480,95,0,69,0,
114981,0,85,0,65,
11500,76,0,83,0,
11511,-1,299,11,1,
1152116,0,300,4,20,
115376,0,69,0,70,
11540,84,0,95,0,
115565,0,78,0,71,
11560,76,0,69,0,
11571,-1,3,61,0,
1158301,12,1,43257,302,
11595,1,3,61,0,
1160303,12,1,43372,304,
11615,0,305,11,1,
1162136,0,306,4,26,
116369,0,81,0,85,
11640,65,0,76,0,
116583,0,95,0,69,
11660,81,0,85,0,
116765,0,76,0,83,
11680,1,-1,307,11,
11691,66,0,308,4,
117012,69,0,81,0,
117185,0,65,0,76,
11720,83,0,1,-1,
11733,62,0,309,12,
11741,43498,310,5,2,
11753,61,0,311,12,
11761,43613,312,5,0,
1177313,11,1,154,0,
1178314,4,28,71,0,
117982,0,69,0,65,
11800,84,0,69,0,
118182,0,95,0,69,
11820,81,0,85,0,
118365,0,76,0,83,
11840,1,-1,3,62,
11850,315,12,1,43734,
1186316,5,0,317,11,
11871,203,0,318,4,
118822,82,0,73,0,
118971,0,72,0,84,
11900,95,0,83,0,
119172,0,73,0,70,
11920,84,0,1,-1,
1193319,11,1,121,0,
1194320,4,22,82,0,
119573,0,71,0,72,
11960,84,0,95,0,
119765,0,78,0,71,
11980,76,0,69,0,
11991,-1,3,64,0,
1200321,12,1,42049,322,
12015,0,323,11,1,
1202106,0,324,4,4,
120365,0,84,0,1,
1204-1,3,65,0,325,
120512,1,1023,326,5,
120663,3,109,0,327,
120712,1,1024,328,5,
120863,3,109,0,327,
12093,110,0,327,3,
1210111,0,327,3,112,
12110,327,3,113,0,
1212327,3,114,0,327,
12133,115,0,327,3,
1214116,0,327,3,117,
12150,327,3,118,0,
1216327,3,119,0,327,
12173,120,0,327,3,
1218121,0,327,3,122,
12190,327,3,48,0,
1220327,3,49,0,327,
12213,50,0,327,3,
122251,0,327,3,52,
12230,327,3,53,0,
1224327,3,54,0,327,
12253,55,0,327,3,
122656,0,327,3,57,
12270,327,3,65,0,
1228327,3,66,0,327,
12293,67,0,327,3,
123068,0,327,3,69,
12310,327,3,70,0,
1232327,3,71,0,327,
12333,72,0,327,3,
123473,0,327,3,74,
12350,327,3,75,0,
1236327,3,76,0,327,
12373,77,0,327,3,
123878,0,327,3,79,
12390,327,3,80,0,
1240327,3,81,0,327,
12413,82,0,327,3,
124283,0,327,3,84,
12430,327,3,85,0,
1244327,3,86,0,327,
12453,87,0,327,3,
124688,0,327,3,89,
12470,327,3,90,0,
1248327,3,95,0,327,
12493,97,0,327,3,
125098,0,327,3,99,
12510,327,3,100,0,
1252327,3,101,0,327,
12533,102,0,327,3,
1254103,0,327,3,104,
12550,327,3,105,0,
1256327,3,106,0,327,
12573,107,0,327,3,
1258108,0,327,329,11,
12591,829,0,330,4,
126010,73,0,68,0,
126169,0,78,0,84,
12620,1,-1,3,110,
12630,327,3,111,0,
1264327,3,112,0,327,
12653,113,0,327,3,
1266114,0,327,3,115,
12670,327,3,116,0,
1268327,3,117,0,327,
12693,118,0,327,3,
1270119,0,327,3,120,
12710,327,3,121,0,
1272327,3,122,0,327,
12733,48,0,327,3,
127449,0,327,3,50,
12750,327,3,51,0,
1276327,3,52,0,327,
12773,53,0,327,3,
127854,0,327,3,55,
12790,327,3,56,0,
1280327,3,57,0,327,
12813,65,0,327,3,
128266,0,327,3,67,
12830,327,3,68,0,
1284327,3,69,0,327,
12853,70,0,327,3,
128671,0,327,3,72,
12870,327,3,73,0,
1288327,3,74,0,327,
12893,75,0,327,3,
129076,0,327,3,77,
12910,327,3,78,0,
1292327,3,79,0,327,
12933,80,0,327,3,
129481,0,327,3,82,
12950,327,3,83,0,
1296327,3,84,0,327,
12973,85,0,327,3,
129886,0,327,3,87,
12990,327,3,88,0,
1300327,3,89,0,327,
13013,90,0,327,3,
130295,0,327,3,97,
13030,327,3,98,0,
1304327,3,99,0,327,
13053,100,0,327,3,
1306101,0,327,3,102,
13070,327,3,103,0,
1308327,3,104,0,327,
13093,105,0,327,3,
1310106,0,327,3,107,
13110,327,3,108,0,
1312327,331,11,1,829,
13130,330,1,-1,3,
131466,0,325,3,67,
13150,325,3,68,0,
1316325,3,69,0,325,
13173,70,0,325,3,
131871,0,325,3,72,
13190,325,3,73,0,
1320325,3,74,0,325,
13213,75,0,325,3,
132276,0,325,3,77,
13230,325,3,78,0,
1324325,3,79,0,325,
13253,80,0,325,3,
132681,0,325,3,82,
13270,325,3,83,0,
1328325,3,84,0,325,
13293,85,0,325,3,
133086,0,325,3,87,
13310,325,3,88,0,
1332325,3,89,0,325,
13333,90,0,325,3,
133491,0,332,12,1,
133539872,333,5,0,334,
133611,1,126,0,335,
13374,24,76,0,69,
13380,70,0,84,0,
133995,0,66,0,82,
13400,65,0,67,0,
134175,0,69,0,84,
13420,1,-1,3,93,
13430,336,12,1,40237,
1344337,5,0,338,11,
13451,131,0,339,4,
134626,82,0,73,0,
134771,0,72,0,84,
13480,95,0,66,0,
134982,0,65,0,67,
13500,75,0,69,0,
135184,0,1,-1,3,
135294,0,340,12,1,
135344221,341,5,0,342,
135411,1,170,0,343,
13554,10,67,0,65,
13560,82,0,69,0,
135784,0,1,-1,3,
135895,0,325,3,97,
13590,344,12,1,20025,
1360345,5,63,3,109,
13610,327,3,110,0,
1362327,3,111,0,327,
13633,112,0,327,3,
1364113,0,327,3,114,
13650,327,3,115,0,
1366327,3,116,0,346,
136712,1,20060,347,5,
136863,3,109,0,327,
13693,110,0,327,3,
1370111,0,327,3,112,
13710,327,3,113,0,
1372327,3,114,0,327,
13733,115,0,327,3,
1374116,0,348,12,1,
137520095,349,5,63,3,
1376109,0,327,3,110,
13770,327,3,111,0,
1378327,3,112,0,327,
13793,113,0,327,3,
1380114,0,327,3,115,
13810,327,3,116,0,
1382327,3,117,0,327,
13833,118,0,327,3,
1384119,0,327,3,120,
13850,327,3,121,0,
1386327,3,122,0,327,
13873,48,0,327,3,
138849,0,327,3,50,
13890,327,3,51,0,
1390327,3,52,0,327,
13913,53,0,327,3,
139254,0,327,3,55,
13930,327,3,56,0,
1394327,3,57,0,327,
13953,65,0,327,3,
139666,0,327,3,67,
13970,327,3,68,0,
1398327,3,69,0,327,
13993,70,0,327,3,
140071,0,327,3,72,
14010,327,3,73,0,
1402327,3,74,0,327,
14033,75,0,327,3,
140476,0,327,3,77,
14050,327,3,78,0,
1406327,3,79,0,327,
14073,80,0,327,3,
140881,0,327,3,82,
14090,327,3,83,0,
1410327,3,84,0,327,
14113,85,0,327,3,
141286,0,327,3,87,
14130,327,3,88,0,
1414327,3,89,0,327,
14153,90,0,327,3,
141695,0,327,3,97,
14170,350,12,1,20138,
1418351,5,63,3,109,
14190,327,3,110,0,
1420327,3,111,0,327,
14213,112,0,327,3,
1422113,0,327,3,114,
14230,327,3,115,0,
1424327,3,116,0,327,
14253,117,0,327,3,
1426118,0,327,3,119,
14270,327,3,120,0,
1428327,3,121,0,327,
14293,122,0,327,3,
143048,0,327,3,49,
14310,327,3,50,0,
1432327,3,51,0,327,
14333,52,0,327,3,
143453,0,327,3,54,
14350,327,3,55,0,
1436327,3,56,0,327,
14373,57,0,327,3,
143865,0,327,3,66,
14390,327,3,67,0,
1440327,3,68,0,327,
14413,69,0,327,3,
144270,0,327,3,71,
14430,327,3,72,0,
1444327,3,73,0,327,
14453,74,0,327,3,
144675,0,327,3,76,
14470,327,3,77,0,
1448327,3,78,0,327,
14493,79,0,327,3,
145080,0,327,3,81,
14510,327,3,82,0,
1452327,3,83,0,327,
14533,84,0,327,3,
145485,0,327,3,86,
14550,327,3,87,0,
1456327,3,88,0,327,
14573,89,0,327,3,
145890,0,327,3,95,
14590,327,3,97,0,
1460327,3,98,0,327,
14613,99,0,352,12,
14621,20183,353,5,63,
14633,109,0,327,3,
1464110,0,327,3,111,
14650,327,3,112,0,
1466327,3,113,0,327,
14673,114,0,327,3,
1468115,0,327,3,116,
14690,327,3,117,0,
1470327,3,118,0,327,
14713,119,0,327,3,
1472120,0,327,3,121,
14730,327,3,122,0,
1474327,3,48,0,327,
14753,49,0,327,3,
147650,0,327,3,51,
14770,327,3,52,0,
1478327,3,53,0,327,
14793,54,0,327,3,
148055,0,327,3,56,
14810,327,3,57,0,
1482327,3,65,0,327,
14833,66,0,327,3,
148467,0,327,3,68,
14850,327,3,69,0,
1486327,3,70,0,327,
14873,71,0,327,3,
148872,0,327,3,73,
14890,327,3,74,0,
1490327,3,75,0,327,
14913,76,0,327,3,
149277,0,327,3,78,
14930,327,3,79,0,
1494327,3,80,0,327,
14953,81,0,327,3,
149682,0,327,3,83,
14970,327,3,84,0,
1498327,3,85,0,327,
14993,86,0,327,3,
150087,0,327,3,88,
15010,327,3,89,0,
1502327,3,90,0,327,
15033,95,0,327,3,
150497,0,327,3,98,
15050,327,3,99,0,
1506327,3,100,0,327,
15073,101,0,327,3,
1508102,0,327,3,103,
15090,327,3,104,0,
1510354,12,1,20233,355,
15115,63,3,109,0,
1512327,3,110,0,327,
15133,111,0,327,3,
1514112,0,327,3,113,
15150,327,3,114,0,
1516327,3,115,0,327,
15173,116,0,327,3,
1518117,0,327,3,118,
15190,327,3,119,0,
1520327,3,120,0,327,
15213,121,0,327,3,
1522122,0,327,3,48,
15230,327,3,49,0,
1524327,3,50,0,327,
15253,51,0,327,3,
152652,0,327,3,53,
15270,327,3,54,0,
1528327,3,55,0,327,
15293,56,0,327,3,
153057,0,327,3,65,
15310,327,3,66,0,
1532327,3,67,0,327,
15333,68,0,327,3,
153469,0,327,3,70,
15350,327,3,71,0,
1536327,3,72,0,327,
15373,73,0,327,3,
153874,0,327,3,75,
15390,327,3,76,0,
1540327,3,77,0,327,
15413,78,0,327,3,
154279,0,327,3,80,
15430,327,3,81,0,
1544327,3,82,0,327,
15453,83,0,327,3,
154684,0,327,3,85,
15470,327,3,86,0,
1548327,3,87,0,327,
15493,88,0,327,3,
155089,0,327,3,90,
15510,327,3,95,0,
1552327,3,97,0,327,
15533,98,0,327,3,
155499,0,327,3,100,
15550,327,3,101,0,
1556327,3,102,0,327,
15573,103,0,327,3,
1558104,0,327,3,105,
15590,327,3,106,0,
1560327,3,107,0,327,
15613,108,0,327,356,
156211,1,380,0,357,
15634,24,65,0,84,
15640,84,0,65,0,
156567,0,72,0,95,
15660,69,0,86,0,
156769,0,78,0,84,
15680,1,-1,3,105,
15690,327,3,106,0,
1570327,3,107,0,327,
15713,108,0,327,358,
157211,1,829,0,330,
15731,-1,3,100,0,
1574327,3,101,0,327,
15753,102,0,327,3,
1576103,0,327,3,104,
15770,327,3,105,0,
1578327,3,106,0,327,
15793,107,0,327,3,
1580108,0,327,359,11,
15811,829,0,330,1,
1582-1,3,98,0,327,
15833,99,0,327,3,
1584100,0,327,3,101,
15850,327,3,102,0,
1586327,3,103,0,327,
15873,104,0,327,3,
1588105,0,327,3,106,
15890,327,3,107,0,
1590327,3,108,0,327,
1591360,11,1,829,0,
1592330,1,-1,3,117,
15930,327,3,118,0,
1594327,3,119,0,327,
15953,120,0,327,3,
1596121,0,327,3,122,
15970,327,3,48,0,
1598327,3,49,0,327,
15993,50,0,327,3,
160051,0,327,3,52,
16010,327,3,53,0,
1602327,3,54,0,327,
16033,55,0,327,3,
160456,0,327,3,57,
16050,327,3,65,0,
1606327,3,66,0,327,
16073,67,0,327,3,
160868,0,327,3,69,
16090,327,3,70,0,
1610327,3,71,0,327,
16113,72,0,327,3,
161273,0,327,3,74,
16130,327,3,75,0,
1614327,3,76,0,327,
16153,77,0,327,3,
161678,0,327,3,79,
16170,327,3,80,0,
1618327,3,81,0,327,
16193,82,0,327,3,
162083,0,327,3,84,
16210,327,3,85,0,
1622327,3,86,0,327,
16233,87,0,327,3,
162488,0,327,3,89,
16250,327,3,90,0,
1626327,3,95,0,361,
162712,1,20626,362,5,
162863,3,109,0,327,
16293,110,0,327,3,
1630111,0,327,3,112,
16310,327,3,113,0,
1632327,3,114,0,363,
163312,1,20659,364,5,
163463,3,109,0,327,
16353,110,0,327,3,
1636111,0,365,12,1,
163720689,366,5,63,3,
1638109,0,327,3,110,
16390,327,3,111,0,
1640327,3,112,0,327,
16413,113,0,327,3,
1642114,0,327,3,115,
16430,327,3,116,0,
1644367,12,1,20724,368,
16455,63,3,109,0,
1646327,3,110,0,327,
16473,111,0,327,3,
1648112,0,327,3,113,
16490,327,3,114,0,
1650327,3,115,0,327,
16513,116,0,327,3,
1652117,0,327,3,118,
16530,327,3,119,0,
1654327,3,120,0,327,
16553,121,0,327,3,
1656122,0,327,3,48,
16570,327,3,49,0,
1658327,3,50,0,327,
16593,51,0,327,3,
166052,0,327,3,53,
16610,327,3,54,0,
1662327,3,55,0,327,
16633,56,0,327,3,
166457,0,327,3,65,
16650,327,3,66,0,
1666327,3,67,0,327,
16673,68,0,327,3,
166869,0,327,3,70,
16690,327,3,71,0,
1670327,3,72,0,327,
16713,73,0,327,3,
167274,0,327,3,75,
16730,327,3,76,0,
1674327,3,77,0,327,
16753,78,0,327,3,
167679,0,327,3,80,
16770,327,3,81,0,
1678327,3,82,0,327,
16793,83,0,327,3,
168084,0,327,3,85,
16810,327,3,86,0,
1682327,3,87,0,327,
16833,88,0,327,3,
168489,0,327,3,90,
16850,327,3,95,0,
1686369,12,1,20810,370,
16875,63,3,109,0,
1688327,3,110,0,327,
16893,111,0,327,3,
1690112,0,327,3,113,
16910,327,3,114,0,
1692327,3,115,0,327,
16933,116,0,371,12,
16941,20845,372,5,63,
16953,109,0,327,3,
1696110,0,327,3,111,
16970,327,3,112,0,
1698327,3,113,0,327,
16993,114,0,327,3,
1700115,0,327,3,116,
17010,327,3,117,0,
1702327,3,118,0,327,
17033,119,0,327,3,
1704120,0,327,3,121,
17050,327,3,122,0,
1706327,3,48,0,327,
17073,49,0,327,3,
170850,0,327,3,51,
17090,327,3,52,0,
1710327,3,53,0,327,
17113,54,0,327,3,
171255,0,327,3,56,
17130,327,3,57,0,
1714327,3,65,0,327,
17153,66,0,327,3,
171667,0,327,3,68,
17170,327,3,69,0,
1718327,3,70,0,327,
17193,71,0,327,3,
172072,0,327,3,73,
17210,327,3,74,0,
1722327,3,75,0,327,
17233,76,0,327,3,
172477,0,327,3,78,
17250,327,3,79,0,
1726327,3,80,0,327,
17273,81,0,327,3,
172882,0,327,3,83,
17290,327,3,84,0,
1730327,3,85,0,327,
17313,86,0,327,3,
173287,0,327,3,88,
17330,327,3,89,0,
1734327,3,90,0,327,
17353,95,0,327,3,
173697,0,373,12,1,
173720888,374,5,63,3,
1738109,0,327,3,110,
17390,327,3,111,0,
1740327,3,112,0,327,
17413,113,0,327,3,
1742114,0,375,12,1,
174320921,376,5,63,3,
1744109,0,327,3,110,
17450,327,3,111,0,
1746327,3,112,0,327,
17473,113,0,327,3,
1748114,0,327,3,115,
17490,327,3,116,0,
1750327,3,117,0,327,
17513,118,0,327,3,
1752119,0,327,3,120,
17530,327,3,121,0,
1754327,3,122,0,327,
17553,48,0,327,3,
175649,0,327,3,50,
17570,327,3,51,0,
1758327,3,52,0,327,
17593,53,0,327,3,
176054,0,327,3,55,
17610,327,3,56,0,
1762327,3,57,0,327,
17633,65,0,327,3,
176466,0,327,3,67,
17650,327,3,68,0,
1766327,3,69,0,327,
17673,70,0,327,3,
176871,0,327,3,72,
17690,327,3,73,0,
1770327,3,74,0,327,
17713,75,0,327,3,
177276,0,327,3,77,
17730,327,3,78,0,
1774327,3,79,0,327,
17753,80,0,327,3,
177681,0,327,3,82,
17770,327,3,83,0,
1778327,3,84,0,327,
17793,85,0,327,3,
178086,0,327,3,87,
17810,327,3,88,0,
1782327,3,89,0,327,
17833,90,0,327,3,
178495,0,327,3,97,
17850,327,3,98,0,
1786327,3,99,0,327,
17873,100,0,327,3,
1788101,0,327,3,102,
17890,327,3,103,0,
1790377,12,1,20970,378,
17915,63,3,109,0,
1792327,3,110,0,327,
17933,111,0,327,3,
1794112,0,327,3,113,
17950,327,3,114,0,
1796327,3,115,0,327,
17973,116,0,327,3,
1798117,0,327,3,118,
17990,327,3,119,0,
1800327,3,120,0,327,
18013,121,0,327,3,
1802122,0,327,3,48,
18030,327,3,49,0,
1804327,3,50,0,327,
18053,51,0,327,3,
180652,0,327,3,53,
18070,327,3,54,0,
1808327,3,55,0,327,
18093,56,0,327,3,
181057,0,327,3,65,
18110,327,3,66,0,
1812327,3,67,0,327,
18133,68,0,327,3,
181469,0,327,3,70,
18150,327,3,71,0,
1816327,3,72,0,327,
18173,73,0,327,3,
181874,0,327,3,75,
18190,327,3,76,0,
1820327,3,77,0,327,
18213,78,0,327,3,
182279,0,327,3,80,
18230,327,3,81,0,
1824327,3,82,0,327,
18253,83,0,327,3,
182684,0,327,3,85,
18270,327,3,86,0,
1828327,3,87,0,327,
18293,88,0,327,3,
183089,0,327,3,90,
18310,327,3,95,0,
1832327,3,97,0,327,
18333,98,0,327,3,
183499,0,327,3,100,
18350,327,3,101,0,
1836379,12,1,21017,380,
18375,63,3,109,0,
1838327,3,110,0,327,
18393,111,0,327,3,
1840112,0,327,3,113,
18410,327,3,114,0,
1842327,3,115,0,327,
18433,116,0,381,12,
18441,21052,382,5,63,
18453,109,0,327,3,
1846110,0,327,3,111,
18470,327,3,112,0,
1848327,3,113,0,327,
18493,114,0,327,3,
1850115,0,327,3,116,
18510,327,3,117,0,
1852327,3,118,0,327,
18533,119,0,327,3,
1854120,0,327,3,121,
18550,327,3,122,0,
1856327,3,48,0,327,
18573,49,0,327,3,
185850,0,327,3,51,
18590,327,3,52,0,
1860327,3,53,0,327,
18613,54,0,327,3,
186255,0,327,3,56,
18630,327,3,57,0,
1864327,3,65,0,327,
18653,66,0,327,3,
186667,0,327,3,68,
18670,327,3,69,0,
1868327,3,70,0,327,
18693,71,0,327,3,
187072,0,327,3,73,
18710,327,3,74,0,
1872327,3,75,0,327,
18733,76,0,327,3,
187477,0,327,3,78,
18750,327,3,79,0,
1876327,3,80,0,327,
18773,81,0,327,3,
187882,0,327,3,83,
18790,327,3,84,0,
1880327,3,85,0,327,
18813,86,0,327,3,
188287,0,327,3,88,
18830,327,3,89,0,
1884327,3,90,0,327,
18853,95,0,327,3,
188697,0,327,3,98,
18870,327,3,99,0,
1888327,3,100,0,327,
18893,101,0,327,3,
1890102,0,327,3,103,
18910,327,3,104,0,
1892327,3,105,0,327,
18933,106,0,327,3,
1894107,0,327,3,108,
18950,327,383,11,1,
1896350,0,384,4,38,
189765,0,84,0,95,
18980,82,0,79,0,
189984,0,95,0,84,
19000,65,0,82,0,
190171,0,69,0,84,
19020,95,0,69,0,
190386,0,69,0,78,
19040,84,0,1,-1,
19053,117,0,327,3,
1906118,0,327,3,119,
19070,327,3,120,0,
1908327,3,121,0,327,
19093,122,0,327,3,
191048,0,327,3,49,
19110,327,3,50,0,
1912327,3,51,0,327,
19133,52,0,327,3,
191453,0,327,3,54,
19150,327,3,55,0,
1916327,3,56,0,327,
19173,57,0,327,3,
191865,0,327,3,66,
19190,327,3,67,0,
1920327,3,68,0,327,
19213,69,0,327,3,
192270,0,327,3,71,
19230,327,3,72,0,
1924327,3,73,0,327,
19253,74,0,327,3,
192675,0,327,3,76,
19270,327,3,77,0,
1928327,3,78,0,327,
19293,79,0,327,3,
193080,0,327,3,81,
19310,327,3,82,0,
1932327,3,83,0,327,
19333,84,0,327,3,
193485,0,327,3,86,
19350,327,3,87,0,
1936327,3,88,0,327,
19373,89,0,327,3,
193890,0,327,3,95,
19390,327,3,97,0,
1940327,3,98,0,327,
19413,99,0,327,3,
1942100,0,327,3,101,
19430,327,3,102,0,
1944327,3,103,0,327,
19453,104,0,327,3,
1946105,0,327,3,106,
19470,327,3,107,0,
1948327,3,108,0,327,
1949385,11,1,829,0,
1950330,1,-1,3,102,
19510,327,3,103,0,
1952327,3,104,0,327,
19533,105,0,327,3,
1954106,0,327,3,107,
19550,327,3,108,0,
1956327,386,11,1,829,
19570,330,1,-1,3,
1958104,0,327,3,105,
19590,327,3,106,0,
1960327,3,107,0,327,
19613,108,0,327,387,
196211,1,829,0,330,
19631,-1,3,115,0,
1964327,3,116,0,327,
19653,117,0,327,3,
1966118,0,327,3,119,
19670,327,3,120,0,
1968327,3,121,0,327,
19693,122,0,327,3,
197048,0,327,3,49,
19710,327,3,50,0,
1972327,3,51,0,327,
19733,52,0,327,3,
197453,0,327,3,54,
19750,327,3,55,0,
1976327,3,56,0,327,
19773,57,0,327,3,
197865,0,327,3,66,
19790,327,3,67,0,
1980327,3,68,0,327,
19813,69,0,327,3,
198270,0,327,3,71,
19830,327,3,72,0,
1984327,3,73,0,327,
19853,74,0,327,3,
198675,0,327,3,76,
19870,327,3,77,0,
1988327,3,78,0,327,
19893,79,0,327,3,
199080,0,327,3,81,
19910,327,3,82,0,
1992327,3,83,0,327,
19933,84,0,327,3,
199485,0,327,3,86,
19950,327,3,87,0,
1996327,3,88,0,327,
19973,89,0,327,3,
199890,0,327,3,95,
19990,327,3,97,0,
2000327,3,98,0,327,
20013,99,0,327,3,
2002100,0,327,3,101,
20030,327,3,102,0,
2004327,3,103,0,327,
20053,104,0,327,3,
2006105,0,327,3,106,
20070,327,3,107,0,
2008327,3,108,0,327,
2009388,11,1,829,0,
2010330,1,-1,3,98,
20110,327,3,99,0,
2012327,3,100,0,327,
20133,101,0,327,3,
2014102,0,327,3,103,
20150,327,3,104,0,
2016327,3,105,0,327,
20173,106,0,327,3,
2018107,0,327,3,108,
20190,327,389,11,1,
2020829,0,330,1,-1,
20213,117,0,327,3,
2022118,0,327,3,119,
20230,327,3,120,0,
2024327,3,121,0,327,
20253,122,0,327,3,
202648,0,327,3,49,
20270,327,3,50,0,
2028327,3,51,0,327,
20293,52,0,327,3,
203053,0,327,3,54,
20310,327,3,55,0,
2032327,3,56,0,327,
20333,57,0,327,3,
203465,0,327,3,66,
20350,327,3,67,0,
2036327,3,68,0,327,
20373,69,0,327,3,
203870,0,327,3,71,
20390,327,3,72,0,
2040327,3,73,0,327,
20413,74,0,327,3,
204275,0,327,3,76,
20430,327,3,77,0,
2044327,3,78,0,327,
20453,79,0,327,3,
204680,0,327,3,81,
20470,327,3,82,0,
2048327,3,83,0,327,
20493,84,0,327,3,
205085,0,327,3,86,
20510,327,3,87,0,
2052327,3,88,0,327,
20533,89,0,327,3,
205490,0,327,3,95,
20550,327,3,97,0,
2056327,3,98,0,327,
20573,99,0,327,3,
2058100,0,327,3,101,
20590,327,3,102,0,
2060327,3,103,0,327,
20613,104,0,327,3,
2062105,0,327,3,106,
20630,327,3,107,0,
2064327,3,108,0,327,
2065390,11,1,829,0,
2066330,1,-1,3,97,
20670,327,3,98,0,
2068327,3,99,0,327,
20693,100,0,327,3,
2070101,0,327,3,102,
20710,327,3,103,0,
2072327,3,104,0,327,
20733,105,0,327,3,
2074106,0,327,3,107,
20750,327,3,108,0,
2076327,391,11,1,829,
20770,330,1,-1,3,
2078117,0,327,3,118,
20790,327,3,119,0,
2080327,3,120,0,327,
20813,121,0,327,3,
2082122,0,327,3,48,
20830,327,3,49,0,
2084327,3,50,0,327,
20853,51,0,327,3,
208652,0,327,3,53,
20870,327,3,54,0,
2088327,3,55,0,327,
20893,56,0,327,3,
209057,0,327,3,65,
20910,327,3,66,0,
2092327,3,67,0,327,
20933,68,0,327,3,
209469,0,327,3,70,
20950,327,3,71,0,
2096327,3,72,0,327,
20973,73,0,327,3,
209874,0,327,3,75,
20990,327,3,76,0,
2100327,3,77,0,327,
21013,78,0,327,3,
210279,0,327,3,80,
21030,327,3,81,0,
2104327,3,82,0,327,
21053,83,0,327,3,
210684,0,327,3,85,
21070,327,3,86,0,
2108327,3,87,0,327,
21093,88,0,327,3,
211089,0,327,3,90,
21110,327,3,95,0,
2112327,3,97,0,327,
21133,98,0,327,3,
211499,0,327,3,100,
21150,327,3,101,0,
2116327,3,102,0,327,
21173,103,0,327,3,
2118104,0,327,3,105,
21190,327,3,106,0,
2120327,3,107,0,327,
21213,108,0,327,392,
212211,1,829,0,330,
21231,-1,3,112,0,
2124327,3,113,0,327,
21253,114,0,327,3,
2126115,0,327,3,116,
21270,327,3,117,0,
2128327,3,118,0,327,
21293,119,0,327,3,
2130120,0,327,3,121,
21310,327,3,122,0,
2132327,3,48,0,327,
21333,49,0,327,3,
213450,0,327,3,51,
21350,327,3,52,0,
2136327,3,53,0,327,
21373,54,0,327,3,
213855,0,327,3,56,
21390,327,3,57,0,
2140327,3,65,0,327,
21413,66,0,327,3,
214267,0,327,3,68,
21430,327,3,69,0,
2144327,3,70,0,327,
21453,71,0,327,3,
214672,0,327,3,73,
21470,327,3,74,0,
2148327,3,75,0,327,
21493,76,0,327,3,
215077,0,327,3,78,
21510,327,3,79,0,
2152327,3,80,0,327,
21533,81,0,327,3,
215482,0,327,3,83,
21550,327,3,84,0,
2156327,3,85,0,327,
21573,86,0,327,3,
215887,0,327,3,88,
21590,327,3,89,0,
2160327,3,90,0,327,
21613,95,0,327,3,
216297,0,327,3,98,
21630,327,3,99,0,
2164327,3,100,0,327,
21653,101,0,327,3,
2166102,0,327,3,103,
21670,327,3,104,0,
2168327,3,105,0,327,
21693,106,0,327,3,
2170107,0,327,3,108,
21710,327,393,11,1,
2172829,0,330,1,-1,
21733,115,0,327,3,
2174116,0,394,12,1,
217521861,395,5,63,3,
2176109,0,327,3,110,
21770,327,3,111,0,
2178327,3,112,0,327,
21793,113,0,327,3,
2180114,0,327,3,115,
21810,327,3,116,0,
2182327,3,117,0,327,
21833,118,0,327,3,
2184119,0,327,3,120,
21850,327,3,121,0,
2186327,3,122,0,327,
21873,48,0,327,3,
218849,0,327,3,50,
21890,327,3,51,0,
2190327,3,52,0,327,
21913,53,0,327,3,
219254,0,327,3,55,
21930,327,3,56,0,
2194327,3,57,0,327,
21953,65,0,327,3,
219666,0,327,3,67,
21970,327,3,68,0,
2198327,3,69,0,327,
21993,70,0,327,3,
220071,0,327,3,72,
22010,327,3,73,0,
2202327,3,74,0,327,
22033,75,0,327,3,
220476,0,327,3,77,
22050,327,3,78,0,
2206327,3,79,0,327,
22073,80,0,327,3,
220881,0,327,3,82,
22090,327,3,83,0,
2210327,3,84,0,327,
22113,85,0,327,3,
221286,0,327,3,87,
22130,327,3,88,0,
2214327,3,89,0,327,
22153,90,0,327,3,
221695,0,327,3,97,
22170,396,12,1,21904,
2218397,5,63,3,109,
22190,327,3,110,0,
2220327,3,111,0,327,
22213,112,0,327,3,
2222113,0,327,3,114,
22230,398,12,1,21937,
2224399,5,63,3,109,
22250,327,3,110,0,
2226327,3,111,0,327,
22273,112,0,327,3,
2228113,0,327,3,114,
22290,327,3,115,0,
2230327,3,116,0,327,
22313,117,0,327,3,
2232118,0,327,3,119,
22330,327,3,120,0,
2234327,3,121,0,327,
22353,122,0,327,3,
223648,0,327,3,49,
22370,327,3,50,0,
2238327,3,51,0,327,
22393,52,0,327,3,
224053,0,327,3,54,
22410,327,3,55,0,
2242327,3,56,0,327,
22433,57,0,327,3,
224465,0,327,3,66,
22450,327,3,67,0,
2246327,3,68,0,327,
22473,69,0,327,3,
224870,0,327,3,71,
22490,327,3,72,0,
2250327,3,73,0,327,
22513,74,0,327,3,
225275,0,327,3,76,
22530,327,3,77,0,
2254327,3,78,0,327,
22553,79,0,327,3,
225680,0,327,3,81,
22570,327,3,82,0,
2258327,3,83,0,327,
22593,84,0,327,3,
226085,0,327,3,86,
22610,327,3,87,0,
2262327,3,88,0,327,
22633,89,0,327,3,
226490,0,327,3,95,
22650,327,3,97,0,
2266327,3,98,0,327,
22673,99,0,327,3,
2268100,0,327,3,101,
22690,327,3,102,0,
2270327,3,103,0,400,
227112,1,21986,401,5,
227263,3,109,0,327,
22733,110,0,327,3,
2274111,0,327,3,112,
22750,327,3,113,0,
2276327,3,114,0,327,
22773,115,0,327,3,
2278116,0,327,3,117,
22790,327,3,118,0,
2280327,3,119,0,327,
22813,120,0,327,3,
2282121,0,327,3,122,
22830,327,3,48,0,
2284327,3,49,0,327,
22853,50,0,327,3,
228651,0,327,3,52,
22870,327,3,53,0,
2288327,3,54,0,327,
22893,55,0,327,3,
229056,0,327,3,57,
22910,327,3,65,0,
2292327,3,66,0,327,
22933,67,0,327,3,
229468,0,327,3,69,
22950,327,3,70,0,
2296327,3,71,0,327,
22973,72,0,327,3,
229873,0,327,3,74,
22990,327,3,75,0,
2300327,3,76,0,327,
23013,77,0,327,3,
230278,0,327,3,79,
23030,327,3,80,0,
2304327,3,81,0,327,
23053,82,0,327,3,
230683,0,327,3,84,
23070,327,3,85,0,
2308327,3,86,0,327,
23093,87,0,327,3,
231088,0,327,3,89,
23110,327,3,90,0,
2312327,3,95,0,327,
23133,97,0,327,3,
231498,0,327,3,99,
23150,327,3,100,0,
2316327,3,101,0,402,
231712,1,22033,403,5,
231863,3,109,0,327,
23193,110,0,327,3,
2320111,0,327,3,112,
23210,327,3,113,0,
2322327,3,114,0,327,
23233,115,0,327,3,
2324116,0,404,12,1,
232522068,405,5,63,3,
2326109,0,327,3,110,
23270,327,3,111,0,
2328327,3,112,0,327,
23293,113,0,327,3,
2330114,0,327,3,115,
23310,327,3,116,0,
2332327,3,117,0,327,
23333,118,0,327,3,
2334119,0,327,3,120,
23350,327,3,121,0,
2336327,3,122,0,327,
23373,48,0,327,3,
233849,0,327,3,50,
23390,327,3,51,0,
2340327,3,52,0,327,
23413,53,0,327,3,
234254,0,327,3,55,
23430,327,3,56,0,
2344327,3,57,0,327,
23453,65,0,327,3,
234666,0,327,3,67,
23470,327,3,68,0,
2348327,3,69,0,327,
23493,70,0,327,3,
235071,0,327,3,72,
23510,327,3,73,0,
2352327,3,74,0,327,
23533,75,0,327,3,
235476,0,327,3,77,
23550,327,3,78,0,
2356327,3,79,0,327,
23573,80,0,327,3,
235881,0,327,3,82,
23590,327,3,83,0,
2360327,3,84,0,327,
23613,85,0,327,3,
236286,0,327,3,87,
23630,327,3,88,0,
2364327,3,89,0,327,
23653,90,0,327,3,
236695,0,327,3,97,
23670,327,3,98,0,
2368327,3,99,0,327,
23693,100,0,327,3,
2370101,0,327,3,102,
23710,327,3,103,0,
2372327,3,104,0,327,
23733,105,0,327,3,
2374106,0,327,3,107,
23750,327,3,108,0,
2376327,406,11,1,367,
23770,407,4,30,65,
23780,84,0,95,0,
237984,0,65,0,82,
23800,71,0,69,0,
238184,0,95,0,69,
23820,86,0,69,0,
238378,0,84,0,1,
2384-1,3,117,0,327,
23853,118,0,327,3,
2386119,0,327,3,120,
23870,327,3,121,0,
2388327,3,122,0,327,
23893,48,0,327,3,
239049,0,327,3,50,
23910,327,3,51,0,
2392327,3,52,0,327,
23933,53,0,327,3,
239454,0,327,3,55,
23950,327,3,56,0,
2396327,3,57,0,327,
23973,65,0,327,3,
239866,0,327,3,67,
23990,327,3,68,0,
2400327,3,69,0,327,
24013,70,0,327,3,
240271,0,327,3,72,
24030,327,3,73,0,
2404327,3,74,0,327,
24053,75,0,327,3,
240676,0,327,3,77,
24070,327,3,78,0,
2408327,3,79,0,327,
24093,80,0,327,3,
241081,0,327,3,82,
24110,327,3,83,0,
2412327,3,84,0,327,
24133,85,0,327,3,
241486,0,327,3,87,
24150,327,3,88,0,
2416327,3,89,0,327,
24173,90,0,327,3,
241895,0,327,3,97,
24190,327,3,98,0,
2420327,3,99,0,327,
24213,100,0,327,3,
2422101,0,327,3,102,
24230,327,3,103,0,
2424327,3,104,0,327,
24253,105,0,327,3,
2426106,0,327,3,107,
24270,327,3,108,0,
2428327,408,11,1,829,
24290,330,1,-1,3,
2430102,0,327,3,103,
24310,327,3,104,0,
2432327,3,105,0,327,
24333,106,0,327,3,
2434107,0,327,3,108,
24350,327,409,11,1,
2436829,0,330,1,-1,
24373,104,0,327,3,
2438105,0,327,3,106,
24390,327,3,107,0,
2440327,3,108,0,327,
2441410,11,1,829,0,
2442330,1,-1,3,115,
24430,327,3,116,0,
2444327,3,117,0,327,
24453,118,0,327,3,
2446119,0,327,3,120,
24470,327,3,121,0,
2448327,3,122,0,327,
24493,48,0,327,3,
245049,0,327,3,50,
24510,327,3,51,0,
2452327,3,52,0,327,
24533,53,0,327,3,
245454,0,327,3,55,
24550,327,3,56,0,
2456327,3,57,0,327,
24573,65,0,327,3,
245866,0,327,3,67,
24590,327,3,68,0,
2460327,3,69,0,327,
24613,70,0,327,3,
246271,0,327,3,72,
24630,327,3,73,0,
2464327,3,74,0,327,
24653,75,0,327,3,
246676,0,327,3,77,
24670,327,3,78,0,
2468327,3,79,0,327,
24693,80,0,327,3,
247081,0,327,3,82,
24710,327,3,83,0,
2472327,3,84,0,327,
24733,85,0,327,3,
247486,0,327,3,87,
24750,327,3,88,0,
2476327,3,89,0,327,
24773,90,0,327,3,
247895,0,327,3,97,
24790,327,3,98,0,
2480327,3,99,0,327,
24813,100,0,327,3,
2482101,0,327,3,102,
24830,327,3,103,0,
2484327,3,104,0,327,
24853,105,0,327,3,
2486106,0,327,3,107,
24870,327,3,108,0,
2488327,411,11,1,829,
24890,330,1,-1,3,
249098,0,327,3,99,
24910,327,3,100,0,
2492327,3,101,0,327,
24933,102,0,327,3,
2494103,0,327,3,104,
24950,327,3,105,0,
2496327,3,106,0,327,
24973,107,0,327,3,
2498108,0,327,412,11,
24991,829,0,330,1,
2500-1,3,117,0,327,
25013,118,0,327,3,
2502119,0,327,3,120,
25030,327,3,121,0,
2504327,3,122,0,327,
25053,48,0,327,3,
250649,0,327,3,50,
25070,327,3,51,0,
2508327,3,52,0,327,
25093,53,0,327,3,
251054,0,327,3,55,
25110,327,3,56,0,
2512327,3,57,0,327,
25133,65,0,327,3,
251466,0,327,3,67,
25150,327,3,68,0,
2516327,3,69,0,327,
25173,70,0,327,3,
251871,0,327,3,72,
25190,327,3,73,0,
2520327,3,74,0,327,
25213,75,0,327,3,
252276,0,327,3,77,
25230,327,3,78,0,
2524327,3,79,0,327,
25253,80,0,327,3,
252681,0,327,3,82,
25270,327,3,83,0,
2528327,3,84,0,327,
25293,85,0,327,3,
253086,0,327,3,87,
25310,327,3,88,0,
2532327,3,89,0,327,
25333,90,0,327,3,
253495,0,327,3,97,
25350,327,3,98,0,
2536327,3,99,0,327,
25373,100,0,327,3,
2538101,0,327,3,102,
25390,327,3,103,0,
2540327,3,104,0,327,
25413,105,0,327,3,
2542106,0,327,3,107,
25430,327,3,108,0,
2544327,413,11,1,829,
25450,330,1,-1,3,
254697,0,327,3,98,
25470,327,3,99,0,
2548327,3,100,0,327,
25493,101,0,327,3,
2550102,0,327,3,103,
25510,327,3,104,0,
2552327,3,105,0,327,
25533,106,0,327,3,
2554107,0,327,3,108,
25550,327,414,11,1,
2556829,0,330,1,-1,
25573,117,0,327,3,
2558118,0,327,3,119,
25590,327,3,120,0,
2560327,3,121,0,327,
25613,122,0,327,3,
256248,0,327,3,49,
25630,327,3,50,0,
2564327,3,51,0,327,
25653,52,0,327,3,
256653,0,327,3,54,
25670,327,3,55,0,
2568327,3,56,0,327,
25693,57,0,327,3,
257065,0,327,3,66,
25710,327,3,67,0,
2572327,3,68,0,327,
25733,69,0,327,3,
257470,0,327,3,71,
25750,327,3,72,0,
2576327,3,73,0,327,
25773,74,0,327,3,
257875,0,327,3,76,
25790,327,3,77,0,
2580327,3,78,0,327,
25813,79,0,327,3,
258280,0,327,3,81,
25830,327,3,82,0,
2584327,3,83,0,327,
25853,84,0,327,3,
258685,0,327,3,86,
25870,327,3,87,0,
2588327,3,88,0,327,
25893,89,0,327,3,
259090,0,327,3,95,
25910,327,3,97,0,
2592327,3,98,0,327,
25933,99,0,327,3,
2594100,0,327,3,101,
25950,327,3,102,0,
2596327,3,103,0,327,
25973,104,0,327,3,
2598105,0,327,3,106,
25990,327,3,107,0,
2600327,3,108,0,327,
2601415,11,1,829,0,
2602330,1,-1,3,98,
26030,325,3,99,0,
2604416,12,1,22787,417,
26055,63,3,109,0,
2606327,3,110,0,327,
26073,111,0,418,12,
26081,22817,419,5,63,
26093,109,0,327,3,
2610110,0,420,12,1,
261122846,421,5,63,3,
2612109,0,327,3,110,
26130,327,3,111,0,
2614327,3,112,0,327,
26153,113,0,327,3,
2616114,0,327,3,115,
26170,327,3,116,0,
2618422,12,1,22881,423,
26195,63,3,109,0,
2620327,3,110,0,327,
26213,111,0,327,3,
2622112,0,327,3,113,
26230,327,3,114,0,
2624424,12,1,22914,425,
26255,63,3,109,0,
2626327,3,110,0,327,
26273,111,0,426,12,
26281,22944,427,5,63,
26293,109,0,327,3,
2630110,0,327,3,111,
26310,327,3,112,0,
2632327,3,113,0,327,
26333,114,0,327,3,
2634115,0,327,3,116,
26350,327,3,117,0,
2636327,3,118,0,327,
26373,119,0,327,3,
2638120,0,327,3,121,
26390,327,3,122,0,
2640327,3,48,0,327,
26413,49,0,327,3,
264250,0,327,3,51,
26430,327,3,52,0,
2644327,3,53,0,327,
26453,54,0,327,3,
264655,0,327,3,56,
26470,327,3,57,0,
2648327,3,65,0,327,
26493,66,0,327,3,
265067,0,327,3,68,
26510,327,3,69,0,
2652327,3,70,0,327,
26533,71,0,327,3,
265472,0,327,3,73,
26550,327,3,74,0,
2656327,3,75,0,327,
26573,76,0,327,3,
265877,0,327,3,78,
26590,327,3,79,0,
2660327,3,80,0,327,
26613,81,0,327,3,
266282,0,327,3,83,
26630,327,3,84,0,
2664327,3,85,0,327,
26653,86,0,327,3,
266687,0,327,3,88,
26670,327,3,89,0,
2668327,3,90,0,327,
26693,95,0,327,3,
267097,0,327,3,98,
26710,327,3,99,0,
2672327,3,100,0,327,
26733,101,0,327,3,
2674102,0,327,3,103,
26750,327,3,104,0,
2676327,3,105,0,327,
26773,106,0,327,3,
2678107,0,327,3,108,
26790,428,12,1,22998,
2680429,5,63,3,109,
26810,327,3,110,0,
2682327,3,111,0,327,
26833,112,0,327,3,
2684113,0,327,3,114,
26850,327,3,115,0,
2686327,3,116,0,327,
26873,117,0,327,3,
2688118,0,327,3,119,
26890,327,3,120,0,
2690327,3,121,0,327,
26913,122,0,327,3,
269248,0,327,3,49,
26930,327,3,50,0,
2694327,3,51,0,327,
26953,52,0,327,3,
269653,0,327,3,54,
26970,327,3,55,0,
2698327,3,56,0,327,
26993,57,0,327,3,
270065,0,327,3,66,
27010,327,3,67,0,
2702327,3,68,0,327,
27033,69,0,327,3,
270470,0,327,3,71,
27050,327,3,72,0,
2706327,3,73,0,327,
27073,74,0,327,3,
270875,0,327,3,76,
27090,327,3,77,0,
2710327,3,78,0,327,
27113,79,0,327,3,
271280,0,327,3,81,
27130,327,3,82,0,
2714327,3,83,0,327,
27153,84,0,327,3,
271685,0,327,3,86,
27170,327,3,87,0,
2718327,3,88,0,327,
27193,89,0,327,3,
272090,0,327,3,95,
27210,327,3,97,0,
2722327,3,98,0,327,
27233,99,0,327,3,
2724100,0,327,3,101,
27250,327,3,102,0,
2726327,3,103,0,327,
27273,104,0,327,3,
2728105,0,327,3,106,
27290,327,3,107,0,
2730327,3,108,0,327,
2731430,11,1,450,0,
2732431,4,26,67,0,
273379,0,78,0,84,
27340,82,0,79,0,
273576,0,95,0,69,
27360,86,0,69,0,
273778,0,84,0,1,
2738-1,432,11,1,829,
27390,330,1,-1,3,
2740112,0,327,3,113,
27410,327,3,114,0,
2742327,3,115,0,327,
27433,116,0,327,3,
2744117,0,327,3,118,
27450,327,3,119,0,
2746327,3,120,0,327,
27473,121,0,327,3,
2748122,0,327,3,48,
27490,327,3,49,0,
2750327,3,50,0,327,
27513,51,0,327,3,
275252,0,327,3,53,
27530,327,3,54,0,
2754327,3,55,0,327,
27553,56,0,327,3,
275657,0,327,3,65,
27570,327,3,66,0,
2758327,3,67,0,327,
27593,68,0,327,3,
276069,0,327,3,70,
27610,327,3,71,0,
2762327,3,72,0,327,
27633,73,0,327,3,
276474,0,327,3,75,
27650,327,3,76,0,
2766327,3,77,0,327,
27673,78,0,327,3,
276879,0,327,3,80,
27690,327,3,81,0,
2770327,3,82,0,327,
27713,83,0,327,3,
277284,0,327,3,85,
27730,327,3,86,0,
2774327,3,87,0,327,
27753,88,0,327,3,
277689,0,327,3,90,
27770,327,3,95,0,
2778327,3,97,0,327,
27793,98,0,327,3,
278099,0,327,3,100,
27810,327,3,101,0,
2782327,3,102,0,327,
27833,103,0,327,3,
2784104,0,327,3,105,
27850,327,3,106,0,
2786327,3,107,0,327,
27873,108,0,327,433,
278811,1,829,0,330,
27891,-1,3,115,0,
2790327,3,116,0,327,
27913,117,0,327,3,
2792118,0,327,3,119,
27930,327,3,120,0,
2794327,3,121,0,327,
27953,122,0,327,3,
279648,0,327,3,49,
27970,327,3,50,0,
2798327,3,51,0,327,
27993,52,0,327,3,
280053,0,327,3,54,
28010,327,3,55,0,
2802327,3,56,0,327,
28033,57,0,327,3,
280465,0,327,3,66,
28050,327,3,67,0,
2806327,3,68,0,327,
28073,69,0,327,3,
280870,0,327,3,71,
28090,327,3,72,0,
2810327,3,73,0,327,
28113,74,0,327,3,
281275,0,327,3,76,
28130,327,3,77,0,
2814327,3,78,0,327,
28153,79,0,327,3,
281680,0,327,3,81,
28170,327,3,82,0,
2818327,3,83,0,327,
28193,84,0,327,3,
282085,0,327,3,86,
28210,327,3,87,0,
2822327,3,88,0,327,
28233,89,0,327,3,
282490,0,327,3,95,
28250,327,3,97,0,
2826327,3,98,0,327,
28273,99,0,327,3,
2828100,0,327,3,101,
28290,327,3,102,0,
2830327,3,103,0,327,
28313,104,0,327,3,
2832105,0,327,3,106,
28330,327,3,107,0,
2834327,3,108,0,327,
2835434,11,1,829,0,
2836330,1,-1,3,117,
28370,327,3,118,0,
2838327,3,119,0,327,
28393,120,0,327,3,
2840121,0,327,3,122,
28410,327,3,48,0,
2842327,3,49,0,327,
28433,50,0,327,3,
284451,0,327,3,52,
28450,327,3,53,0,
2846327,3,54,0,327,
28473,55,0,327,3,
284856,0,327,3,57,
28490,327,3,65,0,
2850327,3,66,0,327,
28513,67,0,327,3,
285268,0,327,3,69,
28530,327,3,70,0,
2854327,3,71,0,327,
28553,72,0,327,3,
285673,0,327,3,74,
28570,327,3,75,0,
2858327,3,76,0,327,
28593,77,0,327,3,
286078,0,327,3,79,
28610,327,3,80,0,
2862327,3,81,0,327,
28633,82,0,327,3,
286483,0,327,3,84,
28650,327,3,85,0,
2866327,3,86,0,327,
28673,87,0,327,3,
286888,0,327,3,89,
28690,327,3,90,0,
2870327,3,95,0,327,
28713,97,0,327,3,
287298,0,327,3,99,
28730,327,3,100,0,
2874327,3,101,0,327,
28753,102,0,327,3,
2876103,0,327,3,104,
28770,327,3,105,0,
2878327,3,106,0,327,
28793,107,0,327,3,
2880108,0,327,435,11,
28811,829,0,330,1,
2882-1,3,111,0,327,
28833,112,0,327,3,
2884113,0,327,3,114,
28850,327,3,115,0,
2886327,3,116,0,327,
28873,117,0,327,3,
2888118,0,327,3,119,
28890,327,3,120,0,
2890327,3,121,0,327,
28913,122,0,327,3,
289248,0,327,3,49,
28930,327,3,50,0,
2894327,3,51,0,327,
28953,52,0,327,3,
289653,0,327,3,54,
28970,327,3,55,0,
2898327,3,56,0,327,
28993,57,0,327,3,
290065,0,327,3,66,
29010,327,3,67,0,
2902327,3,68,0,327,
29033,69,0,327,3,
290470,0,327,3,71,
29050,327,3,72,0,
2906327,3,73,0,327,
29073,74,0,327,3,
290875,0,327,3,76,
29090,327,3,77,0,
2910327,3,78,0,327,
29113,79,0,327,3,
291280,0,327,3,81,
29130,327,3,82,0,
2914327,3,83,0,327,
29153,84,0,327,3,
291685,0,327,3,86,
29170,327,3,87,0,
2918327,3,88,0,327,
29193,89,0,327,3,
292090,0,327,3,95,
29210,327,3,97,0,
2922327,3,98,0,327,
29233,99,0,327,3,
2924100,0,327,3,101,
29250,327,3,102,0,
2926327,3,103,0,327,
29273,104,0,327,3,
2928105,0,327,3,106,
29290,327,3,107,0,
2930327,3,108,0,436,
293112,1,23471,437,5,
293263,3,109,0,327,
29333,110,0,327,3,
2934111,0,327,3,112,
29350,327,3,113,0,
2936327,3,114,0,327,
29373,115,0,327,3,
2938116,0,327,3,117,
29390,327,3,118,0,
2940327,3,119,0,327,
29413,120,0,327,3,
2942121,0,327,3,122,
29430,327,3,48,0,
2944327,3,49,0,327,
29453,50,0,327,3,
294651,0,327,3,52,
29470,327,3,53,0,
2948327,3,54,0,327,
29493,55,0,327,3,
295056,0,327,3,57,
29510,327,3,65,0,
2952327,3,66,0,327,
29533,67,0,327,3,
295468,0,327,3,69,
29550,327,3,70,0,
2956327,3,71,0,327,
29573,72,0,327,3,
295873,0,327,3,74,
29590,327,3,75,0,
2960327,3,76,0,327,
29613,77,0,327,3,
296278,0,327,3,79,
29630,327,3,80,0,
2964327,3,81,0,327,
29653,82,0,327,3,
296683,0,327,3,84,
29670,327,3,85,0,
2968327,3,86,0,327,
29693,87,0,327,3,
297088,0,327,3,89,
29710,327,3,90,0,
2972327,3,95,0,327,
29733,97,0,327,3,
297498,0,327,3,99,
29750,327,3,100,0,
2976327,3,101,0,327,
29773,102,0,327,3,
2978103,0,327,3,104,
29790,327,3,105,0,
2980327,3,106,0,327,
29813,107,0,327,3,
2982108,0,438,12,1,
298323525,439,5,63,3,
2984109,0,327,3,110,
29850,327,3,111,0,
2986327,3,112,0,327,
29873,113,0,327,3,
2988114,0,327,3,115,
29890,327,3,116,0,
2990327,3,117,0,327,
29913,118,0,327,3,
2992119,0,327,3,120,
29930,327,3,121,0,
2994327,3,122,0,327,
29953,48,0,327,3,
299649,0,327,3,50,
29970,327,3,51,0,
2998327,3,52,0,327,
29993,53,0,327,3,
300054,0,327,3,55,
30010,327,3,56,0,
3002327,3,57,0,327,
30033,65,0,327,3,
300466,0,327,3,67,
30050,327,3,68,0,
3006327,3,69,0,327,
30073,70,0,327,3,
300871,0,327,3,72,
30090,327,3,73,0,
3010327,3,74,0,327,
30113,75,0,327,3,
301276,0,327,3,77,
30130,327,3,78,0,
3014327,3,79,0,327,
30153,80,0,327,3,
301681,0,327,3,82,
30170,327,3,83,0,
3018327,3,84,0,327,
30193,85,0,327,3,
302086,0,327,3,87,
30210,327,3,88,0,
3022327,3,89,0,327,
30233,90,0,327,3,
302495,0,327,3,97,
30250,327,3,98,0,
3026327,3,99,0,327,
30273,100,0,327,3,
3028101,0,327,3,102,
30290,327,3,103,0,
3030327,3,104,0,327,
30313,105,0,440,12,
30321,23576,441,5,63,
30333,109,0,327,3,
3034110,0,327,3,111,
30350,327,3,112,0,
3036327,3,113,0,327,
30373,114,0,327,3,
3038115,0,442,12,1,
303923610,443,5,63,3,
3040109,0,327,3,110,
30410,327,3,111,0,
3042327,3,112,0,327,
30433,113,0,327,3,
3044114,0,327,3,115,
30450,327,3,116,0,
3046327,3,117,0,327,
30473,118,0,327,3,
3048119,0,327,3,120,
30490,327,3,121,0,
3050327,3,122,0,327,
30513,48,0,327,3,
305249,0,327,3,50,
30530,327,3,51,0,
3054327,3,52,0,327,
30553,53,0,327,3,
305654,0,327,3,55,
30570,327,3,56,0,
3058327,3,57,0,327,
30593,65,0,327,3,
306066,0,327,3,67,
30610,327,3,68,0,
3062327,3,69,0,327,
30633,70,0,327,3,
306471,0,327,3,72,
30650,327,3,73,0,
3066327,3,74,0,327,
30673,75,0,327,3,
306876,0,327,3,77,
30690,327,3,78,0,
3070327,3,79,0,327,
30713,80,0,327,3,
307281,0,327,3,82,
30730,327,3,83,0,
3074327,3,84,0,327,
30753,85,0,327,3,
307686,0,327,3,87,
30770,327,3,88,0,
3078327,3,89,0,327,
30793,90,0,327,3,
308095,0,327,3,97,
30810,327,3,98,0,
3082327,3,99,0,327,
30833,100,0,327,3,
3084101,0,327,3,102,
30850,327,3,103,0,
3086327,3,104,0,327,
30873,105,0,444,12,
30881,23661,445,5,63,
30893,109,0,327,3,
3090110,0,327,3,111,
30910,446,12,1,23691,
3092447,5,63,3,109,
30930,327,3,110,0,
3094448,12,1,23720,449,
30955,63,3,109,0,
3096327,3,110,0,327,
30973,111,0,327,3,
3098112,0,327,3,113,
30990,327,3,114,0,
3100327,3,115,0,327,
31013,116,0,327,3,
3102117,0,327,3,118,
31030,327,3,119,0,
3104327,3,120,0,327,
31053,121,0,327,3,
3106122,0,327,3,48,
31070,327,3,49,0,
3108327,3,50,0,327,
31093,51,0,327,3,
311052,0,327,3,53,
31110,327,3,54,0,
3112327,3,55,0,327,
31133,56,0,327,3,
311457,0,327,3,65,
31150,327,3,66,0,
3116327,3,67,0,327,
31173,68,0,327,3,
311869,0,327,3,70,
31190,327,3,71,0,
3120327,3,72,0,327,
31213,73,0,327,3,
312274,0,327,3,75,
31230,327,3,76,0,
3124327,3,77,0,327,
31253,78,0,327,3,
312679,0,327,3,80,
31270,327,3,81,0,
3128327,3,82,0,327,
31293,83,0,327,3,
313084,0,327,3,85,
31310,327,3,86,0,
3132327,3,87,0,327,
31333,88,0,327,3,
313489,0,327,3,90,
31350,327,3,95,0,
3136450,12,1,23806,451,
31375,63,3,109,0,
3138327,3,110,0,327,
31393,111,0,327,3,
3140112,0,327,3,113,
31410,327,3,114,0,
3142327,3,115,0,452,
314312,1,23840,453,5,
314463,3,109,0,327,
31453,110,0,327,3,
3146111,0,327,3,112,
31470,327,3,113,0,
3148327,3,114,0,327,
31493,115,0,327,3,
3150116,0,454,12,1,
315123875,455,5,63,3,
3152109,0,327,3,110,
31530,327,3,111,0,
3154327,3,112,0,327,
31553,113,0,327,3,
3156114,0,327,3,115,
31570,327,3,116,0,
3158327,3,117,0,327,
31593,118,0,327,3,
3160119,0,327,3,120,
31610,327,3,121,0,
3162327,3,122,0,327,
31633,48,0,327,3,
316449,0,327,3,50,
31650,327,3,51,0,
3166327,3,52,0,327,
31673,53,0,327,3,
316854,0,327,3,55,
31690,327,3,56,0,
3170327,3,57,0,327,
31713,65,0,327,3,
317266,0,327,3,67,
31730,327,3,68,0,
3174327,3,69,0,327,
31753,70,0,327,3,
317671,0,327,3,72,
31770,327,3,73,0,
3178327,3,74,0,327,
31793,75,0,327,3,
318076,0,327,3,77,
31810,327,3,78,0,
3182327,3,79,0,327,
31833,80,0,327,3,
318481,0,327,3,82,
31850,327,3,83,0,
3186327,3,84,0,327,
31873,85,0,327,3,
318886,0,327,3,87,
31890,327,3,88,0,
3190327,3,89,0,327,
31913,90,0,327,3,
319295,0,327,3,97,
31930,456,12,1,23918,
3194457,5,63,3,109,
31950,327,3,110,0,
3196327,3,111,0,327,
31973,112,0,327,3,
3198113,0,327,3,114,
31990,458,12,1,23951,
3200459,5,63,3,109,
32010,327,3,110,0,
3202327,3,111,0,327,
32033,112,0,327,3,
3204113,0,327,3,114,
32050,327,3,115,0,
3206327,3,116,0,460,
320712,1,23986,461,5,
320863,3,109,0,327,
32093,110,0,327,3,
3210111,0,327,3,112,
32110,327,3,113,0,
3212327,3,114,0,327,
32133,115,0,327,3,
3214116,0,327,3,117,
32150,327,3,118,0,
3216327,3,119,0,327,
32173,120,0,327,3,
3218121,0,327,3,122,
32190,327,3,48,0,
3220327,3,49,0,327,
32213,50,0,327,3,
322251,0,327,3,52,
32230,327,3,53,0,
3224327,3,54,0,327,
32253,55,0,327,3,
322656,0,327,3,57,
32270,327,3,65,0,
3228327,3,66,0,327,
32293,67,0,327,3,
323068,0,327,3,69,
32310,327,3,70,0,
3232327,3,71,0,327,
32333,72,0,327,3,
323473,0,327,3,74,
32350,327,3,75,0,
3236327,3,76,0,327,
32373,77,0,327,3,
323878,0,327,3,79,
32390,327,3,80,0,
3240327,3,81,0,327,
32413,82,0,327,3,
324283,0,327,3,84,
32430,327,3,85,0,
3244327,3,86,0,327,
32453,87,0,327,3,
324688,0,327,3,89,
32470,327,3,90,0,
3248327,3,95,0,327,
32493,97,0,327,3,
325098,0,327,3,99,
32510,327,3,100,0,
3252327,3,101,0,327,
32533,102,0,327,3,
3254103,0,327,3,104,
32550,327,3,105,0,
3256327,3,106,0,327,
32573,107,0,327,3,
3258108,0,327,462,11,
32591,431,0,463,4,
326042,67,0,79,0,
326176,0,76,0,73,
32620,83,0,73,0,
326379,0,78,0,95,
32640,83,0,84,0,
326565,0,82,0,84,
32660,95,0,69,0,
326786,0,69,0,78,
32680,84,0,1,-1,
32693,117,0,327,3,
3270118,0,327,3,119,
32710,327,3,120,0,
3272327,3,121,0,327,
32733,122,0,327,3,
327448,0,327,3,49,
32750,327,3,50,0,
3276327,3,51,0,327,
32773,52,0,327,3,
327853,0,327,3,54,
32790,327,3,55,0,
3280327,3,56,0,327,
32813,57,0,327,3,
328265,0,327,3,66,
32830,327,3,67,0,
3284327,3,68,0,327,
32853,69,0,327,3,
328670,0,327,3,71,
32870,327,3,72,0,
3288327,3,73,0,327,
32893,74,0,327,3,
329075,0,327,3,76,
32910,327,3,77,0,
3292327,3,78,0,327,
32933,79,0,327,3,
329480,0,327,3,81,
32950,327,3,82,0,
3296327,3,83,0,327,
32973,84,0,327,3,
329885,0,327,3,86,
32990,327,3,87,0,
3300327,3,88,0,327,
33013,89,0,327,3,
330290,0,327,3,95,
33030,327,3,97,0,
3304327,3,98,0,327,
33053,99,0,327,3,
3306100,0,327,3,101,
33070,327,3,102,0,
3308327,3,103,0,327,
33093,104,0,327,3,
3310105,0,327,3,106,
33110,327,3,107,0,
3312327,3,108,0,327,
3313464,11,1,829,0,
3314330,1,-1,3,115,
33150,327,3,116,0,
3316327,3,117,0,327,
33173,118,0,327,3,
3318119,0,327,3,120,
33190,327,3,121,0,
3320327,3,122,0,327,
33213,48,0,327,3,
332249,0,327,3,50,
33230,327,3,51,0,
3324327,3,52,0,327,
33253,53,0,327,3,
332654,0,327,3,55,
33270,327,3,56,0,
3328327,3,57,0,327,
33293,65,0,327,3,
333066,0,327,3,67,
33310,327,3,68,0,
3332327,3,69,0,327,
33333,70,0,327,3,
333471,0,327,3,72,
33350,327,3,73,0,
3336327,3,74,0,327,
33373,75,0,327,3,
333876,0,327,3,77,
33390,327,3,78,0,
3340327,3,79,0,327,
33413,80,0,327,3,
334281,0,327,3,82,
33430,327,3,83,0,
3344327,3,84,0,327,
33453,85,0,327,3,
334686,0,327,3,87,
33470,327,3,88,0,
3348327,3,89,0,327,
33493,90,0,327,3,
335095,0,327,3,97,
33510,327,3,98,0,
3352327,3,99,0,327,
33533,100,0,327,3,
3354101,0,327,3,102,
33550,327,3,103,0,
3356327,3,104,0,327,
33573,105,0,327,3,
3358106,0,327,3,107,
33590,327,3,108,0,
3360327,465,11,1,829,
33610,330,1,-1,3,
336298,0,327,3,99,
33630,327,3,100,0,
3364327,3,101,0,327,
33653,102,0,327,3,
3366103,0,327,3,104,
33670,327,3,105,0,
3368327,3,106,0,327,
33693,107,0,327,3,
3370108,0,327,466,11,
33711,829,0,330,1,
3372-1,3,117,0,327,
33733,118,0,327,3,
3374119,0,327,3,120,
33750,327,3,121,0,
3376327,3,122,0,327,
33773,48,0,327,3,
337849,0,327,3,50,
33790,327,3,51,0,
3380327,3,52,0,327,
33813,53,0,327,3,
338254,0,327,3,55,
33830,327,3,56,0,
3384327,3,57,0,327,
33853,65,0,327,3,
338666,0,327,3,67,
33870,327,3,68,0,
3388327,3,69,0,327,
33893,70,0,327,3,
339071,0,327,3,72,
33910,327,3,73,0,
3392327,3,74,0,327,
33933,75,0,327,3,
339476,0,327,3,77,
33950,327,3,78,0,
3396327,3,79,0,327,
33973,80,0,327,3,
339881,0,327,3,82,
33990,327,3,83,0,
3400327,3,84,0,327,
34013,85,0,327,3,
340286,0,327,3,87,
34030,327,3,88,0,
3404327,3,89,0,327,
34053,90,0,327,3,
340695,0,327,3,97,
34070,327,3,98,0,
3408327,3,99,0,327,
34093,100,0,327,3,
3410101,0,327,3,102,
34110,327,3,103,0,
3412327,3,104,0,327,
34133,105,0,327,3,
3414106,0,327,3,107,
34150,327,3,108,0,
3416327,467,11,1,829,
34170,330,1,-1,3,
3418116,0,327,3,117,
34190,327,3,118,0,
3420327,3,119,0,327,
34213,120,0,327,3,
3422121,0,327,3,122,
34230,327,3,48,0,
3424327,3,49,0,327,
34253,50,0,327,3,
342651,0,327,3,52,
34270,327,3,53,0,
3428327,3,54,0,327,
34293,55,0,327,3,
343056,0,327,3,57,
34310,327,3,65,0,
3432327,3,66,0,327,
34333,67,0,327,3,
343468,0,327,3,69,
34350,327,3,70,0,
3436327,3,71,0,327,
34373,72,0,327,3,
343873,0,327,3,74,
34390,327,3,75,0,
3440327,3,76,0,327,
34413,77,0,327,3,
344278,0,327,3,79,
34430,327,3,80,0,
3444327,3,81,0,327,
34453,82,0,327,3,
344683,0,327,3,84,
34470,327,3,85,0,
3448327,3,86,0,327,
34493,87,0,327,3,
345088,0,327,3,89,
34510,327,3,90,0,
3452327,3,95,0,327,
34533,97,0,327,3,
345498,0,327,3,99,
34550,327,3,100,0,
3456327,3,101,0,468,
345712,1,24453,469,5,
345863,3,109,0,327,
34593,110,0,470,12,
34601,24482,471,5,63,
34613,109,0,327,3,
3462110,0,327,3,111,
34630,327,3,112,0,
3464327,3,113,0,327,
34653,114,0,327,3,
3466115,0,327,3,116,
34670,327,3,117,0,
3468327,3,118,0,327,
34693,119,0,327,3,
3470120,0,327,3,121,
34710,327,3,122,0,
3472327,3,48,0,327,
34733,49,0,327,3,
347450,0,327,3,51,
34750,327,3,52,0,
3476327,3,53,0,327,
34773,54,0,327,3,
347855,0,327,3,56,
34790,327,3,57,0,
3480327,3,65,0,327,
34813,66,0,327,3,
348267,0,327,3,68,
34830,327,3,69,0,
3484327,3,70,0,327,
34853,71,0,327,3,
348672,0,327,3,73,
34870,327,3,74,0,
3488327,3,75,0,327,
34893,76,0,327,3,
349077,0,327,3,78,
34910,327,3,79,0,
3492327,3,80,0,327,
34933,81,0,327,3,
349482,0,327,3,83,
34950,327,3,84,0,
3496327,3,85,0,327,
34973,86,0,327,3,
349887,0,327,3,88,
34990,327,3,89,0,
3500327,3,90,0,327,
35013,95,0,327,3,
350297,0,327,3,98,
35030,327,3,99,0,
3504327,3,100,0,472,
350512,1,24528,473,5,
350663,3,109,0,327,
35073,110,0,327,3,
3508111,0,327,3,112,
35090,327,3,113,0,
3510327,3,114,0,327,
35113,115,0,327,3,
3512116,0,327,3,117,
35130,327,3,118,0,
3514327,3,119,0,327,
35153,120,0,327,3,
3516121,0,327,3,122,
35170,327,3,48,0,
3518327,3,49,0,327,
35193,50,0,327,3,
352051,0,327,3,52,
35210,327,3,53,0,
3522327,3,54,0,327,
35233,55,0,327,3,
352456,0,327,3,57,
35250,327,3,65,0,
3526327,3,66,0,327,
35273,67,0,327,3,
352868,0,327,3,69,
35290,327,3,70,0,
3530327,3,71,0,327,
35313,72,0,327,3,
353273,0,327,3,74,
35330,327,3,75,0,
3534327,3,76,0,327,
35353,77,0,327,3,
353678,0,327,3,79,
35370,327,3,80,0,
3538327,3,81,0,327,
35393,82,0,327,3,
354083,0,327,3,84,
35410,327,3,85,0,
3542327,3,86,0,327,
35433,87,0,327,3,
354488,0,327,3,89,
35450,327,3,90,0,
3546327,3,95,0,327,
35473,97,0,327,3,
354898,0,327,3,99,
35490,327,3,100,0,
3550327,3,101,0,327,
35513,102,0,327,3,
3552103,0,327,3,104,
35530,327,3,105,0,
3554327,3,106,0,327,
35553,107,0,327,3,
3556108,0,327,474,11,
35571,414,0,475,4,
355838,67,0,79,0,
355976,0,76,0,73,
35600,83,0,73,0,
356179,0,78,0,95,
35620,69,0,78,0,
356368,0,95,0,69,
35640,86,0,69,0,
356578,0,84,0,1,
3566-1,3,101,0,327,
35673,102,0,327,3,
3568103,0,327,3,104,
35690,327,3,105,0,
3570327,3,106,0,327,
35713,107,0,327,3,
3572108,0,327,476,11,
35731,829,0,330,1,
3574-1,3,111,0,327,
35753,112,0,327,3,
3576113,0,327,3,114,
35770,327,3,115,0,
3578327,3,116,0,327,
35793,117,0,327,3,
3580118,0,327,3,119,
35810,327,3,120,0,
3582327,3,121,0,327,
35833,122,0,327,3,
358448,0,327,3,49,
35850,327,3,50,0,
3586327,3,51,0,327,
35873,52,0,327,3,
358853,0,327,3,54,
35890,327,3,55,0,
3590327,3,56,0,327,
35913,57,0,327,3,
359265,0,327,3,66,
35930,327,3,67,0,
3594327,3,68,0,327,
35953,69,0,327,3,
359670,0,327,3,71,
35970,327,3,72,0,
3598327,3,73,0,327,
35993,74,0,327,3,
360075,0,327,3,76,
36010,327,3,77,0,
3602327,3,78,0,327,
36033,79,0,327,3,
360480,0,327,3,81,
36050,327,3,82,0,
3606327,3,83,0,327,
36073,84,0,327,3,
360885,0,327,3,86,
36090,327,3,87,0,
3610327,3,88,0,327,
36113,89,0,327,3,
361290,0,327,3,95,
36130,327,3,97,0,
3614327,3,98,0,327,
36153,99,0,327,3,
3616100,0,327,3,101,
36170,327,3,102,0,
3618327,3,103,0,327,
36193,104,0,327,3,
3620105,0,327,3,106,
36210,327,3,107,0,
3622327,3,108,0,327,
3623477,11,1,829,0,
3624330,1,-1,3,102,
36250,327,3,103,0,
3626327,3,104,0,327,
36273,105,0,327,3,
3628106,0,327,3,107,
36290,327,3,108,0,
3630327,478,11,1,829,
36310,330,1,-1,3,
363297,0,327,3,98,
36330,327,3,99,0,
3634327,3,100,0,327,
36353,101,0,327,3,
3636102,0,327,3,103,
36370,327,3,104,0,
3638327,3,105,0,327,
36393,106,0,327,3,
3640107,0,327,3,108,
36410,327,479,11,1,
3642401,0,480,4,30,
364367,0,79,0,76,
36440,76,0,73,0,
364583,0,73,0,79,
36460,78,0,95,0,
364769,0,86,0,69,
36480,78,0,84,0,
36491,-1,3,111,0,
3650327,3,112,0,327,
36513,113,0,327,3,
3652114,0,327,3,115,
36530,327,3,116,0,
3654327,3,117,0,327,
36553,118,0,327,3,
3656119,0,327,3,120,
36570,327,3,121,0,
3658327,3,122,0,327,
36593,48,0,327,3,
366049,0,327,3,50,
36610,327,3,51,0,
3662327,3,52,0,327,
36633,53,0,327,3,
366454,0,327,3,55,
36650,327,3,56,0,
3666327,3,57,0,327,
36673,65,0,327,3,
366866,0,327,3,67,
36690,327,3,68,0,
3670327,3,69,0,327,
36713,70,0,327,3,
367271,0,327,3,72,
36730,327,3,73,0,
3674327,3,74,0,327,
36753,75,0,327,3,
367676,0,327,3,77,
36770,327,3,78,0,
3678327,3,79,0,327,
36793,80,0,327,3,
368081,0,327,3,82,
36810,327,3,83,0,
3682327,3,84,0,327,
36833,85,0,327,3,
368486,0,327,3,87,
36850,327,3,88,0,
3686327,3,89,0,327,
36873,90,0,327,3,
368895,0,327,3,97,
36890,327,3,98,0,
3690327,3,99,0,327,
36913,100,0,327,3,
3692101,0,327,3,102,
36930,327,3,103,0,
3694327,3,104,0,327,
36953,105,0,327,3,
3696106,0,327,3,107,
36970,327,3,108,0,
3698327,481,11,1,829,
36990,330,1,-1,3,
3700112,0,327,3,113,
37010,327,3,114,0,
3702327,3,115,0,327,
37033,116,0,327,3,
3704117,0,327,3,118,
37050,327,3,119,0,
3706327,3,120,0,327,
37073,121,0,327,3,
3708122,0,327,3,48,
37090,327,3,49,0,
3710327,3,50,0,327,
37113,51,0,327,3,
371252,0,327,3,53,
37130,327,3,54,0,
3714327,3,55,0,327,
37153,56,0,327,3,
371657,0,327,3,65,
37170,327,3,66,0,
3718327,3,67,0,327,
37193,68,0,327,3,
372069,0,327,3,70,
37210,327,3,71,0,
3722327,3,72,0,327,
37233,73,0,327,3,
372474,0,327,3,75,
37250,327,3,76,0,
3726327,3,77,0,327,
37273,78,0,327,3,
372879,0,327,3,80,
37290,327,3,81,0,
3730327,3,82,0,327,
37313,83,0,327,3,
373284,0,327,3,85,
37330,327,3,86,0,
3734327,3,87,0,327,
37353,88,0,327,3,
373689,0,327,3,90,
37370,327,3,95,0,
3738327,3,97,0,327,
37393,98,0,327,3,
374099,0,327,3,100,
37410,327,3,101,0,
3742327,3,102,0,327,
37433,103,0,327,3,
3744104,0,327,3,105,
37450,327,3,106,0,
3746327,3,107,0,327,
37473,108,0,327,482,
374811,1,829,0,330,
37491,-1,3,106,0,
3750327,3,107,0,327,
37513,108,0,327,483,
375211,1,829,0,330,
37531,-1,3,116,0,
3754327,3,117,0,327,
37553,118,0,327,3,
3756119,0,327,3,120,
37570,327,3,121,0,
3758327,3,122,0,327,
37593,48,0,327,3,
376049,0,327,3,50,
37610,327,3,51,0,
3762327,3,52,0,327,
37633,53,0,327,3,
376454,0,327,3,55,
37650,327,3,56,0,
3766327,3,57,0,327,
37673,65,0,327,3,
376866,0,327,3,67,
37690,327,3,68,0,
3770327,3,69,0,327,
37713,70,0,327,3,
377271,0,327,3,72,
37730,327,3,73,0,
3774327,3,74,0,327,
37753,75,0,327,3,
377676,0,327,3,77,
37770,327,3,78,0,
3778327,3,79,0,327,
37793,80,0,327,3,
378081,0,327,3,82,
37810,327,3,83,0,
3782327,3,84,0,327,
37833,85,0,327,3,
378486,0,327,3,87,
37850,327,3,88,0,
3786327,3,89,0,327,
37873,90,0,327,3,
378895,0,327,3,97,
37890,327,3,98,0,
3790327,3,99,0,327,
37913,100,0,327,3,
3792101,0,327,3,102,
37930,327,3,103,0,
3794327,3,104,0,327,
37953,105,0,327,3,
3796106,0,327,3,107,
37970,327,3,108,0,
3798327,484,11,1,829,
37990,330,1,-1,3,
3800106,0,327,3,107,
38010,327,3,108,0,
3802327,485,11,1,829,
38030,330,1,-1,486,
380411,1,829,0,330,
38051,-1,487,11,1,
3806829,0,330,1,-1,
38073,112,0,327,3,
3808113,0,327,3,114,
38090,327,3,115,0,
3810327,3,116,0,327,
38113,117,0,327,3,
3812118,0,327,3,119,
38130,327,3,120,0,
3814327,3,121,0,327,
38153,122,0,327,3,
381648,0,327,3,49,
38170,327,3,50,0,
3818327,3,51,0,327,
38193,52,0,327,3,
382053,0,327,3,54,
38210,327,3,55,0,
3822327,3,56,0,327,
38233,57,0,327,3,
382465,0,327,3,66,
38250,327,3,67,0,
3826327,3,68,0,327,
38273,69,0,327,3,
382870,0,327,3,71,
38290,327,3,72,0,
3830327,3,73,0,327,
38313,74,0,327,3,
383275,0,327,3,76,
38330,327,3,77,0,
3834327,3,78,0,327,
38353,79,0,327,3,
383680,0,327,3,81,
38370,327,3,82,0,
3838327,3,83,0,327,
38393,84,0,327,3,
384085,0,327,3,86,
38410,327,3,87,0,
3842327,3,88,0,327,
38433,89,0,327,3,
384490,0,327,3,95,
38450,327,3,97,0,
3846327,3,98,0,327,
38473,99,0,327,3,
3848100,0,327,3,101,
38490,327,3,102,0,
3850327,3,103,0,327,
38513,104,0,488,12,
38521,25477,489,5,63,
38533,109,0,327,3,
3854110,0,327,3,111,
38550,327,3,112,0,
3856327,3,113,0,327,
38573,114,0,327,3,
3858115,0,327,3,116,
38590,327,3,117,0,
3860327,3,118,0,327,
38613,119,0,327,3,
3862120,0,327,3,121,
38630,327,3,122,0,
3864327,3,48,0,327,
38653,49,0,327,3,
386650,0,327,3,51,
38670,327,3,52,0,
3868327,3,53,0,327,
38693,54,0,327,3,
387055,0,327,3,56,
38710,327,3,57,0,
3872327,3,65,0,327,
38733,66,0,327,3,
387467,0,327,3,68,
38750,327,3,69,0,
3876327,3,70,0,327,
38773,71,0,327,3,
387872,0,327,3,73,
38790,327,3,74,0,
3880327,3,75,0,327,
38813,76,0,327,3,
388277,0,327,3,78,
38830,327,3,79,0,
3884327,3,80,0,327,
38853,81,0,327,3,
388682,0,327,3,83,
38870,327,3,84,0,
3888327,3,85,0,327,
38893,86,0,327,3,
389087,0,327,3,88,
38910,327,3,89,0,
3892327,3,90,0,327,
38933,95,0,327,3,
389497,0,490,12,1,
389525520,491,5,63,3,
3896109,0,327,3,110,
38970,492,12,1,25549,
3898493,5,63,3,109,
38990,327,3,110,0,
3900327,3,111,0,327,
39013,112,0,327,3,
3902113,0,327,3,114,
39030,327,3,115,0,
3904327,3,116,0,327,
39053,117,0,327,3,
3906118,0,327,3,119,
39070,327,3,120,0,
3908327,3,121,0,327,
39093,122,0,327,3,
391048,0,327,3,49,
39110,327,3,50,0,
3912327,3,51,0,327,
39133,52,0,327,3,
391453,0,327,3,54,
39150,327,3,55,0,
3916327,3,56,0,327,
39173,57,0,327,3,
391865,0,327,3,66,
39190,327,3,67,0,
3920327,3,68,0,327,
39213,69,0,327,3,
392270,0,327,3,71,
39230,327,3,72,0,
3924327,3,73,0,327,
39253,74,0,327,3,
392675,0,327,3,76,
39270,327,3,77,0,
3928327,3,78,0,327,
39293,79,0,327,3,
393080,0,327,3,81,
39310,327,3,82,0,
3932327,3,83,0,327,
39333,84,0,327,3,
393485,0,327,3,86,
39350,327,3,87,0,
3936327,3,88,0,327,
39373,89,0,327,3,
393890,0,327,3,95,
39390,327,3,97,0,
3940327,3,98,0,327,
39413,99,0,327,3,
3942100,0,327,3,101,
39430,327,3,102,0,
3944327,3,103,0,494,
394512,1,25598,495,5,
394663,3,109,0,327,
39473,110,0,327,3,
3948111,0,327,3,112,
39490,327,3,113,0,
3950327,3,114,0,327,
39513,115,0,327,3,
3952116,0,327,3,117,
39530,327,3,118,0,
3954327,3,119,0,327,
39553,120,0,327,3,
3956121,0,327,3,122,
39570,327,3,48,0,
3958327,3,49,0,327,
39593,50,0,327,3,
396051,0,327,3,52,
39610,327,3,53,0,
3962327,3,54,0,327,
39633,55,0,327,3,
396456,0,327,3,57,
39650,327,3,65,0,
3966327,3,66,0,327,
39673,67,0,327,3,
396868,0,327,3,69,
39690,327,3,70,0,
3970327,3,71,0,327,
39713,72,0,327,3,
397273,0,327,3,74,
39730,327,3,75,0,
3974327,3,76,0,327,
39753,77,0,327,3,
397678,0,327,3,79,
39770,327,3,80,0,
3978327,3,81,0,327,
39793,82,0,327,3,
398083,0,327,3,84,
39810,327,3,85,0,
3982327,3,86,0,327,
39833,87,0,327,3,
398488,0,327,3,89,
39850,327,3,90,0,
3986327,3,95,0,327,
39873,97,0,327,3,
398898,0,327,3,99,
39890,327,3,100,0,
3990327,3,101,0,496,
399112,1,25645,497,5,
399263,3,109,0,327,
39933,110,0,327,3,
3994111,0,327,3,112,
39950,327,3,113,0,
3996327,3,114,0,327,
39973,115,0,327,3,
3998116,0,327,3,117,
39990,327,3,118,0,
4000327,3,119,0,327,
40013,120,0,327,3,
4002121,0,327,3,122,
40030,327,3,48,0,
4004327,3,49,0,327,
40053,50,0,327,3,
400651,0,327,3,52,
40070,327,3,53,0,
4008327,3,54,0,327,
40093,55,0,327,3,
401056,0,327,3,57,
40110,327,3,65,0,
4012327,3,66,0,327,
40133,67,0,327,3,
401468,0,327,3,69,
40150,327,3,70,0,
4016327,3,71,0,327,
40173,72,0,327,3,
401873,0,327,3,74,
40190,327,3,75,0,
4020327,3,76,0,327,
40213,77,0,327,3,
402278,0,327,3,79,
40230,327,3,80,0,
4024327,3,81,0,327,
40253,82,0,327,3,
402683,0,327,3,84,
40270,327,3,85,0,
4028327,3,86,0,327,
40293,87,0,327,3,
403088,0,327,3,89,
40310,327,3,90,0,
4032327,3,95,0,327,
40333,97,0,327,3,
403498,0,327,3,99,
40350,327,3,100,0,
4036498,12,1,25691,499,
40375,63,3,109,0,
4038327,3,110,0,327,
40393,111,0,327,3,
4040112,0,327,3,113,
40410,327,3,114,0,
4042327,3,115,0,327,
40433,116,0,327,3,
4044117,0,327,3,118,
40450,327,3,119,0,
4046327,3,120,0,327,
40473,121,0,327,3,
4048122,0,327,3,48,
40490,327,3,49,0,
4050327,3,50,0,327,
40513,51,0,327,3,
405252,0,327,3,53,
40530,327,3,54,0,
4054327,3,55,0,327,
40553,56,0,327,3,
405657,0,327,3,65,
40570,327,3,66,0,
4058327,3,67,0,327,
40593,68,0,327,3,
406069,0,327,3,70,
40610,327,3,71,0,
4062327,3,72,0,327,
40633,73,0,327,3,
406474,0,327,3,75,
40650,327,3,76,0,
4066327,3,77,0,327,
40673,78,0,327,3,
406879,0,327,3,80,
40690,327,3,81,0,
4070327,3,82,0,327,
40713,83,0,327,3,
407284,0,327,3,85,
40730,327,3,86,0,
4074327,3,87,0,327,
40753,88,0,327,3,
407689,0,327,3,90,
40770,327,3,95,0,
4078327,3,97,0,327,
40793,98,0,327,3,
408099,0,327,3,100,
40810,327,3,101,0,
4082327,3,102,0,327,
40833,103,0,327,3,
4084104,0,327,3,105,
40850,327,3,106,0,
4086327,3,107,0,327,
40873,108,0,327,500,
408811,1,390,0,501,
40894,26,67,0,72,
40900,65,0,78,0,
409171,0,69,0,68,
40920,95,0,69,0,
409386,0,69,0,78,
40940,84,0,1,-1,
40953,101,0,327,3,
4096102,0,327,3,103,
40970,327,3,104,0,
4098327,3,105,0,327,
40993,106,0,327,3,
4100107,0,327,3,108,
41010,327,502,11,1,
4102829,0,330,1,-1,
41033,102,0,327,3,
4104103,0,327,3,104,
41050,327,3,105,0,
4106327,3,106,0,327,
41073,107,0,327,3,
4108108,0,327,503,11,
41091,829,0,330,1,
4110-1,3,104,0,327,
41113,105,0,327,3,
4112106,0,327,3,107,
41130,327,3,108,0,
4114327,504,11,1,829,
41150,330,1,-1,3,
4116111,0,327,3,112,
41170,327,3,113,0,
4118327,3,114,0,327,
41193,115,0,327,3,
4120116,0,327,3,117,
41210,327,3,118,0,
4122327,3,119,0,327,
41233,120,0,327,3,
4124121,0,327,3,122,
41250,327,3,48,0,
4126327,3,49,0,327,
41273,50,0,327,3,
412851,0,327,3,52,
41290,327,3,53,0,
4130327,3,54,0,327,
41313,55,0,327,3,
413256,0,327,3,57,
41330,327,3,65,0,
4134327,3,66,0,327,
41353,67,0,327,3,
413668,0,327,3,69,
41370,327,3,70,0,
4138327,3,71,0,327,
41393,72,0,327,3,
414073,0,327,3,74,
41410,327,3,75,0,
4142327,3,76,0,327,
41433,77,0,327,3,
414478,0,327,3,79,
41450,327,3,80,0,
4146327,3,81,0,327,
41473,82,0,327,3,
414883,0,327,3,84,
41490,327,3,85,0,
4150327,3,86,0,327,
41513,87,0,327,3,
415288,0,327,3,89,
41530,327,3,90,0,
4154327,3,95,0,327,
41553,97,0,327,3,
415698,0,327,3,99,
41570,327,3,100,0,
4158327,3,101,0,327,
41593,102,0,327,3,
4160103,0,327,3,104,
41610,327,3,105,0,
4162327,3,106,0,327,
41633,107,0,327,3,
4164108,0,327,505,11,
41651,829,0,330,1,
4166-1,3,98,0,327,
41673,99,0,327,3,
4168100,0,327,3,101,
41690,327,3,102,0,
4170327,3,103,0,327,
41713,104,0,327,3,
4172105,0,327,3,106,
41730,327,3,107,0,
4174327,3,108,0,327,
4175506,11,1,829,0,
4176330,1,-1,3,105,
41770,327,3,106,0,
4178327,3,107,0,327,
41793,108,0,327,507,
418011,1,829,0,330,
41811,-1,3,100,0,
4182508,12,1,26268,509,
41835,63,3,109,0,
4184327,3,110,0,327,
41853,111,0,510,12,
41861,26298,511,5,63,
41873,109,0,327,3,
4188110,0,327,3,111,
41890,327,3,112,0,
4190327,3,113,0,327,
41913,114,0,327,3,
4192115,0,327,3,116,
41930,327,3,117,0,
4194327,3,118,0,327,
41953,119,0,327,3,
4196120,0,327,3,121,
41970,327,3,122,0,
4198327,3,48,0,327,
41993,49,0,327,3,
420050,0,327,3,51,
42010,327,3,52,0,
4202327,3,53,0,327,
42033,54,0,327,3,
420455,0,327,3,56,
42050,327,3,57,0,
4206327,3,65,0,327,
42073,66,0,327,3,
420867,0,327,3,68,
42090,327,3,69,0,
4210327,3,70,0,327,
42113,71,0,327,3,
421272,0,327,3,73,
42130,327,3,74,0,
4214327,3,75,0,327,
42153,76,0,327,3,
421677,0,327,3,78,
42170,327,3,79,0,
4218327,3,80,0,327,
42193,81,0,327,3,
422082,0,327,3,83,
42210,327,3,84,0,
4222327,3,85,0,327,
42233,86,0,327,3,
422487,0,327,3,88,
42250,327,3,89,0,
4226327,3,90,0,327,
42273,95,0,327,3,
422897,0,327,3,98,
42290,327,3,99,0,
4230327,3,100,0,327,
42313,101,0,327,3,
4232102,0,327,3,103,
42330,327,3,104,0,
4234327,3,105,0,327,
42353,106,0,327,3,
4236107,0,327,3,108,
42370,327,512,11,1,
4238223,0,513,4,4,
423968,0,79,0,1,
4240-1,3,112,0,327,
42413,113,0,327,3,
4242114,0,327,3,115,
42430,327,3,116,0,
4244327,3,117,0,327,
42453,118,0,327,3,
4246119,0,327,3,120,
42470,327,3,121,0,
4248327,3,122,0,327,
42493,48,0,327,3,
425049,0,327,3,50,
42510,327,3,51,0,
4252327,3,52,0,327,
42533,53,0,327,3,
425454,0,327,3,55,
42550,327,3,56,0,
4256327,3,57,0,327,
42573,65,0,327,3,
425866,0,327,3,67,
42590,327,3,68,0,
4260327,3,69,0,327,
42613,70,0,327,3,
426271,0,327,3,72,
42630,327,3,73,0,
4264327,3,74,0,327,
42653,75,0,327,3,
426676,0,327,3,77,
42670,327,3,78,0,
4268327,3,79,0,327,
42693,80,0,327,3,
427081,0,327,3,82,
42710,327,3,83,0,
4272327,3,84,0,327,
42733,85,0,327,3,
427486,0,327,3,87,
42750,327,3,88,0,
4276327,3,89,0,327,
42773,90,0,327,3,
427895,0,327,3,97,
42790,514,12,1,26431,
4280515,5,63,3,109,
42810,327,3,110,0,
4282327,3,111,0,327,
42833,112,0,327,3,
4284113,0,327,3,114,
42850,327,3,115,0,
4286327,3,116,0,516,
428712,1,26466,517,5,
428863,3,109,0,327,
42893,110,0,327,3,
4290111,0,327,3,112,
42910,327,3,113,0,
4292327,3,114,0,327,
42933,115,0,327,3,
4294116,0,327,3,117,
42950,327,3,118,0,
4296327,3,119,0,327,
42973,120,0,327,3,
4298121,0,327,3,122,
42990,327,3,48,0,
4300327,3,49,0,327,
43013,50,0,327,3,
430251,0,327,3,52,
43030,327,3,53,0,
4304327,3,54,0,327,
43053,55,0,327,3,
430656,0,327,3,57,
43070,327,3,65,0,
4308327,3,66,0,327,
43093,67,0,327,3,
431068,0,327,3,69,
43110,327,3,70,0,
4312327,3,71,0,327,
43133,72,0,327,3,
431473,0,327,3,74,
43150,327,3,75,0,
4316327,3,76,0,327,
43173,77,0,327,3,
431878,0,327,3,79,
43190,327,3,80,0,
4320327,3,81,0,327,
43213,82,0,327,3,
432283,0,327,3,84,
43230,327,3,85,0,
4324327,3,86,0,327,
43253,87,0,327,3,
432688,0,327,3,89,
43270,327,3,90,0,
4328327,3,95,0,327,
43293,97,0,518,12,
43301,26509,519,5,63,
43313,109,0,327,3,
4332110,0,327,3,111,
43330,327,3,112,0,
4334327,3,113,0,327,
43353,114,0,327,3,
4336115,0,520,12,1,
433726543,521,5,63,3,
4338109,0,327,3,110,
43390,327,3,111,0,
4340327,3,112,0,327,
43413,113,0,327,3,
4342114,0,327,3,115,
43430,327,3,116,0,
4344327,3,117,0,327,
43453,118,0,327,3,
4346119,0,327,3,120,
43470,327,3,121,0,
4348327,3,122,0,327,
43493,48,0,327,3,
435049,0,327,3,50,
43510,327,3,51,0,
4352327,3,52,0,327,
43533,53,0,327,3,
435454,0,327,3,55,
43550,327,3,56,0,
4356327,3,57,0,327,
43573,65,0,327,3,
435866,0,327,3,67,
43590,327,3,68,0,
4360327,3,69,0,327,
43613,70,0,327,3,
436271,0,327,3,72,
43630,327,3,73,0,
4364327,3,74,0,327,
43653,75,0,327,3,
436676,0,327,3,77,
43670,327,3,78,0,
4368327,3,79,0,327,
43693,80,0,327,3,
437081,0,327,3,82,
43710,327,3,83,0,
4372327,3,84,0,327,
43733,85,0,327,3,
437486,0,327,3,87,
43750,327,3,88,0,
4376327,3,89,0,327,
43773,90,0,327,3,
437895,0,327,3,97,
43790,327,3,98,0,
4380327,3,99,0,327,
43813,100,0,327,3,
4382101,0,522,12,1,
438326590,523,5,63,3,
4384109,0,327,3,110,
43850,327,3,111,0,
4386327,3,112,0,327,
43873,113,0,327,3,
4388114,0,524,12,1,
438926623,525,5,63,3,
4390109,0,327,3,110,
43910,327,3,111,0,
4392327,3,112,0,327,
43933,113,0,327,3,
4394114,0,327,3,115,
43950,327,3,116,0,
4396327,3,117,0,327,
43973,118,0,526,12,
43981,26660,527,5,63,
43993,109,0,327,3,
4400110,0,327,3,111,
44010,327,3,112,0,
4402327,3,113,0,327,
44033,114,0,327,3,
4404115,0,327,3,116,
44050,327,3,117,0,
4406327,3,118,0,327,
44073,119,0,327,3,
4408120,0,327,3,121,
44090,327,3,122,0,
4410327,3,48,0,327,
44113,49,0,327,3,
441250,0,327,3,51,
44130,327,3,52,0,
4414327,3,53,0,327,
44153,54,0,327,3,
441655,0,327,3,56,
44170,327,3,57,0,
4418327,3,65,0,327,
44193,66,0,327,3,
442067,0,327,3,68,
44210,327,3,69,0,
4422327,3,70,0,327,
44233,71,0,327,3,
442472,0,327,3,73,
44250,327,3,74,0,
4426327,3,75,0,327,
44273,76,0,327,3,
442877,0,327,3,78,
44290,327,3,79,0,
4430327,3,80,0,327,
44313,81,0,327,3,
443282,0,327,3,83,
44330,327,3,84,0,
4434327,3,85,0,327,
44353,86,0,327,3,
443687,0,327,3,88,
44370,327,3,89,0,
4438327,3,90,0,327,
44393,95,0,327,3,
444097,0,327,3,98,
44410,327,3,99,0,
4442327,3,100,0,327,
44433,101,0,528,12,
44441,26707,529,5,63,
44453,109,0,327,3,
4446110,0,327,3,111,
44470,327,3,112,0,
4448327,3,113,0,327,
44493,114,0,530,12,
44501,26740,531,5,63,
44513,109,0,327,3,
4452110,0,327,3,111,
44530,327,3,112,0,
4454327,3,113,0,327,
44553,114,0,327,3,
4456115,0,327,3,116,
44570,327,3,117,0,
4458327,3,118,0,327,
44593,119,0,327,3,
4460120,0,327,3,121,
44610,327,3,122,0,
4462327,3,48,0,327,
44633,49,0,327,3,
446450,0,327,3,51,
44650,327,3,52,0,
4466327,3,53,0,327,
44673,54,0,327,3,
446855,0,327,3,56,
44690,327,3,57,0,
4470327,3,65,0,327,
44713,66,0,327,3,
447267,0,327,3,68,
44730,327,3,69,0,
4474327,3,70,0,327,
44753,71,0,327,3,
447672,0,327,3,73,
44770,327,3,74,0,
4478327,3,75,0,327,
44793,76,0,327,3,
448077,0,327,3,78,
44810,327,3,79,0,
4482327,3,80,0,327,
44833,81,0,327,3,
448482,0,327,3,83,
44850,327,3,84,0,
4486327,3,85,0,327,
44873,86,0,327,3,
448887,0,327,3,88,
44890,327,3,89,0,
4490327,3,90,0,327,
44913,95,0,327,3,
449297,0,327,3,98,
44930,327,3,99,0,
4494327,3,100,0,327,
44953,101,0,327,3,
4496102,0,327,3,103,
44970,327,3,104,0,
4498327,3,105,0,327,
44993,106,0,327,3,
4500107,0,327,3,108,
45010,327,532,11,1,
4502461,0,533,4,32,
450368,0,65,0,84,
45040,65,0,83,0,
450569,0,82,0,86,
45060,69,0,82,0,
450795,0,69,0,86,
45080,69,0,78,0,
450984,0,1,-1,3,
4510115,0,327,3,116,
45110,327,3,117,0,
4512327,3,118,0,327,
45133,119,0,327,3,
4514120,0,327,3,121,
45150,327,3,122,0,
4516327,3,48,0,327,
45173,49,0,327,3,
451850,0,327,3,51,
45190,327,3,52,0,
4520327,3,53,0,327,
45213,54,0,327,3,
452255,0,327,3,56,
45230,327,3,57,0,
4524327,3,65,0,327,
45253,66,0,327,3,
452667,0,327,3,68,
45270,327,3,69,0,
4528327,3,70,0,327,
45293,71,0,327,3,
453072,0,327,3,73,
45310,327,3,74,0,
4532327,3,75,0,327,
45333,76,0,327,3,
453477,0,327,3,78,
45350,327,3,79,0,
4536327,3,80,0,327,
45373,81,0,327,3,
453882,0,327,3,83,
45390,327,3,84,0,
4540327,3,85,0,327,
45413,86,0,327,3,
454287,0,327,3,88,
45430,327,3,89,0,
4544327,3,90,0,327,
45453,95,0,327,3,
454697,0,327,3,98,
45470,327,3,99,0,
4548327,3,100,0,327,
45493,101,0,327,3,
4550102,0,327,3,103,
45510,327,3,104,0,
4552327,3,105,0,327,
45533,106,0,327,3,
4554107,0,327,3,108,
45550,327,534,11,1,
4556829,0,330,1,-1,
45573,102,0,327,3,
4558103,0,327,3,104,
45590,327,3,105,0,
4560327,3,106,0,327,
45613,107,0,327,3,
4562108,0,327,535,11,
45631,829,0,330,1,
4564-1,3,119,0,327,
45653,120,0,327,3,
4566121,0,327,3,122,
45670,327,3,48,0,
4568327,3,49,0,327,
45693,50,0,327,3,
457051,0,327,3,52,
45710,327,3,53,0,
4572327,3,54,0,327,
45733,55,0,327,3,
457456,0,327,3,57,
45750,327,3,65,0,
4576327,3,66,0,327,
45773,67,0,327,3,
457868,0,327,3,69,
45790,327,3,70,0,
4580327,3,71,0,327,
45813,72,0,327,3,
458273,0,327,3,74,
45830,327,3,75,0,
4584327,3,76,0,327,
45853,77,0,327,3,
458678,0,327,3,79,
45870,327,3,80,0,
4588327,3,81,0,327,
45893,82,0,327,3,
459083,0,327,3,84,
45910,327,3,85,0,
4592327,3,86,0,327,
45933,87,0,327,3,
459488,0,327,3,89,
45950,327,3,90,0,
4596327,3,95,0,327,
45973,97,0,327,3,
459898,0,327,3,99,
45990,327,3,100,0,
4600327,3,101,0,327,
46013,102,0,327,3,
4602103,0,327,3,104,
46030,327,3,105,0,
4604327,3,106,0,327,
46053,107,0,327,3,
4606108,0,327,536,11,
46071,829,0,330,1,
4608-1,3,115,0,327,
46093,116,0,327,3,
4610117,0,327,3,118,
46110,327,3,119,0,
4612327,3,120,0,327,
46133,121,0,327,3,
4614122,0,327,3,48,
46150,327,3,49,0,
4616327,3,50,0,327,
46173,51,0,327,3,
461852,0,327,3,53,
46190,327,3,54,0,
4620327,3,55,0,327,
46213,56,0,327,3,
462257,0,327,3,65,
46230,327,3,66,0,
4624327,3,67,0,327,
46253,68,0,327,3,
462669,0,327,3,70,
46270,327,3,71,0,
4628327,3,72,0,327,
46293,73,0,327,3,
463074,0,327,3,75,
46310,327,3,76,0,
4632327,3,77,0,327,
46333,78,0,327,3,
463479,0,327,3,80,
46350,327,3,81,0,
4636327,3,82,0,327,
46373,83,0,327,3,
463884,0,327,3,85,
46390,327,3,86,0,
4640327,3,87,0,327,
46413,88,0,327,3,
464289,0,327,3,90,
46430,327,3,95,0,
4644327,3,97,0,327,
46453,98,0,327,3,
464699,0,327,3,100,
46470,327,3,101,0,
4648327,3,102,0,327,
46493,103,0,327,3,
4650104,0,327,3,105,
46510,327,3,106,0,
4652327,3,107,0,327,
46533,108,0,327,537,
465411,1,829,0,330,
46551,-1,3,102,0,
4656327,3,103,0,327,
46573,104,0,327,3,
4658105,0,327,3,106,
46590,327,3,107,0,
4660327,3,108,0,327,
4661538,11,1,829,0,
4662330,1,-1,3,116,
46630,327,3,117,0,
4664327,3,118,0,327,
46653,119,0,327,3,
4666120,0,327,3,121,
46670,327,3,122,0,
4668327,3,48,0,327,
46693,49,0,327,3,
467050,0,327,3,51,
46710,327,3,52,0,
4672327,3,53,0,327,
46733,54,0,327,3,
467455,0,327,3,56,
46750,327,3,57,0,
4676327,3,65,0,327,
46773,66,0,327,3,
467867,0,327,3,68,
46790,327,3,69,0,
4680327,3,70,0,327,
46813,71,0,327,3,
468272,0,327,3,73,
46830,327,3,74,0,
4684327,3,75,0,327,
46853,76,0,327,3,
468677,0,327,3,78,
46870,327,3,79,0,
4688327,3,80,0,327,
46893,81,0,327,3,
469082,0,327,3,83,
46910,327,3,84,0,
4692327,3,85,0,327,
46933,86,0,327,3,
469487,0,327,3,88,
46950,327,3,89,0,
4696327,3,90,0,327,
46973,95,0,327,3,
469897,0,327,3,98,
46990,327,3,99,0,
4700327,3,100,0,327,
47013,101,0,327,3,
4702102,0,327,3,103,
47030,327,3,104,0,
4704327,3,105,0,327,
47053,106,0,327,3,
4706107,0,327,3,108,
47070,327,539,11,1,
4708829,0,330,1,-1,
47093,98,0,327,3,
471099,0,327,3,100,
47110,327,3,101,0,
4712327,3,102,0,327,
47133,103,0,327,3,
4714104,0,327,3,105,
47150,327,3,106,0,
4716327,3,107,0,327,
47173,108,0,327,540,
471811,1,829,0,330,
47191,-1,3,117,0,
4720327,3,118,0,327,
47213,119,0,327,3,
4722120,0,327,3,121,
47230,327,3,122,0,
4724327,3,48,0,327,
47253,49,0,327,3,
472650,0,327,3,51,
47270,327,3,52,0,
4728327,3,53,0,327,
47293,54,0,327,3,
473055,0,327,3,56,
47310,327,3,57,0,
4732327,3,65,0,327,
47333,66,0,327,3,
473467,0,327,3,68,
47350,327,3,69,0,
4736327,3,70,0,327,
47373,71,0,327,3,
473872,0,327,3,73,
47390,327,3,74,0,
4740327,3,75,0,327,
47413,76,0,327,3,
474277,0,327,3,78,
47430,327,3,79,0,
4744327,3,80,0,327,
47453,81,0,327,3,
474682,0,327,3,83,
47470,327,3,84,0,
4748327,3,85,0,327,
47493,86,0,327,3,
475087,0,327,3,88,
47510,327,3,89,0,
4752327,3,90,0,327,
47533,95,0,327,3,
475497,0,327,3,98,
47550,327,3,99,0,
4756327,3,100,0,327,
47573,101,0,327,3,
4758102,0,327,3,103,
47590,327,3,104,0,
4760327,3,105,0,327,
47613,106,0,327,3,
4762107,0,327,3,108,
47630,327,541,11,1,
4764829,0,330,1,-1,
47653,98,0,327,3,
476699,0,327,3,100,
47670,327,3,101,0,
4768542,12,1,27515,543,
47695,63,3,109,0,
4770327,3,110,0,327,
47713,111,0,327,3,
4772112,0,327,3,113,
47730,327,3,114,0,
4774327,3,115,0,327,
47753,116,0,327,3,
4776117,0,327,3,118,
47770,327,3,119,0,
4778327,3,120,0,327,
47793,121,0,327,3,
4780122,0,327,3,48,
47810,327,3,49,0,
4782327,3,50,0,327,
47833,51,0,327,3,
478452,0,327,3,53,
47850,327,3,54,0,
4786327,3,55,0,327,
47873,56,0,327,3,
478857,0,327,3,65,
47890,327,3,66,0,
4790327,3,67,0,327,
47913,68,0,327,3,
479269,0,327,3,70,
47930,327,3,71,0,
4794327,3,72,0,327,
47953,73,0,327,3,
479674,0,327,3,75,
47970,327,3,76,0,
4798327,3,77,0,327,
47993,78,0,327,3,
480079,0,327,3,80,
48010,327,3,81,0,
4802327,3,82,0,327,
48033,83,0,327,3,
480484,0,327,3,85,
48050,327,3,86,0,
4806327,3,87,0,327,
48073,88,0,327,3,
480889,0,327,3,90,
48090,327,3,95,0,
4810327,3,97,0,327,
48113,98,0,327,3,
481299,0,327,3,100,
48130,327,3,101,0,
4814327,3,102,0,544,
481512,1,27563,545,5,
481663,3,109,0,327,
48173,110,0,327,3,
4818111,0,327,3,112,
48190,327,3,113,0,
4820327,3,114,0,327,
48213,115,0,327,3,
4822116,0,327,3,117,
48230,327,3,118,0,
4824327,3,119,0,327,
48253,120,0,327,3,
4826121,0,327,3,122,
48270,327,3,48,0,
4828327,3,49,0,327,
48293,50,0,327,3,
483051,0,327,3,52,
48310,327,3,53,0,
4832327,3,54,0,327,
48333,55,0,327,3,
483456,0,327,3,57,
48350,327,3,65,0,
4836327,3,66,0,327,
48373,67,0,327,3,
483868,0,327,3,69,
48390,327,3,70,0,
4840327,3,71,0,327,
48413,72,0,327,3,
484273,0,327,3,74,
48430,327,3,75,0,
4844327,3,76,0,327,
48453,77,0,327,3,
484678,0,327,3,79,
48470,327,3,80,0,
4848327,3,81,0,327,
48493,82,0,327,3,
485083,0,327,3,84,
48510,327,3,85,0,
4852327,3,86,0,327,
48533,87,0,327,3,
485488,0,327,3,89,
48550,327,3,90,0,
4856327,3,95,0,327,
48573,97,0,546,12,
48581,27606,547,5,63,
48593,109,0,327,3,
4860110,0,327,3,111,
48610,327,3,112,0,
4862327,3,113,0,327,
48633,114,0,327,3,
4864115,0,327,3,116,
48650,327,3,117,0,
4866548,12,1,27642,549,
48675,63,3,109,0,
4868327,3,110,0,327,
48693,111,0,327,3,
4870112,0,327,3,113,
48710,327,3,114,0,
4872327,3,115,0,327,
48733,116,0,327,3,
4874117,0,327,3,118,
48750,327,3,119,0,
4876327,3,120,0,327,
48773,121,0,327,3,
4878122,0,327,3,48,
48790,327,3,49,0,
4880327,3,50,0,327,
48813,51,0,327,3,
488252,0,327,3,53,
48830,327,3,54,0,
4884327,3,55,0,327,
48853,56,0,327,3,
488657,0,327,3,65,
48870,327,3,66,0,
4888327,3,67,0,327,
48893,68,0,327,3,
489069,0,327,3,70,
48910,327,3,71,0,
4892327,3,72,0,327,
48933,73,0,327,3,
489474,0,327,3,75,
48950,327,3,76,0,
4896327,3,77,0,327,
48973,78,0,327,3,
489879,0,327,3,80,
48990,327,3,81,0,
4900327,3,82,0,327,
49013,83,0,327,3,
490284,0,327,3,85,
49030,327,3,86,0,
4904327,3,87,0,327,
49053,88,0,327,3,
490689,0,327,3,90,
49070,327,3,95,0,
4908327,3,97,0,327,
49093,98,0,327,3,
491099,0,327,3,100,
49110,327,3,101,0,
4912327,3,102,0,327,
49133,103,0,327,3,
4914104,0,327,3,105,
49150,327,3,106,0,
4916327,3,107,0,327,
49173,108,0,550,12,
49181,27696,551,5,63,
49193,109,0,327,3,
4920110,0,327,3,111,
49210,327,3,112,0,
4922327,3,113,0,327,
49233,114,0,327,3,
4924115,0,327,3,116,
49250,552,12,1,27731,
4926553,5,63,3,109,
49270,327,3,110,0,
4928327,3,111,0,327,
49293,112,0,327,3,
4930113,0,327,3,114,
49310,327,3,115,0,
4932327,3,116,0,327,
49333,117,0,327,3,
4934118,0,327,3,119,
49350,327,3,120,0,
4936327,3,121,0,327,
49373,122,0,327,3,
493848,0,327,3,49,
49390,327,3,50,0,
4940327,3,51,0,327,
49413,52,0,327,3,
494253,0,327,3,54,
49430,327,3,55,0,
4944327,3,56,0,327,
49453,57,0,327,3,
494665,0,327,3,66,
49470,327,3,67,0,
4948327,3,68,0,327,
49493,69,0,327,3,
495070,0,327,3,71,
49510,327,3,72,0,
4952327,3,73,0,327,
49533,74,0,327,3,
495475,0,327,3,76,
49550,327,3,77,0,
4956327,3,78,0,327,
49573,79,0,327,3,
495880,0,327,3,81,
49590,327,3,82,0,
4960327,3,83,0,327,
49613,84,0,327,3,
496285,0,327,3,86,
49630,327,3,87,0,
4964327,3,88,0,327,
49653,89,0,327,3,
496690,0,327,3,95,
49670,327,3,97,0,
4968327,3,98,0,327,
49693,99,0,327,3,
4970100,0,327,3,101,
49710,327,3,102,0,
4972327,3,103,0,327,
49733,104,0,327,3,
4974105,0,327,3,106,
49750,327,3,107,0,
4976327,3,108,0,327,
4977554,11,1,245,0,
4978555,4,26,68,0,
497969,0,70,0,65,
49800,85,0,76,0,
498184,0,95,0,83,
49820,84,0,65,0,
498384,0,69,0,1,
4984-1,3,117,0,327,
49853,118,0,327,3,
4986119,0,327,3,120,
49870,327,3,121,0,
4988327,3,122,0,327,
49893,48,0,327,3,
499049,0,327,3,50,
49910,327,3,51,0,
4992327,3,52,0,327,
49933,53,0,327,3,
499454,0,327,3,55,
49950,327,3,56,0,
4996327,3,57,0,327,
49973,65,0,327,3,
499866,0,327,3,67,
49990,327,3,68,0,
5000327,3,69,0,327,
50013,70,0,327,3,
500271,0,327,3,72,
50030,327,3,73,0,
5004327,3,74,0,327,
50053,75,0,327,3,
500676,0,327,3,77,
50070,327,3,78,0,
5008327,3,79,0,327,
50093,80,0,327,3,
501081,0,327,3,82,
50110,327,3,83,0,
5012327,3,84,0,327,
50133,85,0,327,3,
501486,0,327,3,87,
50150,327,3,88,0,
5016327,3,89,0,327,
50173,90,0,327,3,
501895,0,327,3,97,
50190,327,3,98,0,
5020327,3,99,0,327,
50213,100,0,327,3,
5022101,0,327,3,102,
50230,327,3,103,0,
5024327,3,104,0,327,
50253,105,0,327,3,
5026106,0,327,3,107,
50270,327,3,108,0,
5028327,556,11,1,829,
50290,330,1,-1,557,
503011,1,829,0,330,
50311,-1,3,118,0,
5032327,3,119,0,327,
50333,120,0,327,3,
5034121,0,327,3,122,
50350,327,3,48,0,
5036327,3,49,0,327,
50373,50,0,327,3,
503851,0,327,3,52,
50390,327,3,53,0,
5040327,3,54,0,327,
50413,55,0,327,3,
504256,0,327,3,57,
50430,327,3,65,0,
5044327,3,66,0,327,
50453,67,0,327,3,
504668,0,327,3,69,
50470,327,3,70,0,
5048327,3,71,0,327,
50493,72,0,327,3,
505073,0,327,3,74,
50510,327,3,75,0,
5052327,3,76,0,327,
50533,77,0,327,3,
505478,0,327,3,79,
50550,327,3,80,0,
5056327,3,81,0,327,
50573,82,0,327,3,
505883,0,327,3,84,
50590,327,3,85,0,
5060327,3,86,0,327,
50613,87,0,327,3,
506288,0,327,3,89,
50630,327,3,90,0,
5064327,3,95,0,327,
50653,97,0,327,3,
506698,0,327,3,99,
50670,327,3,100,0,
5068327,3,101,0,327,
50693,102,0,327,3,
5070103,0,327,3,104,
50710,327,3,105,0,
5072327,3,106,0,327,
50733,107,0,327,3,
5074108,0,327,558,11,
50751,829,0,330,1,
5076-1,3,98,0,327,
50773,99,0,327,3,
5078100,0,327,3,101,
50790,327,3,102,0,
5080327,3,103,0,327,
50813,104,0,327,3,
5082105,0,327,3,106,
50830,327,3,107,0,
5084327,3,108,0,327,
5085559,11,1,829,0,
5086330,1,-1,3,103,
50870,327,3,104,0,
5088327,3,105,0,327,
50893,106,0,327,3,
5090107,0,327,3,108,
50910,327,560,11,1,
5092829,0,330,1,-1,
50933,102,0,327,3,
5094103,0,327,3,104,
50950,327,3,105,0,
5096327,3,106,0,327,
50973,107,0,327,3,
5098108,0,327,561,11,
50991,829,0,330,1,
5100-1,3,101,0,562,
510112,1,28309,563,5,
510263,3,109,0,564,
510312,1,28337,565,5,
510463,3,109,0,327,
51053,110,0,327,3,
5106111,0,327,3,112,
51070,327,3,113,0,
5108327,3,114,0,327,
51093,115,0,327,3,
5110116,0,327,3,117,
51110,327,3,118,0,
5112327,3,119,0,327,
51133,120,0,327,3,
5114121,0,327,3,122,
51150,327,3,48,0,
5116327,3,49,0,327,
51173,50,0,327,3,
511851,0,327,3,52,
51190,327,3,53,0,
5120327,3,54,0,327,
51213,55,0,327,3,
512256,0,327,3,57,
51230,327,3,65,0,
5124327,3,66,0,327,
51253,67,0,327,3,
512668,0,327,3,69,
51270,327,3,70,0,
5128327,3,71,0,327,
51293,72,0,327,3,
513073,0,327,3,74,
51310,327,3,75,0,
5132327,3,76,0,327,
51333,77,0,327,3,
513478,0,327,3,79,
51350,327,3,80,0,
5136327,3,81,0,327,
51373,82,0,327,3,
513883,0,327,3,84,
51390,327,3,85,0,
5140327,3,86,0,327,
51413,87,0,327,3,
514288,0,327,3,89,
51430,327,3,90,0,
5144327,3,95,0,327,
51453,97,0,566,12,
51461,28380,567,5,63,
51473,109,0,327,3,
5148110,0,327,3,111,
51490,327,3,112,0,
5150327,3,113,0,327,
51513,114,0,327,3,
5152115,0,327,3,116,
51530,327,3,117,0,
5154327,3,118,0,327,
51553,119,0,327,3,
5156120,0,327,3,121,
51570,327,3,122,0,
5158327,3,48,0,327,
51593,49,0,327,3,
516050,0,327,3,51,
51610,327,3,52,0,
5162327,3,53,0,327,
51633,54,0,327,3,
516455,0,327,3,56,
51650,327,3,57,0,
5166327,3,65,0,327,
51673,66,0,327,3,
516867,0,327,3,68,
51690,327,3,69,0,
5170327,3,70,0,327,
51713,71,0,327,3,
517272,0,327,3,73,
51730,327,3,74,0,
5174327,3,75,0,327,
51753,76,0,327,3,
517677,0,327,3,78,
51770,327,3,79,0,
5178327,3,80,0,327,
51793,81,0,327,3,
518082,0,327,3,83,
51810,327,3,84,0,
5182327,3,85,0,327,
51833,86,0,327,3,
518487,0,327,3,88,
51850,327,3,89,0,
5186327,3,90,0,327,
51873,95,0,327,3,
518897,0,327,3,98,
51890,327,3,99,0,
5190327,3,100,0,327,
51913,101,0,327,3,
5192102,0,327,3,103,
51930,327,3,104,0,
5194327,3,105,0,568,
519512,1,28431,569,5,
519663,3,109,0,327,
51973,110,0,327,3,
5198111,0,327,3,112,
51990,327,3,113,0,
5200327,3,114,0,327,
52013,115,0,327,3,
5202116,0,327,3,117,
52030,327,3,118,0,
5204327,3,119,0,327,
52053,120,0,327,3,
5206121,0,327,3,122,
52070,327,3,48,0,
5208327,3,49,0,327,
52093,50,0,327,3,
521051,0,327,3,52,
52110,327,3,53,0,
5212327,3,54,0,327,
52133,55,0,327,3,
521456,0,327,3,57,
52150,327,3,65,0,
5216327,3,66,0,327,
52173,67,0,327,3,
521868,0,327,3,69,
52190,327,3,70,0,
5220327,3,71,0,327,
52213,72,0,327,3,
522273,0,327,3,74,
52230,327,3,75,0,
5224327,3,76,0,327,
52253,77,0,327,3,
522678,0,327,3,79,
52270,327,3,80,0,
5228327,3,81,0,327,
52293,82,0,327,3,
523083,0,327,3,84,
52310,327,3,85,0,
5232327,3,86,0,327,
52333,87,0,327,3,
523488,0,327,3,89,
52350,327,3,90,0,
5236327,3,95,0,327,
52373,97,0,327,3,
523898,0,327,3,99,
52390,327,3,100,0,
5240327,3,101,0,327,
52413,102,0,327,3,
5242103,0,327,3,104,
52430,327,3,105,0,
5244327,3,106,0,327,
52453,107,0,327,3,
5246108,0,570,12,1,
524728485,571,5,63,3,
5248109,0,327,3,110,
52490,327,3,111,0,
5250327,3,112,0,327,
52513,113,0,327,3,
5252114,0,327,3,115,
52530,327,3,116,0,
5254327,3,117,0,327,
52553,118,0,327,3,
5256119,0,327,3,120,
52570,327,3,121,0,
5258327,3,122,0,327,
52593,48,0,327,3,
526049,0,327,3,50,
52610,327,3,51,0,
5262327,3,52,0,327,
52633,53,0,327,3,
526454,0,327,3,55,
52650,327,3,56,0,
5266327,3,57,0,327,
52673,65,0,327,3,
526866,0,327,3,67,
52690,327,3,68,0,
5270327,3,69,0,327,
52713,70,0,327,3,
527271,0,327,3,72,
52730,327,3,73,0,
5274327,3,74,0,327,
52753,75,0,327,3,
527676,0,327,3,77,
52770,327,3,78,0,
5278327,3,79,0,327,
52793,80,0,327,3,
528081,0,327,3,82,
52810,327,3,83,0,
5282327,3,84,0,327,
52833,85,0,327,3,
528486,0,327,3,87,
52850,327,3,88,0,
5286327,3,89,0,327,
52873,90,0,327,3,
528895,0,327,3,97,
52890,327,3,98,0,
5290327,3,99,0,327,
52913,100,0,327,3,
5292101,0,327,3,102,
52930,327,3,103,0,
5294327,3,104,0,327,
52953,105,0,327,3,
5296106,0,327,3,107,
52970,327,3,108,0,
5298327,572,11,1,475,
52990,573,4,22,69,
53000,77,0,65,0,
530173,0,76,0,95,
53020,69,0,86,0,
530369,0,78,0,84,
53040,1,-1,574,11,
53051,829,0,330,1,
5306-1,3,106,0,327,
53073,107,0,327,3,
5308108,0,327,575,11,
53091,829,0,330,1,
5310-1,3,98,0,327,
53113,99,0,327,3,
5312100,0,327,3,101,
53130,327,3,102,0,
5314327,3,103,0,327,
53153,104,0,327,3,
5316105,0,327,3,106,
53170,327,3,107,0,
5318327,3,108,0,327,
5319576,11,1,829,0,
5320330,1,-1,3,110,
53210,327,3,111,0,
5322327,3,112,0,327,
53233,113,0,327,3,
5324114,0,327,3,115,
53250,327,3,116,0,
5326327,3,117,0,327,
53273,118,0,327,3,
5328119,0,327,3,120,
53290,327,3,121,0,
5330327,3,122,0,327,
53313,48,0,327,3,
533249,0,327,3,50,
53330,327,3,51,0,
5334327,3,52,0,327,
53353,53,0,327,3,
533654,0,327,3,55,
53370,327,3,56,0,
5338327,3,57,0,327,
53393,65,0,327,3,
534066,0,327,3,67,
53410,327,3,68,0,
5342327,3,69,0,327,
53433,70,0,327,3,
534471,0,327,3,72,
53450,327,3,73,0,
5346327,3,74,0,327,
53473,75,0,327,3,
534876,0,327,3,77,
53490,327,3,78,0,
5350327,3,79,0,327,
53513,80,0,327,3,
535281,0,327,3,82,
53530,327,3,83,0,
5354327,3,84,0,327,
53553,85,0,327,3,
535686,0,327,3,87,
53570,327,3,88,0,
5358327,3,89,0,327,
53593,90,0,327,3,
536095,0,327,3,97,
53610,327,3,98,0,
5362327,3,99,0,327,
53633,100,0,327,3,
5364101,0,327,3,102,
53650,327,3,103,0,
5366327,3,104,0,327,
53673,105,0,327,3,
5368106,0,327,3,107,
53690,327,3,108,0,
5370577,12,1,28843,578,
53715,63,3,109,0,
5372327,3,110,0,327,
53733,111,0,327,3,
5374112,0,327,3,113,
53750,327,3,114,0,
5376327,3,115,0,579,
537712,1,28877,580,5,
537863,3,109,0,327,
53793,110,0,327,3,
5380111,0,327,3,112,
53810,327,3,113,0,
5382327,3,114,0,327,
53833,115,0,327,3,
5384116,0,327,3,117,
53850,327,3,118,0,
5386327,3,119,0,327,
53873,120,0,327,3,
5388121,0,327,3,122,
53890,327,3,48,0,
5390327,3,49,0,327,
53913,50,0,327,3,
539251,0,327,3,52,
53930,327,3,53,0,
5394327,3,54,0,327,
53953,55,0,327,3,
539656,0,327,3,57,
53970,327,3,65,0,
5398327,3,66,0,327,
53993,67,0,327,3,
540068,0,327,3,69,
54010,327,3,70,0,
5402327,3,71,0,327,
54033,72,0,327,3,
540473,0,327,3,74,
54050,327,3,75,0,
5406327,3,76,0,327,
54073,77,0,327,3,
540878,0,327,3,79,
54090,327,3,80,0,
5410327,3,81,0,327,
54113,82,0,327,3,
541283,0,327,3,84,
54130,327,3,85,0,
5414327,3,86,0,327,
54153,87,0,327,3,
541688,0,327,3,89,
54170,327,3,90,0,
5418327,3,95,0,327,
54193,97,0,327,3,
542098,0,327,3,99,
54210,327,3,100,0,
5422327,3,101,0,581,
542312,1,28924,582,5,
542463,3,109,0,327,
54253,110,0,327,3,
5426111,0,327,3,112,
54270,327,3,113,0,
5428327,3,114,0,327,
54293,115,0,327,3,
5430116,0,327,3,117,
54310,327,3,118,0,
5432327,3,119,0,327,
54333,120,0,327,3,
5434121,0,327,3,122,
54350,327,3,48,0,
5436327,3,49,0,327,
54373,50,0,327,3,
543851,0,327,3,52,
54390,327,3,53,0,
5440327,3,54,0,327,
54413,55,0,327,3,
544256,0,327,3,57,
54430,327,3,65,0,
5444327,3,66,0,327,
54453,67,0,327,3,
544668,0,327,3,69,
54470,327,3,70,0,
5448327,3,71,0,327,
54493,72,0,327,3,
545073,0,327,3,74,
54510,327,3,75,0,
5452327,3,76,0,327,
54533,77,0,327,3,
545478,0,327,3,79,
54550,327,3,80,0,
5456327,3,81,0,327,
54573,82,0,327,3,
545883,0,327,3,84,
54590,327,3,85,0,
5460327,3,86,0,327,
54613,87,0,327,3,
546288,0,327,3,89,
54630,327,3,90,0,
5464327,3,95,0,327,
54653,97,0,327,3,
546698,0,327,3,99,
54670,327,3,100,0,
5468327,3,101,0,327,
54693,102,0,327,3,
5470103,0,327,3,104,
54710,327,3,105,0,
5472327,3,106,0,327,
54733,107,0,327,3,
5474108,0,327,583,11,
54751,215,0,584,4,
54768,69,0,76,0,
547783,0,69,0,1,
5478-1,3,102,0,327,
54793,103,0,327,3,
5480104,0,327,3,105,
54810,327,3,106,0,
5482327,3,107,0,327,
54833,108,0,327,585,
548411,1,829,0,330,
54851,-1,3,116,0,
5486327,3,117,0,327,
54873,118,0,327,3,
5488119,0,327,3,120,
54890,327,3,121,0,
5490327,3,122,0,327,
54913,48,0,327,3,
549249,0,327,3,50,
54930,327,3,51,0,
5494327,3,52,0,327,
54953,53,0,327,3,
549654,0,327,3,55,
54970,327,3,56,0,
5498327,3,57,0,327,
54993,65,0,327,3,
550066,0,327,3,67,
55010,327,3,68,0,
5502327,3,69,0,327,
55033,70,0,327,3,
550471,0,327,3,72,
55050,327,3,73,0,
5506327,3,74,0,327,
55073,75,0,327,3,
550876,0,327,3,77,
55090,327,3,78,0,
5510327,3,79,0,327,
55113,80,0,327,3,
551281,0,327,3,82,
55130,327,3,83,0,
5514327,3,84,0,327,
55153,85,0,327,3,
551686,0,327,3,87,
55170,327,3,88,0,
5518327,3,89,0,327,
55193,90,0,327,3,
552095,0,327,3,97,
55210,327,3,98,0,
5522327,3,99,0,327,
55233,100,0,327,3,
5524101,0,327,3,102,
55250,327,3,103,0,
5526327,3,104,0,327,
55273,105,0,327,3,
5528106,0,327,3,107,
55290,327,3,108,0,
5530327,586,11,1,829,
55310,330,1,-1,587,
553211,1,829,0,330,
55331,-1,3,102,0,
5534588,12,1,29270,589,
55355,63,3,109,0,
5536327,3,110,0,327,
55373,111,0,590,12,
55381,29300,591,5,63,
55393,109,0,327,3,
5540110,0,327,3,111,
55410,327,3,112,0,
5542327,3,113,0,327,
55433,114,0,592,12,
55441,29333,593,5,63,
55453,109,0,327,3,
5546110,0,327,3,111,
55470,327,3,112,0,
5548327,3,113,0,327,
55493,114,0,327,3,
5550115,0,327,3,116,
55510,327,3,117,0,
5552327,3,118,0,327,
55533,119,0,327,3,
5554120,0,327,3,121,
55550,327,3,122,0,
5556327,3,48,0,327,
55573,49,0,327,3,
555850,0,327,3,51,
55590,327,3,52,0,
5560327,3,53,0,327,
55613,54,0,327,3,
556255,0,327,3,56,
55630,327,3,57,0,
5564327,3,65,0,327,
55653,66,0,327,3,
556667,0,327,3,68,
55670,327,3,69,0,
5568327,3,70,0,327,
55693,71,0,327,3,
557072,0,327,3,73,
55710,327,3,74,0,
5572327,3,75,0,327,
55733,76,0,327,3,
557477,0,327,3,78,
55750,327,3,79,0,
5576327,3,80,0,327,
55773,81,0,327,3,
557882,0,327,3,83,
55790,327,3,84,0,
5580327,3,85,0,327,
55813,86,0,327,3,
558287,0,327,3,88,
55830,327,3,89,0,
5584327,3,90,0,327,
55853,95,0,327,3,
558697,0,327,3,98,
55870,327,3,99,0,
5588327,3,100,0,327,
55893,101,0,327,3,
5590102,0,327,3,103,
55910,327,3,104,0,
5592327,3,105,0,327,
55933,106,0,327,3,
5594107,0,327,3,108,
55950,327,594,11,1,
5596238,0,595,4,6,
559770,0,79,0,82,
55980,1,-1,3,115,
55990,327,3,116,0,
5600327,3,117,0,327,
56013,118,0,327,3,
5602119,0,327,3,120,
56030,327,3,121,0,
5604327,3,122,0,327,
56053,48,0,327,3,
560649,0,327,3,50,
56070,327,3,51,0,
5608327,3,52,0,327,
56093,53,0,327,3,
561054,0,327,3,55,
56110,327,3,56,0,
5612327,3,57,0,327,
56133,65,0,327,3,
561466,0,327,3,67,
56150,327,3,68,0,
5616327,3,69,0,327,
56173,70,0,327,3,
561871,0,327,3,72,
56190,327,3,73,0,
5620327,3,74,0,327,
56213,75,0,327,3,
562276,0,327,3,77,
56230,327,3,78,0,
5624327,3,79,0,327,
56253,80,0,327,3,
562681,0,327,3,82,
56270,327,3,83,0,
5628327,3,84,0,327,
56293,85,0,327,3,
563086,0,327,3,87,
56310,327,3,88,0,
5632327,3,89,0,327,
56333,90,0,327,3,
563495,0,327,3,97,
56350,327,3,98,0,
5636327,3,99,0,327,
56373,100,0,327,3,
5638101,0,327,3,102,
56390,327,3,103,0,
5640327,3,104,0,327,
56413,105,0,327,3,
5642106,0,327,3,107,
56430,327,3,108,0,
5644327,596,11,1,829,
56450,330,1,-1,3,
5646112,0,327,3,113,
56470,327,3,114,0,
5648327,3,115,0,327,
56493,116,0,327,3,
5650117,0,327,3,118,
56510,327,3,119,0,
5652327,3,120,0,327,
56533,121,0,327,3,
5654122,0,327,3,48,
56550,327,3,49,0,
5656327,3,50,0,327,
56573,51,0,327,3,
565852,0,327,3,53,
56590,327,3,54,0,
5660327,3,55,0,327,
56613,56,0,327,3,
566257,0,327,3,65,
56630,327,3,66,0,
5664327,3,67,0,327,
56653,68,0,327,3,
566669,0,327,3,70,
56670,327,3,71,0,
5668327,3,72,0,327,
56693,73,0,327,3,
567074,0,327,3,75,
56710,327,3,76,0,
5672327,3,77,0,327,
56733,78,0,327,3,
567479,0,327,3,80,
56750,327,3,81,0,
5676327,3,82,0,327,
56773,83,0,327,3,
567884,0,327,3,85,
56790,327,3,86,0,
5680327,3,87,0,327,
56813,88,0,327,3,
568289,0,327,3,90,
56830,327,3,95,0,
5684327,3,97,0,327,
56853,98,0,327,3,
568699,0,327,3,100,
56870,327,3,101,0,
5688327,3,102,0,327,
56893,103,0,327,3,
5690104,0,327,3,105,
56910,327,3,106,0,
5692327,3,107,0,327,
56933,108,0,597,12,
56941,29564,598,5,63,
56953,109,0,327,3,
5696110,0,327,3,111,
56970,599,12,1,29594,
5698600,5,63,3,109,
56990,327,3,110,0,
5700327,3,111,0,327,
57013,112,0,327,3,
5702113,0,327,3,114,
57030,327,3,115,0,
5704327,3,116,0,327,
57053,117,0,327,3,
5706118,0,327,3,119,
57070,327,3,120,0,
5708327,3,121,0,327,
57093,122,0,327,3,
571048,0,327,3,49,
57110,327,3,50,0,
5712327,3,51,0,327,
57133,52,0,327,3,
571453,0,327,3,54,
57150,327,3,55,0,
5716327,3,56,0,327,
57173,57,0,327,3,
571865,0,327,3,66,
57190,327,3,67,0,
5720327,3,68,0,327,
57213,69,0,327,3,
572270,0,327,3,71,
57230,327,3,72,0,
5724327,3,73,0,327,
57253,74,0,327,3,
572675,0,327,3,76,
57270,327,3,77,0,
5728327,3,78,0,327,
57293,79,0,327,3,
573080,0,327,3,81,
57310,327,3,82,0,
5732327,3,83,0,327,
57333,84,0,327,3,
573485,0,327,3,86,
57350,327,3,87,0,
5736327,3,88,0,327,
57373,89,0,327,3,
573890,0,327,3,95,
57390,327,3,97,0,
5740601,12,1,29637,602,
57415,63,3,109,0,
5742327,3,110,0,327,
57433,111,0,327,3,
5744112,0,327,3,113,
57450,327,3,114,0,
5746327,3,115,0,327,
57473,116,0,603,12,
57481,29672,604,5,63,
57493,109,0,327,3,
5750110,0,327,3,111,
57510,327,3,112,0,
5752327,3,113,0,327,
57533,114,0,327,3,
5754115,0,327,3,116,
57550,327,3,117,0,
5756327,3,118,0,327,
57573,119,0,327,3,
5758120,0,327,3,121,
57590,327,3,122,0,
5760327,3,48,0,327,
57613,49,0,327,3,
576250,0,327,3,51,
57630,327,3,52,0,
5764327,3,53,0,327,
57653,54,0,327,3,
576655,0,327,3,56,
57670,327,3,57,0,
5768327,3,65,0,327,
57693,66,0,327,3,
577067,0,327,3,68,
57710,327,3,69,0,
5772327,3,70,0,327,
57733,71,0,327,3,
577472,0,327,3,73,
57750,327,3,74,0,
5776327,3,75,0,327,
57773,76,0,327,3,
577877,0,327,3,78,
57790,327,3,79,0,
5780327,3,80,0,327,
57813,81,0,327,3,
578282,0,327,3,83,
57830,327,3,84,0,
5784327,3,85,0,327,
57853,86,0,327,3,
578687,0,327,3,88,
57870,327,3,89,0,
5788327,3,90,0,327,
57893,95,0,327,3,
579097,0,327,3,98,
57910,327,3,99,0,
5792327,3,100,0,327,
57933,101,0,327,3,
5794102,0,327,3,103,
57950,327,3,104,0,
5796327,3,105,0,327,
57973,106,0,327,3,
5798107,0,327,3,108,
57990,327,605,11,1,
5800294,0,606,4,20,
580170,0,76,0,79,
58020,65,0,84,0,
580395,0,84,0,89,
58040,80,0,69,0,
58051,-1,3,117,0,
5806327,3,118,0,327,
58073,119,0,327,3,
5808120,0,327,3,121,
58090,327,3,122,0,
5810327,3,48,0,327,
58113,49,0,327,3,
581250,0,327,3,51,
58130,327,3,52,0,
5814327,3,53,0,327,
58153,54,0,327,3,
581655,0,327,3,56,
58170,327,3,57,0,
5818327,3,65,0,327,
58193,66,0,327,3,
582067,0,327,3,68,
58210,327,3,69,0,
5822327,3,70,0,327,
58233,71,0,327,3,
582472,0,327,3,73,
58250,327,3,74,0,
5826327,3,75,0,327,
58273,76,0,327,3,
582877,0,327,3,78,
58290,327,3,79,0,
5830327,3,80,0,327,
58313,81,0,327,3,
583282,0,327,3,83,
58330,327,3,84,0,
5834327,3,85,0,327,
58353,86,0,327,3,
583687,0,327,3,88,
58370,327,3,89,0,
5838327,3,90,0,327,
58393,95,0,327,3,
584097,0,327,3,98,
58410,327,3,99,0,
5842327,3,100,0,327,
58433,101,0,327,3,
5844102,0,327,3,103,
58450,327,3,104,0,
5846327,3,105,0,327,
58473,106,0,327,3,
5848107,0,327,3,108,
58490,327,607,11,1,
5850829,0,330,1,-1,
58513,98,0,327,3,
585299,0,327,3,100,
58530,327,3,101,0,
5854327,3,102,0,327,
58553,103,0,327,3,
5856104,0,327,3,105,
58570,327,3,106,0,
5858327,3,107,0,327,
58593,108,0,327,608,
586011,1,829,0,330,
58611,-1,3,112,0,
5862327,3,113,0,327,
58633,114,0,327,3,
5864115,0,327,3,116,
58650,327,3,117,0,
5866327,3,118,0,327,
58673,119,0,327,3,
5868120,0,327,3,121,
58690,327,3,122,0,
5870327,3,48,0,327,
58713,49,0,327,3,
587250,0,327,3,51,
58730,327,3,52,0,
5874327,3,53,0,327,
58753,54,0,327,3,
587655,0,327,3,56,
58770,327,3,57,0,
5878327,3,65,0,327,
58793,66,0,327,3,
588067,0,327,3,68,
58810,327,3,69,0,
5882327,3,70,0,327,
58833,71,0,327,3,
588472,0,327,3,73,
58850,327,3,74,0,
5886327,3,75,0,327,
58873,76,0,327,3,
588877,0,327,3,78,
58890,327,3,79,0,
5890327,3,80,0,327,
58913,81,0,327,3,
589282,0,327,3,83,
58930,327,3,84,0,
5894327,3,85,0,327,
58953,86,0,327,3,
589687,0,327,3,88,
58970,327,3,89,0,
5898327,3,90,0,327,
58993,95,0,327,3,
590097,0,327,3,98,
59010,327,3,99,0,
5902327,3,100,0,327,
59033,101,0,327,3,
5904102,0,327,3,103,
59050,327,3,104,0,
5906327,3,105,0,327,
59073,106,0,327,3,
5908107,0,327,3,108,
59090,327,609,11,1,
5910829,0,330,1,-1,
5911610,11,1,829,0,
5912330,1,-1,3,103,
59130,325,3,104,0,
5914611,12,1,30112,612,
59155,63,3,109,0,
5916327,3,110,0,327,
59173,111,0,327,3,
5918112,0,327,3,113,
59190,327,3,114,0,
5920327,3,115,0,327,
59213,116,0,613,12,
59221,30147,614,5,63,
59233,109,0,327,3,
5924110,0,327,3,111,
59250,327,3,112,0,
5926327,3,113,0,327,
59273,114,0,327,3,
5928115,0,327,3,116,
59290,615,12,1,30182,
5930616,5,63,3,109,
59310,327,3,110,0,
5932327,3,111,0,327,
59333,112,0,617,12,
59341,30213,618,5,63,
59353,109,0,327,3,
5936110,0,327,3,111,
59370,327,3,112,0,
5938327,3,113,0,327,
59393,114,0,327,3,
5940115,0,327,3,116,
59410,327,3,117,0,
5942327,3,118,0,327,
59433,119,0,327,3,
5944120,0,327,3,121,
59450,327,3,122,0,
5946327,3,48,0,327,
59473,49,0,327,3,
594850,0,327,3,51,
59490,327,3,52,0,
5950327,3,53,0,327,
59513,54,0,327,3,
595255,0,327,3,56,
59530,327,3,57,0,
5954327,3,65,0,327,
59553,66,0,327,3,
595667,0,327,3,68,
59570,327,3,69,0,
5958327,3,70,0,327,
59593,71,0,327,3,
596072,0,327,3,73,
59610,327,3,74,0,
5962327,3,75,0,327,
59633,76,0,327,3,
596477,0,327,3,78,
59650,327,3,79,0,
5966327,3,80,0,327,
59673,81,0,327,3,
596882,0,327,3,83,
59690,327,3,84,0,
5970327,3,85,0,327,
59713,86,0,327,3,
597287,0,327,3,88,
59730,327,3,89,0,
5974327,3,90,0,327,
59753,95,0,619,12,
59761,30299,620,5,63,
59773,109,0,327,3,
5978110,0,327,3,111,
59790,327,3,112,0,
5980327,3,113,0,327,
59813,114,0,621,12,
59821,30332,622,5,63,
59833,109,0,327,3,
5984110,0,327,3,111,
59850,327,3,112,0,
5986327,3,113,0,327,
59873,114,0,327,3,
5988115,0,327,3,116,
59890,327,3,117,0,
5990327,3,118,0,327,
59913,119,0,327,3,
5992120,0,327,3,121,
59930,327,3,122,0,
5994327,3,48,0,327,
59953,49,0,327,3,
599650,0,327,3,51,
59970,327,3,52,0,
5998327,3,53,0,327,
59993,54,0,327,3,
600055,0,327,3,56,
60010,327,3,57,0,
6002327,3,65,0,327,
60033,66,0,327,3,
600467,0,327,3,68,
60050,327,3,69,0,
6006327,3,70,0,327,
60073,71,0,327,3,
600872,0,327,3,73,
60090,327,3,74,0,
6010327,3,75,0,327,
60113,76,0,327,3,
601277,0,327,3,78,
60130,327,3,79,0,
6014327,3,80,0,327,
60153,81,0,327,3,
601682,0,327,3,83,
60170,327,3,84,0,
6018327,3,85,0,327,
60193,86,0,327,3,
602087,0,327,3,88,
60210,327,3,89,0,
6022327,3,90,0,327,
60233,95,0,327,3,
602497,0,327,3,98,
60250,327,3,99,0,
6026327,3,100,0,327,
60273,101,0,623,12,
60281,30379,624,5,63,
60293,109,0,327,3,
6030110,0,327,3,111,
60310,327,3,112,0,
6032327,3,113,0,327,
60333,114,0,327,3,
6034115,0,625,12,1,
603530413,626,5,63,3,
6036109,0,327,3,110,
60370,327,3,111,0,
6038327,3,112,0,627,
603912,1,30444,628,5,
604063,3,109,0,327,
60413,110,0,327,3,
6042111,0,629,12,1,
604330474,630,5,63,3,
6044109,0,327,3,110,
60450,631,12,1,30503,
6046632,5,63,3,109,
60470,327,3,110,0,
6048327,3,111,0,327,
60493,112,0,327,3,
6050113,0,327,3,114,
60510,327,3,115,0,
6052633,12,1,30537,634,
60535,63,3,109,0,
6054327,3,110,0,327,
60553,111,0,327,3,
6056112,0,327,3,113,
60570,327,3,114,0,
6058327,3,115,0,327,
60593,116,0,327,3,
6060117,0,327,3,118,
60610,327,3,119,0,
6062327,3,120,0,327,
60633,121,0,327,3,
6064122,0,327,3,48,
60650,327,3,49,0,
6066327,3,50,0,327,
60673,51,0,327,3,
606852,0,327,3,53,
60690,327,3,54,0,
6070327,3,55,0,327,
60713,56,0,327,3,
607257,0,327,3,65,
60730,327,3,66,0,
6074327,3,67,0,327,
60753,68,0,327,3,
607669,0,327,3,70,
60770,327,3,71,0,
6078327,3,72,0,327,
60793,73,0,327,3,
608074,0,327,3,75,
60810,327,3,76,0,
6082327,3,77,0,327,
60833,78,0,327,3,
608479,0,327,3,80,
60850,327,3,81,0,
6086327,3,82,0,327,
60873,83,0,327,3,
608884,0,327,3,85,
60890,327,3,86,0,
6090327,3,87,0,327,
60913,88,0,327,3,
609289,0,327,3,90,
60930,327,3,95,0,
6094327,3,97,0,327,
60953,98,0,327,3,
609699,0,327,3,100,
60970,327,3,101,0,
6098635,12,1,30584,636,
60995,63,3,109,0,
6100327,3,110,0,327,
61013,111,0,327,3,
6102112,0,327,3,113,
61030,327,3,114,0,
6104327,3,115,0,327,
61053,116,0,327,3,
6106117,0,327,3,118,
61070,327,3,119,0,
6108327,3,120,0,327,
61093,121,0,327,3,
6110122,0,327,3,48,
61110,327,3,49,0,
6112327,3,50,0,327,
61133,51,0,327,3,
611452,0,327,3,53,
61150,327,3,54,0,
6116327,3,55,0,327,
61173,56,0,327,3,
611857,0,327,3,65,
61190,327,3,66,0,
6120327,3,67,0,327,
61213,68,0,327,3,
612269,0,327,3,70,
61230,327,3,71,0,
6124327,3,72,0,327,
61253,73,0,327,3,
612674,0,327,3,75,
61270,327,3,76,0,
6128327,3,77,0,327,
61293,78,0,327,3,
613079,0,327,3,80,
61310,327,3,81,0,
6132327,3,82,0,327,
61333,83,0,327,3,
613484,0,327,3,85,
61350,327,3,86,0,
6136327,3,87,0,327,
61373,88,0,327,3,
613889,0,327,3,90,
61390,327,3,95,0,
6140327,3,97,0,327,
61413,98,0,327,3,
614299,0,327,3,100,
61430,327,3,101,0,
6144327,3,102,0,327,
61453,103,0,327,3,
6146104,0,327,3,105,
61470,327,3,106,0,
6148327,3,107,0,327,
61493,108,0,327,637,
615011,1,484,0,638,
61514,38,72,0,84,
61520,84,0,80,0,
615395,0,82,0,69,
61540,83,0,80,0,
615579,0,78,0,83,
61560,69,0,95,0,
615769,0,86,0,69,
61580,78,0,84,0,
61591,-1,3,102,0,
6160327,3,103,0,327,
61613,104,0,327,3,
6162105,0,327,3,106,
61630,327,3,107,0,
6164327,3,108,0,327,
6165639,11,1,829,0,
6166330,1,-1,3,116,
61670,327,3,117,0,
6168327,3,118,0,327,
61693,119,0,327,3,
6170120,0,327,3,121,
61710,327,3,122,0,
6172327,3,48,0,327,
61733,49,0,327,3,
617450,0,327,3,51,
61750,327,3,52,0,
6176327,3,53,0,327,
61773,54,0,327,3,
617855,0,327,3,56,
61790,327,3,57,0,
6180327,3,65,0,327,
61813,66,0,327,3,
618267,0,327,3,68,
61830,327,3,69,0,
6184327,3,70,0,327,
61853,71,0,327,3,
618672,0,327,3,73,
61870,327,3,74,0,
6188327,3,75,0,327,
61893,76,0,327,3,
619077,0,327,3,78,
61910,327,3,79,0,
6192327,3,80,0,327,
61933,81,0,327,3,
619482,0,327,3,83,
61950,327,3,84,0,
6196327,3,85,0,327,
61973,86,0,327,3,
619887,0,327,3,88,
61990,327,3,89,0,
6200327,3,90,0,327,
62013,95,0,327,3,
620297,0,327,3,98,
62030,327,3,99,0,
6204327,3,100,0,327,
62053,101,0,327,3,
6206102,0,327,3,103,
62070,327,3,104,0,
6208327,3,105,0,327,
62093,106,0,327,3,
6210107,0,327,3,108,
62110,327,640,11,1,
6212829,0,330,1,-1,
62133,111,0,327,3,
6214112,0,327,3,113,
62150,327,3,114,0,
6216327,3,115,0,327,
62173,116,0,327,3,
6218117,0,327,3,118,
62190,327,3,119,0,
6220327,3,120,0,327,
62213,121,0,327,3,
6222122,0,327,3,48,
62230,327,3,49,0,
6224327,3,50,0,327,
62253,51,0,327,3,
622652,0,327,3,53,
62270,327,3,54,0,
6228327,3,55,0,327,
62293,56,0,327,3,
623057,0,327,3,65,
62310,327,3,66,0,
6232327,3,67,0,327,
62333,68,0,327,3,
623469,0,327,3,70,
62350,327,3,71,0,
6236327,3,72,0,327,
62373,73,0,327,3,
623874,0,327,3,75,
62390,327,3,76,0,
6240327,3,77,0,327,
62413,78,0,327,3,
624279,0,327,3,80,
62430,327,3,81,0,
6244327,3,82,0,327,
62453,83,0,327,3,
624684,0,327,3,85,
62470,327,3,86,0,
6248327,3,87,0,327,
62493,88,0,327,3,
625089,0,327,3,90,
62510,327,3,95,0,
6252327,3,97,0,327,
62533,98,0,327,3,
625499,0,327,3,100,
62550,327,3,101,0,
6256327,3,102,0,327,
62573,103,0,327,3,
6258104,0,327,3,105,
62590,327,3,106,0,
6260327,3,107,0,327,
62613,108,0,327,641,
626211,1,829,0,330,
62631,-1,3,112,0,
6264327,3,113,0,327,
62653,114,0,327,3,
6266115,0,327,3,116,
62670,327,3,117,0,
6268327,3,118,0,327,
62693,119,0,327,3,
6270120,0,327,3,121,
62710,327,3,122,0,
6272327,3,48,0,327,
62733,49,0,327,3,
627450,0,327,3,51,
62750,327,3,52,0,
6276327,3,53,0,327,
62773,54,0,327,3,
627855,0,327,3,56,
62790,327,3,57,0,
6280327,3,65,0,327,
62813,66,0,327,3,
628267,0,327,3,68,
62830,327,3,69,0,
6284327,3,70,0,327,
62853,71,0,327,3,
628672,0,327,3,73,
62870,327,3,74,0,
6288327,3,75,0,327,
62893,76,0,327,3,
629077,0,327,3,78,
62910,327,3,79,0,
6292327,3,80,0,327,
62933,81,0,327,3,
629482,0,327,3,83,
62950,327,3,84,0,
6296327,3,85,0,327,
62973,86,0,327,3,
629887,0,327,3,88,
62990,327,3,89,0,
6300327,3,90,0,327,
63013,95,0,327,3,
630297,0,327,3,98,
63030,327,3,99,0,
6304327,3,100,0,327,
63053,101,0,327,3,
6306102,0,327,3,103,
63070,327,3,104,0,
6308327,3,105,0,327,
63093,106,0,327,3,
6310107,0,327,3,108,
63110,327,642,11,1,
6312829,0,330,1,-1,
63133,113,0,327,3,
6314114,0,327,3,115,
63150,327,3,116,0,
6316327,3,117,0,327,
63173,118,0,327,3,
6318119,0,327,3,120,
63190,327,3,121,0,
6320327,3,122,0,327,
63213,48,0,327,3,
632249,0,327,3,50,
63230,327,3,51,0,
6324327,3,52,0,327,
63253,53,0,327,3,
632654,0,327,3,55,
63270,327,3,56,0,
6328327,3,57,0,327,
63293,65,0,327,3,
633066,0,327,3,67,
63310,327,3,68,0,
6332327,3,69,0,327,
63333,70,0,327,3,
633471,0,327,3,72,
63350,327,3,73,0,
6336327,3,74,0,327,
63373,75,0,327,3,
633876,0,327,3,77,
63390,327,3,78,0,
6340327,3,79,0,327,
63413,80,0,327,3,
634281,0,327,3,82,
63430,327,3,83,0,
6344327,3,84,0,327,
63453,85,0,327,3,
634686,0,327,3,87,
63470,327,3,88,0,
6348327,3,89,0,327,
63493,90,0,327,3,
635095,0,327,3,97,
63510,327,3,98,0,
6352327,3,99,0,327,
63533,100,0,327,3,
6354101,0,327,3,102,
63550,327,3,103,0,
6356327,3,104,0,327,
63573,105,0,327,3,
6358106,0,327,3,107,
63590,327,3,108,0,
6360327,643,11,1,829,
63610,330,1,-1,3,
6362116,0,327,3,117,
63630,327,3,118,0,
6364327,3,119,0,327,
63653,120,0,327,3,
6366121,0,327,3,122,
63670,327,3,48,0,
6368327,3,49,0,327,
63693,50,0,327,3,
637051,0,327,3,52,
63710,327,3,53,0,
6372327,3,54,0,327,
63733,55,0,327,3,
637456,0,327,3,57,
63750,327,3,65,0,
6376327,3,66,0,327,
63773,67,0,327,3,
637868,0,327,3,69,
63790,327,3,70,0,
6380327,3,71,0,327,
63813,72,0,327,3,
638273,0,327,3,74,
63830,327,3,75,0,
6384327,3,76,0,327,
63853,77,0,327,3,
638678,0,327,3,79,
63870,327,3,80,0,
6388327,3,81,0,327,
63893,82,0,327,3,
639083,0,327,3,84,
63910,327,3,85,0,
6392327,3,86,0,327,
63933,87,0,327,3,
639488,0,327,3,89,
63950,327,3,90,0,
6396327,3,95,0,327,
63973,97,0,327,3,
639898,0,327,3,99,
63990,327,3,100,0,
6400327,3,101,0,327,
64013,102,0,327,3,
6402103,0,327,3,104,
64030,327,3,105,0,
6404327,3,106,0,327,
64053,107,0,327,3,
6406108,0,327,644,11,
64071,829,0,330,1,
6408-1,3,102,0,327,
64093,103,0,327,3,
6410104,0,327,3,105,
64110,327,3,106,0,
6412327,3,107,0,327,
64133,108,0,327,645,
641411,1,829,0,330,
64151,-1,3,115,0,
6416327,3,116,0,327,
64173,117,0,327,3,
6418118,0,327,3,119,
64190,327,3,120,0,
6420327,3,121,0,327,
64213,122,0,327,3,
642248,0,327,3,49,
64230,327,3,50,0,
6424327,3,51,0,327,
64253,52,0,327,3,
642653,0,327,3,54,
64270,327,3,55,0,
6428327,3,56,0,327,
64293,57,0,327,3,
643065,0,327,3,66,
64310,327,3,67,0,
6432327,3,68,0,327,
64333,69,0,327,3,
643470,0,327,3,71,
64350,327,3,72,0,
6436327,3,73,0,327,
64373,74,0,327,3,
643875,0,327,3,76,
64390,327,3,77,0,
6440327,3,78,0,327,
64413,79,0,327,3,
644280,0,327,3,81,
64430,327,3,82,0,
6444327,3,83,0,327,
64453,84,0,327,3,
644685,0,327,3,86,
64470,327,3,87,0,
6448327,3,88,0,327,
64493,89,0,327,3,
645090,0,327,3,95,
64510,327,3,97,0,
6452327,3,98,0,327,
64533,99,0,327,3,
6454100,0,327,3,101,
64550,327,3,102,0,
6456327,3,103,0,327,
64573,104,0,327,3,
6458105,0,327,3,106,
64590,327,3,107,0,
6460327,3,108,0,327,
6461646,11,1,829,0,
6462330,1,-1,3,97,
64630,327,3,98,0,
6464327,3,99,0,327,
64653,100,0,327,3,
6466101,0,327,3,102,
64670,327,3,103,0,
6468327,3,104,0,327,
64693,105,0,327,3,
6470106,0,327,3,107,
64710,327,3,108,0,
6472327,647,11,1,829,
64730,330,1,-1,3,
6474113,0,327,3,114,
64750,327,3,115,0,
6476327,3,116,0,327,
64773,117,0,327,3,
6478118,0,327,3,119,
64790,327,3,120,0,
6480327,3,121,0,327,
64813,122,0,327,3,
648248,0,327,3,49,
64830,327,3,50,0,
6484327,3,51,0,327,
64853,52,0,327,3,
648653,0,327,3,54,
64870,327,3,55,0,
6488327,3,56,0,327,
64893,57,0,327,3,
649065,0,327,3,66,
64910,327,3,67,0,
6492327,3,68,0,327,
64933,69,0,327,3,
649470,0,327,3,71,
64950,327,3,72,0,
6496327,3,73,0,327,
64973,74,0,327,3,
649875,0,327,3,76,
64990,327,3,77,0,
6500327,3,78,0,327,
65013,79,0,327,3,
650280,0,327,3,81,
65030,327,3,82,0,
6504327,3,83,0,327,
65053,84,0,327,3,
650685,0,327,3,86,
65070,327,3,87,0,
6508327,3,88,0,327,
65093,89,0,327,3,
651090,0,327,3,95,
65110,327,3,97,0,
6512327,3,98,0,327,
65133,99,0,327,3,
6514100,0,327,3,101,
65150,327,3,102,0,
6516327,3,103,0,327,
65173,104,0,327,3,
6518105,0,327,3,106,
65190,327,3,107,0,
6520327,3,108,0,327,
6521648,11,1,829,0,
6522330,1,-1,3,117,
65230,327,3,118,0,
6524327,3,119,0,327,
65253,120,0,327,3,
6526121,0,327,3,122,
65270,327,3,48,0,
6528327,3,49,0,327,
65293,50,0,327,3,
653051,0,327,3,52,
65310,327,3,53,0,
6532327,3,54,0,327,
65333,55,0,327,3,
653456,0,327,3,57,
65350,327,3,65,0,
6536327,3,66,0,327,
65373,67,0,327,3,
653868,0,327,3,69,
65390,327,3,70,0,
6540327,3,71,0,327,
65413,72,0,327,3,
654273,0,327,3,74,
65430,327,3,75,0,
6544327,3,76,0,327,
65453,77,0,327,3,
654678,0,327,3,79,
65470,327,3,80,0,
6548327,3,81,0,327,
65493,82,0,327,3,
655083,0,327,3,84,
65510,327,3,85,0,
6552327,3,86,0,327,
65533,87,0,327,3,
655488,0,327,3,89,
65550,327,3,90,0,
6556327,3,95,0,327,
65573,97,0,327,3,
655898,0,327,3,99,
65590,327,3,100,0,
6560327,3,101,0,327,
65613,102,0,327,3,
6562103,0,327,3,104,
65630,327,3,105,0,
6564327,3,106,0,327,
65653,107,0,327,3,
6566108,0,327,649,11,
65671,829,0,330,1,
6568-1,3,117,0,327,
65693,118,0,327,3,
6570119,0,327,3,120,
65710,327,3,121,0,
6572327,3,122,0,327,
65733,48,0,327,3,
657449,0,327,3,50,
65750,327,3,51,0,
6576327,3,52,0,327,
65773,53,0,327,3,
657854,0,327,3,55,
65790,327,3,56,0,
6580327,3,57,0,327,
65813,65,0,327,3,
658266,0,327,3,67,
65830,327,3,68,0,
6584327,3,69,0,327,
65853,70,0,327,3,
658671,0,327,3,72,
65870,327,3,73,0,
6588327,3,74,0,327,
65893,75,0,327,3,
659076,0,327,3,77,
65910,327,3,78,0,
6592327,3,79,0,327,
65933,80,0,327,3,
659481,0,327,3,82,
65950,327,3,83,0,
6596327,3,84,0,327,
65973,85,0,327,3,
659886,0,327,3,87,
65990,327,3,88,0,
6600327,3,89,0,327,
66013,90,0,327,3,
660295,0,327,3,97,
66030,327,3,98,0,
6604327,3,99,0,327,
66053,100,0,327,3,
6606101,0,327,3,102,
66070,327,3,103,0,
6608327,3,104,0,327,
66093,105,0,327,3,
6610106,0,327,3,107,
66110,327,3,108,0,
6612327,650,11,1,829,
66130,330,1,-1,3,
6614105,0,651,12,1,
661531673,652,5,63,3,
6616109,0,327,3,110,
66170,653,12,1,31702,
6618654,5,63,3,109,
66190,327,3,110,0,
6620327,3,111,0,327,
66213,112,0,327,3,
6622113,0,327,3,114,
66230,327,3,115,0,
6624327,3,116,0,655,
662512,1,31737,656,5,
662663,3,109,0,327,
66273,110,0,327,3,
6628111,0,327,3,112,
66290,327,3,113,0,
6630327,3,114,0,327,
66313,115,0,327,3,
6632116,0,327,3,117,
66330,327,3,118,0,
6634327,3,119,0,327,
66353,120,0,327,3,
6636121,0,327,3,122,
66370,327,3,48,0,
6638327,3,49,0,327,
66393,50,0,327,3,
664051,0,327,3,52,
66410,327,3,53,0,
6642327,3,54,0,327,
66433,55,0,327,3,
664456,0,327,3,57,
66450,327,3,65,0,
6646327,3,66,0,327,
66473,67,0,327,3,
664868,0,327,3,69,
66490,327,3,70,0,
6650327,3,71,0,327,
66513,72,0,327,3,
665273,0,327,3,74,
66530,327,3,75,0,
6654327,3,76,0,327,
66553,77,0,327,3,
665678,0,327,3,79,
66570,327,3,80,0,
6658327,3,81,0,327,
66593,82,0,327,3,
666083,0,327,3,84,
66610,327,3,85,0,
6662327,3,86,0,327,
66633,87,0,327,3,
666488,0,327,3,89,
66650,327,3,90,0,
6666327,3,95,0,327,
66673,97,0,327,3,
666898,0,327,3,99,
66690,327,3,100,0,
6670327,3,101,0,657,
667112,1,31784,658,5,
667263,3,109,0,327,
66733,110,0,327,3,
6674111,0,327,3,112,
66750,327,3,113,0,
6676327,3,114,0,327,
66773,115,0,327,3,
6678116,0,327,3,117,
66790,327,3,118,0,
6680327,3,119,0,327,
66813,120,0,327,3,
6682121,0,327,3,122,
66830,327,3,48,0,
6684327,3,49,0,327,
66853,50,0,327,3,
668651,0,327,3,52,
66870,327,3,53,0,
6688327,3,54,0,327,
66893,55,0,327,3,
669056,0,327,3,57,
66910,327,3,65,0,
6692327,3,66,0,327,
66933,67,0,327,3,
669468,0,327,3,69,
66950,327,3,70,0,
6696327,3,71,0,327,
66973,72,0,327,3,
669873,0,327,3,74,
66990,327,3,75,0,
6700327,3,76,0,327,
67013,77,0,327,3,
670278,0,327,3,79,
67030,327,3,80,0,
6704327,3,81,0,327,
67053,82,0,327,3,
670683,0,327,3,84,
67070,327,3,85,0,
6708327,3,86,0,327,
67093,87,0,327,3,
671088,0,327,3,89,
67110,327,3,90,0,
6712327,3,95,0,327,
67133,97,0,327,3,
671498,0,327,3,99,
67150,327,3,100,0,
6716327,3,101,0,327,
67173,102,0,327,3,
6718103,0,659,12,1,
671931833,660,5,63,3,
6720109,0,327,3,110,
67210,327,3,111,0,
6722327,3,112,0,327,
67233,113,0,327,3,
6724114,0,327,3,115,
67250,327,3,116,0,
6726327,3,117,0,327,
67273,118,0,327,3,
6728119,0,327,3,120,
67290,327,3,121,0,
6730327,3,122,0,327,
67313,48,0,327,3,
673249,0,327,3,50,
67330,327,3,51,0,
6734327,3,52,0,327,
67353,53,0,327,3,
673654,0,327,3,55,
67370,327,3,56,0,
6738327,3,57,0,327,
67393,65,0,327,3,
674066,0,327,3,67,
67410,327,3,68,0,
6742327,3,69,0,327,
67433,70,0,327,3,
674471,0,327,3,72,
67450,327,3,73,0,
6746327,3,74,0,327,
67473,75,0,327,3,
674876,0,327,3,77,
67490,327,3,78,0,
6750327,3,79,0,327,
67513,80,0,327,3,
675281,0,327,3,82,
67530,327,3,83,0,
6754327,3,84,0,327,
67553,85,0,327,3,
675686,0,327,3,87,
67570,327,3,88,0,
6758327,3,89,0,327,
67593,90,0,327,3,
676095,0,327,3,97,
67610,327,3,98,0,
6762327,3,99,0,327,
67633,100,0,327,3,
6764101,0,661,12,1,
676531880,662,5,63,3,
6766109,0,327,3,110,
67670,327,3,111,0,
6768327,3,112,0,327,
67693,113,0,327,3,
6770114,0,663,12,1,
677131913,664,5,63,3,
6772109,0,327,3,110,
67730,327,3,111,0,
6774327,3,112,0,327,
67753,113,0,327,3,
6776114,0,327,3,115,
67770,327,3,116,0,
6778327,3,117,0,327,
67793,118,0,327,3,
6780119,0,327,3,120,
67810,327,3,121,0,
6782327,3,122,0,327,
67833,48,0,327,3,
678449,0,327,3,50,
67850,327,3,51,0,
6786327,3,52,0,327,
67873,53,0,327,3,
678854,0,327,3,55,
67890,327,3,56,0,
6790327,3,57,0,327,
67913,65,0,327,3,
679266,0,327,3,67,
67930,327,3,68,0,
6794327,3,69,0,327,
67953,70,0,327,3,
679671,0,327,3,72,
67970,327,3,73,0,
6798327,3,74,0,327,
67993,75,0,327,3,
680076,0,327,3,77,
68010,327,3,78,0,
6802327,3,79,0,327,
68033,80,0,327,3,
680481,0,327,3,82,
68050,327,3,83,0,
6806327,3,84,0,327,
68073,85,0,327,3,
680886,0,327,3,87,
68090,327,3,88,0,
6810327,3,89,0,327,
68113,90,0,327,3,
681295,0,327,3,97,
68130,327,3,98,0,
6814327,3,99,0,327,
68153,100,0,327,3,
6816101,0,327,3,102,
68170,327,3,103,0,
6818327,3,104,0,327,
68193,105,0,327,3,
6820106,0,327,3,107,
68210,327,3,108,0,
6822327,665,11,1,283,
68230,666,4,24,73,
68240,78,0,84,0,
682569,0,71,0,69,
68260,82,0,95,0,
682784,0,89,0,80,
68280,69,0,1,-1,
68293,115,0,327,3,
6830116,0,327,3,117,
68310,327,3,118,0,
6832327,3,119,0,327,
68333,120,0,327,3,
6834121,0,327,3,122,
68350,327,3,48,0,
6836327,3,49,0,327,
68373,50,0,327,3,
683851,0,327,3,52,
68390,327,3,53,0,
6840327,3,54,0,327,
68413,55,0,327,3,
684256,0,327,3,57,
68430,327,3,65,0,
6844327,3,66,0,327,
68453,67,0,327,3,
684668,0,327,3,69,
68470,327,3,70,0,
6848327,3,71,0,327,
68493,72,0,327,3,
685073,0,327,3,74,
68510,327,3,75,0,
6852327,3,76,0,327,
68533,77,0,327,3,
685478,0,327,3,79,
68550,327,3,80,0,
6856327,3,81,0,327,
68573,82,0,327,3,
685883,0,327,3,84,
68590,327,3,85,0,
6860327,3,86,0,327,
68613,87,0,327,3,
686288,0,327,3,89,
68630,327,3,90,0,
6864327,3,95,0,327,
68653,97,0,327,3,
686698,0,327,3,99,
68670,327,3,100,0,
6868327,3,101,0,327,
68693,102,0,327,3,
6870103,0,327,3,104,
68710,327,3,105,0,
6872327,3,106,0,327,
68733,107,0,327,3,
6874108,0,327,667,11,
68751,829,0,330,1,
6876-1,3,102,0,327,
68773,103,0,327,3,
6878104,0,327,3,105,
68790,327,3,106,0,
6880327,3,107,0,327,
68813,108,0,327,668,
688211,1,829,0,330,
68831,-1,3,104,0,
6884327,3,105,0,327,
68853,106,0,327,3,
6886107,0,327,3,108,
68870,327,669,11,1,
6888829,0,330,1,-1,
68893,102,0,327,3,
6890103,0,327,3,104,
68910,327,3,105,0,
6892327,3,106,0,327,
68933,107,0,327,3,
6894108,0,327,670,11,
68951,829,0,330,1,
6896-1,3,117,0,327,
68973,118,0,327,3,
6898119,0,327,3,120,
68990,327,3,121,0,
6900327,3,122,0,327,
69013,48,0,327,3,
690249,0,327,3,50,
69030,327,3,51,0,
6904327,3,52,0,327,
69053,53,0,327,3,
690654,0,327,3,55,
69070,327,3,56,0,
6908327,3,57,0,327,
69093,65,0,327,3,
691066,0,327,3,67,
69110,327,3,68,0,
6912327,3,69,0,327,
69133,70,0,327,3,
691471,0,327,3,72,
69150,327,3,73,0,
6916327,3,74,0,327,
69173,75,0,327,3,
691876,0,327,3,77,
69190,327,3,78,0,
6920327,3,79,0,327,
69213,80,0,327,3,
692281,0,327,3,82,
69230,327,3,83,0,
6924327,3,84,0,327,
69253,85,0,327,3,
692686,0,327,3,87,
69270,327,3,88,0,
6928327,3,89,0,327,
69293,90,0,327,3,
693095,0,327,3,97,
69310,327,3,98,0,
6932327,3,99,0,327,
69333,100,0,327,3,
6934101,0,327,3,102,
69350,327,3,103,0,
6936327,3,104,0,327,
69373,105,0,327,3,
6938106,0,327,3,107,
69390,327,3,108,0,
6940327,671,11,1,829,
69410,330,1,-1,3,
6942111,0,327,3,112,
69430,327,3,113,0,
6944327,3,114,0,327,
69453,115,0,327,3,
6946116,0,327,3,117,
69470,327,3,118,0,
6948327,3,119,0,327,
69493,120,0,327,3,
6950121,0,327,3,122,
69510,327,3,48,0,
6952327,3,49,0,327,
69533,50,0,327,3,
695451,0,327,3,52,
69550,327,3,53,0,
6956327,3,54,0,327,
69573,55,0,327,3,
695856,0,327,3,57,
69590,327,3,65,0,
6960327,3,66,0,327,
69613,67,0,327,3,
696268,0,327,3,69,
69630,327,3,70,0,
6964327,3,71,0,327,
69653,72,0,327,3,
696673,0,327,3,74,
69670,327,3,75,0,
6968327,3,76,0,327,
69693,77,0,327,3,
697078,0,327,3,79,
69710,327,3,80,0,
6972327,3,81,0,327,
69733,82,0,327,3,
697483,0,327,3,84,
69750,327,3,85,0,
6976327,3,86,0,327,
69773,87,0,327,3,
697888,0,327,3,89,
69790,327,3,90,0,
6980327,3,95,0,327,
69813,97,0,327,3,
698298,0,327,3,99,
69830,327,3,100,0,
6984327,3,101,0,327,
69853,102,0,672,12,
69861,32441,673,5,63,
69873,109,0,327,3,
6988110,0,327,3,111,
69890,327,3,112,0,
6990327,3,113,0,327,
69913,114,0,327,3,
6992115,0,327,3,116,
69930,327,3,117,0,
6994327,3,118,0,327,
69953,119,0,327,3,
6996120,0,327,3,121,
69970,327,3,122,0,
6998327,3,48,0,327,
69993,49,0,327,3,
700050,0,327,3,51,
70010,327,3,52,0,
7002327,3,53,0,327,
70033,54,0,327,3,
700455,0,327,3,56,
70050,327,3,57,0,
7006327,3,65,0,327,
70073,66,0,327,3,
700867,0,327,3,68,
70090,327,3,69,0,
7010327,3,70,0,327,
70113,71,0,327,3,
701272,0,327,3,73,
70130,327,3,74,0,
7014327,3,75,0,327,
70153,76,0,327,3,
701677,0,327,3,78,
70170,327,3,79,0,
7018327,3,80,0,327,
70193,81,0,327,3,
702082,0,327,3,83,
70210,327,3,84,0,
7022327,3,85,0,327,
70233,86,0,327,3,
702487,0,327,3,88,
70250,327,3,89,0,
7026327,3,90,0,327,
70273,95,0,327,3,
702897,0,327,3,98,
70290,327,3,99,0,
7030327,3,100,0,327,
70313,101,0,327,3,
7032102,0,327,3,103,
70330,327,3,104,0,
7034327,3,105,0,327,
70353,106,0,327,3,
7036107,0,327,3,108,
70370,327,674,11,1,
7038209,0,675,4,4,
703973,0,70,0,1,
7040-1,3,103,0,327,
70413,104,0,327,3,
7042105,0,327,3,106,
70430,327,3,107,0,
7044327,3,108,0,327,
7045676,11,1,829,0,
7046330,1,-1,3,106,
70470,677,12,1,32634,
7048678,5,63,3,109,
70490,327,3,110,0,
7050327,3,111,0,327,
70513,112,0,327,3,
7052113,0,327,3,114,
70530,327,3,115,0,
7054327,3,116,0,327,
70553,117,0,679,12,
70561,32670,680,5,63,
70573,109,0,681,12,
70581,32698,682,5,63,
70593,109,0,327,3,
7060110,0,327,3,111,
70610,327,3,112,0,
7062683,12,1,32729,684,
70635,63,3,109,0,
7064327,3,110,0,327,
70653,111,0,327,3,
7066112,0,327,3,113,
70670,327,3,114,0,
7068327,3,115,0,327,
70693,116,0,327,3,
7070117,0,327,3,118,
70710,327,3,119,0,
7072327,3,120,0,327,
70733,121,0,327,3,
7074122,0,327,3,48,
70750,327,3,49,0,
7076327,3,50,0,327,
70773,51,0,327,3,
707852,0,327,3,53,
70790,327,3,54,0,
7080327,3,55,0,327,
70813,56,0,327,3,
708257,0,327,3,65,
70830,327,3,66,0,
7084327,3,67,0,327,
70853,68,0,327,3,
708669,0,327,3,70,
70870,327,3,71,0,
7088327,3,72,0,327,
70893,73,0,327,3,
709074,0,327,3,75,
70910,327,3,76,0,
7092327,3,77,0,327,
70933,78,0,327,3,
709479,0,327,3,80,
70950,327,3,81,0,
7096327,3,82,0,327,
70973,83,0,327,3,
709884,0,327,3,85,
70990,327,3,86,0,
7100327,3,87,0,327,
71013,88,0,327,3,
710289,0,327,3,90,
71030,327,3,95,0,
7104327,3,97,0,327,
71053,98,0,327,3,
710699,0,327,3,100,
71070,327,3,101,0,
7108327,3,102,0,327,
71093,103,0,327,3,
7110104,0,327,3,105,
71110,327,3,106,0,
7112327,3,107,0,327,
71133,108,0,327,685,
711411,1,265,0,686,
71154,8,74,0,85,
71160,77,0,80,0,
71171,-1,3,113,0,
7118327,3,114,0,327,
71193,115,0,327,3,
7120116,0,327,3,117,
71210,327,3,118,0,
7122327,3,119,0,327,
71233,120,0,327,3,
7124121,0,327,3,122,
71250,327,3,48,0,
7126327,3,49,0,327,
71273,50,0,327,3,
712851,0,327,3,52,
71290,327,3,53,0,
7130327,3,54,0,327,
71313,55,0,327,3,
713256,0,327,3,57,
71330,327,3,65,0,
7134327,3,66,0,327,
71353,67,0,327,3,
713668,0,327,3,69,
71370,327,3,70,0,
7138327,3,71,0,327,
71393,72,0,327,3,
714073,0,327,3,74,
71410,327,3,75,0,
7142327,3,76,0,327,
71433,77,0,327,3,
714478,0,327,3,79,
71450,327,3,80,0,
7146327,3,81,0,327,
71473,82,0,327,3,
714883,0,327,3,84,
71490,327,3,85,0,
7150327,3,86,0,327,
71513,87,0,327,3,
715288,0,327,3,89,
71530,327,3,90,0,
7154327,3,95,0,327,
71553,97,0,327,3,
715698,0,327,3,99,
71570,327,3,100,0,
7158327,3,101,0,327,
71593,102,0,327,3,
7160103,0,327,3,104,
71610,327,3,105,0,
7162327,3,106,0,327,
71633,107,0,327,3,
7164108,0,327,687,11,
71651,829,0,330,1,
7166-1,3,110,0,327,
71673,111,0,327,3,
7168112,0,327,3,113,
71690,327,3,114,0,
7170327,3,115,0,327,
71713,116,0,327,3,
7172117,0,327,3,118,
71730,327,3,119,0,
7174327,3,120,0,327,
71753,121,0,327,3,
7176122,0,327,3,48,
71770,327,3,49,0,
7178327,3,50,0,327,
71793,51,0,327,3,
718052,0,327,3,53,
71810,327,3,54,0,
7182327,3,55,0,327,
71833,56,0,327,3,
718457,0,327,3,65,
71850,327,3,66,0,
7186327,3,67,0,327,
71873,68,0,327,3,
718869,0,327,3,70,
71890,327,3,71,0,
7190327,3,72,0,327,
71913,73,0,327,3,
719274,0,327,3,75,
71930,327,3,76,0,
7194327,3,77,0,327,
71953,78,0,327,3,
719679,0,327,3,80,
71970,327,3,81,0,
7198327,3,82,0,327,
71993,83,0,327,3,
720084,0,327,3,85,
72010,327,3,86,0,
7202327,3,87,0,327,
72033,88,0,327,3,
720489,0,327,3,90,
72050,327,3,95,0,
7206327,3,97,0,327,
72073,98,0,327,3,
720899,0,327,3,100,
72090,327,3,101,0,
7210327,3,102,0,327,
72113,103,0,327,3,
7212104,0,327,3,105,
72130,327,3,106,0,
7214327,3,107,0,327,
72153,108,0,327,688,
721611,1,829,0,330,
72171,-1,3,118,0,
7218327,3,119,0,327,
72193,120,0,327,3,
7220121,0,327,3,122,
72210,327,3,48,0,
7222327,3,49,0,327,
72233,50,0,327,3,
722451,0,327,3,52,
72250,327,3,53,0,
7226327,3,54,0,327,
72273,55,0,327,3,
722856,0,327,3,57,
72290,327,3,65,0,
7230327,3,66,0,327,
72313,67,0,327,3,
723268,0,327,3,69,
72330,327,3,70,0,
7234327,3,71,0,327,
72353,72,0,327,3,
723673,0,327,3,74,
72370,327,3,75,0,
7238327,3,76,0,327,
72393,77,0,327,3,
724078,0,327,3,79,
72410,327,3,80,0,
7242327,3,81,0,327,
72433,82,0,327,3,
724483,0,327,3,84,
72450,327,3,85,0,
7246327,3,86,0,327,
72473,87,0,327,3,
724888,0,327,3,89,
72490,327,3,90,0,
7250327,3,95,0,327,
72513,97,0,327,3,
725298,0,327,3,99,
72530,327,3,100,0,
7254327,3,101,0,327,
72553,102,0,327,3,
7256103,0,327,3,104,
72570,327,3,105,0,
7258327,3,106,0,327,
72593,107,0,327,3,
7260108,0,327,689,11,
72611,829,0,330,1,
7262-1,3,107,0,690,
726312,1,33115,691,5,
726463,3,109,0,327,
72653,110,0,327,3,
7266111,0,327,3,112,
72670,327,3,113,0,
7268327,3,114,0,327,
72693,115,0,327,3,
7270116,0,327,3,117,
72710,327,3,118,0,
7272327,3,119,0,327,
72733,120,0,327,3,
7274121,0,327,3,122,
72750,327,3,48,0,
7276327,3,49,0,327,
72773,50,0,327,3,
727851,0,327,3,52,
72790,327,3,53,0,
7280327,3,54,0,327,
72813,55,0,327,3,
728256,0,327,3,57,
72830,327,3,65,0,
7284327,3,66,0,327,
72853,67,0,327,3,
728668,0,327,3,69,
72870,327,3,70,0,
7288327,3,71,0,327,
72893,72,0,327,3,
729073,0,327,3,74,
72910,327,3,75,0,
7292327,3,76,0,327,
72933,77,0,327,3,
729478,0,327,3,79,
72950,327,3,80,0,
7296327,3,81,0,327,
72973,82,0,327,3,
729883,0,327,3,84,
72990,327,3,85,0,
7300327,3,86,0,327,
73013,87,0,327,3,
730288,0,327,3,89,
73030,327,3,90,0,
7304327,3,95,0,327,
73053,97,0,327,3,
730698,0,327,3,99,
73070,327,3,100,0,
7308327,3,101,0,692,
730912,1,33162,693,5,
731063,3,109,0,327,
73113,110,0,327,3,
7312111,0,327,3,112,
73130,327,3,113,0,
7314327,3,114,0,327,
73153,115,0,327,3,
7316116,0,327,3,117,
73170,327,3,118,0,
7318327,3,119,0,327,
73193,120,0,327,3,
7320121,0,694,12,1,
732133202,695,5,63,3,
7322109,0,327,3,110,
73230,327,3,111,0,
7324327,3,112,0,327,
73253,113,0,327,3,
7326114,0,327,3,115,
73270,327,3,116,0,
7328327,3,117,0,327,
73293,118,0,327,3,
7330119,0,327,3,120,
73310,327,3,121,0,
7332327,3,122,0,327,
73333,48,0,327,3,
733449,0,327,3,50,
73350,327,3,51,0,
7336327,3,52,0,327,
73373,53,0,327,3,
733854,0,327,3,55,
73390,327,3,56,0,
7340327,3,57,0,327,
73413,65,0,327,3,
734266,0,327,3,67,
73430,327,3,68,0,
7344327,3,69,0,327,
73453,70,0,327,3,
734671,0,327,3,72,
73470,327,3,73,0,
7348327,3,74,0,327,
73493,75,0,327,3,
735076,0,327,3,77,
73510,327,3,78,0,
7352327,3,79,0,327,
73533,80,0,327,3,
735481,0,327,3,82,
73550,327,3,83,0,
7356327,3,84,0,327,
73573,85,0,327,3,
735886,0,327,3,87,
73590,327,3,88,0,
7360327,3,89,0,327,
73613,90,0,327,3,
736295,0,327,3,97,
73630,327,3,98,0,
7364327,3,99,0,327,
73653,100,0,327,3,
7366101,0,327,3,102,
73670,327,3,103,0,
7368327,3,104,0,327,
73693,105,0,327,3,
7370106,0,327,3,107,
73710,327,3,108,0,
7372327,696,11,1,313,
73730,697,4,16,75,
73740,69,0,89,0,
737595,0,84,0,89,
73760,80,0,69,0,
73771,-1,3,122,0,
7378327,3,48,0,327,
73793,49,0,327,3,
738050,0,327,3,51,
73810,327,3,52,0,
7382327,3,53,0,327,
73833,54,0,327,3,
738455,0,327,3,56,
73850,327,3,57,0,
7386327,3,65,0,327,
73873,66,0,327,3,
738867,0,327,3,68,
73890,327,3,69,0,
7390327,3,70,0,327,
73913,71,0,327,3,
739272,0,327,3,73,
73930,327,3,74,0,
7394327,3,75,0,327,
73953,76,0,327,3,
739677,0,327,3,78,
73970,327,3,79,0,
7398327,3,80,0,327,
73993,81,0,327,3,
740082,0,327,3,83,
74010,327,3,84,0,
7402327,3,85,0,327,
74033,86,0,327,3,
740487,0,327,3,88,
74050,327,3,89,0,
7406327,3,90,0,327,
74073,95,0,327,3,
740897,0,327,3,98,
74090,327,3,99,0,
7410327,3,100,0,327,
74113,101,0,327,3,
7412102,0,327,3,103,
74130,327,3,104,0,
7414327,3,105,0,327,
74153,106,0,327,3,
7416107,0,327,3,108,
74170,327,698,11,1,
7418829,0,330,1,-1,
74193,102,0,327,3,
7420103,0,327,3,104,
74210,327,3,105,0,
7422327,3,106,0,327,
74233,107,0,327,3,
7424108,0,327,699,11,
74251,829,0,330,1,
7426-1,3,108,0,700,
742712,1,33476,701,5,
742863,3,109,0,327,
74293,110,0,327,3,
7430111,0,327,3,112,
74310,327,3,113,0,
7432327,3,114,0,327,
74333,115,0,327,3,
7434116,0,327,3,117,
74350,327,3,118,0,
7436327,3,119,0,327,
74373,120,0,327,3,
7438121,0,327,3,122,
74390,327,3,48,0,
7440327,3,49,0,327,
74413,50,0,327,3,
744251,0,327,3,52,
74430,327,3,53,0,
7444327,3,54,0,327,
74453,55,0,327,3,
744656,0,327,3,57,
74470,327,3,65,0,
7448327,3,66,0,327,
74493,67,0,327,3,
745068,0,327,3,69,
74510,327,3,70,0,
7452327,3,71,0,327,
74533,72,0,327,3,
745473,0,327,3,74,
74550,327,3,75,0,
7456327,3,76,0,327,
74573,77,0,327,3,
745878,0,327,3,79,
74590,327,3,80,0,
7460327,3,81,0,327,
74613,82,0,327,3,
746283,0,327,3,84,
74630,327,3,85,0,
7464327,3,86,0,327,
74653,87,0,327,3,
746688,0,327,3,89,
74670,327,3,90,0,
7468327,3,95,0,327,
74693,97,0,702,12,
74701,33519,703,5,63,
74713,109,0,327,3,
7472110,0,704,12,1,
747333548,705,5,63,3,
7474109,0,327,3,110,
74750,327,3,111,0,
7476327,3,112,0,327,
74773,113,0,327,3,
7478114,0,327,3,115,
74790,327,3,116,0,
7480327,3,117,0,327,
74813,118,0,327,3,
7482119,0,327,3,120,
74830,327,3,121,0,
7484327,3,122,0,327,
74853,48,0,327,3,
748649,0,327,3,50,
74870,327,3,51,0,
7488327,3,52,0,327,
74893,53,0,327,3,
749054,0,327,3,55,
74910,327,3,56,0,
7492327,3,57,0,327,
74933,65,0,327,3,
749466,0,327,3,67,
74950,327,3,68,0,
7496327,3,69,0,327,
74973,70,0,327,3,
749871,0,327,3,72,
74990,327,3,73,0,
7500327,3,74,0,327,
75013,75,0,327,3,
750276,0,327,3,77,
75030,327,3,78,0,
7504327,3,79,0,327,
75053,80,0,327,3,
750681,0,327,3,82,
75070,327,3,83,0,
7508327,3,84,0,327,
75093,85,0,327,3,
751086,0,327,3,87,
75110,327,3,88,0,
7512327,3,89,0,327,
75133,90,0,327,3,
751495,0,327,3,97,
75150,327,3,98,0,
7516327,3,99,0,327,
75173,100,0,706,12,
75181,33594,707,5,63,
75193,109,0,327,3,
7520110,0,327,3,111,
75210,327,3,112,0,
7522327,3,113,0,327,
75233,114,0,327,3,
7524115,0,327,3,116,
75250,327,3,117,0,
7526327,3,118,0,327,
75273,119,0,327,3,
7528120,0,327,3,121,
75290,327,3,122,0,
7530327,3,48,0,327,
75313,49,0,327,3,
753250,0,327,3,51,
75330,327,3,52,0,
7534327,3,53,0,327,
75353,54,0,327,3,
753655,0,327,3,56,
75370,327,3,57,0,
7538327,3,65,0,327,
75393,66,0,327,3,
754067,0,327,3,68,
75410,327,3,69,0,
7542327,3,70,0,327,
75433,71,0,327,3,
754472,0,327,3,73,
75450,327,3,74,0,
7546327,3,75,0,327,
75473,76,0,327,3,
754877,0,327,3,78,
75490,327,3,79,0,
7550327,3,80,0,327,
75513,81,0,327,3,
755282,0,327,3,83,
75530,327,3,84,0,
7554327,3,85,0,327,
75553,86,0,327,3,
755687,0,327,3,88,
75570,327,3,89,0,
7558327,3,90,0,327,
75593,95,0,708,12,
75601,33680,709,5,63,
75613,109,0,327,3,
7562110,0,327,3,111,
75630,327,3,112,0,
7564327,3,113,0,327,
75653,114,0,327,3,
7566115,0,327,3,116,
75670,327,3,117,0,
7568327,3,118,0,327,
75693,119,0,327,3,
7570120,0,327,3,121,
75710,327,3,122,0,
7572327,3,48,0,327,
75733,49,0,327,3,
757450,0,327,3,51,
75750,327,3,52,0,
7576327,3,53,0,327,
75773,54,0,327,3,
757855,0,327,3,56,
75790,327,3,57,0,
7580327,3,65,0,327,
75813,66,0,327,3,
758267,0,327,3,68,
75830,327,3,69,0,
7584327,3,70,0,327,
75853,71,0,327,3,
758672,0,327,3,73,
75870,327,3,74,0,
7588327,3,75,0,327,
75893,76,0,327,3,
759077,0,327,3,78,
75910,327,3,79,0,
7592327,3,80,0,327,
75933,81,0,327,3,
759482,0,327,3,83,
75950,327,3,84,0,
7596327,3,85,0,327,
75973,86,0,327,3,
759887,0,327,3,88,
75990,327,3,89,0,
7600327,3,90,0,327,
76013,95,0,327,3,
760297,0,327,3,98,
76030,327,3,99,0,
7604710,12,1,33725,711,
76055,63,3,109,0,
7606327,3,110,0,327,
76073,111,0,712,12,
76081,33755,713,5,63,
76093,109,0,327,3,
7610110,0,327,3,111,
76110,327,3,112,0,
7612327,3,113,0,327,
76133,114,0,327,3,
7614115,0,327,3,116,
76150,327,3,117,0,
7616327,3,118,0,327,
76173,119,0,327,3,
7618120,0,327,3,121,
76190,327,3,122,0,
7620327,3,48,0,327,
76213,49,0,327,3,
762250,0,327,3,51,
76230,327,3,52,0,
7624327,3,53,0,327,
76253,54,0,327,3,
762655,0,327,3,56,
76270,327,3,57,0,
7628327,3,65,0,327,
76293,66,0,327,3,
763067,0,327,3,68,
76310,327,3,69,0,
7632327,3,70,0,327,
76333,71,0,327,3,
763472,0,327,3,73,
76350,327,3,74,0,
7636327,3,75,0,327,
76373,76,0,327,3,
763877,0,327,3,78,
76390,327,3,79,0,
7640327,3,80,0,327,
76413,81,0,327,3,
764282,0,327,3,83,
76430,327,3,84,0,
7644327,3,85,0,327,
76453,86,0,327,3,
764687,0,327,3,88,
76470,327,3,89,0,
7648327,3,90,0,327,
76493,95,0,327,3,
765097,0,327,3,98,
76510,327,3,99,0,
7652327,3,100,0,327,
76533,101,0,327,3,
7654102,0,327,3,103,
76550,327,3,104,0,
7656327,3,105,0,327,
76573,106,0,327,3,
7658107,0,327,3,108,
76590,714,12,1,33809,
7660715,5,63,3,109,
76610,327,3,110,0,
7662327,3,111,0,327,
76633,112,0,327,3,
7664113,0,327,3,114,
76650,327,3,115,0,
7666327,3,116,0,327,
76673,117,0,327,3,
7668118,0,327,3,119,
76690,327,3,120,0,
7670327,3,121,0,327,
76713,122,0,327,3,
767248,0,327,3,49,
76730,327,3,50,0,
7674327,3,51,0,327,
76753,52,0,327,3,
767653,0,327,3,54,
76770,327,3,55,0,
7678327,3,56,0,327,
76793,57,0,327,3,
768065,0,327,3,66,
76810,327,3,67,0,
7682327,3,68,0,327,
76833,69,0,327,3,
768470,0,327,3,71,
76850,327,3,72,0,
7686327,3,73,0,327,
76873,74,0,327,3,
768875,0,327,3,76,
76890,327,3,77,0,
7690327,3,78,0,327,
76913,79,0,327,3,
769280,0,327,3,81,
76930,327,3,82,0,
7694327,3,83,0,327,
76953,84,0,327,3,
769685,0,327,3,86,
76970,327,3,87,0,
7698327,3,88,0,327,
76993,89,0,327,3,
770090,0,327,3,95,
77010,327,3,97,0,
7702327,3,98,0,327,
77033,99,0,327,3,
7704100,0,327,3,101,
77050,327,3,102,0,
7706327,3,103,0,327,
77073,104,0,327,3,
7708105,0,327,3,106,
77090,327,3,107,0,
7710327,3,108,0,716,
771112,1,33863,717,5,
771263,3,109,0,327,
77133,110,0,327,3,
7714111,0,327,3,112,
77150,327,3,113,0,
7716327,3,114,0,327,
77173,115,0,327,3,
7718116,0,327,3,117,
77190,327,3,118,0,
7720327,3,119,0,327,
77213,120,0,327,3,
7722121,0,327,3,122,
77230,327,3,48,0,
7724327,3,49,0,327,
77253,50,0,327,3,
772651,0,327,3,52,
77270,327,3,53,0,
7728327,3,54,0,327,
77293,55,0,327,3,
773056,0,327,3,57,
77310,327,3,65,0,
7732327,3,66,0,327,
77333,67,0,327,3,
773468,0,327,3,69,
77350,327,3,70,0,
7736327,3,71,0,327,
77373,72,0,327,3,
773873,0,327,3,74,
77390,327,3,75,0,
7740327,3,76,0,327,
77413,77,0,327,3,
774278,0,327,3,79,
77430,327,3,80,0,
7744327,3,81,0,327,
77453,82,0,327,3,
774683,0,327,3,84,
77470,327,3,85,0,
7748327,3,86,0,327,
77493,87,0,327,3,
775088,0,327,3,89,
77510,327,3,90,0,
7752327,3,95,0,327,
77533,97,0,327,3,
775498,0,327,3,99,
77550,327,3,100,0,
7756327,3,101,0,327,
77573,102,0,327,3,
7758103,0,327,3,104,
77590,327,3,105,0,
7760718,12,1,33914,719,
77615,63,3,109,0,
7762327,3,110,0,327,
77633,111,0,327,3,
7764112,0,327,3,113,
77650,327,3,114,0,
7766327,3,115,0,720,
776712,1,33948,721,5,
776863,3,109,0,327,
77693,110,0,327,3,
7770111,0,327,3,112,
77710,327,3,113,0,
7772327,3,114,0,327,
77733,115,0,327,3,
7774116,0,327,3,117,
77750,327,3,118,0,
7776327,3,119,0,327,
77773,120,0,327,3,
7778121,0,327,3,122,
77790,327,3,48,0,
7780327,3,49,0,327,
77813,50,0,327,3,
778251,0,327,3,52,
77830,327,3,53,0,
7784327,3,54,0,327,
77853,55,0,327,3,
778656,0,327,3,57,
77870,327,3,65,0,
7788327,3,66,0,327,
77893,67,0,327,3,
779068,0,327,3,69,
77910,327,3,70,0,
7792327,3,71,0,327,
77933,72,0,327,3,
779473,0,327,3,74,
77950,327,3,75,0,
7796327,3,76,0,327,
77973,77,0,327,3,
779878,0,327,3,79,
77990,327,3,80,0,
7800327,3,81,0,327,
78013,82,0,327,3,
780283,0,327,3,84,
78030,327,3,85,0,
7804327,3,86,0,327,
78053,87,0,327,3,
780688,0,327,3,89,
78070,327,3,90,0,
7808327,3,95,0,327,
78093,97,0,327,3,
781098,0,327,3,99,
78110,327,3,100,0,
7812327,3,101,0,327,
78133,102,0,327,3,
7814103,0,327,3,104,
78150,327,3,105,0,
7816722,12,1,33999,723,
78175,63,3,109,0,
7818327,3,110,0,327,
78193,111,0,724,12,
78201,34029,725,5,63,
78213,109,0,327,3,
7822110,0,726,12,1,
782334058,727,5,63,3,
7824109,0,327,3,110,
78250,327,3,111,0,
7826327,3,112,0,327,
78273,113,0,327,3,
7828114,0,327,3,115,
78290,327,3,116,0,
7830327,3,117,0,327,
78313,118,0,327,3,
7832119,0,327,3,120,
78330,327,3,121,0,
7834327,3,122,0,327,
78353,48,0,327,3,
783649,0,327,3,50,
78370,327,3,51,0,
7838327,3,52,0,327,
78393,53,0,327,3,
784054,0,327,3,55,
78410,327,3,56,0,
7842327,3,57,0,327,
78433,65,0,327,3,
784466,0,327,3,67,
78450,327,3,68,0,
7846327,3,69,0,327,
78473,70,0,327,3,
784871,0,327,3,72,
78490,327,3,73,0,
7850327,3,74,0,327,
78513,75,0,327,3,
785276,0,327,3,77,
78530,327,3,78,0,
7854327,3,79,0,327,
78553,80,0,327,3,
785681,0,327,3,82,
78570,327,3,83,0,
7858327,3,84,0,327,
78593,85,0,327,3,
786086,0,327,3,87,
78610,327,3,88,0,
7862327,3,89,0,327,
78633,90,0,327,3,
786495,0,728,12,1,
786534144,729,5,63,3,
7866109,0,327,3,110,
78670,327,3,111,0,
7868327,3,112,0,327,
78693,113,0,327,3,
7870114,0,327,3,115,
78710,730,12,1,34178,
7872731,5,63,3,109,
78730,327,3,110,0,
7874327,3,111,0,327,
78753,112,0,327,3,
7876113,0,327,3,114,
78770,327,3,115,0,
7878327,3,116,0,732,
787912,1,34213,733,5,
788063,3,109,0,327,
78813,110,0,327,3,
7882111,0,327,3,112,
78830,327,3,113,0,
7884327,3,114,0,327,
78853,115,0,327,3,
7886116,0,327,3,117,
78870,327,3,118,0,
7888327,3,119,0,327,
78893,120,0,327,3,
7890121,0,327,3,122,
78910,327,3,48,0,
7892327,3,49,0,327,
78933,50,0,327,3,
789451,0,327,3,52,
78950,327,3,53,0,
7896327,3,54,0,327,
78973,55,0,327,3,
789856,0,327,3,57,
78990,327,3,65,0,
7900327,3,66,0,327,
79013,67,0,327,3,
790268,0,327,3,69,
79030,327,3,70,0,
7904327,3,71,0,327,
79053,72,0,327,3,
790673,0,327,3,74,
79070,327,3,75,0,
7908327,3,76,0,327,
79093,77,0,327,3,
791078,0,327,3,79,
79110,327,3,80,0,
7912327,3,81,0,327,
79133,82,0,327,3,
791483,0,327,3,84,
79150,327,3,85,0,
7916327,3,86,0,327,
79173,87,0,327,3,
791888,0,327,3,89,
79190,327,3,90,0,
7920327,3,95,0,327,
79213,97,0,734,12,
79221,34256,735,5,63,
79233,109,0,327,3,
7924110,0,327,3,111,
79250,327,3,112,0,
7926327,3,113,0,327,
79273,114,0,736,12,
79281,34289,737,5,63,
79293,109,0,327,3,
7930110,0,327,3,111,
79310,327,3,112,0,
7932327,3,113,0,327,
79333,114,0,327,3,
7934115,0,327,3,116,
79350,738,12,1,34324,
7936739,5,63,3,109,
79370,327,3,110,0,
7938327,3,111,0,327,
79393,112,0,327,3,
7940113,0,327,3,114,
79410,327,3,115,0,
7942327,3,116,0,327,
79433,117,0,327,3,
7944118,0,327,3,119,
79450,327,3,120,0,
7946327,3,121,0,327,
79473,122,0,327,3,
794848,0,327,3,49,
79490,327,3,50,0,
7950327,3,51,0,327,
79513,52,0,327,3,
795253,0,327,3,54,
79530,327,3,55,0,
7954327,3,56,0,327,
79553,57,0,327,3,
795665,0,327,3,66,
79570,327,3,67,0,
7958327,3,68,0,327,
79593,69,0,327,3,
796070,0,327,3,71,
79610,327,3,72,0,
7962327,3,73,0,327,
79633,74,0,327,3,
796475,0,327,3,76,
79650,327,3,77,0,
7966327,3,78,0,327,
79673,79,0,327,3,
796880,0,327,3,81,
79690,327,3,82,0,
7970327,3,83,0,327,
79713,84,0,327,3,
797285,0,327,3,86,
79730,327,3,87,0,
7974327,3,88,0,327,
79753,89,0,327,3,
797690,0,327,3,95,
79770,327,3,97,0,
7978327,3,98,0,327,
79793,99,0,327,3,
7980100,0,327,3,101,
79810,327,3,102,0,
7982327,3,103,0,327,
79833,104,0,327,3,
7984105,0,327,3,106,
79850,327,3,107,0,
7986327,3,108,0,327,
7987740,11,1,541,0,
7988741,4,52,76,0,
798965,0,78,0,68,
79900,95,0,67,0,
799179,0,76,0,76,
79920,73,0,83,0,
799373,0,79,0,78,
79940,95,0,83,0,
799584,0,65,0,82,
79960,84,0,95,0,
799769,0,86,0,69,
79980,78,0,84,0,
79991,-1,3,117,0,
8000327,3,118,0,327,
80013,119,0,327,3,
8002120,0,327,3,121,
80030,327,3,122,0,
8004327,3,48,0,327,
80053,49,0,327,3,
800650,0,327,3,51,
80070,327,3,52,0,
8008327,3,53,0,327,
80093,54,0,327,3,
801055,0,327,3,56,
80110,327,3,57,0,
8012327,3,65,0,327,
80133,66,0,327,3,
801467,0,327,3,68,
80150,327,3,69,0,
8016327,3,70,0,327,
80173,71,0,327,3,
801872,0,327,3,73,
80190,327,3,74,0,
8020327,3,75,0,327,
80213,76,0,327,3,
802277,0,327,3,78,
80230,327,3,79,0,
8024327,3,80,0,327,
80253,81,0,327,3,
802682,0,327,3,83,
80270,327,3,84,0,
8028327,3,85,0,327,
80293,86,0,327,3,
803087,0,327,3,88,
80310,327,3,89,0,
8032327,3,90,0,327,
80333,95,0,327,3,
803497,0,327,3,98,
80350,327,3,99,0,
8036327,3,100,0,327,
80373,101,0,327,3,
8038102,0,327,3,103,
80390,327,3,104,0,
8040327,3,105,0,327,
80413,106,0,327,3,
8042107,0,327,3,108,
80430,327,742,11,1,
8044829,0,330,1,-1,
80453,115,0,327,3,
8046116,0,327,3,117,
80470,327,3,118,0,
8048327,3,119,0,327,
80493,120,0,327,3,
8050121,0,327,3,122,
80510,327,3,48,0,
8052327,3,49,0,327,
80533,50,0,327,3,
805451,0,327,3,52,
80550,327,3,53,0,
8056327,3,54,0,327,
80573,55,0,327,3,
805856,0,327,3,57,
80590,327,3,65,0,
8060327,3,66,0,327,
80613,67,0,327,3,
806268,0,327,3,69,
80630,327,3,70,0,
8064327,3,71,0,327,
80653,72,0,327,3,
806673,0,327,3,74,
80670,327,3,75,0,
8068327,3,76,0,327,
80693,77,0,327,3,
807078,0,327,3,79,
80710,327,3,80,0,
8072327,3,81,0,327,
80733,82,0,327,3,
807483,0,327,3,84,
80750,327,3,85,0,
8076327,3,86,0,327,
80773,87,0,327,3,
807888,0,327,3,89,
80790,327,3,90,0,
8080327,3,95,0,327,
80813,97,0,327,3,
808298,0,327,3,99,
80830,327,3,100,0,
8084327,3,101,0,327,
80853,102,0,327,3,
8086103,0,327,3,104,
80870,327,3,105,0,
8088327,3,106,0,327,
80893,107,0,327,3,
8090108,0,327,743,11,
80911,829,0,330,1,
8092-1,3,98,0,327,
80933,99,0,327,3,
8094100,0,327,3,101,
80950,327,3,102,0,
8096327,3,103,0,327,
80973,104,0,327,3,
8098105,0,327,3,106,
80990,327,3,107,0,
8100327,3,108,0,327,
8101744,11,1,829,0,
8102330,1,-1,3,117,
81030,327,3,118,0,
8104327,3,119,0,327,
81053,120,0,327,3,
8106121,0,327,3,122,
81070,327,3,48,0,
8108327,3,49,0,327,
81093,50,0,327,3,
811051,0,327,3,52,
81110,327,3,53,0,
8112327,3,54,0,327,
81133,55,0,327,3,
811456,0,327,3,57,
81150,327,3,65,0,
8116327,3,66,0,327,
81173,67,0,327,3,
811868,0,327,3,69,
81190,327,3,70,0,
8120327,3,71,0,327,
81213,72,0,327,3,
812273,0,327,3,74,
81230,327,3,75,0,
8124327,3,76,0,327,
81253,77,0,327,3,
812678,0,327,3,79,
81270,327,3,80,0,
8128327,3,81,0,327,
81293,82,0,327,3,
813083,0,327,3,84,
81310,327,3,85,0,
8132327,3,86,0,327,
81333,87,0,327,3,
813488,0,327,3,89,
81350,327,3,90,0,
8136327,3,95,0,327,
81373,97,0,327,3,
813898,0,327,3,99,
81390,327,3,100,0,
8140327,3,101,0,327,
81413,102,0,327,3,
8142103,0,327,3,104,
81430,327,3,105,0,
8144327,3,106,0,327,
81453,107,0,327,3,
8146108,0,327,745,11,
81471,829,0,330,1,
8148-1,3,116,0,327,
81493,117,0,327,3,
8150118,0,327,3,119,
81510,327,3,120,0,
8152327,3,121,0,327,
81533,122,0,327,3,
815448,0,327,3,49,
81550,327,3,50,0,
8156327,3,51,0,327,
81573,52,0,327,3,
815853,0,327,3,54,
81590,327,3,55,0,
8160327,3,56,0,327,
81613,57,0,327,3,
816265,0,327,3,66,
81630,327,3,67,0,
8164327,3,68,0,327,
81653,69,0,327,3,
816670,0,327,3,71,
81670,327,3,72,0,
8168327,3,73,0,327,
81693,74,0,327,3,
817075,0,327,3,76,
81710,327,3,77,0,
8172327,3,78,0,327,
81733,79,0,327,3,
817480,0,327,3,81,
81750,327,3,82,0,
8176327,3,83,0,327,
81773,84,0,327,3,
817885,0,327,3,86,
81790,327,3,87,0,
8180327,3,88,0,327,
81813,89,0,327,3,
818290,0,327,3,95,
81830,327,3,97,0,
8184327,3,98,0,327,
81853,99,0,327,3,
8186100,0,327,3,101,
81870,746,12,1,34791,
8188747,5,63,3,109,
81890,327,3,110,0,
8190748,12,1,34820,749,
81915,63,3,109,0,
8192327,3,110,0,327,
81933,111,0,327,3,
8194112,0,327,3,113,
81950,327,3,114,0,
8196327,3,115,0,327,
81973,116,0,327,3,
8198117,0,327,3,118,
81990,327,3,119,0,
8200327,3,120,0,327,
82013,121,0,327,3,
8202122,0,327,3,48,
82030,327,3,49,0,
8204327,3,50,0,327,
82053,51,0,327,3,
820652,0,327,3,53,
82070,327,3,54,0,
8208327,3,55,0,327,
82093,56,0,327,3,
821057,0,327,3,65,
82110,327,3,66,0,
8212327,3,67,0,327,
82133,68,0,327,3,
821469,0,327,3,70,
82150,327,3,71,0,
8216327,3,72,0,327,
82173,73,0,327,3,
821874,0,327,3,75,
82190,327,3,76,0,
8220327,3,77,0,327,
82213,78,0,327,3,
822279,0,327,3,80,
82230,327,3,81,0,
8224327,3,82,0,327,
82253,83,0,327,3,
822684,0,327,3,85,
82270,327,3,86,0,
8228327,3,87,0,327,
82293,88,0,327,3,
823089,0,327,3,90,
82310,327,3,95,0,
8232327,3,97,0,327,
82333,98,0,327,3,
823499,0,327,3,100,
82350,750,12,1,34866,
8236751,5,63,3,109,
82370,327,3,110,0,
8238327,3,111,0,327,
82393,112,0,327,3,
8240113,0,327,3,114,
82410,327,3,115,0,
8242327,3,116,0,327,
82433,117,0,327,3,
8244118,0,327,3,119,
82450,327,3,120,0,
8246327,3,121,0,327,
82473,122,0,327,3,
824848,0,327,3,49,
82490,327,3,50,0,
8250327,3,51,0,327,
82513,52,0,327,3,
825253,0,327,3,54,
82530,327,3,55,0,
8254327,3,56,0,327,
82553,57,0,327,3,
825665,0,327,3,66,
82570,327,3,67,0,
8258327,3,68,0,327,
82593,69,0,327,3,
826070,0,327,3,71,
82610,327,3,72,0,
8262327,3,73,0,327,
82633,74,0,327,3,
826475,0,327,3,76,
82650,327,3,77,0,
8266327,3,78,0,327,
82673,79,0,327,3,
826880,0,327,3,81,
82690,327,3,82,0,
8270327,3,83,0,327,
82713,84,0,327,3,
827285,0,327,3,86,
82730,327,3,87,0,
8274327,3,88,0,327,
82753,89,0,327,3,
827690,0,327,3,95,
82770,327,3,97,0,
8278327,3,98,0,327,
82793,99,0,327,3,
8280100,0,327,3,101,
82810,327,3,102,0,
8282327,3,103,0,327,
82833,104,0,327,3,
8284105,0,327,3,106,
82850,327,3,107,0,
8286327,3,108,0,327,
8287752,11,1,519,0,
8288753,4,48,76,0,
828965,0,78,0,68,
82900,95,0,67,0,
829179,0,76,0,76,
82920,73,0,83,0,
829373,0,79,0,78,
82940,95,0,69,0,
829578,0,68,0,95,
82960,69,0,86,0,
829769,0,78,0,84,
82980,1,-1,3,101,
82990,327,3,102,0,
8300327,3,103,0,327,
83013,104,0,327,3,
8302105,0,327,3,106,
83030,327,3,107,0,
8304327,3,108,0,327,
8305754,11,1,829,0,
8306330,1,-1,3,111,
83070,327,3,112,0,
8308327,3,113,0,327,
83093,114,0,327,3,
8310115,0,327,3,116,
83110,327,3,117,0,
8312327,3,118,0,327,
83133,119,0,327,3,
8314120,0,327,3,121,
83150,327,3,122,0,
8316327,3,48,0,327,
83173,49,0,327,3,
831850,0,327,3,51,
83190,327,3,52,0,
8320327,3,53,0,327,
83213,54,0,327,3,
832255,0,327,3,56,
83230,327,3,57,0,
8324327,3,65,0,327,
83253,66,0,327,3,
832667,0,327,3,68,
83270,327,3,69,0,
8328327,3,70,0,327,
83293,71,0,327,3,
833072,0,327,3,73,
83310,327,3,74,0,
8332327,3,75,0,327,
83333,76,0,327,3,
833477,0,327,3,78,
83350,327,3,79,0,
8336327,3,80,0,327,
83373,81,0,327,3,
833882,0,327,3,83,
83390,327,3,84,0,
8340327,3,85,0,327,
83413,86,0,327,3,
834287,0,327,3,88,
83430,327,3,89,0,
8344327,3,90,0,327,
83453,95,0,327,3,
834697,0,327,3,98,
83470,327,3,99,0,
8348327,3,100,0,327,
83493,101,0,327,3,
8350102,0,327,3,103,
83510,327,3,104,0,
8352327,3,105,0,327,
83533,106,0,327,3,
8354107,0,327,3,108,
83550,327,755,11,1,
8356829,0,330,1,-1,
83573,102,0,327,3,
8358103,0,327,3,104,
83590,327,3,105,0,
8360327,3,106,0,327,
83613,107,0,327,3,
8362108,0,327,756,11,
83631,829,0,330,1,
8364-1,3,97,0,327,
83653,98,0,327,3,
836699,0,327,3,100,
83670,327,3,101,0,
8368327,3,102,0,327,
83693,103,0,327,3,
8370104,0,327,3,105,
83710,327,3,106,0,
8372327,3,107,0,327,
83733,108,0,327,757,
837411,1,501,0,758,
83754,40,76,0,65,
83760,78,0,68,0,
837795,0,67,0,79,
83780,76,0,76,0,
837973,0,83,0,73,
83800,79,0,78,0,
838195,0,69,0,86,
83820,69,0,78,0,
838384,0,1,-1,3,
8384111,0,327,3,112,
83850,327,3,113,0,
8386327,3,114,0,327,
83873,115,0,327,3,
8388116,0,327,3,117,
83890,327,3,118,0,
8390327,3,119,0,327,
83913,120,0,327,3,
8392121,0,327,3,122,
83930,327,3,48,0,
8394327,3,49,0,327,
83953,50,0,327,3,
839651,0,327,3,52,
83970,327,3,53,0,
8398327,3,54,0,327,
83993,55,0,327,3,
840056,0,327,3,57,
84010,327,3,65,0,
8402327,3,66,0,327,
84033,67,0,327,3,
840468,0,327,3,69,
84050,327,3,70,0,
8406327,3,71,0,327,
84073,72,0,327,3,
840873,0,327,3,74,
84090,327,3,75,0,
8410327,3,76,0,327,
84113,77,0,327,3,
841278,0,327,3,79,
84130,327,3,80,0,
8414327,3,81,0,327,
84153,82,0,327,3,
841683,0,327,3,84,
84170,327,3,85,0,
8418327,3,86,0,327,
84193,87,0,327,3,
842088,0,327,3,89,
84210,327,3,90,0,
8422327,3,95,0,327,
84233,97,0,327,3,
842498,0,327,3,99,
84250,327,3,100,0,
8426327,3,101,0,327,
84273,102,0,327,3,
8428103,0,327,3,104,
84290,327,3,105,0,
8430327,3,106,0,327,
84313,107,0,327,3,
8432108,0,327,759,11,
84331,829,0,330,1,
8434-1,3,112,0,327,
84353,113,0,327,3,
8436114,0,327,3,115,
84370,327,3,116,0,
8438327,3,117,0,327,
84393,118,0,327,3,
8440119,0,327,3,120,
84410,327,3,121,0,
8442327,3,122,0,327,
84433,48,0,327,3,
844449,0,327,3,50,
84450,327,3,51,0,
8446327,3,52,0,327,
84473,53,0,327,3,
844854,0,327,3,55,
84490,327,3,56,0,
8450327,3,57,0,327,
84513,65,0,327,3,
845266,0,327,3,67,
84530,327,3,68,0,
8454327,3,69,0,327,
84553,70,0,327,3,
845671,0,327,3,72,
84570,327,3,73,0,
8458327,3,74,0,327,
84593,75,0,327,3,
846076,0,327,3,77,
84610,327,3,78,0,
8462327,3,79,0,327,
84633,80,0,327,3,
846481,0,327,3,82,
84650,327,3,83,0,
8466327,3,84,0,327,
84673,85,0,327,3,
846886,0,327,3,87,
84690,327,3,88,0,
8470327,3,89,0,327,
84713,90,0,327,3,
847295,0,327,3,97,
84730,327,3,98,0,
8474327,3,99,0,327,
84753,100,0,327,3,
8476101,0,327,3,102,
84770,327,3,103,0,
8478327,3,104,0,327,
84793,105,0,327,3,
8480106,0,327,3,107,
84810,327,3,108,0,
8482327,760,11,1,829,
84830,330,1,-1,3,
8484106,0,327,3,107,
84850,327,3,108,0,
8486327,761,11,1,829,
84870,330,1,-1,3,
8488116,0,327,3,117,
84890,327,3,118,0,
8490327,3,119,0,327,
84913,120,0,327,3,
8492121,0,327,3,122,
84930,327,3,48,0,
8494327,3,49,0,327,
84953,50,0,327,3,
849651,0,327,3,52,
84970,327,3,53,0,
8498327,3,54,0,327,
84993,55,0,327,3,
850056,0,327,3,57,
85010,327,3,65,0,
8502327,3,66,0,327,
85033,67,0,327,3,
850468,0,327,3,69,
85050,327,3,70,0,
8506327,3,71,0,327,
85073,72,0,327,3,
850873,0,327,3,74,
85090,327,3,75,0,
8510327,3,76,0,327,
85113,77,0,327,3,
851278,0,327,3,79,
85130,327,3,80,0,
8514327,3,81,0,327,
85153,82,0,327,3,
851683,0,327,3,84,
85170,327,3,85,0,
8518327,3,86,0,327,
85193,87,0,327,3,
852088,0,327,3,89,
85210,327,3,90,0,
8522327,3,95,0,327,
85233,97,0,327,3,
852498,0,327,3,99,
85250,327,3,100,0,
8526327,3,101,0,327,
85273,102,0,327,3,
8528103,0,327,3,104,
85290,327,3,105,0,
8530327,3,106,0,327,
85313,107,0,327,3,
8532108,0,327,762,11,
85331,829,0,330,1,
8534-1,3,106,0,327,
85353,107,0,327,3,
8536108,0,327,763,11,
85371,829,0,330,1,
8538-1,764,11,1,829,
85390,330,1,-1,765,
854011,1,829,0,330,
85411,-1,3,112,0,
8542327,3,113,0,327,
85433,114,0,327,3,
8544115,0,327,3,116,
85450,327,3,117,0,
8546327,3,118,0,327,
85473,119,0,327,3,
8548120,0,327,3,121,
85490,327,3,122,0,
8550327,3,48,0,327,
85513,49,0,327,3,
855250,0,327,3,51,
85530,327,3,52,0,
8554327,3,53,0,327,
85553,54,0,327,3,
855655,0,327,3,56,
85570,327,3,57,0,
8558327,3,65,0,327,
85593,66,0,327,3,
856067,0,327,3,68,
85610,327,3,69,0,
8562327,3,70,0,327,
85633,71,0,327,3,
856472,0,327,3,73,
85650,327,3,74,0,
8566327,3,75,0,327,
85673,76,0,327,3,
856877,0,327,3,78,
85690,327,3,79,0,
8570327,3,80,0,327,
85713,81,0,327,3,
857282,0,327,3,83,
85730,327,3,84,0,
8574327,3,85,0,327,
85753,86,0,327,3,
857687,0,327,3,88,
85770,327,3,89,0,
8578327,3,90,0,327,
85793,95,0,327,3,
858097,0,327,3,98,
85810,327,3,99,0,
8582327,3,100,0,327,
85833,101,0,327,3,
8584102,0,327,3,103,
85850,327,3,104,0,
8586327,3,105,0,327,
85873,106,0,327,3,
8588107,0,327,3,108,
85890,327,766,11,1,
8590829,0,330,1,-1,
85913,100,0,327,3,
8592101,0,327,3,102,
85930,327,3,103,0,
8594327,3,104,0,327,
85953,105,0,327,3,
8596106,0,327,3,107,
85970,327,3,108,0,
8598327,767,11,1,829,
85990,330,1,-1,3,
860097,0,327,3,98,
86010,327,3,99,0,
8602327,3,100,0,327,
86033,101,0,327,3,
8604102,0,327,3,103,
86050,327,3,104,0,
8606327,3,105,0,327,
86073,106,0,327,3,
8608107,0,327,3,108,
86090,327,768,11,1,
8610829,0,330,1,-1,
86113,101,0,327,3,
8612102,0,327,3,103,
86130,327,3,104,0,
8614327,3,105,0,327,
86153,106,0,327,3,
8616107,0,327,3,108,
86170,327,769,11,1,
8618829,0,330,1,-1,
86193,111,0,327,3,
8620112,0,327,3,113,
86210,327,3,114,0,
8622327,3,115,0,327,
86233,116,0,327,3,
8624117,0,327,3,118,
86250,327,3,119,0,
8626327,3,120,0,327,
86273,121,0,327,3,
8628122,0,327,3,48,
86290,327,3,49,0,
8630327,3,50,0,327,
86313,51,0,327,3,
863252,0,327,3,53,
86330,327,3,54,0,
8634327,3,55,0,327,
86353,56,0,327,3,
863657,0,327,3,65,
86370,327,3,66,0,
8638327,3,67,0,327,
86393,68,0,327,3,
864069,0,327,3,70,
86410,327,3,71,0,
8642327,3,72,0,327,
86433,73,0,327,3,
864474,0,327,3,75,
86450,327,3,76,0,
8646327,3,77,0,327,
86473,78,0,327,3,
864879,0,327,3,80,
86490,327,3,81,0,
8650327,3,82,0,327,
86513,83,0,327,3,
865284,0,327,3,85,
86530,327,3,86,0,
8654327,3,87,0,327,
86553,88,0,327,3,
865689,0,327,3,90,
86570,327,3,95,0,
8658327,3,97,0,327,
86593,98,0,327,3,
866099,0,327,3,100,
86610,327,3,101,0,
8662327,3,102,0,327,
86633,103,0,327,3,
8664104,0,327,3,105,
86650,327,3,106,0,
8666327,3,107,0,327,
86673,108,0,327,770,
866811,1,829,0,330,
86691,-1,3,98,0,
8670327,3,99,0,327,
86713,100,0,327,3,
8672101,0,327,3,102,
86730,327,3,103,0,
8674327,3,104,0,327,
86753,105,0,771,12,
86761,36167,772,5,63,
86773,109,0,327,3,
8678110,0,773,12,1,
867936196,774,5,63,3,
8680109,0,327,3,110,
86810,327,3,111,0,
8682327,3,112,0,327,
86833,113,0,327,3,
8684114,0,327,3,115,
86850,327,3,116,0,
8686327,3,117,0,327,
86873,118,0,327,3,
8688119,0,327,3,120,
86890,327,3,121,0,
8690327,3,122,0,327,
86913,48,0,327,3,
869249,0,327,3,50,
86930,327,3,51,0,
8694327,3,52,0,327,
86953,53,0,327,3,
869654,0,327,3,55,
86970,327,3,56,0,
8698327,3,57,0,327,
86993,65,0,327,3,
870066,0,327,3,67,
87010,327,3,68,0,
8702327,3,69,0,327,
87033,70,0,327,3,
870471,0,327,3,72,
87050,327,3,73,0,
8706327,3,74,0,327,
87073,75,0,327,3,
870876,0,327,3,77,
87090,327,3,78,0,
8710327,3,79,0,327,
87113,80,0,327,3,
871281,0,327,3,82,
87130,327,3,83,0,
8714327,3,84,0,327,
87153,85,0,327,3,
871686,0,327,3,87,
87170,327,3,88,0,
8718327,3,89,0,327,
87193,90,0,327,3,
872095,0,327,3,97,
87210,327,3,98,0,
8722327,3,99,0,327,
87233,100,0,327,3,
8724101,0,327,3,102,
87250,327,3,103,0,
8726327,3,104,0,327,
87273,105,0,327,3,
8728106,0,327,3,107,
87290,775,12,1,36249,
8730776,5,63,3,109,
87310,327,3,110,0,
8732327,3,111,0,327,
87333,112,0,327,3,
8734113,0,327,3,114,
87350,327,3,115,0,
8736327,3,116,0,327,
87373,117,0,327,3,
8738118,0,327,3,119,
87390,327,3,120,0,
8740327,3,121,0,327,
87413,122,0,327,3,
874248,0,327,3,49,
87430,327,3,50,0,
8744327,3,51,0,327,
87453,52,0,327,3,
874653,0,327,3,54,
87470,327,3,55,0,
8748327,3,56,0,327,
87493,57,0,327,3,
875065,0,327,3,66,
87510,327,3,67,0,
8752327,3,68,0,327,
87533,69,0,327,3,
875470,0,327,3,71,
87550,327,3,72,0,
8756327,3,73,0,327,
87573,74,0,327,3,
875875,0,327,3,76,
87590,327,3,77,0,
8760327,3,78,0,327,
87613,79,0,327,3,
876280,0,327,3,81,
87630,327,3,82,0,
8764327,3,83,0,327,
87653,84,0,327,3,
876685,0,327,3,86,
87670,327,3,87,0,
8768327,3,88,0,327,
87693,89,0,327,3,
877090,0,327,3,95,
87710,777,12,1,36335,
8772778,5,63,3,109,
87730,779,12,1,36363,
8774780,5,63,3,109,
87750,327,3,110,0,
8776327,3,111,0,327,
87773,112,0,327,3,
8778113,0,327,3,114,
87790,327,3,115,0,
8780327,3,116,0,327,
87813,117,0,327,3,
8782118,0,327,3,119,
87830,327,3,120,0,
8784327,3,121,0,327,
87853,122,0,327,3,
878648,0,327,3,49,
87870,327,3,50,0,
8788327,3,51,0,327,
87893,52,0,327,3,
879053,0,327,3,54,
87910,327,3,55,0,
8792327,3,56,0,327,
87933,57,0,327,3,
879465,0,327,3,66,
87950,327,3,67,0,
8796327,3,68,0,327,
87973,69,0,327,3,
879870,0,327,3,71,
87990,327,3,72,0,
8800327,3,73,0,327,
88013,74,0,327,3,
880275,0,327,3,76,
88030,327,3,77,0,
8804327,3,78,0,327,
88053,79,0,327,3,
880680,0,327,3,81,
88070,327,3,82,0,
8808327,3,83,0,327,
88093,84,0,327,3,
881085,0,327,3,86,
88110,327,3,87,0,
8812327,3,88,0,327,
88133,89,0,327,3,
881490,0,327,3,95,
88150,327,3,97,0,
8816327,3,98,0,327,
88173,99,0,327,3,
8818100,0,327,3,101,
88190,781,12,1,36410,
8820782,5,63,3,109,
88210,327,3,110,0,
8822327,3,111,0,327,
88233,112,0,327,3,
8824113,0,327,3,114,
88250,327,3,115,0,
8826783,12,1,36444,784,
88275,63,3,109,0,
8828327,3,110,0,327,
88293,111,0,327,3,
8830112,0,327,3,113,
88310,327,3,114,0,
8832327,3,115,0,785,
883312,1,36478,786,5,
883463,3,109,0,327,
88353,110,0,327,3,
8836111,0,327,3,112,
88370,327,3,113,0,
8838327,3,114,0,327,
88393,115,0,327,3,
8840116,0,327,3,117,
88410,327,3,118,0,
8842327,3,119,0,327,
88433,120,0,327,3,
8844121,0,327,3,122,
88450,327,3,48,0,
8846327,3,49,0,327,
88473,50,0,327,3,
884851,0,327,3,52,
88490,327,3,53,0,
8850327,3,54,0,327,
88513,55,0,327,3,
885256,0,327,3,57,
88530,327,3,65,0,
8854327,3,66,0,327,
88553,67,0,327,3,
885668,0,327,3,69,
88570,327,3,70,0,
8858327,3,71,0,327,
88593,72,0,327,3,
886073,0,327,3,74,
88610,327,3,75,0,
8862327,3,76,0,327,
88633,77,0,327,3,
886478,0,327,3,79,
88650,327,3,80,0,
8866327,3,81,0,327,
88673,82,0,327,3,
886883,0,327,3,84,
88690,327,3,85,0,
8870327,3,86,0,327,
88713,87,0,327,3,
887288,0,327,3,89,
88730,327,3,90,0,
8874327,3,95,0,327,
88753,97,0,787,12,
88761,36521,788,5,63,
88773,109,0,327,3,
8878110,0,327,3,111,
88790,327,3,112,0,
8880327,3,113,0,327,
88813,114,0,327,3,
8882115,0,327,3,116,
88830,327,3,117,0,
8884327,3,118,0,327,
88853,119,0,327,3,
8886120,0,327,3,121,
88870,327,3,122,0,
8888327,3,48,0,327,
88893,49,0,327,3,
889050,0,327,3,51,
88910,327,3,52,0,
8892327,3,53,0,327,
88933,54,0,327,3,
889455,0,327,3,56,
88950,327,3,57,0,
8896327,3,65,0,327,
88973,66,0,327,3,
889867,0,327,3,68,
88990,327,3,69,0,
8900327,3,70,0,327,
89013,71,0,327,3,
890272,0,327,3,73,
89030,327,3,74,0,
8904327,3,75,0,327,
89053,76,0,327,3,
890677,0,327,3,78,
89070,327,3,79,0,
8908327,3,80,0,327,
89093,81,0,327,3,
891082,0,327,3,83,
89110,327,3,84,0,
8912327,3,85,0,327,
89133,86,0,327,3,
891487,0,327,3,88,
89150,327,3,89,0,
8916327,3,90,0,327,
89173,95,0,327,3,
891897,0,327,3,98,
89190,327,3,99,0,
8920327,3,100,0,327,
89213,101,0,327,3,
8922102,0,327,3,103,
89230,789,12,1,36570,
8924790,5,63,3,109,
89250,327,3,110,0,
8926327,3,111,0,327,
89273,112,0,327,3,
8928113,0,327,3,114,
89290,327,3,115,0,
8930327,3,116,0,327,
89313,117,0,327,3,
8932118,0,327,3,119,
89330,327,3,120,0,
8934327,3,121,0,327,
89353,122,0,327,3,
893648,0,327,3,49,
89370,327,3,50,0,
8938327,3,51,0,327,
89393,52,0,327,3,
894053,0,327,3,54,
89410,327,3,55,0,
8942327,3,56,0,327,
89433,57,0,327,3,
894465,0,327,3,66,
89450,327,3,67,0,
8946327,3,68,0,327,
89473,69,0,327,3,
894870,0,327,3,71,
89490,327,3,72,0,
8950327,3,73,0,327,
89513,74,0,327,3,
895275,0,327,3,76,
89530,327,3,77,0,
8954327,3,78,0,327,
89553,79,0,327,3,
895680,0,327,3,81,
89570,327,3,82,0,
8958327,3,83,0,327,
89593,84,0,327,3,
896085,0,327,3,86,
89610,327,3,87,0,
8962327,3,88,0,327,
89633,89,0,327,3,
896490,0,327,3,95,
89650,327,3,97,0,
8966327,3,98,0,327,
89673,99,0,327,3,
8968100,0,327,3,101,
89690,791,12,1,36617,
8970792,5,63,3,109,
89710,327,3,110,0,
8972327,3,111,0,327,
89733,112,0,327,3,
8974113,0,327,3,114,
89750,327,3,115,0,
8976327,3,116,0,327,
89773,117,0,327,3,
8978118,0,327,3,119,
89790,327,3,120,0,
8980327,3,121,0,327,
89813,122,0,327,3,
898248,0,327,3,49,
89830,327,3,50,0,
8984327,3,51,0,327,
89853,52,0,327,3,
898653,0,327,3,54,
89870,327,3,55,0,
8988327,3,56,0,327,
89893,57,0,327,3,
899065,0,327,3,66,
89910,327,3,67,0,
8992327,3,68,0,327,
89933,69,0,327,3,
899470,0,327,3,71,
89950,327,3,72,0,
8996327,3,73,0,327,
89973,74,0,327,3,
899875,0,327,3,76,
89990,327,3,77,0,
9000327,3,78,0,327,
90013,79,0,327,3,
900280,0,327,3,81,
90030,327,3,82,0,
9004327,3,83,0,327,
90053,84,0,327,3,
900685,0,327,3,86,
90070,327,3,87,0,
9008327,3,88,0,327,
90093,89,0,327,3,
901090,0,327,3,95,
90110,327,3,97,0,
9012327,3,98,0,327,
90133,99,0,327,3,
9014100,0,327,3,101,
90150,327,3,102,0,
9016327,3,103,0,327,
90173,104,0,327,3,
9018105,0,327,3,106,
90190,327,3,107,0,
9020327,3,108,0,327,
9021793,11,1,565,0,
9022794,4,36,76,0,
902373,0,78,0,75,
90240,95,0,77,0,
902569,0,83,0,83,
90260,65,0,71,0,
902769,0,95,0,69,
90280,86,0,69,0,
902978,0,84,0,1,
9030-1,3,102,0,327,
90313,103,0,327,3,
9032104,0,327,3,105,
90330,327,3,106,0,
9034327,3,107,0,327,
90353,108,0,327,795,
903611,1,829,0,330,
90371,-1,3,104,0,
9038327,3,105,0,327,
90393,106,0,327,3,
9040107,0,327,3,108,
90410,327,796,11,1,
9042829,0,330,1,-1,
90433,98,0,327,3,
904499,0,327,3,100,
90450,327,3,101,0,
9046327,3,102,0,327,
90473,103,0,327,3,
9048104,0,327,3,105,
90490,327,3,106,0,
9050327,3,107,0,327,
90513,108,0,327,797,
905211,1,829,0,330,
90531,-1,3,116,0,
9054327,3,117,0,327,
90553,118,0,327,3,
9056119,0,327,3,120,
90570,327,3,121,0,
9058327,3,122,0,327,
90593,48,0,327,3,
906049,0,327,3,50,
90610,327,3,51,0,
9062327,3,52,0,327,
90633,53,0,327,3,
906454,0,327,3,55,
90650,327,3,56,0,
9066327,3,57,0,327,
90673,65,0,327,3,
906866,0,327,3,67,
90690,327,3,68,0,
9070327,3,69,0,327,
90713,70,0,327,3,
907271,0,327,3,72,
90730,327,3,73,0,
9074327,3,74,0,327,
90753,75,0,327,3,
907676,0,327,3,77,
90770,327,3,78,0,
9078327,3,79,0,327,
90793,80,0,327,3,
908081,0,327,3,82,
90810,327,3,83,0,
9082327,3,84,0,327,
90833,85,0,327,3,
908486,0,327,3,87,
90850,327,3,88,0,
9086327,3,89,0,327,
90873,90,0,327,3,
908895,0,327,3,97,
90890,327,3,98,0,
9090327,3,99,0,327,
90913,100,0,327,3,
9092101,0,327,3,102,
90930,327,3,103,0,
9094327,3,104,0,327,
90953,105,0,327,3,
9096106,0,327,3,107,
90970,327,3,108,0,
9098327,798,11,1,829,
90990,330,1,-1,3,
9100116,0,327,3,117,
91010,327,3,118,0,
9102327,3,119,0,327,
91033,120,0,327,3,
9104121,0,327,3,122,
91050,327,3,48,0,
9106327,3,49,0,327,
91073,50,0,327,3,
910851,0,327,3,52,
91090,327,3,53,0,
9110327,3,54,0,327,
91113,55,0,327,3,
911256,0,327,3,57,
91130,327,3,65,0,
9114327,3,66,0,327,
91153,67,0,327,3,
911668,0,327,3,69,
91170,327,3,70,0,
9118327,3,71,0,327,
91193,72,0,327,3,
912073,0,327,3,74,
91210,327,3,75,0,
9122327,3,76,0,327,
91233,77,0,327,3,
912478,0,327,3,79,
91250,327,3,80,0,
9126327,3,81,0,327,
91273,82,0,327,3,
912883,0,327,3,84,
91290,327,3,85,0,
9130327,3,86,0,327,
91313,87,0,327,3,
913288,0,327,3,89,
91330,327,3,90,0,
9134327,3,95,0,327,
91353,97,0,327,3,
913698,0,327,3,99,
91370,327,3,100,0,
9138327,3,101,0,327,
91393,102,0,327,3,
9140103,0,327,3,104,
91410,327,3,105,0,
9142327,3,106,0,327,
91433,107,0,327,3,
9144108,0,327,799,11,
91451,829,0,330,1,
9146-1,3,102,0,327,
91473,103,0,327,3,
9148104,0,327,3,105,
91490,327,3,106,0,
9150327,3,107,0,327,
91513,108,0,327,800,
915211,1,829,0,330,
91531,-1,3,110,0,
9154327,3,111,0,327,
91553,112,0,327,3,
9156113,0,327,3,114,
91570,327,3,115,0,
9158327,3,116,0,327,
91593,117,0,327,3,
9160118,0,327,3,119,
91610,327,3,120,0,
9162327,3,121,0,327,
91633,122,0,327,3,
916448,0,327,3,49,
91650,327,3,50,0,
9166327,3,51,0,327,
91673,52,0,327,3,
916853,0,327,3,54,
91690,327,3,55,0,
9170327,3,56,0,327,
91713,57,0,327,3,
917265,0,327,3,66,
91730,327,3,67,0,
9174327,3,68,0,327,
91753,69,0,327,3,
917670,0,327,3,71,
91770,327,3,72,0,
9178327,3,73,0,327,
91793,74,0,327,3,
918075,0,327,3,76,
91810,327,3,77,0,
9182327,3,78,0,327,
91833,79,0,327,3,
918480,0,327,3,81,
91850,327,3,82,0,
9186327,3,83,0,327,
91873,84,0,327,3,
918885,0,327,3,86,
91890,327,3,87,0,
9190327,3,88,0,327,
91913,89,0,327,3,
919290,0,327,3,95,
91930,327,3,97,0,
9194327,3,98,0,327,
91953,99,0,327,3,
9196100,0,327,3,101,
91970,327,3,102,0,
9198327,3,103,0,327,
91993,104,0,327,3,
9200105,0,327,3,106,
92010,327,3,107,0,
9202327,3,108,0,327,
9203801,11,1,829,0,
9204330,1,-1,3,97,
92050,327,3,98,0,
9206327,3,99,0,327,
92073,100,0,327,3,
9208101,0,327,3,102,
92090,327,3,103,0,
9210327,3,104,0,327,
92113,105,0,327,3,
9212106,0,327,3,107,
92130,327,3,108,0,
9214327,802,11,1,829,
92150,330,1,-1,3,
9216108,0,327,803,11,
92171,829,0,330,1,
9218-1,3,111,0,327,
92193,112,0,327,3,
9220113,0,327,3,114,
92210,327,3,115,0,
9222804,12,1,37401,805,
92235,63,3,109,0,
9224327,3,110,0,327,
92253,111,0,327,3,
9226112,0,327,3,113,
92270,327,3,114,0,
9228327,3,115,0,327,
92293,116,0,806,12,
92301,37436,807,5,63,
92313,109,0,327,3,
9232110,0,327,3,111,
92330,327,3,112,0,
9234327,3,113,0,327,
92353,114,0,327,3,
9236115,0,327,3,116,
92370,327,3,117,0,
9238327,3,118,0,327,
92393,119,0,327,3,
9240120,0,327,3,121,
92410,327,3,122,0,
9242327,3,48,0,327,
92433,49,0,327,3,
924450,0,327,3,51,
92450,327,3,52,0,
9246327,3,53,0,327,
92473,54,0,327,3,
924855,0,327,3,56,
92490,327,3,57,0,
9250327,3,65,0,327,
92513,66,0,327,3,
925267,0,327,3,68,
92530,327,3,69,0,
9254327,3,70,0,327,
92553,71,0,327,3,
925672,0,327,3,73,
92570,327,3,74,0,
9258327,3,75,0,327,
92593,76,0,327,3,
926077,0,327,3,78,
92610,327,3,79,0,
9262327,3,80,0,327,
92633,81,0,327,3,
926482,0,327,3,83,
92650,327,3,84,0,
9266327,3,85,0,327,
92673,86,0,327,3,
926887,0,327,3,88,
92690,327,3,89,0,
9270327,3,90,0,327,
92713,95,0,327,3,
927297,0,327,3,98,
92730,327,3,99,0,
9274327,3,100,0,327,
92753,101,0,808,12,
92761,37483,809,5,63,
92773,109,0,327,3,
9278110,0,810,12,1,
927937512,811,5,63,3,
9280109,0,327,3,110,
92810,327,3,111,0,
9282327,3,112,0,327,
92833,113,0,327,3,
9284114,0,327,3,115,
92850,327,3,116,0,
9286327,3,117,0,327,
92873,118,0,327,3,
9288119,0,327,3,120,
92890,327,3,121,0,
9290327,3,122,0,327,
92913,48,0,327,3,
929249,0,327,3,50,
92930,327,3,51,0,
9294327,3,52,0,327,
92953,53,0,327,3,
929654,0,327,3,55,
92970,327,3,56,0,
9298327,3,57,0,327,
92993,65,0,327,3,
930066,0,327,3,67,
93010,327,3,68,0,
9302327,3,69,0,327,
93033,70,0,327,3,
930471,0,327,3,72,
93050,327,3,73,0,
9306327,3,74,0,327,
93073,75,0,327,3,
930876,0,327,3,77,
93090,327,3,78,0,
9310327,3,79,0,327,
93113,80,0,327,3,
931281,0,327,3,82,
93130,327,3,83,0,
9314327,3,84,0,327,
93153,85,0,327,3,
931686,0,327,3,87,
93170,327,3,88,0,
9318327,3,89,0,327,
93193,90,0,327,3,
932095,0,327,3,97,
93210,327,3,98,0,
9322327,3,99,0,327,
93233,100,0,327,3,
9324101,0,327,3,102,
93250,327,3,103,0,
9326327,3,104,0,327,
93273,105,0,327,3,
9328106,0,327,3,107,
93290,327,3,108,0,
9330327,812,11,1,581,
93310,813,4,24,76,
93320,73,0,83,0,
933384,0,69,0,78,
93340,95,0,69,0,
933586,0,69,0,78,
93360,84,0,1,-1,
93373,111,0,327,3,
9338112,0,327,3,113,
93390,327,3,114,0,
9340327,3,115,0,327,
93413,116,0,327,3,
9342117,0,327,3,118,
93430,327,3,119,0,
9344327,3,120,0,327,
93453,121,0,327,3,
9346122,0,327,3,48,
93470,327,3,49,0,
9348327,3,50,0,327,
93493,51,0,327,3,
935052,0,327,3,53,
93510,327,3,54,0,
9352327,3,55,0,327,
93533,56,0,327,3,
935457,0,327,3,65,
93550,327,3,66,0,
9356327,3,67,0,327,
93573,68,0,327,3,
935869,0,327,3,70,
93590,327,3,71,0,
9360327,3,72,0,327,
93613,73,0,327,3,
936274,0,327,3,75,
93630,327,3,76,0,
9364327,3,77,0,327,
93653,78,0,327,3,
936679,0,327,3,80,
93670,327,3,81,0,
9368327,3,82,0,327,
93693,83,0,327,3,
937084,0,327,3,85,
93710,327,3,86,0,
9372327,3,87,0,327,
93733,88,0,327,3,
937489,0,327,3,90,
93750,327,3,95,0,
9376327,3,97,0,327,
93773,98,0,327,3,
937899,0,327,3,100,
93790,327,3,101,0,
9380327,3,102,0,327,
93813,103,0,327,3,
9382104,0,327,3,105,
93830,327,3,106,0,
9384327,3,107,0,327,
93853,108,0,327,814,
938611,1,829,0,330,
93871,-1,3,102,0,
9388327,3,103,0,327,
93893,104,0,327,3,
9390105,0,327,3,106,
93910,327,3,107,0,
9392327,3,108,0,327,
9393815,11,1,342,0,
9394816,4,18,76,0,
939573,0,83,0,84,
93960,95,0,84,0,
939789,0,80,0,69,
93980,1,-1,3,117,
93990,327,3,118,0,
9400327,3,119,0,327,
94013,120,0,327,3,
9402121,0,327,3,122,
94030,327,3,48,0,
9404327,3,49,0,327,
94053,50,0,327,3,
940651,0,327,3,52,
94070,327,3,53,0,
9408327,3,54,0,327,
94093,55,0,327,3,
941056,0,327,3,57,
94110,327,3,65,0,
9412327,3,66,0,327,
94133,67,0,327,3,
941468,0,327,3,69,
94150,327,3,70,0,
9416327,3,71,0,327,
94173,72,0,327,3,
941873,0,327,3,74,
94190,327,3,75,0,
9420327,3,76,0,327,
94213,77,0,327,3,
942278,0,327,3,79,
94230,327,3,80,0,
9424327,3,81,0,327,
94253,82,0,327,3,
942683,0,327,3,84,
94270,327,3,85,0,
9428327,3,86,0,327,
94293,87,0,327,3,
943088,0,327,3,89,
94310,327,3,90,0,
9432327,3,95,0,327,
94333,97,0,327,3,
943498,0,327,3,99,
94350,327,3,100,0,
9436327,3,101,0,327,
94373,102,0,327,3,
9438103,0,327,3,104,
94390,327,3,105,0,
9440327,3,106,0,327,
94413,107,0,327,3,
9442108,0,327,817,11,
94431,829,0,330,1,
9444-1,3,116,0,327,
94453,117,0,327,3,
9446118,0,327,3,119,
94470,327,3,120,0,
9448327,3,121,0,327,
94493,122,0,327,3,
945048,0,327,3,49,
94510,327,3,50,0,
9452327,3,51,0,327,
94533,52,0,327,3,
945453,0,327,3,54,
94550,327,3,55,0,
9456327,3,56,0,327,
94573,57,0,327,3,
945865,0,327,3,66,
94590,327,3,67,0,
9460327,3,68,0,327,
94613,69,0,327,3,
946270,0,327,3,71,
94630,327,3,72,0,
9464327,3,73,0,327,
94653,74,0,327,3,
946675,0,327,3,76,
94670,327,3,77,0,
9468327,3,78,0,327,
94693,79,0,327,3,
947080,0,327,3,81,
94710,327,3,82,0,
9472327,3,83,0,327,
94733,84,0,327,3,
947485,0,327,3,86,
94750,327,3,87,0,
9476327,3,88,0,327,
94773,89,0,327,3,
947890,0,327,3,95,
94790,327,3,97,0,
9480327,3,98,0,327,
94813,99,0,327,3,
9482100,0,327,3,101,
94830,327,3,102,0,
9484327,3,103,0,327,
94853,104,0,327,3,
9486105,0,327,3,106,
94870,327,3,107,0,
9488327,3,108,0,327,
9489818,11,1,829,0,
9490330,1,-1,3,106,
94910,327,3,107,0,
9492327,3,108,0,327,
9493819,11,1,829,0,
9494330,1,-1,3,109,
94950,820,12,1,1290,
9496821,5,63,3,109,
94970,327,3,110,0,
9498327,3,111,0,822,
949912,1,1320,823,5,
950063,3,109,0,327,
95013,110,0,824,12,
95021,1349,825,5,63,
95033,109,0,327,3,
9504110,0,327,3,111,
95050,327,3,112,0,
9506327,3,113,0,327,
95073,114,0,327,3,
9508115,0,327,3,116,
95090,327,3,117,0,
9510327,3,118,0,327,
95113,119,0,327,3,
9512120,0,327,3,121,
95130,327,3,122,0,
9514327,3,48,0,327,
95153,49,0,327,3,
951650,0,327,3,51,
95170,327,3,52,0,
9518327,3,53,0,327,
95193,54,0,327,3,
952055,0,327,3,56,
95210,327,3,57,0,
9522327,3,65,0,327,
95233,66,0,327,3,
952467,0,327,3,68,
95250,327,3,69,0,
9526327,3,70,0,327,
95273,71,0,327,3,
952872,0,327,3,73,
95290,327,3,74,0,
9530327,3,75,0,327,
95313,76,0,327,3,
953277,0,327,3,78,
95330,327,3,79,0,
9534327,3,80,0,327,
95353,81,0,327,3,
953682,0,327,3,83,
95370,327,3,84,0,
9538327,3,85,0,327,
95393,86,0,327,3,
954087,0,327,3,88,
95410,327,3,89,0,
9542327,3,90,0,327,
95433,95,0,327,3,
954497,0,327,3,98,
95450,327,3,99,0,
9546327,3,100,0,327,
95473,101,0,826,12,
95481,1396,827,5,63,
95493,109,0,327,3,
9550110,0,327,3,111,
95510,327,3,112,0,
9552327,3,113,0,327,
95533,114,0,327,3,
9554115,0,327,3,116,
95550,327,3,117,0,
9556327,3,118,0,327,
95573,119,0,327,3,
9558120,0,327,3,121,
95590,828,12,1,1436,
9560829,5,63,3,109,
95610,327,3,110,0,
9562327,3,111,0,327,
95633,112,0,327,3,
9564113,0,327,3,114,
95650,327,3,115,0,
9566327,3,116,0,327,
95673,117,0,327,3,
9568118,0,327,3,119,
95690,327,3,120,0,
9570327,3,121,0,327,
95713,122,0,327,3,
957248,0,327,3,49,
95730,327,3,50,0,
9574327,3,51,0,327,
95753,52,0,327,3,
957653,0,327,3,54,
95770,327,3,55,0,
9578327,3,56,0,327,
95793,57,0,327,3,
958065,0,327,3,66,
95810,327,3,67,0,
9582327,3,68,0,327,
95833,69,0,327,3,
958470,0,327,3,71,
95850,327,3,72,0,
9586327,3,73,0,327,
95873,74,0,327,3,
958875,0,327,3,76,
95890,327,3,77,0,
9590327,3,78,0,327,
95913,79,0,327,3,
959280,0,327,3,81,
95930,327,3,82,0,
9594327,3,83,0,327,
95953,84,0,327,3,
959685,0,327,3,86,
95970,327,3,87,0,
9598327,3,88,0,327,
95993,89,0,327,3,
960090,0,327,3,95,
96010,327,3,97,0,
9602327,3,98,0,327,
96033,99,0,327,3,
9604100,0,327,3,101,
96050,327,3,102,0,
9606327,3,103,0,327,
96073,104,0,327,3,
9608105,0,327,3,106,
96090,327,3,107,0,
9610327,3,108,0,327,
9611830,11,1,591,0,
9612831,4,22,77,0,
961379,0,78,0,69,
96140,89,0,95,0,
961569,0,86,0,69,
96160,78,0,84,0,
96171,-1,3,122,0,
9618327,3,48,0,327,
96193,49,0,327,3,
962050,0,327,3,51,
96210,327,3,52,0,
9622327,3,53,0,327,
96233,54,0,327,3,
962455,0,327,3,56,
96250,327,3,57,0,
9626327,3,65,0,327,
96273,66,0,327,3,
962867,0,327,3,68,
96290,327,3,69,0,
9630327,3,70,0,327,
96313,71,0,327,3,
963272,0,327,3,73,
96330,327,3,74,0,
9634327,3,75,0,327,
96353,76,0,327,3,
963677,0,327,3,78,
96370,327,3,79,0,
9638327,3,80,0,327,
96393,81,0,327,3,
964082,0,327,3,83,
96410,327,3,84,0,
9642327,3,85,0,327,
96433,86,0,327,3,
964487,0,327,3,88,
96450,327,3,89,0,
9646327,3,90,0,327,
96473,95,0,327,3,
964897,0,327,3,98,
96490,327,3,99,0,
9650327,3,100,0,327,
96513,101,0,327,3,
9652102,0,327,3,103,
96530,327,3,104,0,
9654327,3,105,0,327,
96553,106,0,327,3,
9656107,0,327,3,108,
96570,327,832,11,1,
9658829,0,330,1,-1,
96593,102,0,327,3,
9660103,0,327,3,104,
96610,327,3,105,0,
9662327,3,106,0,327,
96633,107,0,327,3,
9664108,0,327,833,11,
96651,829,0,330,1,
9666-1,3,111,0,327,
96673,112,0,327,3,
9668113,0,327,3,114,
96690,327,3,115,0,
9670327,3,116,0,327,
96713,117,0,327,3,
9672118,0,834,12,1,
96731717,835,5,63,3,
9674109,0,327,3,110,
96750,327,3,111,0,
9676327,3,112,0,327,
96773,113,0,327,3,
9678114,0,327,3,115,
96790,327,3,116,0,
9680327,3,117,0,327,
96813,118,0,327,3,
9682119,0,327,3,120,
96830,327,3,121,0,
9684327,3,122,0,327,
96853,48,0,327,3,
968649,0,327,3,50,
96870,327,3,51,0,
9688327,3,52,0,327,
96893,53,0,327,3,
969054,0,327,3,55,
96910,327,3,56,0,
9692327,3,57,0,327,
96933,65,0,327,3,
969466,0,327,3,67,
96950,327,3,68,0,
9696327,3,69,0,327,
96973,70,0,327,3,
969871,0,327,3,72,
96990,327,3,73,0,
9700327,3,74,0,327,
97013,75,0,327,3,
970276,0,327,3,77,
97030,327,3,78,0,
9704327,3,79,0,327,
97053,80,0,327,3,
970681,0,327,3,82,
97070,327,3,83,0,
9708327,3,84,0,327,
97093,85,0,327,3,
971086,0,327,3,87,
97110,327,3,88,0,
9712327,3,89,0,327,
97133,90,0,327,3,
971495,0,327,3,97,
97150,327,3,98,0,
9716327,3,99,0,327,
97173,100,0,327,3,
9718101,0,327,3,102,
97190,327,3,103,0,
9720327,3,104,0,327,
97213,105,0,836,12,
97221,1768,837,5,63,
97233,109,0,327,3,
9724110,0,838,12,1,
97251797,839,5,63,3,
9726109,0,327,3,110,
97270,327,3,111,0,
9728327,3,112,0,327,
97293,113,0,327,3,
9730114,0,327,3,115,
97310,327,3,116,0,
9732327,3,117,0,327,
97333,118,0,327,3,
9734119,0,327,3,120,
97350,327,3,121,0,
9736327,3,122,0,327,
97373,48,0,327,3,
973849,0,327,3,50,
97390,327,3,51,0,
9740327,3,52,0,327,
97413,53,0,327,3,
974254,0,327,3,55,
97430,327,3,56,0,
9744327,3,57,0,327,
97453,65,0,327,3,
974666,0,327,3,67,
97470,327,3,68,0,
9748327,3,69,0,327,
97493,70,0,327,3,
975071,0,327,3,72,
97510,327,3,73,0,
9752327,3,74,0,327,
97533,75,0,327,3,
975476,0,327,3,77,
97550,327,3,78,0,
9756327,3,79,0,327,
97573,80,0,327,3,
975881,0,327,3,82,
97590,327,3,83,0,
9760327,3,84,0,327,
97613,85,0,327,3,
976286,0,327,3,87,
97630,327,3,88,0,
9764327,3,89,0,327,
97653,90,0,327,3,
976695,0,327,3,97,
97670,327,3,98,0,
9768327,3,99,0,327,
97693,100,0,327,3,
9770101,0,327,3,102,
97710,327,3,103,0,
9772840,12,1,1846,841,
97735,63,3,109,0,
9774327,3,110,0,327,
97753,111,0,327,3,
9776112,0,327,3,113,
97770,327,3,114,0,
9778327,3,115,0,327,
97793,116,0,327,3,
9780117,0,327,3,118,
97810,327,3,119,0,
9782327,3,120,0,327,
97833,121,0,327,3,
9784122,0,327,3,48,
97850,327,3,49,0,
9786327,3,50,0,327,
97873,51,0,327,3,
978852,0,327,3,53,
97890,327,3,54,0,
9790327,3,55,0,327,
97913,56,0,327,3,
979257,0,327,3,65,
97930,327,3,66,0,
9794327,3,67,0,327,
97953,68,0,327,3,
979669,0,327,3,70,
97970,327,3,71,0,
9798327,3,72,0,327,
97993,73,0,327,3,
980074,0,327,3,75,
98010,327,3,76,0,
9802327,3,77,0,327,
98033,78,0,327,3,
980479,0,327,3,80,
98050,327,3,81,0,
9806327,3,82,0,327,
98073,83,0,327,3,
980884,0,327,3,85,
98090,327,3,86,0,
9810327,3,87,0,327,
98113,88,0,327,3,
981289,0,327,3,90,
98130,327,3,95,0,
9814842,12,1,1932,843,
98155,63,3,109,0,
9816327,3,110,0,327,
98173,111,0,327,3,
9818112,0,327,3,113,
98190,327,3,114,0,
9820327,3,115,0,844,
982112,1,1966,845,5,
982263,3,109,0,327,
98233,110,0,327,3,
9824111,0,327,3,112,
98250,327,3,113,0,
9826327,3,114,0,327,
98273,115,0,327,3,
9828116,0,846,12,1,
98292001,847,5,63,3,
9830109,0,327,3,110,
98310,327,3,111,0,
9832327,3,112,0,327,
98333,113,0,327,3,
9834114,0,327,3,115,
98350,327,3,116,0,
9836327,3,117,0,327,
98373,118,0,327,3,
9838119,0,327,3,120,
98390,327,3,121,0,
9840327,3,122,0,327,
98413,48,0,327,3,
984249,0,327,3,50,
98430,327,3,51,0,
9844327,3,52,0,327,
98453,53,0,327,3,
984654,0,327,3,55,
98470,327,3,56,0,
9848327,3,57,0,327,
98493,65,0,327,3,
985066,0,327,3,67,
98510,327,3,68,0,
9852327,3,69,0,327,
98533,70,0,327,3,
985471,0,327,3,72,
98550,327,3,73,0,
9856327,3,74,0,327,
98573,75,0,327,3,
985876,0,327,3,77,
98590,327,3,78,0,
9860327,3,79,0,327,
98613,80,0,327,3,
986281,0,327,3,82,
98630,327,3,83,0,
9864327,3,84,0,327,
98653,85,0,327,3,
986686,0,327,3,87,
98670,327,3,88,0,
9868327,3,89,0,327,
98693,90,0,327,3,
987095,0,327,3,97,
98710,848,12,1,2044,
9872849,5,63,3,109,
98730,327,3,110,0,
9874327,3,111,0,327,
98753,112,0,327,3,
9876113,0,327,3,114,
98770,850,12,1,2077,
9878851,5,63,3,109,
98790,327,3,110,0,
9880327,3,111,0,327,
98813,112,0,327,3,
9882113,0,327,3,114,
98830,327,3,115,0,
9884327,3,116,0,852,
988512,1,2112,853,5,
988663,3,109,0,327,
98873,110,0,327,3,
9888111,0,327,3,112,
98890,327,3,113,0,
9890327,3,114,0,327,
98913,115,0,327,3,
9892116,0,327,3,117,
98930,327,3,118,0,
9894327,3,119,0,327,
98953,120,0,327,3,
9896121,0,327,3,122,
98970,327,3,48,0,
9898327,3,49,0,327,
98993,50,0,327,3,
990051,0,327,3,52,
99010,327,3,53,0,
9902327,3,54,0,327,
99033,55,0,327,3,
990456,0,327,3,57,
99050,327,3,65,0,
9906327,3,66,0,327,
99073,67,0,327,3,
990868,0,327,3,69,
99090,327,3,70,0,
9910327,3,71,0,327,
99113,72,0,327,3,
991273,0,327,3,74,
99130,327,3,75,0,
9914327,3,76,0,327,
99153,77,0,327,3,
991678,0,327,3,79,
99170,327,3,80,0,
9918327,3,81,0,327,
99193,82,0,327,3,
992083,0,327,3,84,
99210,327,3,85,0,
9922327,3,86,0,327,
99233,87,0,327,3,
992488,0,327,3,89,
99250,327,3,90,0,
9926327,3,95,0,327,
99273,97,0,327,3,
992898,0,327,3,99,
99290,327,3,100,0,
9930327,3,101,0,327,
99313,102,0,327,3,
9932103,0,327,3,104,
99330,327,3,105,0,
9934327,3,106,0,327,
99353,107,0,327,3,
9936108,0,327,854,11,
99371,614,0,855,4,
993836,77,0,79,0,
993986,0,73,0,78,
99400,71,0,95,0,
994183,0,84,0,65,
99420,82,0,84,0,
994395,0,69,0,86,
99440,69,0,78,0,
994584,0,1,-1,3,
9946117,0,327,3,118,
99470,327,3,119,0,
9948327,3,120,0,327,
99493,121,0,327,3,
9950122,0,327,3,48,
99510,327,3,49,0,
9952327,3,50,0,327,
99533,51,0,327,3,
995452,0,327,3,53,
99550,327,3,54,0,
9956327,3,55,0,327,
99573,56,0,327,3,
995857,0,327,3,65,
99590,327,3,66,0,
9960327,3,67,0,327,
99613,68,0,327,3,
996269,0,327,3,70,
99630,327,3,71,0,
9964327,3,72,0,327,
99653,73,0,327,3,
996674,0,327,3,75,
99670,327,3,76,0,
9968327,3,77,0,327,
99693,78,0,327,3,
997079,0,327,3,80,
99710,327,3,81,0,
9972327,3,82,0,327,
99733,83,0,327,3,
997484,0,327,3,85,
99750,327,3,86,0,
9976327,3,87,0,327,
99773,88,0,327,3,
997889,0,327,3,90,
99790,327,3,95,0,
9980327,3,97,0,327,
99813,98,0,327,3,
998299,0,327,3,100,
99830,327,3,101,0,
9984327,3,102,0,327,
99853,103,0,327,3,
9986104,0,327,3,105,
99870,327,3,106,0,
9988327,3,107,0,327,
99893,108,0,327,856,
999011,1,829,0,330,
99911,-1,3,115,0,
9992327,3,116,0,327,
99933,117,0,327,3,
9994118,0,327,3,119,
99950,327,3,120,0,
9996327,3,121,0,327,
99973,122,0,327,3,
999848,0,327,3,49,
99990,327,3,50,0,
10000327,3,51,0,327,
100013,52,0,327,3,
1000253,0,327,3,54,
100030,327,3,55,0,
10004327,3,56,0,327,
100053,57,0,327,3,
1000665,0,327,3,66,
100070,327,3,67,0,
10008327,3,68,0,327,
100093,69,0,327,3,
1001070,0,327,3,71,
100110,327,3,72,0,
10012327,3,73,0,327,
100133,74,0,327,3,
1001475,0,327,3,76,
100150,327,3,77,0,
10016327,3,78,0,327,
100173,79,0,327,3,
1001880,0,327,3,81,
100190,327,3,82,0,
10020327,3,83,0,327,
100213,84,0,327,3,
1002285,0,327,3,86,
100230,327,3,87,0,
10024327,3,88,0,327,
100253,89,0,327,3,
1002690,0,327,3,95,
100270,327,3,97,0,
10028327,3,98,0,327,
100293,99,0,327,3,
10030100,0,327,3,101,
100310,327,3,102,0,
10032327,3,103,0,327,
100333,104,0,327,3,
10034105,0,327,3,106,
100350,327,3,107,0,
10036327,3,108,0,327,
10037857,11,1,829,0,
10038330,1,-1,3,98,
100390,327,3,99,0,
10040327,3,100,0,327,
100413,101,0,327,3,
10042102,0,327,3,103,
100430,327,3,104,0,
10044327,3,105,0,327,
100453,106,0,327,3,
10046107,0,327,3,108,
100470,327,858,11,1,
10048829,0,330,1,-1,
100493,117,0,327,3,
10050118,0,327,3,119,
100510,327,3,120,0,
10052327,3,121,0,327,
100533,122,0,327,3,
1005448,0,327,3,49,
100550,327,3,50,0,
10056327,3,51,0,327,
100573,52,0,327,3,
1005853,0,327,3,54,
100590,327,3,55,0,
10060327,3,56,0,327,
100613,57,0,327,3,
1006265,0,327,3,66,
100630,327,3,67,0,
10064327,3,68,0,327,
100653,69,0,327,3,
1006670,0,327,3,71,
100670,327,3,72,0,
10068327,3,73,0,327,
100693,74,0,327,3,
1007075,0,327,3,76,
100710,327,3,77,0,
10072327,3,78,0,327,
100733,79,0,327,3,
1007480,0,327,3,81,
100750,327,3,82,0,
10076327,3,83,0,327,
100773,84,0,327,3,
1007885,0,327,3,86,
100790,327,3,87,0,
10080327,3,88,0,327,
100813,89,0,327,3,
1008290,0,327,3,95,
100830,327,3,97,0,
10084327,3,98,0,327,
100853,99,0,327,3,
10086100,0,327,3,101,
100870,327,3,102,0,
10088327,3,103,0,327,
100893,104,0,327,3,
10090105,0,327,3,106,
100910,327,3,107,0,
10092327,3,108,0,327,
10093859,11,1,829,0,
10094330,1,-1,3,116,
100950,327,3,117,0,
10096327,3,118,0,327,
100973,119,0,327,3,
10098120,0,327,3,121,
100990,327,3,122,0,
10100327,3,48,0,327,
101013,49,0,327,3,
1010250,0,327,3,51,
101030,327,3,52,0,
10104327,3,53,0,327,
101053,54,0,327,3,
1010655,0,327,3,56,
101070,327,3,57,0,
10108327,3,65,0,327,
101093,66,0,327,3,
1011067,0,327,3,68,
101110,327,3,69,0,
10112327,3,70,0,327,
101133,71,0,327,3,
1011472,0,327,3,73,
101150,327,3,74,0,
10116327,3,75,0,327,
101173,76,0,327,3,
1011877,0,327,3,78,
101190,327,3,79,0,
10120327,3,80,0,327,
101213,81,0,327,3,
1012282,0,327,3,83,
101230,327,3,84,0,
10124327,3,85,0,327,
101253,86,0,327,3,
1012687,0,327,3,88,
101270,327,3,89,0,
10128327,3,90,0,327,
101293,95,0,327,3,
1013097,0,327,3,98,
101310,327,3,99,0,
10132327,3,100,0,327,
101333,101,0,860,12,
101341,2579,861,5,63,
101353,109,0,327,3,
10136110,0,862,12,1,
101372608,863,5,63,3,
10138109,0,327,3,110,
101390,327,3,111,0,
10140327,3,112,0,327,
101413,113,0,327,3,
10142114,0,327,3,115,
101430,327,3,116,0,
10144327,3,117,0,327,
101453,118,0,327,3,
10146119,0,327,3,120,
101470,327,3,121,0,
10148327,3,122,0,327,
101493,48,0,327,3,
1015049,0,327,3,50,
101510,327,3,51,0,
10152327,3,52,0,327,
101533,53,0,327,3,
1015454,0,327,3,55,
101550,327,3,56,0,
10156327,3,57,0,327,
101573,65,0,327,3,
1015866,0,327,3,67,
101590,327,3,68,0,
10160327,3,69,0,327,
101613,70,0,327,3,
1016271,0,327,3,72,
101630,327,3,73,0,
10164327,3,74,0,327,
101653,75,0,327,3,
1016676,0,327,3,77,
101670,327,3,78,0,
10168327,3,79,0,327,
101693,80,0,327,3,
1017081,0,327,3,82,
101710,327,3,83,0,
10172327,3,84,0,327,
101733,85,0,327,3,
1017486,0,327,3,87,
101750,327,3,88,0,
10176327,3,89,0,327,
101773,90,0,327,3,
1017895,0,327,3,97,
101790,327,3,98,0,
10180327,3,99,0,327,
101813,100,0,864,12,
101821,2654,865,5,63,
101833,109,0,327,3,
10184110,0,327,3,111,
101850,327,3,112,0,
10186327,3,113,0,327,
101873,114,0,327,3,
10188115,0,327,3,116,
101890,327,3,117,0,
10190327,3,118,0,327,
101913,119,0,327,3,
10192120,0,327,3,121,
101930,327,3,122,0,
10194327,3,48,0,327,
101953,49,0,327,3,
1019650,0,327,3,51,
101970,327,3,52,0,
10198327,3,53,0,327,
101993,54,0,327,3,
1020055,0,327,3,56,
102010,327,3,57,0,
10202327,3,65,0,327,
102033,66,0,327,3,
1020467,0,327,3,68,
102050,327,3,69,0,
10206327,3,70,0,327,
102073,71,0,327,3,
1020872,0,327,3,73,
102090,327,3,74,0,
10210327,3,75,0,327,
102113,76,0,327,3,
1021277,0,327,3,78,
102130,327,3,79,0,
10214327,3,80,0,327,
102153,81,0,327,3,
1021682,0,327,3,83,
102170,327,3,84,0,
10218327,3,85,0,327,
102193,86,0,327,3,
1022087,0,327,3,88,
102210,327,3,89,0,
10222327,3,90,0,327,
102233,95,0,327,3,
1022497,0,327,3,98,
102250,327,3,99,0,
10226327,3,100,0,327,
102273,101,0,327,3,
10228102,0,327,3,103,
102290,327,3,104,0,
10230327,3,105,0,327,
102313,106,0,327,3,
10232107,0,327,3,108,
102330,327,866,11,1,
10234600,0,867,4,32,
1023577,0,79,0,86,
102360,73,0,78,0,
1023771,0,95,0,69,
102380,78,0,68,0,
1023995,0,69,0,86,
102400,69,0,78,0,
1024184,0,1,-1,3,
10242101,0,327,3,102,
102430,327,3,103,0,
10244327,3,104,0,327,
102453,105,0,327,3,
10246106,0,327,3,107,
102470,327,3,108,0,
10248327,868,11,1,829,
102490,330,1,-1,3,
10250111,0,327,3,112,
102510,327,3,113,0,
10252327,3,114,0,327,
102533,115,0,327,3,
10254116,0,327,3,117,
102550,327,3,118,0,
10256327,3,119,0,327,
102573,120,0,327,3,
10258121,0,327,3,122,
102590,327,3,48,0,
10260327,3,49,0,327,
102613,50,0,327,3,
1026251,0,327,3,52,
102630,327,3,53,0,
10264327,3,54,0,327,
102653,55,0,327,3,
1026656,0,327,3,57,
102670,327,3,65,0,
10268327,3,66,0,327,
102693,67,0,327,3,
1027068,0,327,3,69,
102710,327,3,70,0,
10272327,3,71,0,327,
102733,72,0,327,3,
1027473,0,327,3,74,
102750,327,3,75,0,
10276327,3,76,0,327,
102773,77,0,327,3,
1027878,0,327,3,79,
102790,327,3,80,0,
10280327,3,81,0,327,
102813,82,0,327,3,
1028283,0,327,3,84,
102830,327,3,85,0,
10284327,3,86,0,327,
102853,87,0,327,3,
1028688,0,327,3,89,
102870,327,3,90,0,
10288327,3,95,0,327,
102893,97,0,327,3,
1029098,0,327,3,99,
102910,327,3,100,0,
10292327,3,101,0,327,
102933,102,0,327,3,
10294103,0,327,3,104,
102950,327,3,105,0,
10296327,3,106,0,327,
102973,107,0,327,3,
10298108,0,327,869,11,
102991,829,0,330,1,
10300-1,3,102,0,327,
103013,103,0,327,3,
10302104,0,327,3,105,
103030,327,3,106,0,
10304327,3,107,0,327,
103053,108,0,327,870,
1030611,1,829,0,330,
103071,-1,3,97,0,
10308327,3,98,0,327,
103093,99,0,327,3,
10310100,0,327,3,101,
103110,327,3,102,0,
10312327,3,103,0,327,
103133,104,0,327,3,
10314105,0,327,3,106,
103150,327,3,107,0,
10316327,3,108,0,327,
10317871,11,1,829,0,
10318330,1,-1,3,104,
103190,327,3,105,0,
10320327,3,106,0,327,
103213,107,0,327,3,
10322108,0,327,872,11,
103231,829,0,330,1,
10324-1,3,111,0,327,
103253,112,0,327,3,
10326113,0,327,3,114,
103270,327,3,115,0,
10328327,3,116,0,327,
103293,117,0,327,3,
10330118,0,327,3,119,
103310,327,3,120,0,
10332327,3,121,0,327,
103333,122,0,327,3,
1033448,0,327,3,49,
103350,327,3,50,0,
10336327,3,51,0,327,
103373,52,0,327,3,
1033853,0,327,3,54,
103390,327,3,55,0,
10340327,3,56,0,327,
103413,57,0,327,3,
1034265,0,327,3,66,
103430,327,3,67,0,
10344327,3,68,0,327,
103453,69,0,327,3,
1034670,0,327,3,71,
103470,327,3,72,0,
10348327,3,73,0,327,
103493,74,0,327,3,
1035075,0,327,3,76,
103510,327,3,77,0,
10352327,3,78,0,327,
103533,79,0,327,3,
1035480,0,327,3,81,
103550,327,3,82,0,
10356327,3,83,0,327,
103573,84,0,327,3,
1035885,0,327,3,86,
103590,327,3,87,0,
10360327,3,88,0,327,
103613,89,0,327,3,
1036290,0,327,3,95,
103630,327,3,97,0,
10364327,3,98,0,327,
103653,99,0,327,3,
10366100,0,327,3,101,
103670,327,3,102,0,
10368327,3,103,0,327,
103693,104,0,327,3,
10370105,0,327,3,106,
103710,327,3,107,0,
10372327,3,108,0,327,
10373873,11,1,829,0,
10374330,1,-1,3,106,
103750,327,3,107,0,
10376327,3,108,0,327,
10377874,11,1,829,0,
10378330,1,-1,3,119,
103790,327,3,120,0,
10380327,3,121,0,327,
103813,122,0,327,3,
1038248,0,327,3,49,
103830,327,3,50,0,
10384327,3,51,0,327,
103853,52,0,327,3,
1038653,0,327,3,54,
103870,327,3,55,0,
10388327,3,56,0,327,
103893,57,0,327,3,
1039065,0,327,3,66,
103910,327,3,67,0,
10392327,3,68,0,327,
103933,69,0,327,3,
1039470,0,327,3,71,
103950,327,3,72,0,
10396327,3,73,0,327,
103973,74,0,327,3,
1039875,0,327,3,76,
103990,327,3,77,0,
10400327,3,78,0,327,
104013,79,0,327,3,
1040280,0,327,3,81,
104030,327,3,82,0,
10404327,3,83,0,327,
104053,84,0,327,3,
1040685,0,327,3,86,
104070,327,3,87,0,
10408327,3,88,0,327,
104093,89,0,327,3,
1041090,0,327,3,95,
104110,327,3,97,0,
10412327,3,98,0,327,
104133,99,0,327,3,
10414100,0,327,3,101,
104150,327,3,102,0,
10416327,3,103,0,327,
104173,104,0,327,3,
10418105,0,327,3,106,
104190,327,3,107,0,
10420327,3,108,0,327,
10421875,11,1,829,0,
10422330,1,-1,3,112,
104230,327,3,113,0,
10424327,3,114,0,327,
104253,115,0,327,3,
10426116,0,327,3,117,
104270,327,3,118,0,
10428327,3,119,0,327,
104293,120,0,327,3,
10430121,0,327,3,122,
104310,327,3,48,0,
10432327,3,49,0,327,
104333,50,0,327,3,
1043451,0,327,3,52,
104350,327,3,53,0,
10436327,3,54,0,327,
104373,55,0,327,3,
1043856,0,327,3,57,
104390,327,3,65,0,
10440327,3,66,0,327,
104413,67,0,327,3,
1044268,0,327,3,69,
104430,327,3,70,0,
10444327,3,71,0,327,
104453,72,0,327,3,
1044673,0,327,3,74,
104470,327,3,75,0,
10448327,3,76,0,327,
104493,77,0,327,3,
1045078,0,327,3,79,
104510,327,3,80,0,
10452327,3,81,0,327,
104533,82,0,327,3,
1045483,0,327,3,84,
104550,327,3,85,0,
10456327,3,86,0,327,
104573,87,0,327,3,
1045888,0,327,3,89,
104590,327,3,90,0,
10460327,3,95,0,327,
104613,97,0,327,3,
1046298,0,327,3,99,
104630,327,3,100,0,
10464327,3,101,0,327,
104653,102,0,327,3,
10466103,0,327,3,104,
104670,327,3,105,0,
10468327,3,106,0,327,
104693,107,0,327,3,
10470108,0,327,876,11,
104711,829,0,330,1,
10472-1,3,110,0,877,
1047312,1,3451,878,5,
1047463,3,109,0,327,
104753,110,0,327,3,
10476111,0,879,12,1,
104773481,880,5,63,3,
10478109,0,327,3,110,
104790,327,3,111,0,
10480327,3,112,0,327,
104813,113,0,327,3,
10482114,0,327,3,115,
104830,327,3,116,0,
10484881,12,1,3516,882,
104855,63,3,109,0,
10486327,3,110,0,327,
104873,111,0,327,3,
10488112,0,327,3,113,
104890,327,3,114,0,
10490327,3,115,0,327,
104913,116,0,327,3,
10492117,0,327,3,118,
104930,327,3,119,0,
10494327,3,120,0,327,
104953,121,0,327,3,
10496122,0,327,3,48,
104970,327,3,49,0,
10498327,3,50,0,327,
104993,51,0,327,3,
1050052,0,327,3,53,
105010,327,3,54,0,
10502327,3,55,0,327,
105033,56,0,327,3,
1050457,0,327,3,65,
105050,327,3,66,0,
10506327,3,67,0,327,
105073,68,0,327,3,
1050869,0,327,3,70,
105090,327,3,71,0,
10510327,3,72,0,327,
105113,73,0,327,3,
1051274,0,327,3,75,
105130,327,3,76,0,
10514327,3,77,0,327,
105153,78,0,327,3,
1051679,0,327,3,80,
105170,327,3,81,0,
10518327,3,82,0,327,
105193,83,0,327,3,
1052084,0,327,3,85,
105210,327,3,86,0,
10522327,3,87,0,327,
105233,88,0,327,3,
1052489,0,327,3,90,
105250,327,3,95,0,
10526883,12,1,3602,884,
105275,63,3,109,0,
10528327,3,110,0,327,
105293,111,0,327,3,
10530112,0,327,3,113,
105310,327,3,114,0,
10532327,3,115,0,327,
105333,116,0,327,3,
10534117,0,327,3,118,
105350,327,3,119,0,
10536327,3,120,0,327,
105373,121,0,327,3,
10538122,0,327,3,48,
105390,327,3,49,0,
10540327,3,50,0,327,
105413,51,0,327,3,
1054252,0,327,3,53,
105430,327,3,54,0,
10544327,3,55,0,327,
105453,56,0,327,3,
1054657,0,327,3,65,
105470,327,3,66,0,
10548327,3,67,0,327,
105493,68,0,327,3,
1055069,0,327,3,70,
105510,327,3,71,0,
10552327,3,72,0,327,
105533,73,0,327,3,
1055474,0,327,3,75,
105550,327,3,76,0,
10556327,3,77,0,327,
105573,78,0,327,3,
1055879,0,327,3,80,
105590,327,3,81,0,
10560327,3,82,0,327,
105613,83,0,327,3,
1056284,0,327,3,85,
105630,327,3,86,0,
10564327,3,87,0,327,
105653,88,0,327,3,
1056689,0,327,3,90,
105670,327,3,95,0,
10568327,3,97,0,885,
1056912,1,3645,886,5,
1057063,3,109,0,327,
105713,110,0,327,3,
10572111,0,327,3,112,
105730,327,3,113,0,
10574327,3,114,0,327,
105753,115,0,327,3,
10576116,0,887,12,1,
105773680,888,5,63,3,
10578109,0,327,3,110,
105790,327,3,111,0,
10580327,3,112,0,327,
105813,113,0,327,3,
10582114,0,327,3,115,
105830,327,3,116,0,
10584327,3,117,0,327,
105853,118,0,327,3,
10586119,0,327,3,120,
105870,327,3,121,0,
10588327,3,122,0,327,
105893,48,0,327,3,
1059049,0,327,3,50,
105910,327,3,51,0,
10592327,3,52,0,327,
105933,53,0,327,3,
1059454,0,327,3,55,
105950,327,3,56,0,
10596327,3,57,0,327,
105973,65,0,327,3,
1059866,0,327,3,67,
105990,327,3,68,0,
10600327,3,69,0,327,
106013,70,0,327,3,
1060271,0,327,3,72,
106030,327,3,73,0,
10604327,3,74,0,327,
106053,75,0,327,3,
1060676,0,327,3,77,
106070,327,3,78,0,
10608327,3,79,0,327,
106093,80,0,327,3,
1061081,0,327,3,82,
106110,327,3,83,0,
10612327,3,84,0,327,
106133,85,0,327,3,
1061486,0,327,3,87,
106150,327,3,88,0,
10616327,3,89,0,327,
106173,90,0,327,3,
1061895,0,889,12,1,
106193766,890,5,63,3,
10620109,0,327,3,110,
106210,327,3,111,0,
10622327,3,112,0,327,
106233,113,0,327,3,
10624114,0,891,12,1,
106253799,892,5,63,3,
10626109,0,327,3,110,
106270,327,3,111,0,
10628893,12,1,3829,894,
106295,63,3,109,0,
10630327,3,110,0,327,
106313,111,0,327,3,
10632112,0,327,3,113,
106330,327,3,114,0,
10634327,3,115,0,327,
106353,116,0,895,12,
106361,3864,896,5,63,
106373,109,0,327,3,
10638110,0,327,3,111,
106390,327,3,112,0,
10640327,3,113,0,327,
106413,114,0,327,3,
10642115,0,327,3,116,
106430,327,3,117,0,
10644327,3,118,0,327,
106453,119,0,327,3,
10646120,0,327,3,121,
106470,327,3,122,0,
10648327,3,48,0,327,
106493,49,0,327,3,
1065050,0,327,3,51,
106510,327,3,52,0,
10652327,3,53,0,327,
106533,54,0,327,3,
1065455,0,327,3,56,
106550,327,3,57,0,
10656327,3,65,0,327,
106573,66,0,327,3,
1065867,0,327,3,68,
106590,327,3,69,0,
10660327,3,70,0,327,
106613,71,0,327,3,
1066272,0,327,3,73,
106630,327,3,74,0,
10664327,3,75,0,327,
106653,76,0,327,3,
1066677,0,327,3,78,
106670,327,3,79,0,
10668327,3,80,0,327,
106693,81,0,327,3,
1067082,0,327,3,83,
106710,327,3,84,0,
10672327,3,85,0,327,
106733,86,0,327,3,
1067487,0,327,3,88,
106750,327,3,89,0,
10676327,3,90,0,327,
106773,95,0,897,12,
106781,3950,898,5,63,
106793,109,0,327,3,
10680110,0,327,3,111,
106810,327,3,112,0,
10682327,3,113,0,327,
106833,114,0,327,3,
10684115,0,327,3,116,
106850,899,12,1,3985,
10686900,5,63,3,109,
106870,327,3,110,0,
10688327,3,111,0,327,
106893,112,0,327,3,
10690113,0,327,3,114,
106910,327,3,115,0,
10692327,3,116,0,327,
106933,117,0,327,3,
10694118,0,327,3,119,
106950,327,3,120,0,
10696327,3,121,0,327,
106973,122,0,327,3,
1069848,0,327,3,49,
106990,327,3,50,0,
10700327,3,51,0,327,
107013,52,0,327,3,
1070253,0,327,3,54,
107030,327,3,55,0,
10704327,3,56,0,327,
107053,57,0,327,3,
1070665,0,327,3,66,
107070,327,3,67,0,
10708327,3,68,0,327,
107093,69,0,327,3,
1071070,0,327,3,71,
107110,327,3,72,0,
10712327,3,73,0,327,
107133,74,0,327,3,
1071475,0,327,3,76,
107150,327,3,77,0,
10716327,3,78,0,327,
107173,79,0,327,3,
1071880,0,327,3,81,
107190,327,3,82,0,
10720327,3,83,0,327,
107213,84,0,327,3,
1072285,0,327,3,86,
107230,327,3,87,0,
10724327,3,88,0,327,
107253,89,0,327,3,
1072690,0,327,3,95,
107270,327,3,97,0,
10728901,12,1,4028,902,
107295,63,3,109,0,
10730327,3,110,0,327,
107313,111,0,327,3,
10732112,0,327,3,113,
107330,327,3,114,0,
10734903,12,1,4061,904,
107355,63,3,109,0,
10736327,3,110,0,327,
107373,111,0,327,3,
10738112,0,327,3,113,
107390,327,3,114,0,
10740327,3,115,0,327,
107413,116,0,327,3,
10742117,0,327,3,118,
107430,327,3,119,0,
10744327,3,120,0,327,
107453,121,0,327,3,
10746122,0,327,3,48,
107470,327,3,49,0,
10748327,3,50,0,327,
107493,51,0,327,3,
1075052,0,327,3,53,
107510,327,3,54,0,
10752327,3,55,0,327,
107533,56,0,327,3,
1075457,0,327,3,65,
107550,327,3,66,0,
10756327,3,67,0,327,
107573,68,0,327,3,
1075869,0,327,3,70,
107590,327,3,71,0,
10760327,3,72,0,327,
107613,73,0,327,3,
1076274,0,327,3,75,
107630,327,3,76,0,
10764327,3,77,0,327,
107653,78,0,327,3,
1076679,0,327,3,80,
107670,327,3,81,0,
10768327,3,82,0,327,
107693,83,0,327,3,
1077084,0,327,3,85,
107710,327,3,86,0,
10772327,3,87,0,327,
107733,88,0,327,3,
1077489,0,327,3,90,
107750,327,3,95,0,
10776327,3,97,0,327,
107773,98,0,327,3,
1077899,0,327,3,100,
107790,327,3,101,0,
10780327,3,102,0,327,
107813,103,0,905,12,
107821,4110,906,5,63,
107833,109,0,327,3,
10784110,0,327,3,111,
107850,327,3,112,0,
10786327,3,113,0,327,
107873,114,0,327,3,
10788115,0,327,3,116,
107890,327,3,117,0,
10790327,3,118,0,327,
107913,119,0,327,3,
10792120,0,327,3,121,
107930,327,3,122,0,
10794327,3,48,0,327,
107953,49,0,327,3,
1079650,0,327,3,51,
107970,327,3,52,0,
10798327,3,53,0,327,
107993,54,0,327,3,
1080055,0,327,3,56,
108010,327,3,57,0,
10802327,3,65,0,327,
108033,66,0,327,3,
1080467,0,327,3,68,
108050,327,3,69,0,
10806327,3,70,0,327,
108073,71,0,327,3,
1080872,0,327,3,73,
108090,327,3,74,0,
10810327,3,75,0,327,
108113,76,0,327,3,
1081277,0,327,3,78,
108130,327,3,79,0,
10814327,3,80,0,327,
108153,81,0,327,3,
1081682,0,327,3,83,
108170,327,3,84,0,
10818327,3,85,0,327,
108193,86,0,327,3,
1082087,0,327,3,88,
108210,327,3,89,0,
10822327,3,90,0,327,
108233,95,0,327,3,
1082497,0,327,3,98,
108250,327,3,99,0,
10826327,3,100,0,327,
108273,101,0,907,12,
108281,4157,908,5,63,
108293,109,0,327,3,
10830110,0,327,3,111,
108310,327,3,112,0,
10832327,3,113,0,327,
108333,114,0,327,3,
10834115,0,327,3,116,
108350,909,12,1,4192,
10836910,5,63,3,109,
108370,327,3,110,0,
10838327,3,111,0,327,
108393,112,0,327,3,
10840113,0,327,3,114,
108410,327,3,115,0,
10842327,3,116,0,327,
108433,117,0,327,3,
10844118,0,327,3,119,
108450,327,3,120,0,
10846327,3,121,0,327,
108473,122,0,327,3,
1084848,0,327,3,49,
108490,327,3,50,0,
10850327,3,51,0,327,
108513,52,0,327,3,
1085253,0,327,3,54,
108530,327,3,55,0,
10854327,3,56,0,327,
108553,57,0,327,3,
1085665,0,327,3,66,
108570,327,3,67,0,
10858327,3,68,0,327,
108593,69,0,327,3,
1086070,0,327,3,71,
108610,327,3,72,0,
10862327,3,73,0,327,
108633,74,0,327,3,
1086475,0,327,3,76,
108650,327,3,77,0,
10866327,3,78,0,327,
108673,79,0,327,3,
1086880,0,327,3,81,
108690,327,3,82,0,
10870327,3,83,0,327,
108713,84,0,327,3,
1087285,0,327,3,86,
108730,327,3,87,0,
10874327,3,88,0,327,
108753,89,0,327,3,
1087690,0,327,3,95,
108770,327,3,97,0,
10878327,3,98,0,327,
108793,99,0,327,3,
10880100,0,327,3,101,
108810,327,3,102,0,
10882327,3,103,0,327,
108833,104,0,327,3,
10884105,0,327,3,106,
108850,327,3,107,0,
10886327,3,108,0,327,
10887911,11,1,643,0,
10888912,4,46,78,0,
1088979,0,84,0,95,
108900,65,0,84,0,
1089195,0,82,0,79,
108920,84,0,95,0,
1089384,0,65,0,82,
108940,71,0,69,0,
1089584,0,95,0,69,
108960,86,0,69,0,
1089778,0,84,0,1,
10898-1,3,117,0,327,
108993,118,0,327,3,
10900119,0,327,3,120,
109010,327,3,121,0,
10902327,3,122,0,327,
109033,48,0,327,3,
1090449,0,327,3,50,
109050,327,3,51,0,
10906327,3,52,0,327,
109073,53,0,327,3,
1090854,0,327,3,55,
109090,327,3,56,0,
10910327,3,57,0,327,
109113,65,0,327,3,
1091266,0,327,3,67,
109130,327,3,68,0,
10914327,3,69,0,327,
109153,70,0,327,3,
1091671,0,327,3,72,
109170,327,3,73,0,
10918327,3,74,0,327,
109193,75,0,327,3,
1092076,0,327,3,77,
109210,327,3,78,0,
10922327,3,79,0,327,
109233,80,0,327,3,
1092481,0,327,3,82,
109250,327,3,83,0,
10926327,3,84,0,327,
109273,85,0,327,3,
1092886,0,327,3,87,
109290,327,3,88,0,
10930327,3,89,0,327,
109313,90,0,327,3,
1093295,0,327,3,97,
109330,327,3,98,0,
10934327,3,99,0,327,
109353,100,0,327,3,
10936101,0,327,3,102,
109370,327,3,103,0,
10938327,3,104,0,327,
109393,105,0,327,3,
10940106,0,327,3,107,
109410,327,3,108,0,
10942327,913,11,1,829,
109430,330,1,-1,3,
10944102,0,327,3,103,
109450,327,3,104,0,
10946327,3,105,0,327,
109473,106,0,327,3,
10948107,0,327,3,108,
109490,327,914,11,1,
10950829,0,330,1,-1,
109513,104,0,327,3,
10952105,0,327,3,106,
109530,327,3,107,0,
10954327,3,108,0,327,
10955915,11,1,829,0,
10956330,1,-1,3,115,
109570,327,3,116,0,
10958327,3,117,0,327,
109593,118,0,327,3,
10960119,0,327,3,120,
109610,327,3,121,0,
10962327,3,122,0,327,
109633,48,0,327,3,
1096449,0,327,3,50,
109650,327,3,51,0,
10966327,3,52,0,327,
109673,53,0,327,3,
1096854,0,327,3,55,
109690,327,3,56,0,
10970327,3,57,0,327,
109713,65,0,327,3,
1097266,0,327,3,67,
109730,327,3,68,0,
10974327,3,69,0,327,
109753,70,0,327,3,
1097671,0,327,3,72,
109770,327,3,73,0,
10978327,3,74,0,327,
109793,75,0,327,3,
1098076,0,327,3,77,
109810,327,3,78,0,
10982327,3,79,0,327,
109833,80,0,327,3,
1098481,0,327,3,82,
109850,327,3,83,0,
10986327,3,84,0,327,
109873,85,0,327,3,
1098886,0,327,3,87,
109890,327,3,88,0,
10990327,3,89,0,327,
109913,90,0,327,3,
1099295,0,327,3,97,
109930,327,3,98,0,
10994327,3,99,0,327,
109953,100,0,327,3,
10996101,0,327,3,102,
109970,327,3,103,0,
10998327,3,104,0,327,
109993,105,0,327,3,
11000106,0,327,3,107,
110010,327,3,108,0,
11002327,916,11,1,829,
110030,330,1,-1,3,
1100498,0,327,3,99,
110050,327,3,100,0,
11006327,3,101,0,327,
110073,102,0,327,3,
11008103,0,327,3,104,
110090,327,3,105,0,
11010327,3,106,0,327,
110113,107,0,327,3,
11012108,0,327,917,11,
110131,829,0,330,1,
11014-1,3,117,0,327,
110153,118,0,327,3,
11016119,0,327,3,120,
110170,327,3,121,0,
11018327,3,122,0,327,
110193,48,0,327,3,
1102049,0,327,3,50,
110210,327,3,51,0,
11022327,3,52,0,327,
110233,53,0,327,3,
1102454,0,327,3,55,
110250,327,3,56,0,
11026327,3,57,0,327,
110273,65,0,327,3,
1102866,0,327,3,67,
110290,327,3,68,0,
11030327,3,69,0,327,
110313,70,0,327,3,
1103271,0,327,3,72,
110330,327,3,73,0,
11034327,3,74,0,327,
110353,75,0,327,3,
1103676,0,327,3,77,
110370,327,3,78,0,
11038327,3,79,0,327,
110393,80,0,327,3,
1104081,0,327,3,82,
110410,327,3,83,0,
11042327,3,84,0,327,
110433,85,0,327,3,
1104486,0,327,3,87,
110450,327,3,88,0,
11046327,3,89,0,327,
110473,90,0,327,3,
1104895,0,327,3,97,
110490,327,3,98,0,
11050327,3,99,0,327,
110513,100,0,327,3,
11052101,0,327,3,102,
110530,327,3,103,0,
11054327,3,104,0,327,
110553,105,0,327,3,
11056106,0,327,3,107,
110570,327,3,108,0,
11058327,918,11,1,829,
110590,330,1,-1,3,
1106097,0,327,3,98,
110610,327,3,99,0,
11062327,3,100,0,327,
110633,101,0,327,3,
11064102,0,327,3,103,
110650,327,3,104,0,
11066327,3,105,0,327,
110673,106,0,327,3,
11068107,0,327,3,108,
110690,327,919,11,1,
11070829,0,330,1,-1,
110713,117,0,327,3,
11072118,0,327,3,119,
110730,327,3,120,0,
11074327,3,121,0,327,
110753,122,0,327,3,
1107648,0,327,3,49,
110770,327,3,50,0,
11078327,3,51,0,327,
110793,52,0,327,3,
1108053,0,327,3,54,
110810,327,3,55,0,
11082327,3,56,0,327,
110833,57,0,327,3,
1108465,0,327,3,66,
110850,327,3,67,0,
11086327,3,68,0,327,
110873,69,0,327,3,
1108870,0,327,3,71,
110890,327,3,72,0,
11090327,3,73,0,327,
110913,74,0,327,3,
1109275,0,327,3,76,
110930,327,3,77,0,
11094327,3,78,0,327,
110953,79,0,327,3,
1109680,0,327,3,81,
110970,327,3,82,0,
11098327,3,83,0,327,
110993,84,0,327,3,
1110085,0,327,3,86,
111010,327,3,87,0,
11102327,3,88,0,327,
111033,89,0,327,3,
1110490,0,327,3,95,
111050,327,3,97,0,
11106327,3,98,0,327,
111073,99,0,327,3,
11108100,0,327,3,101,
111090,327,3,102,0,
11110327,3,103,0,327,
111113,104,0,327,3,
11112105,0,327,3,106,
111130,327,3,107,0,
11114327,3,108,0,327,
11115920,11,1,829,0,
11116330,1,-1,3,112,
111170,327,3,113,0,
11118327,3,114,0,327,
111193,115,0,327,3,
11120116,0,327,3,117,
111210,327,3,118,0,
11122327,3,119,0,327,
111233,120,0,327,3,
11124121,0,327,3,122,
111250,327,3,48,0,
11126327,3,49,0,327,
111273,50,0,327,3,
1112851,0,327,3,52,
111290,327,3,53,0,
11130327,3,54,0,327,
111313,55,0,327,3,
1113256,0,327,3,57,
111330,327,3,65,0,
11134327,3,66,0,327,
111353,67,0,327,3,
1113668,0,327,3,69,
111370,327,3,70,0,
11138327,3,71,0,327,
111393,72,0,327,3,
1114073,0,327,3,74,
111410,327,3,75,0,
11142327,3,76,0,327,
111433,77,0,327,3,
1114478,0,327,3,79,
111450,327,3,80,0,
11146327,3,81,0,327,
111473,82,0,327,3,
1114883,0,327,3,84,
111490,327,3,85,0,
11150327,3,86,0,327,
111513,87,0,327,3,
1115288,0,327,3,89,
111530,327,3,90,0,
11154327,3,95,0,327,
111553,97,0,327,3,
1115698,0,327,3,99,
111570,327,3,100,0,
11158327,3,101,0,327,
111593,102,0,327,3,
11160103,0,327,3,104,
111610,327,3,105,0,
11162327,3,106,0,327,
111633,107,0,327,3,
11164108,0,327,921,11,
111651,829,0,330,1,
11166-1,3,115,0,327,
111673,116,0,922,12,
111681,5001,923,5,63,
111693,109,0,327,3,
11170110,0,327,3,111,
111710,327,3,112,0,
11172327,3,113,0,327,
111733,114,0,327,3,
11174115,0,327,3,116,
111750,327,3,117,0,
11176327,3,118,0,327,
111773,119,0,327,3,
11178120,0,327,3,121,
111790,327,3,122,0,
11180327,3,48,0,327,
111813,49,0,327,3,
1118250,0,327,3,51,
111830,327,3,52,0,
11184327,3,53,0,327,
111853,54,0,327,3,
1118655,0,327,3,56,
111870,327,3,57,0,
11188327,3,65,0,327,
111893,66,0,327,3,
1119067,0,327,3,68,
111910,327,3,69,0,
11192327,3,70,0,327,
111933,71,0,327,3,
1119472,0,327,3,73,
111950,327,3,74,0,
11196327,3,75,0,327,
111973,76,0,327,3,
1119877,0,327,3,78,
111990,327,3,79,0,
11200327,3,80,0,327,
112013,81,0,327,3,
1120282,0,327,3,83,
112030,327,3,84,0,
11204327,3,85,0,327,
112053,86,0,327,3,
1120687,0,327,3,88,
112070,327,3,89,0,
11208327,3,90,0,327,
112093,95,0,327,3,
1121097,0,924,12,1,
112115044,925,5,63,3,
11212109,0,327,3,110,
112130,327,3,111,0,
11214327,3,112,0,327,
112153,113,0,327,3,
11216114,0,926,12,1,
112175077,927,5,63,3,
11218109,0,327,3,110,
112190,327,3,111,0,
11220327,3,112,0,327,
112213,113,0,327,3,
11222114,0,327,3,115,
112230,327,3,116,0,
11224327,3,117,0,327,
112253,118,0,327,3,
11226119,0,327,3,120,
112270,327,3,121,0,
11228327,3,122,0,327,
112293,48,0,327,3,
1123049,0,327,3,50,
112310,327,3,51,0,
11232327,3,52,0,327,
112333,53,0,327,3,
1123454,0,327,3,55,
112350,327,3,56,0,
11236327,3,57,0,327,
112373,65,0,327,3,
1123866,0,327,3,67,
112390,327,3,68,0,
11240327,3,69,0,327,
112413,70,0,327,3,
1124271,0,327,3,72,
112430,327,3,73,0,
11244327,3,74,0,327,
112453,75,0,327,3,
1124676,0,327,3,77,
112470,327,3,78,0,
11248327,3,79,0,327,
112493,80,0,327,3,
1125081,0,327,3,82,
112510,327,3,83,0,
11252327,3,84,0,327,
112533,85,0,327,3,
1125486,0,327,3,87,
112550,327,3,88,0,
11256327,3,89,0,327,
112573,90,0,327,3,
1125895,0,327,3,97,
112590,327,3,98,0,
11260327,3,99,0,327,
112613,100,0,327,3,
11262101,0,327,3,102,
112630,327,3,103,0,
11264928,12,1,5126,929,
112655,63,3,109,0,
11266327,3,110,0,327,
112673,111,0,327,3,
11268112,0,327,3,113,
112690,327,3,114,0,
11270327,3,115,0,327,
112713,116,0,327,3,
11272117,0,327,3,118,
112730,327,3,119,0,
11274327,3,120,0,327,
112753,121,0,327,3,
11276122,0,327,3,48,
112770,327,3,49,0,
11278327,3,50,0,327,
112793,51,0,327,3,
1128052,0,327,3,53,
112810,327,3,54,0,
11282327,3,55,0,327,
112833,56,0,327,3,
1128457,0,327,3,65,
112850,327,3,66,0,
11286327,3,67,0,327,
112873,68,0,327,3,
1128869,0,327,3,70,
112890,327,3,71,0,
11290327,3,72,0,327,
112913,73,0,327,3,
1129274,0,327,3,75,
112930,327,3,76,0,
11294327,3,77,0,327,
112953,78,0,327,3,
1129679,0,327,3,80,
112970,327,3,81,0,
11298327,3,82,0,327,
112993,83,0,327,3,
1130084,0,327,3,85,
113010,327,3,86,0,
11302327,3,87,0,327,
113033,88,0,327,3,
1130489,0,327,3,90,
113050,327,3,95,0,
11306327,3,97,0,327,
113073,98,0,327,3,
1130899,0,327,3,100,
113090,327,3,101,0,
11310930,12,1,5173,931,
113115,63,3,109,0,
11312327,3,110,0,327,
113133,111,0,327,3,
11314112,0,327,3,113,
113150,327,3,114,0,
11316327,3,115,0,327,
113173,116,0,932,12,
113181,5208,933,5,63,
113193,109,0,327,3,
11320110,0,327,3,111,
113210,327,3,112,0,
11322327,3,113,0,327,
113233,114,0,327,3,
11324115,0,327,3,116,
113250,327,3,117,0,
11326327,3,118,0,327,
113273,119,0,327,3,
11328120,0,327,3,121,
113290,327,3,122,0,
11330327,3,48,0,327,
113313,49,0,327,3,
1133250,0,327,3,51,
113330,327,3,52,0,
11334327,3,53,0,327,
113353,54,0,327,3,
1133655,0,327,3,56,
113370,327,3,57,0,
11338327,3,65,0,327,
113393,66,0,327,3,
1134067,0,327,3,68,
113410,327,3,69,0,
11342327,3,70,0,327,
113433,71,0,327,3,
1134472,0,327,3,73,
113450,327,3,74,0,
11346327,3,75,0,327,
113473,76,0,327,3,
1134877,0,327,3,78,
113490,327,3,79,0,
11350327,3,80,0,327,
113513,81,0,327,3,
1135282,0,327,3,83,
113530,327,3,84,0,
11354327,3,85,0,327,
113553,86,0,327,3,
1135687,0,327,3,88,
113570,327,3,89,0,
11358327,3,90,0,327,
113593,95,0,327,3,
1136097,0,327,3,98,
113610,327,3,99,0,
11362327,3,100,0,327,
113633,101,0,327,3,
11364102,0,327,3,103,
113650,327,3,104,0,
11366327,3,105,0,327,
113673,106,0,327,3,
11368107,0,327,3,108,
113690,327,934,11,1,
11370664,0,935,4,38,
1137178,0,79,0,84,
113720,95,0,65,0,
1137384,0,95,0,84,
113740,65,0,82,0,
1137571,0,69,0,84,
113760,95,0,69,0,
1137786,0,69,0,78,
113780,84,0,1,-1,
113793,117,0,327,3,
11380118,0,327,3,119,
113810,327,3,120,0,
11382327,3,121,0,327,
113833,122,0,327,3,
1138448,0,327,3,49,
113850,327,3,50,0,
11386327,3,51,0,327,
113873,52,0,327,3,
1138853,0,327,3,54,
113890,327,3,55,0,
11390327,3,56,0,327,
113913,57,0,327,3,
1139265,0,327,3,66,
113930,327,3,67,0,
11394327,3,68,0,327,
113953,69,0,327,3,
1139670,0,327,3,71,
113970,327,3,72,0,
11398327,3,73,0,327,
113993,74,0,327,3,
1140075,0,327,3,76,
114010,327,3,77,0,
11402327,3,78,0,327,
114033,79,0,327,3,
1140480,0,327,3,81,
114050,327,3,82,0,
11406327,3,83,0,327,
114073,84,0,327,3,
1140885,0,327,3,86,
114090,327,3,87,0,
11410327,3,88,0,327,
114113,89,0,327,3,
1141290,0,327,3,95,
114130,327,3,97,0,
11414327,3,98,0,327,
114153,99,0,327,3,
11416100,0,327,3,101,
114170,327,3,102,0,
11418327,3,103,0,327,
114193,104,0,327,3,
11420105,0,327,3,106,
114210,327,3,107,0,
11422327,3,108,0,327,
11423936,11,1,829,0,
11424330,1,-1,3,102,
114250,327,3,103,0,
11426327,3,104,0,327,
114273,105,0,327,3,
11428106,0,327,3,107,
114290,327,3,108,0,
11430327,937,11,1,829,
114310,330,1,-1,3,
11432104,0,327,3,105,
114330,327,3,106,0,
11434327,3,107,0,327,
114353,108,0,327,938,
1143611,1,829,0,330,
114371,-1,3,115,0,
11438327,3,116,0,327,
114393,117,0,327,3,
11440118,0,327,3,119,
114410,327,3,120,0,
11442327,3,121,0,327,
114433,122,0,327,3,
1144448,0,327,3,49,
114450,327,3,50,0,
11446327,3,51,0,327,
114473,52,0,327,3,
1144853,0,327,3,54,
114490,327,3,55,0,
11450327,3,56,0,327,
114513,57,0,327,3,
1145265,0,327,3,66,
114530,327,3,67,0,
11454327,3,68,0,327,
114553,69,0,327,3,
1145670,0,327,3,71,
114570,327,3,72,0,
11458327,3,73,0,327,
114593,74,0,327,3,
1146075,0,327,3,76,
114610,327,3,77,0,
11462327,3,78,0,327,
114633,79,0,327,3,
1146480,0,327,3,81,
114650,327,3,82,0,
11466327,3,83,0,327,
114673,84,0,327,3,
1146885,0,327,3,86,
114690,327,3,87,0,
11470327,3,88,0,327,
114713,89,0,327,3,
1147290,0,327,3,95,
114730,327,3,97,0,
11474327,3,98,0,327,
114753,99,0,327,3,
11476100,0,327,3,101,
114770,327,3,102,0,
11478327,3,103,0,327,
114793,104,0,327,3,
11480105,0,327,3,106,
114810,327,3,107,0,
11482327,3,108,0,327,
11483939,11,1,829,0,
11484330,1,-1,3,98,
114850,327,3,99,0,
11486327,3,100,0,327,
114873,101,0,327,3,
11488102,0,327,3,103,
114890,327,3,104,0,
11490327,3,105,0,327,
114913,106,0,327,3,
11492107,0,327,3,108,
114930,327,940,11,1,
11494829,0,330,1,-1,
114953,117,0,327,3,
11496118,0,327,3,119,
114970,327,3,120,0,
11498327,3,121,0,327,
114993,122,0,327,3,
1150048,0,327,3,49,
115010,327,3,50,0,
11502327,3,51,0,327,
115033,52,0,327,3,
1150453,0,327,3,54,
115050,327,3,55,0,
11506327,3,56,0,327,
115073,57,0,327,3,
1150865,0,327,3,66,
115090,327,3,67,0,
11510327,3,68,0,327,
115113,69,0,327,3,
1151270,0,327,3,71,
115130,327,3,72,0,
11514327,3,73,0,327,
115153,74,0,327,3,
1151675,0,327,3,76,
115170,327,3,77,0,
11518327,3,78,0,327,
115193,79,0,327,3,
1152080,0,327,3,81,
115210,327,3,82,0,
11522327,3,83,0,327,
115233,84,0,327,3,
1152485,0,327,3,86,
115250,327,3,87,0,
11526327,3,88,0,327,
115273,89,0,327,3,
1152890,0,327,3,95,
115290,327,3,97,0,
11530327,3,98,0,327,
115313,99,0,327,3,
11532100,0,327,3,101,
115330,327,3,102,0,
11534327,3,103,0,327,
115353,104,0,327,3,
11536105,0,327,3,106,
115370,327,3,107,0,
11538327,3,108,0,327,
11539941,11,1,829,0,
11540330,1,-1,3,97,
115410,327,3,98,0,
11542327,3,99,0,327,
115433,100,0,327,3,
11544101,0,327,3,102,
115450,327,3,103,0,
11546327,3,104,0,327,
115473,105,0,327,3,
11548106,0,327,3,107,
115490,327,3,108,0,
11550327,942,11,1,829,
115510,330,1,-1,3,
11552117,0,327,3,118,
115530,327,3,119,0,
11554327,3,120,0,327,
115553,121,0,327,3,
11556122,0,327,3,48,
115570,327,3,49,0,
11558327,3,50,0,327,
115593,51,0,327,3,
1156052,0,327,3,53,
115610,327,3,54,0,
11562327,3,55,0,327,
115633,56,0,327,3,
1156457,0,327,3,65,
115650,327,3,66,0,
11566327,3,67,0,327,
115673,68,0,327,3,
1156869,0,327,3,70,
115690,327,3,71,0,
11570327,3,72,0,327,
115713,73,0,327,3,
1157274,0,327,3,75,
115730,327,3,76,0,
11574327,3,77,0,327,
115753,78,0,327,3,
1157679,0,327,3,80,
115770,327,3,81,0,
11578327,3,82,0,327,
115793,83,0,327,3,
1158084,0,327,3,85,
115810,327,3,86,0,
11582327,3,87,0,327,
115833,88,0,327,3,
1158489,0,327,3,90,
115850,327,3,95,0,
11586327,3,97,0,327,
115873,98,0,327,3,
1158899,0,327,3,100,
115890,327,3,101,0,
11590327,3,102,0,327,
115913,103,0,327,3,
11592104,0,327,3,105,
115930,327,3,106,0,
11594327,3,107,0,327,
115953,108,0,327,943,
1159611,1,829,0,330,
115971,-1,3,98,0,
11598327,3,99,0,327,
115993,100,0,327,3,
11600101,0,327,3,102,
116010,327,3,103,0,
11602327,3,104,0,327,
116033,105,0,327,3,
11604106,0,327,3,107,
116050,327,3,108,0,
11606327,944,11,1,829,
116070,330,1,-1,3,
1160897,0,327,3,98,
116090,327,3,99,0,
11610327,3,100,0,327,
116113,101,0,327,3,
11612102,0,327,3,103,
116130,327,3,104,0,
11614327,3,105,0,327,
116153,106,0,327,3,
11616107,0,327,3,108,
116170,327,945,11,1,
11618829,0,330,1,-1,
116193,117,0,327,3,
11620118,0,327,3,119,
116210,327,3,120,0,
11622327,3,121,0,327,
116233,122,0,327,3,
1162448,0,327,3,49,
116250,327,3,50,0,
11626327,3,51,0,327,
116273,52,0,327,3,
1162853,0,327,3,54,
116290,327,3,55,0,
11630327,3,56,0,327,
116313,57,0,327,3,
1163265,0,327,3,66,
116330,327,3,67,0,
11634327,3,68,0,327,
116353,69,0,327,3,
1163670,0,327,3,71,
116370,327,3,72,0,
11638327,3,73,0,327,
116393,74,0,327,3,
1164075,0,327,3,76,
116410,327,3,77,0,
11642327,3,78,0,327,
116433,79,0,327,3,
1164480,0,327,3,81,
116450,327,3,82,0,
11646327,3,83,0,327,
116473,84,0,327,3,
1164885,0,327,3,86,
116490,327,3,87,0,
11650327,3,88,0,327,
116513,89,0,327,3,
1165290,0,327,3,95,
116530,946,12,1,6087,
11654947,5,63,3,109,
116550,327,3,110,0,
11656327,3,111,0,327,
116573,112,0,327,3,
11658113,0,327,3,114,
116590,327,3,115,0,
11660948,12,1,6121,949,
116615,63,3,109,0,
11662327,3,110,0,327,
116633,111,0,327,3,
11664112,0,327,3,113,
116650,327,3,114,0,
11666327,3,115,0,327,
116673,116,0,327,3,
11668117,0,327,3,118,
116690,327,3,119,0,
11670327,3,120,0,327,
116713,121,0,327,3,
11672122,0,327,3,48,
116730,327,3,49,0,
11674327,3,50,0,327,
116753,51,0,327,3,
1167652,0,327,3,53,
116770,327,3,54,0,
11678327,3,55,0,327,
116793,56,0,327,3,
1168057,0,327,3,65,
116810,327,3,66,0,
11682327,3,67,0,327,
116833,68,0,327,3,
1168469,0,327,3,70,
116850,327,3,71,0,
11686327,3,72,0,327,
116873,73,0,327,3,
1168874,0,327,3,75,
116890,327,3,76,0,
11690327,3,77,0,327,
116913,78,0,327,3,
1169279,0,327,3,80,
116930,327,3,81,0,
11694327,3,82,0,327,
116953,83,0,327,3,
1169684,0,327,3,85,
116970,327,3,86,0,
11698327,3,87,0,327,
116993,88,0,327,3,
1170089,0,327,3,90,
117010,327,3,95,0,
11702327,3,97,0,327,
117033,98,0,327,3,
1170499,0,327,3,100,
117050,327,3,101,0,
11706950,12,1,6168,951,
117075,63,3,109,0,
11708327,3,110,0,952,
1170912,1,6197,953,5,
1171063,3,109,0,327,
117113,110,0,327,3,
11712111,0,327,3,112,
117130,327,3,113,0,
11714327,3,114,0,327,
117153,115,0,954,12,
117161,6231,955,5,63,
117173,109,0,327,3,
11718110,0,327,3,111,
117190,956,12,1,6261,
11720957,5,63,3,109,
117210,327,3,110,0,
11722327,3,111,0,327,
117233,112,0,327,3,
11724113,0,327,3,114,
117250,958,12,1,6294,
11726959,5,63,3,109,
117270,327,3,110,0,
11728327,3,111,0,327,
117293,112,0,327,3,
11730113,0,327,3,114,
117310,327,3,115,0,
11732327,3,116,0,327,
117333,117,0,327,3,
11734118,0,327,3,119,
117350,327,3,120,0,
11736327,3,121,0,327,
117373,122,0,327,3,
1173848,0,327,3,49,
117390,327,3,50,0,
11740327,3,51,0,327,
117413,52,0,327,3,
1174253,0,327,3,54,
117430,327,3,55,0,
11744327,3,56,0,327,
117453,57,0,327,3,
1174665,0,327,3,66,
117470,327,3,67,0,
11748327,3,68,0,327,
117493,69,0,327,3,
1175070,0,327,3,71,
117510,327,3,72,0,
11752327,3,73,0,327,
117533,74,0,327,3,
1175475,0,327,3,76,
117550,327,3,77,0,
11756327,3,78,0,327,
117573,79,0,327,3,
1175880,0,327,3,81,
117590,327,3,82,0,
11760327,3,83,0,327,
117613,84,0,327,3,
1176285,0,327,3,86,
117630,327,3,87,0,
11764327,3,88,0,327,
117653,89,0,327,3,
1176690,0,327,3,95,
117670,327,3,97,0,
11768327,3,98,0,327,
117693,99,0,327,3,
11770100,0,327,3,101,
117710,327,3,102,0,
11772327,3,103,0,327,
117733,104,0,327,3,
11774105,0,327,3,106,
117750,327,3,107,0,
11776327,3,108,0,327,
11777960,11,1,630,0,
11778961,4,30,78,0,
1177979,0,95,0,83,
117800,69,0,78,0,
1178183,0,79,0,82,
117820,95,0,69,0,
1178386,0,69,0,78,
117840,84,0,1,-1,
117853,115,0,327,3,
11786116,0,327,3,117,
117870,327,3,118,0,
11788327,3,119,0,327,
117893,120,0,327,3,
11790121,0,327,3,122,
117910,327,3,48,0,
11792327,3,49,0,327,
117933,50,0,327,3,
1179451,0,327,3,52,
117950,327,3,53,0,
11796327,3,54,0,327,
117973,55,0,327,3,
1179856,0,327,3,57,
117990,327,3,65,0,
11800327,3,66,0,327,
118013,67,0,327,3,
1180268,0,327,3,69,
118030,327,3,70,0,
11804327,3,71,0,327,
118053,72,0,327,3,
1180673,0,327,3,74,
118070,327,3,75,0,
11808327,3,76,0,327,
118093,77,0,327,3,
1181078,0,327,3,79,
118110,327,3,80,0,
11812327,3,81,0,327,
118133,82,0,327,3,
1181483,0,327,3,84,
118150,327,3,85,0,
11816327,3,86,0,327,
118173,87,0,327,3,
1181888,0,327,3,89,
118190,327,3,90,0,
11820327,3,95,0,327,
118213,97,0,327,3,
1182298,0,327,3,99,
118230,327,3,100,0,
11824327,3,101,0,327,
118253,102,0,327,3,
11826103,0,327,3,104,
118270,327,3,105,0,
11828327,3,106,0,327,
118293,107,0,327,3,
11830108,0,327,962,11,
118311,829,0,330,1,
11832-1,3,112,0,327,
118333,113,0,327,3,
11834114,0,327,3,115,
118350,327,3,116,0,
11836327,3,117,0,327,
118373,118,0,327,3,
11838119,0,327,3,120,
118390,327,3,121,0,
11840327,3,122,0,327,
118413,48,0,327,3,
1184249,0,327,3,50,
118430,327,3,51,0,
11844327,3,52,0,327,
118453,53,0,327,3,
1184654,0,327,3,55,
118470,327,3,56,0,
11848327,3,57,0,327,
118493,65,0,327,3,
1185066,0,327,3,67,
118510,327,3,68,0,
11852327,3,69,0,327,
118533,70,0,327,3,
1185471,0,327,3,72,
118550,327,3,73,0,
11856327,3,74,0,327,
118573,75,0,327,3,
1185876,0,327,3,77,
118590,327,3,78,0,
11860327,3,79,0,327,
118613,80,0,327,3,
1186281,0,327,3,82,
118630,327,3,83,0,
11864327,3,84,0,327,
118653,85,0,327,3,
1186686,0,327,3,87,
118670,327,3,88,0,
11868327,3,89,0,327,
118693,90,0,327,3,
1187095,0,327,3,97,
118710,327,3,98,0,
11872327,3,99,0,327,
118733,100,0,327,3,
11874101,0,327,3,102,
118750,327,3,103,0,
11876327,3,104,0,327,
118773,105,0,327,3,
11878106,0,327,3,107,
118790,327,3,108,0,
11880327,963,11,1,829,
118810,330,1,-1,3,
11882116,0,327,3,117,
118830,327,3,118,0,
11884327,3,119,0,327,
118853,120,0,327,3,
11886121,0,327,3,122,
118870,327,3,48,0,
11888327,3,49,0,327,
118893,50,0,327,3,
1189051,0,327,3,52,
118910,327,3,53,0,
11892327,3,54,0,327,
118933,55,0,327,3,
1189456,0,327,3,57,
118950,327,3,65,0,
11896327,3,66,0,327,
118973,67,0,327,3,
1189868,0,327,3,69,
118990,327,3,70,0,
11900327,3,71,0,327,
119013,72,0,327,3,
1190273,0,327,3,74,
119030,327,3,75,0,
11904327,3,76,0,327,
119053,77,0,327,3,
1190678,0,327,3,79,
119070,327,3,80,0,
11908327,3,81,0,327,
119093,82,0,327,3,
1191083,0,327,3,84,
119110,327,3,85,0,
11912327,3,86,0,327,
119133,87,0,327,3,
1191488,0,327,3,89,
119150,327,3,90,0,
11916327,3,95,0,327,
119173,97,0,327,3,
1191898,0,327,3,99,
119190,327,3,100,0,
11920327,3,101,0,327,
119213,102,0,327,3,
11922103,0,327,3,104,
119230,327,3,105,0,
11924327,3,106,0,327,
119253,107,0,327,3,
11926108,0,327,964,11,
119271,829,0,330,1,
11928-1,3,111,0,327,
119293,112,0,327,3,
11930113,0,327,3,114,
119310,327,3,115,0,
11932327,3,116,0,327,
119333,117,0,327,3,
11934118,0,327,3,119,
119350,327,3,120,0,
11936327,3,121,0,327,
119373,122,0,327,3,
1193848,0,327,3,49,
119390,327,3,50,0,
11940327,3,51,0,327,
119413,52,0,327,3,
1194253,0,327,3,54,
119430,327,3,55,0,
11944327,3,56,0,327,
119453,57,0,327,3,
1194665,0,327,3,66,
119470,327,3,67,0,
11948327,3,68,0,327,
119493,69,0,327,3,
1195070,0,327,3,71,
119510,327,3,72,0,
11952327,3,73,0,327,
119533,74,0,327,3,
1195475,0,327,3,76,
119550,327,3,77,0,
11956327,3,78,0,327,
119573,79,0,327,3,
1195880,0,327,3,81,
119590,327,3,82,0,
11960327,3,83,0,327,
119613,84,0,327,3,
1196285,0,327,3,86,
119630,327,3,87,0,
11964327,3,88,0,327,
119653,89,0,327,3,
1196690,0,327,3,95,
119670,327,3,97,0,
11968327,3,98,0,327,
119693,99,0,327,3,
11970100,0,327,3,101,
119710,327,3,102,0,
11972327,3,103,0,327,
119733,104,0,327,3,
11974105,0,327,3,106,
119750,327,3,107,0,
11976327,3,108,0,327,
11977965,11,1,829,0,
11978330,1,-1,3,102,
119790,327,3,103,0,
11980327,3,104,0,327,
119813,105,0,327,3,
11982106,0,327,3,107,
119830,327,3,108,0,
11984327,966,11,1,829,
119850,330,1,-1,3,
11986116,0,327,3,117,
119870,327,3,118,0,
11988327,3,119,0,327,
119893,120,0,327,3,
11990121,0,327,3,122,
119910,327,3,48,0,
11992327,3,49,0,327,
119933,50,0,327,3,
1199451,0,327,3,52,
119950,327,3,53,0,
11996327,3,54,0,327,
119973,55,0,327,3,
1199856,0,327,3,57,
119990,327,3,65,0,
12000327,3,66,0,327,
120013,67,0,327,3,
1200268,0,327,3,69,
120030,327,3,70,0,
12004327,3,71,0,327,
120053,72,0,327,3,
1200673,0,327,3,74,
120070,327,3,75,0,
12008327,3,76,0,327,
120093,77,0,327,3,
1201078,0,327,3,79,
120110,327,3,80,0,
12012327,3,81,0,327,
120133,82,0,327,3,
1201483,0,327,3,84,
120150,327,3,85,0,
12016327,3,86,0,327,
120173,87,0,327,3,
1201888,0,327,3,89,
120190,327,3,90,0,
12020327,3,95,0,327,
120213,97,0,327,3,
1202298,0,327,3,99,
120230,327,3,100,0,
12024327,3,101,0,327,
120253,102,0,327,3,
12026103,0,327,3,104,
120270,327,3,105,0,
12028327,3,106,0,327,
120293,107,0,327,3,
12030108,0,327,967,11,
120311,829,0,330,1,
12032-1,3,97,0,327,
120333,98,0,327,3,
1203499,0,327,3,100,
120350,327,3,101,0,
12036327,3,102,0,327,
120373,103,0,327,3,
12038104,0,327,3,105,
120390,327,3,106,0,
12040327,3,107,0,327,
120413,108,0,327,968,
1204211,1,829,0,330,
120431,-1,3,112,0,
12044327,3,113,0,327,
120453,114,0,327,3,
12046115,0,327,3,116,
120470,327,3,117,0,
12048327,3,118,0,327,
120493,119,0,327,3,
12050120,0,327,3,121,
120510,327,3,122,0,
12052327,3,48,0,327,
120533,49,0,327,3,
1205450,0,327,3,51,
120550,327,3,52,0,
12056327,3,53,0,327,
120573,54,0,327,3,
1205855,0,327,3,56,
120590,327,3,57,0,
12060327,3,65,0,327,
120613,66,0,327,3,
1206267,0,327,3,68,
120630,327,3,69,0,
12064327,3,70,0,327,
120653,71,0,327,3,
1206672,0,327,3,73,
120670,327,3,74,0,
12068327,3,75,0,327,
120693,76,0,327,3,
1207077,0,327,3,78,
120710,327,3,79,0,
12072327,3,80,0,327,
120733,81,0,327,3,
1207482,0,327,3,83,
120750,327,3,84,0,
12076327,3,85,0,327,
120773,86,0,327,3,
1207887,0,327,3,88,
120790,327,3,89,0,
12080327,3,90,0,327,
120813,95,0,327,3,
1208297,0,327,3,98,
120830,327,3,99,0,
12084327,3,100,0,327,
120853,101,0,327,3,
12086102,0,327,3,103,
120870,327,3,104,0,
12088327,3,105,0,327,
120893,106,0,327,3,
12090107,0,327,3,108,
120910,327,969,11,1,
12092829,0,330,1,-1,
120933,111,0,970,12,
120941,7052,971,5,63,
120953,109,0,327,3,
12096110,0,972,12,1,
120977081,973,5,63,3,
12098109,0,327,3,110,
120990,327,3,111,0,
12100327,3,112,0,327,
121013,113,0,327,3,
12102114,0,327,3,115,
121030,327,3,116,0,
12104327,3,117,0,327,
121053,118,0,327,3,
12106119,0,327,3,120,
121070,327,3,121,0,
12108327,3,122,0,327,
121093,48,0,327,3,
1211049,0,327,3,50,
121110,327,3,51,0,
12112327,3,52,0,327,
121133,53,0,327,3,
1211454,0,327,3,55,
121150,327,3,56,0,
12116327,3,57,0,327,
121173,65,0,327,3,
1211866,0,327,3,67,
121190,327,3,68,0,
12120327,3,69,0,327,
121213,70,0,327,3,
1212271,0,327,3,72,
121230,327,3,73,0,
12124327,3,74,0,327,
121253,75,0,327,3,
1212676,0,327,3,77,
121270,327,3,78,0,
12128327,3,79,0,327,
121293,80,0,327,3,
1213081,0,327,3,82,
121310,327,3,83,0,
12132327,3,84,0,327,
121333,85,0,327,3,
1213486,0,327,3,87,
121350,327,3,88,0,
12136327,3,89,0,327,
121373,90,0,327,3,
1213895,0,974,12,1,
121397167,975,5,63,3,
12140109,0,327,3,110,
121410,327,3,111,0,
12142327,3,112,0,327,
121433,113,0,327,3,
12144114,0,976,12,1,
121457200,977,5,63,3,
12146109,0,327,3,110,
121470,327,3,111,0,
12148327,3,112,0,327,
121493,113,0,327,3,
12150114,0,327,3,115,
121510,327,3,116,0,
12152327,3,117,0,327,
121533,118,0,327,3,
12154119,0,327,3,120,
121550,327,3,121,0,
12156327,3,122,0,327,
121573,48,0,327,3,
1215849,0,327,3,50,
121590,327,3,51,0,
12160327,3,52,0,327,
121613,53,0,327,3,
1216254,0,327,3,55,
121630,327,3,56,0,
12164327,3,57,0,327,
121653,65,0,327,3,
1216666,0,327,3,67,
121670,327,3,68,0,
12168327,3,69,0,327,
121693,70,0,327,3,
1217071,0,327,3,72,
121710,327,3,73,0,
12172327,3,74,0,327,
121733,75,0,327,3,
1217476,0,327,3,77,
121750,327,3,78,0,
12176327,3,79,0,327,
121773,80,0,327,3,
1217881,0,327,3,82,
121790,327,3,83,0,
12180327,3,84,0,327,
121813,85,0,327,3,
1218286,0,327,3,87,
121830,327,3,88,0,
12184327,3,89,0,327,
121853,90,0,327,3,
1218695,0,327,3,97,
121870,327,3,98,0,
12188327,3,99,0,327,
121893,100,0,327,3,
12190101,0,978,12,1,
121917247,979,5,63,3,
12192109,0,327,3,110,
121930,327,3,111,0,
12194327,3,112,0,327,
121953,113,0,327,3,
12196114,0,327,3,115,
121970,327,3,116,0,
12198327,3,117,0,327,
121993,118,0,327,3,
12200119,0,327,3,120,
122010,327,3,121,0,
12202327,3,122,0,980,
1220312,1,7288,981,5,
1220463,3,109,0,327,
122053,110,0,327,3,
12206111,0,327,3,112,
122070,327,3,113,0,
12208327,3,114,0,327,
122093,115,0,327,3,
12210116,0,327,3,117,
122110,327,3,118,0,
12212327,3,119,0,327,
122133,120,0,327,3,
12214121,0,327,3,122,
122150,327,3,48,0,
12216327,3,49,0,327,
122173,50,0,327,3,
1221851,0,327,3,52,
122190,327,3,53,0,
12220327,3,54,0,327,
122213,55,0,327,3,
1222256,0,327,3,57,
122230,327,3,65,0,
12224327,3,66,0,327,
122253,67,0,327,3,
1222668,0,327,3,69,
122270,327,3,70,0,
12228327,3,71,0,327,
122293,72,0,327,3,
1223073,0,327,3,74,
122310,327,3,75,0,
12232327,3,76,0,327,
122333,77,0,327,3,
1223478,0,327,3,79,
122350,327,3,80,0,
12236327,3,81,0,327,
122373,82,0,327,3,
1223883,0,327,3,84,
122390,327,3,85,0,
12240327,3,86,0,327,
122413,87,0,327,3,
1224288,0,327,3,89,
122430,327,3,90,0,
12244327,3,95,0,327,
122453,97,0,327,3,
1224698,0,327,3,99,
122470,327,3,100,0,
12248327,3,101,0,327,
122493,102,0,327,3,
12250103,0,327,3,104,
122510,327,3,105,0,
12252327,3,106,0,327,
122533,107,0,327,3,
12254108,0,327,982,11,
122551,695,0,983,4,
1225624,79,0,78,0,
1225795,0,82,0,69,
122580,90,0,95,0,
1225969,0,86,0,69,
122600,78,0,84,0,
122611,-1,3,48,0,
12262327,3,49,0,327,
122633,50,0,327,3,
1226451,0,327,3,52,
122650,327,3,53,0,
12266327,3,54,0,327,
122673,55,0,327,3,
1226856,0,327,3,57,
122690,327,3,65,0,
12270327,3,66,0,327,
122713,67,0,327,3,
1227268,0,327,3,69,
122730,327,3,70,0,
12274327,3,71,0,327,
122753,72,0,327,3,
1227673,0,327,3,74,
122770,327,3,75,0,
12278327,3,76,0,327,
122793,77,0,327,3,
1228078,0,327,3,79,
122810,327,3,80,0,
12282327,3,81,0,327,
122833,82,0,327,3,
1228483,0,327,3,84,
122850,327,3,85,0,
12286327,3,86,0,327,
122873,87,0,327,3,
1228888,0,327,3,89,
122890,327,3,90,0,
12290327,3,95,0,327,
122913,97,0,327,3,
1229298,0,327,3,99,
122930,327,3,100,0,
12294327,3,101,0,327,
122953,102,0,327,3,
12296103,0,327,3,104,
122970,327,3,105,0,
12298327,3,106,0,327,
122993,107,0,327,3,
12300108,0,327,984,11,
123011,829,0,330,1,
12302-1,3,102,0,327,
123033,103,0,327,3,
12304104,0,327,3,105,
123050,327,3,106,0,
12306327,3,107,0,327,
123073,108,0,327,985,
1230811,1,829,0,330,
123091,-1,3,115,0,
12310327,3,116,0,327,
123113,117,0,327,3,
12312118,0,327,3,119,
123130,327,3,120,0,
12314327,3,121,0,327,
123153,122,0,327,3,
1231648,0,327,3,49,
123170,327,3,50,0,
12318327,3,51,0,327,
123193,52,0,327,3,
1232053,0,327,3,54,
123210,327,3,55,0,
12322327,3,56,0,327,
123233,57,0,327,3,
1232465,0,327,3,66,
123250,327,3,67,0,
12326327,3,68,0,327,
123273,69,0,327,3,
1232870,0,327,3,71,
123290,327,3,72,0,
12330327,3,73,0,327,
123313,74,0,327,3,
1233275,0,327,3,76,
123330,327,3,77,0,
12334327,3,78,0,327,
123353,79,0,327,3,
1233680,0,327,3,81,
123370,327,3,82,0,
12338327,3,83,0,327,
123393,84,0,327,3,
1234085,0,327,3,86,
123410,327,3,87,0,
12342327,3,88,0,327,
123433,89,0,327,3,
1234490,0,327,3,95,
123450,327,3,97,0,
12346327,3,98,0,327,
123473,99,0,327,3,
12348100,0,327,3,101,
123490,327,3,102,0,
12350327,3,103,0,327,
123513,104,0,327,3,
12352105,0,327,3,106,
123530,327,3,107,0,
12354327,3,108,0,327,
12355986,11,1,829,0,
12356330,1,-1,3,97,
123570,327,3,98,0,
12358327,3,99,0,327,
123593,100,0,327,3,
12360101,0,327,3,102,
123610,327,3,103,0,
12362327,3,104,0,327,
123633,105,0,327,3,
12364106,0,327,3,107,
123650,327,3,108,0,
12366327,987,11,1,829,
123670,330,1,-1,3,
12368111,0,327,3,112,
123690,327,3,113,0,
12370327,3,114,0,327,
123713,115,0,327,3,
12372116,0,327,3,117,
123730,327,3,118,0,
12374327,3,119,0,327,
123753,120,0,327,3,
12376121,0,327,3,122,
123770,327,3,48,0,
12378327,3,49,0,327,
123793,50,0,327,3,
1238051,0,327,3,52,
123810,327,3,53,0,
12382327,3,54,0,327,
123833,55,0,327,3,
1238456,0,327,3,57,
123850,327,3,65,0,
12386327,3,66,0,327,
123873,67,0,327,3,
1238868,0,327,3,69,
123890,327,3,70,0,
12390327,3,71,0,327,
123913,72,0,327,3,
1239273,0,327,3,74,
123930,327,3,75,0,
12394327,3,76,0,327,
123953,77,0,327,3,
1239678,0,327,3,79,
123970,327,3,80,0,
12398327,3,81,0,327,
123993,82,0,327,3,
1240083,0,327,3,84,
124010,327,3,85,0,
12402327,3,86,0,327,
124033,87,0,327,3,
1240488,0,327,3,89,
124050,327,3,90,0,
12406327,3,95,0,327,
124073,97,0,327,3,
1240898,0,988,12,1,
124097696,989,5,63,3,
12410109,0,327,3,110,
124110,327,3,111,0,
12412327,3,112,0,327,
124133,113,0,327,3,
12414114,0,327,3,115,
124150,327,3,116,0,
12416327,3,117,0,327,
124173,118,0,327,3,
12418119,0,327,3,120,
124190,327,3,121,0,
12420327,3,122,0,327,
124213,48,0,327,3,
1242249,0,327,3,50,
124230,327,3,51,0,
12424327,3,52,0,327,
124253,53,0,327,3,
1242654,0,327,3,55,
124270,327,3,56,0,
12428327,3,57,0,327,
124293,65,0,327,3,
1243066,0,327,3,67,
124310,327,3,68,0,
12432327,3,69,0,327,
124333,70,0,327,3,
1243471,0,327,3,72,
124350,327,3,73,0,
12436327,3,74,0,327,
124373,75,0,327,3,
1243876,0,327,3,77,
124390,327,3,78,0,
12440327,3,79,0,327,
124413,80,0,327,3,
1244281,0,327,3,82,
124430,327,3,83,0,
12444327,3,84,0,327,
124453,85,0,327,3,
1244686,0,327,3,87,
124470,327,3,88,0,
12448327,3,89,0,327,
124493,90,0,327,3,
1245095,0,327,3,97,
124510,327,3,98,0,
12452327,3,99,0,327,
124533,100,0,327,3,
12454101,0,327,3,102,
124550,327,3,103,0,
12456327,3,104,0,327,
124573,105,0,327,3,
12458106,0,990,12,1,
124597748,991,5,63,3,
12460109,0,327,3,110,
124610,327,3,111,0,
12462327,3,112,0,327,
124633,113,0,327,3,
12464114,0,327,3,115,
124650,327,3,116,0,
12466327,3,117,0,327,
124673,118,0,327,3,
12468119,0,327,3,120,
124690,327,3,121,0,
12470327,3,122,0,327,
124713,48,0,327,3,
1247249,0,327,3,50,
124730,327,3,51,0,
12474327,3,52,0,327,
124753,53,0,327,3,
1247654,0,327,3,55,
124770,327,3,56,0,
12478327,3,57,0,327,
124793,65,0,327,3,
1248066,0,327,3,67,
124810,327,3,68,0,
12482327,3,69,0,327,
124833,70,0,327,3,
1248471,0,327,3,72,
124850,327,3,73,0,
12486327,3,74,0,327,
124873,75,0,327,3,
1248876,0,327,3,77,
124890,327,3,78,0,
12490327,3,79,0,327,
124913,80,0,327,3,
1249281,0,327,3,82,
124930,327,3,83,0,
12494327,3,84,0,327,
124953,85,0,327,3,
1249686,0,327,3,87,
124970,327,3,88,0,
12498327,3,89,0,327,
124993,90,0,327,3,
1250095,0,327,3,97,
125010,327,3,98,0,
12502327,3,99,0,327,
125033,100,0,327,3,
12504101,0,992,12,1,
125057795,993,5,63,3,
12506109,0,327,3,110,
125070,327,3,111,0,
12508327,3,112,0,327,
125093,113,0,327,3,
12510114,0,327,3,115,
125110,327,3,116,0,
12512327,3,117,0,327,
125133,118,0,327,3,
12514119,0,327,3,120,
125150,327,3,121,0,
12516327,3,122,0,327,
125173,48,0,327,3,
1251849,0,327,3,50,
125190,327,3,51,0,
12520327,3,52,0,327,
125213,53,0,327,3,
1252254,0,327,3,55,
125230,327,3,56,0,
12524327,3,57,0,327,
125253,65,0,327,3,
1252666,0,327,3,67,
125270,327,3,68,0,
12528327,3,69,0,327,
125293,70,0,327,3,
1253071,0,327,3,72,
125310,327,3,73,0,
12532327,3,74,0,327,
125333,75,0,327,3,
1253476,0,327,3,77,
125350,327,3,78,0,
12536327,3,79,0,327,
125373,80,0,327,3,
1253881,0,327,3,82,
125390,327,3,83,0,
12540327,3,84,0,327,
125413,85,0,327,3,
1254286,0,327,3,87,
125430,327,3,88,0,
12544327,3,89,0,327,
125453,90,0,327,3,
1254695,0,327,3,97,
125470,327,3,98,0,
12548327,3,99,0,994,
1254912,1,7840,995,5,
1255063,3,109,0,327,
125513,110,0,327,3,
12552111,0,327,3,112,
125530,327,3,113,0,
12554327,3,114,0,327,
125553,115,0,327,3,
12556116,0,996,12,1,
125577875,997,5,63,3,
12558109,0,327,3,110,
125590,327,3,111,0,
12560327,3,112,0,327,
125613,113,0,327,3,
12562114,0,327,3,115,
125630,327,3,116,0,
12564327,3,117,0,327,
125653,118,0,327,3,
12566119,0,327,3,120,
125670,327,3,121,0,
12568327,3,122,0,327,
125693,48,0,327,3,
1257049,0,327,3,50,
125710,327,3,51,0,
12572327,3,52,0,327,
125733,53,0,327,3,
1257454,0,327,3,55,
125750,327,3,56,0,
12576327,3,57,0,327,
125773,65,0,327,3,
1257866,0,327,3,67,
125790,327,3,68,0,
12580327,3,69,0,327,
125813,70,0,327,3,
1258271,0,327,3,72,
125830,327,3,73,0,
12584327,3,74,0,327,
125853,75,0,327,3,
1258676,0,327,3,77,
125870,327,3,78,0,
12588327,3,79,0,327,
125893,80,0,327,3,
1259081,0,327,3,82,
125910,327,3,83,0,
12592327,3,84,0,327,
125933,85,0,327,3,
1259486,0,327,3,87,
125950,327,3,88,0,
12596327,3,89,0,327,
125973,90,0,327,3,
1259895,0,998,12,1,
125997961,999,5,63,3,
12600109,0,327,3,110,
126010,327,3,111,0,
12602327,3,112,0,327,
126033,113,0,327,3,
12604114,0,1000,12,1,
126057994,1001,5,63,3,
12606109,0,327,3,110,
126070,327,3,111,0,
12608327,3,112,0,327,
126093,113,0,327,3,
12610114,0,327,3,115,
126110,327,3,116,0,
12612327,3,117,0,327,
126133,118,0,327,3,
12614119,0,327,3,120,
126150,327,3,121,0,
12616327,3,122,0,327,
126173,48,0,327,3,
1261849,0,327,3,50,
126190,327,3,51,0,
12620327,3,52,0,327,
126213,53,0,327,3,
1262254,0,327,3,55,
126230,327,3,56,0,
12624327,3,57,0,327,
126253,65,0,327,3,
1262666,0,327,3,67,
126270,327,3,68,0,
12628327,3,69,0,327,
126293,70,0,327,3,
1263071,0,327,3,72,
126310,327,3,73,0,
12632327,3,74,0,327,
126333,75,0,327,3,
1263476,0,327,3,77,
126350,327,3,78,0,
12636327,3,79,0,327,
126373,80,0,327,3,
1263881,0,327,3,82,
126390,327,3,83,0,
12640327,3,84,0,327,
126413,85,0,327,3,
1264286,0,327,3,87,
126430,327,3,88,0,
12644327,3,89,0,327,
126453,90,0,327,3,
1264695,0,327,3,97,
126470,327,3,98,0,
12648327,3,99,0,327,
126493,100,0,327,3,
12650101,0,1002,12,1,
126518041,1003,5,63,3,
12652109,0,327,3,110,
126530,327,3,111,0,
12654327,3,112,0,327,
126553,113,0,327,3,
12656114,0,327,3,115,
126570,327,3,116,0,
12658327,3,117,0,327,
126593,118,0,327,3,
12660119,0,327,3,120,
126610,327,3,121,0,
12662327,3,122,0,1004,
1266312,1,8082,1005,5,
1266463,3,109,0,327,
126653,110,0,327,3,
12666111,0,327,3,112,
126670,327,3,113,0,
12668327,3,114,0,327,
126693,115,0,327,3,
12670116,0,327,3,117,
126710,327,3,118,0,
12672327,3,119,0,327,
126733,120,0,327,3,
12674121,0,327,3,122,
126750,327,3,48,0,
12676327,3,49,0,327,
126773,50,0,327,3,
1267851,0,327,3,52,
126790,327,3,53,0,
12680327,3,54,0,327,
126813,55,0,327,3,
1268256,0,327,3,57,
126830,327,3,65,0,
12684327,3,66,0,327,
126853,67,0,327,3,
1268668,0,327,3,69,
126870,327,3,70,0,
12688327,3,71,0,327,
126893,72,0,327,3,
1269073,0,327,3,74,
126910,327,3,75,0,
12692327,3,76,0,327,
126933,77,0,327,3,
1269478,0,327,3,79,
126950,327,3,80,0,
12696327,3,81,0,327,
126973,82,0,327,3,
1269883,0,327,3,84,
126990,327,3,85,0,
12700327,3,86,0,327,
127013,87,0,327,3,
1270288,0,327,3,89,
127030,327,3,90,0,
12704327,3,95,0,327,
127053,97,0,327,3,
1270698,0,327,3,99,
127070,327,3,100,0,
12708327,3,101,0,327,
127093,102,0,327,3,
12710103,0,327,3,104,
127110,327,3,105,0,
12712327,3,106,0,327,
127133,107,0,327,3,
12714108,0,327,1006,11,
127151,681,0,1007,4,
1271632,79,0,66,0,
1271774,0,69,0,67,
127180,84,0,95,0,
1271982,0,69,0,90,
127200,95,0,69,0,
1272186,0,69,0,78,
127220,84,0,1,-1,
127233,48,0,327,3,
1272449,0,327,3,50,
127250,327,3,51,0,
12726327,3,52,0,327,
127273,53,0,327,3,
1272854,0,327,3,55,
127290,327,3,56,0,
12730327,3,57,0,327,
127313,65,0,327,3,
1273266,0,327,3,67,
127330,327,3,68,0,
12734327,3,69,0,327,
127353,70,0,327,3,
1273671,0,327,3,72,
127370,327,3,73,0,
12738327,3,74,0,327,
127393,75,0,327,3,
1274076,0,327,3,77,
127410,327,3,78,0,
12742327,3,79,0,327,
127433,80,0,327,3,
1274481,0,327,3,82,
127450,327,3,83,0,
12746327,3,84,0,327,
127473,85,0,327,3,
1274886,0,327,3,87,
127490,327,3,88,0,
12750327,3,89,0,327,
127513,90,0,327,3,
1275295,0,327,3,97,
127530,327,3,98,0,
12754327,3,99,0,327,
127553,100,0,327,3,
12756101,0,327,3,102,
127570,327,3,103,0,
12758327,3,104,0,327,
127593,105,0,327,3,
12760106,0,327,3,107,
127610,327,3,108,0,
12762327,1008,11,1,829,
127630,330,1,-1,3,
12764102,0,327,3,103,
127650,327,3,104,0,
12766327,3,105,0,327,
127673,106,0,327,3,
12768107,0,327,3,108,
127690,327,1009,11,1,
12770829,0,330,1,-1,
127713,115,0,327,3,
12772116,0,327,3,117,
127730,327,3,118,0,
12774327,3,119,0,327,
127753,120,0,327,3,
12776121,0,327,3,122,
127770,327,3,48,0,
12778327,3,49,0,327,
127793,50,0,327,3,
1278051,0,327,3,52,
127810,327,3,53,0,
12782327,3,54,0,327,
127833,55,0,327,3,
1278456,0,327,3,57,
127850,327,3,65,0,
12786327,3,66,0,327,
127873,67,0,327,3,
1278868,0,327,3,69,
127890,327,3,70,0,
12790327,3,71,0,327,
127913,72,0,327,3,
1279273,0,327,3,74,
127930,327,3,75,0,
12794327,3,76,0,327,
127953,77,0,327,3,
1279678,0,327,3,79,
127970,327,3,80,0,
12798327,3,81,0,327,
127993,82,0,327,3,
1280083,0,327,3,84,
128010,327,3,85,0,
12802327,3,86,0,327,
128033,87,0,327,3,
1280488,0,327,3,89,
128050,327,3,90,0,
12806327,3,95,0,327,
128073,97,0,327,3,
1280898,0,327,3,99,
128090,327,3,100,0,
12810327,3,101,0,327,
128113,102,0,327,3,
12812103,0,327,3,104,
128130,327,3,105,0,
12814327,3,106,0,327,
128153,107,0,327,3,
12816108,0,327,1010,11,
128171,829,0,330,1,
12818-1,3,97,0,327,
128193,98,0,327,3,
1282099,0,327,3,100,
128210,327,3,101,0,
12822327,3,102,0,327,
128233,103,0,327,3,
12824104,0,327,3,105,
128250,327,3,106,0,
12826327,3,107,0,327,
128273,108,0,327,1011,
1282811,1,829,0,330,
128291,-1,3,117,0,
12830327,3,118,0,327,
128313,119,0,327,3,
12832120,0,327,3,121,
128330,327,3,122,0,
12834327,3,48,0,327,
128353,49,0,327,3,
1283650,0,327,3,51,
128370,327,3,52,0,
12838327,3,53,0,327,
128393,54,0,327,3,
1284055,0,327,3,56,
128410,327,3,57,0,
12842327,3,65,0,327,
128433,66,0,327,3,
1284467,0,327,3,68,
128450,327,3,69,0,
12846327,3,70,0,327,
128473,71,0,327,3,
1284872,0,327,3,73,
128490,327,3,74,0,
12850327,3,75,0,327,
128513,76,0,327,3,
1285277,0,327,3,78,
128530,327,3,79,0,
12854327,3,80,0,327,
128553,81,0,327,3,
1285682,0,327,3,83,
128570,327,3,84,0,
12858327,3,85,0,327,
128593,86,0,327,3,
1286087,0,327,3,88,
128610,327,3,89,0,
12862327,3,90,0,327,
128633,95,0,327,3,
1286497,0,327,3,98,
128650,327,3,99,0,
12866327,3,100,0,327,
128673,101,0,327,3,
12868102,0,327,3,103,
128690,327,3,104,0,
12870327,3,105,0,327,
128713,106,0,327,3,
12872107,0,327,3,108,
128730,327,1012,11,1,
12874829,0,330,1,-1,
128753,100,0,327,3,
12876101,0,327,3,102,
128770,327,3,103,0,
12878327,3,104,0,327,
128793,105,0,327,3,
12880106,0,327,3,107,
128810,327,3,108,0,
12882327,1013,11,1,829,
128830,330,1,-1,3,
12884102,0,327,3,103,
128850,327,3,104,0,
12886327,3,105,0,327,
128873,106,0,327,3,
12888107,0,327,3,108,
128890,327,1014,11,1,
12890829,0,330,1,-1,
128913,107,0,327,3,
12892108,0,327,1015,11,
128931,829,0,330,1,
12894-1,3,99,0,327,
128953,100,0,327,3,
12896101,0,327,3,102,
128970,327,3,103,0,
12898327,3,104,0,327,
128993,105,0,327,3,
12900106,0,327,3,107,
129010,327,3,108,0,
12902327,1016,11,1,829,
129030,330,1,-1,3,
12904112,0,325,3,113,
129050,325,3,114,0,
129061017,12,1,8855,1018,
129075,63,3,109,0,
12908327,3,110,0,327,
129093,111,0,1019,12,
129101,8885,1020,5,63,
129113,109,0,327,3,
12912110,0,327,3,111,
129130,327,3,112,0,
12914327,3,113,0,327,
129153,114,0,327,3,
12916115,0,327,3,116,
129170,1021,12,1,8920,
129181022,5,63,3,109,
129190,327,3,110,0,
12920327,3,111,0,327,
129213,112,0,327,3,
12922113,0,327,3,114,
129230,327,3,115,0,
12924327,3,116,0,327,
129253,117,0,327,3,
12926118,0,327,3,119,
129270,327,3,120,0,
12928327,3,121,0,327,
129293,122,0,327,3,
1293048,0,327,3,49,
129310,327,3,50,0,
12932327,3,51,0,327,
129333,52,0,327,3,
1293453,0,327,3,54,
129350,327,3,55,0,
12936327,3,56,0,327,
129373,57,0,327,3,
1293865,0,327,3,66,
129390,327,3,67,0,
12940327,3,68,0,327,
129413,69,0,327,3,
1294270,0,327,3,71,
129430,327,3,72,0,
12944327,3,73,0,327,
129453,74,0,327,3,
1294675,0,327,3,76,
129470,327,3,77,0,
12948327,3,78,0,327,
129493,79,0,327,3,
1295080,0,327,3,81,
129510,327,3,82,0,
12952327,3,83,0,327,
129533,84,0,327,3,
1295485,0,327,3,86,
129550,327,3,87,0,
12956327,3,88,0,327,
129573,89,0,327,3,
1295890,0,327,3,95,
129590,327,3,97,0,
129601023,12,1,8963,1024,
129615,63,3,109,0,
12962327,3,110,0,327,
129633,111,0,327,3,
12964112,0,327,3,113,
129650,327,3,114,0,
12966327,3,115,0,327,
129673,116,0,1025,12,
129681,8998,1026,5,63,
129693,109,0,327,3,
12970110,0,327,3,111,
129710,327,3,112,0,
12972327,3,113,0,327,
129733,114,0,327,3,
12974115,0,327,3,116,
129750,327,3,117,0,
12976327,3,118,0,327,
129773,119,0,327,3,
12978120,0,327,3,121,
129790,327,3,122,0,
12980327,3,48,0,327,
129813,49,0,327,3,
1298250,0,327,3,51,
129830,327,3,52,0,
12984327,3,53,0,327,
129853,54,0,327,3,
1298655,0,327,3,56,
129870,327,3,57,0,
12988327,3,65,0,327,
129893,66,0,327,3,
1299067,0,327,3,68,
129910,327,3,69,0,
12992327,3,70,0,327,
129933,71,0,327,3,
1299472,0,327,3,73,
129950,327,3,74,0,
12996327,3,75,0,327,
129973,76,0,327,3,
1299877,0,327,3,78,
129990,327,3,79,0,
13000327,3,80,0,327,
130013,81,0,327,3,
1300282,0,327,3,83,
130030,327,3,84,0,
13004327,3,85,0,327,
130053,86,0,327,3,
1300687,0,327,3,88,
130070,327,3,89,0,
13008327,3,90,0,327,
130093,95,0,327,3,
1301097,0,327,3,98,
130110,327,3,99,0,
13012327,3,100,0,327,
130133,101,0,327,3,
13014102,0,327,3,103,
130150,327,3,104,0,
13016327,3,105,0,1027,
1301712,1,9049,1028,5,
1301863,3,109,0,327,
130193,110,0,327,3,
13020111,0,1029,12,1,
130219079,1030,5,63,3,
13022109,0,327,3,110,
130230,1031,12,1,9108,
130241032,5,63,3,109,
130250,327,3,110,0,
13026327,3,111,0,327,
130273,112,0,327,3,
13028113,0,327,3,114,
130290,327,3,115,0,
13030327,3,116,0,327,
130313,117,0,327,3,
13032118,0,327,3,119,
130330,327,3,120,0,
13034327,3,121,0,327,
130353,122,0,327,3,
1303648,0,327,3,49,
130370,327,3,50,0,
13038327,3,51,0,327,
130393,52,0,327,3,
1304053,0,327,3,54,
130410,327,3,55,0,
13042327,3,56,0,327,
130433,57,0,327,3,
1304465,0,327,3,66,
130450,327,3,67,0,
13046327,3,68,0,327,
130473,69,0,327,3,
1304870,0,327,3,71,
130490,327,3,72,0,
13050327,3,73,0,327,
130513,74,0,327,3,
1305275,0,327,3,76,
130530,327,3,77,0,
13054327,3,78,0,327,
130553,79,0,327,3,
1305680,0,327,3,81,
130570,327,3,82,0,
13058327,3,83,0,327,
130593,84,0,327,3,
1306085,0,327,3,86,
130610,327,3,87,0,
13062327,3,88,0,327,
130633,89,0,327,3,
1306490,0,327,3,95,
130650,327,3,97,0,
13066327,3,98,0,327,
130673,99,0,327,3,
13068100,0,327,3,101,
130690,327,3,102,0,
13070327,3,103,0,327,
130713,104,0,327,3,
13072105,0,327,3,106,
130730,327,3,107,0,
13074327,3,108,0,327,
130751033,11,1,330,0,
130761034,4,26,82,0,
1307779,0,84,0,65,
130780,84,0,73,0,
1307979,0,78,0,95,
130800,84,0,89,0,
1308180,0,69,0,1,
13082-1,3,111,0,327,
130833,112,0,327,3,
13084113,0,327,3,114,
130850,327,3,115,0,
13086327,3,116,0,327,
130873,117,0,327,3,
13088118,0,327,3,119,
130890,327,3,120,0,
13090327,3,121,0,327,
130913,122,0,327,3,
1309248,0,327,3,49,
130930,327,3,50,0,
13094327,3,51,0,327,
130953,52,0,327,3,
1309653,0,327,3,54,
130970,327,3,55,0,
13098327,3,56,0,327,
130993,57,0,327,3,
1310065,0,327,3,66,
131010,327,3,67,0,
13102327,3,68,0,327,
131033,69,0,327,3,
1310470,0,327,3,71,
131050,327,3,72,0,
13106327,3,73,0,327,
131073,74,0,327,3,
1310875,0,327,3,76,
131090,327,3,77,0,
13110327,3,78,0,327,
131113,79,0,327,3,
1311280,0,327,3,81,
131130,327,3,82,0,
13114327,3,83,0,327,
131153,84,0,327,3,
1311685,0,327,3,86,
131170,327,3,87,0,
13118327,3,88,0,327,
131193,89,0,327,3,
1312090,0,327,3,95,
131210,327,3,97,0,
13122327,3,98,0,327,
131233,99,0,327,3,
13124100,0,327,3,101,
131250,327,3,102,0,
13126327,3,103,0,327,
131273,104,0,327,3,
13128105,0,327,3,106,
131290,327,3,107,0,
13130327,3,108,0,327,
131311035,11,1,829,0,
13132330,1,-1,3,112,
131330,327,3,113,0,
13134327,3,114,0,327,
131353,115,0,327,3,
13136116,0,327,3,117,
131370,327,3,118,0,
13138327,3,119,0,327,
131393,120,0,327,3,
13140121,0,327,3,122,
131410,327,3,48,0,
13142327,3,49,0,327,
131433,50,0,327,3,
1314451,0,327,3,52,
131450,327,3,53,0,
13146327,3,54,0,327,
131473,55,0,327,3,
1314856,0,327,3,57,
131490,327,3,65,0,
13150327,3,66,0,327,
131513,67,0,327,3,
1315268,0,327,3,69,
131530,327,3,70,0,
13154327,3,71,0,327,
131553,72,0,327,3,
1315673,0,327,3,74,
131570,327,3,75,0,
13158327,3,76,0,327,
131593,77,0,327,3,
1316078,0,327,3,79,
131610,327,3,80,0,
13162327,3,81,0,327,
131633,82,0,327,3,
1316483,0,327,3,84,
131650,327,3,85,0,
13166327,3,86,0,327,
131673,87,0,327,3,
1316888,0,327,3,89,
131690,327,3,90,0,
13170327,3,95,0,327,
131713,97,0,327,3,
1317298,0,327,3,99,
131730,327,3,100,0,
13174327,3,101,0,327,
131753,102,0,327,3,
13176103,0,327,3,104,
131770,327,3,105,0,
13178327,3,106,0,327,
131793,107,0,327,3,
13180108,0,327,1036,11,
131811,829,0,330,1,
13182-1,3,106,0,327,
131833,107,0,327,3,
13184108,0,327,1037,11,
131851,829,0,330,1,
13186-1,3,117,0,327,
131873,118,0,327,3,
13188119,0,327,3,120,
131890,327,3,121,0,
13190327,3,122,0,327,
131913,48,0,327,3,
1319249,0,327,3,50,
131930,327,3,51,0,
13194327,3,52,0,327,
131953,53,0,327,3,
1319654,0,327,3,55,
131970,327,3,56,0,
13198327,3,57,0,327,
131993,65,0,327,3,
1320066,0,327,3,67,
132010,327,3,68,0,
13202327,3,69,0,327,
132033,70,0,327,3,
1320471,0,327,3,72,
132050,327,3,73,0,
13206327,3,74,0,327,
132073,75,0,327,3,
1320876,0,327,3,77,
132090,327,3,78,0,
13210327,3,79,0,327,
132113,80,0,327,3,
1321281,0,327,3,82,
132130,327,3,83,0,
13214327,3,84,0,327,
132153,85,0,327,3,
1321686,0,327,3,87,
132170,327,3,88,0,
13218327,3,89,0,327,
132193,90,0,327,3,
1322095,0,327,3,97,
132210,327,3,98,0,
13222327,3,99,0,327,
132233,100,0,327,3,
13224101,0,327,3,102,
132250,327,3,103,0,
13226327,3,104,0,327,
132273,105,0,327,3,
13228106,0,327,3,107,
132290,327,3,108,0,
13230327,1038,11,1,829,
132310,330,1,-1,3,
1323298,0,327,3,99,
132330,327,3,100,0,
13234327,3,101,0,327,
132353,102,0,327,3,
13236103,0,327,3,104,
132370,327,3,105,0,
13238327,3,106,0,327,
132393,107,0,327,3,
13240108,0,327,1039,11,
132411,829,0,330,1,
13242-1,3,117,0,327,
132433,118,0,327,3,
13244119,0,327,3,120,
132450,327,3,121,0,
13246327,3,122,0,327,
132473,48,0,327,3,
1324849,0,327,3,50,
132490,327,3,51,0,
13250327,3,52,0,327,
132513,53,0,327,3,
1325254,0,327,3,55,
132530,327,3,56,0,
13254327,3,57,0,327,
132553,65,0,327,3,
1325666,0,327,3,67,
132570,327,3,68,0,
13258327,3,69,0,327,
132593,70,0,327,3,
1326071,0,327,3,72,
132610,327,3,73,0,
13262327,3,74,0,327,
132633,75,0,327,3,
1326476,0,327,3,77,
132650,327,3,78,0,
13266327,3,79,0,327,
132673,80,0,327,3,
1326881,0,327,3,82,
132690,327,3,83,0,
13270327,3,84,0,327,
132713,85,0,327,3,
1327286,0,327,3,87,
132730,327,3,88,0,
13274327,3,89,0,327,
132753,90,0,327,3,
1327695,0,327,3,97,
132770,327,3,98,0,
13278327,3,99,0,327,
132793,100,0,327,3,
13280101,0,327,3,102,
132810,327,3,103,0,
13282327,3,104,0,327,
132833,105,0,327,3,
13284106,0,327,3,107,
132850,327,3,108,0,
13286327,1040,11,1,829,
132870,330,1,-1,3,
13288112,0,327,3,113,
132890,327,3,114,0,
13290327,3,115,0,327,
132913,116,0,327,3,
13292117,0,1041,12,1,
132939731,1042,5,63,3,
13294109,0,327,3,110,
132950,1043,12,1,9760,
132961044,5,63,3,109,
132970,327,3,110,0,
13298327,3,111,0,327,
132993,112,0,327,3,
13300113,0,327,3,114,
133010,327,3,115,0,
13302327,3,116,0,327,
133033,117,0,327,3,
13304118,0,327,3,119,
133050,327,3,120,0,
13306327,3,121,0,327,
133073,122,0,327,3,
1330848,0,327,3,49,
133090,327,3,50,0,
13310327,3,51,0,327,
133113,52,0,327,3,
1331253,0,327,3,54,
133130,327,3,55,0,
13314327,3,56,0,327,
133153,57,0,327,3,
1331665,0,327,3,66,
133170,327,3,67,0,
13318327,3,68,0,327,
133193,69,0,327,3,
1332070,0,327,3,71,
133210,327,3,72,0,
13322327,3,73,0,327,
133233,74,0,327,3,
1332475,0,327,3,76,
133250,327,3,77,0,
13326327,3,78,0,327,
133273,79,0,327,3,
1332880,0,327,3,81,
133290,327,3,82,0,
13330327,3,83,0,327,
133313,84,0,327,3,
1333285,0,327,3,86,
133330,327,3,87,0,
13334327,3,88,0,327,
133353,89,0,327,3,
1333690,0,327,3,95,
133370,1045,12,1,9846,
133381046,5,63,3,109,
133390,327,3,110,0,
13340327,3,111,0,327,
133413,112,0,327,3,
13342113,0,327,3,114,
133430,327,3,115,0,
13344327,3,116,0,1047,
1334512,1,9881,1048,5,
1334663,3,109,0,327,
133473,110,0,327,3,
13348111,0,327,3,112,
133490,327,3,113,0,
13350327,3,114,0,327,
133513,115,0,327,3,
13352116,0,327,3,117,
133530,327,3,118,0,
13354327,3,119,0,327,
133553,120,0,327,3,
13356121,0,327,3,122,
133570,327,3,48,0,
13358327,3,49,0,327,
133593,50,0,327,3,
1336051,0,327,3,52,
133610,327,3,53,0,
13362327,3,54,0,327,
133633,55,0,327,3,
1336456,0,327,3,57,
133650,327,3,65,0,
13366327,3,66,0,327,
133673,67,0,327,3,
1336868,0,327,3,69,
133690,327,3,70,0,
13370327,3,71,0,327,
133713,72,0,327,3,
1337273,0,327,3,74,
133730,327,3,75,0,
13374327,3,76,0,327,
133753,77,0,327,3,
1337678,0,327,3,79,
133770,327,3,80,0,
13378327,3,81,0,327,
133793,82,0,327,3,
1338083,0,327,3,84,
133810,327,3,85,0,
13382327,3,86,0,327,
133833,87,0,327,3,
1338488,0,327,3,89,
133850,327,3,90,0,
13386327,3,95,0,327,
133873,97,0,327,3,
1338898,0,327,3,99,
133890,327,3,100,0,
13390327,3,101,0,327,
133913,102,0,327,3,
13392103,0,327,3,104,
133930,327,3,105,0,
133941049,12,1,9932,1050,
133955,63,3,109,0,
133961051,12,1,9960,1052,
133975,63,3,109,0,
13398327,3,110,0,327,
133993,111,0,327,3,
13400112,0,327,3,113,
134010,327,3,114,0,
13402327,3,115,0,327,
134033,116,0,327,3,
13404117,0,327,3,118,
134050,327,3,119,0,
13406327,3,120,0,327,
134073,121,0,327,3,
13408122,0,327,3,48,
134090,327,3,49,0,
13410327,3,50,0,327,
134113,51,0,327,3,
1341252,0,327,3,53,
134130,327,3,54,0,
13414327,3,55,0,327,
134153,56,0,327,3,
1341657,0,327,3,65,
134170,327,3,66,0,
13418327,3,67,0,327,
134193,68,0,327,3,
1342069,0,327,3,70,
134210,327,3,71,0,
13422327,3,72,0,327,
134233,73,0,327,3,
1342474,0,327,3,75,
134250,327,3,76,0,
13426327,3,77,0,327,
134273,78,0,327,3,
1342879,0,327,3,80,
134290,327,3,81,0,
13430327,3,82,0,327,
134313,83,0,327,3,
1343284,0,327,3,85,
134330,327,3,86,0,
13434327,3,87,0,327,
134353,88,0,327,3,
1343689,0,327,3,90,
134370,327,3,95,0,
13438327,3,97,0,327,
134393,98,0,327,3,
1344099,0,327,3,100,
134410,327,3,101,0,
134421053,12,1,10007,1054,
134435,63,3,109,0,
13444327,3,110,0,327,
134453,111,0,327,3,
13446112,0,327,3,113,
134470,327,3,114,0,
13448327,3,115,0,327,
134493,116,0,327,3,
13450117,0,327,3,118,
134510,327,3,119,0,
13452327,3,120,0,327,
134533,121,0,327,3,
13454122,0,327,3,48,
134550,327,3,49,0,
13456327,3,50,0,327,
134573,51,0,327,3,
1345852,0,327,3,53,
134590,327,3,54,0,
13460327,3,55,0,327,
134613,56,0,327,3,
1346257,0,327,3,65,
134630,327,3,66,0,
13464327,3,67,0,327,
134653,68,0,327,3,
1346669,0,327,3,70,
134670,327,3,71,0,
13468327,3,72,0,327,
134693,73,0,327,3,
1347074,0,327,3,75,
134710,327,3,76,0,
13472327,3,77,0,327,
134733,78,0,327,3,
1347479,0,327,3,80,
134750,327,3,81,0,
13476327,3,82,0,327,
134773,83,0,327,3,
1347884,0,327,3,85,
134790,327,3,86,0,
13480327,3,87,0,327,
134813,88,0,327,3,
1348289,0,327,3,90,
134830,327,3,95,0,
134841055,12,1,10093,1056,
134855,63,3,109,0,
13486327,3,110,0,327,
134873,111,0,327,3,
13488112,0,1057,12,1,
1348910124,1058,5,63,3,
13490109,0,327,3,110,
134910,327,3,111,0,
13492327,3,112,0,327,
134933,113,0,327,3,
13494114,0,327,3,115,
134950,327,3,116,0,
13496327,3,117,0,327,
134973,118,0,327,3,
13498119,0,327,3,120,
134990,327,3,121,0,
13500327,3,122,0,327,
135013,48,0,327,3,
1350249,0,327,3,50,
135030,327,3,51,0,
13504327,3,52,0,327,
135053,53,0,327,3,
1350654,0,327,3,55,
135070,327,3,56,0,
13508327,3,57,0,327,
135093,65,0,327,3,
1351066,0,327,3,67,
135110,327,3,68,0,
13512327,3,69,0,327,
135133,70,0,327,3,
1351471,0,327,3,72,
135150,327,3,73,0,
13516327,3,74,0,327,
135173,75,0,327,3,
1351876,0,327,3,77,
135190,327,3,78,0,
13520327,3,79,0,327,
135213,80,0,327,3,
1352281,0,327,3,82,
135230,327,3,83,0,
13524327,3,84,0,327,
135253,85,0,327,3,
1352686,0,327,3,87,
135270,327,3,88,0,
13528327,3,89,0,327,
135293,90,0,327,3,
1353095,0,327,3,97,
135310,327,3,98,0,
13532327,3,99,0,327,
135333,100,0,327,3,
13534101,0,1059,12,1,
1353510171,1060,5,63,3,
13536109,0,327,3,110,
135370,327,3,111,0,
13538327,3,112,0,327,
135393,113,0,327,3,
13540114,0,1061,12,1,
1354110204,1062,5,63,3,
13542109,0,1063,12,1,
1354310232,1064,5,63,3,
13544109,0,327,3,110,
135450,327,3,111,0,
13546327,3,112,0,327,
135473,113,0,327,3,
13548114,0,327,3,115,
135490,327,3,116,0,
13550327,3,117,0,327,
135513,118,0,327,3,
13552119,0,327,3,120,
135530,327,3,121,0,
13554327,3,122,0,327,
135553,48,0,327,3,
1355649,0,327,3,50,
135570,327,3,51,0,
13558327,3,52,0,327,
135593,53,0,327,3,
1356054,0,327,3,55,
135610,327,3,56,0,
13562327,3,57,0,327,
135633,65,0,327,3,
1356466,0,327,3,67,
135650,327,3,68,0,
13566327,3,69,0,327,
135673,70,0,327,3,
1356871,0,327,3,72,
135690,327,3,73,0,
13570327,3,74,0,327,
135713,75,0,327,3,
1357276,0,327,3,77,
135730,327,3,78,0,
13574327,3,79,0,327,
135753,80,0,327,3,
1357681,0,327,3,82,
135770,327,3,83,0,
13578327,3,84,0,327,
135793,85,0,327,3,
1358086,0,327,3,87,
135810,327,3,88,0,
13582327,3,89,0,327,
135833,90,0,327,3,
1358495,0,327,3,97,
135850,327,3,98,0,
13586327,3,99,0,327,
135873,100,0,327,3,
13588101,0,327,3,102,
135890,327,3,103,0,
13590327,3,104,0,327,
135913,105,0,1065,12,
135921,10283,1066,5,63,
135933,109,0,327,3,
13594110,0,327,3,111,
135950,327,3,112,0,
13596327,3,113,0,327,
135973,114,0,327,3,
13598115,0,1067,12,1,
1359910317,1068,5,63,3,
13600109,0,327,3,110,
136010,327,3,111,0,
13602327,3,112,0,327,
136033,113,0,327,3,
13604114,0,327,3,115,
136050,1069,12,1,10351,
136061070,5,63,3,109,
136070,327,3,110,0,
13608327,3,111,0,327,
136093,112,0,327,3,
13610113,0,327,3,114,
136110,327,3,115,0,
13612327,3,116,0,327,
136133,117,0,327,3,
13614118,0,327,3,119,
136150,327,3,120,0,
13616327,3,121,0,327,
136173,122,0,327,3,
1361848,0,327,3,49,
136190,327,3,50,0,
13620327,3,51,0,327,
136213,52,0,327,3,
1362253,0,327,3,54,
136230,327,3,55,0,
13624327,3,56,0,327,
136253,57,0,327,3,
1362665,0,327,3,66,
136270,327,3,67,0,
13628327,3,68,0,327,
136293,69,0,327,3,
1363070,0,327,3,71,
136310,327,3,72,0,
13632327,3,73,0,327,
136333,74,0,327,3,
1363475,0,327,3,76,
136350,327,3,77,0,
13636327,3,78,0,327,
136373,79,0,327,3,
1363880,0,327,3,81,
136390,327,3,82,0,
13640327,3,83,0,327,
136413,84,0,327,3,
1364285,0,327,3,86,
136430,327,3,87,0,
13644327,3,88,0,327,
136453,89,0,327,3,
1364690,0,327,3,95,
136470,327,3,97,0,
13648327,3,98,0,327,
136493,99,0,327,3,
13650100,0,327,3,101,
136510,327,3,102,0,
13652327,3,103,0,327,
136533,104,0,327,3,
13654105,0,1071,12,1,
1365510402,1072,5,63,3,
13656109,0,327,3,110,
136570,327,3,111,0,
136581073,12,1,10432,1074,
136595,63,3,109,0,
13660327,3,110,0,1075,
1366112,1,10461,1076,5,
1366263,3,109,0,327,
136633,110,0,327,3,
13664111,0,327,3,112,
136650,327,3,113,0,
13666327,3,114,0,327,
136673,115,0,1077,12,
136681,10495,1078,5,63,
136693,109,0,327,3,
13670110,0,327,3,111,
136710,327,3,112,0,
13672327,3,113,0,327,
136733,114,0,327,3,
13674115,0,327,3,116,
136750,327,3,117,0,
13676327,3,118,0,327,
136773,119,0,327,3,
13678120,0,327,3,121,
136790,327,3,122,0,
13680327,3,48,0,327,
136813,49,0,327,3,
1368250,0,327,3,51,
136830,327,3,52,0,
13684327,3,53,0,327,
136853,54,0,327,3,
1368655,0,327,3,56,
136870,327,3,57,0,
13688327,3,65,0,327,
136893,66,0,327,3,
1369067,0,327,3,68,
136910,327,3,69,0,
13692327,3,70,0,327,
136933,71,0,327,3,
1369472,0,327,3,73,
136950,327,3,74,0,
13696327,3,75,0,327,
136973,76,0,327,3,
1369877,0,327,3,78,
136990,327,3,79,0,
13700327,3,80,0,327,
137013,81,0,327,3,
1370282,0,327,3,83,
137030,327,3,84,0,
13704327,3,85,0,327,
137053,86,0,327,3,
1370687,0,327,3,88,
137070,327,3,89,0,
13708327,3,90,0,327,
137093,95,0,327,3,
1371097,0,327,3,98,
137110,327,3,99,0,
13712327,3,100,0,327,
137133,101,0,327,3,
13714102,0,327,3,103,
137150,327,3,104,0,
13716327,3,105,0,327,
137173,106,0,327,3,
13718107,0,327,3,108,
137190,327,1079,11,1,
13720720,0,1080,4,52,
1372182,0,85,0,78,
137220,95,0,84,0,
1372373,0,77,0,69,
137240,95,0,80,0,
1372569,0,82,0,77,
137260,73,0,83,0,
1372783,0,73,0,79,
137280,78,0,83,0,
1372995,0,69,0,86,
137300,69,0,78,0,
1373184,0,1,-1,3,
13732116,0,327,3,117,
137330,327,3,118,0,
13734327,3,119,0,327,
137353,120,0,327,3,
13736121,0,327,3,122,
137370,327,3,48,0,
13738327,3,49,0,327,
137393,50,0,327,3,
1374051,0,327,3,52,
137410,327,3,53,0,
13742327,3,54,0,327,
137433,55,0,327,3,
1374456,0,327,3,57,
137450,327,3,65,0,
13746327,3,66,0,327,
137473,67,0,327,3,
1374868,0,327,3,69,
137490,327,3,70,0,
13750327,3,71,0,327,
137513,72,0,327,3,
1375273,0,327,3,74,
137530,327,3,75,0,
13754327,3,76,0,327,
137553,77,0,327,3,
1375678,0,327,3,79,
137570,327,3,80,0,
13758327,3,81,0,327,
137593,82,0,327,3,
1376083,0,327,3,84,
137610,327,3,85,0,
13762327,3,86,0,327,
137633,87,0,327,3,
1376488,0,327,3,89,
137650,327,3,90,0,
13766327,3,95,0,327,
137673,97,0,327,3,
1376898,0,327,3,99,
137690,327,3,100,0,
13770327,3,101,0,327,
137713,102,0,327,3,
13772103,0,327,3,104,
137730,327,3,105,0,
13774327,3,106,0,327,
137753,107,0,327,3,
13776108,0,327,1081,11,
137771,829,0,330,1,
13778-1,3,111,0,327,
137793,112,0,327,3,
13780113,0,327,3,114,
137810,327,3,115,0,
13782327,3,116,0,327,
137833,117,0,327,3,
13784118,0,327,3,119,
137850,327,3,120,0,
13786327,3,121,0,327,
137873,122,0,327,3,
1378848,0,327,3,49,
137890,327,3,50,0,
13790327,3,51,0,327,
137913,52,0,327,3,
1379253,0,327,3,54,
137930,327,3,55,0,
13794327,3,56,0,327,
137953,57,0,327,3,
1379665,0,327,3,66,
137970,327,3,67,0,
13798327,3,68,0,327,
137993,69,0,327,3,
1380070,0,327,3,71,
138010,327,3,72,0,
13802327,3,73,0,327,
138033,74,0,327,3,
1380475,0,327,3,76,
138050,327,3,77,0,
13806327,3,78,0,327,
138073,79,0,327,3,
1380880,0,327,3,81,
138090,327,3,82,0,
13810327,3,83,0,327,
138113,84,0,327,3,
1381285,0,327,3,86,
138130,327,3,87,0,
13814327,3,88,0,327,
138153,89,0,327,3,
1381690,0,327,3,95,
138170,327,3,97,0,
13818327,3,98,0,327,
138193,99,0,327,3,
13820100,0,327,3,101,
138210,327,3,102,0,
13822327,3,103,0,327,
138233,104,0,327,3,
13824105,0,327,3,106,
138250,327,3,107,0,
13826327,3,108,0,327,
138271082,11,1,829,0,
13828330,1,-1,3,112,
138290,327,3,113,0,
13830327,3,114,0,327,
138313,115,0,327,3,
13832116,0,327,3,117,
138330,327,3,118,0,
13834327,3,119,0,327,
138353,120,0,327,3,
13836121,0,327,3,122,
138370,327,3,48,0,
13838327,3,49,0,327,
138393,50,0,327,3,
1384051,0,327,3,52,
138410,327,3,53,0,
13842327,3,54,0,327,
138433,55,0,327,3,
1384456,0,327,3,57,
138450,327,3,65,0,
13846327,3,66,0,327,
138473,67,0,327,3,
1384868,0,327,3,69,
138490,327,3,70,0,
13850327,3,71,0,327,
138513,72,0,327,3,
1385273,0,327,3,74,
138530,327,3,75,0,
13854327,3,76,0,327,
138553,77,0,327,3,
1385678,0,327,3,79,
138570,327,3,80,0,
13858327,3,81,0,327,
138593,82,0,327,3,
1386083,0,327,3,84,
138610,327,3,85,0,
13862327,3,86,0,327,
138633,87,0,327,3,
1386488,0,327,3,89,
138650,327,3,90,0,
13866327,3,95,0,327,
138673,97,0,327,3,
1386898,0,327,3,99,
138690,327,3,100,0,
13870327,3,101,0,327,
138713,102,0,327,3,
13872103,0,327,3,104,
138730,327,3,105,0,
13874327,3,106,0,327,
138753,107,0,327,3,
13876108,0,327,1083,11,
138771,829,0,330,1,
13878-1,3,106,0,327,
138793,107,0,327,3,
13880108,0,327,1084,11,
138811,829,0,330,1,
13882-1,3,116,0,327,
138833,117,0,327,3,
13884118,0,327,3,119,
138850,327,3,120,0,
13886327,3,121,0,327,
138873,122,0,327,3,
1388848,0,327,3,49,
138890,327,3,50,0,
13890327,3,51,0,327,
138913,52,0,327,3,
1389253,0,327,3,54,
138930,327,3,55,0,
13894327,3,56,0,327,
138953,57,0,327,3,
1389665,0,327,3,66,
138970,327,3,67,0,
13898327,3,68,0,327,
138993,69,0,327,3,
1390070,0,327,3,71,
139010,327,3,72,0,
13902327,3,73,0,327,
139033,74,0,327,3,
1390475,0,327,3,76,
139050,327,3,77,0,
13906327,3,78,0,327,
139073,79,0,327,3,
1390880,0,327,3,81,
139090,327,3,82,0,
13910327,3,83,0,327,
139113,84,0,327,3,
1391285,0,327,3,86,
139130,327,3,87,0,
13914327,3,88,0,327,
139153,89,0,327,3,
1391690,0,327,3,95,
139170,327,3,97,0,
13918327,3,98,0,327,
139193,99,0,327,3,
13920100,0,327,3,101,
139210,327,3,102,0,
13922327,3,103,0,327,
139233,104,0,327,3,
13924105,0,327,3,106,
139250,327,3,107,0,
13926327,3,108,0,327,
139271085,11,1,829,0,
13928330,1,-1,3,116,
139290,327,3,117,0,
13930327,3,118,0,327,
139313,119,0,327,3,
13932120,0,327,3,121,
139330,327,3,122,0,
13934327,3,48,0,327,
139353,49,0,327,3,
1393650,0,327,3,51,
139370,327,3,52,0,
13938327,3,53,0,327,
139393,54,0,327,3,
1394055,0,327,3,56,
139410,327,3,57,0,
13942327,3,65,0,327,
139433,66,0,327,3,
1394467,0,327,3,68,
139450,327,3,69,0,
13946327,3,70,0,327,
139473,71,0,327,3,
1394872,0,327,3,73,
139490,327,3,74,0,
13950327,3,75,0,327,
139513,76,0,327,3,
1395277,0,327,3,78,
139530,327,3,79,0,
13954327,3,80,0,327,
139553,81,0,327,3,
1395682,0,327,3,83,
139570,327,3,84,0,
13958327,3,85,0,327,
139593,86,0,327,3,
1396087,0,327,3,88,
139610,327,3,89,0,
13962327,3,90,0,327,
139633,95,0,327,3,
1396497,0,327,3,98,
139650,327,3,99,0,
13966327,3,100,0,327,
139673,101,0,327,3,
13968102,0,327,3,103,
139690,327,3,104,0,
13970327,3,105,0,327,
139713,106,0,327,3,
13972107,0,327,3,108,
139730,327,1086,11,1,
13974829,0,330,1,-1,
139753,106,0,327,3,
13976107,0,327,3,108,
139770,327,1087,11,1,
13978829,0,330,1,-1,
139793,110,0,327,3,
13980111,0,327,3,112,
139810,327,3,113,0,
13982327,3,114,0,327,
139833,115,0,327,3,
13984116,0,327,3,117,
139850,327,3,118,0,
13986327,3,119,0,327,
139873,120,0,327,3,
13988121,0,327,3,122,
139890,327,3,48,0,
13990327,3,49,0,327,
139913,50,0,327,3,
1399251,0,327,3,52,
139930,327,3,53,0,
13994327,3,54,0,327,
139953,55,0,327,3,
1399656,0,327,3,57,
139970,327,3,65,0,
13998327,3,66,0,327,
139993,67,0,327,3,
1400068,0,327,3,69,
140010,327,3,70,0,
14002327,3,71,0,327,
140033,72,0,327,3,
1400473,0,327,3,74,
140050,327,3,75,0,
14006327,3,76,0,327,
140073,77,0,327,3,
1400878,0,327,3,79,
140090,327,3,80,0,
14010327,3,81,0,327,
140113,82,0,327,3,
1401283,0,327,3,84,
140130,327,3,85,0,
14014327,3,86,0,327,
140153,87,0,327,3,
1401688,0,327,3,89,
140170,327,3,90,0,
14018327,3,95,0,327,
140193,97,0,327,3,
1402098,0,327,3,99,
140210,327,3,100,0,
14022327,3,101,0,327,
140233,102,0,327,3,
14024103,0,327,3,104,
140250,327,3,105,0,
14026327,3,106,0,327,
140273,107,0,327,3,
14028108,0,327,1088,11,
140291,829,0,330,1,
14030-1,3,115,0,327,
140313,116,0,327,3,
14032117,0,327,3,118,
140330,327,3,119,0,
14034327,3,120,0,327,
140353,121,0,327,3,
14036122,0,327,3,48,
140370,327,3,49,0,
14038327,3,50,0,327,
140393,51,0,327,3,
1404052,0,327,3,53,
140410,327,3,54,0,
14042327,3,55,0,327,
140433,56,0,327,3,
1404457,0,327,3,65,
140450,327,3,66,0,
14046327,3,67,0,327,
140473,68,0,327,3,
1404869,0,327,3,70,
140490,327,3,71,0,
14050327,3,72,0,327,
140513,73,0,327,3,
1405274,0,327,3,75,
140530,327,3,76,0,
14054327,3,77,0,327,
140553,78,0,327,3,
1405679,0,327,3,80,
140570,327,3,81,0,
14058327,3,82,0,327,
140593,83,0,327,3,
1406084,0,327,3,85,
140610,327,3,86,0,
14062327,3,87,0,327,
140633,88,0,327,3,
1406489,0,327,3,90,
140650,327,3,95,0,
14066327,3,97,0,327,
140673,98,0,327,3,
1406899,0,327,3,100,
140690,327,3,101,0,
14070327,3,102,0,327,
140713,103,0,327,3,
14072104,0,327,3,105,
140730,327,3,106,0,
14074327,3,107,0,327,
140753,108,0,327,1089,
1407611,1,829,0,330,
140771,-1,3,102,0,
14078327,3,103,0,327,
140793,104,0,327,3,
14080105,0,327,3,106,
140810,327,3,107,0,
14082327,3,108,0,327,
140831090,11,1,829,0,
14084330,1,-1,3,113,
140850,327,3,114,0,
14086327,3,115,0,327,
140873,116,0,327,3,
14088117,0,327,3,118,
140890,327,3,119,0,
14090327,3,120,0,327,
140913,121,0,327,3,
14092122,0,327,3,48,
140930,327,3,49,0,
14094327,3,50,0,327,
140953,51,0,327,3,
1409652,0,327,3,53,
140970,327,3,54,0,
14098327,3,55,0,327,
140993,56,0,327,3,
1410057,0,327,3,65,
141010,327,3,66,0,
14102327,3,67,0,327,
141033,68,0,327,3,
1410469,0,327,3,70,
141050,327,3,71,0,
14106327,3,72,0,327,
141073,73,0,327,3,
1410874,0,327,3,75,
141090,327,3,76,0,
14110327,3,77,0,327,
141113,78,0,327,3,
1411279,0,327,3,80,
141130,327,3,81,0,
14114327,3,82,0,327,
141153,83,0,327,3,
1411684,0,327,3,85,
141170,327,3,86,0,
14118327,3,87,0,327,
141193,88,0,327,3,
1412089,0,327,3,90,
141210,327,3,95,0,
14122327,3,97,0,327,
141233,98,0,327,3,
1412499,0,327,3,100,
141250,327,3,101,0,
14126327,3,102,0,327,
141273,103,0,327,3,
14128104,0,327,3,105,
141290,327,3,106,0,
14130327,3,107,0,327,
141313,108,0,327,1091,
1413211,1,829,0,330,
141331,-1,3,97,0,
14134327,3,98,0,327,
141353,99,0,327,3,
14136100,0,327,3,101,
141370,327,3,102,0,
14138327,3,103,0,327,
141393,104,0,327,3,
14140105,0,327,3,106,
141410,327,3,107,0,
14142327,3,108,0,327,
141431092,11,1,829,0,
14144330,1,-1,3,102,
141450,327,3,103,0,
14146327,3,104,0,327,
141473,105,0,327,3,
14148106,0,327,3,107,
141490,327,3,108,0,
14150327,1093,11,1,829,
141510,330,1,-1,3,
14152110,0,327,3,111,
141530,327,3,112,0,
14154327,3,113,0,327,
141553,114,0,327,3,
14156115,0,327,3,116,
141570,327,3,117,0,
14158327,3,118,0,327,
141593,119,0,327,3,
14160120,0,327,3,121,
141610,327,3,122,0,
14162327,3,48,0,327,
141633,49,0,327,3,
1416450,0,327,3,51,
141650,327,3,52,0,
14166327,3,53,0,327,
141673,54,0,327,3,
1416855,0,327,3,56,
141690,327,3,57,0,
14170327,3,65,0,327,
141713,66,0,327,3,
1417267,0,327,3,68,
141730,327,3,69,0,
14174327,3,70,0,327,
141753,71,0,327,3,
1417672,0,327,3,73,
141770,327,3,74,0,
14178327,3,75,0,327,
141793,76,0,327,3,
1418077,0,327,3,78,
141810,327,3,79,0,
14182327,3,80,0,327,
141833,81,0,327,3,
1418482,0,327,3,83,
141850,327,3,84,0,
14186327,3,85,0,327,
141873,86,0,327,3,
1418887,0,327,3,88,
141890,327,3,89,0,
14190327,3,90,0,327,
141913,95,0,327,3,
1419297,0,327,3,98,
141930,327,3,99,0,
14194327,3,100,0,327,
141953,101,0,327,3,
14196102,0,327,3,103,
141970,327,3,104,0,
14198327,3,105,0,327,
141993,106,0,327,3,
14200107,0,327,3,108,
142010,327,1094,11,1,
14202829,0,330,1,-1,
142033,106,0,327,3,
14204107,0,327,3,108,
142050,327,1095,11,1,
14206829,0,330,1,-1,
142073,117,0,327,3,
14208118,0,327,3,119,
142090,327,3,120,0,
14210327,3,121,0,327,
142113,122,0,327,3,
1421248,0,327,3,49,
142130,327,3,50,0,
14214327,3,51,0,327,
142153,52,0,327,3,
1421653,0,327,3,54,
142170,327,3,55,0,
14218327,3,56,0,327,
142193,57,0,327,3,
1422065,0,327,3,66,
142210,327,3,67,0,
14222327,3,68,0,327,
142233,69,0,327,3,
1422470,0,327,3,71,
142250,327,3,72,0,
14226327,3,73,0,327,
142273,74,0,327,3,
1422875,0,327,3,76,
142290,327,3,77,0,
14230327,3,78,0,327,
142313,79,0,327,3,
1423280,0,327,3,81,
142330,327,3,82,0,
14234327,3,83,0,327,
142353,84,0,327,3,
1423685,0,327,3,86,
142370,327,3,87,0,
14238327,3,88,0,327,
142393,89,0,327,3,
1424090,0,327,3,95,
142410,327,3,97,0,
14242327,3,98,0,327,
142433,99,0,327,3,
14244100,0,327,3,101,
142450,327,3,102,0,
14246327,3,103,0,327,
142473,104,0,327,3,
14248105,0,327,3,106,
142490,327,3,107,0,
14250327,3,108,0,327,
142511096,11,1,829,0,
14252330,1,-1,3,97,
142530,327,3,98,0,
14254327,3,99,0,327,
142553,100,0,327,3,
14256101,0,327,3,102,
142570,327,3,103,0,
14258327,3,104,0,327,
142593,105,0,327,3,
14260106,0,327,3,107,
142610,327,3,108,0,
14262327,1097,11,1,829,
142630,330,1,-1,3,
14264111,0,327,3,112,
142650,327,3,113,0,
14266327,3,114,0,327,
142673,115,0,327,3,
14268116,0,327,3,117,
142690,327,3,118,0,
14270327,3,119,0,327,
142713,120,0,327,3,
14272121,0,327,3,122,
142730,327,3,48,0,
14274327,3,49,0,327,
142753,50,0,327,3,
1427651,0,327,3,52,
142770,327,3,53,0,
14278327,3,54,0,327,
142793,55,0,327,3,
1428056,0,327,3,57,
142810,327,3,65,0,
14282327,3,66,0,327,
142833,67,0,327,3,
1428468,0,327,3,69,
142850,327,3,70,0,
14286327,3,71,0,327,
142873,72,0,327,3,
1428873,0,327,3,74,
142890,327,3,75,0,
14290327,3,76,0,327,
142913,77,0,327,3,
1429278,0,327,3,79,
142930,327,3,80,0,
14294327,3,81,0,327,
142953,82,0,327,3,
1429683,0,327,3,84,
142970,327,3,85,0,
14298327,3,86,0,327,
142993,87,0,327,3,
1430088,0,327,3,89,
143010,327,3,90,0,
14302327,3,95,0,327,
143033,97,0,327,3,
1430498,0,327,3,99,
143050,327,3,100,0,
14306327,3,101,0,327,
143073,102,0,327,3,
14308103,0,327,3,104,
143090,327,3,105,0,
14310327,3,106,0,327,
143113,107,0,327,3,
14312108,0,327,1098,11,
143131,829,0,330,1,
14314-1,3,118,0,327,
143153,119,0,327,3,
14316120,0,327,3,121,
143170,327,3,122,0,
14318327,3,48,0,327,
143193,49,0,327,3,
1432050,0,327,3,51,
143210,327,3,52,0,
14322327,3,53,0,327,
143233,54,0,327,3,
1432455,0,327,3,56,
143250,327,3,57,0,
14326327,3,65,0,327,
143273,66,0,327,3,
1432867,0,327,3,68,
143290,327,3,69,0,
14330327,3,70,0,327,
143313,71,0,327,3,
1433272,0,327,3,73,
143330,327,3,74,0,
14334327,3,75,0,327,
143353,76,0,327,3,
1433677,0,327,3,78,
143370,327,3,79,0,
14338327,3,80,0,327,
143393,81,0,327,3,
1434082,0,327,3,83,
143410,327,3,84,0,
14342327,3,85,0,327,
143433,86,0,327,3,
1434487,0,327,3,88,
143450,327,3,89,0,
14346327,3,90,0,327,
143473,95,0,327,3,
1434897,0,327,3,98,
143490,327,3,99,0,
14350327,3,100,0,327,
143513,101,0,1099,12,
143521,12022,1100,5,63,
143533,109,0,1101,12,
143541,12050,1102,5,63,
143553,109,0,327,3,
14356110,0,327,3,111,
143570,1103,12,1,12080,
143581104,5,63,3,109,
143590,327,3,110,0,
14360327,3,111,0,327,
143613,112,0,327,3,
14362113,0,327,3,114,
143630,327,3,115,0,
14364327,3,116,0,1105,
1436512,1,12115,1106,5,
1436663,3,109,0,327,
143673,110,0,327,3,
14368111,0,327,3,112,
143690,327,3,113,0,
14370327,3,114,0,327,
143713,115,0,327,3,
14372116,0,327,3,117,
143730,327,3,118,0,
14374327,3,119,0,327,
143753,120,0,327,3,
14376121,0,327,3,122,
143770,327,3,48,0,
14378327,3,49,0,327,
143793,50,0,327,3,
1438051,0,327,3,52,
143810,327,3,53,0,
14382327,3,54,0,327,
143833,55,0,327,3,
1438456,0,327,3,57,
143850,327,3,65,0,
14386327,3,66,0,327,
143873,67,0,327,3,
1438868,0,327,3,69,
143890,327,3,70,0,
14390327,3,71,0,327,
143913,72,0,327,3,
1439273,0,327,3,74,
143930,327,3,75,0,
14394327,3,76,0,327,
143953,77,0,327,3,
1439678,0,327,3,79,
143970,327,3,80,0,
14398327,3,81,0,327,
143993,82,0,327,3,
1440083,0,327,3,84,
144010,327,3,85,0,
14402327,3,86,0,327,
144033,87,0,327,3,
1440488,0,327,3,89,
144050,327,3,90,0,
14406327,3,95,0,327,
144073,97,0,327,3,
1440898,0,327,3,99,
144090,327,3,100,0,
14410327,3,101,0,1107,
1441112,1,12162,1108,5,
1441263,3,109,0,327,
144133,110,0,327,3,
14414111,0,327,3,112,
144150,327,3,113,0,
14416327,3,114,0,327,
144173,115,0,327,3,
14418116,0,327,3,117,
144190,327,3,118,0,
14420327,3,119,0,327,
144213,120,0,327,3,
14422121,0,327,3,122,
144230,327,3,48,0,
14424327,3,49,0,327,
144253,50,0,327,3,
1442651,0,327,3,52,
144270,327,3,53,0,
14428327,3,54,0,327,
144293,55,0,327,3,
1443056,0,327,3,57,
144310,327,3,65,0,
14432327,3,66,0,327,
144333,67,0,327,3,
1443468,0,327,3,69,
144350,327,3,70,0,
14436327,3,71,0,327,
144373,72,0,327,3,
1443873,0,327,3,74,
144390,327,3,75,0,
14440327,3,76,0,327,
144413,77,0,327,3,
1444278,0,327,3,79,
144430,327,3,80,0,
14444327,3,81,0,327,
144453,82,0,327,3,
1444683,0,327,3,84,
144470,327,3,85,0,
14448327,3,86,0,327,
144493,87,0,327,3,
1445088,0,327,3,89,
144510,327,3,90,0,
14452327,3,95,0,1109,
1445312,1,12248,1110,5,
1445463,3,109,0,327,
144553,110,0,327,3,
14456111,0,327,3,112,
144570,327,3,113,0,
14458327,3,114,0,327,
144593,115,0,327,3,
14460116,0,327,3,117,
144610,327,3,118,0,
14462327,3,119,0,327,
144633,120,0,327,3,
14464121,0,327,3,122,
144650,327,3,48,0,
14466327,3,49,0,327,
144673,50,0,327,3,
1446851,0,327,3,52,
144690,327,3,53,0,
14470327,3,54,0,327,
144713,55,0,327,3,
1447256,0,327,3,57,
144730,327,3,65,0,
14474327,3,66,0,327,
144753,67,0,327,3,
1447668,0,327,3,69,
144770,327,3,70,0,
14478327,3,71,0,327,
144793,72,0,327,3,
1448073,0,327,3,74,
144810,327,3,75,0,
14482327,3,76,0,327,
144833,77,0,327,3,
1448478,0,327,3,79,
144850,327,3,80,0,
14486327,3,81,0,327,
144873,82,0,327,3,
1448883,0,327,3,84,
144890,327,3,85,0,
14490327,3,86,0,327,
144913,87,0,327,3,
1449288,0,327,3,89,
144930,327,3,90,0,
14494327,3,95,0,327,
144953,97,0,327,3,
1449698,0,327,3,99,
144970,327,3,100,0,
144981111,12,1,12294,1112,
144995,63,3,109,0,
14500327,3,110,0,327,
145013,111,0,327,3,
14502112,0,327,3,113,
145030,327,3,114,0,
14504327,3,115,0,327,
145053,116,0,327,3,
14506117,0,327,3,118,
145070,327,3,119,0,
14508327,3,120,0,327,
145093,121,0,327,3,
14510122,0,327,3,48,
145110,327,3,49,0,
14512327,3,50,0,327,
145133,51,0,327,3,
1451452,0,327,3,53,
145150,327,3,54,0,
14516327,3,55,0,327,
145173,56,0,327,3,
1451857,0,327,3,65,
145190,327,3,66,0,
14520327,3,67,0,327,
145213,68,0,327,3,
1452269,0,327,3,70,
145230,327,3,71,0,
14524327,3,72,0,327,
145253,73,0,327,3,
1452674,0,327,3,75,
145270,327,3,76,0,
14528327,3,77,0,327,
145293,78,0,327,3,
1453079,0,327,3,80,
145310,327,3,81,0,
14532327,3,82,0,327,
145333,83,0,327,3,
1453484,0,327,3,85,
145350,327,3,86,0,
14536327,3,87,0,327,
145373,88,0,327,3,
1453889,0,327,3,90,
145390,327,3,95,0,
14540327,3,97,0,1113,
1454112,1,12337,1114,5,
1454263,3,109,0,327,
145433,110,0,327,3,
14544111,0,327,3,112,
145450,327,3,113,0,
14546327,3,114,0,327,
145473,115,0,327,3,
14548116,0,1115,12,1,
1454912372,1116,5,63,3,
14550109,0,327,3,110,
145510,327,3,111,0,
14552327,3,112,0,327,
145533,113,0,327,3,
14554114,0,327,3,115,
145550,327,3,116,0,
14556327,3,117,0,327,
145573,118,0,327,3,
14558119,0,327,3,120,
145590,327,3,121,0,
14560327,3,122,0,327,
145613,48,0,327,3,
1456249,0,327,3,50,
145630,327,3,51,0,
14564327,3,52,0,327,
145653,53,0,327,3,
1456654,0,327,3,55,
145670,327,3,56,0,
14568327,3,57,0,327,
145693,65,0,327,3,
1457066,0,327,3,67,
145710,327,3,68,0,
14572327,3,69,0,327,
145733,70,0,327,3,
1457471,0,327,3,72,
145750,327,3,73,0,
14576327,3,74,0,327,
145773,75,0,327,3,
1457876,0,327,3,77,
145790,327,3,78,0,
14580327,3,79,0,327,
145813,80,0,327,3,
1458281,0,327,3,82,
145830,327,3,83,0,
14584327,3,84,0,327,
145853,85,0,327,3,
1458686,0,327,3,87,
145870,327,3,88,0,
14588327,3,89,0,327,
145893,90,0,327,3,
1459095,0,327,3,97,
145910,1117,12,1,12415,
145921118,5,63,3,109,
145930,327,3,110,0,
14594327,3,111,0,327,
145953,112,0,327,3,
14596113,0,327,3,114,
145970,327,3,115,0,
14598327,3,116,0,327,
145993,117,0,327,3,
14600118,0,327,3,119,
146010,327,3,120,0,
14602327,3,121,0,327,
146033,122,0,327,3,
1460448,0,327,3,49,
146050,327,3,50,0,
14606327,3,51,0,327,
146073,52,0,327,3,
1460853,0,327,3,54,
146090,327,3,55,0,
14610327,3,56,0,327,
146113,57,0,327,3,
1461265,0,327,3,66,
146130,327,3,67,0,
14614327,3,68,0,327,
146153,69,0,327,3,
1461670,0,327,3,71,
146170,327,3,72,0,
14618327,3,73,0,327,
146193,74,0,327,3,
1462075,0,327,3,76,
146210,327,3,77,0,
14622327,3,78,0,327,
146233,79,0,327,3,
1462480,0,327,3,81,
146250,327,3,82,0,
14626327,3,83,0,327,
146273,84,0,327,3,
1462885,0,327,3,86,
146290,327,3,87,0,
14630327,3,88,0,327,
146313,89,0,327,3,
1463290,0,327,3,95,
146330,327,3,97,0,
14634327,3,98,0,327,
146353,99,0,327,3,
14636100,0,327,3,101,
146370,327,3,102,0,
14638327,3,103,0,327,
146393,104,0,327,3,
14640105,0,327,3,106,
146410,327,3,107,0,
14642327,3,108,0,327,
146431119,11,1,705,0,
146441120,4,34,82,0,
1464569,0,77,0,79,
146460,84,0,69,0,
1464795,0,68,0,65,
146480,84,0,65,0,
1464995,0,69,0,86,
146500,69,0,78,0,
1465184,0,1,-1,3,
1465298,0,327,3,99,
146530,327,3,100,0,
14654327,3,101,0,327,
146553,102,0,327,3,
14656103,0,327,3,104,
146570,327,3,105,0,
14658327,3,106,0,327,
146593,107,0,327,3,
14660108,0,327,1121,11,
146611,829,0,330,1,
14662-1,3,117,0,327,
146633,118,0,327,3,
14664119,0,327,3,120,
146650,327,3,121,0,
14666327,3,122,0,327,
146673,48,0,327,3,
1466849,0,327,3,50,
146690,327,3,51,0,
14670327,3,52,0,327,
146713,53,0,327,3,
1467254,0,327,3,55,
146730,327,3,56,0,
14674327,3,57,0,327,
146753,65,0,327,3,
1467666,0,327,3,67,
146770,327,3,68,0,
14678327,3,69,0,327,
146793,70,0,327,3,
1468071,0,327,3,72,
146810,327,3,73,0,
14682327,3,74,0,327,
146833,75,0,327,3,
1468476,0,327,3,77,
146850,327,3,78,0,
14686327,3,79,0,327,
146873,80,0,327,3,
1468881,0,327,3,82,
146890,327,3,83,0,
14690327,3,84,0,327,
146913,85,0,327,3,
1469286,0,327,3,87,
146930,327,3,88,0,
14694327,3,89,0,327,
146953,90,0,327,3,
1469695,0,327,3,97,
146970,327,3,98,0,
14698327,3,99,0,327,
146993,100,0,327,3,
14700101,0,327,3,102,
147010,327,3,103,0,
14702327,3,104,0,327,
147033,105,0,327,3,
14704106,0,327,3,107,
147050,327,3,108,0,
14706327,1122,11,1,829,
147070,330,1,-1,3,
1470898,0,327,3,99,
147090,327,3,100,0,
14710327,3,101,0,327,
147113,102,0,327,3,
14712103,0,327,3,104,
147130,327,3,105,0,
14714327,3,106,0,327,
147153,107,0,327,3,
14716108,0,327,1123,11,
147171,829,0,330,1,
14718-1,3,101,0,327,
147193,102,0,327,3,
14720103,0,327,3,104,
147210,327,3,105,0,
14722327,3,106,0,327,
147233,107,0,327,3,
14724108,0,327,1124,11,
147251,829,0,330,1,
14726-1,3,97,0,327,
147273,98,0,327,3,
1472899,0,327,3,100,
147290,327,3,101,0,
14730327,3,102,0,327,
147313,103,0,327,3,
14732104,0,327,3,105,
147330,327,3,106,0,
14734327,3,107,0,327,
147353,108,0,327,1125,
1473611,1,829,0,330,
147371,-1,3,102,0,
14738327,3,103,0,327,
147393,104,0,327,3,
14740105,0,327,3,106,
147410,327,3,107,0,
14742327,3,108,0,327,
147431126,11,1,829,0,
14744330,1,-1,3,117,
147450,327,3,118,0,
14746327,3,119,0,327,
147473,120,0,327,3,
14748121,0,327,3,122,
147490,327,3,48,0,
14750327,3,49,0,327,
147513,50,0,327,3,
1475251,0,327,3,52,
147530,327,3,53,0,
14754327,3,54,0,327,
147553,55,0,327,3,
1475656,0,327,3,57,
147570,327,3,65,0,
14758327,3,66,0,327,
147593,67,0,327,3,
1476068,0,327,3,69,
147610,327,3,70,0,
14762327,3,71,0,327,
147633,72,0,327,3,
1476473,0,327,3,74,
147650,327,3,75,0,
14766327,3,76,0,327,
147673,77,0,327,3,
1476878,0,327,3,79,
147690,327,3,80,0,
14770327,3,81,0,327,
147713,82,0,327,3,
1477283,0,327,3,84,
147730,327,3,85,0,
14774327,3,86,0,327,
147753,87,0,327,3,
1477688,0,327,3,89,
147770,327,3,90,0,
14778327,3,95,0,327,
147793,97,0,327,3,
1478098,0,327,3,99,
147810,327,3,100,0,
14782327,3,101,0,327,
147833,102,0,327,3,
14784103,0,327,3,104,
147850,327,3,105,0,
14786327,3,106,0,327,
147873,107,0,327,3,
14788108,0,327,1127,11,
147891,829,0,330,1,
14790-1,3,112,0,327,
147913,113,0,327,3,
14792114,0,327,3,115,
147930,327,3,116,0,
14794327,3,117,0,327,
147953,118,0,327,3,
14796119,0,327,3,120,
147970,327,3,121,0,
14798327,3,122,0,327,
147993,48,0,327,3,
1480049,0,327,3,50,
148010,327,3,51,0,
14802327,3,52,0,327,
148033,53,0,327,3,
1480454,0,327,3,55,
148050,327,3,56,0,
14806327,3,57,0,327,
148073,65,0,327,3,
1480866,0,327,3,67,
148090,327,3,68,0,
14810327,3,69,0,327,
148113,70,0,327,3,
1481271,0,327,3,72,
148130,327,3,73,0,
14814327,3,74,0,327,
148153,75,0,327,3,
1481676,0,327,3,77,
148170,327,3,78,0,
14818327,3,79,0,327,
148193,80,0,327,3,
1482081,0,327,3,82,
148210,327,3,83,0,
14822327,3,84,0,327,
148233,85,0,327,3,
1482486,0,327,3,87,
148250,327,3,88,0,
14826327,3,89,0,327,
148273,90,0,327,3,
1482895,0,327,3,97,
148290,327,3,98,0,
14830327,3,99,0,327,
148313,100,0,327,3,
14832101,0,327,3,102,
148330,327,3,103,0,
14834327,3,104,0,327,
148353,105,0,327,3,
14836106,0,327,3,107,
148370,327,3,108,0,
14838327,1128,11,1,829,
148390,330,1,-1,3,
14840110,0,327,3,111,
148410,327,3,112,0,
14842327,3,113,0,327,
148433,114,0,327,3,
14844115,0,327,3,116,
148450,1129,12,1,13137,
148461130,5,63,3,109,
148470,327,3,110,0,
14848327,3,111,0,327,
148493,112,0,327,3,
14850113,0,327,3,114,
148510,327,3,115,0,
14852327,3,116,0,327,
148533,117,0,1131,12,
148541,13173,1132,5,63,
148553,109,0,327,3,
14856110,0,327,3,111,
148570,327,3,112,0,
14858327,3,113,0,327,
148593,114,0,1133,12,
148601,13206,1134,5,63,
148613,109,0,327,3,
14862110,0,1135,12,1,
1486313235,1136,5,63,3,
14864109,0,327,3,110,
148650,327,3,111,0,
14866327,3,112,0,327,
148673,113,0,327,3,
14868114,0,327,3,115,
148690,327,3,116,0,
14870327,3,117,0,327,
148713,118,0,327,3,
14872119,0,327,3,120,
148730,327,3,121,0,
14874327,3,122,0,327,
148753,48,0,327,3,
1487649,0,327,3,50,
148770,327,3,51,0,
14878327,3,52,0,327,
148793,53,0,327,3,
1488054,0,327,3,55,
148810,327,3,56,0,
14882327,3,57,0,327,
148833,65,0,327,3,
1488466,0,327,3,67,
148850,327,3,68,0,
14886327,3,69,0,327,
148873,70,0,327,3,
1488871,0,327,3,72,
148890,327,3,73,0,
14890327,3,74,0,327,
148913,75,0,327,3,
1489276,0,327,3,77,
148930,327,3,78,0,
14894327,3,79,0,327,
148953,80,0,327,3,
1489681,0,327,3,82,
148970,327,3,83,0,
14898327,3,84,0,327,
148993,85,0,327,3,
1490086,0,327,3,87,
149010,327,3,88,0,
14902327,3,89,0,327,
149033,90,0,327,3,
1490495,0,327,3,97,
149050,327,3,98,0,
14906327,3,99,0,327,
149073,100,0,327,3,
14908101,0,327,3,102,
149090,327,3,103,0,
14910327,3,104,0,327,
149113,105,0,327,3,
14912106,0,327,3,107,
149130,327,3,108,0,
14914327,1137,11,1,273,
149150,1138,4,12,82,
149160,69,0,84,0,
1491785,0,82,0,78,
149180,1,-1,3,111,
149190,327,3,112,0,
14920327,3,113,0,327,
149213,114,0,327,3,
14922115,0,327,3,116,
149230,327,3,117,0,
14924327,3,118,0,327,
149253,119,0,327,3,
14926120,0,327,3,121,
149270,327,3,122,0,
14928327,3,48,0,327,
149293,49,0,327,3,
1493050,0,327,3,51,
149310,327,3,52,0,
14932327,3,53,0,327,
149333,54,0,327,3,
1493455,0,327,3,56,
149350,327,3,57,0,
14936327,3,65,0,327,
149373,66,0,327,3,
1493867,0,327,3,68,
149390,327,3,69,0,
14940327,3,70,0,327,
149413,71,0,327,3,
1494272,0,327,3,73,
149430,327,3,74,0,
14944327,3,75,0,327,
149453,76,0,327,3,
1494677,0,327,3,78,
149470,327,3,79,0,
14948327,3,80,0,327,
149493,81,0,327,3,
1495082,0,327,3,83,
149510,327,3,84,0,
14952327,3,85,0,327,
149533,86,0,327,3,
1495487,0,327,3,88,
149550,327,3,89,0,
14956327,3,90,0,327,
149573,95,0,327,3,
1495897,0,327,3,98,
149590,327,3,99,0,
14960327,3,100,0,327,
149613,101,0,327,3,
14962102,0,327,3,103,
149630,327,3,104,0,
14964327,3,105,0,327,
149653,106,0,327,3,
14966107,0,327,3,108,
149670,327,1139,11,1,
14968829,0,330,1,-1,
149693,115,0,327,3,
14970116,0,327,3,117,
149710,327,3,118,0,
14972327,3,119,0,327,
149733,120,0,327,3,
14974121,0,327,3,122,
149750,327,3,48,0,
14976327,3,49,0,327,
149773,50,0,327,3,
1497851,0,327,3,52,
149790,327,3,53,0,
14980327,3,54,0,327,
149813,55,0,327,3,
1498256,0,327,3,57,
149830,327,3,65,0,
14984327,3,66,0,327,
149853,67,0,327,3,
1498668,0,327,3,69,
149870,327,3,70,0,
14988327,3,71,0,327,
149893,72,0,327,3,
1499073,0,327,3,74,
149910,327,3,75,0,
14992327,3,76,0,327,
149933,77,0,327,3,
1499478,0,327,3,79,
149950,327,3,80,0,
14996327,3,81,0,327,
149973,82,0,327,3,
1499883,0,327,3,84,
149990,327,3,85,0,
15000327,3,86,0,327,
150013,87,0,327,3,
1500288,0,327,3,89,
150030,327,3,90,0,
15004327,3,95,0,327,
150053,97,0,327,3,
1500698,0,327,3,99,
150070,327,3,100,0,
15008327,3,101,0,327,
150093,102,0,327,3,
15010103,0,327,3,104,
150110,327,3,105,0,
15012327,3,106,0,327,
150133,107,0,327,3,
15014108,0,327,1140,11,
150151,829,0,330,1,
15016-1,3,118,0,327,
150173,119,0,327,3,
15018120,0,327,3,121,
150190,327,3,122,0,
15020327,3,48,0,327,
150213,49,0,327,3,
1502250,0,327,3,51,
150230,327,3,52,0,
15024327,3,53,0,327,
150253,54,0,327,3,
1502655,0,327,3,56,
150270,327,3,57,0,
15028327,3,65,0,327,
150293,66,0,327,3,
1503067,0,327,3,68,
150310,327,3,69,0,
15032327,3,70,0,327,
150333,71,0,327,3,
1503472,0,327,3,73,
150350,327,3,74,0,
15036327,3,75,0,327,
150373,76,0,327,3,
1503877,0,327,3,78,
150390,327,3,79,0,
15040327,3,80,0,327,
150413,81,0,327,3,
1504282,0,327,3,83,
150430,327,3,84,0,
15044327,3,85,0,327,
150453,86,0,327,3,
1504687,0,327,3,88,
150470,327,3,89,0,
15048327,3,90,0,327,
150493,95,0,327,3,
1505097,0,327,3,98,
150510,327,3,99,0,
15052327,3,100,0,327,
150533,101,0,327,3,
15054102,0,327,3,103,
150550,327,3,104,0,
15056327,3,105,0,327,
150573,106,0,327,3,
15058107,0,327,3,108,
150590,327,1141,11,1,
15060829,0,330,1,-1,
150613,117,0,327,3,
15062118,0,327,3,119,
150630,327,3,120,0,
15064327,3,121,0,327,
150653,122,0,327,3,
1506648,0,327,3,49,
150670,327,3,50,0,
15068327,3,51,0,327,
150693,52,0,327,3,
1507053,0,327,3,54,
150710,327,3,55,0,
15072327,3,56,0,327,
150733,57,0,327,3,
1507465,0,327,3,66,
150750,327,3,67,0,
15076327,3,68,0,327,
150773,69,0,327,3,
1507870,0,327,3,71,
150790,327,3,72,0,
15080327,3,73,0,327,
150813,74,0,327,3,
1508275,0,327,3,76,
150830,327,3,77,0,
15084327,3,78,0,327,
150853,79,0,327,3,
1508680,0,327,3,81,
150870,327,3,82,0,
15088327,3,83,0,327,
150893,84,0,327,3,
1509085,0,327,3,86,
150910,327,3,87,0,
15092327,3,88,0,327,
150933,89,0,327,3,
1509490,0,327,3,95,
150950,327,3,97,0,
15096327,3,98,0,327,
150973,99,0,327,3,
15098100,0,327,3,101,
150990,327,3,102,0,
15100327,3,103,0,327,
151013,104,0,327,3,
15102105,0,327,3,106,
151030,327,3,107,0,
15104327,3,108,0,327,
151051142,11,1,829,0,
15106330,1,-1,3,102,
151070,327,3,103,0,
15108327,3,104,0,327,
151093,105,0,327,3,
15110106,0,327,3,107,
151110,327,3,108,0,
15112327,1143,11,1,829,
151130,330,1,-1,3,
15114115,0,1144,12,1,
1511513776,1145,5,63,3,
15116109,0,327,3,110,
151170,327,3,111,0,
15118327,3,112,0,327,
151193,113,0,327,3,
15120114,0,327,3,115,
151210,327,3,116,0,
151221146,12,1,13811,1147,
151235,63,3,109,0,
15124327,3,110,0,327,
151253,111,0,327,3,
15126112,0,327,3,113,
151270,327,3,114,0,
151281148,12,1,13844,1149,
151295,63,3,109,0,
15130327,3,110,0,327,
151313,111,0,327,3,
15132112,0,327,3,113,
151330,327,3,114,0,
15134327,3,115,0,327,
151353,116,0,327,3,
15136117,0,327,3,118,
151370,327,3,119,0,
15138327,3,120,0,327,
151393,121,0,327,3,
15140122,0,327,3,48,
151410,327,3,49,0,
15142327,3,50,0,327,
151433,51,0,327,3,
1514452,0,327,3,53,
151450,327,3,54,0,
15146327,3,55,0,327,
151473,56,0,327,3,
1514857,0,327,3,65,
151490,327,3,66,0,
15150327,3,67,0,327,
151513,68,0,327,3,
1515269,0,327,3,70,
151530,327,3,71,0,
15154327,3,72,0,327,
151553,73,0,327,3,
1515674,0,327,3,75,
151570,327,3,76,0,
15158327,3,77,0,327,
151593,78,0,327,3,
1516079,0,327,3,80,
151610,327,3,81,0,
15162327,3,82,0,327,
151633,83,0,327,3,
1516484,0,327,3,85,
151650,327,3,86,0,
15166327,3,87,0,327,
151673,88,0,327,3,
1516889,0,327,3,90,
151690,327,3,95,0,
15170327,3,97,0,327,
151713,98,0,327,3,
1517299,0,327,3,100,
151730,327,3,101,0,
15174327,3,102,0,327,
151753,103,0,327,3,
15176104,0,327,3,105,
151770,1150,12,1,13895,
151781151,5,63,3,109,
151790,327,3,110,0,
151801152,12,1,13924,1153,
151815,63,3,109,0,
15182327,3,110,0,327,
151833,111,0,327,3,
15184112,0,327,3,113,
151850,327,3,114,0,
15186327,3,115,0,327,
151873,116,0,327,3,
15188117,0,327,3,118,
151890,327,3,119,0,
15190327,3,120,0,327,
151913,121,0,327,3,
15192122,0,327,3,48,
151930,327,3,49,0,
15194327,3,50,0,327,
151953,51,0,327,3,
1519652,0,327,3,53,
151970,327,3,54,0,
15198327,3,55,0,327,
151993,56,0,327,3,
1520057,0,327,3,65,
152010,327,3,66,0,
15202327,3,67,0,327,
152033,68,0,327,3,
1520469,0,327,3,70,
152050,327,3,71,0,
15206327,3,72,0,327,
152073,73,0,327,3,
1520874,0,327,3,75,
152090,327,3,76,0,
15210327,3,77,0,327,
152113,78,0,327,3,
1521279,0,327,3,80,
152130,327,3,81,0,
15214327,3,82,0,327,
152153,83,0,327,3,
1521684,0,327,3,85,
152170,327,3,86,0,
15218327,3,87,0,327,
152193,88,0,327,3,
1522089,0,327,3,90,
152210,327,3,95,0,
15222327,3,97,0,327,
152233,98,0,327,3,
1522499,0,327,3,100,
152250,327,3,101,0,
15226327,3,102,0,327,
152273,103,0,1154,12,
152281,13973,1155,5,63,
152293,109,0,327,3,
15230110,0,327,3,111,
152310,327,3,112,0,
15232327,3,113,0,327,
152333,114,0,327,3,
15234115,0,327,3,116,
152350,327,3,117,0,
15236327,3,118,0,327,
152373,119,0,327,3,
15238120,0,327,3,121,
152390,327,3,122,0,
15240327,3,48,0,327,
152413,49,0,327,3,
1524250,0,327,3,51,
152430,327,3,52,0,
15244327,3,53,0,327,
152453,54,0,327,3,
1524655,0,327,3,56,
152470,327,3,57,0,
15248327,3,65,0,327,
152493,66,0,327,3,
1525067,0,327,3,68,
152510,327,3,69,0,
15252327,3,70,0,327,
152533,71,0,327,3,
1525472,0,327,3,73,
152550,327,3,74,0,
15256327,3,75,0,327,
152573,76,0,327,3,
1525877,0,327,3,78,
152590,327,3,79,0,
15260327,3,80,0,327,
152613,81,0,327,3,
1526282,0,327,3,83,
152630,327,3,84,0,
15264327,3,85,0,327,
152653,86,0,327,3,
1526687,0,327,3,88,
152670,327,3,89,0,
15268327,3,90,0,327,
152693,95,0,327,3,
1527097,0,327,3,98,
152710,327,3,99,0,
15272327,3,100,0,327,
152733,101,0,327,3,
15274102,0,327,3,103,
152750,327,3,104,0,
15276327,3,105,0,327,
152773,106,0,327,3,
15278107,0,327,3,108,
152790,327,1156,11,1,
15280303,0,1157,4,22,
1528183,0,84,0,82,
152820,73,0,78,0,
1528371,0,95,0,84,
152840,89,0,80,0,
1528569,0,1,-1,3,
15286104,0,327,3,105,
152870,327,3,106,0,
15288327,3,107,0,327,
152893,108,0,327,1158,
1529011,1,829,0,330,
152911,-1,3,111,0,
15292327,3,112,0,327,
152933,113,0,327,3,
15294114,0,327,3,115,
152950,327,3,116,0,
15296327,3,117,0,327,
152973,118,0,327,3,
15298119,0,327,3,120,
152990,327,3,121,0,
15300327,3,122,0,327,
153013,48,0,327,3,
1530249,0,327,3,50,
153030,327,3,51,0,
15304327,3,52,0,327,
153053,53,0,327,3,
1530654,0,327,3,55,
153070,327,3,56,0,
15308327,3,57,0,327,
153093,65,0,327,3,
1531066,0,327,3,67,
153110,327,3,68,0,
15312327,3,69,0,327,
153133,70,0,327,3,
1531471,0,327,3,72,
153150,327,3,73,0,
15316327,3,74,0,327,
153173,75,0,327,3,
1531876,0,327,3,77,
153190,327,3,78,0,
15320327,3,79,0,327,
153213,80,0,327,3,
1532281,0,327,3,82,
153230,327,3,83,0,
15324327,3,84,0,327,
153253,85,0,327,3,
1532686,0,327,3,87,
153270,327,3,88,0,
15328327,3,89,0,327,
153293,90,0,327,3,
1533095,0,327,3,97,
153310,327,3,98,0,
15332327,3,99,0,327,
153333,100,0,327,3,
15334101,0,327,3,102,
153350,327,3,103,0,
15336327,3,104,0,327,
153373,105,0,327,3,
15338106,0,327,3,107,
153390,327,3,108,0,
15340327,1159,11,1,829,
153410,330,1,-1,3,
15342106,0,327,3,107,
153430,327,3,108,0,
15344327,1160,11,1,829,
153450,330,1,-1,3,
15346115,0,327,3,116,
153470,327,3,117,0,
15348327,3,118,0,327,
153493,119,0,327,3,
15350120,0,327,3,121,
153510,327,3,122,0,
15352327,3,48,0,327,
153533,49,0,327,3,
1535450,0,327,3,51,
153550,327,3,52,0,
15356327,3,53,0,327,
153573,54,0,327,3,
1535855,0,327,3,56,
153590,327,3,57,0,
15360327,3,65,0,327,
153613,66,0,327,3,
1536267,0,327,3,68,
153630,327,3,69,0,
15364327,3,70,0,327,
153653,71,0,327,3,
1536672,0,327,3,73,
153670,327,3,74,0,
15368327,3,75,0,327,
153693,76,0,327,3,
1537077,0,327,3,78,
153710,327,3,79,0,
15372327,3,80,0,327,
153733,81,0,327,3,
1537482,0,327,3,83,
153750,327,3,84,0,
15376327,3,85,0,327,
153773,86,0,327,3,
1537887,0,327,3,88,
153790,327,3,89,0,
15380327,3,90,0,327,
153813,95,0,327,3,
1538297,0,1161,12,1,
1538314334,1162,5,63,3,
15384109,0,327,3,110,
153850,327,3,111,0,
15386327,3,112,0,327,
153873,113,0,327,3,
15388114,0,327,3,115,
153890,327,3,116,0,
153901163,12,1,14369,1164,
153915,63,3,109,0,
15392327,3,110,0,327,
153933,111,0,327,3,
15394112,0,327,3,113,
153950,327,3,114,0,
15396327,3,115,0,327,
153973,116,0,327,3,
15398117,0,327,3,118,
153990,327,3,119,0,
15400327,3,120,0,327,
154013,121,0,327,3,
15402122,0,327,3,48,
154030,327,3,49,0,
15404327,3,50,0,327,
154053,51,0,327,3,
1540652,0,327,3,53,
154070,327,3,54,0,
15408327,3,55,0,327,
154093,56,0,327,3,
1541057,0,327,3,65,
154110,327,3,66,0,
15412327,3,67,0,327,
154133,68,0,327,3,
1541469,0,327,3,70,
154150,327,3,71,0,
15416327,3,72,0,327,
154173,73,0,327,3,
1541874,0,327,3,75,
154190,327,3,76,0,
15420327,3,77,0,327,
154213,78,0,327,3,
1542279,0,327,3,80,
154230,327,3,81,0,
15424327,3,82,0,327,
154253,83,0,327,3,
1542684,0,327,3,85,
154270,327,3,86,0,
15428327,3,87,0,327,
154293,88,0,327,3,
1543089,0,327,3,90,
154310,327,3,95,0,
15432327,3,97,0,327,
154333,98,0,327,3,
1543499,0,327,3,100,
154350,327,3,101,0,
154361165,12,1,14416,1166,
154375,63,3,109,0,
15438327,3,110,0,327,
154393,111,0,327,3,
15440112,0,327,3,113,
154410,327,3,114,0,
15442327,3,115,0,327,
154433,116,0,327,3,
15444117,0,327,3,118,
154450,327,3,119,0,
15446327,3,120,0,327,
154473,121,0,327,3,
15448122,0,327,3,48,
154490,327,3,49,0,
15450327,3,50,0,327,
154513,51,0,327,3,
1545252,0,327,3,53,
154530,327,3,54,0,
15454327,3,55,0,327,
154553,56,0,327,3,
1545657,0,327,3,65,
154570,327,3,66,0,
15458327,3,67,0,327,
154593,68,0,327,3,
1546069,0,327,3,70,
154610,327,3,71,0,
15462327,3,72,0,327,
154633,73,0,327,3,
1546474,0,327,3,75,
154650,327,3,76,0,
15466327,3,77,0,327,
154673,78,0,327,3,
1546879,0,327,3,80,
154690,327,3,81,0,
15470327,3,82,0,327,
154713,83,0,327,3,
1547284,0,327,3,85,
154730,327,3,86,0,
15474327,3,87,0,327,
154753,88,0,327,3,
1547689,0,327,3,90,
154770,327,3,95,0,
154781167,12,1,14502,1168,
154795,63,3,109,0,
15480327,3,110,0,327,
154813,111,0,327,3,
15482112,0,327,3,113,
154830,327,3,114,0,
15484327,3,115,0,327,
154853,116,0,327,3,
15486117,0,327,3,118,
154870,327,3,119,0,
15488327,3,120,0,327,
154893,121,0,327,3,
15490122,0,327,3,48,
154910,327,3,49,0,
15492327,3,50,0,327,
154933,51,0,327,3,
1549452,0,327,3,53,
154950,327,3,54,0,
15496327,3,55,0,327,
154973,56,0,327,3,
1549857,0,327,3,65,
154990,327,3,66,0,
15500327,3,67,0,327,
155013,68,0,327,3,
1550269,0,327,3,70,
155030,327,3,71,0,
15504327,3,72,0,327,
155053,73,0,327,3,
1550674,0,327,3,75,
155070,327,3,76,0,
15508327,3,77,0,327,
155093,78,0,327,3,
1551079,0,327,3,80,
155110,327,3,81,0,
15512327,3,82,0,327,
155133,83,0,327,3,
1551484,0,327,3,85,
155150,327,3,86,0,
15516327,3,87,0,327,
155173,88,0,327,3,
1551889,0,327,3,90,
155190,327,3,95,0,
15520327,3,97,0,327,
155213,98,0,327,3,
1552299,0,327,3,100,
155230,327,3,101,0,
155241169,12,1,14549,1170,
155255,63,3,109,0,
15526327,3,110,0,1171,
1552712,1,14578,1172,5,
1552863,3,109,0,327,
155293,110,0,327,3,
15530111,0,327,3,112,
155310,327,3,113,0,
15532327,3,114,0,327,
155333,115,0,327,3,
15534116,0,1173,12,1,
1553514613,1174,5,63,3,
15536109,0,327,3,110,
155370,327,3,111,0,
15538327,3,112,0,327,
155393,113,0,327,3,
15540114,0,1175,12,1,
1554114646,1176,5,63,3,
15542109,0,327,3,110,
155430,327,3,111,0,
15544327,3,112,0,327,
155453,113,0,327,3,
15546114,0,327,3,115,
155470,327,3,116,0,
15548327,3,117,0,327,
155493,118,0,327,3,
15550119,0,327,3,120,
155510,327,3,121,0,
155521177,12,1,14686,1178,
155535,63,3,109,0,
15554327,3,110,0,327,
155553,111,0,327,3,
15556112,0,327,3,113,
155570,327,3,114,0,
15558327,3,115,0,327,
155593,116,0,327,3,
15560117,0,327,3,118,
155610,327,3,119,0,
15562327,3,120,0,327,
155633,121,0,327,3,
15564122,0,327,3,48,
155650,327,3,49,0,
15566327,3,50,0,327,
155673,51,0,327,3,
1556852,0,327,3,53,
155690,327,3,54,0,
15570327,3,55,0,327,
155713,56,0,327,3,
1557257,0,327,3,65,
155730,327,3,66,0,
15574327,3,67,0,327,
155753,68,0,327,3,
1557669,0,327,3,70,
155770,327,3,71,0,
15578327,3,72,0,327,
155793,73,0,327,3,
1558074,0,327,3,75,
155810,327,3,76,0,
15582327,3,77,0,327,
155833,78,0,327,3,
1558479,0,327,3,80,
155850,327,3,81,0,
15586327,3,82,0,327,
155873,83,0,327,3,
1558884,0,327,3,85,
155890,327,3,86,0,
15590327,3,87,0,327,
155913,88,0,327,3,
1559289,0,327,3,90,
155930,327,3,95,0,
15594327,3,97,0,327,
155953,98,0,327,3,
1559699,0,327,3,100,
155970,327,3,101,0,
15598327,3,102,0,327,
155993,103,0,327,3,
15600104,0,327,3,105,
156010,327,3,106,0,
15602327,3,107,0,327,
156033,108,0,327,1179,
1560411,1,754,0,1180,
156054,34,83,0,84,
156060,65,0,84,0,
1560769,0,95,0,69,
156080,78,0,84,0,
1560982,0,89,0,95,
156100,69,0,86,0,
1561169,0,78,0,84,
156120,1,-1,3,122,
156130,327,3,48,0,
15614327,3,49,0,327,
156153,50,0,327,3,
1561651,0,327,3,52,
156170,327,3,53,0,
15618327,3,54,0,327,
156193,55,0,327,3,
1562056,0,327,3,57,
156210,327,3,65,0,
15622327,3,66,0,327,
156233,67,0,327,3,
1562468,0,327,3,69,
156250,327,3,70,0,
15626327,3,71,0,327,
156273,72,0,327,3,
1562873,0,327,3,74,
156290,327,3,75,0,
15630327,3,76,0,327,
156313,77,0,327,3,
1563278,0,327,3,79,
156330,327,3,80,0,
15634327,3,81,0,327,
156353,82,0,327,3,
1563683,0,327,3,84,
156370,327,3,85,0,
15638327,3,86,0,327,
156393,87,0,327,3,
1564088,0,327,3,89,
156410,327,3,90,0,
15642327,3,95,0,327,
156433,97,0,327,3,
1564498,0,327,3,99,
156450,327,3,100,0,
15646327,3,101,0,327,
156473,102,0,327,3,
15648103,0,327,3,104,
156490,327,3,105,0,
15650327,3,106,0,327,
156513,107,0,327,3,
15652108,0,327,1181,11,
156531,829,0,330,1,
15654-1,3,115,0,327,
156553,116,0,327,3,
15656117,0,327,3,118,
156570,327,3,119,0,
15658327,3,120,0,327,
156593,121,0,327,3,
15660122,0,327,3,48,
156610,327,3,49,0,
15662327,3,50,0,327,
156633,51,0,327,3,
1566452,0,327,3,53,
156650,327,3,54,0,
15666327,3,55,0,327,
156673,56,0,327,3,
1566857,0,327,3,65,
156690,327,3,66,0,
15670327,3,67,0,327,
156713,68,0,327,3,
1567269,0,327,3,70,
156730,327,3,71,0,
15674327,3,72,0,327,
156753,73,0,327,3,
1567674,0,327,3,75,
156770,327,3,76,0,
15678327,3,77,0,327,
156793,78,0,327,3,
1568079,0,327,3,80,
156810,327,3,81,0,
15682327,3,82,0,327,
156833,83,0,327,3,
1568484,0,327,3,85,
156850,327,3,86,0,
15686327,3,87,0,327,
156873,88,0,327,3,
1568889,0,327,3,90,
156890,327,3,95,0,
15690327,3,97,0,327,
156913,98,0,327,3,
1569299,0,327,3,100,
156930,327,3,101,0,
15694327,3,102,0,327,
156953,103,0,327,3,
15696104,0,327,3,105,
156970,327,3,106,0,
15698327,3,107,0,327,
156993,108,0,327,1182,
1570011,1,829,0,330,
157011,-1,3,117,0,
15702327,3,118,0,327,
157033,119,0,327,3,
15704120,0,327,3,121,
157050,327,3,122,0,
15706327,3,48,0,327,
157073,49,0,327,3,
1570850,0,327,3,51,
157090,327,3,52,0,
15710327,3,53,0,327,
157113,54,0,327,3,
1571255,0,327,3,56,
157130,327,3,57,0,
15714327,3,65,0,327,
157153,66,0,327,3,
1571667,0,327,3,68,
157170,327,3,69,0,
15718327,3,70,0,327,
157193,71,0,327,3,
1572072,0,327,3,73,
157210,327,3,74,0,
15722327,3,75,0,327,
157233,76,0,327,3,
1572477,0,327,3,78,
157250,327,3,79,0,
15726327,3,80,0,327,
157273,81,0,327,3,
1572882,0,327,3,83,
157290,327,3,84,0,
15730327,3,85,0,327,
157313,86,0,327,3,
1573287,0,327,3,88,
157330,327,3,89,0,
15734327,3,90,0,327,
157353,95,0,327,3,
1573697,0,327,3,98,
157370,327,3,99,0,
15738327,3,100,0,327,
157393,101,0,327,3,
15740102,0,327,3,103,
157410,327,3,104,0,
15742327,3,105,0,327,
157433,106,0,327,3,
15744107,0,327,3,108,
157450,327,1183,11,1,
15746829,0,330,1,-1,
157473,111,0,327,3,
15748112,0,327,3,113,
157490,327,3,114,0,
15750327,3,115,0,327,
157513,116,0,327,3,
15752117,0,327,3,118,
157530,327,3,119,0,
15754327,3,120,0,1184,
1575512,1,15068,1185,5,
1575663,3,109,0,327,
157573,110,0,327,3,
15758111,0,327,3,112,
157590,327,3,113,0,
15760327,3,114,0,327,
157613,115,0,327,3,
15762116,0,327,3,117,
157630,327,3,118,0,
15764327,3,119,0,327,
157653,120,0,327,3,
15766121,0,327,3,122,
157670,327,3,48,0,
15768327,3,49,0,327,
157693,50,0,327,3,
1577051,0,327,3,52,
157710,327,3,53,0,
15772327,3,54,0,327,
157733,55,0,327,3,
1577456,0,327,3,57,
157750,327,3,65,0,
15776327,3,66,0,327,
157773,67,0,327,3,
1577868,0,327,3,69,
157790,327,3,70,0,
15780327,3,71,0,327,
157813,72,0,327,3,
1578273,0,327,3,74,
157830,327,3,75,0,
15784327,3,76,0,327,
157853,77,0,327,3,
1578678,0,327,3,79,
157870,327,3,80,0,
15788327,3,81,0,327,
157893,82,0,327,3,
1579083,0,327,3,84,
157910,327,3,85,0,
15792327,3,86,0,327,
157933,87,0,327,3,
1579488,0,327,3,89,
157950,327,3,90,0,
15796327,3,95,0,327,
157973,97,0,327,3,
1579898,0,327,3,99,
157990,327,3,100,0,
15800327,3,101,0,327,
158013,102,0,327,3,
15802103,0,327,3,104,
158030,327,3,105,0,
158041186,12,1,15119,1187,
158055,63,3,109,0,
15806327,3,110,0,327,
158073,111,0,327,3,
15808112,0,327,3,113,
158090,327,3,114,0,
15810327,3,115,0,327,
158113,116,0,1188,12,
158121,15154,1189,5,63,
158133,109,0,327,3,
15814110,0,327,3,111,
158150,327,3,112,0,
15816327,3,113,0,327,
158173,114,0,327,3,
15818115,0,327,3,116,
158190,327,3,117,0,
15820327,3,118,0,327,
158213,119,0,327,3,
15822120,0,327,3,121,
158230,327,3,122,0,
15824327,3,48,0,327,
158253,49,0,327,3,
1582650,0,327,3,51,
158270,327,3,52,0,
15828327,3,53,0,327,
158293,54,0,327,3,
1583055,0,327,3,56,
158310,327,3,57,0,
15832327,3,65,0,327,
158333,66,0,327,3,
1583467,0,327,3,68,
158350,327,3,69,0,
15836327,3,70,0,327,
158373,71,0,327,3,
1583872,0,327,3,73,
158390,327,3,74,0,
15840327,3,75,0,327,
158413,76,0,327,3,
1584277,0,327,3,78,
158430,327,3,79,0,
15844327,3,80,0,327,
158453,81,0,327,3,
1584682,0,327,3,83,
158470,327,3,84,0,
15848327,3,85,0,327,
158493,86,0,327,3,
1585087,0,327,3,88,
158510,327,3,89,0,
15852327,3,90,0,327,
158533,95,0,327,3,
1585497,0,327,3,98,
158550,327,3,99,0,
15856327,3,100,0,327,
158573,101,0,327,3,
15858102,0,327,3,103,
158590,327,3,104,0,
15860327,3,105,0,327,
158613,106,0,327,3,
15862107,0,327,3,108,
158630,327,1190,11,1,
15864769,0,1191,4,32,
1586583,0,84,0,65,
158660,84,0,69,0,
1586795,0,69,0,88,
158680,73,0,84,0,
1586995,0,69,0,86,
158700,69,0,78,0,
1587184,0,1,-1,3,
15872117,0,327,3,118,
158730,327,3,119,0,
15874327,3,120,0,327,
158753,121,0,327,3,
15876122,0,327,3,48,
158770,327,3,49,0,
15878327,3,50,0,327,
158793,51,0,327,3,
1588052,0,327,3,53,
158810,327,3,54,0,
15882327,3,55,0,327,
158833,56,0,327,3,
1588457,0,327,3,65,
158850,327,3,66,0,
15886327,3,67,0,327,
158873,68,0,327,3,
1588869,0,327,3,70,
158890,327,3,71,0,
15890327,3,72,0,327,
158913,73,0,327,3,
1589274,0,327,3,75,
158930,327,3,76,0,
15894327,3,77,0,327,
158953,78,0,327,3,
1589679,0,327,3,80,
158970,327,3,81,0,
15898327,3,82,0,327,
158993,83,0,327,3,
1590084,0,327,3,85,
159010,327,3,86,0,
15902327,3,87,0,327,
159033,88,0,327,3,
1590489,0,327,3,90,
159050,327,3,95,0,
15906327,3,97,0,327,
159073,98,0,327,3,
1590899,0,327,3,100,
159090,327,3,101,0,
15910327,3,102,0,327,
159113,103,0,327,3,
15912104,0,327,3,105,
159130,327,3,106,0,
15914327,3,107,0,327,
159153,108,0,327,1192,
1591611,1,829,0,330,
159171,-1,3,106,0,
15918327,3,107,0,327,
159193,108,0,327,1193,
1592011,1,829,0,330,
159211,-1,3,121,0,
15922327,3,122,0,327,
159233,48,0,327,3,
1592449,0,327,3,50,
159250,327,3,51,0,
15926327,3,52,0,327,
159273,53,0,327,3,
1592854,0,327,3,55,
159290,327,3,56,0,
15930327,3,57,0,327,
159313,65,0,327,3,
1593266,0,327,3,67,
159330,327,3,68,0,
15934327,3,69,0,327,
159353,70,0,327,3,
1593671,0,327,3,72,
159370,327,3,73,0,
15938327,3,74,0,327,
159393,75,0,327,3,
1594076,0,327,3,77,
159410,327,3,78,0,
15942327,3,79,0,327,
159433,80,0,327,3,
1594481,0,327,3,82,
159450,327,3,83,0,
15946327,3,84,0,327,
159473,85,0,327,3,
1594886,0,327,3,87,
159490,327,3,88,0,
15950327,3,89,0,327,
159513,90,0,327,3,
1595295,0,327,3,97,
159530,327,3,98,0,
15954327,3,99,0,327,
159553,100,0,327,3,
15956101,0,327,3,102,
159570,327,3,103,0,
15958327,3,104,0,327,
159593,105,0,327,3,
15960106,0,327,3,107,
159610,327,3,108,0,
15962327,1194,11,1,829,
159630,330,1,-1,3,
15964102,0,327,3,103,
159650,327,3,104,0,
15966327,3,105,0,327,
159673,106,0,327,3,
15968107,0,327,3,108,
159690,327,1195,11,1,
15970829,0,330,1,-1,
159713,97,0,327,3,
1597298,0,327,3,99,
159730,327,3,100,0,
15974327,3,101,0,327,
159753,102,0,327,3,
15976103,0,327,3,104,
159770,327,3,105,0,
15978327,3,106,0,327,
159793,107,0,327,3,
15980108,0,327,1196,11,
159811,256,0,1197,4,
1598210,83,0,84,0,
1598365,0,84,0,69,
159840,1,-1,3,102,
159850,327,3,103,0,
15986327,3,104,0,327,
159873,105,0,327,3,
15988106,0,327,3,107,
159890,327,3,108,0,
15990327,1198,11,1,829,
159910,330,1,-1,3,
15992117,0,327,3,118,
159930,327,3,119,0,
15994327,3,120,0,327,
159953,121,0,327,3,
15996122,0,327,3,48,
159970,327,3,49,0,
15998327,3,50,0,327,
159993,51,0,327,3,
1600052,0,327,3,53,
160010,327,3,54,0,
16002327,3,55,0,327,
160033,56,0,327,3,
1600457,0,327,3,65,
160050,327,3,66,0,
16006327,3,67,0,327,
160073,68,0,327,3,
1600869,0,327,3,70,
160090,327,3,71,0,
16010327,3,72,0,327,
160113,73,0,327,3,
1601274,0,327,3,75,
160130,327,3,76,0,
16014327,3,77,0,327,
160153,78,0,327,3,
1601679,0,327,3,80,
160170,327,3,81,0,
16018327,3,82,0,327,
160193,83,0,327,3,
1602084,0,327,3,85,
160210,327,3,86,0,
16022327,3,87,0,327,
160233,88,0,327,3,
1602489,0,327,3,90,
160250,327,3,95,0,
16026327,3,97,0,327,
160273,98,0,327,3,
1602899,0,327,3,100,
160290,327,3,101,0,
16030327,3,102,0,327,
160313,103,0,327,3,
16032104,0,327,3,105,
160330,327,3,106,0,
16034327,3,107,0,327,
160353,108,0,327,1199,
1603611,1,829,0,330,
160371,-1,3,98,0,
16038327,3,99,0,327,
160393,100,0,327,3,
16040101,0,327,3,102,
160410,327,3,103,0,
16042327,3,104,0,327,
160433,105,0,327,3,
16044106,0,327,3,107,
160450,327,3,108,0,
16046327,1200,11,1,829,
160470,330,1,-1,3,
16048117,0,327,3,118,
160490,327,3,119,0,
16050327,3,120,0,327,
160513,121,0,327,3,
16052122,0,327,3,48,
160530,327,3,49,0,
16054327,3,50,0,327,
160553,51,0,327,3,
1605652,0,327,3,53,
160570,327,3,54,0,
16058327,3,55,0,327,
160593,56,0,327,3,
1606057,0,327,3,65,
160610,327,3,66,0,
16062327,3,67,0,327,
160633,68,0,327,3,
1606469,0,327,3,70,
160650,327,3,71,0,
16066327,3,72,0,327,
160673,73,0,327,3,
1606874,0,327,3,75,
160690,327,3,76,0,
16070327,3,77,0,327,
160713,78,0,327,3,
1607279,0,327,3,80,
160730,327,3,81,0,
16074327,3,82,0,327,
160753,83,0,327,3,
1607684,0,327,3,85,
160770,327,3,86,0,
16078327,3,87,0,327,
160793,88,0,327,3,
1608089,0,327,3,90,
160810,327,3,95,0,
16082327,3,97,0,327,
160833,98,0,327,3,
1608499,0,327,3,100,
160850,327,3,101,0,
160861201,12,1,15863,1202,
160875,63,3,109,0,
16088327,3,110,0,1203,
1608912,1,15892,1204,5,
1609063,3,109,0,327,
160913,110,0,327,3,
16092111,0,327,3,112,
160930,327,3,113,0,
16094327,3,114,0,327,
160953,115,0,1205,12,
160961,15926,1206,5,63,
160973,109,0,327,3,
16098110,0,327,3,111,
160990,1207,12,1,15956,
161001208,5,63,3,109,
161010,327,3,110,0,
16102327,3,111,0,327,
161033,112,0,327,3,
16104113,0,327,3,114,
161050,1209,12,1,15989,
161061210,5,63,3,109,
161070,327,3,110,0,
16108327,3,111,0,327,
161093,112,0,327,3,
16110113,0,327,3,114,
161110,327,3,115,0,
16112327,3,116,0,327,
161133,117,0,327,3,
16114118,0,327,3,119,
161150,327,3,120,0,
16116327,3,121,0,327,
161173,122,0,327,3,
1611848,0,327,3,49,
161190,327,3,50,0,
16120327,3,51,0,327,
161213,52,0,327,3,
1612253,0,327,3,54,
161230,327,3,55,0,
16124327,3,56,0,327,
161253,57,0,327,3,
1612665,0,327,3,66,
161270,327,3,67,0,
16128327,3,68,0,327,
161293,69,0,327,3,
1613070,0,327,3,71,
161310,327,3,72,0,
16132327,3,73,0,327,
161333,74,0,327,3,
1613475,0,327,3,76,
161350,327,3,77,0,
16136327,3,78,0,327,
161373,79,0,327,3,
1613880,0,327,3,81,
161390,327,3,82,0,
16140327,3,83,0,327,
161413,84,0,327,3,
1614285,0,327,3,86,
161430,327,3,87,0,
16144327,3,88,0,327,
161453,89,0,327,3,
1614690,0,327,3,95,
161470,327,3,97,0,
16148327,3,98,0,327,
161493,99,0,327,3,
16150100,0,327,3,101,
161510,327,3,102,0,
16152327,3,103,0,327,
161533,104,0,327,3,
16154105,0,327,3,106,
161550,327,3,107,0,
16156327,3,108,0,327,
161571211,11,1,744,0,
161581212,4,24,83,0,
1615969,0,78,0,83,
161600,79,0,82,0,
1616195,0,69,0,86,
161620,69,0,78,0,
1616384,0,1,-1,3,
16164115,0,327,3,116,
161650,327,3,117,0,
16166327,3,118,0,327,
161673,119,0,327,3,
16168120,0,327,3,121,
161690,327,3,122,0,
16170327,3,48,0,327,
161713,49,0,327,3,
1617250,0,327,3,51,
161730,327,3,52,0,
16174327,3,53,0,327,
161753,54,0,327,3,
1617655,0,327,3,56,
161770,327,3,57,0,
16178327,3,65,0,327,
161793,66,0,327,3,
1618067,0,327,3,68,
161810,327,3,69,0,
16182327,3,70,0,327,
161833,71,0,327,3,
1618472,0,327,3,73,
161850,327,3,74,0,
16186327,3,75,0,327,
161873,76,0,327,3,
1618877,0,327,3,78,
161890,327,3,79,0,
16190327,3,80,0,327,
161913,81,0,327,3,
1619282,0,327,3,83,
161930,327,3,84,0,
16194327,3,85,0,327,
161953,86,0,327,3,
1619687,0,327,3,88,
161970,327,3,89,0,
16198327,3,90,0,327,
161993,95,0,327,3,
1620097,0,327,3,98,
162010,327,3,99,0,
16202327,3,100,0,327,
162033,101,0,327,3,
16204102,0,327,3,103,
162050,327,3,104,0,
16206327,3,105,0,327,
162073,106,0,327,3,
16208107,0,327,3,108,
162090,327,1213,11,1,
16210829,0,330,1,-1,
162113,112,0,327,3,
16212113,0,327,3,114,
162130,327,3,115,0,
16214327,3,116,0,327,
162153,117,0,327,3,
16216118,0,327,3,119,
162170,327,3,120,0,
16218327,3,121,0,327,
162193,122,0,327,3,
1622048,0,327,3,49,
162210,327,3,50,0,
16222327,3,51,0,327,
162233,52,0,327,3,
1622453,0,327,3,54,
162250,327,3,55,0,
16226327,3,56,0,327,
162273,57,0,327,3,
1622865,0,327,3,66,
162290,327,3,67,0,
16230327,3,68,0,327,
162313,69,0,327,3,
1623270,0,327,3,71,
162330,327,3,72,0,
16234327,3,73,0,327,
162353,74,0,327,3,
1623675,0,327,3,76,
162370,327,3,77,0,
16238327,3,78,0,327,
162393,79,0,327,3,
1624080,0,327,3,81,
162410,327,3,82,0,
16242327,3,83,0,327,
162433,84,0,327,3,
1624485,0,327,3,86,
162450,327,3,87,0,
16246327,3,88,0,327,
162473,89,0,327,3,
1624890,0,327,3,95,
162490,327,3,97,0,
16250327,3,98,0,327,
162513,99,0,327,3,
16252100,0,327,3,101,
162530,327,3,102,0,
16254327,3,103,0,327,
162553,104,0,327,3,
16256105,0,327,3,106,
162570,327,3,107,0,
16258327,3,108,0,327,
162591214,11,1,829,0,
16260330,1,-1,3,116,
162610,327,3,117,0,
16262327,3,118,0,327,
162633,119,0,327,3,
16264120,0,327,3,121,
162650,327,3,122,0,
16266327,3,48,0,327,
162673,49,0,327,3,
1626850,0,327,3,51,
162690,327,3,52,0,
16270327,3,53,0,327,
162713,54,0,327,3,
1627255,0,327,3,56,
162730,327,3,57,0,
16274327,3,65,0,327,
162753,66,0,327,3,
1627667,0,327,3,68,
162770,327,3,69,0,
16278327,3,70,0,327,
162793,71,0,327,3,
1628072,0,327,3,73,
162810,327,3,74,0,
16282327,3,75,0,327,
162833,76,0,327,3,
1628477,0,327,3,78,
162850,327,3,79,0,
16286327,3,80,0,327,
162873,81,0,327,3,
1628882,0,327,3,83,
162890,327,3,84,0,
16290327,3,85,0,327,
162913,86,0,327,3,
1629287,0,327,3,88,
162930,327,3,89,0,
16294327,3,90,0,327,
162953,95,0,327,3,
1629697,0,327,3,98,
162970,327,3,99,0,
16298327,3,100,0,327,
162993,101,0,327,3,
16300102,0,327,3,103,
163010,327,3,104,0,
16302327,3,105,0,327,
163033,106,0,327,3,
16304107,0,327,3,108,
163050,327,1215,11,1,
16306829,0,330,1,-1,
163073,111,0,327,3,
16308112,0,327,3,113,
163090,327,3,114,0,
16310327,3,115,0,327,
163113,116,0,327,3,
16312117,0,327,3,118,
163130,327,3,119,0,
16314327,3,120,0,327,
163153,121,0,327,3,
16316122,0,327,3,48,
163170,327,3,49,0,
16318327,3,50,0,327,
163193,51,0,327,3,
1632052,0,327,3,53,
163210,327,3,54,0,
16322327,3,55,0,327,
163233,56,0,327,3,
1632457,0,327,3,65,
163250,327,3,66,0,
16326327,3,67,0,327,
163273,68,0,327,3,
1632869,0,327,3,70,
163290,327,3,71,0,
16330327,3,72,0,327,
163313,73,0,327,3,
1633274,0,327,3,75,
163330,327,3,76,0,
16334327,3,77,0,327,
163353,78,0,327,3,
1633679,0,327,3,80,
163370,327,3,81,0,
16338327,3,82,0,327,
163393,83,0,327,3,
1634084,0,327,3,85,
163410,327,3,86,0,
16342327,3,87,0,327,
163433,88,0,327,3,
1634489,0,327,3,90,
163450,327,3,95,0,
16346327,3,97,0,327,
163473,98,0,327,3,
1634899,0,327,3,100,
163490,327,3,101,0,
16350327,3,102,0,327,
163513,103,0,327,3,
16352104,0,327,3,105,
163530,327,3,106,0,
16354327,3,107,0,327,
163553,108,0,327,1216,
1635611,1,829,0,330,
163571,-1,3,102,0,
16358327,3,103,0,327,
163593,104,0,327,3,
16360105,0,327,3,106,
163610,327,3,107,0,
16362327,3,108,0,327,
163631217,11,1,829,0,
16364330,1,-1,3,116,
163650,1218,12,1,16537,
163661219,5,63,3,109,
163670,327,3,110,0,
16368327,3,111,0,1220,
1636912,1,16567,1221,5,
1637063,3,109,0,327,
163713,110,0,327,3,
16372111,0,327,3,112,
163730,327,3,113,0,
16374327,3,114,0,327,
163753,115,0,327,3,
16376116,0,327,3,117,
163770,1222,12,1,16603,
163781223,5,63,3,109,
163790,327,3,110,0,
16380327,3,111,0,327,
163813,112,0,327,3,
16382113,0,327,3,114,
163830,327,3,115,0,
16384327,3,116,0,327,
163853,117,0,327,3,
16386118,0,327,3,119,
163870,327,3,120,0,
16388327,3,121,0,327,
163893,122,0,327,3,
1639048,0,327,3,49,
163910,327,3,50,0,
16392327,3,51,0,327,
163933,52,0,327,3,
1639453,0,327,3,54,
163950,327,3,55,0,
16396327,3,56,0,327,
163973,57,0,327,3,
1639865,0,327,3,66,
163990,327,3,67,0,
16400327,3,68,0,327,
164013,69,0,327,3,
1640270,0,327,3,71,
164030,327,3,72,0,
16404327,3,73,0,327,
164053,74,0,327,3,
1640675,0,327,3,76,
164070,327,3,77,0,
16408327,3,78,0,327,
164093,79,0,327,3,
1641080,0,327,3,81,
164110,327,3,82,0,
16412327,3,83,0,327,
164133,84,0,327,3,
1641485,0,327,3,86,
164150,327,3,87,0,
16416327,3,88,0,327,
164173,89,0,327,3,
1641890,0,327,3,95,
164190,327,3,97,0,
16420327,3,98,0,327,
164213,99,0,1224,12,
164221,16648,1225,5,63,
164233,109,0,327,3,
16424110,0,327,3,111,
164250,327,3,112,0,
16426327,3,113,0,327,
164273,114,0,327,3,
16428115,0,327,3,116,
164290,327,3,117,0,
16430327,3,118,0,327,
164313,119,0,327,3,
16432120,0,327,3,121,
164330,327,3,122,0,
16434327,3,48,0,327,
164353,49,0,327,3,
1643650,0,327,3,51,
164370,327,3,52,0,
16438327,3,53,0,327,
164393,54,0,327,3,
1644055,0,327,3,56,
164410,327,3,57,0,
16442327,3,65,0,327,
164433,66,0,327,3,
1644467,0,327,3,68,
164450,327,3,69,0,
16446327,3,70,0,327,
164473,71,0,327,3,
1644872,0,327,3,73,
164490,327,3,74,0,
16450327,3,75,0,327,
164513,76,0,327,3,
1645277,0,327,3,78,
164530,327,3,79,0,
16454327,3,80,0,327,
164553,81,0,327,3,
1645682,0,327,3,83,
164570,327,3,84,0,
16458327,3,85,0,327,
164593,86,0,327,3,
1646087,0,327,3,88,
164610,327,3,89,0,
16462327,3,90,0,327,
164633,95,0,327,3,
1646497,0,327,3,98,
164650,327,3,99,0,
16466327,3,100,0,327,
164673,101,0,327,3,
16468102,0,327,3,103,
164690,327,3,104,0,
164701226,12,1,16698,1227,
164715,63,3,109,0,
16472327,3,110,0,327,
164733,111,0,327,3,
16474112,0,327,3,113,
164750,327,3,114,0,
16476327,3,115,0,327,
164773,116,0,327,3,
16478117,0,327,3,118,
164790,327,3,119,0,
16480327,3,120,0,327,
164813,121,0,327,3,
16482122,0,327,3,48,
164830,327,3,49,0,
16484327,3,50,0,327,
164853,51,0,327,3,
1648652,0,327,3,53,
164870,327,3,54,0,
16488327,3,55,0,327,
164893,56,0,327,3,
1649057,0,327,3,65,
164910,327,3,66,0,
16492327,3,67,0,327,
164933,68,0,327,3,
1649469,0,327,3,70,
164950,327,3,71,0,
16496327,3,72,0,327,
164973,73,0,327,3,
1649874,0,327,3,75,
164990,327,3,76,0,
16500327,3,77,0,327,
165013,78,0,327,3,
1650279,0,327,3,80,
165030,327,3,81,0,
16504327,3,82,0,327,
165053,83,0,327,3,
1650684,0,327,3,85,
165070,327,3,86,0,
16508327,3,87,0,327,
165093,88,0,327,3,
1651089,0,327,3,90,
165110,327,3,95,0,
165121228,12,1,16784,1229,
165135,63,3,109,0,
16514327,3,110,0,327,
165153,111,0,327,3,
16516112,0,327,3,113,
165170,327,3,114,0,
16518327,3,115,0,1230,
1651912,1,16818,1231,5,
1652063,3,109,0,327,
165213,110,0,327,3,
16522111,0,327,3,112,
165230,327,3,113,0,
16524327,3,114,0,327,
165253,115,0,327,3,
16526116,0,1232,12,1,
1652716853,1233,5,63,3,
16528109,0,327,3,110,
165290,327,3,111,0,
16530327,3,112,0,327,
165313,113,0,327,3,
16532114,0,327,3,115,
165330,327,3,116,0,
16534327,3,117,0,327,
165353,118,0,327,3,
16536119,0,327,3,120,
165370,327,3,121,0,
16538327,3,122,0,327,
165393,48,0,327,3,
1654049,0,327,3,50,
165410,327,3,51,0,
16542327,3,52,0,327,
165433,53,0,327,3,
1654454,0,327,3,55,
165450,327,3,56,0,
16546327,3,57,0,327,
165473,65,0,327,3,
1654866,0,327,3,67,
165490,327,3,68,0,
16550327,3,69,0,327,
165513,70,0,327,3,
1655271,0,327,3,72,
165530,327,3,73,0,
16554327,3,74,0,327,
165553,75,0,327,3,
1655676,0,327,3,77,
165570,327,3,78,0,
16558327,3,79,0,327,
165593,80,0,327,3,
1656081,0,327,3,82,
165610,327,3,83,0,
16562327,3,84,0,327,
165633,85,0,327,3,
1656486,0,327,3,87,
165650,327,3,88,0,
16566327,3,89,0,327,
165673,90,0,327,3,
1656895,0,327,3,97,
165690,1234,12,1,16896,
165701235,5,63,3,109,
165710,327,3,110,0,
16572327,3,111,0,327,
165733,112,0,327,3,
16574113,0,327,3,114,
165750,1236,12,1,16929,
165761237,5,63,3,109,
165770,327,3,110,0,
16578327,3,111,0,327,
165793,112,0,327,3,
16580113,0,327,3,114,
165810,327,3,115,0,
16582327,3,116,0,1238,
1658312,1,16964,1239,5,
1658463,3,109,0,327,
165853,110,0,327,3,
16586111,0,327,3,112,
165870,327,3,113,0,
16588327,3,114,0,327,
165893,115,0,327,3,
16590116,0,327,3,117,
165910,327,3,118,0,
16592327,3,119,0,327,
165933,120,0,327,3,
16594121,0,327,3,122,
165950,327,3,48,0,
16596327,3,49,0,327,
165973,50,0,327,3,
1659851,0,327,3,52,
165990,327,3,53,0,
16600327,3,54,0,327,
166013,55,0,327,3,
1660256,0,327,3,57,
166030,327,3,65,0,
16604327,3,66,0,327,
166053,67,0,327,3,
1660668,0,327,3,69,
166070,327,3,70,0,
16608327,3,71,0,327,
166093,72,0,327,3,
1661073,0,327,3,74,
166110,327,3,75,0,
16612327,3,76,0,327,
166133,77,0,327,3,
1661478,0,327,3,79,
166150,327,3,80,0,
16616327,3,81,0,327,
166173,82,0,327,3,
1661883,0,327,3,84,
166190,327,3,85,0,
16620327,3,86,0,327,
166213,87,0,327,3,
1662288,0,327,3,89,
166230,327,3,90,0,
16624327,3,95,0,327,
166253,97,0,327,3,
1662698,0,327,3,99,
166270,327,3,100,0,
16628327,3,101,0,327,
166293,102,0,327,3,
16630103,0,327,3,104,
166310,327,3,105,0,
16632327,3,106,0,327,
166333,107,0,327,3,
16634108,0,327,1240,11,
166351,801,0,1241,4,
1663634,84,0,79,0,
1663785,0,67,0,72,
166380,95,0,83,0,
1663984,0,65,0,82,
166400,84,0,95,0,
1664169,0,86,0,69,
166420,78,0,84,0,
166431,-1,3,117,0,
16644327,3,118,0,327,
166453,119,0,327,3,
16646120,0,327,3,121,
166470,327,3,122,0,
16648327,3,48,0,327,
166493,49,0,327,3,
1665050,0,327,3,51,
166510,327,3,52,0,
16652327,3,53,0,327,
166533,54,0,327,3,
1665455,0,327,3,56,
166550,327,3,57,0,
16656327,3,65,0,327,
166573,66,0,327,3,
1665867,0,327,3,68,
166590,327,3,69,0,
16660327,3,70,0,327,
166613,71,0,327,3,
1666272,0,327,3,73,
166630,327,3,74,0,
16664327,3,75,0,327,
166653,76,0,327,3,
1666677,0,327,3,78,
166670,327,3,79,0,
16668327,3,80,0,327,
166693,81,0,327,3,
1667082,0,327,3,83,
166710,327,3,84,0,
16672327,3,85,0,327,
166733,86,0,327,3,
1667487,0,327,3,88,
166750,327,3,89,0,
16676327,3,90,0,327,
166773,95,0,327,3,
1667897,0,327,3,98,
166790,327,3,99,0,
16680327,3,100,0,327,
166813,101,0,327,3,
16682102,0,327,3,103,
166830,327,3,104,0,
16684327,3,105,0,327,
166853,106,0,327,3,
16686107,0,327,3,108,
166870,327,1242,11,1,
16688829,0,330,1,-1,
166893,115,0,327,3,
16690116,0,327,3,117,
166910,327,3,118,0,
16692327,3,119,0,327,
166933,120,0,327,3,
16694121,0,327,3,122,
166950,327,3,48,0,
16696327,3,49,0,327,
166973,50,0,327,3,
1669851,0,327,3,52,
166990,327,3,53,0,
16700327,3,54,0,327,
167013,55,0,327,3,
1670256,0,327,3,57,
167030,327,3,65,0,
16704327,3,66,0,327,
167053,67,0,327,3,
1670668,0,327,3,69,
167070,327,3,70,0,
16708327,3,71,0,327,
167093,72,0,327,3,
1671073,0,327,3,74,
167110,327,3,75,0,
16712327,3,76,0,327,
167133,77,0,327,3,
1671478,0,327,3,79,
167150,327,3,80,0,
16716327,3,81,0,327,
167173,82,0,327,3,
1671883,0,327,3,84,
167190,327,3,85,0,
16720327,3,86,0,327,
167213,87,0,327,3,
1672288,0,327,3,89,
167230,327,3,90,0,
16724327,3,95,0,327,
167253,97,0,327,3,
1672698,0,327,3,99,
167270,327,3,100,0,
16728327,3,101,0,327,
167293,102,0,327,3,
16730103,0,327,3,104,
167310,327,3,105,0,
16732327,3,106,0,327,
167333,107,0,327,3,
16734108,0,327,1243,11,
167351,829,0,330,1,
16736-1,3,98,0,327,
167373,99,0,327,3,
16738100,0,327,3,101,
167390,327,3,102,0,
16740327,3,103,0,327,
167413,104,0,327,3,
16742105,0,327,3,106,
167430,327,3,107,0,
16744327,3,108,0,327,
167451244,11,1,829,0,
16746330,1,-1,3,117,
167470,327,3,118,0,
16748327,3,119,0,327,
167493,120,0,327,3,
16750121,0,327,3,122,
167510,327,3,48,0,
16752327,3,49,0,327,
167533,50,0,327,3,
1675451,0,327,3,52,
167550,327,3,53,0,
16756327,3,54,0,327,
167573,55,0,327,3,
1675856,0,327,3,57,
167590,327,3,65,0,
16760327,3,66,0,327,
167613,67,0,327,3,
1676268,0,327,3,69,
167630,327,3,70,0,
16764327,3,71,0,327,
167653,72,0,327,3,
1676673,0,327,3,74,
167670,327,3,75,0,
16768327,3,76,0,327,
167693,77,0,327,3,
1677078,0,327,3,79,
167710,327,3,80,0,
16772327,3,81,0,327,
167733,82,0,327,3,
1677483,0,327,3,84,
167750,327,3,85,0,
16776327,3,86,0,327,
167773,87,0,327,3,
1677888,0,327,3,89,
167790,327,3,90,0,
16780327,3,95,0,327,
167813,97,0,327,3,
1678298,0,327,3,99,
167830,327,3,100,0,
16784327,3,101,0,327,
167853,102,0,327,3,
16786103,0,327,3,104,
167870,327,3,105,0,
16788327,3,106,0,327,
167893,107,0,327,3,
16790108,0,327,1245,11,
167911,829,0,330,1,
16792-1,3,116,0,327,
167933,117,0,327,3,
16794118,0,327,3,119,
167950,327,3,120,0,
16796327,3,121,0,327,
167973,122,0,327,3,
1679848,0,327,3,49,
167990,327,3,50,0,
16800327,3,51,0,327,
168013,52,0,327,3,
1680253,0,327,3,54,
168030,327,3,55,0,
16804327,3,56,0,327,
168053,57,0,327,3,
1680665,0,327,3,66,
168070,327,3,67,0,
16808327,3,68,0,327,
168093,69,0,327,3,
1681070,0,327,3,71,
168110,327,3,72,0,
16812327,3,73,0,327,
168133,74,0,327,3,
1681475,0,327,3,76,
168150,327,3,77,0,
16816327,3,78,0,327,
168173,79,0,327,3,
1681880,0,327,3,81,
168190,327,3,82,0,
16820327,3,83,0,327,
168213,84,0,327,3,
1682285,0,327,3,86,
168230,327,3,87,0,
16824327,3,88,0,327,
168253,89,0,327,3,
1682690,0,327,3,95,
168270,327,3,97,0,
16828327,3,98,0,327,
168293,99,0,327,3,
16830100,0,327,3,101,
168310,1246,12,1,17431,
168321247,5,63,3,109,
168330,327,3,110,0,
168341248,12,1,17460,1249,
168355,63,3,109,0,
16836327,3,110,0,327,
168373,111,0,327,3,
16838112,0,327,3,113,
168390,327,3,114,0,
16840327,3,115,0,327,
168413,116,0,327,3,
16842117,0,327,3,118,
168430,327,3,119,0,
16844327,3,120,0,327,
168453,121,0,327,3,
16846122,0,327,3,48,
168470,327,3,49,0,
16848327,3,50,0,327,
168493,51,0,327,3,
1685052,0,327,3,53,
168510,327,3,54,0,
16852327,3,55,0,327,
168533,56,0,327,3,
1685457,0,327,3,65,
168550,327,3,66,0,
16856327,3,67,0,327,
168573,68,0,327,3,
1685869,0,327,3,70,
168590,327,3,71,0,
16860327,3,72,0,327,
168613,73,0,327,3,
1686274,0,327,3,75,
168630,327,3,76,0,
16864327,3,77,0,327,
168653,78,0,327,3,
1686679,0,327,3,80,
168670,327,3,81,0,
16868327,3,82,0,327,
168693,83,0,327,3,
1687084,0,327,3,85,
168710,327,3,86,0,
16872327,3,87,0,327,
168733,88,0,327,3,
1687489,0,327,3,90,
168750,327,3,95,0,
16876327,3,97,0,327,
168773,98,0,327,3,
1687899,0,327,3,100,
168790,1250,12,1,17506,
168801251,5,63,3,109,
168810,327,3,110,0,
16882327,3,111,0,327,
168833,112,0,327,3,
16884113,0,327,3,114,
168850,327,3,115,0,
16886327,3,116,0,327,
168873,117,0,327,3,
16888118,0,327,3,119,
168890,327,3,120,0,
16890327,3,121,0,327,
168913,122,0,327,3,
1689248,0,327,3,49,
168930,327,3,50,0,
16894327,3,51,0,327,
168953,52,0,327,3,
1689653,0,327,3,54,
168970,327,3,55,0,
16898327,3,56,0,327,
168993,57,0,327,3,
1690065,0,327,3,66,
169010,327,3,67,0,
16902327,3,68,0,327,
169033,69,0,327,3,
1690470,0,327,3,71,
169050,327,3,72,0,
16906327,3,73,0,327,
169073,74,0,327,3,
1690875,0,327,3,76,
169090,327,3,77,0,
16910327,3,78,0,327,
169113,79,0,327,3,
1691280,0,327,3,81,
169130,327,3,82,0,
16914327,3,83,0,327,
169153,84,0,327,3,
1691685,0,327,3,86,
169170,327,3,87,0,
16918327,3,88,0,327,
169193,89,0,327,3,
1692090,0,327,3,95,
169210,327,3,97,0,
16922327,3,98,0,327,
169233,99,0,327,3,
16924100,0,327,3,101,
169250,327,3,102,0,
16926327,3,103,0,327,
169273,104,0,327,3,
16928105,0,327,3,106,
169290,327,3,107,0,
16930327,3,108,0,327,
169311252,11,1,816,0,
169321253,4,30,84,0,
1693379,0,85,0,67,
169340,72,0,95,0,
1693569,0,78,0,68,
169360,95,0,69,0,
1693786,0,69,0,78,
169380,84,0,1,-1,
169393,101,0,327,3,
16940102,0,327,3,103,
169410,327,3,104,0,
16942327,3,105,0,327,
169433,106,0,327,3,
16944107,0,327,3,108,
169450,327,1254,11,1,
16946829,0,330,1,-1,
169473,111,0,327,3,
16948112,0,327,3,113,
169490,327,3,114,0,
16950327,3,115,0,327,
169513,116,0,327,3,
16952117,0,327,3,118,
169530,327,3,119,0,
16954327,3,120,0,327,
169553,121,0,327,3,
16956122,0,327,3,48,
169570,327,3,49,0,
16958327,3,50,0,327,
169593,51,0,327,3,
1696052,0,327,3,53,
169610,327,3,54,0,
16962327,3,55,0,327,
169633,56,0,327,3,
1696457,0,327,3,65,
169650,327,3,66,0,
16966327,3,67,0,327,
169673,68,0,327,3,
1696869,0,327,3,70,
169690,327,3,71,0,
16970327,3,72,0,327,
169713,73,0,327,3,
1697274,0,327,3,75,
169730,327,3,76,0,
16974327,3,77,0,327,
169753,78,0,327,3,
1697679,0,327,3,80,
169770,327,3,81,0,
16978327,3,82,0,327,
169793,83,0,327,3,
1698084,0,327,3,85,
169810,327,3,86,0,
16982327,3,87,0,327,
169833,88,0,327,3,
1698489,0,327,3,90,
169850,327,3,95,0,
16986327,3,97,0,327,
169873,98,0,327,3,
1698899,0,327,3,100,
169890,327,3,101,0,
16990327,3,102,0,327,
169913,103,0,327,3,
16992104,0,327,3,105,
169930,327,3,106,0,
16994327,3,107,0,327,
169953,108,0,327,1255,
1699611,1,829,0,330,
169971,-1,3,102,0,
16998327,3,103,0,327,
169993,104,0,327,3,
17000105,0,327,3,106,
170010,327,3,107,0,
17002327,3,108,0,327,
170031256,11,1,829,0,
17004330,1,-1,3,97,
170050,327,3,98,0,
17006327,3,99,0,327,
170073,100,0,327,3,
17008101,0,327,3,102,
170090,327,3,103,0,
17010327,3,104,0,327,
170113,105,0,327,3,
17012106,0,327,3,107,
170130,327,3,108,0,
17014327,1257,11,1,792,
170150,1258,4,22,84,
170160,79,0,85,0,
1701767,0,72,0,95,
170180,69,0,86,0,
1701969,0,78,0,84,
170200,1,-1,3,105,
170210,327,3,106,0,
17022327,3,107,0,327,
170233,108,0,327,1259,
1702411,1,829,0,330,
170251,-1,3,100,0,
17026327,3,101,0,327,
170273,102,0,327,3,
17028103,0,327,3,104,
170290,327,3,105,0,
17030327,3,106,0,327,
170313,107,0,327,3,
17032108,0,327,1260,11,
170331,829,0,330,1,
17034-1,3,118,0,327,
170353,119,0,327,3,
17036120,0,327,3,121,
170370,327,3,122,0,
17038327,3,48,0,327,
170393,49,0,327,3,
1704050,0,327,3,51,
170410,327,3,52,0,
17042327,3,53,0,327,
170433,54,0,327,3,
1704455,0,327,3,56,
170450,327,3,57,0,
17046327,3,65,0,327,
170473,66,0,327,3,
1704867,0,327,3,68,
170490,327,3,69,0,
17050327,3,70,0,327,
170513,71,0,327,3,
1705272,0,327,3,73,
170530,327,3,74,0,
17054327,3,75,0,327,
170553,76,0,327,3,
1705677,0,327,3,78,
170570,327,3,79,0,
17058327,3,80,0,327,
170593,81,0,327,3,
1706082,0,327,3,83,
170610,327,3,84,0,
17062327,3,85,0,327,
170633,86,0,327,3,
1706487,0,327,3,88,
170650,327,3,89,0,
17066327,3,90,0,327,
170673,95,0,327,3,
1706897,0,327,3,98,
170690,327,3,99,0,
17070327,3,100,0,327,
170713,101,0,327,3,
17072102,0,327,3,103,
170730,327,3,104,0,
17074327,3,105,0,327,
170753,106,0,327,3,
17076107,0,327,3,108,
170770,327,1261,11,1,
17078829,0,330,1,-1,
170793,112,0,327,3,
17080113,0,327,3,114,
170810,327,3,115,0,
17082327,3,116,0,327,
170833,117,0,327,3,
17084118,0,327,3,119,
170850,327,3,120,0,
17086327,3,121,0,327,
170873,122,0,327,3,
1708848,0,327,3,49,
170890,327,3,50,0,
17090327,3,51,0,327,
170913,52,0,327,3,
1709253,0,327,3,54,
170930,327,3,55,0,
17094327,3,56,0,327,
170953,57,0,327,3,
1709665,0,327,3,66,
170970,327,3,67,0,
17098327,3,68,0,327,
170993,69,0,327,3,
1710070,0,327,3,71,
171010,327,3,72,0,
17102327,3,73,0,327,
171033,74,0,327,3,
1710475,0,327,3,76,
171050,327,3,77,0,
17106327,3,78,0,327,
171073,79,0,327,3,
1710880,0,327,3,81,
171090,327,3,82,0,
17110327,3,83,0,327,
171113,84,0,327,3,
1711285,0,327,3,86,
171130,327,3,87,0,
17114327,3,88,0,327,
171153,89,0,327,3,
1711690,0,327,3,95,
171170,327,3,97,0,
17118327,3,98,0,327,
171193,99,0,327,3,
17120100,0,327,3,101,
171210,327,3,102,0,
17122327,3,103,0,327,
171233,104,0,327,3,
17124105,0,1262,12,1,
1712518148,1263,5,63,3,
17126109,0,1264,12,1,
1712718176,1265,5,63,3,
17128109,0,327,3,110,
171290,327,3,111,0,
17130327,3,112,0,327,
171313,113,0,327,3,
17132114,0,327,3,115,
171330,327,3,116,0,
17134327,3,117,0,327,
171353,118,0,327,3,
17136119,0,327,3,120,
171370,327,3,121,0,
17138327,3,122,0,327,
171393,48,0,327,3,
1714049,0,327,3,50,
171410,327,3,51,0,
17142327,3,52,0,327,
171433,53,0,327,3,
1714454,0,327,3,55,
171450,327,3,56,0,
17146327,3,57,0,327,
171473,65,0,327,3,
1714866,0,327,3,67,
171490,327,3,68,0,
17150327,3,69,0,327,
171513,70,0,327,3,
1715271,0,327,3,72,
171530,327,3,73,0,
17154327,3,74,0,327,
171553,75,0,327,3,
1715676,0,327,3,77,
171570,327,3,78,0,
17158327,3,79,0,327,
171593,80,0,327,3,
1716081,0,327,3,82,
171610,327,3,83,0,
17162327,3,84,0,327,
171633,85,0,327,3,
1716486,0,327,3,87,
171650,327,3,88,0,
17166327,3,89,0,327,
171673,90,0,327,3,
1716895,0,327,3,97,
171690,327,3,98,0,
17170327,3,99,0,327,
171713,100,0,327,3,
17172101,0,1266,12,1,
1717318223,1267,5,63,3,
17174109,0,327,3,110,
171750,327,3,111,0,
17176327,3,112,0,327,
171773,113,0,327,3,
17178114,0,1268,12,1,
1717918256,1269,5,63,3,
17180109,0,327,3,110,
171810,327,3,111,0,
17182327,3,112,0,327,
171833,113,0,327,3,
17184114,0,327,3,115,
171850,327,3,116,0,
17186327,3,117,0,327,
171873,118,0,327,3,
17188119,0,327,3,120,
171890,327,3,121,0,
17190327,3,122,0,327,
171913,48,0,327,3,
1719249,0,327,3,50,
171930,327,3,51,0,
17194327,3,52,0,327,
171953,53,0,327,3,
1719654,0,327,3,55,
171970,327,3,56,0,
17198327,3,57,0,327,
171993,65,0,327,3,
1720066,0,327,3,67,
172010,327,3,68,0,
17202327,3,69,0,327,
172033,70,0,327,3,
1720471,0,327,3,72,
172050,327,3,73,0,
17206327,3,74,0,327,
172073,75,0,327,3,
1720876,0,327,3,77,
172090,327,3,78,0,
17210327,3,79,0,327,
172113,80,0,327,3,
1721281,0,327,3,82,
172130,327,3,83,0,
17214327,3,84,0,327,
172153,85,0,327,3,
1721686,0,327,3,87,
172170,327,3,88,0,
17218327,3,89,0,327,
172193,90,0,327,3,
1722095,0,327,3,97,
172210,327,3,98,0,
17222327,3,99,0,327,
172233,100,0,327,3,
17224101,0,327,3,102,
172250,327,3,103,0,
17226327,3,104,0,327,
172273,105,0,327,3,
17228106,0,327,3,107,
172290,327,3,108,0,
17230327,1270,11,1,783,
172310,1271,4,22,84,
172320,73,0,77,0,
1723369,0,82,0,95,
172340,69,0,86,0,
1723569,0,78,0,84,
172360,1,-1,3,115,
172370,327,3,116,0,
17238327,3,117,0,327,
172393,118,0,327,3,
17240119,0,327,3,120,
172410,327,3,121,0,
17242327,3,122,0,327,
172433,48,0,327,3,
1724449,0,327,3,50,
172450,327,3,51,0,
17246327,3,52,0,327,
172473,53,0,327,3,
1724854,0,327,3,55,
172490,327,3,56,0,
17250327,3,57,0,327,
172513,65,0,327,3,
1725266,0,327,3,67,
172530,327,3,68,0,
17254327,3,69,0,327,
172553,70,0,327,3,
1725671,0,327,3,72,
172570,327,3,73,0,
17258327,3,74,0,327,
172593,75,0,327,3,
1726076,0,327,3,77,
172610,327,3,78,0,
17262327,3,79,0,327,
172633,80,0,327,3,
1726481,0,327,3,82,
172650,327,3,83,0,
17266327,3,84,0,327,
172673,85,0,327,3,
1726886,0,327,3,87,
172690,327,3,88,0,
17270327,3,89,0,327,
172713,90,0,327,3,
1727295,0,327,3,97,
172730,327,3,98,0,
17274327,3,99,0,327,
172753,100,0,327,3,
17276101,0,327,3,102,
172770,327,3,103,0,
17278327,3,104,0,327,
172793,105,0,327,3,
17280106,0,327,3,107,
172810,327,3,108,0,
17282327,1272,11,1,829,
172830,330,1,-1,3,
17284102,0,327,3,103,
172850,327,3,104,0,
17286327,3,105,0,327,
172873,106,0,327,3,
17288107,0,327,3,108,
172890,327,1273,11,1,
17290829,0,330,1,-1,
172913,110,0,327,3,
17292111,0,327,3,112,
172930,327,3,113,0,
17294327,3,114,0,327,
172953,115,0,327,3,
17296116,0,327,3,117,
172970,327,3,118,0,
17298327,3,119,0,327,
172993,120,0,327,3,
17300121,0,327,3,122,
173010,327,3,48,0,
17302327,3,49,0,327,
173033,50,0,327,3,
1730451,0,327,3,52,
173050,327,3,53,0,
17306327,3,54,0,327,
173073,55,0,327,3,
1730856,0,327,3,57,
173090,327,3,65,0,
17310327,3,66,0,327,
173113,67,0,327,3,
1731268,0,327,3,69,
173130,327,3,70,0,
17314327,3,71,0,327,
173153,72,0,327,3,
1731673,0,327,3,74,
173170,327,3,75,0,
17318327,3,76,0,327,
173193,77,0,327,3,
1732078,0,327,3,79,
173210,327,3,80,0,
17322327,3,81,0,327,
173233,82,0,327,3,
1732483,0,327,3,84,
173250,327,3,85,0,
17326327,3,86,0,327,
173273,87,0,327,3,
1732888,0,327,3,89,
173290,327,3,90,0,
17330327,3,95,0,327,
173313,97,0,327,3,
1733298,0,327,3,99,
173330,327,3,100,0,
17334327,3,101,0,327,
173353,102,0,327,3,
17336103,0,327,3,104,
173370,327,3,105,0,
17338327,3,106,0,327,
173393,107,0,327,3,
17340108,0,327,1274,11,
173411,829,0,330,1,
17342-1,3,106,0,327,
173433,107,0,327,3,
17344108,0,327,1275,11,
173451,829,0,330,1,
17346-1,3,117,0,325,
173473,118,0,1276,12,
173481,18699,1277,5,63,
173493,109,0,327,3,
17350110,0,327,3,111,
173510,327,3,112,0,
17352327,3,113,0,327,
173533,114,0,327,3,
17354115,0,327,3,116,
173550,327,3,117,0,
17356327,3,118,0,327,
173573,119,0,327,3,
17358120,0,327,3,121,
173590,327,3,122,0,
17360327,3,48,0,327,
173613,49,0,327,3,
1736250,0,327,3,51,
173630,327,3,52,0,
17364327,3,53,0,327,
173653,54,0,327,3,
1736655,0,327,3,56,
173670,327,3,57,0,
17368327,3,65,0,327,
173693,66,0,327,3,
1737067,0,327,3,68,
173710,327,3,69,0,
17372327,3,70,0,327,
173733,71,0,327,3,
1737472,0,327,3,73,
173750,327,3,74,0,
17376327,3,75,0,327,
173773,76,0,327,3,
1737877,0,327,3,78,
173790,327,3,79,0,
17380327,3,80,0,327,
173813,81,0,327,3,
1738282,0,327,3,83,
173830,327,3,84,0,
17384327,3,85,0,327,
173853,86,0,327,3,
1738687,0,327,3,88,
173870,327,3,89,0,
17388327,3,90,0,327,
173893,95,0,327,3,
1739097,0,327,3,98,
173910,327,3,99,0,
17392327,3,100,0,327,
173933,101,0,1278,12,
173941,18746,1279,5,63,
173953,109,0,327,3,
17396110,0,327,3,111,
173970,327,3,112,0,
17398327,3,113,0,327,
173993,114,0,327,3,
17400115,0,327,3,116,
174010,327,3,117,0,
17402327,3,118,0,327,
174033,119,0,327,3,
17404120,0,327,3,121,
174050,327,3,122,0,
17406327,3,48,0,327,
174073,49,0,327,3,
1740850,0,327,3,51,
174090,327,3,52,0,
17410327,3,53,0,327,
174113,54,0,327,3,
1741255,0,327,3,56,
174130,327,3,57,0,
17414327,3,65,0,327,
174153,66,0,327,3,
1741667,0,327,3,68,
174170,327,3,69,0,
17418327,3,70,0,327,
174193,71,0,327,3,
1742072,0,327,3,73,
174210,327,3,74,0,
17422327,3,75,0,327,
174233,76,0,327,3,
1742477,0,327,3,78,
174250,327,3,79,0,
17426327,3,80,0,327,
174273,81,0,327,3,
1742882,0,327,3,83,
174290,327,3,84,0,
17430327,3,85,0,327,
174313,86,0,327,3,
1743287,0,327,3,88,
174330,327,3,89,0,
17434327,3,90,0,327,
174353,95,0,327,3,
1743697,0,327,3,98,
174370,327,3,99,0,
174381280,12,1,18791,1281,
174395,63,3,109,0,
17440327,3,110,0,327,
174413,111,0,327,3,
17442112,0,327,3,113,
174430,327,3,114,0,
17444327,3,115,0,327,
174453,116,0,1282,12,
174461,18826,1283,5,63,
174473,109,0,327,3,
17448110,0,327,3,111,
174490,1284,12,1,18856,
174501285,5,63,3,109,
174510,327,3,110,0,
17452327,3,111,0,327,
174533,112,0,327,3,
17454113,0,327,3,114,
174550,1286,12,1,18889,
174561287,5,63,3,109,
174570,327,3,110,0,
17458327,3,111,0,327,
174593,112,0,327,3,
17460113,0,327,3,114,
174610,327,3,115,0,
17462327,3,116,0,327,
174633,117,0,327,3,
17464118,0,327,3,119,
174650,327,3,120,0,
17466327,3,121,0,327,
174673,122,0,327,3,
1746848,0,327,3,49,
174690,327,3,50,0,
17470327,3,51,0,327,
174713,52,0,327,3,
1747253,0,327,3,54,
174730,327,3,55,0,
17474327,3,56,0,327,
174753,57,0,327,3,
1747665,0,327,3,66,
174770,327,3,67,0,
17478327,3,68,0,327,
174793,69,0,327,3,
1748070,0,327,3,71,
174810,327,3,72,0,
17482327,3,73,0,327,
174833,74,0,327,3,
1748475,0,327,3,76,
174850,327,3,77,0,
17486327,3,78,0,327,
174873,79,0,327,3,
1748880,0,327,3,81,
174890,327,3,82,0,
17490327,3,83,0,327,
174913,84,0,327,3,
1749285,0,327,3,86,
174930,327,3,87,0,
17494327,3,88,0,327,
174953,89,0,327,3,
1749690,0,327,3,95,
174970,327,3,97,0,
17498327,3,98,0,327,
174993,99,0,327,3,
17500100,0,327,3,101,
175010,327,3,102,0,
17502327,3,103,0,327,
175033,104,0,327,3,
17504105,0,327,3,106,
175050,327,3,107,0,
17506327,3,108,0,327,
175071288,11,1,320,0,
175081289,4,22,86,0,
1750969,0,67,0,84,
175100,79,0,82,0,
1751195,0,84,0,89,
175120,80,0,69,0,
175131,-1,3,115,0,
17514327,3,116,0,327,
175153,117,0,327,3,
17516118,0,327,3,119,
175170,327,3,120,0,
17518327,3,121,0,327,
175193,122,0,327,3,
1752048,0,327,3,49,
175210,327,3,50,0,
17522327,3,51,0,327,
175233,52,0,327,3,
1752453,0,327,3,54,
175250,327,3,55,0,
17526327,3,56,0,327,
175273,57,0,327,3,
1752865,0,327,3,66,
175290,327,3,67,0,
17530327,3,68,0,327,
175313,69,0,327,3,
1753270,0,327,3,71,
175330,327,3,72,0,
17534327,3,73,0,327,
175353,74,0,327,3,
1753675,0,327,3,76,
175370,327,3,77,0,
17538327,3,78,0,327,
175393,79,0,327,3,
1754080,0,327,3,81,
175410,327,3,82,0,
17542327,3,83,0,327,
175433,84,0,327,3,
1754485,0,327,3,86,
175450,327,3,87,0,
17546327,3,88,0,327,
175473,89,0,327,3,
1754890,0,327,3,95,
175490,327,3,97,0,
17550327,3,98,0,327,
175513,99,0,327,3,
17552100,0,327,3,101,
175530,327,3,102,0,
17554327,3,103,0,327,
175553,104,0,327,3,
17556105,0,327,3,106,
175570,327,3,107,0,
17558327,3,108,0,327,
175591290,11,1,829,0,
17560330,1,-1,3,112,
175610,327,3,113,0,
17562327,3,114,0,327,
175633,115,0,327,3,
17564116,0,327,3,117,
175650,327,3,118,0,
17566327,3,119,0,327,
175673,120,0,327,3,
17568121,0,327,3,122,
175690,327,3,48,0,
17570327,3,49,0,327,
175713,50,0,327,3,
1757251,0,327,3,52,
175730,327,3,53,0,
17574327,3,54,0,327,
175753,55,0,327,3,
1757656,0,327,3,57,
175770,327,3,65,0,
17578327,3,66,0,327,
175793,67,0,327,3,
1758068,0,327,3,69,
175810,327,3,70,0,
17582327,3,71,0,327,
175833,72,0,327,3,
1758473,0,327,3,74,
175850,327,3,75,0,
17586327,3,76,0,327,
175873,77,0,327,3,
1758878,0,327,3,79,
175890,327,3,80,0,
17590327,3,81,0,327,
175913,82,0,327,3,
1759283,0,327,3,84,
175930,327,3,85,0,
17594327,3,86,0,327,
175953,87,0,327,3,
1759688,0,327,3,89,
175970,327,3,90,0,
17598327,3,95,0,327,
175993,97,0,327,3,
1760098,0,327,3,99,
176010,327,3,100,0,
17602327,3,101,0,327,
176033,102,0,327,3,
17604103,0,327,3,104,
176050,327,3,105,0,
17606327,3,106,0,327,
176073,107,0,327,3,
17608108,0,327,1291,11,
176091,829,0,330,1,
17610-1,3,117,0,327,
176113,118,0,327,3,
17612119,0,327,3,120,
176130,327,3,121,0,
17614327,3,122,0,327,
176153,48,0,327,3,
1761649,0,327,3,50,
176170,327,3,51,0,
17618327,3,52,0,327,
176193,53,0,327,3,
1762054,0,327,3,55,
176210,327,3,56,0,
17622327,3,57,0,327,
176233,65,0,327,3,
1762466,0,327,3,67,
176250,327,3,68,0,
17626327,3,69,0,327,
176273,70,0,327,3,
1762871,0,327,3,72,
176290,327,3,73,0,
17630327,3,74,0,327,
176313,75,0,327,3,
1763276,0,327,3,77,
176330,327,3,78,0,
17634327,3,79,0,327,
176353,80,0,327,3,
1763681,0,327,3,82,
176370,327,3,83,0,
17638327,3,84,0,327,
176393,85,0,327,3,
1764086,0,327,3,87,
176410,327,3,88,0,
17642327,3,89,0,327,
176433,90,0,327,3,
1764495,0,327,3,97,
176450,327,3,98,0,
17646327,3,99,0,327,
176473,100,0,327,3,
17648101,0,327,3,102,
176490,327,3,103,0,
17650327,3,104,0,327,
176513,105,0,327,3,
17652106,0,327,3,107,
176530,327,3,108,0,
17654327,1292,11,1,829,
176550,330,1,-1,3,
17656100,0,327,3,101,
176570,327,3,102,0,
17658327,3,103,0,327,
176593,104,0,327,3,
17660105,0,327,3,106,
176610,327,3,107,0,
17662327,3,108,0,327,
176631293,11,1,829,0,
17664330,1,-1,3,102,
176650,327,3,103,0,
17666327,3,104,0,327,
176673,105,0,327,3,
17668106,0,327,3,107,
176690,327,3,108,0,
17670327,1294,11,1,829,
176710,330,1,-1,3,
17672119,0,1295,12,1,
1767319420,1296,5,63,3,
17674109,0,327,3,110,
176750,327,3,111,0,
17676327,3,112,0,327,
176773,113,0,327,3,
17678114,0,327,3,115,
176790,327,3,116,0,
17680327,3,117,0,327,
176813,118,0,327,3,
17682119,0,327,3,120,
176830,327,3,121,0,
17684327,3,122,0,327,
176853,48,0,327,3,
1768649,0,327,3,50,
176870,327,3,51,0,
17688327,3,52,0,327,
176893,53,0,327,3,
1769054,0,327,3,55,
176910,327,3,56,0,
17692327,3,57,0,327,
176933,65,0,327,3,
1769466,0,327,3,67,
176950,327,3,68,0,
17696327,3,69,0,327,
176973,70,0,327,3,
1769871,0,327,3,72,
176990,327,3,73,0,
17700327,3,74,0,327,
177013,75,0,327,3,
1770276,0,327,3,77,
177030,327,3,78,0,
17704327,3,79,0,327,
177053,80,0,327,3,
1770681,0,327,3,82,
177070,327,3,83,0,
17708327,3,84,0,327,
177093,85,0,327,3,
1771086,0,327,3,87,
177110,327,3,88,0,
17712327,3,89,0,327,
177133,90,0,327,3,
1771495,0,327,3,97,
177150,327,3,98,0,
17716327,3,99,0,327,
177173,100,0,327,3,
17718101,0,327,3,102,
177190,327,3,103,0,
17720327,3,104,0,1297,
1772112,1,19470,1298,5,
1772263,3,109,0,327,
177233,110,0,327,3,
17724111,0,327,3,112,
177250,327,3,113,0,
17726327,3,114,0,327,
177273,115,0,327,3,
17728116,0,327,3,117,
177290,327,3,118,0,
17730327,3,119,0,327,
177313,120,0,327,3,
17732121,0,327,3,122,
177330,327,3,48,0,
17734327,3,49,0,327,
177353,50,0,327,3,
1773651,0,327,3,52,
177370,327,3,53,0,
17738327,3,54,0,327,
177393,55,0,327,3,
1774056,0,327,3,57,
177410,327,3,65,0,
17742327,3,66,0,327,
177433,67,0,327,3,
1774468,0,327,3,69,
177450,327,3,70,0,
17746327,3,71,0,327,
177473,72,0,327,3,
1774873,0,327,3,74,
177490,327,3,75,0,
17750327,3,76,0,327,
177513,77,0,327,3,
1775278,0,327,3,79,
177530,327,3,80,0,
17754327,3,81,0,327,
177553,82,0,327,3,
1775683,0,327,3,84,
177570,327,3,85,0,
17758327,3,86,0,327,
177593,87,0,327,3,
1776088,0,327,3,89,
177610,327,3,90,0,
17762327,3,95,0,327,
177633,97,0,327,3,
1776498,0,327,3,99,
177650,327,3,100,0,
17766327,3,101,0,327,
177673,102,0,327,3,
17768103,0,327,3,104,
177690,327,3,105,0,
177701299,12,1,19521,1300,
177715,63,3,109,0,
17772327,3,110,0,327,
177733,111,0,327,3,
17774112,0,327,3,113,
177750,327,3,114,0,
17776327,3,115,0,327,
177773,116,0,327,3,
17778117,0,327,3,118,
177790,327,3,119,0,
17780327,3,120,0,327,
177813,121,0,327,3,
17782122,0,327,3,48,
177830,327,3,49,0,
17784327,3,50,0,327,
177853,51,0,327,3,
1778652,0,327,3,53,
177870,327,3,54,0,
17788327,3,55,0,327,
177893,56,0,327,3,
1779057,0,327,3,65,
177910,327,3,66,0,
17792327,3,67,0,327,
177933,68,0,327,3,
1779469,0,327,3,70,
177950,327,3,71,0,
17796327,3,72,0,327,
177973,73,0,327,3,
1779874,0,327,3,75,
177990,327,3,76,0,
17800327,3,77,0,327,
178013,78,0,327,3,
1780279,0,327,3,80,
178030,327,3,81,0,
17804327,3,82,0,327,
178053,83,0,327,3,
1780684,0,327,3,85,
178070,327,3,86,0,
17808327,3,87,0,327,
178093,88,0,327,3,
1781089,0,327,3,90,
178110,327,3,95,0,
17812327,3,97,0,327,
178133,98,0,327,3,
1781499,0,327,3,100,
178150,327,3,101,0,
17816327,3,102,0,327,
178173,103,0,327,3,
17818104,0,327,3,105,
178190,327,3,106,0,
17820327,3,107,0,327,
178213,108,0,1301,12,
178221,19575,1302,5,63,
178233,109,0,327,3,
17824110,0,327,3,111,
178250,327,3,112,0,
17826327,3,113,0,327,
178273,114,0,327,3,
17828115,0,327,3,116,
178290,327,3,117,0,
17830327,3,118,0,327,
178313,119,0,327,3,
17832120,0,327,3,121,
178330,327,3,122,0,
17834327,3,48,0,327,
178353,49,0,327,3,
1783650,0,327,3,51,
178370,327,3,52,0,
17838327,3,53,0,327,
178393,54,0,327,3,
1784055,0,327,3,56,
178410,327,3,57,0,
17842327,3,65,0,327,
178433,66,0,327,3,
1784467,0,327,3,68,
178450,327,3,69,0,
17846327,3,70,0,327,
178473,71,0,327,3,
1784872,0,327,3,73,
178490,327,3,74,0,
17850327,3,75,0,327,
178513,76,0,327,3,
1785277,0,327,3,78,
178530,327,3,79,0,
17854327,3,80,0,327,
178553,81,0,327,3,
1785682,0,327,3,83,
178570,327,3,84,0,
17858327,3,85,0,327,
178593,86,0,327,3,
1786087,0,327,3,88,
178610,327,3,89,0,
17862327,3,90,0,327,
178633,95,0,327,3,
1786497,0,327,3,98,
178650,327,3,99,0,
17866327,3,100,0,327,
178673,101,0,1303,12,
178681,19622,1304,5,63,
178693,109,0,327,3,
17870110,0,327,3,111,
178710,327,3,112,0,
17872327,3,113,0,327,
178733,114,0,327,3,
17874115,0,327,3,116,
178750,327,3,117,0,
17876327,3,118,0,327,
178773,119,0,327,3,
17878120,0,327,3,121,
178790,327,3,122,0,
17880327,3,48,0,327,
178813,49,0,327,3,
1788250,0,327,3,51,
178830,327,3,52,0,
17884327,3,53,0,327,
178853,54,0,327,3,
1788655,0,327,3,56,
178870,327,3,57,0,
17888327,3,65,0,327,
178893,66,0,327,3,
1789067,0,327,3,68,
178910,327,3,69,0,
17892327,3,70,0,327,
178933,71,0,327,3,
1789472,0,327,3,73,
178950,327,3,74,0,
17896327,3,75,0,327,
178973,76,0,327,3,
1789877,0,327,3,78,
178990,327,3,79,0,
17900327,3,80,0,327,
179013,81,0,327,3,
1790282,0,327,3,83,
179030,327,3,84,0,
17904327,3,85,0,327,
179053,86,0,327,3,
1790687,0,327,3,88,
179070,327,3,89,0,
17908327,3,90,0,327,
179093,95,0,327,3,
1791097,0,327,3,98,
179110,327,3,99,0,
17912327,3,100,0,327,
179133,101,0,327,3,
17914102,0,327,3,103,
179150,327,3,104,0,
17916327,3,105,0,327,
179173,106,0,327,3,
17918107,0,327,3,108,
179190,327,1305,11,1,
17920229,0,1306,4,10,
1792187,0,72,0,73,
179220,76,0,69,0,
179231,-1,3,102,0,
17924327,3,103,0,327,
179253,104,0,327,3,
17926105,0,327,3,106,
179270,327,3,107,0,
17928327,3,108,0,327,
179291307,11,1,829,0,
17930330,1,-1,1308,11,
179311,829,0,330,1,
17932-1,3,106,0,327,
179333,107,0,327,3,
17934108,0,327,1309,11,
179351,829,0,330,1,
17936-1,3,105,0,327,
179373,106,0,327,3,
17938107,0,327,3,108,
179390,327,1310,11,1,
17940829,0,330,1,-1,
179413,120,0,325,3,
17942121,0,325,3,122,
179430,325,3,123,0,
179441311,12,1,39751,1312,
179455,0,1313,11,1,
1794651,0,1314,4,20,
1794776,0,69,0,70,
179480,84,0,95,0,
1794966,0,82,0,65,
179500,67,0,69,0,
179511,-1,3,124,0,
179521315,12,1,42534,1316,
179535,1,3,124,0,
179541317,12,1,42646,1318,
179555,0,1319,11,1,
17956191,0,1320,4,26,
1795783,0,84,0,82,
179580,79,0,75,0,
1795969,0,95,0,83,
179600,84,0,82,0,
1796179,0,75,0,69,
179620,1,-1,1321,11,
179631,165,0,1322,4,
1796412,83,0,84,0,
1796582,0,79,0,75,
179660,69,0,1,-1,
179673,125,0,1323,12,
179681,40116,1324,5,0,
179691325,11,1,56,0,
179701326,4,22,82,0,
1797173,0,71,0,72,
179720,84,0,95,0,
1797366,0,82,0,65,
179740,67,0,69,0,
179751,-1,3,126,0,
179761327,12,1,42775,1328,
179775,0,1329,11,1,
17978175,0,1330,4,10,
1797984,0,73,0,76,
179800,68,0,69,0,
179811,-1,0,165,1,
17982-1,1331,4,12,83,
179830,84,0,82,0,
1798473,0,78,0,71,
179850,1332,12,1,44343,
179861333,5,119,3,1,
179870,1334,12,1,44344,
179881335,5,0,1336,11,
179891,930,0,165,1,
17990-1,3,9,0,1334,
179913,10,0,1337,12,
179921,44545,1338,5,0,
179931339,11,1,936,0,
17994165,1,-1,3,13,
179950,1334,3,0,3,
179961334,3,96,33,1334,
179973,32,0,1334,3,
1799833,0,1334,3,34,
179990,1340,12,1,45292,
180001341,5,0,1342,11,
180011,994,0,165,1,
18002-1,3,35,0,1334,
180033,36,0,1334,3,
1800437,0,1334,3,38,
180050,1334,3,40,0,
180061334,3,41,0,1334,
180073,42,0,1334,3,
1800843,0,1334,3,44,
180090,1334,3,45,0,
180101334,3,46,0,1334,
180113,47,0,1334,3,
180123,9,1334,3,49,
180130,1334,3,50,0,
180141334,3,48,0,1334,
180153,52,0,1334,3,
1801653,0,1334,3,51,
180170,1334,3,55,0,
180181334,3,56,0,1334,
180193,54,0,1334,3,
1802059,0,1334,3,57,
180210,1334,3,61,0,
180221334,3,62,0,1334,
180233,60,0,1334,3,
1802464,0,1334,3,65,
180250,1334,3,66,0,
180261334,3,67,0,1334,
180273,68,0,1334,3,
1802869,0,1334,3,70,
180290,1334,3,71,0,
180301334,3,72,0,1334,
180313,73,0,1334,3,
1803274,0,1334,3,75,
180330,1334,3,76,0,
180341334,3,77,0,1334,
180353,78,0,1334,3,
1803679,0,1334,3,80,
180370,1334,3,81,0,
180381334,3,82,0,1334,
180393,83,0,1334,3,
1804084,0,1334,3,85,
180410,1334,3,86,0,
180421334,3,87,0,1334,
180433,88,0,1334,3,
1804489,0,1334,3,90,
180450,1334,3,91,0,
180461334,3,92,0,1343,
1804712,1,44688,1344,5,
180484,3,110,0,1345,
1804912,1,44717,1346,5,
180500,1347,11,1,941,
180510,165,1,-1,3,
1805234,0,1348,12,1,
1805345157,1349,5,0,1350,
1805411,1,965,0,165,
180551,-1,3,92,0,
180561351,12,1,45033,1352,
180575,0,1353,11,1,
18058977,0,165,1,-1,
180593,116,0,1354,12,
180601,44843,1355,5,0,
180611356,11,1,953,0,
18062165,1,-1,1357,11,
180631,989,0,165,1,
18064-1,3,93,0,1334,
180653,94,0,1334,3,
1806695,0,1334,3,96,
180670,1334,3,97,0,
180681334,3,98,0,1334,
180693,99,0,1334,3,
18070100,0,1334,3,101,
180710,1334,3,102,0,
180721334,3,103,0,1334,
180733,104,0,1334,3,
18074105,0,1334,3,106,
180750,1334,3,107,0,
180761334,3,108,0,1334,
180773,109,0,1334,3,
18078110,0,1334,3,111,
180790,1334,3,112,0,
180801334,3,113,0,1334,
180813,114,0,1334,3,
18082115,0,1334,3,116,
180830,1334,3,117,0,
180841334,3,118,0,1334,
180853,119,0,1334,3,
18086120,0,1334,3,121,
180870,1334,3,122,0,
180881334,3,123,0,1334,
180893,124,0,1334,3,
18090125,0,1334,3,96,
180916,1334,3,126,0,
180921334,3,58,15,1334,
180933,59,15,1334,3,
18094136,4,1334,3,160,
180950,1334,3,15,7,
180961334,3,170,0,1334,
180973,171,0,1334,3,
18098172,0,1334,3,173,
180990,1334,3,178,0,
181001334,3,176,2,1334,
181013,187,0,1334,3,
18102187,1,1334,3,192,
181030,1334,3,41,32,
181041334,3,197,1,1334,
181053,0,224,1334,3,
1810640,32,1334,3,63,
1810732,1334,0,165,1,
18108-1,1358,5,92,236,
181091359,10,236,1,19,
18110555,1360,10,555,1,
1811147,283,1361,10,283,
181121,92,1138,1362,10,
181131138,1,50,1007,1363,
1811410,1007,1,80,1157,
181151364,10,1157,1,53,
18116173,1365,10,173,1,
1811737,584,1366,10,584,
181181,43,666,1367,10,
18119666,1,51,595,1368,
1812010,595,1,46,196,
181211369,10,196,1,16,
18122200,1370,10,200,1,
1812317,638,1371,10,638,
181241,68,867,1372,10,
18125867,1,75,343,1373,
1812610,343,1,35,208,
181271374,10,208,1,20,
18128214,1375,10,214,1,
181296,184,1376,10,184,
181301,22,268,1377,10,
18131268,1,21,250,1378,
1813210,250,1,94,1258,
181331379,10,1258,1,88,
18134463,1380,10,463,1,
1813564,686,1381,10,686,
181361,49,339,1382,10,
18137339,1,28,300,1383,
1813810,300,1,25,675,
181391384,10,675,1,42,
18140758,1385,10,758,1,
1814169,1197,1386,10,1197,
181421,48,318,1387,10,
18143318,1,41,816,1388,
1814410,816,1,57,218,
181451389,10,218,1,4,
18146324,1390,10,324,1,
1814723,475,1391,10,475,
181481,63,1212,1392,10,
181491212,1,84,306,1393,
1815010,306,1,29,230,
181511394,10,230,1,5,
18152298,1395,10,298,1,
1815331,606,1396,10,606,
181541,52,855,1397,10,
18155855,1,76,1080,1398,
1815610,1080,1,83,983,
181571399,10,983,1,81,
18158961,1400,10,961,1,
1815977,171,1401,10,171,
181601,30,234,1402,10,
18161234,1,7,813,1403,
1816210,813,1,73,182,
181631404,10,182,1,10,
18164335,1405,10,335,1,
1816527,276,1406,10,276,
181661,93,224,1407,10,
18167224,1,14,254,1408,
1816810,254,1,24,697,
181691409,10,697,1,54,
18170266,1410,10,266,1,
181719,1191,1411,10,1191,
181721,86,480,1412,10,
18173480,1,62,1413,4,
1817430,83,0,84,0,
1817582,0,73,0,78,
181760,71,0,95,0,
1817767,0,79,0,78,
181780,83,0,84,0,
1817965,0,78,0,84,
181800,1414,10,1413,1,
181813,1306,1415,10,1306,
181821,45,330,1416,10,
18183330,1,91,533,1417,
1818410,533,1,66,1034,
181851418,10,1034,1,56,
18186384,1419,10,384,1,
1818758,1314,1420,10,1314,
181881,12,513,1421,10,
18189513,1,44,294,1422,
1819010,294,1,40,1120,
181911423,10,1120,1,82,
18192573,1424,10,573,1,
1819367,912,1425,10,912,
181941,78,1330,1426,10,
181951330,1,36,1322,1427,
1819610,1322,1,34,753,
181971428,10,753,1,70,
181981271,1429,10,1271,1,
1819987,831,1430,10,831,
182001,74,320,1431,10,
18201320,1,26,407,1432,
1820210,407,1,59,192,
182031433,10,192,1,33,
18204288,1434,10,288,1,
1820511,190,1435,10,190,
182061,38,501,1436,10,
18207501,1,61,794,1437,
1820810,794,1,72,1253,
182091438,10,1253,1,90,
18210308,1439,10,308,1,
1821115,935,1440,10,935,
182121,79,1320,1441,10,
182131320,1,39,314,1442,
1821410,314,1,32,1241,
182151443,10,1241,1,89,
18216357,1444,10,357,1,
1821760,1289,1445,10,1289,
182181,55,1326,1446,10,
182191326,1,13,1180,1447,
1822010,1180,1,85,220,
182211448,10,220,1,18,
18222206,1449,10,206,1,
182238,741,1450,10,741,
182241,71,431,1451,10,
18225431,1,65,1452,5,
182260,0};
18227 new Tfactory(this,"MINUS",new TCreator(MINUS_factory));
18228 new Tfactory(this,"DEFAULT_STATE",new TCreator(DEFAULT_STATE_factory));
18229 new Tfactory(this,"INTEGER_CONSTANT",new TCreator(INTEGER_CONSTANT_factory));
18230 new Tfactory(this,"RETURN",new TCreator(RETURN_factory));
18231 new Tfactory(this,"OBJECT_REZ_EVENT",new TCreator(OBJECT_REZ_EVENT_factory));
18232 new Tfactory(this,"STRING_TYPE",new TCreator(STRING_TYPE_factory));
18233 new Tfactory(this,"EXCLAMATION",new TCreator(EXCLAMATION_factory));
18234 new Tfactory(this,"ELSE",new TCreator(ELSE_factory));
18235 new Tfactory(this,"INTEGER_TYPE",new TCreator(INTEGER_TYPE_factory));
18236 new Tfactory(this,"FOR",new TCreator(FOR_factory));
18237 new Tfactory(this,"LEFT_PAREN",new TCreator(LEFT_PAREN_factory));
18238 new Tfactory(this,"RIGHT_PAREN",new TCreator(RIGHT_PAREN_factory));
18239 new Tfactory(this,"HTTP_RESPONSE_EVENT",new TCreator(HTTP_RESPONSE_EVENT_factory));
18240 new Tfactory(this,"MOVING_END_EVENT",new TCreator(MOVING_END_EVENT_factory));
18241 new Tfactory(this,"CARET",new TCreator(CARET_factory));
18242 new Tfactory(this,"STAR",new TCreator(STAR_factory));
18243 new Tfactory(this,"PLUS_EQUALS",new TCreator(PLUS_EQUALS_factory));
18244 new Tfactory(this,"PERCENT",new TCreator(PERCENT_factory));
18245 new Tfactory(this,"SLASH",new TCreator(SLASH_factory));
18246 new Tfactory(this,"FLOAT_CONSTANT",new TCreator(FLOAT_CONSTANT_factory));
18247 new Tfactory(this,"TOUCH_EVENT",new TCreator(TOUCH_EVENT_factory));
18248 new Tfactory(this,"COLLISION_START_EVENT",new TCreator(COLLISION_START_EVENT_factory));
18249 new Tfactory(this,"JUMP",new TCreator(JUMP_factory));
18250 new Tfactory(this,"RIGHT_BRACKET",new TCreator(RIGHT_BRACKET_factory));
18251 new Tfactory(this,"LEFT_ANGLE",new TCreator(LEFT_ANGLE_factory));
18252 new Tfactory(this,"IF",new TCreator(IF_factory));
18253 new Tfactory(this,"LAND_COLLISION_EVENT",new TCreator(LAND_COLLISION_EVENT_factory));
18254 new Tfactory(this,"STATE",new TCreator(STATE_factory));
18255 new Tfactory(this,"RIGHT_SHIFT",new TCreator(RIGHT_SHIFT_factory));
18256 new Tfactory(this,"LIST_TYPE",new TCreator(LIST_TYPE_factory));
18257 new Tfactory(this,"INCREMENT",new TCreator(INCREMENT_factory));
18258 new Tfactory(this,"AT",new TCreator(AT_factory));
18259 new Tfactory(this,"COLLISION_END_EVENT",new TCreator(COLLISION_END_EVENT_factory));
18260 new Tfactory(this,"SENSOR_EVENT",new TCreator(SENSOR_EVENT_factory));
18261 new Tfactory(this,"EQUALS_EQUALS",new TCreator(EQUALS_EQUALS_factory));
18262 new Tfactory(this,"DECREMENT",new TCreator(DECREMENT_factory));
18263 new Tfactory(this,"LESS_EQUALS",new TCreator(LESS_EQUALS_factory));
18264 new Tfactory(this,"FLOAT_TYPE",new TCreator(FLOAT_TYPE_factory));
18265 new Tfactory(this,"MOVING_START_EVENT",new TCreator(MOVING_START_EVENT_factory));
18266 new Tfactory(this,"RUN_TIME_PERMISSIONS_EVENT",new TCreator(RUN_TIME_PERMISSIONS_EVENT_factory));
18267 new Tfactory(this,"ON_REZ_EVENT",new TCreator(ON_REZ_EVENT_factory));
18268 new Tfactory(this,"NO_SENSOR_EVENT",new TCreator(NO_SENSOR_EVENT_factory));
18269 new Tfactory(this,"EXCLAMATION_EQUALS",new TCreator(EXCLAMATION_EQUALS_factory));
18270 new Tfactory(this,"MINUS_EQUALS",new TCreator(MINUS_EQUALS_factory));
18271 new Tfactory(this,"LISTEN_EVENT",new TCreator(LISTEN_EVENT_factory));
18272 new Tfactory(this,"PERCENT_EQUALS",new TCreator(PERCENT_EQUALS_factory));
18273 new Tfactory(this,"LEFT_BRACKET",new TCreator(LEFT_BRACKET_factory));
18274 new Tfactory(this,"HEX_INTEGER_CONSTANT",new TCreator(HEX_INTEGER_CONSTANT_factory));
18275 new Tfactory(this,"COMMA",new TCreator(COMMA_factory));
18276 new Tfactory(this,"PERIOD",new TCreator(PERIOD_factory));
18277 new Tfactory(this,"KEY_TYPE",new TCreator(KEY_TYPE_factory));
18278 new Tfactory(this,"SLASH_EQUALS",new TCreator(SLASH_EQUALS_factory));
18279 new Tfactory(this,"STATE_EXIT_EVENT",new TCreator(STATE_EXIT_EVENT_factory));
18280 new Tfactory(this,"COLLISION_EVENT",new TCreator(COLLISION_EVENT_factory));
18281 new Tfactory(this,"STRING_CONSTANT",new TCreator(STRING_CONSTANT_factory));
18282 new Tfactory(this,"WHILE",new TCreator(WHILE_factory));
18283 new Tfactory(this,"IDENT",new TCreator(IDENT_factory));
18284 new Tfactory(this,"DATASERVER_EVENT",new TCreator(DATASERVER_EVENT_factory));
18285 new Tfactory(this,"ROTATION_TYPE",new TCreator(ROTATION_TYPE_factory));
18286 new Tfactory(this,"AT_ROT_TARGET_EVENT",new TCreator(AT_ROT_TARGET_EVENT_factory));
18287 new Tfactory(this,"LEFT_BRACE",new TCreator(LEFT_BRACE_factory));
18288 new Tfactory(this,"DO",new TCreator(DO_factory));
18289 new Tfactory(this,"LEFT_SHIFT",new TCreator(LEFT_SHIFT_factory));
18290 new Tfactory(this,"REMOTE_DATA_EVENT",new TCreator(REMOTE_DATA_EVENT_factory));
18291 new Tfactory(this,"EMAIL_EVENT",new TCreator(EMAIL_EVENT_factory));
18292 new Tfactory(this,"NOT_AT_ROT_TARGET_EVENT",new TCreator(NOT_AT_ROT_TARGET_EVENT_factory));
18293 new Tfactory(this,"TILDE",new TCreator(TILDE_factory));
18294 new Tfactory(this,"STROKE",new TCreator(STROKE_factory));
18295 new Tfactory(this,"LAND_COLLISION_END_EVENT",new TCreator(LAND_COLLISION_END_EVENT_factory));
18296 new Tfactory(this,"TIMER_EVENT",new TCreator(TIMER_EVENT_factory));
18297 new Tfactory(this,"MONEY_EVENT",new TCreator(MONEY_EVENT_factory));
18298 new Tfactory(this,"RIGHT_ANGLE",new TCreator(RIGHT_ANGLE_factory));
18299 new Tfactory(this,"AT_TARGET_EVENT",new TCreator(AT_TARGET_EVENT_factory));
18300 new Tfactory(this,"AMP",new TCreator(AMP_factory));
18301 new Tfactory(this,"SEMICOLON",new TCreator(SEMICOLON_factory));
18302 new Tfactory(this,"AMP_AMP",new TCreator(AMP_AMP_factory));
18303 new Tfactory(this,"CHANGED_EVENT",new TCreator(CHANGED_EVENT_factory));
18304 new Tfactory(this,"LINK_MESSAGE_EVENT",new TCreator(LINK_MESSAGE_EVENT_factory));
18305 new Tfactory(this,"TOUCH_END_EVENT",new TCreator(TOUCH_END_EVENT_factory));
18306 new Tfactory(this,"EQUALS",new TCreator(EQUALS_factory));
18307 new Tfactory(this,"NOT_AT_TARGET_EVENT",new TCreator(NOT_AT_TARGET_EVENT_factory));
18308 new Tfactory(this,"STROKE_STROKE",new TCreator(STROKE_STROKE_factory));
18309 new Tfactory(this,"GREATER_EQUALS",new TCreator(GREATER_EQUALS_factory));
18310 new Tfactory(this,"TOUCH_START_EVENT",new TCreator(TOUCH_START_EVENT_factory));
18311 new Tfactory(this,"ATTACH_EVENT",new TCreator(ATTACH_EVENT_factory));
18312 new Tfactory(this,"VECTOR_TYPE",new TCreator(VECTOR_TYPE_factory));
18313 new Tfactory(this,"RIGHT_BRACE",new TCreator(RIGHT_BRACE_factory));
18314 new Tfactory(this,"STATE_ENTRY_EVENT",new TCreator(STATE_ENTRY_EVENT_factory));
18315 new Tfactory(this,"PLUS",new TCreator(PLUS_factory));
18316 new Tfactory(this,"STAR_EQUALS",new TCreator(STAR_EQUALS_factory));
18317 new Tfactory(this,"LAND_COLLISION_START_EVENT",new TCreator(LAND_COLLISION_START_EVENT_factory));
18318 new Tfactory(this,"CONTROL_EVENT",new TCreator(CONTROL_EVENT_factory));
18319}
18320public static object MINUS_factory(Lexer yyl) { return new MINUS(yyl);}
18321public static object DEFAULT_STATE_factory(Lexer yyl) { return new DEFAULT_STATE(yyl);}
18322public static object INTEGER_CONSTANT_factory(Lexer yyl) { return new INTEGER_CONSTANT(yyl);}
18323public static object RETURN_factory(Lexer yyl) { return new RETURN(yyl);}
18324public static object OBJECT_REZ_EVENT_factory(Lexer yyl) { return new OBJECT_REZ_EVENT(yyl);}
18325public static object STRING_TYPE_factory(Lexer yyl) { return new STRING_TYPE(yyl);}
18326public static object EXCLAMATION_factory(Lexer yyl) { return new EXCLAMATION(yyl);}
18327public static object ELSE_factory(Lexer yyl) { return new ELSE(yyl);}
18328public static object INTEGER_TYPE_factory(Lexer yyl) { return new INTEGER_TYPE(yyl);}
18329public static object FOR_factory(Lexer yyl) { return new FOR(yyl);}
18330public static object LEFT_PAREN_factory(Lexer yyl) { return new LEFT_PAREN(yyl);}
18331public static object RIGHT_PAREN_factory(Lexer yyl) { return new RIGHT_PAREN(yyl);}
18332public static object HTTP_RESPONSE_EVENT_factory(Lexer yyl) { return new HTTP_RESPONSE_EVENT(yyl);}
18333public static object MOVING_END_EVENT_factory(Lexer yyl) { return new MOVING_END_EVENT(yyl);}
18334public static object CARET_factory(Lexer yyl) { return new CARET(yyl);}
18335public static object STAR_factory(Lexer yyl) { return new STAR(yyl);}
18336public static object PLUS_EQUALS_factory(Lexer yyl) { return new PLUS_EQUALS(yyl);}
18337public static object PERCENT_factory(Lexer yyl) { return new PERCENT(yyl);}
18338public static object SLASH_factory(Lexer yyl) { return new SLASH(yyl);}
18339public static object FLOAT_CONSTANT_factory(Lexer yyl) { return new FLOAT_CONSTANT(yyl);}
18340public static object TOUCH_EVENT_factory(Lexer yyl) { return new TOUCH_EVENT(yyl);}
18341public static object COLLISION_START_EVENT_factory(Lexer yyl) { return new COLLISION_START_EVENT(yyl);}
18342public static object JUMP_factory(Lexer yyl) { return new JUMP(yyl);}
18343public static object RIGHT_BRACKET_factory(Lexer yyl) { return new RIGHT_BRACKET(yyl);}
18344public static object LEFT_ANGLE_factory(Lexer yyl) { return new LEFT_ANGLE(yyl);}
18345public static object IF_factory(Lexer yyl) { return new IF(yyl);}
18346public static object LAND_COLLISION_EVENT_factory(Lexer yyl) { return new LAND_COLLISION_EVENT(yyl);}
18347public static object STATE_factory(Lexer yyl) { return new STATE(yyl);}
18348public static object RIGHT_SHIFT_factory(Lexer yyl) { return new RIGHT_SHIFT(yyl);}
18349public static object LIST_TYPE_factory(Lexer yyl) { return new LIST_TYPE(yyl);}
18350public static object INCREMENT_factory(Lexer yyl) { return new INCREMENT(yyl);}
18351public static object AT_factory(Lexer yyl) { return new AT(yyl);}
18352public static object COLLISION_END_EVENT_factory(Lexer yyl) { return new COLLISION_END_EVENT(yyl);}
18353public static object SENSOR_EVENT_factory(Lexer yyl) { return new SENSOR_EVENT(yyl);}
18354public static object EQUALS_EQUALS_factory(Lexer yyl) { return new EQUALS_EQUALS(yyl);}
18355public static object DECREMENT_factory(Lexer yyl) { return new DECREMENT(yyl);}
18356public static object LESS_EQUALS_factory(Lexer yyl) { return new LESS_EQUALS(yyl);}
18357public static object FLOAT_TYPE_factory(Lexer yyl) { return new FLOAT_TYPE(yyl);}
18358public static object MOVING_START_EVENT_factory(Lexer yyl) { return new MOVING_START_EVENT(yyl);}
18359public static object RUN_TIME_PERMISSIONS_EVENT_factory(Lexer yyl) { return new RUN_TIME_PERMISSIONS_EVENT(yyl);}
18360public static object ON_REZ_EVENT_factory(Lexer yyl) { return new ON_REZ_EVENT(yyl);}
18361public static object NO_SENSOR_EVENT_factory(Lexer yyl) { return new NO_SENSOR_EVENT(yyl);}
18362public static object EXCLAMATION_EQUALS_factory(Lexer yyl) { return new EXCLAMATION_EQUALS(yyl);}
18363public static object MINUS_EQUALS_factory(Lexer yyl) { return new MINUS_EQUALS(yyl);}
18364public static object LISTEN_EVENT_factory(Lexer yyl) { return new LISTEN_EVENT(yyl);}
18365public static object PERCENT_EQUALS_factory(Lexer yyl) { return new PERCENT_EQUALS(yyl);}
18366public static object LEFT_BRACKET_factory(Lexer yyl) { return new LEFT_BRACKET(yyl);}
18367public static object HEX_INTEGER_CONSTANT_factory(Lexer yyl) { return new HEX_INTEGER_CONSTANT(yyl);}
18368public static object COMMA_factory(Lexer yyl) { return new COMMA(yyl);}
18369public static object PERIOD_factory(Lexer yyl) { return new PERIOD(yyl);}
18370public static object KEY_TYPE_factory(Lexer yyl) { return new KEY_TYPE(yyl);}
18371public static object SLASH_EQUALS_factory(Lexer yyl) { return new SLASH_EQUALS(yyl);}
18372public static object STATE_EXIT_EVENT_factory(Lexer yyl) { return new STATE_EXIT_EVENT(yyl);}
18373public static object COLLISION_EVENT_factory(Lexer yyl) { return new COLLISION_EVENT(yyl);}
18374public static object STRING_CONSTANT_factory(Lexer yyl) { return new STRING_CONSTANT(yyl);}
18375public static object WHILE_factory(Lexer yyl) { return new WHILE(yyl);}
18376public static object IDENT_factory(Lexer yyl) { return new IDENT(yyl);}
18377public static object DATASERVER_EVENT_factory(Lexer yyl) { return new DATASERVER_EVENT(yyl);}
18378public static object ROTATION_TYPE_factory(Lexer yyl) { return new ROTATION_TYPE(yyl);}
18379public static object AT_ROT_TARGET_EVENT_factory(Lexer yyl) { return new AT_ROT_TARGET_EVENT(yyl);}
18380public static object LEFT_BRACE_factory(Lexer yyl) { return new LEFT_BRACE(yyl);}
18381public static object DO_factory(Lexer yyl) { return new DO(yyl);}
18382public static object LEFT_SHIFT_factory(Lexer yyl) { return new LEFT_SHIFT(yyl);}
18383public static object REMOTE_DATA_EVENT_factory(Lexer yyl) { return new REMOTE_DATA_EVENT(yyl);}
18384public static object EMAIL_EVENT_factory(Lexer yyl) { return new EMAIL_EVENT(yyl);}
18385public static object NOT_AT_ROT_TARGET_EVENT_factory(Lexer yyl) { return new NOT_AT_ROT_TARGET_EVENT(yyl);}
18386public static object TILDE_factory(Lexer yyl) { return new TILDE(yyl);}
18387public static object STROKE_factory(Lexer yyl) { return new STROKE(yyl);}
18388public static object LAND_COLLISION_END_EVENT_factory(Lexer yyl) { return new LAND_COLLISION_END_EVENT(yyl);}
18389public static object TIMER_EVENT_factory(Lexer yyl) { return new TIMER_EVENT(yyl);}
18390public static object MONEY_EVENT_factory(Lexer yyl) { return new MONEY_EVENT(yyl);}
18391public static object RIGHT_ANGLE_factory(Lexer yyl) { return new RIGHT_ANGLE(yyl);}
18392public static object AT_TARGET_EVENT_factory(Lexer yyl) { return new AT_TARGET_EVENT(yyl);}
18393public static object AMP_factory(Lexer yyl) { return new AMP(yyl);}
18394public static object SEMICOLON_factory(Lexer yyl) { return new SEMICOLON(yyl);}
18395public static object AMP_AMP_factory(Lexer yyl) { return new AMP_AMP(yyl);}
18396public static object CHANGED_EVENT_factory(Lexer yyl) { return new CHANGED_EVENT(yyl);}
18397public static object LINK_MESSAGE_EVENT_factory(Lexer yyl) { return new LINK_MESSAGE_EVENT(yyl);}
18398public static object TOUCH_END_EVENT_factory(Lexer yyl) { return new TOUCH_END_EVENT(yyl);}
18399public static object EQUALS_factory(Lexer yyl) { return new EQUALS(yyl);}
18400public static object NOT_AT_TARGET_EVENT_factory(Lexer yyl) { return new NOT_AT_TARGET_EVENT(yyl);}
18401public static object STROKE_STROKE_factory(Lexer yyl) { return new STROKE_STROKE(yyl);}
18402public static object GREATER_EQUALS_factory(Lexer yyl) { return new GREATER_EQUALS(yyl);}
18403public static object TOUCH_START_EVENT_factory(Lexer yyl) { return new TOUCH_START_EVENT(yyl);}
18404public static object ATTACH_EVENT_factory(Lexer yyl) { return new ATTACH_EVENT(yyl);}
18405public static object VECTOR_TYPE_factory(Lexer yyl) { return new VECTOR_TYPE(yyl);}
18406public static object RIGHT_BRACE_factory(Lexer yyl) { return new RIGHT_BRACE(yyl);}
18407public static object STATE_ENTRY_EVENT_factory(Lexer yyl) { return new STATE_ENTRY_EVENT(yyl);}
18408public static object PLUS_factory(Lexer yyl) { return new PLUS(yyl);}
18409public static object STAR_EQUALS_factory(Lexer yyl) { return new STAR_EQUALS(yyl);}
18410public static object LAND_COLLISION_START_EVENT_factory(Lexer yyl) { return new LAND_COLLISION_START_EVENT(yyl);}
18411public static object CONTROL_EVENT_factory(Lexer yyl) { return new CONTROL_EVENT(yyl);}
18412public override TOKEN OldAction(Lexer yym,ref string yytext,int action, ref bool reject) {
18413 switch(action) {
18414 case -1: break;
18415 case 977: { ((LSLTokens)yym).str += "\\\\"; }
18416 break;
18417 case 1003: ;
18418 break;
18419 case 925: { yym.yy_begin("STRING"); ((LSLTokens)yym).str = "";}
18420 break;
18421 case 930: { ((LSLTokens)yym).str += yytext; }
18422 break;
18423 case 936: { ((LSLTokens)yym).str += "\\n"; }
18424 break;
18425 case 941: { ((LSLTokens)yym).str += "\\n"; }
18426 break;
18427 case 953: { ((LSLTokens)yym).str += " "; }
18428 break;
18429 case 965: { ((LSLTokens)yym).str += "\\\""; }
18430 break;
18431 case 989: { ((LSLTokens)yym).str += '\\'; }
18432 break;
18433 case 994: { yym.yy_begin("YYINITIAL"); ((LSLTokens)yym).yytext = ((LSLTokens)yym).str; ((LSLTokens)yym).str = String.Empty; return new STRING_CONSTANT(yym); }
18434 case 999: ;
18435 break;
18436 }
18437 return null;
18438}}
18439public class LSLTokens:Lexer {
18440public LSLTokens():base(new yyLSLTokens(new ErrorHandler(false))) {}
18441public LSLTokens(ErrorHandler eh):base(new yyLSLTokens(eh)) {}
18442public LSLTokens(YyLexer tks):base(tks){}
18443
18444 public string str;
18445
18446 }
18447}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.parser.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.parser.cs
deleted file mode 100644
index b09e959..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.parser.cs
+++ /dev/null
@@ -1,11001 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;using Tools;
29namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL {
30//%+LSLProgramRoot+95
31public class LSLProgramRoot : SYMBOL{
32 public LSLProgramRoot (Parser yyp, States s ):base(((LSLSyntax
33)yyp)){ while (0< s . kids . Count ) kids . Add ( s . kids . Pop ());
34}
35 public LSLProgramRoot (Parser yyp, GlobalDefinitions gd , States s ):base(((LSLSyntax
36)yyp)){ while (0< gd . kids . Count ) kids . Add ( gd . kids . Pop ());
37 while (0< s . kids . Count ) kids . Add ( s . kids . Pop ());
38}
39
40public override string yyname { get { return "LSLProgramRoot"; }}
41public override int yynum { get { return 95; }}
42public LSLProgramRoot(Parser yyp):base(yyp){}}
43//%+GlobalDefinitions+96
44public class GlobalDefinitions : SYMBOL{
45 public GlobalDefinitions (Parser yyp, GlobalVariableDeclaration gvd ):base(((LSLSyntax
46)yyp)){ kids . Add ( gvd );
47}
48 public GlobalDefinitions (Parser yyp, GlobalDefinitions gd , GlobalVariableDeclaration gvd ):base(((LSLSyntax
49)yyp)){ while (0< gd . kids . Count ) kids . Add ( gd . kids . Pop ());
50 kids . Add ( gvd );
51}
52 public GlobalDefinitions (Parser yyp, GlobalFunctionDefinition gfd ):base(((LSLSyntax
53)yyp)){ kids . Add ( gfd );
54}
55 public GlobalDefinitions (Parser yyp, GlobalDefinitions gd , GlobalFunctionDefinition gfd ):base(((LSLSyntax
56)yyp)){ while (0< gd . kids . Count ) kids . Add ( gd . kids . Pop ());
57 kids . Add ( gfd );
58}
59
60public override string yyname { get { return "GlobalDefinitions"; }}
61public override int yynum { get { return 96; }}
62public GlobalDefinitions(Parser yyp):base(yyp){}}
63//%+GlobalVariableDeclaration+97
64public class GlobalVariableDeclaration : SYMBOL{
65 public GlobalVariableDeclaration (Parser yyp, Declaration d ):base(((LSLSyntax
66)yyp)){ kids . Add ( d );
67}
68 public GlobalVariableDeclaration (Parser yyp, Assignment a ):base(((LSLSyntax
69)yyp)){ kids . Add ( a );
70}
71
72public override string yyname { get { return "GlobalVariableDeclaration"; }}
73public override int yynum { get { return 97; }}
74public GlobalVariableDeclaration(Parser yyp):base(yyp){}}
75//%+GlobalFunctionDefinition+98
76public class GlobalFunctionDefinition : SYMBOL{
77 private string m_returnType ;
78 private string m_name ;
79 public GlobalFunctionDefinition (Parser yyp, string returnType , string name , ArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax
80)yyp)){ m_returnType = returnType ;
81 m_name = name ;
82 kids . Add ( adl );
83 kids . Add ( cs );
84}
85 public string ReturnType { get { return m_returnType ;
86}
87 set { m_returnType = value ;
88}
89}
90 public string Name { get { return m_name ;
91}
92}
93
94public override string yyname { get { return "GlobalFunctionDefinition"; }}
95public override int yynum { get { return 98; }}
96public GlobalFunctionDefinition(Parser yyp):base(yyp){}}
97//%+States+99
98public class States : SYMBOL{
99 public States (Parser yyp, State ds ):base(((LSLSyntax
100)yyp)){ kids . Add ( ds );
101}
102 public States (Parser yyp, States s , State us ):base(((LSLSyntax
103)yyp)){ while (0< s . kids . Count ) kids . Add ( s . kids . Pop ());
104 kids . Add ( us );
105}
106
107public override string yyname { get { return "States"; }}
108public override int yynum { get { return 99; }}
109public States(Parser yyp):base(yyp){}}
110//%+State+100
111public class State : SYMBOL{
112 private string m_name ;
113 public State (Parser yyp, string name , StateBody sb ):base(((LSLSyntax
114)yyp)){ m_name = name ;
115 while (0< sb . kids . Count ) kids . Add ( sb . kids . Pop ());
116}
117 public override string ToString (){ return "STATE<"+ m_name +">";
118}
119 public string Name { get { return m_name ;
120}
121}
122
123public override string yyname { get { return "State"; }}
124public override int yynum { get { return 100; }}
125public State(Parser yyp):base(yyp){}}
126//%+StateBody+101
127public class StateBody : SYMBOL{
128 public StateBody (Parser yyp, StateBody sb , StateEvent se ):base(((LSLSyntax
129)yyp)){ while (0< sb . kids . Count ) kids . Add ( sb . kids . Pop ());
130 kids . Add ( se );
131}
132 public StateBody (Parser yyp, StateEvent se ):base(((LSLSyntax
133)yyp)){ kids . Add ( se );
134}
135
136public override string yyname { get { return "StateBody"; }}
137public override int yynum { get { return 101; }}
138public StateBody(Parser yyp):base(yyp){}}
139//%+StateEvent+102
140public class StateEvent : SYMBOL{
141 private string m_name ;
142 public StateEvent (Parser yyp, string name , CompoundStatement cs ):base(((LSLSyntax
143)yyp)){ m_name = name ;
144 kids . Add ( cs );
145}
146 public StateEvent (Parser yyp, string name , ArgumentDeclarationList dal , CompoundStatement cs ):base(((LSLSyntax
147)yyp)){ m_name = name ;
148 if (0< dal . kids . Count ) kids . Add ( dal );
149 kids . Add ( cs );
150}
151 public override string ToString (){ return "EVENT<"+ m_name +">";
152}
153 public string Name { get { return m_name ;
154}
155}
156
157public override string yyname { get { return "StateEvent"; }}
158public override int yynum { get { return 102; }}
159public StateEvent(Parser yyp):base(yyp){}}
160//%+ArgumentDeclarationList+103
161public class ArgumentDeclarationList : SYMBOL{
162 public ArgumentDeclarationList (Parser yyp, Declaration d ):base(((LSLSyntax
163)yyp)){ kids . Add ( d );
164}
165 public ArgumentDeclarationList (Parser yyp, ArgumentDeclarationList adl , Declaration d ):base(((LSLSyntax
166)yyp)){ while (0< adl . kids . Count ) kids . Add ( adl . kids . Pop ());
167 kids . Add ( d );
168}
169
170public override string yyname { get { return "ArgumentDeclarationList"; }}
171public override int yynum { get { return 103; }}
172public ArgumentDeclarationList(Parser yyp):base(yyp){}}
173//%+Declaration+104
174public class Declaration : SYMBOL{
175 private string m_datatype ;
176 private string m_id ;
177 public Declaration (Parser yyp, string type , string id ):base(((LSLSyntax
178)yyp)){ m_datatype = type ;
179 m_id = id ;
180}
181 public override string ToString (){ return "Declaration<"+ m_datatype +":"+ m_id +">";
182}
183 public string Datatype { get { return m_datatype ;
184}
185 set { m_datatype = value ;
186}
187}
188 public string Id { get { return m_id ;
189}
190}
191
192public override string yyname { get { return "Declaration"; }}
193public override int yynum { get { return 104; }}
194public Declaration(Parser yyp):base(yyp){}}
195//%+Typename+105
196public class Typename : SYMBOL{
197 public string yytext ;
198 public Typename (Parser yyp, string text ):base(((LSLSyntax
199)yyp)){ yytext = text ;
200}
201
202public override string yyname { get { return "Typename"; }}
203public override int yynum { get { return 105; }}
204public Typename(Parser yyp):base(yyp){}}
205//%+Event+106
206public class Event : SYMBOL{
207 public string yytext ;
208 public Event (Parser yyp, string text ):base(((LSLSyntax
209)yyp)){ yytext = text ;
210}
211
212public override string yyname { get { return "Event"; }}
213public override int yynum { get { return 106; }}
214public Event(Parser yyp):base(yyp){}}
215//%+CompoundStatement+107
216public class CompoundStatement : SYMBOL{
217 public CompoundStatement (Parser yyp):base(((LSLSyntax
218)yyp)){}
219 public CompoundStatement (Parser yyp, StatementList sl ):base(((LSLSyntax
220)yyp)){ while (0< sl . kids . Count ) kids . Add ( sl . kids . Pop ());
221}
222
223public override string yyname { get { return "CompoundStatement"; }}
224public override int yynum { get { return 107; }}
225}
226//%+StatementList+108
227public class StatementList : SYMBOL{
228 private void AddStatement ( Statement s ){ if ( s . kids . Top is IfStatement || s . kids . Top is WhileStatement || s . kids . Top is DoWhileStatement || s . kids . Top is ForLoop ) kids . Add ( s . kids . Pop ());
229 else kids . Add ( s );
230}
231 public StatementList (Parser yyp, Statement s ):base(((LSLSyntax
232)yyp)){ AddStatement ( s );
233}
234 public StatementList (Parser yyp, StatementList sl , Statement s ):base(((LSLSyntax
235)yyp)){ while (0< sl . kids . Count ) kids . Add ( sl . kids . Pop ());
236 AddStatement ( s );
237}
238
239public override string yyname { get { return "StatementList"; }}
240public override int yynum { get { return 108; }}
241public StatementList(Parser yyp):base(yyp){}}
242//%+Statement+109
243public class Statement : SYMBOL{
244 public Statement (Parser yyp, Declaration d ):base(((LSLSyntax
245)yyp)){ kids . Add ( d );
246}
247 public Statement (Parser yyp, CompoundStatement cs ):base(((LSLSyntax
248)yyp)){ kids . Add ( cs );
249}
250 public Statement (Parser yyp, FunctionCall fc ):base(((LSLSyntax
251)yyp)){ kids . Add ( fc );
252}
253 public Statement (Parser yyp, Assignment a ):base(((LSLSyntax
254)yyp)){ kids . Add ( a );
255}
256 public Statement (Parser yyp, Expression e ):base(((LSLSyntax
257)yyp)){ kids . Add ( e );
258}
259 public Statement (Parser yyp, ReturnStatement rs ):base(((LSLSyntax
260)yyp)){ kids . Add ( rs );
261}
262 public Statement (Parser yyp, StateChange sc ):base(((LSLSyntax
263)yyp)){ kids . Add ( sc );
264}
265 public Statement (Parser yyp, IfStatement ifs ):base(((LSLSyntax
266)yyp)){ kids . Add ( ifs );
267}
268 public Statement (Parser yyp, WhileStatement ifs ):base(((LSLSyntax
269)yyp)){ kids . Add ( ifs );
270}
271 public Statement (Parser yyp, DoWhileStatement ifs ):base(((LSLSyntax
272)yyp)){ kids . Add ( ifs );
273}
274 public Statement (Parser yyp, ForLoop fl ):base(((LSLSyntax
275)yyp)){ kids . Add ( fl );
276}
277 public Statement (Parser yyp, JumpLabel jl ):base(((LSLSyntax
278)yyp)){ kids . Add ( jl );
279}
280 public Statement (Parser yyp, JumpStatement js ):base(((LSLSyntax
281)yyp)){ kids . Add ( js );
282}
283
284public override string yyname { get { return "Statement"; }}
285public override int yynum { get { return 109; }}
286public Statement(Parser yyp):base(yyp){}}
287//%+Assignment+110
288public class Assignment : SYMBOL{
289 protected string m_assignmentType ;
290 public Assignment (Parser yyp, SYMBOL lhs , SYMBOL rhs , string assignmentType ):base(((LSLSyntax
291)yyp)){ m_assignmentType = assignmentType ;
292 kids . Add ( lhs );
293 if ( rhs is ConstantExpression ) while (0< rhs . kids . Count ) kids . Add ( rhs . kids . Pop ());
294 else kids . Add ( rhs );
295}
296 public Assignment (Parser yyp, SimpleAssignment sa ):base(((LSLSyntax
297)yyp)){ m_assignmentType = sa . AssignmentType ;
298 while (0< sa . kids . Count ) kids . Add ( sa . kids . Pop ());
299}
300 public string AssignmentType { get { return m_assignmentType ;
301}
302}
303 public override string ToString (){ return base . ToString ()+"<"+ m_assignmentType +">";
304}
305
306public override string yyname { get { return "Assignment"; }}
307public override int yynum { get { return 110; }}
308public Assignment(Parser yyp):base(yyp){}}
309//%+SimpleAssignment+111
310public class SimpleAssignment : Assignment{
311 public SimpleAssignment (Parser yyp, SYMBOL lhs , SYMBOL rhs , string assignmentType ):base(((LSLSyntax
312)yyp)){ m_assignmentType = assignmentType ;
313 kids . Add ( lhs );
314 if ( rhs is ConstantExpression ) while (0< rhs . kids . Count ) kids . Add ( rhs . kids . Pop ());
315 else kids . Add ( rhs );
316}
317
318public override string yyname { get { return "SimpleAssignment"; }}
319public override int yynum { get { return 111; }}
320public SimpleAssignment(Parser yyp):base(yyp){}}
321//%+ReturnStatement+112
322public class ReturnStatement : SYMBOL{
323 public ReturnStatement (Parser yyp):base(((LSLSyntax
324)yyp)){}
325 public ReturnStatement (Parser yyp, Expression e ):base(((LSLSyntax
326)yyp)){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ());
327 else kids . Add ( e );
328}
329
330public override string yyname { get { return "ReturnStatement"; }}
331public override int yynum { get { return 112; }}
332}
333//%+JumpLabel+113
334public class JumpLabel : SYMBOL{
335 private string m_labelName ;
336 public JumpLabel (Parser yyp, string labelName ):base(((LSLSyntax
337)yyp)){ m_labelName = labelName ;
338}
339 public string LabelName { get { return m_labelName ;
340}
341}
342 public override string ToString (){ return base . ToString ()+"<"+ m_labelName +">";
343}
344
345public override string yyname { get { return "JumpLabel"; }}
346public override int yynum { get { return 113; }}
347public JumpLabel(Parser yyp):base(yyp){}}
348//%+JumpStatement+114
349public class JumpStatement : SYMBOL{
350 private string m_targetName ;
351 public JumpStatement (Parser yyp, string targetName ):base(((LSLSyntax
352)yyp)){ m_targetName = targetName ;
353}
354 public string TargetName { get { return m_targetName ;
355}
356}
357 public override string ToString (){ return base . ToString ()+"<"+ m_targetName +">";
358}
359
360public override string yyname { get { return "JumpStatement"; }}
361public override int yynum { get { return 114; }}
362public JumpStatement(Parser yyp):base(yyp){}}
363//%+StateChange+115
364public class StateChange : SYMBOL{
365 private string m_newState ;
366 public StateChange (Parser yyp, string newState ):base(((LSLSyntax
367)yyp)){ m_newState = newState ;
368}
369 public string NewState { get { return m_newState ;
370}
371}
372
373public override string yyname { get { return "StateChange"; }}
374public override int yynum { get { return 115; }}
375public StateChange(Parser yyp):base(yyp){}}
376//%+IfStatement+116
377public class IfStatement : SYMBOL{
378 private void AddStatement ( Statement s ){ if (0< s . kids . Count && s . kids . Top is CompoundStatement ) kids . Add ( s . kids . Pop ());
379 else kids . Add ( s );
380}
381 public IfStatement (Parser yyp, SYMBOL s , Statement ifs ):base(((LSLSyntax
382)yyp)){ kids . Add ( s );
383 AddStatement ( ifs );
384}
385 public IfStatement (Parser yyp, SYMBOL s , Statement ifs , Statement es ):base(((LSLSyntax
386)yyp)){ kids . Add ( s );
387 AddStatement ( ifs );
388 if (0< es . kids . Count && es . kids . Top is IfStatement ) kids . Add ( es . kids . Pop ());
389 else AddStatement ( es );
390}
391
392public override string yyname { get { return "IfStatement"; }}
393public override int yynum { get { return 116; }}
394public IfStatement(Parser yyp):base(yyp){}}
395//%+WhileStatement+117
396public class WhileStatement : SYMBOL{
397 public WhileStatement (Parser yyp, SYMBOL s , Statement st ):base(((LSLSyntax
398)yyp)){ kids . Add ( s );
399 if (0< st . kids . Count && st . kids . Top is CompoundStatement ) kids . Add ( st . kids . Pop ());
400 else kids . Add ( st );
401}
402
403public override string yyname { get { return "WhileStatement"; }}
404public override int yynum { get { return 117; }}
405public WhileStatement(Parser yyp):base(yyp){}}
406//%+DoWhileStatement+118
407public class DoWhileStatement : SYMBOL{
408 public DoWhileStatement (Parser yyp, SYMBOL s , Statement st ):base(((LSLSyntax
409)yyp)){ if (0< st . kids . Count && st . kids . Top is CompoundStatement ) kids . Add ( st . kids . Pop ());
410 else kids . Add ( st );
411 kids . Add ( s );
412}
413
414public override string yyname { get { return "DoWhileStatement"; }}
415public override int yynum { get { return 118; }}
416public DoWhileStatement(Parser yyp):base(yyp){}}
417//%+ForLoop+119
418public class ForLoop : SYMBOL{
419 public ForLoop (Parser yyp, ForLoopStatement flsa , Expression e , ForLoopStatement flsb , Statement s ):base(((LSLSyntax
420)yyp)){ kids . Add ( flsa );
421 kids . Add ( e );
422 kids . Add ( flsb );
423 if (0< s . kids . Count && s . kids . Top is CompoundStatement ) kids . Add ( s . kids . Pop ());
424 else kids . Add ( s );
425}
426
427public override string yyname { get { return "ForLoop"; }}
428public override int yynum { get { return 119; }}
429public ForLoop(Parser yyp):base(yyp){}}
430//%+ForLoopStatement+120
431public class ForLoopStatement : SYMBOL{
432 public ForLoopStatement (Parser yyp, Expression e ):base(((LSLSyntax
433)yyp)){ kids . Add ( e );
434}
435 public ForLoopStatement (Parser yyp, SimpleAssignment sa ):base(((LSLSyntax
436)yyp)){ kids . Add ( sa );
437}
438 public ForLoopStatement (Parser yyp, ForLoopStatement fls , Expression e ):base(((LSLSyntax
439)yyp)){ while (0< fls . kids . Count ) kids . Add ( fls . kids . Pop ());
440 kids . Add ( e );
441}
442 public ForLoopStatement (Parser yyp, ForLoopStatement fls , SimpleAssignment sa ):base(((LSLSyntax
443)yyp)){ while (0< fls . kids . Count ) kids . Add ( fls . kids . Pop ());
444 kids . Add ( sa );
445}
446
447public override string yyname { get { return "ForLoopStatement"; }}
448public override int yynum { get { return 120; }}
449public ForLoopStatement(Parser yyp):base(yyp){}}
450//%+FunctionCall+121
451public class FunctionCall : SYMBOL{
452 private string m_id ;
453 public FunctionCall (Parser yyp, string id , ArgumentList al ):base(((LSLSyntax
454)yyp)){ m_id = id ;
455 kids . Add ( al );
456}
457 public override string ToString (){ return base . ToString ()+"<"+ m_id +">";
458}
459 public string Id { get { return m_id ;
460}
461}
462
463public override string yyname { get { return "FunctionCall"; }}
464public override int yynum { get { return 121; }}
465public FunctionCall(Parser yyp):base(yyp){}}
466//%+ArgumentList+122
467public class ArgumentList : SYMBOL{
468 public ArgumentList (Parser yyp, Argument a ):base(((LSLSyntax
469)yyp)){ AddArgument ( a );
470}
471 public ArgumentList (Parser yyp, ArgumentList al , Argument a ):base(((LSLSyntax
472)yyp)){ while (0< al . kids . Count ) kids . Add ( al . kids . Pop ());
473 AddArgument ( a );
474}
475 private void AddArgument ( Argument a ){ if ( a is ExpressionArgument ) while (0< a . kids . Count ) kids . Add ( a . kids . Pop ());
476 else kids . Add ( a );
477}
478
479public override string yyname { get { return "ArgumentList"; }}
480public override int yynum { get { return 122; }}
481public ArgumentList(Parser yyp):base(yyp){}}
482//%+Argument+123
483public class Argument : SYMBOL{
484public override string yyname { get { return "Argument"; }}
485public override int yynum { get { return 123; }}
486public Argument(Parser yyp):base(yyp){}}
487//%+ExpressionArgument+124
488public class ExpressionArgument : Argument{
489 public ExpressionArgument (Parser yyp, Expression e ):base(((LSLSyntax
490)yyp)){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ());
491 else kids . Add ( e );
492}
493
494public override string yyname { get { return "ExpressionArgument"; }}
495public override int yynum { get { return 124; }}
496public ExpressionArgument(Parser yyp):base(yyp){}}
497//%+Constant+125
498public class Constant : SYMBOL{
499 private string m_type ;
500 private string m_val ;
501 public Constant (Parser yyp, string type , string val ):base(((LSLSyntax
502)yyp)){ m_type = type ;
503 m_val = val ;
504}
505 public override string ToString (){ return base . ToString ()+"<"+ m_type +":"+ m_val +">";
506}
507 public string Value { get { return m_val ;
508}
509 set { m_val = value ;
510}
511}
512 public string Type { get { return m_type ;
513}
514 set { m_type = value ;
515}
516}
517
518public override string yyname { get { return "Constant"; }}
519public override int yynum { get { return 125; }}
520public Constant(Parser yyp):base(yyp){}}
521//%+VectorConstant+126
522public class VectorConstant : Constant{
523 public VectorConstant (Parser yyp, Expression valX , Expression valY , Expression valZ ):base(((LSLSyntax
524)yyp),"vector", null ){ kids . Add ( valX );
525 kids . Add ( valY );
526 kids . Add ( valZ );
527}
528
529public override string yyname { get { return "VectorConstant"; }}
530public override int yynum { get { return 126; }}
531public VectorConstant(Parser yyp):base(yyp){}}
532//%+RotationConstant+127
533public class RotationConstant : Constant{
534 public RotationConstant (Parser yyp, Expression valX , Expression valY , Expression valZ , Expression valS ):base(((LSLSyntax
535)yyp),"rotation", null ){ kids . Add ( valX );
536 kids . Add ( valY );
537 kids . Add ( valZ );
538 kids . Add ( valS );
539}
540
541public override string yyname { get { return "RotationConstant"; }}
542public override int yynum { get { return 127; }}
543public RotationConstant(Parser yyp):base(yyp){}}
544//%+ListConstant+128
545public class ListConstant : Constant{
546 public ListConstant (Parser yyp, ArgumentList al ):base(((LSLSyntax
547)yyp),"list", null ){ kids . Add ( al );
548}
549
550public override string yyname { get { return "ListConstant"; }}
551public override int yynum { get { return 128; }}
552public ListConstant(Parser yyp):base(yyp){}}
553//%+Expression+129
554public class Expression : SYMBOL{
555 protected void AddExpression ( Expression e ){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ());
556 else kids . Add ( e );
557}
558
559public override string yyname { get { return "Expression"; }}
560public override int yynum { get { return 129; }}
561public Expression(Parser yyp):base(yyp){}}
562//%+ConstantExpression+130
563public class ConstantExpression : Expression{
564 public ConstantExpression (Parser yyp, Constant c ):base(((LSLSyntax
565)yyp)){ kids . Add ( c );
566}
567
568public override string yyname { get { return "ConstantExpression"; }}
569public override int yynum { get { return 130; }}
570public ConstantExpression(Parser yyp):base(yyp){}}
571//%+IdentExpression+131
572public class IdentExpression : Expression{
573 protected string m_name ;
574 public IdentExpression (Parser yyp, string name ):base(((LSLSyntax
575)yyp)){ m_name = name ;
576}
577 public override string ToString (){ return base . ToString ()+"<"+ m_name +">";
578}
579 public string Name { get { return m_name ;
580}
581}
582
583public override string yyname { get { return "IdentExpression"; }}
584public override int yynum { get { return 131; }}
585public IdentExpression(Parser yyp):base(yyp){}}
586//%+IdentDotExpression+132
587public class IdentDotExpression : IdentExpression{
588 private string m_member ;
589 public IdentDotExpression (Parser yyp, string name , string member ):base(((LSLSyntax
590)yyp), name ){ m_member = member ;
591}
592 public override string ToString (){ string baseToString = base . ToString ();
593 return baseToString . Substring (0, baseToString . Length -1)+"."+ m_member +">";
594}
595 public string Member { get { return m_member ;
596}
597}
598
599public override string yyname { get { return "IdentDotExpression"; }}
600public override int yynum { get { return 132; }}
601public IdentDotExpression(Parser yyp):base(yyp){}}
602//%+FunctionCallExpression+133
603public class FunctionCallExpression : Expression{
604 public FunctionCallExpression (Parser yyp, FunctionCall fc ):base(((LSLSyntax
605)yyp)){ kids . Add ( fc );
606}
607
608public override string yyname { get { return "FunctionCallExpression"; }}
609public override int yynum { get { return 133; }}
610public FunctionCallExpression(Parser yyp):base(yyp){}}
611//%+BinaryExpression+134
612public class BinaryExpression : Expression{
613 private string m_expressionSymbol ;
614 public BinaryExpression (Parser yyp, Expression lhs , Expression rhs , string expressionSymbol ):base(((LSLSyntax
615)yyp)){ m_expressionSymbol = expressionSymbol ;
616 AddExpression ( lhs );
617 AddExpression ( rhs );
618}
619 public string ExpressionSymbol { get { return m_expressionSymbol ;
620}
621}
622 public override string ToString (){ return base . ToString ()+"<"+ m_expressionSymbol +">";
623}
624
625public override string yyname { get { return "BinaryExpression"; }}
626public override int yynum { get { return 134; }}
627public BinaryExpression(Parser yyp):base(yyp){}}
628//%+UnaryExpression+135
629public class UnaryExpression : Expression{
630 private string m_unarySymbol ;
631 public UnaryExpression (Parser yyp, string unarySymbol , Expression e ):base(((LSLSyntax
632)yyp)){ m_unarySymbol = unarySymbol ;
633 AddExpression ( e );
634}
635 public string UnarySymbol { get { return m_unarySymbol ;
636}
637}
638 public override string ToString (){ return base . ToString ()+"<"+ m_unarySymbol +">";
639}
640
641public override string yyname { get { return "UnaryExpression"; }}
642public override int yynum { get { return 135; }}
643public UnaryExpression(Parser yyp):base(yyp){}}
644//%+TypecastExpression+136
645public class TypecastExpression : Expression{
646 private string m_typecastType ;
647 public TypecastExpression (Parser yyp, string typecastType , SYMBOL rhs ):base(((LSLSyntax
648)yyp)){ m_typecastType = typecastType ;
649 kids . Add ( rhs );
650}
651 public string TypecastType { get { return m_typecastType ;
652}
653 set { m_typecastType = value ;
654}
655}
656
657public override string yyname { get { return "TypecastExpression"; }}
658public override int yynum { get { return 136; }}
659public TypecastExpression(Parser yyp):base(yyp){}}
660//%+ParenthesisExpression+137
661public class ParenthesisExpression : Expression{
662 public ParenthesisExpression (Parser yyp, SYMBOL s ):base(((LSLSyntax
663)yyp)){ kids . Add ( s );
664}
665
666public override string yyname { get { return "ParenthesisExpression"; }}
667public override int yynum { get { return 137; }}
668public ParenthesisExpression(Parser yyp):base(yyp){}}
669//%+IncrementDecrementExpression+138
670public class IncrementDecrementExpression : Expression{
671 private string m_name ;
672 private string m_operation ;
673 private bool m_postOperation ;
674 public IncrementDecrementExpression (Parser yyp, string name , string operation , bool postOperation ):base(((LSLSyntax
675)yyp)){ m_name = name ;
676 m_operation = operation ;
677 m_postOperation = postOperation ;
678}
679 public IncrementDecrementExpression (Parser yyp, IdentDotExpression ide , string operation , bool postOperation ):base(((LSLSyntax
680)yyp)){ m_operation = operation ;
681 m_postOperation = postOperation ;
682 kids . Add ( ide );
683}
684 public override string ToString (){ return base . ToString ()+"<"+( m_postOperation ? m_name + m_operation : m_operation + m_name )+">";
685}
686 public string Name { get { return m_name ;
687}
688}
689 public string Operation { get { return m_operation ;
690}
691}
692 public bool PostOperation { get { return m_postOperation ;
693}
694}
695
696public override string yyname { get { return "IncrementDecrementExpression"; }}
697public override int yynum { get { return 138; }}
698public IncrementDecrementExpression(Parser yyp):base(yyp){}}
699
700public class LSLProgramRoot_1 : LSLProgramRoot {
701 public LSLProgramRoot_1(Parser yyq):base(yyq,
702 ((GlobalDefinitions)(yyq.StackAt(1).m_value))
703 ,
704 ((States)(yyq.StackAt(0).m_value))
705 ){}}
706
707public class LSLProgramRoot_2 : LSLProgramRoot {
708 public LSLProgramRoot_2(Parser yyq):base(yyq,
709 ((States)(yyq.StackAt(0).m_value))
710 ){}}
711
712public class GlobalDefinitions_1 : GlobalDefinitions {
713 public GlobalDefinitions_1(Parser yyq):base(yyq,
714 ((GlobalVariableDeclaration)(yyq.StackAt(0).m_value))
715 ){}}
716
717public class GlobalDefinitions_2 : GlobalDefinitions {
718 public GlobalDefinitions_2(Parser yyq):base(yyq,
719 ((GlobalDefinitions)(yyq.StackAt(1).m_value))
720 ,
721 ((GlobalVariableDeclaration)(yyq.StackAt(0).m_value))
722 ){}}
723
724public class GlobalDefinitions_3 : GlobalDefinitions {
725 public GlobalDefinitions_3(Parser yyq):base(yyq,
726 ((GlobalFunctionDefinition)(yyq.StackAt(0).m_value))
727 ){}}
728
729public class GlobalDefinitions_4 : GlobalDefinitions {
730 public GlobalDefinitions_4(Parser yyq):base(yyq,
731 ((GlobalDefinitions)(yyq.StackAt(1).m_value))
732 ,
733 ((GlobalFunctionDefinition)(yyq.StackAt(0).m_value))
734 ){}}
735
736public class GlobalVariableDeclaration_1 : GlobalVariableDeclaration {
737 public GlobalVariableDeclaration_1(Parser yyq):base(yyq,
738 ((Declaration)(yyq.StackAt(1).m_value))
739 ){}}
740
741public class GlobalVariableDeclaration_2 : GlobalVariableDeclaration {
742 public GlobalVariableDeclaration_2(Parser yyq):base(yyq,new Assignment(((LSLSyntax
743)yyq),
744 ((Declaration)(yyq.StackAt(3).m_value))
745 ,
746 ((Expression)(yyq.StackAt(1).m_value))
747 ,
748 ((EQUALS)(yyq.StackAt(2).m_value))
749 .yytext)){}}
750
751public class GlobalFunctionDefinition_1 : GlobalFunctionDefinition {
752 public GlobalFunctionDefinition_1(Parser yyq):base(yyq,"void",
753 ((IDENT)(yyq.StackAt(4).m_value))
754 .yytext,
755 ((ArgumentDeclarationList)(yyq.StackAt(2).m_value))
756 ,
757 ((CompoundStatement)(yyq.StackAt(0).m_value))
758 ){}}
759
760public class GlobalFunctionDefinition_2 : GlobalFunctionDefinition {
761 public GlobalFunctionDefinition_2(Parser yyq):base(yyq,
762 ((Typename)(yyq.StackAt(5).m_value))
763 .yytext,
764 ((IDENT)(yyq.StackAt(4).m_value))
765 .yytext,
766 ((ArgumentDeclarationList)(yyq.StackAt(2).m_value))
767 ,
768 ((CompoundStatement)(yyq.StackAt(0).m_value))
769 ){}}
770
771public class States_1 : States {
772 public States_1(Parser yyq):base(yyq,
773 ((State)(yyq.StackAt(0).m_value))
774 ){}}
775
776public class States_2 : States {
777 public States_2(Parser yyq):base(yyq,
778 ((States)(yyq.StackAt(1).m_value))
779 ,
780 ((State)(yyq.StackAt(0).m_value))
781 ){}}
782
783public class State_1 : State {
784 public State_1(Parser yyq):base(yyq,
785 ((DEFAULT_STATE)(yyq.StackAt(3).m_value))
786 .yytext,
787 ((StateBody)(yyq.StackAt(1).m_value))
788 ){}}
789
790public class State_2 : State {
791 public State_2(Parser yyq):base(yyq,
792 ((IDENT)(yyq.StackAt(3).m_value))
793 .yytext,
794 ((StateBody)(yyq.StackAt(1).m_value))
795 ){}}
796
797public class StateBody_1 : StateBody {
798 public StateBody_1(Parser yyq):base(yyq,
799 ((StateEvent)(yyq.StackAt(0).m_value))
800 ){}}
801
802public class StateBody_2 : StateBody {
803 public StateBody_2(Parser yyq):base(yyq,
804 ((StateBody)(yyq.StackAt(1).m_value))
805 ,
806 ((StateEvent)(yyq.StackAt(0).m_value))
807 ){}}
808
809public class StateEvent_1 : StateEvent {
810 public StateEvent_1(Parser yyq):base(yyq,
811 ((Event)(yyq.StackAt(4).m_value))
812 .yytext,
813 ((ArgumentDeclarationList)(yyq.StackAt(2).m_value))
814 ,
815 ((CompoundStatement)(yyq.StackAt(0).m_value))
816 ){}}
817
818public class ArgumentDeclarationList_1 : ArgumentDeclarationList {
819 public ArgumentDeclarationList_1(Parser yyq):base(yyq,
820 ((Declaration)(yyq.StackAt(0).m_value))
821 ){}}
822
823public class ArgumentDeclarationList_2 : ArgumentDeclarationList {
824 public ArgumentDeclarationList_2(Parser yyq):base(yyq,
825 ((ArgumentDeclarationList)(yyq.StackAt(2).m_value))
826 ,
827 ((Declaration)(yyq.StackAt(0).m_value))
828 ){}}
829
830public class Declaration_1 : Declaration {
831 public Declaration_1(Parser yyq):base(yyq,
832 ((Typename)(yyq.StackAt(1).m_value))
833 .yytext,
834 ((IDENT)(yyq.StackAt(0).m_value))
835 .yytext){}}
836
837public class CompoundStatement_1 : CompoundStatement {
838 public CompoundStatement_1(Parser yyq):base(yyq){}}
839
840public class CompoundStatement_2 : CompoundStatement {
841 public CompoundStatement_2(Parser yyq):base(yyq,
842 ((StatementList)(yyq.StackAt(1).m_value))
843 ){}}
844
845public class StatementList_1 : StatementList {
846 public StatementList_1(Parser yyq):base(yyq,
847 ((Statement)(yyq.StackAt(0).m_value))
848 ){}}
849
850public class StatementList_2 : StatementList {
851 public StatementList_2(Parser yyq):base(yyq,
852 ((StatementList)(yyq.StackAt(1).m_value))
853 ,
854 ((Statement)(yyq.StackAt(0).m_value))
855 ){}}
856
857public class Statement_1 : Statement {
858 public Statement_1(Parser yyq):base(yyq,
859 ((Declaration)(yyq.StackAt(1).m_value))
860 ){}}
861
862public class Statement_2 : Statement {
863 public Statement_2(Parser yyq):base(yyq,
864 ((Assignment)(yyq.StackAt(1).m_value))
865 ){}}
866
867public class Statement_3 : Statement {
868 public Statement_3(Parser yyq):base(yyq,
869 ((Expression)(yyq.StackAt(1).m_value))
870 ){}}
871
872public class Statement_4 : Statement {
873 public Statement_4(Parser yyq):base(yyq,
874 ((ReturnStatement)(yyq.StackAt(1).m_value))
875 ){}}
876
877public class Statement_5 : Statement {
878 public Statement_5(Parser yyq):base(yyq,
879 ((JumpLabel)(yyq.StackAt(1).m_value))
880 ){}}
881
882public class Statement_6 : Statement {
883 public Statement_6(Parser yyq):base(yyq,
884 ((JumpStatement)(yyq.StackAt(1).m_value))
885 ){}}
886
887public class Statement_7 : Statement {
888 public Statement_7(Parser yyq):base(yyq,
889 ((StateChange)(yyq.StackAt(1).m_value))
890 ){}}
891
892public class Statement_8 : Statement {
893 public Statement_8(Parser yyq):base(yyq,
894 ((IfStatement)(yyq.StackAt(0).m_value))
895 ){}}
896
897public class Statement_9 : Statement {
898 public Statement_9(Parser yyq):base(yyq,
899 ((WhileStatement)(yyq.StackAt(0).m_value))
900 ){}}
901
902public class Statement_10 : Statement {
903 public Statement_10(Parser yyq):base(yyq,
904 ((DoWhileStatement)(yyq.StackAt(0).m_value))
905 ){}}
906
907public class Statement_11 : Statement {
908 public Statement_11(Parser yyq):base(yyq,
909 ((ForLoop)(yyq.StackAt(0).m_value))
910 ){}}
911
912public class Statement_12 : Statement {
913 public Statement_12(Parser yyq):base(yyq,
914 ((CompoundStatement)(yyq.StackAt(0).m_value))
915 ){}}
916
917public class JumpLabel_1 : JumpLabel {
918 public JumpLabel_1(Parser yyq):base(yyq,
919 ((IDENT)(yyq.StackAt(0).m_value))
920 .yytext){}}
921
922public class JumpStatement_1 : JumpStatement {
923 public JumpStatement_1(Parser yyq):base(yyq,
924 ((IDENT)(yyq.StackAt(0).m_value))
925 .yytext){}}
926
927public class StateChange_1 : StateChange {
928 public StateChange_1(Parser yyq):base(yyq,
929 ((IDENT)(yyq.StackAt(0).m_value))
930 .yytext){}}
931
932public class StateChange_2 : StateChange {
933 public StateChange_2(Parser yyq):base(yyq,
934 ((DEFAULT_STATE)(yyq.StackAt(0).m_value))
935 .yytext){}}
936
937public class IfStatement_1 : IfStatement {
938 public IfStatement_1(Parser yyq):base(yyq,
939 ((Expression)(yyq.StackAt(2).m_value))
940 ,
941 ((Statement)(yyq.StackAt(0).m_value))
942 ){}}
943
944public class IfStatement_2 : IfStatement {
945 public IfStatement_2(Parser yyq):base(yyq,
946 ((Expression)(yyq.StackAt(4).m_value))
947 ,
948 ((Statement)(yyq.StackAt(2).m_value))
949 ,
950 ((Statement)(yyq.StackAt(0).m_value))
951 ){}}
952
953public class IfStatement_3 : IfStatement {
954 public IfStatement_3(Parser yyq):base(yyq,
955 ((SimpleAssignment)(yyq.StackAt(2).m_value))
956 ,
957 ((Statement)(yyq.StackAt(0).m_value))
958 ){}}
959
960public class IfStatement_4 : IfStatement {
961 public IfStatement_4(Parser yyq):base(yyq,
962 ((SimpleAssignment)(yyq.StackAt(4).m_value))
963 ,
964 ((Statement)(yyq.StackAt(2).m_value))
965 ,
966 ((Statement)(yyq.StackAt(0).m_value))
967 ){}}
968
969public class WhileStatement_1 : WhileStatement {
970 public WhileStatement_1(Parser yyq):base(yyq,
971 ((Expression)(yyq.StackAt(2).m_value))
972 ,
973 ((Statement)(yyq.StackAt(0).m_value))
974 ){}}
975
976public class WhileStatement_2 : WhileStatement {
977 public WhileStatement_2(Parser yyq):base(yyq,
978 ((SimpleAssignment)(yyq.StackAt(2).m_value))
979 ,
980 ((Statement)(yyq.StackAt(0).m_value))
981 ){}}
982
983public class DoWhileStatement_1 : DoWhileStatement {
984 public DoWhileStatement_1(Parser yyq):base(yyq,
985 ((Expression)(yyq.StackAt(2).m_value))
986 ,
987 ((Statement)(yyq.StackAt(5).m_value))
988 ){}}
989
990public class DoWhileStatement_2 : DoWhileStatement {
991 public DoWhileStatement_2(Parser yyq):base(yyq,
992 ((SimpleAssignment)(yyq.StackAt(2).m_value))
993 ,
994 ((Statement)(yyq.StackAt(5).m_value))
995 ){}}
996
997public class ForLoop_1 : ForLoop {
998 public ForLoop_1(Parser yyq):base(yyq,
999 ((ForLoopStatement)(yyq.StackAt(6).m_value))
1000 ,
1001 ((Expression)(yyq.StackAt(4).m_value))
1002 ,
1003 ((ForLoopStatement)(yyq.StackAt(2).m_value))
1004 ,
1005 ((Statement)(yyq.StackAt(0).m_value))
1006 ){}}
1007
1008public class ForLoopStatement_1 : ForLoopStatement {
1009 public ForLoopStatement_1(Parser yyq):base(yyq,
1010 ((Expression)(yyq.StackAt(0).m_value))
1011 ){}}
1012
1013public class ForLoopStatement_2 : ForLoopStatement {
1014 public ForLoopStatement_2(Parser yyq):base(yyq,
1015 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1016 ){}}
1017
1018public class ForLoopStatement_3 : ForLoopStatement {
1019 public ForLoopStatement_3(Parser yyq):base(yyq,
1020 ((ForLoopStatement)(yyq.StackAt(2).m_value))
1021 ,
1022 ((Expression)(yyq.StackAt(0).m_value))
1023 ){}}
1024
1025public class ForLoopStatement_4 : ForLoopStatement {
1026 public ForLoopStatement_4(Parser yyq):base(yyq,
1027 ((ForLoopStatement)(yyq.StackAt(2).m_value))
1028 ,
1029 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1030 ){}}
1031
1032public class Assignment_1 : Assignment {
1033 public Assignment_1(Parser yyq):base(yyq,
1034 ((Declaration)(yyq.StackAt(2).m_value))
1035 ,
1036 ((Expression)(yyq.StackAt(0).m_value))
1037 ,
1038 ((EQUALS)(yyq.StackAt(1).m_value))
1039 .yytext){}}
1040
1041public class Assignment_2 : Assignment {
1042 public Assignment_2(Parser yyq):base(yyq,
1043 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1044 ){}}
1045
1046public class SimpleAssignment_1 : SimpleAssignment {
1047 public SimpleAssignment_1(Parser yyq):base(yyq,
1048 ((IDENT)(yyq.StackAt(2).m_value))
1049 ,
1050 ((Expression)(yyq.StackAt(0).m_value))
1051 ,
1052 ((EQUALS)(yyq.StackAt(1).m_value))
1053 .yytext){}}
1054
1055public class SimpleAssignment_2 : SimpleAssignment {
1056 public SimpleAssignment_2(Parser yyq):base(yyq,
1057 ((IDENT)(yyq.StackAt(2).m_value))
1058 ,
1059 ((Expression)(yyq.StackAt(0).m_value))
1060 ,
1061 ((PLUS_EQUALS)(yyq.StackAt(1).m_value))
1062 .yytext){}}
1063
1064public class SimpleAssignment_3 : SimpleAssignment {
1065 public SimpleAssignment_3(Parser yyq):base(yyq,
1066 ((IDENT)(yyq.StackAt(2).m_value))
1067 ,
1068 ((Expression)(yyq.StackAt(0).m_value))
1069 ,
1070 ((MINUS_EQUALS)(yyq.StackAt(1).m_value))
1071 .yytext){}}
1072
1073public class SimpleAssignment_4 : SimpleAssignment {
1074 public SimpleAssignment_4(Parser yyq):base(yyq,
1075 ((IDENT)(yyq.StackAt(2).m_value))
1076 ,
1077 ((Expression)(yyq.StackAt(0).m_value))
1078 ,
1079 ((STAR_EQUALS)(yyq.StackAt(1).m_value))
1080 .yytext){}}
1081
1082public class SimpleAssignment_5 : SimpleAssignment {
1083 public SimpleAssignment_5(Parser yyq):base(yyq,
1084 ((IDENT)(yyq.StackAt(2).m_value))
1085 ,
1086 ((Expression)(yyq.StackAt(0).m_value))
1087 ,
1088 ((SLASH_EQUALS)(yyq.StackAt(1).m_value))
1089 .yytext){}}
1090
1091public class SimpleAssignment_6 : SimpleAssignment {
1092 public SimpleAssignment_6(Parser yyq):base(yyq,
1093 ((IDENT)(yyq.StackAt(2).m_value))
1094 ,
1095 ((Expression)(yyq.StackAt(0).m_value))
1096 ,
1097 ((PERCENT_EQUALS)(yyq.StackAt(1).m_value))
1098 .yytext){}}
1099
1100public class SimpleAssignment_7 : SimpleAssignment {
1101 public SimpleAssignment_7(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1102)yyq),
1103 ((IDENT)(yyq.StackAt(4).m_value))
1104 .yytext,
1105 ((IDENT)(yyq.StackAt(2).m_value))
1106 .yytext),
1107 ((Expression)(yyq.StackAt(0).m_value))
1108 ,
1109 ((EQUALS)(yyq.StackAt(1).m_value))
1110 .yytext){}}
1111
1112public class SimpleAssignment_8 : SimpleAssignment {
1113 public SimpleAssignment_8(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1114)yyq),
1115 ((IDENT)(yyq.StackAt(4).m_value))
1116 .yytext,
1117 ((IDENT)(yyq.StackAt(2).m_value))
1118 .yytext),
1119 ((Expression)(yyq.StackAt(0).m_value))
1120 ,
1121 ((PLUS_EQUALS)(yyq.StackAt(1).m_value))
1122 .yytext){}}
1123
1124public class SimpleAssignment_9 : SimpleAssignment {
1125 public SimpleAssignment_9(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1126)yyq),
1127 ((IDENT)(yyq.StackAt(4).m_value))
1128 .yytext,
1129 ((IDENT)(yyq.StackAt(2).m_value))
1130 .yytext),
1131 ((Expression)(yyq.StackAt(0).m_value))
1132 ,
1133 ((MINUS_EQUALS)(yyq.StackAt(1).m_value))
1134 .yytext){}}
1135
1136public class SimpleAssignment_10 : SimpleAssignment {
1137 public SimpleAssignment_10(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1138)yyq),
1139 ((IDENT)(yyq.StackAt(4).m_value))
1140 .yytext,
1141 ((IDENT)(yyq.StackAt(2).m_value))
1142 .yytext),
1143 ((Expression)(yyq.StackAt(0).m_value))
1144 ,
1145 ((STAR_EQUALS)(yyq.StackAt(1).m_value))
1146 .yytext){}}
1147
1148public class SimpleAssignment_11 : SimpleAssignment {
1149 public SimpleAssignment_11(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1150)yyq),
1151 ((IDENT)(yyq.StackAt(4).m_value))
1152 .yytext,
1153 ((IDENT)(yyq.StackAt(2).m_value))
1154 .yytext),
1155 ((Expression)(yyq.StackAt(0).m_value))
1156 ,
1157 ((SLASH_EQUALS)(yyq.StackAt(1).m_value))
1158 .yytext){}}
1159
1160public class SimpleAssignment_12 : SimpleAssignment {
1161 public SimpleAssignment_12(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1162)yyq),
1163 ((IDENT)(yyq.StackAt(4).m_value))
1164 .yytext,
1165 ((IDENT)(yyq.StackAt(2).m_value))
1166 .yytext),
1167 ((Expression)(yyq.StackAt(0).m_value))
1168 ,
1169 ((PERCENT_EQUALS)(yyq.StackAt(1).m_value))
1170 .yytext){}}
1171
1172public class SimpleAssignment_13 : SimpleAssignment {
1173 public SimpleAssignment_13(Parser yyq):base(yyq,
1174 ((IDENT)(yyq.StackAt(2).m_value))
1175 ,
1176 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1177 ,
1178 ((EQUALS)(yyq.StackAt(1).m_value))
1179 .yytext){}}
1180
1181public class SimpleAssignment_14 : SimpleAssignment {
1182 public SimpleAssignment_14(Parser yyq):base(yyq,
1183 ((IDENT)(yyq.StackAt(2).m_value))
1184 ,
1185 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1186 ,
1187 ((PLUS_EQUALS)(yyq.StackAt(1).m_value))
1188 .yytext){}}
1189
1190public class SimpleAssignment_15 : SimpleAssignment {
1191 public SimpleAssignment_15(Parser yyq):base(yyq,
1192 ((IDENT)(yyq.StackAt(2).m_value))
1193 ,
1194 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1195 ,
1196 ((MINUS_EQUALS)(yyq.StackAt(1).m_value))
1197 .yytext){}}
1198
1199public class SimpleAssignment_16 : SimpleAssignment {
1200 public SimpleAssignment_16(Parser yyq):base(yyq,
1201 ((IDENT)(yyq.StackAt(2).m_value))
1202 ,
1203 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1204 ,
1205 ((STAR_EQUALS)(yyq.StackAt(1).m_value))
1206 .yytext){}}
1207
1208public class SimpleAssignment_17 : SimpleAssignment {
1209 public SimpleAssignment_17(Parser yyq):base(yyq,
1210 ((IDENT)(yyq.StackAt(2).m_value))
1211 ,
1212 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1213 ,
1214 ((SLASH_EQUALS)(yyq.StackAt(1).m_value))
1215 .yytext){}}
1216
1217public class SimpleAssignment_18 : SimpleAssignment {
1218 public SimpleAssignment_18(Parser yyq):base(yyq,
1219 ((IDENT)(yyq.StackAt(2).m_value))
1220 ,
1221 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1222 ,
1223 ((PERCENT_EQUALS)(yyq.StackAt(1).m_value))
1224 .yytext){}}
1225
1226public class SimpleAssignment_19 : SimpleAssignment {
1227 public SimpleAssignment_19(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1228)yyq),
1229 ((IDENT)(yyq.StackAt(4).m_value))
1230 .yytext,
1231 ((IDENT)(yyq.StackAt(2).m_value))
1232 .yytext),
1233 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1234 ,
1235 ((EQUALS)(yyq.StackAt(1).m_value))
1236 .yytext){}}
1237
1238public class SimpleAssignment_20 : SimpleAssignment {
1239 public SimpleAssignment_20(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1240)yyq),
1241 ((IDENT)(yyq.StackAt(4).m_value))
1242 .yytext,
1243 ((IDENT)(yyq.StackAt(2).m_value))
1244 .yytext),
1245 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1246 ,
1247 ((PLUS_EQUALS)(yyq.StackAt(1).m_value))
1248 .yytext){}}
1249
1250public class SimpleAssignment_21 : SimpleAssignment {
1251 public SimpleAssignment_21(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1252)yyq),
1253 ((IDENT)(yyq.StackAt(4).m_value))
1254 .yytext,
1255 ((IDENT)(yyq.StackAt(2).m_value))
1256 .yytext),
1257 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1258 ,
1259 ((MINUS_EQUALS)(yyq.StackAt(1).m_value))
1260 .yytext){}}
1261
1262public class SimpleAssignment_22 : SimpleAssignment {
1263 public SimpleAssignment_22(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1264)yyq),
1265 ((IDENT)(yyq.StackAt(4).m_value))
1266 .yytext,
1267 ((IDENT)(yyq.StackAt(2).m_value))
1268 .yytext),
1269 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1270 ,
1271 ((STAR_EQUALS)(yyq.StackAt(1).m_value))
1272 .yytext){}}
1273
1274public class SimpleAssignment_23 : SimpleAssignment {
1275 public SimpleAssignment_23(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1276)yyq),
1277 ((IDENT)(yyq.StackAt(4).m_value))
1278 .yytext,
1279 ((IDENT)(yyq.StackAt(2).m_value))
1280 .yytext),
1281 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1282 ,
1283 ((SLASH_EQUALS)(yyq.StackAt(1).m_value))
1284 .yytext){}}
1285
1286public class SimpleAssignment_24 : SimpleAssignment {
1287 public SimpleAssignment_24(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1288)yyq),
1289 ((IDENT)(yyq.StackAt(4).m_value))
1290 .yytext,
1291 ((IDENT)(yyq.StackAt(2).m_value))
1292 .yytext),
1293 ((SimpleAssignment)(yyq.StackAt(0).m_value))
1294 ,
1295 ((PERCENT_EQUALS)(yyq.StackAt(1).m_value))
1296 .yytext){}}
1297
1298public class ReturnStatement_1 : ReturnStatement {
1299 public ReturnStatement_1(Parser yyq):base(yyq,
1300 ((Expression)(yyq.StackAt(0).m_value))
1301 ){}}
1302
1303public class ReturnStatement_2 : ReturnStatement {
1304 public ReturnStatement_2(Parser yyq):base(yyq){}}
1305
1306public class Constant_1 : Constant {
1307 public Constant_1(Parser yyq):base(yyq,"integer",
1308 ((INTEGER_CONSTANT)(yyq.StackAt(0).m_value))
1309 .yytext){}}
1310
1311public class Constant_2 : Constant {
1312 public Constant_2(Parser yyq):base(yyq,"integer",
1313 ((HEX_INTEGER_CONSTANT)(yyq.StackAt(0).m_value))
1314 .yytext){}}
1315
1316public class Constant_3 : Constant {
1317 public Constant_3(Parser yyq):base(yyq,"float",
1318 ((FLOAT_CONSTANT)(yyq.StackAt(0).m_value))
1319 .yytext){}}
1320
1321public class Constant_4 : Constant {
1322 public Constant_4(Parser yyq):base(yyq,"string",
1323 ((STRING_CONSTANT)(yyq.StackAt(0).m_value))
1324 .yytext){}}
1325
1326public class ListConstant_1 : ListConstant {
1327 public ListConstant_1(Parser yyq):base(yyq,
1328 ((ArgumentList)(yyq.StackAt(1).m_value))
1329 ){}}
1330
1331public class VectorConstant_1 : VectorConstant {
1332 public VectorConstant_1(Parser yyq):base(yyq,
1333 ((Expression)(yyq.StackAt(5).m_value))
1334 ,
1335 ((Expression)(yyq.StackAt(3).m_value))
1336 ,
1337 ((Expression)(yyq.StackAt(1).m_value))
1338 ){}}
1339
1340public class RotationConstant_1 : RotationConstant {
1341 public RotationConstant_1(Parser yyq):base(yyq,
1342 ((Expression)(yyq.StackAt(7).m_value))
1343 ,
1344 ((Expression)(yyq.StackAt(5).m_value))
1345 ,
1346 ((Expression)(yyq.StackAt(3).m_value))
1347 ,
1348 ((Expression)(yyq.StackAt(1).m_value))
1349 ){}}
1350
1351public class ConstantExpression_1 : ConstantExpression {
1352 public ConstantExpression_1(Parser yyq):base(yyq,
1353 ((Constant)(yyq.StackAt(0).m_value))
1354 ){}}
1355
1356public class IdentExpression_1 : IdentExpression {
1357 public IdentExpression_1(Parser yyq):base(yyq,
1358 ((IDENT)(yyq.StackAt(0).m_value))
1359 .yytext){}}
1360
1361public class IdentDotExpression_1 : IdentDotExpression {
1362 public IdentDotExpression_1(Parser yyq):base(yyq,
1363 ((IDENT)(yyq.StackAt(2).m_value))
1364 .yytext,
1365 ((IDENT)(yyq.StackAt(0).m_value))
1366 .yytext){}}
1367
1368public class IncrementDecrementExpression_1 : IncrementDecrementExpression {
1369 public IncrementDecrementExpression_1(Parser yyq):base(yyq,
1370 ((IDENT)(yyq.StackAt(1).m_value))
1371 .yytext,
1372 ((INCREMENT)(yyq.StackAt(0).m_value))
1373 .yytext, true){}}
1374
1375public class IncrementDecrementExpression_2 : IncrementDecrementExpression {
1376 public IncrementDecrementExpression_2(Parser yyq):base(yyq,
1377 ((IDENT)(yyq.StackAt(1).m_value))
1378 .yytext,
1379 ((DECREMENT)(yyq.StackAt(0).m_value))
1380 .yytext, true){}}
1381
1382public class IncrementDecrementExpression_3 : IncrementDecrementExpression {
1383 public IncrementDecrementExpression_3(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1384)yyq),
1385 ((IDENT)(yyq.StackAt(3).m_value))
1386 .yytext,
1387 ((IDENT)(yyq.StackAt(1).m_value))
1388 .yytext),
1389 ((INCREMENT)(yyq.StackAt(0).m_value))
1390 .yytext, true){}}
1391
1392public class IncrementDecrementExpression_4 : IncrementDecrementExpression {
1393 public IncrementDecrementExpression_4(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1394)yyq),
1395 ((IDENT)(yyq.StackAt(3).m_value))
1396 .yytext,
1397 ((IDENT)(yyq.StackAt(1).m_value))
1398 .yytext),
1399 ((DECREMENT)(yyq.StackAt(0).m_value))
1400 .yytext, true){}}
1401
1402public class IncrementDecrementExpression_5 : IncrementDecrementExpression {
1403 public IncrementDecrementExpression_5(Parser yyq):base(yyq,
1404 ((IDENT)(yyq.StackAt(0).m_value))
1405 .yytext,
1406 ((INCREMENT)(yyq.StackAt(1).m_value))
1407 .yytext, false){}}
1408
1409public class IncrementDecrementExpression_6 : IncrementDecrementExpression {
1410 public IncrementDecrementExpression_6(Parser yyq):base(yyq,
1411 ((IDENT)(yyq.StackAt(0).m_value))
1412 .yytext,
1413 ((DECREMENT)(yyq.StackAt(1).m_value))
1414 .yytext, false){}}
1415
1416public class IncrementDecrementExpression_7 : IncrementDecrementExpression {
1417 public IncrementDecrementExpression_7(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1418)yyq),
1419 ((IDENT)(yyq.StackAt(2).m_value))
1420 .yytext,
1421 ((IDENT)(yyq.StackAt(0).m_value))
1422 .yytext),
1423 ((INCREMENT)(yyq.StackAt(3).m_value))
1424 .yytext, false){}}
1425
1426public class IncrementDecrementExpression_8 : IncrementDecrementExpression {
1427 public IncrementDecrementExpression_8(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax
1428)yyq),
1429 ((IDENT)(yyq.StackAt(2).m_value))
1430 .yytext,
1431 ((IDENT)(yyq.StackAt(0).m_value))
1432 .yytext),
1433 ((DECREMENT)(yyq.StackAt(3).m_value))
1434 .yytext, false){}}
1435
1436public class FunctionCallExpression_1 : FunctionCallExpression {
1437 public FunctionCallExpression_1(Parser yyq):base(yyq,
1438 ((FunctionCall)(yyq.StackAt(0).m_value))
1439 ){}}
1440
1441public class BinaryExpression_1 : BinaryExpression {
1442 public BinaryExpression_1(Parser yyq):base(yyq,
1443 ((Expression)(yyq.StackAt(2).m_value))
1444 ,
1445 ((Expression)(yyq.StackAt(0).m_value))
1446 ,
1447 ((PLUS)(yyq.StackAt(1).m_value))
1448 .yytext){}}
1449
1450public class BinaryExpression_2 : BinaryExpression {
1451 public BinaryExpression_2(Parser yyq):base(yyq,
1452 ((Expression)(yyq.StackAt(2).m_value))
1453 ,
1454 ((Expression)(yyq.StackAt(0).m_value))
1455 ,
1456 ((MINUS)(yyq.StackAt(1).m_value))
1457 .yytext){}}
1458
1459public class BinaryExpression_3 : BinaryExpression {
1460 public BinaryExpression_3(Parser yyq):base(yyq,
1461 ((Expression)(yyq.StackAt(2).m_value))
1462 ,
1463 ((Expression)(yyq.StackAt(0).m_value))
1464 ,
1465 ((STAR)(yyq.StackAt(1).m_value))
1466 .yytext){}}
1467
1468public class BinaryExpression_4 : BinaryExpression {
1469 public BinaryExpression_4(Parser yyq):base(yyq,
1470 ((Expression)(yyq.StackAt(2).m_value))
1471 ,
1472 ((Expression)(yyq.StackAt(0).m_value))
1473 ,
1474 ((SLASH)(yyq.StackAt(1).m_value))
1475 .yytext){}}
1476
1477public class BinaryExpression_5 : BinaryExpression {
1478 public BinaryExpression_5(Parser yyq):base(yyq,
1479 ((Expression)(yyq.StackAt(2).m_value))
1480 ,
1481 ((Expression)(yyq.StackAt(0).m_value))
1482 ,
1483 ((PERCENT)(yyq.StackAt(1).m_value))
1484 .yytext){}}
1485
1486public class BinaryExpression_6 : BinaryExpression {
1487 public BinaryExpression_6(Parser yyq):base(yyq,
1488 ((Expression)(yyq.StackAt(2).m_value))
1489 ,
1490 ((Expression)(yyq.StackAt(0).m_value))
1491 ,
1492 ((AMP)(yyq.StackAt(1).m_value))
1493 .yytext){}}
1494
1495public class BinaryExpression_7 : BinaryExpression {
1496 public BinaryExpression_7(Parser yyq):base(yyq,
1497 ((Expression)(yyq.StackAt(2).m_value))
1498 ,
1499 ((Expression)(yyq.StackAt(0).m_value))
1500 ,
1501 ((STROKE)(yyq.StackAt(1).m_value))
1502 .yytext){}}
1503
1504public class BinaryExpression_8 : BinaryExpression {
1505 public BinaryExpression_8(Parser yyq):base(yyq,
1506 ((Expression)(yyq.StackAt(2).m_value))
1507 ,
1508 ((Expression)(yyq.StackAt(0).m_value))
1509 ,
1510 ((CARET)(yyq.StackAt(1).m_value))
1511 .yytext){}}
1512
1513public class BinaryExpression_9 : BinaryExpression {
1514 public BinaryExpression_9(Parser yyq):base(yyq,
1515 ((Expression)(yyq.StackAt(2).m_value))
1516 ,
1517 ((Expression)(yyq.StackAt(0).m_value))
1518 ,
1519 ((RIGHT_ANGLE)(yyq.StackAt(1).m_value))
1520 .yytext){}}
1521
1522public class BinaryExpression_10 : BinaryExpression {
1523 public BinaryExpression_10(Parser yyq):base(yyq,
1524 ((Expression)(yyq.StackAt(2).m_value))
1525 ,
1526 ((Expression)(yyq.StackAt(0).m_value))
1527 ,
1528 ((LEFT_ANGLE)(yyq.StackAt(1).m_value))
1529 .yytext){}}
1530
1531public class BinaryExpression_11 : BinaryExpression {
1532 public BinaryExpression_11(Parser yyq):base(yyq,
1533 ((Expression)(yyq.StackAt(2).m_value))
1534 ,
1535 ((Expression)(yyq.StackAt(0).m_value))
1536 ,
1537 ((EQUALS_EQUALS)(yyq.StackAt(1).m_value))
1538 .yytext){}}
1539
1540public class BinaryExpression_12 : BinaryExpression {
1541 public BinaryExpression_12(Parser yyq):base(yyq,
1542 ((Expression)(yyq.StackAt(2).m_value))
1543 ,
1544 ((Expression)(yyq.StackAt(0).m_value))
1545 ,
1546 ((EXCLAMATION_EQUALS)(yyq.StackAt(1).m_value))
1547 .yytext){}}
1548
1549public class BinaryExpression_13 : BinaryExpression {
1550 public BinaryExpression_13(Parser yyq):base(yyq,
1551 ((Expression)(yyq.StackAt(2).m_value))
1552 ,
1553 ((Expression)(yyq.StackAt(0).m_value))
1554 ,
1555 ((LESS_EQUALS)(yyq.StackAt(1).m_value))
1556 .yytext){}}
1557
1558public class BinaryExpression_14 : BinaryExpression {
1559 public BinaryExpression_14(Parser yyq):base(yyq,
1560 ((Expression)(yyq.StackAt(2).m_value))
1561 ,
1562 ((Expression)(yyq.StackAt(0).m_value))
1563 ,
1564 ((GREATER_EQUALS)(yyq.StackAt(1).m_value))
1565 .yytext){}}
1566
1567public class BinaryExpression_15 : BinaryExpression {
1568 public BinaryExpression_15(Parser yyq):base(yyq,
1569 ((Expression)(yyq.StackAt(2).m_value))
1570 ,
1571 ((Expression)(yyq.StackAt(0).m_value))
1572 ,
1573 ((AMP_AMP)(yyq.StackAt(1).m_value))
1574 .yytext){}}
1575
1576public class BinaryExpression_16 : BinaryExpression {
1577 public BinaryExpression_16(Parser yyq):base(yyq,
1578 ((Expression)(yyq.StackAt(2).m_value))
1579 ,
1580 ((Expression)(yyq.StackAt(0).m_value))
1581 ,
1582 ((STROKE_STROKE)(yyq.StackAt(1).m_value))
1583 .yytext){}}
1584
1585public class BinaryExpression_17 : BinaryExpression {
1586 public BinaryExpression_17(Parser yyq):base(yyq,
1587 ((Expression)(yyq.StackAt(2).m_value))
1588 ,
1589 ((Expression)(yyq.StackAt(0).m_value))
1590 ,
1591 ((LEFT_SHIFT)(yyq.StackAt(1).m_value))
1592 .yytext){}}
1593
1594public class BinaryExpression_18 : BinaryExpression {
1595 public BinaryExpression_18(Parser yyq):base(yyq,
1596 ((Expression)(yyq.StackAt(2).m_value))
1597 ,
1598 ((Expression)(yyq.StackAt(0).m_value))
1599 ,
1600 ((RIGHT_SHIFT)(yyq.StackAt(1).m_value))
1601 .yytext){}}
1602
1603public class UnaryExpression_1 : UnaryExpression {
1604 public UnaryExpression_1(Parser yyq):base(yyq,
1605 ((EXCLAMATION)(yyq.StackAt(1).m_value))
1606 .yytext,
1607 ((Expression)(yyq.StackAt(0).m_value))
1608 ){}}
1609
1610public class UnaryExpression_2 : UnaryExpression {
1611 public UnaryExpression_2(Parser yyq):base(yyq,
1612 ((MINUS)(yyq.StackAt(1).m_value))
1613 .yytext,
1614 ((Expression)(yyq.StackAt(0).m_value))
1615 ){}}
1616
1617public class UnaryExpression_3 : UnaryExpression {
1618 public UnaryExpression_3(Parser yyq):base(yyq,
1619 ((TILDE)(yyq.StackAt(1).m_value))
1620 .yytext,
1621 ((Expression)(yyq.StackAt(0).m_value))
1622 ){}}
1623
1624public class ParenthesisExpression_1 : ParenthesisExpression {
1625 public ParenthesisExpression_1(Parser yyq):base(yyq,
1626 ((Expression)(yyq.StackAt(1).m_value))
1627 ){}}
1628
1629public class ParenthesisExpression_2 : ParenthesisExpression {
1630 public ParenthesisExpression_2(Parser yyq):base(yyq,
1631 ((SimpleAssignment)(yyq.StackAt(1).m_value))
1632 ){}}
1633
1634public class TypecastExpression_1 : TypecastExpression {
1635 public TypecastExpression_1(Parser yyq):base(yyq,
1636 ((Typename)(yyq.StackAt(2).m_value))
1637 .yytext,
1638 ((Constant)(yyq.StackAt(0).m_value))
1639 ){}}
1640
1641public class TypecastExpression_2 : TypecastExpression {
1642 public TypecastExpression_2(Parser yyq):base(yyq,
1643 ((Typename)(yyq.StackAt(2).m_value))
1644 .yytext, new IdentExpression(((LSLSyntax
1645)yyq),
1646 ((IDENT)(yyq.StackAt(0).m_value))
1647 .yytext)){}}
1648
1649public class TypecastExpression_3 : TypecastExpression {
1650 public TypecastExpression_3(Parser yyq):base(yyq,
1651 ((Typename)(yyq.StackAt(4).m_value))
1652 .yytext, new IdentDotExpression(((LSLSyntax
1653)yyq),
1654 ((IDENT)(yyq.StackAt(2).m_value))
1655 .yytext,
1656 ((IDENT)(yyq.StackAt(0).m_value))
1657 .yytext)){}}
1658
1659public class TypecastExpression_4 : TypecastExpression {
1660 public TypecastExpression_4(Parser yyq):base(yyq,
1661 ((Typename)(yyq.StackAt(3).m_value))
1662 .yytext, new IncrementDecrementExpression(((LSLSyntax
1663)yyq),
1664 ((IDENT)(yyq.StackAt(1).m_value))
1665 .yytext,
1666 ((INCREMENT)(yyq.StackAt(0).m_value))
1667 .yytext, true)){}}
1668
1669public class TypecastExpression_5 : TypecastExpression {
1670 public TypecastExpression_5(Parser yyq):base(yyq,
1671 ((Typename)(yyq.StackAt(5).m_value))
1672 .yytext, new IncrementDecrementExpression(((LSLSyntax
1673)yyq), new IdentDotExpression(((LSLSyntax
1674)yyq),
1675 ((IDENT)(yyq.StackAt(3).m_value))
1676 .yytext,
1677 ((IDENT)(yyq.StackAt(1).m_value))
1678 .yytext),
1679 ((INCREMENT)(yyq.StackAt(0).m_value))
1680 .yytext, true)){}}
1681
1682public class TypecastExpression_6 : TypecastExpression {
1683 public TypecastExpression_6(Parser yyq):base(yyq,
1684 ((Typename)(yyq.StackAt(3).m_value))
1685 .yytext, new IncrementDecrementExpression(((LSLSyntax
1686)yyq),
1687 ((IDENT)(yyq.StackAt(1).m_value))
1688 .yytext,
1689 ((DECREMENT)(yyq.StackAt(0).m_value))
1690 .yytext, true)){}}
1691
1692public class TypecastExpression_7 : TypecastExpression {
1693 public TypecastExpression_7(Parser yyq):base(yyq,
1694 ((Typename)(yyq.StackAt(5).m_value))
1695 .yytext, new IncrementDecrementExpression(((LSLSyntax
1696)yyq), new IdentDotExpression(((LSLSyntax
1697)yyq),
1698 ((IDENT)(yyq.StackAt(3).m_value))
1699 .yytext,
1700 ((IDENT)(yyq.StackAt(1).m_value))
1701 .yytext),
1702 ((DECREMENT)(yyq.StackAt(0).m_value))
1703 .yytext, true)){}}
1704
1705public class TypecastExpression_8 : TypecastExpression {
1706 public TypecastExpression_8(Parser yyq):base(yyq,
1707 ((Typename)(yyq.StackAt(2).m_value))
1708 .yytext,
1709 ((FunctionCall)(yyq.StackAt(0).m_value))
1710 ){}}
1711
1712public class TypecastExpression_9 : TypecastExpression {
1713 public TypecastExpression_9(Parser yyq):base(yyq,
1714 ((Typename)(yyq.StackAt(4).m_value))
1715 .yytext,
1716 ((Expression)(yyq.StackAt(1).m_value))
1717 ){}}
1718
1719public class FunctionCall_1 : FunctionCall {
1720 public FunctionCall_1(Parser yyq):base(yyq,
1721 ((IDENT)(yyq.StackAt(3).m_value))
1722 .yytext,
1723 ((ArgumentList)(yyq.StackAt(1).m_value))
1724 ){}}
1725
1726public class ArgumentList_1 : ArgumentList {
1727 public ArgumentList_1(Parser yyq):base(yyq,
1728 ((Argument)(yyq.StackAt(0).m_value))
1729 ){}}
1730
1731public class ArgumentList_2 : ArgumentList {
1732 public ArgumentList_2(Parser yyq):base(yyq,
1733 ((ArgumentList)(yyq.StackAt(2).m_value))
1734 ,
1735 ((Argument)(yyq.StackAt(0).m_value))
1736 ){}}
1737
1738public class ExpressionArgument_1 : ExpressionArgument {
1739 public ExpressionArgument_1(Parser yyq):base(yyq,
1740 ((Expression)(yyq.StackAt(0).m_value))
1741 ){}}
1742
1743public class Typename_1 : Typename {
1744 public Typename_1(Parser yyq):base(yyq,
1745 ((INTEGER_TYPE)(yyq.StackAt(0).m_value))
1746 .yytext){}}
1747
1748public class Typename_2 : Typename {
1749 public Typename_2(Parser yyq):base(yyq,
1750 ((FLOAT_TYPE)(yyq.StackAt(0).m_value))
1751 .yytext){}}
1752
1753public class Typename_3 : Typename {
1754 public Typename_3(Parser yyq):base(yyq,
1755 ((STRING_TYPE)(yyq.StackAt(0).m_value))
1756 .yytext){}}
1757
1758public class Typename_4 : Typename {
1759 public Typename_4(Parser yyq):base(yyq,
1760 ((KEY_TYPE)(yyq.StackAt(0).m_value))
1761 .yytext){}}
1762
1763public class Typename_5 : Typename {
1764 public Typename_5(Parser yyq):base(yyq,
1765 ((VECTOR_TYPE)(yyq.StackAt(0).m_value))
1766 .yytext){}}
1767
1768public class Typename_6 : Typename {
1769 public Typename_6(Parser yyq):base(yyq,
1770 ((ROTATION_TYPE)(yyq.StackAt(0).m_value))
1771 .yytext){}}
1772
1773public class Typename_7 : Typename {
1774 public Typename_7(Parser yyq):base(yyq,
1775 ((LIST_TYPE)(yyq.StackAt(0).m_value))
1776 .yytext){}}
1777
1778public class Event_1 : Event {
1779 public Event_1(Parser yyq):base(yyq,
1780 ((AT_ROT_TARGET_EVENT)(yyq.StackAt(0).m_value))
1781 .yytext){}}
1782
1783public class Event_2 : Event {
1784 public Event_2(Parser yyq):base(yyq,
1785 ((AT_TARGET_EVENT)(yyq.StackAt(0).m_value))
1786 .yytext){}}
1787
1788public class Event_3 : Event {
1789 public Event_3(Parser yyq):base(yyq,
1790 ((ATTACH_EVENT)(yyq.StackAt(0).m_value))
1791 .yytext){}}
1792
1793public class Event_4 : Event {
1794 public Event_4(Parser yyq):base(yyq,
1795 ((CHANGED_EVENT)(yyq.StackAt(0).m_value))
1796 .yytext){}}
1797
1798public class Event_5 : Event {
1799 public Event_5(Parser yyq):base(yyq,
1800 ((COLLISION_EVENT)(yyq.StackAt(0).m_value))
1801 .yytext){}}
1802
1803public class Event_6 : Event {
1804 public Event_6(Parser yyq):base(yyq,
1805 ((COLLISION_END_EVENT)(yyq.StackAt(0).m_value))
1806 .yytext){}}
1807
1808public class Event_7 : Event {
1809 public Event_7(Parser yyq):base(yyq,
1810 ((COLLISION_START_EVENT)(yyq.StackAt(0).m_value))
1811 .yytext){}}
1812
1813public class Event_8 : Event {
1814 public Event_8(Parser yyq):base(yyq,
1815 ((CONTROL_EVENT)(yyq.StackAt(0).m_value))
1816 .yytext){}}
1817
1818public class Event_9 : Event {
1819 public Event_9(Parser yyq):base(yyq,
1820 ((DATASERVER_EVENT)(yyq.StackAt(0).m_value))
1821 .yytext){}}
1822
1823public class Event_10 : Event {
1824 public Event_10(Parser yyq):base(yyq,
1825 ((EMAIL_EVENT)(yyq.StackAt(0).m_value))
1826 .yytext){}}
1827
1828public class Event_11 : Event {
1829 public Event_11(Parser yyq):base(yyq,
1830 ((HTTP_RESPONSE_EVENT)(yyq.StackAt(0).m_value))
1831 .yytext){}}
1832
1833public class Event_12 : Event {
1834 public Event_12(Parser yyq):base(yyq,
1835 ((LAND_COLLISION_EVENT)(yyq.StackAt(0).m_value))
1836 .yytext){}}
1837
1838public class Event_13 : Event {
1839 public Event_13(Parser yyq):base(yyq,
1840 ((LAND_COLLISION_END_EVENT)(yyq.StackAt(0).m_value))
1841 .yytext){}}
1842
1843public class Event_14 : Event {
1844 public Event_14(Parser yyq):base(yyq,
1845 ((LAND_COLLISION_START_EVENT)(yyq.StackAt(0).m_value))
1846 .yytext){}}
1847
1848public class Event_15 : Event {
1849 public Event_15(Parser yyq):base(yyq,
1850 ((LINK_MESSAGE_EVENT)(yyq.StackAt(0).m_value))
1851 .yytext){}}
1852
1853public class Event_16 : Event {
1854 public Event_16(Parser yyq):base(yyq,
1855 ((LISTEN_EVENT)(yyq.StackAt(0).m_value))
1856 .yytext){}}
1857
1858public class Event_17 : Event {
1859 public Event_17(Parser yyq):base(yyq,
1860 ((MONEY_EVENT)(yyq.StackAt(0).m_value))
1861 .yytext){}}
1862
1863public class Event_18 : Event {
1864 public Event_18(Parser yyq):base(yyq,
1865 ((MOVING_END_EVENT)(yyq.StackAt(0).m_value))
1866 .yytext){}}
1867
1868public class Event_19 : Event {
1869 public Event_19(Parser yyq):base(yyq,
1870 ((MOVING_START_EVENT)(yyq.StackAt(0).m_value))
1871 .yytext){}}
1872
1873public class Event_20 : Event {
1874 public Event_20(Parser yyq):base(yyq,
1875 ((NO_SENSOR_EVENT)(yyq.StackAt(0).m_value))
1876 .yytext){}}
1877
1878public class Event_21 : Event {
1879 public Event_21(Parser yyq):base(yyq,
1880 ((NOT_AT_ROT_TARGET_EVENT)(yyq.StackAt(0).m_value))
1881 .yytext){}}
1882
1883public class Event_22 : Event {
1884 public Event_22(Parser yyq):base(yyq,
1885 ((NOT_AT_TARGET_EVENT)(yyq.StackAt(0).m_value))
1886 .yytext){}}
1887
1888public class Event_23 : Event {
1889 public Event_23(Parser yyq):base(yyq,
1890 ((OBJECT_REZ_EVENT)(yyq.StackAt(0).m_value))
1891 .yytext){}}
1892
1893public class Event_24 : Event {
1894 public Event_24(Parser yyq):base(yyq,
1895 ((ON_REZ_EVENT)(yyq.StackAt(0).m_value))
1896 .yytext){}}
1897
1898public class Event_25 : Event {
1899 public Event_25(Parser yyq):base(yyq,
1900 ((REMOTE_DATA_EVENT)(yyq.StackAt(0).m_value))
1901 .yytext){}}
1902
1903public class Event_26 : Event {
1904 public Event_26(Parser yyq):base(yyq,
1905 ((RUN_TIME_PERMISSIONS_EVENT)(yyq.StackAt(0).m_value))
1906 .yytext){}}
1907
1908public class Event_27 : Event {
1909 public Event_27(Parser yyq):base(yyq,
1910 ((SENSOR_EVENT)(yyq.StackAt(0).m_value))
1911 .yytext){}}
1912
1913public class Event_28 : Event {
1914 public Event_28(Parser yyq):base(yyq,
1915 ((STATE_ENTRY_EVENT)(yyq.StackAt(0).m_value))
1916 .yytext){}}
1917
1918public class Event_29 : Event {
1919 public Event_29(Parser yyq):base(yyq,
1920 ((STATE_EXIT_EVENT)(yyq.StackAt(0).m_value))
1921 .yytext){}}
1922
1923public class Event_30 : Event {
1924 public Event_30(Parser yyq):base(yyq,
1925 ((TIMER_EVENT)(yyq.StackAt(0).m_value))
1926 .yytext){}}
1927
1928public class Event_31 : Event {
1929 public Event_31(Parser yyq):base(yyq,
1930 ((TOUCH_EVENT)(yyq.StackAt(0).m_value))
1931 .yytext){}}
1932
1933public class Event_32 : Event {
1934 public Event_32(Parser yyq):base(yyq,
1935 ((TOUCH_END_EVENT)(yyq.StackAt(0).m_value))
1936 .yytext){}}
1937
1938public class Event_33 : Event {
1939 public Event_33(Parser yyq):base(yyq,
1940 ((TOUCH_START_EVENT)(yyq.StackAt(0).m_value))
1941 .yytext){}}
1942public class yyLSLSyntax
1943: YyParser {
1944 public override object Action(Parser yyq,SYMBOL yysym, int yyact) {
1945 switch(yyact) {
1946 case -1: break; //// keep compiler happy
1947} return null; }
1948
1949public class ArgumentDeclarationList_3 : ArgumentDeclarationList {
1950 public ArgumentDeclarationList_3(Parser yyq):base(yyq){}}
1951
1952public class ArgumentList_3 : ArgumentList {
1953 public ArgumentList_3(Parser yyq):base(yyq){}}
1954
1955public class ArgumentDeclarationList_4 : ArgumentDeclarationList {
1956 public ArgumentDeclarationList_4(Parser yyq):base(yyq){}}
1957
1958public class ArgumentDeclarationList_5 : ArgumentDeclarationList {
1959 public ArgumentDeclarationList_5(Parser yyq):base(yyq){}}
1960
1961public class Statement_13 : Statement {
1962 public Statement_13(Parser yyq):base(yyq){}}
1963
1964public class ArgumentList_4 : ArgumentList {
1965 public ArgumentList_4(Parser yyq):base(yyq){}}
1966public yyLSLSyntax
1967():base() { arr = new int[] {
1968101,4,6,52,0,
196946,0,53,0,102,
197020,103,4,28,76,
19710,83,0,76,0,
197280,0,114,0,111,
19730,103,0,114,0,
197497,0,109,0,82,
19750,111,0,111,0,
1976116,0,1,95,1,
19772,104,18,1,2609,
1978102,2,0,105,5,
1979312,1,0,106,18,
19801,0,0,2,0,
19811,1,107,18,1,
19821,108,20,109,4,
198318,76,0,73,0,
198483,0,84,0,95,
19850,84,0,89,0,
198680,0,69,0,1,
198757,1,1,2,0,
19881,2,110,18,1,
19892,111,20,112,4,
199026,82,0,79,0,
199184,0,65,0,84,
19920,73,0,79,0,
199378,0,95,0,84,
19940,89,0,80,0,
199569,0,1,56,1,
19961,2,0,1,3,
1997113,18,1,3,114,
199820,115,4,22,86,
19990,69,0,67,0,
200084,0,79,0,82,
20010,95,0,84,0,
200289,0,80,0,69,
20030,1,55,1,1,
20042,0,1,4,116,
200518,1,4,117,20,
2006118,4,16,75,0,
200769,0,89,0,95,
20080,84,0,89,0,
200980,0,69,0,1,
201054,1,1,2,0,
20111,5,119,18,1,
20125,120,20,121,4,
201322,83,0,84,0,
201482,0,73,0,78,
20150,71,0,95,0,
201684,0,89,0,80,
20170,69,0,1,53,
20181,1,2,0,1,
20196,122,18,1,6,
2020123,20,124,4,20,
202170,0,76,0,79,
20220,65,0,84,0,
202395,0,84,0,89,
20240,80,0,69,0,
20251,52,1,1,2,
20260,1,7,125,18,
20271,7,126,20,127,
20284,24,73,0,78,
20290,84,0,69,0,
203071,0,69,0,82,
20310,95,0,84,0,
203289,0,80,0,69,
20330,1,51,1,1,
20342,0,1,8,128,
203518,1,8,129,20,
2036130,4,16,84,0,
2037121,0,112,0,101,
20380,110,0,97,0,
2039109,0,101,0,1,
2040105,1,2,2,0,
20411,9,131,18,1,
20429,132,20,133,4,
204310,73,0,68,0,
204469,0,78,0,84,
20450,1,91,1,1,
20462,0,1,10,134,
204718,1,10,135,20,
2048136,4,20,76,0,
204969,0,70,0,84,
20500,95,0,80,0,
205165,0,82,0,69,
20520,78,0,1,16,
20531,1,2,0,1,
205418,137,18,1,18,
2055129,2,0,1,19,
2056138,18,1,19,132,
20572,0,1,20,139,
205818,1,20,140,20,
2059141,4,46,65,0,
2060114,0,103,0,117,
20610,109,0,101,0,
2062110,0,116,0,68,
20630,101,0,99,0,
2064108,0,97,0,114,
20650,97,0,116,0,
2066105,0,111,0,110,
20670,76,0,105,0,
2068115,0,116,0,1,
2069103,1,2,2,0,
20701,21,142,18,1,
207121,143,20,144,4,
207210,67,0,79,0,
207377,0,77,0,65,
20740,1,14,1,1,
20752,0,1,1694,145,
207618,1,1694,146,20,
2077147,4,32,70,0,
2078111,0,114,0,76,
20790,111,0,111,0,
2080112,0,83,0,116,
20810,97,0,116,0,
2082101,0,109,0,101,
20830,110,0,116,0,
20841,120,1,2,2,
20850,1,1695,148,18,
20861,1695,143,2,0,
20871,30,149,18,1,
208830,150,20,151,4,
208922,68,0,101,0,
209099,0,108,0,97,
20910,114,0,97,0,
2092116,0,105,0,111,
20930,110,0,1,104,
20941,2,2,0,1,
209531,152,18,1,31,
2096153,20,154,4,22,
209782,0,73,0,71,
20980,72,0,84,0,
209995,0,80,0,65,
21000,82,0,69,0,
210178,0,1,17,1,
21021,2,0,1,32,
2103155,18,1,32,156,
210420,157,4,20,76,
21050,69,0,70,0,
210684,0,95,0,66,
21070,82,0,65,0,
210867,0,69,0,1,
210912,1,1,2,0,
21101,1114,158,18,1,
21111114,132,2,0,1,
21121152,159,18,1,1152,
2113160,20,161,4,32,
211483,0,105,0,109,
21150,112,0,108,0,
2116101,0,65,0,115,
21170,115,0,105,0,
2118103,0,110,0,109,
21190,101,0,110,0,
2120116,0,1,111,1,
21212,2,0,1,1117,
2122162,18,1,1117,163,
212320,164,4,28,80,
21240,69,0,82,0,
212567,0,69,0,78,
21260,84,0,95,0,
212769,0,81,0,85,
21280,65,0,76,0,
212983,0,1,10,1,
21301,2,0,1,40,
2131165,18,1,40,132,
21322,0,1,41,166,
213318,1,41,135,2,
21340,1,42,167,18,
21351,42,168,20,169,
21364,20,69,0,120,
21370,112,0,114,0,
2138101,0,115,0,115,
21390,105,0,111,0,
2140110,0,1,129,1,
21412,2,0,1,43,
2142170,18,1,43,171,
214320,172,4,22,82,
21440,73,0,71,0,
214572,0,84,0,95,
21460,83,0,72,0,
214773,0,70,0,84,
21480,1,41,1,1,
21492,0,1,44,173,
215018,1,44,132,2,
21510,1,1159,174,18,
21521,1159,168,2,0,
21531,46,175,18,1,
215446,176,20,177,4,
215512,80,0,69,0,
215682,0,73,0,79,
21570,68,0,1,24,
21581,1,2,0,1,
215947,178,18,1,47,
2160132,2,0,1,48,
2161179,18,1,48,180,
216220,181,4,18,68,
21630,69,0,67,0,
216482,0,69,0,77,
21650,69,0,78,0,
216684,0,1,5,1,
21671,2,0,1,49,
2168182,18,1,49,183,
216920,184,4,18,73,
21700,78,0,67,0,
217182,0,69,0,77,
21720,69,0,78,0,
217384,0,1,4,1,
21741,2,0,1,50,
2175185,18,1,50,180,
21762,0,1,51,186,
217718,1,51,183,2,
21780,1,52,187,18,
21791,52,135,2,0,
21801,1730,188,18,1,
21811730,160,2,0,1,
21821731,189,18,1,1731,
2183190,20,191,4,18,
218483,0,69,0,77,
21850,73,0,67,0,
218679,0,76,0,79,
21870,78,0,1,11,
21881,1,2,0,1,
218961,192,18,1,61,
2190129,2,0,1,62,
2191193,18,1,62,153,
21922,0,1,63,194,
219318,1,63,132,2,
21940,1,65,195,18,
21951,65,176,2,0,
21961,66,196,18,1,
219766,132,2,0,1,
219867,197,18,1,67,
2199180,2,0,1,68,
2200198,18,1,68,183,
22012,0,1,69,199,
220218,1,69,180,2,
22030,1,70,200,18,
22041,70,183,2,0,
22051,71,201,18,1,
220671,135,2,0,1,
220773,202,18,1,73,
2208168,2,0,1,74,
2209203,18,1,74,153,
22102,0,1,1189,204,
221118,1,1189,205,20,
2212206,4,22,83,0,
221384,0,65,0,82,
22140,95,0,69,0,
221581,0,85,0,65,
22160,76,0,83,0,
22171,8,1,1,2,
22180,1,76,207,18,
22191,76,208,20,209,
22204,20,76,0,69,
22210,70,0,84,0,
222295,0,83,0,72,
22230,73,0,70,0,
222484,0,1,40,1,
22251,2,0,1,1153,
2226210,18,1,1153,211,
222720,212,4,24,83,
22280,76,0,65,0,
222983,0,72,0,95,
22300,69,0,81,0,
223185,0,65,0,76,
22320,83,0,1,9,
22331,1,2,0,1,
223479,213,18,1,79,
2235214,20,215,4,10,
223684,0,73,0,76,
22370,68,0,69,0,
22381,36,1,1,2,
22390,1,1195,216,18,
22401,1195,168,2,0,
22411,82,217,18,1,
224282,168,2,0,1,
22431123,218,18,1,1123,
2244168,2,0,1,85,
2245219,18,1,85,220,
224620,221,4,26,83,
22470,84,0,82,0,
224879,0,75,0,69,
22490,95,0,83,0,
225084,0,82,0,79,
22510,75,0,69,0,
22521,39,1,1,2,
22530,1,2547,222,18,
22541,2547,223,20,224,
22554,34,67,0,111,
22560,109,0,112,0,
2257111,0,117,0,110,
22580,100,0,83,0,
2259116,0,97,0,116,
22600,101,0,109,0,
2261101,0,110,0,116,
22620,1,107,1,2,
22632,0,1,89,225,
226418,1,89,226,20,
2265227,4,10,77,0,
226673,0,78,0,85,
22670,83,0,1,19,
22681,1,2,0,1,
226993,228,18,1,93,
2270168,2,0,1,97,
2271229,18,1,97,230,
227220,231,4,14,65,
22730,77,0,80,0,
227495,0,65,0,77,
22750,80,0,1,38,
22761,1,2,0,1,
2277102,232,18,1,102,
2278233,20,234,4,22,
227969,0,88,0,67,
22800,76,0,65,0,
228177,0,65,0,84,
22820,73,0,79,0,
228378,0,1,37,1,
22841,2,0,1,1775,
2285235,18,1,1775,153,
22862,0,1,107,236,
228718,1,107,168,2,
22880,1,2196,237,18,
22891,2196,160,2,0,
22901,1224,238,18,1,
22911224,160,2,0,1,
22921225,239,18,1,1225,
2293240,20,241,4,24,
229477,0,73,0,78,
22950,85,0,83,0,
229695,0,69,0,81,
22970,85,0,65,0,
229876,0,83,0,1,
22997,1,1,2,0,
23001,112,242,18,1,
2301112,243,20,244,4,
230228,71,0,82,0,
230369,0,65,0,84,
23040,69,0,82,0,
230595,0,69,0,81,
23060,85,0,65,0,
230776,0,83,0,1,
230832,1,1,2,0,
23091,1188,245,18,1,
23101188,160,2,0,1,
23111231,246,18,1,1231,
2312168,2,0,1,118,
2313247,18,1,118,168,
23142,0,1,1737,248,
231518,1,1737,168,2,
23160,1,124,249,18,
23171,124,250,20,251,
23184,22,76,0,69,
23190,83,0,83,0,
232095,0,69,0,81,
23210,85,0,65,0,
232276,0,83,0,1,
232331,1,1,2,0,
23241,2280,252,18,1,
23252280,160,2,0,1,
23262354,253,18,1,2354,
2327254,20,255,4,18,
232883,0,116,0,97,
23290,116,0,101,0,
2330109,0,101,0,110,
23310,116,0,1,109,
23321,2,2,0,1,
23332355,256,18,1,2355,
2334257,20,258,4,22,
233582,0,73,0,71,
23360,72,0,84,0,
233795,0,66,0,82,
23380,65,0,67,0,
233969,0,1,13,1,
23401,2,0,1,130,
2341259,18,1,130,168,
23422,0,1,1802,260,
234318,1,1802,254,2,
23440,1,2360,261,18,
23451,2360,257,2,0,
23461,1804,262,18,1,
23471804,263,20,264,4,
23484,68,0,79,0,
23491,44,1,1,2,
23500,1,2362,265,18,
23511,2362,223,2,0,
23521,2363,266,18,1,
23532363,150,2,0,1,
23542364,267,18,1,2364,
2355268,20,269,4,10,
235683,0,84,0,65,
23570,84,0,69,0,
23581,48,1,1,2,
23590,1,137,270,18,
23601,137,271,20,272,
23614,36,69,0,88,
23620,67,0,76,0,
236365,0,77,0,65,
23640,84,0,73,0,
236579,0,78,0,95,
23660,69,0,81,0,
236785,0,65,0,76,
23680,83,0,1,30,
23691,1,2,0,1,
23702366,273,18,1,2366,
2371156,2,0,1,2367,
2372274,18,1,2367,275,
237320,276,4,34,84,
23740,79,0,85,0,
237567,0,72,0,95,
23760,83,0,84,0,
237765,0,82,0,84,
23780,95,0,69,0,
237986,0,69,0,78,
23800,84,0,1,89,
23811,1,2,0,1,
23821701,277,18,1,1701,
2383168,2,0,1,1756,
2384278,18,1,1756,190,
23852,0,1,2370,279,
238618,1,2370,280,20,
2387281,4,22,84,0,
238873,0,77,0,69,
23890,82,0,95,0,
239069,0,86,0,69,
23910,78,0,84,0,
23921,87,1,1,2,
23930,1,143,282,18,
23941,143,168,2,0,
23951,2372,283,18,1,
23962372,284,20,285,4,
239734,83,0,84,0,
239865,0,84,0,69,
23990,95,0,69,0,
240078,0,84,0,82,
24010,89,0,95,0,
240269,0,86,0,69,
24030,78,0,84,0,
24041,85,1,1,2,
24050,1,2373,286,18,
24061,2373,287,20,288,
24074,24,83,0,69,
24080,78,0,83,0,
240979,0,82,0,95,
24100,69,0,86,0,
241169,0,78,0,84,
24120,1,84,1,1,
24132,0,1,1260,289,
241418,1,1260,160,2,
24150,1,1261,290,18,
24161,1261,291,20,292,
24174,22,80,0,76,
24180,85,0,83,0,
241995,0,69,0,81,
24200,85,0,65,0,
242176,0,83,0,1,
24226,1,1,2,0,
24231,2376,293,18,1,
24242376,294,20,295,4,
242524,79,0,78,0,
242695,0,82,0,69,
24270,90,0,95,0,
242869,0,86,0,69,
24290,78,0,84,0,
24301,81,1,1,2,
24310,1,2377,296,18,
24321,2377,297,20,298,
24334,32,79,0,66,
24340,74,0,69,0,
243567,0,84,0,95,
24360,82,0,69,0,
243790,0,95,0,69,
24380,86,0,69,0,
243978,0,84,0,1,
244080,1,1,2,0,
24411,2378,299,18,1,
24422378,300,20,301,4,
244338,78,0,79,0,
244484,0,95,0,65,
24450,84,0,95,0,
244684,0,65,0,82,
24470,71,0,69,0,
244884,0,95,0,69,
24490,86,0,69,0,
245078,0,84,0,1,
245179,1,1,2,0,
24521,151,302,18,1,
2453151,303,20,304,4,
245426,69,0,81,0,
245585,0,65,0,76,
24560,83,0,95,0,
245769,0,81,0,85,
24580,65,0,76,0,
245983,0,1,29,1,
24601,2,0,1,2380,
2461305,18,1,2380,306,
246220,307,4,30,78,
24630,79,0,95,0,
246483,0,69,0,78,
24650,83,0,79,0,
246682,0,95,0,69,
24670,86,0,69,0,
246878,0,84,0,1,
246977,1,1,2,0,
24701,1267,308,18,1,
24711267,168,2,0,1,
24722382,309,18,1,2382,
2473310,20,311,4,32,
247477,0,79,0,86,
24750,73,0,78,0,
247671,0,95,0,69,
24770,78,0,68,0,
247895,0,69,0,86,
24790,69,0,78,0,
248084,0,1,75,1,
24811,2,0,1,2309,
2482312,18,1,2309,313,
248320,314,4,26,83,
24840,116,0,97,0,
2485116,0,101,0,109,
24860,101,0,110,0,
2487116,0,76,0,105,
24880,115,0,116,0,
24891,108,1,2,2,
24900,1,2384,315,18,
24911,2384,316,20,317,
24924,24,76,0,73,
24930,83,0,84,0,
249469,0,78,0,95,
24950,69,0,86,0,
249669,0,78,0,84,
24970,1,73,1,1,
24982,0,1,157,318,
249918,1,157,168,2,
25000,1,2386,319,18,
25011,2386,320,20,321,
25024,52,76,0,65,
25030,78,0,68,0,
250495,0,67,0,79,
25050,76,0,76,0,
250673,0,83,0,73,
25070,79,0,78,0,
250895,0,83,0,84,
25090,65,0,82,0,
251084,0,95,0,69,
25110,86,0,69,0,
251278,0,84,0,1,
251371,1,1,2,0,
25141,1773,322,18,1,
25151773,146,2,0,1,
25162388,323,18,1,2388,
2517324,20,325,4,40,
251876,0,65,0,78,
25190,68,0,95,0,
252067,0,79,0,76,
25210,76,0,73,0,
252283,0,73,0,79,
25230,78,0,95,0,
252469,0,86,0,69,
25250,78,0,84,0,
25261,69,1,1,2,
25270,1,1832,326,18,
25281,1832,254,2,0,
25291,1833,327,18,1,
25301833,328,20,329,4,
253110,87,0,72,0,
253273,0,76,0,69,
25330,1,45,1,1,
25342,0,1,1834,330,
253518,1,1834,135,2,
25360,1,2392,331,18,
25371,2392,332,20,333,
25384,26,67,0,79,
25390,78,0,84,0,
254082,0,79,0,76,
25410,95,0,69,0,
254286,0,69,0,78,
25430,84,0,1,65,
25441,1,2,0,1,
25452393,334,18,1,2393,
2546335,20,336,4,42,
254767,0,79,0,76,
25480,76,0,73,0,
254983,0,73,0,79,
25500,78,0,95,0,
255183,0,84,0,65,
25520,82,0,84,0,
255395,0,69,0,86,
25540,69,0,78,0,
255584,0,1,64,1,
25561,2,0,1,166,
2557337,18,1,166,338,
255820,339,4,20,76,
25590,69,0,70,0,
256084,0,95,0,65,
25610,78,0,71,0,
256276,0,69,0,1,
256325,1,1,2,0,
25641,2395,340,18,1,
25652395,341,20,342,4,
256630,67,0,79,0,
256776,0,76,0,73,
25680,83,0,73,0,
256979,0,78,0,95,
25700,69,0,86,0,
257169,0,78,0,84,
25720,1,62,1,1,
25732,0,1,2396,343,
257418,1,2396,344,20,
2575345,4,26,67,0,
257672,0,65,0,78,
25770,71,0,69,0,
257868,0,95,0,69,
25790,86,0,69,0,
258078,0,84,0,1,
258161,1,1,2,0,
25821,1840,346,18,1,
25831840,168,2,0,1,
25842398,347,18,1,2398,
2585348,20,349,4,30,
258665,0,84,0,95,
25870,84,0,65,0,
258882,0,71,0,69,
25890,84,0,95,0,
259069,0,86,0,69,
25910,78,0,84,0,
25921,59,1,1,2,
25930,1,2399,350,18,
25941,2399,351,20,352,
25954,38,65,0,84,
25960,95,0,82,0,
259779,0,84,0,95,
25980,84,0,65,0,
259982,0,71,0,69,
26000,84,0,95,0,
260169,0,86,0,69,
26020,78,0,84,0,
26031,58,1,1,2,
26040,1,172,353,18,
26051,172,168,2,0,
26061,2401,354,18,1,
26072401,135,2,0,1,
26082605,355,18,1,2605,
2609356,20,357,4,48,
261071,0,108,0,111,
26110,98,0,97,0,
2612108,0,70,0,117,
26130,110,0,99,0,
2614116,0,105,0,111,
26150,110,0,68,0,
2616101,0,102,0,105,
26170,110,0,105,0,
2618116,0,105,0,111,
26190,110,0,1,98,
26201,2,2,0,1,
26211296,358,18,1,1296,
2622160,2,0,1,1297,
2623359,18,1,1297,360,
262420,361,4,12,69,
26250,81,0,85,0,
262665,0,76,0,83,
26270,1,15,1,1,
26282,0,1,2412,362,
262918,1,2412,153,2,
26300,1,2414,363,18,
26311,2414,223,2,0,
26321,1859,364,18,1,
26331859,153,2,0,1,
26341860,365,18,1,1860,
2635190,2,0,1,188,
2636366,18,1,188,168,
26372,0,1,182,367,
263818,1,182,368,20,
2639369,4,22,82,0,
264073,0,71,0,72,
26410,84,0,95,0,
264265,0,78,0,71,
26430,76,0,69,0,
26441,26,1,1,2,
26450,1,199,370,18,
26461,199,371,20,372,
26474,10,67,0,65,
26480,82,0,69,0,
264984,0,1,35,1,
26501,2,0,1,1871,
2651373,18,1,1871,160,
26522,0,1,1872,374,
265318,1,1872,153,2,
26540,1,1873,375,18,
26551,1873,190,2,0,
26561,1875,376,18,1,
26571875,328,2,0,1,
2658205,377,18,1,205,
2659168,2,0,1,1882,
2660378,18,1,1882,168,
26612,0,1,2365,379,
266218,1,2365,132,2,
26630,1,2368,380,18,
26641,2368,381,20,382,
26654,30,84,0,79,
26660,85,0,67,0,
266772,0,95,0,69,
26680,78,0,68,0,
266995,0,69,0,86,
26700,69,0,78,0,
267184,0,1,90,1,
26721,2,0,1,217,
2673383,18,1,217,384,
267420,385,4,12,83,
26750,84,0,82,0,
267679,0,75,0,69,
26770,1,34,1,1,
26782,0,1,1332,386,
267918,1,1332,160,2,
26800,1,2371,387,18,
26811,2371,388,20,389,
26824,32,83,0,84,
26830,65,0,84,0,
268469,0,95,0,69,
26850,88,0,73,0,
268684,0,95,0,69,
26870,86,0,69,0,
268878,0,84,0,1,
268986,1,1,2,0,
26901,1335,390,18,1,
26911335,163,2,0,1,
26922374,391,18,1,2374,
2693392,20,393,4,52,
269482,0,85,0,78,
26950,95,0,84,0,
269673,0,77,0,69,
26970,95,0,80,0,
269869,0,82,0,77,
26990,73,0,83,0,
270083,0,73,0,79,
27010,78,0,83,0,
270295,0,69,0,86,
27030,69,0,78,0,
270484,0,1,83,1,
27051,2,0,1,223,
2706394,18,1,223,168,
27072,0,1,2452,395,
270818,1,2452,257,2,
27090,1,2453,396,18,
27101,2453,397,20,398,
27114,20,83,0,116,
27120,97,0,116,0,
2713101,0,69,0,118,
27140,101,0,110,0,
2715116,0,1,102,1,
27162,2,0,1,2454,
2717399,18,1,2454,400,
271820,401,4,26,68,
27190,69,0,70,0,
272065,0,85,0,76,
27210,84,0,95,0,
272283,0,84,0,65,
27230,84,0,69,0,
27241,47,1,1,2,
27250,1,1341,402,18,
27261,1341,168,2,0,
27271,2381,403,18,1,
27282381,404,20,405,4,
272936,77,0,79,0,
273086,0,73,0,78,
27310,71,0,95,0,
273283,0,84,0,65,
27330,82,0,84,0,
273495,0,69,0,86,
27350,69,0,78,0,
273684,0,1,76,1,
27371,2,0,1,1901,
2738406,18,1,1901,153,
27392,0,1,1303,407,
274018,1,1303,168,2,
27410,1,2385,408,18,
27421,2385,409,20,410,
27434,36,76,0,73,
27440,78,0,75,0,
274595,0,77,0,69,
27460,83,0,83,0,
274765,0,71,0,69,
27480,95,0,69,0,
274986,0,69,0,78,
27500,84,0,1,72,
27511,1,2,0,1,
27522387,411,18,1,2387,
2753412,20,413,4,48,
275476,0,65,0,78,
27550,68,0,95,0,
275667,0,79,0,76,
27570,76,0,73,0,
275883,0,73,0,79,
27590,78,0,95,0,
276069,0,78,0,68,
27610,95,0,69,0,
276286,0,69,0,78,
27630,84,0,1,70,
27641,1,2,0,1,
2765236,414,18,1,236,
2766415,20,416,4,6,
276765,0,77,0,80,
27680,1,33,1,1,
27692,0,1,2389,417,
277018,1,2389,418,20,
2771419,4,38,72,0,
277284,0,84,0,80,
27730,95,0,82,0,
277469,0,83,0,80,
27750,79,0,78,0,
277683,0,69,0,95,
27770,69,0,86,0,
277869,0,78,0,84,
27790,1,68,1,1,
27802,0,1,2390,420,
278118,1,2390,421,20,
2782422,4,22,69,0,
278377,0,65,0,73,
27840,76,0,95,0,
278569,0,86,0,69,
27860,78,0,84,0,
27871,67,1,1,2,
27880,1,2391,423,18,
27891,2391,424,20,425,
27904,32,68,0,65,
27910,84,0,65,0,
279283,0,69,0,82,
27930,86,0,69,0,
279482,0,95,0,69,
27950,86,0,69,0,
279678,0,84,0,1,
279766,1,1,2,0,
27981,242,426,18,1,
2799242,168,2,0,1,
28002397,427,18,1,2397,
2801428,20,429,4,24,
280265,0,84,0,84,
28030,65,0,67,0,
280472,0,95,0,69,
28050,86,0,69,0,
280678,0,84,0,1,
280760,1,1,2,0,
28081,2400,430,18,1,
28092400,431,20,432,4,
281010,69,0,118,0,
2811101,0,110,0,116,
28120,1,106,1,2,
28132,0,1,256,433,
281418,1,256,434,20,
2815435,4,14,80,0,
281669,0,82,0,67,
28170,69,0,78,0,
281884,0,1,22,1,
28191,2,0,1,1371,
2820436,18,1,1371,211,
28212,0,1,2410,437,
282218,1,2410,140,2,
28230,1,1931,438,18,
28241,1931,254,2,0,
28251,1932,439,18,1,
28261932,440,20,441,4,
28274,73,0,70,0,
28281,42,1,1,2,
28290,1,262,442,18,
28301,262,168,2,0,
28311,1377,443,18,1,
28321377,168,2,0,1,
28331876,444,18,1,1876,
2834135,2,0,1,1939,
2835445,18,1,1939,168,
28362,0,1,827,446,
283718,1,827,168,2,
28380,1,277,447,18,
28391,277,448,20,449,
28404,10,83,0,76,
28410,65,0,83,0,
284272,0,1,21,1,
28431,2,0,1,2358,
2844450,18,1,2358,254,
28452,0,1,283,451,
284618,1,283,168,2,
28470,1,1958,452,18,
28481,1958,153,2,0,
28491,1406,453,18,1,
28501406,160,2,0,1,
28511407,454,18,1,1407,
2852205,2,0,1,2526,
2853455,18,1,2526,257,
28542,0,1,299,456,
285518,1,299,457,20,
2856458,4,8,83,0,
285784,0,65,0,82,
28580,1,20,1,1,
28592,0,1,1370,459,
286018,1,1370,160,2,
28610,1,2451,460,18,
28621,2451,397,2,0,
28631,2379,461,18,1,
28642379,462,20,463,4,
286546,78,0,79,0,
286684,0,95,0,65,
28670,84,0,95,0,
286882,0,79,0,84,
28690,95,0,84,0,
287065,0,82,0,71,
28710,69,0,84,0,
287295,0,69,0,86,
28730,69,0,78,0,
287484,0,1,78,1,
28751,2,0,1,2532,
2876464,18,1,2532,465,
287720,466,4,10,83,
28780,116,0,97,0,
2879116,0,101,0,1,
2880100,1,2,2,0,
28811,305,467,18,1,
2882305,168,2,0,1,
28832534,468,18,1,2534,
2884135,2,0,1,2383,
2885469,18,1,2383,470,
288620,471,4,22,77,
28870,79,0,78,0,
288869,0,89,0,95,
28890,69,0,86,0,
289069,0,78,0,84,
28910,1,74,1,1,
28922,0,1,2528,472,
289318,1,2528,473,20,
2894474,4,12,83,0,
2895116,0,97,0,116,
28960,101,0,115,0,
28971,99,1,2,2,
28980,1,2543,475,18,
28991,2543,140,2,0,
29001,2545,476,18,1,
29012545,153,2,0,1,
29021989,477,18,1,1989,
2903254,2,0,1,1990,
2904478,18,1,1990,479,
290520,480,4,8,69,
29060,76,0,83,0,
290769,0,1,43,1,
29081,2,0,1,2607,
2909481,18,1,2607,356,
29102,0,1,2549,482,
291118,1,2549,150,2,
29120,1,322,483,18,
29131,322,226,2,0,
29141,1933,484,18,1,
29151933,135,2,0,1,
2916883,485,18,1,883,
2917168,2,0,1,328,
2918486,18,1,328,168,
29192,0,1,1443,487,
292018,1,1443,240,2,
29210,1,1449,488,18,
29221,1449,168,2,0,
29231,2490,489,18,1,
29242490,490,20,491,4,
292518,83,0,116,0,
292697,0,116,0,101,
29270,66,0,111,0,
2928100,0,121,0,1,
2929101,1,2,2,0,
29301,2416,492,18,1,
29312416,490,2,0,1,
29321413,493,18,1,1413,
2933168,2,0,1,346,
2934494,18,1,346,495,
293520,496,4,8,80,
29360,76,0,85,0,
293783,0,1,18,1,
29381,2,0,1,2575,
2939497,18,1,2575,190,
29402,0,1,2021,498,
294118,1,2021,254,2,
29420,1,2022,499,18,
29431,2022,268,2,0,
29441,352,500,18,1,
2945352,168,2,0,1,
29462024,501,18,1,2024,
2947132,2,0,1,2025,
2948502,18,1,2025,503,
294920,504,4,8,74,
29500,85,0,77,0,
295180,0,1,49,1,
29521,2,0,1,2026,
2953505,18,1,2026,132,
29542,0,1,2027,506,
295518,1,2027,507,20,
2956508,4,4,65,0,
295784,0,1,23,1,
29581,2,0,1,2028,
2959509,18,1,2028,132,
29602,0,1,2029,510,
296118,1,2029,223,2,
29620,1,2030,511,18,
29631,2030,512,20,513,
29644,14,70,0,111,
29650,114,0,76,0,
2966111,0,111,0,112,
29670,1,119,1,2,
29682,0,1,2031,514,
296918,1,2031,515,20,
2970516,4,32,68,0,
2971111,0,87,0,104,
29720,105,0,108,0,
2973101,0,83,0,116,
29740,97,0,116,0,
2975101,0,109,0,101,
29760,110,0,116,0,
29771,118,1,2,2,
29780,1,2032,517,18,
29791,2032,518,20,519,
29804,28,87,0,104,
29810,105,0,108,0,
2982101,0,83,0,116,
29830,97,0,116,0,
2984101,0,109,0,101,
29850,110,0,116,0,
29861,117,1,2,2,
29870,1,2033,520,18,
29881,2033,521,20,522,
29894,22,73,0,102,
29900,83,0,116,0,
299197,0,116,0,101,
29920,109,0,101,0,
2993110,0,116,0,1,
2994116,1,2,2,0,
29951,2034,523,18,1,
29962034,524,20,525,4,
299722,83,0,116,0,
299897,0,116,0,101,
29990,67,0,104,0,
300097,0,110,0,103,
30010,101,0,1,115,
30021,2,2,0,1,
30031478,526,18,1,1478,
3004160,2,0,1,1479,
3005527,18,1,1479,291,
30062,0,1,2037,528,
300718,1,2037,190,2,
30080,1,2038,529,18,
30091,2038,530,20,531,
30104,18,74,0,117,
30110,109,0,112,0,
301276,0,97,0,98,
30130,101,0,108,0,
30141,113,1,2,2,
30150,1,2039,532,18,
30161,2039,190,2,0,
30171,2040,533,18,1,
30182040,534,20,535,4,
301930,82,0,101,0,
3020116,0,117,0,114,
30210,110,0,83,0,
3022116,0,97,0,116,
30230,101,0,109,0,
3024101,0,110,0,116,
30250,1,112,1,2,
30262,0,1,2041,536,
302718,1,2041,190,2,
30280,1,1485,537,18,
30291,1485,168,2,0,
30301,372,538,18,1,
3031372,180,2,0,1,
3032373,539,18,1,373,
3033132,2,0,1,374,
3034540,18,1,374,176,
30352,0,1,375,541,
303618,1,375,132,2,
30370,1,376,542,18,
30381,376,183,2,0,
30391,377,543,18,1,
3040377,132,2,0,1,
3041378,544,18,1,378,
3042176,2,0,1,379,
3043545,18,1,379,132,
30442,0,1,380,546,
304518,1,380,547,20,
3046548,4,16,67,0,
3047111,0,110,0,115,
30480,116,0,97,0,
3049110,0,116,0,1,
3050125,1,2,2,0,
30511,381,549,18,1,
3052381,338,2,0,1,
30532610,550,18,1,2610,
3054551,23,552,4,6,
305569,0,79,0,70,
30560,1,2,1,6,
30572,0,1,2455,553,
305818,1,2455,156,2,
30590,1,371,554,18,
30601,371,555,20,556,
30614,24,70,0,117,
30620,110,0,99,0,
3063116,0,105,0,111,
30640,110,0,67,0,
306597,0,108,0,108,
30660,1,121,1,2,
30672,0,1,942,557,
306818,1,942,168,2,
30690,1,2533,558,18,
30701,2533,132,2,0,
30711,387,559,18,1,
3072387,168,2,0,1,
30732394,560,18,1,2394,
3074561,20,562,4,38,
307567,0,79,0,76,
30760,76,0,73,0,
307783,0,73,0,79,
30780,78,0,95,0,
307969,0,78,0,68,
30800,95,0,69,0,
308186,0,69,0,78,
30820,84,0,1,63,
30831,1,2,0,1,
30841514,563,18,1,1514,
3085160,2,0,1,1515,
3086564,18,1,1515,360,
30872,0,1,2073,565,
308818,1,2073,160,2,
30890,1,2074,566,18,
30901,2074,153,2,0,
30911,406,567,18,1,
3092406,143,2,0,1,
30931521,568,18,1,1521,
3094168,2,0,1,2556,
3095569,18,1,2556,168,
30962,0,1,412,570,
309718,1,412,168,2,
30980,1,2023,571,18,
30991,2023,400,2,0,
31001,1442,572,18,1,
31011442,160,2,0,1,
31022035,573,18,1,2035,
3103190,2,0,1,2036,
3104574,18,1,2036,575,
310520,576,4,26,74,
31060,117,0,109,0,
3107112,0,83,0,116,
31080,97,0,116,0,
3109101,0,109,0,101,
31100,110,0,116,0,
31111,114,1,2,2,
31120,1,431,577,18,
31131,431,143,2,0,
31141,2104,578,18,1,
31152104,254,2,0,1,
31162105,579,18,1,2105,
3117479,2,0,1,1550,
3118580,18,1,1550,160,
31192,0,1,437,581,
312018,1,437,168,2,
31210,1,2044,582,18,
31221,2044,190,2,0,
31231,2586,583,18,1,
31242586,190,2,0,1,
31251555,584,18,1,1555,
3126168,2,0,1,1001,
3127585,18,1,1001,555,
31282,0,1,1002,586,
312918,1,1002,547,2,
31300,1,447,587,18,
31311,447,368,2,0,
31321,2375,588,18,1,
31332375,589,20,590,4,
313434,82,0,69,0,
313577,0,79,0,84,
31360,69,0,95,0,
313768,0,65,0,84,
31380,65,0,95,0,
313969,0,86,0,69,
31400,78,0,84,0,
31411,82,1,1,2,
31420,1,1010,591,18,
31431,1010,160,2,0,
31441,1011,592,18,1,
31451011,153,2,0,1,
31461012,593,18,1,1012,
3147168,2,0,1,1013,
3148594,18,1,1013,153,
31492,0,1,459,595,
315018,1,459,596,20,
3151597,4,24,76,0,
315269,0,70,0,84,
31530,95,0,66,0,
315482,0,65,0,67,
31550,75,0,69,0,
315684,0,1,27,1,
31571,2,0,1,1574,
3158598,18,1,1574,190,
31592,0,1,461,599,
316018,1,461,600,20,
3161601,4,24,65,0,
3162114,0,103,0,117,
31630,109,0,101,0,
3164110,0,116,0,76,
31650,105,0,115,0,
3166116,0,1,122,1,
31672,2,0,1,462,
3168602,18,1,462,143,
31692,0,1,2608,603,
317018,1,2608,604,20,
3171605,4,50,71,0,
3172108,0,111,0,98,
31730,97,0,108,0,
317486,0,97,0,114,
31750,105,0,97,0,
317698,0,108,0,101,
31770,68,0,101,0,
317899,0,108,0,97,
31790,114,0,97,0,
3180116,0,105,0,111,
31810,110,0,1,97,
31821,2,2,0,1,
3183464,606,18,1,464,
3184607,20,608,4,16,
318565,0,114,0,103,
31860,117,0,109,0,
3187101,0,110,0,116,
31880,1,123,1,2,
31892,0,1,2531,609,
319018,1,2531,465,2,
31910,1,1585,610,18,
31921,1585,611,20,612,
31934,12,82,0,69,
31940,84,0,85,0,
319582,0,78,0,1,
319650,1,1,2,0,
31971,476,613,18,1,
3198476,614,20,615,4,
319930,83,0,84,0,
320082,0,73,0,78,
32010,71,0,95,0,
320267,0,79,0,78,
32030,83,0,84,0,
320465,0,78,0,84,
32050,1,3,1,1,
32062,0,1,477,616,
320718,1,477,617,20,
3208618,4,28,70,0,
320976,0,79,0,65,
32100,84,0,95,0,
321167,0,79,0,78,
32120,83,0,84,0,
321365,0,78,0,84,
32140,1,94,1,1,
32152,0,1,478,619,
321618,1,478,620,20,
3217621,4,40,72,0,
321869,0,88,0,95,
32190,73,0,78,0,
322084,0,69,0,71,
32210,69,0,82,0,
322295,0,67,0,79,
32230,78,0,83,0,
322484,0,65,0,78,
32250,84,0,1,93,
32261,1,2,0,1,
3227479,622,18,1,479,
3228623,20,624,4,32,
322973,0,78,0,84,
32300,69,0,71,0,
323169,0,82,0,95,
32320,67,0,79,0,
323378,0,83,0,84,
32340,65,0,78,0,
323584,0,1,92,1,
32361,2,0,1,480,
3237625,18,1,480,626,
323820,627,4,26,82,
32390,73,0,71,0,
324072,0,84,0,95,
32410,66,0,82,0,
324265,0,67,0,75,
32430,69,0,84,0,
32441,28,1,1,2,
32450,1,481,628,18,
32461,481,607,2,0,
32471,2550,629,18,1,
32482550,360,2,0,1,
32492606,630,18,1,2606,
3250604,2,0,1,1048,
3251631,18,1,1048,168,
32522,0,1,2042,632,
325318,1,2042,633,20,
3254634,4,20,65,0,
3255115,0,115,0,105,
32560,103,0,110,0,
3257109,0,101,0,110,
32580,116,0,1,110,
32591,2,2,0,1,
32602043,635,18,1,2043,
3261190,2,0,1,1620,
3262636,18,1,1620,160,
32632,0,1,1621,637,
326418,1,1621,150,2,
32650,1,1622,638,18,
32661,1622,360,2,0,
32671,509,639,18,1,
3268509,143,2,0,1,
32691628,640,18,1,1628,
3270168,2,0,1,515,
3271641,18,1,515,168,
32722,0,1,2369,642,
327318,1,2369,643,20,
3274644,4,22,84,0,
327579,0,85,0,67,
32760,72,0,95,0,
327769,0,86,0,69,
32780,78,0,84,0,
32791,88,1,1,2,
32800,1,2587,645,18,
32811,2587,646,20,647,
32824,34,71,0,108,
32830,111,0,98,0,
328497,0,108,0,68,
32850,101,0,102,0,
3286105,0,110,0,105,
32870,116,0,105,0,
3288111,0,110,0,115,
32890,1,96,1,2,
32902,0,1,525,648,
329118,1,525,368,2,
32920,1,2197,649,18,
32931,2197,153,2,0,
32941,1591,650,18,1,
32951591,168,2,0,1,
32962135,651,18,1,2135,
3297254,2,0,1,2598,
3298652,18,1,2598,473,
32992,0,1,1094,653,
330018,1,1094,600,2,
33010,1,1096,654,18,
33021,1096,153,2,0,
33031,1657,655,18,1,
33041657,190,2,0,1,
33051658,656,18,1,1658,
3306657,20,658,4,6,
330770,0,79,0,82,
33080,1,46,1,1,
33092,0,1,1659,659,
331018,1,1659,135,2,
33110,1,2609,104,1,
33121665,660,18,1,1665,
3313168,2,0,1,2226,
3314661,18,1,2226,254,
33152,0,1,1113,662,
331618,1,1113,176,2,
33170,663,5,0,664,
33185,319,1,2,665,
331919,552,1,2,666,
33205,6,1,2531,667,
332117,668,15,669,4,
332214,37,0,83,0,
3323116,0,97,0,116,
33240,101,0,115,0,
33251,-1,1,5,670,
332620,671,4,16,83,
33270,116,0,97,0,
3328116,0,101,0,115,
33290,95,0,50,0,
33301,151,1,3,1,
33313,1,2,672,22,
33321,12,1,2532,673,
333317,674,15,669,1,
3334-1,1,5,675,20,
3335676,4,16,83,0,
3336116,0,97,0,116,
33370,101,0,115,0,
333895,0,49,0,1,
3339150,1,3,1,2,
33401,1,677,22,1,
334111,1,2598,678,17,
3342679,15,680,4,30,
334337,0,76,0,83,
33440,76,0,80,0,
3345114,0,111,0,103,
33460,114,0,97,0,
3347109,0,82,0,111,
33480,111,0,116,0,
33491,-1,1,5,681,
335020,682,4,32,76,
33510,83,0,76,0,
335280,0,114,0,111,
33530,103,0,114,0,
335497,0,109,0,82,
33550,111,0,111,0,
3356116,0,95,0,49,
33570,1,140,1,3,
33581,3,1,2,683,
335922,1,1,1,2526,
3360684,17,685,15,686,
33614,12,37,0,83,
33620,116,0,97,0,
3363116,0,101,0,1,
3364-1,1,5,687,20,
3365688,4,14,83,0,
3366116,0,97,0,116,
33670,101,0,95,0,
336849,0,1,152,1,
33693,1,5,1,4,
3370689,22,1,13,1,
33712528,690,17,691,15,
3372680,1,-1,1,5,
3373692,20,693,4,32,
337476,0,83,0,76,
33750,80,0,114,0,
3376111,0,103,0,114,
33770,97,0,109,0,
337882,0,111,0,111,
33790,116,0,95,0,
338050,0,1,141,1,
33813,1,2,1,1,
3382694,22,1,2,1,
33832452,695,17,696,15,
3384686,1,-1,1,5,
3385697,20,698,4,14,
338683,0,116,0,97,
33870,116,0,101,0,
338895,0,50,0,1,
3389153,1,3,1,6,
33901,5,699,22,1,
339114,1,3,700,19,
3392615,1,3,701,5,
339391,1,256,702,16,
33940,613,1,1261,703,
339516,0,613,1,509,
3396704,16,0,613,1,
33972197,705,16,0,613,
33981,1515,706,16,0,
3399613,1,2021,707,17,
3400708,15,709,4,24,
340137,0,73,0,102,
34020,83,0,116,0,
340397,0,116,0,101,
34040,109,0,101,0,
3405110,0,116,0,1,
3406-1,1,5,710,20,
3407711,4,26,73,0,
3408102,0,83,0,116,
34090,97,0,116,0,
3410101,0,109,0,101,
34110,110,0,116,0,
341295,0,50,0,1,
3413181,1,3,1,8,
34141,7,712,22,1,
341544,1,1775,713,16,
34160,613,1,2029,714,
341717,715,15,716,4,
341820,37,0,83,0,
3419116,0,97,0,116,
34200,101,0,109,0,
3421101,0,110,0,116,
34220,1,-1,1,5,
3423717,20,718,4,24,
342483,0,116,0,97,
34250,116,0,101,0,
3426109,0,101,0,110,
34270,116,0,95,0,
342849,0,50,0,1,
3429175,1,3,1,2,
34301,1,719,22,1,
343138,1,2030,720,17,
3432721,15,716,1,-1,
34331,5,722,20,723,
34344,24,83,0,116,
34350,97,0,116,0,
3436101,0,109,0,101,
34370,110,0,116,0,
343895,0,49,0,49,
34390,1,174,1,3,
34401,2,1,1,724,
344122,1,37,1,2031,
3442725,17,726,15,716,
34431,-1,1,5,727,
344420,728,4,24,83,
34450,116,0,97,0,
3446116,0,101,0,109,
34470,101,0,110,0,
3448116,0,95,0,49,
34490,48,0,1,173,
34501,3,1,2,1,
34511,729,22,1,36,
34521,2032,730,17,731,
345315,716,1,-1,1,
34545,732,20,733,4,
345522,83,0,116,0,
345697,0,116,0,101,
34570,109,0,101,0,
3458110,0,116,0,95,
34590,57,0,1,172,
34601,3,1,2,1,
34611,734,22,1,35,
34621,2033,735,17,736,
346315,716,1,-1,1,
34645,737,20,738,4,
346522,83,0,116,0,
346697,0,116,0,101,
34670,109,0,101,0,
3468110,0,116,0,95,
34690,56,0,1,171,
34701,3,1,2,1,
34711,739,22,1,34,
34721,277,740,16,0,
3473613,1,2035,741,17,
3474742,15,716,1,-1,
34751,5,743,20,744,
34764,22,83,0,116,
34770,97,0,116,0,
3478101,0,109,0,101,
34790,110,0,116,0,
348095,0,55,0,1,
3481170,1,3,1,3,
34821,2,745,22,1,
348333,1,2037,746,17,
3484747,15,716,1,-1,
34851,5,748,20,749,
34864,22,83,0,116,
34870,97,0,116,0,
3488101,0,109,0,101,
34890,110,0,116,0,
349095,0,54,0,1,
3491169,1,3,1,3,
34921,2,750,22,1,
349332,1,2039,751,17,
3494752,15,716,1,-1,
34951,5,753,20,754,
34964,22,83,0,116,
34970,97,0,116,0,
3498101,0,109,0,101,
34990,110,0,116,0,
350095,0,53,0,1,
3501168,1,3,1,3,
35021,2,755,22,1,
350331,1,32,756,16,
35040,613,1,2041,757,
350517,758,15,716,1,
3506-1,1,5,759,20,
3507760,4,22,83,0,
3508116,0,97,0,116,
35090,101,0,109,0,
3510101,0,110,0,116,
35110,95,0,52,0,
35121,167,1,3,1,
35133,1,2,761,22,
35141,30,1,2043,762,
351517,763,15,716,1,
3516-1,1,5,764,20,
3517765,4,22,83,0,
3518116,0,97,0,116,
35190,101,0,109,0,
3520101,0,110,0,116,
35210,95,0,50,0,
35221,165,1,3,1,
35233,1,2,766,22,
35241,28,1,2044,767,
352517,768,15,716,1,
3526-1,1,5,254,1,
35271,1,1,769,22,
35281,26,1,2550,770,
352916,0,613,1,41,
3530771,16,0,613,1,
35311297,772,16,0,613,
35321,43,773,16,0,
3533613,1,1802,774,17,
3534775,15,776,4,16,
353537,0,70,0,111,
35360,114,0,76,0,
3537111,0,111,0,112,
35380,1,-1,1,5,
3539777,20,778,4,18,
354070,0,111,0,114,
35410,76,0,111,0,
3542111,0,112,0,95,
35430,49,0,1,188,
35441,3,1,10,1,
35459,779,22,1,51,
35461,1804,780,16,0,
3547613,1,299,781,16,
35480,613,1,2309,782,
354916,0,613,1,52,
3550783,16,0,613,1,
3551525,784,16,0,613,
35521,62,785,16,0,
3553613,1,2074,786,16,
35540,613,1,1574,787,
355517,788,15,716,1,
3556-1,1,5,789,20,
3557790,4,22,83,0,
3558116,0,97,0,116,
35590,101,0,109,0,
3560101,0,110,0,116,
35610,95,0,51,0,
35621,166,1,3,1,
35633,1,2,791,22,
35641,29,1,71,792,
356516,0,613,1,76,
3566793,16,0,613,1,
35671834,794,16,0,613,
35681,1585,795,16,0,
3569613,1,1335,796,16,
35700,613,1,79,797,
357116,0,613,1,85,
3572798,16,0,613,1,
357389,799,16,0,613,
35741,346,800,16,0,
3575613,1,2104,801,17,
3576802,15,709,1,-1,
35771,5,803,20,804,
35784,26,73,0,102,
35790,83,0,116,0,
358097,0,116,0,101,
35810,109,0,101,0,
3582110,0,116,0,95,
35830,51,0,1,182,
35841,3,1,6,1,
35855,805,22,1,45,
35861,2105,806,16,0,
3587613,1,2358,807,17,
3588808,15,809,4,28,
358937,0,83,0,116,
35900,97,0,116,0,
3591101,0,109,0,101,
35920,110,0,116,0,
359376,0,105,0,115,
35940,116,0,1,-1,
35951,5,810,20,811,
35964,30,83,0,116,
35970,97,0,116,0,
3598101,0,109,0,101,
35990,110,0,116,0,
360076,0,105,0,115,
36010,116,0,95,0,
360249,0,1,162,1,
36033,1,2,1,1,
3604812,22,1,24,1,
36052360,813,17,814,15,
3606815,4,36,37,0,
360767,0,111,0,109,
36080,112,0,111,0,
3609117,0,110,0,100,
36100,83,0,116,0,
361197,0,116,0,101,
36120,109,0,101,0,
3613110,0,116,0,1,
3614-1,1,5,816,20,
3615817,4,38,67,0,
3616111,0,109,0,112,
36170,111,0,117,0,
3618110,0,100,0,83,
36190,116,0,97,0,
3620116,0,101,0,109,
36210,101,0,110,0,
3622116,0,95,0,49,
36230,1,160,1,3,
36241,3,1,2,818,
362522,1,22,1,97,
3626819,16,0,613,1,
36271860,820,17,821,15,
3628822,4,34,37,0,
362968,0,111,0,87,
36300,104,0,105,0,
3631108,0,101,0,83,
36320,116,0,97,0,
3633116,0,101,0,109,
36340,101,0,110,0,
3635116,0,1,-1,1,
36365,823,20,824,4,
363736,68,0,111,0,
363887,0,104,0,105,
36390,108,0,101,0,
364083,0,116,0,97,
36410,116,0,101,0,
3642109,0,101,0,110,
36430,116,0,95,0,
364449,0,1,186,1,
36453,1,8,1,7,
3646825,22,1,49,1,
3647102,826,16,0,613,
36481,112,827,16,0,
3649613,1,1117,828,16,
36500,613,1,1873,829,
365117,830,15,822,1,
3652-1,1,5,831,20,
3653832,4,36,68,0,
3654111,0,87,0,104,
36550,105,0,108,0,
3656101,0,83,0,116,
36570,97,0,116,0,
3658101,0,109,0,101,
36590,110,0,116,0,
366095,0,50,0,1,
3661187,1,3,1,8,
36621,7,833,22,1,
366350,1,1876,834,16,
36640,613,1,124,835,
366516,0,613,1,2135,
3666836,17,837,15,709,
36671,-1,1,5,838,
366820,839,4,26,73,
36690,102,0,83,0,
3670116,0,97,0,116,
36710,101,0,109,0,
3672101,0,110,0,116,
36730,95,0,52,0,
36741,183,1,3,1,
36758,1,7,840,22,
36761,46,1,381,841,
367716,0,613,1,322,
3678842,16,0,613,1,
3679137,843,16,0,613,
36801,1901,844,16,0,
3681613,1,1153,845,16,
36820,613,1,151,846,
368316,0,613,1,1407,
3684847,16,0,613,1,
36851659,848,16,0,613,
36861,406,849,16,0,
3687613,1,1371,850,16,
36880,613,1,166,851,
368916,0,613,1,1622,
3690852,16,0,613,1,
36912354,853,17,854,15,
3692809,1,-1,1,5,
3693855,20,856,4,30,
369483,0,116,0,97,
36950,116,0,101,0,
3696109,0,101,0,110,
36970,116,0,76,0,
3698105,0,115,0,116,
36990,95,0,50,0,
37001,163,1,3,1,
37013,1,2,857,22,
37021,25,1,2355,858,
370317,859,15,815,1,
3704-1,1,5,860,20,
3705861,4,38,67,0,
3706111,0,109,0,112,
37070,111,0,117,0,
3708110,0,100,0,83,
37090,116,0,97,0,
3710116,0,101,0,109,
37110,101,0,110,0,
3712116,0,95,0,50,
37130,1,161,1,3,
37141,4,1,3,862,
371522,1,23,1,1931,
3716863,17,864,15,865,
37174,30,37,0,87,
37180,104,0,105,0,
3719108,0,101,0,83,
37200,116,0,97,0,
3721116,0,101,0,109,
37220,101,0,110,0,
3723116,0,1,-1,1,
37245,866,20,867,4,
372532,87,0,104,0,
3726105,0,108,0,101,
37270,83,0,116,0,
372897,0,116,0,101,
37290,109,0,101,0,
3730110,0,116,0,95,
37310,49,0,1,184,
37321,3,1,6,1,
37335,868,22,1,47,
37341,1933,869,16,0,
3735613,1,431,870,16,
37360,613,1,182,871,
373716,0,613,1,1189,
3738872,16,0,613,1,
37391443,873,16,0,613,
37401,1695,874,16,0,
3741613,1,447,875,16,
37420,613,1,199,876,
374316,0,613,1,1958,
3744877,16,0,613,1,
37451657,878,17,879,15,
3746716,1,-1,1,5,
3747880,20,881,4,22,
374883,0,116,0,97,
37490,116,0,101,0,
3750109,0,101,0,110,
37510,116,0,95,0,
375249,0,1,164,1,
37533,1,3,1,2,
3754882,22,1,27,1,
3755459,883,16,0,613,
37561,462,884,16,0,
3757613,1,217,885,16,
37580,613,1,2226,886,
375917,887,15,865,1,
3760-1,1,5,888,20,
3761889,4,32,87,0,
3762104,0,105,0,108,
37630,101,0,83,0,
3764116,0,97,0,116,
37650,101,0,109,0,
3766101,0,110,0,116,
37670,95,0,50,0,
37681,185,1,3,1,
37696,1,5,890,22,
37701,48,1,1225,891,
377116,0,613,1,1479,
3772892,16,0,613,1,
37731731,893,16,0,613,
37741,1989,894,17,895,
377515,709,1,-1,1,
37765,896,20,897,4,
377726,73,0,102,0,
377883,0,116,0,97,
37790,116,0,101,0,
3780109,0,101,0,110,
37810,116,0,95,0,
378249,0,1,180,1,
37833,1,6,1,5,
3784898,22,1,43,1,
37851990,899,16,0,613,
37861,236,900,16,0,
3787613,1,1756,901,16,
37880,613,1,4,902,
378919,184,1,4,903,
37905,96,1,256,904,
379116,0,542,1,1261,
3792905,16,0,542,1,
3793509,906,16,0,542,
37941,2197,907,16,0,
3795542,1,1515,908,16,
37960,542,1,2021,707,
37971,1775,909,16,0,
3798542,1,2029,714,1,
37992030,720,1,2031,725,
38001,2032,730,1,2033,
3801735,1,277,910,16,
38020,542,1,2035,741,
38031,2037,746,1,2039,
3804751,1,32,911,16,
38050,542,1,2041,757,
38061,2043,762,1,2044,
3807767,1,40,912,16,
38080,186,1,41,913,
380916,0,542,1,1297,
3810914,16,0,542,1,
381143,915,16,0,542,
38121,44,916,16,0,
3813186,1,1802,774,1,
38141804,917,16,0,542,
38151,299,918,16,0,
3816542,1,2309,919,16,
38170,542,1,52,920,
381816,0,542,1,47,
3819921,16,0,182,1,
3820525,922,16,0,542,
38211,63,923,16,0,
3822200,1,2074,924,16,
38230,542,1,1574,787,
38241,66,925,16,0,
3825198,1,71,926,16,
38260,542,1,76,927,
382716,0,542,1,1834,
3828928,16,0,542,1,
382979,929,16,0,542,
38301,1335,930,16,0,
3831542,1,322,931,16,
38320,542,1,85,932,
383316,0,542,1,89,
3834933,16,0,542,1,
3835346,934,16,0,542,
38361,2104,801,1,2105,
3837935,16,0,542,1,
38382358,807,1,2360,813,
38391,97,936,16,0,
3840542,1,1860,820,1,
3841102,937,16,0,542,
38421,1114,938,16,0,
3843182,1,112,939,16,
38440,542,1,1117,940,
384516,0,542,1,1873,
3846829,1,1876,941,16,
38470,542,1,2550,942,
384816,0,542,1,124,
3849943,16,0,542,1,
38502135,836,1,381,944,
385116,0,542,1,137,
3852945,16,0,542,1,
38531901,946,16,0,542,
38541,1153,947,16,0,
3855542,1,151,948,16,
38560,542,1,1407,949,
385716,0,542,1,1659,
3858950,16,0,542,1,
3859406,951,16,0,542,
38601,1371,952,16,0,
3861542,1,166,953,16,
38620,542,1,1622,954,
386316,0,542,1,2354,
3864853,1,2355,858,1,
38651931,863,1,1933,955,
386616,0,542,1,431,
3867956,16,0,542,1,
38681585,957,16,0,542,
38691,182,958,16,0,
3870542,1,1189,959,16,
38710,542,1,1443,960,
387216,0,542,1,1695,
3873961,16,0,542,1,
3874447,962,16,0,542,
38751,199,963,16,0,
3876542,1,1958,964,16,
38770,542,1,1657,878,
38781,459,965,16,0,
3879542,1,462,966,16,
38800,542,1,217,967,
388116,0,542,1,2226,
3882886,1,1225,968,16,
38830,542,1,1479,969,
388416,0,542,1,1731,
3885970,16,0,542,1,
38861989,894,1,1990,971,
388716,0,542,1,236,
3888972,16,0,542,1,
38891756,973,16,0,542,
38901,5,974,19,181,
38911,5,975,5,96,
38921,256,976,16,0,
3893538,1,1261,977,16,
38940,538,1,509,978,
389516,0,538,1,2197,
3896979,16,0,538,1,
38971515,980,16,0,538,
38981,2021,707,1,1775,
3899981,16,0,538,1,
39002029,714,1,2030,720,
39011,2031,725,1,2032,
3902730,1,2033,735,1,
3903277,982,16,0,538,
39041,2035,741,1,2037,
3905746,1,2039,751,1,
390632,983,16,0,538,
39071,2041,757,1,2043,
3908762,1,2044,767,1,
390940,984,16,0,185,
39101,41,985,16,0,
3911538,1,1297,986,16,
39120,538,1,43,987,
391316,0,538,1,44,
3914988,16,0,185,1,
39151802,774,1,1804,989,
391616,0,538,1,299,
3917990,16,0,538,1,
39182309,991,16,0,538,
39191,52,992,16,0,
3920538,1,47,993,16,
39210,179,1,525,994,
392216,0,538,1,63,
3923995,16,0,199,1,
39242074,996,16,0,538,
39251,1574,787,1,66,
3926997,16,0,197,1,
392771,998,16,0,538,
39281,76,999,16,0,
3929538,1,1834,1000,16,
39300,538,1,79,1001,
393116,0,538,1,1335,
39321002,16,0,538,1,
3933322,1003,16,0,538,
39341,85,1004,16,0,
3935538,1,89,1005,16,
39360,538,1,346,1006,
393716,0,538,1,2104,
3938801,1,2105,1007,16,
39390,538,1,2358,807,
39401,2360,813,1,97,
39411008,16,0,538,1,
39421860,820,1,102,1009,
394316,0,538,1,1114,
39441010,16,0,179,1,
3945112,1011,16,0,538,
39461,1117,1012,16,0,
3947538,1,1873,829,1,
39481876,1013,16,0,538,
39491,2550,1014,16,0,
3950538,1,124,1015,16,
39510,538,1,2135,836,
39521,381,1016,16,0,
3953538,1,137,1017,16,
39540,538,1,1901,1018,
395516,0,538,1,1153,
39561019,16,0,538,1,
3957151,1020,16,0,538,
39581,1407,1021,16,0,
3959538,1,1659,1022,16,
39600,538,1,406,1023,
396116,0,538,1,1371,
39621024,16,0,538,1,
3963166,1025,16,0,538,
39641,1622,1026,16,0,
3965538,1,2354,853,1,
39662355,858,1,1931,863,
39671,1933,1027,16,0,
3968538,1,431,1028,16,
39690,538,1,1585,1029,
397016,0,538,1,182,
39711030,16,0,538,1,
39721189,1031,16,0,538,
39731,1443,1032,16,0,
3974538,1,1695,1033,16,
39750,538,1,447,1034,
397616,0,538,1,199,
39771035,16,0,538,1,
39781958,1036,16,0,538,
39791,1657,878,1,459,
39801037,16,0,538,1,
3981462,1038,16,0,538,
39821,217,1039,16,0,
3983538,1,2226,886,1,
39841225,1040,16,0,538,
39851,1479,1041,16,0,
3986538,1,1731,1042,16,
39870,538,1,1989,894,
39881,1990,1043,16,0,
3989538,1,236,1044,16,
39900,538,1,1756,1045,
399116,0,538,1,6,
39921046,19,292,1,6,
39931047,5,2,1,1114,
39941048,16,0,290,1,
399540,1049,16,0,527,
39961,7,1050,19,241,
39971,7,1051,5,2,
39981,1114,1052,16,0,
3999239,1,40,1053,16,
40000,487,1,8,1054,
400119,206,1,8,1055,
40025,2,1,1114,1056,
400316,0,204,1,40,
40041057,16,0,454,1,
40059,1058,19,212,1,
40069,1059,5,2,1,
40071114,1060,16,0,210,
40081,40,1061,16,0,
4009436,1,10,1062,19,
4010164,1,10,1063,5,
40112,1,1114,1064,16,
40120,162,1,40,1065,
401316,0,390,1,11,
40141066,19,191,1,11,
40151067,5,141,1,1260,
40161068,17,1069,15,1070,
40174,34,37,0,83,
40180,105,0,109,0,
4019112,0,108,0,101,
40200,65,0,115,0,
4021115,0,105,0,103,
40220,110,0,109,0,
4023101,0,110,0,116,
40240,1,-1,1,5,
40251071,20,1072,4,38,
402683,0,105,0,109,
40270,112,0,108,0,
4028101,0,65,0,115,
40290,115,0,105,0,
4030103,0,110,0,109,
40310,101,0,110,0,
4032116,0,95,0,50,
40330,49,0,1,215,
40341,3,1,6,1,
40355,1073,22,1,78,
40361,1011,1074,17,1075,
403715,1076,4,44,37,
40380,80,0,97,0,
4039114,0,101,0,110,
40400,116,0,104,0,
4041101,0,115,0,105,
40420,115,0,69,0,
4043120,0,112,0,114,
40440,101,0,115,0,
4045115,0,105,0,111,
40460,110,0,1,-1,
40471,5,1077,20,1078,
40484,46,80,0,97,
40490,114,0,101,0,
4050110,0,116,0,104,
40510,101,0,115,0,
4052105,0,115,0,69,
40530,120,0,112,0,
4054114,0,101,0,115,
40550,115,0,105,0,
4056111,0,110,0,95,
40570,50,0,1,262,
40581,3,1,4,1,
40593,1079,22,1,125,
40601,1514,1080,17,1081,
406115,1070,1,-1,1,
40625,1082,20,1083,4,
406338,83,0,105,0,
4064109,0,112,0,108,
40650,101,0,65,0,
4066115,0,115,0,105,
40670,103,0,110,0,
4068109,0,101,0,110,
40690,116,0,95,0,
407049,0,52,0,1,
4071208,1,3,1,4,
40721,3,1084,22,1,
407371,1,9,1085,17,
40741086,15,1087,4,24,
407537,0,68,0,101,
40760,99,0,108,0,
407797,0,114,0,97,
40780,116,0,105,0,
4079111,0,110,0,1,
4080-1,1,5,1088,20,
40811089,4,26,68,0,
4082101,0,99,0,108,
40830,97,0,114,0,
408497,0,116,0,105,
40850,111,0,110,0,
408695,0,49,0,1,
4087159,1,3,1,3,
40881,2,1090,22,1,
408921,1,262,1091,17,
40901092,15,1093,4,34,
409137,0,66,0,105,
40920,110,0,97,0,
4093114,0,121,0,69,
40940,120,0,112,0,
4095114,0,101,0,115,
40960,115,0,105,0,
4097111,0,110,0,1,
4098-1,1,5,1094,20,
40991095,4,36,66,0,
4100105,0,110,0,97,
41010,114,0,121,0,
410269,0,120,0,112,
41030,114,0,101,0,
4104115,0,115,0,105,
41050,111,0,110,0,
410695,0,53,0,1,
4107244,1,3,1,4,
41081,3,1096,22,1,
4109107,1,1267,1097,17,
41101098,15,1070,1,-1,
41111,5,1099,20,1100,
41124,36,83,0,105,
41130,109,0,112,0,
4114108,0,101,0,65,
41150,115,0,115,0,
4116105,0,103,0,110,
41170,109,0,101,0,
4118110,0,116,0,95,
41190,56,0,1,202,
41201,3,1,6,1,
41215,1101,22,1,65,
41221,2021,707,1,1521,
41231102,17,1103,15,1070,
41241,-1,1,5,1104,
412520,1105,4,36,83,
41260,105,0,109,0,
4127112,0,108,0,101,
41280,65,0,115,0,
4129115,0,105,0,103,
41300,110,0,109,0,
4131101,0,110,0,116,
41320,95,0,49,0,
41331,195,1,3,1,
41344,1,3,1106,22,
41351,58,1,2024,1107,
413617,1108,15,1109,4,
413724,37,0,83,0,
4138116,0,97,0,116,
41390,101,0,67,0,
4140104,0,97,0,110,
41410,103,0,101,0,
41421,-1,1,5,1110,
414320,1111,4,26,83,
41440,116,0,97,0,
4145116,0,101,0,67,
41460,104,0,97,0,
4147110,0,103,0,101,
41480,95,0,49,0,
41491,178,1,3,1,
41503,1,2,1112,22,
41511,41,1,1775,1113,
415216,0,582,1,19,
41531114,17,1086,1,2,
41541090,1,2028,1115,17,
41551116,15,1117,4,20,
415637,0,74,0,117,
41570,109,0,112,0,
415876,0,97,0,98,
41590,101,0,108,0,
41601,-1,1,5,1118,
416120,1119,4,22,74,
41620,117,0,109,0,
4163112,0,76,0,97,
41640,98,0,101,0,
4165108,0,95,0,49,
41660,1,176,1,3,
41671,3,1,2,1120,
416822,1,39,1,2280,
41691121,17,1122,15,1123,
41704,34,37,0,70,
41710,111,0,114,0,
417276,0,111,0,111,
41730,112,0,83,0,
4174116,0,97,0,116,
41750,101,0,109,0,
4176101,0,110,0,116,
41770,1,-1,1,5,
41781124,20,1125,4,36,
417970,0,111,0,114,
41800,76,0,111,0,
4181111,0,112,0,83,
41820,116,0,97,0,
4183116,0,101,0,109,
41840,101,0,110,0,
4185116,0,95,0,50,
41860,1,190,1,3,
41871,2,1,1,1126,
418822,1,53,1,2030,
4189720,1,2031,725,1,
41902032,730,1,2033,735,
41911,2034,1127,16,0,
4192573,1,2035,741,1,
41932036,1128,16,0,528,
41941,2037,746,1,2038,
41951129,16,0,532,1,
41962039,751,1,32,1130,
419716,0,582,1,2041,
4198757,1,2042,1131,16,
41990,635,1,2043,762,
42001,2044,767,1,2226,
4201886,1,2549,1132,16,
42020,583,1,40,1133,
420317,1134,15,1135,4,
420432,37,0,73,0,
4205100,0,101,0,110,
42060,116,0,69,0,
4207120,0,112,0,114,
42080,101,0,115,0,
4209115,0,105,0,111,
42100,110,0,1,-1,
42111,5,1136,20,1137,
42124,34,73,0,100,
42130,101,0,110,0,
4214116,0,69,0,120,
42150,112,0,114,0,
4216101,0,115,0,115,
42170,105,0,111,0,
4218110,0,95,0,49,
42190,1,229,1,3,
42201,2,1,1,1138,
422122,1,92,1,1296,
42221139,17,1140,15,1070,
42231,-1,1,5,1141,
422420,1142,4,38,83,
42250,105,0,109,0,
4226112,0,108,0,101,
42270,65,0,115,0,
4228115,0,105,0,103,
42290,110,0,109,0,
4230101,0,110,0,116,
42310,95,0,50,0,
423248,0,1,214,1,
42333,1,6,1,5,
42341143,22,1,77,1,
4235283,1144,17,1145,15,
42361093,1,-1,1,5,
42371146,20,1147,4,36,
423866,0,105,0,110,
42390,97,0,114,0,
4240121,0,69,0,120,
42410,112,0,114,0,
4242101,0,115,0,115,
42430,105,0,111,0,
4244110,0,95,0,52,
42450,1,243,1,3,
42461,4,1,3,1148,
424722,1,106,1,44,
42481149,17,1134,1,1,
42491138,1,1802,774,1,
42502556,1150,16,0,497,
42511,47,1151,17,1152,
425215,1153,4,38,37,
42530,73,0,100,0,
4254101,0,110,0,116,
42550,68,0,111,0,
4256116,0,69,0,120,
42570,112,0,114,0,
4258101,0,115,0,115,
42590,105,0,111,0,
4260110,0,1,-1,1,
42615,1154,20,1155,4,
426240,73,0,100,0,
4263101,0,110,0,116,
42640,68,0,111,0,
4265116,0,69,0,120,
42660,112,0,114,0,
4267101,0,115,0,115,
42680,105,0,111,0,
4269110,0,95,0,49,
42700,1,230,1,3,
42711,4,1,3,1156,
427222,1,93,1,48,
42731157,17,1158,15,1159,
42744,58,37,0,73,
42750,110,0,99,0,
4276114,0,101,0,109,
42770,101,0,110,0,
4278116,0,68,0,101,
42790,99,0,114,0,
4280101,0,109,0,101,
42810,110,0,116,0,
428269,0,120,0,112,
42830,114,0,101,0,
4284115,0,115,0,105,
42850,111,0,110,0,
42861,-1,1,5,1160,
428720,1161,4,60,73,
42880,110,0,99,0,
4289114,0,101,0,109,
42900,101,0,110,0,
4291116,0,68,0,101,
42920,99,0,114,0,
4293101,0,109,0,101,
42940,110,0,116,0,
429569,0,120,0,112,
42960,114,0,101,0,
4297115,0,115,0,105,
42980,111,0,110,0,
429995,0,52,0,1,
4300234,1,3,1,5,
43011,4,1162,22,1,
430297,1,49,1163,17,
43031164,15,1159,1,-1,
43041,5,1165,20,1166,
43054,60,73,0,110,
43060,99,0,114,0,
4307101,0,109,0,101,
43080,110,0,116,0,
430968,0,101,0,99,
43100,114,0,101,0,
4311109,0,101,0,110,
43120,116,0,69,0,
4313120,0,112,0,114,
43140,101,0,115,0,
4315115,0,105,0,111,
43160,110,0,95,0,
431751,0,1,233,1,
43183,1,5,1,4,
43191167,22,1,96,1,
43202309,1168,16,0,582,
43211,51,1169,17,1170,
432215,1159,1,-1,1,
43235,1171,20,1172,4,
432460,73,0,110,0,
432599,0,114,0,101,
43260,109,0,101,0,
4327110,0,116,0,68,
43280,101,0,99,0,
4329114,0,101,0,109,
43300,101,0,110,0,
4331116,0,69,0,120,
43320,112,0,114,0,
4333101,0,115,0,115,
43340,105,0,111,0,
4335110,0,95,0,49,
43360,1,231,1,3,
43371,3,1,2,1173,
433822,1,94,1,50,
43391174,17,1175,15,1159,
43401,-1,1,5,1176,
434120,1177,4,60,73,
43420,110,0,99,0,
4343114,0,101,0,109,
43440,101,0,110,0,
4345116,0,68,0,101,
43460,99,0,114,0,
4347101,0,109,0,101,
43480,110,0,116,0,
434969,0,120,0,112,
43500,114,0,101,0,
4351115,0,115,0,105,
43520,111,0,110,0,
435395,0,50,0,1,
4354232,1,3,1,3,
43551,2,1178,22,1,
435695,1,305,1179,17,
43571180,15,1093,1,-1,
43581,5,1181,20,1182,
43594,36,66,0,105,
43600,110,0,97,0,
4361114,0,121,0,69,
43620,120,0,112,0,
4363114,0,101,0,115,
43640,115,0,105,0,
4365111,0,110,0,95,
43660,51,0,1,242,
43671,3,1,4,1,
43683,1183,22,1,105,
43691,525,1184,17,1185,
437015,1186,4,34,37,
43710,82,0,111,0,
4372116,0,97,0,116,
43730,105,0,111,0,
4374110,0,67,0,111,
43750,110,0,115,0,
4376116,0,97,0,110,
43770,116,0,1,-1,
43781,5,1187,20,1188,
43794,36,82,0,111,
43800,116,0,97,0,
4381116,0,105,0,111,
43820,110,0,67,0,
4383111,0,110,0,115,
43840,116,0,97,0,
4385110,0,116,0,95,
43860,49,0,1,227,
43871,3,1,10,1,
43889,1189,22,1,90,
43891,63,1190,17,1191,
439015,1192,4,38,37,
43910,84,0,121,0,
4392112,0,101,0,99,
43930,97,0,115,0,
4394116,0,69,0,120,
43950,112,0,114,0,
4396101,0,115,0,115,
43970,105,0,111,0,
4398110,0,1,-1,1,
43995,1193,20,1194,4,
440040,84,0,121,0,
4401112,0,101,0,99,
44020,97,0,115,0,
4403116,0,69,0,120,
44040,112,0,114,0,
4405101,0,115,0,115,
44060,105,0,111,0,
4407110,0,95,0,50,
44080,1,264,1,3,
44091,5,1,4,1195,
441022,1,127,1,66,
44111196,17,1197,15,1192,
44121,-1,1,5,1198,
441320,1199,4,40,84,
44140,121,0,112,0,
4415101,0,99,0,97,
44160,115,0,116,0,
441769,0,120,0,112,
44180,114,0,101,0,
4419115,0,115,0,105,
44200,111,0,110,0,
442195,0,51,0,1,
4422265,1,3,1,7,
44231,6,1200,22,1,
4424128,1,67,1201,17,
44251202,15,1192,1,-1,
44261,5,1203,20,1204,
44274,40,84,0,121,
44280,112,0,101,0,
442999,0,97,0,115,
44300,116,0,69,0,
4431120,0,112,0,114,
44320,101,0,115,0,
4433115,0,105,0,111,
44340,110,0,95,0,
443555,0,1,269,1,
44363,1,8,1,7,
44371205,22,1,132,1,
443868,1206,17,1207,15,
44391192,1,-1,1,5,
44401208,20,1209,4,40,
444184,0,121,0,112,
44420,101,0,99,0,
444397,0,115,0,116,
44440,69,0,120,0,
4445112,0,114,0,101,
44460,115,0,115,0,
4447105,0,111,0,110,
44480,95,0,53,0,
44491,267,1,3,1,
44508,1,7,1210,22,
44511,130,1,69,1211,
445217,1212,15,1192,1,
4453-1,1,5,1213,20,
44541214,4,40,84,0,
4455121,0,112,0,101,
44560,99,0,97,0,
4457115,0,116,0,69,
44580,120,0,112,0,
4459114,0,101,0,115,
44600,115,0,105,0,
4461111,0,110,0,95,
44620,54,0,1,268,
44631,3,1,6,1,
44645,1215,22,1,131,
44651,70,1216,17,1217,
446615,1192,1,-1,1,
44675,1218,20,1219,4,
446840,84,0,121,0,
4469112,0,101,0,99,
44700,97,0,115,0,
4471116,0,69,0,120,
44720,112,0,114,0,
4473101,0,115,0,115,
44740,105,0,111,0,
4475110,0,95,0,52,
44760,1,266,1,3,
44771,6,1,5,1220,
447822,1,129,1,74,
44791221,17,1222,15,1192,
44801,-1,1,5,1223,
448120,1224,4,40,84,
44820,121,0,112,0,
4483101,0,99,0,97,
44840,115,0,116,0,
448569,0,120,0,112,
44860,114,0,101,0,
4487115,0,115,0,105,
44880,111,0,110,0,
448995,0,57,0,1,
4490271,1,3,1,7,
44911,6,1225,22,1,
4492134,1,1013,1226,17,
44931227,15,1076,1,-1,
44941,5,1228,20,1229,
44954,46,80,0,97,
44960,114,0,101,0,
4497110,0,116,0,104,
44980,101,0,115,0,
4499105,0,115,0,69,
45000,120,0,112,0,
4501114,0,101,0,115,
45020,115,0,105,0,
4503111,0,110,0,95,
45040,49,0,1,261,
45051,3,1,4,1,
45063,1230,22,1,124,
45071,1332,1231,17,1232,
450815,1070,1,-1,1,
45095,1233,20,1234,4,
451038,83,0,105,0,
4511109,0,112,0,108,
45120,101,0,65,0,
4513115,0,115,0,105,
45140,103,0,110,0,
4515109,0,101,0,110,
45160,116,0,95,0,
451749,0,57,0,1,
4518213,1,3,1,6,
45191,5,1235,22,1,
452076,1,1048,1236,17,
45211237,15,1093,1,-1,
45221,5,1238,20,1239,
45234,38,66,0,105,
45240,110,0,97,0,
4525114,0,121,0,69,
45260,120,0,112,0,
4527114,0,101,0,115,
45280,115,0,105,0,
4529111,0,110,0,95,
45300,49,0,56,0,
45311,257,1,3,1,
45324,1,3,1240,22,
45331,120,1,1585,1241,
453417,1242,15,1243,4,
453532,37,0,82,0,
4536101,0,116,0,117,
45370,114,0,110,0,
453883,0,116,0,97,
45390,116,0,101,0,
4540109,0,101,0,110,
45410,116,0,1,-1,
45421,5,1244,20,1245,
45434,34,82,0,101,
45440,116,0,117,0,
4545114,0,110,0,83,
45460,116,0,97,0,
4547116,0,101,0,109,
45480,101,0,110,0,
4549116,0,95,0,50,
45500,1,220,1,3,
45511,2,1,1,1246,
455222,1,83,1,2023,
45531247,17,1248,15,1109,
45541,-1,1,5,1249,
455520,1250,4,26,83,
45560,116,0,97,0,
4557116,0,101,0,67,
45580,104,0,97,0,
4559110,0,103,0,101,
45600,95,0,50,0,
45611,179,1,3,1,
45623,1,2,1251,22,
45631,42,1,82,1252,
456417,1253,15,1254,4,
456532,37,0,85,0,
4566110,0,97,0,114,
45670,121,0,69,0,
4568120,0,112,0,114,
45690,101,0,115,0,
4570115,0,105,0,111,
45710,110,0,1,-1,
45721,5,1255,20,1256,
45734,34,85,0,110,
45740,97,0,114,0,
4575121,0,69,0,120,
45760,112,0,114,0,
4577101,0,115,0,115,
45780,105,0,111,0,
4579110,0,95,0,51,
45800,1,260,1,3,
45811,3,1,2,1257,
458222,1,123,1,2026,
45831258,17,1259,15,1260,
45844,28,37,0,74,
45850,117,0,109,0,
4586112,0,83,0,116,
45870,97,0,116,0,
4588101,0,109,0,101,
45890,110,0,116,0,
45901,-1,1,5,1261,
459120,1262,4,30,74,
45920,117,0,109,0,
4593112,0,83,0,116,
45940,97,0,116,0,
4595101,0,109,0,101,
45960,110,0,116,0,
459795,0,49,0,1,
4598177,1,3,1,3,
45991,2,1263,22,1,
460040,1,1591,1264,17,
46011265,15,1243,1,-1,
46021,5,1266,20,1267,
46034,34,82,0,101,
46040,116,0,117,0,
4605114,0,110,0,83,
46060,116,0,97,0,
4607116,0,101,0,109,
46080,101,0,110,0,
4609116,0,95,0,49,
46100,1,219,1,3,
46111,3,1,2,1268,
461222,1,82,1,1341,
46131269,17,1270,15,1070,
46141,-1,1,5,1271,
461520,1272,4,36,83,
46160,105,0,109,0,
4617112,0,108,0,101,
46180,65,0,115,0,
4619115,0,105,0,103,
46200,110,0,109,0,
4621101,0,110,0,116,
46220,95,0,54,0,
46231,200,1,3,1,
46244,1,3,1273,22,
46251,63,1,328,1274,
462617,1275,15,1093,1,
4627-1,1,5,1276,20,
46281277,4,36,66,0,
4629105,0,110,0,97,
46300,114,0,121,0,
463169,0,120,0,112,
46320,114,0,101,0,
4633115,0,115,0,105,
46340,111,0,110,0,
463595,0,50,0,1,
4636241,1,3,1,4,
46371,3,1278,22,1,
4638104,1,1303,1279,17,
46391280,15,1070,1,-1,
46401,5,1281,20,1282,
46414,36,83,0,105,
46420,109,0,112,0,
4643108,0,101,0,65,
46440,115,0,115,0,
4645105,0,103,0,110,
46460,109,0,101,0,
4647110,0,116,0,95,
46480,55,0,1,201,
46491,3,1,6,1,
46505,1283,22,1,64,
46511,1096,1284,17,1285,
465215,1286,4,26,37,
46530,70,0,117,0,
4654110,0,99,0,116,
46550,105,0,111,0,
4656110,0,67,0,97,
46570,108,0,108,0,
46581,-1,1,5,1287,
465920,1288,4,28,70,
46600,117,0,110,0,
466199,0,116,0,105,
46620,111,0,110,0,
466367,0,97,0,108,
46640,108,0,95,0,
466549,0,1,272,1,
46663,1,5,1,4,
46671289,22,1,135,1,
466893,1290,17,1291,15,
46691254,1,-1,1,5,
46701292,20,1293,4,34,
467185,0,110,0,97,
46720,114,0,121,0,
467369,0,120,0,112,
46740,114,0,101,0,
4675115,0,115,0,105,
46760,111,0,110,0,
467795,0,50,0,1,
4678259,1,3,1,3,
46791,2,1294,22,1,
4680122,1,1550,1295,17,
46811296,15,1070,1,-1,
46821,5,1297,20,1298,
46834,38,83,0,105,
46840,109,0,112,0,
4685108,0,101,0,65,
46860,115,0,115,0,
4687105,0,103,0,110,
46880,109,0,101,0,
4689110,0,116,0,95,
46900,49,0,51,0,
46911,207,1,3,1,
46924,1,3,1299,22,
46931,70,1,2354,853,
46941,2355,858,1,2040,
46951300,16,0,536,1,
46962358,807,1,352,1301,
469717,1302,15,1093,1,
4698-1,1,5,1303,20,
46991304,4,36,66,0,
4700105,0,110,0,97,
47010,114,0,121,0,
470269,0,120,0,112,
47030,114,0,101,0,
4704115,0,115,0,105,
47050,111,0,110,0,
470695,0,49,0,1,
4707240,1,3,1,4,
47081,3,1305,22,1,
4709103,1,1859,1306,16,
47100,365,1,1860,820,
47111,1804,1307,16,0,
4712582,1,107,1308,17,
47131309,15,1254,1,-1,
47141,5,1310,20,1311,
47154,34,85,0,110,
47160,97,0,114,0,
4717121,0,69,0,120,
47180,112,0,114,0,
4719101,0,115,0,115,
47200,105,0,111,0,
4721110,0,95,0,49,
47220,1,258,1,3,
47231,3,1,2,1312,
472422,1,121,1,1114,
47251313,17,1152,1,3,
47261156,1,2105,1314,16,
47270,582,1,1872,1315,
472816,0,375,1,1873,
4729829,1,118,1316,17,
47301317,15,1093,1,-1,
47311,5,1318,20,1319,
47324,38,66,0,105,
47330,110,0,97,0,
4734114,0,121,0,69,
47350,120,0,112,0,
4736114,0,101,0,115,
47370,115,0,105,0,
4738111,0,110,0,95,
47390,49,0,52,0,
47401,253,1,3,1,
47414,1,3,1320,22,
47421,116,1,1123,1321,
474317,1322,15,1070,1,
4744-1,1,5,1323,20,
47451324,4,38,83,0,
4746105,0,109,0,112,
47470,108,0,101,0,
474865,0,115,0,115,
47490,105,0,103,0,
4750110,0,109,0,101,
47510,110,0,116,0,
475295,0,49,0,50,
47530,1,206,1,3,
47541,6,1,5,1325,
475522,1,69,1,371,
47561326,17,1327,15,1328,
47574,46,37,0,70,
47580,117,0,110,0,
475999,0,116,0,105,
47600,111,0,110,0,
476167,0,97,0,108,
47620,108,0,69,0,
4763120,0,112,0,114,
47640,101,0,115,0,
4765115,0,105,0,111,
47660,110,0,1,-1,
47671,5,1329,20,1330,
47684,48,70,0,117,
47690,110,0,99,0,
4770116,0,105,0,111,
47710,110,0,67,0,
477297,0,108,0,108,
47730,69,0,120,0,
4774112,0,114,0,101,
47750,115,0,115,0,
4776105,0,111,0,110,
47770,95,0,49,0,
47781,239,1,3,1,
47792,1,1,1331,22,
47801,102,1,1377,1332,
478117,1333,15,1070,1,
4782-1,1,5,1334,20,
47831335,4,36,83,0,
4784105,0,109,0,112,
47850,108,0,101,0,
478665,0,115,0,115,
47870,105,0,103,0,
4788110,0,109,0,101,
47890,110,0,116,0,
479095,0,53,0,1,
4791199,1,3,1,4,
47921,3,1336,22,1,
479362,1,375,1337,17,
47941338,15,1159,1,-1,
47951,5,1339,20,1340,
47964,60,73,0,110,
47970,99,0,114,0,
4798101,0,109,0,101,
47990,110,0,116,0,
480068,0,101,0,99,
48010,114,0,101,0,
4802109,0,101,0,110,
48030,116,0,69,0,
4804120,0,112,0,114,
48050,101,0,115,0,
4806115,0,105,0,111,
48070,110,0,95,0,
480856,0,1,238,1,
48093,1,5,1,4,
48101341,22,1,101,1,
4811377,1342,17,1343,15,
48121159,1,-1,1,5,
48131344,20,1345,4,60,
481473,0,110,0,99,
48150,114,0,101,0,
4816109,0,101,0,110,
48170,116,0,68,0,
4818101,0,99,0,114,
48190,101,0,109,0,
4820101,0,110,0,116,
48210,69,0,120,0,
4822112,0,114,0,101,
48230,115,0,115,0,
4824105,0,111,0,110,
48250,95,0,53,0,
48261,235,1,3,1,
48273,1,2,1346,22,
48281,98,1,2135,836,
48291,827,1347,17,1348,
483015,1093,1,-1,1,
48315,1349,20,1350,4,
483238,66,0,105,0,
4833110,0,97,0,114,
48340,121,0,69,0,
4835120,0,112,0,114,
48360,101,0,115,0,
4837115,0,105,0,111,
48380,110,0,95,0,
483949,0,53,0,1,
4840254,1,3,1,4,
48411,3,1351,22,1,
4842117,1,380,1352,17,
48431353,15,1354,4,38,
484437,0,67,0,111,
48450,110,0,115,0,
4846116,0,97,0,110,
48470,116,0,69,0,
4848120,0,112,0,114,
48490,101,0,115,0,
4850115,0,105,0,111,
48510,110,0,1,-1,
48521,5,1355,20,1356,
48534,40,67,0,111,
48540,110,0,115,0,
4855116,0,97,0,110,
48560,116,0,69,0,
4857120,0,112,0,114,
48580,101,0,115,0,
4859115,0,105,0,111,
48600,110,0,95,0,
486149,0,1,228,1,
48623,1,2,1,1,
48631357,22,1,91,1,
4864130,1358,17,1359,15,
48651093,1,-1,1,5,
48661360,20,1361,4,38,
486766,0,105,0,110,
48680,97,0,114,0,
4869121,0,69,0,120,
48700,112,0,114,0,
4871101,0,115,0,115,
48720,105,0,111,0,
4873110,0,95,0,49,
48740,51,0,1,252,
48751,3,1,4,1,
48763,1362,22,1,115,
48771,1628,1363,17,1364,
487815,1365,4,22,37,
48790,65,0,115,0,
4880115,0,105,0,103,
48810,110,0,109,0,
4882101,0,110,0,116,
48830,1,-1,1,5,
48841366,20,1367,4,24,
488565,0,115,0,115,
48860,105,0,103,0,
4887110,0,109,0,101,
48880,110,0,116,0,
488995,0,49,0,1,
4890193,1,3,1,4,
48911,3,1368,22,1,
489256,1,2074,1369,16,
48930,582,1,373,1370,
489417,1371,15,1159,1,
4895-1,1,5,1372,20,
48961373,4,60,73,0,
4897110,0,99,0,114,
48980,101,0,109,0,
4899101,0,110,0,116,
49000,68,0,101,0,
490199,0,114,0,101,
49020,109,0,101,0,
4903110,0,116,0,69,
49040,120,0,112,0,
4905114,0,101,0,115,
49060,115,0,105,0,
4907111,0,110,0,95,
49080,54,0,1,236,
49091,3,1,3,1,
49102,1374,22,1,99,
49111,379,1375,17,1376,
491215,1159,1,-1,1,
49135,1377,20,1378,4,
491460,73,0,110,0,
491599,0,114,0,101,
49160,109,0,101,0,
4917110,0,116,0,68,
49180,101,0,99,0,
4919114,0,101,0,109,
49200,101,0,110,0,
4921116,0,69,0,120,
49220,112,0,114,0,
4923101,0,115,0,115,
49240,105,0,111,0,
4925110,0,95,0,55,
49260,1,237,1,3,
49271,5,1,4,1379,
492822,1,100,1,143,
49291380,17,1381,15,1093,
49301,-1,1,5,1382,
493120,1383,4,38,66,
49320,105,0,110,0,
493397,0,114,0,121,
49340,69,0,120,0,
4935112,0,114,0,101,
49360,115,0,115,0,
4937105,0,111,0,110,
49380,95,0,49,0,
493950,0,1,251,1,
49403,1,4,1,3,
49411384,22,1,114,1,
49421901,1385,16,0,582,
49431,1152,1386,17,1387,
494415,1070,1,-1,1,
49455,1388,20,1389,4,
494638,83,0,105,0,
4947109,0,112,0,108,
49480,101,0,65,0,
4949115,0,115,0,105,
49500,103,0,110,0,
4951109,0,101,0,110,
49520,116,0,95,0,
495350,0,52,0,1,
4954218,1,3,1,6,
49551,5,1390,22,1,
495681,1,1555,1391,16,
49570,598,1,1406,1392,
495817,1393,15,1070,1,
4959-1,1,5,1394,20,
49601395,4,38,83,0,
4961105,0,109,0,112,
49620,108,0,101,0,
496365,0,115,0,115,
49640,105,0,103,0,
4965110,0,109,0,101,
49660,110,0,116,0,
496795,0,49,0,55,
49680,1,211,1,3,
49691,4,1,3,1396,
497022,1,74,1,1159,
49711397,17,1398,15,1070,
49721,-1,1,5,1399,
497320,1400,4,38,83,
49740,105,0,109,0,
4975112,0,108,0,101,
49760,65,0,115,0,
4977115,0,105,0,103,
49780,110,0,109,0,
4979101,0,110,0,116,
49800,95,0,49,0,
498149,0,1,205,1,
49823,1,6,1,5,
49831401,22,1,68,1,
4984157,1402,17,1403,15,
49851093,1,-1,1,5,
49861404,20,1405,4,38,
498766,0,105,0,110,
49880,97,0,114,0,
4989121,0,69,0,120,
49900,112,0,114,0,
4991101,0,115,0,115,
49920,105,0,111,0,
4993110,0,95,0,49,
49940,49,0,1,250,
49951,3,1,4,1,
49963,1406,22,1,113,
49971,1413,1407,17,1408,
499815,1070,1,-1,1,
49995,1409,20,1410,4,
500036,83,0,105,0,
5001109,0,112,0,108,
50020,101,0,65,0,
5003115,0,115,0,105,
50040,103,0,110,0,
5005109,0,101,0,110,
50060,116,0,95,0,
500752,0,1,198,1,
50083,1,4,1,3,
50091411,22,1,61,1,
5010883,1412,17,1413,15,
50111093,1,-1,1,5,
50121414,20,1415,4,38,
501366,0,105,0,110,
50140,97,0,114,0,
5015121,0,69,0,120,
50160,112,0,114,0,
5017101,0,115,0,115,
50180,105,0,111,0,
5019110,0,95,0,49,
50200,54,0,1,255,
50211,3,1,4,1,
50223,1416,22,1,118,
50231,2104,801,1,1478,
50241417,17,1418,15,1070,
50251,-1,1,5,1419,
502620,1420,4,38,83,
50270,105,0,109,0,
5028112,0,108,0,101,
50290,65,0,115,0,
5030115,0,105,0,103,
50310,110,0,109,0,
5032101,0,110,0,116,
50330,95,0,49,0,
503453,0,1,209,1,
50353,1,4,1,3,
50361421,22,1,72,1,
50371620,1422,17,1423,15,
50381365,1,-1,1,5,
50391424,20,1425,4,24,
504065,0,115,0,115,
50410,105,0,103,0,
5042110,0,109,0,101,
50430,110,0,116,0,
504495,0,50,0,1,
5045194,1,3,1,2,
50461,1,1426,22,1,
504757,1,1621,1427,16,
50480,655,1,1574,787,
50491,172,1428,17,1429,
505015,1093,1,-1,1,
50515,1430,20,1431,4,
505238,66,0,105,0,
5053110,0,97,0,114,
50540,121,0,69,0,
5055120,0,112,0,114,
50560,101,0,115,0,
5057115,0,105,0,111,
50580,110,0,95,0,
505949,0,48,0,1,
5060249,1,3,1,4,
50611,3,1432,22,1,
5062112,1,1931,863,1,
50632360,813,1,1188,1433,
506417,1434,15,1070,1,
5065-1,1,5,1435,20,
50661436,4,38,83,0,
5067105,0,109,0,112,
50680,108,0,101,0,
506965,0,115,0,115,
50700,105,0,103,0,
5071110,0,109,0,101,
50720,110,0,116,0,
507395,0,50,0,51,
50740,1,217,1,3,
50751,6,1,5,1437,
507622,1,80,1,1442,
50771438,17,1439,15,1070,
50781,-1,1,5,1440,
507920,1441,4,38,83,
50800,105,0,109,0,
5081112,0,108,0,101,
50820,65,0,115,0,
5083115,0,105,0,103,
50840,110,0,109,0,
5085101,0,110,0,116,
50860,95,0,49,0,
508754,0,1,210,1,
50883,1,4,1,3,
50891442,22,1,73,1,
50901694,1443,16,0,189,
50911,942,1444,17,1445,
509215,1093,1,-1,1,
50935,1446,20,1447,4,
509438,66,0,105,0,
5095110,0,97,0,114,
50960,121,0,69,0,
5097120,0,112,0,114,
50980,101,0,115,0,
5099115,0,105,0,111,
51000,110,0,95,0,
510149,0,55,0,1,
5102256,1,3,1,4,
51031,3,1448,22,1,
5104119,1,1195,1449,17,
51051450,15,1070,1,-1,
51061,5,1451,20,1452,
51074,38,83,0,105,
51080,109,0,112,0,
5109108,0,101,0,65,
51100,115,0,115,0,
5111105,0,103,0,110,
51120,109,0,101,0,
5113110,0,116,0,95,
51140,49,0,48,0,
51151,204,1,3,1,
51166,1,5,1453,22,
51171,67,1,1449,1454,
511817,1455,15,1070,1,
5119-1,1,5,1456,20,
51201457,4,36,83,0,
5121105,0,109,0,112,
51220,108,0,101,0,
512365,0,115,0,115,
51240,105,0,103,0,
5125110,0,109,0,101,
51260,110,0,116,0,
512795,0,51,0,1,
5128197,1,3,1,4,
51291,3,1458,22,1,
513060,1,1701,1459,17,
51311460,15,1123,1,-1,
51321,5,1461,20,1462,
51334,36,70,0,111,
51340,114,0,76,0,
5135111,0,111,0,112,
51360,83,0,116,0,
513797,0,116,0,101,
51380,109,0,101,0,
5139110,0,116,0,95,
51400,51,0,1,191,
51411,3,1,4,1,
51423,1463,22,1,54,
51431,447,1464,17,1465,
514415,1466,4,30,37,
51450,86,0,101,0,
514699,0,116,0,111,
51470,114,0,67,0,
5148111,0,110,0,115,
51490,116,0,97,0,
5150110,0,116,0,1,
5151-1,1,5,1467,20,
51521468,4,32,86,0,
5153101,0,99,0,116,
51540,111,0,114,0,
515567,0,111,0,110,
51560,115,0,116,0,
515797,0,110,0,116,
51580,95,0,49,0,
51591,226,1,3,1,
51608,1,7,1469,22,
51611,89,1,1958,1470,
516216,0,582,1,188,
51631471,17,1472,15,1093,
51641,-1,1,5,1473,
516520,1474,4,36,66,
51660,105,0,110,0,
516797,0,114,0,121,
51680,69,0,120,0,
5169112,0,114,0,101,
51700,115,0,115,0,
5171105,0,111,0,110,
51720,95,0,57,0,
51731,248,1,3,1,
51744,1,3,1475,22,
51751,111,1,1370,1476,
517617,1477,15,1070,1,
5177-1,1,5,1478,20,
51781479,4,38,83,0,
5179105,0,109,0,112,
51800,108,0,101,0,
518165,0,115,0,115,
51820,105,0,103,0,
5183110,0,109,0,101,
51840,110,0,116,0,
518595,0,49,0,56,
51860,1,212,1,3,
51871,4,1,3,1480,
518822,1,75,1,1657,
5189878,1,205,1481,17,
51901482,15,1093,1,-1,
51911,5,1483,20,1484,
51924,36,66,0,105,
51930,110,0,97,0,
5194114,0,121,0,69,
51950,120,0,112,0,
5196114,0,101,0,115,
51970,115,0,105,0,
5198111,0,110,0,95,
51990,56,0,1,247,
52001,3,1,4,1,
52013,1485,22,1,110,
52021,1665,1486,17,1487,
520315,1123,1,-1,1,
52045,1488,20,1489,4,
520536,70,0,111,0,
5206114,0,76,0,111,
52070,111,0,112,0,
520883,0,116,0,97,
52090,116,0,101,0,
5210109,0,101,0,110,
52110,116,0,95,0,
521249,0,1,189,1,
52133,1,2,1,1,
52141490,22,1,52,1,
52152029,714,1,2197,1491,
521616,0,582,1,1224,
52171492,17,1493,15,1070,
52181,-1,1,5,1494,
521920,1495,4,38,83,
52200,105,0,109,0,
5221112,0,108,0,101,
52220,65,0,115,0,
5223115,0,105,0,103,
52240,110,0,109,0,
5225101,0,110,0,116,
52260,95,0,50,0,
522750,0,1,216,1,
52283,1,6,1,5,
52291496,22,1,79,1,
5230223,1497,17,1498,15,
52311093,1,-1,1,5,
52321499,20,1500,4,36,
523366,0,105,0,110,
52340,97,0,114,0,
5235121,0,69,0,120,
52360,112,0,114,0,
5237101,0,115,0,115,
52380,105,0,111,0,
5239110,0,95,0,55,
52400,1,246,1,3,
52411,4,1,3,1501,
524222,1,109,1,1730,
52431502,17,1503,15,1123,
52441,-1,1,5,1504,
524520,1505,4,36,70,
52460,111,0,114,0,
524776,0,111,0,111,
52480,112,0,83,0,
5249116,0,97,0,116,
52500,101,0,109,0,
5251101,0,110,0,116,
52520,95,0,52,0,
52531,192,1,3,1,
52544,1,3,1506,22,
52551,55,1,476,1507,
525617,1508,15,1509,4,
525718,37,0,67,0,
5258111,0,110,0,115,
52590,116,0,97,0,
5260110,0,116,0,1,
5261-1,1,5,1510,20,
52621511,4,20,67,0,
5263111,0,110,0,115,
52640,116,0,97,0,
5265110,0,116,0,95,
52660,52,0,1,224,
52671,3,1,2,1,
52681,1512,22,1,87,
52691,477,1513,17,1514,
527015,1509,1,-1,1,
52715,1515,20,1516,4,
527220,67,0,111,0,
5273110,0,115,0,116,
52740,97,0,110,0,
5275116,0,95,0,51,
52760,1,223,1,3,
52771,2,1,1,1517,
527822,1,86,1,1231,
52791518,17,1519,15,1070,
52801,-1,1,5,1520,
528120,1521,4,36,83,
52820,105,0,109,0,
5283112,0,108,0,101,
52840,65,0,115,0,
5285115,0,105,0,103,
52860,110,0,109,0,
5287101,0,110,0,116,
52880,95,0,57,0,
52891,203,1,3,1,
52906,1,5,1522,22,
52911,66,1,479,1523,
529217,1524,15,1509,1,
5293-1,1,5,1525,20,
52941526,4,20,67,0,
5295111,0,110,0,115,
52960,116,0,97,0,
5297110,0,116,0,95,
52980,49,0,1,221,
52991,3,1,2,1,
53001,1527,22,1,84,
53011,480,1528,17,1529,
530215,1530,4,26,37,
53030,76,0,105,0,
5304115,0,116,0,67,
53050,111,0,110,0,
5306115,0,116,0,97,
53070,110,0,116,0,
53081,-1,1,5,1531,
530920,1532,4,28,76,
53100,105,0,115,0,
5311116,0,67,0,111,
53120,110,0,115,0,
5313116,0,97,0,110,
53140,116,0,95,0,
531549,0,1,225,1,
53163,1,4,1,3,
53171533,22,1,88,1,
53181485,1534,17,1535,15,
53191070,1,-1,1,5,
53201536,20,1537,4,36,
532183,0,105,0,109,
53220,112,0,108,0,
5323101,0,65,0,115,
53240,115,0,105,0,
5325103,0,110,0,109,
53260,101,0,110,0,
5327116,0,95,0,50,
53280,1,196,1,3,
53291,4,1,3,1538,
533022,1,59,1,1737,
53311539,16,0,278,1,
53321989,894,1,1990,1540,
533316,0,582,1,242,
53341541,17,1542,15,1093,
53351,-1,1,5,1543,
533620,1544,4,36,66,
53370,105,0,110,0,
533897,0,114,0,121,
53390,69,0,120,0,
5340112,0,114,0,101,
53410,115,0,115,0,
5342105,0,111,0,110,
53430,95,0,54,0,
53441,245,1,3,1,
53454,1,3,1545,22,
53461,108,1,478,1546,
534717,1547,15,1509,1,
5348-1,1,5,1548,20,
53491549,4,20,67,0,
5350111,0,110,0,115,
53510,116,0,97,0,
5352110,0,116,0,95,
53530,50,0,1,222,
53541,3,1,2,1,
53551,1550,22,1,85,
53561,1001,1551,17,1552,
535715,1192,1,-1,1,
53585,1553,20,1554,4,
535940,84,0,121,0,
5360112,0,101,0,99,
53610,97,0,115,0,
5362116,0,69,0,120,
53630,112,0,114,0,
5364101,0,115,0,115,
53650,105,0,111,0,
5366110,0,95,0,56,
53670,1,270,1,3,
53681,5,1,4,1555,
536922,1,133,1,1002,
53701556,17,1557,15,1192,
53711,-1,1,5,1558,
537220,1559,4,40,84,
53730,121,0,112,0,
5374101,0,99,0,97,
53750,115,0,116,0,
537669,0,120,0,112,
53770,114,0,101,0,
5378115,0,115,0,105,
53790,111,0,110,0,
538095,0,49,0,1,
5381263,1,3,1,5,
53821,4,1560,22,1,
5383126,1,12,1561,19,
5384157,1,12,1562,5,
538541,1,2074,1563,16,
53860,155,1,1860,820,
53871,2412,1564,16,0,
5388155,1,2197,1565,16,
53890,155,1,2309,1566,
539016,0,155,1,1657,
5391878,1,1989,894,1,
53921990,1567,16,0,155,
53931,31,1568,16,0,
5394155,1,32,1569,16,
53950,155,1,2104,801,
53961,2105,1570,16,0,
5397155,1,2358,807,1,
53982545,1571,16,0,155,
53991,2226,886,1,1901,
54001572,16,0,155,1,
54012454,1573,16,0,553,
54021,1802,774,1,2021,
5403707,1,1804,1574,16,
54040,155,1,2135,836,
54051,2354,853,1,2355,
5406858,1,2029,714,1,
54072030,720,1,2031,725,
54081,2032,730,1,2360,
5409813,1,2035,741,1,
54102037,746,1,2365,1575,
541116,0,273,1,2039,
5412751,1,1931,863,1,
54132041,757,1,1873,829,
54141,2043,762,1,2044,
5415767,1,1775,1576,16,
54160,155,1,2033,735,
54171,1574,787,1,1958,
54181577,16,0,155,1,
541913,1578,19,258,1,
542013,1579,5,33,1,
54211860,820,1,2414,1580,
542217,1581,15,1582,4,
542322,37,0,83,0,
5424116,0,97,0,116,
54250,101,0,69,0,
5426118,0,101,0,110,
54270,116,0,1,-1,
54281,5,1583,20,1584,
54294,24,83,0,116,
54300,97,0,116,0,
5431101,0,69,0,118,
54320,101,0,110,0,
5433116,0,95,0,49,
54340,1,156,1,3,
54351,6,1,5,1585,
543622,1,17,1,2416,
54371586,16,0,395,1,
54382309,1587,16,0,256,
54391,1657,878,1,2031,
5440725,1,1989,894,1,
544132,1588,16,0,261,
54421,2104,801,1,2226,
5443886,1,2033,735,1,
54442451,1589,17,1590,15,
54451591,4,20,37,0,
544683,0,116,0,97,
54470,116,0,101,0,
544866,0,111,0,100,
54490,121,0,1,-1,
54501,5,1592,20,1593,
54514,22,83,0,116,
54520,97,0,116,0,
5453101,0,66,0,111,
54540,100,0,121,0,
545595,0,50,0,1,
5456155,1,3,1,3,
54571,2,1594,22,1,
545816,1,2453,1595,17,
54591596,15,1591,1,-1,
54601,5,1597,20,1598,
54614,22,83,0,116,
54620,97,0,116,0,
5463101,0,66,0,111,
54640,100,0,121,0,
546595,0,49,0,1,
5466154,1,3,1,2,
54671,1,1599,22,1,
546815,1,1802,774,1,
54692021,707,1,2135,836,
54701,2354,853,1,2355,
5471858,1,2029,714,1,
54722030,720,1,2358,807,
54731,2032,730,1,2360,
5474813,1,2035,741,1,
54752037,746,1,2039,751,
54761,1931,863,1,2041,
5477757,1,1873,829,1,
54782043,762,1,2044,767,
54791,2490,1600,16,0,
5480455,1,1574,787,1,
548114,1601,19,144,1,
548214,1602,5,104,1,
54831260,1068,1,1011,1074,
54841,1514,1080,1,9,
54851085,1,10,1603,17,
54861604,15,1605,4,48,
548737,0,65,0,114,
54880,103,0,117,0,
5489109,0,101,0,110,
54900,116,0,68,0,
5491101,0,99,0,108,
54920,97,0,114,0,
549397,0,116,0,105,
54940,111,0,110,0,
549576,0,105,0,115,
54960,116,0,1,-1,
54971,5,140,1,0,
54981,0,1606,22,1,
549918,1,262,1091,1,
55001267,1097,1,1521,1102,
55011,1773,1607,16,0,
5502148,1,19,1114,1,
550320,1608,16,0,142,
55041,2280,1121,1,525,
55051184,1,2534,1609,17,
55061610,15,1605,1,-1,
55071,5,140,1,0,
55081,0,1606,1,30,
55091611,17,1612,15,1605,
55101,-1,1,5,1613,
551120,1614,4,50,65,
55120,114,0,103,0,
5513117,0,109,0,101,
55140,110,0,116,0,
551568,0,101,0,99,
55160,108,0,97,0,
5517114,0,97,0,116,
55180,105,0,111,0,
5519110,0,76,0,105,
55200,115,0,116,0,
552195,0,50,0,1,
5522158,1,3,1,4,
55231,3,1615,22,1,
552420,1,283,1144,1,
55252543,1616,16,0,142,
55261,40,1133,1,41,
55271617,17,1618,15,1619,
55284,26,37,0,65,
55290,114,0,103,0,
5530117,0,109,0,101,
55310,110,0,116,0,
553276,0,105,0,115,
55330,116,0,1,-1,
55341,5,600,1,0,
55351,0,1620,22,1,
5536136,1,42,1621,17,
55371622,15,1623,4,38,
553837,0,69,0,120,
55390,112,0,114,0,
5540101,0,115,0,115,
55410,105,0,111,0,
5542110,0,65,0,114,
55430,103,0,117,0,
5544109,0,101,0,110,
55450,116,0,1,-1,
55461,5,1624,20,1625,
55474,40,69,0,120,
55480,112,0,114,0,
5549101,0,115,0,115,
55500,105,0,111,0,
5551110,0,65,0,114,
55520,103,0,117,0,
5553109,0,101,0,110,
55540,116,0,95,0,
555549,0,1,275,1,
55563,1,2,1,1,
55571626,22,1,139,1,
555844,1149,1,47,1151,
55591,48,1157,1,49,
55601163,1,50,1174,1,
556151,1169,1,305,1179,
55621,63,1190,1,66,
55631196,1,67,1201,1,
55641478,1417,1,69,1211,
55651,70,1216,1,68,
55661206,1,74,1221,1,
55671013,1226,1,1332,1231,
55681,1048,1236,1,82,
55691252,1,1296,1139,1,
55701341,1269,1,328,1274,
55711,1303,1279,1,1096,
55721284,1,93,1290,1,
55731550,1295,1,352,1301,
55741,2363,1627,17,1628,
557515,1605,1,-1,1,
55765,1629,20,1630,4,
557750,65,0,114,0,
5578103,0,117,0,109,
55790,101,0,110,0,
5580116,0,68,0,101,
55810,99,0,108,0,
558297,0,114,0,97,
55830,116,0,105,0,
5584111,0,110,0,76,
55850,105,0,115,0,
5586116,0,95,0,49,
55870,1,157,1,3,
55881,2,1,1,1631,
558922,1,19,1,107,
55901308,1,1114,1313,1,
55911370,1476,1,118,1316,
55921,1123,1321,1,371,
55931326,1,1377,1332,1,
5594375,1337,1,377,1342,
55951,379,1375,1,380,
55961352,1,883,1412,1,
5597373,1370,1,130,1358,
55981,2401,1632,17,1633,
559915,1605,1,-1,1,
56005,140,1,0,1,
56010,1606,1,143,1380,
56021,1152,1386,1,387,
56031634,16,0,567,1,
56041406,1392,1,1159,1397,
56051,157,1402,1,1413,
56061407,1,1665,1486,1,
5607412,1635,16,0,577,
56081,1094,1636,16,0,
5609602,1,172,1428,1,
5610827,1347,1,1188,1433,
56111,437,1637,16,0,
5612639,1,1442,1438,1,
56131694,1638,16,0,148,
56141,942,1444,1,1195,
56151449,1,1449,1454,1,
56161701,1459,1,447,1464,
56171,188,1471,1,205,
56181481,1,459,1639,17,
56191640,15,1619,1,-1,
56201,5,600,1,0,
56211,0,1620,1,461,
56221641,16,0,602,1,
5623464,1642,17,1643,15,
56241619,1,-1,1,5,
56251644,20,1645,4,28,
562665,0,114,0,103,
56270,117,0,109,0,
5628101,0,110,0,116,
56290,76,0,105,0,
5630115,0,116,0,95,
56310,50,0,1,274,
56321,3,1,4,1,
56333,1646,22,1,138,
56341,1224,1492,1,223,
56351497,1,1730,1502,1,
5636476,1507,1,477,1513,
56371,1231,1518,1,2410,
56381647,16,0,142,1,
5639480,1528,1,1485,1534,
56401,242,1541,1,478,
56411546,1,479,1523,1,
5642481,1648,17,1649,15,
56431619,1,-1,1,5,
56441650,20,1651,4,28,
564565,0,114,0,103,
56460,117,0,109,0,
5647101,0,110,0,116,
56480,76,0,105,0,
5649115,0,116,0,95,
56500,49,0,1,273,
56511,3,1,2,1,
56521,1652,22,1,137,
56531,1001,1551,1,1002,
56541556,1,15,1653,19,
5655361,1,15,1654,5,
56566,1,1114,1655,16,
56570,359,1,1621,1656,
565816,0,638,1,40,
56591657,16,0,564,1,
566019,1114,1,9,1085,
56611,2549,1658,16,0,
5662629,1,16,1659,19,
5663136,1,16,1660,5,
5664134,1,256,1661,16,
56650,187,1,1261,1662,
566616,0,187,1,509,
56671663,16,0,187,1,
56682197,1664,16,0,187,
56691,9,1665,16,0,
5670134,1,2021,707,1,
56712372,1666,17,1667,15,
56721668,4,12,37,0,
567369,0,118,0,101,
56740,110,0,116,0,
56751,-1,1,5,1669,
567620,1670,4,16,69,
56770,118,0,101,0,
5678110,0,116,0,95,
56790,50,0,56,0,
56801,310,1,3,1,
56812,1,1,1671,22,
56821,174,1,1775,1672,
568316,0,187,1,2029,
5684714,1,2030,720,1,
56852031,725,1,2032,730,
56861,2033,735,1,277,
56871673,16,0,187,1,
56882035,741,1,2037,746,
56891,2039,751,1,32,
56901674,16,0,187,1,
56912041,757,1,2043,762,
56921,2044,767,1,40,
56931675,16,0,166,1,
569441,1676,16,0,187,
56951,1297,1677,16,0,
5696187,1,43,1678,16,
56970,187,1,44,1679,
569816,0,166,1,1802,
5699774,1,1804,1680,16,
57000,187,1,299,1681,
570116,0,187,1,2309,
57021682,16,0,187,1,
570352,1683,16,0,187,
57041,1515,1684,16,0,
5705187,1,525,1685,16,
57060,187,1,62,1686,
570716,0,201,1,63,
57081687,16,0,166,1,
57092074,1688,16,0,187,
57101,1574,787,1,71,
57111689,16,0,187,1,
57121833,1690,16,0,330,
57131,1834,1691,16,0,
5714187,1,79,1692,16,
57150,187,1,1335,1693,
571616,0,187,1,322,
57171694,16,0,187,1,
571876,1695,16,0,187,
57191,85,1696,16,0,
5720187,1,89,1697,16,
57210,187,1,2354,853,
57221,2355,858,1,97,
57231698,16,0,187,1,
57242358,807,1,2360,813,
57251,102,1699,16,0,
5726187,1,1860,820,1,
57272533,1700,16,0,468,
57281,346,1701,16,0,
5729187,1,2367,1702,17,
57301703,15,1668,1,-1,
57311,5,1704,20,1705,
57324,16,69,0,118,
57330,101,0,110,0,
5734116,0,95,0,51,
57350,51,0,1,315,
57361,3,1,2,1,
57371,1706,22,1,179,
57381,2368,1707,17,1708,
573915,1668,1,-1,1,
57405,1709,20,1710,4,
574116,69,0,118,0,
5742101,0,110,0,116,
57430,95,0,51,0,
574450,0,1,314,1,
57453,1,2,1,1,
57461711,22,1,178,1,
57472369,1712,17,1713,15,
57481668,1,-1,1,5,
57491714,20,1715,4,16,
575069,0,118,0,101,
57510,110,0,116,0,
575295,0,51,0,49,
57530,1,313,1,3,
57541,2,1,1,1716,
575522,1,177,1,2370,
57561717,17,1718,15,1668,
57571,-1,1,5,1719,
575820,1720,4,16,69,
57590,118,0,101,0,
5760110,0,116,0,95,
57610,51,0,48,0,
57621,312,1,3,1,
57632,1,1,1721,22,
57641,176,1,112,1722,
576516,0,187,1,1117,
57661723,16,0,187,1,
57672373,1724,17,1725,15,
57681668,1,-1,1,5,
57691726,20,1727,4,16,
577069,0,118,0,101,
57710,110,0,116,0,
577295,0,50,0,55,
57730,1,309,1,3,
57741,2,1,1,1728,
577522,1,173,1,2374,
57761729,17,1730,15,1668,
57771,-1,1,5,1731,
577820,1732,4,16,69,
57790,118,0,101,0,
5780110,0,116,0,95,
57810,50,0,54,0,
57821,308,1,3,1,
57832,1,1,1733,22,
57841,172,1,1873,829,
57851,2376,1734,17,1735,
578615,1668,1,-1,1,
57875,1736,20,1737,4,
578816,69,0,118,0,
5789101,0,110,0,116,
57900,95,0,50,0,
579152,0,1,306,1,
57923,1,2,1,1,
57931738,22,1,170,1,
57941875,1739,16,0,444,
57951,2378,1740,17,1741,
579615,1668,1,-1,1,
57975,1742,20,1743,4,
579816,69,0,118,0,
5799101,0,110,0,116,
58000,95,0,50,0,
580150,0,1,304,1,
58023,1,2,1,1,
58031744,22,1,168,1,
58042379,1745,17,1746,15,
58051668,1,-1,1,5,
58061747,20,1748,4,16,
580769,0,118,0,101,
58080,110,0,116,0,
580995,0,50,0,49,
58100,1,303,1,3,
58111,2,1,1,1749,
581222,1,167,1,2380,
58131750,17,1751,15,1668,
58141,-1,1,5,1752,
581520,1753,4,16,69,
58160,118,0,101,0,
5817110,0,116,0,95,
58180,50,0,48,0,
58191,302,1,3,1,
58202,1,1,1754,22,
58211,166,1,2381,1755,
582217,1756,15,1668,1,
5823-1,1,5,1757,20,
58241758,4,16,69,0,
5825118,0,101,0,110,
58260,116,0,95,0,
582749,0,57,0,1,
5828301,1,3,1,2,
58291,1,1759,22,1,
5830165,1,2382,1760,17,
58311761,15,1668,1,-1,
58321,5,1762,20,1763,
58334,16,69,0,118,
58340,101,0,110,0,
5835116,0,95,0,49,
58360,56,0,1,300,
58371,3,1,2,1,
58381,1764,22,1,164,
58391,124,1765,16,0,
5840187,1,2384,1766,17,
58411767,15,1668,1,-1,
58421,5,1768,20,1769,
58434,16,69,0,118,
58440,101,0,110,0,
5845116,0,95,0,49,
58460,54,0,1,298,
58471,3,1,2,1,
58481,1770,22,1,162,
58491,2385,1771,17,1772,
585015,1668,1,-1,1,
58515,1773,20,1774,4,
585216,69,0,118,0,
5853101,0,110,0,116,
58540,95,0,49,0,
585553,0,1,297,1,
58563,1,2,1,1,
58571775,22,1,161,1,
58582386,1776,17,1777,15,
58591668,1,-1,1,5,
58601778,20,1779,4,16,
586169,0,118,0,101,
58620,110,0,116,0,
586395,0,49,0,52,
58640,1,296,1,3,
58651,2,1,1,1780,
586622,1,160,1,2387,
58671781,17,1782,15,1668,
58681,-1,1,5,1783,
586920,1784,4,16,69,
58700,118,0,101,0,
5871110,0,116,0,95,
58720,49,0,51,0,
58731,295,1,3,1,
58742,1,1,1785,22,
58751,159,1,2388,1786,
587617,1787,15,1668,1,
5877-1,1,5,1788,20,
58781789,4,16,69,0,
5879118,0,101,0,110,
58800,116,0,95,0,
588149,0,50,0,1,
5882294,1,3,1,2,
58831,1,1790,22,1,
5884158,1,2389,1791,17,
58851792,15,1668,1,-1,
58861,5,1793,20,1794,
58874,16,69,0,118,
58880,101,0,110,0,
5889116,0,95,0,49,
58900,49,0,1,293,
58911,3,1,2,1,
58921,1795,22,1,157,
58931,2390,1796,17,1797,
589415,1668,1,-1,1,
58955,1798,20,1799,4,
589616,69,0,118,0,
5897101,0,110,0,116,
58980,95,0,49,0,
589948,0,1,292,1,
59003,1,2,1,1,
59011800,22,1,156,1,
59022391,1801,17,1802,15,
59031668,1,-1,1,5,
59041803,20,1804,4,14,
590569,0,118,0,101,
59060,110,0,116,0,
590795,0,57,0,1,
5908291,1,3,1,2,
59091,1,1805,22,1,
5910155,1,2392,1806,17,
59111807,15,1668,1,-1,
59121,5,1808,20,1809,
59134,14,69,0,118,
59140,101,0,110,0,
5915116,0,95,0,56,
59160,1,290,1,3,
59171,2,1,1,1810,
591822,1,154,1,2393,
59191811,17,1812,15,1668,
59201,-1,1,5,1813,
592120,1814,4,14,69,
59220,118,0,101,0,
5923110,0,116,0,95,
59240,55,0,1,289,
59251,3,1,2,1,
59261,1815,22,1,153,
59271,2394,1816,17,1817,
592815,1668,1,-1,1,
59295,1818,20,1819,4,
593014,69,0,118,0,
5931101,0,110,0,116,
59320,95,0,54,0,
59331,288,1,3,1,
59342,1,1,1820,22,
59351,152,1,2395,1821,
593617,1822,15,1668,1,
5937-1,1,5,1823,20,
59381824,4,14,69,0,
5939118,0,101,0,110,
59400,116,0,95,0,
594153,0,1,287,1,
59423,1,2,1,1,
59431825,22,1,151,1,
5944137,1826,16,0,187,
59451,2397,1827,17,1828,
594615,1668,1,-1,1,
59475,1829,20,1830,4,
594814,69,0,118,0,
5949101,0,110,0,116,
59500,95,0,51,0,
59511,285,1,3,1,
59522,1,1,1831,22,
59531,149,1,2398,1832,
595417,1833,15,1668,1,
5955-1,1,5,1834,20,
59561835,4,14,69,0,
5957118,0,101,0,110,
59580,116,0,95,0,
595950,0,1,284,1,
59603,1,2,1,1,
59611836,22,1,148,1,
59622399,1837,17,1838,15,
59631668,1,-1,1,5,
59641839,20,1840,4,14,
596569,0,118,0,101,
59660,110,0,116,0,
596795,0,49,0,1,
5968283,1,3,1,2,
59691,1,1841,22,1,
5970147,1,2400,1842,16,
59710,354,1,381,1843,
597216,0,187,1,1901,
59731844,16,0,187,1,
59741153,1845,16,0,187,
59751,151,1846,16,0,
5976187,1,1407,1847,16,
59770,187,1,1659,1848,
597816,0,187,1,406,
59791849,16,0,187,1,
59801371,1850,16,0,187,
59811,2104,801,1,2105,
59821851,16,0,187,1,
5983166,1852,16,0,187,
59841,1622,1853,16,0,
5985187,1,1931,863,1,
59861932,1854,16,0,484,
59871,1933,1855,16,0,
5988187,1,1876,1856,16,
59890,187,1,431,1857,
599016,0,187,1,1585,
59911858,16,0,187,1,
5992182,1859,16,0,187,
59931,1189,1860,16,0,
5994187,1,2371,1861,17,
59951862,15,1668,1,-1,
59961,5,1863,20,1864,
59974,16,69,0,118,
59980,101,0,110,0,
5999116,0,95,0,50,
60000,57,0,1,311,
60011,3,1,2,1,
60021,1865,22,1,175,
60031,1695,1866,16,0,
6004187,1,2375,1867,17,
60051868,15,1668,1,-1,
60061,5,1869,20,1870,
60074,16,69,0,118,
60080,101,0,110,0,
6009116,0,95,0,50,
60100,53,0,1,307,
60111,3,1,2,1,
60121,1871,22,1,171,
60131,2377,1872,17,1873,
601415,1668,1,-1,1,
60155,1874,20,1875,4,
601616,69,0,118,0,
6017101,0,110,0,116,
60180,95,0,50,0,
601951,0,1,305,1,
60203,1,2,1,1,
60211876,22,1,169,1,
60222135,836,1,447,1877,
602316,0,187,1,199,
60241878,16,0,187,1,
60252383,1879,17,1880,15,
60261668,1,-1,1,5,
60271881,20,1882,4,16,
602869,0,118,0,101,
60290,110,0,116,0,
603095,0,49,0,55,
60310,1,299,1,3,
60321,2,1,1,1883,
603322,1,163,1,1958,
60341884,16,0,187,1,
60352550,1885,16,0,187,
60361,1657,878,1,1658,
60371886,16,0,659,1,
6038459,1887,16,0,187,
60391,462,1888,16,0,
6040187,1,2396,1889,17,
60411890,15,1668,1,-1,
60421,5,1891,20,1892,
60434,14,69,0,118,
60440,101,0,110,0,
6045116,0,95,0,52,
60460,1,286,1,3,
60471,2,1,1,1893,
604822,1,150,1,217,
60491894,16,0,187,1,
60502226,886,1,1225,1895,
605116,0,187,1,1479,
60521896,16,0,187,1,
60531731,1897,16,0,187,
60541,1989,894,1,1990,
60551898,16,0,187,1,
60561443,1899,16,0,187,
60571,236,1900,16,0,
6058187,1,1756,1901,16,
60590,187,1,17,1902,
606019,154,1,17,1903,
60615,116,1,1,1904,
606217,1905,15,1906,4,
606318,37,0,84,0,
6064121,0,112,0,101,
60650,110,0,97,0,
6066109,0,101,0,1,
6067-1,1,5,1907,20,
60681908,4,20,84,0,
6069121,0,112,0,101,
60700,110,0,97,0,
6071109,0,101,0,95,
60720,55,0,1,282,
60731,3,1,2,1,
60741,1909,22,1,146,
60751,2,1910,17,1911,
607615,1906,1,-1,1,
60775,1912,20,1913,4,
607820,84,0,121,0,
6079112,0,101,0,110,
60800,97,0,109,0,
6081101,0,95,0,54,
60820,1,281,1,3,
60831,2,1,1,1914,
608422,1,145,1,3,
60851915,17,1916,15,1906,
60861,-1,1,5,1917,
608720,1918,4,20,84,
60880,121,0,112,0,
6089101,0,110,0,97,
60900,109,0,101,0,
609195,0,53,0,1,
6092280,1,3,1,2,
60931,1,1919,22,1,
6094144,1,4,1920,17,
60951921,15,1906,1,-1,
60961,5,1922,20,1923,
60974,20,84,0,121,
60980,112,0,101,0,
6099110,0,97,0,109,
61000,101,0,95,0,
610152,0,1,279,1,
61023,1,2,1,1,
61031924,22,1,143,1,
61045,1925,17,1926,15,
61051906,1,-1,1,5,
61061927,20,1928,4,20,
610784,0,121,0,112,
61080,101,0,110,0,
610997,0,109,0,101,
61100,95,0,51,0,
61111,278,1,3,1,
61122,1,1,1929,22,
61131,142,1,6,1930,
611417,1931,15,1906,1,
6115-1,1,5,1932,20,
61161933,4,20,84,0,
6117121,0,112,0,101,
61180,110,0,97,0,
6119109,0,101,0,95,
61200,50,0,1,277,
61211,3,1,2,1,
61221,1934,22,1,141,
61231,7,1935,17,1936,
612415,1906,1,-1,1,
61255,1937,20,1938,4,
612620,84,0,121,0,
6127112,0,101,0,110,
61280,97,0,109,0,
6129101,0,95,0,49,
61300,1,276,1,3,
61311,2,1,1,1939,
613222,1,140,1,1514,
61331080,1,9,1085,1,
613410,1603,1,262,1091,
61351,1267,1097,1,1521,
61361102,1,1773,1940,16,
61370,235,1,19,1114,
61381,20,1941,16,0,
6139152,1,2280,1121,1,
6140525,1184,1,2534,1609,
61411,30,1611,1,283,
61421144,1,2543,1942,16,
61430,476,1,1010,1943,
614416,0,592,1,40,
61451133,1,41,1617,1,
614642,1621,1,44,1149,
61471,1260,1068,1,47,
61481151,1,1303,1279,1,
614949,1163,1,50,1174,
61501,48,1157,1,305,
61511179,1,51,1169,1,
615261,1944,16,0,193,
61531,63,1190,1,2073,
61541945,16,0,566,1,
615566,1196,1,67,1201,
61561,68,1206,1,69,
61571211,1,70,1216,1,
615873,1946,16,0,203,
61591,74,1221,1,1013,
61601226,1,328,1274,1,
61611048,1236,1,82,1252,
61621,1840,1947,16,0,
6163364,1,1341,1269,1,
61641094,1948,16,0,654,
61651,1096,1284,1,93,
61661290,1,1550,1295,1,
6167827,1347,1,2363,1627,
61681,1011,1074,1,107,
61691308,1,1114,1313,1,
61701871,1949,16,0,374,
61711,1370,1476,1,1478,
61721417,1,118,1316,1,
61731123,1321,1,1332,1231,
61741,1377,1332,1,375,
61751337,1,1882,1950,16,
61760,406,1,377,1342,
61771,352,1301,1,379,
61781375,1,380,1352,1,
6179130,1358,1,371,1326,
61801,373,1370,1,1012,
61811951,16,0,594,1,
61822401,1632,1,143,1380,
61831,1152,1386,1,1406,
61841392,1,1159,1397,1,
6185157,1402,1,1413,1407,
61861,883,1412,1,1296,
61871139,1,172,1428,1,
61881665,1486,1,1939,1952,
618916,0,452,1,1188,
61901433,1,1442,1438,1,
61912196,1953,16,0,649,
61921,942,1444,1,1195,
61931449,1,1449,1454,1,
61941701,1459,1,447,1464,
61951,188,1471,1,205,
61961481,1,459,1639,1,
6197464,1642,1,1224,1492,
61981,223,1497,1,1730,
61991502,1,476,1507,1,
6200477,1513,1,1231,1518,
62011,2410,1954,16,0,
6202362,1,480,1528,1,
62031485,1534,1,242,1541,
62041,478,1546,1,479,
62051523,1,481,1648,1,
62061001,1551,1,1002,1556,
62071,18,1955,19,496,
62081,18,1956,5,83,
62091,1011,1074,1,1012,
62101957,16,0,494,1,
62111013,1226,1,262,1091,
62121,1267,1958,16,0,
6213494,1,515,1959,16,
62140,494,1,1521,1960,
621516,0,494,1,525,
62161184,1,283,1144,1,
621740,1133,1,42,1961,
621816,0,494,1,44,
62191149,1,2556,1962,16,
62200,494,1,47,1151,
62211,1303,1963,16,0,
6222494,1,1555,1964,16,
62230,494,1,50,1174,
62241,48,1157,1,49,
62251163,1,51,1169,1,
622663,1190,1,305,1179,
62271,66,1196,1,67,
62281201,1,68,1206,1,
622969,1211,1,70,1216,
62301,73,1965,16,0,
6231494,1,74,1221,1,
6232328,1274,1,1048,1966,
623316,0,494,1,82,
62341967,16,0,494,1,
62351840,1968,16,0,494,
62361,1591,1969,16,0,
6237494,1,1341,1970,16,
62380,494,1,1096,1284,
62391,93,1290,1,352,
62401301,1,107,1971,16,
62410,494,1,1114,1313,
62421,118,1972,16,0,
6243494,1,1123,1973,16,
62440,494,1,371,1326,
62451,1628,1974,16,0,
6246494,1,375,1337,1,
62471882,1975,16,0,494,
62481,377,1342,1,379,
62491375,1,380,1352,1,
6250883,1976,16,0,494,
62511,373,1370,1,130,
62521977,16,0,494,1,
6253143,1978,16,0,494,
62541,387,1979,16,0,
6255494,1,1159,1980,16,
62560,494,1,157,1981,
625716,0,494,1,1413,
62581982,16,0,494,1,
62591665,1983,16,0,494,
62601,412,1984,16,0,
6261494,1,1377,1985,16,
62620,494,1,172,1986,
626316,0,494,1,1939,
62641987,16,0,494,1,
6265437,1988,16,0,494,
62661,188,1989,16,0,
6267494,1,942,1990,16,
62680,494,1,1195,1991,
626916,0,494,1,1449,
62701992,16,0,494,1,
62711701,1993,16,0,494,
62721,447,1464,1,205,
62731994,16,0,494,1,
6274827,1995,16,0,494,
62751,223,1996,16,0,
6276494,1,476,1507,1,
6277477,1513,1,1231,1997,
627816,0,494,1,479,
62791523,1,480,1528,1,
62801485,1998,16,0,494,
62811,1737,1999,16,0,
6282494,1,242,2000,16,
62830,494,1,478,1546,
62841,1001,1551,1,1002,
62851556,1,19,2001,19,
6286227,1,19,2002,5,
6287171,1,256,2003,16,
62880,225,1,1261,2004,
628916,0,225,1,1011,
62901074,1,1012,2005,16,
62910,483,1,1515,2006,
629216,0,225,1,262,
62931091,1,1267,2007,16,
62940,483,1,2021,707,
62951,1521,2008,16,0,
6296483,1,1775,2009,16,
62970,225,1,2029,714,
62981,2030,720,1,2031,
6299725,1,2032,730,1,
63002033,735,1,277,2010,
630116,0,225,1,2035,
6302741,1,2037,746,1,
63032039,751,1,32,2011,
630416,0,225,1,2041,
6305757,1,2043,762,1,
63062044,767,1,40,1133,
63071,41,2012,16,0,
6308225,1,42,2013,16,
63090,483,1,43,2014,
631016,0,225,1,44,
63111149,1,1802,774,1,
63122556,2015,16,0,483,
63131,1804,2016,16,0,
6314225,1,48,1157,1,
631549,1163,1,2309,2017,
631616,0,225,1,51,
63171169,1,52,2018,16,
63180,225,1,47,1151,
63191,305,1179,1,50,
63201174,1,509,2019,16,
63210,225,1,299,2020,
632216,0,225,1,283,
63231144,1,63,1190,1,
63241002,1556,1,66,1196,
63251,67,1201,1,68,
63261206,1,69,1211,1,
632770,1216,1,71,2021,
632816,0,225,1,73,
63292022,16,0,483,1,
633074,1221,1,1013,1226,
63311,76,2023,16,0,
6332225,1,1834,2024,16,
63330,225,1,1048,2025,
633416,0,483,1,79,
63352026,16,0,225,1,
63361335,2027,16,0,225,
63371,82,2028,16,0,
6338483,1,1840,2029,16,
63390,483,1,1297,2030,
634016,0,225,1,85,
63412031,16,0,225,1,
63421341,2032,16,0,483,
63431,89,2033,16,0,
6344225,1,1303,2034,16,
63450,483,1,1096,1284,
63461,93,1290,1,2354,
6347853,1,2355,858,1,
634897,2035,16,0,225,
63491,2358,807,1,2360,
6350813,1,102,2036,16,
63510,225,1,1860,820,
63521,107,2037,16,0,
6353483,1,1114,1313,1,
6354112,2038,16,0,225,
63551,1117,2039,16,0,
6356225,1,352,1301,1,
63571873,829,1,118,2040,
635816,0,483,1,1123,
63592041,16,0,483,1,
6360371,1326,1,2550,2042,
636116,0,225,1,1377,
63622043,16,0,483,1,
6363124,2044,16,0,225,
63641,1882,2045,16,0,
6365483,1,377,1342,1,
63662135,836,1,827,2046,
636716,0,483,1,380,
63681352,1,130,2047,16,
63690,483,1,322,2048,
637016,0,225,1,2074,
63712049,16,0,225,1,
6372373,1370,1,387,2050,
637316,0,483,1,137,
63742051,16,0,225,1,
6375515,2052,16,0,483,
63761,379,1375,1,143,
63772053,16,0,483,1,
63781901,2054,16,0,225,
63791,2197,2055,16,0,
6380225,1,1153,2056,16,
63810,225,1,375,1337,
63821,151,2057,16,0,
6383225,1,1407,2058,16,
63840,225,1,1659,2059,
638516,0,225,1,1159,
63862060,16,0,483,1,
6387381,2061,16,0,225,
63881,157,2062,16,0,
6389483,1,1413,2063,16,
63900,483,1,883,2064,
639116,0,483,1,1371,
63922065,16,0,225,1,
6393328,1274,1,2104,801,
63941,2105,2066,16,0,
6395225,1,166,2067,16,
63960,225,1,346,2068,
639716,0,225,1,1622,
63982069,16,0,225,1,
6399406,2070,16,0,225,
64001,1574,787,1,172,
64012071,16,0,483,1,
64021931,863,1,412,2072,
640316,0,483,1,1933,
64042073,16,0,225,1,
64051876,2074,16,0,225,
64061,431,2075,16,0,
6407225,1,1585,2076,16,
64080,225,1,182,2077,
640916,0,225,1,1628,
64102078,16,0,483,1,
64111189,2079,16,0,225,
64121,437,2080,16,0,
6413483,1,1591,2081,16,
64140,483,1,188,2082,
641516,0,483,1,1695,
64162083,16,0,225,1,
64171195,2084,16,0,483,
64181,1449,2085,16,0,
6419483,1,1701,2086,16,
64200,483,1,447,2087,
642116,0,225,1,199,
64222088,16,0,225,1,
64231958,2089,16,0,225,
64241,525,2090,16,0,
6425225,1,1657,878,1,
6426205,2091,16,0,483,
64271,459,2092,16,0,
6428225,1,462,2093,16,
64290,225,1,1665,2094,
643016,0,483,1,217,
64312095,16,0,225,1,
64322226,886,1,942,2096,
643316,0,483,1,1225,
64342097,16,0,225,1,
6435223,2098,16,0,483,
64361,1479,2099,16,0,
6437225,1,1731,2100,16,
64380,225,1,477,1513,
64391,1231,2101,16,0,
6440483,1,479,1523,1,
6441480,1528,1,1485,2102,
644216,0,483,1,1737,
64432103,16,0,483,1,
64441989,894,1,1990,2104,
644516,0,225,1,1443,
64462105,16,0,225,1,
6447236,2106,16,0,225,
64481,476,1507,1,242,
64492107,16,0,483,1,
6450478,1546,1,1939,2108,
645116,0,483,1,1001,
64521551,1,1555,2109,16,
64530,483,1,1756,2110,
645416,0,225,1,20,
64552111,19,458,1,20,
64562112,5,83,1,1011,
64571074,1,1012,2113,16,
64580,456,1,1013,1226,
64591,262,1091,1,1267,
64602114,16,0,456,1,
6461515,2115,16,0,456,
64621,1521,2116,16,0,
6463456,1,525,1184,1,
6464283,1144,1,40,1133,
64651,42,2117,16,0,
6466456,1,44,1149,1,
64672556,2118,16,0,456,
64681,47,1151,1,1303,
64692119,16,0,456,1,
64701555,2120,16,0,456,
64711,50,1174,1,48,
64721157,1,49,1163,1,
647351,1169,1,63,1190,
64741,305,1179,1,66,
64751196,1,67,1201,1,
647668,1206,1,69,1211,
64771,70,1216,1,73,
64782121,16,0,456,1,
647974,1221,1,328,2122,
648016,0,456,1,1048,
64812123,16,0,456,1,
648282,2124,16,0,456,
64831,1840,2125,16,0,
6484456,1,1591,2126,16,
64850,456,1,1341,2127,
648616,0,456,1,1096,
64871284,1,93,1290,1,
6488352,2128,16,0,456,
64891,107,2129,16,0,
6490456,1,1114,1313,1,
6491118,2130,16,0,456,
64921,1123,2131,16,0,
6493456,1,371,1326,1,
64941628,2132,16,0,456,
64951,375,1337,1,1882,
64962133,16,0,456,1,
6497377,1342,1,379,1375,
64981,380,1352,1,883,
64992134,16,0,456,1,
6500373,1370,1,130,2135,
650116,0,456,1,143,
65022136,16,0,456,1,
6503387,2137,16,0,456,
65041,1159,2138,16,0,
6505456,1,157,2139,16,
65060,456,1,1413,2140,
650716,0,456,1,1665,
65082141,16,0,456,1,
6509412,2142,16,0,456,
65101,1377,2143,16,0,
6511456,1,172,2144,16,
65120,456,1,1939,2145,
651316,0,456,1,437,
65142146,16,0,456,1,
6515188,2147,16,0,456,
65161,942,2148,16,0,
6517456,1,1195,2149,16,
65180,456,1,1449,2150,
651916,0,456,1,1701,
65202151,16,0,456,1,
6521447,1464,1,205,2152,
652216,0,456,1,827,
65232153,16,0,456,1,
6524223,2154,16,0,456,
65251,476,1507,1,477,
65261513,1,1231,2155,16,
65270,456,1,479,1523,
65281,480,1528,1,1485,
65292156,16,0,456,1,
65301737,2157,16,0,456,
65311,242,2158,16,0,
6532456,1,478,1546,1,
65331001,1551,1,1002,1556,
65341,21,2159,19,449,
65351,21,2160,5,83,
65361,1011,1074,1,1012,
65372161,16,0,447,1,
65381013,1226,1,262,1091,
65391,1267,2162,16,0,
6540447,1,515,2163,16,
65410,447,1,1521,2164,
654216,0,447,1,525,
65431184,1,283,1144,1,
654440,1133,1,42,2165,
654516,0,447,1,44,
65461149,1,2556,2166,16,
65470,447,1,47,1151,
65481,1303,2167,16,0,
6549447,1,1555,2168,16,
65500,447,1,50,1174,
65511,48,1157,1,49,
65521163,1,51,1169,1,
655363,1190,1,305,1179,
65541,66,1196,1,67,
65551201,1,68,1206,1,
655669,1211,1,70,1216,
65571,73,2169,16,0,
6558447,1,74,1221,1,
6559328,2170,16,0,447,
65601,1048,2171,16,0,
6561447,1,82,2172,16,
65620,447,1,1840,2173,
656316,0,447,1,1591,
65642174,16,0,447,1,
65651341,2175,16,0,447,
65661,1096,1284,1,93,
65671290,1,352,2176,16,
65680,447,1,107,2177,
656916,0,447,1,1114,
65701313,1,118,2178,16,
65710,447,1,1123,2179,
657216,0,447,1,371,
65731326,1,1628,2180,16,
65740,447,1,375,1337,
65751,1882,2181,16,0,
6576447,1,377,1342,1,
6577379,1375,1,380,1352,
65781,883,2182,16,0,
6579447,1,373,1370,1,
6580130,2183,16,0,447,
65811,143,2184,16,0,
6582447,1,387,2185,16,
65830,447,1,1159,2186,
658416,0,447,1,157,
65852187,16,0,447,1,
65861413,2188,16,0,447,
65871,1665,2189,16,0,
6588447,1,412,2190,16,
65890,447,1,1377,2191,
659016,0,447,1,172,
65912192,16,0,447,1,
65921939,2193,16,0,447,
65931,437,2194,16,0,
6594447,1,188,2195,16,
65950,447,1,942,2196,
659616,0,447,1,1195,
65972197,16,0,447,1,
65981449,2198,16,0,447,
65991,1701,2199,16,0,
6600447,1,447,1464,1,
6601205,2200,16,0,447,
66021,827,2201,16,0,
6603447,1,223,2202,16,
66040,447,1,476,1507,
66051,477,1513,1,1231,
66062203,16,0,447,1,
6607479,1523,1,480,1528,
66081,1485,2204,16,0,
6609447,1,1737,2205,16,
66100,447,1,242,2206,
661116,0,447,1,478,
66121546,1,1001,1551,1,
66131002,1556,1,22,2207,
661419,435,1,22,2208,
66155,83,1,1011,1074,
66161,1012,2209,16,0,
6617433,1,1013,1226,1,
6618262,1091,1,1267,2210,
661916,0,433,1,515,
66202211,16,0,433,1,
66211521,2212,16,0,433,
66221,525,1184,1,283,
66231144,1,40,1133,1,
662442,2213,16,0,433,
66251,44,1149,1,2556,
66262214,16,0,433,1,
662747,1151,1,1303,2215,
662816,0,433,1,1555,
66292216,16,0,433,1,
663050,1174,1,48,1157,
66311,49,1163,1,51,
66321169,1,63,1190,1,
6633305,1179,1,66,1196,
66341,67,1201,1,68,
66351206,1,69,1211,1,
663670,1216,1,73,2217,
663716,0,433,1,74,
66381221,1,328,2218,16,
66390,433,1,1048,2219,
664016,0,433,1,82,
66412220,16,0,433,1,
66421840,2221,16,0,433,
66431,1591,2222,16,0,
6644433,1,1341,2223,16,
66450,433,1,1096,1284,
66461,93,1290,1,352,
66472224,16,0,433,1,
6648107,2225,16,0,433,
66491,1114,1313,1,118,
66502226,16,0,433,1,
66511123,2227,16,0,433,
66521,371,1326,1,1628,
66532228,16,0,433,1,
6654375,1337,1,1882,2229,
665516,0,433,1,377,
66561342,1,379,1375,1,
6657380,1352,1,883,2230,
665816,0,433,1,373,
66591370,1,130,2231,16,
66600,433,1,143,2232,
666116,0,433,1,387,
66622233,16,0,433,1,
66631159,2234,16,0,433,
66641,157,2235,16,0,
6665433,1,1413,2236,16,
66660,433,1,1665,2237,
666716,0,433,1,412,
66682238,16,0,433,1,
66691377,2239,16,0,433,
66701,172,2240,16,0,
6671433,1,1939,2241,16,
66720,433,1,437,2242,
667316,0,433,1,188,
66742243,16,0,433,1,
6675942,2244,16,0,433,
66761,1195,2245,16,0,
6677433,1,1449,2246,16,
66780,433,1,1701,2247,
667916,0,433,1,447,
66801464,1,205,2248,16,
66810,433,1,827,2249,
668216,0,433,1,223,
66832250,16,0,433,1,
6684476,1507,1,477,1513,
66851,1231,2251,16,0,
6686433,1,479,1523,1,
6687480,1528,1,1485,2252,
668816,0,433,1,1737,
66892253,16,0,433,1,
6690242,2254,16,0,433,
66911,478,1546,1,1001,
66921551,1,1002,1556,1,
669323,2255,19,508,1,
669423,2256,5,36,1,
66952074,2257,16,0,506,
66961,1860,820,1,2197,
66972258,16,0,506,1,
66982309,2259,16,0,506,
66991,1657,878,1,2031,
6700725,1,1989,894,1,
67011990,2260,16,0,506,
67021,1775,2261,16,0,
6703506,1,32,2262,16,
67040,506,1,2104,801,
67051,2105,2263,16,0,
6706506,1,2226,886,1,
67071901,2264,16,0,506,
67081,1802,774,1,2021,
6709707,1,1804,2265,16,
67100,506,1,2135,836,
67111,2354,853,1,2355,
6712858,1,2029,714,1,
67132030,720,1,2358,807,
67141,2032,730,1,2360,
6715813,1,2035,741,1,
67162037,746,1,2039,751,
67171,1931,863,1,2041,
6718757,1,1873,829,1,
67192043,762,1,2044,767,
67201,2033,735,1,1574,
6721787,1,1958,2266,16,
67220,506,1,24,2267,
672319,177,1,24,2268,
67245,5,1,44,2269,
672516,0,175,1,377,
67262270,16,0,544,1,
672740,2271,16,0,662,
67281,63,2272,16,0,
6729195,1,373,2273,16,
67300,540,1,25,2274,
673119,339,1,25,2275,
67325,172,1,256,2276,
673316,0,549,1,1261,
67342277,16,0,549,1,
67351011,1074,1,1012,2278,
673616,0,337,1,1515,
67372279,16,0,549,1,
6738262,1091,1,1267,2280,
673916,0,337,1,2021,
6740707,1,1521,2281,16,
67410,337,1,1775,2282,
674216,0,549,1,2029,
6743714,1,2030,720,1,
67442031,725,1,2032,730,
67451,2033,735,1,277,
67462283,16,0,549,1,
67472035,741,1,2037,746,
67481,2039,751,1,32,
67492284,16,0,549,1,
67502041,757,1,2043,762,
67511,2044,767,1,40,
67521133,1,41,2285,16,
67530,549,1,42,2286,
675416,0,337,1,43,
67552287,16,0,549,1,
675644,1149,1,1802,774,
67571,2556,2288,16,0,
6758337,1,1804,2289,16,
67590,549,1,48,1157,
67601,49,1163,1,2309,
67612290,16,0,549,1,
676251,1169,1,52,2291,
676316,0,549,1,47,
67641151,1,305,1179,1,
676550,1174,1,509,2292,
676616,0,549,1,299,
67672293,16,0,549,1,
676862,2294,16,0,549,
67691,63,1190,1,1002,
67701556,1,66,1196,1,
677167,1201,1,68,1206,
67721,69,1211,1,70,
67731216,1,71,2295,16,
67740,549,1,283,1144,
67751,73,2296,16,0,
6776337,1,74,1221,1,
67771013,1226,1,76,2297,
677816,0,549,1,1834,
67792298,16,0,549,1,
67801048,1236,1,79,2299,
678116,0,549,1,1335,
67822300,16,0,549,1,
678382,2301,16,0,337,
67841,1840,2302,16,0,
6785337,1,1297,2303,16,
67860,549,1,85,2304,
678716,0,549,1,1341,
67882305,16,0,337,1,
678989,2306,16,0,549,
67901,1303,2307,16,0,
6791337,1,1096,1284,1,
679293,1290,1,2354,853,
67931,2355,858,1,97,
67942308,16,0,549,1,
67952358,807,1,2360,813,
67961,102,2309,16,0,
6797549,1,1860,820,1,
6798107,2310,16,0,337,
67991,1114,1313,1,112,
68002311,16,0,549,1,
68011117,2312,16,0,549,
68021,352,1301,1,1873,
6803829,1,118,1316,1,
68041123,2313,16,0,337,
68051,371,1326,1,2550,
68062314,16,0,549,1,
68071377,2315,16,0,337,
68081,124,2316,16,0,
6809549,1,1882,2317,16,
68100,337,1,377,1342,
68111,2135,836,1,827,
68122318,16,0,337,1,
6813380,1352,1,130,1358,
68141,322,2319,16,0,
6815549,1,2074,2320,16,
68160,549,1,373,1370,
68171,387,2321,16,0,
6818337,1,137,2322,16,
68190,549,1,515,2323,
682016,0,337,1,379,
68211375,1,143,2324,16,
68220,337,1,1901,2325,
682316,0,549,1,2197,
68242326,16,0,549,1,
68251153,2327,16,0,549,
68261,375,1337,1,151,
68272328,16,0,549,1,
68281407,2329,16,0,549,
68291,1659,2330,16,0,
6830549,1,1159,2331,16,
68310,337,1,381,2332,
683216,0,549,1,157,
68332333,16,0,337,1,
68341413,2334,16,0,337,
68351,883,2335,16,0,
6836337,1,1371,2336,16,
68370,549,1,328,1274,
68381,2104,801,1,2105,
68392337,16,0,549,1,
6840166,2338,16,0,549,
68411,346,2339,16,0,
6842549,1,1622,2340,16,
68430,549,1,406,2341,
684416,0,549,1,1574,
6845787,1,172,1428,1,
68461931,863,1,412,2342,
684716,0,337,1,1933,
68482343,16,0,549,1,
68491876,2344,16,0,549,
68501,431,2345,16,0,
6851549,1,1585,2346,16,
68520,549,1,182,2347,
685316,0,549,1,1628,
68542348,16,0,337,1,
68551189,2349,16,0,549,
68561,437,2350,16,0,
6857337,1,1591,2351,16,
68580,337,1,188,1471,
68591,1695,2352,16,0,
6860549,1,1195,2353,16,
68610,337,1,1449,2354,
686216,0,337,1,1701,
68632355,16,0,337,1,
6864447,2356,16,0,549,
68651,199,2357,16,0,
6866549,1,1958,2358,16,
68670,549,1,525,2359,
686816,0,549,1,1657,
6869878,1,205,2360,16,
68700,337,1,459,2361,
687116,0,549,1,462,
68722362,16,0,549,1,
68731665,2363,16,0,337,
68741,217,2364,16,0,
6875549,1,2226,886,1,
6876942,1444,1,1225,2365,
687716,0,549,1,223,
68782366,16,0,337,1,
68791479,2367,16,0,549,
68801,1731,2368,16,0,
6881549,1,477,1513,1,
68821231,2369,16,0,337,
68831,479,1523,1,480,
68841528,1,1485,2370,16,
68850,337,1,1737,2371,
688616,0,337,1,1989,
6887894,1,1990,2372,16,
68880,549,1,1443,2373,
688916,0,549,1,236,
68902374,16,0,549,1,
6891476,1507,1,242,2375,
689216,0,337,1,478,
68931546,1,1939,2376,16,
68940,337,1,1001,1551,
68951,1555,2377,16,0,
6896337,1,1756,2378,16,
68970,549,1,26,2379,
689819,369,1,26,2380,
68995,83,1,1011,1074,
69001,1012,2381,16,0,
6901367,1,1013,1226,1,
6902262,1091,1,1267,2382,
690316,0,367,1,515,
69042383,16,0,648,1,
69051521,2384,16,0,367,
69061,525,1184,1,283,
69071144,1,40,1133,1,
690842,2385,16,0,367,
69091,44,1149,1,2556,
69102386,16,0,367,1,
691147,1151,1,1303,2387,
691216,0,367,1,1555,
69132388,16,0,367,1,
691450,1174,1,48,1157,
69151,49,1163,1,51,
69161169,1,63,1190,1,
6917305,1179,1,66,1196,
69181,67,1201,1,68,
69191206,1,69,1211,1,
692070,1216,1,73,2389,
692116,0,367,1,74,
69221221,1,328,1274,1,
69231048,1236,1,82,2390,
692416,0,367,1,1840,
69252391,16,0,367,1,
69261591,2392,16,0,367,
69271,1341,2393,16,0,
6928367,1,1096,1284,1,
692993,1290,1,352,1301,
69301,107,2394,16,0,
6931367,1,1114,1313,1,
6932118,1316,1,1123,2395,
693316,0,367,1,371,
69341326,1,1628,2396,16,
69350,367,1,375,1337,
69361,1882,2397,16,0,
6937367,1,377,1342,1,
6938379,1375,1,380,1352,
69391,883,2398,16,0,
6940367,1,373,1370,1,
6941130,1358,1,143,2399,
694216,0,367,1,387,
69432400,16,0,367,1,
69441159,2401,16,0,367,
69451,157,2402,16,0,
6946367,1,1413,2403,16,
69470,367,1,1665,2404,
694816,0,367,1,412,
69492405,16,0,367,1,
69501377,2406,16,0,367,
69511,172,1428,1,1939,
69522407,16,0,367,1,
6953437,2408,16,0,587,
69541,188,1471,1,942,
69551444,1,1195,2409,16,
69560,367,1,1449,2410,
695716,0,367,1,1701,
69582411,16,0,367,1,
6959447,1464,1,205,2412,
696016,0,367,1,827,
69612413,16,0,367,1,
6962223,2414,16,0,367,
69631,476,1507,1,477,
69641513,1,1231,2415,16,
69650,367,1,479,1523,
69661,480,1528,1,1485,
69672416,16,0,367,1,
69681737,2417,16,0,367,
69691,242,2418,16,0,
6970367,1,478,1546,1,
69711001,1551,1,1002,1556,
69721,27,2419,19,597,
69731,27,2420,5,91,
69741,256,2421,16,0,
6975595,1,1261,2422,16,
69760,595,1,509,2423,
697716,0,595,1,2197,
69782424,16,0,595,1,
69791515,2425,16,0,595,
69801,2021,707,1,1775,
69812426,16,0,595,1,
69822029,714,1,2030,720,
69831,2031,725,1,2032,
6984730,1,2033,735,1,
6985277,2427,16,0,595,
69861,2035,741,1,2037,
6987746,1,2039,751,1,
698832,2428,16,0,595,
69891,2041,757,1,2043,
6990762,1,2044,767,1,
69912550,2429,16,0,595,
69921,41,2430,16,0,
6993595,1,1297,2431,16,
69940,595,1,43,2432,
699516,0,595,1,1802,
6996774,1,1804,2433,16,
69970,595,1,299,2434,
699816,0,595,1,2309,
69992435,16,0,595,1,
700052,2436,16,0,595,
70011,525,2437,16,0,
7002595,1,62,2438,16,
70030,595,1,2074,2439,
700416,0,595,1,1574,
7005787,1,71,2440,16,
70060,595,1,76,2441,
700716,0,595,1,1834,
70082442,16,0,595,1,
70091585,2443,16,0,595,
70101,1335,2444,16,0,
7011595,1,79,2445,16,
70120,595,1,85,2446,
701316,0,595,1,89,
70142447,16,0,595,1,
7015346,2448,16,0,595,
70161,2104,801,1,2105,
70172449,16,0,595,1,
70182358,807,1,2360,813,
70191,97,2450,16,0,
7020595,1,1860,820,1,
7021102,2451,16,0,595,
70221,112,2452,16,0,
7023595,1,1117,2453,16,
70240,595,1,1873,829,
70251,1876,2454,16,0,
7026595,1,124,2455,16,
70270,595,1,2135,836,
70281,381,2456,16,0,
7029595,1,322,2457,16,
70300,595,1,137,2458,
703116,0,595,1,1901,
70322459,16,0,595,1,
70331153,2460,16,0,595,
70341,151,2461,16,0,
7035595,1,1407,2462,16,
70360,595,1,1659,2463,
703716,0,595,1,406,
70382464,16,0,595,1,
70391371,2465,16,0,595,
70401,166,2466,16,0,
7041595,1,1622,2467,16,
70420,595,1,2354,853,
70431,2355,858,1,1931,
7044863,1,1933,2468,16,
70450,595,1,431,2469,
704616,0,595,1,182,
70472470,16,0,595,1,
70481189,2471,16,0,595,
70491,1443,2472,16,0,
7050595,1,1695,2473,16,
70510,595,1,447,2474,
705216,0,595,1,199,
70532475,16,0,595,1,
70541958,2476,16,0,595,
70551,1657,878,1,459,
70562477,16,0,595,1,
7057462,2478,16,0,595,
70581,217,2479,16,0,
7059595,1,2226,886,1,
70601225,2480,16,0,595,
70611,1479,2481,16,0,
7062595,1,1731,2482,16,
70630,595,1,1989,894,
70641,1990,2483,16,0,
7065595,1,236,2484,16,
70660,595,1,1756,2485,
706716,0,595,1,28,
70682486,19,627,1,28,
70692487,5,60,1,328,
70701274,1,223,1497,1,
70711096,1284,1,118,1316,
70721,883,1412,1,525,
70731184,1,1001,1551,1,
7074130,1358,1,459,1639,
70751,1114,1313,1,352,
70761301,1,447,1464,1,
7077464,1642,1,1011,1074,
70781,1013,1226,1,242,
70791541,1,143,1380,1,
708040,1133,1,41,1617,
70811,42,1621,1,479,
70821523,1,44,1149,1,
7083481,1648,1,373,1370,
70841,47,1151,1,157,
70851402,1,49,1163,1,
708650,1174,1,48,1157,
70871,379,1375,1,380,
70881352,1,51,1169,1,
7089476,1507,1,371,1326,
70901,478,1546,1,1048,
70911236,1,375,1337,1,
7092172,1428,1,262,1091,
70931,283,1144,1,63,
70941190,1,67,1201,1,
709568,1206,1,69,1211,
70961,66,1196,1,461,
70972488,16,0,625,1,
709874,1221,1,377,1342,
70991,1002,1556,1,70,
71001216,1,188,1471,1,
710182,1252,1,305,1179,
71021,477,1513,1,827,
71031347,1,93,1290,1,
7104480,1528,1,205,1481,
71051,942,1444,1,107,
71061308,1,29,2489,19,
7107304,1,29,2490,5,
710883,1,1011,1074,1,
71091012,2491,16,0,302,
71101,1013,1226,1,262,
71111091,1,1267,2492,16,
71120,302,1,515,2493,
711316,0,302,1,1521,
71142494,16,0,302,1,
7115525,1184,1,283,1144,
71161,40,1133,1,42,
71172495,16,0,302,1,
711844,1149,1,2556,2496,
711916,0,302,1,47,
71201151,1,1303,2497,16,
71210,302,1,1555,2498,
712216,0,302,1,50,
71231174,1,48,1157,1,
712449,1163,1,51,1169,
71251,63,1190,1,305,
71261179,1,66,1196,1,
712767,1201,1,68,1206,
71281,69,1211,1,70,
71291216,1,73,2499,16,
71300,302,1,74,1221,
71311,328,1274,1,1048,
71321236,1,82,2500,16,
71330,302,1,1840,2501,
713416,0,302,1,1591,
71352502,16,0,302,1,
71361341,2503,16,0,302,
71371,1096,1284,1,93,
71381290,1,352,1301,1,
7139107,2504,16,0,302,
71401,1114,1313,1,118,
71411316,1,1123,2505,16,
71420,302,1,371,1326,
71431,1628,2506,16,0,
7144302,1,375,1337,1,
71451882,2507,16,0,302,
71461,377,1342,1,379,
71471375,1,380,1352,1,
7148883,2508,16,0,302,
71491,373,1370,1,130,
71501358,1,143,1380,1,
7151387,2509,16,0,302,
71521,1159,2510,16,0,
7153302,1,157,1402,1,
71541413,2511,16,0,302,
71551,1665,2512,16,0,
7156302,1,412,2513,16,
71570,302,1,1377,2514,
715816,0,302,1,172,
71591428,1,1939,2515,16,
71600,302,1,437,2516,
716116,0,302,1,188,
71621471,1,942,1444,1,
71631195,2517,16,0,302,
71641,1449,2518,16,0,
7165302,1,1701,2519,16,
71660,302,1,447,1464,
71671,205,2520,16,0,
7168302,1,827,2521,16,
71690,302,1,223,2522,
717016,0,302,1,476,
71711507,1,477,1513,1,
71721231,2523,16,0,302,
71731,479,1523,1,480,
71741528,1,1485,2524,16,
71750,302,1,1737,2525,
717616,0,302,1,242,
71772526,16,0,302,1,
7178478,1546,1,1001,1551,
71791,1002,1556,1,30,
71802527,19,272,1,30,
71812528,5,83,1,1011,
71821074,1,1012,2529,16,
71830,270,1,1013,1226,
71841,262,1091,1,1267,
71852530,16,0,270,1,
7186515,2531,16,0,270,
71871,1521,2532,16,0,
7188270,1,525,1184,1,
7189283,1144,1,40,1133,
71901,42,2533,16,0,
7191270,1,44,1149,1,
71922556,2534,16,0,270,
71931,47,1151,1,1303,
71942535,16,0,270,1,
71951555,2536,16,0,270,
71961,50,1174,1,48,
71971157,1,49,1163,1,
719851,1169,1,63,1190,
71991,305,1179,1,66,
72001196,1,67,1201,1,
720168,1206,1,69,1211,
72021,70,1216,1,73,
72032537,16,0,270,1,
720474,1221,1,328,1274,
72051,1048,1236,1,82,
72062538,16,0,270,1,
72071840,2539,16,0,270,
72081,1591,2540,16,0,
7209270,1,1341,2541,16,
72100,270,1,1096,1284,
72111,93,1290,1,352,
72121301,1,107,2542,16,
72130,270,1,1114,1313,
72141,118,1316,1,1123,
72152543,16,0,270,1,
7216371,1326,1,1628,2544,
721716,0,270,1,375,
72181337,1,1882,2545,16,
72190,270,1,377,1342,
72201,379,1375,1,380,
72211352,1,883,2546,16,
72220,270,1,373,1370,
72231,130,1358,1,143,
72241380,1,387,2547,16,
72250,270,1,1159,2548,
722616,0,270,1,157,
72271402,1,1413,2549,16,
72280,270,1,1665,2550,
722916,0,270,1,412,
72302551,16,0,270,1,
72311377,2552,16,0,270,
72321,172,1428,1,1939,
72332553,16,0,270,1,
7234437,2554,16,0,270,
72351,188,1471,1,942,
72361444,1,1195,2555,16,
72370,270,1,1449,2556,
723816,0,270,1,1701,
72392557,16,0,270,1,
7240447,1464,1,205,2558,
724116,0,270,1,827,
72422559,16,0,270,1,
7243223,2560,16,0,270,
72441,476,1507,1,477,
72451513,1,1231,2561,16,
72460,270,1,479,1523,
72471,480,1528,1,1485,
72482562,16,0,270,1,
72491737,2563,16,0,270,
72501,242,2564,16,0,
7251270,1,478,1546,1,
72521001,1551,1,1002,1556,
72531,31,2565,19,251,
72541,31,2566,5,83,
72551,1011,1074,1,1012,
72562567,16,0,249,1,
72571013,1226,1,262,1091,
72581,1267,2568,16,0,
7259249,1,515,2569,16,
72600,249,1,1521,2570,
726116,0,249,1,525,
72621184,1,283,1144,1,
726340,1133,1,42,2571,
726416,0,249,1,44,
72651149,1,2556,2572,16,
72660,249,1,47,1151,
72671,1303,2573,16,0,
7268249,1,1555,2574,16,
72690,249,1,50,1174,
72701,48,1157,1,49,
72711163,1,51,1169,1,
727263,1190,1,305,1179,
72731,66,1196,1,67,
72741201,1,68,1206,1,
727569,1211,1,70,1216,
72761,73,2575,16,0,
7277249,1,74,1221,1,
7278328,1274,1,1048,1236,
72791,82,2576,16,0,
7280249,1,1840,2577,16,
72810,249,1,1591,2578,
728216,0,249,1,1341,
72832579,16,0,249,1,
72841096,1284,1,93,1290,
72851,352,1301,1,107,
72862580,16,0,249,1,
72871114,1313,1,118,1316,
72881,1123,2581,16,0,
7289249,1,371,1326,1,
72901628,2582,16,0,249,
72911,375,1337,1,1882,
72922583,16,0,249,1,
7293377,1342,1,379,1375,
72941,380,1352,1,883,
72952584,16,0,249,1,
7296373,1370,1,130,1358,
72971,143,2585,16,0,
7298249,1,387,2586,16,
72990,249,1,1159,2587,
730016,0,249,1,157,
73012588,16,0,249,1,
73021413,2589,16,0,249,
73031,1665,2590,16,0,
7304249,1,412,2591,16,
73050,249,1,1377,2592,
730616,0,249,1,172,
73071428,1,1939,2593,16,
73080,249,1,437,2594,
730916,0,249,1,188,
73101471,1,942,1444,1,
73111195,2595,16,0,249,
73121,1449,2596,16,0,
7313249,1,1701,2597,16,
73140,249,1,447,1464,
73151,205,2598,16,0,
7316249,1,827,2599,16,
73170,249,1,223,2600,
731816,0,249,1,476,
73191507,1,477,1513,1,
73201231,2601,16,0,249,
73211,479,1523,1,480,
73221528,1,1485,2602,16,
73230,249,1,1737,2603,
732416,0,249,1,242,
73252604,16,0,249,1,
7326478,1546,1,1001,1551,
73271,1002,1556,1,32,
73282605,19,244,1,32,
73292606,5,83,1,1011,
73301074,1,1012,2607,16,
73310,242,1,1013,1226,
73321,262,1091,1,1267,
73332608,16,0,242,1,
7334515,2609,16,0,242,
73351,1521,2610,16,0,
7336242,1,525,1184,1,
7337283,1144,1,40,1133,
73381,42,2611,16,0,
7339242,1,44,1149,1,
73402556,2612,16,0,242,
73411,47,1151,1,1303,
73422613,16,0,242,1,
73431555,2614,16,0,242,
73441,50,1174,1,48,
73451157,1,49,1163,1,
734651,1169,1,63,1190,
73471,305,1179,1,66,
73481196,1,67,1201,1,
734968,1206,1,69,1211,
73501,70,1216,1,73,
73512615,16,0,242,1,
735274,1221,1,328,1274,
73531,1048,1236,1,82,
73542616,16,0,242,1,
73551840,2617,16,0,242,
73561,1591,2618,16,0,
7357242,1,1341,2619,16,
73580,242,1,1096,1284,
73591,93,1290,1,352,
73601301,1,107,2620,16,
73610,242,1,1114,1313,
73621,118,1316,1,1123,
73632621,16,0,242,1,
7364371,1326,1,1628,2622,
736516,0,242,1,375,
73661337,1,1882,2623,16,
73670,242,1,377,1342,
73681,379,1375,1,380,
73691352,1,883,2624,16,
73700,242,1,373,1370,
73711,130,1358,1,143,
73722625,16,0,242,1,
7373387,2626,16,0,242,
73741,1159,2627,16,0,
7375242,1,157,2628,16,
73760,242,1,1413,2629,
737716,0,242,1,1665,
73782630,16,0,242,1,
7379412,2631,16,0,242,
73801,1377,2632,16,0,
7381242,1,172,1428,1,
73821939,2633,16,0,242,
73831,437,2634,16,0,
7384242,1,188,1471,1,
7385942,1444,1,1195,2635,
738616,0,242,1,1449,
73872636,16,0,242,1,
73881701,2637,16,0,242,
73891,447,1464,1,205,
73902638,16,0,242,1,
7391827,2639,16,0,242,
73921,223,2640,16,0,
7393242,1,476,1507,1,
7394477,1513,1,1231,2641,
739516,0,242,1,479,
73961523,1,480,1528,1,
73971485,2642,16,0,242,
73981,1737,2643,16,0,
7399242,1,242,2644,16,
74000,242,1,478,1546,
74011,1001,1551,1,1002,
74021556,1,33,2645,19,
7403416,1,33,2646,5,
740483,1,1011,1074,1,
74051012,2647,16,0,414,
74061,1013,1226,1,262,
74071091,1,1267,2648,16,
74080,414,1,515,2649,
740916,0,414,1,1521,
74102650,16,0,414,1,
7411525,1184,1,283,1144,
74121,40,1133,1,42,
74132651,16,0,414,1,
741444,1149,1,2556,2652,
741516,0,414,1,47,
74161151,1,1303,2653,16,
74170,414,1,1555,2654,
741816,0,414,1,50,
74191174,1,48,1157,1,
742049,1163,1,51,1169,
74211,63,1190,1,305,
74221179,1,66,1196,1,
742367,1201,1,68,1206,
74241,69,1211,1,70,
74251216,1,73,2655,16,
74260,414,1,74,1221,
74271,328,1274,1,1048,
74281236,1,82,2656,16,
74290,414,1,1840,2657,
743016,0,414,1,1591,
74312658,16,0,414,1,
74321341,2659,16,0,414,
74331,1096,1284,1,93,
74341290,1,352,1301,1,
7435107,2660,16,0,414,
74361,1114,1313,1,118,
74371316,1,1123,2661,16,
74380,414,1,371,1326,
74391,1628,2662,16,0,
7440414,1,375,1337,1,
74411882,2663,16,0,414,
74421,377,1342,1,379,
74431375,1,380,1352,1,
7444883,2664,16,0,414,
74451,373,1370,1,130,
74461358,1,143,1380,1,
7447387,2665,16,0,414,
74481,1159,2666,16,0,
7449414,1,157,1402,1,
74501413,2667,16,0,414,
74511,1665,2668,16,0,
7452414,1,412,2669,16,
74530,414,1,1377,2670,
745416,0,414,1,172,
74551428,1,1939,2671,16,
74560,414,1,437,2672,
745716,0,414,1,188,
74581471,1,942,1444,1,
74591195,2673,16,0,414,
74601,1449,2674,16,0,
7461414,1,1701,2675,16,
74620,414,1,447,1464,
74631,205,2676,16,0,
7464414,1,827,2677,16,
74650,414,1,223,2678,
746616,0,414,1,476,
74671507,1,477,1513,1,
74681231,2679,16,0,414,
74691,479,1523,1,480,
74701528,1,1485,2680,16,
74710,414,1,1737,2681,
747216,0,414,1,242,
74731541,1,478,1546,1,
74741001,1551,1,1002,1556,
74751,34,2682,19,385,
74761,34,2683,5,83,
74771,1011,1074,1,1012,
74782684,16,0,383,1,
74791013,1226,1,262,1091,
74801,1267,2685,16,0,
7481383,1,515,2686,16,
74820,383,1,1521,2687,
748316,0,383,1,525,
74841184,1,283,1144,1,
748540,1133,1,42,2688,
748616,0,383,1,44,
74871149,1,2556,2689,16,
74880,383,1,47,1151,
74891,1303,2690,16,0,
7490383,1,1555,2691,16,
74910,383,1,50,1174,
74921,48,1157,1,49,
74931163,1,51,1169,1,
749463,1190,1,305,1179,
74951,66,1196,1,67,
74961201,1,68,1206,1,
749769,1211,1,70,1216,
74981,73,2692,16,0,
7499383,1,74,1221,1,
7500328,1274,1,1048,1236,
75011,82,2693,16,0,
7502383,1,1840,2694,16,
75030,383,1,1591,2695,
750416,0,383,1,1341,
75052696,16,0,383,1,
75061096,1284,1,93,1290,
75071,352,1301,1,107,
75082697,16,0,383,1,
75091114,1313,1,118,1316,
75101,1123,2698,16,0,
7511383,1,371,1326,1,
75121628,2699,16,0,383,
75131,375,1337,1,1882,
75142700,16,0,383,1,
7515377,1342,1,379,1375,
75161,380,1352,1,883,
75172701,16,0,383,1,
7518373,1370,1,130,1358,
75191,143,1380,1,387,
75202702,16,0,383,1,
75211159,2703,16,0,383,
75221,157,1402,1,1413,
75232704,16,0,383,1,
75241665,2705,16,0,383,
75251,412,2706,16,0,
7526383,1,1377,2707,16,
75270,383,1,172,1428,
75281,1939,2708,16,0,
7529383,1,437,2709,16,
75300,383,1,188,1471,
75311,942,1444,1,1195,
75322710,16,0,383,1,
75331449,2711,16,0,383,
75341,1701,2712,16,0,
7535383,1,447,1464,1,
7536205,1481,1,827,2713,
753716,0,383,1,223,
75381497,1,476,1507,1,
7539477,1513,1,1231,2714,
754016,0,383,1,479,
75411523,1,480,1528,1,
75421485,2715,16,0,383,
75431,1737,2716,16,0,
7544383,1,242,1541,1,
7545478,1546,1,1001,1551,
75461,1002,1556,1,35,
75472717,19,372,1,35,
75482718,5,83,1,1011,
75491074,1,1012,2719,16,
75500,370,1,1013,1226,
75511,262,1091,1,1267,
75522720,16,0,370,1,
7553515,2721,16,0,370,
75541,1521,2722,16,0,
7555370,1,525,1184,1,
7556283,1144,1,40,1133,
75571,42,2723,16,0,
7558370,1,44,1149,1,
75592556,2724,16,0,370,
75601,47,1151,1,1303,
75612725,16,0,370,1,
75621555,2726,16,0,370,
75631,50,1174,1,48,
75641157,1,49,1163,1,
756551,1169,1,63,1190,
75661,305,1179,1,66,
75671196,1,67,1201,1,
756868,1206,1,69,1211,
75691,70,1216,1,73,
75702727,16,0,370,1,
757174,1221,1,328,1274,
75721,1048,1236,1,82,
75732728,16,0,370,1,
75741840,2729,16,0,370,
75751,1591,2730,16,0,
7576370,1,1341,2731,16,
75770,370,1,1096,1284,
75781,93,1290,1,352,
75791301,1,107,2732,16,
75800,370,1,1114,1313,
75811,118,1316,1,1123,
75822733,16,0,370,1,
7583371,1326,1,1628,2734,
758416,0,370,1,375,
75851337,1,1882,2735,16,
75860,370,1,377,1342,
75871,379,1375,1,380,
75881352,1,883,2736,16,
75890,370,1,373,1370,
75901,130,1358,1,143,
75911380,1,387,2737,16,
75920,370,1,1159,2738,
759316,0,370,1,157,
75941402,1,1413,2739,16,
75950,370,1,1665,2740,
759616,0,370,1,412,
75972741,16,0,370,1,
75981377,2742,16,0,370,
75991,172,1428,1,1939,
76002743,16,0,370,1,
7601437,2744,16,0,370,
76021,188,1471,1,942,
76031444,1,1195,2745,16,
76040,370,1,1449,2746,
760516,0,370,1,1701,
76062747,16,0,370,1,
7607447,1464,1,205,1481,
76081,827,2748,16,0,
7609370,1,223,2749,16,
76100,370,1,476,1507,
76111,477,1513,1,1231,
76122750,16,0,370,1,
7613479,1523,1,480,1528,
76141,1485,2751,16,0,
7615370,1,1737,2752,16,
76160,370,1,242,1541,
76171,478,1546,1,1001,
76181551,1,1002,1556,1,
761936,2753,19,215,1,
762036,2754,5,90,1,
7621256,2755,16,0,213,
76221,1261,2756,16,0,
7623213,1,509,2757,16,
76240,213,1,2197,2758,
762516,0,213,1,1515,
76262759,16,0,213,1,
76272021,707,1,1775,2760,
762816,0,213,1,2029,
7629714,1,2030,720,1,
76302031,725,1,2032,730,
76311,2033,735,1,277,
76322761,16,0,213,1,
76332035,741,1,2037,746,
76341,2039,751,1,32,
76352762,16,0,213,1,
76362041,757,1,2043,762,
76371,2044,767,1,2550,
76382763,16,0,213,1,
763941,2764,16,0,213,
76401,1297,2765,16,0,
7641213,1,43,2766,16,
76420,213,1,1802,774,
76431,1804,2767,16,0,
7644213,1,299,2768,16,
76450,213,1,2309,2769,
764616,0,213,1,52,
76472770,16,0,213,1,
7648525,2771,16,0,213,
76491,2074,2772,16,0,
7650213,1,1574,787,1,
765171,2773,16,0,213,
76521,76,2774,16,0,
7653213,1,1834,2775,16,
76540,213,1,79,2776,
765516,0,213,1,1335,
76562777,16,0,213,1,
7657322,2778,16,0,213,
76581,85,2779,16,0,
7659213,1,89,2780,16,
76600,213,1,346,2781,
766116,0,213,1,2104,
7662801,1,2105,2782,16,
76630,213,1,2358,807,
76641,2360,813,1,97,
76652783,16,0,213,1,
76661860,820,1,102,2784,
766716,0,213,1,112,
76682785,16,0,213,1,
76691117,2786,16,0,213,
76701,1873,829,1,1876,
76712787,16,0,213,1,
7672124,2788,16,0,213,
76731,2135,836,1,381,
76742789,16,0,213,1,
7675137,2790,16,0,213,
76761,1901,2791,16,0,
7677213,1,1153,2792,16,
76780,213,1,151,2793,
767916,0,213,1,1407,
76802794,16,0,213,1,
76811659,2795,16,0,213,
76821,406,2796,16,0,
7683213,1,1371,2797,16,
76840,213,1,166,2798,
768516,0,213,1,1622,
76862799,16,0,213,1,
76872354,853,1,2355,858,
76881,1931,863,1,1933,
76892800,16,0,213,1,
7690431,2801,16,0,213,
76911,1585,2802,16,0,
7692213,1,182,2803,16,
76930,213,1,1189,2804,
769416,0,213,1,1443,
76952805,16,0,213,1,
76961695,2806,16,0,213,
76971,447,2807,16,0,
7698213,1,199,2808,16,
76990,213,1,1958,2809,
770016,0,213,1,1657,
7701878,1,459,2810,16,
77020,213,1,462,2811,
770316,0,213,1,217,
77042812,16,0,213,1,
77052226,886,1,1225,2813,
770616,0,213,1,1479,
77072814,16,0,213,1,
77081731,2815,16,0,213,
77091,1989,894,1,1990,
77102816,16,0,213,1,
7711236,2817,16,0,213,
77121,1756,2818,16,0,
7713213,1,37,2819,19,
7714234,1,37,2820,5,
771590,1,256,2821,16,
77160,232,1,1261,2822,
771716,0,232,1,509,
77182823,16,0,232,1,
77192197,2824,16,0,232,
77201,1515,2825,16,0,
7721232,1,2021,707,1,
77221775,2826,16,0,232,
77231,2029,714,1,2030,
7724720,1,2031,725,1,
77252032,730,1,2033,735,
77261,277,2827,16,0,
7727232,1,2035,741,1,
77282037,746,1,2039,751,
77291,32,2828,16,0,
7730232,1,2041,757,1,
77312043,762,1,2044,767,
77321,2550,2829,16,0,
7733232,1,41,2830,16,
77340,232,1,1297,2831,
773516,0,232,1,43,
77362832,16,0,232,1,
77371802,774,1,1804,2833,
773816,0,232,1,299,
77392834,16,0,232,1,
77402309,2835,16,0,232,
77411,52,2836,16,0,
7742232,1,525,2837,16,
77430,232,1,2074,2838,
774416,0,232,1,1574,
7745787,1,71,2839,16,
77460,232,1,76,2840,
774716,0,232,1,1834,
77482841,16,0,232,1,
774979,2842,16,0,232,
77501,1335,2843,16,0,
7751232,1,322,2844,16,
77520,232,1,85,2845,
775316,0,232,1,89,
77542846,16,0,232,1,
7755346,2847,16,0,232,
77561,2104,801,1,2105,
77572848,16,0,232,1,
77582358,807,1,2360,813,
77591,97,2849,16,0,
7760232,1,1860,820,1,
7761102,2850,16,0,232,
77621,112,2851,16,0,
7763232,1,1117,2852,16,
77640,232,1,1873,829,
77651,1876,2853,16,0,
7766232,1,124,2854,16,
77670,232,1,2135,836,
77681,381,2855,16,0,
7769232,1,137,2856,16,
77700,232,1,1901,2857,
777116,0,232,1,1153,
77722858,16,0,232,1,
7773151,2859,16,0,232,
77741,1407,2860,16,0,
7775232,1,1659,2861,16,
77760,232,1,406,2862,
777716,0,232,1,1371,
77782863,16,0,232,1,
7779166,2864,16,0,232,
77801,1622,2865,16,0,
7781232,1,2354,853,1,
77822355,858,1,1931,863,
77831,1933,2866,16,0,
7784232,1,431,2867,16,
77850,232,1,1585,2868,
778616,0,232,1,182,
77872869,16,0,232,1,
77881189,2870,16,0,232,
77891,1443,2871,16,0,
7790232,1,1695,2872,16,
77910,232,1,447,2873,
779216,0,232,1,199,
77932874,16,0,232,1,
77941958,2875,16,0,232,
77951,1657,878,1,459,
77962876,16,0,232,1,
7797462,2877,16,0,232,
77981,217,2878,16,0,
7799232,1,2226,886,1,
78001225,2879,16,0,232,
78011,1479,2880,16,0,
7802232,1,1731,2881,16,
78030,232,1,1989,894,
78041,1990,2882,16,0,
7805232,1,236,2883,16,
78060,232,1,1756,2884,
780716,0,232,1,38,
78082885,19,231,1,38,
78092886,5,83,1,1011,
78101074,1,1012,2887,16,
78110,229,1,1013,1226,
78121,262,1091,1,1267,
78132888,16,0,229,1,
7814515,2889,16,0,229,
78151,1521,2890,16,0,
7816229,1,525,1184,1,
7817283,1144,1,40,1133,
78181,42,2891,16,0,
7819229,1,44,1149,1,
78202556,2892,16,0,229,
78211,47,1151,1,1303,
78222893,16,0,229,1,
78231555,2894,16,0,229,
78241,50,1174,1,48,
78251157,1,49,1163,1,
782651,1169,1,63,1190,
78271,305,1179,1,66,
78281196,1,67,1201,1,
782968,1206,1,69,1211,
78301,70,1216,1,73,
78312895,16,0,229,1,
783274,1221,1,328,1274,
78331,1048,1236,1,82,
78342896,16,0,229,1,
78351840,2897,16,0,229,
78361,1591,2898,16,0,
7837229,1,1341,2899,16,
78380,229,1,1096,1284,
78391,93,1290,1,352,
78401301,1,107,2900,16,
78410,229,1,1114,1313,
78421,118,1316,1,1123,
78432901,16,0,229,1,
7844371,1326,1,1628,2902,
784516,0,229,1,375,
78461337,1,1882,2903,16,
78470,229,1,377,1342,
78481,379,1375,1,380,
78491352,1,883,1412,1,
7850373,1370,1,130,1358,
78511,143,1380,1,387,
78522904,16,0,229,1,
78531159,2905,16,0,229,
78541,157,1402,1,1413,
78552906,16,0,229,1,
78561665,2907,16,0,229,
78571,412,2908,16,0,
7858229,1,1377,2909,16,
78590,229,1,172,1428,
78601,1939,2910,16,0,
7861229,1,437,2911,16,
78620,229,1,188,1471,
78631,942,1444,1,1195,
78642912,16,0,229,1,
78651449,2913,16,0,229,
78661,1701,2914,16,0,
7867229,1,447,1464,1,
7868205,1481,1,827,1347,
78691,223,1497,1,476,
78701507,1,477,1513,1,
78711231,2915,16,0,229,
78721,479,1523,1,480,
78731528,1,1485,2916,16,
78740,229,1,1737,2917,
787516,0,229,1,242,
78761541,1,478,1546,1,
78771001,1551,1,1002,1556,
78781,39,2918,19,221,
78791,39,2919,5,83,
78801,1011,1074,1,1012,
78812920,16,0,219,1,
78821013,1226,1,262,1091,
78831,1267,2921,16,0,
7884219,1,515,2922,16,
78850,219,1,1521,2923,
788616,0,219,1,525,
78871184,1,283,1144,1,
788840,1133,1,42,2924,
788916,0,219,1,44,
78901149,1,2556,2925,16,
78910,219,1,47,1151,
78921,1303,2926,16,0,
7893219,1,1555,2927,16,
78940,219,1,50,1174,
78951,48,1157,1,49,
78961163,1,51,1169,1,
789763,1190,1,305,1179,
78981,66,1196,1,67,
78991201,1,68,1206,1,
790069,1211,1,70,1216,
79011,73,2928,16,0,
7902219,1,74,1221,1,
7903328,1274,1,1048,1236,
79041,82,2929,16,0,
7905219,1,1840,2930,16,
79060,219,1,1591,2931,
790716,0,219,1,1341,
79082932,16,0,219,1,
79091096,1284,1,93,1290,
79101,352,1301,1,107,
79112933,16,0,219,1,
79121114,1313,1,118,1316,
79131,1123,2934,16,0,
7914219,1,371,1326,1,
79151628,2935,16,0,219,
79161,375,1337,1,1882,
79172936,16,0,219,1,
7918377,1342,1,379,1375,
79191,380,1352,1,883,
79201412,1,373,1370,1,
7921130,1358,1,143,1380,
79221,387,2937,16,0,
7923219,1,1159,2938,16,
79240,219,1,157,1402,
79251,1413,2939,16,0,
7926219,1,1665,2940,16,
79270,219,1,412,2941,
792816,0,219,1,1377,
79292942,16,0,219,1,
7930172,1428,1,1939,2943,
793116,0,219,1,437,
79322944,16,0,219,1,
7933188,1471,1,942,1444,
79341,1195,2945,16,0,
7935219,1,1449,2946,16,
79360,219,1,1701,2947,
793716,0,219,1,447,
79381464,1,205,1481,1,
7939827,1347,1,223,1497,
79401,476,1507,1,477,
79411513,1,1231,2948,16,
79420,219,1,479,1523,
79431,480,1528,1,1485,
79442949,16,0,219,1,
79451737,2950,16,0,219,
79461,242,1541,1,478,
79471546,1,1001,1551,1,
79481002,1556,1,40,2951,
794919,209,1,40,2952,
79505,83,1,1011,1074,
79511,1012,2953,16,0,
7952207,1,1013,1226,1,
7953262,1091,1,1267,2954,
795416,0,207,1,515,
79552955,16,0,207,1,
79561521,2956,16,0,207,
79571,525,1184,1,283,
79581144,1,40,1133,1,
795942,2957,16,0,207,
79601,44,1149,1,2556,
79612958,16,0,207,1,
796247,1151,1,1303,2959,
796316,0,207,1,1555,
79642960,16,0,207,1,
796550,1174,1,48,1157,
79661,49,1163,1,51,
79671169,1,63,1190,1,
7968305,1179,1,66,1196,
79691,67,1201,1,68,
79701206,1,69,1211,1,
797170,1216,1,73,2961,
797216,0,207,1,74,
79731221,1,328,1274,1,
79741048,1236,1,82,2962,
797516,0,207,1,1840,
79762963,16,0,207,1,
79771591,2964,16,0,207,
79781,1341,2965,16,0,
7979207,1,1096,1284,1,
798093,1290,1,352,1301,
79811,107,2966,16,0,
7982207,1,1114,1313,1,
7983118,2967,16,0,207,
79841,1123,2968,16,0,
7985207,1,371,1326,1,
79861628,2969,16,0,207,
79871,375,1337,1,1882,
79882970,16,0,207,1,
7989377,1342,1,379,1375,
79901,380,1352,1,883,
79912971,16,0,207,1,
7992373,1370,1,130,2972,
799316,0,207,1,143,
79942973,16,0,207,1,
7995387,2974,16,0,207,
79961,1159,2975,16,0,
7997207,1,157,2976,16,
79980,207,1,1413,2977,
799916,0,207,1,1665,
80002978,16,0,207,1,
8001412,2979,16,0,207,
80021,1377,2980,16,0,
8003207,1,172,2981,16,
80040,207,1,1939,2982,
800516,0,207,1,437,
80062983,16,0,207,1,
8007188,2984,16,0,207,
80081,942,1444,1,1195,
80092985,16,0,207,1,
80101449,2986,16,0,207,
80111,1701,2987,16,0,
8012207,1,447,1464,1,
8013205,2988,16,0,207,
80141,827,2989,16,0,
8015207,1,223,2990,16,
80160,207,1,476,1507,
80171,477,1513,1,1231,
80182991,16,0,207,1,
8019479,1523,1,480,1528,
80201,1485,2992,16,0,
8021207,1,1737,2993,16,
80220,207,1,242,2994,
802316,0,207,1,478,
80241546,1,1001,1551,1,
80251002,1556,1,41,2995,
802619,172,1,41,2996,
80275,83,1,1011,1074,
80281,1012,2997,16,0,
8029170,1,1013,1226,1,
8030262,1091,1,1267,2998,
803116,0,170,1,515,
80322999,16,0,170,1,
80331521,3000,16,0,170,
80341,525,1184,1,283,
80351144,1,40,1133,1,
803642,3001,16,0,170,
80371,44,1149,1,2556,
80383002,16,0,170,1,
803947,1151,1,1303,3003,
804016,0,170,1,1555,
80413004,16,0,170,1,
804250,1174,1,48,1157,
80431,49,1163,1,51,
80441169,1,63,1190,1,
8045305,1179,1,66,1196,
80461,67,1201,1,68,
80471206,1,69,1211,1,
804870,1216,1,73,3005,
804916,0,170,1,74,
80501221,1,328,1274,1,
80511048,1236,1,82,3006,
805216,0,170,1,1840,
80533007,16,0,170,1,
80541591,3008,16,0,170,
80551,1341,3009,16,0,
8056170,1,1096,1284,1,
805793,1290,1,352,1301,
80581,107,3010,16,0,
8059170,1,1114,1313,1,
8060118,3011,16,0,170,
80611,1123,3012,16,0,
8062170,1,371,1326,1,
80631628,3013,16,0,170,
80641,375,1337,1,1882,
80653014,16,0,170,1,
8066377,1342,1,379,1375,
80671,380,1352,1,883,
80683015,16,0,170,1,
8069373,1370,1,130,3016,
807016,0,170,1,143,
80713017,16,0,170,1,
8072387,3018,16,0,170,
80731,1159,3019,16,0,
8074170,1,157,3020,16,
80750,170,1,1413,3021,
807616,0,170,1,1665,
80773022,16,0,170,1,
8078412,3023,16,0,170,
80791,1377,3024,16,0,
8080170,1,172,3025,16,
80810,170,1,1939,3026,
808216,0,170,1,437,
80833027,16,0,170,1,
8084188,3028,16,0,170,
80851,942,1444,1,1195,
80863029,16,0,170,1,
80871449,3030,16,0,170,
80881,1701,3031,16,0,
8089170,1,447,1464,1,
8090205,3032,16,0,170,
80911,827,3033,16,0,
8092170,1,223,3034,16,
80930,170,1,476,1507,
80941,477,1513,1,1231,
80953035,16,0,170,1,
8096479,1523,1,480,1528,
80971,1485,3036,16,0,
8098170,1,1737,3037,16,
80990,170,1,242,3038,
810016,0,170,1,478,
81011546,1,1001,1551,1,
81021002,1556,1,42,3039,
810319,441,1,42,3040,
81045,36,1,2074,3041,
810516,0,439,1,1860,
8106820,1,2197,3042,16,
81070,439,1,2309,3043,
810816,0,439,1,1657,
8109878,1,2031,725,1,
81101989,894,1,1990,3044,
811116,0,439,1,1775,
81123045,16,0,439,1,
811332,3046,16,0,439,
81141,2104,801,1,2105,
81153047,16,0,439,1,
81162226,886,1,1901,3048,
811716,0,439,1,1802,
8118774,1,2021,707,1,
81191804,3049,16,0,439,
81201,2135,836,1,2354,
8121853,1,2355,858,1,
81222029,714,1,2030,720,
81231,2358,807,1,2032,
8124730,1,2360,813,1,
81252035,741,1,2037,746,
81261,2039,751,1,1931,
8127863,1,2041,757,1,
81281873,829,1,2043,762,
81291,2044,767,1,2033,
8130735,1,1574,787,1,
81311958,3050,16,0,439,
81321,43,3051,19,480,
81331,43,3052,5,24,
81341,2035,741,1,2037,
8135746,1,1657,878,1,
81362039,751,1,2041,757,
81371,1931,863,1,2043,
8138762,1,2044,767,1,
81391860,820,1,1574,787,
81401,2021,707,1,2104,
81413053,16,0,579,1,
81422135,836,1,1873,829,
81431,2355,858,1,1802,
8144774,1,2226,886,1,
81451989,3054,16,0,478,
81461,2360,813,1,2029,
8147714,1,2030,720,1,
81482031,725,1,2032,730,
81491,2033,735,1,44,
81503055,19,264,1,44,
81513056,5,36,1,2074,
81523057,16,0,262,1,
81531860,820,1,2197,3058,
815416,0,262,1,2309,
81553059,16,0,262,1,
81561657,878,1,2031,725,
81571,1989,894,1,1990,
81583060,16,0,262,1,
81591775,3061,16,0,262,
81601,32,3062,16,0,
8161262,1,2104,801,1,
81622105,3063,16,0,262,
81631,2226,886,1,1901,
81643064,16,0,262,1,
81651802,774,1,2021,707,
81661,1804,3065,16,0,
8167262,1,2135,836,1,
81682354,853,1,2355,858,
81691,2029,714,1,2030,
8170720,1,2358,807,1,
81712032,730,1,2360,813,
81721,2035,741,1,2037,
8173746,1,2039,751,1,
81741931,863,1,2041,757,
81751,1873,829,1,2043,
8176762,1,2044,767,1,
81772033,735,1,1574,787,
81781,1958,3066,16,0,
8179262,1,45,3067,19,
8180329,1,45,3068,5,
818137,1,2074,3069,16,
81820,376,1,1860,820,
81831,2197,3070,16,0,
8184376,1,2309,3071,16,
81850,376,1,1657,878,
81861,2031,725,1,1989,
8187894,1,1990,3072,16,
81880,376,1,1775,3073,
818916,0,376,1,32,
81903074,16,0,376,1,
81912104,801,1,2105,3075,
819216,0,376,1,2226,
8193886,1,1901,3076,16,
81940,376,1,1802,774,
81951,2021,707,1,1804,
81963077,16,0,376,1,
81972135,836,1,2354,853,
81981,2355,858,1,2029,
8199714,1,2030,720,1,
82002358,807,1,2032,730,
82011,2360,813,1,2035,
8202741,1,2037,746,1,
82032039,751,1,1931,863,
82041,2041,757,1,1873,
8205829,1,2043,762,1,
82062044,767,1,1832,3078,
820716,0,327,1,2033,
8208735,1,1574,787,1,
82091958,3079,16,0,376,
82101,46,3080,19,658,
82111,46,3081,5,36,
82121,2074,3082,16,0,
8213656,1,1860,820,1,
82142197,3083,16,0,656,
82151,2309,3084,16,0,
8216656,1,1657,878,1,
82172031,725,1,1989,894,
82181,1990,3085,16,0,
8219656,1,1775,3086,16,
82200,656,1,32,3087,
822116,0,656,1,2104,
8222801,1,2105,3088,16,
82230,656,1,2226,886,
82241,1901,3089,16,0,
8225656,1,1802,774,1,
82262021,707,1,1804,3090,
822716,0,656,1,2135,
8228836,1,2354,853,1,
82292355,858,1,2029,714,
82301,2030,720,1,2358,
8231807,1,2032,730,1,
82322360,813,1,2035,741,
82331,2037,746,1,2039,
8234751,1,1931,863,1,
82352041,757,1,1873,829,
82361,2043,762,1,2044,
8237767,1,2033,735,1,
82381574,787,1,1958,3091,
823916,0,656,1,47,
82403092,19,401,1,47,
82413093,5,19,1,0,
82423094,16,0,399,1,
82432531,667,1,2587,3095,
824416,0,399,1,2022,
82453096,16,0,571,1,
82462526,684,1,2528,3097,
824716,0,399,1,2605,
82483098,17,3099,15,3100,
82494,36,37,0,71,
82500,108,0,111,0,
825198,0,97,0,108,
82520,68,0,101,0,
8253102,0,105,0,110,
82540,105,0,116,0,
8255105,0,111,0,110,
82560,115,0,1,-1,
82571,5,3101,20,3102,
82584,38,71,0,108,
82590,111,0,98,0,
826097,0,108,0,68,
82610,101,0,102,0,
8262105,0,110,0,105,
82630,116,0,105,0,
8264111,0,110,0,115,
82650,95,0,52,0,
82661,145,1,3,1,
82673,1,2,3103,22,
82681,6,1,2452,695,
82691,2607,3104,17,3105,
827015,3100,1,-1,1,
82715,3106,20,3107,4,
827238,71,0,108,0,
8273111,0,98,0,97,
82740,108,0,68,0,
8275101,0,102,0,105,
82760,110,0,105,0,
8277116,0,105,0,111,
82780,110,0,115,0,
827995,0,51,0,1,
8280144,1,3,1,2,
82811,1,3108,22,1,
82825,1,2608,3109,17,
82833110,15,3100,1,-1,
82841,5,3111,20,3112,
82854,38,71,0,108,
82860,111,0,98,0,
828797,0,108,0,68,
82880,101,0,102,0,
8289105,0,110,0,105,
82900,116,0,105,0,
8291111,0,110,0,115,
82920,95,0,49,0,
82931,142,1,3,1,
82942,1,1,3113,22,
82951,3,1,2598,3114,
829616,0,399,1,2575,
82973115,17,3116,15,3117,
82984,52,37,0,71,
82990,108,0,111,0,
830098,0,97,0,108,
83010,86,0,97,0,
8302114,0,105,0,97,
83030,98,0,108,0,
8304101,0,68,0,101,
83050,99,0,108,0,
830697,0,114,0,97,
83070,116,0,105,0,
8308111,0,110,0,1,
8309-1,1,5,3118,20,
83103119,4,54,71,0,
8311108,0,111,0,98,
83120,97,0,108,0,
831386,0,97,0,114,
83140,105,0,97,0,
831598,0,108,0,101,
83160,68,0,101,0,
831799,0,108,0,97,
83180,114,0,97,0,
8319116,0,105,0,111,
83200,110,0,95,0,
832150,0,1,147,1,
83223,1,5,1,4,
83233120,22,1,8,1,
83242355,858,1,2532,673,
83251,2606,3121,17,3122,
832615,3100,1,-1,1,
83275,3123,20,3124,4,
832838,71,0,108,0,
8329111,0,98,0,97,
83300,108,0,68,0,
8331101,0,102,0,105,
83320,110,0,105,0,
8333116,0,105,0,111,
83340,110,0,115,0,
833595,0,50,0,1,
8336143,1,3,1,3,
83371,2,3125,22,1,
83384,1,2360,813,1,
83392547,3126,17,3127,15,
83403128,4,50,37,0,
834171,0,108,0,111,
83420,98,0,97,0,
8343108,0,70,0,117,
83440,110,0,99,0,
8345116,0,105,0,111,
83460,110,0,68,0,
8347101,0,102,0,105,
83480,110,0,105,0,
8349116,0,105,0,111,
83500,110,0,1,-1,
83511,5,3129,20,3130,
83524,52,71,0,108,
83530,111,0,98,0,
835497,0,108,0,70,
83550,117,0,110,0,
835699,0,116,0,105,
83570,111,0,110,0,
835868,0,101,0,102,
83590,105,0,110,0,
8360105,0,116,0,105,
83610,111,0,110,0,
836295,0,49,0,1,
8363148,1,3,1,6,
83641,5,3131,22,1,
83659,1,2586,3132,17,
83663133,15,3117,1,-1,
83671,5,3134,20,3135,
83684,54,71,0,108,
83690,111,0,98,0,
837097,0,108,0,86,
83710,97,0,114,0,
8372105,0,97,0,98,
83730,108,0,101,0,
837468,0,101,0,99,
83750,108,0,97,0,
8376114,0,97,0,116,
83770,105,0,111,0,
8378110,0,95,0,49,
83790,1,146,1,3,
83801,3,1,2,3136,
838122,1,7,1,2362,
83823137,17,3138,15,3128,
83831,-1,1,5,3139,
838420,3140,4,52,71,
83850,108,0,111,0,
838698,0,97,0,108,
83870,70,0,117,0,
8388110,0,99,0,116,
83890,105,0,111,0,
8390110,0,68,0,101,
83910,102,0,105,0,
8392110,0,105,0,116,
83930,105,0,111,0,
8394110,0,95,0,50,
83950,1,149,1,3,
83961,7,1,6,3141,
839722,1,10,1,48,
83983142,19,269,1,48,
83993143,5,52,1,0,
84003144,16,0,267,1,
84012074,3145,16,0,499,
84021,1860,820,1,2197,
84033146,16,0,499,1,
84042526,684,1,2309,3147,
840516,0,499,1,2528,
84063148,16,0,267,1,
84071657,878,1,2030,720,
84081,2532,673,1,1989,
8409894,1,1990,3149,16,
84100,499,1,2035,741,
84111,1775,3150,16,0,
8412499,1,32,3151,16,
84130,499,1,2104,801,
84141,2105,3152,16,0,
8415499,1,2547,3126,1,
84162226,886,1,2606,3121,
84171,1901,3153,16,0,
8418499,1,2531,667,1,
84192586,3132,1,2587,3154,
842016,0,267,1,2452,
8421695,1,1802,774,1,
84222021,707,1,1804,3155,
842316,0,499,1,2135,
8424836,1,2354,853,1,
84252355,858,1,2029,714,
84261,2575,3115,1,2358,
8427807,1,2032,730,1,
84282360,813,1,2362,3137,
84291,2037,746,1,2039,
8430751,1,1931,863,1,
84312041,757,1,1873,829,
84321,2043,762,1,2044,
8433767,1,2031,725,1,
84342598,3156,16,0,267,
84351,2033,735,1,2605,
84363098,1,1574,787,1,
84372607,3104,1,2608,3109,
84381,1958,3157,16,0,
8439499,1,49,3158,19,
8440504,1,49,3159,5,
844136,1,2074,3160,16,
84420,502,1,1860,820,
84431,2197,3161,16,0,
8444502,1,2309,3162,16,
84450,502,1,1657,878,
84461,2031,725,1,1989,
8447894,1,1990,3163,16,
84480,502,1,1775,3164,
844916,0,502,1,32,
84503165,16,0,502,1,
84512104,801,1,2105,3166,
845216,0,502,1,2226,
8453886,1,1901,3167,16,
84540,502,1,1802,774,
84551,2021,707,1,1804,
84563168,16,0,502,1,
84572135,836,1,2354,853,
84581,2355,858,1,2029,
8459714,1,2030,720,1,
84602358,807,1,2032,730,
84611,2360,813,1,2035,
8462741,1,2037,746,1,
84632039,751,1,1931,863,
84641,2041,757,1,1873,
8465829,1,2043,762,1,
84662044,767,1,2033,735,
84671,1574,787,1,1958,
84683169,16,0,502,1,
846950,3170,19,612,1,
847050,3171,5,36,1,
84712074,3172,16,0,610,
84721,1860,820,1,2197,
84733173,16,0,610,1,
84742309,3174,16,0,610,
84751,1657,878,1,2031,
8476725,1,1989,894,1,
84771990,3175,16,0,610,
84781,1775,3176,16,0,
8479610,1,32,3177,16,
84800,610,1,2104,801,
84811,2105,3178,16,0,
8482610,1,2226,886,1,
84831901,3179,16,0,610,
84841,1802,774,1,2021,
8485707,1,1804,3180,16,
84860,610,1,2135,836,
84871,2354,853,1,2355,
8488858,1,2029,714,1,
84892030,720,1,2358,807,
84901,2032,730,1,2360,
8491813,1,2035,741,1,
84922037,746,1,2039,751,
84931,1931,863,1,2041,
8494757,1,1873,829,1,
84952043,762,1,2044,767,
84961,2033,735,1,1574,
8497787,1,1958,3181,16,
84980,610,1,51,3182,
849919,127,1,51,3183,
85005,51,1,0,3184,
850116,0,125,1,2401,
85023185,16,0,125,1,
85031860,820,1,10,3186,
850416,0,125,1,2197,
85053187,16,0,125,1,
85062309,3188,16,0,125,
85071,21,3189,16,0,
8508125,1,1657,878,1,
85092030,720,1,2031,725,
85101,2074,3190,16,0,
8511125,1,1989,894,1,
85121990,3191,16,0,125,
85131,2035,741,1,1775,
85143192,16,0,125,1,
851532,3193,16,0,125,
85161,2104,801,1,2105,
85173194,16,0,125,1,
85182547,3126,1,2226,886,
85191,2606,3121,1,1901,
85203195,16,0,125,1,
852152,3196,16,0,125,
85221,2587,3197,16,0,
8523125,1,1802,774,1,
85242021,707,1,1804,3198,
852516,0,125,1,2135,
8526836,1,2354,853,1,
85272355,858,1,2029,714,
85281,2575,3115,1,2358,
8529807,1,2032,730,1,
85302360,813,1,2362,3137,
85311,2037,746,1,2039,
8532751,1,1931,863,1,
85332041,757,1,1873,829,
85341,2043,762,1,2044,
8535767,1,2033,735,1,
85362605,3098,1,1574,787,
85371,2607,3104,1,2608,
85383109,1,1958,3199,16,
85390,125,1,2586,3132,
85401,2534,3200,16,0,
8541125,1,52,3201,19,
8542124,1,52,3202,5,
854351,1,0,3203,16,
85440,122,1,2401,3204,
854516,0,122,1,1860,
8546820,1,10,3205,16,
85470,122,1,2197,3206,
854816,0,122,1,2309,
85493207,16,0,122,1,
855021,3208,16,0,122,
85511,1657,878,1,2030,
8552720,1,2031,725,1,
85532074,3209,16,0,122,
85541,1989,894,1,1990,
85553210,16,0,122,1,
85562035,741,1,1775,3211,
855716,0,122,1,32,
85583212,16,0,122,1,
85592104,801,1,2105,3213,
856016,0,122,1,2547,
85613126,1,2226,886,1,
85622606,3121,1,1901,3214,
856316,0,122,1,52,
85643215,16,0,122,1,
85652587,3216,16,0,122,
85661,1802,774,1,2021,
8567707,1,1804,3217,16,
85680,122,1,2135,836,
85691,2354,853,1,2355,
8570858,1,2029,714,1,
85712575,3115,1,2358,807,
85721,2032,730,1,2360,
8573813,1,2362,3137,1,
85742037,746,1,2039,751,
85751,1931,863,1,2041,
8576757,1,1873,829,1,
85772043,762,1,2044,767,
85781,2033,735,1,2605,
85793098,1,1574,787,1,
85802607,3104,1,2608,3109,
85811,1958,3218,16,0,
8582122,1,2586,3132,1,
85832534,3219,16,0,122,
85841,53,3220,19,121,
85851,53,3221,5,51,
85861,0,3222,16,0,
8587119,1,2401,3223,16,
85880,119,1,1860,820,
85891,10,3224,16,0,
8590119,1,2197,3225,16,
85910,119,1,2309,3226,
859216,0,119,1,21,
85933227,16,0,119,1,
85941657,878,1,2030,720,
85951,2031,725,1,2074,
85963228,16,0,119,1,
85971989,894,1,1990,3229,
859816,0,119,1,2035,
8599741,1,1775,3230,16,
86000,119,1,32,3231,
860116,0,119,1,2104,
8602801,1,2105,3232,16,
86030,119,1,2547,3126,
86041,2226,886,1,2606,
86053121,1,1901,3233,16,
86060,119,1,52,3234,
860716,0,119,1,2587,
86083235,16,0,119,1,
86091802,774,1,2021,707,
86101,1804,3236,16,0,
8611119,1,2135,836,1,
86122354,853,1,2355,858,
86131,2029,714,1,2575,
86143115,1,2358,807,1,
86152032,730,1,2360,813,
86161,2362,3137,1,2037,
8617746,1,2039,751,1,
86181931,863,1,2041,757,
86191,1873,829,1,2043,
8620762,1,2044,767,1,
86212033,735,1,2605,3098,
86221,1574,787,1,2607,
86233104,1,2608,3109,1,
86241958,3237,16,0,119,
86251,2586,3132,1,2534,
86263238,16,0,119,1,
862754,3239,19,118,1,
862854,3240,5,51,1,
86290,3241,16,0,116,
86301,2401,3242,16,0,
8631116,1,1860,820,1,
863210,3243,16,0,116,
86331,2197,3244,16,0,
8634116,1,2309,3245,16,
86350,116,1,21,3246,
863616,0,116,1,1657,
8637878,1,2030,720,1,
86382031,725,1,2074,3247,
863916,0,116,1,1989,
8640894,1,1990,3248,16,
86410,116,1,2035,741,
86421,1775,3249,16,0,
8643116,1,32,3250,16,
86440,116,1,2104,801,
86451,2105,3251,16,0,
8646116,1,2547,3126,1,
86472226,886,1,2606,3121,
86481,1901,3252,16,0,
8649116,1,52,3253,16,
86500,116,1,2587,3254,
865116,0,116,1,1802,
8652774,1,2021,707,1,
86531804,3255,16,0,116,
86541,2135,836,1,2354,
8655853,1,2355,858,1,
86562029,714,1,2575,3115,
86571,2358,807,1,2032,
8658730,1,2360,813,1,
86592362,3137,1,2037,746,
86601,2039,751,1,1931,
8661863,1,2041,757,1,
86621873,829,1,2043,762,
86631,2044,767,1,2033,
8664735,1,2605,3098,1,
86651574,787,1,2607,3104,
86661,2608,3109,1,1958,
86673256,16,0,116,1,
86682586,3132,1,2534,3257,
866916,0,116,1,55,
86703258,19,115,1,55,
86713259,5,51,1,0,
86723260,16,0,113,1,
86732401,3261,16,0,113,
86741,1860,820,1,10,
86753262,16,0,113,1,
86762197,3263,16,0,113,
86771,2309,3264,16,0,
8678113,1,21,3265,16,
86790,113,1,1657,878,
86801,2030,720,1,2031,
8681725,1,2074,3266,16,
86820,113,1,1989,894,
86831,1990,3267,16,0,
8684113,1,2035,741,1,
86851775,3268,16,0,113,
86861,32,3269,16,0,
8687113,1,2104,801,1,
86882105,3270,16,0,113,
86891,2547,3126,1,2226,
8690886,1,2606,3121,1,
86911901,3271,16,0,113,
86921,52,3272,16,0,
8693113,1,2587,3273,16,
86940,113,1,1802,774,
86951,2021,707,1,1804,
86963274,16,0,113,1,
86972135,836,1,2354,853,
86981,2355,858,1,2029,
8699714,1,2575,3115,1,
87002358,807,1,2032,730,
87011,2360,813,1,2362,
87023137,1,2037,746,1,
87032039,751,1,1931,863,
87041,2041,757,1,1873,
8705829,1,2043,762,1,
87062044,767,1,2033,735,
87071,2605,3098,1,1574,
8708787,1,2607,3104,1,
87092608,3109,1,1958,3275,
871016,0,113,1,2586,
87113132,1,2534,3276,16,
87120,113,1,56,3277,
871319,112,1,56,3278,
87145,51,1,0,3279,
871516,0,110,1,2401,
87163280,16,0,110,1,
87171860,820,1,10,3281,
871816,0,110,1,2197,
87193282,16,0,110,1,
87202309,3283,16,0,110,
87211,21,3284,16,0,
8722110,1,1657,878,1,
87232030,720,1,2031,725,
87241,2074,3285,16,0,
8725110,1,1989,894,1,
87261990,3286,16,0,110,
87271,2035,741,1,1775,
87283287,16,0,110,1,
872932,3288,16,0,110,
87301,2104,801,1,2105,
87313289,16,0,110,1,
87322547,3126,1,2226,886,
87331,2606,3121,1,1901,
87343290,16,0,110,1,
873552,3291,16,0,110,
87361,2587,3292,16,0,
8737110,1,1802,774,1,
87382021,707,1,1804,3293,
873916,0,110,1,2135,
8740836,1,2354,853,1,
87412355,858,1,2029,714,
87421,2575,3115,1,2358,
8743807,1,2032,730,1,
87442360,813,1,2362,3137,
87451,2037,746,1,2039,
8746751,1,1931,863,1,
87472041,757,1,1873,829,
87481,2043,762,1,2044,
8749767,1,2033,735,1,
87502605,3098,1,1574,787,
87511,2607,3104,1,2608,
87523109,1,1958,3294,16,
87530,110,1,2586,3132,
87541,2534,3295,16,0,
8755110,1,57,3296,19,
8756109,1,57,3297,5,
875751,1,0,3298,16,
87580,107,1,2401,3299,
875916,0,107,1,1860,
8760820,1,10,3300,16,
87610,107,1,2197,3301,
876216,0,107,1,2309,
87633302,16,0,107,1,
876421,3303,16,0,107,
87651,1657,878,1,2030,
8766720,1,2031,725,1,
87672074,3304,16,0,107,
87681,1989,894,1,1990,
87693305,16,0,107,1,
87702035,741,1,1775,3306,
877116,0,107,1,32,
87723307,16,0,107,1,
87732104,801,1,2105,3308,
877416,0,107,1,2547,
87753126,1,2226,886,1,
87762606,3121,1,1901,3309,
877716,0,107,1,52,
87783310,16,0,107,1,
87792587,3311,16,0,107,
87801,1802,774,1,2021,
8781707,1,1804,3312,16,
87820,107,1,2135,836,
87831,2354,853,1,2355,
8784858,1,2029,714,1,
87852575,3115,1,2358,807,
87861,2032,730,1,2360,
8787813,1,2362,3137,1,
87882037,746,1,2039,751,
87891,1931,863,1,2041,
8790757,1,1873,829,1,
87912043,762,1,2044,767,
87921,2033,735,1,2605,
87933098,1,1574,787,1,
87942607,3104,1,2608,3109,
87951,1958,3313,16,0,
8796107,1,2586,3132,1,
87972534,3314,16,0,107,
87981,58,3315,19,352,
87991,58,3316,5,9,
88001,2414,1580,1,2490,
88013317,16,0,350,1,
88022455,3318,16,0,350,
88031,2451,1589,1,2416,
88043319,16,0,350,1,
88052453,1595,1,2355,858,
88061,2360,813,1,2366,
88073320,16,0,350,1,
880859,3321,19,349,1,
880959,3322,5,9,1,
88102414,1580,1,2490,3323,
881116,0,347,1,2455,
88123324,16,0,347,1,
88132451,1589,1,2416,3325,
881416,0,347,1,2453,
88151595,1,2355,858,1,
88162360,813,1,2366,3326,
881716,0,347,1,60,
88183327,19,429,1,60,
88193328,5,9,1,2414,
88201580,1,2490,3329,16,
88210,427,1,2455,3330,
882216,0,427,1,2451,
88231589,1,2416,3331,16,
88240,427,1,2453,1595,
88251,2355,858,1,2360,
8826813,1,2366,3332,16,
88270,427,1,61,3333,
882819,345,1,61,3334,
88295,9,1,2414,1580,
88301,2490,3335,16,0,
8831343,1,2455,3336,16,
88320,343,1,2451,1589,
88331,2416,3337,16,0,
8834343,1,2453,1595,1,
88352355,858,1,2360,813,
88361,2366,3338,16,0,
8837343,1,62,3339,19,
8838342,1,62,3340,5,
88399,1,2414,1580,1,
88402490,3341,16,0,340,
88411,2455,3342,16,0,
8842340,1,2451,1589,1,
88432416,3343,16,0,340,
88441,2453,1595,1,2355,
8845858,1,2360,813,1,
88462366,3344,16,0,340,
88471,63,3345,19,562,
88481,63,3346,5,9,
88491,2414,1580,1,2490,
88503347,16,0,560,1,
88512455,3348,16,0,560,
88521,2451,1589,1,2416,
88533349,16,0,560,1,
88542453,1595,1,2355,858,
88551,2360,813,1,2366,
88563350,16,0,560,1,
885764,3351,19,336,1,
885864,3352,5,9,1,
88592414,1580,1,2490,3353,
886016,0,334,1,2455,
88613354,16,0,334,1,
88622451,1589,1,2416,3355,
886316,0,334,1,2453,
88641595,1,2355,858,1,
88652360,813,1,2366,3356,
886616,0,334,1,65,
88673357,19,333,1,65,
88683358,5,9,1,2414,
88691580,1,2490,3359,16,
88700,331,1,2455,3360,
887116,0,331,1,2451,
88721589,1,2416,3361,16,
88730,331,1,2453,1595,
88741,2355,858,1,2360,
8875813,1,2366,3362,16,
88760,331,1,66,3363,
887719,425,1,66,3364,
88785,9,1,2414,1580,
88791,2490,3365,16,0,
8880423,1,2455,3366,16,
88810,423,1,2451,1589,
88821,2416,3367,16,0,
8883423,1,2453,1595,1,
88842355,858,1,2360,813,
88851,2366,3368,16,0,
8886423,1,67,3369,19,
8887422,1,67,3370,5,
88889,1,2414,1580,1,
88892490,3371,16,0,420,
88901,2455,3372,16,0,
8891420,1,2451,1589,1,
88922416,3373,16,0,420,
88931,2453,1595,1,2355,
8894858,1,2360,813,1,
88952366,3374,16,0,420,
88961,68,3375,19,419,
88971,68,3376,5,9,
88981,2414,1580,1,2490,
88993377,16,0,417,1,
89002455,3378,16,0,417,
89011,2451,1589,1,2416,
89023379,16,0,417,1,
89032453,1595,1,2355,858,
89041,2360,813,1,2366,
89053380,16,0,417,1,
890669,3381,19,325,1,
890769,3382,5,9,1,
89082414,1580,1,2490,3383,
890916,0,323,1,2455,
89103384,16,0,323,1,
89112451,1589,1,2416,3385,
891216,0,323,1,2453,
89131595,1,2355,858,1,
89142360,813,1,2366,3386,
891516,0,323,1,70,
89163387,19,413,1,70,
89173388,5,9,1,2414,
89181580,1,2490,3389,16,
89190,411,1,2455,3390,
892016,0,411,1,2451,
89211589,1,2416,3391,16,
89220,411,1,2453,1595,
89231,2355,858,1,2360,
8924813,1,2366,3392,16,
89250,411,1,71,3393,
892619,321,1,71,3394,
89275,9,1,2414,1580,
89281,2490,3395,16,0,
8929319,1,2455,3396,16,
89300,319,1,2451,1589,
89311,2416,3397,16,0,
8932319,1,2453,1595,1,
89332355,858,1,2360,813,
89341,2366,3398,16,0,
8935319,1,72,3399,19,
8936410,1,72,3400,5,
89379,1,2414,1580,1,
89382490,3401,16,0,408,
89391,2455,3402,16,0,
8940408,1,2451,1589,1,
89412416,3403,16,0,408,
89421,2453,1595,1,2355,
8943858,1,2360,813,1,
89442366,3404,16,0,408,
89451,73,3405,19,317,
89461,73,3406,5,9,
89471,2414,1580,1,2490,
89483407,16,0,315,1,
89492455,3408,16,0,315,
89501,2451,1589,1,2416,
89513409,16,0,315,1,
89522453,1595,1,2355,858,
89531,2360,813,1,2366,
89543410,16,0,315,1,
895574,3411,19,471,1,
895674,3412,5,9,1,
89572414,1580,1,2490,3413,
895816,0,469,1,2455,
89593414,16,0,469,1,
89602451,1589,1,2416,3415,
896116,0,469,1,2453,
89621595,1,2355,858,1,
89632360,813,1,2366,3416,
896416,0,469,1,75,
89653417,19,311,1,75,
89663418,5,9,1,2414,
89671580,1,2490,3419,16,
89680,309,1,2455,3420,
896916,0,309,1,2451,
89701589,1,2416,3421,16,
89710,309,1,2453,1595,
89721,2355,858,1,2360,
8973813,1,2366,3422,16,
89740,309,1,76,3423,
897519,405,1,76,3424,
89765,9,1,2414,1580,
89771,2490,3425,16,0,
8978403,1,2455,3426,16,
89790,403,1,2451,1589,
89801,2416,3427,16,0,
8981403,1,2453,1595,1,
89822355,858,1,2360,813,
89831,2366,3428,16,0,
8984403,1,77,3429,19,
8985307,1,77,3430,5,
89869,1,2414,1580,1,
89872490,3431,16,0,305,
89881,2455,3432,16,0,
8989305,1,2451,1589,1,
89902416,3433,16,0,305,
89911,2453,1595,1,2355,
8992858,1,2360,813,1,
89932366,3434,16,0,305,
89941,78,3435,19,463,
89951,78,3436,5,9,
89961,2414,1580,1,2490,
89973437,16,0,461,1,
89982455,3438,16,0,461,
89991,2451,1589,1,2416,
90003439,16,0,461,1,
90012453,1595,1,2355,858,
90021,2360,813,1,2366,
90033440,16,0,461,1,
900479,3441,19,301,1,
900579,3442,5,9,1,
90062414,1580,1,2490,3443,
900716,0,299,1,2455,
90083444,16,0,299,1,
90092451,1589,1,2416,3445,
901016,0,299,1,2453,
90111595,1,2355,858,1,
90122360,813,1,2366,3446,
901316,0,299,1,80,
90143447,19,298,1,80,
90153448,5,9,1,2414,
90161580,1,2490,3449,16,
90170,296,1,2455,3450,
901816,0,296,1,2451,
90191589,1,2416,3451,16,
90200,296,1,2453,1595,
90211,2355,858,1,2360,
9022813,1,2366,3452,16,
90230,296,1,81,3453,
902419,295,1,81,3454,
90255,9,1,2414,1580,
90261,2490,3455,16,0,
9027293,1,2455,3456,16,
90280,293,1,2451,1589,
90291,2416,3457,16,0,
9030293,1,2453,1595,1,
90312355,858,1,2360,813,
90321,2366,3458,16,0,
9033293,1,82,3459,19,
9034590,1,82,3460,5,
90359,1,2414,1580,1,
90362490,3461,16,0,588,
90371,2455,3462,16,0,
9038588,1,2451,1589,1,
90392416,3463,16,0,588,
90401,2453,1595,1,2355,
9041858,1,2360,813,1,
90422366,3464,16,0,588,
90431,83,3465,19,393,
90441,83,3466,5,9,
90451,2414,1580,1,2490,
90463467,16,0,391,1,
90472455,3468,16,0,391,
90481,2451,1589,1,2416,
90493469,16,0,391,1,
90502453,1595,1,2355,858,
90511,2360,813,1,2366,
90523470,16,0,391,1,
905384,3471,19,288,1,
905484,3472,5,9,1,
90552414,1580,1,2490,3473,
905616,0,286,1,2455,
90573474,16,0,286,1,
90582451,1589,1,2416,3475,
905916,0,286,1,2453,
90601595,1,2355,858,1,
90612360,813,1,2366,3476,
906216,0,286,1,85,
90633477,19,285,1,85,
90643478,5,9,1,2414,
90651580,1,2490,3479,16,
90660,283,1,2455,3480,
906716,0,283,1,2451,
90681589,1,2416,3481,16,
90690,283,1,2453,1595,
90701,2355,858,1,2360,
9071813,1,2366,3482,16,
90720,283,1,86,3483,
907319,389,1,86,3484,
90745,9,1,2414,1580,
90751,2490,3485,16,0,
9076387,1,2455,3486,16,
90770,387,1,2451,1589,
90781,2416,3487,16,0,
9079387,1,2453,1595,1,
90802355,858,1,2360,813,
90811,2366,3488,16,0,
9082387,1,87,3489,19,
9083281,1,87,3490,5,
90849,1,2414,1580,1,
90852490,3491,16,0,279,
90861,2455,3492,16,0,
9087279,1,2451,1589,1,
90882416,3493,16,0,279,
90891,2453,1595,1,2355,
9090858,1,2360,813,1,
90912366,3494,16,0,279,
90921,88,3495,19,644,
90931,88,3496,5,9,
90941,2414,1580,1,2490,
90953497,16,0,642,1,
90962455,3498,16,0,642,
90971,2451,1589,1,2416,
90983499,16,0,642,1,
90992453,1595,1,2355,858,
91001,2360,813,1,2366,
91013500,16,0,642,1,
910289,3501,19,276,1,
910389,3502,5,9,1,
91042414,1580,1,2490,3503,
910516,0,274,1,2455,
91063504,16,0,274,1,
91072451,1589,1,2416,3505,
910816,0,274,1,2453,
91091595,1,2355,858,1,
91102360,813,1,2366,3506,
911116,0,274,1,90,
91123507,19,382,1,90,
91133508,5,9,1,2414,
91141580,1,2490,3509,16,
91150,380,1,2455,3510,
911616,0,380,1,2451,
91171589,1,2416,3511,16,
91180,380,1,2453,1595,
91191,2355,858,1,2360,
9120813,1,2366,3512,16,
91210,380,1,91,3513,
912219,133,1,91,3514,
91235,121,1,0,3515,
912416,0,558,1,1,
91251904,1,2,1910,1,
91263,1915,1,4,1920,
91271,5,1925,1,6,
91281930,1,7,1935,1,
91298,3516,16,0,131,
91301,1515,3517,16,0,
9131165,1,2605,3098,1,
91322135,836,1,2021,707,
91331,2022,3518,16,0,
9134501,1,256,3519,16,
91350,173,1,2025,3520,
913616,0,505,1,18,
91373521,16,0,138,1,
91382027,3522,16,0,509,
91391,2029,714,1,2030,
9140720,1,2031,725,1,
91412032,730,1,2033,735,
91421,277,3523,16,0,
9143173,1,2035,741,1,
91442037,746,1,2039,751,
91451,32,3524,16,0,
9146165,1,2041,757,1,
91472043,762,1,2044,767,
91481,2547,3126,1,2550,
91493525,16,0,173,1,
915041,3526,16,0,173,
91511,1297,3527,16,0,
9152165,1,43,3528,16,
91530,173,1,1802,774,
91541,46,3529,16,0,
9155178,1,1804,3530,16,
91560,165,1,299,3531,
915716,0,173,1,2309,
91583532,16,0,165,1,
915952,3533,16,0,165,
91601,509,3534,16,0,
9161173,1,525,3535,16,
91620,173,1,62,3536,
916316,0,194,1,65,
91643537,16,0,196,1,
91652074,3538,16,0,165,
91661,1574,787,1,71,
91673539,16,0,173,1,
91681775,3540,16,0,165,
91691,76,3541,16,0,
9170173,1,1834,3542,16,
91710,165,1,2197,3543,
917216,0,165,1,79,
91733544,16,0,173,1,
91741335,3545,16,0,165,
91751,322,3546,16,0,
9176173,1,85,3547,16,
91770,173,1,1261,3548,
917816,0,165,1,89,
91793549,16,0,173,1,
9180346,3550,16,0,173,
91811,2355,858,1,97,
91823551,16,0,173,1,
91832608,3109,1,2358,807,
91841,2360,813,1,102,
91853552,16,0,173,1,
91861860,820,1,2364,3553,
918716,0,379,1,1113,
91883554,16,0,158,1,
9189112,3555,16,0,173,
91901,1117,3556,16,0,
9191165,1,1873,829,1,
91921876,3557,16,0,165,
91931,372,3558,16,0,
9194539,1,374,3559,16,
91950,541,1,124,3560,
919616,0,173,1,376,
91973561,16,0,543,1,
9198378,3562,16,0,545,
91991,381,3563,16,0,
9200173,1,137,3564,16,
92010,173,1,1901,3565,
920216,0,165,1,2575,
92033115,1,1153,3566,16,
92040,165,1,151,3567,
920516,0,173,1,1407,
92063568,16,0,165,1,
92071659,3569,16,0,165,
92081,406,3570,16,0,
9209173,1,2586,3132,1,
92102587,3571,16,0,558,
92111,1371,3572,16,0,
9212165,1,2104,801,1,
92132105,3573,16,0,165,
92141,166,3574,16,0,
9215173,1,1622,3575,16,
92160,173,1,2354,853,
92171,1931,863,1,1933,
92183576,16,0,165,1,
92192362,3137,1,2606,3121,
92201,2607,3104,1,1585,
92213577,16,0,173,1,
9222182,3578,16,0,173,
92231,1189,3579,16,0,
9224165,1,1443,3580,16,
92250,165,1,1695,3581,
922616,0,165,1,431,
92273582,16,0,173,1,
9228447,3583,16,0,173,
92291,199,3584,16,0,
9230173,1,1958,3585,16,
92310,165,1,1657,878,
92321,459,3586,16,0,
9233173,1,462,3587,16,
92340,173,1,217,3588,
923516,0,173,1,2226,
9236886,1,1225,3589,16,
92370,165,1,1479,3590,
923816,0,165,1,1731,
92393591,16,0,173,1,
92401989,894,1,1990,3592,
924116,0,165,1,236,
92423593,16,0,173,1,
92431756,3594,16,0,165,
92441,92,3595,19,624,
92451,92,3596,5,91,
92461,256,3597,16,0,
9247622,1,1261,3598,16,
92480,622,1,509,3599,
924916,0,622,1,2197,
92503600,16,0,622,1,
92511515,3601,16,0,622,
92521,2021,707,1,1775,
92533602,16,0,622,1,
92542029,714,1,2030,720,
92551,2031,725,1,2032,
9256730,1,2033,735,1,
9257277,3603,16,0,622,
92581,2035,741,1,2037,
9259746,1,2039,751,1,
926032,3604,16,0,622,
92611,2041,757,1,2043,
9262762,1,2044,767,1,
92632550,3605,16,0,622,
92641,41,3606,16,0,
9265622,1,1297,3607,16,
92660,622,1,43,3608,
926716,0,622,1,1802,
9268774,1,1804,3609,16,
92690,622,1,299,3610,
927016,0,622,1,2309,
92713611,16,0,622,1,
927252,3612,16,0,622,
92731,525,3613,16,0,
9274622,1,62,3614,16,
92750,622,1,2074,3615,
927616,0,622,1,1574,
9277787,1,71,3616,16,
92780,622,1,76,3617,
927916,0,622,1,1834,
92803618,16,0,622,1,
92811585,3619,16,0,622,
92821,1335,3620,16,0,
9283622,1,79,3621,16,
92840,622,1,85,3622,
928516,0,622,1,89,
92863623,16,0,622,1,
9287346,3624,16,0,622,
92881,2104,801,1,2105,
92893625,16,0,622,1,
92902358,807,1,2360,813,
92911,97,3626,16,0,
9292622,1,1860,820,1,
9293102,3627,16,0,622,
92941,112,3628,16,0,
9295622,1,1117,3629,16,
92960,622,1,1873,829,
92971,1876,3630,16,0,
9298622,1,124,3631,16,
92990,622,1,2135,836,
93001,381,3632,16,0,
9301622,1,322,3633,16,
93020,622,1,137,3634,
930316,0,622,1,1901,
93043635,16,0,622,1,
93051153,3636,16,0,622,
93061,151,3637,16,0,
9307622,1,1407,3638,16,
93080,622,1,1659,3639,
930916,0,622,1,406,
93103640,16,0,622,1,
93111371,3641,16,0,622,
93121,166,3642,16,0,
9313622,1,1622,3643,16,
93140,622,1,2354,853,
93151,2355,858,1,1931,
9316863,1,1933,3644,16,
93170,622,1,431,3645,
931816,0,622,1,182,
93193646,16,0,622,1,
93201189,3647,16,0,622,
93211,1443,3648,16,0,
9322622,1,1695,3649,16,
93230,622,1,447,3650,
932416,0,622,1,199,
93253651,16,0,622,1,
93261958,3652,16,0,622,
93271,1657,878,1,459,
93283653,16,0,622,1,
9329462,3654,16,0,622,
93301,217,3655,16,0,
9331622,1,2226,886,1,
93321225,3656,16,0,622,
93331,1479,3657,16,0,
9334622,1,1731,3658,16,
93350,622,1,1989,894,
93361,1990,3659,16,0,
9337622,1,236,3660,16,
93380,622,1,1756,3661,
933916,0,622,1,93,
93403662,19,621,1,93,
93413663,5,91,1,256,
93423664,16,0,619,1,
93431261,3665,16,0,619,
93441,509,3666,16,0,
9345619,1,2197,3667,16,
93460,619,1,1515,3668,
934716,0,619,1,2021,
9348707,1,1775,3669,16,
93490,619,1,2029,714,
93501,2030,720,1,2031,
9351725,1,2032,730,1,
93522033,735,1,277,3670,
935316,0,619,1,2035,
9354741,1,2037,746,1,
93552039,751,1,32,3671,
935616,0,619,1,2041,
9357757,1,2043,762,1,
93582044,767,1,2550,3672,
935916,0,619,1,41,
93603673,16,0,619,1,
93611297,3674,16,0,619,
93621,43,3675,16,0,
9363619,1,1802,774,1,
93641804,3676,16,0,619,
93651,299,3677,16,0,
9366619,1,2309,3678,16,
93670,619,1,52,3679,
936816,0,619,1,525,
93693680,16,0,619,1,
937062,3681,16,0,619,
93711,2074,3682,16,0,
9372619,1,1574,787,1,
937371,3683,16,0,619,
93741,76,3684,16,0,
9375619,1,1834,3685,16,
93760,619,1,1585,3686,
937716,0,619,1,1335,
93783687,16,0,619,1,
937979,3688,16,0,619,
93801,85,3689,16,0,
9381619,1,89,3690,16,
93820,619,1,346,3691,
938316,0,619,1,2104,
9384801,1,2105,3692,16,
93850,619,1,2358,807,
93861,2360,813,1,97,
93873693,16,0,619,1,
93881860,820,1,102,3694,
938916,0,619,1,112,
93903695,16,0,619,1,
93911117,3696,16,0,619,
93921,1873,829,1,1876,
93933697,16,0,619,1,
9394124,3698,16,0,619,
93951,2135,836,1,381,
93963699,16,0,619,1,
9397322,3700,16,0,619,
93981,137,3701,16,0,
9399619,1,1901,3702,16,
94000,619,1,1153,3703,
940116,0,619,1,151,
94023704,16,0,619,1,
94031407,3705,16,0,619,
94041,1659,3706,16,0,
9405619,1,406,3707,16,
94060,619,1,1371,3708,
940716,0,619,1,166,
94083709,16,0,619,1,
94091622,3710,16,0,619,
94101,2354,853,1,2355,
9411858,1,1931,863,1,
94121933,3711,16,0,619,
94131,431,3712,16,0,
9414619,1,182,3713,16,
94150,619,1,1189,3714,
941616,0,619,1,1443,
94173715,16,0,619,1,
94181695,3716,16,0,619,
94191,447,3717,16,0,
9420619,1,199,3718,16,
94210,619,1,1958,3719,
942216,0,619,1,1657,
9423878,1,459,3720,16,
94240,619,1,462,3721,
942516,0,619,1,217,
94263722,16,0,619,1,
94272226,886,1,1225,3723,
942816,0,619,1,1479,
94293724,16,0,619,1,
94301731,3725,16,0,619,
94311,1989,894,1,1990,
94323726,16,0,619,1,
9433236,3727,16,0,619,
94341,1756,3728,16,0,
9435619,1,94,3729,19,
9436618,1,94,3730,5,
943791,1,256,3731,16,
94380,616,1,1261,3732,
943916,0,616,1,509,
94403733,16,0,616,1,
94412197,3734,16,0,616,
94421,1515,3735,16,0,
9443616,1,2021,707,1,
94441775,3736,16,0,616,
94451,2029,714,1,2030,
9446720,1,2031,725,1,
94472032,730,1,2033,735,
94481,277,3737,16,0,
9449616,1,2035,741,1,
94502037,746,1,2039,751,
94511,32,3738,16,0,
9452616,1,2041,757,1,
94532043,762,1,2044,767,
94541,2550,3739,16,0,
9455616,1,41,3740,16,
94560,616,1,1297,3741,
945716,0,616,1,43,
94583742,16,0,616,1,
94591802,774,1,1804,3743,
946016,0,616,1,299,
94613744,16,0,616,1,
94622309,3745,16,0,616,
94631,52,3746,16,0,
9464616,1,525,3747,16,
94650,616,1,62,3748,
946616,0,616,1,2074,
94673749,16,0,616,1,
94681574,787,1,71,3750,
946916,0,616,1,76,
94703751,16,0,616,1,
94711834,3752,16,0,616,
94721,1585,3753,16,0,
9473616,1,1335,3754,16,
94740,616,1,79,3755,
947516,0,616,1,85,
94763756,16,0,616,1,
947789,3757,16,0,616,
94781,346,3758,16,0,
9479616,1,2104,801,1,
94802105,3759,16,0,616,
94811,2358,807,1,2360,
9482813,1,97,3760,16,
94830,616,1,1860,820,
94841,102,3761,16,0,
9485616,1,112,3762,16,
94860,616,1,1117,3763,
948716,0,616,1,1873,
9488829,1,1876,3764,16,
94890,616,1,124,3765,
949016,0,616,1,2135,
9491836,1,381,3766,16,
94920,616,1,322,3767,
949316,0,616,1,137,
94943768,16,0,616,1,
94951901,3769,16,0,616,
94961,1153,3770,16,0,
9497616,1,151,3771,16,
94980,616,1,1407,3772,
949916,0,616,1,1659,
95003773,16,0,616,1,
9501406,3774,16,0,616,
95021,1371,3775,16,0,
9503616,1,166,3776,16,
95040,616,1,1622,3777,
950516,0,616,1,2354,
9506853,1,2355,858,1,
95071931,863,1,1933,3778,
950816,0,616,1,431,
95093779,16,0,616,1,
9510182,3780,16,0,616,
95111,1189,3781,16,0,
9512616,1,1443,3782,16,
95130,616,1,1695,3783,
951416,0,616,1,447,
95153784,16,0,616,1,
9516199,3785,16,0,616,
95171,1958,3786,16,0,
9518616,1,1657,878,1,
9519459,3787,16,0,616,
95201,462,3788,16,0,
9521616,1,217,3789,16,
95220,616,1,2226,886,
95231,1225,3790,16,0,
9524616,1,1479,3791,16,
95250,616,1,1731,3792,
952616,0,616,1,1989,
9527894,1,1990,3793,16,
95280,616,1,236,3794,
952916,0,616,1,1756,
95303795,16,0,616,1,
953195,3796,19,103,1,
953295,3797,5,1,1,
95330,3798,16,0,104,
95341,96,3799,19,647,
95351,96,3800,5,1,
95361,0,3801,16,0,
9537645,1,97,3802,19,
9538605,1,97,3803,5,
95392,1,0,3804,16,
95400,603,1,2587,3805,
954116,0,630,1,98,
95423806,19,357,1,98,
95433807,5,2,1,0,
95443808,16,0,481,1,
95452587,3809,16,0,355,
95461,99,3810,19,474,
95471,99,3811,5,2,
95481,0,3812,16,0,
9549472,1,2587,3813,16,
95500,652,1,100,3814,
955119,466,1,100,3815,
95525,4,1,0,3816,
955316,0,464,1,2587,
95543817,16,0,464,1,
95552598,3818,16,0,609,
95561,2528,3819,16,0,
9557609,1,101,3820,19,
9558491,1,101,3821,5,
95592,1,2366,3822,16,
95600,492,1,2455,3823,
956116,0,489,1,102,
95623824,19,398,1,102,
95633825,5,4,1,2366,
95643826,16,0,396,1,
95652455,3827,16,0,396,
95661,2490,3828,16,0,
9567460,1,2416,3829,16,
95680,460,1,103,3830,
956919,141,1,103,3831,
95705,3,1,2401,3832,
957116,0,437,1,2534,
95723833,16,0,475,1,
957310,3834,16,0,139,
95741,104,3835,19,151,
95751,104,3836,5,16,
95761,0,3837,16,0,
9577482,1,2074,3838,16,
95780,637,1,2587,3839,
957916,0,482,1,10,
95803840,16,0,266,1,
95812197,3841,16,0,637,
95821,1901,3842,16,0,
9583637,1,2309,3843,16,
95840,637,1,2534,3844,
958516,0,266,1,21,
95863845,16,0,149,1,
95872105,3846,16,0,637,
95881,1804,3847,16,0,
9589637,1,1990,3848,16,
95900,637,1,32,3849,
959116,0,637,1,2401,
95923850,16,0,266,1,
95931958,3851,16,0,637,
95941,1775,3852,16,0,
9595637,1,105,3853,19,
9596130,1,105,3854,5,
959717,1,0,3855,16,
95980,128,1,2074,3856,
959916,0,137,1,2587,
96003857,16,0,128,1,
96012105,3858,16,0,137,
96021,10,3859,16,0,
9603137,1,2197,3860,16,
96040,137,1,1901,3861,
960516,0,137,1,2309,
96063862,16,0,137,1,
960752,3863,16,0,192,
96081,21,3864,16,0,
9609137,1,2534,3865,16,
96100,137,1,1804,3866,
961116,0,137,1,1990,
96123867,16,0,137,1,
961332,3868,16,0,137,
96141,2401,3869,16,0,
9615137,1,1958,3870,16,
96160,137,1,1775,3871,
961716,0,137,1,106,
96183872,19,432,1,106,
96193873,5,4,1,2366,
96203874,16,0,430,1,
96212455,3875,16,0,430,
96221,2490,3876,16,0,
9623430,1,2416,3877,16,
96240,430,1,107,3878,
962519,224,1,107,3879,
96265,13,1,2074,3880,
962716,0,510,1,2412,
96283881,16,0,363,1,
96292197,3882,16,0,510,
96301,1901,3883,16,0,
9631510,1,2309,3884,16,
96320,510,1,1990,3885,
963316,0,510,1,1804,
96343886,16,0,510,1,
96352545,3887,16,0,222,
96361,31,3888,16,0,
9637265,1,32,3889,16,
96380,510,1,2105,3890,
963916,0,510,1,1958,
96403891,16,0,510,1,
96411775,3892,16,0,510,
96421,108,3893,19,314,
96431,108,3894,5,1,
96441,32,3895,16,0,
9645312,1,109,3896,19,
9646255,1,109,3897,5,
964710,1,2074,3898,16,
96480,578,1,2197,3899,
964916,0,661,1,1901,
96503900,16,0,438,1,
96512309,3901,16,0,253,
96521,1804,3902,16,0,
9653326,1,1990,3903,16,
96540,498,1,32,3904,
965516,0,450,1,2105,
96563905,16,0,651,1,
96571958,3906,16,0,477,
96581,1775,3907,16,0,
9659260,1,110,3908,19,
9660634,1,110,3909,5,
966110,1,2074,3910,16,
96620,632,1,2197,3911,
966316,0,632,1,1901,
96643912,16,0,632,1,
96652309,3913,16,0,632,
96661,1804,3914,16,0,
9667632,1,1990,3915,16,
96680,632,1,32,3916,
966916,0,632,1,2105,
96703917,16,0,632,1,
96711958,3918,16,0,632,
96721,1775,3919,16,0,
9673632,1,111,3920,19,
9674161,1,111,3921,5,
967529,1,1479,3922,16,
96760,563,1,2074,3923,
967716,0,636,1,1695,
96783924,16,0,188,1,
96791756,3925,16,0,252,
96801,2197,3926,16,0,
9681636,1,2309,3927,16,
96820,636,1,1876,3928,
968316,0,237,1,1659,
96843929,16,0,252,1,
96851443,3930,16,0,526,
96861,1117,3931,16,0,
9687159,1,1990,3932,16,
96880,636,1,1189,3933,
968916,0,238,1,1775,
96903934,16,0,636,1,
969132,3935,16,0,636,
96921,2105,3936,16,0,
9693636,1,1515,3937,16,
96940,580,1,1901,3938,
969516,0,636,1,52,
96963939,16,0,591,1,
96971804,3940,16,0,636,
96981,1261,3941,16,0,
9699358,1,1153,3942,16,
97000,245,1,1225,3943,
970116,0,289,1,1335,
97023944,16,0,459,1,
97031933,3945,16,0,565,
97041,1834,3946,16,0,
9705373,1,1297,3947,16,
97060,386,1,1407,3948,
970716,0,572,1,1958,
97083949,16,0,636,1,
97091371,3950,16,0,453,
97101,112,3951,19,535,
97111,112,3952,5,10,
97121,2074,3953,16,0,
9713533,1,2197,3954,16,
97140,533,1,1901,3955,
971516,0,533,1,2309,
97163956,16,0,533,1,
97171804,3957,16,0,533,
97181,1990,3958,16,0,
9719533,1,32,3959,16,
97200,533,1,2105,3960,
972116,0,533,1,1958,
97223961,16,0,533,1,
97231775,3962,16,0,533,
97241,113,3963,19,531,
97251,113,3964,5,10,
97261,2074,3965,16,0,
9727529,1,2197,3966,16,
97280,529,1,1901,3967,
972916,0,529,1,2309,
97303968,16,0,529,1,
97311804,3969,16,0,529,
97321,1990,3970,16,0,
9733529,1,32,3971,16,
97340,529,1,2105,3972,
973516,0,529,1,1958,
97363973,16,0,529,1,
97371775,3974,16,0,529,
97381,114,3975,19,576,
97391,114,3976,5,10,
97401,2074,3977,16,0,
9741574,1,2197,3978,16,
97420,574,1,1901,3979,
974316,0,574,1,2309,
97443980,16,0,574,1,
97451804,3981,16,0,574,
97461,1990,3982,16,0,
9747574,1,32,3983,16,
97480,574,1,2105,3984,
974916,0,574,1,1958,
97503985,16,0,574,1,
97511775,3986,16,0,574,
97521,115,3987,19,525,
97531,115,3988,5,10,
97541,2074,3989,16,0,
9755523,1,2197,3990,16,
97560,523,1,1901,3991,
975716,0,523,1,2309,
97583992,16,0,523,1,
97591804,3993,16,0,523,
97601,1990,3994,16,0,
9761523,1,32,3995,16,
97620,523,1,2105,3996,
976316,0,523,1,1958,
97643997,16,0,523,1,
97651775,3998,16,0,523,
97661,116,3999,19,522,
97671,116,4000,5,10,
97681,2074,4001,16,0,
9769520,1,2197,4002,16,
97700,520,1,1901,4003,
977116,0,520,1,2309,
97724004,16,0,520,1,
97731804,4005,16,0,520,
97741,1990,4006,16,0,
9775520,1,32,4007,16,
97760,520,1,2105,4008,
977716,0,520,1,1958,
97784009,16,0,520,1,
97791775,4010,16,0,520,
97801,117,4011,19,519,
97811,117,4012,5,10,
97821,2074,4013,16,0,
9783517,1,2197,4014,16,
97840,517,1,1901,4015,
978516,0,517,1,2309,
97864016,16,0,517,1,
97871804,4017,16,0,517,
97881,1990,4018,16,0,
9789517,1,32,4019,16,
97900,517,1,2105,4020,
979116,0,517,1,1958,
97924021,16,0,517,1,
97931775,4022,16,0,517,
97941,118,4023,19,516,
97951,118,4024,5,10,
97961,2074,4025,16,0,
9797514,1,2197,4026,16,
97980,514,1,1901,4027,
979916,0,514,1,2309,
98004028,16,0,514,1,
98011804,4029,16,0,514,
98021,1990,4030,16,0,
9803514,1,32,4031,16,
98040,514,1,2105,4032,
980516,0,514,1,1958,
98064033,16,0,514,1,
98071775,4034,16,0,514,
98081,119,4035,19,513,
98091,119,4036,5,10,
98101,2074,4037,16,0,
9811511,1,2197,4038,16,
98120,511,1,1901,4039,
981316,0,511,1,2309,
98144040,16,0,511,1,
98151804,4041,16,0,511,
98161,1990,4042,16,0,
9817511,1,32,4043,16,
98180,511,1,2105,4044,
981916,0,511,1,1958,
98204045,16,0,511,1,
98211775,4046,16,0,511,
98221,120,4047,19,147,
98231,120,4048,5,2,
98241,1756,4049,16,0,
9825322,1,1659,4050,16,
98260,145,1,121,4051,
982719,556,1,121,4052,
98285,65,1,1479,4053,
982916,0,554,1,112,
98304054,16,0,554,1,
98311804,4055,16,0,554,
98321,431,4056,16,0,
9833554,1,1443,4057,16,
98340,554,1,1756,4058,
983516,0,554,1,124,
98364059,16,0,554,1,
9837525,4060,16,0,554,
98381,2197,4061,16,0,
9839554,1,236,4062,16,
98400,554,1,346,4063,
984116,0,554,1,2309,
98424064,16,0,554,1,
98431876,4065,16,0,554,
98441,1659,4066,16,0,
9845554,1,1225,4067,16,
98460,554,1,1117,4068,
984716,0,554,1,137,
98484069,16,0,554,1,
98491775,4070,16,0,554,
98501,32,4071,16,0,
9851554,1,2105,4072,16,
98520,554,1,1407,4073,
985316,0,554,1,256,
98544074,16,0,554,1,
9855459,4075,16,0,554,
98561,41,4076,16,0,
9857554,1,151,4077,16,
98580,554,1,43,4078,
985916,0,554,1,1901,
98604079,16,0,554,1,
9861509,4080,16,0,554,
98621,52,4081,16,0,
9863554,1,381,4082,16,
98640,554,1,447,4083,
986516,0,554,1,166,
98664084,16,0,554,1,
9867462,4085,16,0,554,
98681,277,4086,16,0,
9869554,1,1695,4087,16,
98700,554,1,1261,4088,
987116,0,554,1,1153,
98724089,16,0,554,1,
987362,4090,16,0,585,
98741,2550,4091,16,0,
9875554,1,2074,4092,16,
98760,554,1,1335,4093,
987716,0,554,1,71,
98784094,16,0,554,1,
9879182,4095,16,0,554,
98801,76,4096,16,0,
9881554,1,79,4097,16,
98820,554,1,1933,4098,
988316,0,554,1,299,
98844099,16,0,554,1,
988585,4100,16,0,554,
98861,1515,4101,16,0,
9887554,1,89,4102,16,
98880,554,1,1834,4103,
988916,0,554,1,1622,
98904104,16,0,554,1,
98911990,4105,16,0,554,
98921,406,4106,16,0,
9893554,1,1731,4107,16,
98940,554,1,97,4108,
989516,0,554,1,1297,
98964109,16,0,554,1,
98971189,4110,16,0,554,
98981,102,4111,16,0,
9899554,1,1585,4112,16,
99000,554,1,322,4113,
990116,0,554,1,1958,
99024114,16,0,554,1,
9903199,4115,16,0,554,
99041,1371,4116,16,0,
9905554,1,217,4117,16,
99060,554,1,122,4118,
990719,601,1,122,4119,
99085,2,1,459,4120,
990916,0,599,1,41,
99104121,16,0,653,1,
9911123,4122,19,608,1,
9912123,4123,5,3,1,
9913462,4124,16,0,606,
99141,459,4125,16,0,
9915628,1,41,4126,16,
99160,628,1,124,4127,
991719,4128,4,36,69,
99180,120,0,112,0,
9919114,0,101,0,115,
99200,115,0,105,0,
9921111,0,110,0,65,
99220,114,0,103,0,
9923117,0,109,0,101,
99240,110,0,116,0,
99251,124,4123,1,125,
99264129,19,548,1,125,
99274130,5,65,1,1479,
99284131,16,0,546,1,
9929112,4132,16,0,546,
99301,1804,4133,16,0,
9931546,1,431,4134,16,
99320,546,1,1443,4135,
993316,0,546,1,1756,
99344136,16,0,546,1,
9935124,4137,16,0,546,
99361,525,4138,16,0,
9937546,1,2197,4139,16,
99380,546,1,236,4140,
993916,0,546,1,346,
99404141,16,0,546,1,
99412309,4142,16,0,546,
99421,1876,4143,16,0,
9943546,1,1659,4144,16,
99440,546,1,1225,4145,
994516,0,546,1,1117,
99464146,16,0,546,1,
9947137,4147,16,0,546,
99481,1775,4148,16,0,
9949546,1,32,4149,16,
99500,546,1,2105,4150,
995116,0,546,1,1407,
99524151,16,0,546,1,
9953256,4152,16,0,546,
99541,459,4153,16,0,
9955546,1,41,4154,16,
99560,546,1,151,4155,
995716,0,546,1,43,
99584156,16,0,546,1,
99591901,4157,16,0,546,
99601,509,4158,16,0,
9961546,1,52,4159,16,
99620,546,1,381,4160,
996316,0,546,1,447,
99644161,16,0,546,1,
9965166,4162,16,0,546,
99661,462,4163,16,0,
9967546,1,277,4164,16,
99680,546,1,1695,4165,
996916,0,546,1,1261,
99704166,16,0,546,1,
99711153,4167,16,0,546,
99721,62,4168,16,0,
9973586,1,2550,4169,16,
99740,546,1,2074,4170,
997516,0,546,1,1335,
99764171,16,0,546,1,
997771,4172,16,0,546,
99781,182,4173,16,0,
9979546,1,76,4174,16,
99800,546,1,79,4175,
998116,0,546,1,1933,
99824176,16,0,546,1,
9983299,4177,16,0,546,
99841,85,4178,16,0,
9985546,1,1515,4179,16,
99860,546,1,89,4180,
998716,0,546,1,1834,
99884181,16,0,546,1,
99891622,4182,16,0,546,
99901,1990,4183,16,0,
9991546,1,406,4184,16,
99920,546,1,1731,4185,
999316,0,546,1,97,
99944186,16,0,546,1,
99951297,4187,16,0,546,
99961,1189,4188,16,0,
9997546,1,102,4189,16,
99980,546,1,1585,4190,
999916,0,546,1,322,
100004191,16,0,546,1,
100011958,4192,16,0,546,
100021,199,4193,16,0,
10003546,1,1371,4194,16,
100040,546,1,217,4195,
1000516,0,546,1,126,
100064196,19,4197,4,28,
1000786,0,101,0,99,
100080,116,0,111,0,
10009114,0,67,0,111,
100100,110,0,115,0,
10011116,0,97,0,110,
100120,116,0,1,126,
100134130,1,127,4198,19,
100144199,4,32,82,0,
10015111,0,116,0,97,
100160,116,0,105,0,
10017111,0,110,0,67,
100180,111,0,110,0,
10019115,0,116,0,97,
100200,110,0,116,0,
100211,127,4130,1,128,
100224200,19,4201,4,24,
1002376,0,105,0,115,
100240,116,0,67,0,
10025111,0,110,0,115,
100260,116,0,97,0,
10027110,0,116,0,1,
10028128,4130,1,129,4202,
1002919,169,1,129,4203,
100305,64,1,1479,4204,
1003116,0,537,1,112,
100324205,16,0,247,1,
100331804,4206,16,0,584,
100341,431,4207,16,0,
10035581,1,1443,4208,16,
100360,488,1,1756,4209,
1003716,0,660,1,124,
100384210,16,0,259,1,
10039525,4211,16,0,366,
100401,2197,4212,16,0,
10041584,1,236,4213,16,
100420,426,1,346,4214,
1004316,0,500,1,2309,
100444215,16,0,584,1,
100451876,4216,16,0,378,
100461,1659,4217,16,0,
10047660,1,1225,4218,16,
100480,246,1,1117,4219,
1004916,0,218,1,137,
100504220,16,0,282,1,
100511775,4221,16,0,584,
100521,32,4222,16,0,
10053584,1,2105,4223,16,
100540,584,1,1407,4224,
1005516,0,493,1,256,
100564225,16,0,442,1,
10057459,4226,16,0,167,
100581,41,4227,16,0,
10059167,1,151,4228,16,
100600,318,1,43,4229,
1006116,0,631,1,1901,
100624230,16,0,584,1,
10063509,4231,16,0,641,
100641,52,4232,16,0,
10065593,1,381,4233,16,
100660,559,1,447,4234,
1006716,0,366,1,166,
100684235,16,0,353,1,
10069462,4236,16,0,167,
100701,277,4237,16,0,
10071451,1,1695,4238,16,
100720,277,1,1261,4239,
1007316,0,308,1,1153,
100744240,16,0,174,1,
100752550,4241,16,0,569,
100761,2074,4242,16,0,
10077584,1,1335,4243,16,
100780,402,1,71,4244,
1007916,0,202,1,182,
100804245,16,0,366,1,
1008176,4246,16,0,557,
100821,79,4247,16,0,
10083217,1,1933,4248,16,
100840,445,1,299,4249,
1008516,0,467,1,85,
100864250,16,0,485,1,
100871515,4251,16,0,568,
100881,89,4252,16,0,
10089228,1,1834,4253,16,
100900,346,1,1622,4254,
1009116,0,640,1,1990,
100924255,16,0,584,1,
10093406,4256,16,0,570,
100941,1731,4257,16,0,
10095248,1,97,4258,16,
100960,446,1,1297,4259,
1009716,0,407,1,1189,
100984260,16,0,216,1,
10099102,4261,16,0,236,
101001,1585,4262,16,0,
10101650,1,322,4263,16,
101020,486,1,1958,4264,
1010316,0,584,1,199,
101044265,16,0,377,1,
101051371,4266,16,0,443,
101061,217,4267,16,0,
10107394,1,130,4268,19,
101084269,4,36,67,0,
10109111,0,110,0,115,
101100,116,0,97,0,
10111110,0,116,0,69,
101120,120,0,112,0,
10113114,0,101,0,115,
101140,115,0,105,0,
10115111,0,110,0,1,
10116130,4203,1,131,4270,
1011719,4271,4,30,73,
101180,100,0,101,0,
10119110,0,116,0,69,
101200,120,0,112,0,
10121114,0,101,0,115,
101220,115,0,105,0,
10123111,0,110,0,1,
10124131,4203,1,132,4272,
1012519,4273,4,36,73,
101260,100,0,101,0,
10127110,0,116,0,68,
101280,111,0,116,0,
1012969,0,120,0,112,
101300,114,0,101,0,
10131115,0,115,0,105,
101320,111,0,110,0,
101331,132,4203,1,133,
101344274,19,4275,4,44,
1013570,0,117,0,110,
101360,99,0,116,0,
10137105,0,111,0,110,
101380,67,0,97,0,
10139108,0,108,0,69,
101400,120,0,112,0,
10141114,0,101,0,115,
101420,115,0,105,0,
10143111,0,110,0,1,
10144133,4203,1,134,4276,
1014519,4277,4,32,66,
101460,105,0,110,0,
1014797,0,114,0,121,
101480,69,0,120,0,
10149112,0,114,0,101,
101500,115,0,115,0,
10151105,0,111,0,110,
101520,1,134,4203,1,
10153135,4278,19,4279,4,
1015430,85,0,110,0,
1015597,0,114,0,121,
101560,69,0,120,0,
10157112,0,114,0,101,
101580,115,0,115,0,
10159105,0,111,0,110,
101600,1,135,4203,1,
10161136,4280,19,4281,4,
1016236,84,0,121,0,
10163112,0,101,0,99,
101640,97,0,115,0,
10165116,0,69,0,120,
101660,112,0,114,0,
10167101,0,115,0,115,
101680,105,0,111,0,
10169110,0,1,136,4203,
101701,137,4282,19,4283,
101714,42,80,0,97,
101720,114,0,101,0,
10173110,0,116,0,104,
101740,101,0,115,0,
10175105,0,115,0,69,
101760,120,0,112,0,
10177114,0,101,0,115,
101780,115,0,105,0,
10179111,0,110,0,1,
10180137,4203,1,138,4284,
1018119,4285,4,56,73,
101820,110,0,99,0,
10183114,0,101,0,109,
101840,101,0,110,0,
10185116,0,68,0,101,
101860,99,0,114,0,
10187101,0,109,0,101,
101880,110,0,116,0,
1018969,0,120,0,112,
101900,114,0,101,0,
10191115,0,115,0,105,
101920,111,0,110,0,
101931,138,4203,1,140,
101944286,19,682,1,140,
101953797,1,141,4287,19,
10196693,1,141,3797,1,
10197142,4288,19,3112,1,
10198142,3800,1,143,4289,
1019919,3124,1,143,3800,
102001,144,4290,19,3107,
102011,144,3800,1,145,
102024291,19,3102,1,145,
102033800,1,146,4292,19,
102043135,1,146,3803,1,
10205147,4293,19,3119,1,
10206147,3803,1,148,4294,
1020719,3130,1,148,3807,
102081,149,4295,19,3140,
102091,149,3807,1,150,
102104296,19,676,1,150,
102113811,1,151,4297,19,
10212671,1,151,3811,1,
10213152,4298,19,688,1,
10214152,3815,1,153,4299,
1021519,698,1,153,3815,
102161,154,4300,19,1598,
102171,154,3821,1,155,
102184301,19,1593,1,155,
102193821,1,156,4302,19,
102201584,1,156,3825,1,
10221157,4303,19,1630,1,
10222157,3831,1,158,4304,
1022319,1614,1,158,3831,
102241,159,4305,19,1089,
102251,159,3836,1,160,
102264306,19,817,1,160,
102273879,1,161,4307,19,
10228861,1,161,3879,1,
10229162,4308,19,811,1,
10230162,3894,1,163,4309,
1023119,856,1,163,3894,
102321,164,4310,19,881,
102331,164,3897,1,165,
102344311,19,765,1,165,
102353897,1,166,4312,19,
10236790,1,166,3897,1,
10237167,4313,19,760,1,
10238167,3897,1,168,4314,
1023919,754,1,168,3897,
102401,169,4315,19,749,
102411,169,3897,1,170,
102424316,19,744,1,170,
102433897,1,171,4317,19,
10244738,1,171,3897,1,
10245172,4318,19,733,1,
10246172,3897,1,173,4319,
1024719,728,1,173,3897,
102481,174,4320,19,723,
102491,174,3897,1,175,
102504321,19,718,1,175,
102513897,1,176,4322,19,
102521119,1,176,3964,1,
10253177,4323,19,1262,1,
10254177,3976,1,178,4324,
1025519,1111,1,178,3988,
102561,179,4325,19,1250,
102571,179,3988,1,180,
102584326,19,897,1,180,
102594000,1,181,4327,19,
10260711,1,181,4000,1,
10261182,4328,19,804,1,
10262182,4000,1,183,4329,
1026319,839,1,183,4000,
102641,184,4330,19,867,
102651,184,4012,1,185,
102664331,19,889,1,185,
102674012,1,186,4332,19,
10268824,1,186,4024,1,
10269187,4333,19,832,1,
10270187,4024,1,188,4334,
1027119,778,1,188,4036,
102721,189,4335,19,1489,
102731,189,4048,1,190,
102744336,19,1125,1,190,
102754048,1,191,4337,19,
102761462,1,191,4048,1,
10277192,4338,19,1505,1,
10278192,4048,1,193,4339,
1027919,1367,1,193,3909,
102801,194,4340,19,1425,
102811,194,3909,1,195,
102824341,19,1105,1,195,
102833921,1,196,4342,19,
102841537,1,196,3921,1,
10285197,4343,19,1457,1,
10286197,3921,1,198,4344,
1028719,1410,1,198,3921,
102881,199,4345,19,1335,
102891,199,3921,1,200,
102904346,19,1272,1,200,
102913921,1,201,4347,19,
102921282,1,201,3921,1,
10293202,4348,19,1100,1,
10294202,3921,1,203,4349,
1029519,1521,1,203,3921,
102961,204,4350,19,1452,
102971,204,3921,1,205,
102984351,19,1400,1,205,
102993921,1,206,4352,19,
103001324,1,206,3921,1,
10301207,4353,19,1298,1,
10302207,3921,1,208,4354,
1030319,1083,1,208,3921,
103041,209,4355,19,1420,
103051,209,3921,1,210,
103064356,19,1441,1,210,
103073921,1,211,4357,19,
103081395,1,211,3921,1,
10309212,4358,19,1479,1,
10310212,3921,1,213,4359,
1031119,1234,1,213,3921,
103121,214,4360,19,1142,
103131,214,3921,1,215,
103144361,19,1072,1,215,
103153921,1,216,4362,19,
103161495,1,216,3921,1,
10317217,4363,19,1436,1,
10318217,3921,1,218,4364,
1031919,1389,1,218,3921,
103201,219,4365,19,1267,
103211,219,3952,1,220,
103224366,19,1245,1,220,
103233952,1,221,4367,19,
103241526,1,221,4130,1,
10325222,4368,19,1549,1,
10326222,4130,1,223,4369,
1032719,1516,1,223,4130,
103281,224,4370,19,1511,
103291,224,4130,1,225,
103304371,19,1532,1,225,
103314130,1,226,4372,19,
103321468,1,226,4130,1,
10333227,4373,19,1188,1,
10334227,4130,1,228,4374,
1033519,1356,1,228,4203,
103361,229,4375,19,1137,
103371,229,4203,1,230,
103384376,19,1155,1,230,
103394203,1,231,4377,19,
103401172,1,231,4203,1,
10341232,4378,19,1177,1,
10342232,4203,1,233,4379,
1034319,1166,1,233,4203,
103441,234,4380,19,1161,
103451,234,4203,1,235,
103464381,19,1345,1,235,
103474203,1,236,4382,19,
103481373,1,236,4203,1,
10349237,4383,19,1378,1,
10350237,4203,1,238,4384,
1035119,1340,1,238,4203,
103521,239,4385,19,1330,
103531,239,4203,1,240,
103544386,19,1304,1,240,
103554203,1,241,4387,19,
103561277,1,241,4203,1,
10357242,4388,19,1182,1,
10358242,4203,1,243,4389,
1035919,1147,1,243,4203,
103601,244,4390,19,1095,
103611,244,4203,1,245,
103624391,19,1544,1,245,
103634203,1,246,4392,19,
103641500,1,246,4203,1,
10365247,4393,19,1484,1,
10366247,4203,1,248,4394,
1036719,1474,1,248,4203,
103681,249,4395,19,1431,
103691,249,4203,1,250,
103704396,19,1405,1,250,
103714203,1,251,4397,19,
103721383,1,251,4203,1,
10373252,4398,19,1361,1,
10374252,4203,1,253,4399,
1037519,1319,1,253,4203,
103761,254,4400,19,1350,
103771,254,4203,1,255,
103784401,19,1415,1,255,
103794203,1,256,4402,19,
103801447,1,256,4203,1,
10381257,4403,19,1239,1,
10382257,4203,1,258,4404,
1038319,1311,1,258,4203,
103841,259,4405,19,1293,
103851,259,4203,1,260,
103864406,19,1256,1,260,
103874203,1,261,4407,19,
103881229,1,261,4203,1,
10389262,4408,19,1078,1,
10390262,4203,1,263,4409,
1039119,1559,1,263,4203,
103921,264,4410,19,1194,
103931,264,4203,1,265,
103944411,19,1199,1,265,
103954203,1,266,4412,19,
103961219,1,266,4203,1,
10397267,4413,19,1209,1,
10398267,4203,1,268,4414,
1039919,1214,1,268,4203,
104001,269,4415,19,1204,
104011,269,4203,1,270,
104024416,19,1554,1,270,
104034203,1,271,4417,19,
104041224,1,271,4203,1,
10405272,4418,19,1288,1,
10406272,4052,1,273,4419,
1040719,1651,1,273,4119,
104081,274,4420,19,1645,
104091,274,4119,1,275,
104104421,19,1625,1,275,
104114123,1,276,4422,19,
104121938,1,276,3854,1,
10413277,4423,19,1933,1,
10414277,3854,1,278,4424,
1041519,1928,1,278,3854,
104161,279,4425,19,1923,
104171,279,3854,1,280,
104184426,19,1918,1,280,
104193854,1,281,4427,19,
104201913,1,281,3854,1,
10421282,4428,19,1908,1,
10422282,3854,1,283,4429,
1042319,1840,1,283,3873,
104241,284,4430,19,1835,
104251,284,3873,1,285,
104264431,19,1830,1,285,
104273873,1,286,4432,19,
104281892,1,286,3873,1,
10429287,4433,19,1824,1,
10430287,3873,1,288,4434,
1043119,1819,1,288,3873,
104321,289,4435,19,1814,
104331,289,3873,1,290,
104344436,19,1809,1,290,
104353873,1,291,4437,19,
104361804,1,291,3873,1,
10437292,4438,19,1799,1,
10438292,3873,1,293,4439,
1043919,1794,1,293,3873,
104401,294,4440,19,1789,
104411,294,3873,1,295,
104424441,19,1784,1,295,
104433873,1,296,4442,19,
104441779,1,296,3873,1,
10445297,4443,19,1774,1,
10446297,3873,1,298,4444,
1044719,1769,1,298,3873,
104481,299,4445,19,1882,
104491,299,3873,1,300,
104504446,19,1763,1,300,
104513873,1,301,4447,19,
104521758,1,301,3873,1,
10453302,4448,19,1753,1,
10454302,3873,1,303,4449,
1045519,1748,1,303,3873,
104561,304,4450,19,1743,
104571,304,3873,1,305,
104584451,19,1875,1,305,
104593873,1,306,4452,19,
104601737,1,306,3873,1,
10461307,4453,19,1870,1,
10462307,3873,1,308,4454,
1046319,1732,1,308,3873,
104641,309,4455,19,1727,
104651,309,3873,1,310,
104664456,19,1670,1,310,
104673873,1,311,4457,19,
104681864,1,311,3873,1,
10469312,4458,19,1720,1,
10470312,3873,1,313,4459,
1047119,1715,1,313,3873,
104721,314,4460,19,1710,
104731,314,3873,1,315,
104744461,19,1705,1,315,
104753873,1,316,4462,19,
104764463,4,50,65,0,
10477114,0,103,0,117,
104780,109,0,101,0,
10479110,0,116,0,68,
104800,101,0,99,0,
10481108,0,97,0,114,
104820,97,0,116,0,
10483105,0,111,0,110,
104840,76,0,105,0,
10485115,0,116,0,95,
104860,51,0,1,316,
104873831,1,317,4464,19,
104884465,4,28,65,0,
10489114,0,103,0,117,
104900,109,0,101,0,
10491110,0,116,0,76,
104920,105,0,115,0,
10493116,0,95,0,51,
104940,1,317,4119,1,
10495318,4466,19,4467,4,
1049650,65,0,114,0,
10497103,0,117,0,109,
104980,101,0,110,0,
10499116,0,68,0,101,
105000,99,0,108,0,
1050197,0,114,0,97,
105020,116,0,105,0,
10503111,0,110,0,76,
105040,105,0,115,0,
10505116,0,95,0,52,
105060,1,318,3831,1,
10507319,4468,19,4469,4,
1050850,65,0,114,0,
10509103,0,117,0,109,
105100,101,0,110,0,
10511116,0,68,0,101,
105120,99,0,108,0,
1051397,0,114,0,97,
105140,116,0,105,0,
10515111,0,110,0,76,
105160,105,0,115,0,
10517116,0,95,0,53,
105180,1,319,3831,1,
10519320,4470,19,4471,4,
1052024,83,0,116,0,
1052197,0,116,0,101,
105220,109,0,101,0,
10523110,0,116,0,95,
105240,49,0,51,0,
105251,320,3897,1,321,
105264472,19,4473,4,28,
1052765,0,114,0,103,
105280,117,0,109,0,
10529101,0,110,0,116,
105300,76,0,105,0,
10531115,0,116,0,95,
105320,52,0,1,321,
105334119,2,0,0};
10534new Sfactory(this,"ExpressionArgument_1",new SCreator(ExpressionArgument_1_factory));
10535new Sfactory(this,"SimpleAssignment_8",new SCreator(SimpleAssignment_8_factory));
10536new Sfactory(this,"StatementList_1",new SCreator(StatementList_1_factory));
10537new Sfactory(this,"StateChange_1",new SCreator(StateChange_1_factory));
10538new Sfactory(this,"StateChange_2",new SCreator(StateChange_2_factory));
10539new Sfactory(this,"Declaration",new SCreator(Declaration_factory));
10540new Sfactory(this,"IdentExpression",new SCreator(IdentExpression_factory));
10541new Sfactory(this,"error",new SCreator(error_factory));
10542new Sfactory(this,"BinaryExpression_2",new SCreator(BinaryExpression_2_factory));
10543new Sfactory(this,"BinaryExpression_3",new SCreator(BinaryExpression_3_factory));
10544new Sfactory(this,"BinaryExpression_4",new SCreator(BinaryExpression_4_factory));
10545new Sfactory(this,"BinaryExpression_5",new SCreator(BinaryExpression_5_factory));
10546new Sfactory(this,"ReturnStatement_2",new SCreator(ReturnStatement_2_factory));
10547new Sfactory(this,"SimpleAssignment_19",new SCreator(SimpleAssignment_19_factory));
10548new Sfactory(this,"BinaryExpression_9",new SCreator(BinaryExpression_9_factory));
10549new Sfactory(this,"VectorConstant_1",new SCreator(VectorConstant_1_factory));
10550new Sfactory(this,"ParenthesisExpression",new SCreator(ParenthesisExpression_factory));
10551new Sfactory(this,"UnaryExpression",new SCreator(UnaryExpression_factory));
10552new Sfactory(this,"IdentDotExpression_1",new SCreator(IdentDotExpression_1_factory));
10553new Sfactory(this,"ArgumentList_4",new SCreator(ArgumentList_4_factory));
10554new Sfactory(this,"Typename",new SCreator(Typename_factory));
10555new Sfactory(this,"IfStatement_1",new SCreator(IfStatement_1_factory));
10556new Sfactory(this,"Assignment",new SCreator(Assignment_factory));
10557new Sfactory(this,"CompoundStatement_1",new SCreator(CompoundStatement_1_factory));
10558new Sfactory(this,"CompoundStatement_2",new SCreator(CompoundStatement_2_factory));
10559new Sfactory(this,"ReturnStatement_1",new SCreator(ReturnStatement_1_factory));
10560new Sfactory(this,"IdentDotExpression",new SCreator(IdentDotExpression_factory));
10561new Sfactory(this,"Argument",new SCreator(Argument_factory));
10562new Sfactory(this,"State_2",new SCreator(State_2_factory));
10563new Sfactory(this,"WhileStatement_1",new SCreator(WhileStatement_1_factory));
10564new Sfactory(this,"GlobalDefinitions_3",new SCreator(GlobalDefinitions_3_factory));
10565new Sfactory(this,"GlobalDefinitions_4",new SCreator(GlobalDefinitions_4_factory));
10566new Sfactory(this,"Event_1",new SCreator(Event_1_factory));
10567new Sfactory(this,"ListConstant",new SCreator(ListConstant_factory));
10568new Sfactory(this,"Event_3",new SCreator(Event_3_factory));
10569new Sfactory(this,"Event_4",new SCreator(Event_4_factory));
10570new Sfactory(this,"Event_5",new SCreator(Event_5_factory));
10571new Sfactory(this,"SimpleAssignment_5",new SCreator(SimpleAssignment_5_factory));
10572new Sfactory(this,"Typename_1",new SCreator(Typename_1_factory));
10573new Sfactory(this,"Typename_2",new SCreator(Typename_2_factory));
10574new Sfactory(this,"Typename_3",new SCreator(Typename_3_factory));
10575new Sfactory(this,"Typename_4",new SCreator(Typename_4_factory));
10576new Sfactory(this,"Typename_5",new SCreator(Typename_5_factory));
10577new Sfactory(this,"Typename_6",new SCreator(Typename_6_factory));
10578new Sfactory(this,"Typename_7",new SCreator(Typename_7_factory));
10579new Sfactory(this,"ArgumentDeclarationList",new SCreator(ArgumentDeclarationList_factory));
10580new Sfactory(this,"ConstantExpression",new SCreator(ConstantExpression_factory));
10581new Sfactory(this,"LSLProgramRoot_1",new SCreator(LSLProgramRoot_1_factory));
10582new Sfactory(this,"LSLProgramRoot_2",new SCreator(LSLProgramRoot_2_factory));
10583new Sfactory(this,"States_1",new SCreator(States_1_factory));
10584new Sfactory(this,"States_2",new SCreator(States_2_factory));
10585new Sfactory(this,"FunctionCallExpression_1",new SCreator(FunctionCallExpression_1_factory));
10586new Sfactory(this,"ForLoopStatement",new SCreator(ForLoopStatement_factory));
10587new Sfactory(this,"DoWhileStatement_1",new SCreator(DoWhileStatement_1_factory));
10588new Sfactory(this,"DoWhileStatement_2",new SCreator(DoWhileStatement_2_factory));
10589new Sfactory(this,"ForLoopStatement_4",new SCreator(ForLoopStatement_4_factory));
10590new Sfactory(this,"SimpleAssignment_11",new SCreator(SimpleAssignment_11_factory));
10591new Sfactory(this,"SimpleAssignment_12",new SCreator(SimpleAssignment_12_factory));
10592new Sfactory(this,"SimpleAssignment_13",new SCreator(SimpleAssignment_13_factory));
10593new Sfactory(this,"JumpLabel",new SCreator(JumpLabel_factory));
10594new Sfactory(this,"SimpleAssignment_15",new SCreator(SimpleAssignment_15_factory));
10595new Sfactory(this,"SimpleAssignment_17",new SCreator(SimpleAssignment_17_factory));
10596new Sfactory(this,"SimpleAssignment_18",new SCreator(SimpleAssignment_18_factory));
10597new Sfactory(this,"JumpStatement_1",new SCreator(JumpStatement_1_factory));
10598new Sfactory(this,"GlobalDefinitions",new SCreator(GlobalDefinitions_factory));
10599new Sfactory(this,"FunctionCall_1",new SCreator(FunctionCall_1_factory));
10600new Sfactory(this,"ArgumentList_3",new SCreator(ArgumentList_3_factory));
10601new Sfactory(this,"Assignment_2",new SCreator(Assignment_2_factory));
10602new Sfactory(this,"TypecastExpression_1",new SCreator(TypecastExpression_1_factory));
10603new Sfactory(this,"SimpleAssignment_21",new SCreator(SimpleAssignment_21_factory));
10604new Sfactory(this,"SimpleAssignment_22",new SCreator(SimpleAssignment_22_factory));
10605new Sfactory(this,"SimpleAssignment_23",new SCreator(SimpleAssignment_23_factory));
10606new Sfactory(this,"TypecastExpression_9",new SCreator(TypecastExpression_9_factory));
10607new Sfactory(this,"ArgumentDeclarationList_1",new SCreator(ArgumentDeclarationList_1_factory));
10608new Sfactory(this,"ArgumentDeclarationList_2",new SCreator(ArgumentDeclarationList_2_factory));
10609new Sfactory(this,"ArgumentDeclarationList_3",new SCreator(ArgumentDeclarationList_3_factory));
10610new Sfactory(this,"GlobalDefinitions_1",new SCreator(GlobalDefinitions_1_factory));
10611new Sfactory(this,"GlobalDefinitions_2",new SCreator(GlobalDefinitions_2_factory));
10612new Sfactory(this,"IncrementDecrementExpression",new SCreator(IncrementDecrementExpression_factory));
10613new Sfactory(this,"GlobalVariableDeclaration",new SCreator(GlobalVariableDeclaration_factory));
10614new Sfactory(this,"Event_11",new SCreator(Event_11_factory));
10615new Sfactory(this,"TypecastExpression_2",new SCreator(TypecastExpression_2_factory));
10616new Sfactory(this,"TypecastExpression_3",new SCreator(TypecastExpression_3_factory));
10617new Sfactory(this,"TypecastExpression_5",new SCreator(TypecastExpression_5_factory));
10618new Sfactory(this,"TypecastExpression_8",new SCreator(TypecastExpression_8_factory));
10619new Sfactory(this,"Constant_1",new SCreator(Constant_1_factory));
10620new Sfactory(this,"Expression",new SCreator(Expression_factory));
10621new Sfactory(this,"Constant_3",new SCreator(Constant_3_factory));
10622new Sfactory(this,"Constant_4",new SCreator(Constant_4_factory));
10623new Sfactory(this,"BinaryExpression_1",new SCreator(BinaryExpression_1_factory));
10624new Sfactory(this,"IfStatement_2",new SCreator(IfStatement_2_factory));
10625new Sfactory(this,"IfStatement_3",new SCreator(IfStatement_3_factory));
10626new Sfactory(this,"IfStatement_4",new SCreator(IfStatement_4_factory));
10627new Sfactory(this,"ReturnStatement",new SCreator(ReturnStatement_factory));
10628new Sfactory(this,"Event_2",new SCreator(Event_2_factory));
10629new Sfactory(this,"RotationConstant",new SCreator(RotationConstant_factory));
10630new Sfactory(this,"Statement_12",new SCreator(Statement_12_factory));
10631new Sfactory(this,"Statement_13",new SCreator(Statement_13_factory));
10632new Sfactory(this,"UnaryExpression_1",new SCreator(UnaryExpression_1_factory));
10633new Sfactory(this,"UnaryExpression_2",new SCreator(UnaryExpression_2_factory));
10634new Sfactory(this,"UnaryExpression_3",new SCreator(UnaryExpression_3_factory));
10635new Sfactory(this,"ArgumentList_1",new SCreator(ArgumentList_1_factory));
10636new Sfactory(this,"ArgumentList_2",new SCreator(ArgumentList_2_factory));
10637new Sfactory(this,"Constant",new SCreator(Constant_factory));
10638new Sfactory(this,"State",new SCreator(State_factory));
10639new Sfactory(this,"Event_13",new SCreator(Event_13_factory));
10640new Sfactory(this,"LSLProgramRoot",new SCreator(LSLProgramRoot_factory));
10641new Sfactory(this,"StateChange",new SCreator(StateChange_factory));
10642new Sfactory(this,"IncrementDecrementExpression_2",new SCreator(IncrementDecrementExpression_2_factory));
10643new Sfactory(this,"GlobalVariableDeclaration_1",new SCreator(GlobalVariableDeclaration_1_factory));
10644new Sfactory(this,"GlobalVariableDeclaration_2",new SCreator(GlobalVariableDeclaration_2_factory));
10645new Sfactory(this,"IncrementDecrementExpression_5",new SCreator(IncrementDecrementExpression_5_factory));
10646new Sfactory(this,"GlobalFunctionDefinition_2",new SCreator(GlobalFunctionDefinition_2_factory));
10647new Sfactory(this,"IncrementDecrementExpression_7",new SCreator(IncrementDecrementExpression_7_factory));
10648new Sfactory(this,"IncrementDecrementExpression_8",new SCreator(IncrementDecrementExpression_8_factory));
10649new Sfactory(this,"Assignment_1",new SCreator(Assignment_1_factory));
10650new Sfactory(this,"Event_21",new SCreator(Event_21_factory));
10651new Sfactory(this,"Event_22",new SCreator(Event_22_factory));
10652new Sfactory(this,"CompoundStatement",new SCreator(CompoundStatement_factory));
10653new Sfactory(this,"RotationConstant_1",new SCreator(RotationConstant_1_factory));
10654new Sfactory(this,"SimpleAssignment_3",new SCreator(SimpleAssignment_3_factory));
10655new Sfactory(this,"SimpleAssignment_4",new SCreator(SimpleAssignment_4_factory));
10656new Sfactory(this,"Statement_1",new SCreator(Statement_1_factory));
10657new Sfactory(this,"Statement_2",new SCreator(Statement_2_factory));
10658new Sfactory(this,"Statement_3",new SCreator(Statement_3_factory));
10659new Sfactory(this,"Statement_4",new SCreator(Statement_4_factory));
10660new Sfactory(this,"Statement_5",new SCreator(Statement_5_factory));
10661new Sfactory(this,"Statement_6",new SCreator(Statement_6_factory));
10662new Sfactory(this,"Statement_7",new SCreator(Statement_7_factory));
10663new Sfactory(this,"Statement_8",new SCreator(Statement_8_factory));
10664new Sfactory(this,"Statement_9",new SCreator(Statement_9_factory));
10665new Sfactory(this,"ExpressionArgument",new SCreator(ExpressionArgument_factory));
10666new Sfactory(this,"GlobalFunctionDefinition",new SCreator(GlobalFunctionDefinition_factory));
10667new Sfactory(this,"State_1",new SCreator(State_1_factory));
10668new Sfactory(this,"DoWhileStatement",new SCreator(DoWhileStatement_factory));
10669new Sfactory(this,"ParenthesisExpression_1",new SCreator(ParenthesisExpression_1_factory));
10670new Sfactory(this,"ParenthesisExpression_2",new SCreator(ParenthesisExpression_2_factory));
10671new Sfactory(this,"StateBody",new SCreator(StateBody_factory));
10672new Sfactory(this,"Event_7",new SCreator(Event_7_factory));
10673new Sfactory(this,"Event_8",new SCreator(Event_8_factory));
10674new Sfactory(this,"IncrementDecrementExpression_1",new SCreator(IncrementDecrementExpression_1_factory));
10675new Sfactory(this,"IncrementDecrementExpression_3",new SCreator(IncrementDecrementExpression_3_factory));
10676new Sfactory(this,"IncrementDecrementExpression_4",new SCreator(IncrementDecrementExpression_4_factory));
10677new Sfactory(this,"IncrementDecrementExpression_6",new SCreator(IncrementDecrementExpression_6_factory));
10678new Sfactory(this,"StateEvent",new SCreator(StateEvent_factory));
10679new Sfactory(this,"Event_20",new SCreator(Event_20_factory));
10680new Sfactory(this,"Event_23",new SCreator(Event_23_factory));
10681new Sfactory(this,"Event_24",new SCreator(Event_24_factory));
10682new Sfactory(this,"Event_26",new SCreator(Event_26_factory));
10683new Sfactory(this,"SimpleAssignment_10",new SCreator(SimpleAssignment_10_factory));
10684new Sfactory(this,"Event",new SCreator(Event_factory));
10685new Sfactory(this,"SimpleAssignment_14",new SCreator(SimpleAssignment_14_factory));
10686new Sfactory(this,"SimpleAssignment_16",new SCreator(SimpleAssignment_16_factory));
10687new Sfactory(this,"Statement_10",new SCreator(Statement_10_factory));
10688new Sfactory(this,"Statement_11",new SCreator(Statement_11_factory));
10689new Sfactory(this,"SimpleAssignment",new SCreator(SimpleAssignment_factory));
10690new Sfactory(this,"TypecastExpression",new SCreator(TypecastExpression_factory));
10691new Sfactory(this,"Event_15",new SCreator(Event_15_factory));
10692new Sfactory(this,"Event_16",new SCreator(Event_16_factory));
10693new Sfactory(this,"Event_32",new SCreator(Event_32_factory));
10694new Sfactory(this,"SimpleAssignment_20",new SCreator(SimpleAssignment_20_factory));
10695new Sfactory(this,"SimpleAssignment_24",new SCreator(SimpleAssignment_24_factory));
10696new Sfactory(this,"SimpleAssignment_1",new SCreator(SimpleAssignment_1_factory));
10697new Sfactory(this,"SimpleAssignment_2",new SCreator(SimpleAssignment_2_factory));
10698new Sfactory(this,"BinaryExpression",new SCreator(BinaryExpression_factory));
10699new Sfactory(this,"FunctionCallExpression",new SCreator(FunctionCallExpression_factory));
10700new Sfactory(this,"SimpleAssignment_6",new SCreator(SimpleAssignment_6_factory));
10701new Sfactory(this,"StateBody_1",new SCreator(StateBody_1_factory));
10702new Sfactory(this,"StatementList_2",new SCreator(StatementList_2_factory));
10703new Sfactory(this,"SimpleAssignment_9",new SCreator(SimpleAssignment_9_factory));
10704new Sfactory(this,"BinaryExpression_15",new SCreator(BinaryExpression_15_factory));
10705new Sfactory(this,"BinaryExpression_16",new SCreator(BinaryExpression_16_factory));
10706new Sfactory(this,"BinaryExpression_17",new SCreator(BinaryExpression_17_factory));
10707new Sfactory(this,"BinaryExpression_18",new SCreator(BinaryExpression_18_factory));
10708new Sfactory(this,"Event_25",new SCreator(Event_25_factory));
10709new Sfactory(this,"Event_9",new SCreator(Event_9_factory));
10710new Sfactory(this,"Statement",new SCreator(Statement_factory));
10711new Sfactory(this,"JumpStatement",new SCreator(JumpStatement_factory));
10712new Sfactory(this,"BinaryExpression_11",new SCreator(BinaryExpression_11_factory));
10713new Sfactory(this,"BinaryExpression_12",new SCreator(BinaryExpression_12_factory));
10714new Sfactory(this,"BinaryExpression_13",new SCreator(BinaryExpression_13_factory));
10715new Sfactory(this,"BinaryExpression_14",new SCreator(BinaryExpression_14_factory));
10716new Sfactory(this,"BinaryExpression_6",new SCreator(BinaryExpression_6_factory));
10717new Sfactory(this,"BinaryExpression_7",new SCreator(BinaryExpression_7_factory));
10718new Sfactory(this,"BinaryExpression_8",new SCreator(BinaryExpression_8_factory));
10719new Sfactory(this,"ArgumentList",new SCreator(ArgumentList_factory));
10720new Sfactory(this,"Event_10",new SCreator(Event_10_factory));
10721new Sfactory(this,"ConstantExpression_1",new SCreator(ConstantExpression_1_factory));
10722new Sfactory(this,"Event_12",new SCreator(Event_12_factory));
10723new Sfactory(this,"Event_14",new SCreator(Event_14_factory));
10724new Sfactory(this,"Event_17",new SCreator(Event_17_factory));
10725new Sfactory(this,"Event_18",new SCreator(Event_18_factory));
10726new Sfactory(this,"Event_19",new SCreator(Event_19_factory));
10727new Sfactory(this,"BinaryExpression_10",new SCreator(BinaryExpression_10_factory));
10728new Sfactory(this,"StateEvent_1",new SCreator(StateEvent_1_factory));
10729new Sfactory(this,"VectorConstant",new SCreator(VectorConstant_factory));
10730new Sfactory(this,"TypecastExpression_4",new SCreator(TypecastExpression_4_factory));
10731new Sfactory(this,"TypecastExpression_6",new SCreator(TypecastExpression_6_factory));
10732new Sfactory(this,"TypecastExpression_7",new SCreator(TypecastExpression_7_factory));
10733new Sfactory(this,"FunctionCall",new SCreator(FunctionCall_factory));
10734new Sfactory(this,"Event_27",new SCreator(Event_27_factory));
10735new Sfactory(this,"Event_28",new SCreator(Event_28_factory));
10736new Sfactory(this,"Event_29",new SCreator(Event_29_factory));
10737new Sfactory(this,"ListConstant_1",new SCreator(ListConstant_1_factory));
10738new Sfactory(this,"Event_6",new SCreator(Event_6_factory));
10739new Sfactory(this,"Declaration_1",new SCreator(Declaration_1_factory));
10740new Sfactory(this,"SimpleAssignment_7",new SCreator(SimpleAssignment_7_factory));
10741new Sfactory(this,"ForLoop",new SCreator(ForLoop_factory));
10742new Sfactory(this,"Event_30",new SCreator(Event_30_factory));
10743new Sfactory(this,"Event_31",new SCreator(Event_31_factory));
10744new Sfactory(this,"Event_33",new SCreator(Event_33_factory));
10745new Sfactory(this,"GlobalFunctionDefinition_1",new SCreator(GlobalFunctionDefinition_1_factory));
10746new Sfactory(this,"JumpLabel_1",new SCreator(JumpLabel_1_factory));
10747new Sfactory(this,"IfStatement",new SCreator(IfStatement_factory));
10748new Sfactory(this,"ForLoopStatement_1",new SCreator(ForLoopStatement_1_factory));
10749new Sfactory(this,"ForLoopStatement_2",new SCreator(ForLoopStatement_2_factory));
10750new Sfactory(this,"ForLoopStatement_3",new SCreator(ForLoopStatement_3_factory));
10751new Sfactory(this,"ArgumentDeclarationList_4",new SCreator(ArgumentDeclarationList_4_factory));
10752new Sfactory(this,"ArgumentDeclarationList_5",new SCreator(ArgumentDeclarationList_5_factory));
10753new Sfactory(this,"WhileStatement",new SCreator(WhileStatement_factory));
10754new Sfactory(this,"ForLoop_1",new SCreator(ForLoop_1_factory));
10755new Sfactory(this,"Constant_2",new SCreator(Constant_2_factory));
10756new Sfactory(this,"StatementList",new SCreator(StatementList_factory));
10757new Sfactory(this,"StateBody_2",new SCreator(StateBody_2_factory));
10758new Sfactory(this,"WhileStatement_2",new SCreator(WhileStatement_2_factory));
10759new Sfactory(this,"IdentExpression_1",new SCreator(IdentExpression_1_factory));
10760new Sfactory(this,"States",new SCreator(States_factory));
10761}
10762public static object ExpressionArgument_1_factory(Parser yyp) { return new ExpressionArgument_1(yyp); }
10763public static object SimpleAssignment_8_factory(Parser yyp) { return new SimpleAssignment_8(yyp); }
10764public static object StatementList_1_factory(Parser yyp) { return new StatementList_1(yyp); }
10765public static object StateChange_1_factory(Parser yyp) { return new StateChange_1(yyp); }
10766public static object StateChange_2_factory(Parser yyp) { return new StateChange_2(yyp); }
10767public static object Declaration_factory(Parser yyp) { return new Declaration(yyp); }
10768public static object IdentExpression_factory(Parser yyp) { return new IdentExpression(yyp); }
10769public static object error_factory(Parser yyp) { return new error(yyp); }
10770public static object BinaryExpression_2_factory(Parser yyp) { return new BinaryExpression_2(yyp); }
10771public static object BinaryExpression_3_factory(Parser yyp) { return new BinaryExpression_3(yyp); }
10772public static object BinaryExpression_4_factory(Parser yyp) { return new BinaryExpression_4(yyp); }
10773public static object BinaryExpression_5_factory(Parser yyp) { return new BinaryExpression_5(yyp); }
10774public static object ReturnStatement_2_factory(Parser yyp) { return new ReturnStatement_2(yyp); }
10775public static object SimpleAssignment_19_factory(Parser yyp) { return new SimpleAssignment_19(yyp); }
10776public static object BinaryExpression_9_factory(Parser yyp) { return new BinaryExpression_9(yyp); }
10777public static object VectorConstant_1_factory(Parser yyp) { return new VectorConstant_1(yyp); }
10778public static object ParenthesisExpression_factory(Parser yyp) { return new ParenthesisExpression(yyp); }
10779public static object UnaryExpression_factory(Parser yyp) { return new UnaryExpression(yyp); }
10780public static object IdentDotExpression_1_factory(Parser yyp) { return new IdentDotExpression_1(yyp); }
10781public static object ArgumentList_4_factory(Parser yyp) { return new ArgumentList_4(yyp); }
10782public static object Typename_factory(Parser yyp) { return new Typename(yyp); }
10783public static object IfStatement_1_factory(Parser yyp) { return new IfStatement_1(yyp); }
10784public static object Assignment_factory(Parser yyp) { return new Assignment(yyp); }
10785public static object CompoundStatement_1_factory(Parser yyp) { return new CompoundStatement_1(yyp); }
10786public static object CompoundStatement_2_factory(Parser yyp) { return new CompoundStatement_2(yyp); }
10787public static object ReturnStatement_1_factory(Parser yyp) { return new ReturnStatement_1(yyp); }
10788public static object IdentDotExpression_factory(Parser yyp) { return new IdentDotExpression(yyp); }
10789public static object Argument_factory(Parser yyp) { return new Argument(yyp); }
10790public static object State_2_factory(Parser yyp) { return new State_2(yyp); }
10791public static object WhileStatement_1_factory(Parser yyp) { return new WhileStatement_1(yyp); }
10792public static object GlobalDefinitions_3_factory(Parser yyp) { return new GlobalDefinitions_3(yyp); }
10793public static object GlobalDefinitions_4_factory(Parser yyp) { return new GlobalDefinitions_4(yyp); }
10794public static object Event_1_factory(Parser yyp) { return new Event_1(yyp); }
10795public static object ListConstant_factory(Parser yyp) { return new ListConstant(yyp); }
10796public static object Event_3_factory(Parser yyp) { return new Event_3(yyp); }
10797public static object Event_4_factory(Parser yyp) { return new Event_4(yyp); }
10798public static object Event_5_factory(Parser yyp) { return new Event_5(yyp); }
10799public static object SimpleAssignment_5_factory(Parser yyp) { return new SimpleAssignment_5(yyp); }
10800public static object Typename_1_factory(Parser yyp) { return new Typename_1(yyp); }
10801public static object Typename_2_factory(Parser yyp) { return new Typename_2(yyp); }
10802public static object Typename_3_factory(Parser yyp) { return new Typename_3(yyp); }
10803public static object Typename_4_factory(Parser yyp) { return new Typename_4(yyp); }
10804public static object Typename_5_factory(Parser yyp) { return new Typename_5(yyp); }
10805public static object Typename_6_factory(Parser yyp) { return new Typename_6(yyp); }
10806public static object Typename_7_factory(Parser yyp) { return new Typename_7(yyp); }
10807public static object ArgumentDeclarationList_factory(Parser yyp) { return new ArgumentDeclarationList(yyp); }
10808public static object ConstantExpression_factory(Parser yyp) { return new ConstantExpression(yyp); }
10809public static object LSLProgramRoot_1_factory(Parser yyp) { return new LSLProgramRoot_1(yyp); }
10810public static object LSLProgramRoot_2_factory(Parser yyp) { return new LSLProgramRoot_2(yyp); }
10811public static object States_1_factory(Parser yyp) { return new States_1(yyp); }
10812public static object States_2_factory(Parser yyp) { return new States_2(yyp); }
10813public static object FunctionCallExpression_1_factory(Parser yyp) { return new FunctionCallExpression_1(yyp); }
10814public static object ForLoopStatement_factory(Parser yyp) { return new ForLoopStatement(yyp); }
10815public static object DoWhileStatement_1_factory(Parser yyp) { return new DoWhileStatement_1(yyp); }
10816public static object DoWhileStatement_2_factory(Parser yyp) { return new DoWhileStatement_2(yyp); }
10817public static object ForLoopStatement_4_factory(Parser yyp) { return new ForLoopStatement_4(yyp); }
10818public static object SimpleAssignment_11_factory(Parser yyp) { return new SimpleAssignment_11(yyp); }
10819public static object SimpleAssignment_12_factory(Parser yyp) { return new SimpleAssignment_12(yyp); }
10820public static object SimpleAssignment_13_factory(Parser yyp) { return new SimpleAssignment_13(yyp); }
10821public static object JumpLabel_factory(Parser yyp) { return new JumpLabel(yyp); }
10822public static object SimpleAssignment_15_factory(Parser yyp) { return new SimpleAssignment_15(yyp); }
10823public static object SimpleAssignment_17_factory(Parser yyp) { return new SimpleAssignment_17(yyp); }
10824public static object SimpleAssignment_18_factory(Parser yyp) { return new SimpleAssignment_18(yyp); }
10825public static object JumpStatement_1_factory(Parser yyp) { return new JumpStatement_1(yyp); }
10826public static object GlobalDefinitions_factory(Parser yyp) { return new GlobalDefinitions(yyp); }
10827public static object FunctionCall_1_factory(Parser yyp) { return new FunctionCall_1(yyp); }
10828public static object ArgumentList_3_factory(Parser yyp) { return new ArgumentList_3(yyp); }
10829public static object Assignment_2_factory(Parser yyp) { return new Assignment_2(yyp); }
10830public static object TypecastExpression_1_factory(Parser yyp) { return new TypecastExpression_1(yyp); }
10831public static object SimpleAssignment_21_factory(Parser yyp) { return new SimpleAssignment_21(yyp); }
10832public static object SimpleAssignment_22_factory(Parser yyp) { return new SimpleAssignment_22(yyp); }
10833public static object SimpleAssignment_23_factory(Parser yyp) { return new SimpleAssignment_23(yyp); }
10834public static object TypecastExpression_9_factory(Parser yyp) { return new TypecastExpression_9(yyp); }
10835public static object ArgumentDeclarationList_1_factory(Parser yyp) { return new ArgumentDeclarationList_1(yyp); }
10836public static object ArgumentDeclarationList_2_factory(Parser yyp) { return new ArgumentDeclarationList_2(yyp); }
10837public static object ArgumentDeclarationList_3_factory(Parser yyp) { return new ArgumentDeclarationList_3(yyp); }
10838public static object GlobalDefinitions_1_factory(Parser yyp) { return new GlobalDefinitions_1(yyp); }
10839public static object GlobalDefinitions_2_factory(Parser yyp) { return new GlobalDefinitions_2(yyp); }
10840public static object IncrementDecrementExpression_factory(Parser yyp) { return new IncrementDecrementExpression(yyp); }
10841public static object GlobalVariableDeclaration_factory(Parser yyp) { return new GlobalVariableDeclaration(yyp); }
10842public static object Event_11_factory(Parser yyp) { return new Event_11(yyp); }
10843public static object TypecastExpression_2_factory(Parser yyp) { return new TypecastExpression_2(yyp); }
10844public static object TypecastExpression_3_factory(Parser yyp) { return new TypecastExpression_3(yyp); }
10845public static object TypecastExpression_5_factory(Parser yyp) { return new TypecastExpression_5(yyp); }
10846public static object TypecastExpression_8_factory(Parser yyp) { return new TypecastExpression_8(yyp); }
10847public static object Constant_1_factory(Parser yyp) { return new Constant_1(yyp); }
10848public static object Expression_factory(Parser yyp) { return new Expression(yyp); }
10849public static object Constant_3_factory(Parser yyp) { return new Constant_3(yyp); }
10850public static object Constant_4_factory(Parser yyp) { return new Constant_4(yyp); }
10851public static object BinaryExpression_1_factory(Parser yyp) { return new BinaryExpression_1(yyp); }
10852public static object IfStatement_2_factory(Parser yyp) { return new IfStatement_2(yyp); }
10853public static object IfStatement_3_factory(Parser yyp) { return new IfStatement_3(yyp); }
10854public static object IfStatement_4_factory(Parser yyp) { return new IfStatement_4(yyp); }
10855public static object ReturnStatement_factory(Parser yyp) { return new ReturnStatement(yyp); }
10856public static object Event_2_factory(Parser yyp) { return new Event_2(yyp); }
10857public static object RotationConstant_factory(Parser yyp) { return new RotationConstant(yyp); }
10858public static object Statement_12_factory(Parser yyp) { return new Statement_12(yyp); }
10859public static object Statement_13_factory(Parser yyp) { return new Statement_13(yyp); }
10860public static object UnaryExpression_1_factory(Parser yyp) { return new UnaryExpression_1(yyp); }
10861public static object UnaryExpression_2_factory(Parser yyp) { return new UnaryExpression_2(yyp); }
10862public static object UnaryExpression_3_factory(Parser yyp) { return new UnaryExpression_3(yyp); }
10863public static object ArgumentList_1_factory(Parser yyp) { return new ArgumentList_1(yyp); }
10864public static object ArgumentList_2_factory(Parser yyp) { return new ArgumentList_2(yyp); }
10865public static object Constant_factory(Parser yyp) { return new Constant(yyp); }
10866public static object State_factory(Parser yyp) { return new State(yyp); }
10867public static object Event_13_factory(Parser yyp) { return new Event_13(yyp); }
10868public static object LSLProgramRoot_factory(Parser yyp) { return new LSLProgramRoot(yyp); }
10869public static object StateChange_factory(Parser yyp) { return new StateChange(yyp); }
10870public static object IncrementDecrementExpression_2_factory(Parser yyp) { return new IncrementDecrementExpression_2(yyp); }
10871public static object GlobalVariableDeclaration_1_factory(Parser yyp) { return new GlobalVariableDeclaration_1(yyp); }
10872public static object GlobalVariableDeclaration_2_factory(Parser yyp) { return new GlobalVariableDeclaration_2(yyp); }
10873public static object IncrementDecrementExpression_5_factory(Parser yyp) { return new IncrementDecrementExpression_5(yyp); }
10874public static object GlobalFunctionDefinition_2_factory(Parser yyp) { return new GlobalFunctionDefinition_2(yyp); }
10875public static object IncrementDecrementExpression_7_factory(Parser yyp) { return new IncrementDecrementExpression_7(yyp); }
10876public static object IncrementDecrementExpression_8_factory(Parser yyp) { return new IncrementDecrementExpression_8(yyp); }
10877public static object Assignment_1_factory(Parser yyp) { return new Assignment_1(yyp); }
10878public static object Event_21_factory(Parser yyp) { return new Event_21(yyp); }
10879public static object Event_22_factory(Parser yyp) { return new Event_22(yyp); }
10880public static object CompoundStatement_factory(Parser yyp) { return new CompoundStatement(yyp); }
10881public static object RotationConstant_1_factory(Parser yyp) { return new RotationConstant_1(yyp); }
10882public static object SimpleAssignment_3_factory(Parser yyp) { return new SimpleAssignment_3(yyp); }
10883public static object SimpleAssignment_4_factory(Parser yyp) { return new SimpleAssignment_4(yyp); }
10884public static object Statement_1_factory(Parser yyp) { return new Statement_1(yyp); }
10885public static object Statement_2_factory(Parser yyp) { return new Statement_2(yyp); }
10886public static object Statement_3_factory(Parser yyp) { return new Statement_3(yyp); }
10887public static object Statement_4_factory(Parser yyp) { return new Statement_4(yyp); }
10888public static object Statement_5_factory(Parser yyp) { return new Statement_5(yyp); }
10889public static object Statement_6_factory(Parser yyp) { return new Statement_6(yyp); }
10890public static object Statement_7_factory(Parser yyp) { return new Statement_7(yyp); }
10891public static object Statement_8_factory(Parser yyp) { return new Statement_8(yyp); }
10892public static object Statement_9_factory(Parser yyp) { return new Statement_9(yyp); }
10893public static object ExpressionArgument_factory(Parser yyp) { return new ExpressionArgument(yyp); }
10894public static object GlobalFunctionDefinition_factory(Parser yyp) { return new GlobalFunctionDefinition(yyp); }
10895public static object State_1_factory(Parser yyp) { return new State_1(yyp); }
10896public static object DoWhileStatement_factory(Parser yyp) { return new DoWhileStatement(yyp); }
10897public static object ParenthesisExpression_1_factory(Parser yyp) { return new ParenthesisExpression_1(yyp); }
10898public static object ParenthesisExpression_2_factory(Parser yyp) { return new ParenthesisExpression_2(yyp); }
10899public static object StateBody_factory(Parser yyp) { return new StateBody(yyp); }
10900public static object Event_7_factory(Parser yyp) { return new Event_7(yyp); }
10901public static object Event_8_factory(Parser yyp) { return new Event_8(yyp); }
10902public static object IncrementDecrementExpression_1_factory(Parser yyp) { return new IncrementDecrementExpression_1(yyp); }
10903public static object IncrementDecrementExpression_3_factory(Parser yyp) { return new IncrementDecrementExpression_3(yyp); }
10904public static object IncrementDecrementExpression_4_factory(Parser yyp) { return new IncrementDecrementExpression_4(yyp); }
10905public static object IncrementDecrementExpression_6_factory(Parser yyp) { return new IncrementDecrementExpression_6(yyp); }
10906public static object StateEvent_factory(Parser yyp) { return new StateEvent(yyp); }
10907public static object Event_20_factory(Parser yyp) { return new Event_20(yyp); }
10908public static object Event_23_factory(Parser yyp) { return new Event_23(yyp); }
10909public static object Event_24_factory(Parser yyp) { return new Event_24(yyp); }
10910public static object Event_26_factory(Parser yyp) { return new Event_26(yyp); }
10911public static object SimpleAssignment_10_factory(Parser yyp) { return new SimpleAssignment_10(yyp); }
10912public static object Event_factory(Parser yyp) { return new Event(yyp); }
10913public static object SimpleAssignment_14_factory(Parser yyp) { return new SimpleAssignment_14(yyp); }
10914public static object SimpleAssignment_16_factory(Parser yyp) { return new SimpleAssignment_16(yyp); }
10915public static object Statement_10_factory(Parser yyp) { return new Statement_10(yyp); }
10916public static object Statement_11_factory(Parser yyp) { return new Statement_11(yyp); }
10917public static object SimpleAssignment_factory(Parser yyp) { return new SimpleAssignment(yyp); }
10918public static object TypecastExpression_factory(Parser yyp) { return new TypecastExpression(yyp); }
10919public static object Event_15_factory(Parser yyp) { return new Event_15(yyp); }
10920public static object Event_16_factory(Parser yyp) { return new Event_16(yyp); }
10921public static object Event_32_factory(Parser yyp) { return new Event_32(yyp); }
10922public static object SimpleAssignment_20_factory(Parser yyp) { return new SimpleAssignment_20(yyp); }
10923public static object SimpleAssignment_24_factory(Parser yyp) { return new SimpleAssignment_24(yyp); }
10924public static object SimpleAssignment_1_factory(Parser yyp) { return new SimpleAssignment_1(yyp); }
10925public static object SimpleAssignment_2_factory(Parser yyp) { return new SimpleAssignment_2(yyp); }
10926public static object BinaryExpression_factory(Parser yyp) { return new BinaryExpression(yyp); }
10927public static object FunctionCallExpression_factory(Parser yyp) { return new FunctionCallExpression(yyp); }
10928public static object SimpleAssignment_6_factory(Parser yyp) { return new SimpleAssignment_6(yyp); }
10929public static object StateBody_1_factory(Parser yyp) { return new StateBody_1(yyp); }
10930public static object StatementList_2_factory(Parser yyp) { return new StatementList_2(yyp); }
10931public static object SimpleAssignment_9_factory(Parser yyp) { return new SimpleAssignment_9(yyp); }
10932public static object BinaryExpression_15_factory(Parser yyp) { return new BinaryExpression_15(yyp); }
10933public static object BinaryExpression_16_factory(Parser yyp) { return new BinaryExpression_16(yyp); }
10934public static object BinaryExpression_17_factory(Parser yyp) { return new BinaryExpression_17(yyp); }
10935public static object BinaryExpression_18_factory(Parser yyp) { return new BinaryExpression_18(yyp); }
10936public static object Event_25_factory(Parser yyp) { return new Event_25(yyp); }
10937public static object Event_9_factory(Parser yyp) { return new Event_9(yyp); }
10938public static object Statement_factory(Parser yyp) { return new Statement(yyp); }
10939public static object JumpStatement_factory(Parser yyp) { return new JumpStatement(yyp); }
10940public static object BinaryExpression_11_factory(Parser yyp) { return new BinaryExpression_11(yyp); }
10941public static object BinaryExpression_12_factory(Parser yyp) { return new BinaryExpression_12(yyp); }
10942public static object BinaryExpression_13_factory(Parser yyp) { return new BinaryExpression_13(yyp); }
10943public static object BinaryExpression_14_factory(Parser yyp) { return new BinaryExpression_14(yyp); }
10944public static object BinaryExpression_6_factory(Parser yyp) { return new BinaryExpression_6(yyp); }
10945public static object BinaryExpression_7_factory(Parser yyp) { return new BinaryExpression_7(yyp); }
10946public static object BinaryExpression_8_factory(Parser yyp) { return new BinaryExpression_8(yyp); }
10947public static object ArgumentList_factory(Parser yyp) { return new ArgumentList(yyp); }
10948public static object Event_10_factory(Parser yyp) { return new Event_10(yyp); }
10949public static object ConstantExpression_1_factory(Parser yyp) { return new ConstantExpression_1(yyp); }
10950public static object Event_12_factory(Parser yyp) { return new Event_12(yyp); }
10951public static object Event_14_factory(Parser yyp) { return new Event_14(yyp); }
10952public static object Event_17_factory(Parser yyp) { return new Event_17(yyp); }
10953public static object Event_18_factory(Parser yyp) { return new Event_18(yyp); }
10954public static object Event_19_factory(Parser yyp) { return new Event_19(yyp); }
10955public static object BinaryExpression_10_factory(Parser yyp) { return new BinaryExpression_10(yyp); }
10956public static object StateEvent_1_factory(Parser yyp) { return new StateEvent_1(yyp); }
10957public static object VectorConstant_factory(Parser yyp) { return new VectorConstant(yyp); }
10958public static object TypecastExpression_4_factory(Parser yyp) { return new TypecastExpression_4(yyp); }
10959public static object TypecastExpression_6_factory(Parser yyp) { return new TypecastExpression_6(yyp); }
10960public static object TypecastExpression_7_factory(Parser yyp) { return new TypecastExpression_7(yyp); }
10961public static object FunctionCall_factory(Parser yyp) { return new FunctionCall(yyp); }
10962public static object Event_27_factory(Parser yyp) { return new Event_27(yyp); }
10963public static object Event_28_factory(Parser yyp) { return new Event_28(yyp); }
10964public static object Event_29_factory(Parser yyp) { return new Event_29(yyp); }
10965public static object ListConstant_1_factory(Parser yyp) { return new ListConstant_1(yyp); }
10966public static object Event_6_factory(Parser yyp) { return new Event_6(yyp); }
10967public static object Declaration_1_factory(Parser yyp) { return new Declaration_1(yyp); }
10968public static object SimpleAssignment_7_factory(Parser yyp) { return new SimpleAssignment_7(yyp); }
10969public static object ForLoop_factory(Parser yyp) { return new ForLoop(yyp); }
10970public static object Event_30_factory(Parser yyp) { return new Event_30(yyp); }
10971public static object Event_31_factory(Parser yyp) { return new Event_31(yyp); }
10972public static object Event_33_factory(Parser yyp) { return new Event_33(yyp); }
10973public static object GlobalFunctionDefinition_1_factory(Parser yyp) { return new GlobalFunctionDefinition_1(yyp); }
10974public static object JumpLabel_1_factory(Parser yyp) { return new JumpLabel_1(yyp); }
10975public static object IfStatement_factory(Parser yyp) { return new IfStatement(yyp); }
10976public static object ForLoopStatement_1_factory(Parser yyp) { return new ForLoopStatement_1(yyp); }
10977public static object ForLoopStatement_2_factory(Parser yyp) { return new ForLoopStatement_2(yyp); }
10978public static object ForLoopStatement_3_factory(Parser yyp) { return new ForLoopStatement_3(yyp); }
10979public static object ArgumentDeclarationList_4_factory(Parser yyp) { return new ArgumentDeclarationList_4(yyp); }
10980public static object ArgumentDeclarationList_5_factory(Parser yyp) { return new ArgumentDeclarationList_5(yyp); }
10981public static object WhileStatement_factory(Parser yyp) { return new WhileStatement(yyp); }
10982public static object ForLoop_1_factory(Parser yyp) { return new ForLoop_1(yyp); }
10983public static object Constant_2_factory(Parser yyp) { return new Constant_2(yyp); }
10984public static object StatementList_factory(Parser yyp) { return new StatementList(yyp); }
10985public static object StateBody_2_factory(Parser yyp) { return new StateBody_2(yyp); }
10986public static object WhileStatement_2_factory(Parser yyp) { return new WhileStatement_2(yyp); }
10987public static object IdentExpression_1_factory(Parser yyp) { return new IdentExpression_1(yyp); }
10988public static object States_factory(Parser yyp) { return new States(yyp); }
10989}
10990public class LSLSyntax
10991: Parser {
10992public LSLSyntax
10993():base(new yyLSLSyntax
10994(),new LSLTokens()) {}
10995public LSLSyntax
10996(YyParser syms):base(syms,new LSLTokens()) {}
10997public LSLSyntax
10998(YyParser syms,ErrorHandler erh):base(syms,new LSLTokens(erh)) {}
10999
11000 }
11001}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs
deleted file mode 100644
index 0537f7d..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs
+++ /dev/null
@@ -1,218 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33using System.Text;
34
35namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
36{
37 public class Atom : IUnifiable
38 {
39 private static Dictionary<string, Atom> _atomStore = new Dictionary<string, Atom>();
40 public readonly string _name;
41 public readonly Atom _module;
42
43 /// <summary>
44 /// You should not call this constructor, but use Atom.a instead.
45 /// </summary>
46 /// <param name="name"></param>
47 /// <param name="module"></param>
48 private Atom(string name, Atom module)
49 {
50 _name = name;
51 _module = module;
52 }
53
54 /// <summary>
55 /// Return the unique Atom object for name where module is null. You should use this to create
56 /// an Atom instead of calling the Atom constructor.
57 /// </summary>
58 /// <param name="name"></param>
59 /// <returns></returns>
60 public static Atom a(string name)
61 {
62 Atom atom;
63 if (!_atomStore.TryGetValue(name, out atom))
64 {
65 atom = new Atom(name, null);
66 _atomStore[name] = atom;
67 }
68 return atom;
69 }
70
71 /// <summary>
72 /// Return an Atom object with the name and module. If module is null or Atom.NIL,
73 /// this behaves like Atom.a(name) and returns the unique object where the module is null.
74 /// If module is not null or Atom.NIL, this may or may not be the same object as another Atom
75 /// with the same name and module.
76 /// </summary>
77 /// <param name="name"></param>
78 /// <param name="module"></param>
79 /// <returns></returns>
80 public static Atom a(string name, Atom module)
81 {
82 if (module == null || module == Atom.NIL)
83 return a(name);
84 return new Atom(name, module);
85 }
86
87 /// <summary>
88 /// If Obj is an Atom unify its _module with Module. If the Atom's _module is null, use Atom.NIL.
89 /// </summary>
90 /// <param name="Atom"></param>
91 /// <param name="Module"></param>
92 /// <returns></returns>
93 public static IEnumerable<bool> module(object Obj, object Module)
94 {
95 Obj = YP.getValue(Obj);
96 if (Obj is Atom)
97 {
98 if (((Atom)Obj)._module == null)
99 return YP.unify(Module, Atom.NIL);
100 else
101 return YP.unify(Module, ((Atom)Obj)._module);
102 }
103 return YP.fail();
104 }
105
106 public static readonly Atom NIL = Atom.a("[]");
107 public static readonly Atom DOT = Atom.a(".");
108 public static readonly Atom F = Atom.a("f");
109 public static readonly Atom SLASH = Atom.a("/");
110 public static readonly Atom HAT = Atom.a("^");
111 public static readonly Atom RULE = Atom.a(":-");
112
113 public IEnumerable<bool> unify(object arg)
114 {
115 arg = YP.getValue(arg);
116 if (arg is Atom)
117 return Equals(arg) ? YP.succeed() : YP.fail();
118 else if (arg is Variable)
119 return ((Variable)arg).unify(this);
120 else
121 return YP.fail();
122 }
123
124 public void addUniqueVariables(List<Variable> variableSet)
125 {
126 // Atom does not contain variables.
127 }
128
129 public object makeCopy(Variable.CopyStore copyStore)
130 {
131 // Atom does not contain variables that need to be copied.
132 return this;
133 }
134
135 public bool termEqual(object term)
136 {
137 return Equals(YP.getValue(term));
138 }
139
140 public bool ground()
141 {
142 // Atom is always ground.
143 return true;
144 }
145
146 public override bool Equals(object obj)
147 {
148 if (obj is Atom)
149 {
150 if (_module == null && ((Atom)obj)._module == null)
151 // When _declaringClass is null, we always use an identical object from _atomStore.
152 return this == obj;
153 // Otherwise, ignore _declaringClass and do a normal string compare on the _name.
154 return _name == ((Atom)obj)._name;
155 }
156 return false;
157 }
158
159 public override string ToString()
160 {
161 return _name;
162 }
163
164 public override int GetHashCode()
165 {
166 // Debug: need to check _declaringClass.
167 return _name.GetHashCode();
168 }
169
170 public string toQuotedString()
171 {
172 if (_name.Length == 0)
173 return "''";
174 else if (this == Atom.NIL)
175 return "[]";
176
177 StringBuilder result = new StringBuilder(_name.Length);
178 bool useQuotes = false;
179 foreach (char c in _name)
180 {
181 int cInt = (int)c;
182 if (c == '\'')
183 {
184 result.Append("''");
185 useQuotes = true;
186 }
187 else if (c == '_' || cInt >= (int)'a' && cInt <= (int)'z' ||
188 cInt >= (int)'A' && cInt <= (int)'Z' || cInt >= (int)'0' && cInt <= (int)'9')
189 result.Append(c);
190 else
191 {
192 // Debug: Need to handle non-printable chars.
193 result.Append(c);
194 useQuotes = true;
195 }
196 }
197
198 if (!useQuotes && (int)_name[0] >= (int)'a' && (int)_name[0] <= (int)'z')
199 return result.ToString();
200 else
201 {
202 // Surround in single quotes.
203 result.Append('\'');
204 return "'" + result;
205 }
206 }
207
208 /// <summary>
209 /// Return true if _name is lexicographically less than atom._name.
210 /// </summary>
211 /// <param name="atom"></param>
212 /// <returns></returns>
213 public bool lessThan(Atom atom)
214 {
215 return _name.CompareTo(atom._name) < 0;
216 }
217 }
218}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs
deleted file mode 100644
index e6f10ca..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs
+++ /dev/null
@@ -1,239 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34
35namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
36{
37 /// <summary>
38 /// A BagofAnswers holds answers for bagof and setof.
39 /// </summary>
40 public class BagofAnswers
41 {
42 private object _template;
43 private Variable[] _freeVariables;
44 private Dictionary<object[], List<object>> _bagForFreeVariables;
45 private List<object> _findallBagArray;
46 private static TermArrayEqualityComparer _termArrayEqualityComparer =
47 new TermArrayEqualityComparer();
48
49 /// <summary>
50 /// To get the free variables, split off any existential qualifiers from Goal such as the X in
51 /// "X ^ f(Y)", get the set of unbound variables in Goal that are not qualifiers, then remove
52 /// the unbound variables that are qualifiers as well as the unbound variables in Template.
53 /// </summary>
54 /// <param name="Template"></param>
55 /// <param name="Goal"></param>
56 public BagofAnswers(object Template, object Goal)
57 {
58 _template = Template;
59
60 // First get the set of variables that are not free variables.
61 List<Variable> variableSet = new List<Variable>();
62 YP.addUniqueVariables(Template, variableSet);
63 object UnqualifiedGoal = YP.getValue(Goal);
64 while (UnqualifiedGoal is Functor2 && ((Functor2)UnqualifiedGoal)._name == Atom.HAT)
65 {
66 YP.addUniqueVariables(((Functor2)UnqualifiedGoal)._arg1, variableSet);
67 UnqualifiedGoal = YP.getValue(((Functor2)UnqualifiedGoal)._arg2);
68 }
69
70 // Remember how many non-free variables there are so we can find the unique free variables
71 // that are added.
72 int nNonFreeVariables = variableSet.Count;
73 YP.addUniqueVariables(UnqualifiedGoal, variableSet);
74 int nFreeVariables = variableSet.Count - nNonFreeVariables;
75 if (nFreeVariables == 0)
76 {
77 // There were no free variables added, so we won't waste time with _bagForFreeVariables.
78 _freeVariables = null;
79 _findallBagArray = new List<object>();
80 }
81 else
82 {
83 // Copy the free variables.
84 _freeVariables = new Variable[nFreeVariables];
85 for (int i = 0; i < nFreeVariables; ++i)
86 _freeVariables[i] = variableSet[i + nNonFreeVariables];
87
88 _bagForFreeVariables = new Dictionary<object[], List<object>>(_termArrayEqualityComparer);
89 }
90 }
91
92 public void add()
93 {
94 if (_freeVariables == null)
95 // The goal has bound the values in _template but we don't bother with _freeVariables.
96 _findallBagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
97 else
98 {
99 // The goal has bound the values in _template and _freeVariables.
100 // Find the entry for this set of _freeVariables values.
101 object[] freeVariableValues = new object[_freeVariables.Length];
102 for (int i = 0; i < _freeVariables.Length; ++i)
103 freeVariableValues[i] = YP.getValue(_freeVariables[i]);
104 List<object> bagArray;
105 if (!_bagForFreeVariables.TryGetValue(freeVariableValues, out bagArray))
106 {
107 bagArray = new List<object>();
108 _bagForFreeVariables[freeVariableValues] = bagArray;
109 }
110
111 // Now copy the template and add to the bag for the freeVariables values.
112 bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
113 }
114 }
115
116 // disable warning on l1, don't see how we can
117 // code this differently
118 #pragma warning disable 0168
119
120 /// <summary>
121 /// For each result, unify the _freeVariables and unify bagArrayVariable with the associated bag.
122 /// </summary>
123 /// <param name="bagArrayVariable">this is unified with the List<object> of matches for template that
124 /// corresponds to the bindings for freeVariables. Be very careful: this does not unify with a Prolog
125 /// list.</param>
126 /// <returns></returns>
127 public IEnumerable<bool> resultArray(Variable bagArrayVariable)
128 {
129 if (_freeVariables == null)
130 {
131 // No unbound free variables, so we only filled one bag. If empty, bagof fails.
132 if (_findallBagArray.Count > 0)
133 {
134 foreach (bool l1 in bagArrayVariable.unify(_findallBagArray))
135 yield return false;
136 }
137 }
138 else
139 {
140 foreach (KeyValuePair<object[], List<object>> valuesAndBag in _bagForFreeVariables)
141 {
142 foreach (bool l1 in YP.unifyArrays(_freeVariables, valuesAndBag.Key))
143 {
144 foreach (bool l2 in bagArrayVariable.unify(valuesAndBag.Value))
145 yield return false;
146 }
147 // Debug: Should we free memory of the answers already returned?
148 }
149 }
150 }
151
152 /// <summary>
153 /// For each result, unify the _freeVariables and unify Bag with the associated bag.
154 /// </summary>
155 /// <param name="Bag"></param>
156 /// <returns></returns>
157 public IEnumerable<bool> result(object Bag)
158 {
159 Variable bagArrayVariable = new Variable();
160 foreach (bool l1 in resultArray(bagArrayVariable))
161 {
162 foreach (bool l2 in YP.unify(Bag, ListPair.make((List<object>)bagArrayVariable.getValue())))
163 yield return false;
164 }
165 }
166
167 /// <summary>
168 /// For each result, unify the _freeVariables and unify Bag with the associated bag which is sorted
169 /// with duplicates removed, as in setof.
170 /// </summary>
171 /// <param name="Bag"></param>
172 /// <returns></returns>
173 public IEnumerable<bool> resultSet(object Bag)
174 {
175 Variable bagArrayVariable = new Variable();
176 foreach (bool l1 in resultArray(bagArrayVariable))
177 {
178 List<object> bagArray = (List<object>)bagArrayVariable.getValue();
179 YP.sortArray(bagArray);
180 foreach (bool l2 in YP.unify(Bag, ListPair.makeWithoutRepeatedTerms(bagArray)))
181 yield return false;
182 }
183 }
184
185 public static IEnumerable<bool> bagofArray
186 (object Template, object Goal, IEnumerable<bool> goalIterator, Variable bagArrayVariable)
187 {
188 BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
189 foreach (bool l1 in goalIterator)
190 bagOfAnswers.add();
191 return bagOfAnswers.resultArray(bagArrayVariable);
192 }
193
194 public static IEnumerable<bool> bagof
195 (object Template, object Goal, IEnumerable<bool> goalIterator, object Bag)
196 {
197 BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
198 foreach (bool l1 in goalIterator)
199 bagOfAnswers.add();
200 return bagOfAnswers.result(Bag);
201 }
202
203 public static IEnumerable<bool> setof
204 (object Template, object Goal, IEnumerable<bool> goalIterator, object Bag)
205 {
206 BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
207 foreach (bool l1 in goalIterator)
208 bagOfAnswers.add();
209 return bagOfAnswers.resultSet(Bag);
210 }
211 #pragma warning restore 0168
212
213 /// <summary>
214 /// A TermArrayEqualityComparer implements IEqualityComparer to compare two object arrays using YP.termEqual.
215 /// </summary>
216 private class TermArrayEqualityComparer : IEqualityComparer<object[]>
217 {
218 public bool Equals(object[] array1, object[] array2)
219 {
220 if (array1.Length != array2.Length)
221 return false;
222 for (int i = 0; i < array1.Length; ++i)
223 {
224 if (!YP.termEqual(array1[i], array2[i]))
225 return false;
226 }
227 return true;
228 }
229
230 public int GetHashCode(object[] array)
231 {
232 int hashCode = 0;
233 for (int i = 0; i < array.Length; ++i)
234 hashCode ^= array[i].GetHashCode();
235 return hashCode;
236 }
237 }
238 }
239}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs
deleted file mode 100644
index 4327715..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs
+++ /dev/null
@@ -1,108 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34
35namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
36{
37 /// <summary>
38 /// A FindallAnswers holds answers for findall.
39 /// </summary>
40 public class FindallAnswers
41 {
42 private object _template;
43 private List<object> _bagArray;
44
45 public FindallAnswers(object Template)
46 {
47 _template = Template;
48 _bagArray = new List<object>();
49 }
50
51 public void add()
52 {
53 _bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
54 }
55
56 public List<object> resultArray()
57 {
58 return _bagArray;
59 }
60
61 /// <summary>
62 /// Unify Bag with the result. This frees the internal answers, so you can only call this once.
63 /// </summary>
64 /// <param name="Bag"></param>
65 /// <returns></returns>
66 public IEnumerable<bool> result(object Bag)
67 {
68 object result = ListPair.make(_bagArray);
69 // Try to free the memory.
70 _bagArray = null;
71 return YP.unify(Bag, result);
72 }
73
74 // disable warning on l1, don't see how we can
75 // code this differently
76 #pragma warning disable 0168
77
78 /// <summary>
79 /// This is a simplified findall when the goal is a single call.
80 /// </summary>
81 /// <param name="Template"></param>
82 /// <param name="goal"></param>
83 /// <param name="Bag"></param>
84 /// <returns></returns>
85 public static IEnumerable<bool> findall(object Template, IEnumerable<bool> goal, object Bag)
86 {
87 FindallAnswers findallAnswers = new FindallAnswers(Template);
88 foreach (bool l1 in goal)
89 findallAnswers.add();
90 return findallAnswers.result(Bag);
91 }
92
93 /// <summary>
94 /// Like findall, except return an array of the results.
95 /// </summary>
96 /// <param name="template"></param>
97 /// <param name="goal"></param>
98 /// <returns></returns>
99 public static List<object> findallArray(object Template, IEnumerable<bool> goal)
100 {
101 FindallAnswers findallAnswers = new FindallAnswers(Template);
102 foreach (bool l1 in goal)
103 findallAnswers.add();
104 return findallAnswers.resultArray();
105 }
106 #pragma warning restore 0168
107 }
108}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs
deleted file mode 100644
index 4aa4ce4..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs
+++ /dev/null
@@ -1,196 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
35{
36 public class Functor : IUnifiable
37 {
38 public readonly Atom _name;
39 public readonly object[] _args;
40
41 public Functor(Atom name, object[] args)
42 {
43 if (args.Length <= 3)
44 {
45 if (args.Length == 0)
46 throw new Exception("For arity 0 functor, just use name as an Atom");
47 else if (args.Length == 1)
48 throw new Exception("For arity 1 functor, use Functor1");
49 else if (args.Length == 2)
50 throw new Exception("For arity 2 functor, use Functor2");
51 else if (args.Length == 3)
52 throw new Exception("For arity 3 functor, use Functor3");
53 else
54 // (This shouldn't happen, but include it for completeness.
55 throw new Exception("Cannot create a Functor of arity " + args.Length);
56 }
57
58 _name = name;
59 _args = args;
60 }
61
62 public Functor(string name, object[] args)
63 : this(Atom.a(name), args)
64 {
65 }
66
67 /// <summary>
68 /// Return an Atom, Functor1, Functor2, Functor3 or Functor depending on the
69 /// length of args.
70 /// Note that this is different than the Functor constructor which requires
71 /// the length of args to be greater than 3.
72 /// </summary>
73 /// <param name="name"></param>
74 /// <param name="args"></param>
75 /// <returns></returns>
76 public static object make(Atom name, object[] args)
77 {
78 if (args.Length <= 0)
79 return name;
80 else if (args.Length == 1)
81 return new Functor1(name, args[0]);
82 else if (args.Length == 2)
83 return new Functor2(name, args[0], args[1]);
84 else if (args.Length == 3)
85 return new Functor3(name, args[0], args[1], args[2]);
86 else
87 return new Functor(name, args);
88 }
89
90 /// <summary>
91 /// Call the main make, first converting name to an Atom.
92 /// </summary>
93 /// <param name="name"></param>
94 /// <param name="args"></param>
95 /// <returns></returns>
96 public static object make(string name, object[] args)
97 {
98 return make(Atom.a(name), args);
99 }
100
101 /// <summary>
102 /// If arg is another Functor, then succeed (yield once) if this and arg have the
103 /// same name and all functor args unify, otherwise fail (don't yield).
104 /// If arg is a Variable, then call its unify to unify with this.
105 /// Otherwise fail (don't yield).
106 /// </summary>
107 /// <param name="arg"></param>
108 /// <returns></returns>
109 public IEnumerable<bool> unify(object arg)
110 {
111 arg = YP.getValue(arg);
112 if (arg is Functor)
113 {
114 Functor argFunctor = (Functor)arg;
115 if (_name.Equals(argFunctor._name))
116 return YP.unifyArrays(_args, argFunctor._args);
117 else
118 return YP.fail();
119 }
120 else if (arg is Variable)
121 return ((Variable)arg).unify(this);
122 else
123 return YP.fail();
124 }
125
126 public override string ToString()
127 {
128 string result = _name + "(" + YP.getValue(_args[0]);
129 for (int i = 1; i < _args.Length; ++i)
130 result += ", " + YP.getValue(_args[i]);
131 result += ")";
132 return result;
133 }
134
135 public bool termEqual(object term)
136 {
137 term = YP.getValue(term);
138 if (term is Functor)
139 {
140 Functor termFunctor = (Functor)term;
141 if (_name.Equals(termFunctor._name) && _args.Length == termFunctor._args.Length)
142 {
143 for (int i = 0; i < _args.Length; ++i)
144 {
145 if (!YP.termEqual(_args[i], termFunctor._args[i]))
146 return false;
147 }
148 return true;
149 }
150 }
151 return false;
152 }
153
154 public bool lessThan(Functor functor)
155 {
156 // Do the equal check first since it is faster.
157 if (!_name.Equals(functor._name))
158 return _name.lessThan(functor._name);
159
160 if (_args.Length != functor._args.Length)
161 return _args.Length < functor._args.Length;
162
163 for (int i = 0; i < _args.Length; ++i)
164 {
165 if (!YP.termEqual(_args[i], functor._args[i]))
166 return YP.termLessThan(_args[i], functor._args[i]);
167 }
168
169 return false;
170 }
171
172 public bool ground()
173 {
174 for (int i = 0; i < _args.Length; ++i)
175 {
176 if (!YP.ground(_args[i]))
177 return false;
178 }
179 return true;
180 }
181
182 public void addUniqueVariables(List<Variable> variableSet)
183 {
184 for (int i = 0; i < _args.Length; ++i)
185 YP.addUniqueVariables(_args[i], variableSet);
186 }
187
188 public object makeCopy(Variable.CopyStore copyStore)
189 {
190 object[] argsCopy = new object[_args.Length];
191 for (int i = 0; i < _args.Length; ++i)
192 argsCopy[i] = YP.makeCopy(_args[i], copyStore);
193 return new Functor(_name, argsCopy);
194 }
195 }
196}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs
deleted file mode 100644
index fa05270..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs
+++ /dev/null
@@ -1,124 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
35{
36 public class Functor1 : IUnifiable
37 {
38 public readonly Atom _name;
39 public readonly object _arg1;
40
41 public Functor1(Atom name, object arg1)
42 {
43 _name = name;
44 _arg1 = arg1;
45 }
46
47 public Functor1(string name, object arg1)
48 : this(Atom.a(name), arg1)
49 {
50 }
51
52 // disable warning on l1, don't see how we can
53 // code this differently
54 #pragma warning disable 0168
55 /// <summary>
56 /// If arg is another Functor1, then succeed (yield once) if this and arg have the
57 /// same name and the functor args unify, otherwise fail (don't yield).
58 /// If arg is a Variable, then call its unify to unify with this.
59 /// Otherwise fail (don't yield).
60 /// </summary>
61 /// <param name="arg"></param>
62 /// <returns></returns>
63 public IEnumerable<bool> unify(object arg)
64 {
65 arg = YP.getValue(arg);
66 if (arg is Functor1)
67 {
68 Functor1 argFunctor = (Functor1)arg;
69 if (_name.Equals(argFunctor._name))
70 {
71 foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
72 yield return false;
73 }
74 }
75 else if (arg is Variable)
76 {
77 foreach (bool l1 in ((Variable)arg).unify(this))
78 yield return false;
79 }
80 }
81 #pragma warning restore 0168
82
83
84 public override string ToString()
85 {
86 return _name + "(" + YP.getValue(_arg1) + ")";
87 }
88
89 public bool termEqual(object term)
90 {
91 term = YP.getValue(term);
92 if (term is Functor1)
93 {
94 Functor1 termFunctor = (Functor1)term;
95 return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1);
96 }
97 return false;
98 }
99
100 public bool lessThan(Functor1 functor)
101 {
102 // Do the equal check first since it is faster.
103 if (!_name.Equals(functor._name))
104 return _name.lessThan(functor._name);
105
106 return YP.termLessThan(_arg1, functor._arg1);
107 }
108
109 public bool ground()
110 {
111 return YP.ground(_arg1);
112 }
113
114 public void addUniqueVariables(List<Variable> variableSet)
115 {
116 YP.addUniqueVariables(_arg1, variableSet);
117 }
118
119 public object makeCopy(Variable.CopyStore copyStore)
120 {
121 return new Functor1(_name, YP.makeCopy(_arg1, copyStore));
122 }
123 }
124}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs
deleted file mode 100644
index a65022f..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs
+++ /dev/null
@@ -1,163 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
35{
36 public class Functor2 : IUnifiable
37 {
38 public readonly Atom _name;
39 public readonly object _arg1;
40 public readonly object _arg2;
41
42 public Functor2(Atom name, object arg1, object arg2)
43 {
44 _name = name;
45 _arg1 = arg1;
46 _arg2 = arg2;
47 }
48
49 public Functor2(string name, object arg1, object arg2)
50 : this(Atom.a(name), arg1, arg2)
51 {
52 }
53
54 // disable warning on l1, don't see how we can
55 // code this differently
56 #pragma warning disable 0168
57 /// If arg is another Functor2, then succeed (yield once) if this and arg have the
58 /// same name and all functor args unify, otherwise fail (don't yield).
59 /// If arg is a Variable, then call its unify to unify with this.
60 /// Otherwise fail (don't yield).
61 public IEnumerable<bool> unify(object arg)
62 {
63 arg = YP.getValue(arg);
64 if (arg is Functor2)
65 {
66 Functor2 argFunctor = (Functor2)arg;
67 if (_name.Equals(argFunctor._name))
68 {
69 foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
70 {
71 foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
72 yield return false;
73 }
74 }
75 }
76 else if (arg is Variable)
77 {
78 foreach (bool l1 in ((Variable)arg).unify(this))
79 yield return false;
80 }
81 }
82 #pragma warning restore 0168
83
84
85 public override string ToString()
86 {
87 if (_name == Atom.DOT)
88 return listPairToString(this);
89 else
90 return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ")";
91 }
92
93 public bool termEqual(object term)
94 {
95 term = YP.getValue(term);
96 if (term is Functor2)
97 {
98 Functor2 termFunctor = (Functor2)term;
99 return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
100 && YP.termEqual(_arg2, termFunctor._arg2);
101 }
102 return false;
103 }
104
105 public bool lessThan(Functor2 functor)
106 {
107 // Do the equal check first since it is faster.
108 if (!_name.Equals(functor._name))
109 return _name.lessThan(functor._name);
110
111 if (!YP.termEqual(_arg1, functor._arg1))
112 return YP.termLessThan(_arg1, functor._arg1);
113
114 return YP.termLessThan(_arg2, functor._arg2);
115 }
116
117 public bool ground()
118 {
119 return YP.ground(_arg1) && YP.ground(_arg2);
120 }
121
122 public void addUniqueVariables(List<Variable> variableSet)
123 {
124 YP.addUniqueVariables(_arg1, variableSet);
125 YP.addUniqueVariables(_arg2, variableSet);
126 }
127
128 public object makeCopy(Variable.CopyStore copyStore)
129 {
130 return new Functor2(_name, YP.makeCopy(_arg1, copyStore),
131 YP.makeCopy(_arg2, copyStore));
132 }
133
134 private static string listPairToString(Functor2 listPair)
135 {
136 string result = "[";
137 while (true)
138 {
139 object head = YP.getValue(listPair._arg1);
140 object tail = YP.getValue(listPair._arg2);
141 if (tail == (object)Atom.NIL)
142 {
143 result += head;
144 break;
145 }
146 else if (tail is Functor2 && ((Functor2)tail)._name == Atom.DOT)
147 {
148 result += head + ", ";
149 listPair = (Functor2)tail;
150 // Loop again.
151 }
152 else
153 {
154 // The list is not terminated with NIL.
155 result += head + "|" + tail;
156 break;
157 }
158 }
159 result += "]";
160 return result;
161 }
162 }
163}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs
deleted file mode 100644
index b9738da..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs
+++ /dev/null
@@ -1,141 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
35{
36 public class Functor3 : IUnifiable
37 {
38 public readonly Atom _name;
39 public readonly object _arg1;
40 public readonly object _arg2;
41 public readonly object _arg3;
42
43 public Functor3(Atom name, object arg1, object arg2, object arg3)
44 {
45 _name = name;
46 _arg1 = arg1;
47 _arg2 = arg2;
48 _arg3 = arg3;
49 }
50
51 public Functor3(string name, object arg1, object arg2, object arg3)
52 : this(Atom.a(name), arg1, arg2, arg3)
53 {
54 }
55
56 // disable warning on l1, don't see how we can
57 // code this differently
58 #pragma warning disable 0168
59 /// If arg is another Functor3, then succeed (yield once) if this and arg have the
60 /// same name and all functor args unify, otherwise fail (don't yield).
61 /// If arg is a Variable, then call its unify to unify with this.
62 /// Otherwise fail (don't yield).
63 public IEnumerable<bool> unify(object arg)
64 {
65 arg = YP.getValue(arg);
66 if (arg is Functor3)
67 {
68 Functor3 argFunctor = (Functor3)arg;
69 if (_name.Equals(argFunctor._name))
70 {
71 foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
72 {
73 foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
74 {
75 foreach (bool l3 in YP.unify(_arg3, argFunctor._arg3))
76 yield return false;
77 }
78 }
79 }
80 }
81 else if (arg is Variable)
82 {
83 foreach (bool l1 in ((Variable)arg).unify(this))
84 yield return false;
85 }
86 }
87 #pragma warning restore 0168
88
89 public override string ToString()
90 {
91 return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ", " +
92 YP.getValue(_arg3) + ")";
93 }
94
95 public bool termEqual(object term)
96 {
97 term = YP.getValue(term);
98 if (term is Functor3)
99 {
100 Functor3 termFunctor = (Functor3)term;
101 return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
102 && YP.termEqual(_arg2, termFunctor._arg2)
103 && YP.termEqual(_arg3, termFunctor._arg3);
104 }
105 return false;
106 }
107
108 public bool lessThan(Functor3 functor)
109 {
110 // Do the equal check first since it is faster.
111 if (!_name.Equals(functor._name))
112 return _name.lessThan(functor._name);
113
114 if (!YP.termEqual(_arg1, functor._arg1))
115 return YP.termLessThan(_arg1, functor._arg1);
116
117 if (!YP.termEqual(_arg2, functor._arg2))
118 return YP.termLessThan(_arg2, functor._arg2);
119
120 return YP.termLessThan(_arg3, functor._arg3);
121 }
122
123 public bool ground()
124 {
125 return YP.ground(_arg1) && YP.ground(_arg2) && YP.ground(_arg3);
126 }
127
128 public void addUniqueVariables(List<Variable> variableSet)
129 {
130 YP.addUniqueVariables(_arg1, variableSet);
131 YP.addUniqueVariables(_arg2, variableSet);
132 YP.addUniqueVariables(_arg3, variableSet);
133 }
134
135 public object makeCopy(Variable.CopyStore copyStore)
136 {
137 return new Functor3(_name, YP.makeCopy(_arg1, copyStore),
138 YP.makeCopy(_arg2, copyStore), YP.makeCopy(_arg3, copyStore));
139 }
140 }
141}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs
deleted file mode 100644
index 415c646..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs
+++ /dev/null
@@ -1,385 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34
35namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
36{
37 /// <summary>
38 /// An IndexedAnswers holds answers to a query based on the values of index arguments.
39 /// </summary>
40 public class IndexedAnswers : YP.IClause
41 {
42 private int _arity;
43 // addAnswer adds the answer here and indexes it later.
44 private List<object[]> _allAnswers = new List<object[]>();
45 // The key has the arity of answers with non-null values for each indexed arg. The value
46 // is a list of the matching answers. The signature is implicit in the pattern on non-null index args.
47 private Dictionary<HashedList, List<object[]>> _indexedAnswers =
48 new Dictionary<HashedList, List<object[]>>();
49 // Keeps track of whether we have started adding entries to _indexedAnswers for the signature.
50 private Dictionary<int, object> _gotAnswersForSignature = new Dictionary<int, object>();
51 private const int MAX_INDEX_ARGS = 31;
52
53 public IndexedAnswers(int arity)
54 {
55 _arity = arity;
56 }
57
58 /// <summary>
59 /// Append the answer to the list and update the indexes, if any.
60 /// Elements of answer must be ground, since arguments with unbound variables make this
61 /// into a dynamic rule which we don't index.
62 /// </summary>
63 /// <param name="answer"></param>
64 public void addAnswer(object[] answer)
65 {
66 addOrPrependAnswer(answer, false);
67 }
68
69 /// <summary>
70 /// Prepend the answer to the list and clear the indexes so that they must be re-computed
71 /// on the next call to match. (Only addAnswer will maintain the indexes while adding answers.)
72 /// Elements of answer must be ground, since arguments with unbound variables make this
73 /// into a dynamic rule which we don't index.
74 /// </summary>
75 /// <param name="answer"></param>
76 public void prependAnswer(object[] answer)
77 {
78 addOrPrependAnswer(answer, true);
79 }
80
81 /// <summary>
82 /// Do the work of addAnswer or prependAnswer.
83 /// </summary>
84 /// <param name="answer"></param>
85 private void addOrPrependAnswer(object[] answer, bool prepend)
86 {
87 if (answer.Length != _arity)
88 return;
89
90 // Store a copy of the answer array.
91 object[] answerCopy = new object[answer.Length];
92 Variable.CopyStore copyStore = new Variable.CopyStore();
93 for (int i = 0; i < answer.Length; ++i)
94 answerCopy[i] = YP.makeCopy(answer[i], copyStore);
95 if (copyStore.getNUniqueVariables() > 0)
96 throw new InvalidOperationException
97 ("Elements of answer must be ground, but found " + copyStore.getNUniqueVariables() +
98 " unbound variables");
99
100 if (prepend)
101 {
102 _allAnswers.Insert(0, answerCopy);
103 clearIndexes();
104 }
105 else
106 {
107 _allAnswers.Add(answerCopy);
108 // If match has already indexed answers for a signature, we need to add
109 // this to the existing indexed answers.
110 foreach (int signature in _gotAnswersForSignature.Keys)
111 indexAnswerForSignature(answerCopy, signature);
112 }
113 }
114
115 private void indexAnswerForSignature(object[] answer, int signature)
116 {
117 // First find out which of the answer values can be used as an index.
118 object[] indexValues = new object[answer.Length];
119 for (int i = 0; i < answer.Length; ++i)
120 {
121 // We limit the number of indexed args in a 32-bit signature.
122 if (i >= MAX_INDEX_ARGS)
123 indexValues[i] = null;
124 else
125 indexValues[i] = getIndexValue(YP.getValue(answer[i]));
126 }
127
128 // We need an entry in indexArgs from indexValues for each 1 bit in signature.
129 HashedList indexArgs = new HashedList(indexValues.Length);
130 for (int i = 0; i < indexValues.Length; ++i)
131 {
132 if ((signature & (1 << i)) == 0)
133 indexArgs.Add(null);
134 else
135 {
136 if (indexValues[i] == null)
137 // The signature wants an index value here, but we don't have one so
138 // we can't add it as an answer for this signature.
139 return;
140 else
141 indexArgs.Add(indexValues[i]);
142 }
143 }
144
145 // Add the answer to the answers list for indexArgs, creating the entry if needed.
146 List<object[]> answers;
147 if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
148 {
149 answers = new List<object[]>();
150 _indexedAnswers[indexArgs] = answers;
151 }
152 answers.Add(answer);
153 }
154
155 public IEnumerable<bool> match(object[] arguments)
156 {
157 if (arguments.Length != _arity)
158 yield break;
159
160 // Set up indexArgs, up to arg position MAX_INDEX_ARGS. The signature has a 1 bit for
161 // each non-null index arg.
162 HashedList indexArgs = new HashedList(arguments.Length);
163 bool gotAllIndexArgs = true;
164 int signature = 0;
165 for (int i = 0; i < arguments.Length; ++i)
166 {
167 object indexValue = null;
168 if (i < MAX_INDEX_ARGS)
169 {
170 // We limit the number of args in a 32-bit signature.
171 indexValue = getIndexValue(YP.getValue(arguments[i]));
172 if (indexValue != null)
173 signature += (1 << i);
174 }
175 if (indexValue == null)
176 gotAllIndexArgs = false;
177 indexArgs.Add(indexValue);
178 }
179
180 List<object[]> answers;
181 if (signature == 0)
182 // No index args, so we have to match from _allAnswers.
183 answers = _allAnswers;
184 else
185 {
186 if (!_gotAnswersForSignature.ContainsKey(signature))
187 {
188 // We need to create the entry in _indexedAnswers.
189 foreach (object[] answer in _allAnswers)
190 indexAnswerForSignature(answer, signature);
191 // Mark that we did this signature.
192 _gotAnswersForSignature[signature] = null;
193 }
194 if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
195 yield break;
196 }
197
198 if (gotAllIndexArgs)
199 {
200 // All the arguments were already bound, so we don't need to do bindings.
201 yield return false;
202 yield break;
203 }
204
205 // Find matches in answers.
206 IEnumerator<bool>[] iterators = new IEnumerator<bool>[arguments.Length];
207 // Debug: If the caller asserts another answer into this same predicate during yield, the iterator
208 // over clauses will be corrupted. Should we take the time to copy answers?
209 foreach (object[] answer in answers)
210 {
211 bool gotMatch = true;
212 int nIterators = 0;
213 // Try to bind all the arguments.
214 for (int i = 0; i < arguments.Length; ++i)
215 {
216 if (indexArgs[i] != null)
217 // We already matched this argument by looking up _indexedAnswers.
218 continue;
219
220 IEnumerator<bool> iterator = YP.unify(arguments[i], answer[i]).GetEnumerator();
221 iterators[nIterators++] = iterator;
222 // MoveNext() is true if YP.unify succeeds.
223 if (!iterator.MoveNext())
224 {
225 gotMatch = false;
226 break;
227 }
228 }
229
230 try
231 {
232 if (gotMatch)
233 yield return false;
234 }
235 finally
236 {
237 // Manually finalize all the iterators.
238 for (int i = 0; i < nIterators; ++i)
239 iterators[i].Dispose();
240 }
241 }
242 }
243
244 public IEnumerable<bool> clause(object Head, object Body)
245 {
246 Head = YP.getValue(Head);
247 if (Head is Variable)
248 throw new PrologException("instantiation_error", "Head is an unbound variable");
249 object[] arguments = YP.getFunctorArgs(Head);
250
251 // We always match Head from _allAnswers, and the Body is Atom.a("true").
252 #pragma warning disable 0168
253 foreach (bool l1 in YP.unify(Body, Atom.a("true")))
254 {
255 // The caller can assert another answer into this same predicate during yield, so we have to
256 // make a copy of the answers.
257 foreach (object[] answer in _allAnswers.ToArray())
258 {
259 foreach (bool l2 in YP.unifyArrays(arguments, answer))
260 yield return false;
261 }
262 }
263 #pragma warning restore 0168
264 }
265
266 public IEnumerable<bool> retract(object Head, object Body)
267 {
268 Head = YP.getValue(Head);
269 if (Head is Variable)
270 throw new PrologException("instantiation_error", "Head is an unbound variable");
271 object[] arguments = YP.getFunctorArgs(Head);
272
273 // We always match Head from _allAnswers, and the Body is Atom.a("true").
274 #pragma warning disable 0168
275 foreach (bool l1 in YP.unify(Body, Atom.a("true")))
276 {
277 // The caller can assert another answer into this same predicate during yield, so we have to
278 // make a copy of the answers.
279 foreach (object[] answer in _allAnswers.ToArray())
280 {
281 foreach (bool l2 in YP.unifyArrays(arguments, answer))
282 {
283 _allAnswers.Remove(answer);
284 clearIndexes();
285 yield return false;
286 }
287 }
288 }
289 #pragma warning restore 0168
290 }
291
292 /// <summary>
293 /// After retracting or prepending an answer in _allAnswers, the indexes are invalid, so clear them.
294 /// </summary>
295 private void clearIndexes()
296 {
297 _indexedAnswers.Clear();
298 _gotAnswersForSignature.Clear();
299 }
300
301 /// <summary>
302 /// A HashedList extends an ArrayList with methods to get a hash and to check equality
303 /// based on the elements of the list.
304 /// </summary>
305 public class HashedList : ArrayList
306 {
307 private bool _gotHashCode = false;
308 private int _hashCode;
309
310 public HashedList()
311 : base()
312 {
313 }
314
315 public HashedList(int capacity)
316 : base(capacity)
317 {
318 }
319
320 public HashedList(ICollection c)
321 : base(c)
322 {
323 }
324
325 // Debug: Should override all the other methods that change this.
326 public override int Add(object value)
327 {
328 _gotHashCode = false;
329 return base.Add(value);
330 }
331
332 public override int GetHashCode()
333 {
334 if (!_gotHashCode)
335 {
336 int hashCode = 1;
337 foreach (object obj in this)
338 hashCode = 31 * hashCode + (obj == null ? 0 : obj.GetHashCode());
339 _hashCode = hashCode;
340 _gotHashCode = true;
341 }
342 return _hashCode;
343 }
344
345 public override bool Equals(object obj)
346 {
347 if (!(obj is ArrayList))
348 return false;
349
350 ArrayList objList = (ArrayList)obj;
351 if (objList.Count != Count)
352 return false;
353
354 for (int i = 0; i < Count; ++i)
355 {
356 object value = objList[i];
357 if (value == null)
358 {
359 if (this[i] != null)
360 return false;
361 }
362 else
363 {
364 if (!value.Equals(this[i]))
365 return false;
366 }
367 }
368 return true;
369 }
370 }
371
372 /// <summary>
373 /// If we keep an index on value, return the value, or null if we don't index it.
374 /// </summary>
375 /// <param name="value">the term to examine. Assume you already called YP.getValue(value)</param>
376 /// <returns></returns>
377 public static object getIndexValue(object value)
378 {
379 if (value is Atom || value is string || value is Int32 || value is DateTime)
380 return value;
381 else
382 return null;
383 }
384 }
385}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs
deleted file mode 100644
index c00a556..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs
+++ /dev/null
@@ -1,166 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
35{
36 public class ListPair : Functor2
37 {
38 public ListPair(object head, object tail) : base(Atom.DOT, head, tail)
39 {
40 }
41
42 public static object make(List<object> list)
43 {
44 if (list.Count <= 0)
45 return Atom.NIL;
46
47 object result = Atom.NIL;
48 // Start from the end.
49 for (int i = list.Count - 1; i >= 0; --i)
50 result = new ListPair(list[i], result);
51 return result;
52 }
53
54 public static object make(object[] array)
55 {
56 if (array.Length <= 0)
57 return Atom.NIL;
58
59 object result = Atom.NIL;
60 // Start from the end.
61 for (int i = array.Length - 1; i >= 0; --i)
62 result = new ListPair(array[i], result);
63 return result;
64 }
65
66 /// <summary>
67 /// Return a ListPair version of array, where repeated elements
68 /// (according to YP.termEqual) are removed.
69 /// </summary>
70 /// <param name="array"></param>
71 /// <returns></returns>
72 public static object makeWithoutRepeatedTerms(object[] array)
73 {
74 if (array.Length <= 0)
75 return Atom.NIL;
76
77 // Start from the end.
78 object previousTerm = array[array.Length - 1];
79 object result = new ListPair(previousTerm, Atom.NIL);
80 for (int i = array.Length - 2; i >= 0; --i)
81 {
82 object term = array[i];
83 if (YP.termEqual(term, previousTerm))
84 continue;
85 result = new ListPair(term, result);
86 previousTerm = term;
87 }
88 return result;
89 }
90
91 /// <summary>
92 /// Return a ListPair version of array, where repeated elements
93 /// (according to YP.termEqual) are removed.
94 /// </summary>
95 /// <param name="array"></param>
96 /// <returns></returns>
97 public static object makeWithoutRepeatedTerms(List<object> array)
98 {
99 if (array.Count <= 0)
100 return Atom.NIL;
101
102 // Start from the end.
103 object previousTerm = array[array.Count - 1];
104 object result = new ListPair(previousTerm, Atom.NIL);
105 for (int i = array.Count - 2; i >= 0; --i)
106 {
107 object term = array[i];
108 if (YP.termEqual(term, previousTerm))
109 continue;
110 result = new ListPair(term, result);
111 previousTerm = term;
112 }
113 return result;
114 }
115
116 public static object make(object element1)
117 {
118 return new ListPair(element1, Atom.NIL);
119 }
120
121 public static object make(object element1, object element2)
122 {
123 return new ListPair(element1, new ListPair(element2, Atom.NIL));
124 }
125
126 public static object make(object element1, object element2, object element3)
127 {
128 return new ListPair(element1,
129 new ListPair(element2, new ListPair(element3, Atom.NIL)));
130 }
131
132 /// <summary>
133 /// Return an array of the elements in list or null if it is not
134 /// a proper list. If list is Atom.NIL, return an array of zero elements.
135 /// If the list or one of the tails of the list is Variable, raise an instantiation_error.
136 /// This does not call YP.getValue on each element.
137 /// </summary>
138 /// <param name="list"></param>
139 /// <returns></returns>
140 public static object[] toArray(object list)
141 {
142 list = YP.getValue(list);
143 if (list.Equals(Atom.NIL))
144 return new object[0];
145
146 List<object> result = new List<object>();
147 object element = list;
148 while (true) {
149 if (element == Atom.NIL)
150 break;
151 if (element is Variable)
152 throw new PrologException(Atom.a("instantiation_error"),
153 "List tail is an unbound variable");
154 if (!(element is Functor2 && ((Functor2)element)._name == Atom.DOT))
155 // Not a proper list.
156 return null;
157 result.Add(((Functor2)element)._arg1);
158 element = YP.getValue(((Functor2)element)._arg2);
159 }
160
161 if (result.Count <= 0)
162 return null;
163 return result.ToArray();
164 }
165 }
166}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs
deleted file mode 100644
index d1c060b..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs
+++ /dev/null
@@ -1,4575 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections.Generic;
33
34 // disable warning on l1, don't see how we can
35 // code this differently
36 #pragma warning disable 0168, 0219, 0162
37
38namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
39{
40 public class Parser
41 {
42 public static IEnumerable<bool> read_term2(object Term, object Options)
43 {
44 Variable Answer = new Variable();
45 Variable Variables = new Variable();
46 foreach (bool l1 in read_termOptions(Options, Variables))
47 {
48 foreach (bool l2 in portable_read3(Answer, Variables, new Variable()))
49 {
50 foreach (bool l3 in remove_pos(Answer, Term))
51 yield return false;
52 }
53 }
54 }
55
56 public static IEnumerable<bool> read_term3(object Input, object Term, object Options)
57 {
58 Variable SaveInput = new Variable();
59 Variable Answer = new Variable();
60 Variable Variables = new Variable();
61 foreach (bool l1 in read_termOptions(Options, Variables))
62 {
63 foreach (bool l2 in YP.current_input(SaveInput))
64 {
65 try
66 {
67 YP.see(Input);
68 foreach (bool l3 in portable_read3(Answer, Variables, new Variable()))
69 {
70 foreach (bool l4 in remove_pos(Answer, Term))
71 yield return false;
72 }
73 }
74 finally
75 {
76 YP.see(SaveInput);
77 }
78 }
79 }
80 }
81
82 /// <summary>
83 /// For read_term, check if Options has variable_names(Variables).
84 /// Otherwise, ignore Options.
85 /// </summary>
86 /// <param name="Options"></param>
87 /// <param name="Variables"></param>
88 /// <returns></returns>
89 private static IEnumerable<bool> read_termOptions(object Options, object Variables)
90 {
91 Options = YP.getValue(Options);
92 if (Options is Variable)
93 throw new PrologException(Atom.a("instantiation_error"), "Options is an unbound variable");
94 // First try to match Options = [variable_names(Variables)]
95 foreach (bool l1 in YP.unify(Options, ListPair.make(new Functor1("variable_names", Variables))))
96 {
97 yield return false;
98 yield break;
99 }
100 // Default: Ignore Options.
101 yield return false;
102 }
103
104 public static IEnumerable<bool> read1(object Term)
105 {
106 return read_term2(Term, Atom.NIL);
107 }
108
109 public static IEnumerable<bool> read2(object Input, object Term)
110 {
111 return read_term3(Input, Term, Atom.NIL);
112 }
113
114 public static IEnumerable<bool> formatError(object Output, object Format, object Arguments)
115 {
116 // Debug: Simple implementation for now.
117 YP.write(Format);
118 YP.write(Arguments);
119 YP.nl();
120 yield return false;
121 }
122
123
124 // Debug: Hand-modify this central predicate to do tail recursion.
125 public static IEnumerable<bool> read_tokens(object arg1, object arg2, object arg3)
126 {
127 bool repeat = true;
128 while (repeat)
129 {
130 repeat = false;
131 {
132 object C1 = arg1;
133 object Dict = arg2;
134 object Tokens = arg3;
135 Variable C2 = new Variable();
136 if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL)))
137 {
138 if (YP.greaterThanOrEqual(C1, 0))
139 {
140 foreach (bool l4 in YP.get_code(C2))
141 {
142#if false
143 foreach (bool l5 in read_tokens(C2, Dict, Tokens))
144 {
145 yield return false;
146 }
147#endif
148 arg1 = YP.getValue(C2);
149 arg2 = YP.getValue(Dict);
150 arg3 = YP.getValue(Tokens);
151 repeat = true;
152 }
153 }
154 goto cutIf1;
155 }
156 if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL)))
157 {
158 if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL)))
159 {
160 foreach (bool l4 in read_identifier(C1, Dict, Tokens))
161 {
162 yield return false;
163 }
164 goto cutIf2;
165 }
166 }
167 if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL)))
168 {
169 if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL)))
170 {
171 foreach (bool l4 in read_variable(C1, Dict, Tokens))
172 {
173 yield return false;
174 }
175 goto cutIf3;
176 }
177 }
178 if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
179 {
180 if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL)))
181 {
182 foreach (bool l4 in read_number(C1, Dict, Tokens))
183 {
184 yield return false;
185 }
186 goto cutIf4;
187 }
188 }
189 if (YP.lessThan(C1, 127))
190 {
191 foreach (bool l3 in read_special(C1, Dict, Tokens))
192 {
193 yield return false;
194 }
195 goto cutIf5;
196 }
197 if (YP.lessThanOrEqual(C1, 160))
198 {
199 foreach (bool l3 in YP.get_code(C2))
200 {
201#if false
202 foreach (bool l4 in read_tokens(C2, Dict, Tokens))
203 {
204 yield return false;
205 }
206#endif
207 arg1 = YP.getValue(C2);
208 arg2 = YP.getValue(Dict);
209 arg3 = YP.getValue(Tokens);
210 repeat = true;
211 }
212 goto cutIf6;
213 }
214 if (YP.greaterThanOrEqual(C1, 223))
215 {
216 if (YP.notEqual(C1, 247))
217 {
218 foreach (bool l4 in read_identifier(C1, Dict, Tokens))
219 {
220 yield return false;
221 }
222 goto cutIf7;
223 }
224 }
225 if (YP.greaterThanOrEqual(C1, 192))
226 {
227 if (YP.notEqual(C1, 215))
228 {
229 foreach (bool l4 in read_variable(C1, Dict, Tokens))
230 {
231 yield return false;
232 }
233 goto cutIf8;
234 }
235 }
236 if (YP.notEqual(C1, 170))
237 {
238 if (YP.notEqual(C1, 186))
239 {
240 foreach (bool l4 in read_symbol(C1, Dict, Tokens))
241 {
242 yield return false;
243 }
244 goto cutIf9;
245 }
246 }
247 foreach (bool l2 in read_identifier(C1, Dict, Tokens))
248 {
249 yield return false;
250 }
251 cutIf9:
252 cutIf8:
253 cutIf7:
254 cutIf6:
255 cutIf5:
256 cutIf4:
257 cutIf3:
258 cutIf2:
259 cutIf1:
260 { }
261 }
262 }
263 }
264
265 // Compiler output follows.
266
267 class YPInnerClass { }
268 // static Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }
269
270 public static IEnumerable<bool> parseInput(object TermList)
271 {
272 {
273 Variable TermAndVariables = new Variable();
274 FindallAnswers findallAnswers1 = new FindallAnswers(TermAndVariables);
275 foreach (bool l2 in parseInputHelper(TermAndVariables))
276 {
277 findallAnswers1.add();
278 }
279 foreach (bool l2 in findallAnswers1.result(TermList))
280 {
281 yield return false;
282 }
283 }
284 }
285
286 public static IEnumerable<bool> parseInputHelper(object arg1)
287 {
288 {
289 Variable Term = new Variable();
290 Variable Variables = new Variable();
291 Variable Answer = new Variable();
292 Variable x4 = new Variable();
293 foreach (bool l2 in YP.unify(arg1, new Functor2("f", Term, Variables)))
294 {
295 foreach (bool l3 in YP.repeat())
296 {
297 foreach (bool l4 in portable_read3(Answer, Variables, x4))
298 {
299 foreach (bool l5 in remove_pos(Answer, Term))
300 {
301 if (YP.termEqual(Term, Atom.a("end_of_file")))
302 {
303 yield break;
304 goto cutIf1;
305 }
306 yield return false;
307 cutIf1:
308 { }
309 }
310 }
311 }
312 }
313 }
314 }
315
316 public static IEnumerable<bool> clear_errors()
317 {
318 {
319 yield return false;
320 }
321 }
322
323 public static IEnumerable<bool> remove_pos(object arg1, object arg2)
324 {
325 {
326 Variable X = new Variable();
327 foreach (bool l2 in YP.unify(arg1, X))
328 {
329 foreach (bool l3 in YP.unify(arg2, X))
330 {
331 if (YP.var(X))
332 {
333 yield return true;
334 yield break;
335 }
336 }
337 }
338 }
339 {
340 object X = arg2;
341 Variable _Pos = new Variable();
342 Variable _Name = new Variable();
343 foreach (bool l2 in YP.unify(arg1, new Functor3("$VAR", _Pos, _Name, X)))
344 {
345 if (YP.var(X))
346 {
347 yield return true;
348 yield break;
349 }
350 }
351 }
352 {
353 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
354 {
355 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
356 {
357 yield return true;
358 yield break;
359 }
360 }
361 }
362 {
363 Variable H = new Variable();
364 Variable T = new Variable();
365 Variable NH = new Variable();
366 Variable NT = new Variable();
367 foreach (bool l2 in YP.unify(arg1, new ListPair(H, T)))
368 {
369 foreach (bool l3 in YP.unify(arg2, new ListPair(NH, NT)))
370 {
371 foreach (bool l4 in remove_pos(H, NH))
372 {
373 foreach (bool l5 in remove_pos(T, NT))
374 {
375 yield return false;
376 }
377 }
378 yield break;
379 }
380 }
381 }
382 {
383 Variable A = new Variable();
384 Variable B = new Variable();
385 Variable NA = new Variable();
386 Variable NB = new Variable();
387 foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B)))
388 {
389 foreach (bool l3 in YP.unify(arg2, new Functor2(",", NA, NB)))
390 {
391 foreach (bool l4 in remove_pos(A, NA))
392 {
393 foreach (bool l5 in remove_pos(B, NB))
394 {
395 yield return false;
396 }
397 }
398 yield break;
399 }
400 }
401 }
402 {
403 Variable Atom_1 = new Variable();
404 Variable _F = new Variable();
405 foreach (bool l2 in YP.unify(arg1, Atom_1))
406 {
407 foreach (bool l3 in YP.unify(arg2, Atom_1))
408 {
409 foreach (bool l4 in YP.functor(Atom_1, _F, 0))
410 {
411 yield return false;
412 }
413 }
414 }
415 }
416 {
417 object Term = arg1;
418 object NewTerm = arg2;
419 Variable Func = new Variable();
420 Variable _Pos = new Variable();
421 Variable Args = new Variable();
422 Variable NArgs = new Variable();
423 if (YP.nonvar(Term))
424 {
425 foreach (bool l3 in YP.univ(Term, new ListPair(Func, new ListPair(_Pos, Args))))
426 {
427 foreach (bool l4 in remove_pos(Args, NArgs))
428 {
429 foreach (bool l5 in YP.univ(NewTerm, new ListPair(Func, NArgs)))
430 {
431 yield return false;
432 }
433 }
434 }
435 }
436 }
437 }
438
439 public static IEnumerable<bool> portable_read_position(object Term, object PosTerm, object Syntax)
440 {
441 {
442 foreach (bool l2 in portable_read(PosTerm, Syntax))
443 {
444 foreach (bool l3 in remove_pos(PosTerm, Term))
445 {
446 yield return false;
447 }
448 }
449 }
450 }
451
452 public static IEnumerable<bool> portable_read(object Answer, object Syntax)
453 {
454 {
455 Variable Tokens = new Variable();
456 Variable ParseTokens = new Variable();
457 foreach (bool l2 in read_tokens1(Tokens))
458 {
459 foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax))
460 {
461 foreach (bool l4 in parse2(ParseTokens, Answer))
462 {
463 yield return false;
464 }
465 }
466 }
467 }
468 }
469
470 public static IEnumerable<bool> portable_read3(object Answer, object Variables, object Syntax)
471 {
472 {
473 Variable Tokens = new Variable();
474 Variable ParseTokens = new Variable();
475 foreach (bool l2 in read_tokens2(Tokens, Variables))
476 {
477 foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax))
478 {
479 foreach (bool l4 in parse2(ParseTokens, Answer))
480 {
481 yield return false;
482 }
483 }
484 }
485 }
486 }
487
488 public static IEnumerable<bool> remove_comments(object arg1, object arg2, object arg3)
489 {
490 {
491 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
492 {
493 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
494 {
495 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
496 {
497 yield return false;
498 }
499 }
500 }
501 }
502 {
503 object Ys = arg2;
504 Variable S = new Variable();
505 Variable E = new Variable();
506 Variable Xs = new Variable();
507 Variable Zs = new Variable();
508 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("comment", S, E), Xs)))
509 {
510 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("comment", S, E), Zs)))
511 {
512 foreach (bool l4 in remove_comments(Xs, Ys, Zs))
513 {
514 yield return false;
515 }
516 yield break;
517 }
518 }
519 }
520 {
521 Variable Pos = new Variable();
522 Variable Xs = new Variable();
523 Variable Ys = new Variable();
524 Variable Pos2 = new Variable();
525 Variable Zs = new Variable();
526 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("/", Atom.a("["), Pos), Xs)))
527 {
528 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("["), Ys)))
529 {
530 foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2("list", Pos, Pos2), Zs)))
531 {
532 foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1)))
533 {
534 foreach (bool l6 in remove_comments(Xs, Ys, Zs))
535 {
536 yield return false;
537 }
538 }
539 yield break;
540 }
541 }
542 }
543 }
544 {
545 Variable Pos = new Variable();
546 Variable Xs = new Variable();
547 Variable Ys = new Variable();
548 Variable Pos2 = new Variable();
549 Variable Zs = new Variable();
550 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("/", Atom.a("]"), Pos), Xs)))
551 {
552 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("]"), Ys)))
553 {
554 foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2("list", Pos, Pos2), Zs)))
555 {
556 foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1)))
557 {
558 foreach (bool l6 in remove_comments(Xs, Ys, Zs))
559 {
560 yield return false;
561 }
562 }
563 yield break;
564 }
565 }
566 }
567 }
568 {
569 object Zs = arg3;
570 Variable Token = new Variable();
571 Variable Xs = new Variable();
572 Variable Ys = new Variable();
573 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Xs)))
574 {
575 foreach (bool l3 in YP.unify(arg2, new ListPair(Token, Ys)))
576 {
577 foreach (bool l4 in remove_comments(Xs, Ys, Zs))
578 {
579 yield return false;
580 }
581 }
582 }
583 }
584 }
585
586 public static IEnumerable<bool> expect(object Token, object arg2, object arg3)
587 {
588 {
589 object Rest = arg3;
590 foreach (bool l2 in YP.unify(arg2, new ListPair(Token, Rest)))
591 {
592 yield return true;
593 yield break;
594 }
595 }
596 {
597 object S0 = arg2;
598 object x3 = arg3;
599 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Token, Atom.a("or"), Atom.a("operator"), Atom.a("expected") }), S0))
600 {
601 yield return false;
602 }
603 }
604 }
605
606 public static IEnumerable<bool> parse2(object Tokens, object Answer)
607 {
608 {
609 Variable Term = new Variable();
610 Variable LeftOver = new Variable();
611 foreach (bool l2 in clear_errors())
612 {
613 foreach (bool l3 in parse(Tokens, 1200, Term, LeftOver))
614 {
615 foreach (bool l4 in all_read(LeftOver))
616 {
617 foreach (bool l5 in YP.unify(Answer, Term))
618 {
619 yield return false;
620 }
621 yield break;
622 }
623 }
624 foreach (bool l3 in syntax_error(Tokens))
625 {
626 yield return false;
627 }
628 }
629 }
630 }
631
632 public static IEnumerable<bool> all_read(object arg1)
633 {
634 {
635 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
636 {
637 yield return false;
638 }
639 }
640 {
641 Variable Token = new Variable();
642 Variable S = new Variable();
643 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S)))
644 {
645 foreach (bool l3 in syntax_error(ListPair.make(new object[] { Atom.a("operator"), Atom.a("expected"), Atom.a("after"), Atom.a("expression") }), new ListPair(Token, S)))
646 {
647 yield return false;
648 }
649 }
650 }
651 }
652
653 public static IEnumerable<bool> parse(object arg1, object arg2, object arg3, object arg4)
654 {
655 {
656 object x1 = arg2;
657 object x2 = arg3;
658 object x3 = arg4;
659 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
660 {
661 foreach (bool l3 in syntax_error(new ListPair(Atom.a("expression"), new ListPair(Atom.a("expected"), Atom.NIL)), Atom.NIL))
662 {
663 yield return false;
664 }
665 }
666 }
667 {
668 object Precedence = arg2;
669 object Term = arg3;
670 object LeftOver = arg4;
671 Variable Token = new Variable();
672 Variable RestTokens = new Variable();
673 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, RestTokens)))
674 {
675 foreach (bool l3 in parse5(Token, RestTokens, Precedence, Term, LeftOver))
676 {
677 yield return false;
678 }
679 }
680 }
681 }
682
683 public static IEnumerable<bool> parse5(object arg1, object arg2, object arg3, object arg4, object arg5)
684 {
685 {
686 object S0 = arg2;
687 object x2 = arg3;
688 object x3 = arg4;
689 object x4 = arg5;
690 foreach (bool l2 in YP.unify(arg1, Atom.a("}")))
691 {
692 foreach (bool l3 in cannot_start(Atom.a("}"), S0))
693 {
694 yield return false;
695 }
696 }
697 }
698 {
699 object S0 = arg2;
700 object x2 = arg3;
701 object x3 = arg4;
702 object x4 = arg5;
703 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
704 {
705 foreach (bool l3 in cannot_start(Atom.a("]"), S0))
706 {
707 yield return false;
708 }
709 }
710 }
711 {
712 object S0 = arg2;
713 object x2 = arg3;
714 object x3 = arg4;
715 object x4 = arg5;
716 foreach (bool l2 in YP.unify(arg1, Atom.a(")")))
717 {
718 foreach (bool l3 in cannot_start(Atom.a(")"), S0))
719 {
720 yield return false;
721 }
722 }
723 }
724 {
725 object S0 = arg2;
726 object x2 = arg3;
727 object x3 = arg4;
728 object x4 = arg5;
729 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
730 {
731 foreach (bool l3 in cannot_start(Atom.a(","), S0))
732 {
733 yield return false;
734 }
735 }
736 }
737 {
738 object S0 = arg2;
739 object x2 = arg3;
740 object x3 = arg4;
741 object x4 = arg5;
742 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
743 {
744 foreach (bool l3 in cannot_start(Atom.a("|"), S0))
745 {
746 yield return false;
747 }
748 }
749 }
750 {
751 object S0 = arg2;
752 object Precedence = arg3;
753 object Answer = arg4;
754 object S = arg5;
755 Variable Codes = new Variable();
756 Variable Term = new Variable();
757 Variable A = new Variable();
758 foreach (bool l2 in YP.unify(arg1, new Functor1("string", Codes)))
759 {
760 foreach (bool l3 in YP.current_prolog_flag(Atom.a("double_quotes"), Atom.a("atom")))
761 {
762 foreach (bool l4 in YP.atom_codes(Term, Codes))
763 {
764 foreach (bool l5 in exprtl0(S0, Term, Precedence, Answer, S))
765 {
766 yield return false;
767 }
768 }
769 goto cutIf1;
770 }
771 foreach (bool l3 in YP.current_prolog_flag(Atom.a("double_quotes"), Atom.a("chars")))
772 {
773 foreach (bool l4 in YP.atom_codes(A, Codes))
774 {
775 foreach (bool l5 in YP.atom_chars(A, Term))
776 {
777 foreach (bool l6 in exprtl0(S0, Term, Precedence, Answer, S))
778 {
779 yield return false;
780 }
781 }
782 }
783 goto cutIf2;
784 }
785 foreach (bool l3 in YP.unify(Term, Codes))
786 {
787 foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S))
788 {
789 yield return false;
790 }
791 }
792 cutIf2:
793 cutIf1:
794 { }
795 }
796 }
797 {
798 object S0 = arg2;
799 object Precedence = arg3;
800 object Answer = arg4;
801 object S = arg5;
802 Variable Number = new Variable();
803 foreach (bool l2 in YP.unify(arg1, new Functor1("number", Number)))
804 {
805 foreach (bool l3 in exprtl0(S0, Number, Precedence, Answer, S))
806 {
807 yield return false;
808 }
809 }
810 }
811 {
812 object Precedence = arg3;
813 object Answer = arg4;
814 object S = arg5;
815 Variable S1 = new Variable();
816 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
817 {
818 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("]"), S1)))
819 {
820 foreach (bool l4 in read_atom(new Functor2("/", Atom.NIL, 0), S1, Precedence, Answer, S))
821 {
822 yield return false;
823 }
824 yield break;
825 }
826 }
827 }
828 {
829 object S1 = arg2;
830 object Precedence = arg3;
831 object Answer = arg4;
832 object S = arg5;
833 Variable Arg1 = new Variable();
834 Variable S2 = new Variable();
835 Variable RestArgs = new Variable();
836 Variable S3 = new Variable();
837 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
838 {
839 foreach (bool l3 in parse(S1, 999, Arg1, S2))
840 {
841 foreach (bool l4 in read_list(S2, RestArgs, S3))
842 {
843 foreach (bool l5 in exprtl0(S3, new ListPair(Arg1, RestArgs), Precedence, Answer, S))
844 {
845 yield return false;
846 }
847 yield break;
848 }
849 }
850 }
851 }
852 {
853 object S1 = arg2;
854 object Precedence = arg3;
855 object Answer = arg4;
856 object S = arg5;
857 Variable Term = new Variable();
858 Variable S2 = new Variable();
859 Variable S3 = new Variable();
860 foreach (bool l2 in YP.unify(arg1, Atom.a("(")))
861 {
862 foreach (bool l3 in parse(S1, 1200, Term, S2))
863 {
864 foreach (bool l4 in expect(Atom.a(")"), S2, S3))
865 {
866 foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S))
867 {
868 yield return false;
869 }
870 yield break;
871 }
872 }
873 }
874 }
875 {
876 object S1 = arg2;
877 object Precedence = arg3;
878 object Answer = arg4;
879 object S = arg5;
880 Variable Term = new Variable();
881 Variable S2 = new Variable();
882 Variable S3 = new Variable();
883 foreach (bool l2 in YP.unify(arg1, Atom.a(" (")))
884 {
885 foreach (bool l3 in parse(S1, 1200, Term, S2))
886 {
887 foreach (bool l4 in expect(Atom.a(")"), S2, S3))
888 {
889 foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S))
890 {
891 yield return false;
892 }
893 yield break;
894 }
895 }
896 }
897 }
898 {
899 object Precedence = arg3;
900 object Answer = arg4;
901 object S = arg5;
902 Variable _Pos = new Variable();
903 Variable S1 = new Variable();
904 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("{"), _Pos)))
905 {
906 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("}"), S1)))
907 {
908 foreach (bool l4 in read_atom(Atom.a("{}"), S1, Precedence, Answer, S))
909 {
910 yield return false;
911 }
912 yield break;
913 }
914 }
915 }
916 {
917 object S1 = arg2;
918 object Precedence = arg3;
919 object Answer = arg4;
920 object S = arg5;
921 Variable Pos = new Variable();
922 Variable Term = new Variable();
923 Variable S2 = new Variable();
924 Variable S3 = new Variable();
925 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("{"), Pos)))
926 {
927 foreach (bool l3 in parse(S1, 1200, Term, S2))
928 {
929 foreach (bool l4 in expect(Atom.a("}"), S2, S3))
930 {
931 foreach (bool l5 in exprtl0(S3, new Functor2("{}", Pos, Term), Precedence, Answer, S))
932 {
933 yield return false;
934 }
935 yield break;
936 }
937 }
938 }
939 }
940 {
941 object Precedence = arg3;
942 object Answer = arg4;
943 object S = arg5;
944 Variable Variable_1 = new Variable();
945 Variable Name = new Variable();
946 Variable Pos = new Variable();
947 Variable S1 = new Variable();
948 Variable Arg1 = new Variable();
949 Variable S2 = new Variable();
950 Variable RestArgs = new Variable();
951 Variable S3 = new Variable();
952 Variable Term = new Variable();
953 foreach (bool l2 in YP.unify(arg1, new Functor3("var", Variable_1, Name, Pos)))
954 {
955 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("("), S1)))
956 {
957 foreach (bool l4 in parse(S1, 999, Arg1, S2))
958 {
959 foreach (bool l5 in read_args(S2, RestArgs, S3))
960 {
961 foreach (bool l6 in YP.univ(Term, new ListPair(Atom.a("call"), new ListPair(new Functor3("$VAR", Pos, Name, Variable_1), new ListPair(Arg1, RestArgs)))))
962 {
963 foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S))
964 {
965 yield return false;
966 }
967 }
968 yield break;
969 }
970 }
971 yield break;
972 }
973 }
974 }
975 {
976 object S0 = arg2;
977 object Precedence = arg3;
978 object Answer = arg4;
979 object S = arg5;
980 Variable Variable_1 = new Variable();
981 Variable Name = new Variable();
982 Variable Pos = new Variable();
983 foreach (bool l2 in YP.unify(arg1, new Functor3("var", Variable_1, Name, Pos)))
984 {
985 foreach (bool l3 in exprtl0(S0, new Functor3("$VAR", Pos, Name, Variable_1), Precedence, Answer, S))
986 {
987 yield return false;
988 }
989 }
990 }
991 {
992 object S0 = arg2;
993 object Precedence = arg3;
994 object Answer = arg4;
995 object S = arg5;
996 Variable Atom_1 = new Variable();
997 Variable P = new Variable();
998 foreach (bool l2 in YP.unify(arg1, new Functor2("atom", Atom_1, P)))
999 {
1000 foreach (bool l3 in read_atom(new Functor2("/", Atom_1, P), S0, Precedence, Answer, S))
1001 {
1002 yield return false;
1003 }
1004 }
1005 }
1006 }
1007
1008 public static IEnumerable<bool> read_atom(object arg1, object arg2, object Precedence, object Answer, object S)
1009 {
1010 {
1011 Variable _Pos = new Variable();
1012 Variable Number = new Variable();
1013 Variable S1 = new Variable();
1014 Variable Negative = new Variable();
1015 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("-"), _Pos)))
1016 {
1017 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1("number", Number), S1)))
1018 {
1019 foreach (bool l4 in YP.unify(Negative, YP.negate(Number)))
1020 {
1021 foreach (bool l5 in exprtl0(S1, Negative, Precedence, Answer, S))
1022 {
1023 yield return false;
1024 }
1025 }
1026 yield break;
1027 }
1028 }
1029 }
1030 {
1031 Variable Functor_1 = new Variable();
1032 Variable Pos = new Variable();
1033 Variable S1 = new Variable();
1034 Variable Arg1 = new Variable();
1035 Variable S2 = new Variable();
1036 Variable RestArgs = new Variable();
1037 Variable S3 = new Variable();
1038 Variable Term = new Variable();
1039 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Functor_1, Pos)))
1040 {
1041 foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("("), S1)))
1042 {
1043 foreach (bool l4 in parse(S1, 999, Arg1, S2))
1044 {
1045 foreach (bool l5 in read_args(S2, RestArgs, S3))
1046 {
1047 foreach (bool l6 in YP.univ(Term, new ListPair(Functor_1, new ListPair(Pos, new ListPair(Arg1, RestArgs)))))
1048 {
1049 foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S))
1050 {
1051 yield return false;
1052 }
1053 }
1054 yield break;
1055 }
1056 }
1057 yield break;
1058 }
1059 }
1060 }
1061 {
1062 object S0 = arg2;
1063 Variable Op = new Variable();
1064 Variable Pos = new Variable();
1065 Variable Oprec = new Variable();
1066 Variable Aprec = new Variable();
1067 Variable Flag = new Variable();
1068 Variable Term = new Variable();
1069 Variable Arg = new Variable();
1070 Variable S1 = new Variable();
1071 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Op, Pos)))
1072 {
1073 foreach (bool l3 in prefixop(Op, Oprec, Aprec))
1074 {
1075 foreach (bool l4 in possible_right_operand(S0, Flag))
1076 {
1077 if (YP.lessThan(Flag, 0))
1078 {
1079 foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, Atom.NIL))))
1080 {
1081 foreach (bool l7 in exprtl0(S0, Term, Precedence, Answer, S))
1082 {
1083 yield return false;
1084 }
1085 }
1086 goto cutIf1;
1087 }
1088 if (YP.greaterThan(Oprec, Precedence))
1089 {
1090 foreach (bool l6 in syntax_error(ListPair.make(new object[] { Atom.a("prefix"), Atom.a("operator"), Op, Atom.a("in"), Atom.a("context"), Atom.a("with"), Atom.a("precedence"), Precedence }), S0))
1091 {
1092 yield return false;
1093 }
1094 goto cutIf2;
1095 }
1096 if (YP.greaterThan(Flag, 0))
1097 {
1098 foreach (bool l6 in parse(S0, Aprec, Arg, S1))
1099 {
1100 foreach (bool l7 in YP.univ(Term, ListPair.make(new object[] { Op, Pos, Arg })))
1101 {
1102 foreach (bool l8 in exprtl(S1, Oprec, Term, Precedence, Answer, S))
1103 {
1104 yield return false;
1105 }
1106 }
1107 yield break;
1108 }
1109 goto cutIf3;
1110 }
1111 foreach (bool l5 in peepop(S0, S1))
1112 {
1113 foreach (bool l6 in prefix_is_atom(S1, Oprec))
1114 {
1115 foreach (bool l7 in exprtl(S1, Oprec, new Functor2("/", Op, Pos), Precedence, Answer, S))
1116 {
1117 yield return false;
1118 }
1119 }
1120 }
1121 foreach (bool l5 in parse(S0, Aprec, Arg, S1))
1122 {
1123 foreach (bool l6 in YP.univ(Term, ListPair.make(new object[] { Op, Pos, Arg })))
1124 {
1125 foreach (bool l7 in exprtl(S1, Oprec, Term, Precedence, Answer, S))
1126 {
1127 yield return false;
1128 }
1129 }
1130 yield break;
1131 }
1132 cutIf3:
1133 cutIf2:
1134 cutIf1:
1135 { }
1136 }
1137 yield break;
1138 }
1139 }
1140 }
1141 {
1142 object S0 = arg2;
1143 Variable Atom_1 = new Variable();
1144 Variable Pos = new Variable();
1145 Variable Term = new Variable();
1146 foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom_1, Pos)))
1147 {
1148 foreach (bool l3 in YP.univ(Term, new ListPair(Atom_1, new ListPair(Pos, Atom.NIL))))
1149 {
1150 foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S))
1151 {
1152 yield return false;
1153 }
1154 }
1155 }
1156 }
1157 }
1158
1159 public static IEnumerable<bool> cannot_start(object Token, object S0)
1160 {
1161 {
1162 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Token, Atom.a("cannot"), Atom.a("start"), Atom.a("an"), Atom.a("expression") }), S0))
1163 {
1164 yield return false;
1165 }
1166 }
1167 }
1168
1169 public static IEnumerable<bool> read_args(object arg1, object arg2, object arg3)
1170 {
1171 {
1172 object S = arg3;
1173 Variable S1 = new Variable();
1174 Variable Term = new Variable();
1175 Variable Rest = new Variable();
1176 Variable S2 = new Variable();
1177 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(","), S1)))
1178 {
1179 foreach (bool l3 in YP.unify(arg2, new ListPair(Term, Rest)))
1180 {
1181 foreach (bool l4 in parse(S1, 999, Term, S2))
1182 {
1183 foreach (bool l5 in read_args(S2, Rest, S))
1184 {
1185 yield return false;
1186 }
1187 yield break;
1188 }
1189 yield break;
1190 }
1191 }
1192 }
1193 {
1194 object S = arg3;
1195 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(")"), S)))
1196 {
1197 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
1198 {
1199 yield return true;
1200 yield break;
1201 }
1202 }
1203 }
1204 {
1205 object S = arg1;
1206 object x2 = arg2;
1207 object x3 = arg3;
1208 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Atom.a(", or )"), Atom.a("expected"), Atom.a("in"), Atom.a("arguments") }), S))
1209 {
1210 yield return false;
1211 }
1212 }
1213 }
1214
1215 public static IEnumerable<bool> read_list(object arg1, object arg2, object arg3)
1216 {
1217 {
1218 object x1 = arg2;
1219 object x2 = arg3;
1220 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1221 {
1222 foreach (bool l3 in syntax_error(ListPair.make(new object[] { Atom.a(", | or ]"), Atom.a("expected"), Atom.a("in"), Atom.a("list") }), Atom.NIL))
1223 {
1224 yield return false;
1225 }
1226 }
1227 }
1228 {
1229 object Rest = arg2;
1230 object S = arg3;
1231 Variable Token = new Variable();
1232 Variable S1 = new Variable();
1233 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1)))
1234 {
1235 foreach (bool l3 in read_list4(Token, S1, Rest, S))
1236 {
1237 yield return false;
1238 }
1239 }
1240 }
1241 }
1242
1243 public static IEnumerable<bool> read_list4(object arg1, object arg2, object arg3, object arg4)
1244 {
1245 {
1246 object S1 = arg2;
1247 object S = arg4;
1248 Variable Term = new Variable();
1249 Variable Rest = new Variable();
1250 Variable S2 = new Variable();
1251 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
1252 {
1253 foreach (bool l3 in YP.unify(arg3, new ListPair(Term, Rest)))
1254 {
1255 foreach (bool l4 in parse(S1, 999, Term, S2))
1256 {
1257 foreach (bool l5 in read_list(S2, Rest, S))
1258 {
1259 yield return false;
1260 }
1261 yield break;
1262 }
1263 yield break;
1264 }
1265 }
1266 }
1267 {
1268 object S1 = arg2;
1269 object Rest = arg3;
1270 object S = arg4;
1271 Variable S2 = new Variable();
1272 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
1273 {
1274 foreach (bool l3 in parse(S1, 999, Rest, S2))
1275 {
1276 foreach (bool l4 in expect(Atom.a("]"), S2, S))
1277 {
1278 yield return false;
1279 }
1280 yield break;
1281 }
1282 yield break;
1283 }
1284 }
1285 {
1286 Variable S1 = new Variable();
1287 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
1288 {
1289 foreach (bool l3 in YP.unify(arg2, S1))
1290 {
1291 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
1292 {
1293 foreach (bool l5 in YP.unify(arg4, S1))
1294 {
1295 yield return true;
1296 yield break;
1297 }
1298 }
1299 }
1300 }
1301 }
1302 {
1303 object Token = arg1;
1304 object S1 = arg2;
1305 object x3 = arg3;
1306 object x4 = arg4;
1307 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Atom.a(", | or ]"), Atom.a("expected"), Atom.a("in"), Atom.a("list") }), new ListPair(Token, S1)))
1308 {
1309 yield return false;
1310 }
1311 }
1312 }
1313
1314 public static IEnumerable<bool> possible_right_operand(object arg1, object arg2)
1315 {
1316 {
1317 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1318 {
1319 foreach (bool l3 in YP.unify(arg2, -1))
1320 {
1321 yield return false;
1322 }
1323 }
1324 }
1325 {
1326 object Flag = arg2;
1327 Variable H = new Variable();
1328 Variable T = new Variable();
1329 foreach (bool l2 in YP.unify(arg1, new ListPair(H, T)))
1330 {
1331 foreach (bool l3 in possible_right_operand3(H, Flag, T))
1332 {
1333 yield return false;
1334 }
1335 }
1336 }
1337 }
1338
1339 public static IEnumerable<bool> possible_right_operand3(object arg1, object arg2, object arg3)
1340 {
1341 {
1342 object x4 = arg3;
1343 Variable x1 = new Variable();
1344 Variable x2 = new Variable();
1345 Variable x3 = new Variable();
1346 foreach (bool l2 in YP.unify(arg1, new Functor3("var", x1, x2, x3)))
1347 {
1348 foreach (bool l3 in YP.unify(arg2, 1))
1349 {
1350 yield return false;
1351 }
1352 }
1353 }
1354 {
1355 object x2 = arg3;
1356 Variable x1 = new Variable();
1357 foreach (bool l2 in YP.unify(arg1, new Functor1("number", x1)))
1358 {
1359 foreach (bool l3 in YP.unify(arg2, 1))
1360 {
1361 yield return false;
1362 }
1363 }
1364 }
1365 {
1366 object x2 = arg3;
1367 Variable x1 = new Variable();
1368 foreach (bool l2 in YP.unify(arg1, new Functor1("string", x1)))
1369 {
1370 foreach (bool l3 in YP.unify(arg2, 1))
1371 {
1372 yield return false;
1373 }
1374 }
1375 }
1376 {
1377 object x1 = arg3;
1378 foreach (bool l2 in YP.unify(arg1, Atom.a(" (")))
1379 {
1380 foreach (bool l3 in YP.unify(arg2, 1))
1381 {
1382 yield return false;
1383 }
1384 }
1385 }
1386 {
1387 object x1 = arg3;
1388 foreach (bool l2 in YP.unify(arg1, Atom.a("(")))
1389 {
1390 foreach (bool l3 in YP.unify(arg2, 0))
1391 {
1392 yield return false;
1393 }
1394 }
1395 }
1396 {
1397 object x1 = arg3;
1398 foreach (bool l2 in YP.unify(arg1, Atom.a(")")))
1399 {
1400 foreach (bool l3 in YP.unify(arg2, -1))
1401 {
1402 yield return false;
1403 }
1404 }
1405 }
1406 {
1407 Variable x1 = new Variable();
1408 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
1409 {
1410 foreach (bool l3 in YP.unify(arg2, 0))
1411 {
1412 foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a("]"), x1)))
1413 {
1414 yield return true;
1415 yield break;
1416 }
1417 }
1418 }
1419 }
1420 {
1421 object x1 = arg3;
1422 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
1423 {
1424 foreach (bool l3 in YP.unify(arg2, 1))
1425 {
1426 yield return false;
1427 }
1428 }
1429 }
1430 {
1431 object x1 = arg3;
1432 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
1433 {
1434 foreach (bool l3 in YP.unify(arg2, -1))
1435 {
1436 yield return false;
1437 }
1438 }
1439 }
1440 {
1441 Variable x1 = new Variable();
1442 foreach (bool l2 in YP.unify(arg1, Atom.a("{")))
1443 {
1444 foreach (bool l3 in YP.unify(arg2, 0))
1445 {
1446 foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a("}"), x1)))
1447 {
1448 yield return true;
1449 yield break;
1450 }
1451 }
1452 }
1453 }
1454 {
1455 object x1 = arg3;
1456 foreach (bool l2 in YP.unify(arg1, Atom.a("{")))
1457 {
1458 foreach (bool l3 in YP.unify(arg2, 1))
1459 {
1460 yield return false;
1461 }
1462 }
1463 }
1464 {
1465 object x1 = arg3;
1466 foreach (bool l2 in YP.unify(arg1, Atom.a("}")))
1467 {
1468 foreach (bool l3 in YP.unify(arg2, -1))
1469 {
1470 yield return false;
1471 }
1472 }
1473 }
1474 {
1475 object x1 = arg3;
1476 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
1477 {
1478 foreach (bool l3 in YP.unify(arg2, -1))
1479 {
1480 yield return false;
1481 }
1482 }
1483 }
1484 {
1485 object x1 = arg3;
1486 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
1487 {
1488 foreach (bool l3 in YP.unify(arg2, -1))
1489 {
1490 yield return false;
1491 }
1492 }
1493 }
1494 {
1495 object x3 = arg3;
1496 Variable x1 = new Variable();
1497 Variable x2 = new Variable();
1498 foreach (bool l2 in YP.unify(arg1, new Functor2("atom", x1, x2)))
1499 {
1500 foreach (bool l3 in YP.unify(arg2, 0))
1501 {
1502 yield return false;
1503 }
1504 }
1505 }
1506 }
1507
1508 public static IEnumerable<bool> peepop(object arg1, object arg2)
1509 {
1510 {
1511 Variable F = new Variable();
1512 Variable Pos = new Variable();
1513 Variable S1 = new Variable();
1514 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), new ListPair(Atom.a("("), S1))))
1515 {
1516 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor2("atom", F, Pos), new ListPair(Atom.a("("), S1))))
1517 {
1518 yield return true;
1519 yield break;
1520 }
1521 }
1522 }
1523 {
1524 Variable F = new Variable();
1525 Variable Pos = new Variable();
1526 Variable S1 = new Variable();
1527 Variable L = new Variable();
1528 Variable P = new Variable();
1529 Variable R = new Variable();
1530 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), S1)))
1531 {
1532 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L, P, R }), S1)))
1533 {
1534 foreach (bool l4 in infixop(F, L, P, R))
1535 {
1536 yield return false;
1537 }
1538 }
1539 }
1540 }
1541 {
1542 Variable F = new Variable();
1543 Variable Pos = new Variable();
1544 Variable S1 = new Variable();
1545 Variable L = new Variable();
1546 Variable P = new Variable();
1547 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), S1)))
1548 {
1549 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L, P), S1)))
1550 {
1551 foreach (bool l4 in postfixop(F, L, P))
1552 {
1553 yield return false;
1554 }
1555 }
1556 }
1557 }
1558 {
1559 Variable S0 = new Variable();
1560 foreach (bool l2 in YP.unify(arg1, S0))
1561 {
1562 foreach (bool l3 in YP.unify(arg2, S0))
1563 {
1564 yield return false;
1565 }
1566 }
1567 }
1568 }
1569
1570 public static IEnumerable<bool> prefix_is_atom(object arg1, object arg2)
1571 {
1572 {
1573 object Precedence = arg2;
1574 Variable Token = new Variable();
1575 Variable x2 = new Variable();
1576 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, x2)))
1577 {
1578 foreach (bool l3 in prefix_is_atom(Token, Precedence))
1579 {
1580 yield return false;
1581 }
1582 }
1583 }
1584 {
1585 object P = arg2;
1586 Variable x1 = new Variable();
1587 Variable L = new Variable();
1588 Variable x3 = new Variable();
1589 Variable x4 = new Variable();
1590 foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a("infixop", Atom.a("")), new object[] { x1, L, x3, x4 })))
1591 {
1592 if (YP.greaterThanOrEqual(L, P))
1593 {
1594 yield return false;
1595 }
1596 }
1597 }
1598 {
1599 object P = arg2;
1600 Variable x1 = new Variable();
1601 Variable L = new Variable();
1602 Variable x3 = new Variable();
1603 foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a("postfixop", Atom.a("")), x1, L, x3)))
1604 {
1605 if (YP.greaterThanOrEqual(L, P))
1606 {
1607 yield return false;
1608 }
1609 }
1610 }
1611 {
1612 object x1 = arg2;
1613 foreach (bool l2 in YP.unify(arg1, Atom.a(")")))
1614 {
1615 yield return false;
1616 }
1617 }
1618 {
1619 object x1 = arg2;
1620 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
1621 {
1622 yield return false;
1623 }
1624 }
1625 {
1626 object x1 = arg2;
1627 foreach (bool l2 in YP.unify(arg1, Atom.a("}")))
1628 {
1629 yield return false;
1630 }
1631 }
1632 {
1633 object P = arg2;
1634 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
1635 {
1636 if (YP.greaterThanOrEqual(1100, P))
1637 {
1638 yield return false;
1639 }
1640 }
1641 }
1642 {
1643 object P = arg2;
1644 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
1645 {
1646 if (YP.greaterThanOrEqual(1000, P))
1647 {
1648 yield return false;
1649 }
1650 }
1651 }
1652 {
1653 object x1 = arg2;
1654 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1655 {
1656 yield return false;
1657 }
1658 }
1659 }
1660
1661 public static IEnumerable<bool> exprtl0(object arg1, object arg2, object arg3, object arg4, object arg5)
1662 {
1663 {
1664 object x2 = arg3;
1665 Variable Term = new Variable();
1666 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1667 {
1668 foreach (bool l3 in YP.unify(arg2, Term))
1669 {
1670 foreach (bool l4 in YP.unify(arg4, Term))
1671 {
1672 foreach (bool l5 in YP.unify(arg5, Atom.NIL))
1673 {
1674 yield return false;
1675 }
1676 }
1677 }
1678 }
1679 }
1680 {
1681 object Term = arg2;
1682 object Precedence = arg3;
1683 object Answer = arg4;
1684 object S = arg5;
1685 Variable Token = new Variable();
1686 Variable S1 = new Variable();
1687 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1)))
1688 {
1689 foreach (bool l3 in exprtl0_6(Token, Term, Precedence, Answer, S, S1))
1690 {
1691 yield return false;
1692 }
1693 }
1694 }
1695 }
1696
1697 public static IEnumerable<bool> exprtl0_6(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
1698 {
1699 {
1700 object x2 = arg3;
1701 object S1 = arg6;
1702 Variable Term = new Variable();
1703 foreach (bool l2 in YP.unify(arg1, Atom.a("}")))
1704 {
1705 foreach (bool l3 in YP.unify(arg2, Term))
1706 {
1707 foreach (bool l4 in YP.unify(arg4, Term))
1708 {
1709 foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a("}"), S1)))
1710 {
1711 yield return false;
1712 }
1713 }
1714 }
1715 }
1716 }
1717 {
1718 object x2 = arg3;
1719 object S1 = arg6;
1720 Variable Term = new Variable();
1721 foreach (bool l2 in YP.unify(arg1, Atom.a("]")))
1722 {
1723 foreach (bool l3 in YP.unify(arg2, Term))
1724 {
1725 foreach (bool l4 in YP.unify(arg4, Term))
1726 {
1727 foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a("]"), S1)))
1728 {
1729 yield return false;
1730 }
1731 }
1732 }
1733 }
1734 }
1735 {
1736 object x2 = arg3;
1737 object S1 = arg6;
1738 Variable Term = new Variable();
1739 foreach (bool l2 in YP.unify(arg1, Atom.a(")")))
1740 {
1741 foreach (bool l3 in YP.unify(arg2, Term))
1742 {
1743 foreach (bool l4 in YP.unify(arg4, Term))
1744 {
1745 foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(")"), S1)))
1746 {
1747 yield return false;
1748 }
1749 }
1750 }
1751 }
1752 }
1753 {
1754 object Term = arg2;
1755 object Precedence = arg3;
1756 object Answer = arg4;
1757 object S = arg5;
1758 object S1 = arg6;
1759 Variable Next = new Variable();
1760 Variable S2 = new Variable();
1761 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
1762 {
1763 if (YP.greaterThanOrEqual(Precedence, 1000))
1764 {
1765 foreach (bool l4 in parse(S1, 1000, Next, S2))
1766 {
1767 foreach (bool l5 in exprtl(S2, 1000, new Functor2(",", Term, Next), Precedence, Answer, S))
1768 {
1769 yield return false;
1770 }
1771 yield break;
1772 }
1773 goto cutIf1;
1774 }
1775 foreach (bool l3 in YP.unify(Answer, Term))
1776 {
1777 foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(","), S1)))
1778 {
1779 yield return false;
1780 }
1781 }
1782 cutIf1:
1783 { }
1784 }
1785 }
1786 {
1787 object Term = arg2;
1788 object Precedence = arg3;
1789 object Answer = arg4;
1790 object S = arg5;
1791 object S1 = arg6;
1792 Variable Next = new Variable();
1793 Variable S2 = new Variable();
1794 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
1795 {
1796 if (YP.greaterThanOrEqual(Precedence, 1100))
1797 {
1798 foreach (bool l4 in parse(S1, 1100, Next, S2))
1799 {
1800 foreach (bool l5 in exprtl(S2, 1100, new Functor2(";", Term, Next), Precedence, Answer, S))
1801 {
1802 yield return false;
1803 }
1804 yield break;
1805 }
1806 goto cutIf2;
1807 }
1808 foreach (bool l3 in YP.unify(Answer, Term))
1809 {
1810 foreach (bool l4 in YP.unify(S, new ListPair(Atom.a("|"), S1)))
1811 {
1812 yield return false;
1813 }
1814 }
1815 cutIf2:
1816 { }
1817 }
1818 }
1819 {
1820 object x2 = arg2;
1821 object x3 = arg3;
1822 object x4 = arg4;
1823 object x5 = arg5;
1824 object S1 = arg6;
1825 Variable S = new Variable();
1826 foreach (bool l2 in YP.unify(arg1, new Functor1("string", S)))
1827 {
1828 foreach (bool l3 in cannot_follow(Atom.a("chars"), new Functor1("string", S), S1))
1829 {
1830 yield return false;
1831 }
1832 }
1833 }
1834 {
1835 object x2 = arg2;
1836 object x3 = arg3;
1837 object x4 = arg4;
1838 object x5 = arg5;
1839 object S1 = arg6;
1840 Variable N = new Variable();
1841 foreach (bool l2 in YP.unify(arg1, new Functor1("number", N)))
1842 {
1843 foreach (bool l3 in cannot_follow(Atom.a("number"), new Functor1("number", N), S1))
1844 {
1845 yield return false;
1846 }
1847 }
1848 }
1849 {
1850 object Term = arg2;
1851 object Precedence = arg3;
1852 object Answer = arg4;
1853 object S = arg5;
1854 Variable S1 = new Variable();
1855 foreach (bool l2 in YP.unify(arg1, Atom.a("{")))
1856 {
1857 foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a("}"), S1)))
1858 {
1859 foreach (bool l4 in exprtl0_atom(Atom.a("{}"), Term, Precedence, Answer, S, S1))
1860 {
1861 yield return false;
1862 }
1863 yield break;
1864 }
1865 }
1866 }
1867 {
1868 object x1 = arg2;
1869 object x2 = arg3;
1870 object x3 = arg4;
1871 object x4 = arg5;
1872 object S1 = arg6;
1873 foreach (bool l2 in YP.unify(arg1, Atom.a("{")))
1874 {
1875 foreach (bool l3 in cannot_follow(Atom.a("brace"), Atom.a("{"), S1))
1876 {
1877 yield return false;
1878 }
1879 }
1880 }
1881 {
1882 object Term = arg2;
1883 object Precedence = arg3;
1884 object Answer = arg4;
1885 object S = arg5;
1886 Variable S1 = new Variable();
1887 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
1888 {
1889 foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a("]"), S1)))
1890 {
1891 foreach (bool l4 in exprtl0_atom(Atom.NIL, Term, Precedence, Answer, S, S1))
1892 {
1893 yield return false;
1894 }
1895 yield break;
1896 }
1897 }
1898 }
1899 {
1900 object x1 = arg2;
1901 object x2 = arg3;
1902 object x3 = arg4;
1903 object x4 = arg5;
1904 object S1 = arg6;
1905 foreach (bool l2 in YP.unify(arg1, Atom.a("[")))
1906 {
1907 foreach (bool l3 in cannot_follow(Atom.a("bracket"), Atom.a("["), S1))
1908 {
1909 yield return false;
1910 }
1911 }
1912 }
1913 {
1914 object x1 = arg2;
1915 object x2 = arg3;
1916 object x3 = arg4;
1917 object x4 = arg5;
1918 object S1 = arg6;
1919 foreach (bool l2 in YP.unify(arg1, Atom.a("(")))
1920 {
1921 foreach (bool l3 in cannot_follow(Atom.a("parenthesis"), Atom.a("("), S1))
1922 {
1923 yield return false;
1924 }
1925 }
1926 }
1927 {
1928 object x1 = arg2;
1929 object x2 = arg3;
1930 object x3 = arg4;
1931 object x4 = arg5;
1932 object S1 = arg6;
1933 foreach (bool l2 in YP.unify(arg1, Atom.a(" (")))
1934 {
1935 foreach (bool l3 in cannot_follow(Atom.a("parenthesis"), Atom.a("("), S1))
1936 {
1937 yield return false;
1938 }
1939 }
1940 }
1941 {
1942 object x4 = arg2;
1943 object x5 = arg3;
1944 object x6 = arg4;
1945 object x7 = arg5;
1946 object S1 = arg6;
1947 Variable A = new Variable();
1948 Variable B = new Variable();
1949 Variable P = new Variable();
1950 foreach (bool l2 in YP.unify(arg1, new Functor3("var", A, B, P)))
1951 {
1952 foreach (bool l3 in cannot_follow(Atom.a("variable"), new Functor3("var", A, B, P), S1))
1953 {
1954 yield return false;
1955 }
1956 }
1957 }
1958 {
1959 object Term = arg2;
1960 object Precedence = arg3;
1961 object Answer = arg4;
1962 object S = arg5;
1963 object S1 = arg6;
1964 Variable F = new Variable();
1965 Variable P = new Variable();
1966 foreach (bool l2 in YP.unify(arg1, new Functor2("atom", F, P)))
1967 {
1968 foreach (bool l3 in exprtl0_atom(new Functor2("/", F, P), Term, Precedence, Answer, S, S1))
1969 {
1970 yield return false;
1971 }
1972 }
1973 }
1974 }
1975
1976 public static IEnumerable<bool> exprtl0_atom(object arg1, object arg2, object arg3, object arg4, object arg5, object S1)
1977 {
1978 {
1979 object Term = arg2;
1980 object Precedence = arg3;
1981 object Answer = arg4;
1982 object S = arg5;
1983 Variable F = new Variable();
1984 Variable Pos = new Variable();
1985 Variable L1 = new Variable();
1986 Variable O1 = new Variable();
1987 Variable R1 = new Variable();
1988 Variable L2 = new Variable();
1989 Variable O2 = new Variable();
1990 foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos)))
1991 {
1992 foreach (bool l3 in ambigop(F, Precedence, L1, O1, R1, L2, O2))
1993 {
1994 foreach (bool l4 in prefix_is_atom(S1, Precedence))
1995 {
1996 foreach (bool l5 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
1997 {
1998 yield return false;
1999 }
2000 yield break;
2001 }
2002 foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S))
2003 {
2004 yield return false;
2005 }
2006 foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
2007 {
2008 yield return false;
2009 }
2010 yield break;
2011 }
2012 }
2013 }
2014 {
2015 object Term = arg2;
2016 object Precedence = arg3;
2017 object Answer = arg4;
2018 object S = arg5;
2019 Variable F = new Variable();
2020 Variable Pos = new Variable();
2021 Variable L1 = new Variable();
2022 Variable O1 = new Variable();
2023 Variable R1 = new Variable();
2024 foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos)))
2025 {
2026 foreach (bool l3 in infixop(F, L1, O1, R1))
2027 {
2028 foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S))
2029 {
2030 yield return false;
2031 }
2032 yield break;
2033 }
2034 }
2035 }
2036 {
2037 object Term = arg2;
2038 object Precedence = arg3;
2039 object Answer = arg4;
2040 object S = arg5;
2041 Variable F = new Variable();
2042 Variable Pos = new Variable();
2043 Variable L2 = new Variable();
2044 Variable O2 = new Variable();
2045 foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos)))
2046 {
2047 foreach (bool l3 in postfixop(F, L2, O2))
2048 {
2049 foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S))
2050 {
2051 yield return false;
2052 }
2053 yield break;
2054 }
2055 }
2056 }
2057 {
2058 object X = arg1;
2059 object x2 = arg2;
2060 object x3 = arg3;
2061 object x4 = arg4;
2062 object x5 = arg5;
2063 Variable x7 = new Variable();
2064 foreach (bool l2 in syntax_error(ListPair.make(new object[] { new Functor2("-", Atom.a("non"), Atom.a("operator")), X, Atom.a("follows"), Atom.a("expression") }), new ListPair(new Functor2("atom", X, x7), S1)))
2065 {
2066 yield return false;
2067 }
2068 yield break;
2069 }
2070 }
2071
2072 public static IEnumerable<bool> cannot_follow(object Type, object Token, object Tokens)
2073 {
2074 {
2075 foreach (bool l2 in syntax_error(ListPair.make(new object[] { Type, Atom.a("follows"), Atom.a("expression") }), new ListPair(Token, Tokens)))
2076 {
2077 yield return false;
2078 }
2079 }
2080 }
2081
2082 public static IEnumerable<bool> exprtl(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
2083 {
2084 {
2085 object x1 = arg2;
2086 object x3 = arg4;
2087 Variable Term = new Variable();
2088 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
2089 {
2090 foreach (bool l3 in YP.unify(arg3, Term))
2091 {
2092 foreach (bool l4 in YP.unify(arg5, Term))
2093 {
2094 foreach (bool l5 in YP.unify(arg6, Atom.NIL))
2095 {
2096 yield return false;
2097 }
2098 }
2099 }
2100 }
2101 }
2102 {
2103 object C = arg2;
2104 object Term = arg3;
2105 object Precedence = arg4;
2106 object Answer = arg5;
2107 object S = arg6;
2108 Variable Token = new Variable();
2109 Variable Tokens = new Variable();
2110 foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Tokens)))
2111 {
2112 foreach (bool l3 in exprtl_7(Token, C, Term, Precedence, Answer, S, Tokens))
2113 {
2114 yield return false;
2115 }
2116 }
2117 }
2118 }
2119
2120 public static IEnumerable<bool> exprtl_7(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7)
2121 {
2122 {
2123 object C = arg2;
2124 object Term = arg3;
2125 object Precedence = arg4;
2126 object Answer = arg5;
2127 object S = arg6;
2128 object S1 = arg7;
2129 Variable F = new Variable();
2130 Variable Pos = new Variable();
2131 Variable L = new Variable();
2132 Variable O = new Variable();
2133 Variable R = new Variable();
2134 Variable Other = new Variable();
2135 Variable S2 = new Variable();
2136 Variable Expr = new Variable();
2137 foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L, O, R })))
2138 {
2139 if (YP.greaterThanOrEqual(Precedence, O))
2140 {
2141 if (YP.lessThanOrEqual(C, L))
2142 {
2143 foreach (bool l5 in parse(S1, R, Other, S2))
2144 {
2145 foreach (bool l6 in YP.univ(Expr, ListPair.make(new object[] { F, Pos, Term, Other })))
2146 {
2147 foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S))
2148 {
2149 yield return false;
2150 }
2151 }
2152 }
2153 yield break;
2154 }
2155 }
2156 }
2157 }
2158 {
2159 object C = arg2;
2160 object Term = arg3;
2161 object Precedence = arg4;
2162 object Answer = arg5;
2163 object S = arg6;
2164 object S1 = arg7;
2165 Variable F = new Variable();
2166 Variable Pos = new Variable();
2167 Variable L = new Variable();
2168 Variable O = new Variable();
2169 Variable Expr = new Variable();
2170 Variable S2 = new Variable();
2171 foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L, O)))
2172 {
2173 if (YP.greaterThanOrEqual(Precedence, O))
2174 {
2175 if (YP.lessThanOrEqual(C, L))
2176 {
2177 foreach (bool l5 in YP.univ(Expr, ListPair.make(new object[] { F, Pos, Term })))
2178 {
2179 foreach (bool l6 in peepop(S1, S2))
2180 {
2181 foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S))
2182 {
2183 yield return false;
2184 }
2185 }
2186 }
2187 yield break;
2188 }
2189 }
2190 }
2191 }
2192 {
2193 object C = arg2;
2194 object Term = arg3;
2195 object Precedence = arg4;
2196 object Answer = arg5;
2197 object S = arg6;
2198 object S1 = arg7;
2199 Variable Next = new Variable();
2200 Variable S2 = new Variable();
2201 foreach (bool l2 in YP.unify(arg1, Atom.a(",")))
2202 {
2203 if (YP.greaterThanOrEqual(Precedence, 1000))
2204 {
2205 if (YP.lessThan(C, 1000))
2206 {
2207 foreach (bool l5 in parse(S1, 1000, Next, S2))
2208 {
2209 foreach (bool l6 in exprtl(S2, 1000, new Functor2(",", Term, Next), Precedence, Answer, S))
2210 {
2211 yield return false;
2212 }
2213 }
2214 yield break;
2215 }
2216 }
2217 }
2218 }
2219 {
2220 object C = arg2;
2221 object Term = arg3;
2222 object Precedence = arg4;
2223 object Answer = arg5;
2224 object S = arg6;
2225 object S1 = arg7;
2226 Variable Next = new Variable();
2227 Variable S2 = new Variable();
2228 foreach (bool l2 in YP.unify(arg1, Atom.a("|")))
2229 {
2230 if (YP.greaterThanOrEqual(Precedence, 1100))
2231 {
2232 if (YP.lessThan(C, 1100))
2233 {
2234 foreach (bool l5 in parse(S1, 1100, Next, S2))
2235 {
2236 foreach (bool l6 in exprtl(S2, 1100, new Functor2(";", Term, Next), Precedence, Answer, S))
2237 {
2238 yield return false;
2239 }
2240 }
2241 yield break;
2242 }
2243 }
2244 }
2245 }
2246 {
2247 object Token = arg1;
2248 object x2 = arg2;
2249 object x4 = arg4;
2250 object Tokens = arg7;
2251 Variable Term = new Variable();
2252 foreach (bool l2 in YP.unify(arg3, Term))
2253 {
2254 foreach (bool l3 in YP.unify(arg5, Term))
2255 {
2256 foreach (bool l4 in YP.unify(arg6, new ListPair(Token, Tokens)))
2257 {
2258 yield return false;
2259 }
2260 }
2261 }
2262 }
2263 }
2264
2265 public static IEnumerable<bool> syntax_error(object _Message, object _List)
2266 {
2267 {
2268 yield break;
2269 }
2270 foreach (bool l1 in YP.fail())
2271 {
2272 yield return false;
2273 }
2274 }
2275
2276 public static IEnumerable<bool> syntax_error(object _List)
2277 {
2278 {
2279 yield break;
2280 }
2281 foreach (bool l1 in YP.fail())
2282 {
2283 yield return false;
2284 }
2285 }
2286
2287 public static IEnumerable<bool> prefixop(object F, object O, object Q)
2288 {
2289 {
2290 foreach (bool l2 in YP.current_op(O, Atom.a("fx"), F))
2291 {
2292 foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1)))
2293 {
2294 yield return false;
2295 }
2296 goto cutIf1;
2297 }
2298 foreach (bool l2 in YP.current_op(O, Atom.a("fy"), F))
2299 {
2300 foreach (bool l3 in YP.unify(Q, O))
2301 {
2302 yield return false;
2303 }
2304 goto cutIf2;
2305 }
2306 cutIf2:
2307 cutIf1:
2308 { }
2309 }
2310 }
2311
2312 public static IEnumerable<bool> postfixop(object F, object P, object O)
2313 {
2314 {
2315 foreach (bool l2 in YP.current_op(O, Atom.a("xf"), F))
2316 {
2317 foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
2318 {
2319 yield return false;
2320 }
2321 goto cutIf1;
2322 }
2323 foreach (bool l2 in YP.current_op(O, Atom.a("yf"), F))
2324 {
2325 foreach (bool l3 in YP.unify(P, O))
2326 {
2327 yield return false;
2328 }
2329 goto cutIf2;
2330 }
2331 cutIf2:
2332 cutIf1:
2333 { }
2334 }
2335 }
2336
2337 public static IEnumerable<bool> infixop(object F, object P, object O, object Q)
2338 {
2339 {
2340 foreach (bool l2 in YP.current_op(O, Atom.a("xfy"), F))
2341 {
2342 foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
2343 {
2344 foreach (bool l4 in YP.unify(Q, O))
2345 {
2346 yield return false;
2347 }
2348 }
2349 goto cutIf1;
2350 }
2351 foreach (bool l2 in YP.current_op(O, Atom.a("xfx"), F))
2352 {
2353 foreach (bool l3 in YP.unify(P, YP.subtract(O, 1)))
2354 {
2355 foreach (bool l4 in YP.unify(Q, P))
2356 {
2357 yield return false;
2358 }
2359 }
2360 goto cutIf2;
2361 }
2362 foreach (bool l2 in YP.current_op(O, Atom.a("yfx"), F))
2363 {
2364 foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1)))
2365 {
2366 foreach (bool l4 in YP.unify(P, O))
2367 {
2368 yield return false;
2369 }
2370 }
2371 goto cutIf3;
2372 }
2373 cutIf3:
2374 cutIf2:
2375 cutIf1:
2376 { }
2377 }
2378 }
2379
2380 public static IEnumerable<bool> ambigop(object F, object Precedence, object L1, object O1, object R1, object L2, object O2)
2381 {
2382 {
2383 foreach (bool l2 in postfixop(F, L2, O2))
2384 {
2385 if (YP.lessThanOrEqual(O2, Precedence))
2386 {
2387 foreach (bool l4 in infixop(F, L1, O1, R1))
2388 {
2389 if (YP.lessThanOrEqual(O1, Precedence))
2390 {
2391 yield return false;
2392 }
2393 }
2394 }
2395 }
2396 }
2397 }
2398
2399 public static IEnumerable<bool> read_tokens1(object arg1)
2400 {
2401 {
2402 object TokenList = arg1;
2403 Variable C1 = new Variable();
2404 Variable _X = new Variable();
2405 Variable ListOfTokens = new Variable();
2406 foreach (bool l2 in YP.get_code(C1))
2407 {
2408 foreach (bool l3 in read_tokens(C1, _X, ListOfTokens))
2409 {
2410 foreach (bool l4 in YP.unify(TokenList, ListOfTokens))
2411 {
2412 yield return false;
2413 }
2414 yield break;
2415 }
2416 }
2417 }
2418 {
2419 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", Atom.a("end_of_file"), 0), Atom.NIL)))
2420 {
2421 yield return false;
2422 }
2423 }
2424 }
2425
2426 public static IEnumerable<bool> read_tokens2(object arg1, object arg2)
2427 {
2428 {
2429 object TokenList = arg1;
2430 object Dictionary = arg2;
2431 Variable C1 = new Variable();
2432 Variable Dict = new Variable();
2433 Variable ListOfTokens = new Variable();
2434 foreach (bool l2 in YP.get_code(C1))
2435 {
2436 foreach (bool l3 in read_tokens(C1, Dict, ListOfTokens))
2437 {
2438 foreach (bool l4 in terminate_list(Dict))
2439 {
2440 foreach (bool l5 in YP.unify(Dictionary, Dict))
2441 {
2442 foreach (bool l6 in YP.unify(TokenList, ListOfTokens))
2443 {
2444 yield return false;
2445 }
2446 }
2447 yield break;
2448 }
2449 }
2450 }
2451 }
2452 {
2453 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", Atom.a("end_of_file"), 0), Atom.NIL)))
2454 {
2455 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
2456 {
2457 yield return false;
2458 }
2459 }
2460 }
2461 }
2462
2463 public static IEnumerable<bool> terminate_list(object arg1)
2464 {
2465 {
2466 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
2467 {
2468 yield return false;
2469 }
2470 }
2471 {
2472 Variable x1 = new Variable();
2473 Variable Tail = new Variable();
2474 foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Tail)))
2475 {
2476 foreach (bool l3 in terminate_list(Tail))
2477 {
2478 yield return false;
2479 }
2480 }
2481 }
2482 }
2483
2484 public static IEnumerable<bool> read_special(object arg1, object Dict, object arg3)
2485 {
2486 {
2487 object Tokens = arg3;
2488 foreach (bool l2 in YP.unify(arg1, 95))
2489 {
2490 foreach (bool l3 in read_variable(95, Dict, Tokens))
2491 {
2492 yield return false;
2493 }
2494 }
2495 }
2496 {
2497 object Tokens = arg3;
2498 foreach (bool l2 in YP.unify(arg1, 247))
2499 {
2500 foreach (bool l3 in read_symbol(247, Dict, Tokens))
2501 {
2502 yield return false;
2503 }
2504 }
2505 }
2506 {
2507 object Tokens = arg3;
2508 foreach (bool l2 in YP.unify(arg1, 215))
2509 {
2510 foreach (bool l3 in read_symbol(215, Dict, Tokens))
2511 {
2512 yield return false;
2513 }
2514 }
2515 }
2516 {
2517 Variable StartPos = new Variable();
2518 Variable EndPos = new Variable();
2519 Variable Tokens = new Variable();
2520 Variable Ch = new Variable();
2521 Variable NextCh = new Variable();
2522 foreach (bool l2 in YP.unify(arg1, 37))
2523 {
2524 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("comment", StartPos, EndPos), Tokens)))
2525 {
2526 foreach (bool l4 in get_current_position(StartPos))
2527 {
2528 foreach (bool l5 in YP.repeat())
2529 {
2530 foreach (bool l6 in YP.get_code(Ch))
2531 {
2532 if (YP.lessThan(Ch, new ListPair(32, Atom.NIL)))
2533 {
2534 if (YP.notEqual(Ch, 9))
2535 {
2536 if (YP.termNotEqual(Ch, -1))
2537 {
2538 foreach (bool l10 in get_current_position(EndPos))
2539 {
2540 foreach (bool l11 in YP.get_code(NextCh))
2541 {
2542 foreach (bool l12 in read_tokens(NextCh, Dict, Tokens))
2543 {
2544 yield return false;
2545 }
2546 }
2547 }
2548 }
2549 yield break;
2550 }
2551 }
2552 }
2553 }
2554 }
2555 }
2556 }
2557 }
2558 {
2559 object T = arg3;
2560 Variable C2 = new Variable();
2561 Variable StartPos = new Variable();
2562 Variable EndPos = new Variable();
2563 Variable Tokens = new Variable();
2564 Variable StartPos1 = new Variable();
2565 Variable NextCh = new Variable();
2566 Variable Chars = new Variable();
2567 foreach (bool l2 in YP.unify(arg1, 47))
2568 {
2569 foreach (bool l3 in YP.get_code(C2))
2570 {
2571 if (YP.equal(C2, new ListPair(42, Atom.NIL)))
2572 {
2573 foreach (bool l5 in YP.unify(T, new ListPair(new Functor2("comment", StartPos, EndPos), Tokens)))
2574 {
2575 foreach (bool l6 in get_current_position(StartPos1))
2576 {
2577 foreach (bool l7 in YP.unify(StartPos, YP.subtract(StartPos1, 1)))
2578 {
2579 foreach (bool l8 in read_solidus(32, NextCh))
2580 {
2581 foreach (bool l9 in get_current_position(EndPos))
2582 {
2583 foreach (bool l10 in read_tokens(NextCh, Dict, Tokens))
2584 {
2585 yield return false;
2586 }
2587 }
2588 }
2589 }
2590 }
2591 }
2592 goto cutIf1;
2593 }
2594 foreach (bool l4 in YP.unify(T, Tokens))
2595 {
2596 foreach (bool l5 in rest_symbol(C2, Chars, NextCh))
2597 {
2598 foreach (bool l6 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(47, Chars)))
2599 {
2600 yield return false;
2601 }
2602 }
2603 }
2604 cutIf1:
2605 { }
2606 }
2607 }
2608 }
2609 {
2610 Variable Pos = new Variable();
2611 Variable Tokens = new Variable();
2612 Variable NextCh = new Variable();
2613 foreach (bool l2 in YP.unify(arg1, 33))
2614 {
2615 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom.a("!"), Pos), Tokens)))
2616 {
2617 foreach (bool l4 in get_current_position(Pos))
2618 {
2619 foreach (bool l5 in YP.get_code(NextCh))
2620 {
2621 foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
2622 {
2623 yield return false;
2624 }
2625 }
2626 }
2627 }
2628 }
2629 }
2630 {
2631 Variable Tokens = new Variable();
2632 Variable NextCh = new Variable();
2633 foreach (bool l2 in YP.unify(arg1, 40))
2634 {
2635 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(" ("), Tokens)))
2636 {
2637 foreach (bool l4 in YP.get_code(NextCh))
2638 {
2639 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2640 {
2641 yield return false;
2642 }
2643 }
2644 }
2645 }
2646 }
2647 {
2648 Variable Tokens = new Variable();
2649 Variable NextCh = new Variable();
2650 foreach (bool l2 in YP.unify(arg1, 41))
2651 {
2652 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(")"), Tokens)))
2653 {
2654 foreach (bool l4 in YP.get_code(NextCh))
2655 {
2656 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2657 {
2658 yield return false;
2659 }
2660 }
2661 }
2662 }
2663 }
2664 {
2665 Variable Tokens = new Variable();
2666 Variable NextCh = new Variable();
2667 foreach (bool l2 in YP.unify(arg1, 44))
2668 {
2669 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(","), Tokens)))
2670 {
2671 foreach (bool l4 in YP.get_code(NextCh))
2672 {
2673 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2674 {
2675 yield return false;
2676 }
2677 }
2678 }
2679 }
2680 }
2681 {
2682 Variable Pos = new Variable();
2683 Variable Tokens = new Variable();
2684 Variable NextCh = new Variable();
2685 foreach (bool l2 in YP.unify(arg1, 59))
2686 {
2687 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom.a(";"), Pos), Tokens)))
2688 {
2689 foreach (bool l4 in get_current_position(Pos))
2690 {
2691 foreach (bool l5 in YP.get_code(NextCh))
2692 {
2693 foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
2694 {
2695 yield return false;
2696 }
2697 }
2698 }
2699 }
2700 }
2701 }
2702 {
2703 Variable Pos = new Variable();
2704 Variable Tokens = new Variable();
2705 Variable NextCh = new Variable();
2706 foreach (bool l2 in YP.unify(arg1, 91))
2707 {
2708 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("["), Pos), Tokens)))
2709 {
2710 foreach (bool l4 in get_current_position(Pos))
2711 {
2712 foreach (bool l5 in YP.get_code(NextCh))
2713 {
2714 foreach (bool l6 in read_tokens(NextCh, Dict, Tokens))
2715 {
2716 yield return false;
2717 }
2718 }
2719 }
2720 }
2721 }
2722 }
2723 {
2724 Variable Pos = new Variable();
2725 Variable Tokens = new Variable();
2726 Variable NextCh = new Variable();
2727 foreach (bool l2 in YP.unify(arg1, 93))
2728 {
2729 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("]"), Pos), Tokens)))
2730 {
2731 foreach (bool l4 in get_current_position(Pos))
2732 {
2733 foreach (bool l5 in YP.get_code(NextCh))
2734 {
2735 foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens))
2736 {
2737 yield return false;
2738 }
2739 }
2740 }
2741 }
2742 }
2743 }
2744 {
2745 Variable Pos = new Variable();
2746 Variable Tokens = new Variable();
2747 Variable NextCh = new Variable();
2748 foreach (bool l2 in YP.unify(arg1, 123))
2749 {
2750 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("{"), Pos), Tokens)))
2751 {
2752 foreach (bool l4 in get_current_position(Pos))
2753 {
2754 foreach (bool l5 in YP.get_code(NextCh))
2755 {
2756 foreach (bool l6 in read_tokens(NextCh, Dict, Tokens))
2757 {
2758 yield return false;
2759 }
2760 }
2761 }
2762 }
2763 }
2764 }
2765 {
2766 Variable Tokens = new Variable();
2767 Variable NextCh = new Variable();
2768 foreach (bool l2 in YP.unify(arg1, 124))
2769 {
2770 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("|"), Tokens)))
2771 {
2772 foreach (bool l4 in YP.get_code(NextCh))
2773 {
2774 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2775 {
2776 yield return false;
2777 }
2778 }
2779 }
2780 }
2781 }
2782 {
2783 Variable Tokens = new Variable();
2784 Variable NextCh = new Variable();
2785 foreach (bool l2 in YP.unify(arg1, 125))
2786 {
2787 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("}"), Tokens)))
2788 {
2789 foreach (bool l4 in YP.get_code(NextCh))
2790 {
2791 foreach (bool l5 in read_after_atom(NextCh, Dict, Tokens))
2792 {
2793 yield return false;
2794 }
2795 }
2796 }
2797 }
2798 }
2799 {
2800 object Tokens = arg3;
2801 Variable NextCh = new Variable();
2802 foreach (bool l2 in YP.unify(arg1, 46))
2803 {
2804 foreach (bool l3 in YP.get_code(NextCh))
2805 {
2806 foreach (bool l4 in read_fullstop(NextCh, Dict, Tokens))
2807 {
2808 yield return false;
2809 }
2810 }
2811 }
2812 }
2813 {
2814 Variable Chars = new Variable();
2815 Variable Tokens = new Variable();
2816 Variable NextCh = new Variable();
2817 foreach (bool l2 in YP.unify(arg1, 34))
2818 {
2819 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("string", Chars), Tokens)))
2820 {
2821 foreach (bool l4 in read_string(Chars, 34, NextCh))
2822 {
2823 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
2824 {
2825 yield return false;
2826 }
2827 }
2828 }
2829 }
2830 }
2831 {
2832 object Tokens = arg3;
2833 Variable Chars = new Variable();
2834 Variable NextCh = new Variable();
2835 foreach (bool l2 in YP.unify(arg1, 39))
2836 {
2837 foreach (bool l3 in read_string(Chars, 39, NextCh))
2838 {
2839 foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, Chars))
2840 {
2841 yield return false;
2842 }
2843 }
2844 }
2845 }
2846 {
2847 object Tokens = arg3;
2848 foreach (bool l2 in YP.unify(arg1, 35))
2849 {
2850 foreach (bool l3 in read_symbol(35, Dict, Tokens))
2851 {
2852 yield return false;
2853 }
2854 }
2855 }
2856 {
2857 object Tokens = arg3;
2858 foreach (bool l2 in YP.unify(arg1, 36))
2859 {
2860 foreach (bool l3 in read_symbol(36, Dict, Tokens))
2861 {
2862 yield return false;
2863 }
2864 }
2865 }
2866 {
2867 object Tokens = arg3;
2868 foreach (bool l2 in YP.unify(arg1, 38))
2869 {
2870 foreach (bool l3 in read_symbol(38, Dict, Tokens))
2871 {
2872 yield return false;
2873 }
2874 }
2875 }
2876 {
2877 object Tokens = arg3;
2878 foreach (bool l2 in YP.unify(arg1, 42))
2879 {
2880 foreach (bool l3 in read_symbol(42, Dict, Tokens))
2881 {
2882 yield return false;
2883 }
2884 }
2885 }
2886 {
2887 object Tokens = arg3;
2888 foreach (bool l2 in YP.unify(arg1, 43))
2889 {
2890 foreach (bool l3 in read_symbol(43, Dict, Tokens))
2891 {
2892 yield return false;
2893 }
2894 }
2895 }
2896 {
2897 object Tokens = arg3;
2898 foreach (bool l2 in YP.unify(arg1, 45))
2899 {
2900 foreach (bool l3 in read_symbol(45, Dict, Tokens))
2901 {
2902 yield return false;
2903 }
2904 }
2905 }
2906 {
2907 object Tokens = arg3;
2908 foreach (bool l2 in YP.unify(arg1, 58))
2909 {
2910 foreach (bool l3 in read_symbol(58, Dict, Tokens))
2911 {
2912 yield return false;
2913 }
2914 }
2915 }
2916 {
2917 object Tokens = arg3;
2918 foreach (bool l2 in YP.unify(arg1, 60))
2919 {
2920 foreach (bool l3 in read_symbol(60, Dict, Tokens))
2921 {
2922 yield return false;
2923 }
2924 }
2925 }
2926 {
2927 object Tokens = arg3;
2928 foreach (bool l2 in YP.unify(arg1, 61))
2929 {
2930 foreach (bool l3 in read_symbol(61, Dict, Tokens))
2931 {
2932 yield return false;
2933 }
2934 }
2935 }
2936 {
2937 object Tokens = arg3;
2938 foreach (bool l2 in YP.unify(arg1, 62))
2939 {
2940 foreach (bool l3 in read_symbol(62, Dict, Tokens))
2941 {
2942 yield return false;
2943 }
2944 }
2945 }
2946 {
2947 object Tokens = arg3;
2948 foreach (bool l2 in YP.unify(arg1, 63))
2949 {
2950 foreach (bool l3 in read_symbol(63, Dict, Tokens))
2951 {
2952 yield return false;
2953 }
2954 }
2955 }
2956 {
2957 object Tokens = arg3;
2958 foreach (bool l2 in YP.unify(arg1, 64))
2959 {
2960 foreach (bool l3 in read_symbol(64, Dict, Tokens))
2961 {
2962 yield return false;
2963 }
2964 }
2965 }
2966 {
2967 object Tokens = arg3;
2968 foreach (bool l2 in YP.unify(arg1, 92))
2969 {
2970 foreach (bool l3 in read_symbol(92, Dict, Tokens))
2971 {
2972 yield return false;
2973 }
2974 }
2975 }
2976 {
2977 object Tokens = arg3;
2978 foreach (bool l2 in YP.unify(arg1, 94))
2979 {
2980 foreach (bool l3 in read_symbol(94, Dict, Tokens))
2981 {
2982 yield return false;
2983 }
2984 }
2985 }
2986 {
2987 object Tokens = arg3;
2988 foreach (bool l2 in YP.unify(arg1, 96))
2989 {
2990 foreach (bool l3 in read_symbol(96, Dict, Tokens))
2991 {
2992 yield return false;
2993 }
2994 }
2995 }
2996 {
2997 object Tokens = arg3;
2998 foreach (bool l2 in YP.unify(arg1, 126))
2999 {
3000 foreach (bool l3 in read_symbol(126, Dict, Tokens))
3001 {
3002 yield return false;
3003 }
3004 }
3005 }
3006 }
3007
3008 public static IEnumerable<bool> read_symbol(object C1, object Dict, object Tokens)
3009 {
3010 {
3011 Variable C2 = new Variable();
3012 Variable Chars = new Variable();
3013 Variable NextCh = new Variable();
3014 foreach (bool l2 in YP.get_code(C2))
3015 {
3016 foreach (bool l3 in rest_symbol(C2, Chars, NextCh))
3017 {
3018 foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(C1, Chars)))
3019 {
3020 yield return false;
3021 }
3022 }
3023 }
3024 }
3025 }
3026
3027 public static IEnumerable<bool> rest_symbol(object arg1, object arg2, object arg3)
3028 {
3029 {
3030 object C2 = arg1;
3031 object LastCh = arg3;
3032 Variable Chars = new Variable();
3033 Variable NextCh = new Variable();
3034 foreach (bool l2 in YP.unify(arg2, new ListPair(C2, Chars)))
3035 {
3036 if (YP.greaterThan(C2, 160))
3037 {
3038 if (YP.lessThan(C2, 192))
3039 {
3040 if (YP.notEqual(C2, 186))
3041 {
3042 if (YP.notEqual(C2, 170))
3043 {
3044 foreach (bool l7 in YP.get_code(NextCh))
3045 {
3046 foreach (bool l8 in rest_symbol(NextCh, Chars, LastCh))
3047 {
3048 yield return false;
3049 }
3050 }
3051 yield break;
3052 }
3053 }
3054 }
3055 goto cutIf1;
3056 }
3057 foreach (bool l3 in symbol_char(C2))
3058 {
3059 foreach (bool l4 in YP.get_code(NextCh))
3060 {
3061 foreach (bool l5 in rest_symbol(NextCh, Chars, LastCh))
3062 {
3063 yield return false;
3064 }
3065 }
3066 yield break;
3067 }
3068 cutIf1:
3069 { }
3070 }
3071 }
3072 {
3073 Variable C2 = new Variable();
3074 foreach (bool l2 in YP.unify(arg1, C2))
3075 {
3076 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
3077 {
3078 foreach (bool l4 in YP.unify(arg3, C2))
3079 {
3080 yield return false;
3081 }
3082 }
3083 }
3084 }
3085 }
3086
3087 public static IEnumerable<bool> symbol_char(object arg1)
3088 {
3089 {
3090 foreach (bool l2 in YP.unify(arg1, 35))
3091 {
3092 yield return false;
3093 }
3094 }
3095 {
3096 foreach (bool l2 in YP.unify(arg1, 36))
3097 {
3098 yield return false;
3099 }
3100 }
3101 {
3102 foreach (bool l2 in YP.unify(arg1, 38))
3103 {
3104 yield return false;
3105 }
3106 }
3107 {
3108 foreach (bool l2 in YP.unify(arg1, 42))
3109 {
3110 yield return false;
3111 }
3112 }
3113 {
3114 foreach (bool l2 in YP.unify(arg1, 43))
3115 {
3116 yield return false;
3117 }
3118 }
3119 {
3120 foreach (bool l2 in YP.unify(arg1, 45))
3121 {
3122 yield return false;
3123 }
3124 }
3125 {
3126 foreach (bool l2 in YP.unify(arg1, 46))
3127 {
3128 yield return false;
3129 }
3130 }
3131 {
3132 foreach (bool l2 in YP.unify(arg1, 47))
3133 {
3134 yield return false;
3135 }
3136 }
3137 {
3138 foreach (bool l2 in YP.unify(arg1, 58))
3139 {
3140 yield return false;
3141 }
3142 }
3143 {
3144 foreach (bool l2 in YP.unify(arg1, 60))
3145 {
3146 yield return false;
3147 }
3148 }
3149 {
3150 foreach (bool l2 in YP.unify(arg1, 61))
3151 {
3152 yield return false;
3153 }
3154 }
3155 {
3156 foreach (bool l2 in YP.unify(arg1, 62))
3157 {
3158 yield return false;
3159 }
3160 }
3161 {
3162 foreach (bool l2 in YP.unify(arg1, 63))
3163 {
3164 yield return false;
3165 }
3166 }
3167 {
3168 foreach (bool l2 in YP.unify(arg1, 64))
3169 {
3170 yield return false;
3171 }
3172 }
3173 {
3174 foreach (bool l2 in YP.unify(arg1, 92))
3175 {
3176 yield return false;
3177 }
3178 }
3179 {
3180 foreach (bool l2 in YP.unify(arg1, 94))
3181 {
3182 yield return false;
3183 }
3184 }
3185 {
3186 foreach (bool l2 in YP.unify(arg1, 96))
3187 {
3188 yield return false;
3189 }
3190 }
3191 {
3192 foreach (bool l2 in YP.unify(arg1, 126))
3193 {
3194 yield return false;
3195 }
3196 }
3197 }
3198
3199 public static IEnumerable<bool> get_current_position(object Pos)
3200 {
3201 {
3202 foreach (bool l2 in YP.unify(Pos, 0))
3203 {
3204 yield return false;
3205 }
3206 }
3207 }
3208
3209 public static IEnumerable<bool> read_after_atom4(object Ch, object Dict, object arg3, object Chars)
3210 {
3211 {
3212 Variable Atom_1 = new Variable();
3213 Variable Pos = new Variable();
3214 Variable Tokens = new Variable();
3215 foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom_1, Pos), Tokens)))
3216 {
3217 foreach (bool l3 in YP.unify(Pos, 0))
3218 {
3219 foreach (bool l4 in YP.atom_codes(Atom_1, Chars))
3220 {
3221 foreach (bool l5 in read_after_atom(Ch, Dict, Tokens))
3222 {
3223 yield return false;
3224 }
3225 }
3226 }
3227 }
3228 }
3229 }
3230
3231 public static IEnumerable<bool> read_after_atom(object arg1, object Dict, object arg3)
3232 {
3233 {
3234 Variable Tokens = new Variable();
3235 Variable NextCh = new Variable();
3236 foreach (bool l2 in YP.unify(arg1, 40))
3237 {
3238 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("("), Tokens)))
3239 {
3240 foreach (bool l4 in YP.get_code(NextCh))
3241 {
3242 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
3243 {
3244 yield return false;
3245 }
3246 }
3247 yield break;
3248 }
3249 }
3250 }
3251 {
3252 object Ch = arg1;
3253 object Tokens = arg3;
3254 foreach (bool l2 in read_tokens(Ch, Dict, Tokens))
3255 {
3256 yield return false;
3257 }
3258 }
3259 }
3260
3261 public static IEnumerable<bool> read_string(object Chars, object Quote, object NextCh)
3262 {
3263 {
3264 Variable Ch = new Variable();
3265 Variable Char = new Variable();
3266 Variable Next = new Variable();
3267 foreach (bool l2 in YP.get_code(Ch))
3268 {
3269 foreach (bool l3 in read_char(Ch, Quote, Char, Next))
3270 {
3271 foreach (bool l4 in rest_string5(Char, Next, Chars, Quote, NextCh))
3272 {
3273 yield return false;
3274 }
3275 }
3276 }
3277 }
3278 }
3279
3280 public static IEnumerable<bool> rest_string5(object arg1, object arg2, object arg3, object arg4, object arg5)
3281 {
3282 {
3283 object _X = arg4;
3284 Variable NextCh = new Variable();
3285 foreach (bool l2 in YP.unify(arg1, -1))
3286 {
3287 foreach (bool l3 in YP.unify(arg2, NextCh))
3288 {
3289 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
3290 {
3291 foreach (bool l5 in YP.unify(arg5, NextCh))
3292 {
3293 yield return true;
3294 yield break;
3295 }
3296 }
3297 }
3298 }
3299 }
3300 {
3301 object Char = arg1;
3302 object Next = arg2;
3303 object Quote = arg4;
3304 object NextCh = arg5;
3305 Variable Chars = new Variable();
3306 Variable Char2 = new Variable();
3307 Variable Next2 = new Variable();
3308 foreach (bool l2 in YP.unify(arg3, new ListPair(Char, Chars)))
3309 {
3310 foreach (bool l3 in read_char(Next, Quote, Char2, Next2))
3311 {
3312 foreach (bool l4 in rest_string5(Char2, Next2, Chars, Quote, NextCh))
3313 {
3314 yield return false;
3315 }
3316 }
3317 }
3318 }
3319 }
3320
3321 public static IEnumerable<bool> escape_char(object arg1, object arg2)
3322 {
3323 {
3324 foreach (bool l2 in YP.unify(arg1, 110))
3325 {
3326 foreach (bool l3 in YP.unify(arg2, 10))
3327 {
3328 yield return false;
3329 }
3330 }
3331 }
3332 {
3333 foreach (bool l2 in YP.unify(arg1, 78))
3334 {
3335 foreach (bool l3 in YP.unify(arg2, 10))
3336 {
3337 yield return false;
3338 }
3339 }
3340 }
3341 {
3342 foreach (bool l2 in YP.unify(arg1, 116))
3343 {
3344 foreach (bool l3 in YP.unify(arg2, 9))
3345 {
3346 yield return false;
3347 }
3348 }
3349 }
3350 {
3351 foreach (bool l2 in YP.unify(arg1, 84))
3352 {
3353 foreach (bool l3 in YP.unify(arg2, 9))
3354 {
3355 yield return false;
3356 }
3357 }
3358 }
3359 {
3360 foreach (bool l2 in YP.unify(arg1, 114))
3361 {
3362 foreach (bool l3 in YP.unify(arg2, 13))
3363 {
3364 yield return false;
3365 }
3366 }
3367 }
3368 {
3369 foreach (bool l2 in YP.unify(arg1, 82))
3370 {
3371 foreach (bool l3 in YP.unify(arg2, 13))
3372 {
3373 yield return false;
3374 }
3375 }
3376 }
3377 {
3378 foreach (bool l2 in YP.unify(arg1, 118))
3379 {
3380 foreach (bool l3 in YP.unify(arg2, 11))
3381 {
3382 yield return false;
3383 }
3384 }
3385 }
3386 {
3387 foreach (bool l2 in YP.unify(arg1, 86))
3388 {
3389 foreach (bool l3 in YP.unify(arg2, 11))
3390 {
3391 yield return false;
3392 }
3393 }
3394 }
3395 {
3396 foreach (bool l2 in YP.unify(arg1, 98))
3397 {
3398 foreach (bool l3 in YP.unify(arg2, 8))
3399 {
3400 yield return false;
3401 }
3402 }
3403 }
3404 {
3405 foreach (bool l2 in YP.unify(arg1, 66))
3406 {
3407 foreach (bool l3 in YP.unify(arg2, 8))
3408 {
3409 yield return false;
3410 }
3411 }
3412 }
3413 {
3414 foreach (bool l2 in YP.unify(arg1, 102))
3415 {
3416 foreach (bool l3 in YP.unify(arg2, 12))
3417 {
3418 yield return false;
3419 }
3420 }
3421 }
3422 {
3423 foreach (bool l2 in YP.unify(arg1, 70))
3424 {
3425 foreach (bool l3 in YP.unify(arg2, 12))
3426 {
3427 yield return false;
3428 }
3429 }
3430 }
3431 {
3432 foreach (bool l2 in YP.unify(arg1, 101))
3433 {
3434 foreach (bool l3 in YP.unify(arg2, 27))
3435 {
3436 yield return false;
3437 }
3438 }
3439 }
3440 {
3441 foreach (bool l2 in YP.unify(arg1, 69))
3442 {
3443 foreach (bool l3 in YP.unify(arg2, 27))
3444 {
3445 yield return false;
3446 }
3447 }
3448 }
3449 {
3450 foreach (bool l2 in YP.unify(arg1, 100))
3451 {
3452 foreach (bool l3 in YP.unify(arg2, 127))
3453 {
3454 yield return false;
3455 }
3456 }
3457 }
3458 {
3459 foreach (bool l2 in YP.unify(arg1, 68))
3460 {
3461 foreach (bool l3 in YP.unify(arg2, 127))
3462 {
3463 yield return false;
3464 }
3465 }
3466 }
3467 {
3468 foreach (bool l2 in YP.unify(arg1, 115))
3469 {
3470 foreach (bool l3 in YP.unify(arg2, 32))
3471 {
3472 yield return false;
3473 }
3474 }
3475 }
3476 {
3477 foreach (bool l2 in YP.unify(arg1, 83))
3478 {
3479 foreach (bool l3 in YP.unify(arg2, 32))
3480 {
3481 yield return false;
3482 }
3483 }
3484 }
3485 {
3486 foreach (bool l2 in YP.unify(arg1, 122))
3487 {
3488 foreach (bool l3 in YP.unify(arg2, -1))
3489 {
3490 yield return false;
3491 }
3492 }
3493 }
3494 {
3495 foreach (bool l2 in YP.unify(arg1, 90))
3496 {
3497 foreach (bool l3 in YP.unify(arg2, -1))
3498 {
3499 yield return false;
3500 }
3501 }
3502 }
3503 }
3504
3505 public static IEnumerable<bool> read_variable(object C1, object Dict, object arg3)
3506 {
3507 {
3508 Variable Var = new Variable();
3509 Variable Name = new Variable();
3510 Variable StartPos = new Variable();
3511 Variable Tokens = new Variable();
3512 Variable Chars = new Variable();
3513 Variable NextCh = new Variable();
3514 foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor3("var", Var, Name, StartPos), Tokens)))
3515 {
3516 foreach (bool l3 in get_current_position(StartPos))
3517 {
3518 foreach (bool l4 in read_name(C1, Chars, NextCh))
3519 {
3520 foreach (bool l5 in YP.atom_codes(Name, Chars))
3521 {
3522 if (YP.termEqual(Name, Atom.a("_")))
3523 {
3524 foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens))
3525 {
3526 yield return false;
3527 }
3528 goto cutIf1;
3529 }
3530 foreach (bool l6 in read_lookup(Dict, Name, Var))
3531 {
3532 foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens))
3533 {
3534 yield return false;
3535 }
3536 }
3537 cutIf1:
3538 { }
3539 }
3540 }
3541 }
3542 }
3543 }
3544 }
3545
3546 public static IEnumerable<bool> read_lookup(object arg1, object Name, object Var)
3547 {
3548 {
3549 Variable N = new Variable();
3550 Variable V = new Variable();
3551 Variable L = new Variable();
3552 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", N, V), L)))
3553 {
3554 foreach (bool l3 in YP.unify(N, Name))
3555 {
3556 foreach (bool l4 in YP.unify(V, Var))
3557 {
3558 yield return false;
3559 }
3560 goto cutIf1;
3561 }
3562 foreach (bool l3 in read_lookup(L, Name, Var))
3563 {
3564 yield return false;
3565 }
3566 cutIf1:
3567 { }
3568 }
3569 }
3570 }
3571
3572 public static IEnumerable<bool> read_solidus(object Ch, object LastCh)
3573 {
3574 {
3575 Variable NextCh = new Variable();
3576 if (YP.equal(Ch, 42))
3577 {
3578 foreach (bool l3 in YP.get_code(NextCh))
3579 {
3580 if (YP.equal(NextCh, 47))
3581 {
3582 foreach (bool l5 in YP.get_code(LastCh))
3583 {
3584 yield return false;
3585 }
3586 goto cutIf2;
3587 }
3588 foreach (bool l4 in read_solidus(NextCh, LastCh))
3589 {
3590 yield return false;
3591 }
3592 cutIf2:
3593 { }
3594 }
3595 goto cutIf1;
3596 }
3597 if (YP.notEqual(Ch, -1))
3598 {
3599 foreach (bool l3 in YP.get_code(NextCh))
3600 {
3601 foreach (bool l4 in read_solidus(NextCh, LastCh))
3602 {
3603 yield return false;
3604 }
3605 }
3606 goto cutIf3;
3607 }
3608 foreach (bool l2 in YP.unify(LastCh, Ch))
3609 {
3610 foreach (bool l3 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in /*comment~n"), Atom.NIL))
3611 {
3612 yield return false;
3613 }
3614 }
3615 cutIf3:
3616 cutIf1:
3617 { }
3618 }
3619 }
3620
3621 public static IEnumerable<bool> read_identifier(object C1, object Dict, object Tokens)
3622 {
3623 {
3624 Variable Chars = new Variable();
3625 Variable NextCh = new Variable();
3626 foreach (bool l2 in read_name(C1, Chars, NextCh))
3627 {
3628 foreach (bool l3 in read_after_atom4(NextCh, Dict, Tokens, Chars))
3629 {
3630 yield return false;
3631 }
3632 }
3633 }
3634 }
3635
3636 public static IEnumerable<bool> read_name(object C1, object arg2, object LastCh)
3637 {
3638 {
3639 Variable Chars = new Variable();
3640 Variable C2 = new Variable();
3641 foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
3642 {
3643 foreach (bool l3 in YP.get_code(C2))
3644 {
3645 if (YP.greaterThanOrEqual(C2, new ListPair(97, Atom.NIL)))
3646 {
3647 if (YP.lessThanOrEqual(C2, new ListPair(122, Atom.NIL)))
3648 {
3649 foreach (bool l6 in read_name(C2, Chars, LastCh))
3650 {
3651 yield return false;
3652 }
3653 goto cutIf2;
3654 }
3655 if (YP.lessThan(C2, 192))
3656 {
3657 if (YP.notEqual(YP.bitwiseOr(C2, 16), 186))
3658 {
3659 foreach (bool l7 in YP.unify(Chars, Atom.NIL))
3660 {
3661 foreach (bool l8 in YP.unify(LastCh, C2))
3662 {
3663 yield return false;
3664 }
3665 }
3666 goto cutIf3;
3667 }
3668 }
3669 if (YP.equal(YP.bitwiseOr(C2, 32), 247))
3670 {
3671 foreach (bool l6 in YP.unify(Chars, Atom.NIL))
3672 {
3673 foreach (bool l7 in YP.unify(LastCh, C2))
3674 {
3675 yield return false;
3676 }
3677 }
3678 goto cutIf4;
3679 }
3680 foreach (bool l5 in read_name(C2, Chars, LastCh))
3681 {
3682 yield return false;
3683 }
3684 cutIf4:
3685 cutIf3:
3686 cutIf2:
3687 goto cutIf1;
3688 }
3689 if (YP.greaterThanOrEqual(C2, new ListPair(65, Atom.NIL)))
3690 {
3691 if (YP.greaterThan(C2, new ListPair(90, Atom.NIL)))
3692 {
3693 if (YP.notEqual(C2, new ListPair(95, Atom.NIL)))
3694 {
3695 foreach (bool l7 in YP.unify(Chars, Atom.NIL))
3696 {
3697 foreach (bool l8 in YP.unify(LastCh, C2))
3698 {
3699 yield return false;
3700 }
3701 }
3702 goto cutIf6;
3703 }
3704 }
3705 foreach (bool l5 in read_name(C2, Chars, LastCh))
3706 {
3707 yield return false;
3708 }
3709 cutIf6:
3710 goto cutIf5;
3711 }
3712 if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
3713 {
3714 if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
3715 {
3716 foreach (bool l6 in read_name(C2, Chars, LastCh))
3717 {
3718 yield return false;
3719 }
3720 goto cutIf7;
3721 }
3722 }
3723 foreach (bool l4 in YP.unify(Chars, Atom.NIL))
3724 {
3725 foreach (bool l5 in YP.unify(LastCh, C2))
3726 {
3727 yield return false;
3728 }
3729 }
3730 cutIf7:
3731 cutIf5:
3732 cutIf1:
3733 { }
3734 }
3735 }
3736 }
3737 }
3738
3739 public static IEnumerable<bool> read_fullstop(object Ch, object Dict, object Tokens)
3740 {
3741 {
3742 Variable Number = new Variable();
3743 Variable Tokens1 = new Variable();
3744 Variable Chars = new Variable();
3745 Variable NextCh = new Variable();
3746 if (YP.lessThanOrEqual(Ch, new ListPair(57, Atom.NIL)))
3747 {
3748 if (YP.greaterThanOrEqual(Ch, new ListPair(48, Atom.NIL)))
3749 {
3750 foreach (bool l4 in YP.unify(Tokens, new ListPair(new Functor1("number", Number), Tokens1)))
3751 {
3752 foreach (bool l5 in read_float(Number, Dict, Tokens1, new ListPair(48, Atom.NIL), Ch))
3753 {
3754 yield return false;
3755 }
3756 }
3757 goto cutIf1;
3758 }
3759 }
3760 if (YP.greaterThan(Ch, new ListPair(32, Atom.NIL)))
3761 {
3762 foreach (bool l3 in rest_symbol(Ch, Chars, NextCh))
3763 {
3764 foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(46, Chars)))
3765 {
3766 yield return false;
3767 }
3768 }
3769 goto cutIf2;
3770 }
3771 if (YP.greaterThanOrEqual(Ch, 0))
3772 {
3773 foreach (bool l3 in YP.unify(Tokens, Atom.NIL))
3774 {
3775 yield return false;
3776 }
3777 goto cutIf3;
3778 }
3779 foreach (bool l2 in formatError(Atom.a("user_error"), Atom.a("~N** end of file just after full stop~n"), Atom.NIL))
3780 {
3781 }
3782 cutIf3:
3783 cutIf2:
3784 cutIf1:
3785 { }
3786 }
3787 }
3788
3789 public static IEnumerable<bool> read_float(object Number, object Dict, object Tokens, object Digits, object Digit)
3790 {
3791 {
3792 Variable Chars = new Variable();
3793 Variable Rest = new Variable();
3794 Variable NextCh = new Variable();
3795 foreach (bool l2 in prepend(Digits, Chars, Rest))
3796 {
3797 foreach (bool l3 in read_float4(Digit, Rest, NextCh, Chars))
3798 {
3799 foreach (bool l4 in YP.number_codes(Number, Chars))
3800 {
3801 foreach (bool l5 in read_tokens(NextCh, Dict, Tokens))
3802 {
3803 yield return false;
3804 }
3805 }
3806 }
3807 }
3808 }
3809 }
3810
3811 public static IEnumerable<bool> prepend(object arg1, object arg2, object arg3)
3812 {
3813 {
3814 object X = arg3;
3815 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
3816 {
3817 foreach (bool l3 in YP.unify(arg2, new ListPair(46, X)))
3818 {
3819 yield return false;
3820 }
3821 }
3822 }
3823 {
3824 object Y = arg3;
3825 Variable C = new Variable();
3826 Variable Cs = new Variable();
3827 Variable X = new Variable();
3828 foreach (bool l2 in YP.unify(arg1, new ListPair(C, Cs)))
3829 {
3830 foreach (bool l3 in YP.unify(arg2, new ListPair(C, X)))
3831 {
3832 foreach (bool l4 in prepend(Cs, X, Y))
3833 {
3834 yield return false;
3835 }
3836 }
3837 }
3838 }
3839 }
3840
3841 public static IEnumerable<bool> read_float4(object C1, object arg2, object NextCh, object Total)
3842 {
3843 {
3844 Variable Chars = new Variable();
3845 Variable C2 = new Variable();
3846 Variable C3 = new Variable();
3847 Variable C4 = new Variable();
3848 Variable More = new Variable();
3849 foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
3850 {
3851 foreach (bool l3 in YP.get_code(C2))
3852 {
3853 if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
3854 {
3855 if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
3856 {
3857 foreach (bool l6 in read_float4(C2, Chars, NextCh, Total))
3858 {
3859 yield return false;
3860 }
3861 goto cutIf1;
3862 }
3863 }
3864 if (YP.equal(YP.bitwiseOr(C2, 32), new ListPair(101, Atom.NIL)))
3865 {
3866 foreach (bool l5 in YP.get_code(C3))
3867 {
3868 if (YP.equal(C3, new ListPair(45, Atom.NIL)))
3869 {
3870 foreach (bool l7 in YP.get_code(C4))
3871 {
3872 foreach (bool l8 in YP.unify(Chars, new ListPair(C2, new ListPair(45, More))))
3873 {
3874 if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
3875 {
3876 if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
3877 {
3878 foreach (bool l11 in read_exponent(C4, More, NextCh))
3879 {
3880 yield return false;
3881 }
3882 goto cutIf4;
3883 }
3884 }
3885 foreach (bool l9 in YP.unify(More, Atom.NIL))
3886 {
3887 foreach (bool l10 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
3888 {
3889 }
3890 }
3891 foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL)))
3892 {
3893 foreach (bool l10 in YP.unify(NextCh, C4))
3894 {
3895 yield return false;
3896 }
3897 }
3898 cutIf4:
3899 { }
3900 }
3901 }
3902 goto cutIf3;
3903 }
3904 if (YP.equal(C3, new ListPair(43, Atom.NIL)))
3905 {
3906 foreach (bool l7 in YP.get_code(C4))
3907 {
3908 foreach (bool l8 in YP.unify(Chars, new ListPair(C2, More)))
3909 {
3910 if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
3911 {
3912 if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
3913 {
3914 foreach (bool l11 in read_exponent(C4, More, NextCh))
3915 {
3916 yield return false;
3917 }
3918 goto cutIf6;
3919 }
3920 }
3921 foreach (bool l9 in YP.unify(More, Atom.NIL))
3922 {
3923 foreach (bool l10 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
3924 {
3925 }
3926 }
3927 foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL)))
3928 {
3929 foreach (bool l10 in YP.unify(NextCh, C4))
3930 {
3931 yield return false;
3932 }
3933 }
3934 cutIf6:
3935 { }
3936 }
3937 }
3938 goto cutIf5;
3939 }
3940 foreach (bool l6 in YP.unify(C4, C3))
3941 {
3942 foreach (bool l7 in YP.unify(Chars, new ListPair(C2, More)))
3943 {
3944 if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL)))
3945 {
3946 if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL)))
3947 {
3948 foreach (bool l10 in read_exponent(C4, More, NextCh))
3949 {
3950 yield return false;
3951 }
3952 goto cutIf7;
3953 }
3954 }
3955 foreach (bool l8 in YP.unify(More, Atom.NIL))
3956 {
3957 foreach (bool l9 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL)))
3958 {
3959 }
3960 }
3961 foreach (bool l8 in YP.unify(More, new ListPair(48, Atom.NIL)))
3962 {
3963 foreach (bool l9 in YP.unify(NextCh, C4))
3964 {
3965 yield return false;
3966 }
3967 }
3968 cutIf7:
3969 { }
3970 }
3971 }
3972 cutIf5:
3973 cutIf3:
3974 { }
3975 }
3976 goto cutIf2;
3977 }
3978 foreach (bool l4 in YP.unify(Chars, Atom.NIL))
3979 {
3980 foreach (bool l5 in YP.unify(NextCh, C2))
3981 {
3982 yield return false;
3983 }
3984 }
3985 cutIf2:
3986 cutIf1:
3987 { }
3988 }
3989 }
3990 }
3991 }
3992
3993 public static IEnumerable<bool> read_exponent(object C1, object arg2, object NextCh)
3994 {
3995 {
3996 Variable Chars = new Variable();
3997 Variable C2 = new Variable();
3998 foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars)))
3999 {
4000 foreach (bool l3 in YP.get_code(C2))
4001 {
4002 if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
4003 {
4004 if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL)))
4005 {
4006 foreach (bool l6 in read_exponent(C2, Chars, NextCh))
4007 {
4008 yield return false;
4009 }
4010 goto cutIf1;
4011 }
4012 }
4013 foreach (bool l4 in YP.unify(Chars, Atom.NIL))
4014 {
4015 foreach (bool l5 in YP.unify(NextCh, C2))
4016 {
4017 yield return false;
4018 }
4019 }
4020 cutIf1:
4021 { }
4022 }
4023 }
4024 }
4025 }
4026
4027 public static IEnumerable<bool> read_number(object C1, object Dict, object arg3)
4028 {
4029 {
4030 Variable Number = new Variable();
4031 Variable Tokens = new Variable();
4032 Variable C2 = new Variable();
4033 Variable N = new Variable();
4034 Variable C = new Variable();
4035 Variable C3 = new Variable();
4036 Variable Digits = new Variable();
4037 foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor1("number", Number), Tokens)))
4038 {
4039 foreach (bool l3 in read_number4(C1, C2, 0, N))
4040 {
4041 if (YP.equal(C2, 39))
4042 {
4043 if (YP.greaterThanOrEqual(N, 2))
4044 {
4045 if (YP.lessThanOrEqual(N, 36))
4046 {
4047 foreach (bool l7 in read_based(N, 0, Number, C))
4048 {
4049 foreach (bool l8 in read_tokens(C, Dict, Tokens))
4050 {
4051 yield return false;
4052 }
4053 }
4054 goto cutIf2;
4055 }
4056 }
4057 if (YP.equal(N, 0))
4058 {
4059 foreach (bool l6 in YP.get_code(C3))
4060 {
4061 foreach (bool l7 in read_char(C3, -1, Number, C))
4062 {
4063 foreach (bool l8 in read_tokens(C, Dict, Tokens))
4064 {
4065 yield return false;
4066 }
4067 }
4068 }
4069 goto cutIf3;
4070 }
4071 foreach (bool l5 in formatError(Atom.a("user_error"), Atom.a("~N** ~d' read as ~d '~n"), new ListPair(N, new ListPair(N, Atom.NIL))))
4072 {
4073 foreach (bool l6 in YP.unify(Number, N))
4074 {
4075 foreach (bool l7 in YP.unify(C, C2))
4076 {
4077 foreach (bool l8 in read_tokens(C, Dict, Tokens))
4078 {
4079 yield return false;
4080 }
4081 }
4082 }
4083 }
4084 cutIf3:
4085 cutIf2:
4086 goto cutIf1;
4087 }
4088 if (YP.equal(C2, 46))
4089 {
4090 foreach (bool l5 in YP.get_code(C3))
4091 {
4092 if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL)))
4093 {
4094 if (YP.lessThanOrEqual(C3, new ListPair(57, Atom.NIL)))
4095 {
4096 foreach (bool l8 in YP.number_codes(N, Digits))
4097 {
4098 foreach (bool l9 in read_float(Number, Dict, Tokens, Digits, C3))
4099 {
4100 yield return false;
4101 }
4102 }
4103 goto cutIf5;
4104 }
4105 }
4106 foreach (bool l6 in YP.unify(Number, N))
4107 {
4108 foreach (bool l7 in read_fullstop(C3, Dict, Tokens))
4109 {
4110 yield return false;
4111 }
4112 }
4113 cutIf5:
4114 { }
4115 }
4116 goto cutIf4;
4117 }
4118 foreach (bool l4 in YP.unify(Number, N))
4119 {
4120 foreach (bool l5 in read_tokens(C2, Dict, Tokens))
4121 {
4122 yield return false;
4123 }
4124 }
4125 cutIf4:
4126 cutIf1:
4127 { }
4128 }
4129 }
4130 }
4131 }
4132
4133 public static IEnumerable<bool> read_number4(object C0, object C, object N0, object N)
4134 {
4135 {
4136 Variable N1 = new Variable();
4137 Variable C1 = new Variable();
4138 if (YP.greaterThanOrEqual(C0, new ListPair(48, Atom.NIL)))
4139 {
4140 if (YP.lessThanOrEqual(C0, new ListPair(57, Atom.NIL)))
4141 {
4142 foreach (bool l4 in YP.unify(N1, YP.add(YP.subtract(YP.multiply(N0, 10), new ListPair(48, Atom.NIL)), C0)))
4143 {
4144 foreach (bool l5 in YP.get_code(C1))
4145 {
4146 foreach (bool l6 in read_number4(C1, C, N1, N))
4147 {
4148 yield return false;
4149 }
4150 }
4151 }
4152 goto cutIf1;
4153 }
4154 }
4155 if (YP.equal(C0, 95))
4156 {
4157 foreach (bool l3 in YP.get_code(C1))
4158 {
4159 foreach (bool l4 in read_number4(C1, C, N0, N))
4160 {
4161 yield return false;
4162 }
4163 }
4164 goto cutIf2;
4165 }
4166 foreach (bool l2 in YP.unify(C, C0))
4167 {
4168 foreach (bool l3 in YP.unify(N, N0))
4169 {
4170 yield return false;
4171 }
4172 }
4173 cutIf2:
4174 cutIf1:
4175 { }
4176 }
4177 }
4178
4179 public static IEnumerable<bool> read_based(object Base, object N0, object N, object C)
4180 {
4181 {
4182 Variable C1 = new Variable();
4183 Variable Digit = new Variable();
4184 Variable N1 = new Variable();
4185 foreach (bool l2 in YP.get_code(C1))
4186 {
4187 if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
4188 {
4189 if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL)))
4190 {
4191 foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, new ListPair(48, Atom.NIL))))
4192 {
4193 if (YP.lessThan(Digit, Base))
4194 {
4195 foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
4196 {
4197 foreach (bool l8 in read_based(Base, N1, N, C))
4198 {
4199 yield return false;
4200 }
4201 }
4202 goto cutIf2;
4203 }
4204 if (YP.equal(C1, new ListPair(95, Atom.NIL)))
4205 {
4206 foreach (bool l7 in read_based(Base, N0, N, C))
4207 {
4208 yield return false;
4209 }
4210 goto cutIf3;
4211 }
4212 foreach (bool l6 in YP.unify(N, N0))
4213 {
4214 foreach (bool l7 in YP.unify(C, C1))
4215 {
4216 yield return false;
4217 }
4218 }
4219 cutIf3:
4220 cutIf2:
4221 { }
4222 }
4223 goto cutIf1;
4224 }
4225 }
4226 if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL)))
4227 {
4228 if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL)))
4229 {
4230 foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(65, Atom.NIL), 10))))
4231 {
4232 if (YP.lessThan(Digit, Base))
4233 {
4234 foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
4235 {
4236 foreach (bool l8 in read_based(Base, N1, N, C))
4237 {
4238 yield return false;
4239 }
4240 }
4241 goto cutIf5;
4242 }
4243 if (YP.equal(C1, new ListPair(95, Atom.NIL)))
4244 {
4245 foreach (bool l7 in read_based(Base, N0, N, C))
4246 {
4247 yield return false;
4248 }
4249 goto cutIf6;
4250 }
4251 foreach (bool l6 in YP.unify(N, N0))
4252 {
4253 foreach (bool l7 in YP.unify(C, C1))
4254 {
4255 yield return false;
4256 }
4257 }
4258 cutIf6:
4259 cutIf5:
4260 { }
4261 }
4262 goto cutIf4;
4263 }
4264 }
4265 if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL)))
4266 {
4267 if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL)))
4268 {
4269 foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(97, Atom.NIL), 10))))
4270 {
4271 if (YP.lessThan(Digit, Base))
4272 {
4273 foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
4274 {
4275 foreach (bool l8 in read_based(Base, N1, N, C))
4276 {
4277 yield return false;
4278 }
4279 }
4280 goto cutIf8;
4281 }
4282 if (YP.equal(C1, new ListPair(95, Atom.NIL)))
4283 {
4284 foreach (bool l7 in read_based(Base, N0, N, C))
4285 {
4286 yield return false;
4287 }
4288 goto cutIf9;
4289 }
4290 foreach (bool l6 in YP.unify(N, N0))
4291 {
4292 foreach (bool l7 in YP.unify(C, C1))
4293 {
4294 yield return false;
4295 }
4296 }
4297 cutIf9:
4298 cutIf8:
4299 { }
4300 }
4301 goto cutIf7;
4302 }
4303 }
4304 foreach (bool l3 in YP.unify(Digit, 99))
4305 {
4306 if (YP.lessThan(Digit, Base))
4307 {
4308 foreach (bool l5 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit)))
4309 {
4310 foreach (bool l6 in read_based(Base, N1, N, C))
4311 {
4312 yield return false;
4313 }
4314 }
4315 goto cutIf10;
4316 }
4317 if (YP.equal(C1, new ListPair(95, Atom.NIL)))
4318 {
4319 foreach (bool l5 in read_based(Base, N0, N, C))
4320 {
4321 yield return false;
4322 }
4323 goto cutIf11;
4324 }
4325 foreach (bool l4 in YP.unify(N, N0))
4326 {
4327 foreach (bool l5 in YP.unify(C, C1))
4328 {
4329 yield return false;
4330 }
4331 }
4332 cutIf11:
4333 cutIf10:
4334 { }
4335 }
4336 cutIf7:
4337 cutIf4:
4338 cutIf1:
4339 { }
4340 }
4341 }
4342 }
4343
4344 public static IEnumerable<bool> read_char(object Char, object Quote, object Result, object Next)
4345 {
4346 {
4347 Variable C1 = new Variable();
4348 Variable C2 = new Variable();
4349 Variable C3 = new Variable();
4350 Variable Ch = new Variable();
4351 if (YP.equal(Char, 92))
4352 {
4353 foreach (bool l3 in YP.get_code(C1))
4354 {
4355 if (YP.lessThan(C1, 0))
4356 {
4357 foreach (bool l5 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in ~cquoted~c~n"), new ListPair(Quote, new ListPair(Quote, Atom.NIL))))
4358 {
4359 foreach (bool l6 in YP.unify(Result, -1))
4360 {
4361 foreach (bool l7 in YP.unify(Next, C1))
4362 {
4363 yield return false;
4364 }
4365 }
4366 }
4367 goto cutIf2;
4368 }
4369 if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL)))
4370 {
4371 foreach (bool l5 in YP.get_code(C2))
4372 {
4373 foreach (bool l6 in read_char(C2, Quote, Result, Next))
4374 {
4375 yield return false;
4376 }
4377 }
4378 goto cutIf3;
4379 }
4380 if (YP.equal(YP.bitwiseOr(C1, 32), new ListPair(99, Atom.NIL)))
4381 {
4382 foreach (bool l5 in YP.get_code(C2))
4383 {
4384 foreach (bool l6 in read_char(C2, Quote, Result, Next))
4385 {
4386 yield return false;
4387 }
4388 }
4389 goto cutIf4;
4390 }
4391 if (YP.lessThanOrEqual(C1, new ListPair(55, Atom.NIL)))
4392 {
4393 if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL)))
4394 {
4395 foreach (bool l6 in YP.get_code(C2))
4396 {
4397 if (YP.lessThanOrEqual(C2, new ListPair(55, Atom.NIL)))
4398 {
4399 if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL)))
4400 {
4401 foreach (bool l9 in YP.get_code(C3))
4402 {
4403 if (YP.lessThanOrEqual(C3, new ListPair(55, Atom.NIL)))
4404 {
4405 if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL)))
4406 {
4407 foreach (bool l12 in YP.get_code(Next))
4408 {
4409 foreach (bool l13 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(YP.add(YP.multiply(C1, 8), C2), 8), C3), YP.multiply(73, new ListPair(48, Atom.NIL)))))
4410 {
4411 yield return false;
4412 }
4413 }
4414 goto cutIf7;
4415 }
4416 }
4417 foreach (bool l10 in YP.unify(Next, C3))
4418 {
4419 foreach (bool l11 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(C1, 8), C2), YP.multiply(9, new ListPair(48, Atom.NIL)))))
4420 {
4421 yield return false;
4422 }
4423 }
4424 cutIf7:
4425 { }
4426 }
4427 goto cutIf6;
4428 }
4429 }
4430 foreach (bool l7 in YP.unify(Next, C2))
4431 {
4432 foreach (bool l8 in YP.unify(Result, YP.subtract(C1, new ListPair(48, Atom.NIL))))
4433 {
4434 yield return false;
4435 }
4436 }
4437 cutIf6:
4438 { }
4439 }
4440 goto cutIf5;
4441 }
4442 }
4443 if (YP.equal(C1, new ListPair(94, Atom.NIL)))
4444 {
4445 foreach (bool l5 in YP.get_code(C2))
4446 {
4447 if (YP.lessThan(C2, 0))
4448 {
4449 foreach (bool l7 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in ~c..~c^..~c~n"), ListPair.make(new object[] { Quote, 92, Quote })))
4450 {
4451 foreach (bool l8 in YP.unify(Result, -1))
4452 {
4453 foreach (bool l9 in YP.unify(Next, C2))
4454 {
4455 yield return false;
4456 }
4457 }
4458 }
4459 goto cutIf9;
4460 }
4461 if (YP.equal(C2, new ListPair(63, Atom.NIL)))
4462 {
4463 foreach (bool l7 in YP.unify(Result, 127))
4464 {
4465 foreach (bool l8 in YP.get_code(Next))
4466 {
4467 yield return false;
4468 }
4469 }
4470 goto cutIf10;
4471 }
4472 foreach (bool l6 in YP.unify(Result, YP.bitwiseAnd(C2, 31)))
4473 {
4474 foreach (bool l7 in YP.get_code(Next))
4475 {
4476 yield return false;
4477 }
4478 }
4479 cutIf10:
4480 cutIf9:
4481 { }
4482 }
4483 goto cutIf8;
4484 }
4485 foreach (bool l4 in escape_char(C1, Result))
4486 {
4487 foreach (bool l5 in YP.get_code(Next))
4488 {
4489 yield return false;
4490 }
4491 goto cutIf11;
4492 }
4493 foreach (bool l4 in YP.unify(Result, C1))
4494 {
4495 foreach (bool l5 in YP.get_code(Next))
4496 {
4497 yield return false;
4498 }
4499 }
4500 cutIf11:
4501 cutIf8:
4502 cutIf5:
4503 cutIf4:
4504 cutIf3:
4505 cutIf2:
4506 { }
4507 }
4508 goto cutIf1;
4509 }
4510 if (YP.equal(Char, Quote))
4511 {
4512 foreach (bool l3 in YP.get_code(Ch))
4513 {
4514 if (YP.equal(Ch, Quote))
4515 {
4516 foreach (bool l5 in YP.unify(Result, Quote))
4517 {
4518 foreach (bool l6 in YP.get_code(Next))
4519 {
4520 yield return false;
4521 }
4522 }
4523 goto cutIf13;
4524 }
4525 foreach (bool l4 in YP.unify(Result, -1))
4526 {
4527 foreach (bool l5 in YP.unify(Next, Ch))
4528 {
4529 yield return false;
4530 }
4531 }
4532 cutIf13:
4533 { }
4534 }
4535 goto cutIf12;
4536 }
4537 if (YP.lessThan(Char, new ListPair(32, Atom.NIL)))
4538 {
4539 if (YP.notEqual(Char, 9))
4540 {
4541 if (YP.notEqual(Char, 10))
4542 {
4543 if (YP.notEqual(Char, 13))
4544 {
4545 foreach (bool l6 in YP.unify(Result, -1))
4546 {
4547 foreach (bool l7 in YP.unify(Next, Char))
4548 {
4549 foreach (bool l8 in formatError(Atom.a("user_error"), Atom.a("~N** Strange character ~d ends ~ctoken~c~n"), ListPair.make(new object[] { Char, Quote, Quote })))
4550 {
4551 yield return false;
4552 }
4553 }
4554 }
4555 goto cutIf14;
4556 }
4557 }
4558 }
4559 }
4560 foreach (bool l2 in YP.unify(Result, Char))
4561 {
4562 foreach (bool l3 in YP.get_code(Next))
4563 {
4564 yield return false;
4565 }
4566 }
4567 cutIf14:
4568 cutIf12:
4569 cutIf1:
4570 { }
4571 }
4572 }
4573#pragma warning restore 0168, 0219, 0162
4574 }
4575}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs
deleted file mode 100644
index 56ed719..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs
+++ /dev/null
@@ -1,159 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32
33namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
34{
35 /// <summary>
36 /// A PrologException is used as the exception thrown by YP.throw(Term).
37 /// </summary>
38 public class PrologException : Exception
39 {
40 public readonly object _term;
41
42 /// <summary>
43 /// Create a PrologException with the given Term. The printable exception message is the full Term.
44 /// </summary>
45 /// <param name="Term">the term of the exception</param>
46 public PrologException(object Term)
47 : base(YP.getValue(Term).ToString())
48 {
49 _term = YP.makeCopy(Term, new Variable.CopyStore());
50 }
51
52 /// <summary>
53 /// Create a PrologException where the Term is error(ErrorTerm, Message).
54 /// This uses YP.makeCopy to copy the ErrorTerm and Message so that they are valid after unbinding.
55 /// </summary>
56 /// <param name="ErrorTerm">the error term of the error</param>
57 /// <param name="Messsage">the message term of the error. If this is a string, it is converted to an
58 /// Atom so it can be used by Prolog code.
59 /// Message, converted to a string, is use as the printable exception message.
60 /// </param>
61 public PrologException(object ErrorTerm, object Message)
62 : base(YP.getValue(Message).ToString())
63 {
64 if (Message is string)
65 Message = Atom.a((string)Message);
66 _term = YP.makeCopy(new Functor2(Atom.a("error"), ErrorTerm, Message), new Variable.CopyStore());
67 }
68
69 public class TypeErrorInfo
70 {
71 public readonly Atom _Type;
72 public readonly object _Culprit;
73 public readonly object _Message;
74
75 public TypeErrorInfo(Atom Type, object Culprit, object Message)
76 {
77 _Type = Type;
78 _Culprit = Culprit;
79 _Message = Message;
80 }
81 }
82 /// <summary>
83 /// Return the TypeErrorInfo for this exception, or null if _term does not match
84 /// error(type_error(Type, Culprit), Message).
85 /// </summary>
86 /// <returns></returns>
87 public TypeErrorInfo getTypeErrorInfo()
88 {
89 if (!(_term is Functor2 && ((Functor2)_term)._name._name == "error"))
90 return null;
91 object errorTerm = ((Functor2)_term)._arg1;
92 if (!(errorTerm is Functor2 && ((Functor2)errorTerm)._name._name == "type_error"))
93 return null;
94 if (!(((Functor2)errorTerm)._arg1 is Atom))
95 return null;
96 return new TypeErrorInfo
97 ((Atom)((Functor2)errorTerm)._arg1, ((Functor2)errorTerm)._arg2, ((Functor2)_term)._arg2);
98 }
99
100 public class ExistenceErrorInfo
101 {
102 public readonly Atom _Type;
103 public readonly object _Culprit;
104 public readonly object _Message;
105
106 public ExistenceErrorInfo(Atom Type, object Culprit, object Message)
107 {
108 _Type = Type;
109 _Culprit = Culprit;
110 _Message = Message;
111 }
112
113 /// <summary>
114 /// If _Type is procedure and _Culprit is name/artity, return the name. Otherwise return null.
115 /// </summary>
116 /// <returns></returns>
117 public object getProcedureName()
118 {
119 if (!(_Type._name == "procedure" &&
120 _Culprit is Functor2 && ((Functor2)_Culprit)._name == Atom.SLASH))
121 return null;
122 return ((Functor2)_Culprit)._arg1;
123 }
124
125 /// <summary>
126 /// If _Type is procedure and _Culprit is name/arity and arity is an integer, return the arity.
127 /// Otherwise return -1.
128 /// </summary>
129 /// <returns></returns>
130 public int getProcedureArity()
131 {
132 if (!(_Type._name == "procedure" &&
133 _Culprit is Functor2 && ((Functor2)_Culprit)._name == Atom.SLASH))
134 return -1;
135 if (!(((Functor2)_Culprit)._arg2 is int))
136 return -1;
137 return (int)((Functor2)_Culprit)._arg2;
138 }
139 }
140 /// <summary>
141 /// Return the ExistenceErrorInfo for this exception, or null if _term does not match
142 /// error(existence_error(Type, Culprit), Message). If the returned ExistenceErrorInfo _Culprit is
143 /// procedure, you can use its getProcedureName and getProcedureArity.
144 /// </summary>
145 /// <returns></returns>
146 public ExistenceErrorInfo getExistenceErrorInfo()
147 {
148 if (!(_term is Functor2 && ((Functor2)_term)._name._name == "error"))
149 return null;
150 object errorTerm = ((Functor2)_term)._arg1;
151 if (!(errorTerm is Functor2 && ((Functor2)errorTerm)._name._name == "existence_error"))
152 return null;
153 if (!(((Functor2)errorTerm)._arg1 is Atom))
154 return null;
155 return new ExistenceErrorInfo
156 ((Atom)((Functor2)errorTerm)._arg1, ((Functor2)errorTerm)._arg2, ((Functor2)_term)._arg2);
157 }
158 }
159}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT
deleted file mode 100644
index 3c11938..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT
+++ /dev/null
@@ -1,514 +0,0 @@
1YPOS: YieldProlog for OpenSim
2
3 a compiler from Prolog to OpenSim compatible C# scripts
4
5Ported by Kino Coursey and Douglas Miles at Daxtron Labs.
6Based on Jeff Thompson Yield Prolog, http://yieldprolog.sourceforge.net/
7For Prolog see http://en.wikipedia.org/wiki/Prolog
8
9
10INTRODUCTION
11
12This folder contains code to implement a Prolog compiler using the "Yield Statement" found in C#, Javascript, and Python.
13The original Yield Prolog system can transform Prolog programs into C# code.
14In this system we detect and extract YieldProlog code (with "//YP" as the first four characters in the script) and seperate it from any c# code ("marked by "//CS").
15The YP code is transformed to C# and prepended to the "//CS" section, and passed as a bundel to the existing C# compiler.
16The end result is Prolog can interface to OpenSim using the existing "//CS" functionality, and C# can call the compiled Prolog.
17As such YP allows both declaritive and procedural programming in a 3D script enabled environment.
18
19FEATURES
20* Allows implementation of logic programming for objects and agents.
21* C#/Javascript/Python as intermediate language
22* Yield Prolog has relatively high speed of execution which is important in OpenSim. http://yieldprolog.sourceforge.net/benchmarks.html
23* It is compatable with the existing C#/Mono based system.
24* Yield Prolog is BSD license
25* Calling Prolog from C# scripts
26* Calling C# functions (with LSL and OS functions) from Prolog
27* Prolog dynamic database
28* Edinburgh, Cocksin & Mellish style syntax.
29* Compiler is generated by compiling the Prolog descrition of itself into C#
30* Same script entry interface as LSL
31
32* Yield Prolog 1.0.1 Released : it passes all but 9 of the 421 tests in the ISO Prolog test suite (97.8%).
33
34TODO
35* Utilize ability to generate Javascript and Python code
36* Integrate Prolog database with Sim
37* Translation error reporting back to the editor
38* Communications via message passing
39* Interface to external inference engines
40
41POSSIBILITIES
42* Inworld expert systems
43* Parallel logic programming and expert systems
44* Ontology based processing
45* Knowledge based alerting, accessing and business rules
46 For instance, listen on channel x, filter the events and broadcast alerts on channel y
47 or send IM, emails etc.
48
49
50USAGE:
51
52Add "yp" as an allowed compiler
53
54OpenSim.ini
55[ScriptEngine.DotNetEngine]
56AllowedCompilers=lsl,cs,js,vb,yp
57
58Enter scripts using the inworld editing process. Scripts have the following format.
59The first line of a file must have "//yp".
60
61//yp
62<PROLOG CODE>
63//CS
64<CS CODE>
65
66
67
68
69
70
71C# code calling a Prolog Predicate:
72-----------------------------------
73The Prolog predicate is transformed into a C# boolean function. So the general calling format is:
74 foreach( bool var in prolog_predicate(ARGS)) {};
75
76I/O is via using a string reader and writer in conjunction with YP.See() and YP.Tell()
77
78 StringWriter PrologOutuput= new StringWriter();
79 StringReader PrologInput= new StringReader(myInputString);
80 YP.see(PrologInput);
81 YP.tell(PrologOutuput);
82 <CALL PROLOG CODE HERE>
83 YP.seen();
84 YP.told();
85 StringBuilder builder = PrologOutput.GetStringBuilder();
86 string finaloutput = builder.ToString();
87
88Any prolog reads and writes will be to the passed StringReader and StringWriter. In fact any TextReader/TextWriter class can be used.
89
90Strings in Prolog are stored as Atom's and you need to use an Atom object to match.
91
92\\yp
93wanted('bob').
94\\cs
95string Who="bob";
96foreach( bool ans in wanted(Atom.a(Who) )){};
97
98
99Prolog code calling a C# function:
100-----------------------------------
101The prolog code uses the script_event('name_of_function',ARGS) builtin, which is transformed into the function call.
102The C# function called uses "PrologCallback" and returns a boolean.
103
104
105
106Dynamic database assertions:
107-----------------------------------
108
109void assertdb2(string predicate, string arg1, string arg2)
110{
111 name = Atom.a(predicate);
112 YP.assertFact(name, new object[] { arg1, arg2 });
113}
114
115void retractdb2(string predicate, string arg1, string arg2)
116{
117 name = Atom.a(predicate);
118 YP.retractFact(name, new object[] { arg1, arg2 });
119}
120
121----------- IMPORT EXTERNAL FUNCTIONS ----------
122Using 'import' to call a static function
123
124Taken mostly from http://yieldprolog.sourceforge.net/tutorial4.html
125
126If we want to call a static function but it is not defined in the Prolog code, we can simply add an import directive.
127(In Prolog, if you start a line with :- it is a directive to the compiler. Don't forget to end with a period.):
128
129:- import('', [parent/2]).
130uncle(Person, Uncle):- parent(Person, Parent), brother(Parent, Uncle).
131
132The import directive has two arguments.
133The first argument is the module where the imported function is found, which is always ''.
134For C#, this means the imported function is in the same class as the calling function.
135For Javascript and Python, this means the imported function is in the global scope.
136The second argument to import is the comma-separated list of imported functions, where each member of the list is 'name/n', where 'name' is the name of the function and 'n' is the number of arguments.
137In this example, parent has two arguments, so we use parent/2.
138
139Note: you can use an imported function in a dynamically defined goal, or a function in another class.
140
141:- import('', [parent/2]).
142uncle(Person, Uncle) :- Goal = parent(Person, Parent), Goal, brother(Parent, Uncle).
143
144:- import('', ['OtherClass.parent'/2]).
145uncle(Person, Uncle) :- 'OtherClass.parent'(Person, Parent), brother(Parent, Uncle).
146
147--------- Round-about Hello Wonderful world ----------
148//yp
149:-import('',[sayit/1]).
150sayhello(X):-sayit(X).
151
152//cs
153public void default_event_state_entry()
154 {
155 llSay(0,"prolog hello.");
156 foreach( bool ans in sayhello(Atom.a(@"wonderful world") )){};
157 }
158
159PrologCallback sayit(object ans)
160 {
161 llSay(0,"sayit1");
162 string msg = "one answer is :"+((Variable)ans).getValue();
163 llSay(0,msg);
164 yield return false;
165 }
166
167------------------ UPDATES -----------------
168Yield Prolog 1.0 Released : It passes all but 15 of the 421 tests in the ISO Prolog test suite.
169
170New Features:
171* Added support for Prolog predicates read and read_term.
172* In see, Added support for a char code list as the input.
173Using this as the input for "fred" makes
174set_prolog_flag(double_quotes, atom) and
175set_prolog_flag(double_quotes, chars) pass the ISO test suite.
176
177Fixed Bugs:
178* In atom_chars, check for unbound tail in the char list.
179This makes atom_chars pass the ISO test suite.
180* In current_predicate, also check for static functions.
181This makes current_predicate pass the ISO test suite.
182
183Known Issues:
184
185Here are the 9 errors of the 421 tests in the ISO test suite in
186YieldProlog\source\prolog\isoTestSuite.P .
187Some of these have a good excuse for why Yield Prolog produces the error. The rest will be addressed in a future maintenance release.
188
189Goal: call((fail, 1))
190Expected: type_error(callable, (fail, 1))
191Extra Solutions found: failure
192
193Goal: call((write(3), 1))
194Expected: type_error(callable, (write(3), 1))
195Extra Solutions found: type_error(callable, 1)
196
197Goal: call((1; true))
198Expected: type_error(callable, (1 ; true))
199Extra Solutions found: type_error(callable, 1)
200
201Goal: (catch(true, C, write('something')), throw(blabla))
202Expected: system_error
203Extra Solutions found: unexpected_ball(blabla)
204
205Goal: catch(number_chars(A,L), error(instantiation_error, _), fail)
206Expected: failure
207Extra Solutions found: instantiation_error
208
209Goal: Goal: (X = 1 + 2, 'is'(Y, X * 3))
210Expected: [[X <-- (1 + 2), Y <-- 9]]
211Extra Solutions found: type_error(evaluable, /(+, 2))
212
213Goal: 'is'(77, N)
214Expected: instantiation_error
215Extra Solutions found: N <-- 77)
216
217Goal: \+(!, fail)
218Expected: success
219Extra Solutions found: failure
220
221((X=1;X=2), \+((!,fail)))
222Expected: [[X <-- 1],[X <-- 2]]
223Extra Solutions found: failure
224
225
226
227
228
229========================= APPENDIX A: touch test ================================
230
231
232 ===================================
233Input YP Code
234 ===================================
235//yp
236 mydb('field2','field1').
237 mydb('andy','jane').
238 mydb('carl','dan').
239 mydb('andy','bill').
240 mydb('andy','betty').
241
242 call_me(X):-mydb(X,Y) , respond(Y).
243 respond(X):- script_event('sayit',X).
244
245//cs
246 public void default_event_touch_start(int N )
247 {
248 llSay(0,"pstart1");
249 foreach( bool ans in call_me(Atom.a(@"andy") )){};
250 llSay(0,"pstop2");
251 }
252
253 public void default_event_state_entry()
254 {
255 llSay(0,"prolog tester active.");
256 }
257
258PrologCallback sayit(object ans)
259 {
260 llSay(0,"sayit1");
261 string msg = "one answer is :"+((Variable)ans).getValue();
262 llSay(0,msg);
263 yield return false;
264 }
265
266
267 ===================================
268Generated CS Code
269 ===================================
270using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog;using OpenSim.Region.ScriptEngine.Common; using System.Collections.Generic;
271namespace SecondLife { public class Script : OpenSim.Region.ScriptEngine.Common.ScriptBaseClass {
272static OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP YP=null;public Script() { YP= new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP(); }
273//cs
274 public void default_event_touch_start(int N )
275 {
276 llSay(0,"pstart1");
277 foreach( bool ans in call_me(Atom.a(@"carl") )){};
278 llSay(0,"pstop2");
279 }
280
281 public void default_event_state_entry()
282 {
283 llSay(0,"prolog tester active.");
284 }
285
286public IEnumerable<bool> sayit(object ans)
287 {
288 llSay(0,"sayit1");
289 string msg = "one answer is :"+((Variable)ans).getValue();
290 llSay(0,msg);
291 yield return false;
292 }
293
294
295//YPEncoded
296public IEnumerable<bool> mydb(object arg1, object arg2) {
297 {
298 foreach (bool l2 in YP.unify(arg1, Atom.a(@"carl"))) {
299 foreach (bool l3 in YP.unify(arg2, Atom.a(@"dan"))) {
300 yield return false;
301 }
302 }
303 }
304 {
305 foreach (bool l2 in YP.unify(arg1, Atom.a(@"andy"))) {
306 foreach (bool l3 in YP.unify(arg2, Atom.a(@"bill"))) {
307 yield return false;
308 }
309 }
310 }
311 {
312 foreach (bool l2 in YP.unify(arg1, Atom.a(@"andy"))) {
313 foreach (bool l3 in YP.unify(arg2, Atom.a(@"betty"))) {
314 yield return false;
315 }
316 }
317 }
318}
319
320public IEnumerable<bool> call_me(object X) {
321 {
322 Variable Y = new Variable();
323 foreach (bool l2 in mydb(X, Y)) {
324 foreach (bool l3 in respond(Y)) {
325 yield return false;
326 }
327 }
328 }
329}
330
331public IEnumerable<bool> respond(object X) {
332 {
333 foreach (bool l2 in this.sayit( X)) {
334 yield return false;
335 }
336 }
337}
338
339} }
340
341
342
343========================= APPENDIX B:SENSOR INFORMED SCRIPT =====================
344
345
346 ===================================
347Input YP Code
348 ===================================
349//yp
350
351nop.
352
353good('Daxxon Kinoc').
354good('Fluffy Kitty').
355
356bad('Eric Evil').
357bad('Spikey Plant').
358
359prolog_notify(X) :- good(X) , script_event('accept',X).
360prolog_notify(X) :- bad(X) , script_event('reject',X).
361
362
363//cs
364
365public void default_event_state_entry()
366 {
367 llSay(0,"prolog sensor tester active.");
368
369 // Start a sensor looking for Agents
370 llSensorRepeat("","",AGENT, 10, PI,20);
371
372 }
373
374public void default_event_sensor(int number_detected )
375{
376 int i;
377 for(i=0;i< number_detected ;i++)
378 {
379 string dName = llDetectedName(i);
380 string dOwner = llDetectedName(i);
381 foreach(bool response in prolog_notify(Atom.a(dName)) ){};
382 foreach(bool response in prolog_notify(dOwner) ){};
383 llSay(0,"Saw "+dName);
384 }
385}
386
387string decodeToString(object obj)
388{
389 if (obj is Variable) { return (string) ((Variable)obj).getValue();}
390 if (obj is Atom) { return (string) ((Atom)obj)._name;}
391 return "unknown type";
392}
393
394PrologCallback accept(object ans)
395 {
396 string msg = "Welcoming :"+decodeToString(ans);
397 llSay(0,msg);
398 yield return false;
399 }
400
401PrologCallback reject(object ans)
402 {
403 string msg = "Watching :"+decodeToString(ans);
404 llSay(0,msg);
405 yield return false;
406 }
407
408
409 ===================================
410Generated CS Code
411 ===================================
412
413using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog; using OpenSim.Region.ScriptEngine.Common; using System.Collections.Generic;
414namespace SecondLife { public class Script : OpenSim.Region.ScriptEngine.Common.ScriptBaseClass {
415static OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP YP=null; public Script() { YP= new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP(); }
416//cs
417
418public void default_event_state_entry()
419 {
420 llSay(0,"prolog sensor tester active.");
421
422 // Start a sensor looking for Agents
423 llSensorRepeat("","",AGENT, 10, PI,20);
424
425 }
426
427public void default_event_sensor(int number_detected )
428{
429 int i;
430 for(i=0;i< number_detected ;i++)
431 {
432 string dName = llDetectedName(i);
433 string dOwner = llDetectedName(i);
434 foreach(bool response in prolog_notify(Atom.a(dName)) ){};
435 foreach(bool response in prolog_notify(dOwner) ){};
436 llSay(0,"Saw "+dName);
437 }
438}
439
440string decodeToString(object obj)
441{
442 if (obj is Variable) { return (string) ((Variable)obj).getValue();}
443 if (obj is Atom) { return (string) ((Atom)obj)._name;}
444 return "unknown type";
445}
446
447public IEnumerable<bool> accept(object ans)
448 {
449 string msg = "Welcoming :"+decodeToString(ans);
450 llSay(0,msg);
451 yield return false;
452 }
453
454public IEnumerable<bool> reject(object ans)
455 {
456 string msg = "Watching :"+decodeToString(ans);
457 llSay(0,msg);
458 yield return false;
459 }
460
461
462//YPEncoded
463public IEnumerable<bool> yp_nop_header_nop() {
464 {
465 yield return false;
466 }
467}
468
469public IEnumerable<bool> good(object arg1) {
470 {
471 foreach (bool l2 in YP.unify(arg1, Atom.a(@"Daxxon Kinoc"))) {
472 yield return false;
473 }
474 }
475 {
476 foreach (bool l2 in YP.unify(arg1, Atom.a(@"Fluffy Kitty"))) {
477 yield return false;
478 }
479 }
480}
481
482public IEnumerable<bool> bad(object arg1) {
483 {
484 foreach (bool l2 in YP.unify(arg1, Atom.a(@"Eric Evil"))) {
485 yield return false;
486 }
487 }
488 {
489 foreach (bool l2 in YP.unify(arg1, Atom.a(@"Spikey Plant"))) {
490 yield return false;
491 }
492 }
493}
494
495public IEnumerable<bool> prolog_notify(object X) {
496 {
497 foreach (bool l2 in good(X)) {
498 foreach (bool l3 in this.accept( X)) {
499 yield return false;
500 }
501 }
502 }
503 {
504 foreach (bool l2 in bad(X)) {
505 foreach (bool l3 in this.reject( X)) {
506 yield return false;
507 }
508 }
509 }
510}
511
512} }
513
514
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/UndefinedPredicateException.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/UndefinedPredicateException.cs
deleted file mode 100644
index 22a22b4..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/UndefinedPredicateException.cs
+++ /dev/null
@@ -1,62 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32
33namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
34{
35 /// <summary>
36 /// An UndefinedPredicateException extends PrologException to create an existence_error exception.
37 /// </summary>
38 public class UndefinedPredicateException : PrologException
39 {
40 private Atom _predicateName;
41 private int _arity;
42
43 public UndefinedPredicateException(object message, Atom predicateName, int arity)
44 : base(new Functor2
45 (Atom.a("existence_error"), Atom.a("procedure"), new Functor2(Atom.a("/"), predicateName, arity)),
46 message)
47 {
48 _predicateName = predicateName;
49 _arity = arity;
50 }
51
52 public Atom PredicateName
53 {
54 get { return _predicateName; }
55 }
56
57 public int Arity
58 {
59 get { return _arity; }
60 }
61 }
62}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Variable.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Variable.cs
deleted file mode 100644
index a9bd563..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Variable.cs
+++ /dev/null
@@ -1,222 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34
35namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
36{
37 public interface IUnifiable
38 {
39 IEnumerable<bool> unify(object arg);
40 void addUniqueVariables(List<Variable> variableSet);
41 object makeCopy(Variable.CopyStore copyStore);
42 bool termEqual(object term);
43 bool ground();
44 }
45
46 /// <summary>
47 /// A Variable is passed to a function so that it can be unified with
48 /// value or another Variable. See getValue and unify for details.
49 /// </summary>
50 public class Variable : IUnifiable
51 {
52 // Use _isBound separate from _value so that it can be bound to any value,
53 // including null.
54 private bool _isBound = false;
55 private object _value;
56
57 /// <summary>
58 /// If this Variable is unbound, then just return this Variable.
59 /// Otherwise, if this has been bound to a value with unify, return the value.
60 /// If the bound value is another Variable, this follows the "variable chain"
61 /// to the end and returns the final value, or the final Variable if it is unbound.
62 /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html
63 /// </summary>
64 /// <returns></returns>
65 public object getValue()
66 {
67 if (!_isBound)
68 return this;
69
70 object result = _value;
71 while (result is Variable)
72 {
73 if (!((Variable)result)._isBound)
74 return result;
75
76 // Keep following the Variable chain.
77 result = ((Variable)result)._value;
78 }
79
80 return result;
81 }
82
83 /// <summary>
84 /// If this Variable is bound, then just call YP.unify to unify this with arg.
85 /// (Note that if arg is an unbound Variable, then YP.unify will bind it to
86 /// this Variable's value.)
87 /// Otherwise, bind this Variable to YP.getValue(arg) and yield once. After the
88 /// yield, return this Variable to the unbound state.
89 /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html
90 /// </summary>
91 /// <param name="arg"></param>
92 /// <returns></returns>
93 public IEnumerable<bool> unify(object arg)
94 {
95 if (!_isBound)
96 {
97 _value = YP.getValue(arg);
98 if (_value == this)
99 // We are unifying this unbound variable with itself, so leave it unbound.
100 yield return false;
101 else
102 {
103 _isBound = true;
104 try
105 {
106 yield return false;
107 }
108 finally
109 {
110 // Remove the binding.
111 _isBound = false;
112 }
113 }
114 }
115 else
116 {
117 // disable warning on l1, don't see how we can
118 // code this differently
119 #pragma warning disable 0168
120 foreach (bool l1 in YP.unify(this, arg))
121 yield return false;
122 #pragma warning restore 0168
123 }
124 }
125
126 public override string ToString()
127 {
128 object value = getValue();
129 if (value == this)
130 return "_Variable";
131 else
132 return getValue().ToString();
133 }
134
135 /// <summary>
136 /// If bound, call YP.addUniqueVariables on the value. Otherwise, if this unbound
137 /// variable is not already in variableSet, add it.
138 /// </summary>
139 /// <param name="variableSet"></param>
140 public void addUniqueVariables(List<Variable> variableSet)
141 {
142 if (_isBound)
143 YP.addUniqueVariables(getValue(), variableSet);
144 else
145 {
146 if (variableSet.IndexOf(this) < 0)
147 variableSet.Add(this);
148 }
149 }
150
151 /// <summary>
152 /// If bound, return YP.makeCopy for the value, else return copyStore.getCopy(this).
153 /// However, if copyStore is null, just return this.
154 /// </summary>
155 /// <param name="copyStore"></param>
156 /// <returns></returns>
157 public object makeCopy(Variable.CopyStore copyStore)
158 {
159 if (_isBound)
160 return YP.makeCopy(getValue(), copyStore);
161 else
162 return copyStore == null ? this : copyStore.getCopy(this);
163 }
164
165 public bool termEqual(object term)
166 {
167 if (_isBound)
168 return YP.termEqual(getValue(), term);
169 else
170 return this == YP.getValue(term);
171 }
172
173 public bool ground()
174 {
175 if (_isBound)
176 // This is usually called by YP.ground which already did getValue, so this
177 // should never be reached, but check anyway.
178 return YP.ground(getValue());
179 else
180 return false;
181 }
182
183 /// <summary>
184 /// A CopyStore is used by makeCopy to track which Variable objects have
185 /// been copied.
186 /// </summary>
187 public class CopyStore
188 {
189 private List<Variable> _inVariableSet = new List<Variable>();
190 private List<Variable> _outVariableSet = new List<Variable>();
191
192 /// <summary>
193 /// If inVariable has already been copied, return its copy. Otherwise,
194 /// return a fresh Variable associated with inVariable.
195 /// </summary>
196 /// <param name="inVariable"></param>
197 /// <returns></returns>
198 public Variable getCopy(Variable inVariable)
199 {
200 int index = _inVariableSet.IndexOf(inVariable);
201 if (index >= 0)
202 return _outVariableSet[index];
203 else
204 {
205 Variable outVariable = new Variable();
206 _inVariableSet.Add(inVariable);
207 _outVariableSet.Add(outVariable);
208 return outVariable;
209 }
210 }
211
212 /// <summary>
213 /// Return the number of unique variables that have been copied.
214 /// </summary>
215 /// <returns></returns>
216 public int getNUniqueVariables()
217 {
218 return _inVariableSet.Count;
219 }
220 }
221 }
222}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YP.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YP.cs
deleted file mode 100644
index 694e733..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YP.cs
+++ /dev/null
@@ -1,2701 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.Collections;
33using System.Collections.Generic;
34using System.IO;
35using System.Reflection;
36using System.Net.Sockets;
37using System.Text;
38using System.Text.RegularExpressions;
39
40namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
41{
42 /// <summary>
43 /// YP has static methods for general functions in Yield Prolog such as <see cref="getValue"/>
44 /// and <see cref="unify"/>.
45 /// </summary>
46 public class YP
47 {
48 private static Fail _fail = new Fail();
49 private static Repeat _repeat = new Repeat();
50 private static Dictionary<NameArity, List<IClause>> _predicatesStore =
51 new Dictionary<NameArity, List<IClause>>();
52 private static TextWriter _outputStream = System.Console.Out;
53 private static TextReader _inputStream = System.Console.In;
54 private static IndexedAnswers _operatorTable = null;
55 private static Dictionary<string, object> _prologFlags = new Dictionary<string, object>();
56 public const int MAX_ARITY = 255;
57
58 /// <summary>
59 /// An IClause is used so that dynamic predicates can call match.
60 /// </summary>
61 public interface IClause
62 {
63 IEnumerable<bool> match(object[] args);
64 IEnumerable<bool> clause(object Head, object Body);
65 }
66
67 /// <summary>
68 /// If value is a Variable, then return its getValue. Otherwise, just
69 /// return value. You should call YP.getValue on any object that
70 /// may be a Variable to get the value to pass to other functions in
71 /// your system that are not part of Yield Prolog, such as math functions
72 /// or file I/O.
73 /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html
74 /// </summary>
75 /// <param name="value"></param>
76 /// <returns></returns>
77 public static object getValue(object value)
78 {
79 if (value is Variable)
80 return ((Variable)value).getValue();
81 else
82 return value;
83 }
84
85 /// <summary>
86 /// If arg1 or arg2 is an object with a unify method (such as Variable or
87 /// Functor) then just call its unify with the other argument. The object's
88 /// unify method will bind the values or check for equals as needed.
89 /// Otherwise, both arguments are "normal" (atomic) values so if they
90 /// are equal then succeed (yield once), else fail (don't yield).
91 /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html
92 /// </summary>
93 /// <param name="arg1"></param>
94 /// <param name="arg2"></param>
95 /// <returns></returns>
96 public static IEnumerable<bool> unify(object arg1, object arg2)
97 {
98 arg1 = getValue(arg1);
99 arg2 = getValue(arg2);
100 if (arg1 is IUnifiable)
101 return ((IUnifiable)arg1).unify(arg2);
102 else if (arg2 is IUnifiable)
103 return ((IUnifiable)arg2).unify(arg1);
104 else
105 {
106 // Arguments are "normal" types.
107 if (arg1.Equals(arg2))
108 return new Succeed();
109 else
110 return _fail;
111 }
112 }
113
114 /// <summary>
115 /// This is used for the lookup key in _factStore.
116 /// </summary>
117 public struct NameArity
118 {
119 public readonly Atom _name;
120 public readonly int _arity;
121
122 public NameArity(Atom name, int arity)
123 {
124 _name = name;
125 _arity = arity;
126 }
127
128 public override bool Equals(object obj)
129 {
130 if (obj is NameArity)
131 {
132 NameArity nameArity = (NameArity)obj;
133 return nameArity._name.Equals(_name) && nameArity._arity.Equals(_arity);
134 }
135 else
136 {
137 return false;
138 }
139 }
140
141 public override int GetHashCode()
142 {
143 return _name.GetHashCode() ^ _arity.GetHashCode();
144 }
145 }
146
147 /// <summary>
148 /// Convert term to an int.
149 /// If term is a single-element List, use its first element
150 /// (to handle the char types like "a").
151 /// If can't convert, throw a PrologException for type_error evaluable (because this is only
152 /// called from arithmetic functions).
153 /// </summary>
154 /// <param name="term"></param>
155 /// <returns></returns>
156 public static int convertInt(object term)
157 {
158 term = YP.getValue(term);
159 if (term is Functor2 && ((Functor2)term)._name == Atom.DOT &&
160 YP.getValue(((Functor2)term)._arg2) == Atom.NIL)
161 // Assume it is a char type like "a".
162 term = YP.getValue(((Functor2)term)._arg1);
163 if (term is Variable)
164 throw new PrologException(Atom.a("instantiation_error"),
165 "Expected a number but the argument is an unbound variable");
166
167 try
168 {
169 return (int)term;
170 }
171 catch (InvalidCastException)
172 {
173 throw new PrologException
174 (new Functor2
175 ("type_error", Atom.a("evaluable"),
176 new Functor2(Atom.SLASH, getFunctorName(term), getFunctorArgs(term).Length)),
177 "Term must be an integer");
178 }
179 }
180
181 /// <summary>
182 /// Convert term to a double. This may convert an int to a double, etc.
183 /// If term is a single-element List, use its first element
184 /// (to handle the char types like "a").
185 /// If can't convert, throw a PrologException for type_error evaluable (because this is only
186 /// called from arithmetic functions).
187 /// </summary>
188 /// <param name="term"></param>
189 /// <returns></returns>
190 public static double convertDouble(object term)
191 {
192 term = YP.getValue(term);
193 if (term is Functor2 && ((Functor2)term)._name == Atom.DOT &&
194 YP.getValue(((Functor2)term)._arg2) == Atom.NIL)
195 // Assume it is a char type like "a".
196 term = YP.getValue(((Functor2)term)._arg1);
197 if (term is Variable)
198 throw new PrologException(Atom.a("instantiation_error"),
199 "Expected a number but the argument is an unbound variable");
200
201 try
202 {
203 return Convert.ToDouble(term);
204 }
205 catch (InvalidCastException)
206 {
207 throw new PrologException
208 (new Functor2
209 ("type_error", Atom.a("evaluable"),
210 new Functor2(Atom.SLASH, getFunctorName(term), getFunctorArgs(term).Length)),
211 "Term must be an integer");
212 }
213 }
214
215 /// <summary>
216 /// If term is an integer, set intTerm.
217 /// If term is a single-element List, use its first element
218 /// (to handle the char types like "a"). Return true for success, false if can't convert.
219 /// We use a success return value because throwing an exception is inefficient.
220 /// </summary>
221 /// <param name="term"></param>
222 /// <returns></returns>
223 public static bool getInt(object term, out int intTerm)
224 {
225 term = YP.getValue(term);
226 if (term is Functor2 && ((Functor2)term)._name == Atom.DOT &&
227 YP.getValue(((Functor2)term)._arg2) == Atom.NIL)
228 // Assume it is a char type like "a".
229 term = YP.getValue(((Functor2)term)._arg1);
230
231 if (term is int)
232 {
233 intTerm = (int)term;
234 return true;
235 }
236
237 intTerm = 0;
238 return false;
239 }
240
241 public static bool equal(object x, object y)
242 {
243 x = YP.getValue(x);
244 if (x is DateTime)
245 return (DateTime)x == (DateTime)YP.getValue(y);
246 // Assume convertDouble converts an int to a double perfectly.
247 return YP.convertDouble(x) == YP.convertDouble(y);
248 }
249
250 public static bool notEqual(object x, object y)
251 {
252 x = YP.getValue(x);
253 if (x is DateTime)
254 return (DateTime)x != (DateTime)YP.getValue(y);
255 // Assume convertDouble converts an int to a double perfectly.
256 return YP.convertDouble(x) != YP.convertDouble(y);
257 }
258
259 public static bool greaterThan(object x, object y)
260 {
261 x = YP.getValue(x);
262 if (x is DateTime)
263 return (DateTime)x > (DateTime)YP.getValue(y);
264 // Assume convertDouble converts an int to a double perfectly.
265 return YP.convertDouble(x) > YP.convertDouble(y);
266 }
267
268 public static bool lessThan(object x, object y)
269 {
270 x = YP.getValue(x);
271 if (x is DateTime)
272 return (DateTime)x < (DateTime)YP.getValue(y);
273 // Assume convertDouble converts an int to a double perfectly.
274 return YP.convertDouble(x) < YP.convertDouble(y);
275 }
276
277 public static bool greaterThanOrEqual(object x, object y)
278 {
279 x = YP.getValue(x);
280 if (x is DateTime)
281 return (DateTime)x >= (DateTime)YP.getValue(y);
282 // Assume convertDouble converts an int to a double perfectly.
283 return YP.convertDouble(x) >= YP.convertDouble(y);
284 }
285
286 public static bool lessThanOrEqual(object x, object y)
287 {
288 x = YP.getValue(x);
289 if (x is DateTime)
290 return (DateTime)x <= (DateTime)YP.getValue(y);
291 // Assume convertDouble converts an int to a double perfectly.
292 return YP.convertDouble(x) <= YP.convertDouble(y);
293 }
294
295 public static object negate(object x)
296 {
297 int intX;
298 if (getInt(x, out intX))
299 return -intX;
300 return -convertDouble(x);
301 }
302
303 public static object abs(object x)
304 {
305 int intX;
306 if (getInt(x, out intX))
307 return Math.Abs(intX);
308 return Math.Abs(convertDouble(x));
309 }
310
311 public static object sign(object x)
312 {
313 int intX;
314 if (getInt(x, out intX))
315 return Math.Sign(intX);
316 return Math.Sign(convertDouble(x));
317 }
318
319 // Use toFloat instead of float because it is a reserved keyword.
320 public static object toFloat(object x)
321 {
322 return convertDouble(x);
323 }
324
325 /// <summary>
326 /// The ISO standard returns an int.
327 /// </summary>
328 /// <param name="x"></param>
329 /// <returns></returns>
330 public static object floor(object x)
331 {
332 return (int)Math.Floor(convertDouble(x));
333 }
334
335 /// <summary>
336 /// The ISO standard returns an int.
337 /// </summary>
338 /// <param name="x"></param>
339 /// <returns></returns>
340 public static object truncate(object x)
341 {
342 return (int)Math.Truncate(convertDouble(x));
343 }
344
345 /// <summary>
346 /// The ISO standard returns an int.
347 /// </summary>
348 /// <param name="x"></param>
349 /// <returns></returns>
350 public static object round(object x)
351 {
352 return (int)Math.Round(convertDouble(x));
353 }
354
355 /// <summary>
356 /// The ISO standard returns an int.
357 /// </summary>
358 /// <param name="x"></param>
359 /// <returns></returns>
360 public static object ceiling(object x)
361 {
362 return (int)Math.Ceiling(convertDouble(x));
363 }
364
365 public static object sin(object x)
366 {
367 return Math.Sin(YP.convertDouble(x));
368 }
369
370 public static object cos(object x)
371 {
372 return Math.Cos(YP.convertDouble(x));
373 }
374
375 public static object atan(object x)
376 {
377 return Math.Atan(YP.convertDouble(x));
378 }
379
380 public static object exp(object x)
381 {
382 return Math.Exp(YP.convertDouble(x));
383 }
384
385 public static object log(object x)
386 {
387 return Math.Log(YP.convertDouble(x));
388 }
389
390 public static object sqrt(object x)
391 {
392 return Math.Sqrt(convertDouble(x));
393 }
394
395 public static object bitwiseComplement(object x)
396 {
397 return ~YP.convertInt(x);
398 }
399
400 public static object add(object x, object y)
401 {
402 int intX, intY;
403 if (getInt(x, out intX) && getInt(y, out intY))
404 return intX + intY;
405 return convertDouble(x) + convertDouble(y);
406 }
407
408 public static object subtract(object x, object y)
409 {
410 int intX, intY;
411 if (getInt(x, out intX) && getInt(y, out intY))
412 return intX - intY;
413 return convertDouble(x) - convertDouble(y);
414 }
415
416 public static object multiply(object x, object y)
417 {
418 int intX, intY;
419 if (getInt(x, out intX) && getInt(y, out intY))
420 return intX * intY;
421 return convertDouble(x) * convertDouble(y);
422 }
423
424 /// <summary>
425 /// Return floating point, even if both arguments are integer.
426 /// </summary>
427 /// <param name="x"></param>
428 /// <param name="y"></param>
429 /// <returns></returns>
430 public static object divide(object x, object y)
431 {
432 return convertDouble(x) / convertDouble(y);
433 }
434
435 public static object intDivide(object x, object y)
436 {
437 int intX, intY;
438 if (getInt(x, out intX) && getInt(y, out intY))
439 return intX / intY;
440 // Still allow passing a double, but treat as an int.
441 return (int)convertDouble(x) / (int)convertDouble(y);
442 }
443
444 public static object mod(object x, object y)
445 {
446 int intX, intY;
447 if (getInt(x, out intX) && getInt(y, out intY))
448 return intX % intY;
449 // Still allow passing a double, but treat as an int.
450 return (int)convertDouble(x) % (int)convertDouble(y);
451 }
452
453 public static object pow(object x, object y)
454 {
455 return Math.Pow(YP.convertDouble(x), YP.convertDouble(y));
456 }
457
458 public static object bitwiseShiftRight(object x, object y)
459 {
460 return YP.convertInt(x) >> YP.convertInt(y);
461 }
462
463 public static object bitwiseShiftLeft(object x, object y)
464 {
465 return YP.convertInt(x) << YP.convertInt(y);
466 }
467
468 public static object bitwiseAnd(object x, object y)
469 {
470 return YP.convertInt(x) & YP.convertInt(y);
471 }
472
473 public static object bitwiseOr(object x, object y)
474 {
475 return YP.convertInt(x) | YP.convertInt(y);
476 }
477
478 public static object min(object x, object y)
479 {
480 int intX, intY;
481 if (getInt(x, out intX) && getInt(y, out intY))
482 return Math.Min(intX, intY);
483 return Math.Min(convertDouble(x), convertDouble(y));
484 }
485
486 public static object max(object x, object y)
487 {
488 int intX, intY;
489 if (getInt(x, out intX) && getInt(y, out intY))
490 return Math.Max(intX, intY);
491 return Math.Max(convertDouble(x), convertDouble(y));
492 }
493
494 public static IEnumerable<bool> copy_term(object inTerm, object outTerm)
495 {
496 return YP.unify(outTerm, YP.makeCopy(inTerm, new Variable.CopyStore()));
497 }
498
499 public static void addUniqueVariables(object term, List<Variable> variableSet)
500 {
501 term = YP.getValue(term);
502 if (term is IUnifiable)
503 ((IUnifiable)term).addUniqueVariables(variableSet);
504 }
505
506 public static object makeCopy(object term, Variable.CopyStore copyStore)
507 {
508 term = YP.getValue(term);
509 if (term is IUnifiable)
510 return ((IUnifiable)term).makeCopy(copyStore);
511 else
512 // term is a "normal" type. Assume it is ground.
513 return term;
514 }
515
516 /// <summary>
517 /// Sort the array in place according to termLessThan. This does not remove duplicates
518 /// </summary>
519 /// <param name="array"></param>
520 public static void sortArray(object[] array)
521 {
522 Array.Sort(array, YP.compareTerms);
523 }
524
525 /// <summary>
526 /// Sort the array in place according to termLessThan. This does not remove duplicates
527 /// </summary>
528 /// <param name="array"></param>
529 public static void sortArray(List<object> array)
530 {
531 array.Sort(YP.compareTerms);
532 }
533
534 /// <summary>
535 /// Sort List according to termLessThan, remove duplicates and unify with Sorted.
536 /// </summary>
537 /// <param name="List"></param>
538 /// <param name="Sorted"></param>
539 /// <returns></returns>
540 public static IEnumerable<bool> sort(object List, object Sorted)
541 {
542 object[] array = ListPair.toArray(List);
543 if (array == null)
544 return YP.fail();
545 if (array.Length > 1)
546 sortArray(array);
547 return YP.unify(Sorted, ListPair.makeWithoutRepeatedTerms(array));
548 }
549
550 /// <summary>
551 /// Use YP.unify to unify each of the elements of the two arrays, and yield
552 /// once if they all unify.
553 /// </summary>
554 /// <param name="array1"></param>
555 /// <param name="array2"></param>
556 /// <returns></returns>
557 public static IEnumerable<bool> unifyArrays(object[] array1, object[] array2)
558 {
559 if (array1.Length != array2.Length)
560 yield break;
561
562 IEnumerator<bool>[] iterators = new IEnumerator<bool>[array1.Length];
563 bool gotMatch = true;
564 int nIterators = 0;
565 // Try to bind all the arguments.
566 for (int i = 0; i < array1.Length; ++i)
567 {
568 IEnumerator<bool> iterator = YP.unify(array1[i], array2[i]).GetEnumerator();
569 iterators[nIterators++] = iterator;
570 // MoveNext() is true if YP.unify succeeds.
571 if (!iterator.MoveNext())
572 {
573 gotMatch = false;
574 break;
575 }
576 }
577
578 try
579 {
580 if (gotMatch)
581 yield return false;
582 }
583 finally
584 {
585 // Manually finalize all the iterators.
586 for (int i = 0; i < nIterators; ++i)
587 iterators[i].Dispose();
588 }
589 }
590
591 /// <summary>
592 /// Return an iterator (which you can use in a for-in loop) which does
593 /// zero iterations. This returns a pre-existing iterator which is
594 /// more efficient than letting the compiler generate a new one.
595 /// </summary>
596 /// <returns></returns>
597 public static IEnumerable<bool> fail()
598 {
599 return _fail;
600 }
601
602 /// <summary>
603 /// Return an iterator (which you can use in a for-in loop) which does
604 /// one iteration. This returns a pre-existing iterator which is
605 /// more efficient than letting the compiler generate a new one.
606 /// </summary>
607 /// <returns></returns>
608 public static IEnumerable<bool> succeed()
609 {
610 return new Succeed();
611 }
612
613 /// <summary>
614 /// Return an iterator (which you can use in a for-in loop) which repeats
615 /// indefinitely. This returns a pre-existing iterator which is
616 /// more efficient than letting the compiler generate a new one.
617 /// </summary>
618 /// <returns></returns>
619 public static IEnumerable<bool> repeat()
620 {
621 return _repeat;
622 }
623
624 // disable warning on l1, don't see how we can
625 // code this differently
626 #pragma warning disable 0168
627 public static IEnumerable<bool> univ(object Term, object List)
628 {
629 Term = YP.getValue(Term);
630 List = YP.getValue(List);
631
632 if (nonvar(Term))
633 return YP.unify(new ListPair
634 (getFunctorName(Term), ListPair.make(getFunctorArgs(Term))), List);
635
636 Variable Name = new Variable();
637 Variable ArgList = new Variable();
638 foreach (bool l1 in new ListPair(Name, ArgList).unify(List))
639 {
640 object[] args = ListPair.toArray(ArgList);
641 if (args == null)
642 throw new PrologException
643 (new Functor2("type_error", Atom.a("list"), ArgList),
644 "Expected a list. Got: " + ArgList.getValue());
645 if (args.Length == 0)
646 // Return the Name, even if it is not an Atom.
647 return YP.unify(Term, Name);
648 if (args.Length > MAX_ARITY)
649 throw new PrologException
650 (new Functor1("representation_error", Atom.a("max_arity")),
651 "Functor arity " + args.Length + " may not be greater than " + MAX_ARITY);
652 if (!atom(Name))
653 throw new PrologException
654 (new Functor2("type_error", Atom.a("atom"), Name),
655 "Expected an atom. Got: " + Name.getValue());
656
657 return YP.unify(Term, Functor.make((Atom)YP.getValue(Name), args));
658 }
659
660 return YP.fail();
661 }
662
663 public static IEnumerable<bool> functor(object Term, object FunctorName, object Arity)
664 {
665 Term = YP.getValue(Term);
666 FunctorName = YP.getValue(FunctorName);
667 Arity = YP.getValue(Arity);
668
669 if (Term is Variable)
670 {
671 if (FunctorName is Variable)
672 throw new PrologException(Atom.a("instantiation_error"),
673 "Arg 2 FunctorName is an unbound variable");
674 if (Arity is Variable)
675 throw new PrologException(Atom.a("instantiation_error"),
676 "Arg 3 Arity is an unbound variable");
677 if (!(Arity is int))
678 throw new PrologException
679 (new Functor2("type_error", Atom.a("integer"), Arity), "Arity is not an integer");
680 if (!YP.atomic(FunctorName))
681 throw new PrologException
682 (new Functor2("type_error", Atom.a("atomic"), FunctorName), "FunctorName is not atomic");
683
684 if ((int)Arity < 0)
685 throw new PrologException
686 (new Functor2("domain_error", Atom.a("not_less_than_zero"), Arity),
687 "Arity may not be less than zero");
688 else if ((int)Arity == 0)
689 {
690 // Just unify Term with the atomic FunctorName.
691 foreach (bool l1 in YP.unify(Term, FunctorName))
692 yield return false;
693 }
694 else
695 {
696 if ((int)Arity > MAX_ARITY)
697 throw new PrologException
698 (new Functor1("representation_error", Atom.a("max_arity")),
699 "Functor arity " + Arity + " may not be greater than " + MAX_ARITY);
700 if (!(FunctorName is Atom))
701 throw new PrologException
702 (new Functor2("type_error", Atom.a("atom"), FunctorName), "FunctorName is not an atom");
703 // Construct a functor with unbound variables.
704 object[] args = new object[(int)Arity];
705 for (int i = 0; i < args.Length; ++i)
706 args[i] = new Variable();
707 #pragma warning disable 0219
708 foreach (bool l1 in YP.unify(Term, Functor.make((Atom)FunctorName, args)))
709 yield return false;
710 #pragma warning restore 0219
711 }
712 }
713 else
714 {
715 foreach (bool l1 in YP.unify(FunctorName, getFunctorName(Term)))
716 {
717 foreach (bool l2 in YP.unify(Arity, getFunctorArgs(Term).Length))
718 yield return false;
719 }
720 }
721 }
722
723 public static IEnumerable<bool> arg(object ArgNumber, object Term, object Value)
724 {
725 if (var(ArgNumber))
726 throw new PrologException(Atom.a("instantiation_error"), "Arg 1 ArgNumber is an unbound variable");
727 int argNumberInt;
728 if (!getInt(ArgNumber, out argNumberInt))
729 throw new PrologException
730 (new Functor2("type_error", Atom.a("integer"), ArgNumber), "Arg 1 ArgNumber must be integer");
731 if (argNumberInt < 0)
732 throw new PrologException
733 (new Functor2("domain_error", Atom.a("not_less_than_zero"), argNumberInt),
734 "ArgNumber may not be less than zero");
735
736 if (YP.var(Term))
737 throw new PrologException(Atom.a("instantiation_error"),
738 "Arg 2 Term is an unbound variable");
739 if (!YP.compound(Term))
740 throw new PrologException
741 (new Functor2("type_error", Atom.a("compound"), Term), "Arg 2 Term must be compound");
742
743 object[] termArgs = YP.getFunctorArgs(Term);
744 // Silently fail if argNumberInt is out of range.
745 if (argNumberInt >= 1 && argNumberInt <= termArgs.Length)
746 {
747 // The first ArgNumber is at 1, not 0.
748 foreach (bool l1 in YP.unify(Value, termArgs[argNumberInt - 1]))
749 yield return false;
750 }
751 }
752
753 public static bool termEqual(object Term1, object Term2)
754 {
755 Term1 = YP.getValue(Term1);
756 if (Term1 is IUnifiable)
757 return ((IUnifiable)Term1).termEqual(Term2);
758 return Term1.Equals(YP.getValue(Term2));
759 }
760
761 public static bool termNotEqual(object Term1, object Term2)
762 {
763 return !termEqual(Term1, Term2);
764 }
765
766 public static bool termLessThan(object Term1, object Term2)
767 {
768 Term1 = YP.getValue(Term1);
769 Term2 = YP.getValue(Term2);
770 int term1TypeCode = getTypeCode(Term1);
771 int term2TypeCode = getTypeCode(Term2);
772 if (term1TypeCode != term2TypeCode)
773 return term1TypeCode < term2TypeCode;
774
775 // The terms are the same type code.
776 if (term1TypeCode == -2)
777 {
778 // Variable.
779 // We always check for equality first because we want to be sure
780 // that less than returns false if the terms are equal, in
781 // case that the less than check really behaves like less than or equal.
782 if ((Variable)Term1 != (Variable)Term2)
783 // The hash code should be unique to a Variable object.
784 return Term1.GetHashCode() < Term2.GetHashCode();
785 return false;
786 }
787 if (term1TypeCode == 0)
788 return ((Atom)Term1)._name.CompareTo(((Atom)Term2)._name) < 0;
789 if (term1TypeCode == 1)
790 return ((Functor1)Term1).lessThan((Functor1)Term2);
791 if (term1TypeCode == 2)
792 return ((Functor2)Term1).lessThan((Functor2)Term2);
793 if (term1TypeCode == 3)
794 return ((Functor3)Term1).lessThan((Functor3)Term2);
795 if (term1TypeCode == 4)
796 return ((Functor)Term1).lessThan((Functor)Term2);
797
798 // Type code is -1 for general objects. First compare their type names.
799 // Note that this puts Double before Int32 as required by ISO Prolog.
800 string term1TypeName = Term1.GetType().ToString();
801 string term2TypeName = Term2.GetType().ToString();
802 if (term1TypeName != term2TypeName)
803 return term1TypeName.CompareTo(term2TypeName) < 0;
804
805 // The terms are the same type name.
806 if (Term1 is int)
807 return (int)Term1 < (int)Term2;
808 else if (Term1 is double)
809 return (double)Term1 < (double)Term2;
810 else if (Term1 is DateTime)
811 return (DateTime)Term1 < (DateTime)Term2;
812 else if (Term1 is String)
813 return ((String)Term1).CompareTo((String)Term2) < 0;
814 // Debug: Should we try arrays, etc.?
815
816 if (!Term1.Equals(Term2))
817 // Could be equal or greater than.
818 return Term1.GetHashCode() < Term2.GetHashCode();
819 return false;
820 }
821
822 /// <summary>
823 /// Type code is -2 if term is a Variable, 0 if it is an Atom,
824 /// 1 if it is a Functor1, 2 if it is a Functor2, 3 if it is a Functor3,
825 /// 4 if it is Functor.
826 /// Otherwise, type code is -1.
827 /// This does not call YP.getValue(term).
828 /// </summary>
829 /// <param name="term"></param>
830 /// <returns></returns>
831 private static int getTypeCode(object term)
832 {
833 if (term is Variable)
834 return -2;
835 else if (term is Atom)
836 return 0;
837 else if (term is Functor1)
838 return 1;
839 else if (term is Functor2)
840 return 2;
841 else if (term is Functor3)
842 return 3;
843 else if (term is Functor)
844 return 4;
845 else
846 return -1;
847 }
848
849 public static bool termLessThanOrEqual(object Term1, object Term2)
850 {
851 if (YP.termEqual(Term1, Term2))
852 return true;
853 return YP.termLessThan(Term1, Term2);
854 }
855
856 public static bool termGreaterThan(object Term1, object Term2)
857 {
858 return !YP.termLessThanOrEqual(Term1, Term2);
859 }
860
861 public static bool termGreaterThanOrEqual(object Term1, object Term2)
862 {
863 // termLessThan should ensure that it returns false if terms are equal,
864 // so that this would return true.
865 return !YP.termLessThan(Term1, Term2);
866 }
867
868 public static int compareTerms(object Term1, object Term2)
869 {
870 if (YP.termEqual(Term1, Term2))
871 return 0;
872 else if (YP.termLessThan(Term1, Term2))
873 return -1;
874 else
875 return 1;
876 }
877
878 public static bool ground(object Term)
879 {
880 Term = YP.getValue(Term);
881 if (Term is IUnifiable)
882 return ((IUnifiable)Term).ground();
883 return true;
884 }
885
886 public static IEnumerable<bool> current_op
887 (object Priority, object Specifier, object Operator)
888 {
889 if (_operatorTable == null)
890 {
891 // Initialize.
892 _operatorTable = new IndexedAnswers(3);
893 _operatorTable.addAnswer(new object[] { 1200, Atom.a("xfx"), Atom.a(":-") });
894 _operatorTable.addAnswer(new object[] { 1200, Atom.a("xfx"), Atom.a("-->") });
895 _operatorTable.addAnswer(new object[] { 1200, Atom.a("fx"), Atom.a(":-") });
896 _operatorTable.addAnswer(new object[] { 1200, Atom.a("fx"), Atom.a("?-") });
897 _operatorTable.addAnswer(new object[] { 1100, Atom.a("xfy"), Atom.a(";") });
898 _operatorTable.addAnswer(new object[] { 1050, Atom.a("xfy"), Atom.a("->") });
899 _operatorTable.addAnswer(new object[] { 1000, Atom.a("xfy"), Atom.a(",") });
900 _operatorTable.addAnswer(new object[] { 900, Atom.a("fy"), Atom.a("\\+") });
901 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=") });
902 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("\\=") });
903 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("==") });
904 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("\\==") });
905 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@<") });
906 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@=<") });
907 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@>") });
908 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@>=") });
909 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=..") });
910 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("is") });
911 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=:=") });
912 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=\\=") });
913 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("<") });
914 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=<") });
915 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a(">") });
916 _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a(">=") });
917 _operatorTable.addAnswer(new object[] { 600, Atom.a("xfy"), Atom.a(":") });
918 _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("+") });
919 _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("-") });
920 _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("/\\") });
921 _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("\\/") });
922 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("*") });
923 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("/") });
924 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("//") });
925 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("rem") });
926 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("mod") });
927 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("<<") });
928 _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a(">>") });
929 _operatorTable.addAnswer(new object[] { 200, Atom.a("xfx"), Atom.a("**") });
930 _operatorTable.addAnswer(new object[] { 200, Atom.a("xfy"), Atom.a("^") });
931 _operatorTable.addAnswer(new object[] { 200, Atom.a("fy"), Atom.a("-") });
932 _operatorTable.addAnswer(new object[] { 200, Atom.a("fy"), Atom.a("\\") });
933 // Debug: This is hacked in to run the Prolog test suite until we implement op/3.
934 _operatorTable.addAnswer(new object[] { 20, Atom.a("xfx"), Atom.a("<--") });
935 }
936
937 return _operatorTable.match(new object[] { Priority, Specifier, Operator });
938 }
939
940 public static IEnumerable<bool> atom_length(object atom, object Length)
941 {
942 atom = YP.getValue(atom);
943 Length = YP.getValue(Length);
944 if (atom is Variable)
945 throw new PrologException(Atom.a("instantiation_error"),
946 "Expected atom(Arg1) but it is an unbound variable");
947 if (!(atom is Atom))
948 throw new PrologException
949 (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not an atom");
950 if (!(Length is Variable))
951 {
952 if (!(Length is int))
953 throw new PrologException
954 (new Functor2("type_error", Atom.a("integer"), Length), "Length must be var or integer");
955 if ((int)Length < 0)
956 throw new PrologException
957 (new Functor2("domain_error", Atom.a("not_less_than_zero"), Length),
958 "Length must not be less than zero");
959 }
960 return YP.unify(Length, ((Atom)atom)._name.Length);
961 }
962
963 public static IEnumerable<bool> atom_concat(object Start, object End, object Whole)
964 {
965 // Debug: Should we try to preserve the _declaringClass?
966 Start = YP.getValue(Start);
967 End = YP.getValue(End);
968 Whole = YP.getValue(Whole);
969 if (Whole is Variable)
970 {
971 if (Start is Variable)
972 throw new PrologException(Atom.a("instantiation_error"),
973 "Arg 1 Start and arg 3 Whole are both var");
974 if (End is Variable)
975 throw new PrologException(Atom.a("instantiation_error"),
976 "Arg 2 End and arg 3 Whole are both var");
977 if (!(Start is Atom))
978 throw new PrologException
979 (new Functor2("type_error", Atom.a("atom"), Start), "Arg 1 Start is not an atom");
980 if (!(End is Atom))
981 throw new PrologException
982 (new Functor2("type_error", Atom.a("atom"), End), "Arg 2 End is not an atom");
983
984 foreach (bool l1 in YP.unify(Whole, Atom.a(((Atom)Start)._name + ((Atom)End)._name)))
985 yield return false;
986 }
987 else
988 {
989 if (!(Whole is Atom))
990 throw new PrologException
991 (new Functor2("type_error", Atom.a("atom"), Whole), "Arg 3 Whole is not an atom");
992 bool gotStartLength = false;
993 int startLength = 0;
994 if (!(Start is Variable))
995 {
996 if (!(Start is Atom))
997 throw new PrologException
998 (new Functor2("type_error", Atom.a("atom"), Start), "Arg 1 Start is not var or atom");
999 startLength = ((Atom)Start)._name.Length;
1000 gotStartLength = true;
1001 }
1002
1003 bool gotEndLength = false;
1004 int endLength = 0;
1005 if (!(End is Variable))
1006 {
1007 if (!(End is Atom))
1008 throw new PrologException
1009 (new Functor2("type_error", Atom.a("atom"), End), "Arg 2 End is not var or atom");
1010 endLength = ((Atom)End)._name.Length;
1011 gotEndLength = true;
1012 }
1013
1014 // We are doing a search through all possible Start and End which concatenate to Whole.
1015 string wholeString = ((Atom)Whole)._name;
1016 for (int i = 0; i <= wholeString.Length; ++i)
1017 {
1018 // If we got either startLength or endLength, we know the lengths have to match so check
1019 // the lengths instead of constructing an Atom to do it.
1020 if (gotStartLength && startLength != i)
1021 continue;
1022 if (gotEndLength && endLength != wholeString.Length - i)
1023 continue;
1024 foreach (bool l1 in YP.unify(Start, Atom.a(wholeString.Substring(0, i))))
1025 {
1026 foreach (bool l2 in YP.unify(End, Atom.a(wholeString.Substring(i, wholeString.Length - i))))
1027 yield return false;
1028 }
1029 }
1030 }
1031 }
1032
1033 public static IEnumerable<bool> sub_atom
1034 (object atom, object Before, object Length, object After, object Sub_atom)
1035 {
1036 // Debug: Should we try to preserve the _declaringClass?
1037 atom = YP.getValue(atom);
1038 Before = YP.getValue(Before);
1039 Length = YP.getValue(Length);
1040 After = YP.getValue(After);
1041 Sub_atom = YP.getValue(Sub_atom);
1042 if (atom is Variable)
1043 throw new PrologException(Atom.a("instantiation_error"),
1044 "Expected atom(Arg1) but it is an unbound variable");
1045 if (!(atom is Atom))
1046 throw new PrologException
1047 (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not an atom");
1048 if (!(Sub_atom is Variable))
1049 {
1050 if (!(Sub_atom is Atom))
1051 throw new PrologException
1052 (new Functor2("type_error", Atom.a("atom"), Sub_atom), "Sub_atom is not var or atom");
1053 }
1054
1055 bool beforeIsInt = false;
1056 bool lengthIsInt = false;
1057 bool afterIsInt = false;
1058 if (!(Before is Variable))
1059 {
1060 if (!(Before is int))
1061 throw new PrologException
1062 (new Functor2("type_error", Atom.a("integer"), Before), "Before must be var or integer");
1063 beforeIsInt = true;
1064 if ((int)Before < 0)
1065 throw new PrologException
1066 (new Functor2("domain_error", Atom.a("not_less_than_zero"), Before),
1067 "Before must not be less than zero");
1068 }
1069 if (!(Length is Variable))
1070 {
1071 if (!(Length is int))
1072 throw new PrologException
1073 (new Functor2("type_error", Atom.a("integer"), Length), "Length must be var or integer");
1074 lengthIsInt = true;
1075 if ((int)Length < 0)
1076 throw new PrologException
1077 (new Functor2("domain_error", Atom.a("not_less_than_zero"), Length),
1078 "Length must not be less than zero");
1079 }
1080 if (!(After is Variable))
1081 {
1082 if (!(After is int))
1083 throw new PrologException
1084 (new Functor2("type_error", Atom.a("integer"), After), "After must be var or integer");
1085 afterIsInt = true;
1086 if ((int)After < 0)
1087 throw new PrologException
1088 (new Functor2("domain_error", Atom.a("not_less_than_zero"), After),
1089 "After must not be less than zero");
1090 }
1091
1092 Atom atomAtom = (Atom)atom;
1093 int atomLength = atomAtom._name.Length;
1094 if (beforeIsInt && lengthIsInt)
1095 {
1096 // Special case: the caller is just trying to extract a substring, so do it quickly.
1097 int xAfter = atomLength - (int)Before - (int)Length;
1098 if (xAfter >= 0)
1099 {
1100 foreach (bool l1 in YP.unify(After, xAfter))
1101 {
1102 foreach (bool l2 in YP.unify
1103 (Sub_atom, Atom.a(atomAtom._name.Substring((int)Before, (int)Length))))
1104 yield return false;
1105 }
1106 }
1107 }
1108 else if (afterIsInt && lengthIsInt)
1109 {
1110 // Special case: the caller is just trying to extract a substring, so do it quickly.
1111 int xBefore = atomLength - (int)After - (int)Length;
1112 if (xBefore >= 0)
1113 {
1114 foreach (bool l1 in YP.unify(Before, xBefore))
1115 {
1116 foreach (bool l2 in YP.unify
1117 (Sub_atom, Atom.a(atomAtom._name.Substring(xBefore, (int)Length))))
1118 yield return false;
1119 }
1120 }
1121 }
1122 else
1123 {
1124 // We are underconstrained and doing a search, so go through all possibilities.
1125 for (int xBefore = 0; xBefore <= atomLength; ++xBefore)
1126 {
1127 foreach (bool l1 in YP.unify(Before, xBefore))
1128 {
1129 for (int xLength = 0; xLength <= (atomLength - xBefore); ++xLength)
1130 {
1131 foreach (bool l2 in YP.unify(Length, xLength))
1132 {
1133 foreach (bool l3 in YP.unify(After, atomLength - (xBefore + xLength)))
1134 {
1135 foreach (bool l4 in YP.unify
1136 (Sub_atom, Atom.a(atomAtom._name.Substring(xBefore, xLength))))
1137 yield return false;
1138 }
1139 }
1140 }
1141 }
1142 }
1143 }
1144 }
1145
1146 public static IEnumerable<bool> atom_chars(object atom, object List)
1147 {
1148 atom = YP.getValue(atom);
1149 List = YP.getValue(List);
1150
1151 if (atom is Variable)
1152 {
1153 if (List is Variable)
1154 throw new PrologException(Atom.a("instantiation_error"),
1155 "Arg 1 Atom and arg 2 List are both unbound variables");
1156 object[] codeArray = ListPair.toArray(List);
1157 if (codeArray == null)
1158 throw new PrologException
1159 (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list");
1160
1161 char[] charArray = new char[codeArray.Length];
1162 for (int i = 0; i < codeArray.Length; ++i)
1163 {
1164 object listAtom = YP.getValue(codeArray[i]);
1165 if (listAtom is Variable)
1166 throw new PrologException(Atom.a("instantiation_error"),
1167 "Arg 2 List has an element which is an unbound variable");
1168 if (!(listAtom is Atom && ((Atom)listAtom)._name.Length == 1))
1169 throw new PrologException
1170 (new Functor2("type_error", Atom.a("character"), listAtom),
1171 "Arg 2 List has an element which is not a one character atom");
1172 charArray[i] = ((Atom)listAtom)._name[0];
1173 }
1174 return YP.unify(atom, Atom.a(new String(charArray)));
1175 }
1176 else
1177 {
1178 if (!(atom is Atom))
1179 throw new PrologException
1180 (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not var or atom");
1181
1182 string atomString = ((Atom)atom)._name;
1183 object charList = Atom.NIL;
1184 // Start from the back to make the list.
1185 for (int i = atomString.Length - 1; i >= 0; --i)
1186 charList = new ListPair(Atom.a(atomString.Substring(i, 1)), charList);
1187 return YP.unify(List, charList);
1188 }
1189 }
1190
1191 public static IEnumerable<bool> atom_codes(object atom, object List)
1192 {
1193 atom = YP.getValue(atom);
1194 List = YP.getValue(List);
1195
1196 if (atom is Variable)
1197 {
1198 if (List is Variable)
1199 throw new PrologException(Atom.a("instantiation_error"),
1200 "Arg 1 Atom and arg 2 List are both unbound variables");
1201 object[] codeArray = ListPair.toArray(List);
1202 if (codeArray == null)
1203 throw new PrologException
1204 (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list");
1205
1206 char[] charArray = new char[codeArray.Length];
1207 for (int i = 0; i < codeArray.Length; ++i)
1208 {
1209 int codeInt;
1210 if (!getInt(codeArray[i], out codeInt) || codeInt < 0)
1211 throw new PrologException
1212 (new Functor1("representation_error", Atom.a("character_code")),
1213 "Element of Arg 2 List is not a character code");
1214 charArray[i] = (char)codeInt;
1215 }
1216 return YP.unify(atom, Atom.a(new String(charArray)));
1217 }
1218 else
1219 {
1220 if (!(atom is Atom))
1221 throw new PrologException
1222 (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not var or atom");
1223
1224 string atomString = ((Atom)atom)._name;
1225 object codeList = Atom.NIL;
1226 // Start from the back to make the list.
1227 for (int i = atomString.Length - 1; i >= 0; --i)
1228 codeList = new ListPair((int)atomString[i], codeList);
1229 return YP.unify(List, codeList);
1230 }
1231 }
1232
1233 public static IEnumerable<bool> number_chars(object Number, object List)
1234 {
1235 Number = YP.getValue(Number);
1236 List = YP.getValue(List);
1237
1238 if (Number is Variable)
1239 {
1240 if (List is Variable)
1241 throw new PrologException(Atom.a("instantiation_error"),
1242 "Arg 1 Number and arg 2 List are both unbound variables");
1243 object[] codeArray = ListPair.toArray(List);
1244 if (codeArray == null)
1245 throw new PrologException
1246 (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list");
1247
1248 char[] charArray = new char[codeArray.Length];
1249 for (int i = 0; i < codeArray.Length; ++i)
1250 {
1251 object listAtom = YP.getValue(codeArray[i]);
1252 if (listAtom is Variable)
1253 throw new PrologException(Atom.a("instantiation_error"),
1254 "Arg 2 List has an element which is an unbound variable");
1255 if (!(listAtom is Atom && ((Atom)listAtom)._name.Length == 1))
1256 throw new PrologException
1257 (new Functor2("type_error", Atom.a("character"), listAtom),
1258 "Arg 2 List has an element which is not a one character atom");
1259 charArray[i] = ((Atom)listAtom)._name[0];
1260 }
1261 return YP.unify(Number, parseNumberString(charArray));
1262 }
1263 else
1264 {
1265 string numberString = null;
1266 // Try converting to an int first.
1267 int intNumber;
1268 if (YP.getInt(Number, out intNumber))
1269 numberString = intNumber.ToString();
1270 else
1271 {
1272 if (!YP.number(Number))
1273 throw new PrologException
1274 (new Functor2("type_error", Atom.a("number"), Number),
1275 "Arg 1 Number is not var or number");
1276 // We just checked, so convertDouble shouldn't throw an exception.
1277 numberString = YP.doubleToString(YP.convertDouble(Number));
1278 }
1279
1280 object charList = Atom.NIL;
1281 // Start from the back to make the list.
1282 for (int i = numberString.Length - 1; i >= 0; --i)
1283 charList = new ListPair(Atom.a(numberString.Substring(i, 1)), charList);
1284 return YP.unify(List, charList);
1285 }
1286 }
1287
1288 public static IEnumerable<bool> number_codes(object Number, object List)
1289 {
1290 Number = YP.getValue(Number);
1291 List = YP.getValue(List);
1292
1293 if (Number is Variable)
1294 {
1295 if (List is Variable)
1296 throw new PrologException(Atom.a("instantiation_error"),
1297 "Arg 1 Number and arg 2 List are both unbound variables");
1298 object[] codeArray = ListPair.toArray(List);
1299 if (codeArray == null)
1300 throw new PrologException
1301 (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list");
1302
1303 char[] charArray = new char[codeArray.Length];
1304 for (int i = 0; i < codeArray.Length; ++i)
1305 {
1306 int codeInt;
1307 if (!getInt(codeArray[i], out codeInt) || codeInt < 0)
1308 throw new PrologException
1309 (new Functor1("representation_error", Atom.a("character_code")),
1310 "Element of Arg 2 List is not a character code");
1311 charArray[i] = (char)codeInt;
1312 }
1313 return YP.unify(Number, parseNumberString(charArray));
1314 }
1315 else
1316 {
1317 string numberString = null;
1318 // Try converting to an int first.
1319 int intNumber;
1320 if (YP.getInt(Number, out intNumber))
1321 numberString = intNumber.ToString();
1322 else
1323 {
1324 if (!YP.number(Number))
1325 throw new PrologException
1326 (new Functor2("type_error", Atom.a("number"), Number),
1327 "Arg 1 Number is not var or number");
1328 // We just checked, so convertDouble shouldn't throw an exception.
1329 numberString = YP.doubleToString(YP.convertDouble(Number));
1330 }
1331
1332 object codeList = Atom.NIL;
1333 // Start from the back to make the list.
1334 for (int i = numberString.Length - 1; i >= 0; --i)
1335 codeList = new ListPair((int)numberString[i], codeList);
1336 return YP.unify(List, codeList);
1337 }
1338 }
1339
1340 /// <summary>
1341 /// Used by number_chars and number_codes. Return the number in charArray or
1342 /// throw an exception if can't parse.
1343 /// </summary>
1344 /// <param name="numberString"></param>
1345 /// <returns></returns>
1346 private static object parseNumberString(char[] charArray)
1347 {
1348 string numberString = new String(charArray);
1349 if (charArray.Length == 3 && numberString.StartsWith("0'"))
1350 // This is a char code.
1351 return (int)charArray[2];
1352 if (numberString.StartsWith("0x"))
1353 {
1354 try
1355 {
1356 return Int32.Parse
1357 (numberString.Substring(2), System.Globalization.NumberStyles.AllowHexSpecifier);
1358 }
1359 catch (FormatException)
1360 {
1361 throw new PrologException
1362 (new Functor1("syntax_error", Atom.a("number_format: " + numberString)),
1363 "Arg 2 List is not a list for a hexadecimal number");
1364 }
1365 }
1366 // Debug: Is there a way in C# to ask if a string parses as int without throwing an exception?
1367 try
1368 {
1369 // Try an int first.
1370 return Convert.ToInt32(numberString);
1371 }
1372 catch (FormatException) { }
1373 try
1374 {
1375 return Convert.ToDouble(numberString);
1376 }
1377 catch (FormatException)
1378 {
1379 throw new PrologException
1380 (new Functor1("syntax_error", Atom.a("number_format: " + numberString)),
1381 "Arg 2 List is not a list for a number");
1382 }
1383 }
1384
1385 public static IEnumerable<bool> char_code(object Char, object Code)
1386 {
1387 Char = YP.getValue(Char);
1388 Code = YP.getValue(Code);
1389
1390 int codeInt = 0;
1391 if (!(Code is Variable))
1392 {
1393 // Get codeInt now so we type check it whether or not Char is Variable.
1394 if (!getInt(Code, out codeInt))
1395 throw new PrologException
1396 (new Functor2("type_error", Atom.a("integer"), Code),
1397 "Arg 2 Code is not var or a character code");
1398 if (codeInt < 0)
1399 throw new PrologException
1400 (new Functor1("representation_error", Atom.a("character_code")),
1401 "Arg 2 Code is not a character code");
1402 }
1403
1404 if (Char is Variable)
1405 {
1406 if (Code is Variable)
1407 throw new PrologException(Atom.a("instantiation_error"),
1408 "Arg 1 Char and arg 2 Code are both unbound variables");
1409
1410 return YP.unify(Char, Atom.a(new String(new char[] {(char)codeInt} )));
1411 }
1412 else
1413 {
1414 if (!(Char is Atom) || ((Atom)Char)._name.Length != 1)
1415 throw new PrologException
1416 (new Functor2("type_error", Atom.a("character"), Char),
1417 "Arg 1 Char is not var or one-character atom");
1418
1419 if (Code is Variable)
1420 return YP.unify(Code, (int)((Atom)Char)._name[0]);
1421 else
1422 // Use codeInt to handle whether Code is supplied as, e.g., 97 or 0'a .
1423 return YP.unify(codeInt, (int)((Atom)Char)._name[0]);
1424 }
1425 }
1426
1427 /// <summary>
1428 /// If term is an Atom or functor type, return its name.
1429 /// Otherwise, return term.
1430 /// </summary>
1431 /// <param name="term"></param>
1432 /// <returns></returns>
1433 public static object getFunctorName(object term)
1434 {
1435 term = YP.getValue(term);
1436 if (term is Functor1)
1437 return ((Functor1)term)._name;
1438 else if (term is Functor2)
1439 return ((Functor2)term)._name;
1440 else if (term is Functor3)
1441 return ((Functor3)term)._name;
1442 else if (term is Functor)
1443 return ((Functor)term)._name;
1444 else
1445 return term;
1446 }
1447
1448 /// <summary>
1449 /// If term is an Atom or functor type, return an array of its args.
1450 /// Otherwise, return an empty array.
1451 /// </summary>
1452 /// <param name="term"></param>
1453 /// <returns></returns>
1454 public static object[] getFunctorArgs(object term)
1455 {
1456 term = YP.getValue(term);
1457 if (term is Functor1)
1458 {
1459 Functor1 functor = (Functor1)term;
1460 return new object[] { functor._arg1 };
1461 }
1462 else if (term is Functor2)
1463 {
1464 Functor2 functor = (Functor2)term;
1465 return new object[] { functor._arg1, functor._arg2 };
1466 }
1467 else if (term is Functor3)
1468 {
1469 Functor3 functor = (Functor3)term;
1470 return new object[] { functor._arg1, functor._arg2, functor._arg3 };
1471 }
1472 else if (term is Functor) {
1473 Functor functor = (Functor)term;
1474 return functor._args;
1475 }
1476 else
1477 return new object[0];
1478 }
1479
1480 public static bool var(object Term)
1481 {
1482 return YP.getValue(Term) is Variable;
1483 }
1484
1485 public static bool nonvar(object Term)
1486 {
1487 return !YP.var(Term);
1488 }
1489
1490 public static bool atom(object Term)
1491 {
1492 return YP.getValue(Term) is Atom;
1493 }
1494
1495 public static bool integer(object Term)
1496 {
1497 // Debug: Should exhaustively check for all integer types.
1498 return getValue(Term) is int;
1499 }
1500
1501 // Use isFloat instead of float because it is a reserved keyword.
1502 public static bool isFloat(object Term)
1503 {
1504 // Debug: Should exhaustively check for all float types.
1505 return getValue(Term) is double;
1506 }
1507
1508 public static bool number(object Term)
1509 {
1510 return YP.integer(Term) || YP.isFloat(Term);
1511 }
1512
1513 public static bool atomic(object Term)
1514 {
1515 return YP.atom(Term) || YP.number(Term);
1516 }
1517
1518 public static bool compound(object Term)
1519 {
1520 Term = getValue(Term);
1521 return Term is Functor1 || Term is Functor2 || Term is Functor3 || Term is Functor;
1522 }
1523
1524 /// <summary>
1525 /// If input is a TextReader, use it. If input is an Atom or String, create a StreamReader with the
1526 /// input as the filename. If input is a Prolog list, then read character codes from it.
1527 /// </summary>
1528 /// <param name="input"></param>
1529 public static void see(object input)
1530 {
1531 input = YP.getValue(input);
1532 if (input is Variable)
1533 throw new PrologException(Atom.a("instantiation_error"), "Arg is an unbound variable");
1534
1535 if (input == null)
1536 {
1537 _inputStream = null;
1538 return;
1539 }
1540 if (input is TextReader)
1541 {
1542 _inputStream = (TextReader)input;
1543 return;
1544 }
1545 else if (input is Atom)
1546 {
1547 _inputStream = new StreamReader(((Atom)input)._name);
1548 return;
1549 }
1550 else if (input is String)
1551 {
1552 _inputStream = new StreamReader((String)input);
1553 return;
1554 }
1555 else if (input is Functor2 && ((Functor2)input)._name == Atom.DOT)
1556 {
1557 _inputStream = new CodeListReader(input);
1558 return;
1559 }
1560 else
1561 throw new PrologException
1562 (new Functor2("domain_error", Atom.a("stream_or_alias"), input),
1563 "Input stream specifier not recognized");
1564 }
1565
1566 public static void seen()
1567 {
1568 if (_inputStream == null)
1569 return;
1570 if (_inputStream == Console.In)
1571 return;
1572 _inputStream.Close();
1573 _inputStream = Console.In;
1574 }
1575
1576 public static IEnumerable<bool> current_input(object Stream)
1577 {
1578 return YP.unify(Stream, _inputStream);
1579 }
1580
1581 /// <summary>
1582 /// If output is a TextWriter, use it. If output is an Atom or a String, create a StreamWriter
1583 /// with the input as the filename.
1584 /// </summary>
1585 /// <param name="output"></param>
1586 public static void tell(object output)
1587 {
1588 output = YP.getValue(output);
1589 if (output is Variable)
1590 throw new PrologException(Atom.a("instantiation_error"), "Arg is an unbound variable");
1591
1592 if (output == null)
1593 {
1594 _outputStream = null;
1595 return;
1596 }
1597 if (output is TextWriter)
1598 {
1599 _outputStream = (TextWriter)output;
1600 return;
1601 }
1602 else if (output is Atom)
1603 {
1604 _outputStream = new StreamWriter(((Atom)output)._name);
1605 return;
1606 }
1607 else if (output is String)
1608 {
1609 _outputStream = new StreamWriter((String)output);
1610 return;
1611 }
1612 else
1613 throw new PrologException
1614 (new Functor2("domain_error", Atom.a("stream_or_alias"), output),
1615 "Can't open stream for " + output);
1616 }
1617
1618 public static void told()
1619 {
1620 if (_outputStream == null)
1621 return;
1622 if (_outputStream == Console.Out)
1623 return;
1624 _outputStream.Close();
1625 _outputStream = Console.Out;
1626 }
1627
1628 public static IEnumerable<bool> current_output(object Stream)
1629 {
1630 return YP.unify(Stream, _outputStream);
1631 }
1632
1633 public static void write(object x)
1634 {
1635 if (_outputStream == null)
1636 return;
1637 x = YP.getValue(x);
1638 if (x is double)
1639 _outputStream.Write(doubleToString((double)x));
1640 else
1641 _outputStream.Write(x.ToString());
1642 }
1643
1644 /// <summary>
1645 /// Format x as a string, making sure that it won't parse as an int later. I.e., for 1.0, don't just
1646 /// use "1" which will parse as an int.
1647 /// </summary>
1648 /// <param name="x"></param>
1649 /// <returns></returns>
1650 private static string doubleToString(double x)
1651 {
1652 string xString = x.ToString();
1653 // Debug: Is there a way in C# to ask if a string parses as int without throwing an exception?
1654 try
1655 {
1656 Convert.ToInt32(xString);
1657 // The string will parse as an int, not a double, so re-format so that it does.
1658 // Use float if possible, else exponential if it would be too big.
1659 return x.ToString(x >= 100000.0 ? "E1" : "f1");
1660 }
1661 catch (FormatException)
1662 {
1663 // Assume it will parse as a double.
1664 }
1665 return xString;
1666 }
1667
1668 public static void put_code(object x)
1669 {
1670 if (_outputStream == null)
1671 return;
1672 if (var(x))
1673 throw new PrologException(Atom.a("instantiation_error"), "Arg 1 is an unbound variable");
1674 int xInt;
1675 if (!getInt(x, out xInt))
1676 throw new PrologException
1677 (new Functor2("type_error", Atom.a("integer"), x), "Arg 1 must be integer");
1678 _outputStream.Write((char)xInt);
1679 }
1680
1681 public static void nl()
1682 {
1683 if (_outputStream == null)
1684 return;
1685 _outputStream.WriteLine();
1686 }
1687
1688 public static IEnumerable<bool> get_code(object code)
1689 {
1690 if (_inputStream == null)
1691 return YP.unify(code, -1);
1692 else
1693 return YP.unify(code, _inputStream.Read());
1694 }
1695
1696 public static void asserta(object Term, Type declaringClass)
1697 {
1698 assertDynamic(Term, declaringClass, true);
1699 }
1700
1701 public static void assertz(object Term, Type declaringClass)
1702 {
1703 assertDynamic(Term, declaringClass, false);
1704 }
1705
1706 public static void assertDynamic(object Term, Type declaringClass, bool prepend)
1707 {
1708 Term = getValue(Term);
1709 if (Term is Variable)
1710 throw new PrologException("instantiation_error", "Term to assert is an unbound variable");
1711
1712 Variable.CopyStore copyStore = new Variable.CopyStore();
1713 object TermCopy = makeCopy(Term, copyStore);
1714 object Head, Body;
1715 if (TermCopy is Functor2 && ((Functor2)TermCopy)._name == Atom.RULE)
1716 {
1717 Head = YP.getValue(((Functor2)TermCopy)._arg1);
1718 Body = YP.getValue(((Functor2)TermCopy)._arg2);
1719 if (Head is Variable)
1720 throw new PrologException("instantiation_error", "Head to assert is an unbound variable");
1721 if (Body is Variable)
1722 throw new PrologException("instantiation_error", "Body to assert is an unbound variable");
1723 }
1724 else
1725 {
1726 Head = TermCopy;
1727 Body = Atom.a("true");
1728 }
1729
1730 Atom name = getFunctorName(Head) as Atom;
1731 if (name == null)
1732 // name is a non-Atom, such as a number.
1733 throw new PrologException
1734 (new Functor2("type_error", Atom.a("callable"), Head), "Term to assert is not callable");
1735 object[] args = getFunctorArgs(Head);
1736 if (isSystemPredicate(name, args.Length))
1737 throw new PrologException
1738 (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"),
1739 new Functor2(Atom.SLASH, name, args.Length)),
1740 "Assert cannot modify static predicate " + name + "/" + args.Length);
1741
1742 if (copyStore.getNUniqueVariables() == 0 && Body == Atom.a("true"))
1743 {
1744 // This is a fact with no unbound variables
1745 // assertFact and prependFact use IndexedAnswers, so don't we don't need to compile.
1746 if (prepend)
1747 prependFact(name, args);
1748 else
1749 assertFact(name, args);
1750
1751 return;
1752 }
1753
1754 IClause clause = YPCompiler.compileAnonymousClause(Head, Body, declaringClass);
1755 // We expect clause to be a ClauseHeadAndBody (from Compiler.compileAnonymousFunction)
1756 // so we can set the Head and Body.
1757 if (clause is ClauseHeadAndBody)
1758 ((ClauseHeadAndBody)clause).setHeadAndBody(Head, Body);
1759
1760 // Add the clause to the entry in _predicatesStore.
1761 NameArity nameArity = new NameArity(name, args.Length);
1762 List<IClause> clauses;
1763 if (!_predicatesStore.TryGetValue(nameArity, out clauses))
1764 // Create an entry for the nameArity.
1765 _predicatesStore[nameArity] = (clauses = new List<IClause>());
1766
1767 if (prepend)
1768 clauses.Insert(0, clause);
1769 else
1770 clauses.Add(clause);
1771 }
1772
1773 private static bool isSystemPredicate(Atom name, int arity)
1774 {
1775 if (arity == 2 && (name == Atom.a(",") || name == Atom.a(";") || name == Atom.DOT))
1776 return true;
1777 // Use the same mapping to static predicates in YP as the compiler.
1778 foreach (bool l1 in YPCompiler.functorCallYPFunctionName(name, arity, new Variable()))
1779 return true;
1780 // Debug: Do we need to check if name._module is null?
1781 return false;
1782 }
1783
1784 /// <summary>
1785 /// Assert values at the end of the set of facts for the predicate with the
1786 /// name and with arity values.Length.
1787 /// </summary>
1788 /// <param name="name">must be an Atom</param>
1789 /// <param name="values">the array of arguments to the fact predicate.
1790 /// It is an error if an value has an unbound variable.</param>
1791 public static void assertFact(Atom name, object[] values)
1792 {
1793 NameArity nameArity = new NameArity(name, values.Length);
1794 List<IClause> clauses;
1795 IndexedAnswers indexedAnswers;
1796 if (!_predicatesStore.TryGetValue(nameArity, out clauses))
1797 {
1798 // Create an IndexedAnswers as the only clause of the predicate.
1799 _predicatesStore[nameArity] = (clauses = new List<IClause>());
1800 clauses.Add(indexedAnswers = new IndexedAnswers(values.Length));
1801 }
1802 else
1803 {
1804 indexedAnswers = null;
1805 if (clauses.Count >= 1)
1806 indexedAnswers = clauses[clauses.Count - 1] as IndexedAnswers;
1807 if (indexedAnswers == null)
1808 // The latest clause is not an IndexedAnswers, so add one.
1809 clauses.Add(indexedAnswers = new IndexedAnswers(values.Length));
1810 }
1811
1812 indexedAnswers.addAnswer(values);
1813 }
1814
1815 /// <summary>
1816 /// Assert values, prepending to the front of the set of facts for the predicate with the
1817 /// name and with arity values.Length.
1818 /// </summary>
1819 /// <param name="name">must be an Atom</param>
1820 /// <param name="values">the array of arguments to the fact predicate.
1821 /// It is an error if an value has an unbound variable.</param>
1822 public static void prependFact(Atom name, object[] values)
1823 {
1824 NameArity nameArity = new NameArity(name, values.Length);
1825 List<IClause> clauses;
1826 IndexedAnswers indexedAnswers;
1827 if (!_predicatesStore.TryGetValue(nameArity, out clauses))
1828 {
1829 // Create an IndexedAnswers as the only clause of the predicate.
1830 _predicatesStore[nameArity] = (clauses = new List<IClause>());
1831 clauses.Add(indexedAnswers = new IndexedAnswers(values.Length));
1832 }
1833 else
1834 {
1835 indexedAnswers = null;
1836 if (clauses.Count >= 1)
1837 indexedAnswers = clauses[0] as IndexedAnswers;
1838 if (indexedAnswers == null)
1839 // The first clause is not an IndexedAnswers, so prepend one.
1840 clauses.Insert(0, indexedAnswers = new IndexedAnswers(values.Length));
1841 }
1842
1843 indexedAnswers.prependAnswer(values);
1844 }
1845
1846 /// <summary>
1847 /// Match all clauses of the dynamic predicate with the name and with arity
1848 /// arguments.Length.
1849 /// If the predicate is not defined, return the result of YP.unknownPredicate.
1850 /// </summary>
1851 /// <param name="name">must be an Atom</param>
1852 /// <param name="arguments">an array of arity number of arguments</param>
1853 /// <returns>an iterator which you can use in foreach</returns>
1854 public static IEnumerable<bool> matchDynamic(Atom name, object[] arguments)
1855 {
1856 List<IClause> clauses;
1857 if (!_predicatesStore.TryGetValue(new NameArity(name, arguments.Length), out clauses))
1858 return unknownPredicate(name, arguments.Length,
1859 "Undefined dynamic predicate: " + name + "/" + arguments.Length);
1860
1861 if (clauses.Count == 1)
1862 // Usually there is only one clause, so return it without needing to wrap it in an iterator.
1863 return clauses[0].match(arguments);
1864 else
1865 return matchAllClauses(clauses, arguments);
1866 }
1867
1868 /// <summary>
1869 /// Call match(arguments) for each IClause in clauses. We make this a separate
1870 /// function so that matchDynamic itself does not need to be an iterator object.
1871 /// </summary>
1872 /// <param name="clauses"></param>
1873 /// <param name="arguments"></param>
1874 /// <returns></returns>
1875 private static IEnumerable<bool> matchAllClauses(List<IClause> clauses, object[] arguments)
1876 {
1877 // Debug: If the caller asserts another clause into this same predicate during yield, the iterator
1878 // over clauses will be corrupted. Should we take the time to copy clauses?
1879 foreach (IClause clause in clauses)
1880 {
1881 foreach (bool lastCall in clause.match(arguments))
1882 {
1883 yield return false;
1884 if (lastCall)
1885 // This happens after a cut in a clause.
1886 yield break;
1887 }
1888 }
1889 }
1890
1891 /// <summary>
1892 /// If _prologFlags["unknown"] is fail then return fail(), else if
1893 /// _prologFlags["unknown"] is warning then write the message to YP.write and
1894 /// return fail(), else throw a PrologException for existence_error. .
1895 /// </summary>
1896 /// <param name="name"></param>
1897 /// <param name="arity"></param>
1898 /// <param name="message"></param>
1899 /// <returns></returns>
1900 public static IEnumerable<bool> unknownPredicate(Atom name, int arity, string message)
1901 {
1902 establishPrologFlags();
1903
1904 if (_prologFlags["unknown"] == Atom.a("fail"))
1905 return fail();
1906 else if (_prologFlags["unknown"] == Atom.a("warning"))
1907 {
1908 write(message);
1909 nl();
1910 return fail();
1911 }
1912 else
1913 throw new PrologException
1914 (new Functor2
1915 (Atom.a("existence_error"), Atom.a("procedure"),
1916 new Functor2(Atom.SLASH, name, arity)), message);
1917 }
1918
1919 /// <summary>
1920 /// This is deprecated and just calls matchDynamic. This matches all clauses,
1921 /// not just the ones defined with assertFact.
1922 /// </summary>
1923 /// <param name="name"></param>
1924 /// <param name="arguments"></param>
1925 /// <returns></returns>
1926 public static IEnumerable<bool> matchFact(Atom name, object[] arguments)
1927 {
1928 return matchDynamic(name, arguments);
1929 }
1930
1931 public static IEnumerable<bool> clause(object Head, object Body)
1932 {
1933 Head = getValue(Head);
1934 Body = getValue(Body);
1935 if (Head is Variable)
1936 throw new PrologException("instantiation_error", "Head is an unbound variable");
1937
1938 Atom name = getFunctorName(Head) as Atom;
1939 if (name == null)
1940 // name is a non-Atom, such as a number.
1941 throw new PrologException
1942 (new Functor2("type_error", Atom.a("callable"), Head), "Head is not callable");
1943 object[] args = getFunctorArgs(Head);
1944 if (isSystemPredicate(name, args.Length))
1945 throw new PrologException
1946 (new Functor3("permission_error", Atom.a("access"), Atom.a("private_procedure"),
1947 new Functor2(Atom.SLASH, name, args.Length)),
1948 "clause cannot access private predicate " + name + "/" + args.Length);
1949 if (!(Body is Variable) && !(YP.getFunctorName(Body) is Atom))
1950 throw new PrologException
1951 (new Functor2("type_error", Atom.a("callable"), Body), "Body is not callable");
1952
1953 List<IClause> clauses;
1954 if (!_predicatesStore.TryGetValue(new NameArity(name, args.Length), out clauses))
1955 yield break;
1956 // The caller can assert another clause into this same predicate during yield, so we have to
1957 // make a copy of the clauses.
1958 foreach (IClause predicateClause in clauses.ToArray())
1959 {
1960 foreach (bool l1 in predicateClause.clause(Head, Body))
1961 yield return false;
1962 }
1963 }
1964
1965 public static IEnumerable<bool> retract(object Term)
1966 {
1967 Term = getValue(Term);
1968 if (Term is Variable)
1969 throw new PrologException("instantiation_error", "Term to retract is an unbound variable");
1970
1971 object Head, Body;
1972 if (Term is Functor2 && ((Functor2)Term)._name == Atom.RULE)
1973 {
1974 Head = YP.getValue(((Functor2)Term)._arg1);
1975 Body = YP.getValue(((Functor2)Term)._arg2);
1976 }
1977 else
1978 {
1979 Head = Term;
1980 Body = Atom.a("true");
1981 }
1982 if (Head is Variable)
1983 throw new PrologException("instantiation_error", "Head is an unbound variable");
1984
1985 Atom name = getFunctorName(Head) as Atom;
1986 if (name == null)
1987 // name is a non-Atom, such as a number.
1988 throw new PrologException
1989 (new Functor2("type_error", Atom.a("callable"), Head), "Head is not callable");
1990 object[] args = getFunctorArgs(Head);
1991 if (isSystemPredicate(name, args.Length))
1992 throw new PrologException
1993 (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"),
1994 new Functor2(Atom.SLASH, name, args.Length)),
1995 "clause cannot access private predicate " + name + "/" + args.Length);
1996 if (!(Body is Variable) && !(YP.getFunctorName(Body) is Atom))
1997 throw new PrologException
1998 (new Functor2("type_error", Atom.a("callable"), Body), "Body is not callable");
1999
2000 List<IClause> clauses;
2001 if (!_predicatesStore.TryGetValue(new NameArity(name, args.Length), out clauses))
2002 yield break;
2003 // The caller can assert another clause into this same predicate during yield, so we have to
2004 // make a copy of the clauses.
2005 foreach (IClause predicateClause in clauses.ToArray())
2006 {
2007 if (predicateClause is IndexedAnswers)
2008 {
2009 // IndexedAnswers handles its own retract. Even if it removes all of its
2010 // answers, it is OK to leave it empty as one of the elements in clauses.
2011 foreach (bool l1 in ((IndexedAnswers)predicateClause).retract(Head, Body))
2012 yield return false;
2013 }
2014 else
2015 {
2016 foreach (bool l1 in predicateClause.clause(Head, Body))
2017 {
2018 clauses.Remove(predicateClause);
2019 yield return false;
2020 }
2021 }
2022 }
2023 }
2024
2025 /// <summary>
2026 /// This is deprecated for backward compatibility. You should use retractall.
2027 /// </summary>
2028 /// <param name="name">must be an Atom</param>
2029 /// <param name="arguments">an array of arity number of arguments</param>
2030 public static void retractFact(Atom name, object[] arguments)
2031 {
2032 retractall(Functor.make(name, arguments));
2033 }
2034
2035 /// <summary>
2036 /// Retract all dynamic clauses which unify with Head. If this matches all clauses in a predicate,
2037 /// the predicate is still defined. To completely remove the predicate, see abolish.
2038 /// </summary>
2039 /// <param name="Head"></param>
2040 public static void retractall(object Head)
2041 {
2042 object name = YP.getFunctorName(Head);
2043 object[] arguments = getFunctorArgs(Head);
2044 if (!(name is Atom))
2045 return;
2046 NameArity nameArity = new NameArity((Atom)name, arguments.Length);
2047 List<IClause> clauses;
2048 if (!_predicatesStore.TryGetValue(nameArity, out clauses))
2049 // Can't find, so ignore.
2050 return;
2051
2052 foreach (object arg in arguments)
2053 {
2054 if (!YP.var(arg))
2055 throw new InvalidOperationException
2056 ("Until matching retractall is supported, all arguments must be unbound to retract all clauses");
2057 }
2058 // Clear all clauses.
2059 _predicatesStore[nameArity] = new List<IClause>();
2060 }
2061
2062 /// <summary>
2063 /// If NameSlashArity is var, match with all the dynamic predicates using the
2064 /// Name/Artity form.
2065 /// If NameSlashArity is not var, check if the Name/Arity exists as a static or
2066 /// dynamic predicate.
2067 /// </summary>
2068 /// <param name="NameSlashArity"></param>
2069 /// <param name="declaringClass">if not null, used to resolve references to the default
2070 /// module Atom.a("")</param>
2071 /// <returns></returns>
2072 public static IEnumerable<bool> current_predicate(object NameSlashArity, Type declaringClass)
2073 {
2074 NameSlashArity = YP.getValue(NameSlashArity);
2075 // First check if Name and Arity are nonvar so we can do a direct lookup.
2076 if (YP.ground(NameSlashArity))
2077 {
2078 Functor2 NameArityFunctor = NameSlashArity as Functor2;
2079 if (!(NameArityFunctor != null && NameArityFunctor._name == Atom.SLASH))
2080 throw new PrologException
2081 (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity),
2082 "Must be a name/arity predicate indicator");
2083 object name = YP.getValue(NameArityFunctor._arg1);
2084 object arity = YP.getValue(NameArityFunctor._arg2);
2085 if (name is Variable || arity is Variable)
2086 throw new PrologException
2087 ("instantiation_error", "Predicate indicator name or arity is an unbound variable");
2088 if (!(name is Atom && arity is int))
2089 throw new PrologException
2090 (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity),
2091 "Must be a name/arity predicate indicator");
2092 if ((int)arity < 0)
2093 throw new PrologException
2094 (new Functor2("domain_error", Atom.a("not_less_than_zero"), arity),
2095 "Arity may not be less than zero");
2096
2097 if (YPCompiler.isCurrentPredicate((Atom)name, (int)arity, declaringClass))
2098 // The predicate is defined.
2099 yield return false;
2100 }
2101 else
2102 {
2103 foreach (NameArity key in _predicatesStore.Keys)
2104 {
2105 foreach (bool l1 in YP.unify
2106 (new Functor2(Atom.SLASH, key._name, key._arity), NameSlashArity))
2107 yield return false;
2108 }
2109 }
2110 }
2111
2112 /// <summary>
2113 /// Return true if the dynamic predicate store has an entry for the predicate
2114 /// with name and arity.
2115 /// </summary>
2116 /// <param name="name"></param>
2117 /// <param name="arity"></param>
2118 /// <returns></returns>
2119 public static bool isDynamicCurrentPredicate(Atom name, int arity)
2120 {
2121 return _predicatesStore.ContainsKey(new NameArity(name, arity));
2122 }
2123
2124 public static void abolish(object NameSlashArity)
2125 {
2126 NameSlashArity = YP.getValue(NameSlashArity);
2127 if (NameSlashArity is Variable)
2128 throw new PrologException
2129 ("instantiation_error", "Predicate indicator is an unbound variable");
2130 Functor2 NameArityFunctor = NameSlashArity as Functor2;
2131 if (!(NameArityFunctor != null && NameArityFunctor._name == Atom.SLASH))
2132 throw new PrologException
2133 (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity),
2134 "Must be a name/arity predicate indicator");
2135 object name = YP.getValue(NameArityFunctor._arg1);
2136 object arity = YP.getValue(NameArityFunctor._arg2);
2137 if (name is Variable || arity is Variable)
2138 throw new PrologException
2139 ("instantiation_error", "Predicate indicator name or arity is an unbound variable");
2140 if (!(name is Atom))
2141 throw new PrologException
2142 (new Functor2("type_error", Atom.a("atom"), name),
2143 "Predicate indicator name must be an atom");
2144 if (!(arity is int))
2145 throw new PrologException
2146 (new Functor2("type_error", Atom.a("integer"), arity),
2147 "Predicate indicator arity must be an integer");
2148 if ((int)arity < 0)
2149 throw new PrologException
2150 (new Functor2("domain_error", Atom.a("not_less_than_zero"), arity),
2151 "Arity may not be less than zero");
2152 if ((int)arity > MAX_ARITY)
2153 throw new PrologException
2154 (new Functor1("representation_error", Atom.a("max_arity")),
2155 "Arity may not be greater than " + MAX_ARITY);
2156
2157 if (isSystemPredicate((Atom)name, (int)arity))
2158 throw new PrologException
2159 (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"),
2160 new Functor2(Atom.SLASH, name, arity)),
2161 "Abolish cannot modify static predicate " + name + "/" + arity);
2162 _predicatesStore.Remove(new NameArity((Atom)name, (int)arity));
2163 }
2164
2165 /// <summary>
2166 /// If Goal is a simple predicate, call YP.getFunctorName(Goal) using arguments from
2167 /// YP.getFunctorArgs(Goal). If not found, this throws a PrologException for existence_error.
2168 /// Otherwise, compile the goal as a single clause predicate and invoke it.
2169 /// </summary>
2170 /// <param name="Goal"></param>
2171 /// <param name="declaringClass">if not null, used to resolve references to the default
2172 /// module Atom.a("")</param>
2173 /// <returns></returns>
2174 public static IEnumerable<bool> getIterator(object Goal, Type declaringClass)
2175 {
2176 Atom name;
2177 object[] args;
2178 while (true)
2179 {
2180 Goal = YP.getValue(Goal);
2181 if (Goal is Variable)
2182 throw new PrologException("instantiation_error", "Goal to call is an unbound variable");
2183 name = YP.getFunctorName(Goal) as Atom;
2184 if (name == null)
2185 throw new PrologException
2186 (new Functor2("type_error", Atom.a("callable"), Goal), "Goal to call is not callable");
2187 args = YP.getFunctorArgs(Goal);
2188 if (name == Atom.HAT && args.Length == 2)
2189 // Assume this is called from a bagof operation. Skip the leading qualifiers.
2190 Goal = YP.getValue(((Functor2)Goal)._arg2);
2191 else
2192 break;
2193 }
2194
2195 IEnumerable<bool> simpleIterator = YPCompiler.getSimpleIterator(name, args, declaringClass);
2196 if (simpleIterator != null)
2197 // We don't need to compile since the goal is a simple predicate which we call directly.
2198 return simpleIterator;
2199
2200 // Compile the goal as a clause.
2201 List<Variable> variableSetList = new List<Variable>();
2202 addUniqueVariables(Goal, variableSetList);
2203 Variable[] variableSet = variableSetList.ToArray();
2204
2205 // Use Atom.F since it is ignored.
2206 return YPCompiler.compileAnonymousClause
2207 (Functor.make(Atom.F, variableSet), Goal, declaringClass).match(variableSet);
2208 }
2209
2210 public static void throwException(object Term)
2211 {
2212 throw new PrologException(Term);
2213 }
2214 /// <summary>
2215 /// This must be called by any function that uses YP._prologFlags to make sure
2216 /// the initial defaults are loaded.
2217 /// </summary>
2218 private static void establishPrologFlags()
2219 {
2220 if (_prologFlags.Count > 0)
2221 // Already established.
2222 return;
2223
2224 // List these in the order they appear in the ISO standard.
2225 _prologFlags["bounded"] = Atom.a("true");
2226 _prologFlags["max_integer"] = Int32.MaxValue;
2227 _prologFlags["min_integer"] = Int32.MinValue;
2228 _prologFlags["integer_rounding_function"] = Atom.a("toward_zero");
2229 _prologFlags["char_conversion"] = Atom.a("off");
2230 _prologFlags["debug"] = Atom.a("off");
2231 _prologFlags["max_arity"] = MAX_ARITY;
2232 _prologFlags["unknown"] = Atom.a("error");
2233 _prologFlags["double_quotes"] = Atom.a("codes");
2234 }
2235
2236 public static IEnumerable<bool> current_prolog_flag(object Key, object Value)
2237 {
2238 establishPrologFlags();
2239
2240 Key = YP.getValue(Key);
2241 Value = YP.getValue(Value);
2242
2243 if (Key is Variable)
2244 {
2245 // Bind all key values.
2246 foreach (string key in _prologFlags.Keys)
2247 {
2248 foreach (bool l1 in YP.unify(Key, Atom.a(key)))
2249 {
2250 foreach (bool l2 in YP.unify(Value, _prologFlags[key]))
2251 yield return false;
2252 }
2253 }
2254 }
2255 else
2256 {
2257 if (!(Key is Atom))
2258 throw new PrologException
2259 (new Functor2("type_error", Atom.a("atom"), Key), "Arg 1 Key is not an atom");
2260 if (!_prologFlags.ContainsKey(((Atom)Key)._name))
2261 throw new PrologException
2262 (new Functor2("domain_error", Atom.a("prolog_flag"), Key),
2263 "Arg 1 Key is not a recognized flag");
2264
2265 foreach (bool l1 in YP.unify(Value, _prologFlags[((Atom)Key)._name]))
2266 yield return false;
2267 }
2268 }
2269
2270 public static void set_prolog_flag(object Key, object Value)
2271 {
2272 establishPrologFlags();
2273
2274 Key = YP.getValue(Key);
2275 Value = YP.getValue(Value);
2276
2277 if (Key is Variable)
2278 throw new PrologException(Atom.a("instantiation_error"),
2279 "Arg 1 Key is an unbound variable");
2280 if (Value is Variable)
2281 throw new PrologException(Atom.a("instantiation_error"),
2282 "Arg 1 Key is an unbound variable");
2283 if (!(Key is Atom))
2284 throw new PrologException
2285 (new Functor2("type_error", Atom.a("atom"), Key), "Arg 1 Key is not an atom");
2286
2287 string keyName = ((Atom)Key)._name;
2288 if (!_prologFlags.ContainsKey(keyName))
2289 throw new PrologException
2290 (new Functor2("domain_error", Atom.a("prolog_flag"), Key),
2291 "Arg 1 Key " + Key + " is not a recognized flag");
2292
2293 bool valueIsOK = false;
2294 if (keyName == "char_conversion")
2295 valueIsOK = (Value == _prologFlags[keyName]);
2296 else if (keyName == "debug")
2297 valueIsOK = (Value == _prologFlags[keyName]);
2298 else if (keyName == "unknown")
2299 valueIsOK = (Value == Atom.a("fail") || Value == Atom.a("warning") ||
2300 Value == Atom.a("error"));
2301 else if (keyName == "double_quotes")
2302 valueIsOK = (Value == Atom.a("codes") || Value == Atom.a("chars") ||
2303 Value == Atom.a("atom"));
2304 else
2305 throw new PrologException
2306 (new Functor3("permission_error", Atom.a("modify"), Atom.a("flag"), Key),
2307 "May not modify Prolog flag " + Key);
2308
2309 if (!valueIsOK)
2310 throw new PrologException
2311 (new Functor2("domain_error", Atom.a("flag_value"), new Functor2("+", Key, Value)),
2312 "May not set arg 1 Key " + Key + " to arg 2 Value " + Value);
2313
2314 _prologFlags[keyName] = Value;
2315 }
2316 /// <summary>
2317 /// script_event calls hosting script with events as a callback method.
2318 /// </summary>
2319 /// <param name="script_event"></param>
2320 /// <param name="script_params"></param>
2321 /// <returns></returns>
2322 public static IEnumerable<bool> script_event(object script_event, object script_params)
2323 {
2324 // string function = ((Atom)YP.getValue(script_event))._name;
2325 object[] array = ListPair.toArray(script_params);
2326 if (array == null)
2327 yield return false; // return; // YP.fail();
2328 if (array.Length > 1)
2329 {
2330 //m_CmdManager.m_ScriptEngine.m_EventQueManager.AddToScriptQueue
2331 //(localID, itemID, function, array);
2332 // sortArray(array);
2333 }
2334 //return YP.unify(Sorted, ListPair.makeWithoutRepeatedTerms(array));
2335 yield return false;
2336 }
2337
2338 /* Non-prolog-ish functions for inline coding */
2339 public static string regexString(string inData, string inPattern, string presep,string postsep)
2340 {
2341 //string str=cycMessage;
2342 //string strMatch = @"\. \#\$(.*)\)";
2343 string results = "";
2344 for (Match m = Regex.Match(inData,inPattern); m.Success; m=m.NextMatch())
2345 {
2346 //Console.WriteLine( m );
2347 results += presep+ m + postsep;
2348 }
2349 return results;
2350 }
2351
2352 public static string cycComm(object msgobj)
2353 {
2354 string cycInputString = msgobj.ToString();
2355 string cycOutputString="";
2356 TcpClient socketForServer;
2357
2358 try
2359 {
2360 socketForServer = new TcpClient("localHost", 3601);
2361 }
2362 catch
2363 {
2364 Console.WriteLine("Failed to connect to server at {0}:999", "localhost");
2365 return "";
2366 }
2367
2368 NetworkStream networkStream = socketForServer.GetStream();
2369
2370 System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
2371
2372 System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
2373
2374 try
2375 {
2376 // read the data from the host and display it
2377
2378 {
2379
2380 streamWriter.WriteLine(cycInputString);
2381 streamWriter.Flush();
2382
2383 cycOutputString = streamReader.ReadLine();
2384 Console.WriteLine("Cycoutput:" + cycOutputString);
2385 //streamWriter.WriteLine("Client Message");
2386 //Console.WriteLine("Client Message");
2387 streamWriter.Flush();
2388 }
2389
2390 }
2391 catch
2392 {
2393 Console.WriteLine("Exception reading from Server");
2394 return "";
2395 }
2396 // tidy up
2397 networkStream.Close();
2398 return cycOutputString;
2399
2400 }
2401 //public static void throwException(object Term)
2402 //{
2403 // throw new PrologException(Term);
2404 //}
2405 /// <summary>
2406 /// An enumerator that does zero loops.
2407 /// </summary>
2408 private class Fail : IEnumerator<bool>, IEnumerable<bool>
2409 {
2410 public bool MoveNext()
2411 {
2412 return false;
2413 }
2414
2415 public IEnumerator<bool> GetEnumerator()
2416 {
2417 return (IEnumerator<bool>)this;
2418 }
2419
2420 IEnumerator IEnumerable.GetEnumerator()
2421 {
2422 return GetEnumerator();
2423 }
2424
2425 public bool Current
2426 {
2427 get { return true; }
2428 }
2429
2430 object IEnumerator.Current
2431 {
2432 get { return true; }
2433 }
2434
2435 public void Dispose()
2436 {
2437 }
2438
2439 public void Reset()
2440 {
2441 throw new NotImplementedException();
2442 }
2443 }
2444
2445 /// <summary>
2446 /// An enumerator that does one iteration.
2447 /// </summary>
2448 private class Succeed : IEnumerator<bool>, IEnumerable<bool>
2449 {
2450 private bool _didIteration = false;
2451
2452 public bool MoveNext()
2453 {
2454 if (!_didIteration)
2455 {
2456 _didIteration = true;
2457 return true;
2458 }
2459 else
2460 return false;
2461 }
2462
2463 public IEnumerator<bool> GetEnumerator()
2464 {
2465 return (IEnumerator<bool>)this;
2466 }
2467
2468 IEnumerator IEnumerable.GetEnumerator()
2469 {
2470 return GetEnumerator();
2471 }
2472
2473 public bool Current
2474 {
2475 get { return false; }
2476 }
2477
2478 object IEnumerator.Current
2479 {
2480 get { return false; }
2481 }
2482
2483 public void Dispose()
2484 {
2485 }
2486
2487 public void Reset()
2488 {
2489 throw new NotImplementedException();
2490 }
2491 }
2492
2493 /// <summary>
2494 /// An enumerator that repeats forever.
2495 /// </summary>
2496 private class Repeat : IEnumerator<bool>, IEnumerable<bool>
2497 {
2498 public bool MoveNext()
2499 {
2500 return true;
2501 }
2502
2503 public IEnumerator<bool> GetEnumerator()
2504 {
2505 return (IEnumerator<bool>)this;
2506 }
2507
2508 IEnumerator IEnumerable.GetEnumerator()
2509 {
2510 return GetEnumerator();
2511 }
2512
2513 public bool Current
2514 {
2515 get { return false; }
2516 }
2517
2518 object IEnumerator.Current
2519 {
2520 get { return false; }
2521 }
2522
2523 public void Dispose()
2524 {
2525 }
2526
2527 public void Reset()
2528 {
2529 throw new NotImplementedException();
2530 }
2531 }
2532
2533 /// <summary>
2534 /// An enumerator that wraps another enumerator in order to catch a PrologException.
2535 /// </summary>
2536 public class Catch : IEnumerator<bool>, IEnumerable<bool>
2537 {
2538 private IEnumerator<bool> _enumerator;
2539 private PrologException _exception = null;
2540
2541 /// <summary>
2542 /// Call YP.getIterator(Goal, declaringClass) and save the returned iterator.
2543 /// If getIterator throws an exception, save it the same as MoveNext().
2544 /// </summary>
2545 /// <param name="Goal"></param>
2546 /// <param name="declaringClass"></param>
2547 public Catch(object Goal, Type declaringClass)
2548 {
2549 try
2550 {
2551 _enumerator = getIterator(Goal, declaringClass).GetEnumerator();
2552 }
2553 catch (PrologException exception)
2554 {
2555 // MoveNext() will check this.
2556 _exception = exception;
2557 }
2558 }
2559
2560 /// <summary>
2561 /// Call _enumerator.MoveNext(). If it throws a PrologException, set _exception
2562 /// and return false. After this returns false, call unifyExceptionOrThrow.
2563 /// </summary>
2564 /// <returns></returns>
2565 public bool MoveNext()
2566 {
2567 if (_exception != null)
2568 return false;
2569
2570 try
2571 {
2572 return _enumerator.MoveNext();
2573 }
2574 catch (PrologException exception)
2575 {
2576 _exception = exception;
2577 return false;
2578 }
2579 }
2580
2581 /// <summary>
2582 /// Call this after MoveNext() returns false to check for an exception. If
2583 /// MoveNext did not get a PrologException, don't yield.
2584 /// Otherwise, unify the exception with Catcher and yield so the caller can
2585 /// do the handler code. However, if can't unify with Catcher then throw the exception.
2586 /// </summary>
2587 /// <param name="Catcher"></param>
2588 /// <returns></returns>
2589 public IEnumerable<bool> unifyExceptionOrThrow(object Catcher)
2590 {
2591 if (_exception != null)
2592 {
2593 bool didUnify = false;
2594 foreach (bool l1 in YP.unify(_exception._term, Catcher))
2595 {
2596 didUnify = true;
2597 yield return false;
2598 }
2599 if (!didUnify)
2600 throw _exception;
2601 }
2602 }
2603
2604 public IEnumerator<bool> GetEnumerator()
2605 {
2606 return (IEnumerator<bool>)this;
2607 }
2608
2609 IEnumerator IEnumerable.GetEnumerator()
2610 {
2611 return GetEnumerator();
2612 }
2613
2614 public bool Current
2615 {
2616 get { return _enumerator.Current; }
2617 }
2618
2619 object IEnumerator.Current
2620 {
2621 get { return _enumerator.Current; }
2622 }
2623
2624 public void Dispose()
2625 {
2626 if (_enumerator != null)
2627 _enumerator.Dispose();
2628 }
2629
2630 public void Reset()
2631 {
2632 throw new NotImplementedException();
2633 }
2634 }
2635 #pragma warning restore 0168
2636 /// <summary>
2637 /// A ClauseHeadAndBody is used in Compiler.compileAnonymousFunction as a base class
2638 /// in order to implement YP.IClause. After creating the object, you must call setHeadAndBody.
2639 /// </summary>
2640 public class ClauseHeadAndBody
2641 {
2642 private object _Head;
2643 private object _Body;
2644
2645 public void setHeadAndBody(object Head, object Body)
2646 {
2647 _Head = Head;
2648 _Body = Body;
2649 }
2650
2651 public IEnumerable<bool> clause(object Head, object Body)
2652 {
2653 if (_Head == null || _Body == null)
2654 yield break;
2655
2656 #pragma warning disable 0168
2657 foreach (bool l1 in YP.unify(Head, _Head))
2658 {
2659 foreach (bool l2 in YP.unify(Body, _Body))
2660 yield return false;
2661 }
2662 #pragma warning restore 0168
2663 }
2664 }
2665
2666 /// <summary>
2667 /// CodeListReader extends TextReader and overrides Read to read the next code from
2668 /// the CodeList which is a Prolog list of integer character codes.
2669 /// </summary>
2670 public class CodeListReader : TextReader
2671 {
2672 private object _CodeList;
2673
2674 public CodeListReader(object CodeList)
2675 {
2676 _CodeList = YP.getValue(CodeList);
2677 }
2678
2679 /// <summary>
2680 /// If the head of _CodeList is an integer, return it and advance the list. Otherwise,
2681 /// return -1 for end of file.
2682 /// </summary>
2683 /// <returns></returns>
2684 public override int Read()
2685 {
2686 Functor2 CodeListPair = _CodeList as Functor2;
2687 int code;
2688 if (!(CodeListPair != null && CodeListPair._name == Atom.DOT &&
2689 getInt(CodeListPair._arg1, out code)))
2690 {
2691 _CodeList = Atom.NIL;
2692 return -1;
2693 }
2694
2695 // Advance.
2696 _CodeList = YP.getValue(CodeListPair._arg2);
2697 return code;
2698 }
2699 }
2700 }
2701}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YPCompiler.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YPCompiler.cs
deleted file mode 100644
index 1d9c0ef..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YPCompiler.cs
+++ /dev/null
@@ -1,6382 +0,0 @@
1/*
2 * Copyright (C) 2007-2008, Jeff Thompson
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of the copyright holder nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31using System;
32using System.IO;
33using System.Collections;
34using System.Collections.Generic;
35using System.Text;
36using System.CodeDom.Compiler;
37using System.Reflection;
38
39namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog
40{
41 public class YPCompiler
42 {
43 private class CompilerState
44 {
45 public IndexedAnswers _pred = new IndexedAnswers(4);
46 public Dictionary<YP.NameArity, Atom> _moduleForNameArity = new Dictionary<YP.NameArity, Atom>();
47 public int _gensymCounter;
48 public bool _useFinalCutCode;
49 public Variable _finalCutCode;
50 public bool _codeUsesYield;
51 public Atom _determinism;
52 // a list of '='(Name, Variable)
53 public List<object> _variableNames;
54
55 // Make these static functions that explicitly take the State so Prolog can call it.
56
57 /// <summary>
58 /// Make a new CompilerState and bind it to State.
59 /// </summary>
60 /// <param name="State"></param>
61 /// <returns></returns>
62 public static IEnumerable<bool> make(object State)
63 {
64 return YP.unify(State, new CompilerState());
65 }
66
67 public static void assertPred(object State, object Pred, object Determinism)
68 {
69 State = YP.getValue(State);
70 object functorName = YP.getFunctorName(Pred);
71 object[] functorArgs = YP.getFunctorArgs(Pred);
72 // Debug: Should check if it's already asserted and is the same.
73 ((CompilerState)State)._pred.addAnswer
74 (new object[] { functorName, functorArgs.Length, Pred, YP.getValue(Determinism) });
75 }
76
77 public static void assertModuleForNameArity(object State, object Name, object Arity, object Module)
78 {
79 State = YP.getValue(State);
80 Name = YP.getValue(Name);
81 Arity = YP.getValue(Arity);
82 Module = YP.getValue(Module);
83 // If the Module Atom comes from the parser, it always has null _declaringClass.
84 if (Module is Atom && ((Atom)Module)._module == null && Name is Atom && Arity is int)
85 // Replace a previous entry if it exists.
86 ((CompilerState)State)._moduleForNameArity[new YP.NameArity((Atom)Name, (int)Arity)] =
87 (Atom)Module;
88 }
89
90 public static void startFunction(object State, object Head)
91 {
92 State = YP.getValue(State);
93 ((CompilerState)State)._gensymCounter = 0;
94 ((CompilerState)State)._useFinalCutCode = false;
95 ((CompilerState)State)._finalCutCode = new Variable();
96 ((CompilerState)State)._codeUsesYield = false;
97 if (CompilerState.isDetNoneOut(State, Head))
98 ((CompilerState)State)._determinism = Atom.a("detNoneOut");
99 else if (CompilerState.isSemidetNoneOut(State, Head))
100 ((CompilerState)State)._determinism = Atom.a("semidetNoneOut");
101 else
102 ((CompilerState)State)._determinism = Atom.a("nondet");
103 }
104
105 public static void setCodeUsesYield(object State)
106 {
107 State = YP.getValue(State);
108 ((CompilerState)State)._codeUsesYield = true;
109 }
110
111 public static bool codeUsesYield(object State)
112 {
113 State = YP.getValue(State);
114 return ((CompilerState)State)._codeUsesYield;
115 }
116
117 public static bool determinismEquals(object State, object Term)
118 {
119 State = YP.getValue(State);
120 return YP.termEqual(((CompilerState)State)._determinism, Term);
121 }
122
123 /// <summary>
124 /// Set _variableNames to a new list of (Name = Variable) for each unique variable in rule.
125 /// If the variable is in variableNameSuggestions, use it, otherwise use x1, x2, etc.
126 /// </summary>
127 /// <param name="State"></param>
128 /// <param name="rule"></param>
129 /// <param name="variableNameSuggestions"></param>
130 public static void newVariableNames(object State, object Rule, object VariableNameSuggestions)
131 {
132 State = YP.getValue(State);
133 List<Variable> variablesSet = new List<Variable>();
134 YP.addUniqueVariables(Rule, variablesSet);
135
136 ((CompilerState)State)._variableNames = new List<object>();
137 int xCounter = 0;
138 foreach (Variable variable in variablesSet)
139 ((CompilerState)State)._variableNames.Add
140 (new Functor2(Atom.a("="), makeVariableName(variable, VariableNameSuggestions, ++xCounter),
141 variable));
142 }
143
144 private static object makeVariableName(object variable, object variableNameSuggestions, int xCounter)
145 {
146 // Debug: should require named variables to start with _ or capital. Should
147 // check for duplicates and clashes with keywords.
148 for (object element = YP.getValue(variableNameSuggestions);
149 element is Functor2 && ((Functor2)element)._name == Atom.DOT;
150 element = YP.getValue(((Functor2)element)._arg2))
151 {
152 object suggestionPair = YP.getValue(((Functor2)element)._arg1);
153 if (sameVariable(variable, ((Functor2)suggestionPair)._arg2))
154 {
155 Atom suggestion = (Atom)YP.getValue(((Functor2)suggestionPair)._arg1);
156 if (suggestion.Equals(Atom.a("Atom")))
157 suggestion = Atom.a("Atom_1");
158 if (suggestion.Equals(Atom.a("Variable")))
159 suggestion = Atom.a("Variable_1");
160 if (suggestion.Equals(Atom.a("Functor")))
161 suggestion = Atom.a("Functor_1");
162 return suggestion;
163 }
164 }
165
166 return Atom.a("x" + xCounter);
167 }
168
169 /// <summary>
170 /// Unify Result with the name assigned by CompilerState.newVariableNames in State._variableNames
171 /// for variable.
172 /// </summary>
173 /// <param name="variable">a Variable</param>
174 /// <param name="State"></param>
175 /// <param name="Result">the assigned Name</param>
176 public static IEnumerable<bool> getVariableName(object State, object variable, object Result)
177 {
178 State = YP.getValue(State);
179 foreach (object variableInfo in ((CompilerState)State)._variableNames)
180 {
181 if (variableInfo is Functor2 && ((Functor2)variableInfo)._name.Equals(Atom.a("=")))
182 {
183 if (sameVariable(variable, ((Functor2)variableInfo)._arg2))
184 return YP.unify(Result, ((Functor2)variableInfo)._arg1);
185 }
186 }
187
188 // We set up names for all unique variables, so this should never happen.
189 throw new PrologException(Atom.a("Can't find entry in _variableNames"));
190 }
191
192 public static IEnumerable<bool> variableNamesList(object State, object VariableNamesList)
193 {
194 State = YP.getValue(State);
195 return YP.unify(VariableNamesList, ListPair.make(((CompilerState)State)._variableNames));
196 }
197
198 public static IEnumerable<bool> gensym(object State, object Base, object Symbol)
199 {
200 State = YP.getValue(State);
201 return YP.unify(Symbol, Atom.a(Base.ToString() + ++((CompilerState)State)._gensymCounter));
202 }
203
204 // disable warning on l1, don't see how we can
205 // code this differently
206 #pragma warning disable 0168,0164,0162
207 public static bool isDetNoneOut(object State, object Term)
208 {
209 State = YP.getValue(State);
210 object functorName = YP.getFunctorName(Term);
211 object[] functorArgs = YP.getFunctorArgs(Term);
212
213 Variable pred = new Variable();
214 foreach (bool l1 in ((CompilerState)State)._pred.match
215 (new object[] { functorName, functorArgs.Length, pred, Atom.a("det") }))
216 {
217 if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue())))
218 {
219 return true;
220 }
221 }
222
223 return false;
224 }
225
226 public static bool isSemidetNoneOut(object State, object Term)
227 {
228 State = YP.getValue(State);
229 object functorName = YP.getFunctorName(Term);
230 object[] functorArgs = YP.getFunctorArgs(Term);
231
232 Variable pred = new Variable();
233 foreach (bool l1 in ((CompilerState)State)._pred.match
234 (new object[] { functorName, functorArgs.Length, pred, Atom.a("semidet") }))
235 {
236 if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue())))
237 {
238 return true;
239 }
240 }
241
242 return false;
243 }
244 #pragma warning restore 0168,0164,0162
245
246 /// <summary>
247 /// Return false if any of args is out, otherwise true.
248 /// args is an array of ::(Type,Mode) where Mode is in or out.
249 /// </summary>
250 /// <param name="args"></param>
251 /// <returns></returns>
252 private static bool isNoneOut(object[] args)
253 {
254 foreach (object arg in args)
255 {
256 if (arg is Functor2 && ((Functor2)arg)._name == Atom.a("::") &&
257 ((Functor2)arg)._arg2 == Atom.a("out"))
258 return false;
259 }
260 return true;
261 }
262
263 public static bool nameArityHasModule(object State, object Name, object Arity, object Module)
264 {
265 State = YP.getValue(State);
266 Name = YP.getValue(Name);
267 Arity = YP.getValue(Arity);
268 Module = YP.getValue(Module);
269 if (Name is Atom && Arity is int)
270 {
271 Atom FoundModule;
272 if (!((CompilerState)State)._moduleForNameArity.TryGetValue
273 (new YP.NameArity((Atom)Name, (int)Arity), out FoundModule))
274 return false;
275 return FoundModule == Module;
276 }
277 return false;
278 }
279 }
280
281 // disable warning on l1, don't see how we can
282 // code this differently
283 #pragma warning disable 0168, 0219,0164,0162
284
285 /// <summary>
286 /// Use makeFunctionPseudoCode, convertFunctionCSharp and compileAnonymousFunction
287 /// to return an anonymous YP.IClause for the Head and Body of a rule clause.
288 /// </summary>
289 /// <param name="Head">a prolog term such as new Functor2("test1", X, Y).
290 /// Note that the name of the head is ignored.
291 /// </param>
292 /// <param name="Body">a prolog term such as
293 /// new Functor2(",", new Functor1(Atom.a("test2", Atom.a("")), X),
294 /// new Functor2("=", Y, X)).
295 /// This may not be null. (For a head-only clause, set the Body to Atom.a("true").
296 /// </param>
297 /// <param name="declaringClass">if not null, the code is compiled as a subclass of this class
298 /// to resolve references to the default module Atom.a("")</param>
299 /// <returns>a new YP.IClause object on which you can call match(object[] args) where
300 /// args length is the arity of the Head</returns>
301 public static YP.IClause compileAnonymousClause(object Head, object Body, Type declaringClass)
302 {
303 object[] args = YP.getFunctorArgs(Head);
304 // compileAnonymousFunction wants "function".
305 object Rule = new Functor2(Atom.RULE, Functor.make("function", args), Body);
306 object RuleList = ListPair.make(new Functor2(Atom.F, Rule, Atom.NIL));
307
308 StringWriter functionCode = new StringWriter();
309 Variable SaveOutputStream = new Variable();
310 foreach (bool l1 in YP.current_output(SaveOutputStream))
311 {
312 try
313 {
314 YP.tell(functionCode);
315 Variable PseudoCode = new Variable();
316 foreach (bool l2 in makeFunctionPseudoCode(RuleList, PseudoCode))
317 {
318 if (YP.termEqual(PseudoCode, Atom.a("getDeclaringClass")))
319 // Ignore getDeclaringClass since we have access to the one passed in.
320 continue;
321
322 convertFunctionCSharp(PseudoCode);
323 }
324 YP.told();
325 }
326 finally
327 {
328 // Restore after calling tell.
329 YP.tell(SaveOutputStream.getValue());
330 }
331 }
332 return YPCompiler.compileAnonymousFunction
333 (functionCode.ToString(), args.Length, declaringClass);
334 }
335
336 /// <summary>
337 /// Use CodeDomProvider to compile the functionCode and return a YP.ClauseHeadAndBody
338 /// which implements YP.IClause.
339 /// The function name must be "function" and have nArgs arguments.
340 /// </summary>
341 /// <param name="functionCode">the code for the iterator, such as
342 /// "public static IEnumerable<bool> function() { yield return false; }"
343 /// </param>
344 /// <param name="nArgs">the number of args in the function</param>
345 /// <param name="declaringClass">if not null, then use the functionCode inside a class which
346 /// inherits from contextClass, so that references in functionCode to methods in declaringClass don't
347 /// have to be qualified</param>
348 /// <returns>a new YP.IClause object on which you can call match(object[] args) where
349 /// args length is nArgs</returns>
350 public static YP.IClause compileAnonymousFunction(string functionCode, int nArgs, Type declaringClass)
351 {
352 CompilerParameters parameters = new CompilerParameters();
353 // This gets the location of the System assembly.
354 parameters.ReferencedAssemblies.Add(typeof(System.Int32).Assembly.Location);
355 // This gets the location of this assembly which also has YieldProlog.YP, etc.
356 parameters.ReferencedAssemblies.Add(typeof(YPCompiler).Assembly.Location);
357 if (declaringClass != null)
358 parameters.ReferencedAssemblies.Add(declaringClass.Assembly.Location);
359 parameters.GenerateInMemory = true;
360
361 StringBuilder sourceCode = new StringBuilder();
362 sourceCode.Append(@"
363using System;
364using System.Collections.Generic;
365using YieldProlog;
366
367namespace Temporary {
368 public class Temporary : YP.ClauseHeadAndBody, YP.IClause {");
369 if (declaringClass == null)
370 // We don't extend a class with getDeclaringClass, so define it.
371 sourceCode.Append(@"
372 public class Inner {
373 public static System.Type getDeclaringClass() { return null; }
374");
375 else
376 sourceCode.Append(@"
377 public class Inner : " + declaringClass.FullName + @" {
378");
379 sourceCode.Append(functionCode);
380 // Basically, match applies the args to function.
381 sourceCode.Append(@"
382 }
383 public IEnumerable<bool> match(object[] args) {
384 return Inner.function(");
385 if (nArgs >= 1)
386 sourceCode.Append("args[0]");
387 for (int i = 1; i < nArgs; ++i)
388 sourceCode.Append(", args[" + i + "]");
389 sourceCode.Append(@");
390 }
391 }
392}
393");
394
395 CompilerResults results = CodeDomProvider.CreateProvider
396 ("CSharp").CompileAssemblyFromSource(parameters, sourceCode.ToString());
397 if (results.Errors.Count > 0)
398 throw new Exception("Error evaluating code: " + results.Errors[0]);
399
400 // Return a new Temporary.Temporary object.
401 return (YP.IClause)results.CompiledAssembly.GetType
402 ("Temporary.Temporary").GetConstructor(Type.EmptyTypes).Invoke(null);
403 }
404
405 /// <summary>
406 /// If the functor with name and args can be called directly as determined by
407 /// functorCallFunctionName, then call it and return its iterator. If the predicate is
408 /// dynamic and undefined, or if static and the method cannot be found, return
409 /// the result of YP.unknownPredicate.
410 /// This returns null if the functor has a special form than needs to be compiled
411 /// (including ,/2 and ;/2).
412 /// </summary>
413 /// <param name="name"></param>
414 /// <param name="args"></param>
415 /// <param name="declaringClass">used to resolve references to the default
416 /// module Atom.a(""). If a declaringClass is needed to resolve the reference but it is
417 /// null, this throws a PrologException for existence_error</param>
418 /// <returns></returns>
419 public static IEnumerable<bool> getSimpleIterator(Atom name, object[] args, Type declaringClass)
420 {
421 CompilerState state = new CompilerState();
422 Variable FunctionName = new Variable();
423 foreach (bool l1 in functorCallFunctionName(state, name, args.Length, FunctionName))
424 {
425 Atom functionNameAtom = ((Atom)FunctionName.getValue());
426 if (functionNameAtom == Atom.NIL)
427 // name is for a dynamic predicate.
428 return YP.matchDynamic(name, args);
429
430 string methodName = functionNameAtom._name;
431 // Set the default for the method to call.
432 Type methodClass = declaringClass;
433
434 bool checkMode = false;
435 if (methodName.StartsWith("YP."))
436 {
437 // Assume we only check mode in calls to standard Prolog predicates in YP.
438 checkMode = true;
439
440 // Use the method in class YP.
441 methodName = methodName.Substring(3);
442 methodClass = typeof(YP);
443 }
444 if (methodName.Contains("."))
445 // We don't support calling inner classes, etc.
446 return null;
447
448 if (methodClass == null)
449 return YP.unknownPredicate
450 (name, args.Length,
451 "Cannot find predicate function for: " + name + "/" + args.Length +
452 " because declaringClass is null. Set declaringClass to the class containing " +
453 methodName);
454 try
455 {
456 if (checkMode)
457 {
458 assertYPPred(state);
459 object functor = Functor.make(name, args);
460 if (CompilerState.isDetNoneOut(state, functor))
461 {
462 methodClass.InvokeMember
463 (methodName, BindingFlags.InvokeMethod, null, null, args);
464 return YP.succeed();
465 }
466 if (CompilerState.isSemidetNoneOut(state, functor))
467 {
468 if ((bool)methodClass.InvokeMember
469 (methodName, BindingFlags.InvokeMethod, null, null, args))
470 return YP.succeed();
471 else
472 return YP.fail();
473 }
474
475 }
476 return (IEnumerable<bool>)methodClass.InvokeMember
477 (methodName, BindingFlags.InvokeMethod, null, null, args);
478 }
479 catch (TargetInvocationException exception)
480 {
481 throw exception.InnerException;
482 }
483 catch (MissingMethodException)
484 {
485 return YP.unknownPredicate
486 (name, args.Length,
487 "Cannot find predicate function " + methodName + " for " + name + "/" + args.Length +
488 " in " + methodClass.FullName);
489 }
490 }
491
492 return null;
493 }
494
495 /// <summary>
496 /// Return true if there is a dynamic or static predicate with name and arity.
497 /// This returns false for built-in predicates.
498 /// </summary>
499 /// <param name="name"></param>
500 /// <param name="arity"></param>
501 /// <param name="declaringClass">used to resolve references to the default
502 /// module Atom.a(""). If a declaringClass is needed to resolve the reference but it is
503 /// null, return false</param>
504 /// <returns></returns>
505 public static bool isCurrentPredicate(Atom name, int arity, Type declaringClass)
506 {
507 CompilerState state = new CompilerState();
508 Variable FunctionName = new Variable();
509 foreach (bool l1 in functorCallFunctionName(state, name, arity, FunctionName))
510 {
511 Atom functionNameAtom = ((Atom)FunctionName.getValue());
512 if (functionNameAtom == Atom.NIL)
513 // name is for a dynamic predicate.
514 return YP.isDynamicCurrentPredicate(name, arity);
515
516 string methodName = functionNameAtom._name;
517
518 if (methodName.StartsWith("YP."))
519 // current_predicate/1 should fail for built-ins.
520 return false;
521 if (methodName.Contains("."))
522 // We don't support calling inner classes, etc.
523 return false;
524 if (declaringClass == null)
525 return false;
526
527 foreach (MemberInfo member in declaringClass.GetMember(methodName))
528 {
529 MethodInfo method = member as MethodInfo;
530 if (method == null)
531 continue;
532 if ((method.Attributes | MethodAttributes.Static) == 0)
533 // Not a static method.
534 continue;
535 if (method.GetParameters().Length == arity)
536 return true;
537 }
538 }
539
540 return false;
541 }
542
543 // Compiler output follows.
544
545 public class YPInnerClass { }
546 public static System.Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }
547
548 public static void repeatWrite(object arg1, object N)
549 {
550 {
551 object _Value = arg1;
552 if (YP.termEqual(N, 0))
553 {
554 return;
555 }
556 }
557 {
558 object Value = arg1;
559 Variable NextN = new Variable();
560 YP.write(Value);
561 foreach (bool l2 in YP.unify(NextN, YP.subtract(N, 1)))
562 {
563 repeatWrite(Value, NextN);
564 return;
565 }
566 }
567 }
568
569 public static bool sameVariable(object Variable1, object Variable2)
570 {
571 {
572 if (YP.var(Variable1))
573 {
574 if (YP.var(Variable2))
575 {
576 if (YP.termEqual(Variable1, Variable2))
577 {
578 return true;
579 }
580 }
581 }
582 }
583 return false;
584 }
585
586 public static IEnumerable<bool> makeFunctionPseudoCode(object RuleList, object FunctionCode)
587 {
588 {
589 Variable State = new Variable();
590 foreach (bool l2 in CompilerState.make(State))
591 {
592 assertYPPred(State);
593 processCompilerDirectives(RuleList, State);
594 foreach (bool l3 in YP.unify(FunctionCode, Atom.a("getDeclaringClass")))
595 {
596 yield return false;
597 }
598 foreach (bool l3 in makeFunctionPseudoCode3(RuleList, State, FunctionCode))
599 {
600 yield return false;
601 }
602 }
603 }
604 }
605
606 public static void assertYPPred(object State)
607 {
608 {
609 CompilerState.assertPred(State, Atom.a("nl"), Atom.a("det"));
610 CompilerState.assertPred(State, new Functor1("write", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
611 CompilerState.assertPred(State, new Functor1("put_code", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
612 CompilerState.assertPred(State, new Functor1("see", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
613 CompilerState.assertPred(State, Atom.a("seen"), Atom.a("det"));
614 CompilerState.assertPred(State, new Functor1("tell", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
615 CompilerState.assertPred(State, Atom.a("told"), Atom.a("det"));
616 CompilerState.assertPred(State, new Functor1("throw", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
617 CompilerState.assertPred(State, new Functor1("abolish", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
618 CompilerState.assertPred(State, new Functor1("retractall", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
619 CompilerState.assertPred(State, new Functor2("set_prolog_flag", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det"));
620 CompilerState.assertPred(State, new Functor1("var", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
621 CompilerState.assertPred(State, new Functor1("nonvar", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
622 CompilerState.assertPred(State, new Functor1("atom", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
623 CompilerState.assertPred(State, new Functor1("integer", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
624 CompilerState.assertPred(State, new Functor1("float", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
625 CompilerState.assertPred(State, new Functor1("number", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
626 CompilerState.assertPred(State, new Functor1("atomic", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
627 CompilerState.assertPred(State, new Functor1("compound", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
628 CompilerState.assertPred(State, new Functor2("==", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
629 CompilerState.assertPred(State, new Functor2("\\==", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
630 CompilerState.assertPred(State, new Functor2("@<", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
631 CompilerState.assertPred(State, new Functor2("@=<", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
632 CompilerState.assertPred(State, new Functor2("@>", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
633 CompilerState.assertPred(State, new Functor2("@>=", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet"));
634 return;
635 }
636 }
637
638 public static void processCompilerDirectives(object arg1, object arg2)
639 {
640 {
641 object _State = arg2;
642 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
643 {
644 return;
645 }
646 }
647 {
648 object State = arg2;
649 Variable Pred = new Variable();
650 Variable Determinism = new Variable();
651 Variable x3 = new Variable();
652 Variable RestRules = new Variable();
653 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", new Functor1("pred", new Functor2("is", Pred, Determinism))), x3), RestRules)))
654 {
655 CompilerState.assertPred(State, Pred, Determinism);
656 processCompilerDirectives(RestRules, State);
657 return;
658 }
659 }
660 {
661 object State = arg2;
662 Variable Module = new Variable();
663 Variable PredicateList = new Variable();
664 Variable x3 = new Variable();
665 Variable RestRules = new Variable();
666 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", new Functor2("import", Module, PredicateList)), x3), RestRules)))
667 {
668 foreach (bool l3 in importPredicateList(State, Module, PredicateList))
669 {
670 processCompilerDirectives(RestRules, State);
671 return;
672 }
673 }
674 }
675 {
676 object State = arg2;
677 Variable x1 = new Variable();
678 Variable x2 = new Variable();
679 Variable RestRules = new Variable();
680 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", x1), x2), RestRules)))
681 {
682 processCompilerDirectives(RestRules, State);
683 return;
684 }
685 }
686 {
687 object State = arg2;
688 Variable Head = new Variable();
689 Variable _Body = new Variable();
690 Variable x3 = new Variable();
691 Variable RestRules = new Variable();
692 Variable Name = new Variable();
693 Variable Arity = new Variable();
694 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor2(":-", Head, _Body), x3), RestRules)))
695 {
696 foreach (bool l3 in YP.functor(Head, Name, Arity))
697 {
698 CompilerState.assertModuleForNameArity(State, Name, Arity, Atom.a(""));
699 processCompilerDirectives(RestRules, State);
700 return;
701 }
702 }
703 }
704 {
705 object State = arg2;
706 Variable Fact = new Variable();
707 Variable x2 = new Variable();
708 Variable RestRules = new Variable();
709 Variable Name = new Variable();
710 Variable Arity = new Variable();
711 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", Fact, x2), RestRules)))
712 {
713 foreach (bool l3 in YP.functor(Fact, Name, Arity))
714 {
715 CompilerState.assertModuleForNameArity(State, Name, Arity, Atom.a(""));
716 processCompilerDirectives(RestRules, State);
717 return;
718 }
719 }
720 }
721 {
722 object State = arg2;
723 Variable x1 = new Variable();
724 Variable RestRules = new Variable();
725 foreach (bool l2 in YP.unify(arg1, new ListPair(x1, RestRules)))
726 {
727 processCompilerDirectives(RestRules, State);
728 return;
729 }
730 }
731 }
732
733 public static IEnumerable<bool> importPredicateList(object arg1, object arg2, object arg3)
734 {
735 {
736 object _State = arg1;
737 object _Module = arg2;
738 foreach (bool l2 in YP.unify(arg3, Atom.NIL))
739 {
740 yield return true;
741 yield break;
742 }
743 }
744 {
745 object State = arg1;
746 object Module = arg2;
747 Variable Name = new Variable();
748 Variable Arity = new Variable();
749 Variable Rest = new Variable();
750 foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2("/", Name, Arity), Rest)))
751 {
752 CompilerState.assertModuleForNameArity(State, Name, Arity, Module);
753 foreach (bool l3 in importPredicateList(State, Module, Rest))
754 {
755 yield return true;
756 yield break;
757 }
758 }
759 }
760 {
761 object State = arg1;
762 object Module = arg2;
763 Variable x3 = new Variable();
764 Variable Rest = new Variable();
765 foreach (bool l2 in YP.unify(arg3, new ListPair(x3, Rest)))
766 {
767 foreach (bool l3 in importPredicateList(State, Module, Rest))
768 {
769 yield return true;
770 yield break;
771 }
772 }
773 }
774 }
775
776 public static IEnumerable<bool> makeFunctionPseudoCode3(object RuleList, object State, object FunctionCode)
777 {
778 {
779 Variable SamePredicateRuleList = new Variable();
780 Variable RestRules = new Variable();
781 foreach (bool l2 in samePredicateRuleList(RuleList, SamePredicateRuleList, RestRules))
782 {
783 if (YP.termNotEqual(SamePredicateRuleList, Atom.NIL))
784 {
785 foreach (bool l4 in compileSamePredicateFunction(SamePredicateRuleList, State, FunctionCode))
786 {
787 yield return false;
788 }
789 foreach (bool l4 in makeFunctionPseudoCode3(RestRules, State, FunctionCode))
790 {
791 yield return false;
792 }
793 }
794 }
795 }
796 }
797
798 public static IEnumerable<bool> compileSamePredicateFunction(object SamePredicateRuleList, object State, object FunctionCode)
799 {
800 {
801 Variable FirstRule = new Variable();
802 Variable x5 = new Variable();
803 Variable x6 = new Variable();
804 Variable x7 = new Variable();
805 Variable Head = new Variable();
806 Variable x9 = new Variable();
807 Variable ArgAssignments = new Variable();
808 Variable Calls = new Variable();
809 Variable Rule = new Variable();
810 Variable VariableNameSuggestions = new Variable();
811 Variable ClauseBag = new Variable();
812 Variable Name = new Variable();
813 Variable ArgsList = new Variable();
814 Variable FunctionArgNames = new Variable();
815 Variable MergedArgName = new Variable();
816 Variable ArgName = new Variable();
817 Variable MergedArgNames = new Variable();
818 Variable FunctionArgs = new Variable();
819 Variable BodyCode = new Variable();
820 Variable ReturnType = new Variable();
821 Variable BodyWithReturn = new Variable();
822 foreach (bool l2 in YP.unify(new ListPair(new Functor2("f", FirstRule, x5), x6), SamePredicateRuleList))
823 {
824 foreach (bool l3 in YP.unify(FirstRule, new Functor1(":-", x7)))
825 {
826 goto cutIf1;
827 }
828 foreach (bool l3 in YP.unify(new Functor2(":-", Head, x9), FirstRule))
829 {
830 CompilerState.startFunction(State, Head);
831 FindallAnswers findallAnswers3 = new FindallAnswers(new Functor2("f", ArgAssignments, Calls));
832 foreach (bool l4 in member(new Functor2("f", Rule, VariableNameSuggestions), SamePredicateRuleList))
833 {
834 foreach (bool l5 in compileBodyWithHeadBindings(Rule, VariableNameSuggestions, State, ArgAssignments, Calls))
835 {
836 findallAnswers3.add();
837 }
838 }
839 foreach (bool l4 in findallAnswers3.result(ClauseBag))
840 {
841 foreach (bool l5 in YP.univ(Head, new ListPair(Name, ArgsList)))
842 {
843 foreach (bool l6 in getFunctionArgNames(ArgsList, 1, FunctionArgNames))
844 {
845 FindallAnswers findallAnswers4 = new FindallAnswers(MergedArgName);
846 foreach (bool l7 in member(ArgName, FunctionArgNames))
847 {
848 foreach (bool l8 in argAssignedAll(ArgName, ClauseBag, MergedArgName))
849 {
850 findallAnswers4.add();
851 goto cutIf5;
852 }
853 foreach (bool l8 in YP.unify(MergedArgName, ArgName))
854 {
855 findallAnswers4.add();
856 }
857 cutIf5:
858 { }
859 }
860 foreach (bool l7 in findallAnswers4.result(MergedArgNames))
861 {
862 foreach (bool l8 in maplist_arg(MergedArgNames, FunctionArgs))
863 {
864 foreach (bool l9 in maplist_compileClause(ClauseBag, MergedArgNames, BodyCode))
865 {
866 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
867 {
868 foreach (bool l11 in YP.unify(ReturnType, Atom.a("void")))
869 {
870 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
871 {
872 foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
873 {
874 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
875 {
876 yield return false;
877 }
878 }
879 goto cutIf7;
880 }
881 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
882 {
883 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
884 {
885 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
886 {
887 yield return false;
888 }
889 }
890 goto cutIf8;
891 }
892 if (CompilerState.codeUsesYield(State))
893 {
894 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
895 {
896 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
897 {
898 yield return false;
899 }
900 }
901 goto cutIf9;
902 }
903 foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
904 {
905 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
906 {
907 yield return false;
908 }
909 }
910 cutIf9:
911 cutIf8:
912 cutIf7:
913 { }
914 }
915 goto cutIf6;
916 }
917 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
918 {
919 foreach (bool l11 in YP.unify(ReturnType, Atom.a("bool")))
920 {
921 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
922 {
923 foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
924 {
925 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
926 {
927 yield return false;
928 }
929 }
930 goto cutIf11;
931 }
932 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
933 {
934 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
935 {
936 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
937 {
938 yield return false;
939 }
940 }
941 goto cutIf12;
942 }
943 if (CompilerState.codeUsesYield(State))
944 {
945 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
946 {
947 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
948 {
949 yield return false;
950 }
951 }
952 goto cutIf13;
953 }
954 foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
955 {
956 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
957 {
958 yield return false;
959 }
960 }
961 cutIf13:
962 cutIf12:
963 cutIf11:
964 { }
965 }
966 goto cutIf10;
967 }
968 foreach (bool l10 in YP.unify(ReturnType, Atom.a("IEnumerable<bool>")))
969 {
970 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
971 {
972 foreach (bool l12 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
973 {
974 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
975 {
976 yield return false;
977 }
978 }
979 goto cutIf14;
980 }
981 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
982 {
983 foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode))
984 {
985 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
986 {
987 yield return false;
988 }
989 }
990 goto cutIf15;
991 }
992 if (CompilerState.codeUsesYield(State))
993 {
994 foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode))
995 {
996 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
997 {
998 yield return false;
999 }
1000 }
1001 goto cutIf16;
1002 }
1003 foreach (bool l11 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
1004 {
1005 foreach (bool l12 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1006 {
1007 yield return false;
1008 }
1009 }
1010 cutIf16:
1011 cutIf15:
1012 cutIf14:
1013 { }
1014 }
1015 cutIf10:
1016 cutIf6:
1017 { }
1018 }
1019 }
1020 }
1021 }
1022 }
1023 }
1024 goto cutIf2;
1025 }
1026 foreach (bool l3 in YP.unify(Head, FirstRule))
1027 {
1028 CompilerState.startFunction(State, Head);
1029 FindallAnswers findallAnswers17 = new FindallAnswers(new Functor2("f", ArgAssignments, Calls));
1030 foreach (bool l4 in member(new Functor2("f", Rule, VariableNameSuggestions), SamePredicateRuleList))
1031 {
1032 foreach (bool l5 in compileBodyWithHeadBindings(Rule, VariableNameSuggestions, State, ArgAssignments, Calls))
1033 {
1034 findallAnswers17.add();
1035 }
1036 }
1037 foreach (bool l4 in findallAnswers17.result(ClauseBag))
1038 {
1039 foreach (bool l5 in YP.univ(Head, new ListPair(Name, ArgsList)))
1040 {
1041 foreach (bool l6 in getFunctionArgNames(ArgsList, 1, FunctionArgNames))
1042 {
1043 FindallAnswers findallAnswers18 = new FindallAnswers(MergedArgName);
1044 foreach (bool l7 in member(ArgName, FunctionArgNames))
1045 {
1046 foreach (bool l8 in argAssignedAll(ArgName, ClauseBag, MergedArgName))
1047 {
1048 findallAnswers18.add();
1049 goto cutIf19;
1050 }
1051 foreach (bool l8 in YP.unify(MergedArgName, ArgName))
1052 {
1053 findallAnswers18.add();
1054 }
1055 cutIf19:
1056 { }
1057 }
1058 foreach (bool l7 in findallAnswers18.result(MergedArgNames))
1059 {
1060 foreach (bool l8 in maplist_arg(MergedArgNames, FunctionArgs))
1061 {
1062 foreach (bool l9 in maplist_compileClause(ClauseBag, MergedArgNames, BodyCode))
1063 {
1064 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
1065 {
1066 foreach (bool l11 in YP.unify(ReturnType, Atom.a("void")))
1067 {
1068 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
1069 {
1070 foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
1071 {
1072 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1073 {
1074 yield return false;
1075 }
1076 }
1077 goto cutIf21;
1078 }
1079 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
1080 {
1081 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
1082 {
1083 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1084 {
1085 yield return false;
1086 }
1087 }
1088 goto cutIf22;
1089 }
1090 if (CompilerState.codeUsesYield(State))
1091 {
1092 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
1093 {
1094 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1095 {
1096 yield return false;
1097 }
1098 }
1099 goto cutIf23;
1100 }
1101 foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
1102 {
1103 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1104 {
1105 yield return false;
1106 }
1107 }
1108 cutIf23:
1109 cutIf22:
1110 cutIf21:
1111 { }
1112 }
1113 goto cutIf20;
1114 }
1115 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
1116 {
1117 foreach (bool l11 in YP.unify(ReturnType, Atom.a("bool")))
1118 {
1119 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
1120 {
1121 foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
1122 {
1123 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1124 {
1125 yield return false;
1126 }
1127 }
1128 goto cutIf25;
1129 }
1130 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
1131 {
1132 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
1133 {
1134 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1135 {
1136 yield return false;
1137 }
1138 }
1139 goto cutIf26;
1140 }
1141 if (CompilerState.codeUsesYield(State))
1142 {
1143 foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode))
1144 {
1145 foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1146 {
1147 yield return false;
1148 }
1149 }
1150 goto cutIf27;
1151 }
1152 foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
1153 {
1154 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1155 {
1156 yield return false;
1157 }
1158 }
1159 cutIf27:
1160 cutIf26:
1161 cutIf25:
1162 { }
1163 }
1164 goto cutIf24;
1165 }
1166 foreach (bool l10 in YP.unify(ReturnType, Atom.a("IEnumerable<bool>")))
1167 {
1168 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
1169 {
1170 foreach (bool l12 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn))
1171 {
1172 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1173 {
1174 yield return false;
1175 }
1176 }
1177 goto cutIf28;
1178 }
1179 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
1180 {
1181 foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode))
1182 {
1183 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1184 {
1185 yield return false;
1186 }
1187 }
1188 goto cutIf29;
1189 }
1190 if (CompilerState.codeUsesYield(State))
1191 {
1192 foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode))
1193 {
1194 foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1195 {
1196 yield return false;
1197 }
1198 }
1199 goto cutIf30;
1200 }
1201 foreach (bool l11 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn))
1202 {
1203 foreach (bool l12 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn })))
1204 {
1205 yield return false;
1206 }
1207 }
1208 cutIf30:
1209 cutIf29:
1210 cutIf28:
1211 { }
1212 }
1213 cutIf24:
1214 cutIf20:
1215 { }
1216 }
1217 }
1218 }
1219 }
1220 }
1221 }
1222 }
1223 cutIf2:
1224 cutIf1:
1225 { }
1226 }
1227 }
1228 }
1229
1230 public static IEnumerable<bool> samePredicateRuleList(object arg1, object arg2, object arg3)
1231 {
1232 {
1233 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1234 {
1235 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
1236 {
1237 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
1238 {
1239 yield return true;
1240 yield break;
1241 }
1242 }
1243 }
1244 }
1245 {
1246 Variable First = new Variable();
1247 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Atom.NIL)))
1248 {
1249 foreach (bool l3 in YP.unify(arg2, new ListPair(First, Atom.NIL)))
1250 {
1251 foreach (bool l4 in YP.unify(arg3, Atom.NIL))
1252 {
1253 yield return true;
1254 yield break;
1255 }
1256 }
1257 }
1258 }
1259 {
1260 object SamePredicateRuleList = arg2;
1261 object RestRules = arg3;
1262 Variable First = new Variable();
1263 Variable Rest = new Variable();
1264 Variable FirstRule = new Variable();
1265 Variable x6 = new Variable();
1266 Variable SecondRule = new Variable();
1267 Variable x8 = new Variable();
1268 Variable x9 = new Variable();
1269 Variable FirstHead = new Variable();
1270 Variable x11 = new Variable();
1271 Variable SecondHead = new Variable();
1272 Variable x13 = new Variable();
1273 Variable Name = new Variable();
1274 Variable Arity = new Variable();
1275 Variable RestSamePredicates = new Variable();
1276 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
1277 {
1278 foreach (bool l3 in YP.unify(new Functor2("f", FirstRule, x6), First))
1279 {
1280 foreach (bool l4 in YP.unify(new ListPair(new Functor2("f", SecondRule, x8), x9), Rest))
1281 {
1282 foreach (bool l5 in YP.unify(new Functor2(":-", FirstHead, x11), FirstRule))
1283 {
1284 foreach (bool l6 in YP.unify(new Functor2(":-", SecondHead, x13), SecondRule))
1285 {
1286 foreach (bool l7 in YP.functor(FirstHead, Name, Arity))
1287 {
1288 foreach (bool l8 in YP.functor(SecondHead, Name, Arity))
1289 {
1290 foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules))
1291 {
1292 foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates)))
1293 {
1294 yield return true;
1295 yield break;
1296 }
1297 }
1298 goto cutIf3;
1299 }
1300 foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL)))
1301 {
1302 foreach (bool l9 in YP.unify(RestRules, Rest))
1303 {
1304 yield return true;
1305 yield break;
1306 }
1307 }
1308 cutIf3:
1309 { }
1310 }
1311 goto cutIf2;
1312 }
1313 foreach (bool l6 in YP.unify(SecondHead, SecondRule))
1314 {
1315 foreach (bool l7 in YP.functor(FirstHead, Name, Arity))
1316 {
1317 foreach (bool l8 in YP.functor(SecondHead, Name, Arity))
1318 {
1319 foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules))
1320 {
1321 foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates)))
1322 {
1323 yield return true;
1324 yield break;
1325 }
1326 }
1327 goto cutIf4;
1328 }
1329 foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL)))
1330 {
1331 foreach (bool l9 in YP.unify(RestRules, Rest))
1332 {
1333 yield return true;
1334 yield break;
1335 }
1336 }
1337 cutIf4:
1338 { }
1339 }
1340 }
1341 cutIf2:
1342 goto cutIf1;
1343 }
1344 foreach (bool l5 in YP.unify(FirstHead, FirstRule))
1345 {
1346 foreach (bool l6 in YP.unify(new Functor2(":-", SecondHead, x13), SecondRule))
1347 {
1348 foreach (bool l7 in YP.functor(FirstHead, Name, Arity))
1349 {
1350 foreach (bool l8 in YP.functor(SecondHead, Name, Arity))
1351 {
1352 foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules))
1353 {
1354 foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates)))
1355 {
1356 yield return true;
1357 yield break;
1358 }
1359 }
1360 goto cutIf6;
1361 }
1362 foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL)))
1363 {
1364 foreach (bool l9 in YP.unify(RestRules, Rest))
1365 {
1366 yield return true;
1367 yield break;
1368 }
1369 }
1370 cutIf6:
1371 { }
1372 }
1373 goto cutIf5;
1374 }
1375 foreach (bool l6 in YP.unify(SecondHead, SecondRule))
1376 {
1377 foreach (bool l7 in YP.functor(FirstHead, Name, Arity))
1378 {
1379 foreach (bool l8 in YP.functor(SecondHead, Name, Arity))
1380 {
1381 foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules))
1382 {
1383 foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates)))
1384 {
1385 yield return true;
1386 yield break;
1387 }
1388 }
1389 goto cutIf7;
1390 }
1391 foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL)))
1392 {
1393 foreach (bool l9 in YP.unify(RestRules, Rest))
1394 {
1395 yield return true;
1396 yield break;
1397 }
1398 }
1399 cutIf7:
1400 { }
1401 }
1402 }
1403 cutIf5:
1404 { }
1405 }
1406 cutIf1:
1407 { }
1408 }
1409 }
1410 }
1411 }
1412 }
1413
1414 public static IEnumerable<bool> maplist_compileClause(object arg1, object arg2, object arg3)
1415 {
1416 {
1417 object _MergedArgNames = arg2;
1418 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1419 {
1420 foreach (bool l3 in YP.unify(arg3, Atom.NIL))
1421 {
1422 yield return true;
1423 yield break;
1424 }
1425 }
1426 }
1427 {
1428 object MergedArgNames = arg2;
1429 Variable ArgAssignments = new Variable();
1430 Variable Calls = new Variable();
1431 Variable Rest = new Variable();
1432 Variable ClauseCode = new Variable();
1433 Variable RestResults = new Variable();
1434 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", ArgAssignments, Calls), Rest)))
1435 {
1436 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("blockScope", ClauseCode), RestResults)))
1437 {
1438 foreach (bool l4 in prependArgAssignments(ArgAssignments, Calls, MergedArgNames, ClauseCode))
1439 {
1440 foreach (bool l5 in maplist_compileClause(Rest, MergedArgNames, RestResults))
1441 {
1442 yield return true;
1443 yield break;
1444 }
1445 }
1446 }
1447 }
1448 }
1449 }
1450
1451 public static IEnumerable<bool> prependArgAssignments(object arg1, object arg2, object arg3, object arg4)
1452 {
1453 {
1454 object _MergedArgNames = arg3;
1455 Variable In = new Variable();
1456 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1457 {
1458 foreach (bool l3 in YP.unify(arg2, In))
1459 {
1460 foreach (bool l4 in YP.unify(arg4, In))
1461 {
1462 yield return true;
1463 yield break;
1464 }
1465 }
1466 }
1467 }
1468 {
1469 object In = arg2;
1470 object MergedArgNames = arg3;
1471 object ClauseCode = arg4;
1472 Variable VariableName = new Variable();
1473 Variable ArgName = new Variable();
1474 Variable RestArgAssignments = new Variable();
1475 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", VariableName, ArgName), RestArgAssignments)))
1476 {
1477 foreach (bool l3 in member(VariableName, MergedArgNames))
1478 {
1479 foreach (bool l4 in prependArgAssignments(RestArgAssignments, In, MergedArgNames, ClauseCode))
1480 {
1481 yield return true;
1482 yield break;
1483 }
1484 goto cutIf1;
1485 }
1486 foreach (bool l3 in prependArgAssignments(RestArgAssignments, new ListPair(new Functor3("declare", Atom.a("object"), VariableName, new Functor1("var", ArgName)), In), MergedArgNames, ClauseCode))
1487 {
1488 yield return true;
1489 yield break;
1490 }
1491 cutIf1:
1492 { }
1493 }
1494 }
1495 }
1496
1497 public static IEnumerable<bool> argAssignedAll(object arg1, object arg2, object VariableName)
1498 {
1499 {
1500 object _ArgName = arg1;
1501 foreach (bool l2 in YP.unify(arg2, Atom.NIL))
1502 {
1503 if (YP.nonvar(VariableName))
1504 {
1505 yield return true;
1506 yield break;
1507 }
1508 }
1509 }
1510 {
1511 object ArgName = arg1;
1512 Variable ArgAssignments = new Variable();
1513 Variable _Calls = new Variable();
1514 Variable RestClauseBag = new Variable();
1515 foreach (bool l2 in YP.unify(arg2, new ListPair(new Functor2("f", ArgAssignments, _Calls), RestClauseBag)))
1516 {
1517 foreach (bool l3 in member(new Functor2("f", VariableName, ArgName), ArgAssignments))
1518 {
1519 foreach (bool l4 in argAssignedAll(ArgName, RestClauseBag, VariableName))
1520 {
1521 yield return false;
1522 }
1523 }
1524 }
1525 }
1526 }
1527
1528 public static IEnumerable<bool> maplist_arg(object arg1, object arg2)
1529 {
1530 {
1531 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1532 {
1533 foreach (bool l3 in YP.unify(arg2, Atom.NIL))
1534 {
1535 yield return true;
1536 yield break;
1537 }
1538 }
1539 }
1540 {
1541 Variable First = new Variable();
1542 Variable Rest = new Variable();
1543 Variable RestResults = new Variable();
1544 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
1545 {
1546 foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1("arg", First), RestResults)))
1547 {
1548 foreach (bool l4 in maplist_arg(Rest, RestResults))
1549 {
1550 yield return true;
1551 yield break;
1552 }
1553 }
1554 }
1555 }
1556 }
1557
1558 public static IEnumerable<bool> getFunctionArgNames(object arg1, object arg2, object arg3)
1559 {
1560 {
1561 object _StartArgNumber = arg2;
1562 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1563 {
1564 foreach (bool l3 in YP.unify(arg3, Atom.NIL))
1565 {
1566 yield return true;
1567 yield break;
1568 }
1569 }
1570 }
1571 {
1572 object StartArgNumber = arg2;
1573 Variable x1 = new Variable();
1574 Variable Rest = new Variable();
1575 Variable ArgName = new Variable();
1576 Variable RestFunctionArgs = new Variable();
1577 Variable NumberCodes = new Variable();
1578 Variable NumberAtom = new Variable();
1579 Variable NextArgNumber = new Variable();
1580 foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Rest)))
1581 {
1582 foreach (bool l3 in YP.unify(arg3, new ListPair(ArgName, RestFunctionArgs)))
1583 {
1584 foreach (bool l4 in YP.number_codes(StartArgNumber, NumberCodes))
1585 {
1586 foreach (bool l5 in YP.atom_codes(NumberAtom, NumberCodes))
1587 {
1588 foreach (bool l6 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName))
1589 {
1590 foreach (bool l7 in YP.unify(NextArgNumber, YP.add(StartArgNumber, 1)))
1591 {
1592 foreach (bool l8 in getFunctionArgNames(Rest, NextArgNumber, RestFunctionArgs))
1593 {
1594 yield return true;
1595 yield break;
1596 }
1597 }
1598 }
1599 }
1600 }
1601 }
1602 }
1603 }
1604 }
1605
1606 public static IEnumerable<bool> compileBodyWithHeadBindings(object Rule, object VariableNameSuggestions, object State, object ArgAssignments, object Calls)
1607 {
1608 {
1609 Variable Head = new Variable();
1610 Variable Body = new Variable();
1611 Variable x8 = new Variable();
1612 Variable HeadArgs = new Variable();
1613 Variable CompiledHeadArgs = new Variable();
1614 Variable BodyCode = new Variable();
1615 Variable VariableNamesList = new Variable();
1616 Variable ArgUnifications = new Variable();
1617 foreach (bool l2 in YP.unify(new Functor2(":-", Head, Body), Rule))
1618 {
1619 CompilerState.newVariableNames(State, Rule, VariableNameSuggestions);
1620 foreach (bool l3 in YP.univ(Head, new ListPair(x8, HeadArgs)))
1621 {
1622 foreach (bool l4 in maplist_compileTerm(HeadArgs, State, CompiledHeadArgs))
1623 {
1624 foreach (bool l5 in compileRuleBody(Body, State, BodyCode))
1625 {
1626 foreach (bool l6 in CompilerState.variableNamesList(State, VariableNamesList))
1627 {
1628 foreach (bool l7 in compileArgUnifications(HeadArgs, CompiledHeadArgs, 1, HeadArgs, BodyCode, ArgUnifications))
1629 {
1630 foreach (bool l8 in compileDeclarations(VariableNamesList, HeadArgs, Atom.NIL, ArgAssignments, ArgUnifications, Calls))
1631 {
1632 yield return true;
1633 yield break;
1634 }
1635 }
1636 }
1637 }
1638 }
1639 }
1640 }
1641 }
1642 {
1643 foreach (bool l2 in compileBodyWithHeadBindings(new Functor2(":-", Rule, Atom.a("true")), VariableNameSuggestions, State, ArgAssignments, Calls))
1644 {
1645 yield return true;
1646 yield break;
1647 }
1648 }
1649 }
1650
1651 public static IEnumerable<bool> compileArgUnifications(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
1652 {
1653 {
1654 object x1 = arg2;
1655 object x2 = arg3;
1656 object x3 = arg4;
1657 Variable BodyCode = new Variable();
1658 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1659 {
1660 foreach (bool l3 in YP.unify(arg5, BodyCode))
1661 {
1662 foreach (bool l4 in YP.unify(arg6, BodyCode))
1663 {
1664 yield return true;
1665 yield break;
1666 }
1667 }
1668 }
1669 }
1670 {
1671 object Index = arg3;
1672 object AllHeadArgs = arg4;
1673 object BodyCode = arg5;
1674 object ArgUnifications = arg6;
1675 Variable HeadArg = new Variable();
1676 Variable RestHeadArgs = new Variable();
1677 Variable x3 = new Variable();
1678 Variable RestCompiledHeadArgs = new Variable();
1679 Variable _ArgIndex1 = new Variable();
1680 Variable NextIndex = new Variable();
1681 foreach (bool l2 in YP.unify(arg1, new ListPair(HeadArg, RestHeadArgs)))
1682 {
1683 foreach (bool l3 in YP.unify(arg2, new ListPair(x3, RestCompiledHeadArgs)))
1684 {
1685 foreach (bool l4 in getVariableArgIndex1(HeadArg, AllHeadArgs, _ArgIndex1))
1686 {
1687 foreach (bool l5 in YP.unify(NextIndex, YP.add(Index, 1)))
1688 {
1689 foreach (bool l6 in compileArgUnifications(RestHeadArgs, RestCompiledHeadArgs, NextIndex, AllHeadArgs, BodyCode, ArgUnifications))
1690 {
1691 yield return true;
1692 yield break;
1693 }
1694 }
1695 }
1696 }
1697 }
1698 }
1699 {
1700 object Index = arg3;
1701 object AllHeadArgs = arg4;
1702 object BodyCode = arg5;
1703 Variable _HeadArg = new Variable();
1704 Variable RestHeadArgs = new Variable();
1705 Variable CompiledHeadArg = new Variable();
1706 Variable RestCompiledHeadArgs = new Variable();
1707 Variable ArgName = new Variable();
1708 Variable RestArgUnifications = new Variable();
1709 Variable NumberCodes = new Variable();
1710 Variable NumberAtom = new Variable();
1711 Variable NextIndex = new Variable();
1712 foreach (bool l2 in YP.unify(arg1, new ListPair(_HeadArg, RestHeadArgs)))
1713 {
1714 foreach (bool l3 in YP.unify(arg2, new ListPair(CompiledHeadArg, RestCompiledHeadArgs)))
1715 {
1716 foreach (bool l4 in YP.unify(arg6, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.unify"), new ListPair(new Functor1("var", ArgName), new ListPair(CompiledHeadArg, Atom.NIL))), RestArgUnifications), Atom.NIL)))
1717 {
1718 foreach (bool l5 in YP.number_codes(Index, NumberCodes))
1719 {
1720 foreach (bool l6 in YP.atom_codes(NumberAtom, NumberCodes))
1721 {
1722 foreach (bool l7 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName))
1723 {
1724 foreach (bool l8 in YP.unify(NextIndex, YP.add(Index, 1)))
1725 {
1726 foreach (bool l9 in compileArgUnifications(RestHeadArgs, RestCompiledHeadArgs, NextIndex, AllHeadArgs, BodyCode, RestArgUnifications))
1727 {
1728 yield return true;
1729 yield break;
1730 }
1731 }
1732 }
1733 }
1734 }
1735 }
1736 }
1737 }
1738 }
1739 }
1740
1741 public static IEnumerable<bool> compileDeclarations(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)
1742 {
1743 {
1744 object _HeadArgs = arg2;
1745 Variable ArgAssignmentsIn = new Variable();
1746 Variable DeclarationsIn = new Variable();
1747 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
1748 {
1749 foreach (bool l3 in YP.unify(arg3, ArgAssignmentsIn))
1750 {
1751 foreach (bool l4 in YP.unify(arg4, ArgAssignmentsIn))
1752 {
1753 foreach (bool l5 in YP.unify(arg5, DeclarationsIn))
1754 {
1755 foreach (bool l6 in YP.unify(arg6, DeclarationsIn))
1756 {
1757 yield return true;
1758 yield break;
1759 }
1760 }
1761 }
1762 }
1763 }
1764 }
1765 {
1766 object HeadArgs = arg2;
1767 object ArgAssignmentsIn = arg3;
1768 object ArgAssignmentsOut = arg4;
1769 object DeclarationsIn = arg5;
1770 object DeclarationsOut = arg6;
1771 Variable VariableName = new Variable();
1772 Variable Var = new Variable();
1773 Variable RestVariableNames = new Variable();
1774 Variable ArgIndex1 = new Variable();
1775 Variable NumberCodes = new Variable();
1776 Variable NumberAtom = new Variable();
1777 Variable ArgName = new Variable();
1778 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", VariableName, Var), RestVariableNames)))
1779 {
1780 foreach (bool l3 in getVariableArgIndex1(Var, HeadArgs, ArgIndex1))
1781 {
1782 foreach (bool l4 in YP.number_codes(ArgIndex1, NumberCodes))
1783 {
1784 foreach (bool l5 in YP.atom_codes(NumberAtom, NumberCodes))
1785 {
1786 foreach (bool l6 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName))
1787 {
1788 foreach (bool l7 in compileDeclarations(RestVariableNames, HeadArgs, new ListPair(new Functor2("f", VariableName, ArgName), ArgAssignmentsIn), ArgAssignmentsOut, DeclarationsIn, DeclarationsOut))
1789 {
1790 yield return true;
1791 yield break;
1792 }
1793 }
1794 }
1795 }
1796 }
1797 }
1798 }
1799 {
1800 object HeadArgs = arg2;
1801 object ArgAssignmentsIn = arg3;
1802 object ArgAssignmentsOut = arg4;
1803 object DeclarationsIn = arg5;
1804 Variable VariableName = new Variable();
1805 Variable _Var = new Variable();
1806 Variable RestVariableNames = new Variable();
1807 Variable DeclarationsOut = new Variable();
1808 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", VariableName, _Var), RestVariableNames)))
1809 {
1810 foreach (bool l3 in YP.unify(arg6, new ListPair(new Functor3("declare", Atom.a("Variable"), VariableName, new Functor2("new", Atom.a("Variable"), Atom.NIL)), DeclarationsOut)))
1811 {
1812 foreach (bool l4 in compileDeclarations(RestVariableNames, HeadArgs, ArgAssignmentsIn, ArgAssignmentsOut, DeclarationsIn, DeclarationsOut))
1813 {
1814 yield return true;
1815 yield break;
1816 }
1817 }
1818 }
1819 }
1820 }
1821
1822 public static IEnumerable<bool> getVariableArgIndex1(object Var, object arg2, object arg3)
1823 {
1824 {
1825 Variable FirstHeadArgs = new Variable();
1826 Variable RestHeadArgs = new Variable();
1827 Variable x4 = new Variable();
1828 foreach (bool l2 in YP.unify(arg2, new ListPair(FirstHeadArgs, RestHeadArgs)))
1829 {
1830 foreach (bool l3 in YP.unify(arg3, 1))
1831 {
1832 if (sameVariable(Var, FirstHeadArgs))
1833 {
1834 foreach (bool l5 in getVariableArgIndex1(Var, RestHeadArgs, x4))
1835 {
1836 goto cutIf1;
1837 }
1838 yield return false;
1839 cutIf1:
1840 yield break;
1841 }
1842 }
1843 }
1844 }
1845 {
1846 object Index = arg3;
1847 Variable x2 = new Variable();
1848 Variable RestHeadArgs = new Variable();
1849 Variable RestIndex = new Variable();
1850 foreach (bool l2 in YP.unify(arg2, new ListPair(x2, RestHeadArgs)))
1851 {
1852 foreach (bool l3 in getVariableArgIndex1(Var, RestHeadArgs, RestIndex))
1853 {
1854 foreach (bool l4 in YP.unify(Index, YP.add(1, RestIndex)))
1855 {
1856 yield return true;
1857 yield break;
1858 }
1859 }
1860 }
1861 }
1862 }
1863
1864 public static IEnumerable<bool> compileRuleBody(object arg1, object arg2, object arg3)
1865 {
1866 {
1867 object A = arg1;
1868 object State = arg2;
1869 object PseudoCode = arg3;
1870 if (YP.var(A))
1871 {
1872 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("call", A), Atom.a("true")), State, PseudoCode))
1873 {
1874 yield return true;
1875 yield break;
1876 }
1877 }
1878 }
1879 {
1880 object State = arg2;
1881 object PseudoCode = arg3;
1882 Variable A = new Variable();
1883 Variable B = new Variable();
1884 foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B)))
1885 {
1886 if (YP.var(A))
1887 {
1888 foreach (bool l4 in compileRuleBody(new Functor2(",", new Functor1("call", A), B), State, PseudoCode))
1889 {
1890 yield return true;
1891 yield break;
1892 }
1893 }
1894 }
1895 }
1896 {
1897 object State = arg2;
1898 object PseudoCode = arg3;
1899 Variable A = new Variable();
1900 Variable B = new Variable();
1901 Variable ACode = new Variable();
1902 Variable BCode = new Variable();
1903 foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B)))
1904 {
1905 foreach (bool l3 in compileFunctorCall(A, State, ACode))
1906 {
1907 if (CompilerState.isDetNoneOut(State, A))
1908 {
1909 foreach (bool l5 in compileRuleBody(B, State, BCode))
1910 {
1911 foreach (bool l6 in YP.unify(PseudoCode, new ListPair(ACode, BCode)))
1912 {
1913 yield return true;
1914 yield break;
1915 }
1916 }
1917 }
1918 if (CompilerState.isSemidetNoneOut(State, A))
1919 {
1920 foreach (bool l5 in compileRuleBody(B, State, BCode))
1921 {
1922 foreach (bool l6 in YP.unify(PseudoCode, new ListPair(new Functor2("if", ACode, BCode), Atom.NIL)))
1923 {
1924 yield return true;
1925 yield break;
1926 }
1927 }
1928 }
1929 foreach (bool l4 in compileRuleBody(B, State, BCode))
1930 {
1931 foreach (bool l5 in YP.unify(PseudoCode, new ListPair(new Functor2("foreach", ACode, BCode), Atom.NIL)))
1932 {
1933 yield return true;
1934 yield break;
1935 }
1936 }
1937 }
1938 }
1939 }
1940 {
1941 object State = arg2;
1942 object PseudoCode = arg3;
1943 Variable A = new Variable();
1944 Variable T = new Variable();
1945 Variable B = new Variable();
1946 Variable C = new Variable();
1947 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(";", new Functor2("->", A, T), B), C)))
1948 {
1949 foreach (bool l3 in compileRuleBody(new Functor2(";", new Functor2("->", A, new Functor2(",", T, C)), new Functor2(",", B, C)), State, PseudoCode))
1950 {
1951 yield return true;
1952 yield break;
1953 }
1954 }
1955 }
1956 {
1957 object State = arg2;
1958 object PseudoCode = arg3;
1959 Variable A = new Variable();
1960 Variable B = new Variable();
1961 Variable C = new Variable();
1962 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(";", A, B), C)))
1963 {
1964 foreach (bool l3 in compileRuleBody(new Functor2(";", new Functor2(",", A, C), new Functor2(",", B, C)), State, PseudoCode))
1965 {
1966 yield return true;
1967 yield break;
1968 }
1969 }
1970 }
1971 {
1972 object State = arg2;
1973 Variable A = new Variable();
1974 Variable B = new Variable();
1975 Variable ACode = new Variable();
1976 Variable BCode = new Variable();
1977 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("\\+", A), B)))
1978 {
1979 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("if", new Functor1("not", ACode), BCode), Atom.NIL)))
1980 {
1981 if (CompilerState.isSemidetNoneOut(State, A))
1982 {
1983 foreach (bool l5 in compileFunctorCall(A, State, ACode))
1984 {
1985 foreach (bool l6 in compileRuleBody(B, State, BCode))
1986 {
1987 yield return true;
1988 yield break;
1989 }
1990 }
1991 }
1992 }
1993 }
1994 }
1995 {
1996 object State = arg2;
1997 object PseudoCode = arg3;
1998 Variable A = new Variable();
1999 Variable B = new Variable();
2000 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("\\+", A), B)))
2001 {
2002 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, Atom.a("fail")), Atom.a("true")), B), State, PseudoCode))
2003 {
2004 yield return true;
2005 yield break;
2006 }
2007 }
2008 }
2009 {
2010 object State = arg2;
2011 object PseudoCode = arg3;
2012 Variable A = new Variable();
2013 Variable B = new Variable();
2014 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("once", A), B)))
2015 {
2016 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, Atom.a("true")), Atom.a("fail")), B), State, PseudoCode))
2017 {
2018 yield return true;
2019 yield break;
2020 }
2021 }
2022 }
2023 {
2024 object State = arg2;
2025 object PseudoCode = arg3;
2026 Variable A = new Variable();
2027 Variable T = new Variable();
2028 Variable B = new Variable();
2029 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("->", A, T), B)))
2030 {
2031 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, T), Atom.a("fail")), B), State, PseudoCode))
2032 {
2033 yield return true;
2034 yield break;
2035 }
2036 }
2037 }
2038 {
2039 object State = arg2;
2040 object PseudoCode = arg3;
2041 Variable A = new Variable();
2042 Variable B = new Variable();
2043 Variable C = new Variable();
2044 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("\\=", A, B), C)))
2045 {
2046 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("\\+", new Functor2("=", A, B)), C), State, PseudoCode))
2047 {
2048 yield return true;
2049 yield break;
2050 }
2051 }
2052 }
2053 {
2054 object State = arg2;
2055 object PseudoCode = arg3;
2056 Variable A = new Variable();
2057 Variable ACode = new Variable();
2058 foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("!"), A)))
2059 {
2060 foreach (bool l3 in compileRuleBody(A, State, ACode))
2061 {
2062 foreach (bool l4 in append(ACode, new ListPair(Atom.a("yieldbreak"), Atom.NIL), PseudoCode))
2063 {
2064 yield return true;
2065 yield break;
2066 }
2067 }
2068 }
2069 }
2070 {
2071 object State = arg2;
2072 object PseudoCode = arg3;
2073 Variable Name = new Variable();
2074 Variable A = new Variable();
2075 Variable ACode = new Variable();
2076 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("$CUTIF", Name), A)))
2077 {
2078 foreach (bool l3 in compileRuleBody(A, State, ACode))
2079 {
2080 foreach (bool l4 in append(ACode, new ListPair(new Functor1("breakBlock", Name), Atom.NIL), PseudoCode))
2081 {
2082 yield return true;
2083 yield break;
2084 }
2085 }
2086 }
2087 }
2088 {
2089 object _State = arg2;
2090 Variable x1 = new Variable();
2091 foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("fail"), x1)))
2092 {
2093 foreach (bool l3 in YP.unify(arg3, Atom.NIL))
2094 {
2095 yield return true;
2096 yield break;
2097 }
2098 }
2099 }
2100 {
2101 object State = arg2;
2102 object PseudoCode = arg3;
2103 Variable A = new Variable();
2104 foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("true"), A)))
2105 {
2106 foreach (bool l3 in compileRuleBody(A, State, PseudoCode))
2107 {
2108 yield return true;
2109 yield break;
2110 }
2111 }
2112 }
2113 {
2114 object State = arg2;
2115 Variable A = new Variable();
2116 Variable Term = new Variable();
2117 Variable B = new Variable();
2118 Variable ACode = new Variable();
2119 Variable TermCode = new Variable();
2120 Variable BCode = new Variable();
2121 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("is", A, Term), B)))
2122 {
2123 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.unify"), new ListPair(ACode, new ListPair(TermCode, Atom.NIL))), BCode), Atom.NIL)))
2124 {
2125 foreach (bool l4 in compileTerm(A, State, ACode))
2126 {
2127 foreach (bool l5 in compileExpression(Term, State, TermCode))
2128 {
2129 foreach (bool l6 in compileRuleBody(B, State, BCode))
2130 {
2131 yield return true;
2132 yield break;
2133 }
2134 }
2135 }
2136 }
2137 }
2138 }
2139 {
2140 object State = arg2;
2141 Variable ACode = new Variable();
2142 Variable B = new Variable();
2143 Variable BCode = new Variable();
2144 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("$DET_NONE_OUT", ACode), B)))
2145 {
2146 foreach (bool l3 in YP.unify(arg3, new ListPair(ACode, BCode)))
2147 {
2148 foreach (bool l4 in compileRuleBody(B, State, BCode))
2149 {
2150 yield return true;
2151 yield break;
2152 }
2153 }
2154 }
2155 }
2156 {
2157 object State = arg2;
2158 Variable A = new Variable();
2159 Variable B = new Variable();
2160 Variable FunctionName = new Variable();
2161 Variable X1Code = new Variable();
2162 Variable X2Code = new Variable();
2163 Variable BCode = new Variable();
2164 Variable Name = new Variable();
2165 Variable X1 = new Variable();
2166 Variable X2 = new Variable();
2167 foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B)))
2168 {
2169 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("if", new Functor2("call", FunctionName, new ListPair(X1Code, new ListPair(X2Code, Atom.NIL))), BCode), Atom.NIL)))
2170 {
2171 foreach (bool l4 in YP.univ(A, ListPair.make(new object[] { Name, X1, X2 })))
2172 {
2173 foreach (bool l5 in binaryExpressionConditional(Name, FunctionName))
2174 {
2175 foreach (bool l6 in compileExpression(X1, State, X1Code))
2176 {
2177 foreach (bool l7 in compileExpression(X2, State, X2Code))
2178 {
2179 foreach (bool l8 in compileRuleBody(B, State, BCode))
2180 {
2181 yield return true;
2182 yield break;
2183 }
2184 }
2185 }
2186 }
2187 }
2188 }
2189 }
2190 }
2191 {
2192 object State = arg2;
2193 object PseudoCode = arg3;
2194 Variable Template = new Variable();
2195 Variable Goal = new Variable();
2196 Variable Bag = new Variable();
2197 Variable B = new Variable();
2198 Variable TemplateCode = new Variable();
2199 Variable FindallAnswers = new Variable();
2200 Variable GoalAndAddCode = new Variable();
2201 Variable BagCode = new Variable();
2202 Variable BCode = new Variable();
2203 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("findall", Template, Goal, Bag), B)))
2204 {
2205 foreach (bool l3 in compileTerm(Template, State, TemplateCode))
2206 {
2207 foreach (bool l4 in CompilerState.gensym(State, Atom.a("findallAnswers"), FindallAnswers))
2208 {
2209 foreach (bool l5 in compileRuleBody(new Functor2(",", Goal, new Functor2(",", new Functor1("$DET_NONE_OUT", new Functor3("callMember", new Functor1("var", FindallAnswers), Atom.a("add"), Atom.NIL)), Atom.a("fail"))), State, GoalAndAddCode))
2210 {
2211 foreach (bool l6 in compileTerm(Bag, State, BagCode))
2212 {
2213 foreach (bool l7 in compileRuleBody(B, State, BCode))
2214 {
2215 foreach (bool l8 in append(new ListPair(new Functor3("declare", Atom.a("FindallAnswers"), FindallAnswers, new Functor2("new", Atom.a("FindallAnswers"), new ListPair(TemplateCode, Atom.NIL))), GoalAndAddCode), new ListPair(new Functor2("foreach", new Functor3("callMember", new Functor1("var", FindallAnswers), Atom.a("result"), new ListPair(BagCode, Atom.NIL)), BCode), Atom.NIL), PseudoCode))
2216 {
2217 yield return true;
2218 yield break;
2219 }
2220 }
2221 }
2222 }
2223 }
2224 }
2225 }
2226 }
2227 {
2228 object State = arg2;
2229 object PseudoCode = arg3;
2230 Variable Template = new Variable();
2231 Variable Goal = new Variable();
2232 Variable Bag = new Variable();
2233 Variable B = new Variable();
2234 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("bagof", Template, Goal, Bag), B)))
2235 {
2236 foreach (bool l3 in compileBagof(Atom.a("result"), Template, Goal, Bag, B, State, PseudoCode))
2237 {
2238 yield return true;
2239 yield break;
2240 }
2241 }
2242 }
2243 {
2244 object State = arg2;
2245 object PseudoCode = arg3;
2246 Variable Template = new Variable();
2247 Variable Goal = new Variable();
2248 Variable Bag = new Variable();
2249 Variable B = new Variable();
2250 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("setof", Template, Goal, Bag), B)))
2251 {
2252 foreach (bool l3 in compileBagof(Atom.a("resultSet"), Template, Goal, Bag, B, State, PseudoCode))
2253 {
2254 yield return true;
2255 yield break;
2256 }
2257 }
2258 }
2259 {
2260 object State = arg2;
2261 Variable A = new Variable();
2262 Variable B = new Variable();
2263 Variable ATermCode = new Variable();
2264 Variable BCode = new Variable();
2265 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("call", A), B)))
2266 {
2267 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.getIterator"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode), Atom.NIL)))
2268 {
2269 foreach (bool l4 in compileTerm(A, State, ATermCode))
2270 {
2271 foreach (bool l5 in compileRuleBody(B, State, BCode))
2272 {
2273 yield return true;
2274 yield break;
2275 }
2276 }
2277 }
2278 }
2279 }
2280 {
2281 object State = arg2;
2282 Variable A = new Variable();
2283 Variable B = new Variable();
2284 Variable ATermCode = new Variable();
2285 Variable BCode = new Variable();
2286 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("current_predicate", A), B)))
2287 {
2288 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.current_predicate"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode), Atom.NIL)))
2289 {
2290 foreach (bool l4 in compileTerm(A, State, ATermCode))
2291 {
2292 foreach (bool l5 in compileRuleBody(B, State, BCode))
2293 {
2294 yield return true;
2295 yield break;
2296 }
2297 }
2298 }
2299 }
2300 }
2301 {
2302 object State = arg2;
2303 Variable A = new Variable();
2304 Variable B = new Variable();
2305 Variable ATermCode = new Variable();
2306 Variable BCode = new Variable();
2307 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("asserta", A), B)))
2308 {
2309 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("call", Atom.a("YP.asserta"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode)))
2310 {
2311 foreach (bool l4 in compileTerm(A, State, ATermCode))
2312 {
2313 foreach (bool l5 in compileRuleBody(B, State, BCode))
2314 {
2315 yield return true;
2316 yield break;
2317 }
2318 }
2319 }
2320 }
2321 }
2322 {
2323 object State = arg2;
2324 Variable A = new Variable();
2325 Variable B = new Variable();
2326 Variable ATermCode = new Variable();
2327 Variable BCode = new Variable();
2328 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("assertz", A), B)))
2329 {
2330 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("call", Atom.a("YP.assertz"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode)))
2331 {
2332 foreach (bool l4 in compileTerm(A, State, ATermCode))
2333 {
2334 foreach (bool l5 in compileRuleBody(B, State, BCode))
2335 {
2336 yield return true;
2337 yield break;
2338 }
2339 }
2340 }
2341 }
2342 }
2343 {
2344 object State = arg2;
2345 object PseudoCode = arg3;
2346 Variable A = new Variable();
2347 Variable B = new Variable();
2348 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("assert", A), B)))
2349 {
2350 foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("assertz", A), B), State, PseudoCode))
2351 {
2352 yield return true;
2353 yield break;
2354 }
2355 }
2356 }
2357 {
2358 object State = arg2;
2359 Variable Goal = new Variable();
2360 Variable Catcher = new Variable();
2361 Variable Handler = new Variable();
2362 Variable B = new Variable();
2363 Variable CatchGoal = new Variable();
2364 Variable GoalTermCode = new Variable();
2365 Variable BCode = new Variable();
2366 Variable CatcherTermCode = new Variable();
2367 Variable HandlerAndBCode = new Variable();
2368 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("catch", Goal, Catcher, Handler), B)))
2369 {
2370 foreach (bool l3 in YP.unify(arg3, ListPair.make(new object[] { new Functor3("declare", Atom.a("YP.Catch"), CatchGoal, new Functor2("new", Atom.a("YP.Catch"), new ListPair(GoalTermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL)))), new Functor2("foreach", new Functor1("var", CatchGoal), BCode), new Functor2("foreach", new Functor3("callMember", new Functor1("var", CatchGoal), Atom.a("unifyExceptionOrThrow"), new ListPair(CatcherTermCode, Atom.NIL)), HandlerAndBCode) })))
2371 {
2372 foreach (bool l4 in CompilerState.gensym(State, Atom.a("catchGoal"), CatchGoal))
2373 {
2374 foreach (bool l5 in compileTerm(Goal, State, GoalTermCode))
2375 {
2376 foreach (bool l6 in compileTerm(Catcher, State, CatcherTermCode))
2377 {
2378 foreach (bool l7 in compileRuleBody(B, State, BCode))
2379 {
2380 foreach (bool l8 in compileRuleBody(new Functor2(",", Handler, B), State, HandlerAndBCode))
2381 {
2382 yield return true;
2383 yield break;
2384 }
2385 }
2386 }
2387 }
2388 }
2389 }
2390 }
2391 }
2392 {
2393 object State = arg2;
2394 object PseudoCode = arg3;
2395 Variable A = new Variable();
2396 Variable B = new Variable();
2397 Variable C = new Variable();
2398 foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(",", A, B), C)))
2399 {
2400 foreach (bool l3 in compileRuleBody(new Functor2(",", A, new Functor2(",", B, C)), State, PseudoCode))
2401 {
2402 yield return true;
2403 yield break;
2404 }
2405 }
2406 }
2407 {
2408 object State = arg2;
2409 object PseudoCode = arg3;
2410 Variable A = new Variable();
2411 Variable B = new Variable();
2412 foreach (bool l2 in YP.unify(arg1, new Functor2(";", A, B)))
2413 {
2414 if (YP.var(A))
2415 {
2416 foreach (bool l4 in compileRuleBody(new Functor2(";", new Functor1("call", A), B), State, PseudoCode))
2417 {
2418 yield return true;
2419 yield break;
2420 }
2421 }
2422 }
2423 }
2424 {
2425 object State = arg2;
2426 Variable A = new Variable();
2427 Variable T = new Variable();
2428 Variable B = new Variable();
2429 Variable CutIfLabel = new Variable();
2430 Variable Code = new Variable();
2431 foreach (bool l2 in YP.unify(arg1, new Functor2(";", new Functor2("->", A, T), B)))
2432 {
2433 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("breakableBlock", CutIfLabel, Code), Atom.NIL)))
2434 {
2435 foreach (bool l4 in CompilerState.gensym(State, Atom.a("cutIf"), CutIfLabel))
2436 {
2437 foreach (bool l5 in compileRuleBody(new Functor2(";", new Functor2(",", A, new Functor2(",", new Functor1("$CUTIF", CutIfLabel), T)), B), State, Code))
2438 {
2439 yield return true;
2440 yield break;
2441 }
2442 }
2443 }
2444 }
2445 }
2446 {
2447 object State = arg2;
2448 object PseudoCode = arg3;
2449 Variable _B = new Variable();
2450 foreach (bool l2 in YP.unify(arg1, new Functor2(";", Atom.a("!"), _B)))
2451 {
2452 foreach (bool l3 in compileRuleBody(Atom.a("!"), State, PseudoCode))
2453 {
2454 yield return true;
2455 yield break;
2456 }
2457 }
2458 }
2459 {
2460 object State = arg2;
2461 object PseudoCode = arg3;
2462 Variable A = new Variable();
2463 Variable B = new Variable();
2464 Variable ACode = new Variable();
2465 Variable BCode = new Variable();
2466 foreach (bool l2 in YP.unify(arg1, new Functor2(";", A, B)))
2467 {
2468 foreach (bool l3 in compileRuleBody(A, State, ACode))
2469 {
2470 foreach (bool l4 in compileRuleBody(B, State, BCode))
2471 {
2472 foreach (bool l5 in append(ACode, BCode, PseudoCode))
2473 {
2474 yield return true;
2475 yield break;
2476 }
2477 }
2478 }
2479 }
2480 }
2481 {
2482 object State = arg2;
2483 foreach (bool l2 in YP.unify(arg1, Atom.a("!")))
2484 {
2485 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("return"), Atom.NIL)))
2486 {
2487 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
2488 {
2489 yield return true;
2490 yield break;
2491 }
2492 }
2493 }
2494 }
2495 {
2496 object State = arg2;
2497 foreach (bool l2 in YP.unify(arg1, Atom.a("!")))
2498 {
2499 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("returntrue"), Atom.NIL)))
2500 {
2501 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
2502 {
2503 yield return true;
2504 yield break;
2505 }
2506 }
2507 }
2508 }
2509 {
2510 object State = arg2;
2511 foreach (bool l2 in YP.unify(arg1, Atom.a("!")))
2512 {
2513 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("yieldtrue"), new ListPair(Atom.a("yieldbreak"), Atom.NIL))))
2514 {
2515 CompilerState.setCodeUsesYield(State);
2516 yield return true;
2517 yield break;
2518 }
2519 }
2520 }
2521 {
2522 object _State = arg2;
2523 Variable Name = new Variable();
2524 foreach (bool l2 in YP.unify(arg1, new Functor1("$CUTIF", Name)))
2525 {
2526 foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("breakBlock", Name), Atom.NIL)))
2527 {
2528 yield return true;
2529 yield break;
2530 }
2531 }
2532 }
2533 {
2534 object State = arg2;
2535 foreach (bool l2 in YP.unify(arg1, Atom.a("true")))
2536 {
2537 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("return"), Atom.NIL)))
2538 {
2539 if (CompilerState.determinismEquals(State, Atom.a("detNoneOut")))
2540 {
2541 yield return true;
2542 yield break;
2543 }
2544 }
2545 }
2546 }
2547 {
2548 object State = arg2;
2549 foreach (bool l2 in YP.unify(arg1, Atom.a("true")))
2550 {
2551 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("returntrue"), Atom.NIL)))
2552 {
2553 if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut")))
2554 {
2555 yield return true;
2556 yield break;
2557 }
2558 }
2559 }
2560 }
2561 {
2562 object State = arg2;
2563 foreach (bool l2 in YP.unify(arg1, Atom.a("true")))
2564 {
2565 foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("yieldfalse"), Atom.NIL)))
2566 {
2567 CompilerState.setCodeUsesYield(State);
2568 yield return true;
2569 yield break;
2570 }
2571 }
2572 }
2573 {
2574 object A = arg1;
2575 object State = arg2;
2576 object PseudoCode = arg3;
2577 foreach (bool l2 in compileRuleBody(new Functor2(",", A, Atom.a("true")), State, PseudoCode))
2578 {
2579 yield return true;
2580 yield break;
2581 }
2582 }
2583 }
2584
2585 public static IEnumerable<bool> compileBagof(object ResultMethod, object Template, object Goal, object Bag, object B, object State, object PseudoCode)
2586 {
2587 {
2588 Variable TemplateCode = new Variable();
2589 Variable GoalTermCode = new Variable();
2590 Variable UnqualifiedGoal = new Variable();
2591 Variable BagofAnswers = new Variable();
2592 Variable GoalAndAddCode = new Variable();
2593 Variable BagCode = new Variable();
2594 Variable BCode = new Variable();
2595 foreach (bool l2 in compileTerm(Template, State, TemplateCode))
2596 {
2597 foreach (bool l3 in compileTerm(Goal, State, GoalTermCode))
2598 {
2599 foreach (bool l4 in unqualifiedGoal(Goal, UnqualifiedGoal))
2600 {
2601 foreach (bool l5 in CompilerState.gensym(State, Atom.a("bagofAnswers"), BagofAnswers))
2602 {
2603 foreach (bool l6 in compileRuleBody(new Functor2(",", UnqualifiedGoal, new Functor2(",", new Functor1("$DET_NONE_OUT", new Functor3("callMember", new Functor1("var", BagofAnswers), Atom.a("add"), Atom.NIL)), Atom.a("fail"))), State, GoalAndAddCode))
2604 {
2605 foreach (bool l7 in compileTerm(Bag, State, BagCode))
2606 {
2607 foreach (bool l8 in compileRuleBody(B, State, BCode))
2608 {
2609 foreach (bool l9 in append(new ListPair(new Functor3("declare", Atom.a("BagofAnswers"), BagofAnswers, new Functor2("new", Atom.a("BagofAnswers"), new ListPair(TemplateCode, new ListPair(GoalTermCode, Atom.NIL)))), GoalAndAddCode), new ListPair(new Functor2("foreach", new Functor3("callMember", new Functor1("var", BagofAnswers), ResultMethod, new ListPair(BagCode, Atom.NIL)), BCode), Atom.NIL), PseudoCode))
2610 {
2611 yield return true;
2612 yield break;
2613 }
2614 }
2615 }
2616 }
2617 }
2618 }
2619 }
2620 }
2621 }
2622 }
2623
2624 public static IEnumerable<bool> unqualifiedGoal(object arg1, object arg2)
2625 {
2626 {
2627 object Goal = arg1;
2628 foreach (bool l2 in YP.unify(arg2, new Functor1("call", Goal)))
2629 {
2630 if (YP.var(Goal))
2631 {
2632 yield return true;
2633 yield break;
2634 }
2635 }
2636 }
2637 {
2638 object UnqualifiedGoal = arg2;
2639 Variable x1 = new Variable();
2640 Variable Goal = new Variable();
2641 foreach (bool l2 in YP.unify(arg1, new Functor2("^", x1, Goal)))
2642 {
2643 foreach (bool l3 in unqualifiedGoal(Goal, UnqualifiedGoal))
2644 {
2645 yield return true;
2646 yield break;
2647 }
2648 }
2649 }
2650 {
2651 Variable UnqualifiedGoal = new Variable();
2652 foreach (bool l2 in YP.unify(arg1, UnqualifiedGoal))
2653 {
2654 foreach (bool l3 in YP.unify(arg2, UnqualifiedGoal))
2655 {
2656 yield return true;
2657 yield break;
2658 }
2659 }
2660 }
2661 }
2662
2663 public static IEnumerable<bool> binaryExpressionConditional(object arg1, object arg2)
2664 {
2665 {
2666 foreach (bool l2 in YP.unify(arg1, Atom.a("=:=")))
2667 {
2668 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.equal")))
2669 {
2670 yield return true;
2671 yield break;
2672 }
2673 }
2674 }
2675 {
2676 foreach (bool l2 in YP.unify(arg1, Atom.a("=\\=")))
2677 {
2678 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.notEqual")))
2679 {
2680 yield return true;
2681 yield break;
2682 }
2683 }
2684 }
2685 {
2686 foreach (bool l2 in YP.unify(arg1, Atom.a(">")))
2687 {
2688 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.greaterThan")))
2689 {
2690 yield return true;
2691 yield break;
2692 }
2693 }
2694 }
2695 {
2696 foreach (bool l2 in YP.unify(arg1, Atom.a("<")))
2697 {
2698 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.lessThan")))
2699 {
2700 yield return true;
2701 yield break;
2702 }
2703 }
2704 }
2705 {
2706 foreach (bool l2 in YP.unify(arg1, Atom.a(">=")))
2707 {
2708 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.greaterThanOrEqual")))
2709 {
2710 yield return true;
2711 yield break;
2712 }
2713 }
2714 }
2715 {
2716 foreach (bool l2 in YP.unify(arg1, Atom.a("=<")))
2717 {
2718 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.lessThanOrEqual")))
2719 {
2720 yield return true;
2721 yield break;
2722 }
2723 }
2724 }
2725 }
2726
2727 public static IEnumerable<bool> compileFunctorCall(object Functor_1, object State, object PseudoCode)
2728 {
2729 {
2730 Variable FunctorName = new Variable();
2731 Variable FunctorArgs = new Variable();
2732 Variable x6 = new Variable();
2733 Variable Arity = new Variable();
2734 Variable FunctionName = new Variable();
2735 Variable CompiledArgs = new Variable();
2736 foreach (bool l2 in YP.univ(Functor_1, new ListPair(FunctorName, FunctorArgs)))
2737 {
2738 foreach (bool l3 in YP.functor(Functor_1, x6, Arity))
2739 {
2740 foreach (bool l4 in functorCallFunctionName(State, FunctorName, Arity, FunctionName))
2741 {
2742 foreach (bool l5 in maplist_compileTerm(FunctorArgs, State, CompiledArgs))
2743 {
2744 if (YP.termEqual(FunctionName, Atom.NIL))
2745 {
2746 foreach (bool l7 in YP.unify(PseudoCode, new Functor2("call", Atom.a("YP.matchDynamic"), new ListPair(new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", FunctorName), Atom.NIL)), new ListPair(new Functor1("objectArray", CompiledArgs), Atom.NIL)))))
2747 {
2748 yield return true;
2749 yield break;
2750 }
2751 goto cutIf1;
2752 }
2753 foreach (bool l6 in YP.unify(PseudoCode, new Functor3("functorCall", FunctionName, FunctorArgs, CompiledArgs)))
2754 {
2755 yield return true;
2756 yield break;
2757 }
2758 cutIf1:
2759 { }
2760 }
2761 }
2762 }
2763 }
2764 }
2765 }
2766
2767 public static IEnumerable<bool> functorCallFunctionName(object arg1, object arg2, object arg3, object arg4)
2768 {
2769 {
2770 object _State = arg1;
2771 object Name = arg2;
2772 object Arity = arg3;
2773 object x4 = arg4;
2774 if (functorCallIsSpecialForm(Name, Arity))
2775 {
2776 yield break;
2777 }
2778 }
2779 {
2780 object x1 = arg1;
2781 object Name = arg2;
2782 object Arity = arg3;
2783 object FunctionName = arg4;
2784 foreach (bool l2 in functorCallYPFunctionName(Name, Arity, FunctionName))
2785 {
2786 yield return true;
2787 yield break;
2788 }
2789 }
2790 {
2791 object State = arg1;
2792 object Arity = arg3;
2793 Variable Name = new Variable();
2794 foreach (bool l2 in YP.unify(arg2, Name))
2795 {
2796 foreach (bool l3 in YP.unify(arg4, Name))
2797 {
2798 if (CompilerState.nameArityHasModule(State, Name, Arity, Atom.a("")))
2799 {
2800 yield return true;
2801 yield break;
2802 }
2803 }
2804 }
2805 }
2806 {
2807 object _State = arg1;
2808 object _Arity = arg3;
2809 Variable Name = new Variable();
2810 foreach (bool l2 in YP.unify(arg2, Name))
2811 {
2812 foreach (bool l3 in YP.unify(arg4, Name))
2813 {
2814 foreach (bool l4 in Atom.module(Name, Atom.a("")))
2815 {
2816 yield return true;
2817 yield break;
2818 }
2819 }
2820 }
2821 }
2822 {
2823 object _State = arg1;
2824 object Name = arg2;
2825 object _Arity = arg3;
2826 foreach (bool l2 in YP.unify(arg4, Atom.NIL))
2827 {
2828 foreach (bool l3 in Atom.module(Name, Atom.NIL))
2829 {
2830 yield return true;
2831 yield break;
2832 }
2833 }
2834 }
2835 {
2836 object _State = arg1;
2837 object Name = arg2;
2838 object Arity = arg3;
2839 object x4 = arg4;
2840 Variable Module = new Variable();
2841 Variable Message = new Variable();
2842 foreach (bool l2 in Atom.module(Name, Module))
2843 {
2844 foreach (bool l3 in YP.atom_concat(Atom.a("Not supporting calls to external module: "), Module, Message))
2845 {
2846 YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("callable"), new Functor2("/", Name, Arity)), Message));
2847 yield return true;
2848 yield break;
2849 }
2850 }
2851 }
2852 {
2853 object _State = arg1;
2854 object Name = arg2;
2855 object _Arity = arg3;
2856 object x4 = arg4;
2857 YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("callable"), Name), Atom.a("Term is not callable")));
2858 yield return true;
2859 yield break;
2860 }
2861 }
2862
2863 public static bool functorCallIsSpecialForm(object Name, object Arity)
2864 {
2865 {
2866 Variable x3 = new Variable();
2867 if (YP.termEqual(Arity, 0))
2868 {
2869 if (YP.termEqual(Name, Atom.a("!")))
2870 {
2871 return true;
2872 }
2873 if (YP.termEqual(Name, Atom.a("fail")))
2874 {
2875 return true;
2876 }
2877 if (YP.termEqual(Name, Atom.a("true")))
2878 {
2879 return true;
2880 }
2881 }
2882 if (YP.termEqual(Arity, 1))
2883 {
2884 if (YP.termEqual(Name, Atom.a("\\+")))
2885 {
2886 return true;
2887 }
2888 if (YP.termEqual(Name, Atom.a("once")))
2889 {
2890 return true;
2891 }
2892 if (YP.termEqual(Name, Atom.a("$CUTIF")))
2893 {
2894 return true;
2895 }
2896 if (YP.termEqual(Name, Atom.a("$DET_NONE_OUT")))
2897 {
2898 return true;
2899 }
2900 if (YP.termEqual(Name, Atom.a("call")))
2901 {
2902 return true;
2903 }
2904 if (YP.termEqual(Name, Atom.a("current_predicate")))
2905 {
2906 return true;
2907 }
2908 if (YP.termEqual(Name, Atom.a("asserta")))
2909 {
2910 return true;
2911 }
2912 if (YP.termEqual(Name, Atom.a("assertz")))
2913 {
2914 return true;
2915 }
2916 if (YP.termEqual(Name, Atom.a("assert")))
2917 {
2918 return true;
2919 }
2920 }
2921 if (YP.termEqual(Arity, 2))
2922 {
2923 if (YP.termEqual(Name, Atom.a(";")))
2924 {
2925 return true;
2926 }
2927 if (YP.termEqual(Name, Atom.a(",")))
2928 {
2929 return true;
2930 }
2931 if (YP.termEqual(Name, Atom.a("->")))
2932 {
2933 return true;
2934 }
2935 if (YP.termEqual(Name, Atom.a("\\=")))
2936 {
2937 return true;
2938 }
2939 if (YP.termEqual(Name, Atom.a("is")))
2940 {
2941 return true;
2942 }
2943 foreach (bool l3 in binaryExpressionConditional(Name, x3))
2944 {
2945 return true;
2946 }
2947 }
2948 if (YP.termEqual(Arity, 3))
2949 {
2950 if (YP.termEqual(Name, Atom.a("findall")))
2951 {
2952 return true;
2953 }
2954 if (YP.termEqual(Name, Atom.a("bagof")))
2955 {
2956 return true;
2957 }
2958 if (YP.termEqual(Name, Atom.a("setof")))
2959 {
2960 return true;
2961 }
2962 if (YP.termEqual(Name, Atom.a("catch")))
2963 {
2964 return true;
2965 }
2966 }
2967 }
2968 return false;
2969 }
2970
2971 public static IEnumerable<bool> functorCallYPFunctionName(object arg1, object arg2, object arg3)
2972 {
2973 {
2974 foreach (bool l2 in YP.unify(arg1, Atom.a("=")))
2975 {
2976 foreach (bool l3 in YP.unify(arg2, 2))
2977 {
2978 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.unify")))
2979 {
2980 yield return true;
2981 yield break;
2982 }
2983 }
2984 }
2985 }
2986 {
2987 foreach (bool l2 in YP.unify(arg1, Atom.a("=..")))
2988 {
2989 foreach (bool l3 in YP.unify(arg2, 2))
2990 {
2991 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.univ")))
2992 {
2993 yield return true;
2994 yield break;
2995 }
2996 }
2997 }
2998 }
2999 {
3000 foreach (bool l2 in YP.unify(arg1, Atom.a("var")))
3001 {
3002 foreach (bool l3 in YP.unify(arg2, 1))
3003 {
3004 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.var")))
3005 {
3006 yield return true;
3007 yield break;
3008 }
3009 }
3010 }
3011 }
3012 {
3013 foreach (bool l2 in YP.unify(arg1, Atom.a("nonvar")))
3014 {
3015 foreach (bool l3 in YP.unify(arg2, 1))
3016 {
3017 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.nonvar")))
3018 {
3019 yield return true;
3020 yield break;
3021 }
3022 }
3023 }
3024 }
3025 {
3026 foreach (bool l2 in YP.unify(arg1, Atom.a("arg")))
3027 {
3028 foreach (bool l3 in YP.unify(arg2, 3))
3029 {
3030 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.arg")))
3031 {
3032 yield return true;
3033 yield break;
3034 }
3035 }
3036 }
3037 }
3038 {
3039 foreach (bool l2 in YP.unify(arg1, Atom.a("functor")))
3040 {
3041 foreach (bool l3 in YP.unify(arg2, 3))
3042 {
3043 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.functor")))
3044 {
3045 yield return true;
3046 yield break;
3047 }
3048 }
3049 }
3050 }
3051 {
3052 foreach (bool l2 in YP.unify(arg1, Atom.a("repeat")))
3053 {
3054 foreach (bool l3 in YP.unify(arg2, 0))
3055 {
3056 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.repeat")))
3057 {
3058 yield return true;
3059 yield break;
3060 }
3061 }
3062 }
3063 }
3064 {
3065 foreach (bool l2 in YP.unify(arg1, Atom.a("get_code")))
3066 {
3067 foreach (bool l3 in YP.unify(arg2, 1))
3068 {
3069 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.get_code")))
3070 {
3071 yield return true;
3072 yield break;
3073 }
3074 }
3075 }
3076 }
3077 {
3078 foreach (bool l2 in YP.unify(arg1, Atom.a("current_op")))
3079 {
3080 foreach (bool l3 in YP.unify(arg2, 3))
3081 {
3082 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_op")))
3083 {
3084 yield return true;
3085 yield break;
3086 }
3087 }
3088 }
3089 }
3090 {
3091 foreach (bool l2 in YP.unify(arg1, Atom.a("atom_length")))
3092 {
3093 foreach (bool l3 in YP.unify(arg2, 2))
3094 {
3095 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_length")))
3096 {
3097 yield return true;
3098 yield break;
3099 }
3100 }
3101 }
3102 }
3103 {
3104 foreach (bool l2 in YP.unify(arg1, Atom.a("atom_concat")))
3105 {
3106 foreach (bool l3 in YP.unify(arg2, 3))
3107 {
3108 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_concat")))
3109 {
3110 yield return true;
3111 yield break;
3112 }
3113 }
3114 }
3115 }
3116 {
3117 foreach (bool l2 in YP.unify(arg1, Atom.a("sub_atom")))
3118 {
3119 foreach (bool l3 in YP.unify(arg2, 5))
3120 {
3121 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.sub_atom")))
3122 {
3123 yield return true;
3124 yield break;
3125 }
3126 }
3127 }
3128 }
3129 {
3130 foreach (bool l2 in YP.unify(arg1, Atom.a("atom_chars")))
3131 {
3132 foreach (bool l3 in YP.unify(arg2, 2))
3133 {
3134 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_chars")))
3135 {
3136 yield return true;
3137 yield break;
3138 }
3139 }
3140 }
3141 }
3142 {
3143 foreach (bool l2 in YP.unify(arg1, Atom.a("atom_codes")))
3144 {
3145 foreach (bool l3 in YP.unify(arg2, 2))
3146 {
3147 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_codes")))
3148 {
3149 yield return true;
3150 yield break;
3151 }
3152 }
3153 }
3154 }
3155 {
3156 foreach (bool l2 in YP.unify(arg1, Atom.a("char_code")))
3157 {
3158 foreach (bool l3 in YP.unify(arg2, 2))
3159 {
3160 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.char_code")))
3161 {
3162 yield return true;
3163 yield break;
3164 }
3165 }
3166 }
3167 }
3168 {
3169 foreach (bool l2 in YP.unify(arg1, Atom.a("number_chars")))
3170 {
3171 foreach (bool l3 in YP.unify(arg2, 2))
3172 {
3173 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number_chars")))
3174 {
3175 yield return true;
3176 yield break;
3177 }
3178 }
3179 }
3180 }
3181 {
3182 foreach (bool l2 in YP.unify(arg1, Atom.a("number_codes")))
3183 {
3184 foreach (bool l3 in YP.unify(arg2, 2))
3185 {
3186 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number_codes")))
3187 {
3188 yield return true;
3189 yield break;
3190 }
3191 }
3192 }
3193 }
3194 {
3195 foreach (bool l2 in YP.unify(arg1, Atom.a("copy_term")))
3196 {
3197 foreach (bool l3 in YP.unify(arg2, 2))
3198 {
3199 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.copy_term")))
3200 {
3201 yield return true;
3202 yield break;
3203 }
3204 }
3205 }
3206 }
3207 {
3208 foreach (bool l2 in YP.unify(arg1, Atom.a("sort")))
3209 {
3210 foreach (bool l3 in YP.unify(arg2, 2))
3211 {
3212 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.sort")))
3213 {
3214 yield return true;
3215 yield break;
3216 }
3217 }
3218 }
3219 }
3220 {
3221 // Manually included : script_event for callback to LSL/C#
3222
3223 //object x1 = arg1;
3224 foreach (bool l2 in YP.unify(arg1, Atom.a(@"script_event")))
3225 {
3226 foreach (bool l3 in YP.unify(arg2, 2))
3227 {
3228 foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.script_event")))
3229 {
3230 yield return true;
3231 yield break;
3232 }
3233 }
3234 }
3235 }
3236 {
3237 foreach (bool l2 in YP.unify(arg1, Atom.a("nl")))
3238 {
3239 foreach (bool l3 in YP.unify(arg2, 0))
3240 {
3241 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.nl")))
3242 {
3243 yield return true;
3244 yield break;
3245 }
3246 }
3247 }
3248 }
3249 {
3250 foreach (bool l2 in YP.unify(arg1, Atom.a("write")))
3251 {
3252 foreach (bool l3 in YP.unify(arg2, 1))
3253 {
3254 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.write")))
3255 {
3256 yield return true;
3257 yield break;
3258 }
3259 }
3260 }
3261 }
3262 {
3263 foreach (bool l2 in YP.unify(arg1, Atom.a("put_code")))
3264 {
3265 foreach (bool l3 in YP.unify(arg2, 1))
3266 {
3267 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.put_code")))
3268 {
3269 yield return true;
3270 yield break;
3271 }
3272 }
3273 }
3274 }
3275 {
3276 foreach (bool l2 in YP.unify(arg1, Atom.a("see")))
3277 {
3278 foreach (bool l3 in YP.unify(arg2, 1))
3279 {
3280 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.see")))
3281 {
3282 yield return true;
3283 yield break;
3284 }
3285 }
3286 }
3287 }
3288 {
3289 foreach (bool l2 in YP.unify(arg1, Atom.a("seen")))
3290 {
3291 foreach (bool l3 in YP.unify(arg2, 0))
3292 {
3293 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.seen")))
3294 {
3295 yield return true;
3296 yield break;
3297 }
3298 }
3299 }
3300 }
3301 {
3302 foreach (bool l2 in YP.unify(arg1, Atom.a("tell")))
3303 {
3304 foreach (bool l3 in YP.unify(arg2, 1))
3305 {
3306 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.tell")))
3307 {
3308 yield return true;
3309 yield break;
3310 }
3311 }
3312 }
3313 }
3314 {
3315 foreach (bool l2 in YP.unify(arg1, Atom.a("told")))
3316 {
3317 foreach (bool l3 in YP.unify(arg2, 0))
3318 {
3319 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.told")))
3320 {
3321 yield return true;
3322 yield break;
3323 }
3324 }
3325 }
3326 }
3327 {
3328 foreach (bool l2 in YP.unify(arg1, Atom.a("clause")))
3329 {
3330 foreach (bool l3 in YP.unify(arg2, 2))
3331 {
3332 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.clause")))
3333 {
3334 yield return true;
3335 yield break;
3336 }
3337 }
3338 }
3339 }
3340 {
3341 foreach (bool l2 in YP.unify(arg1, Atom.a("retract")))
3342 {
3343 foreach (bool l3 in YP.unify(arg2, 1))
3344 {
3345 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.retract")))
3346 {
3347 yield return true;
3348 yield break;
3349 }
3350 }
3351 }
3352 }
3353 {
3354 foreach (bool l2 in YP.unify(arg1, Atom.a("abolish")))
3355 {
3356 foreach (bool l3 in YP.unify(arg2, 1))
3357 {
3358 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.abolish")))
3359 {
3360 yield return true;
3361 yield break;
3362 }
3363 }
3364 }
3365 }
3366 {
3367 foreach (bool l2 in YP.unify(arg1, Atom.a("retractall")))
3368 {
3369 foreach (bool l3 in YP.unify(arg2, 1))
3370 {
3371 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.retractall")))
3372 {
3373 yield return true;
3374 yield break;
3375 }
3376 }
3377 }
3378 }
3379 {
3380 foreach (bool l2 in YP.unify(arg1, Atom.a("atom")))
3381 {
3382 foreach (bool l3 in YP.unify(arg2, 1))
3383 {
3384 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom")))
3385 {
3386 yield return true;
3387 yield break;
3388 }
3389 }
3390 }
3391 }
3392 {
3393 foreach (bool l2 in YP.unify(arg1, Atom.a("integer")))
3394 {
3395 foreach (bool l3 in YP.unify(arg2, 1))
3396 {
3397 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.integer")))
3398 {
3399 yield return true;
3400 yield break;
3401 }
3402 }
3403 }
3404 }
3405 {
3406 foreach (bool l2 in YP.unify(arg1, Atom.a("float")))
3407 {
3408 foreach (bool l3 in YP.unify(arg2, 1))
3409 {
3410 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.isFloat")))
3411 {
3412 yield return true;
3413 yield break;
3414 }
3415 }
3416 }
3417 }
3418 {
3419 foreach (bool l2 in YP.unify(arg1, Atom.a("number")))
3420 {
3421 foreach (bool l3 in YP.unify(arg2, 1))
3422 {
3423 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number")))
3424 {
3425 yield return true;
3426 yield break;
3427 }
3428 }
3429 }
3430 }
3431 {
3432 foreach (bool l2 in YP.unify(arg1, Atom.a("atomic")))
3433 {
3434 foreach (bool l3 in YP.unify(arg2, 1))
3435 {
3436 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atomic")))
3437 {
3438 yield return true;
3439 yield break;
3440 }
3441 }
3442 }
3443 }
3444 {
3445 foreach (bool l2 in YP.unify(arg1, Atom.a("compound")))
3446 {
3447 foreach (bool l3 in YP.unify(arg2, 1))
3448 {
3449 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.compound")))
3450 {
3451 yield return true;
3452 yield break;
3453 }
3454 }
3455 }
3456 }
3457 {
3458 foreach (bool l2 in YP.unify(arg1, Atom.a("==")))
3459 {
3460 foreach (bool l3 in YP.unify(arg2, 2))
3461 {
3462 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termEqual")))
3463 {
3464 yield return true;
3465 yield break;
3466 }
3467 }
3468 }
3469 }
3470 {
3471 foreach (bool l2 in YP.unify(arg1, Atom.a("\\==")))
3472 {
3473 foreach (bool l3 in YP.unify(arg2, 2))
3474 {
3475 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termNotEqual")))
3476 {
3477 yield return true;
3478 yield break;
3479 }
3480 }
3481 }
3482 }
3483 {
3484 foreach (bool l2 in YP.unify(arg1, Atom.a("@<")))
3485 {
3486 foreach (bool l3 in YP.unify(arg2, 2))
3487 {
3488 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termLessThan")))
3489 {
3490 yield return true;
3491 yield break;
3492 }
3493 }
3494 }
3495 }
3496 {
3497 foreach (bool l2 in YP.unify(arg1, Atom.a("@=<")))
3498 {
3499 foreach (bool l3 in YP.unify(arg2, 2))
3500 {
3501 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termLessThanOrEqual")))
3502 {
3503 yield return true;
3504 yield break;
3505 }
3506 }
3507 }
3508 }
3509 {
3510 foreach (bool l2 in YP.unify(arg1, Atom.a("@>")))
3511 {
3512 foreach (bool l3 in YP.unify(arg2, 2))
3513 {
3514 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termGreaterThan")))
3515 {
3516 yield return true;
3517 yield break;
3518 }
3519 }
3520 }
3521 }
3522 {
3523 foreach (bool l2 in YP.unify(arg1, Atom.a("@>=")))
3524 {
3525 foreach (bool l3 in YP.unify(arg2, 2))
3526 {
3527 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termGreaterThanOrEqual")))
3528 {
3529 yield return true;
3530 yield break;
3531 }
3532 }
3533 }
3534 }
3535 {
3536 foreach (bool l2 in YP.unify(arg1, Atom.a("throw")))
3537 {
3538 foreach (bool l3 in YP.unify(arg2, 1))
3539 {
3540 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.throwException")))
3541 {
3542 yield return true;
3543 yield break;
3544 }
3545 }
3546 }
3547 }
3548 {
3549 foreach (bool l2 in YP.unify(arg1, Atom.a("current_prolog_flag")))
3550 {
3551 foreach (bool l3 in YP.unify(arg2, 2))
3552 {
3553 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_prolog_flag")))
3554 {
3555 yield return true;
3556 yield break;
3557 }
3558 }
3559 }
3560 }
3561 {
3562 foreach (bool l2 in YP.unify(arg1, Atom.a("set_prolog_flag")))
3563 {
3564 foreach (bool l3 in YP.unify(arg2, 2))
3565 {
3566 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.set_prolog_flag")))
3567 {
3568 yield return true;
3569 yield break;
3570 }
3571 }
3572 }
3573 }
3574 {
3575 foreach (bool l2 in YP.unify(arg1, Atom.a("current_input")))
3576 {
3577 foreach (bool l3 in YP.unify(arg2, 1))
3578 {
3579 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_input")))
3580 {
3581 yield return true;
3582 yield break;
3583 }
3584 }
3585 }
3586 }
3587 {
3588 foreach (bool l2 in YP.unify(arg1, Atom.a("current_output")))
3589 {
3590 foreach (bool l3 in YP.unify(arg2, 1))
3591 {
3592 foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_output")))
3593 {
3594 yield return true;
3595 yield break;
3596 }
3597 }
3598 }
3599 }
3600 {
3601 foreach (bool l2 in YP.unify(arg1, Atom.a("read_term")))
3602 {
3603 foreach (bool l3 in YP.unify(arg2, 2))
3604 {
3605 foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read_term2")))
3606 {
3607 yield return true;
3608 yield break;
3609 }
3610 }
3611 }
3612 }
3613 {
3614 foreach (bool l2 in YP.unify(arg1, Atom.a("read_term")))
3615 {
3616 foreach (bool l3 in YP.unify(arg2, 3))
3617 {
3618 foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read_term3")))
3619 {
3620 yield return true;
3621 yield break;
3622 }
3623 }
3624 }
3625 }
3626 {
3627 foreach (bool l2 in YP.unify(arg1, Atom.a("read")))
3628 {
3629 foreach (bool l3 in YP.unify(arg2, 1))
3630 {
3631 foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read1")))
3632 {
3633 yield return true;
3634 yield break;
3635 }
3636 }
3637 }
3638 }
3639 {
3640 foreach (bool l2 in YP.unify(arg1, Atom.a("read")))
3641 {
3642 foreach (bool l3 in YP.unify(arg2, 2))
3643 {
3644 foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read2")))
3645 {
3646 yield return true;
3647 yield break;
3648 }
3649 }
3650 }
3651 }
3652 }
3653
3654 public static IEnumerable<bool> compileTerm(object arg1, object arg2, object arg3)
3655 {
3656 {
3657 object Term = arg1;
3658 object State = arg2;
3659 Variable VariableName = new Variable();
3660 foreach (bool l2 in YP.unify(arg3, new Functor1("var", VariableName)))
3661 {
3662 if (YP.var(Term))
3663 {
3664 foreach (bool l4 in CompilerState.getVariableName(State, Term, VariableName))
3665 {
3666 yield return true;
3667 yield break;
3668 }
3669 }
3670 }
3671 }
3672 {
3673 object _State = arg2;
3674 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
3675 {
3676 foreach (bool l3 in YP.unify(arg3, new Functor1("var", Atom.a("Atom.NIL"))))
3677 {
3678 yield return true;
3679 yield break;
3680 }
3681 }
3682 }
3683 {
3684 object Term = arg1;
3685 object State = arg2;
3686 object Code = arg3;
3687 Variable ModuleCode = new Variable();
3688 if (YP.atom(Term))
3689 {
3690 foreach (bool l3 in compileAtomModule(Term, 0, State, ModuleCode))
3691 {
3692 foreach (bool l4 in YP.unify(Code, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Term), new ListPair(ModuleCode, Atom.NIL)))))
3693 {
3694 yield return true;
3695 yield break;
3696 }
3697 goto cutIf1;
3698 }
3699 foreach (bool l3 in YP.unify(Code, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Term), Atom.NIL))))
3700 {
3701 yield return true;
3702 yield break;
3703 }
3704 cutIf1:
3705 { }
3706 }
3707 }
3708 {
3709 object State = arg2;
3710 Variable First = new Variable();
3711 Variable Rest = new Variable();
3712 Variable CompiledList = new Variable();
3713 Variable x5 = new Variable();
3714 Variable Rest2 = new Variable();
3715 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
3716 {
3717 foreach (bool l3 in YP.unify(arg3, new Functor2("call", Atom.a("ListPair.make"), new ListPair(new Functor1("objectArray", CompiledList), Atom.NIL))))
3718 {
3719 if (YP.nonvar(Rest))
3720 {
3721 foreach (bool l5 in YP.unify(Rest, new ListPair(x5, Rest2)))
3722 {
3723 if (YP.termNotEqual(Rest2, Atom.NIL))
3724 {
3725 foreach (bool l7 in maplist_compileTerm(new ListPair(First, Rest), State, CompiledList))
3726 {
3727 yield return true;
3728 yield break;
3729 }
3730 }
3731 }
3732 }
3733 }
3734 }
3735 }
3736 {
3737 object State = arg2;
3738 Variable First = new Variable();
3739 Variable Rest = new Variable();
3740 Variable Arg1 = new Variable();
3741 Variable Arg2 = new Variable();
3742 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
3743 {
3744 foreach (bool l3 in YP.unify(arg3, new Functor2("new", Atom.a("ListPair"), new ListPair(Arg1, new ListPair(Arg2, Atom.NIL)))))
3745 {
3746 foreach (bool l4 in compileTerm(First, State, Arg1))
3747 {
3748 foreach (bool l5 in compileTerm(Rest, State, Arg2))
3749 {
3750 yield return true;
3751 yield break;
3752 }
3753 }
3754 }
3755 }
3756 }
3757 {
3758 object Term = arg1;
3759 object State = arg2;
3760 object Result = arg3;
3761 Variable Name = new Variable();
3762 Variable TermArgs = new Variable();
3763 Variable x6 = new Variable();
3764 Variable Arity = new Variable();
3765 Variable ModuleCode = new Variable();
3766 Variable NameCode = new Variable();
3767 Variable X1 = new Variable();
3768 Variable Arg1 = new Variable();
3769 Variable X2 = new Variable();
3770 Variable Arg2 = new Variable();
3771 Variable X3 = new Variable();
3772 Variable Arg3 = new Variable();
3773 Variable Args = new Variable();
3774 foreach (bool l2 in YP.univ(Term, new ListPair(Name, TermArgs)))
3775 {
3776 if (YP.termEqual(TermArgs, Atom.NIL))
3777 {
3778 foreach (bool l4 in YP.unify(Result, new Functor1("object", Name)))
3779 {
3780 yield return true;
3781 yield break;
3782 }
3783 goto cutIf2;
3784 }
3785 foreach (bool l3 in YP.functor(Term, x6, Arity))
3786 {
3787 foreach (bool l4 in compileAtomModule(Name, Arity, State, ModuleCode))
3788 {
3789 foreach (bool l5 in YP.unify(NameCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Name), new ListPair(ModuleCode, Atom.NIL)))))
3790 {
3791 foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL)))
3792 {
3793 foreach (bool l7 in compileTerm(X1, State, Arg1))
3794 {
3795 foreach (bool l8 in YP.unify(Result, new Functor2("new", Atom.a("Functor1"), new ListPair(NameCode, new ListPair(Arg1, Atom.NIL)))))
3796 {
3797 yield return true;
3798 yield break;
3799 }
3800 }
3801 goto cutIf4;
3802 }
3803 foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL))))
3804 {
3805 foreach (bool l7 in compileTerm(X1, State, Arg1))
3806 {
3807 foreach (bool l8 in compileTerm(X2, State, Arg2))
3808 {
3809 foreach (bool l9 in YP.unify(Result, new Functor2("new", Atom.a("Functor2"), ListPair.make(new object[] { NameCode, Arg1, Arg2 }))))
3810 {
3811 yield return true;
3812 yield break;
3813 }
3814 }
3815 }
3816 goto cutIf5;
3817 }
3818 foreach (bool l6 in YP.unify(TermArgs, ListPair.make(new object[] { X1, X2, X3 })))
3819 {
3820 foreach (bool l7 in compileTerm(X1, State, Arg1))
3821 {
3822 foreach (bool l8 in compileTerm(X2, State, Arg2))
3823 {
3824 foreach (bool l9 in compileTerm(X3, State, Arg3))
3825 {
3826 foreach (bool l10 in YP.unify(Result, new Functor2("new", Atom.a("Functor3"), ListPair.make(new object[] { NameCode, Arg1, Arg2, Arg3 }))))
3827 {
3828 yield return true;
3829 yield break;
3830 }
3831 }
3832 }
3833 }
3834 }
3835 foreach (bool l6 in maplist_compileTerm(TermArgs, State, Args))
3836 {
3837 foreach (bool l7 in YP.unify(Result, new Functor2("new", Atom.a("Functor"), new ListPair(NameCode, new ListPair(new Functor1("objectArray", Args), Atom.NIL)))))
3838 {
3839 yield return true;
3840 yield break;
3841 }
3842 }
3843 cutIf5:
3844 cutIf4:
3845 { }
3846 }
3847 goto cutIf3;
3848 }
3849 foreach (bool l4 in YP.unify(NameCode, new Functor1("object", Name)))
3850 {
3851 foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL)))
3852 {
3853 foreach (bool l6 in compileTerm(X1, State, Arg1))
3854 {
3855 foreach (bool l7 in YP.unify(Result, new Functor2("new", Atom.a("Functor1"), new ListPair(NameCode, new ListPair(Arg1, Atom.NIL)))))
3856 {
3857 yield return true;
3858 yield break;
3859 }
3860 }
3861 goto cutIf6;
3862 }
3863 foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL))))
3864 {
3865 foreach (bool l6 in compileTerm(X1, State, Arg1))
3866 {
3867 foreach (bool l7 in compileTerm(X2, State, Arg2))
3868 {
3869 foreach (bool l8 in YP.unify(Result, new Functor2("new", Atom.a("Functor2"), ListPair.make(new object[] { NameCode, Arg1, Arg2 }))))
3870 {
3871 yield return true;
3872 yield break;
3873 }
3874 }
3875 }
3876 goto cutIf7;
3877 }
3878 foreach (bool l5 in YP.unify(TermArgs, ListPair.make(new object[] { X1, X2, X3 })))
3879 {
3880 foreach (bool l6 in compileTerm(X1, State, Arg1))
3881 {
3882 foreach (bool l7 in compileTerm(X2, State, Arg2))
3883 {
3884 foreach (bool l8 in compileTerm(X3, State, Arg3))
3885 {
3886 foreach (bool l9 in YP.unify(Result, new Functor2("new", Atom.a("Functor3"), ListPair.make(new object[] { NameCode, Arg1, Arg2, Arg3 }))))
3887 {
3888 yield return true;
3889 yield break;
3890 }
3891 }
3892 }
3893 }
3894 }
3895 foreach (bool l5 in maplist_compileTerm(TermArgs, State, Args))
3896 {
3897 foreach (bool l6 in YP.unify(Result, new Functor2("new", Atom.a("Functor"), new ListPair(NameCode, new ListPair(new Functor1("objectArray", Args), Atom.NIL)))))
3898 {
3899 yield return true;
3900 yield break;
3901 }
3902 }
3903 cutIf7:
3904 cutIf6:
3905 { }
3906 }
3907 cutIf3:
3908 { }
3909 }
3910 cutIf2:
3911 { }
3912 }
3913 }
3914 }
3915
3916 public static IEnumerable<bool> compileAtomModule(object Name, object arg2, object arg3, object ModuleCode)
3917 {
3918 {
3919 object Arity = arg2;
3920 object State = arg3;
3921 if (CompilerState.nameArityHasModule(State, Name, Arity, Atom.a("")))
3922 {
3923 foreach (bool l3 in YP.unify(ModuleCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Atom.a("")), Atom.NIL))))
3924 {
3925 yield return true;
3926 yield break;
3927 }
3928 }
3929 }
3930 {
3931 object _Arity = arg2;
3932 object _State = arg3;
3933 Variable Module = new Variable();
3934 foreach (bool l2 in Atom.module(Name, Module))
3935 {
3936 if (YP.termNotEqual(Module, Atom.NIL))
3937 {
3938 foreach (bool l4 in YP.unify(ModuleCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Module), Atom.NIL))))
3939 {
3940 yield return true;
3941 yield break;
3942 }
3943 }
3944 }
3945 }
3946 }
3947
3948 public static IEnumerable<bool> maplist_compileTerm(object arg1, object arg2, object arg3)
3949 {
3950 {
3951 object _State = arg2;
3952 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
3953 {
3954 foreach (bool l3 in YP.unify(arg3, Atom.NIL))
3955 {
3956 yield return true;
3957 yield break;
3958 }
3959 }
3960 }
3961 {
3962 object State = arg2;
3963 Variable First = new Variable();
3964 Variable Rest = new Variable();
3965 Variable FirstResult = new Variable();
3966 Variable RestResults = new Variable();
3967 foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest)))
3968 {
3969 foreach (bool l3 in YP.unify(arg3, new ListPair(FirstResult, RestResults)))
3970 {
3971 if (YP.nonvar(Rest))
3972 {
3973 foreach (bool l5 in compileTerm(First, State, FirstResult))
3974 {
3975 foreach (bool l6 in maplist_compileTerm(Rest, State, RestResults))
3976 {
3977 yield return true;
3978 yield break;
3979 }
3980 }
3981 }
3982 }
3983 }
3984 }
3985 }
3986
3987 public static IEnumerable<bool> compileExpression(object Term, object State, object Result)
3988 {
3989 {
3990 Variable Name = new Variable();
3991 Variable TermArgs = new Variable();
3992 Variable X1 = new Variable();
3993 Variable FunctionName = new Variable();
3994 Variable Arg1 = new Variable();
3995 Variable x9 = new Variable();
3996 Variable X2 = new Variable();
3997 Variable Arg2 = new Variable();
3998 Variable x12 = new Variable();
3999 Variable Arity = new Variable();
4000 if (YP.nonvar(Term))
4001 {
4002 foreach (bool l3 in YP.univ(Term, new ListPair(Name, TermArgs)))
4003 {
4004 if (YP.atom(Name))
4005 {
4006 foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL)))
4007 {
4008 foreach (bool l6 in unaryFunction(Name, FunctionName))
4009 {
4010 foreach (bool l7 in compileExpression(X1, State, Arg1))
4011 {
4012 foreach (bool l8 in YP.unify(Result, new Functor2("call", FunctionName, new ListPair(Arg1, Atom.NIL))))
4013 {
4014 yield return true;
4015 yield break;
4016 }
4017 }
4018 goto cutIf1;
4019 }
4020 }
4021 foreach (bool l5 in YP.unify(Term, new ListPair(x9, Atom.NIL)))
4022 {
4023 foreach (bool l6 in compileTerm(Term, State, Result))
4024 {
4025 yield return true;
4026 yield break;
4027 }
4028 goto cutIf2;
4029 }
4030 foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL))))
4031 {
4032 foreach (bool l6 in binaryFunction(Name, FunctionName))
4033 {
4034 foreach (bool l7 in compileExpression(X1, State, Arg1))
4035 {
4036 foreach (bool l8 in compileExpression(X2, State, Arg2))
4037 {
4038 foreach (bool l9 in YP.unify(Result, new Functor2("call", FunctionName, new ListPair(Arg1, new ListPair(Arg2, Atom.NIL)))))
4039 {
4040 yield return true;
4041 yield break;
4042 }
4043 }
4044 }
4045 goto cutIf3;
4046 }
4047 }
4048 foreach (bool l5 in YP.functor(Term, x12, Arity))
4049 {
4050 YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("evaluable"), new Functor2("/", Name, Arity)), Atom.a("Not an expression function")));
4051 yield return false;
4052 }
4053 cutIf3:
4054 cutIf2:
4055 cutIf1:
4056 { }
4057 }
4058 }
4059 }
4060 }
4061 {
4062 foreach (bool l2 in compileTerm(Term, State, Result))
4063 {
4064 yield return true;
4065 yield break;
4066 }
4067 }
4068 }
4069
4070 public static IEnumerable<bool> unaryFunction(object arg1, object arg2)
4071 {
4072 {
4073 foreach (bool l2 in YP.unify(arg1, Atom.a("-")))
4074 {
4075 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.negate")))
4076 {
4077 yield return true;
4078 yield break;
4079 }
4080 }
4081 }
4082 {
4083 foreach (bool l2 in YP.unify(arg1, Atom.a("abs")))
4084 {
4085 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.abs")))
4086 {
4087 yield return true;
4088 yield break;
4089 }
4090 }
4091 }
4092 {
4093 foreach (bool l2 in YP.unify(arg1, Atom.a("sign")))
4094 {
4095 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sign")))
4096 {
4097 yield return true;
4098 yield break;
4099 }
4100 }
4101 }
4102 {
4103 foreach (bool l2 in YP.unify(arg1, Atom.a("float")))
4104 {
4105 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.toFloat")))
4106 {
4107 yield return true;
4108 yield break;
4109 }
4110 }
4111 }
4112 {
4113 foreach (bool l2 in YP.unify(arg1, Atom.a("floor")))
4114 {
4115 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.floor")))
4116 {
4117 yield return true;
4118 yield break;
4119 }
4120 }
4121 }
4122 {
4123 foreach (bool l2 in YP.unify(arg1, Atom.a("truncate")))
4124 {
4125 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.truncate")))
4126 {
4127 yield return true;
4128 yield break;
4129 }
4130 }
4131 }
4132 {
4133 foreach (bool l2 in YP.unify(arg1, Atom.a("round")))
4134 {
4135 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.round")))
4136 {
4137 yield return true;
4138 yield break;
4139 }
4140 }
4141 }
4142 {
4143 foreach (bool l2 in YP.unify(arg1, Atom.a("ceiling")))
4144 {
4145 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.ceiling")))
4146 {
4147 yield return true;
4148 yield break;
4149 }
4150 }
4151 }
4152 {
4153 foreach (bool l2 in YP.unify(arg1, Atom.a("sin")))
4154 {
4155 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sin")))
4156 {
4157 yield return true;
4158 yield break;
4159 }
4160 }
4161 }
4162 {
4163 foreach (bool l2 in YP.unify(arg1, Atom.a("cos")))
4164 {
4165 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.cos")))
4166 {
4167 yield return true;
4168 yield break;
4169 }
4170 }
4171 }
4172 {
4173 foreach (bool l2 in YP.unify(arg1, Atom.a("atan")))
4174 {
4175 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.atan")))
4176 {
4177 yield return true;
4178 yield break;
4179 }
4180 }
4181 }
4182 {
4183 foreach (bool l2 in YP.unify(arg1, Atom.a("exp")))
4184 {
4185 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.exp")))
4186 {
4187 yield return true;
4188 yield break;
4189 }
4190 }
4191 }
4192 {
4193 foreach (bool l2 in YP.unify(arg1, Atom.a("log")))
4194 {
4195 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.log")))
4196 {
4197 yield return true;
4198 yield break;
4199 }
4200 }
4201 }
4202 {
4203 foreach (bool l2 in YP.unify(arg1, Atom.a("sqrt")))
4204 {
4205 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sqrt")))
4206 {
4207 yield return true;
4208 yield break;
4209 }
4210 }
4211 }
4212 {
4213 foreach (bool l2 in YP.unify(arg1, Atom.a("\\")))
4214 {
4215 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseComplement")))
4216 {
4217 yield return true;
4218 yield break;
4219 }
4220 }
4221 }
4222 }
4223
4224 public static IEnumerable<bool> binaryFunction(object arg1, object arg2)
4225 {
4226 {
4227 foreach (bool l2 in YP.unify(arg1, Atom.a("+")))
4228 {
4229 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.add")))
4230 {
4231 yield return true;
4232 yield break;
4233 }
4234 }
4235 }
4236 {
4237 foreach (bool l2 in YP.unify(arg1, Atom.a("-")))
4238 {
4239 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.subtract")))
4240 {
4241 yield return true;
4242 yield break;
4243 }
4244 }
4245 }
4246 {
4247 foreach (bool l2 in YP.unify(arg1, Atom.a("*")))
4248 {
4249 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.multiply")))
4250 {
4251 yield return true;
4252 yield break;
4253 }
4254 }
4255 }
4256 {
4257 foreach (bool l2 in YP.unify(arg1, Atom.a("/")))
4258 {
4259 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.divide")))
4260 {
4261 yield return true;
4262 yield break;
4263 }
4264 }
4265 }
4266 {
4267 foreach (bool l2 in YP.unify(arg1, Atom.a("//")))
4268 {
4269 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.intDivide")))
4270 {
4271 yield return true;
4272 yield break;
4273 }
4274 }
4275 }
4276 {
4277 foreach (bool l2 in YP.unify(arg1, Atom.a("mod")))
4278 {
4279 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.mod")))
4280 {
4281 yield return true;
4282 yield break;
4283 }
4284 }
4285 }
4286 {
4287 foreach (bool l2 in YP.unify(arg1, Atom.a("**")))
4288 {
4289 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.pow")))
4290 {
4291 yield return true;
4292 yield break;
4293 }
4294 }
4295 }
4296 {
4297 foreach (bool l2 in YP.unify(arg1, Atom.a(">>")))
4298 {
4299 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseShiftRight")))
4300 {
4301 yield return true;
4302 yield break;
4303 }
4304 }
4305 }
4306 {
4307 foreach (bool l2 in YP.unify(arg1, Atom.a("<<")))
4308 {
4309 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseShiftLeft")))
4310 {
4311 yield return true;
4312 yield break;
4313 }
4314 }
4315 }
4316 {
4317 foreach (bool l2 in YP.unify(arg1, Atom.a("/\\")))
4318 {
4319 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseAnd")))
4320 {
4321 yield return true;
4322 yield break;
4323 }
4324 }
4325 }
4326 {
4327 foreach (bool l2 in YP.unify(arg1, Atom.a("\\/")))
4328 {
4329 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseOr")))
4330 {
4331 yield return true;
4332 yield break;
4333 }
4334 }
4335 }
4336 {
4337 foreach (bool l2 in YP.unify(arg1, Atom.a("min")))
4338 {
4339 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.min")))
4340 {
4341 yield return true;
4342 yield break;
4343 }
4344 }
4345 }
4346 {
4347 foreach (bool l2 in YP.unify(arg1, Atom.a("max")))
4348 {
4349 foreach (bool l3 in YP.unify(arg2, Atom.a("YP.max")))
4350 {
4351 yield return true;
4352 yield break;
4353 }
4354 }
4355 }
4356 }
4357
4358 public static void convertFunctionCSharp(object arg1)
4359 {
4360 {
4361 foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass")))
4362 {
4363 YP.write(Atom.a("public class YPInnerClass {}"));
4364 YP.nl();
4365 YP.write(Atom.a("public static System.Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }"));
4366 YP.nl();
4367 YP.nl();
4368 return;
4369 }
4370 }
4371 {
4372 Variable ReturnType = new Variable();
4373 Variable Name = new Variable();
4374 Variable ArgList = new Variable();
4375 Variable Body = new Variable();
4376 Variable Level = new Variable();
4377 foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { ReturnType, Name, ArgList, Body })))
4378 {
4379 YP.write(Atom.a("public static "));
4380 YP.write(ReturnType);
4381 YP.write(Atom.a(" "));
4382 YP.write(Name);
4383 YP.write(Atom.a("("));
4384 convertArgListCSharp(ArgList);
4385 YP.write(Atom.a(") {"));
4386 YP.nl();
4387 foreach (bool l3 in YP.unify(Level, 1))
4388 {
4389 convertStatementListCSharp(Body, Level);
4390 YP.write(Atom.a("}"));
4391 YP.nl();
4392 YP.nl();
4393 return;
4394 }
4395 }
4396 }
4397 }
4398
4399 public static IEnumerable<bool> convertStatementListCSharp(object arg1, object x1, object x2)
4400 {
4401 {
4402 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
4403 {
4404 yield return true;
4405 yield break;
4406 }
4407 }
4408 }
4409
4410 public static void convertStatementListCSharp(object arg1, object Level)
4411 {
4412 {
4413 Variable Name = new Variable();
4414 Variable Body = new Variable();
4415 Variable RestStatements = new Variable();
4416 Variable NewStatements = new Variable();
4417 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements)))
4418 {
4419 foreach (bool l3 in append(Body, new ListPair(new Functor1("label", Name), RestStatements), NewStatements))
4420 {
4421 convertStatementListCSharp(NewStatements, Level);
4422 return;
4423 }
4424 }
4425 }
4426 {
4427 Variable Type = new Variable();
4428 Variable Name = new Variable();
4429 Variable Expression = new Variable();
4430 Variable RestStatements = new Variable();
4431 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", Type, Name, Expression), RestStatements)))
4432 {
4433 convertIndentationCSharp(Level);
4434 YP.write(Type);
4435 YP.write(Atom.a(" "));
4436 YP.write(Name);
4437 YP.write(Atom.a(" = "));
4438 convertExpressionCSharp(Expression);
4439 YP.write(Atom.a(";"));
4440 YP.nl();
4441 convertStatementListCSharp(RestStatements, Level);
4442 return;
4443 }
4444 }
4445 {
4446 Variable Name = new Variable();
4447 Variable Expression = new Variable();
4448 Variable RestStatements = new Variable();
4449 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements)))
4450 {
4451 convertIndentationCSharp(Level);
4452 YP.write(Name);
4453 YP.write(Atom.a(" = "));
4454 convertExpressionCSharp(Expression);
4455 YP.write(Atom.a(";"));
4456 YP.nl();
4457 convertStatementListCSharp(RestStatements, Level);
4458 return;
4459 }
4460 }
4461 {
4462 Variable RestStatements = new Variable();
4463 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements)))
4464 {
4465 convertIndentationCSharp(Level);
4466 YP.write(Atom.a("yield return true;"));
4467 YP.nl();
4468 convertStatementListCSharp(RestStatements, Level);
4469 return;
4470 }
4471 }
4472 {
4473 Variable RestStatements = new Variable();
4474 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements)))
4475 {
4476 convertIndentationCSharp(Level);
4477 YP.write(Atom.a("yield return false;"));
4478 YP.nl();
4479 convertStatementListCSharp(RestStatements, Level);
4480 return;
4481 }
4482 }
4483 {
4484 Variable RestStatements = new Variable();
4485 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements)))
4486 {
4487 convertIndentationCSharp(Level);
4488 YP.write(Atom.a("yield break;"));
4489 YP.nl();
4490 convertStatementListCSharp(RestStatements, Level);
4491 return;
4492 }
4493 }
4494 {
4495 Variable RestStatements = new Variable();
4496 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements)))
4497 {
4498 convertIndentationCSharp(Level);
4499 YP.write(Atom.a("return;"));
4500 YP.nl();
4501 convertStatementListCSharp(RestStatements, Level);
4502 return;
4503 }
4504 }
4505 {
4506 Variable RestStatements = new Variable();
4507 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements)))
4508 {
4509 convertIndentationCSharp(Level);
4510 YP.write(Atom.a("return true;"));
4511 YP.nl();
4512 convertStatementListCSharp(RestStatements, Level);
4513 return;
4514 }
4515 }
4516 {
4517 Variable RestStatements = new Variable();
4518 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements)))
4519 {
4520 convertIndentationCSharp(Level);
4521 YP.write(Atom.a("return false;"));
4522 YP.nl();
4523 convertStatementListCSharp(RestStatements, Level);
4524 return;
4525 }
4526 }
4527 {
4528 Variable Name = new Variable();
4529 Variable RestStatements = new Variable();
4530 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("label", Name), RestStatements)))
4531 {
4532 convertIndentationCSharp(Level);
4533 YP.write(Name);
4534 YP.write(Atom.a(":"));
4535 YP.nl();
4536 if (YP.termEqual(RestStatements, Atom.NIL))
4537 {
4538 convertIndentationCSharp(Level);
4539 YP.write(Atom.a("{}"));
4540 YP.nl();
4541 convertStatementListCSharp(RestStatements, Level);
4542 return;
4543 goto cutIf1;
4544 }
4545 convertStatementListCSharp(RestStatements, Level);
4546 return;
4547 cutIf1:
4548 { }
4549 }
4550 }
4551 {
4552 Variable Name = new Variable();
4553 Variable RestStatements = new Variable();
4554 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements)))
4555 {
4556 convertIndentationCSharp(Level);
4557 YP.write(Atom.a("goto "));
4558 YP.write(Name);
4559 YP.write(Atom.a(";"));
4560 YP.nl();
4561 convertStatementListCSharp(RestStatements, Level);
4562 return;
4563 }
4564 }
4565 {
4566 Variable Name = new Variable();
4567 Variable ArgList = new Variable();
4568 Variable RestStatements = new Variable();
4569 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements)))
4570 {
4571 convertIndentationCSharp(Level);
4572 YP.write(Name);
4573 YP.write(Atom.a("("));
4574 convertArgListCSharp(ArgList);
4575 YP.write(Atom.a(");"));
4576 YP.nl();
4577 convertStatementListCSharp(RestStatements, Level);
4578 return;
4579 }
4580 }
4581 {
4582 Variable Name = new Variable();
4583 Variable _FunctorArgs = new Variable();
4584 Variable ArgList = new Variable();
4585 Variable RestStatements = new Variable();
4586 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements)))
4587 {
4588 convertStatementListCSharp(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level);
4589 return;
4590 }
4591 }
4592 {
4593 Variable Obj = new Variable();
4594 Variable Name = new Variable();
4595 Variable ArgList = new Variable();
4596 Variable RestStatements = new Variable();
4597 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements)))
4598 {
4599 convertIndentationCSharp(Level);
4600 YP.write(Obj);
4601 YP.write(Atom.a("."));
4602 YP.write(Name);
4603 YP.write(Atom.a("("));
4604 convertArgListCSharp(ArgList);
4605 YP.write(Atom.a(");"));
4606 YP.nl();
4607 convertStatementListCSharp(RestStatements, Level);
4608 return;
4609 }
4610 }
4611 {
4612 Variable Body = new Variable();
4613 Variable RestStatements = new Variable();
4614 Variable NextLevel = new Variable();
4615 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements)))
4616 {
4617 convertIndentationCSharp(Level);
4618 YP.write(Atom.a("{"));
4619 YP.nl();
4620 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
4621 {
4622 convertStatementListCSharp(Body, NextLevel);
4623 convertIndentationCSharp(Level);
4624 YP.write(Atom.a("}"));
4625 YP.nl();
4626 convertStatementListCSharp(RestStatements, Level);
4627 return;
4628 }
4629 }
4630 }
4631 {
4632 Variable Expression = new Variable();
4633 Variable Body = new Variable();
4634 Variable RestStatements = new Variable();
4635 Variable NextLevel = new Variable();
4636 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements)))
4637 {
4638 convertIndentationCSharp(Level);
4639 YP.write(Atom.a("if ("));
4640 convertExpressionCSharp(Expression);
4641 YP.write(Atom.a(") {"));
4642 YP.nl();
4643 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
4644 {
4645 convertStatementListCSharp(Body, NextLevel);
4646 convertIndentationCSharp(Level);
4647 YP.write(Atom.a("}"));
4648 YP.nl();
4649 convertStatementListCSharp(RestStatements, Level);
4650 return;
4651 }
4652 }
4653 }
4654 {
4655 Variable Expression = new Variable();
4656 Variable Body = new Variable();
4657 Variable RestStatements = new Variable();
4658 Variable NextLevel = new Variable();
4659 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements)))
4660 {
4661 convertIndentationCSharp(Level);
4662 YP.write(Atom.a("foreach (bool l"));
4663 YP.write(Level);
4664 YP.write(Atom.a(" in "));
4665 convertExpressionCSharp(Expression);
4666 YP.write(Atom.a(") {"));
4667 YP.nl();
4668 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
4669 {
4670 convertStatementListCSharp(Body, NextLevel);
4671 convertIndentationCSharp(Level);
4672 YP.write(Atom.a("}"));
4673 YP.nl();
4674 convertStatementListCSharp(RestStatements, Level);
4675 return;
4676 }
4677 }
4678 }
4679 {
4680 Variable Expression = new Variable();
4681 Variable RestStatements = new Variable();
4682 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements)))
4683 {
4684 convertIndentationCSharp(Level);
4685 YP.write(Atom.a("throw "));
4686 convertExpressionCSharp(Expression);
4687 YP.write(Atom.a(";"));
4688 YP.nl();
4689 convertStatementListCSharp(RestStatements, Level);
4690 return;
4691 }
4692 }
4693 }
4694
4695 public static void convertIndentationCSharp(object Level)
4696 {
4697 {
4698 Variable N = new Variable();
4699 foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2)))
4700 {
4701 repeatWrite(Atom.a(" "), N);
4702 return;
4703 }
4704 }
4705 }
4706
4707 public static void convertArgListCSharp(object arg1)
4708 {
4709 {
4710 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
4711 {
4712 return;
4713 }
4714 }
4715 {
4716 Variable Head = new Variable();
4717 Variable Tail = new Variable();
4718 foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail)))
4719 {
4720 convertExpressionCSharp(Head);
4721 if (YP.termNotEqual(Tail, Atom.NIL))
4722 {
4723 YP.write(Atom.a(", "));
4724 convertArgListCSharp(Tail);
4725 return;
4726 goto cutIf1;
4727 }
4728 convertArgListCSharp(Tail);
4729 return;
4730 cutIf1:
4731 { }
4732 }
4733 }
4734 }
4735
4736 public static void convertExpressionCSharp(object arg1)
4737 {
4738 {
4739 Variable X = new Variable();
4740 foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X)))
4741 {
4742 YP.write(Atom.a("object "));
4743 YP.write(X);
4744 return;
4745 }
4746 }
4747 {
4748 Variable Name = new Variable();
4749 Variable ArgList = new Variable();
4750 foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList)))
4751 {
4752 YP.write(Name);
4753 YP.write(Atom.a("("));
4754 convertArgListCSharp(ArgList);
4755 YP.write(Atom.a(")"));
4756 return;
4757 }
4758 }
4759 {
4760 Variable Name = new Variable();
4761 Variable _FunctorArgs = new Variable();
4762 Variable ArgList = new Variable();
4763 foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList)))
4764 {
4765 convertExpressionCSharp(new Functor2("call", Name, ArgList));
4766 return;
4767 }
4768 }
4769 {
4770 Variable Obj = new Variable();
4771 Variable Name = new Variable();
4772 Variable ArgList = new Variable();
4773 foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList)))
4774 {
4775 YP.write(Obj);
4776 YP.write(Atom.a("."));
4777 YP.write(Name);
4778 YP.write(Atom.a("("));
4779 convertArgListCSharp(ArgList);
4780 YP.write(Atom.a(")"));
4781 return;
4782 }
4783 }
4784 {
4785 Variable Name = new Variable();
4786 Variable ArgList = new Variable();
4787 foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList)))
4788 {
4789 YP.write(Atom.a("new "));
4790 YP.write(Name);
4791 YP.write(Atom.a("("));
4792 convertArgListCSharp(ArgList);
4793 YP.write(Atom.a(")"));
4794 return;
4795 }
4796 }
4797 {
4798 Variable Name = new Variable();
4799 foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name)))
4800 {
4801 YP.write(Name);
4802 return;
4803 }
4804 }
4805 {
4806 foreach (bool l2 in YP.unify(arg1, Atom.a("null")))
4807 {
4808 YP.write(Atom.a("null"));
4809 return;
4810 }
4811 }
4812 {
4813 Variable X = new Variable();
4814 foreach (bool l2 in YP.unify(arg1, new Functor1("not", X)))
4815 {
4816 YP.write(Atom.a("!("));
4817 convertExpressionCSharp(X);
4818 YP.write(Atom.a(")"));
4819 return;
4820 }
4821 }
4822 {
4823 Variable X = new Variable();
4824 Variable Y = new Variable();
4825 foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y)))
4826 {
4827 YP.write(Atom.a("("));
4828 convertExpressionCSharp(X);
4829 YP.write(Atom.a(") && ("));
4830 convertExpressionCSharp(Y);
4831 YP.write(Atom.a(")"));
4832 return;
4833 }
4834 }
4835 {
4836 Variable ArgList = new Variable();
4837 foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList)))
4838 {
4839 YP.write(Atom.a("new object[] {"));
4840 convertArgListCSharp(ArgList);
4841 YP.write(Atom.a("}"));
4842 return;
4843 }
4844 }
4845 {
4846 Variable X = new Variable();
4847 Variable Codes = new Variable();
4848 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
4849 {
4850 if (YP.atom(X))
4851 {
4852 YP.write(Atom.a("\""));
4853 foreach (bool l4 in YP.atom_codes(X, Codes))
4854 {
4855 convertStringCodesCSharp(Codes);
4856 YP.write(Atom.a("\""));
4857 return;
4858 }
4859 }
4860 }
4861 }
4862 {
4863 Variable X = new Variable();
4864 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
4865 {
4866 YP.write(X);
4867 return;
4868 }
4869 }
4870 }
4871
4872 public static void convertStringCodesCSharp(object arg1)
4873 {
4874 {
4875 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
4876 {
4877 return;
4878 }
4879 }
4880 {
4881 Variable Code = new Variable();
4882 Variable RestCodes = new Variable();
4883 foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes)))
4884 {
4885 foreach (bool l3 in putCStringCode(Code))
4886 {
4887 convertStringCodesCSharp(RestCodes);
4888 return;
4889 }
4890 }
4891 }
4892 }
4893
4894 public static void convertFunctionJavascript(object arg1)
4895 {
4896 {
4897 foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass")))
4898 {
4899 YP.write(Atom.a("function getDeclaringClass() { return null; }"));
4900 YP.nl();
4901 YP.nl();
4902 return;
4903 }
4904 }
4905 {
4906 Variable x1 = new Variable();
4907 Variable Name = new Variable();
4908 Variable ArgList = new Variable();
4909 Variable Body = new Variable();
4910 foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { x1, Name, ArgList, Body })))
4911 {
4912 YP.write(Atom.a("function "));
4913 YP.write(Name);
4914 YP.write(Atom.a("("));
4915 convertArgListJavascript(ArgList);
4916 YP.write(Atom.a(") {"));
4917 YP.nl();
4918 convertStatementListJavascript(Body, 1);
4919 YP.write(Atom.a("}"));
4920 YP.nl();
4921 YP.nl();
4922 return;
4923 }
4924 }
4925 }
4926
4927 public static void convertStatementListJavascript(object arg1, object arg2)
4928 {
4929 {
4930 object x1 = arg2;
4931 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
4932 {
4933 return;
4934 }
4935 }
4936 {
4937 object Level = arg2;
4938 Variable Name = new Variable();
4939 Variable Body = new Variable();
4940 Variable RestStatements = new Variable();
4941 Variable NextLevel = new Variable();
4942 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements)))
4943 {
4944 convertIndentationJavascript(Level);
4945 YP.write(Name);
4946 YP.write(Atom.a(":"));
4947 YP.nl();
4948 convertIndentationJavascript(Level);
4949 YP.write(Atom.a("{"));
4950 YP.nl();
4951 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
4952 {
4953 convertStatementListJavascript(Body, NextLevel);
4954 convertIndentationJavascript(Level);
4955 YP.write(Atom.a("}"));
4956 YP.nl();
4957 convertStatementListJavascript(RestStatements, Level);
4958 return;
4959 }
4960 }
4961 }
4962 {
4963 object Level = arg2;
4964 Variable _Type = new Variable();
4965 Variable Name = new Variable();
4966 Variable Expression = new Variable();
4967 Variable RestStatements = new Variable();
4968 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", _Type, Name, Expression), RestStatements)))
4969 {
4970 convertIndentationJavascript(Level);
4971 YP.write(Atom.a("var "));
4972 YP.write(Name);
4973 YP.write(Atom.a(" = "));
4974 convertExpressionJavascript(Expression);
4975 YP.write(Atom.a(";"));
4976 YP.nl();
4977 convertStatementListJavascript(RestStatements, Level);
4978 return;
4979 }
4980 }
4981 {
4982 object Level = arg2;
4983 Variable Name = new Variable();
4984 Variable Expression = new Variable();
4985 Variable RestStatements = new Variable();
4986 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements)))
4987 {
4988 convertIndentationJavascript(Level);
4989 YP.write(Name);
4990 YP.write(Atom.a(" = "));
4991 convertExpressionJavascript(Expression);
4992 YP.write(Atom.a(";"));
4993 YP.nl();
4994 convertStatementListJavascript(RestStatements, Level);
4995 return;
4996 }
4997 }
4998 {
4999 object Level = arg2;
5000 Variable RestStatements = new Variable();
5001 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements)))
5002 {
5003 convertIndentationJavascript(Level);
5004 YP.write(Atom.a("yield true;"));
5005 YP.nl();
5006 convertStatementListJavascript(RestStatements, Level);
5007 return;
5008 }
5009 }
5010 {
5011 object Level = arg2;
5012 Variable RestStatements = new Variable();
5013 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements)))
5014 {
5015 convertIndentationJavascript(Level);
5016 YP.write(Atom.a("yield false;"));
5017 YP.nl();
5018 convertStatementListJavascript(RestStatements, Level);
5019 return;
5020 }
5021 }
5022 {
5023 object Level = arg2;
5024 Variable RestStatements = new Variable();
5025 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements)))
5026 {
5027 convertIndentationJavascript(Level);
5028 YP.write(Atom.a("return;"));
5029 YP.nl();
5030 convertStatementListJavascript(RestStatements, Level);
5031 return;
5032 }
5033 }
5034 {
5035 object Level = arg2;
5036 Variable RestStatements = new Variable();
5037 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements)))
5038 {
5039 convertIndentationJavascript(Level);
5040 YP.write(Atom.a("return;"));
5041 YP.nl();
5042 convertStatementListJavascript(RestStatements, Level);
5043 return;
5044 }
5045 }
5046 {
5047 object Level = arg2;
5048 Variable RestStatements = new Variable();
5049 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements)))
5050 {
5051 convertIndentationJavascript(Level);
5052 YP.write(Atom.a("return true;"));
5053 YP.nl();
5054 convertStatementListJavascript(RestStatements, Level);
5055 return;
5056 }
5057 }
5058 {
5059 object Level = arg2;
5060 Variable RestStatements = new Variable();
5061 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements)))
5062 {
5063 convertIndentationJavascript(Level);
5064 YP.write(Atom.a("return false;"));
5065 YP.nl();
5066 convertStatementListJavascript(RestStatements, Level);
5067 return;
5068 }
5069 }
5070 {
5071 object Level = arg2;
5072 Variable Name = new Variable();
5073 Variable RestStatements = new Variable();
5074 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements)))
5075 {
5076 convertIndentationJavascript(Level);
5077 YP.write(Atom.a("break "));
5078 YP.write(Name);
5079 YP.write(Atom.a(";"));
5080 YP.nl();
5081 convertStatementListJavascript(RestStatements, Level);
5082 return;
5083 }
5084 }
5085 {
5086 object Level = arg2;
5087 Variable Name = new Variable();
5088 Variable ArgList = new Variable();
5089 Variable RestStatements = new Variable();
5090 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements)))
5091 {
5092 convertIndentationJavascript(Level);
5093 YP.write(Name);
5094 YP.write(Atom.a("("));
5095 convertArgListJavascript(ArgList);
5096 YP.write(Atom.a(");"));
5097 YP.nl();
5098 convertStatementListJavascript(RestStatements, Level);
5099 return;
5100 }
5101 }
5102 {
5103 object Level = arg2;
5104 Variable Name = new Variable();
5105 Variable _FunctorArgs = new Variable();
5106 Variable ArgList = new Variable();
5107 Variable RestStatements = new Variable();
5108 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements)))
5109 {
5110 convertStatementListJavascript(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level);
5111 return;
5112 }
5113 }
5114 {
5115 object Level = arg2;
5116 Variable Obj = new Variable();
5117 Variable Name = new Variable();
5118 Variable ArgList = new Variable();
5119 Variable RestStatements = new Variable();
5120 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements)))
5121 {
5122 convertIndentationJavascript(Level);
5123 YP.write(Obj);
5124 YP.write(Atom.a("."));
5125 YP.write(Name);
5126 YP.write(Atom.a("("));
5127 convertArgListJavascript(ArgList);
5128 YP.write(Atom.a(");"));
5129 YP.nl();
5130 convertStatementListJavascript(RestStatements, Level);
5131 return;
5132 }
5133 }
5134 {
5135 object Level = arg2;
5136 Variable Body = new Variable();
5137 Variable RestStatements = new Variable();
5138 Variable NextLevel = new Variable();
5139 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements)))
5140 {
5141 convertIndentationJavascript(Level);
5142 YP.write(Atom.a("{"));
5143 YP.nl();
5144 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5145 {
5146 convertStatementListJavascript(Body, NextLevel);
5147 convertIndentationJavascript(Level);
5148 YP.write(Atom.a("}"));
5149 YP.nl();
5150 convertStatementListJavascript(RestStatements, Level);
5151 return;
5152 }
5153 }
5154 }
5155 {
5156 object Level = arg2;
5157 Variable Expression = new Variable();
5158 Variable Body = new Variable();
5159 Variable RestStatements = new Variable();
5160 Variable NextLevel = new Variable();
5161 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements)))
5162 {
5163 convertIndentationJavascript(Level);
5164 YP.write(Atom.a("if ("));
5165 convertExpressionJavascript(Expression);
5166 YP.write(Atom.a(") {"));
5167 YP.nl();
5168 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5169 {
5170 convertStatementListJavascript(Body, NextLevel);
5171 convertIndentationJavascript(Level);
5172 YP.write(Atom.a("}"));
5173 YP.nl();
5174 convertStatementListJavascript(RestStatements, Level);
5175 return;
5176 }
5177 }
5178 }
5179 {
5180 object Level = arg2;
5181 Variable Expression = new Variable();
5182 Variable Body = new Variable();
5183 Variable RestStatements = new Variable();
5184 Variable NextLevel = new Variable();
5185 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements)))
5186 {
5187 convertIndentationJavascript(Level);
5188 YP.write(Atom.a("for each (var l"));
5189 YP.write(Level);
5190 YP.write(Atom.a(" in "));
5191 convertExpressionJavascript(Expression);
5192 YP.write(Atom.a(") {"));
5193 YP.nl();
5194 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5195 {
5196 convertStatementListJavascript(Body, NextLevel);
5197 convertIndentationJavascript(Level);
5198 YP.write(Atom.a("}"));
5199 YP.nl();
5200 convertStatementListJavascript(RestStatements, Level);
5201 return;
5202 }
5203 }
5204 }
5205 {
5206 object Level = arg2;
5207 Variable Expression = new Variable();
5208 Variable RestStatements = new Variable();
5209 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements)))
5210 {
5211 convertIndentationJavascript(Level);
5212 YP.write(Atom.a("throw "));
5213 convertExpressionJavascript(Expression);
5214 YP.write(Atom.a(";"));
5215 YP.nl();
5216 convertStatementListJavascript(RestStatements, Level);
5217 return;
5218 }
5219 }
5220 }
5221
5222 public static void convertIndentationJavascript(object Level)
5223 {
5224 {
5225 Variable N = new Variable();
5226 foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2)))
5227 {
5228 repeatWrite(Atom.a(" "), N);
5229 return;
5230 }
5231 }
5232 }
5233
5234 public static void convertArgListJavascript(object arg1)
5235 {
5236 {
5237 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
5238 {
5239 return;
5240 }
5241 }
5242 {
5243 Variable Head = new Variable();
5244 Variable Tail = new Variable();
5245 foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail)))
5246 {
5247 convertExpressionJavascript(Head);
5248 if (YP.termNotEqual(Tail, Atom.NIL))
5249 {
5250 YP.write(Atom.a(", "));
5251 convertArgListJavascript(Tail);
5252 return;
5253 goto cutIf1;
5254 }
5255 convertArgListJavascript(Tail);
5256 return;
5257 cutIf1:
5258 { }
5259 }
5260 }
5261 }
5262
5263 public static void convertExpressionJavascript(object arg1)
5264 {
5265 {
5266 Variable X = new Variable();
5267 foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X)))
5268 {
5269 YP.write(X);
5270 return;
5271 }
5272 }
5273 {
5274 Variable Name = new Variable();
5275 Variable ArgList = new Variable();
5276 foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList)))
5277 {
5278 YP.write(Name);
5279 YP.write(Atom.a("("));
5280 convertArgListJavascript(ArgList);
5281 YP.write(Atom.a(")"));
5282 return;
5283 }
5284 }
5285 {
5286 Variable Name = new Variable();
5287 Variable _FunctorArgs = new Variable();
5288 Variable ArgList = new Variable();
5289 foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList)))
5290 {
5291 convertExpressionJavascript(new Functor2("call", Name, ArgList));
5292 return;
5293 }
5294 }
5295 {
5296 Variable Obj = new Variable();
5297 Variable Name = new Variable();
5298 Variable ArgList = new Variable();
5299 foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList)))
5300 {
5301 YP.write(Obj);
5302 YP.write(Atom.a("."));
5303 YP.write(Name);
5304 YP.write(Atom.a("("));
5305 convertArgListJavascript(ArgList);
5306 YP.write(Atom.a(")"));
5307 return;
5308 }
5309 }
5310 {
5311 Variable Name = new Variable();
5312 Variable ArgList = new Variable();
5313 foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList)))
5314 {
5315 YP.write(Atom.a("new "));
5316 YP.write(Name);
5317 YP.write(Atom.a("("));
5318 convertArgListJavascript(ArgList);
5319 YP.write(Atom.a(")"));
5320 return;
5321 }
5322 }
5323 {
5324 Variable Name = new Variable();
5325 foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name)))
5326 {
5327 YP.write(Name);
5328 return;
5329 }
5330 }
5331 {
5332 foreach (bool l2 in YP.unify(arg1, Atom.a("null")))
5333 {
5334 YP.write(Atom.a("null"));
5335 return;
5336 }
5337 }
5338 {
5339 Variable X = new Variable();
5340 foreach (bool l2 in YP.unify(arg1, new Functor1("not", X)))
5341 {
5342 YP.write(Atom.a("!("));
5343 convertExpressionJavascript(X);
5344 YP.write(Atom.a(")"));
5345 return;
5346 }
5347 }
5348 {
5349 Variable X = new Variable();
5350 Variable Y = new Variable();
5351 foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y)))
5352 {
5353 YP.write(Atom.a("("));
5354 convertExpressionJavascript(X);
5355 YP.write(Atom.a(") && ("));
5356 convertExpressionJavascript(Y);
5357 YP.write(Atom.a(")"));
5358 return;
5359 }
5360 }
5361 {
5362 Variable ArgList = new Variable();
5363 foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList)))
5364 {
5365 YP.write(Atom.a("["));
5366 convertArgListJavascript(ArgList);
5367 YP.write(Atom.a("]"));
5368 return;
5369 }
5370 }
5371 {
5372 Variable X = new Variable();
5373 Variable Codes = new Variable();
5374 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
5375 {
5376 if (YP.atom(X))
5377 {
5378 YP.write(Atom.a("\""));
5379 foreach (bool l4 in YP.atom_codes(X, Codes))
5380 {
5381 convertStringCodesJavascript(Codes);
5382 YP.write(Atom.a("\""));
5383 return;
5384 }
5385 }
5386 }
5387 }
5388 {
5389 Variable X = new Variable();
5390 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
5391 {
5392 YP.write(X);
5393 return;
5394 }
5395 }
5396 }
5397
5398 public static void convertStringCodesJavascript(object arg1)
5399 {
5400 {
5401 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
5402 {
5403 return;
5404 }
5405 }
5406 {
5407 Variable Code = new Variable();
5408 Variable RestCodes = new Variable();
5409 foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes)))
5410 {
5411 foreach (bool l3 in putCStringCode(Code))
5412 {
5413 convertStringCodesJavascript(RestCodes);
5414 return;
5415 }
5416 }
5417 }
5418 }
5419
5420 public static void convertFunctionPython(object arg1)
5421 {
5422 {
5423 foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass")))
5424 {
5425 YP.write(Atom.a("def getDeclaringClass():"));
5426 YP.nl();
5427 YP.write(Atom.a(" return None"));
5428 YP.nl();
5429 YP.nl();
5430 return;
5431 }
5432 }
5433 {
5434 Variable x1 = new Variable();
5435 Variable Name = new Variable();
5436 Variable ArgList = new Variable();
5437 Variable Body = new Variable();
5438 Variable Level = new Variable();
5439 Variable HasBreakableBlock = new Variable();
5440 foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { x1, Name, ArgList, Body })))
5441 {
5442 YP.write(Atom.a("def "));
5443 YP.write(Name);
5444 YP.write(Atom.a("("));
5445 convertArgListPython(ArgList);
5446 YP.write(Atom.a("):"));
5447 YP.nl();
5448 foreach (bool l3 in YP.unify(Level, 1))
5449 {
5450 if (hasBreakableBlockPython(Body))
5451 {
5452 foreach (bool l5 in YP.unify(HasBreakableBlock, 1))
5453 {
5454 if (YP.termEqual(HasBreakableBlock, 1))
5455 {
5456 convertIndentationPython(Level);
5457 YP.write(Atom.a("doBreak = False"));
5458 YP.nl();
5459 foreach (bool l7 in convertStatementListPython(Body, Level, HasBreakableBlock))
5460 {
5461 YP.nl();
5462 return;
5463 }
5464 goto cutIf2;
5465 }
5466 foreach (bool l6 in convertStatementListPython(Body, Level, HasBreakableBlock))
5467 {
5468 YP.nl();
5469 return;
5470 }
5471 cutIf2:
5472 { }
5473 }
5474 goto cutIf1;
5475 }
5476 foreach (bool l4 in YP.unify(HasBreakableBlock, 0))
5477 {
5478 if (YP.termEqual(HasBreakableBlock, 1))
5479 {
5480 convertIndentationPython(Level);
5481 YP.write(Atom.a("doBreak = False"));
5482 YP.nl();
5483 foreach (bool l6 in convertStatementListPython(Body, Level, HasBreakableBlock))
5484 {
5485 YP.nl();
5486 return;
5487 }
5488 goto cutIf3;
5489 }
5490 foreach (bool l5 in convertStatementListPython(Body, Level, HasBreakableBlock))
5491 {
5492 YP.nl();
5493 return;
5494 }
5495 cutIf3:
5496 { }
5497 }
5498 cutIf1:
5499 { }
5500 }
5501 }
5502 }
5503 }
5504
5505 public static bool hasBreakableBlockPython(object arg1)
5506 {
5507 {
5508 Variable _Name = new Variable();
5509 Variable _Body = new Variable();
5510 Variable _RestStatements = new Variable();
5511 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", _Name, _Body), _RestStatements)))
5512 {
5513 return true;
5514 }
5515 }
5516 {
5517 Variable Body = new Variable();
5518 Variable _RestStatements = new Variable();
5519 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), _RestStatements)))
5520 {
5521 if (hasBreakableBlockPython(Body))
5522 {
5523 return true;
5524 }
5525 }
5526 }
5527 {
5528 Variable _Expression = new Variable();
5529 Variable Body = new Variable();
5530 Variable _RestStatements = new Variable();
5531 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", _Expression, Body), _RestStatements)))
5532 {
5533 if (hasBreakableBlockPython(Body))
5534 {
5535 return true;
5536 }
5537 }
5538 }
5539 {
5540 Variable _Expression = new Variable();
5541 Variable Body = new Variable();
5542 Variable _RestStatements = new Variable();
5543 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", _Expression, Body), _RestStatements)))
5544 {
5545 if (hasBreakableBlockPython(Body))
5546 {
5547 return true;
5548 }
5549 }
5550 }
5551 {
5552 Variable x1 = new Variable();
5553 Variable RestStatements = new Variable();
5554 foreach (bool l2 in YP.unify(arg1, new ListPair(x1, RestStatements)))
5555 {
5556 if (hasBreakableBlockPython(RestStatements))
5557 {
5558 return true;
5559 }
5560 }
5561 }
5562 return false;
5563 }
5564
5565 public static IEnumerable<bool> convertStatementListPython(object arg1, object arg2, object arg3)
5566 {
5567 {
5568 object x1 = arg2;
5569 object x2 = arg3;
5570 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
5571 {
5572 yield return true;
5573 yield break;
5574 }
5575 }
5576 {
5577 object Level = arg2;
5578 object HasBreakableBlock = arg3;
5579 Variable Name = new Variable();
5580 Variable Body = new Variable();
5581 Variable RestStatements = new Variable();
5582 Variable NextLevel = new Variable();
5583 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements)))
5584 {
5585 convertIndentationPython(Level);
5586 YP.write(Name);
5587 YP.write(Atom.a(" = False"));
5588 YP.nl();
5589 convertIndentationPython(Level);
5590 YP.write(Atom.a("for _ in [1]:"));
5591 YP.nl();
5592 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5593 {
5594 foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5595 {
5596 convertIndentationPython(Level);
5597 YP.write(Atom.a("if "));
5598 YP.write(Name);
5599 YP.write(Atom.a(":"));
5600 YP.nl();
5601 convertIndentationPython(NextLevel);
5602 YP.write(Atom.a("doBreak = False"));
5603 YP.nl();
5604 convertIndentationPython(Level);
5605 YP.write(Atom.a("if doBreak:"));
5606 YP.nl();
5607 convertIndentationPython(NextLevel);
5608 YP.write(Atom.a("break"));
5609 YP.nl();
5610 foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5611 {
5612 yield return true;
5613 yield break;
5614 }
5615 }
5616 }
5617 }
5618 }
5619 {
5620 object Level = arg2;
5621 object HasBreakableBlock = arg3;
5622 Variable _Type = new Variable();
5623 Variable Name = new Variable();
5624 Variable Expression = new Variable();
5625 Variable RestStatements = new Variable();
5626 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", _Type, Name, Expression), RestStatements)))
5627 {
5628 convertIndentationPython(Level);
5629 YP.write(Name);
5630 YP.write(Atom.a(" = "));
5631 convertExpressionPython(Expression);
5632 YP.nl();
5633 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5634 {
5635 yield return true;
5636 yield break;
5637 }
5638 }
5639 }
5640 {
5641 object Level = arg2;
5642 object HasBreakableBlock = arg3;
5643 Variable Name = new Variable();
5644 Variable Expression = new Variable();
5645 Variable RestStatements = new Variable();
5646 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements)))
5647 {
5648 convertIndentationPython(Level);
5649 YP.write(Name);
5650 YP.write(Atom.a(" = "));
5651 convertExpressionPython(Expression);
5652 YP.nl();
5653 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5654 {
5655 yield return true;
5656 yield break;
5657 }
5658 }
5659 }
5660 {
5661 object Level = arg2;
5662 object HasBreakableBlock = arg3;
5663 Variable RestStatements = new Variable();
5664 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements)))
5665 {
5666 convertIndentationPython(Level);
5667 YP.write(Atom.a("yield True"));
5668 YP.nl();
5669 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5670 {
5671 yield return true;
5672 yield break;
5673 }
5674 }
5675 }
5676 {
5677 object Level = arg2;
5678 object HasBreakableBlock = arg3;
5679 Variable RestStatements = new Variable();
5680 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements)))
5681 {
5682 convertIndentationPython(Level);
5683 YP.write(Atom.a("yield False"));
5684 YP.nl();
5685 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5686 {
5687 yield return true;
5688 yield break;
5689 }
5690 }
5691 }
5692 {
5693 object Level = arg2;
5694 object HasBreakableBlock = arg3;
5695 Variable RestStatements = new Variable();
5696 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements)))
5697 {
5698 convertIndentationPython(Level);
5699 YP.write(Atom.a("return"));
5700 YP.nl();
5701 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5702 {
5703 yield return true;
5704 yield break;
5705 }
5706 }
5707 }
5708 {
5709 object Level = arg2;
5710 object HasBreakableBlock = arg3;
5711 Variable RestStatements = new Variable();
5712 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements)))
5713 {
5714 convertIndentationPython(Level);
5715 YP.write(Atom.a("return"));
5716 YP.nl();
5717 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5718 {
5719 yield return true;
5720 yield break;
5721 }
5722 }
5723 }
5724 {
5725 object Level = arg2;
5726 object HasBreakableBlock = arg3;
5727 Variable RestStatements = new Variable();
5728 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements)))
5729 {
5730 convertIndentationPython(Level);
5731 YP.write(Atom.a("return True"));
5732 YP.nl();
5733 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5734 {
5735 yield return true;
5736 yield break;
5737 }
5738 }
5739 }
5740 {
5741 object Level = arg2;
5742 object HasBreakableBlock = arg3;
5743 Variable RestStatements = new Variable();
5744 foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements)))
5745 {
5746 convertIndentationPython(Level);
5747 YP.write(Atom.a("return False"));
5748 YP.nl();
5749 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5750 {
5751 yield return true;
5752 yield break;
5753 }
5754 }
5755 }
5756 {
5757 object Level = arg2;
5758 object HasBreakableBlock = arg3;
5759 Variable Name = new Variable();
5760 Variable RestStatements = new Variable();
5761 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements)))
5762 {
5763 convertIndentationPython(Level);
5764 YP.write(Name);
5765 YP.write(Atom.a(" = True"));
5766 YP.nl();
5767 convertIndentationPython(Level);
5768 YP.write(Atom.a("doBreak = True"));
5769 YP.nl();
5770 convertIndentationPython(Level);
5771 YP.write(Atom.a("break"));
5772 YP.nl();
5773 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5774 {
5775 yield return true;
5776 yield break;
5777 }
5778 }
5779 }
5780 {
5781 object Level = arg2;
5782 object HasBreakableBlock = arg3;
5783 Variable Name = new Variable();
5784 Variable ArgList = new Variable();
5785 Variable RestStatements = new Variable();
5786 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements)))
5787 {
5788 convertIndentationPython(Level);
5789 YP.write(Name);
5790 YP.write(Atom.a("("));
5791 convertArgListPython(ArgList);
5792 YP.write(Atom.a(")"));
5793 YP.nl();
5794 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5795 {
5796 yield return true;
5797 yield break;
5798 }
5799 }
5800 }
5801 {
5802 object Level = arg2;
5803 object HasBreakableBlock = arg3;
5804 Variable Name = new Variable();
5805 Variable _FunctorArgs = new Variable();
5806 Variable ArgList = new Variable();
5807 Variable RestStatements = new Variable();
5808 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements)))
5809 {
5810 foreach (bool l3 in convertStatementListPython(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level, HasBreakableBlock))
5811 {
5812 yield return true;
5813 yield break;
5814 }
5815 }
5816 }
5817 {
5818 object Level = arg2;
5819 object HasBreakableBlock = arg3;
5820 Variable Obj = new Variable();
5821 Variable Name = new Variable();
5822 Variable ArgList = new Variable();
5823 Variable RestStatements = new Variable();
5824 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements)))
5825 {
5826 convertIndentationPython(Level);
5827 YP.write(Obj);
5828 YP.write(Atom.a("."));
5829 YP.write(Name);
5830 YP.write(Atom.a("("));
5831 convertArgListPython(ArgList);
5832 YP.write(Atom.a(")"));
5833 YP.nl();
5834 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5835 {
5836 yield return true;
5837 yield break;
5838 }
5839 }
5840 }
5841 {
5842 object Level = arg2;
5843 object HasBreakableBlock = arg3;
5844 Variable Body = new Variable();
5845 Variable RestStatements = new Variable();
5846 Variable NextLevel = new Variable();
5847 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements)))
5848 {
5849 if (YP.termEqual(HasBreakableBlock, 1))
5850 {
5851 convertIndentationPython(Level);
5852 YP.write(Atom.a("for _ in [1]:"));
5853 YP.nl();
5854 foreach (bool l4 in YP.unify(NextLevel, YP.add(Level, 1)))
5855 {
5856 foreach (bool l5 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5857 {
5858 if (YP.termEqual(HasBreakableBlock, 1))
5859 {
5860 if (YP.greaterThan(Level, 1))
5861 {
5862 convertIndentationPython(Level);
5863 YP.write(Atom.a("if doBreak:"));
5864 YP.nl();
5865 convertIndentationPython(NextLevel);
5866 YP.write(Atom.a("break"));
5867 YP.nl();
5868 foreach (bool l8 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5869 {
5870 yield return true;
5871 yield break;
5872 }
5873 goto cutIf3;
5874 }
5875 foreach (bool l7 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5876 {
5877 yield return true;
5878 yield break;
5879 }
5880 cutIf3:
5881 goto cutIf2;
5882 }
5883 foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5884 {
5885 yield return true;
5886 yield break;
5887 }
5888 cutIf2:
5889 { }
5890 }
5891 }
5892 goto cutIf1;
5893 }
5894 foreach (bool l3 in YP.unify(NextLevel, Level))
5895 {
5896 foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5897 {
5898 if (YP.termEqual(HasBreakableBlock, 1))
5899 {
5900 if (YP.greaterThan(Level, 1))
5901 {
5902 convertIndentationPython(Level);
5903 YP.write(Atom.a("if doBreak:"));
5904 YP.nl();
5905 convertIndentationPython(NextLevel);
5906 YP.write(Atom.a("break"));
5907 YP.nl();
5908 foreach (bool l7 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5909 {
5910 yield return true;
5911 yield break;
5912 }
5913 goto cutIf5;
5914 }
5915 foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5916 {
5917 yield return true;
5918 yield break;
5919 }
5920 cutIf5:
5921 goto cutIf4;
5922 }
5923 foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5924 {
5925 yield return true;
5926 yield break;
5927 }
5928 cutIf4:
5929 { }
5930 }
5931 }
5932 cutIf1:
5933 { }
5934 }
5935 }
5936 {
5937 object Level = arg2;
5938 object HasBreakableBlock = arg3;
5939 Variable Expression = new Variable();
5940 Variable Body = new Variable();
5941 Variable RestStatements = new Variable();
5942 Variable NextLevel = new Variable();
5943 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements)))
5944 {
5945 convertIndentationPython(Level);
5946 YP.write(Atom.a("if "));
5947 convertExpressionPython(Expression);
5948 YP.write(Atom.a(":"));
5949 YP.nl();
5950 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5951 {
5952 foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5953 {
5954 foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5955 {
5956 yield return true;
5957 yield break;
5958 }
5959 }
5960 }
5961 }
5962 }
5963 {
5964 object Level = arg2;
5965 object HasBreakableBlock = arg3;
5966 Variable Expression = new Variable();
5967 Variable Body = new Variable();
5968 Variable RestStatements = new Variable();
5969 Variable NextLevel = new Variable();
5970 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements)))
5971 {
5972 convertIndentationPython(Level);
5973 YP.write(Atom.a("for l"));
5974 YP.write(Level);
5975 YP.write(Atom.a(" in "));
5976 convertExpressionPython(Expression);
5977 YP.write(Atom.a(":"));
5978 YP.nl();
5979 foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1)))
5980 {
5981 foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock))
5982 {
5983 if (YP.termEqual(HasBreakableBlock, 1))
5984 {
5985 convertIndentationPython(Level);
5986 YP.write(Atom.a("if doBreak:"));
5987 YP.nl();
5988 convertIndentationPython(NextLevel);
5989 YP.write(Atom.a("break"));
5990 YP.nl();
5991 foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5992 {
5993 yield return true;
5994 yield break;
5995 }
5996 goto cutIf6;
5997 }
5998 foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
5999 {
6000 yield return true;
6001 yield break;
6002 }
6003 cutIf6:
6004 { }
6005 }
6006 }
6007 }
6008 }
6009 {
6010 object Level = arg2;
6011 object HasBreakableBlock = arg3;
6012 Variable Expression = new Variable();
6013 Variable RestStatements = new Variable();
6014 foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements)))
6015 {
6016 convertIndentationPython(Level);
6017 YP.write(Atom.a("raise "));
6018 convertExpressionPython(Expression);
6019 YP.nl();
6020 foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock))
6021 {
6022 yield return true;
6023 yield break;
6024 }
6025 }
6026 }
6027 }
6028
6029 public static void convertIndentationPython(object Level)
6030 {
6031 {
6032 Variable N = new Variable();
6033 foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2)))
6034 {
6035 repeatWrite(Atom.a(" "), N);
6036 return;
6037 }
6038 }
6039 }
6040
6041 public static void convertArgListPython(object arg1)
6042 {
6043 {
6044 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
6045 {
6046 return;
6047 }
6048 }
6049 {
6050 Variable Head = new Variable();
6051 Variable Tail = new Variable();
6052 foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail)))
6053 {
6054 convertExpressionPython(Head);
6055 if (YP.termNotEqual(Tail, Atom.NIL))
6056 {
6057 YP.write(Atom.a(", "));
6058 convertArgListPython(Tail);
6059 return;
6060 goto cutIf1;
6061 }
6062 convertArgListPython(Tail);
6063 return;
6064 cutIf1:
6065 { }
6066 }
6067 }
6068 }
6069
6070 public static void convertExpressionPython(object arg1)
6071 {
6072 {
6073 Variable X = new Variable();
6074 foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X)))
6075 {
6076 YP.write(X);
6077 return;
6078 }
6079 }
6080 {
6081 Variable Name = new Variable();
6082 Variable ArgList = new Variable();
6083 foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList)))
6084 {
6085 YP.write(Name);
6086 YP.write(Atom.a("("));
6087 convertArgListPython(ArgList);
6088 YP.write(Atom.a(")"));
6089 return;
6090 }
6091 }
6092 {
6093 Variable Name = new Variable();
6094 Variable _FunctorArgs = new Variable();
6095 Variable ArgList = new Variable();
6096 foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList)))
6097 {
6098 convertExpressionPython(new Functor2("call", Name, ArgList));
6099 return;
6100 }
6101 }
6102 {
6103 Variable Obj = new Variable();
6104 Variable Name = new Variable();
6105 Variable ArgList = new Variable();
6106 foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList)))
6107 {
6108 YP.write(Obj);
6109 YP.write(Atom.a("."));
6110 YP.write(Name);
6111 YP.write(Atom.a("("));
6112 convertArgListPython(ArgList);
6113 YP.write(Atom.a(")"));
6114 return;
6115 }
6116 }
6117 {
6118 Variable Name = new Variable();
6119 Variable ArgList = new Variable();
6120 foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList)))
6121 {
6122 YP.write(Name);
6123 YP.write(Atom.a("("));
6124 convertArgListPython(ArgList);
6125 YP.write(Atom.a(")"));
6126 return;
6127 }
6128 }
6129 {
6130 Variable Name = new Variable();
6131 foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name)))
6132 {
6133 YP.write(Name);
6134 return;
6135 }
6136 }
6137 {
6138 foreach (bool l2 in YP.unify(arg1, Atom.a("null")))
6139 {
6140 YP.write(Atom.a("None"));
6141 return;
6142 }
6143 }
6144 {
6145 Variable X = new Variable();
6146 foreach (bool l2 in YP.unify(arg1, new Functor1("not", X)))
6147 {
6148 YP.write(Atom.a("not ("));
6149 convertExpressionPython(X);
6150 YP.write(Atom.a(")"));
6151 return;
6152 }
6153 }
6154 {
6155 Variable X = new Variable();
6156 Variable Y = new Variable();
6157 foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y)))
6158 {
6159 YP.write(Atom.a("("));
6160 convertExpressionPython(X);
6161 YP.write(Atom.a(") and ("));
6162 convertExpressionPython(Y);
6163 YP.write(Atom.a(")"));
6164 return;
6165 }
6166 }
6167 {
6168 Variable ArgList = new Variable();
6169 foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList)))
6170 {
6171 YP.write(Atom.a("["));
6172 convertArgListPython(ArgList);
6173 YP.write(Atom.a("]"));
6174 return;
6175 }
6176 }
6177 {
6178 Variable X = new Variable();
6179 Variable Codes = new Variable();
6180 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
6181 {
6182 if (YP.atom(X))
6183 {
6184 YP.write(Atom.a("\""));
6185 foreach (bool l4 in YP.atom_codes(X, Codes))
6186 {
6187 convertStringCodesPython(Codes);
6188 YP.write(Atom.a("\""));
6189 return;
6190 }
6191 }
6192 }
6193 }
6194 {
6195 Variable X = new Variable();
6196 foreach (bool l2 in YP.unify(arg1, new Functor1("object", X)))
6197 {
6198 YP.write(X);
6199 return;
6200 }
6201 }
6202 }
6203
6204 public static void convertStringCodesPython(object arg1)
6205 {
6206 {
6207 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
6208 {
6209 return;
6210 }
6211 }
6212 {
6213 Variable Code = new Variable();
6214 Variable RestCodes = new Variable();
6215 foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes)))
6216 {
6217 if (YP.termEqual(Code, 34))
6218 {
6219 YP.put_code(92);
6220 YP.put_code(Code);
6221 convertStringCodesPython(RestCodes);
6222 return;
6223 goto cutIf1;
6224 }
6225 if (YP.termEqual(Code, 92))
6226 {
6227 YP.put_code(92);
6228 YP.put_code(Code);
6229 convertStringCodesPython(RestCodes);
6230 return;
6231 goto cutIf1;
6232 }
6233 YP.put_code(Code);
6234 convertStringCodesPython(RestCodes);
6235 return;
6236 cutIf1:
6237 { }
6238 }
6239 }
6240 }
6241
6242 public static IEnumerable<bool> putCStringCode(object Code)
6243 {
6244 {
6245 Variable HexDigit = new Variable();
6246 Variable HexChar = new Variable();
6247 if (YP.lessThanOrEqual(Code, 31))
6248 {
6249 if (YP.lessThanOrEqual(Code, 15))
6250 {
6251 YP.write(Atom.a("\\u000"));
6252 foreach (bool l4 in YP.unify(HexDigit, Code))
6253 {
6254 if (YP.lessThanOrEqual(HexDigit, 9))
6255 {
6256 foreach (bool l6 in YP.unify(HexChar, YP.add(HexDigit, 48)))
6257 {
6258 YP.put_code(HexChar);
6259 yield return true;
6260 yield break;
6261 }
6262 goto cutIf2;
6263 }
6264 foreach (bool l5 in YP.unify(HexChar, YP.add(HexDigit, 55)))
6265 {
6266 YP.put_code(HexChar);
6267 yield return true;
6268 yield break;
6269 }
6270 cutIf2:
6271 { }
6272 }
6273 goto cutIf1;
6274 }
6275 YP.write(Atom.a("\\u001"));
6276 foreach (bool l3 in YP.unify(HexDigit, YP.subtract(Code, 16)))
6277 {
6278 if (YP.lessThanOrEqual(HexDigit, 9))
6279 {
6280 foreach (bool l5 in YP.unify(HexChar, YP.add(HexDigit, 48)))
6281 {
6282 YP.put_code(HexChar);
6283 yield return true;
6284 yield break;
6285 }
6286 goto cutIf3;
6287 }
6288 foreach (bool l4 in YP.unify(HexChar, YP.add(HexDigit, 55)))
6289 {
6290 YP.put_code(HexChar);
6291 yield return true;
6292 yield break;
6293 }
6294 cutIf3:
6295 { }
6296 }
6297 cutIf1:
6298 { }
6299 }
6300 }
6301 {
6302 if (YP.termEqual(Code, 34))
6303 {
6304 YP.put_code(92);
6305 YP.put_code(34);
6306 yield return true;
6307 yield break;
6308 }
6309 }
6310 {
6311 if (YP.termEqual(Code, 92))
6312 {
6313 YP.put_code(92);
6314 YP.put_code(92);
6315 yield return true;
6316 yield break;
6317 }
6318 }
6319 {
6320 YP.put_code(Code);
6321 yield return true;
6322 yield break;
6323 }
6324 }
6325
6326 public static IEnumerable<bool> member(object X, object arg2)
6327 {
6328 {
6329 Variable x2 = new Variable();
6330 foreach (bool l2 in YP.unify(arg2, new ListPair(X, x2)))
6331 {
6332 yield return false;
6333 }
6334 }
6335 {
6336 Variable x2 = new Variable();
6337 Variable Rest = new Variable();
6338 foreach (bool l2 in YP.unify(arg2, new ListPair(x2, Rest)))
6339 {
6340 foreach (bool l3 in member(X, Rest))
6341 {
6342 yield return false;
6343 }
6344 }
6345 }
6346 }
6347
6348 public static IEnumerable<bool> append(object arg1, object arg2, object arg3)
6349 {
6350 {
6351 Variable List = new Variable();
6352 foreach (bool l2 in YP.unify(arg1, Atom.NIL))
6353 {
6354 foreach (bool l3 in YP.unify(arg2, List))
6355 {
6356 foreach (bool l4 in YP.unify(arg3, List))
6357 {
6358 yield return false;
6359 }
6360 }
6361 }
6362 }
6363 {
6364 object List2 = arg2;
6365 Variable X = new Variable();
6366 Variable List1 = new Variable();
6367 Variable List12 = new Variable();
6368 foreach (bool l2 in YP.unify(arg1, new ListPair(X, List1)))
6369 {
6370 foreach (bool l3 in YP.unify(arg3, new ListPair(X, List12)))
6371 {
6372 foreach (bool l4 in append(List1, List2, List12))
6373 {
6374 yield return false;
6375 }
6376 }
6377 }
6378 }
6379 }
6380 #pragma warning restore 0168, 0219, 0164,0162
6381 }
6382}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt
deleted file mode 100644
index a39d1db..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt
+++ /dev/null
@@ -1,12 +0,0 @@
1//c#
2namespace SecondLife {
3 public class Script : OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass
4{
5 public Script() { }
6
7 public void default_event_state_entry( )
8 {
9 llSay(0, "testing, I've been touched");
10 }
11
12}} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs
index 32e1df1..6d8096f 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs
@@ -39,6 +39,7 @@ using System.IO;
39using System.Runtime.Serialization.Formatters.Binary; 39using System.Runtime.Serialization.Formatters.Binary;
40using System.Threading; 40using System.Threading;
41using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 41using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
42using OpenSim.Region.ScriptEngine.Shared.CodeTools;
42 43
43namespace OpenSim.Region.ScriptEngine.DotNetEngine 44namespace OpenSim.Region.ScriptEngine.DotNetEngine
44{ 45{
@@ -87,13 +88,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
87 Unload = 2 88 Unload = 2
88 } 89 }
89 90
90 public Dictionary<UUID, String> scriptList =
91 new Dictionary<UUID, string>();
92
93 public Dictionary<uint, Dictionary<UUID, InstanceData>> Scripts = 91 public Dictionary<uint, Dictionary<UUID, InstanceData>> Scripts =
94 new Dictionary<uint, Dictionary<UUID, InstanceData>>(); 92 new Dictionary<uint, Dictionary<UUID, InstanceData>>();
95 93
96 private Compiler.LSL.Compiler LSLCompiler; 94 private Compiler LSLCompiler;
97 95
98 public Scene World 96 public Scene World
99 { 97 {
@@ -105,7 +103,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
105 public void Initialize() 103 public void Initialize()
106 { 104 {
107 // Create our compiler 105 // Create our compiler
108 LSLCompiler = new Compiler.LSL.Compiler(m_scriptEngine); 106 LSLCompiler = new Compiler(m_scriptEngine);
109 } 107 }
110 108
111 public void _StartScript(uint localID, UUID itemID, string Script, 109 public void _StartScript(uint localID, UUID itemID, string Script,
@@ -136,23 +134,22 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
136 if (m_host.TaskInventory.TryGetValue(itemID, out taskInventoryItem)) 134 if (m_host.TaskInventory.TryGetValue(itemID, out taskInventoryItem))
137 assetID = taskInventoryItem.AssetID; 135 assetID = taskInventoryItem.AssetID;
138 136
137 ScenePresence presence =
138 World.GetScenePresence(taskInventoryItem.OwnerID);
139
139 try 140 try
140 { 141 {
141 if (scriptList.TryGetValue(assetID, out CompiledScriptFile)) 142 // Compile (We assume LSL)
142 { 143 CompiledScriptFile =
143 m_log.InfoFormat("[SCRIPT]: Found existing compile of "+ 144 LSLCompiler.PerformScriptCompile(Script,
144 "assetID {0}: {1}", assetID, CompiledScriptFile); 145 assetID.ToString());
145 }
146 else
147 {
148 // Compile (We assume LSL)
149 CompiledScriptFile =
150 LSLCompiler.PerformScriptCompile(Script);
151 146
152 m_log.InfoFormat("[SCRIPT]: Compiled assetID {0}: {1}", 147 if (presence != null)
153 assetID, CompiledScriptFile); 148 presence.ControllingClient.SendAgentAlertMessage(
154 scriptList.Add(assetID, CompiledScriptFile); 149 "Compile successful", false);
155 } 150
151 m_log.InfoFormat("[SCRIPT]: Compiled assetID {0}: {1}",
152 assetID, CompiledScriptFile);
156 153
157 InstanceData id = new InstanceData(); 154 InstanceData id = new InstanceData();
158 155
@@ -201,6 +198,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
201 } 198 }
202 catch (Exception e) // LEGIT: User Scripting 199 catch (Exception e) // LEGIT: User Scripting
203 { 200 {
201 if (presence != null)
202 presence.ControllingClient.SendAgentAlertMessage(
203 "Script saved with errors, check debug window!",
204 false);
204 try 205 try
205 { 206 {
206 // DISPLAY ERROR INWORLD 207 // DISPLAY ERROR INWORLD
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
index b14e7ac..5cb6106 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
@@ -83,8 +83,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
83 // private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files 83 // private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files
84 private static UInt64 scriptCompileCounter = 0; // And a counter 84 private static UInt64 scriptCompileCounter = 0; // And a counter
85 85
86 public IScriptEngine m_scriptEngine; 86 public IEventReceiver m_scriptEngine;
87 public Compiler(IScriptEngine scriptEngine) 87 public Compiler(IEventReceiver scriptEngine)
88 { 88 {
89 m_scriptEngine = scriptEngine; 89 m_scriptEngine = scriptEngine;
90 ReadConfig(); 90 ReadConfig();