diff --git a/cmd/mxcli/help.go b/cmd/mxcli/help.go index dcaf4387..95bcd190 100644 --- a/cmd/mxcli/help.go +++ b/cmd/mxcli/help.go @@ -3,374 +3,77 @@ package main import ( - "embed" "fmt" "os" - "sort" "strings" + "github.com/mendixlabs/mxcli/cmd/mxcli/syntax" "github.com/spf13/cobra" ) -//go:embed help_topics/*.txt -var helpTopics embed.FS - -// showTopicHelp prints an embedded help topic file. -func showTopicHelp(name string) { - data, err := helpTopics.ReadFile("help_topics/" + name + ".txt") - if err != nil { - fmt.Printf("Unknown topic: %s\n", name) - return - } - os.Stdout.Write(data) -} - -// Reserved keywords that cannot be used as identifiers without quoting -var reservedKeywords = []string{ - // DDL Keywords - "CREATE", "ALTER", "DROP", "RENAME", "MOVE", "MODIFY", - "ENTITY", "PERSISTENT", "NON_PERSISTENT", "VIEW", "EXTERNAL", - "ASSOCIATION", "ENUMERATION", "MODULE", "MICROFLOW", "NANOFLOW", - "PAGE", "SNIPPET", "LAYOUT", "NOTEBOOK", "CONSTANT", - "ATTRIBUTE", "COLUMN", "INDEX", "OWNER", "REFERENCE", "GENERALIZATION", "EXTENDS", - "ADD", "SET", "POSITION", "DOCUMENTATION", - - // Delete Behavior - "DELETE_BEHAVIOR", "CASCADE", "PREVENT", - "DELETE_AND_REFERENCES", "DELETE_BUT_KEEP_REFERENCES", "DELETE_IF_NO_REFERENCES", - - // Connection Keywords - "CONNECT", "DISCONNECT", "LOCAL", "PROJECT", "RUNTIME", "BRANCH", "TOKEN", - "HOST", "PORT", "SHOW", "DESCRIBE", "USE", "INTROSPECT", "DEBUG", - - // Query Keywords - "SELECT", "FROM", "WHERE", "HAVING", "OFFSET", "LIMIT", "AS", "RETURNS", "RETURNING", - "CASE", "WHEN", "THEN", "ELSE", "END", "DISTINCT", "ALL", - "JOIN", "LEFT", "RIGHT", "INNER", "OUTER", "FULL", "CROSS", "ON", - "GROUP_BY", "ORDER_BY", "SORT_BY", "ASC", "DESC", - - // Microflow Keywords - "BEGIN", "DECLARE", "CHANGE", "RETRIEVE", "DELETE", "COMMIT", "ROLLBACK", - "LOOP", "WHILE", "IF", "ELSIF", "ELSEIF", "CONTINUE", "BREAK", "RETURN", "THROW", - "LOG", "CALL", "JAVA", "ACTION", "ACTIONS", "CLOSE", - "NODE", "EVENTS", - - // List Operations - "HEAD", "TAIL", "FIND", "SORT", "UNION", "INTERSECT", "SUBTRACT", "CONTAINS", - "AVERAGE", "MINIMUM", "MAXIMUM", "LIST", "REMOVE", "EQUALS", - - // Log Levels - "INFO", "WARNING", "TRACE", "CRITICAL", - - // Page/Widget Keywords (commonly confused with identifiers) - "TITLE", "LABEL", "CAPTION", "ICON", "TOOLTIP", - "DATASOURCE", "SOURCE", "SELECTION", "FOOTER", "HEADER", "CONTENT", - "CLASS", "STYLE", "WIDTH", "HEIGHT", "EDITABLE", "READONLY", "VISIBLE", - "BUTTON", "CONTAINER", "ROW", "ITEM", - "PRIMARY", "SUCCESS", "DANGER", "DEFAULT", - "TEMPLATE", "ONCLICK", "ONCHANGE", - - // Widget Type Keywords - "ACTIONBUTTON", "CHECKBOX", "COMBOBOX", "CONTROLBAR", "CUSTOMWIDGET", - "DATAGRID", "DATAVIEW", "DATEPICKER", "DROPDOWN", "DYNAMICTEXT", - "GALLERY", "LAYOUTGRID", "LINKBUTTON", "LISTVIEW", "NAVIGATIONLIST", - "PLACEHOLDER", "RADIOBUTTONS", "SEARCHBAR", "SNIPPETCALL", - "STATICTEXT", "TEXTAREA", "TEXTBOX", - - // Security Keywords - "GRANT", "REVOKE", "ROLE", "ROLES", "SECURITY", "LEVEL", "PROTOTYPE", "PRODUCTION", - "DEMO", "USER", "MANAGE", "MATRIX", "ACCESS", "DESCRIPTION", - - // Settings / Business Events Keywords - "SETTINGS", "CONFIGURATION", "BUSINESS", "PUBLISH", "SUBSCRIBE", - - // Fragment Keywords - "DEFINE", "FRAGMENT", "FRAGMENTS", - - // Other MDL Keywords - "AUTOFILL", "CHECK", "EXECUTE", "EXPOSED", "FILTER", "LINT", - "PASSING", "REFRESH", "RENDERMODE", "SAVE_CHANGES", "CANCEL_CHANGES", - "CLOSE_PAGE", "DELETE_ACTION", "SHOW_PAGE", "CREATE_OBJECT", "CALL_MICROFLOW", - "TABINDEX", "TEXT", "VARIABLE", "WIDGET", "WIDGETS", "WITHOUT", - - // Data Type Keywords - "STRING", "INTEGER", "LONG", "DECIMAL", "BOOLEAN", "DATETIME", "DATE", - "AUTONUMBER", "BINARY", "HASHEDSTRING", "CURRENCY", "FLOAT", "ENUM", - - // Aggregate Functions - "COUNT", "SUM", "AVG", "MIN", "MAX", "LENGTH", "TRIM", "COALESCE", "CAST", - - // Logical/Comparison - "AND", "OR", "NOT", "NULL", "IN", "BETWEEN", "LIKE", "EXISTS", - "UNIQUE", "TRUE", "FALSE", - - // Validation/Constraint - "VALIDATION", "FEEDBACK", "RULE", "REQUIRED", "ERROR", "RANGE", "REGEX", - "PATTERN", "EXPRESSION", "XPATH", "CONSTRAINT", - - // REST Client - "REST", "SERVICE", "SERVICES", "BASE", "AUTHENTICATION", "BASIC", "OAUTH", - "OPERATION", "METHOD", "PATH", "TIMEOUT", "BODY", "RESPONSE", "REQUEST", - "JSON", "XML", "STATUS", "VERSION", "GET", "POST", "PUT", "PATCH", - "API", "CLIENT", "CLIENTS", "USERNAME", "PASSWORD", "CONNECTION", "DATABASE", - "QUERY", "MAP", "PARAMETER", "PARAMETERS", - - // Utility - "TYPE", "VALUE", "SINGLE", "MULTIPLE", "NONE", "BOTH", "TO", "OF", "OVER", "FOR", - "REPLACE", "MEMBERS", "FORMAT", "SQL", "WITH", "EMPTY", "OBJECT", "OBJECTS", - "MESSAGE", "COMMENT", "CATALOG", "FORCE", "BACKGROUND", "FOLDER", - "CALLERS", "CALLEES", "REFERENCES", "TRANSITIVE", "IMPACT", "DEPTH", - "SEARCH", "MATCH", "STRUCTURE", "CONTEXT", -} - -// Attribute types with descriptions -var attributeTypes = map[string]string{ - "String(n)": "Variable-length text up to n characters (e.g., String(200))", - "Integer": "Whole number (-2,147,483,648 to 2,147,483,647)", - "Long": "Large whole number (-9,223,372,036,854,775,808 to ...)", - "Decimal": "Precise decimal number for currency/calculations", - "Boolean": "True or false value", - "DateTime": "Date and time combined (DateAndTime also accepted)", - "Date": "Date only (no time component)", - "AutoNumber": "Auto-incrementing integer", - "AutoOwner": "System.owner association (auto-set on create)", - "AutoChangedBy": "System.changedBy association (auto-set on commit)", - "AutoCreatedDate": "CreatedDate: DateTime (auto-set on create)", - "AutoChangedDate": "ChangedDate: DateTime (auto-set on commit)", - "Binary": "Binary data (files, images)", - "HashedString": "Securely hashed string (for passwords)", - "Enumeration(Name)": "Reference to an enumeration (e.g., Enumeration(MyModule.Status))", -} - -// Delete behaviors with descriptions -var deleteBehaviors = map[string]string{ - "CASCADE": "Delete associated objects when parent is deleted", - "PREVENT": "Prevent deletion if associated objects exist", - "DELETE_BUT_KEEP_REFERENCES": "Delete parent but keep child objects (set reference to null)", - "DELETE_AND_REFERENCES": "Delete both parent and referenced objects", - "DELETE_IF_NO_REFERENCES": "Delete only if no objects reference this", -} - var syntaxCmd = &cobra.Command{ - Use: "syntax [topic]", + Use: "syntax [topic [subtopic...]]", Short: "Show MDL syntax reference", - Long: `Show detailed help on MDL syntax topics. - -Available topics: - keywords - List reserved keywords that cannot be used as identifiers - types - List valid attribute data types - delete - List valid DELETE_BEHAVIOR options - entity - Show entity creation syntax - enumeration - Show enumeration creation syntax - constant - Show constant creation syntax (CREATE/SHOW/DESCRIBE/DROP) - association - Show association creation syntax - microflow - Show microflow creation syntax - page - Show page creation syntax - snippet - Show snippet creation syntax - move - Show MOVE command syntax for relocating documents - security - Show security management syntax (roles, access, GRANT/REVOKE) - odata - Show OData client/service/external entity syntax - rest - Show consumed and published REST service syntax - integration - Show all integration services, contract browsing, catalog tables - workflow - Show workflow commands syntax - navigation - Show navigation profile management syntax - structure - Show SHOW STRUCTURE command syntax - search - Show full-text search syntax - settings - Show project settings syntax (ALTER SETTINGS) - fragment - Show fragment (reusable widget group) syntax - java-action - Show Java action syntax (CREATE/DESCRIBE/CALL, type params, EXPOSED AS) - business-events - Show business event service syntax - agents - Show AI agent document syntax (Model, KB, MCP Service, Agent) - xpath - Show XPath constraint syntax for WHERE clauses - oql - Show OQL query execution syntax (mxcli oql) - sql - Show external SQL query execution syntax (mxcli sql) - errors - List validation errors and how to fix them - -Example: - mxcli syntax keywords - mxcli syntax microflow - mxcli syntax security + Long: `Show MDL syntax reference from the feature registry. + +Use --json for machine-readable output (optimized for LLM consumption). +Drill down with multiple arguments: mxcli syntax workflow user-task targeting + +Top-level topics: + domain-model - Entities, associations, enumerations, constants, keywords, types + microflow - Microflow/nanoflow creation and activities + page - Pages, snippets, fragments, widgets + security - Roles, access control, demo users + workflow - Workflows, user tasks, decisions, parallel splits + navigation - Navigation profiles, menus, home pages + settings - Project settings + integration - OData, REST, SQL, OQL, XPath, Java actions, business events + agents - AI agent documents (Model, KB, Consumed MCP Service, Agent) + errors - Common validation errors and fixes + structure - SHOW STRUCTURE command + move - MOVE command for relocating documents + search - Full-text SEARCH command + +Examples: + mxcli syntax --json # Full index (LLM: cache this) + mxcli syntax workflow --json # All workflow features + mxcli syntax workflow user-task targeting # Drill down to targeting + mxcli syntax security entity-access # Entity access rules + mxcli syntax entity # Legacy alias → domain-model.entity `, Run: func(cmd *cobra.Command, args []string) { + jsonFlag, _ := cmd.Flags().GetBool("json") + + // No args: show full index (JSON) or help text if len(args) == 0 { + if jsonFlag { + syntax.WriteJSON(os.Stdout, syntax.All()) + return + } cmd.Help() return } - topic := strings.ToLower(args[0]) - switch topic { - case "keywords", "reserved": - showKeywords() - case "types", "datatypes", "data-types": - showTypes() - case "delete", "delete_behavior", "delete-behavior": - showDeleteBehaviors() - case "entity", "entities": - showTopicHelp("entity") - case "enumeration", "enum", "enumerations": - showTopicHelp("enumeration") - case "constant", "constants": - showTopicHelp("constant") - case "association", "associations": - showTopicHelp("association") - case "microflow", "microflows": - showTopicHelp("microflow") - case "page", "pages": - showTopicHelp("page") - case "snippet", "snippets": - showTopicHelp("snippet") - case "move": - showTopicHelp("move") - case "structure": - showTopicHelp("structure") - case "search": - showTopicHelp("search") - case "security": - showTopicHelp("security") - case "odata": - showTopicHelp("odata") - case "rest", "rest-client", "rest-clients": - showTopicHelp("rest") - case "integration", "integrations", "services": - showTopicHelp("integration") - case "contract", "contracts": - showTopicHelp("integration") - case "workflow", "workflows": - showTopicHelp("workflow") - case "navigation", "nav": - showTopicHelp("navigation") - case "settings", "project-settings": - showTopicHelp("settings") - case "fragment", "fragments": - showTopicHelp("fragment") - case "java-action", "javaaction", "java_action", "java-actions", "javaactions": - showTopicHelp("java-action") - case "business-events", "businessevents", "business_events", "be": - showTopicHelp("business-events") - case "agents", "agent", "agent-editor", "agenteditor", "model", "models", "knowledge-base", "knowledgebase", "mcp", "mcp-service": - showTopicHelp("agents") - case "xpath", "xpath-constraints": - showTopicHelp("xpath") - case "oql": - showTopicHelp("oql") - case "sql", "external-sql": - showTopicHelp("sql") - case "errors", "validation": - showTopicHelp("errors") - default: - fmt.Printf("Unknown topic: %s\n\n", topic) - cmd.Help() - } - }, -} -func showKeywords() { - fmt.Println("Reserved Keywords") - fmt.Println("=================") - fmt.Println() - fmt.Println("Most MDL keywords can be used as module/entity names without issue.") - fmt.Println("However, some words may cause parse errors when used as identifiers.") - fmt.Println() - fmt.Println("Use quoted identifiers to escape any reserved word:") - fmt.Println() - fmt.Println(" DESCRIBE ENTITY \"ComboBox\".\"CategoryTreeVE\";") - fmt.Println(" SHOW ENTITIES IN \"ComboBox\";") - fmt.Println(" SHOW MICROFLOWS IN `Order`;") - fmt.Println() - fmt.Println("Both double-quote (ANSI SQL) and backtick (MySQL) styles are supported.") - fmt.Println("You can mix quoted and unquoted parts: \"ComboBox\".CategoryTreeVE") - fmt.Println() + // Build registry path from args + path := strings.ToLower(strings.Join(args, ".")) - // Sort keywords alphabetically - sorted := make([]string, len(reservedKeywords)) - copy(sorted, reservedKeywords) - sort.Strings(sorted) + // Apply aliases + path = syntax.ResolveAlias(path) - // Print in columns - cols := 5 - colWidth := 25 - for i, kw := range sorted { - fmt.Printf("%-*s", colWidth, kw) - if (i+1)%cols == 0 { - fmt.Println() + // Query registry + if syntax.HasPrefix(path) { + features := syntax.ByPrefix(path) + if jsonFlag { + syntax.WriteJSON(os.Stdout, features) + } else { + syntax.WriteText(os.Stdout, features) + } + return } - } - if len(sorted)%cols != 0 { - fmt.Println() - } - fmt.Println() - fmt.Println("Common keywords that conflict with Mendix module/entity names:") - fmt.Println(" - ComboBox, DataGrid, Gallery (widget-named modules)") - fmt.Println(" - Title, Status, Type, Value (common attribute names)") - fmt.Println() - fmt.Println("Workarounds:") - fmt.Println(" 1. Use quoted identifiers: DESCRIBE ENTITY \"ComboBox\".ProductVE") - fmt.Println(" 2. Rename to avoid conflict: Title -> BookTitle, Status -> OrderStatus") - fmt.Println() - fmt.Printf("Total: %d reserved keywords\n", len(sorted)) -} - -func showTypes() { - fmt.Println("Attribute Data Types") - fmt.Println("====================") - fmt.Println() - fmt.Println("Valid data types for entity attributes:") - fmt.Println() - - // Sort types for consistent output - var types []string - for t := range attributeTypes { - types = append(types, t) - } - sort.Strings(types) - - for _, t := range types { - fmt.Printf(" %-20s %s\n", t, attributeTypes[t]) - } - - fmt.Println() - fmt.Println("Common mistakes:") - fmt.Println(" - DateAndTime (use DateTime instead)") - fmt.Println(" - Text (use String(n) instead)") - fmt.Println(" - Number (use Integer, Long, or Decimal instead)") - fmt.Println(" - Enum (use Enumeration(Module.Name) instead)") - fmt.Println() - fmt.Println("Example:") - fmt.Println(" CREATE PERSISTENT ENTITY MyModule.Customer (") - fmt.Println(" Name: String(100) NOT NULL,") - fmt.Println(" Age: Integer,") - fmt.Println(" Balance: Decimal,") - fmt.Println(" IsActive: Boolean DEFAULT true,") - fmt.Println(" CreatedAt: DateTime,") - fmt.Println(" OrderStatus: Enumeration(MyModule.Status)") - fmt.Println(" );") -} - -func showDeleteBehaviors() { - fmt.Println("Association Delete Behaviors") - fmt.Println("============================") - fmt.Println() - fmt.Println("Valid DELETE_BEHAVIOR options for associations:") - fmt.Println() - - // Sort for consistent output - var behaviors []string - for b := range deleteBehaviors { - behaviors = append(behaviors, b) - } - sort.Strings(behaviors) - - for _, b := range behaviors { - fmt.Printf(" %-28s %s\n", b, deleteBehaviors[b]) - } - - fmt.Println() - fmt.Println("Example:") - fmt.Println(" CREATE ASSOCIATION MyModule.Order_Customer") - fmt.Println(" FROM MyModule.Order TO MyModule.Customer") - fmt.Println(" TYPE Reference") - fmt.Println(" OWNER Default") - fmt.Println(" DELETE_BEHAVIOR PREVENT;") + fmt.Printf("Unknown topic: %s\n\n", path) + cmd.Help() + }, } func init() { diff --git a/cmd/mxcli/help_topics/agents.txt b/cmd/mxcli/help_topics/agents.txt deleted file mode 100644 index 2ec3d620..00000000 --- a/cmd/mxcli/help_topics/agents.txt +++ /dev/null @@ -1,133 +0,0 @@ -Agents -====== - -AI agent documents (Model, Knowledge Base, Consumed MCP Service, Agent) -require the AgentEditorCommons marketplace module and Mendix 11.9+. - -PREREQUISITES -------------- - - 1. AgentEditorCommons module installed from the marketplace - 2. Encryption module configured with a 32-character key - 3. ASU_AgentEditor registered as the after-startup microflow - - Create constants to hold the API keys first: - - CREATE CONSTANT Module.ModelApiKey TYPE String DEFAULT ''; - -SHOW / LIST ------------ - - LIST MODELS [IN Module]; - LIST KNOWLEDGE BASES [IN Module]; - LIST CONSUMED MCP SERVICES [IN Module]; - LIST AGENTS [IN Module]; - - DESCRIBE MODEL Module.Name; - DESCRIBE KNOWLEDGE BASE Module.Name; - DESCRIBE CONSUMED MCP SERVICE Module.Name; - DESCRIBE AGENT Module.Name; - -CREATE MODEL ------------- - - CREATE MODEL Module.MyModel ( - Provider: MxCloudGenAI, - Key: Module.ModelApiKey - ); - - Provider defaults to MxCloudGenAI when omitted. - Key must refer to a String constant in the project. - -CREATE KNOWLEDGE BASE ---------------------- - - CREATE KNOWLEDGE BASE Module.ProductDocs ( - Provider: MxCloudGenAI, - Key: Module.KBApiKey - ); - -CREATE CONSUMED MCP SERVICE ----------------------------- - - CREATE CONSUMED MCP SERVICE Module.WebSearch ( - ProtocolVersion: v2025_03_26, - Version: '1.0', - ConnectionTimeoutSeconds: 30, - Documentation: 'Web search MCP server' - ); - -CREATE AGENT (simple) ---------------------- - - CREATE AGENT Module.Summarizer ( - UsageType: Task, - Model: Module.MyModel, - SystemPrompt: 'Summarize in 3 sentences.', - UserPrompt: 'Enter text.' - ); - - UsageType values: Task, Conversational - -CREATE AGENT (with variables and tools) ----------------------------------------- - - CREATE AGENT Module.ResearchAssistant ( - UsageType: Conversational, - Description: 'Research assistant', - Model: Module.MyModel, - MaxTokens: 16384, - Temperature: 0.7, - TopP: 0.9, - ToolChoice: Auto, - Variables: ("Language": EntityAttribute), - SystemPrompt: $$You are a research assistant. -Respond in {{Language}}.$$, - UserPrompt: 'Ask me anything.' - ) - { - MCP SERVICE Module.WebSearch { - Enabled: true - } - - KNOWLEDGE BASE ProductKB { - Source: Module.ProductDocs, - Collection: 'product-docs', - MaxResults: 5, - Description: 'Product documentation', - Enabled: true - } - - TOOL MyMicroflowTool { - Description: 'Fetch customer data', - Enabled: true - } - }; - - Use $$...$$ for multi-line prompts. Single-quoted strings cannot span lines. - Variables: ("Key": EntityAttribute) binds entity attributes. - Variables: ("Key": String) binds plain string values. - -DROP ----- - - DROP AGENT Module.Name; - DROP CONSUMED MCP SERVICE Module.Name; - DROP KNOWLEDGE BASE Module.Name; - DROP MODEL Module.Name; - - Always drop Agents before the Model, Knowledge Base, or MCP Service they reference. - -NOTES ------ - - Portal-populated metadata fields (DisplayName, KeyName, KeyID, Environment, - ResourceName, DeepLinkURL) are managed by the Mendix portal and should not - be set manually in CREATE statements. - - The documentId field is an opaque agent-internal ID populated at - runtime by ASU_AgentEditor. You do not need to set it. - - Cross-document references are validated at execute time: the Model, Knowledge - Base, and MCP Service documents must exist before creating an Agent that - references them. diff --git a/cmd/mxcli/help_topics/association.txt b/cmd/mxcli/help_topics/association.txt deleted file mode 100644 index f60d07c1..00000000 --- a/cmd/mxcli/help_topics/association.txt +++ /dev/null @@ -1,69 +0,0 @@ -Association Creation Syntax -=========================== - -Basic syntax: - CREATE ASSOCIATION Module.AssociationName - FROM Module.FromEntity TO Module.ToEntity - TYPE Reference|ReferenceSet - [OWNER Default|Both] - [STORAGE COLUMN|TABLE] - [DELETE_BEHAVIOR behavior] - [COMMENT 'text']; - -Direction: - FROM = entity that holds the foreign key (the "many" side) - TO = entity being referenced (the "one" side) - -Association types: - Reference Many-to-one (FK column on FROM entity's table) - ReferenceSet Many-to-many (junction table between FROM and TO) - -Owner options: - OWNER Default FROM entity owns the association (default) - OWNER Both Both entities can modify the association - -Storage options (rarely needed): - STORAGE COLUMN FK column in FROM entity's table (Reference only) - STORAGE TABLE Separate junction table (default for ReferenceSet) - -Delete behavior options: - DELETE_BUT_KEEP_REFERENCES Delete object, nullify FK (default) - DELETE_AND_REFERENCES Delete object and cascade to children - DELETE_IF_NO_REFERENCES Prevent deletion if referenced - CASCADE Alias for DELETE_AND_REFERENCES - PREVENT Alias for DELETE_IF_NO_REFERENCES - -Example - Many-to-one (Reference): - /** Order belongs to one customer */ - CREATE ASSOCIATION Shop.Order_Customer - FROM Shop.Order TO Shop.Customer - TYPE Reference - OWNER Default - DELETE_BEHAVIOR DELETE_BUT_KEEP_REFERENCES; - -Example - Many-to-many (ReferenceSet): - /** Product has many tags, stored in a junction table */ - CREATE ASSOCIATION Shop.Product_Tag - FROM Shop.Product TO Shop.Tag - TYPE ReferenceSet - OWNER Both; - -Junction tables (many-to-many): - ReferenceSet associations use a junction table automatically. - The table name follows the pattern: modulename$fromname_toname - - To seed data into a junction table via SQL: - INSERT INTO "shop$product_tag" ("shop$productid", "shop$tagid") - VALUES (123456, 789012); - -Example - One-to-one: - CREATE ASSOCIATION HR.Employee_Profile - FROM HR.Employee TO HR.EmployeeProfile - TYPE Reference - OWNER Default - DELETE_BEHAVIOR DELETE_AND_REFERENCES; - -Notes: - - Self-referencing associations must use OWNER Default - - Cross-module associations are supported (TO entity in another module) - - Naming convention: FromEntity_ToEntity (e.g., Order_Customer) diff --git a/cmd/mxcli/help_topics/business-events.txt b/cmd/mxcli/help_topics/business-events.txt deleted file mode 100644 index d7f5396f..00000000 --- a/cmd/mxcli/help_topics/business-events.txt +++ /dev/null @@ -1,99 +0,0 @@ -Business Events -=============== - -Business event services define event channels that other applications -can subscribe to via Kafka/message broker. - -SHOW COMMANDS -------------- - - SHOW BUSINESS EVENT SERVICES; -- List all service documents - SHOW BUSINESS EVENT SERVICES IN MyModule; -- Filter by module - SHOW BUSINESS EVENT CLIENTS; -- List all client documents (future) - SHOW BUSINESS EVENTS; -- List individual messages across all services - SHOW BUSINESS EVENTS IN MyModule; -- Filter messages by module - -DESCRIBE --------- - - DESCRIBE BUSINESS EVENT SERVICE Module.ServiceName; - -CREATE ------- - - CREATE BUSINESS EVENT SERVICE Module.CustomerEventsApi - ( - ServiceName: 'CustomerEventsApi', - EventNamePrefix: '' - ) - { - MESSAGE CustomerChangedEvent (CustomerId: Long) PUBLISH - ENTITY Module.PBE_CustomerChangedEvent; - MESSAGE AddressChangedEvent (AddressId: Long) PUBLISH - ENTITY Module.PBE_AddressChangedEvent; - }; - - -- With CREATE OR REPLACE to overwrite existing: - CREATE OR REPLACE BUSINESS EVENT SERVICE Module.CustomerEventsApi - ( - ServiceName: 'CustomerEventsApi', - EventNamePrefix: '' - ) - { - MESSAGE CustomerChangedEvent (CustomerId: Long) PUBLISH - ENTITY Module.PBE_CustomerChangedEvent; - }; - -DROP ----- - - DROP BUSINESS EVENT SERVICE Module.CustomerEventsApi; - -PUBLISHING EVENTS FROM MICROFLOWS ----------------------------------- - - There is no dedicated microflow activity for publishing events. - Use CALL JAVA ACTION with the BusinessEvents marketplace module: - - CREATE MICROFLOW Module.ACT_PublishCustomerChanged BEGIN - DECLARE $Event Module.PBE_CustomerChangedEvent; - $Event = CREATE Module.PBE_CustomerChangedEvent (CustomerId = $Id); - COMMIT $Event; - CALL JAVA ACTION BusinessEvents.PublishBusinessEvent_V2(EventObject = $Event); - END; - - Available Java actions from the BusinessEvents module: - PublishBusinessEvent_V2 -- Publish an event (recommended) - PublishBusinessEvent -- Publish an event (legacy) - ConsumeBusinessEvent -- Consume/acknowledge an event - PublishEvents -- Publish multiple events - -ENTITY REQUIREMENTS -------------------- - - Entities linked via ENTITY must: - - Extend BusinessEvents.PublishedBusinessEvent (for published events) - - Have attributes that EXACTLY match the message attributes - - By convention, be prefixed with PBE_ (Published Business Event) - - Example: - CREATE PERSISTENT ENTITY Module.PBE_CustomerChangedEvent - EXTENDS BusinessEvents.PublishedBusinessEvent ( - CustomerId: Long - ); - -NOTES ------ - - A service DEFINITION publishes events for other apps to subscribe. - Each MESSAGE maps to an entity via ENTITY and an operation (PUBLISH/SUBSCRIBE). - - Attribute types: String, Integer, Long, Decimal, Boolean, DateTime. - - The PUBLISH flag means this service publishes the event. - The SUBSCRIBE flag means this service subscribes to the event. - - ENTITY binds a message to a Mendix entity that holds the event data. - MICROFLOW optionally binds a handler microflow (for subscribe operations). - - The BusinessEvents module must be included in the project (marketplace module). diff --git a/cmd/mxcli/help_topics/constant.txt b/cmd/mxcli/help_topics/constant.txt deleted file mode 100644 index 9eef851f..00000000 --- a/cmd/mxcli/help_topics/constant.txt +++ /dev/null @@ -1,53 +0,0 @@ -Constant Syntax -=============== - -Create a constant: - CREATE CONSTANT Module.Name - TYPE DataType - DEFAULT value - [COMMENT 'description']; - -Create or modify (upsert): - CREATE OR MODIFY CONSTANT Module.Name - TYPE DataType - DEFAULT value - [COMMENT 'description']; - -Supported types: - String, Integer, Long, Decimal, Boolean, DateTime - -Show constants: - SHOW CONSTANTS; -- All constants - SHOW CONSTANTS IN MyModule; -- Filter by module - -Show constant values across configurations: - SHOW CONSTANT VALUES; -- All constants with per-config overrides - SHOW CONSTANT VALUES IN MyModule; -- Filter by module - -Remove a constant override from a configuration: - ALTER SETTINGS DROP CONSTANT 'Module.Name' IN CONFIGURATION 'cfg'; - -Describe a constant: - DESCRIBE CONSTANT Module.Name; - -Drop a constant: - DROP CONSTANT Module.Name; - -Examples: - CREATE CONSTANT MyModule.ApiBaseUrl - TYPE String - DEFAULT 'https://api.example.com/v1'; - - CREATE CONSTANT MyModule.MaxRetries - TYPE Integer - DEFAULT 3 - COMMENT 'Maximum number of API retry attempts'; - - CREATE CONSTANT MyModule.EnableDebug - TYPE Boolean - DEFAULT false; - - CREATE OR MODIFY CONSTANT MyModule.ApiBaseUrl - TYPE String - DEFAULT 'https://api.staging.example.com/v2' - COMMENT 'Updated for staging'; diff --git a/cmd/mxcli/help_topics/entity.txt b/cmd/mxcli/help_topics/entity.txt deleted file mode 100644 index f4d321d6..00000000 --- a/cmd/mxcli/help_topics/entity.txt +++ /dev/null @@ -1,108 +0,0 @@ -Entity Creation Syntax -====================== - -Persistent Entity (stored in database): - CREATE PERSISTENT ENTITY Module.EntityName ( - AttributeName: DataType [constraints], - ... - ) - [INDEX (attr1, attr2)] - [COMMENT 'description']; - -Entity with Generalization (Inheritance): - IMPORTANT: EXTENDS goes BEFORE the opening parenthesis, not after! - - CREATE PERSISTENT ENTITY Module.EntityName EXTENDS Module.ParentEntity ( - AttributeName: DataType [constraints], - ... - ); - - Common parent entities: - System.Image - For image uploads (adds thumbnail, caching) - System.FileDocument - For file uploads (adds Name, Size, Contents) - System.User - For custom user types - -Non-Persistent Entity (transient/memory only): - CREATE NON-PERSISTENT ENTITY Module.EntityName ( - AttributeName: DataType, - ... - ); - -Attribute Constraints: - NOT NULL - Attribute is required - NOT NULL ERROR 'msg' - Required with custom error message - UNIQUE - Value must be unique - UNIQUE ERROR 'msg' - Unique with custom error message - DEFAULT value - Default value (true, false, 0, 'text') - CALCULATED BY Module.Microflow - Calculated attribute (persistent entities only) - CALCULATED Module.Microflow - Same as above (BY is optional) - CALCULATED - Marks as calculated (bind microflow in Studio Pro) - - Note: CALCULATED attributes are only supported on persistent entities. - -System Attributes (auditing): - AutoOwner - System.owner association (auto-set on create) - AutoChangedBy - System.changedBy association (auto-set on every commit) - AutoCreatedDate - CreatedDate: DateTime (auto-set on create) - AutoChangedDate - ChangedDate: DateTime (auto-set on every commit) - - These are pseudo-types like AutoNumber — list them as regular attributes: - - CREATE PERSISTENT ENTITY MyModule.AuditedEntity ( - Name: String(100), - Owner: AutoOwner, - ChangedBy: AutoChangedBy, - CreatedDate: AutoCreatedDate, - ChangedDate: AutoChangedDate - ); - - Add/drop on existing entities with ALTER ENTITY: - ALTER ENTITY MyModule.Entity ADD ATTRIBUTE Owner: AutoOwner; - ALTER ENTITY MyModule.Entity DROP ATTRIBUTE ChangedDate; - -Complete Example: - CREATE PERSISTENT ENTITY MyModule.Customer ( - -- Customer identification - Name: String(100) NOT NULL ERROR 'Name is required', - Email: String(200) UNIQUE, - - -- Customer details - Age: Integer, - Balance: Decimal DEFAULT 0, - IsActive: Boolean DEFAULT true, - CreatedAt: DateTime, - - -- Enumeration reference - CustomerType: Enumeration(MyModule.CustomerType), - - -- Calculated attribute (value computed by microflow) - FullName: String(200) CALCULATED BY MyModule.CalcFullName - ) - INDEX (Email) - COMMENT 'Stores customer information'; - -Event Handlers: - ON BEFORE|AFTER CREATE|COMMIT|DELETE|ROLLBACK CALL Module.Microflow(...) [RAISE ERROR] - - Parameter syntax: - ($currentObject) - Microflow receives the entity object - () - Microflow receives no object parameter - (no parens) - Same as ($currentObject), default - - Rules: - - BEFORE handlers return Boolean. RAISE ERROR aborts when false. - - AFTER handlers return Void. Cannot use RAISE ERROR. - - Add via ALTER ENTITY: - ALTER ENTITY MyModule.Customer - ADD EVENT HANDLER ON BEFORE COMMIT CALL MyModule.Validate($currentObject) RAISE ERROR; - - ALTER ENTITY MyModule.Customer - ADD EVENT HANDLER ON AFTER COMMIT CALL MyModule.LogChange(); - - Or directly on CREATE ENTITY: - CREATE PERSISTENT ENTITY MyModule.Order ( - Name: String(100) - ) - ON BEFORE COMMIT CALL MyModule.ValidateOrder($currentObject) RAISE ERROR - ON AFTER COMMIT CALL MyModule.LogOrderChange($currentObject); diff --git a/cmd/mxcli/help_topics/enumeration.txt b/cmd/mxcli/help_topics/enumeration.txt deleted file mode 100644 index e86b38ea..00000000 --- a/cmd/mxcli/help_topics/enumeration.txt +++ /dev/null @@ -1,29 +0,0 @@ -Enumeration Creation Syntax -=========================== - -Basic syntax: - CREATE ENUMERATION Module.EnumName ( - Value1 'Display Caption 1', - Value2 'Display Caption 2', - ... - ); - -Notes: - - Value names must be valid identifiers (no spaces, no reserved keywords) - - Captions are optional but recommended for display - - Each value should be on its own line - -Example: - CREATE ENUMERATION MyModule.OrderStatus ( - Pending 'Pending Approval', - Processing 'Being Processed', - Shipped 'Shipped to Customer', - Delivered 'Delivered', - Cancelled 'Order Cancelled' - ); - -Using in an entity: - CREATE PERSISTENT ENTITY MyModule.Order ( - OrderNumber: String(20) NOT NULL, - OrderStatus: Enumeration(MyModule.OrderStatus) - ); diff --git a/cmd/mxcli/help_topics/errors.txt b/cmd/mxcli/help_topics/errors.txt deleted file mode 100644 index b4fadb7a..00000000 --- a/cmd/mxcli/help_topics/errors.txt +++ /dev/null @@ -1,109 +0,0 @@ -Validation Errors -================= - -These errors are detected by 'mxcli check -p --references' - -SYNTAX ERRORS -------------- - - Reserved keyword used as identifier - Error: mismatched input 'Title' expecting IDENTIFIER - Cause: Using a reserved keyword (Title, Status, Type, etc.) as a name - Fix: Use quoted identifiers: "Title", "ComboBox"."Entity" - Alt: Rename to avoid keyword: BookTitle, OrderStatus, ItemType - See: mxcli syntax keywords - - Invalid data type - Error: Unknown type parsed as enumeration reference - Cause: Using DateAndTime instead of DateTime, or misspelled type - Fix: Use correct type name: DateTime, Integer, Boolean, etc. - See: mxcli help types - - Malformed enumeration - Error: Invalid enumeration value: each value must have a name - Cause: Missing value name or syntax error in enumeration definition - Fix: Use syntax: ValueName 'Caption' - See: mxcli help enumeration - -REFERENCE ERRORS (--references flag) ------------------------------------- - - Module not found - Error: module not found: ModuleName - Cause: Creating objects in a module that doesn't exist - Fix: Create the module first: CREATE MODULE ModuleName; - - Enumeration not found - Error: attribute 'X': enumeration not found: Module.EnumName - Cause: Referencing an enumeration that doesn't exist in the project - Fix: Create the enumeration first, or check spelling - - Missing module prefix on enumeration - Error: enumeration reference 'X' is missing module prefix - Cause: Using bare name like 'Status' instead of 'Module.Status' - Fix: Use fully qualified name: Enumeration(MyModule.Status) - - Entity not found (associations) - Error: parent/child entity module not found: ModuleName - Cause: Association references entity in non-existent module - Fix: Ensure both entities exist before creating association - -OQL SYNTAX ERRORS (View Entities) ----------------------------------- - - Invalid association path (dot instead of slash) - Error: invalid association path 'l.Library.Loan_Member' - Cause: Using '.' instead of '/' for association traversal in OQL - Fix: Use '/' prefix: l/Library.Loan_Member instead of l.Library.Loan_Member - Example: - Wrong: WHERE l.Library.Loan_Member = m.ID - Right: WHERE l/Library.Loan_Member = m.ID - - Invalid JOIN ON clause - Error: invalid JOIN ON clause: 'l/Module.Assoc = ...' - Cause: Using JOIN ... ON with association comparison - Fix: Use association traversal syntax in JOIN - Example: - Wrong: LEFT JOIN Entity AS l ON l/Module.Assoc = b.ID - Right: JOIN l/Module.Loan_Book/Module.Book AS b - - Invalid association comparison (bare alias) - Error: invalid association comparison 'pr/Module.Assoc = p' - Cause: Comparing association path to bare entity alias (missing .ID) - Fix: Append .ID to compare against the entity's ID - Example: - Wrong: WHERE pr/Shop.Price_Product = p - Right: WHERE pr/Shop.Price_Product = p.ID - -EXECUTION ERRORS ----------------- - - Entity already exists - Error: entity already exists: Module.Entity - Cause: Trying to create an entity that already exists - Fix: Use CREATE OR MODIFY ENTITY to update existing entities - - Boolean without default - Note: Boolean attributes auto-default to false if no DEFAULT is specified - Cause: Boolean attributes in Mendix must have a default - Info: Explicitly add DEFAULT true or DEFAULT false for clarity - - View entity type mismatch - Error: view entity 'X' has type mismatches - Cause: OQL SELECT types don't match declared attribute types - Fix: Ensure OQL column types match attribute declarations - - Microflow validation errors - Error: microflow 'X' has validation errors - Cause: Undeclared variables, type mismatches in microflow body - Fix: Declare variables with DECLARE before use - -TIPS ----- - - 1. Always run 'mxcli check script.mdl' first for syntax + OQL errors - 2. Use '--references' flag to also validate against actual project - 3. OQL syntax errors (view entities) are checked without a project - 4. Create enumerations before entities that reference them - 5. Create entities before associations that link them - 6. Use 'mxcli help ' for syntax reference diff --git a/cmd/mxcli/help_topics/fragment.txt b/cmd/mxcli/help_topics/fragment.txt deleted file mode 100644 index 537df39e..00000000 --- a/cmd/mxcli/help_topics/fragment.txt +++ /dev/null @@ -1,199 +0,0 @@ -Fragment Syntax -=============== - -Fragments are reusable widget groups defined at script scope. -They are transient (not persisted in the MPR) and exist only during -script execution. - -DEFINE FRAGMENT ---------------- - -Define a reusable widget group: - - DEFINE FRAGMENT SaveCancelFooter AS { - FOOTER footer1 { - ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary) - ACTIONBUTTON btnCancel (Caption: 'Cancel', Action: CANCEL_CHANGES) - } - }; - -Multiple top-level widgets: - - DEFINE FRAGMENT FormFields AS { - TEXTBOX txtName (Label: 'Name', Binds: Name) - TEXTBOX txtEmail (Label: 'Email', Binds: Email) - }; - -USE FRAGMENT ------------- - -Insert a fragment's widgets at the current position inside a page or snippet body: - - CREATE PAGE Module.CustomerEdit - ( - Params: { $Customer: Module.Customer }, - Title: 'Edit Customer', - Layout: Atlas_Core.PopupLayout - ) - { - DATAVIEW dvCustomer (DataSource: $Customer) { - TEXTBOX txtName (Label: 'Name', Binds: Name) - USE FRAGMENT SaveCancelFooter - } - }; - -With prefix (to avoid name conflicts when used multiple times): - - USE FRAGMENT SaveCancelFooter AS order_ - - This creates widgets named order_footer1, order_btnSave, order_btnCancel. - -SHOW FRAGMENTS --------------- - -List all defined fragments in the current session: - - SHOW FRAGMENTS; - - Output: - Name Widgets - -------------------- ------- - SaveCancelFooter 1 - FormFields 2 - -DESCRIBE FRAGMENT ------------------ - -Show the full MDL definition of a fragment: - - DESCRIBE FRAGMENT SaveCancelFooter; - - Output: - DEFINE FRAGMENT SaveCancelFooter AS { - FOOTER footer1 { - ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary) - ACTIONBUTTON btnCancel (Caption: 'Cancel', Action: CANCEL_CHANGES) - } - } - -DESCRIBE FRAGMENT FROM PAGE/SNIPPET ------------------------------------- - -Extract a widget subtree from an existing page or snippet as MDL. -Requires a project connection. - - DESCRIBE FRAGMENT FROM PAGE Module.MyPage WIDGET footer1; - DESCRIBE FRAGMENT FROM SNIPPET Module.MySnippet WIDGET container1; - -This outputs the named widget and all its children as MDL, ready to be -wrapped in a DEFINE FRAGMENT statement or used directly. - -ALTER PAGE ----------- - -Modify an existing page's widget tree in-place without full round-trip. -Works directly on the raw BSON tree, preserving unsupported widget types. -Requires a project connection opened for writing. - -Operations: - - SET property = value ON widgetName -- Modify a widget property - SET (prop1 = val1, prop2 = val2) ON name -- Set multiple properties - SET Title = 'New Title' -- Page-level property - INSERT AFTER widgetName { widgets } -- Add widgets after target - INSERT BEFORE widgetName { widgets } -- Add widgets before target - DROP WIDGET name1, name2 -- Remove widgets - REPLACE widgetName WITH { widgets } -- Replace widget subtree - -Examples: - - -- Change button caption and style - ALTER PAGE Module.EditPage { - SET (Caption = 'Save & Close', ButtonStyle = Success) ON btnSave - }; - - -- Add a field after an existing one - ALTER PAGE Module.EditPage { - INSERT AFTER txtName { - TEXTBOX txtMiddleName (Label: 'Middle Name', Binds: MiddleName) - } - }; - - -- Remove unused widgets - ALTER PAGE Module.EditPage { - DROP WIDGET txtUnused, lblOldLabel - }; - - -- Replace a footer - ALTER PAGE Module.EditPage { - REPLACE footer1 WITH { - FOOTER newFooter { - ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary) - ACTIONBUTTON btnCancel (Caption: 'Cancel', Action: CANCEL_CHANGES) - } - } - }; - - -- Multiple operations in one statement - ALTER PAGE Module.EditPage { - SET Caption = 'Update' ON btnSave; - DROP WIDGET txtUnused; - INSERT AFTER txtEmail { - TEXTBOX txtPhone (Label: 'Phone', Binds: Phone) - } - }; - - -- Set pluggable widget property (quoted name) - ALTER PAGE Module.EditPage { - SET 'showLabel' = false ON cbStatus - }; - -ALTER SNIPPET -------------- - -Modify an existing snippet's widget tree in-place, using the same operations -as ALTER PAGE. Works directly on the raw BSON tree, preserving unsupported -widget types. Requires a project connection opened for writing. - -Operations (same as ALTER PAGE): - - SET property = value ON widgetName -- Modify a widget property - SET (prop1 = val1, prop2 = val2) ON name -- Set multiple properties - INSERT AFTER widgetName { widgets } -- Add widgets after target - INSERT BEFORE widgetName { widgets } -- Add widgets before target - DROP WIDGET name1, name2 -- Remove widgets - REPLACE widgetName WITH { widgets } -- Replace widget subtree - -Examples: - - -- Change a property on a widget inside a snippet - ALTER SNIPPET Module.MySnippet { - SET Caption = 'Updated' ON btnAction - }; - - -- Replace a navigation list item - ALTER SNIPPET Module.NavSnippet { - REPLACE navItem1 WITH { - ACTIONBUTTON btnHome (Caption: 'Home', Action: SHOW_PAGE Module.HomePage) - } - }; - - -- Drop and insert in one statement - ALTER SNIPPET Module.MySnippet { - DROP WIDGET txtOldField; - INSERT AFTER txtName { - TEXTBOX txtNewField (Label: 'New Field', Binds: NewAttr) - } - }; - -NOTES ------ - -- Fragments are script-scoped: available after definition until script ends -- Fragment names must be unique within a script (duplicate = error) -- SHOW FRAGMENTS and DESCRIBE FRAGMENT work without a project connection -- All V3 page widgets are available inside fragment bodies -- USE FRAGMENT can appear anywhere a widget can appear (top-level or nested) -- Widgets are deep-cloned on expansion (modifying a clone does not affect the original) -- ALTER PAGE/SNIPPET works on raw BSON and preserves unsupported widget types -- ALTER PAGE/SNIPPET requires an open project connection with write access diff --git a/cmd/mxcli/help_topics/integration.txt b/cmd/mxcli/help_topics/integration.txt deleted file mode 100644 index f758a0ae..00000000 --- a/cmd/mxcli/help_topics/integration.txt +++ /dev/null @@ -1,75 +0,0 @@ -Integration Services — Unified Discovery -========================================= - -mxcli provides a unified integration pane for discovering all external -services and their available assets, similar to Studio Pro's Integration Pane. - -SERVICE TYPES -------------- - - OData Clients: SHOW ODATA CLIENTS [IN Module]; - OData Services: SHOW ODATA SERVICES [IN Module]; - REST Clients: SHOW REST CLIENTS [IN Module]; - Published REST: SHOW PUBLISHED REST SERVICES [IN Module]; - Business Events: SHOW BUSINESS EVENT SERVICES [IN Module]; - DB Connections: SHOW DATABASE CONNECTIONS [IN Module]; - JSON Structures: SHOW JSON STRUCTURES [IN Module]; - Import Mappings: SHOW IMPORT MAPPINGS [IN Module]; - Export Mappings: SHOW EXPORT MAPPINGS [IN Module]; - External Entities: SHOW EXTERNAL ENTITIES [IN Module]; - External Actions: SHOW EXTERNAL ACTIONS [IN Module]; - -CONTRACT BROWSING (cached contracts, no network needed) -------------------------------------------------------- - - OData — browse cached $metadata XML: - SHOW CONTRACT ENTITIES FROM Module.Service; - SHOW CONTRACT ACTIONS FROM Module.Service; - DESCRIBE CONTRACT ENTITY Module.Service.EntityName; - DESCRIBE CONTRACT ENTITY Module.Service.EntityName FORMAT mdl; - DESCRIBE CONTRACT ACTION Module.Service.ActionName; - - AsyncAPI — browse cached business event contracts: - SHOW CONTRACT CHANNELS FROM Module.Service; - SHOW CONTRACT MESSAGES FROM Module.Service; - DESCRIBE CONTRACT MESSAGE Module.Service.MessageName; - - CREATE ODATA CLIENT auto-fetches $metadata from MetadataUrl. - -CATALOG TABLES (requires REFRESH CATALOG) ------------------------------------------- - - -- Integration services - SELECT * FROM CATALOG.ODATA_CLIENTS; - SELECT * FROM CATALOG.ODATA_SERVICES; - SELECT * FROM CATALOG.REST_CLIENTS; - SELECT * FROM CATALOG.REST_OPERATIONS; - SELECT * FROM CATALOG.PUBLISHED_REST_SERVICES; - SELECT * FROM CATALOG.PUBLISHED_REST_OPERATIONS; - SELECT * FROM CATALOG.BUSINESS_EVENT_SERVICES; - SELECT * FROM CATALOG.BUSINESS_EVENTS; - SELECT * FROM CATALOG.DATABASE_CONNECTIONS; - - -- Imported assets - SELECT * FROM CATALOG.EXTERNAL_ENTITIES; - SELECT * FROM CATALOG.EXTERNAL_ACTIONS; - - -- Contract assets (parsed from cached $metadata / AsyncAPI) - SELECT * FROM CATALOG.CONTRACT_ENTITIES; - SELECT * FROM CATALOG.CONTRACT_ACTIONS; - SELECT * FROM CATALOG.CONTRACT_MESSAGES; - - -- Cross-cutting: all integration touchpoints in a module - SELECT ObjectType, QualifiedName FROM CATALOG.OBJECTS - WHERE ObjectType IN ('ODATA_CLIENT', 'REST_CLIENT', 'ODATA_SERVICE', - 'PUBLISHED_REST_SERVICE', 'BUSINESS_EVENT_SERVICE', 'DATABASE_CONNECTION') - AND ModuleName = 'MyModule'; - - -- Available entities not yet imported - SELECT ce.EntityName, ce.ServiceQualifiedName, ce.PropertyCount - FROM CATALOG.CONTRACT_ENTITIES ce - LEFT JOIN CATALOG.EXTERNAL_ENTITIES ee - ON ce.ServiceQualifiedName = ee.ServiceName AND ce.EntityName = ee.RemoteName - WHERE ee.Id IS NULL; - -See also: HELP ODATA, HELP REST diff --git a/cmd/mxcli/help_topics/java-action.txt b/cmd/mxcli/help_topics/java-action.txt deleted file mode 100644 index cd624f5b..00000000 --- a/cmd/mxcli/help_topics/java-action.txt +++ /dev/null @@ -1,139 +0,0 @@ -Java Action Syntax -================== - -SHOW & DESCRIBE ---------------- - - SHOW JAVA ACTIONS; - List all Java actions - SHOW JAVA ACTIONS IN Module; - Filter by module - DESCRIBE JAVA ACTION Module.Name; - Show full signature with code - -CREATE JAVA ACTION ------------------- - -Basic syntax: - CREATE JAVA ACTION Module.Name( - Param1: Type [NOT NULL], - Param2: Type - ) RETURNS ReturnType - AS $$ - // Java code (between BEGIN USER CODE / END USER CODE markers) - return result; - $$; - -With type parameters (generics): - CREATE JAVA ACTION Module.Name( - EntityType: ENTITY NOT NULL, - InputObject: pEntity NOT NULL, - Label: String - ) RETURNS Boolean - AS $$ - return InputObject != null; - $$; - - ENTITY declares a type parameter inline and marks - that parameter as the entity type selector (receives entity - name like 'Module.Entity'). Bare pEntity parameters receive - entity instances ($Variable). - Multiple type params: ENTITY , ENTITY - -With EXPOSED AS (toolbox visibility): - CREATE JAVA ACTION Module.FormatCurrency( - Amount: Decimal NOT NULL - ) RETURNS String - EXPOSED AS 'Format Currency' IN 'Formatting' - AS $$ - return String.format("%.2f", Amount); - $$; - - EXPOSED AS makes the action visible in Studio Pro's - microflow toolbox under the specified category. - -Combined type parameters + EXPOSED AS: - CREATE JAVA ACTION Module.Validate( - EntityType: ENTITY NOT NULL, - InputObject: pEntity NOT NULL - ) RETURNS Boolean - EXPOSED AS 'Validate Entity' IN 'Validation' - AS $$ - return InputObject != null; - $$; - -DROP JAVA ACTION ----------------- - - DROP JAVA ACTION Module.Name; - Delete a Java action - -PARAMETER TYPES ---------------- - - String Text value - Integer Whole number - Long Large whole number - Decimal Decimal number - Boolean True/false - DateTime Date and time - Module.Entity Entity reference - List of Module.Entity List of entities - StringTemplate(Sql) SQL/OQL template with parameters - StringTemplate(Text) Text template with parameters - ENTITY Type parameter declaration (entity type selector) - pEntity Type parameter reference (entity instance) - -RETURN TYPES ------------- - - Void No return value (omit RETURNS clause) - String, Integer, Long, Decimal, Boolean, DateTime - Module.Entity Entity reference - List of Module.Entity List of entities - -CALLING FROM MICROFLOWS ------------------------ - - -- Without return value - CALL JAVA ACTION Module.Name(Param = value); - - -- With return value - $Result = CALL JAVA ACTION Module.Name(Param = value); - - -- Multiple parameters - $Result = CALL JAVA ACTION Module.Process( - InputObject = $MyEntity, - Label = 'Process this', - DryRun = false - ); - -EXAMPLES --------- - - -- Simple void action - CREATE JAVA ACTION Utils.LogStartup() AS $$ - Core.getLogger("App").info("Application started"); - $$; - - -- Generic entity validator - CREATE JAVA ACTION Utils.IsValid( - EntityType: ENTITY NOT NULL, - Obj: pEntity NOT NULL - ) RETURNS Boolean - EXPOSED AS 'Is Valid' IN 'Validation' - AS $$ - return Obj.getMembers().values().stream() - .allMatch(m -> !m.isRequired() || m.getValue(getContext()) != null); - $$; - - -- Calling from a microflow (EntityType gets entity name, - -- Obj gets entity instance) - CREATE MICROFLOW MyModule.ACT_Validate ($Order: MyModule.Order) - RETURNS Boolean AS $IsValid - BEGIN - $IsValid = CALL JAVA ACTION Utils.IsValid( - EntityType = 'MyModule.Order', - Obj = $Order - ); - IF NOT $IsValid THEN - LOG WARNING NODE 'Validation' 'Order failed validation'; - END IF; - RETURN $IsValid; - END; diff --git a/cmd/mxcli/help_topics/microflow.txt b/cmd/mxcli/help_topics/microflow.txt deleted file mode 100644 index d07fb217..00000000 --- a/cmd/mxcli/help_topics/microflow.txt +++ /dev/null @@ -1,144 +0,0 @@ -Microflow Creation Syntax -========================= - -Basic syntax: - CREATE MICROFLOW Module.Name (params) RETURNS type - [FOLDER 'FolderPath'] - BEGIN - statements... - END; - -Parameters and return type: - ($Param1: String, $Param2: Integer) - Input parameters - RETURNS Boolean AS $Result - Return type with variable - RETURNS Module.Entity AS $Result - Return an entity - RETURNS List OF Module.Entity AS $List - Return a list - -STATEMENTS ----------- - -Variables: - DECLARE $Var Type; - Declare variable - DECLARE $Var Type = expression; - Declare with initial value - SET $Var = expression; - Assign value - SET $Var/Attribute = expression; - Set attribute - -Object operations: - $Obj = CREATE Module.Entity ( - Create object - Attr1 = value, Attr2 = value); - CHANGE $Obj (Attr = value); - Modify object - COMMIT $Obj; - Save to database - COMMIT $Obj WITH EVENTS; - Save with event handlers - COMMIT $Obj REFRESH; - Save and refresh in client - COMMIT $Obj WITH EVENTS REFRESH; - Save with events + refresh - DELETE $Obj; - Delete object - ROLLBACK $Obj; - Discard uncommitted changes - -Retrieve: - RETRIEVE $Var FROM Module.Entity - Query database - WHERE condition - SORT BY attr ASC - LIMIT 10 OFFSET 0; - -Control flow: - IF condition THEN - Conditional - ... branch - ELSIF condition THEN - ... - ELSE - ... - END IF; - - LOOP $Item IN $List BEGIN ... END LOOP; - Iterate list - WHILE condition BEGIN ... END WHILE; - Condition loop - -Calls: - $Result = CALL MICROFLOW Module.Name - Call microflow - (Param = value); - $Result = CALL JAVA ACTION Module.Name - Call Java action - (Param = value); - -- See also: mxcli syntax java-action - Full Java action syntax - -List operations: - $List = CREATE LIST OF Module.Entity; - Empty list - ADD $Item TO $List; - Add to list - REMOVE $Item FROM $List; - Remove from list - $Result = HEAD($List); - First element - $Result = TAIL($List); - Last element - $Result = FIND($List, condition); - Find matching - $Result = FILTER($List, condition); - Filter list - $Result = SORT($List, attr ASC); - Sort list - $Result = UNION($L1, $L2); - Combine lists - $Result = INTERSECT($L1, $L2); - Common elements - $Result = SUBTRACT($L1, $L2); - Remove common - $Count = COUNT($List); - Count elements - $Sum = SUM($List.Attr); - Sum attribute - $Avg = AVERAGE($List.Attr); - Average attribute - -Logging: - LOG INFO NODE 'Name' 'message'; - Log message - LOG WARNING 'message'; - Warning (no node) - LOG ERROR 'template {1}' WITH ( - With template - {1} = $value); - -- Levels: INFO, WARNING, ERROR, DEBUG, TRACE, CRITICAL - -Page actions: - SHOW PAGE Module.Page ($Param = $value); - Open page with params - SHOW PAGE Module.Page; - Open page (no params) - CLOSE PAGE; - Close current page - -Validation: - VALIDATION FEEDBACK $Obj/Attr MESSAGE 'error text'; - Show error on field - VALIDATION FEEDBACK $Obj/Attr MESSAGE '{1} is invalid' - With template - OBJECTS [$Value]; - -Error handling: - COMMIT $Obj ON ERROR CONTINUE; - Ignore error - COMMIT $Obj ON ERROR ROLLBACK; - Rollback on error - COMMIT $Obj ON ERROR { - Custom handler - LOG ERROR 'failed'; - }; - COMMIT $Obj ON ERROR WITHOUT ROLLBACK { - Handler, keep changes - LOG ERROR 'failed'; - }; - -Return: - RETURN $Value; - Return value - RETURN empty; - Return null - -COMPLETE EXAMPLE ----------------- - - CREATE MICROFLOW MyModule.ACT_CreateOrder ( - $CustomerCode: String, - $Quantity: Integer - ) - RETURNS MyModule.Order AS $NewOrder - BEGIN - -- Find customer - RETRIEVE $Customer FROM MyModule.Customer - WHERE Code = $CustomerCode - LIMIT 1; - - IF $Customer = empty THEN - LOG ERROR NODE 'OrderService' 'Customer not found'; - RETURN empty; - END IF; - - -- Create order - $NewOrder = CREATE MyModule.Order ( - OrderNumber = 'ORD-001', - Quantity = $Quantity, - CreateDate = [%CurrentDateTime%] - ); - - -- Link to customer - CHANGE $NewOrder (MyModule.Order_Customer = $Customer); - - COMMIT $NewOrder WITH EVENTS ON ERROR { - LOG ERROR 'Failed to save order'; - RETURN empty; - }; - - RETURN $NewOrder; - END; diff --git a/cmd/mxcli/help_topics/move.txt b/cmd/mxcli/help_topics/move.txt deleted file mode 100644 index 65e152c6..00000000 --- a/cmd/mxcli/help_topics/move.txt +++ /dev/null @@ -1,89 +0,0 @@ -MOVE Command Syntax -=================== - -Move documents (pages, microflows, snippets, nanoflows, entities, enumerations) -between folders and modules. - -MOVE WITHIN SAME MODULE ------------------------ - -Move to a folder: - MOVE PAGE Module.PageName TO FOLDER 'FolderPath'; - MOVE MICROFLOW Module.MicroflowName TO FOLDER 'Processing/Batch'; - MOVE SNIPPET Module.SnippetName TO FOLDER 'Widgets'; - MOVE NANOFLOW Module.NanoflowName TO FOLDER 'Actions'; - MOVE ENUMERATION Module.EnumName TO FOLDER 'Shared'; - -Move to module root (out of folder): - MOVE PAGE Module.PageName TO Module; - -MOVE ACROSS MODULES -------------------- - -Move to another module's root: - MOVE PAGE OldModule.PageName TO NewModule; - MOVE ENTITY OldModule.Customer TO NewModule; - MOVE ENUMERATION OldModule.Status TO NewModule; - -Move to a folder in another module: - MOVE PAGE OldModule.PageName TO FOLDER 'Screens' IN NewModule; - -NOTE: MOVE ENTITY only supports moving to a module (no folder support). - -WARNING: Cross-module moves may break references! - - By-name references use qualified names (Module.Name) - - When you move to a different module, the qualified name changes - - Use 'SHOW IMPACT OF Module.Name' to see what will break - -EXAMPLES --------- - - -- Move page to a folder - MOVE PAGE MyModule.CustomerEdit TO FOLDER 'Customers'; - - -- Move microflow to nested folder - MOVE MICROFLOW MyModule.ACT_ProcessOrder TO FOLDER 'Orders/Processing'; - - -- Move snippet to different module - MOVE SNIPPET OldModule.NavigationMenu TO Common; - - -- Move entity to different module - MOVE ENTITY OldModule.Customer TO NewModule; - - -- Move enumeration to different module - MOVE ENUMERATION OldModule.OrderStatus TO NewModule; - - -- Check impact before cross-module move - SHOW IMPACT OF OldModule.CustomerPage; - MOVE PAGE OldModule.CustomerPage TO NewModule; - -MOVE FOLDER ------------ - -Move a folder to another location: - MOVE FOLDER Module.FolderName TO FOLDER 'TargetPath'; - MOVE FOLDER Module.FolderName TO TargetModule; - MOVE FOLDER Module.FolderName TO FOLDER 'TargetPath' IN TargetModule; - -For nested folder paths, use double quotes: - MOVE FOLDER Module."Parent/Child" TO TargetModule; - -DROP FOLDER ------------ - -Remove an empty folder from a module: - DROP FOLDER 'FolderPath' IN Module; - DROP FOLDER 'Parent/Child' IN Module; - -The folder must be empty (no documents or sub-folders). -Move contents out first if needed: - MOVE MICROFLOW Module.Name TO Module; - DROP FOLDER 'OldFolder' IN Module; - -FOLDERS -------- - - - Folders are created automatically if they don't exist - - Use '/' for nested folders: 'Parent/Child/Grandchild' - - Folder names are case-sensitive - - MOVE ENTITY does not support folders (entities live in domain models) diff --git a/cmd/mxcli/help_topics/navigation.txt b/cmd/mxcli/help_topics/navigation.txt deleted file mode 100644 index 864c0fc8..00000000 --- a/cmd/mxcli/help_topics/navigation.txt +++ /dev/null @@ -1,50 +0,0 @@ -Navigation Profiles -==================== - -Mendix projects have navigation profiles: Responsive, Phone, Tablet, -and optionally native profiles. Each has its own home page, menu, and login page. - -SHOW COMMANDS -------------- - - SHOW NAVIGATION; -- Summary of all profiles - SHOW NAVIGATION MENU; -- Menu tree for all profiles - SHOW NAVIGATION MENU Responsive; -- Menu tree for one profile - SHOW NAVIGATION HOMES; -- Home page assignments - -DESCRIBE --------- - - DESCRIBE NAVIGATION; -- All profiles (round-trippable) - DESCRIBE NAVIGATION Responsive; -- One profile - -CREATE OR REPLACE NAVIGATION ----------------------------- - -Fully replaces a navigation profile. All clauses are optional. -Omitting a clause clears that section. - - CREATE OR REPLACE NAVIGATION Responsive - HOME PAGE MyModule.Home_Web - HOME PAGE MyModule.AdminDashboard FOR Administration.Administrator - LOGIN PAGE Administration.Login - NOT FOUND PAGE MyModule.Custom404 - MENU ( - MENU ITEM 'Home' PAGE MyModule.Home_Web; - MENU 'Orders' ( - MENU ITEM 'All Orders' PAGE Orders.Order_Overview; - MENU ITEM 'New Order' PAGE Orders.Order_New; - ); - MENU ITEM 'Run Report' MICROFLOW Reports.ACT_GenerateReport; - ); - -ROUND-TRIP WORKFLOW -------------------- - - -- 1. Inspect current state - DESCRIBE NAVIGATION Responsive; - - -- 2. Copy output, modify, paste back as CREATE OR REPLACE - - -- 3. Verify - DESCRIBE NAVIGATION Responsive; diff --git a/cmd/mxcli/help_topics/odata.txt b/cmd/mxcli/help_topics/odata.txt deleted file mode 100644 index aca69f02..00000000 --- a/cmd/mxcli/help_topics/odata.txt +++ /dev/null @@ -1,162 +0,0 @@ -OData Services, Clients, and External Entities -=============================================== - -SHOW COMMANDS -------------- - - SHOW ODATA CLIENTS; -- List all consumed OData services - SHOW ODATA CLIENTS IN MyModule; -- Filter by module - SHOW ODATA SERVICES; -- List all published OData services - SHOW ODATA SERVICES IN MyModule; -- Filter by module - SHOW EXTERNAL ENTITIES; -- List all external entities - SHOW EXTERNAL ENTITIES IN MyModule; -- Filter by module - SHOW EXTERNAL ACTIONS; -- List external actions used in microflows - SHOW EXTERNAL ACTIONS IN MyModule; -- Filter by module - -CONTRACT COMMANDS (browse cached contracts) -------------------------------------------- - - OData ($metadata): - SHOW CONTRACT ENTITIES FROM MyModule.MyClient; -- List entity types from $metadata - SHOW CONTRACT ACTIONS FROM MyModule.MyClient; -- List actions/functions from $metadata - DESCRIBE CONTRACT ENTITY MyModule.MyClient.Product; -- Properties and nav props - DESCRIBE CONTRACT ENTITY MyModule.MyClient.Product FORMAT mdl; -- Generate CREATE EXTERNAL ENTITY - DESCRIBE CONTRACT ACTION MyModule.MyClient.CreateOrder; -- Parameters and return type - - AsyncAPI (business events): - SHOW CONTRACT CHANNELS FROM MyModule.MyEventClient; -- List channels - SHOW CONTRACT MESSAGES FROM MyModule.MyEventClient; -- List messages with schemas - DESCRIBE CONTRACT MESSAGE MyModule.MyEventClient.OrderChanged; -- Message properties - -DESCRIBE COMMANDS ------------------ - - DESCRIBE ODATA CLIENT MyModule.MyClient; -- Full MDL definition - DESCRIBE ODATA SERVICE MyModule.MyService; -- Full MDL definition - DESCRIBE EXTERNAL ENTITY MyModule.MyEntity; -- Full MDL definition - -CREATE ODATA CLIENT (Consumed OData Service) ---------------------------------------------- - - CREATE ODATA CLIENT MyModule.ExternalAPI ( - Version: '1.0', - ODataVersion: OData4, - MetadataUrl: 'https://api.example.com/odata/$metadata', - Timeout: 300, - Folder: 'Integration/APIs' - ); - - Additional properties: ProxyType, ServiceUrl, UseAuthentication, - HttpUsername, HttpPassword, ClientCertificate, - ConfigurationMicroflow, ErrorHandlingMicroflow, - ProxyHost, ProxyPort, ProxyUsername, ProxyPassword - - HEADERS clause: - CREATE ODATA CLIENT MyModule.API (...) - HEADERS ( - 'X-Api-Key': 'abc123', - 'Accept': 'application/json' - ); - -CREATE ODATA SERVICE (Published OData Service) ------------------------------------------------ - - CREATE ODATA SERVICE MyModule.CustomerAPI ( - Path: '/odata/customers', - Version: '1.0.0', - ODataVersion: OData4, - Namespace: 'MyModule.Customers', - ServiceName: 'Customer Service', - Summary: 'API for managing customers', - PublishAssociations: Yes, - Folder: 'Integration/APIs' - ) - AUTHENTICATION Basic, Session - { - PUBLISH ENTITY MyModule.Customer AS 'Customers' ( - ReadMode: SOURCE, - InsertMode: SOURCE, - UpdateMode: NOT_SUPPORTED, - DeleteMode: NOT_SUPPORTED, - UsePaging: Yes, - PageSize: 100 - ) - EXPOSE ( - Id AS 'customerId', - Name (Filterable, Sortable), - Email - ); - }; - - EXPOSE (*) publishes all attributes. - -CREATE EXTERNAL ENTITY ----------------------- - - CREATE EXTERNAL ENTITY MyModule.RemoteCustomer - FROM ODATA CLIENT MyModule.ExternalAPI - ( - EntitySet: 'Customers', - RemoteName: 'Customer', - Countable: Yes, - Creatable: No, - Deletable: No, - Updatable: No - ) - ( - Name: String(200), - Email: String(200) - ); - -CREATE EXTERNAL ENTITIES (bulk from $metadata) ------------------------------------------------ - - -- Create all entity types as external entities - CREATE EXTERNAL ENTITIES FROM MyModule.ExternalAPI; - - -- Create into a different module - CREATE EXTERNAL ENTITIES FROM MyModule.ExternalAPI INTO Integration; - - -- Create only specific entities - CREATE EXTERNAL ENTITIES FROM MyModule.ExternalAPI ENTITIES (Customer, Order); - - -- Idempotent — updates existing entities - CREATE OR MODIFY EXTERNAL ENTITIES FROM MyModule.ExternalAPI; - - -- Combine all options - CREATE OR MODIFY EXTERNAL ENTITIES FROM MyModule.ExternalAPI INTO Integration ENTITIES (Customer, Order); - -ALTER / DROP ------------ - - ALTER ODATA CLIENT MyModule.API SET Timeout = 600; - ALTER ODATA SERVICE MyModule.API SET Version = '2.0.0'; - DROP ODATA CLIENT MyModule.API; - DROP ODATA SERVICE MyModule.API; - -ACCESS CONTROL --------------- - - GRANT ACCESS ON ODATA SERVICE MyModule.API TO MyModule.Admin, MyModule.User; - REVOKE ACCESS ON ODATA SERVICE MyModule.API FROM MyModule.User; - -CATALOG QUERIES ---------------- - - SELECT * FROM CATALOG.ODATA_CLIENTS; - SELECT * FROM CATALOG.ODATA_SERVICES; - SELECT * FROM CATALOG.ENTITIES WHERE IsExternal = 1; - SELECT * FROM CATALOG.EXTERNAL_ENTITIES; - SELECT * FROM CATALOG.EXTERNAL_ACTIONS; - - -- Contract entities/actions from cached $metadata (requires REFRESH CATALOG) - SELECT * FROM CATALOG.CONTRACT_ENTITIES; - SELECT * FROM CATALOG.CONTRACT_ACTIONS; - SELECT * FROM CATALOG.CONTRACT_MESSAGES; - - -- Find all available entities from a specific service - SELECT EntityName, EntitySetName, KeyProperties, PropertyCount - FROM CATALOG.CONTRACT_ENTITIES - WHERE ServiceQualifiedName = 'MyModule.SalesforceAPI'; - -CREATE OR MODIFY — all three types support idempotent upsert. diff --git a/cmd/mxcli/help_topics/oql.txt b/cmd/mxcli/help_topics/oql.txt deleted file mode 100644 index aee73485..00000000 --- a/cmd/mxcli/help_topics/oql.txt +++ /dev/null @@ -1,122 +0,0 @@ -OQL Query Execution -=================== - -Execute OQL queries against a running Mendix application via the M2EE admin API. -Queries run in preview/rollback mode (read-only). - -CLI COMMAND ------------ - - mxcli oql [flags] "query" - -Flags: - -p, --project string Path to .mpr file (used to find .docker/.env) - --host string Admin API host (default: localhost) - --port int Admin API port (default: 8090) - --token string M2EE admin password - -j, --json Output as JSON array - --direct Connect via HTTP directly (bypass docker exec) - -DOCKER EXEC MODE (default) --------------------------- - -By default, when -p is set and a .docker/ directory exists, the request is -routed through "docker compose exec" into the Mendix container. This is -necessary because the M2EE admin API (port 8090) binds to 127.0.0.1 inside -the container and is unreachable from the devcontainer host in Docker-in-Docker -setups. - -Use --direct to bypass this and connect via HTTP directly (when the admin -API is reachable from the host, e.g., outside of Docker). - -CONNECTION RESOLUTION ---------------------- - -Connection settings are resolved in priority order: - - 1. Flags: --host, --port, --token - 2. Environment: MCP_OQL_MENDIX_HOST, ADMIN_PORT, M2EE_ADMIN_PASS - 3. .env file: .docker/.env next to the project - 4. Defaults: localhost:8090 - -The admin password (token) is required. If -p is set, the password is -read from .docker/.env automatically. - -AUTHENTICATION --------------- - -The M2EE admin API uses the X-M2EE-Authentication header with the -admin password base64-encoded (no trailing newline). mxcli handles -this encoding automatically. - -EXAMPLES --------- - - # Basic query (project provides connection settings) - mxcli oql -p app.mpr "SELECT Name, Email FROM MyModule.Customer" - - # JSON output for piping - mxcli oql -p app.mpr --json "SELECT count(c.ID) FROM MyModule.Order AS c" | jq '.[0]' - - # Direct HTTP connection (when admin API is reachable from host) - mxcli oql --direct --host localhost --port 8090 --token 'AdminPassword1!' "SELECT 1" - - # Test a VIEW entity query before committing it - mxcli oql -p app.mpr "SELECT datepart(YEAR, o.OrderDate) AS Year, sum(o.Total) AS Revenue FROM Sales.Order AS o GROUP BY datepart(YEAR, o.OrderDate)" - -OQL QUICK REFERENCE -------------------- - - Aggregate functions (lowercase!): sum(), avg(), count(), min(), max() - Count: count(t.ID) not count(*) - Division: amount : quantity (colon, not slash) - Inequality: != (not <>) - Enum comparison: t.Status = 'ACTIVE' (string literal) - Association path: t/Module.Assoc_Target (slash, not dot) - Date parts: datepart(YEAR, t.Date) - -See also: mxcli syntax microflow (for RETRIEVE/WHERE syntax) - write-oql-queries skill (full OQL reference with patterns) - -COMMON ERRORS -------------- - - "cannot execute in Mendix container" - → App not running. Start with: mxcli docker up -p app.mpr - - "cannot connect to Mendix admin API" - → Using --direct but admin API unreachable. Try without --direct. - - "authentication failed" - → Wrong admin password. Check .docker/.env or pass --token - - "Action not found: preview_execute_oql" - → The Mendix runtime requires the -Dmendix.live-preview=enabled JVM flag. - Projects created with mxcli docker init after this fix include it - automatically. For existing projects, re-initialize the Docker stack: - mxcli docker init -p app.mpr --force - - "Entity '...' is unknown" - → Entity name incorrect or module not deployed - - "Attribute '...' is unknown" - → Check attribute name and case (OQL is case-sensitive) - -WORKFLOW: OQL → VIEW ENTITY ----------------------------- - - 1. Write and test your OQL query interactively: - mxcli oql -p app.mpr "SELECT ..." - - 2. Once it works, embed it in a VIEW ENTITY: - CREATE VIEW ENTITY Module.ViewName ( - Col1: Type, - Col2: Type - ) AS ( - SELECT ... AS Col1, ... AS Col2 - FROM ... - ); - - 3. Apply and validate: - mxcli exec view.mdl -p app.mpr - mxcli docker run -p app.mpr --fresh --wait diff --git a/cmd/mxcli/help_topics/page.txt b/cmd/mxcli/help_topics/page.txt deleted file mode 100644 index 6b595b16..00000000 --- a/cmd/mxcli/help_topics/page.txt +++ /dev/null @@ -1,189 +0,0 @@ -Page Creation Syntax (V3) -========================= - -Basic syntax: - CREATE PAGE Module.Name - ( - Title: 'Page Title', - Layout: Module.LayoutName - [, Url: 'page-url'] - [, Folder: 'FolderPath'] - [, Variables: { $varName: DataType = 'expression', ... }] - ) - { - -- widgets - } - -With parameters (entity or primitive types): - CREATE PAGE Module.Name - ( - Params: { $Param: Module.Entity, $Qty: Integer }, - Title: 'Title', - Layout: Module.Layout - ) - { ... } - -With page variables (for column visibility, conditional logic): - CREATE PAGE Module.Name - ( - Title: 'Products', - Layout: Module.Layout, - Variables: { $showStock: Boolean = 'true', $mode: String = '''active''' } - ) - { ... } - - Variable types: Boolean, String, Integer, Decimal, DateTime - Default values: Mendix expressions in single quotes - Referenced in expressions as $varName (e.g., Visible: '$showStock') - -WIDGET PATTERN --------------- - WIDGETTYPE widgetName (Property: value, ...) [{ children }] - -PROPERTY-BASED BINDINGS ------------------------ - DataSource: $Variable - Variable/parameter binding - DataSource: DATABASE Module.Entity - Database query - DataSource: MICROFLOW Module.MF() - Microflow datasource - DataSource: SELECTION widgetName - Selection from another widget - Binds: AttributeName - Attribute binding (form inputs) - Action: SAVE_CHANGES - Save action - Action: CANCEL_CHANGES - Cancel action - Action: CLOSE_PAGE - Close page - Action: DELETE - Delete object - Action: SHOW_PAGE Module.Page - Navigate to page - Action: SHOW_PAGE Module.Page(P: $val) - Navigate with params - Action: MICROFLOW Module.MF - Call microflow - Action: MICROFLOW Module.MF(Param: $val) - Call with params - Action: CREATE_OBJECT Entity THEN SHOW_PAGE Page - Create and navigate - -CONTAINER WIDGETS ------------------ - - LAYOUTGRID gridName { - ROW rowName { - COLUMN colName (DesktopWidth: 6) { ... } - COLUMN col2 (DesktopWidth: 6) { ... } - } - } - - CONTAINER ctnName (Class: 'my-class') { ... } - -DATA WIDGETS ------------- - - DATAVIEW dvName (DataSource: $Param) { - -- input widgets - FOOTER footerName { - -- action buttons - } - } - - DATAGRID gridName (DataSource: DATABASE Module.Entity) { - CONTROLBAR ctlBar { - ACTIONBUTTON btnNew (Caption: 'New', - Action: CREATE_OBJECT Module.Entity THEN SHOW_PAGE Module.EditPage, - ButtonStyle: Primary) - } - COLUMN colName (Attribute: Name, Caption: 'Name') - COLUMN colCode (Attribute: Code, Caption: 'Code') - } - - COLUMN PROPERTIES (non-default only in DESCRIBE output): - Sortable: true|false - Can sort (default: true with attribute) - Resizable: true|false - Can resize (default: true) - Draggable: true|false - Can reorder (default: true) - Hidable: yes|hidden|no - Can hide (default: yes) - ColumnWidth: autoFill|autoFit|manual - Width mode (default: autoFill) - Size: integer - Width in px when manual (default: 1) - Alignment: left|center|right - Text alignment (default: left) - WrapText: true|false - Wrap text (default: false) - Visible: 'expression' - Conditional visibility (use page variable, NOT $currentObject) - DynamicCellClass: 'expression' - Dynamic CSS class (use if(...) then ... else ... syntax) - Tooltip: 'text' - Cell tooltip text - - COLUMN colPrice ( - Attribute: Price, Caption: 'Price', - Alignment: right, Sortable: false, - ColumnWidth: manual, Size: 150, - Tooltip: 'Price in USD' - ) - - GALLERY galleryName ( - DataSource: DATABASE Module.Entity, - Selection: Single, - DesktopColumns: 3, - TabletColumns: 2, - PhoneColumns: 1 - ) { - DYNAMICTEXT txtName (Content: '{1}', ContentParams: [{1} = Name], RenderMode: H4) - } - -INPUT WIDGETS -------------- - - TEXTBOX txtName (Label: 'Name', Binds: Name) - TEXTAREA txtDesc (Label: 'Description', Binds: Description) - DATEPICKER dpDate (Label: 'Date', Binds: CreatedDate) - COMBOBOX cbStatus (Label: 'Status', Binds: Status) - RADIOBUTTONS rbActive (Label: 'Active', Binds: IsActive) - CHECKBOX cbActive (Label: 'Active', Binds: IsActive) - -DISPLAY WIDGETS ---------------- - - DYNAMICTEXT heading (Content: 'Page heading', RenderMode: H2) - DYNAMICTEXT greeting (Content: 'Hello, {1}!', ContentParams: [{1} = Name]) - -ACTION WIDGETS --------------- - - ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary) - ACTIONBUTTON btnCancel (Caption: 'Cancel', Action: CANCEL_CHANGES) - ACTIONBUTTON btnClose (Caption: 'Close', Action: CLOSE_PAGE) - ACTIONBUTTON btnDelete (Caption: 'Delete', Action: DELETE, ButtonStyle: Danger) - ACTIONBUTTON btnEdit (Caption: 'Edit', - Action: SHOW_PAGE Module.EditPage(Item: $currentObject)) - ACTIONBUTTON btnNew (Caption: 'New', - Action: CREATE_OBJECT Module.Entity THEN SHOW_PAGE Module.EditPage, - ButtonStyle: Primary) - ACTIONBUTTON btnProcess (Caption: 'Process', - Action: MICROFLOW Module.ProcessItem(Item: $currentObject), - ButtonStyle: Success) - - Button styles: Default, Primary, Success, Info, Warning, Danger - -SNIPPET WIDGETS ---------------- - - SNIPPETCALL scNav (Snippet: Module.NavigationSnippet) - -STYLING -------- - - Class: 'css-class-name' - CSS class - Style: 'color: red; padding: 8px;' - Inline CSS - DesignProperties: ['Spacing top': 'Large'] - Atlas design props - DesignProperties: ['Full width': ON] - Toggle design prop - -COMPLETE EXAMPLE ----------------- - - CREATE PAGE MyModule.EditCustomer - ( - Params: { $Customer: MyModule.Customer }, - Title: 'Edit Customer', - Layout: Atlas_Core.PopupLayout - ) - { - DATAVIEW dvCustomer (DataSource: $Customer) { - TEXTBOX txtName (Label: 'Name', Binds: Name) - TEXTBOX txtEmail (Label: 'Email', Binds: Email) - COMBOBOX cbStatus (Label: 'Status', Binds: CustomerStatus) - - FOOTER footer1 { - ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary) - ACTIONBUTTON btnCancel (Caption: 'Cancel', Action: CANCEL_CHANGES) - } - } - } diff --git a/cmd/mxcli/help_topics/rest.txt b/cmd/mxcli/help_topics/rest.txt deleted file mode 100644 index 8afb7c3d..00000000 --- a/cmd/mxcli/help_topics/rest.txt +++ /dev/null @@ -1,213 +0,0 @@ -REST Services (Consumed and Published) -======================================= - -SHOW COMMANDS -------------- - - SHOW REST CLIENTS; -- List consumed REST services - SHOW REST CLIENTS IN MyModule; -- Filter by module - SHOW PUBLISHED REST SERVICES; -- List published REST services - SHOW PUBLISHED REST SERVICES IN MyModule; -- Filter by module - -DESCRIBE COMMANDS ------------------ - - DESCRIBE REST CLIENT MyModule.PetStoreAPI; -- Full MDL definition - DESCRIBE PUBLISHED REST SERVICE MyModule.MyAPI; -- Full MDL definition - -CREATE REST CLIENT ------------------- - - CREATE REST CLIENT Module.Api ( - BaseUrl: 'https://api.example.com', - Authentication: NONE - ) - { - OPERATION GetOrder { - Method: GET, - Path: '/orders/{id}', - Parameters: ($id: String), - Headers: ('Accept' = 'application/json'), - Timeout: 30, - Response: JSON AS $Result - } - - OPERATION CreateOrder { - Method: POST, - Path: '/orders', - Headers: ('Content-Type' = 'application/json'), - Body: MAPPING Module.OrderRequest { - customerId = CustomerId, - amount = Amount, - }, - Response: MAPPING Module.OrderResponse { - Id = id, - Status = status, - } - } - }; - - CREATE OR MODIFY REST CLIENT Module.Api ( ... ) { ... }; -- Update existing - DROP REST CLIENT Module.Api; - - Authentication: NONE | BASIC (Username: '...', Password: '...') - Body: JSON FROM $var | TEMPLATE '...' | MAPPING Entity { jsonField = Attr, ... } - Response: JSON AS $var | STRING AS $var | FILE AS $var | STATUS AS $var | NONE - | MAPPING Entity { Attr = jsonField, ... } - -CREATE / DROP PUBLISHED REST SERVICE -------------------------------------- - - CREATE PUBLISHED REST SERVICE Module.MyAPI ( - Path: 'rest/api/v1', - Version: '1.0.0', - ServiceName: 'My API' - ) - { - RESOURCE 'orders' { - GET '' MICROFLOW Module.GetAllOrders; - GET '{id}' MICROFLOW Module.GetOrderById; - POST '' MICROFLOW Module.CreateOrder; - DELETE '{id}' MICROFLOW Module.DeleteOrder; - } - }; - - CREATE OR REPLACE PUBLISHED REST SERVICE ...; -- Replaces existing - DROP PUBLISHED REST SERVICE Module.MyAPI; -- Delete service - - Properties: Path (required), Version, ServiceName, Folder - HTTP methods: GET, POST, PUT, DELETE, PATCH - -ALTER PUBLISHED REST SERVICE ----------------------------- - - -- Change properties (Path, Version, ServiceName) - ALTER PUBLISHED REST SERVICE Module.MyAPI SET Version = '2.0.0'; - ALTER PUBLISHED REST SERVICE Module.MyAPI - SET Path = 'rest/api/v2', ServiceName = 'My API v2'; - - -- Add a new resource block - ALTER PUBLISHED REST SERVICE Module.MyAPI ADD RESOURCE 'orders/{id}/items' { - GET '' MICROFLOW Module.GetOrderItems; - }; - - -- Drop a resource by name - ALTER PUBLISHED REST SERVICE Module.MyAPI DROP RESOURCE 'legacy'; - -GRANT / REVOKE ACCESS ---------------------- - - GRANT ACCESS ON PUBLISHED REST SERVICE Module.MyAPI - TO Module.User, Module.Admin; - - REVOKE ACCESS ON PUBLISHED REST SERVICE Module.MyAPI - FROM Module.User; - - Modifiers: DEPRECATED, IMPORT MAPPING, EXPORT MAPPING, COMMIT - Operation paths: empty '' for root, '{name}' for path params. - Do NOT start/end with /. - Path param '{id}' requires microflow parameter $id (case-sensitive). - -JSON STRUCTURES & MAPPINGS --------------------------- - - SHOW JSON STRUCTURES; -- List all JSON structures - DESCRIBE JSON STRUCTURE Module.JSON_Pet; -- Element tree + snippet - CREATE JSON STRUCTURE Module.JSON_Pet SNIPPET '{"id": 1}'; - - SHOW IMPORT MAPPINGS; -- List import mappings - DESCRIBE IMPORT MAPPING Module.IMM_Pet; -- Full CREATE statement - CREATE IMPORT MAPPING Module.IMM_Pet - WITH JSON STRUCTURE Module.JSON_Pet - { - CREATE Module.PetResponse { - PetId = id, - Name = name - } - }; - - SHOW EXPORT MAPPINGS; -- List export mappings - DESCRIBE EXPORT MAPPING Module.EMM_Pet; -- Full CREATE statement - CREATE EXPORT MAPPING Module.EMM_Pet - WITH JSON STRUCTURE Module.JSON_Pet - { - Module.PetResponse { - id = PetId, - name = Name - } - }; - -MICROFLOW ACTIONS ------------------ - - -- Call a REST client operation (fire and forget) - SEND REST REQUEST Module.API.GetData; - - -- With query/path parameters and output variable - $Result = SEND REST REQUEST Module.API.GetForecast - WITH ($latitude = toString(51.92), $longitude = toString(4.48), - $units = 'metric'); - - -- With request body (for POST/PUT/PATCH operations) - $Result = SEND REST REQUEST Module.API.CreateItem BODY $NewItem; - - -- After any SEND REST REQUEST, response is in $latestHttpResponse: - -- $latestHttpResponse/Content (String — response body) - -- $latestHttpResponse/StatusCode (Integer) - - -- Transform JSON with a data transformer (Mendix 11.9+) - $Simplified = TRANSFORM $RawJson WITH Module.SimplifyTransformer; - - -- Import from mapping (JSON string → entities) - $Pet = IMPORT FROM MAPPING Module.IMM_Pet($JsonContent); - - -- Export to mapping (entity → JSON string) - $Json = EXPORT TO MAPPING Module.EMM_Pet($Pet); - -CATALOG QUERIES ---------------- - - SELECT * FROM CATALOG.REST_CLIENTS; - SELECT * FROM CATALOG.REST_OPERATIONS; - SELECT * FROM CATALOG.PUBLISHED_REST_SERVICES; - SELECT * FROM CATALOG.PUBLISHED_REST_OPERATIONS; - - -- All REST operations with methods and paths - SELECT ServiceQualifiedName, HttpMethod, Path, Name - FROM CATALOG.REST_OPERATIONS - ORDER BY ServiceQualifiedName, Path; - - -- Published API surface area - SELECT ServiceQualifiedName, ResourceName, HttpMethod, Path, Microflow - FROM CATALOG.PUBLISHED_REST_OPERATIONS; - -DATA TRANSFORMERS ------------------ - - LIST DATA TRANSFORMERS; -- List all transformers - LIST DATA TRANSFORMERS IN MyModule; -- Filter by module - DESCRIBE DATA TRANSFORMER MyModule.WeatherTransform; -- Re-executable CREATE - - -- Single-line JSLT step - CREATE DATA TRANSFORMER MyModule.Flatten - SOURCE JSON '{"a": {"b": 1}}' - { - JSLT '{"value": .a.b}'; - }; - - -- Multi-line JSLT step using $$ quoting - CREATE DATA TRANSFORMER MyModule.WeatherTransform - SOURCE JSON '{"latitude": 51.9, "current": {"temp": 12.8}}' - { - JSLT $$ - { - "lat": .latitude, - "temp": .current.temp - } - $$; - }; - - DROP DATA TRANSFORMER MyModule.WeatherTransform; -- Delete transformer - - Requires Mendix 11.9+. Steps: JSLT, XSLT. - Single-line: JSLT '...'. Multi-line: JSLT $$ ... $$. diff --git a/cmd/mxcli/help_topics/search.txt b/cmd/mxcli/help_topics/search.txt deleted file mode 100644 index 31995161..00000000 --- a/cmd/mxcli/help_topics/search.txt +++ /dev/null @@ -1,98 +0,0 @@ -Full-Text Search -================ - -Search across your Mendix project's strings and source definitions. - -SEARCH COMMAND (MDL) --------------------- - - SEARCH 'query'; - -Examples: - SEARCH 'validation'; -- Find validation messages - SEARCH 'Customer'; -- Find Customer references - SEARCH 'error'; -- Find error messages - SEARCH 'save changes'; -- Multi-word search - -CLI SUBCOMMAND --------------- - - mxcli search -p app.mpr "query" [flags] - -Flags: - -f, --format string Output format: table, names, json (default "table") - -q, --quiet Suppress connection/status messages (for piping) - -Output Formats: - table - Human-readable table (default) - names - typename per line (for piping) - json - JSON array (for jq processing) - -Examples: - mxcli search -p app.mpr "validation" - mxcli search -p app.mpr "Customer" -q --format names - mxcli search -p app.mpr "error" -q --format json - -WHAT'S SEARCHED ---------------- - -Strings table (built during REFRESH CATALOG FULL): - - Page titles and URLs - - Widget captions and labels - - Log message templates - - Show message templates - - Validation feedback messages - - Documentation text - - Enumeration value captions - -Source table (built during REFRESH CATALOG SOURCE): - - Full MDL DESCRIBE output for all entities - - Full MDL DESCRIBE output for all microflows - - Full MDL DESCRIBE output for all pages - - Full MDL DESCRIBE output for all snippets - - Full MDL DESCRIBE output for all enumerations - -RAW FTS QUERIES ---------------- - -You can also query the FTS tables directly with SQL: - - SELECT * FROM CATALOG.STRINGS WHERE strings MATCH 'validation'; - SELECT * FROM CATALOG.SOURCE WHERE source MATCH 'CREATE ENTITY'; - -FTS5 operators: - 'word1 word2' -- All words (AND) - 'word1 OR word2' -- Either word - '"exact phrase"' -- Exact phrase - 'word*' -- Prefix matching - 'word1 NOT word2' -- Exclude word - -CATALOG BUILD MODES -------------------- - - REFRESH CATALOG -- Fast mode (no FTS tables) - REFRESH CATALOG FULL -- Builds strings table - REFRESH CATALOG SOURCE -- Builds strings + source tables - REFRESH CATALOG FULL FORCE -- Rebuild even if cached - -The SEARCH command automatically triggers FULL mode if needed. - -UNIX PIPES ----------- - -Use -q (quiet) and --format names for clean piping: - - # Describe first matching microflow - mxcli search -p app.mpr "validation" -q --format names | \ - head -1 | awk '{print $2}' | \ - xargs mxcli describe -p app.mpr microflow - - # Process all matches - mxcli search -p app.mpr "error" -q --format names > results.txt - while IFS=$'\t' read -r type name; do - mxcli describe -p app.mpr "$type" "$name" - done < results.txt - - # Extract names with jq - mxcli search -p app.mpr "Customer" -q --format json | \ - jq -r '.[].qualifiedName' diff --git a/cmd/mxcli/help_topics/security.txt b/cmd/mxcli/help_topics/security.txt deleted file mode 100644 index 5c44ae81..00000000 --- a/cmd/mxcli/help_topics/security.txt +++ /dev/null @@ -1,58 +0,0 @@ -Security Management -=================== - -MDL provides commands for managing Mendix application security: -module roles, user roles, access control, and project settings. - -SHOW COMMANDS (read-only): - SHOW PROJECT SECURITY; - SHOW MODULE ROLES [IN ]; - SHOW USER ROLES; - SHOW DEMO USERS; - SHOW ACCESS ON MICROFLOW .; - SHOW ACCESS ON PAGE .; - SHOW ACCESS ON .; - SHOW SECURITY MATRIX [IN ]; - -MODULE ROLES: - CREATE MODULE ROLE . [DESCRIPTION '']; - DROP MODULE ROLE .; - -MICROFLOW ACCESS: - GRANT EXECUTE ON MICROFLOW . TO [, ...]; - REVOKE EXECUTE ON MICROFLOW . FROM [, ...]; - -PAGE ACCESS: - GRANT VIEW ON PAGE . TO [, ...]; - REVOKE VIEW ON PAGE . FROM [, ...]; - -ENTITY ACCESS: - GRANT ON . () [WHERE '']; - REVOKE ON .; - REVOKE ON . (); - - Rights: CREATE, DELETE, READ *, READ (,...), WRITE *, WRITE (,...) - - GRANT is additive — merges new rights into existing access rules. - REVOKE without rights removes the entire rule; with rights, downgrades selectively. - -USER ROLES: - CREATE USER ROLE ( [, ...]) [MANAGE ALL ROLES]; - ALTER USER ROLE ADD MODULE ROLES ( [, ...]); - ALTER USER ROLE REMOVE MODULE ROLES ( [, ...]); - DROP USER ROLE ; - -PROJECT SECURITY: - ALTER PROJECT SECURITY LEVEL OFF|PROTOTYPE|PRODUCTION; - ALTER PROJECT SECURITY DEMO USERS ON|OFF; - -DEMO USERS: - CREATE DEMO USER '' PASSWORD '' [ENTITY Module.Entity] ( [, ...]); - DROP DEMO USER ''; - -Examples: - CREATE MODULE ROLE Shop.Admin DESCRIPTION 'Full access'; - GRANT EXECUTE ON MICROFLOW Shop.ProcessOrder TO Shop.Admin, Shop.User; - GRANT Shop.Admin ON Shop.Customer (CREATE, DELETE, READ *, WRITE *); - CREATE USER ROLE AppAdmin (Shop.Admin) MANAGE ALL ROLES; - SHOW SECURITY MATRIX IN Shop; diff --git a/cmd/mxcli/help_topics/settings.txt b/cmd/mxcli/help_topics/settings.txt deleted file mode 100644 index 37871fc7..00000000 --- a/cmd/mxcli/help_topics/settings.txt +++ /dev/null @@ -1,71 +0,0 @@ -Project Settings -================ - -SHOW COMMANDS -------------- - - SHOW SETTINGS; -- Overview of all settings parts - DESCRIBE SETTINGS; -- Full MDL output (round-trippable) - -ALTER SETTINGS (Model) ----------------------- - - ALTER SETTINGS MODEL AfterStartupMicroflow = 'Module.MF_Startup'; - ALTER SETTINGS MODEL HashAlgorithm = 'BCrypt'; - ALTER SETTINGS MODEL JavaVersion = 'Java21'; - ALTER SETTINGS MODEL AllowUserMultipleSessions = true; - ALTER SETTINGS MODEL RoundingMode = 'HalfUp'; - ALTER SETTINGS MODEL BcryptCost = 12; - -ALTER SETTINGS (Configuration) ------------------------------- - - ALTER SETTINGS CONFIGURATION 'Default' - DatabaseType = 'PostgreSql', - DatabaseUrl = 'localhost:5432', - DatabaseName = 'mydb', - DatabaseUserName = 'mendix', - DatabasePassword = 'mendix', - HttpPortNumber = 8080; - -ALTER SETTINGS (Constant Overrides) ------------------------------------ - - ALTER SETTINGS CONSTANT 'BusinessEvents.ServerUrl' VALUE 'kafka:9092' - IN CONFIGURATION 'Default'; - - ALTER SETTINGS DROP CONSTANT 'BusinessEvents.ServerUrl' - IN CONFIGURATION 'Default'; -- Remove override (reset to default) - -CREATE / DROP CONFIGURATION ----------------------------- - - CREATE CONFIGURATION 'Staging'; -- Create with defaults - - CREATE CONFIGURATION 'Production' - DatabaseType = 'POSTGRESQL', - DatabaseUrl = 'prod-db:5432', - HttpPortNumber = 8080; -- Create with properties - - DROP CONFIGURATION 'Staging'; -- Remove a configuration - -ALTER SETTINGS (Language / Workflows) -------------------------------------- - - ALTER SETTINGS LANGUAGE DefaultLanguageCode = 'en_US'; - ALTER SETTINGS WORKFLOWS UserEntity = 'System.User'; - ALTER SETTINGS WORKFLOWS DefaultTaskParallelism = 3; - -NOTES ------ - - There is always exactly one ProjectSettings document per project. - It cannot be created or deleted, only modified via ALTER SETTINGS. - - Model settings keys: AfterStartupMicroflow, BeforeShutdownMicroflow, - HealthCheckMicroflow, HashAlgorithm, BcryptCost, JavaVersion, - RoundingMode, AllowUserMultipleSessions, ScheduledEventTimeZoneCode. - - Configuration settings keys: DatabaseType, DatabaseUrl, DatabaseName, - DatabaseUserName, DatabasePassword, HttpPortNumber, ServerPortNumber, - ApplicationRootUrl. diff --git a/cmd/mxcli/help_topics/snippet.txt b/cmd/mxcli/help_topics/snippet.txt deleted file mode 100644 index a91afad9..00000000 --- a/cmd/mxcli/help_topics/snippet.txt +++ /dev/null @@ -1,75 +0,0 @@ -Snippet Creation Syntax -======================= - -Snippets are reusable page fragments that can be embedded in pages -and other snippets using SNIPPETCALL. - -Basic syntax (no parameters): - CREATE SNIPPET Module.Name - { - -- widgets - } - -With parameters (entity or primitive types): - CREATE SNIPPET Module.Name ( - Params: { $Param: Module.Entity, $Label: String } - ) - { - DATAVIEW dv (DataSource: $Param) { - TEXTBOX txtName (Label: 'Name', Attribute: Name) - } - } - -With page variables: - CREATE SNIPPET Module.Name ( - Variables: { $isEditable: Boolean = 'true' } - ) - { - -- widgets can reference $isEditable in expressions - } - -With folder: - CREATE SNIPPET Module.Name (Folder: 'Snippets/Common') - { - -- widgets - } - -Embedding in a page: - -- Without parameters: - SNIPPETCALL navMenu (Snippet: Module.NavigationMenu) - - -- With parameters: - SNIPPETCALL custInfo (Snippet: Module.CustomerInfo) - -All page widgets are available inside snippets (LAYOUTGRID, DATAVIEW, -TEXTBOX, ACTIONBUTTON, NAVIGATIONLIST, etc.). -See: mxcli help page - -EXAMPLE: Navigation Menu Snippet ---------------------------------- - - CREATE SNIPPET MyModule.NavigationMenu - { - NAVIGATIONLIST navMenu { - ITEM itemCustomers (Action: SHOW_PAGE MyModule.CustomerOverview) { - DYNAMICTEXT txtCustomers (Content: 'Customers') - } - ITEM itemProducts (Action: SHOW_PAGE MyModule.ProductOverview) { - DYNAMICTEXT txtProducts (Content: 'Products') - } - } - } - -EXAMPLE: Entity Detail Snippet -------------------------------- - - CREATE SNIPPET MyModule.CustomerInfo ( - Params: { $Customer: MyModule.Customer } - ) - { - DATAVIEW customerView (DataSource: $Customer) { - TEXTBOX txtName (Label: 'Name', Attribute: Name) - TEXTBOX txtEmail (Label: 'Email', Attribute: Email) - TEXTBOX txtPhone (Label: 'Phone', Attribute: Phone) - } - } diff --git a/cmd/mxcli/help_topics/sql.txt b/cmd/mxcli/help_topics/sql.txt deleted file mode 100644 index ee40cf87..00000000 --- a/cmd/mxcli/help_topics/sql.txt +++ /dev/null @@ -1,169 +0,0 @@ -External SQL Query Execution -============================ - -Execute SQL queries directly against external databases (PostgreSQL, Oracle, SQL Server). -Credential isolation: DSN is never exposed in session output or logs. - -MDL Syntax (REPL / scripts) ----------------------------- - - -- Connect to a database - SQL CONNECT postgres 'postgres://user:pass@localhost:5432/mydb' AS source; - - -- List tables, views, functions - SQL source SHOW TABLES; - SQL source SHOW VIEWS; - SQL source SHOW FUNCTIONS; - - -- Describe table/view columns - SQL source DESCRIBE users; - - -- Execute any SQL query - SQL source SELECT * FROM users WHERE active = true LIMIT 10; - SQL source INSERT INTO logs (message) VALUES ('hello'); - - -- List active connections (alias + driver only, no DSN) - SQL CONNECTIONS; - - -- Disconnect - SQL DISCONNECT source; - -Import from External DB into Mendix App DB -------------------------------------------- - - -- Import rows from external DB into Mendix entity table - IMPORT FROM source QUERY 'SELECT name, email FROM employees' - INTO HRModule.Employee - MAP (name AS Name, email AS Email); - - -- With batch size and row limit - IMPORT FROM source QUERY 'SELECT * FROM products WHERE active = true' - INTO Shop.Product - MAP (product_name AS ProductName, price AS Price, sku AS SKU) - BATCH 500 - LIMIT 10000; - - -- With association linking (lookup by natural key on child entity) - IMPORT FROM source QUERY 'SELECT name, email, dept_name FROM employees' - INTO HR.Employee - MAP (name AS Name, email AS Email) - LINK (dept_name TO Employee_Department ON Name); - - -- Multiple associations - IMPORT FROM source QUERY 'SELECT name, dept, mgr_email FROM employees' - INTO HR.Employee - MAP (name AS Name) - LINK (dept TO Employee_Department ON Name, - mgr_email TO Employee_Manager ON Email); - - -- Direct ID mapping (source already has Mendix object IDs) - IMPORT FROM source QUERY 'SELECT name, dept_id FROM migrated' - INTO HR.Employee - MAP (name AS Name) - LINK (dept_id TO Employee_Department); - - Auto-connects to the Mendix app's PostgreSQL database using project settings. - Generates Mendix object IDs and updates entity sequence counters. - Handles Column and Table association storage modes automatically. - Default batch size: 1000. - - Env var overrides (for devcontainers/Docker where project settings - point to Hsqldb or a different host): - - MXCLI_DB_TYPE=PostgreSql Override DatabaseType - MXCLI_DB_HOST=localhost Override DatabaseUrl host - MXCLI_DB_PORT=5432 Override DatabaseUrl port - MXCLI_DB_NAME=mydb Override DatabaseName - MXCLI_DB_USER=mendix Override DatabaseUserName - MXCLI_DB_PASSWORD=mendix Override DatabasePassword - -Generate Database Connector ---------------------------- - - Generate complete MDL for a Mendix Database Connector from discovered schema: - constants, non-persistent entities, and a DATABASE CONNECTION with queries. - - -- Generate for all tables - SQL source GENERATE CONNECTOR INTO HRModule; - - -- Generate for specific tables - SQL source GENERATE CONNECTOR INTO HRModule TABLES (employees, departments); - - -- Generate for views - SQL source GENERATE CONNECTOR INTO HRModule VIEWS (active_employees_v); - - -- Generate and execute immediately - SQL source GENERATE CONNECTOR INTO HRModule TABLES (employees) EXEC; - - Output includes: - - Constants for JDBC connection string, username, password - - Non-persistent entities matching table/view schemas - - DATABASE CONNECTION with GetAll queries and column mappings - - SQL types automatically mapped to Mendix types - -CLI Subcommand (mxcli sql) --------------------------- - - # Query with explicit DSN (driver auto-detected from scheme) - mxcli sql --dsn 'postgres://user:pass@localhost/db' "SELECT 1" - - # Query using alias (DSN resolved from env or config) - mxcli sql --alias mydb "SELECT * FROM users LIMIT 10" - - # List tables - mxcli sql --alias mydb --tables - - # Describe a table - mxcli sql --alias mydb --describe users - - # JSON output (pipe to jq) - mxcli sql --alias mydb --json "SELECT * FROM orders" | jq '.[0]' - -Driver Auto-Detection ---------------------- - - The driver is auto-detected from the DSN scheme when --driver is not set: - postgres:// → postgres - oracle:// → oracle - sqlserver:// → sqlserver - - This works with --dsn, env vars, and config file entries. - -DSN Resolution Order --------------------- - - 1. --dsn flag (explicit) - 2. Environment variable: MXCLI_SQL__DSN - 3. Environment variable: MXCLI_SQL__DSN - 4. Config file: .mxcli/connections.yaml - -Config File Format (.mxcli/connections.yaml) --------------------------------------------- - - Map format (recommended): - - connections: - source: - driver: postgres - dsn: postgres://user:pass@localhost:5432/mydb - ora: - driver: oracle - dsn: oracle://system:pass@host:1521/service - warehouse: - dsn: postgres://analyst:secret@dw.example.com:5432/warehouse - - List format (also supported): - - connections: - - alias: source - driver: postgres - dsn: postgres://user:pass@localhost:5432/mydb - - The 'driver' field is optional — auto-detected from DSN scheme if omitted. - -Supported Drivers ------------------ - - postgres (aliases: postgresql, pg) - oracle (aliases: ora) - sqlserver (aliases: mssql) diff --git a/cmd/mxcli/help_topics/structure.txt b/cmd/mxcli/help_topics/structure.txt deleted file mode 100644 index b735aa4f..00000000 --- a/cmd/mxcli/help_topics/structure.txt +++ /dev/null @@ -1,67 +0,0 @@ -SHOW STRUCTURE Command -====================== - -Shows a compact, token-efficient overview of a Mendix project. -Designed as a quick "repo map" for understanding project layout. - -SYNTAX ------- - - SHOW STRUCTURE [DEPTH n] [IN module] [ALL]; - - DEPTH 1 Module summary with element counts - DEPTH 2 Elements with signatures (default) - DEPTH 3 Full types on attributes and parameters - - IN module Filter to a single module - ALL Include system and marketplace modules - -EXAMPLES --------- - - -- Quick module counts - SHOW STRUCTURE DEPTH 1; - - -- Elements with signatures (default) - SHOW STRUCTURE; - - -- Full types and parameter names - SHOW STRUCTURE DEPTH 3; - - -- Focus on one module - SHOW STRUCTURE IN MyModule; - - -- Include system modules - SHOW STRUCTURE DEPTH 1 ALL; - -CLI SUBCOMMAND --------------- - - mxcli structure -p app.mpr # depth 2 (default) - mxcli structure -p app.mpr -d 1 # counts only - mxcli structure -p app.mpr -d 3 # full types - mxcli structure -p app.mpr -m ModuleName # single module - mxcli structure -p app.mpr -d 1 --all # include system modules - -OUTPUT FORMAT -------------- - -Depth 1 (counts): - CRM 5 entities, 4 microflows, 3 pages, 1 workflow, 1 enum - Auth 1 entity, 2 microflows, 1 page - -Depth 2 (signatures): - CRM - Entity Customer [name, email, phone, status] - -> Order (*), -> Address (1) - Enumeration OrderStatus [Draft, Pending, Paid, Shipped] - Microflow CreateOrder(Customer) -> Order - Workflow ProcessOrder (3 activities, 1 user task, 1 decision) - Page CustomerOverview - -Depth 3 (full types): - CRM - Entity Customer [name: String, email: String, status: OrderStatus] - -> Order (*), -> Address (1) CASCADE - Microflow CreateOrder(customer: Customer) -> Order - Workflow ProcessOrder (3 activities, 1 user task, 1 decision) param: Order diff --git a/cmd/mxcli/help_topics/test.txt b/cmd/mxcli/help_topics/test.txt deleted file mode 100644 index c9efca53..00000000 --- a/cmd/mxcli/help_topics/test.txt +++ /dev/null @@ -1,104 +0,0 @@ -Microflow Testing -================== - -Run microflow tests defined in .test.mdl or .test.md files against a -Mendix project running in Docker. - -USAGE ------ - mxcli test [file|dir...] -p app.mpr [flags] - -FLAGS ------ - -p, --project Path to .mpr file (required for execution) - -l, --list List tests without executing - -j, --junit FILE Write JUnit XML results to file - -s, --skip-build Skip Docker build (reuse existing deployment) - -v, --verbose Show all runtime log lines - --color Use colored output - -t, --timeout DUR Timeout for runtime startup (default: 5m) - -FILE FORMATS ------------- - -Two test file formats are supported: - -1. Pure MDL (.test.mdl): - Test blocks separated by /, each with javadoc annotations. - - /** - * @test String concatenation - * @expect $result = 'John Doe' - */ - $result = CALL MICROFLOW MyModule.ConcatNames( - FirstName = 'John', LastName = 'Doe' - ); - / - - /** - * @test Division arithmetic - * @expect $result = 25.0 - */ - $result = CALL MICROFLOW MyModule.Divide( - Total = 100.0, Count = 4 - ); - / - -2. Markdown specification (.test.md): - Tests embedded in documentation using ```mdl-test fenced code blocks. - The surrounding markdown serves as human-readable specification. - -ANNOTATIONS ------------ - - @test Test name (required, one per block) - @expect $var = value Assert variable equals value - @expect $var != value Assert variable does not equal value - @expect $obj/Attr = val Assert entity attribute value - @throws 'message' Expect the test to throw an error - @cleanup rollback|none Cleanup strategy (default: rollback) - -EXAMPLES --------- - - # Run a test file - mxcli test tests/microflows.test.mdl -p app.mpr - - # Run all tests in a directory - mxcli test tests/ -p app.mpr - - # Run markdown spec tests - mxcli test specs/microflow-spec.test.md -p app.mpr - - # List tests without executing - mxcli test tests/ --list - - # CI integration with JUnit XML - mxcli test tests/ -p app.mpr --junit results.xml - - # Skip build for faster re-runs - mxcli test tests/ -p app.mpr --skip-build --verbose - -HOW IT WORKS ------------- - -The test runner uses the after-startup microflow pattern: - - 1. Parses test files and extracts test blocks with annotations - 2. Generates a MxTest.TestRunner microflow with LOG+CALL+assertion pattern - 3. Injects TestRunner into the project (CREATE OR REPLACE) - 4. Sets AfterStartupMicroflow to MxTest.TestRunner - 5. Builds and restarts the Mendix runtime in Docker - 6. Captures structured MXTEST: log lines to determine pass/fail - 7. Restores original project settings (after-startup, security) - 8. Outputs results as console table or JUnit XML - -WRITING GOOD TESTS -------------------- - - - One behavior per test block (single @test annotation) - - Use descriptive test names - - Test both happy path and error cases (@throws for errors) - - Use entity attribute assertions for object operations: - @expect $product/Name = 'TestProduct' - - Tests run sequentially in a single microflow diff --git a/cmd/mxcli/help_topics/workflow.txt b/cmd/mxcli/help_topics/workflow.txt deleted file mode 100644 index 53faf439..00000000 --- a/cmd/mxcli/help_topics/workflow.txt +++ /dev/null @@ -1,105 +0,0 @@ -Workflow Commands -================= - -Workflows are multi-step business processes (Mendix 9.0+) with user tasks, -microflow calls, decisions, and parallel paths. - -SHOW COMMANDS -------------- - - SHOW WORKFLOWS; -- List all workflows - SHOW WORKFLOWS IN ModuleName; -- Filter by module - -DESCRIBE COMMAND ----------------- - - DESCRIBE WORKFLOW Module.WorkflowName; - - Shows the workflow definition in pseudo-MDL format including: - - Parameter entity - - All activities (user tasks, microflow calls, decisions, etc.) - - Activity outcomes and flow connections - - User targeting (microflow or XPath based) - -CLI SUBCOMMANDS ---------------- - - mxcli show -p app.mpr workflows - mxcli show -p app.mpr workflows MyModule - mxcli describe -p app.mpr workflow Module.WorkflowName - -CATALOG QUERIES ---------------- - - REFRESH CATALOG FULL; - SELECT * FROM CATALOG.WORKFLOWS; - SELECT QualifiedName, ActivityCount, UserTaskCount - FROM CATALOG.WORKFLOWS WHERE UserTaskCount > 0; - -CROSS-REFERENCES ------------------ - - Workflows generate cross-references in the REFS table: - - call: workflow calls microflow (CallMicroflowTask) - - call_workflow: workflow calls sub-workflow (CallWorkflowActivity) - - show_page: user task shows page - - parameter: workflow parameter entity - - user_targeting: user task targeting microflow - - admin_page: workflow overview page - -CREATE WORKFLOW --------------- - - CREATE [OR MODIFY] WORKFLOW Module.WorkflowName - PARAMETER $Context: Module.Entity - [OVERVIEW PAGE Module.OverviewPage] - [DUE DATE ''] - BEGIN - - END WORKFLOW; - - Activity types: - USER TASK '' - [PAGE Module.Page] - [TARGETING MICROFLOW Module.MF | TARGETING XPATH ''] - [ENTITY Module.Entity] - [OUTCOMES '' { } '' { }]; - - CALL MICROFLOW Module.MF [COMMENT ''] - [OUTCOMES '' { } ...]; - - CALL WORKFLOW Module.WF [COMMENT '']; - - DECISION [''] [COMMENT ''] - OUTCOMES '' { } ...; - - PARALLEL SPLIT [COMMENT ''] - PATH 1 { } - PATH 2 { }; - - JUMP TO [COMMENT '']; - WAIT FOR TIMER [''] [COMMENT '']; - WAIT FOR NOTIFICATION [COMMENT '']; - END; - - Example: - CREATE WORKFLOW Module.ApprovalFlow - PARAMETER $Context: Module.Request - BEGIN - USER TASK ReviewTask 'Review the request' - PAGE Module.ReviewPage - OUTCOMES 'Approve' { } 'Reject' { }; - END WORKFLOW; - -DROP WORKFLOW -------------- - - DROP WORKFLOW Module.WorkflowName; - -CODE NAVIGATION ---------------- - - SHOW CALLERS OF Module.WorkflowName; -- What calls this workflow - SHOW REFERENCES TO Module.WorkflowName; -- All references - SHOW IMPACT OF Module.WorkflowName; -- Impact analysis - SHOW CONTEXT OF Module.WorkflowName; -- Full context for LLM diff --git a/cmd/mxcli/help_topics/xpath.txt b/cmd/mxcli/help_topics/xpath.txt deleted file mode 100644 index ab631b0c..00000000 --- a/cmd/mxcli/help_topics/xpath.txt +++ /dev/null @@ -1,86 +0,0 @@ -XPath Constraints in MDL -======================== - -XPath expressions filter data in RETRIEVE statements, page data sources, -conditional visibility/editability, and security rules. - -SYNTAX ------- - - Single predicate: WHERE [condition] - Multiple predicates: WHERE [cond1][cond2] -- implicit AND - Explicit operators: WHERE [cond1] AND [cond2] - WHERE [cond1] OR [cond2] - -OPERATORS ---------- - - =, !=, <, >, <=, >= Comparison - and, or Boolean (lowercase in XPath) - not(expr) Negation function - contains(attr, 'text') String contains - starts-with(attr, 'text') String starts-with - true(), false() Boolean literals - -EXAMPLES --------- - - -- Simple comparison - WHERE [Status = 'Active'] - WHERE [Amount >= 100] - - -- Multiple predicates (implicit AND) - WHERE [IsActive = true][Stock > 0] - - -- Boolean logic - WHERE [State = 'Ready' and Priority > 5] - WHERE [State = 'Pending' or State = 'Processing'] - WHERE [not(IsArchived)] - - -- Association path traversal - WHERE [Module.Order_Customer/Module.Customer/Name = $Name] - - -- Nested predicates on path steps - WHERE [Module.Line_Order/Module.Order[State = 'Active']/Total > 100] - - -- Mendix tokens (runtime values) - WHERE [System.owner = '[%CurrentUser%]'] - WHERE [CreatedDate > [%CurrentDateTime%]] - - -- ID pseudo-attribute - WHERE [id = $currentObject] - -USAGE CONTEXTS --------------- - - Microflow RETRIEVE: - RETRIEVE $Orders FROM Module.Order - WHERE [State = 'Completed'][IsPaid = true] - SORT BY OrderDate DESC; - - Page data source: - DATAGRID dg ( - DataSource: DATABASE FROM Module.Order - WHERE [State != 'Cancelled'][Amount > 0] - SORT BY OrderDate DESC - ) - - Conditional visibility: - CONTAINER c (Visible: [IsActive = true]) - - Conditional editability: - TEXTBOX txt (Editable: [Status != 'Closed']) - - Security (string literal): - GRANT Module.Role ON Module.Entity (READ *) - WHERE '[System.owner = ''[%CurrentUser%]'']'; - -DIFFERENCES FROM MENDIX EXPRESSIONS ------------------------------------- - - XPath [...] Mendix expression - ───────────── ────────────────── - / is path traversal / is also division - and, or (lowercase) AND, OR (uppercase) - not(expr) function NOT expr keyword - '[%CurrentUser%]' (quoted) [%CurrentUser%] (unquoted) diff --git a/cmd/mxcli/syntax/features_domain_model.go b/cmd/mxcli/syntax/features_domain_model.go new file mode 100644 index 00000000..08a0b7b1 --- /dev/null +++ b/cmd/mxcli/syntax/features_domain_model.go @@ -0,0 +1,207 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +func init() { + Register(SyntaxFeature{ + Path: "domain-model", + Summary: "Domain model: entities, attributes, associations, enumerations, constants", + Keywords: []string{ + "domain model", "entity", "attribute", "association", + "enumeration", "constant", "data model", "schema", + }, + Syntax: "CREATE PERSISTENT ENTITY Module.Name (...);\nCREATE ASSOCIATION Module.Name FROM ... TO ...;\nCREATE ENUMERATION Module.Name (...);\nCREATE CONSTANT Module.Name TYPE ... DEFAULT ...;", + Example: "CREATE PERSISTENT ENTITY Shop.Customer (\n Name: String(100) NOT NULL\n);", + SeeAlso: []string{"domain-model.entity", "domain-model.association", "domain-model.enumeration", "domain-model.constant"}, + }) + + // --- Entity --- + + Register(SyntaxFeature{ + Path: "domain-model.entity", + Summary: "Entity creation: persistent, non-persistent, generalization, event handlers", + Keywords: []string{ + "entity", "create entity", "persistent", "non-persistent", + "generalization", "extends", "event handler", "attribute", + }, + Syntax: "CREATE PERSISTENT ENTITY Module.Name (\n Attr: Type [constraints],\n ...\n) [INDEX (attr1)] [COMMENT 'text'];\n\nCREATE NON_PERSISTENT ENTITY Module.Name (...);\n\nCREATE PERSISTENT ENTITY Module.Name EXTENDS Module.Parent (...);", + Example: "CREATE PERSISTENT ENTITY MyModule.Customer (\n Name: String(100) NOT NULL ERROR 'Name is required',\n Email: String(200) UNIQUE,\n Balance: Decimal DEFAULT 0,\n IsActive: Boolean DEFAULT true,\n Status: Enumeration(MyModule.CustomerType)\n)\nINDEX (Email)\nCOMMENT 'Stores customer information';", + SeeAlso: []string{"domain-model.entity.create", "domain-model.entity.alter", "domain-model.entity.attributes"}, + }) + + Register(SyntaxFeature{ + Path: "domain-model.entity.create", + Summary: "CREATE ENTITY with all options: persistence, generalization, indexes, events", + Keywords: []string{ + "create entity", "new entity", "persistent entity", + "non-persistent", "extends", "generalization", + "index", "event handler", "before commit", "after commit", + }, + Syntax: "CREATE PERSISTENT ENTITY Module.Name (\n Attr: Type [NOT NULL [ERROR 'msg']] [UNIQUE [ERROR 'msg']] [DEFAULT val],\n ...\n)\n[INDEX (attr1, attr2)]\n[ON BEFORE|AFTER CREATE|COMMIT|DELETE|ROLLBACK CALL Module.MF [RAISE ERROR]]\n[COMMENT 'text'];\n\nCREATE NON_PERSISTENT ENTITY Module.Name (...);\nCREATE PERSISTENT ENTITY Module.Name EXTENDS Module.Parent (...);", + Example: "-- Persistent with constraints and index\nCREATE PERSISTENT ENTITY Shop.Order (\n OrderNumber: String(20) NOT NULL,\n Total: Decimal DEFAULT 0,\n CreatedAt: DateTime\n)\nINDEX (OrderNumber)\nON BEFORE COMMIT CALL Shop.ValidateOrder($currentObject) RAISE ERROR;\n\n-- With generalization\nCREATE PERSISTENT ENTITY Shop.ProductImage EXTENDS System.Image (\n Caption: String(200)\n);", + SeeAlso: []string{"domain-model.entity.alter", "domain-model.entity.attributes"}, + }) + + Register(SyntaxFeature{ + Path: "domain-model.entity.alter", + Summary: "ALTER ENTITY: add/rename/modify/drop attributes, indexes, documentation, event handlers", + Keywords: []string{ + "alter entity", "modify entity", "add attribute", + "drop attribute", "rename attribute", "add index", + "event handler", "documentation", + }, + Syntax: "ALTER ENTITY Module.Name ADD ATTRIBUTE AttrName: Type [constraints];\nALTER ENTITY Module.Name DROP ATTRIBUTE AttrName;\nALTER ENTITY Module.Name RENAME ATTRIBUTE OldName TO NewName;\nALTER ENTITY Module.Name MODIFY ATTRIBUTE AttrName SET DEFAULT val;\nALTER ENTITY Module.Name ADD INDEX (attr1, attr2);\nALTER ENTITY Module.Name SET DOCUMENTATION 'text';\nALTER ENTITY Module.Name ADD EVENT HANDLER ON BEFORE COMMIT CALL Module.MF RAISE ERROR;", + Example: "ALTER ENTITY Shop.Customer ADD ATTRIBUTE Phone: String(20);\nALTER ENTITY Shop.Customer DROP ATTRIBUTE OldField;\nALTER ENTITY Shop.Customer RENAME ATTRIBUTE Email TO EmailAddress;\nALTER ENTITY Shop.Customer ADD INDEX (EmailAddress);\nALTER ENTITY Shop.Customer\n ADD EVENT HANDLER ON BEFORE COMMIT CALL Shop.Validate($currentObject) RAISE ERROR;", + SeeAlso: []string{"domain-model.entity.create", "domain-model.entity.attributes"}, + }) + + Register(SyntaxFeature{ + Path: "domain-model.entity.show", + Summary: "List and describe entities in the project", + Keywords: []string{ + "show entities", "list entities", "describe entity", + "show attributes", "entity details", + }, + Syntax: "SHOW ENTITIES;\nSHOW ENTITIES IN ;\nDESCRIBE ENTITY Module.Name;", + Example: "SHOW ENTITIES IN Shop;\nDESCRIBE ENTITY Shop.Customer;", + SeeAlso: []string{"domain-model.entity.create"}, + }) + + Register(SyntaxFeature{ + Path: "domain-model.entity.attributes", + Summary: "Attribute data types, constraints, system attributes, and calculated attributes", + Keywords: []string{ + "attribute", "data type", "string", "integer", "decimal", + "boolean", "datetime", "autonumber", "binary", "hashedstring", + "not null", "unique", "default", "calculated", + "auto owner", "auto changed by", "system attribute", + }, + Syntax: "-- Data types\nString(n) Integer Long Decimal Boolean DateTime Date\nAutoNumber Binary HashedString Enumeration(Module.Name)\n\n-- System attributes (auditing)\nAutoOwner AutoChangedBy AutoCreatedDate AutoChangedDate\n\n-- Constraints\nNOT NULL [ERROR 'msg'] UNIQUE [ERROR 'msg'] DEFAULT value\nCALCULATED BY Module.Microflow", + Example: "CREATE PERSISTENT ENTITY MyModule.AuditedEntity (\n Name: String(100) NOT NULL,\n Age: Integer DEFAULT 0,\n Price: Decimal,\n IsActive: Boolean DEFAULT true,\n Status: Enumeration(MyModule.Status),\n FullName: String(200) CALCULATED BY MyModule.CalcFullName,\n Owner: AutoOwner,\n ChangedBy: AutoChangedBy,\n CreatedDate: AutoCreatedDate,\n ChangedDate: AutoChangedDate\n);", + SeeAlso: []string{"domain-model.entity.create", "domain-model.types"}, + }) + + // --- Association --- + + Register(SyntaxFeature{ + Path: "domain-model.association", + Summary: "Associations: references between entities (many-to-one, many-to-many)", + Keywords: []string{ + "association", "reference", "reference set", + "many-to-one", "many-to-many", "foreign key", + "owner", "delete behavior", + }, + Syntax: "CREATE ASSOCIATION Module.Name\n FROM Module.FromEntity TO Module.ToEntity\n TYPE Reference|ReferenceSet\n [OWNER Default|Both]\n [DELETE_BEHAVIOR behavior]\n [COMMENT 'text'];", + Example: "-- Many-to-one\nCREATE ASSOCIATION Shop.Order_Customer\n FROM Shop.Order TO Shop.Customer\n TYPE Reference\n OWNER Default\n DELETE_BEHAVIOR DELETE_BUT_KEEP_REFERENCES;\n\n-- Many-to-many\nCREATE ASSOCIATION Shop.Product_Tag\n FROM Shop.Product TO Shop.Tag\n TYPE ReferenceSet\n OWNER Both;", + SeeAlso: []string{"domain-model.association.create", "domain-model.association.delete-behavior"}, + }) + + Register(SyntaxFeature{ + Path: "domain-model.association.create", + Summary: "CREATE ASSOCIATION with type, owner, storage, and delete behavior options", + Keywords: []string{ + "create association", "new association", "reference", + "reference set", "junction table", "foreign key", + "owner default", "owner both", "storage column", "storage table", + }, + Syntax: "CREATE ASSOCIATION Module.AssociationName\n FROM Module.FromEntity TO Module.ToEntity\n TYPE Reference|ReferenceSet\n [OWNER Default|Both]\n [STORAGE COLUMN|TABLE]\n [DELETE_BEHAVIOR behavior]\n [COMMENT 'text'];\n\nDirection:\n FROM = entity holding the FK (the \"many\" side)\n TO = entity being referenced (the \"one\" side)\n\nTypes:\n Reference = Many-to-one (FK column on FROM table)\n ReferenceSet = Many-to-many (junction table)", + Example: "-- Many-to-one with delete behavior\nCREATE ASSOCIATION Shop.Order_Customer\n FROM Shop.Order TO Shop.Customer\n TYPE Reference\n OWNER Default\n DELETE_BEHAVIOR PREVENT;\n\n-- Many-to-many\nCREATE ASSOCIATION Shop.Product_Tag\n FROM Shop.Product TO Shop.Tag\n TYPE ReferenceSet\n OWNER Both;\n\n-- One-to-one with cascade\nCREATE ASSOCIATION HR.Employee_Profile\n FROM HR.Employee TO HR.EmployeeProfile\n TYPE Reference\n OWNER Default\n DELETE_BEHAVIOR CASCADE;", + SeeAlso: []string{"domain-model.association.delete-behavior", "domain-model.entity.create"}, + }) + + Register(SyntaxFeature{ + Path: "domain-model.association.delete-behavior", + Summary: "Delete behavior options for associations", + Keywords: []string{ + "delete behavior", "cascade", "prevent", + "delete and references", "delete but keep references", + "delete if no references", "referential integrity", + }, + Syntax: "DELETE_BEHAVIOR options:\n DELETE_BUT_KEEP_REFERENCES Delete object, nullify FK (default)\n DELETE_AND_REFERENCES Delete object and cascade to children\n DELETE_IF_NO_REFERENCES Prevent deletion if referenced\n CASCADE Alias for DELETE_AND_REFERENCES\n PREVENT Alias for DELETE_IF_NO_REFERENCES", + Example: "CREATE ASSOCIATION Shop.Order_Customer\n FROM Shop.Order TO Shop.Customer\n TYPE Reference\n DELETE_BEHAVIOR PREVENT;\n\nCREATE ASSOCIATION Shop.Order_Lines\n FROM Shop.OrderLine TO Shop.Order\n TYPE Reference\n DELETE_BEHAVIOR CASCADE;", + SeeAlso: []string{"domain-model.association.create"}, + }) + + // --- Enumeration --- + + Register(SyntaxFeature{ + Path: "domain-model.enumeration", + Summary: "Enumerations: named sets of values for entity attributes", + Keywords: []string{ + "enumeration", "enum", "create enumeration", + "status", "type", "category", "values", + }, + Syntax: "CREATE ENUMERATION Module.Name (\n Value1 'Caption 1',\n Value2 'Caption 2',\n ...\n);", + Example: "CREATE ENUMERATION MyModule.OrderStatus (\n Pending 'Pending Approval',\n Processing 'Being Processed',\n Shipped 'Shipped to Customer',\n Delivered 'Delivered',\n Cancelled 'Order Cancelled'\n);", + SeeAlso: []string{"domain-model.enumeration.create", "domain-model.entity.attributes"}, + }) + + Register(SyntaxFeature{ + Path: "domain-model.enumeration.create", + Summary: "CREATE ENUMERATION with values and captions, usage in entities", + Keywords: []string{ + "create enumeration", "new enum", "enum values", + "caption", "show enumerations", "describe enumeration", + "drop enumeration", + }, + Syntax: "CREATE ENUMERATION Module.Name (\n ValueName 'Display Caption',\n ...\n);\n\nSHOW ENUMERATIONS;\nSHOW ENUMERATIONS IN ;\nDESCRIBE ENUMERATION Module.Name;\nDROP ENUMERATION Module.Name;\n\nUsing in entity:\n AttrName: Enumeration(Module.EnumName)", + Example: "CREATE ENUMERATION MyModule.OrderStatus (\n Pending 'Pending Approval',\n Processing 'Being Processed',\n Shipped 'Shipped to Customer'\n);\n\n-- Using in an entity\nCREATE PERSISTENT ENTITY MyModule.Order (\n OrderNumber: String(20) NOT NULL,\n Status: Enumeration(MyModule.OrderStatus)\n);", + SeeAlso: []string{"domain-model.enumeration", "domain-model.entity.attributes"}, + }) + + // --- Constant --- + + Register(SyntaxFeature{ + Path: "domain-model.constant", + Summary: "Constants: named configuration values (String, Integer, Boolean, etc.)", + Keywords: []string{ + "constant", "configuration", "config value", + "create constant", "setting", + }, + Syntax: "CREATE CONSTANT Module.Name TYPE DataType DEFAULT value [COMMENT 'text'];\nCREATE OR MODIFY CONSTANT Module.Name TYPE DataType DEFAULT value;\n\nSHOW CONSTANTS;\nDESCRIBE CONSTANT Module.Name;\nDROP CONSTANT Module.Name;", + Example: "CREATE CONSTANT MyModule.ApiBaseUrl\n TYPE String\n DEFAULT 'https://api.example.com/v1';\n\nCREATE CONSTANT MyModule.MaxRetries\n TYPE Integer\n DEFAULT 3\n COMMENT 'Maximum API retry attempts';", + SeeAlso: []string{"domain-model.constant.create"}, + }) + + Register(SyntaxFeature{ + Path: "domain-model.constant.create", + Summary: "CREATE/DROP/DESCRIBE CONSTANT with supported types and configuration values", + Keywords: []string{ + "create constant", "drop constant", "describe constant", + "show constants", "constant values", "modify constant", + "string constant", "integer constant", "boolean constant", + }, + Syntax: "CREATE CONSTANT Module.Name\n TYPE String|Integer|Long|Decimal|Boolean|DateTime\n DEFAULT value\n [COMMENT 'description'];\n\nCREATE OR MODIFY CONSTANT Module.Name\n TYPE DataType DEFAULT value [COMMENT 'text'];\n\nSHOW CONSTANTS;\nSHOW CONSTANTS IN ;\nSHOW CONSTANT VALUES;\nDESCRIBE CONSTANT Module.Name;\nDROP CONSTANT Module.Name;\n\nRemove override:\n ALTER SETTINGS DROP CONSTANT 'Module.Name' IN CONFIGURATION 'cfg';", + Example: "CREATE CONSTANT MyModule.ApiBaseUrl\n TYPE String\n DEFAULT 'https://api.example.com/v1';\n\nCREATE CONSTANT MyModule.MaxRetries\n TYPE Integer DEFAULT 3\n COMMENT 'Maximum number of API retry attempts';\n\nCREATE CONSTANT MyModule.EnableDebug\n TYPE Boolean DEFAULT false;\n\nCREATE OR MODIFY CONSTANT MyModule.ApiBaseUrl\n TYPE String\n DEFAULT 'https://api.staging.example.com/v2';", + SeeAlso: []string{"domain-model.constant"}, + }) + + // --- Keywords --- + + Register(SyntaxFeature{ + Path: "domain-model.keywords", + Summary: "Reserved keywords that require quoting when used as identifiers", + Keywords: []string{ + "keywords", "reserved words", "identifier", + "quoted identifier", "escape", "backtick", "double quote", + }, + Syntax: "Quoted identifier syntax:\n \"ModuleName\".EntityName -- ANSI SQL double quotes\n `ModuleName`.EntityName -- MySQL-style backticks\n \"ModuleName\".\"EntityName\" -- Both parts quoted\n\nMixed quoting is allowed: \"ComboBox\".CategoryTreeVE", + Example: "-- Use quotes when module/entity name conflicts with a keyword\nDESCRIBE ENTITY \"ComboBox\".\"CategoryTreeVE\";\nSHOW ENTITIES IN \"ComboBox\";\nSHOW MICROFLOWS IN `Order`;\n\n-- Common conflicts: ComboBox, DataGrid, Gallery, Title, Status, Type, Value", + }) + + // --- Types --- + + Register(SyntaxFeature{ + Path: "domain-model.types", + Summary: "Attribute data types reference: String, Integer, Decimal, Boolean, DateTime, etc.", + Keywords: []string{ + "types", "data types", "attribute types", + "string", "integer", "long", "decimal", "boolean", + "datetime", "autonumber", "binary", "hashedstring", + "enumeration type", "currency", "float", + }, + Syntax: "String(n) Variable-length text up to n characters\nInteger Whole number (-2B to 2B)\nLong Large whole number\nDecimal Precise decimal for currency/calculations\nBoolean True or false\nDateTime Date and time combined\nDate Date only (no time)\nAutoNumber Auto-incrementing integer\nBinary Binary data (files, images)\nHashedString Securely hashed string (passwords)\nEnumeration(Name) Reference to an enumeration\nAutoOwner System.owner (auto-set on create)\nAutoChangedBy System.changedBy (auto-set on commit)\nAutoCreatedDate DateTime (auto-set on create)\nAutoChangedDate DateTime (auto-set on commit)", + Example: "CREATE PERSISTENT ENTITY MyModule.Customer (\n Name: String(100) NOT NULL,\n Age: Integer,\n Balance: Decimal,\n IsActive: Boolean DEFAULT true,\n CreatedAt: DateTime,\n Status: Enumeration(MyModule.Status)\n);", + SeeAlso: []string{"domain-model.entity.attributes"}, + }) +} diff --git a/cmd/mxcli/syntax/features_integration.go b/cmd/mxcli/syntax/features_integration.go new file mode 100644 index 00000000..359da66c --- /dev/null +++ b/cmd/mxcli/syntax/features_integration.go @@ -0,0 +1,324 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +func init() { + // ── Integration overview ────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "integration", + Summary: "Unified discovery of all external services and integration assets", + Keywords: []string{ + "integration", "services", "external", "contract", + "odata", "rest", "business events", "database", + }, + Syntax: "SHOW ODATA CLIENTS [IN Module];\nSHOW REST CLIENTS [IN Module];\nSHOW PUBLISHED REST SERVICES [IN Module];\nSHOW BUSINESS EVENT SERVICES [IN Module];\nSHOW DATABASE CONNECTIONS [IN Module];\nSHOW EXTERNAL ENTITIES [IN Module];\nSHOW EXTERNAL ACTIONS [IN Module];", + Example: "SHOW ODATA CLIENTS;\nSHOW REST CLIENTS IN MyModule;\nSHOW EXTERNAL ENTITIES;\nSELECT * FROM CATALOG.REST_CLIENTS;", + SeeAlso: []string{"odata", "rest", "sql", "business-events"}, + }) + + // ── OData ───────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "odata", + Summary: "OData clients, services, and external entities", + Keywords: []string{ + "odata", "consumed odata", "published odata", + "external entity", "external entities", "metadata", + }, + Syntax: "SHOW ODATA CLIENTS [IN Module];\nSHOW ODATA SERVICES [IN Module];\nSHOW EXTERNAL ENTITIES [IN Module];\nSHOW EXTERNAL ACTIONS [IN Module];\nDESCRIBE ODATA CLIENT Module.Name;\nDESCRIBE ODATA SERVICE Module.Name;", + Example: "SHOW ODATA CLIENTS;\nDESCRIBE ODATA CLIENT MyModule.ExternalAPI;\nSHOW EXTERNAL ENTITIES IN MyModule;", + SeeAlso: []string{"odata.consume", "odata.show", "integration"}, + }) + + Register(SyntaxFeature{ + Path: "odata.consume", + Summary: "Create consumed OData services and external entities", + Keywords: []string{ + "create odata client", "consume odata", "external entity", + "metadata url", "odata4", "headers", "proxy", + }, + Syntax: "CREATE ODATA CLIENT Module.Name (\n Version: '1.0',\n ODataVersion: OData4,\n MetadataUrl: 'https://.../$metadata',\n Timeout: 300\n)\n[HEADERS ('Key': 'Value')];\n\nCREATE EXTERNAL ENTITY Module.Name\n FROM ODATA CLIENT Module.Client\n (EntitySet: 'Name', RemoteName: 'Name')\n (Attr: Type, ...);\n\nCREATE EXTERNAL ENTITIES FROM Module.Client\n [INTO Module] [ENTITIES (Name1, Name2)];", + Example: "CREATE ODATA CLIENT MyModule.SalesforceAPI (\n Version: '1.0',\n ODataVersion: OData4,\n MetadataUrl: 'https://api.example.com/odata/$metadata',\n Timeout: 300\n);\n\nCREATE EXTERNAL ENTITIES FROM MyModule.SalesforceAPI INTO Integration;", + SeeAlso: []string{"odata", "odata.show"}, + }) + + Register(SyntaxFeature{ + Path: "odata.show", + Summary: "Browse cached OData contracts — entities, actions, properties", + Keywords: []string{ + "contract", "show contract", "describe contract", + "metadata", "entity type", "action", "navigation property", + }, + Syntax: "SHOW CONTRACT ENTITIES FROM Module.Client;\nSHOW CONTRACT ACTIONS FROM Module.Client;\nDESCRIBE CONTRACT ENTITY Module.Client.EntityName;\nDESCRIBE CONTRACT ENTITY Module.Client.EntityName FORMAT mdl;\nDESCRIBE CONTRACT ACTION Module.Client.ActionName;", + Example: "SHOW CONTRACT ENTITIES FROM MyModule.SalesforceAPI;\nDESCRIBE CONTRACT ENTITY MyModule.SalesforceAPI.Product;\nDESCRIBE CONTRACT ENTITY MyModule.SalesforceAPI.Product FORMAT mdl;", + SeeAlso: []string{"odata", "odata.consume"}, + }) + + // ── REST ────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "rest", + Summary: "Consumed and published REST services", + Keywords: []string{ + "rest", "rest client", "rest service", + "published rest", "api", "http", + }, + Syntax: "SHOW REST CLIENTS [IN Module];\nSHOW PUBLISHED REST SERVICES [IN Module];\nDESCRIBE REST CLIENT Module.Name;\nDESCRIBE PUBLISHED REST SERVICE Module.Name;", + Example: "SHOW REST CLIENTS;\nDESCRIBE REST CLIENT MyModule.PetStoreAPI;\nSHOW PUBLISHED REST SERVICES IN MyModule;", + SeeAlso: []string{"rest.consumed", "rest.published", "integration"}, + }) + + Register(SyntaxFeature{ + Path: "rest.consumed", + Summary: "Create consumed REST clients with operations, mappings, and authentication", + Keywords: []string{ + "create rest client", "consume rest", "rest operation", + "get", "post", "put", "delete", "patch", + "body", "response", "mapping", "authentication", + "json structure", "import mapping", "export mapping", + }, + Syntax: "CREATE [OR MODIFY] REST CLIENT Module.Name (\n BaseUrl: 'https://...',\n Authentication: NONE | BASIC (...)\n)\n{\n OPERATION Name {\n Method: GET|POST|PUT|DELETE|PATCH,\n Path: '/path/{param}',\n Parameters: ($param: Type),\n Headers: ('Key' = 'Value'),\n Body: JSON FROM $var | MAPPING Entity { ... },\n Response: JSON AS $var | MAPPING Entity { ... }\n }\n};", + Example: "CREATE REST CLIENT Module.PetStore (\n BaseUrl: 'https://petstore.example.com/api',\n Authentication: NONE\n)\n{\n OPERATION GetPet {\n Method: GET,\n Path: '/pets/{id}',\n Parameters: ($id: String),\n Response: JSON AS $Result\n }\n};", + SeeAlso: []string{"rest", "rest.published"}, + }) + + Register(SyntaxFeature{ + Path: "rest.published", + Summary: "Create and manage published REST services with resources and operations", + Keywords: []string{ + "create published rest", "publish rest", "rest resource", + "rest operation", "microflow", "path parameter", + "grant access", "revoke access", + }, + Syntax: "CREATE [OR REPLACE] PUBLISHED REST SERVICE Module.Name (\n Path: 'rest/api/v1',\n Version: '1.0.0',\n ServiceName: 'My API'\n)\n{\n RESOURCE 'name' {\n GET '' MICROFLOW Module.GetAll;\n GET '{id}' MICROFLOW Module.GetById;\n POST '' MICROFLOW Module.Create;\n }\n};\n\nALTER PUBLISHED REST SERVICE Module.Name SET Version = '2.0.0';\nALTER PUBLISHED REST SERVICE Module.Name ADD RESOURCE 'items' { ... };\nALTER PUBLISHED REST SERVICE Module.Name DROP RESOURCE 'legacy';\nDROP PUBLISHED REST SERVICE Module.Name;", + Example: "CREATE PUBLISHED REST SERVICE Module.OrderAPI (\n Path: 'rest/orders/v1',\n Version: '1.0.0',\n ServiceName: 'Order API'\n)\n{\n RESOURCE 'orders' {\n GET '' MICROFLOW Module.GetAllOrders;\n GET '{id}' MICROFLOW Module.GetOrderById;\n POST '' MICROFLOW Module.CreateOrder;\n DELETE '{id}' MICROFLOW Module.DeleteOrder;\n }\n};\n\nGRANT ACCESS ON PUBLISHED REST SERVICE Module.OrderAPI\n TO Module.User, Module.Admin;", + SeeAlso: []string{"rest", "rest.consumed"}, + }) + + // ── SQL ─────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "sql", + Summary: "External SQL queries against PostgreSQL, Oracle, SQL Server", + Keywords: []string{ + "sql", "external sql", "database", "postgres", + "oracle", "sqlserver", "mssql", "query", + }, + Syntax: "SQL CONNECT '' AS ;\nSQL SHOW TABLES;\nSQL SELECT ...;\nSQL CONNECTIONS;\nSQL DISCONNECT ;", + Example: "SQL CONNECT postgres 'postgres://user:pass@localhost:5432/mydb' AS source;\nSQL source SHOW TABLES;\nSQL source SELECT * FROM users WHERE active = true LIMIT 10;\nSQL DISCONNECT source;", + SeeAlso: []string{"sql.connect", "sql.query", "sql.import", "sql.generate"}, + }) + + Register(SyntaxFeature{ + Path: "sql.connect", + Summary: "Connect to external databases with credential isolation", + Keywords: []string{ + "sql connect", "database connect", "dsn", + "postgres", "oracle", "sqlserver", "driver", + "connections.yaml", "credential", + }, + Syntax: "SQL CONNECT '' AS ;\nSQL CONNECT postgres '' AS ;\nSQL CONNECT oracle '' AS ;\nSQL CONNECT sqlserver '' AS ;\nSQL CONNECTIONS;\nSQL DISCONNECT ;", + Example: "SQL CONNECT postgres 'postgres://user:pass@localhost:5432/mydb' AS source;\nSQL CONNECTIONS;\nSQL DISCONNECT source;", + SeeAlso: []string{"sql", "sql.query"}, + }) + + Register(SyntaxFeature{ + Path: "sql.query", + Summary: "Execute SQL queries and browse schema of external databases", + Keywords: []string{ + "sql query", "sql select", "show tables", + "describe table", "sql insert", "sql execute", + }, + Syntax: "SQL SHOW TABLES;\nSQL SHOW VIEWS;\nSQL SHOW FUNCTIONS;\nSQL DESCRIBE ;\nSQL SELECT ...;\nSQL INSERT ...;", + Example: "SQL source SHOW TABLES;\nSQL source DESCRIBE users;\nSQL source SELECT * FROM users WHERE active = true LIMIT 10;", + SeeAlso: []string{"sql.connect", "sql.import"}, + }) + + Register(SyntaxFeature{ + Path: "sql.import", + Summary: "Import rows from external DB into Mendix app database", + Keywords: []string{ + "import", "import from", "import into", "map", + "batch", "link", "association", "data migration", + }, + Syntax: "IMPORT FROM QUERY ''\n INTO Module.Entity\n MAP (col AS Attr, ...)\n [LINK (col TO Assoc ON Attr, ...)]\n [BATCH n]\n [LIMIT n];", + Example: "IMPORT FROM source QUERY 'SELECT name, email FROM employees'\n INTO HR.Employee\n MAP (name AS Name, email AS Email);\n\nIMPORT FROM source QUERY 'SELECT name, dept_name FROM employees'\n INTO HR.Employee\n MAP (name AS Name)\n LINK (dept_name TO Employee_Department ON Name)\n BATCH 500\n LIMIT 10000;", + SeeAlso: []string{"sql", "sql.connect"}, + }) + + Register(SyntaxFeature{ + Path: "sql.generate", + Summary: "Auto-generate Database Connector MDL from external database schema", + Keywords: []string{ + "generate connector", "database connector", + "constants", "non-persistent entity", "jdbc", + }, + Syntax: "SQL GENERATE CONNECTOR INTO Module\n [TABLES (t1, t2)]\n [VIEWS (v1, v2)]\n [EXEC];", + Example: "SQL source GENERATE CONNECTOR INTO HRModule;\nSQL source GENERATE CONNECTOR INTO HRModule TABLES (employees, departments) EXEC;", + SeeAlso: []string{"sql", "sql.connect"}, + }) + + // ── OQL ─────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "oql", + Summary: "OQL query execution against a running Mendix runtime", + Keywords: []string{ + "oql", "query", "runtime", "m2ee", + "aggregate", "view entity", "mxcli oql", + }, + Syntax: "mxcli oql -p app.mpr \"SELECT ...\";\nmxcli oql -p app.mpr --json \"SELECT ...\";\nmxcli oql --direct --host localhost --port 8090 --token 'pass' \"SELECT ...\";", + Example: "mxcli oql -p app.mpr \"SELECT Name, Email FROM MyModule.Customer\";\nmxcli oql -p app.mpr --json \"SELECT count(c.ID) FROM MyModule.Order AS c\" | jq '.[0]';", + SeeAlso: []string{"sql"}, + }) + + // ── Business Events ─────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "business-events", + Summary: "Business event services — publish and subscribe to events via Kafka", + Keywords: []string{ + "business event", "business events", "kafka", + "publish", "subscribe", "message", "event channel", + }, + Syntax: "SHOW BUSINESS EVENT SERVICES [IN Module];\nSHOW BUSINESS EVENTS [IN Module];\nDESCRIBE BUSINESS EVENT SERVICE Module.Name;\nCREATE [OR REPLACE] BUSINESS EVENT SERVICE Module.Name (...) { ... };\nDROP BUSINESS EVENT SERVICE Module.Name;", + Example: "SHOW BUSINESS EVENT SERVICES;\nDESCRIBE BUSINESS EVENT SERVICE Module.CustomerEventsApi;", + SeeAlso: []string{"business-events.create", "integration"}, + }) + + Register(SyntaxFeature{ + Path: "business-events.create", + Summary: "Create and drop business event service definitions with messages", + Keywords: []string{ + "create business event", "drop business event", + "message", "publish", "subscribe", "entity", + "event name prefix", + }, + Syntax: "CREATE [OR REPLACE] BUSINESS EVENT SERVICE Module.Name\n(\n ServiceName: 'Name',\n EventNamePrefix: ''\n)\n{\n MESSAGE EventName (Attr: Type, ...) PUBLISH|SUBSCRIBE\n ENTITY Module.PBE_Entity;\n};\n\nDROP BUSINESS EVENT SERVICE Module.Name;", + Example: "CREATE BUSINESS EVENT SERVICE Module.CustomerEventsApi\n(\n ServiceName: 'CustomerEventsApi',\n EventNamePrefix: ''\n)\n{\n MESSAGE CustomerChangedEvent (CustomerId: Long) PUBLISH\n ENTITY Module.PBE_CustomerChangedEvent;\n};\n\nDROP BUSINESS EVENT SERVICE Module.CustomerEventsApi;", + SeeAlso: []string{"business-events"}, + }) + + // ── XPath ───────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "xpath", + Summary: "XPath constraint syntax for filtering data in RETRIEVE, pages, and security", + Keywords: []string{ + "xpath", "constraint", "where", "predicate", + "filter", "retrieve", "association path", + }, + Syntax: "WHERE [condition]\nWHERE [cond1][cond2] -- implicit AND\nWHERE [cond1] AND [cond2]\nWHERE [cond1] OR [cond2]", + Example: "RETRIEVE $Orders FROM Module.Order\n WHERE [State = 'Completed'][IsPaid = true]\n SORT BY OrderDate DESC;\n\n-- Association path traversal\nWHERE [Module.Order_Customer/Module.Customer/Name = $Name]\n\n-- Mendix tokens\nWHERE [System.owner = '[%CurrentUser%]']", + SeeAlso: []string{"xpath.functions"}, + }) + + Register(SyntaxFeature{ + Path: "xpath.functions", + Summary: "XPath operators and functions — contains, starts-with, not, boolean literals", + Keywords: []string{ + "xpath functions", "contains", "starts-with", + "not", "true", "false", "operators", + "comparison", "boolean", + }, + Syntax: "=, !=, <, >, <=, >= Comparison\nand, or Boolean (lowercase)\nnot(expr) Negation\ncontains(attr, 'text') String contains\nstarts-with(attr, 'text') String starts-with\ntrue(), false() Boolean literals", + Example: "WHERE [not(IsArchived)]\nWHERE [contains(Name, 'Corp')]\nWHERE [starts-with(Code, 'PRD')]\nWHERE [State = 'Ready' and Priority > 5]", + SeeAlso: []string{"xpath"}, + }) + + // ── Java Action ─────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "java-action", + Summary: "Java actions — custom Java code callable from microflows", + Keywords: []string{ + "java action", "java", "call java", + "type parameter", "exposed as", "javaaction", + }, + Syntax: "SHOW JAVA ACTIONS [IN Module];\nDESCRIBE JAVA ACTION Module.Name;\nCREATE JAVA ACTION Module.Name(...) RETURNS Type AS $$ ... $$;\nDROP JAVA ACTION Module.Name;", + Example: "SHOW JAVA ACTIONS;\nDESCRIBE JAVA ACTION Utils.FormatCurrency;", + SeeAlso: []string{"java-action.create"}, + }) + + Register(SyntaxFeature{ + Path: "java-action.create", + Summary: "Create Java actions with type parameters, EXPOSED AS, and inline code", + Keywords: []string{ + "create java action", "type parameter", "entity parameter", + "exposed as", "returns", "generics", "drop java action", + }, + Syntax: "CREATE JAVA ACTION Module.Name(\n Param: Type [NOT NULL],\n EntityType: ENTITY NOT NULL,\n Obj: pEntity\n) RETURNS ReturnType\n[EXPOSED AS 'Label' IN 'Category']\nAS $$\n// Java code\n$$;", + Example: "CREATE JAVA ACTION Utils.FormatCurrency(\n Amount: Decimal NOT NULL\n) RETURNS String\nEXPOSED AS 'Format Currency' IN 'Formatting'\nAS $$\nreturn String.format(\"%.2f\", Amount);\n$$;\n\n-- Generic entity validator with type parameter\nCREATE JAVA ACTION Utils.IsValid(\n EntityType: ENTITY NOT NULL,\n Obj: pEntity NOT NULL\n) RETURNS Boolean\nAS $$\nreturn Obj != null;\n$$;", + SeeAlso: []string{"java-action"}, + }) + + // ── AI Agents ────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "agents", + Summary: "AI agent documents — Model, Knowledge Base, Consumed MCP Service, Agent (requires AgentEditorCommons, Mendix 11.9+)", + Keywords: []string{ + "agent", "agents", "model", "knowledge base", "mcp service", + "agent editor", "llm", "ai", "genai", "mxcloudgenai", + }, + Syntax: "LIST MODELS [IN Module];\nLIST KNOWLEDGE BASES [IN Module];\nLIST CONSUMED MCP SERVICES [IN Module];\nLIST AGENTS [IN Module];\nDESCRIBE MODEL Module.Name;\nCREATE MODEL Module.Name (Provider: MxCloudGenAI, Key: Module.ApiKey);\nCREATE KNOWLEDGE BASE Module.Name (Provider: MxCloudGenAI, Key: Module.KBKey);\nCREATE CONSUMED MCP SERVICE Module.Name (ProtocolVersion: v2025_03_26, ...);\nCREATE AGENT Module.Name (UsageType: Task|Chat, Model: Module.MyModel, SystemPrompt: '...') { ... };\nDROP AGENT Module.Name;", + Example: "CREATE MODEL MyModule.GPT4 (\n Provider: MxCloudGenAI,\n Key: MyModule.ModelApiKey\n);\n\nCREATE AGENT MyModule.Summarizer (\n UsageType: Task,\n Model: MyModule.GPT4,\n SystemPrompt: 'Summarize in 3 sentences.',\n UserPrompt: 'Enter text.'\n);", + SeeAlso: []string{"agents.model", "agents.knowledge-base", "agents.mcp-service", "agents.agent"}, + }) + + Register(SyntaxFeature{ + Path: "agents.model", + Summary: "CREATE/DROP MODEL documents for AI agents", + Keywords: []string{"create model", "drop model", "describe model", "list models", "provider", "mxcloudgenai"}, + Syntax: "CREATE [OR MODIFY] MODEL Module.Name (\n Provider: MxCloudGenAI,\n Key: Module.ApiKeyConstant\n);\nDESCRIBE MODEL Module.Name;\nLIST MODELS [IN Module];\nDROP MODEL Module.Name;", + Example: "create model MyModule.GPT4 (\n Provider: MxCloudGenAI,\n Key: MyModule.ModelApiKey\n);", + SeeAlso: []string{"agents"}, + }) + + Register(SyntaxFeature{ + Path: "agents.knowledge-base", + Summary: "CREATE/DROP KNOWLEDGE BASE documents for AI agents", + Keywords: []string{"create knowledge base", "drop knowledge base", "knowledge base", "kb", "rag"}, + Syntax: "CREATE [OR MODIFY] KNOWLEDGE BASE Module.Name (\n Provider: MxCloudGenAI,\n Key: Module.KBApiKeyConstant\n);\nDESCRIBE KNOWLEDGE BASE Module.Name;\nLIST KNOWLEDGE BASES [IN Module];\nDROP KNOWLEDGE BASE Module.Name;", + Example: "create knowledge base MyModule.ProductDocs (\n Provider: MxCloudGenAI,\n Key: MyModule.KBApiKey\n);", + SeeAlso: []string{"agents"}, + }) + + Register(SyntaxFeature{ + Path: "agents.mcp-service", + Summary: "CREATE/DROP CONSUMED MCP SERVICE documents for AI agents", + Keywords: []string{"consumed mcp service", "mcp", "mcp service", "protocol version"}, + Syntax: "CREATE [OR MODIFY] CONSUMED MCP SERVICE Module.Name (\n ProtocolVersion: v2025_03_26,\n Version: '1.0',\n ConnectionTimeoutSeconds: 30,\n Documentation: 'description'\n);\nDESCRIBE CONSUMED MCP SERVICE Module.Name;\nLIST CONSUMED MCP SERVICES [IN Module];\nDROP CONSUMED MCP SERVICE Module.Name;", + Example: "create consumed mcp service MyModule.WebSearch (\n ProtocolVersion: v2025_03_26,\n Version: '1.0',\n ConnectionTimeoutSeconds: 30\n);", + SeeAlso: []string{"agents"}, + }) + + Register(SyntaxFeature{ + Path: "agents.agent", + Summary: "CREATE/DROP AGENT documents with variables, tools, KB tools, and MCP service tools", + Keywords: []string{ + "create agent", "drop agent", "usagetype", "systemprompt", "userprompt", + "variables", "toolchoice", "temperature", "topp", "maxtokens", + }, + Syntax: `CREATE [OR MODIFY] AGENT Module.Name ( + UsageType: Task|Chat, + Model: Module.MyModel, + [Description: 'text',] + [MaxTokens: N,] + [Temperature: 0.7,] + [TopP: 0.9,] + [ToolChoice: Auto|None|Required,] + [Variables: ("Key": EntityAttribute|String),] + SystemPrompt: 'prompt or $$multi-line$$', + [UserPrompt: 'prompt'] +) +{ + [MCP SERVICE Module.ServiceName { Enabled: true }] + [KNOWLEDGE BASE AliaName { Source: Module.KB, Collection: 'col', MaxResults: 5, Enabled: true }] + [TOOL MicroflowName { Description: 'desc', Enabled: true }] +};`, + Example: "create agent MyModule.Assistant (\n UsageType: Chat,\n Model: MyModule.GPT4,\n SystemPrompt: $$You are a helpful assistant.$$,\n UserPrompt: 'Ask me anything.'\n)\n{\n MCP SERVICE MyModule.WebSearch { Enabled: true }\n};", + SeeAlso: []string{"agents", "agents.model", "agents.knowledge-base", "agents.mcp-service"}, + }) +} diff --git a/cmd/mxcli/syntax/features_microflow.go b/cmd/mxcli/syntax/features_microflow.go new file mode 100644 index 00000000..98798711 --- /dev/null +++ b/cmd/mxcli/syntax/features_microflow.go @@ -0,0 +1,164 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +func init() { + Register(SyntaxFeature{ + Path: "microflow", + Summary: "Programmatic logic — variables, object operations, control flow, and integrations", + Keywords: []string{ + "microflow", "nanoflow", "logic", "automation", + "action", "activity", "flow", + }, + Syntax: "CREATE MICROFLOW Module.Name ($Param: Type) RETURNS Type AS $Result\nBEGIN\n \nEND;", + Example: "CREATE MICROFLOW MyModule.ACT_CreateOrder ($Code: String)\nRETURNS MyModule.Order AS $NewOrder\nBEGIN\n $NewOrder = CREATE MyModule.Order (OrderNumber = $Code);\n COMMIT $NewOrder;\n RETURN $NewOrder;\nEND;", + SeeAlso: []string{"microflow.create", "microflow.variables", "microflow.control-flow"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.create", + Summary: "Create a microflow with parameters, return type, and body", + Keywords: []string{ + "create microflow", "new microflow", "define microflow", + "parameters", "returns", "folder", + }, + Syntax: "CREATE MICROFLOW Module.Name ($P1: String, $P2: Integer)\n RETURNS Type AS $Result\n [FOLDER 'FolderPath']\nBEGIN\n \nEND;", + Example: "CREATE MICROFLOW MyModule.ACT_CreateOrder (\n $CustomerCode: String,\n $Quantity: Integer\n)\nRETURNS MyModule.Order AS $NewOrder\nFOLDER 'Orders'\nBEGIN\n $NewOrder = CREATE MyModule.Order (\n OrderNumber = 'ORD-001',\n Quantity = $Quantity\n );\n COMMIT $NewOrder;\n RETURN $NewOrder;\nEND;", + SeeAlso: []string{"microflow.nanoflow", "microflow.variables"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.variables", + Summary: "Declare variables, assign values, and set object attributes", + Keywords: []string{ + "declare", "variable", "set", "assign", "change", + "attribute", "expression", + }, + Syntax: "DECLARE $Var Type;\nDECLARE $Var Type = expression;\nSET $Var = expression;\nSET $Var/Attribute = expression;", + Example: "DECLARE $Count Integer = 0;\nDECLARE $Name String;\nSET $Name = 'Hello';\nSET $Order/Status = 'Pending';", + SeeAlso: []string{"microflow.object-operations"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.retrieve", + Summary: "Query the database with WHERE, SORT BY, LIMIT, and OFFSET", + Keywords: []string{ + "retrieve", "query", "database", "where", "sort", + "limit", "offset", "find", "fetch", + }, + Syntax: "RETRIEVE $Var FROM Module.Entity\n [WHERE condition]\n [SORT BY attr ASC|DESC]\n [LIMIT n] [OFFSET n];", + Example: "RETRIEVE $Customer FROM MyModule.Customer\n WHERE Code = $CustomerCode\n LIMIT 1;\n\nRETRIEVE $Orders FROM MyModule.Order\n WHERE Status = 'Pending'\n SORT BY CreateDate DESC\n LIMIT 10 OFFSET 0;", + SeeAlso: []string{"microflow.object-operations", "xpath"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.control-flow", + Summary: "IF/ELSIF/ELSE, LOOP, WHILE, BREAK, CONTINUE, RETURN", + Keywords: []string{ + "if", "elsif", "else", "then", "end if", + "loop", "while", "break", "continue", "return", + "conditional", "branch", "iterate", + }, + Syntax: "IF condition THEN\n ...\nELSIF condition THEN\n ...\nELSE\n ...\nEND IF;\n\nLOOP $Item IN $List BEGIN ... END LOOP;\nWHILE condition BEGIN ... END WHILE;\nRETURN $Value;\nRETURN empty;", + Example: "IF $Customer = empty THEN\n LOG ERROR NODE 'Svc' 'Not found';\n RETURN empty;\nELSIF $Customer/Active = false THEN\n LOG WARNING 'Inactive customer';\nELSE\n CHANGE $Customer (LastAccess = [%CurrentDateTime%]);\nEND IF;\n\nLOOP $Item IN $OrderLines BEGIN\n COMMIT $Item;\nEND LOOP;", + SeeAlso: []string{"microflow.variables", "microflow.error-handling"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.error-handling", + Summary: "Error handling with ON ERROR, THROW, CONTINUE, ROLLBACK", + Keywords: []string{ + "error", "error handling", "on error", "continue", + "rollback", "throw", "exception", "try", "catch", + }, + Syntax: "COMMIT $Obj ON ERROR CONTINUE;\nCOMMIT $Obj ON ERROR ROLLBACK;\nCOMMIT $Obj ON ERROR { };\nCOMMIT $Obj ON ERROR WITHOUT ROLLBACK { };", + Example: "COMMIT $Order ON ERROR {\n LOG ERROR 'Failed to save order';\n RETURN empty;\n};\n\nCOMMIT $Batch ON ERROR WITHOUT ROLLBACK {\n LOG WARNING 'Batch save failed, continuing';\n};", + SeeAlso: []string{"microflow.control-flow"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.object-operations", + Summary: "CREATE, CHANGE, COMMIT, ROLLBACK, and DELETE objects", + Keywords: []string{ + "create object", "change object", "commit", "rollback", + "delete", "save", "persist", "modify object", + "with events", "refresh", + }, + Syntax: "$Obj = CREATE Module.Entity (Attr = value);\nCHANGE $Obj (Attr = value);\nCOMMIT $Obj;\nCOMMIT $Obj WITH EVENTS;\nCOMMIT $Obj REFRESH;\nCOMMIT $Obj WITH EVENTS REFRESH;\nDELETE $Obj;\nROLLBACK $Obj;", + Example: "$NewOrder = CREATE MyModule.Order (\n OrderNumber = 'ORD-001',\n Quantity = $Quantity,\n CreateDate = [%CurrentDateTime%]\n);\n\nCHANGE $NewOrder (MyModule.Order_Customer = $Customer);\nCOMMIT $NewOrder WITH EVENTS;\nDELETE $OldOrder;\nROLLBACK $DraftOrder;", + SeeAlso: []string{"microflow.retrieve", "microflow.variables"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.list-operations", + Summary: "List manipulation — HEAD, TAIL, FIND, FILTER, SORT, UNION, aggregates", + Keywords: []string{ + "list", "head", "tail", "find", "filter", "sort", + "union", "intersect", "subtract", "count", "sum", + "average", "aggregate", "add to list", "remove from list", + "create list", + }, + Syntax: "$List = CREATE LIST OF Module.Entity;\nADD $Item TO $List;\nREMOVE $Item FROM $List;\n$Result = HEAD($List);\n$Result = TAIL($List);\n$Result = FIND($List, condition);\n$Result = FILTER($List, condition);\n$Result = SORT($List, attr ASC);\n$Result = UNION($L1, $L2);\n$Result = INTERSECT($L1, $L2);\n$Result = SUBTRACT($L1, $L2);\n$Count = COUNT($List);\n$Sum = SUM($List.Attr);\n$Avg = AVERAGE($List.Attr);", + Example: "$AllOrders = CREATE LIST OF MyModule.Order;\nADD $NewOrder TO $AllOrders;\n$First = HEAD($AllOrders);\n$Pending = FILTER($AllOrders, Status = 'Pending');\n$Sorted = SORT($Pending, CreateDate DESC);\n$Total = SUM($AllOrders.Amount);", + SeeAlso: []string{"microflow.retrieve"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.logging", + Summary: "LOG statements with level, node, message templates", + Keywords: []string{ + "log", "logging", "info", "warning", "error", "debug", + "trace", "critical", "node", "message template", + }, + Syntax: "LOG LEVEL [NODE 'Name'] 'message';\nLOG LEVEL 'template {1}' WITH ({1} = $value);\n\n-- Levels: INFO, WARNING, ERROR, DEBUG, TRACE, CRITICAL", + Example: "LOG INFO NODE 'OrderService' 'Order created successfully';\nLOG WARNING 'Customer not found';\nLOG ERROR 'Failed to process {1}' WITH (\n {1} = $OrderNumber\n);", + }) + + Register(SyntaxFeature{ + Path: "microflow.show-page", + Summary: "Open and close pages from microflows", + Keywords: []string{ + "show page", "open page", "close page", "display page", + "navigate", "page action", + }, + Syntax: "SHOW PAGE Module.Page;\nSHOW PAGE Module.Page ($Param = $value);\nCLOSE PAGE;", + Example: "SHOW PAGE MyModule.OrderDetail ($Order = $NewOrder);\nCLOSE PAGE;", + SeeAlso: []string{"page"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.call", + Summary: "Call microflows and Java actions with parameters", + Keywords: []string{ + "call microflow", "call java action", "invoke", + "sub-microflow", "java action", "parameter passing", + }, + Syntax: "$Result = CALL MICROFLOW Module.Name (Param = value);\n$Result = CALL JAVA ACTION Module.Name (Param = value);", + Example: "$IsValid = CALL MICROFLOW MyModule.ValidateOrder (\n Order = $NewOrder\n);\n\n$Token = CALL JAVA ACTION MyModule.GenerateToken (\n UserId = $User/Id\n);", + SeeAlso: []string{"java-action", "microflow.create"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.nanoflow", + Summary: "CREATE NANOFLOW — client-side logic, same syntax as microflow", + Keywords: []string{ + "nanoflow", "create nanoflow", "client-side", + "offline", "client logic", + }, + Syntax: "CREATE NANOFLOW Module.Name ($Param: Type) RETURNS Type AS $Result\nBEGIN\n \nEND;", + Example: "CREATE NANOFLOW MyModule.NF_ValidateInput ($Input: String)\nRETURNS Boolean AS $IsValid\nBEGIN\n IF $Input = empty THEN\n VALIDATION FEEDBACK $Input MESSAGE 'Required';\n RETURN false;\n END IF;\n RETURN true;\nEND;", + SeeAlso: []string{"microflow.create"}, + }) + + Register(SyntaxFeature{ + Path: "microflow.validation", + Summary: "Show validation feedback on object attributes", + Keywords: []string{ + "validation", "feedback", "validation feedback", + "error message", "field error", "form validation", + }, + Syntax: "VALIDATION FEEDBACK $Obj/Attr MESSAGE 'error text';\nVALIDATION FEEDBACK $Obj/Attr MESSAGE '{1} is invalid'\n OBJECTS [$Value];", + Example: "VALIDATION FEEDBACK $Order/Quantity MESSAGE 'Quantity must be positive';\nVALIDATION FEEDBACK $Customer/Email MESSAGE '{1} is not valid'\n OBJECTS [$Customer/Email];", + SeeAlso: []string{"microflow.error-handling"}, + }) +} diff --git a/cmd/mxcli/syntax/features_misc.go b/cmd/mxcli/syntax/features_misc.go new file mode 100644 index 00000000..7d4b6761 --- /dev/null +++ b/cmd/mxcli/syntax/features_misc.go @@ -0,0 +1,346 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +func init() { + // ── Navigation ────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "navigation", + Summary: "Navigation profiles — home pages, menus, login pages per device type", + Keywords: []string{ + "navigation", "nav", "profile", "responsive", "phone", "tablet", + "home page", "menu", "login page", + }, + Syntax: "SHOW NAVIGATION;\nDESCRIBE NAVIGATION [profile];\nCREATE OR REPLACE NAVIGATION ...;", + Example: "SHOW NAVIGATION;\nDESCRIBE NAVIGATION Responsive;", + SeeAlso: []string{"navigation.show", "navigation.create", "navigation.alter"}, + }) + + Register(SyntaxFeature{ + Path: "navigation.show", + Summary: "List navigation profiles, menus, and home page assignments", + Keywords: []string{ + "show navigation", "describe navigation", "navigation menu", + "navigation homes", "list profiles", + }, + Syntax: "SHOW NAVIGATION;\nSHOW NAVIGATION MENU;\nSHOW NAVIGATION MENU ;\nSHOW NAVIGATION HOMES;\nDESCRIBE NAVIGATION;\nDESCRIBE NAVIGATION ;", + Example: "SHOW NAVIGATION;\nSHOW NAVIGATION MENU Responsive;\nDESCRIBE NAVIGATION Responsive;", + }) + + Register(SyntaxFeature{ + Path: "navigation.create", + Summary: "Create or replace a navigation profile with home pages, menus, and login page", + Keywords: []string{ + "create navigation", "replace navigation", "home page", + "login page", "not found page", "menu item", + }, + Syntax: `CREATE OR REPLACE NAVIGATION + HOME PAGE Module.Page + [HOME PAGE Module.Page FOR Module.UserRole] + [LOGIN PAGE Module.LoginPage] + [NOT FOUND PAGE Module.Custom404] + [MENU ( + MENU ITEM 'Label' PAGE Module.Page; + MENU 'Group' ( ... ); + )];`, + Example: `CREATE OR REPLACE NAVIGATION Responsive + HOME PAGE MyModule.Home_Web + HOME PAGE MyModule.AdminDashboard FOR Administration.Administrator + LOGIN PAGE Administration.Login + MENU ( + MENU ITEM 'Home' PAGE MyModule.Home_Web; + MENU 'Orders' ( + MENU ITEM 'All Orders' PAGE Orders.Order_Overview; + MENU ITEM 'New Order' PAGE Orders.Order_New; + ); + );`, + SeeAlso: []string{"navigation.show"}, + }) + + Register(SyntaxFeature{ + Path: "navigation.alter", + Summary: "Modify navigation via round-trip: DESCRIBE, edit, CREATE OR REPLACE", + Keywords: []string{ + "alter navigation", "modify navigation", "update navigation", + "round-trip", "edit menu", + }, + Syntax: "-- Round-trip workflow:\n-- 1. DESCRIBE NAVIGATION ;\n-- 2. Copy output, modify\n-- 3. Paste as CREATE OR REPLACE NAVIGATION ...", + Example: "-- Inspect current state\nDESCRIBE NAVIGATION Responsive;\n-- Copy output, modify, paste back as CREATE OR REPLACE", + SeeAlso: []string{"navigation.create", "navigation.show"}, + }) + + // ── Settings ──────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "settings", + Summary: "Project settings — model, configuration, constants, language, workflows", + Keywords: []string{ + "settings", "project settings", "configuration", + "startup", "shutdown", "hash algorithm", "java version", + }, + Syntax: "SHOW SETTINGS;\nDESCRIBE SETTINGS;\nALTER SETTINGS MODEL = ;\nALTER SETTINGS CONFIGURATION '' = ;", + Example: "SHOW SETTINGS;\nALTER SETTINGS MODEL AfterStartupMicroflow = 'Module.MF_Startup';", + SeeAlso: []string{"settings.show", "settings.alter"}, + }) + + Register(SyntaxFeature{ + Path: "settings.show", + Summary: "Show and describe project settings", + Keywords: []string{ + "show settings", "describe settings", "list settings", + }, + Syntax: "SHOW SETTINGS;\nDESCRIBE SETTINGS;", + Example: "SHOW SETTINGS;\nDESCRIBE SETTINGS;", + }) + + Register(SyntaxFeature{ + Path: "settings.alter", + Summary: "Modify project settings — model, configuration, constants, language, workflows", + Keywords: []string{ + "alter settings", "modify settings", "change settings", + "after startup", "before shutdown", "hash algorithm", + "database type", "constant override", "language", + }, + Syntax: `ALTER SETTINGS MODEL = ; +ALTER SETTINGS CONFIGURATION '' = , ...; +ALTER SETTINGS CONSTANT '' VALUE '' IN CONFIGURATION ''; +ALTER SETTINGS DROP CONSTANT '' IN CONFIGURATION ''; +ALTER SETTINGS LANGUAGE DefaultLanguageCode = ''; +ALTER SETTINGS WORKFLOWS UserEntity = ''; +CREATE CONFIGURATION '' [ = , ...]; +DROP CONFIGURATION '';`, + Example: `ALTER SETTINGS MODEL AfterStartupMicroflow = 'Module.MF_Startup'; +ALTER SETTINGS MODEL HashAlgorithm = 'BCrypt'; +ALTER SETTINGS CONFIGURATION 'Default' + DatabaseType = 'PostgreSql', + DatabaseUrl = 'localhost:5432', + DatabaseName = 'mydb'; +ALTER SETTINGS CONSTANT 'BusinessEvents.ServerUrl' VALUE 'kafka:9092' + IN CONFIGURATION 'Default'; +CREATE CONFIGURATION 'Production' + DatabaseType = 'POSTGRESQL', + HttpPortNumber = 8080;`, + SeeAlso: []string{"settings.show"}, + }) + + // ── Structure ─────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "structure", + Summary: "SHOW STRUCTURE — compact project overview at configurable depth", + Keywords: []string{ + "structure", "show structure", "project overview", + "repo map", "module summary", "depth", + }, + Syntax: "SHOW STRUCTURE [DEPTH 1|2|3] [IN ] [ALL];", + Example: `-- Module counts only +SHOW STRUCTURE DEPTH 1; + +-- Elements with signatures (default) +SHOW STRUCTURE; + +-- Full types and parameter names +SHOW STRUCTURE DEPTH 3; + +-- Focus on one module +SHOW STRUCTURE IN MyModule; + +-- Include system modules +SHOW STRUCTURE DEPTH 1 ALL;`, + }) + + // ── Move ──────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "move", + Summary: "MOVE command — relocate documents between folders and modules", + Keywords: []string{ + "move", "relocate", "folder", "cross-module move", + "move page", "move microflow", "move entity", + "move folder", "drop folder", + }, + Syntax: `MOVE Module.Name TO FOLDER 'Path'; +MOVE Module.Name TO TargetModule; +MOVE OldModule.Name TO FOLDER 'Path' IN NewModule; +MOVE FOLDER Module.FolderName TO FOLDER 'Path'; +DROP FOLDER 'Path' IN Module;`, + Example: `-- Move page to a folder +MOVE PAGE MyModule.CustomerEdit TO FOLDER 'Customers'; + +-- Move microflow to nested folder +MOVE MICROFLOW MyModule.ACT_ProcessOrder TO FOLDER 'Orders/Processing'; + +-- Move entity to different module +MOVE ENTITY OldModule.Customer TO NewModule; + +-- Check impact before cross-module move +SHOW IMPACT OF OldModule.CustomerPage; +MOVE PAGE OldModule.CustomerPage TO NewModule; + +-- Drop empty folder +DROP FOLDER 'OldFolder' IN Module;`, + }) + + // ── Search ────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "search", + Summary: "Full-text search across project strings and source definitions", + Keywords: []string{ + "search", "full-text search", "find", "grep", + "fts", "catalog strings", "catalog source", + }, + Syntax: `SEARCH ''; + +-- CLI +mxcli search -p app.mpr "" [--format table|names|json] [-q] + +-- Raw FTS queries +SELECT * FROM CATALOG.STRINGS WHERE strings MATCH ''; +SELECT * FROM CATALOG.SOURCE WHERE source MATCH '';`, + Example: `SEARCH 'validation'; +SEARCH 'Customer'; + +-- CLI with piping +mxcli search -p app.mpr "validation" -q --format names + +-- FTS5 operators +SEARCH 'word1 OR word2'; +SEARCH '"exact phrase"'; +SEARCH 'word*';`, + }) + + // ── Testing ──────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "test", + Summary: "Microflow testing — run .test.mdl or .test.md files against a Mendix project in Docker", + Keywords: []string{ + "test", "testing", "microflow test", "nanoflow test", + "test.mdl", "test.md", "junit", "docker", + "@test", "@expect", "@throws", "@cleanup", + }, + Syntax: `mxcli test -p app.mpr [flags] + +Flags: + -l, --list List tests without executing + -j, --junit FILE Write JUnit XML results + -s, --skip-build Skip Docker build (reuse existing) + -v, --verbose Show runtime log lines + -t, --timeout DUR Runtime startup timeout (default: 5m) + +Annotations: + @test Test name (required) + @expect $var = value Assert variable equals value + @expect $obj/Attr = val Assert entity attribute + @throws 'message' Expect error + @cleanup rollback|none Cleanup strategy (default: rollback)`, + Example: `-- .test.mdl file format +/** + * @test String concatenation + * @expect $result = 'John Doe' + */ +$result = CALL MICROFLOW MyModule.ConcatNames( + FirstName = 'John', LastName = 'Doe' +); +/ + +-- Run tests +mxcli test tests/ -p app.mpr +mxcli test tests/ -p app.mpr --junit results.xml`, + }) + + // ── Errors ────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "errors", + Summary: "Common validation errors and how to fix them", + Keywords: []string{ + "errors", "validation", "syntax error", "reference error", + "reserved keyword", "module not found", "entity not found", + "check", "troubleshooting", + }, + Syntax: `mxcli check script.mdl -- Syntax + anti-pattern check +mxcli check script.mdl -p app.mpr --references -- With reference validation`, + Example: `-- Reserved keyword as identifier +-- Error: mismatched input 'Title' expecting IDENTIFIER +-- Fix: Use quoted identifiers: "Title" + +-- Module not found +-- Error: module not found: ModuleName +-- Fix: CREATE MODULE ModuleName; + +-- Missing module prefix on enumeration +-- Error: enumeration reference 'X' is missing module prefix +-- Fix: Use Enumeration(MyModule.Status) + +-- Invalid association path in OQL (dot instead of slash) +-- Wrong: WHERE l.Library.Loan_Member = m.ID +-- Right: WHERE l/Library.Loan_Member = m.ID`, + SeeAlso: []string{"errors.syntax", "errors.reference", "errors.execution"}, + }) + + Register(SyntaxFeature{ + Path: "errors.syntax", + Summary: "Syntax errors — reserved keywords, invalid types, malformed enumerations", + Keywords: []string{ + "syntax error", "reserved keyword", "invalid type", + "malformed enumeration", "parse error", "mismatched input", + }, + Syntax: "mxcli check script.mdl", + Example: `-- Reserved keyword used as identifier +-- Error: mismatched input 'Title' expecting IDENTIFIER +-- Fix: Use quoted identifiers: "Title", "ComboBox"."Entity" +-- Alt: Rename to avoid keyword: BookTitle, OrderStatus + +-- Invalid data type +-- Error: Unknown type parsed as enumeration reference +-- Fix: Use correct type: DateTime (not DateAndTime) + +-- Malformed enumeration +-- Error: Invalid enumeration value: each value must have a name +-- Fix: Use syntax: ValueName 'Caption'`, + }) + + Register(SyntaxFeature{ + Path: "errors.reference", + Summary: "Reference errors — missing modules, entities, enumerations", + Keywords: []string{ + "reference error", "module not found", "entity not found", + "enumeration not found", "missing module prefix", + }, + Syntax: "mxcli check script.mdl -p app.mpr --references", + Example: `-- Module not found +-- Error: module not found: ModuleName +-- Fix: CREATE MODULE ModuleName; + +-- Enumeration not found +-- Error: attribute 'X': enumeration not found: Module.EnumName +-- Fix: Create the enumeration first, or check spelling + +-- Missing module prefix on enumeration +-- Error: enumeration reference 'X' is missing module prefix +-- Fix: Use fully qualified name: Enumeration(MyModule.Status)`, + }) + + Register(SyntaxFeature{ + Path: "errors.execution", + Summary: "Execution errors — entity exists, type mismatches, validation failures", + Keywords: []string{ + "execution error", "entity already exists", "type mismatch", + "boolean default", "view entity", "microflow validation", + }, + Syntax: "mxcli check script.mdl -p app.mpr --references", + Example: `-- Entity already exists +-- Error: entity already exists: Module.Entity +-- Fix: Use CREATE OR MODIFY ENTITY to update existing entities + +-- Boolean without default +-- Note: Boolean attributes auto-default to false + +-- OQL invalid association path (dot vs slash) +-- Wrong: WHERE l.Library.Loan_Member = m.ID +-- Right: WHERE l/Library.Loan_Member = m.ID`, + }) +} diff --git a/cmd/mxcli/syntax/features_page.go b/cmd/mxcli/syntax/features_page.go new file mode 100644 index 00000000..d435919d --- /dev/null +++ b/cmd/mxcli/syntax/features_page.go @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +func init() { + // ── Page ────────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "page", + Summary: "Create and manage pages with widgets, datasources, and actions", + Keywords: []string{ + "page", "pages", "form", "UI", "user interface", + "widget", "layout", "screen", + }, + Syntax: "CREATE PAGE Module.Name\n (\n Title: 'Page Title',\n Layout: Module.LayoutName\n [, Params: { $Param: Module.Entity }]\n [, Url: 'page-url']\n [, Folder: 'FolderPath']\n [, Variables: { $var: Boolean = 'true' }]\n )\n {\n -- widgets\n }", + Example: "CREATE PAGE MyModule.EditCustomer\n (\n Params: { $Customer: MyModule.Customer },\n Title: 'Edit Customer',\n Layout: Atlas_Core.PopupLayout\n )\n {\n DATAVIEW dvCustomer (DataSource: $Customer) {\n TEXTBOX txtName (Label: 'Name', Binds: Name)\n FOOTER footer1 {\n ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary)\n ACTIONBUTTON btnCancel (Caption: 'Cancel', Action: CANCEL_CHANGES)\n }\n }\n }", + SeeAlso: []string{"page.create", "page.widgets", "page.alter", "snippet"}, + }) + + Register(SyntaxFeature{ + Path: "page.create", + Summary: "CREATE PAGE with parameters, variables, layout, and URL", + Keywords: []string{ + "create page", "new page", "page parameters", "page variables", + "layout", "url", "folder", + }, + Syntax: "CREATE PAGE Module.Name\n (\n Title: 'Title',\n Layout: Module.Layout\n [, Params: { $P: Module.Entity, $Qty: Integer }]\n [, Url: 'page-url']\n [, Folder: 'FolderPath']\n [, Variables: { $showStock: Boolean = 'true' }]\n )\n { }", + Example: "CREATE PAGE Module.Products\n (\n Title: 'Products',\n Layout: Atlas_Core.Atlas_Default,\n Url: 'products',\n Variables: { $showStock: Boolean = 'true' }\n )\n {\n DATAGRID gridProducts (DataSource: DATABASE Module.Product) {\n COLUMN colName (Attribute: Name, Caption: 'Name')\n }\n }", + SeeAlso: []string{"page", "page.widgets", "page.datasource"}, + }) + + Register(SyntaxFeature{ + Path: "page.widgets", + Summary: "Widget types: containers, data widgets, inputs, actions, display", + Keywords: []string{ + "widget", "layoutgrid", "container", "dataview", "datagrid", + "gallery", "listview", "textbox", "textarea", "datepicker", + "combobox", "checkbox", "radiobuttons", "actionbutton", + "dynamictext", "snippetcall", "navigationlist", + "column", "row", "footer", "header", "controlbar", + }, + Syntax: "-- Containers\nLAYOUTGRID name { ROW r { COLUMN c (DesktopWidth: 6) { ... } } }\nCONTAINER name (Class: 'cls') { ... }\n\n-- Data widgets\nDATAVIEW name (DataSource: $Param) { ... FOOTER f { ... } }\nDATAGRID name (DataSource: DATABASE Module.Entity) { COLUMN c (Attribute: A) }\nGALLERY name (DataSource: DATABASE Module.Entity, DesktopColumns: 3) { ... }\nLISTVIEW name (DataSource: DATABASE Module.Entity) { ... }\n\n-- Inputs\nTEXTBOX name (Label: 'L', Binds: Attr)\nTEXTAREA | DATEPICKER | COMBOBOX | CHECKBOX | RADIOBUTTONS\n\n-- Actions\nACTIONBUTTON name (Caption: 'C', Action: SAVE_CHANGES, ButtonStyle: Primary)\n\n-- Display\nDYNAMICTEXT name (Content: 'Hello, {1}!', ContentParams: [{1} = Name])", + Example: "DATAVIEW dvCustomer (DataSource: $Customer) {\n TEXTBOX txtName (Label: 'Name', Binds: Name)\n COMBOBOX cbStatus (Label: 'Status', Binds: Status)\n FOOTER footer1 {\n ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary)\n ACTIONBUTTON btnCancel (Caption: 'Cancel', Action: CANCEL_CHANGES)\n }\n}", + SeeAlso: []string{"page.create", "page.datasource"}, + }) + + Register(SyntaxFeature{ + Path: "page.datasource", + Summary: "Datasource bindings: variable, database, microflow, selection", + Keywords: []string{ + "datasource", "data source", "database", "microflow", + "selection", "variable", "binding", "binds", + }, + Syntax: "DataSource: $Variable -- Parameter/variable binding\nDataSource: DATABASE Module.Entity -- Database query\nDataSource: MICROFLOW Module.MF() -- Microflow datasource\nDataSource: SELECTION widgetName -- Selection from another widget\nBinds: AttributeName -- Attribute binding (inputs)", + Example: "-- Database datasource with grid\nDATAGRID grid (DataSource: DATABASE Module.Customer) {\n COLUMN colName (Attribute: Name, Caption: 'Name')\n}\n\n-- Microflow datasource\nDATAVIEW dv (DataSource: MICROFLOW Module.GetData()) { ... }\n\n-- Selection-based datasource\nDATAVIEW dvDetail (DataSource: SELECTION gridCustomers) { ... }", + SeeAlso: []string{"page.widgets", "page.create"}, + }) + + Register(SyntaxFeature{ + Path: "page.action", + Summary: "Button actions: save, cancel, close, delete, show page, microflow", + Keywords: []string{ + "action", "save", "cancel", "close", "delete", + "show page", "navigate", "microflow", "create object", + "button style", "primary", "danger", "success", + }, + Syntax: "Action: SAVE_CHANGES\nAction: CANCEL_CHANGES\nAction: CLOSE_PAGE\nAction: DELETE\nAction: SHOW_PAGE Module.Page\nAction: SHOW_PAGE Module.Page(Param: $val)\nAction: MICROFLOW Module.MF\nAction: MICROFLOW Module.MF(Param: $val)\nAction: CREATE_OBJECT Module.Entity THEN SHOW_PAGE Module.Page\n\nButton styles: Default, Primary, Success, Info, Warning, Danger", + Example: "ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary)\nACTIONBUTTON btnEdit (Caption: 'Edit',\n Action: SHOW_PAGE Module.EditPage(Item: $currentObject))\nACTIONBUTTON btnNew (Caption: 'New',\n Action: CREATE_OBJECT Module.Entity THEN SHOW_PAGE Module.EditPage,\n ButtonStyle: Primary)", + SeeAlso: []string{"page.widgets"}, + }) + + Register(SyntaxFeature{ + Path: "page.show", + Summary: "List and describe existing pages", + Keywords: []string{ + "show pages", "list pages", "describe page", + }, + Syntax: "SHOW PAGES;\nSHOW PAGES IN ;\nDESCRIBE PAGE Module.Name;", + Example: "SHOW PAGES IN MyModule;\nDESCRIBE PAGE MyModule.EditCustomer;", + SeeAlso: []string{"page", "page.create"}, + }) + + Register(SyntaxFeature{ + Path: "page.alter", + Summary: "ALTER PAGE — modify widget properties, insert, drop, replace widgets in-place", + Keywords: []string{ + "alter page", "modify page", "update page", + "set property", "insert widget", "drop widget", "replace widget", + }, + Syntax: "ALTER PAGE Module.Name {\n SET property = value ON widgetName;\n SET (prop1 = val1, prop2 = val2) ON widgetName;\n SET Title = 'New Title'; -- page-level\n INSERT AFTER widgetName { };\n INSERT BEFORE widgetName { };\n DROP WIDGET name1, name2;\n REPLACE widgetName WITH { };\n};", + Example: "ALTER PAGE Module.EditPage {\n SET (Caption = 'Save & Close', ButtonStyle = Success) ON btnSave;\n INSERT AFTER txtName {\n TEXTBOX txtMiddleName (Label: 'Middle Name', Binds: MiddleName)\n };\n DROP WIDGET txtUnused;\n};", + SeeAlso: []string{"page.create", "page.show", "snippet.alter"}, + }) + + Register(SyntaxFeature{ + Path: "page.styling", + Summary: "CSS classes, inline styles, and Atlas design properties on widgets", + Keywords: []string{ + "class", "style", "css", "design properties", "atlas", + "spacing", "full width", + }, + Syntax: "Class: 'css-class-name'\nStyle: 'color: red; padding: 8px;'\nDesignProperties: ['Spacing top': 'Large']\nDesignProperties: ['Full width': ON]", + Example: "CONTAINER ctn (Class: 'my-card', Style: 'padding: 16px;') {\n DYNAMICTEXT txt (Content: 'Styled text')\n}", + SeeAlso: []string{"page.widgets"}, + }) + + Register(SyntaxFeature{ + Path: "page.column", + Summary: "DATAGRID column properties: sortable, resizable, width, alignment, visibility", + Keywords: []string{ + "column", "sortable", "resizable", "draggable", "hidable", + "column width", "alignment", "wrap text", "visible", + "dynamic cell class", "tooltip", + }, + Syntax: "COLUMN name (\n Attribute: AttrName,\n Caption: 'Header'\n [, Sortable: true|false]\n [, Resizable: true|false]\n [, Draggable: true|false]\n [, Hidable: yes|hidden|no]\n [, ColumnWidth: autoFill|autoFit|manual]\n [, Size: integer]\n [, Alignment: left|center|right]\n [, WrapText: true|false]\n [, Visible: 'expression']\n [, DynamicCellClass: 'expression']\n [, Tooltip: 'text']\n)", + Example: "COLUMN colPrice (\n Attribute: Price, Caption: 'Price',\n Alignment: right, Sortable: false,\n ColumnWidth: manual, Size: 150,\n Tooltip: 'Price in USD'\n)", + SeeAlso: []string{"page.widgets"}, + }) + + // ── Snippet ─────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "snippet", + Summary: "Reusable page fragments embedded via SNIPPETCALL", + Keywords: []string{ + "snippet", "snippets", "reusable", "snippetcall", + "page fragment", "component", + }, + Syntax: "CREATE SNIPPET Module.Name\n [( Params: { $P: Module.Entity }, Folder: 'path' )]\n {\n -- widgets (same as page)\n }\n\n-- Embed in a page:\nSNIPPETCALL scName (Snippet: Module.SnippetName)", + Example: "CREATE SNIPPET MyModule.CustomerInfo (\n Params: { $Customer: MyModule.Customer }\n)\n{\n DATAVIEW dv (DataSource: $Customer) {\n TEXTBOX txtName (Label: 'Name', Attribute: Name)\n TEXTBOX txtEmail (Label: 'Email', Attribute: Email)\n }\n}", + SeeAlso: []string{"snippet.create", "snippet.alter", "page"}, + }) + + Register(SyntaxFeature{ + Path: "snippet.create", + Summary: "CREATE SNIPPET with parameters, variables, and folder", + Keywords: []string{ + "create snippet", "new snippet", "snippet parameters", + "snippet variables", + }, + Syntax: "CREATE SNIPPET Module.Name\n [( Params: { $P: Module.Entity, $Label: String } )]\n [( Variables: { $isEditable: Boolean = 'true' } )]\n [( Folder: 'Snippets/Common' )]\n {\n -- widgets\n }", + Example: "CREATE SNIPPET MyModule.NavigationMenu\n{\n NAVIGATIONLIST navMenu {\n ITEM itemCustomers (Action: SHOW_PAGE MyModule.CustomerOverview) {\n DYNAMICTEXT txtCustomers (Content: 'Customers')\n }\n }\n}", + SeeAlso: []string{"snippet", "snippet.alter", "page.widgets"}, + }) + + Register(SyntaxFeature{ + Path: "snippet.alter", + Summary: "ALTER SNIPPET — same operations as ALTER PAGE on snippet widgets", + Keywords: []string{ + "alter snippet", "modify snippet", "update snippet", + }, + Syntax: "ALTER SNIPPET Module.Name {\n SET property = value ON widgetName;\n INSERT AFTER widgetName { };\n INSERT BEFORE widgetName { };\n DROP WIDGET name1, name2;\n REPLACE widgetName WITH { };\n};", + Example: "ALTER SNIPPET Module.NavSnippet {\n REPLACE navItem1 WITH {\n ACTIONBUTTON btnHome (Caption: 'Home', Action: SHOW_PAGE Module.HomePage)\n };\n DROP WIDGET txtOldField;\n INSERT AFTER txtName {\n TEXTBOX txtNewField (Label: 'New Field', Binds: NewAttr)\n };\n};", + SeeAlso: []string{"snippet", "page.alter"}, + }) + + Register(SyntaxFeature{ + Path: "snippet.show", + Summary: "List and describe existing snippets", + Keywords: []string{ + "show snippets", "list snippets", "describe snippet", + }, + Syntax: "SHOW SNIPPETS;\nSHOW SNIPPETS IN ;\nDESCRIBE SNIPPET Module.Name;", + Example: "SHOW SNIPPETS IN MyModule;\nDESCRIBE SNIPPET MyModule.NavigationMenu;", + SeeAlso: []string{"snippet", "snippet.create"}, + }) + + // ── Fragment ────────────────────────────────────────────────────────── + + Register(SyntaxFeature{ + Path: "fragment", + Summary: "Transient reusable widget groups defined at script scope", + Keywords: []string{ + "fragment", "fragments", "reusable widgets", "define fragment", + "use fragment", "template", "script scope", + }, + Syntax: "DEFINE FRAGMENT Name AS { };\nUSE FRAGMENT Name [AS prefix_];\nSHOW FRAGMENTS;\nDESCRIBE FRAGMENT Name;\nDESCRIBE FRAGMENT FROM PAGE Module.Page WIDGET widgetName;", + Example: "DEFINE FRAGMENT SaveCancelFooter AS {\n FOOTER footer1 {\n ACTIONBUTTON btnSave (Caption: 'Save', Action: SAVE_CHANGES, ButtonStyle: Primary)\n ACTIONBUTTON btnCancel (Caption: 'Cancel', Action: CANCEL_CHANGES)\n }\n};\n\nCREATE PAGE Module.EditPage (...) {\n DATAVIEW dv (DataSource: $Param) {\n TEXTBOX txtName (Label: 'Name', Binds: Name)\n USE FRAGMENT SaveCancelFooter\n }\n};", + SeeAlso: []string{"fragment.define", "fragment.use", "snippet"}, + }) + + Register(SyntaxFeature{ + Path: "fragment.define", + Summary: "DEFINE FRAGMENT — declare a reusable widget group for the script session", + Keywords: []string{ + "define fragment", "declare fragment", "create fragment", + }, + Syntax: "DEFINE FRAGMENT Name AS {\n \n};", + Example: "DEFINE FRAGMENT FormFields AS {\n TEXTBOX txtName (Label: 'Name', Binds: Name)\n TEXTBOX txtEmail (Label: 'Email', Binds: Email)\n};", + SeeAlso: []string{"fragment", "fragment.use"}, + }) + + Register(SyntaxFeature{ + Path: "fragment.use", + Summary: "USE FRAGMENT — insert fragment widgets at current position with optional prefix", + Keywords: []string{ + "use fragment", "insert fragment", "expand fragment", + "prefix", "name conflict", + }, + Syntax: "USE FRAGMENT Name\nUSE FRAGMENT Name AS prefix_", + Example: "-- Basic usage\nCREATE PAGE Module.Page (...) {\n DATAVIEW dv (DataSource: $Param) {\n USE FRAGMENT FormFields\n USE FRAGMENT SaveCancelFooter\n }\n};\n\n-- With prefix to avoid name conflicts\nUSE FRAGMENT SaveCancelFooter AS order_\n-- Creates: order_footer1, order_btnSave, order_btnCancel", + SeeAlso: []string{"fragment", "fragment.define"}, + }) + + Register(SyntaxFeature{ + Path: "fragment.show", + Summary: "SHOW/DESCRIBE FRAGMENTS and extract widget subtrees from existing pages", + Keywords: []string{ + "show fragments", "describe fragment", "list fragments", + "extract widget", "widget subtree", + }, + Syntax: "SHOW FRAGMENTS;\nDESCRIBE FRAGMENT Name;\nDESCRIBE FRAGMENT FROM PAGE Module.Page WIDGET widgetName;\nDESCRIBE FRAGMENT FROM SNIPPET Module.Snippet WIDGET widgetName;", + Example: "SHOW FRAGMENTS;\nDESCRIBE FRAGMENT SaveCancelFooter;\n\n-- Extract a widget subtree from an existing page\nDESCRIBE FRAGMENT FROM PAGE Module.MyPage WIDGET footer1;", + SeeAlso: []string{"fragment", "fragment.define"}, + }) +} diff --git a/cmd/mxcli/syntax/features_security.go b/cmd/mxcli/syntax/features_security.go new file mode 100644 index 00000000..fcea6f89 --- /dev/null +++ b/cmd/mxcli/syntax/features_security.go @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +func init() { + Register(SyntaxFeature{ + Path: "security", + Summary: "Application security: roles, access control, demo users", + Keywords: []string{ + "security", "access control", "roles", "permissions", + "grant", "revoke", "authentication", "authorization", + }, + Syntax: "SHOW PROJECT SECURITY;\nSHOW MODULE ROLES [IN ];\nSHOW USER ROLES;\nSHOW SECURITY MATRIX [IN ];", + Example: "SHOW PROJECT SECURITY;\nSHOW SECURITY MATRIX IN Shop;", + SeeAlso: []string{"security.module-role", "security.entity-access", "security.user-role"}, + }) + + Register(SyntaxFeature{ + Path: "security.module-role", + Summary: "Create and manage module-level security roles", + Keywords: []string{ + "module role", "create role", "drop role", + }, + Syntax: "CREATE MODULE ROLE . [DESCRIPTION ''];\nDROP MODULE ROLE .;", + Example: "CREATE MODULE ROLE Shop.Admin DESCRIPTION 'Full access';\nCREATE MODULE ROLE Shop.User DESCRIPTION 'Read-only access';", + SeeAlso: []string{"security.user-role", "security.entity-access"}, + }) + + Register(SyntaxFeature{ + Path: "security.entity-access", + Summary: "Grant or revoke entity-level access (CRUD, attribute-level, XPath rules)", + Keywords: []string{ + "entity access", "grant", "revoke", "read", "write", + "create", "delete", "xpath", "row-level security", + }, + Syntax: "GRANT ON . () [WHERE ''];\nREVOKE ON .;\nREVOKE ON . ();\n\nRights: CREATE, DELETE, READ *, READ (,...), WRITE *, WRITE (,...)", + Example: "GRANT Shop.Admin ON Shop.Customer (CREATE, DELETE, READ *, WRITE *);\nGRANT Shop.User ON Shop.Customer (READ *) WHERE '[Active = true()]';", + SeeAlso: []string{"security.module-role", "security.microflow-access"}, + }) + + Register(SyntaxFeature{ + Path: "security.microflow-access", + Summary: "Grant or revoke execution rights on microflows", + Keywords: []string{ + "microflow access", "execute", "grant microflow", + "revoke microflow", + }, + Syntax: "GRANT EXECUTE ON MICROFLOW . TO [, ...];\nREVOKE EXECUTE ON MICROFLOW . FROM [, ...];", + Example: "GRANT EXECUTE ON MICROFLOW Shop.ProcessOrder TO Shop.Admin, Shop.User;\nREVOKE EXECUTE ON MICROFLOW Shop.ProcessOrder FROM Shop.User;", + SeeAlso: []string{"security.page-access", "security.entity-access"}, + }) + + Register(SyntaxFeature{ + Path: "security.page-access", + Summary: "Grant or revoke view rights on pages", + Keywords: []string{ + "page access", "view", "grant page", "revoke page", + }, + Syntax: "GRANT VIEW ON PAGE . TO [, ...];\nREVOKE VIEW ON PAGE . FROM [, ...];", + Example: "GRANT VIEW ON PAGE Shop.OrderOverview TO Shop.Admin, Shop.User;", + SeeAlso: []string{"security.microflow-access", "security.entity-access"}, + }) + + Register(SyntaxFeature{ + Path: "security.user-role", + Summary: "Create and manage application-level user roles that bundle module roles", + Keywords: []string{ + "user role", "application role", "manage roles", + "add module roles", "remove module roles", + }, + Syntax: "CREATE USER ROLE ( [, ...]) [MANAGE ALL ROLES];\nALTER USER ROLE ADD MODULE ROLES ( [, ...]);\nALTER USER ROLE REMOVE MODULE ROLES ( [, ...]);\nDROP USER ROLE ;", + Example: "CREATE USER ROLE AppAdmin (Shop.Admin, HR.Admin) MANAGE ALL ROLES;\nALTER USER ROLE AppAdmin ADD MODULE ROLES (Reporting.Viewer);", + SeeAlso: []string{"security.module-role", "security.demo-user"}, + }) + + Register(SyntaxFeature{ + Path: "security.project-security", + Summary: "Set project security level and demo user toggle", + Keywords: []string{ + "project security", "security level", "prototype", + "production", "off", + }, + Syntax: "ALTER PROJECT SECURITY LEVEL OFF|PROTOTYPE|PRODUCTION;\nALTER PROJECT SECURITY DEMO USERS ON|OFF;", + Example: "ALTER PROJECT SECURITY LEVEL PRODUCTION;\nALTER PROJECT SECURITY DEMO USERS OFF;", + SeeAlso: []string{"security.demo-user"}, + }) + + Register(SyntaxFeature{ + Path: "security.demo-user", + Summary: "Create and manage demo users for testing", + Keywords: []string{ + "demo user", "test user", "demo account", + "password", "login", + }, + Syntax: "CREATE DEMO USER '' PASSWORD '' [ENTITY Module.Entity] ( [, ...]);\nDROP DEMO USER '';", + Example: "CREATE DEMO USER 'admin' PASSWORD 'Admin1!' (AppAdmin);\nCREATE DEMO USER 'user' PASSWORD 'User1!' (AppUser);", + SeeAlso: []string{"security.user-role", "security.project-security"}, + }) +} diff --git a/cmd/mxcli/syntax/features_workflow.go b/cmd/mxcli/syntax/features_workflow.go new file mode 100644 index 00000000..da4731b6 --- /dev/null +++ b/cmd/mxcli/syntax/features_workflow.go @@ -0,0 +1,160 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +func init() { + Register(SyntaxFeature{ + Path: "workflow", + Summary: "Multi-step business processes with user tasks, decisions, and parallel paths", + Keywords: []string{ + "workflow", "business process", "approval", "review", + "user task", "decision", "parallel", + }, + Syntax: "CREATE WORKFLOW Module.Name\n PARAMETER $Context: Module.Entity\nBEGIN\n \nEND WORKFLOW;", + Example: "CREATE WORKFLOW HR.LeaveApproval\n PARAMETER $Context: HR.LeaveRequest\nBEGIN\n USER TASK Review 'Review request'\n PAGE HR.ReviewPage\n OUTCOMES 'Approve' { } 'Reject' { };\nEND WORKFLOW;", + SeeAlso: []string{"workflow.user-task", "workflow.decision", "workflow.parallel-split"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.show", + Summary: "List and describe existing workflows", + Keywords: []string{ + "list workflows", "show workflows", "describe workflow", + }, + Syntax: "SHOW WORKFLOWS;\nSHOW WORKFLOWS IN ;\nDESCRIBE WORKFLOW Module.Name;", + Example: "SHOW WORKFLOWS IN HR;\nDESCRIBE WORKFLOW HR.LeaveApproval;", + }) + + Register(SyntaxFeature{ + Path: "workflow.create", + Summary: "Create a new workflow definition with activities and flow", + Keywords: []string{ + "create workflow", "new workflow", "define workflow", + "parameter", "overview page", "due date", + }, + Syntax: "CREATE [OR MODIFY] WORKFLOW Module.Name\n PARAMETER $Context: Module.Entity\n [OVERVIEW PAGE Module.OverviewPage]\n [DUE DATE '']\nBEGIN\n \nEND WORKFLOW;", + Example: "CREATE WORKFLOW Module.ApprovalFlow\n PARAMETER $Context: Module.Request\n OVERVIEW PAGE Module.WF_Overview\nBEGIN\n USER TASK ReviewTask 'Review the request'\n PAGE Module.ReviewPage\n OUTCOMES 'Approve' { } 'Reject' { };\nEND WORKFLOW;", + SeeAlso: []string{"workflow.user-task", "workflow.decision", "workflow.drop"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.user-task", + Summary: "User task activity — assigns work to users with outcomes", + Keywords: []string{ + "user task", "human task", "assign", "assignee", + "outcomes", "approve", "reject", "page", + }, + Syntax: "USER TASK '
'\n [PAGE Module.Page]\n [TARGETING MICROFLOW Module.MF | TARGETING XPATH '']\n [ENTITY Module.Entity]\n OUTCOMES '' { } '' { };", + Example: "USER TASK ReviewTask 'Review the request'\n PAGE HR.ReviewPage\n TARGETING XPATH '[Module.Employee/Active = true()]'\n OUTCOMES 'Approve' { } 'Reject' { };", + SeeAlso: []string{"workflow.user-task.targeting", "workflow.create"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.user-task.targeting", + Summary: "Control who can pick up a user task — microflow or XPath based", + Keywords: []string{ + "targeting", "user targeting", "who can execute", + "assignee", "candidate", "xpath", "microflow", + "task assignment", "user filter", + }, + Syntax: "TARGETING MICROFLOW Module.MF\nTARGETING XPATH ''", + Example: "-- XPath targeting: only active managers\nUSER TASK Approve 'Approve request'\n TARGETING XPATH '[HR.Employee/Role = \"Manager\" and Active = true()]'\n OUTCOMES 'Done' { };\n\n-- Microflow targeting: custom logic\nUSER TASK Approve 'Approve request'\n TARGETING MICROFLOW HR.GetApprovers\n OUTCOMES 'Done' { };", + MinVersion: "9.0.0", + SeeAlso: []string{"workflow.user-task"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.decision", + Summary: "Decision activity — conditional branching based on expression outcomes", + Keywords: []string{ + "decision", "conditional", "branch", "if", "condition", + "exclusive gateway", "XOR", + }, + Syntax: "DECISION [''] [COMMENT '']\n OUTCOMES '' { } ...;", + Example: "DECISION 'Check amount'\n OUTCOMES 'Under 1000' { } 'Over 1000' {\n USER TASK ManagerApproval 'Manager must approve'\n OUTCOMES 'OK' { };\n };", + SeeAlso: []string{"workflow.create", "workflow.parallel-split"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.parallel-split", + Summary: "Parallel split — execute multiple paths concurrently", + Keywords: []string{ + "parallel", "concurrent", "split", "fork", "join", + "parallel gateway", "AND", + }, + Syntax: "PARALLEL SPLIT [COMMENT '']\n PATH 1 { }\n PATH 2 { };", + Example: "PARALLEL SPLIT\n PATH 1 {\n USER TASK LegalReview 'Legal review'\n OUTCOMES 'Done' { };\n }\n PATH 2 {\n USER TASK TechReview 'Technical review'\n OUTCOMES 'Done' { };\n };", + SeeAlso: []string{"workflow.decision", "workflow.create"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.call-microflow", + Summary: "Call a microflow as a workflow activity", + Keywords: []string{ + "call microflow", "microflow task", "automated step", + "system task", + }, + Syntax: "CALL MICROFLOW Module.MF [COMMENT '']\n [OUTCOMES '' { } ...];", + Example: "CALL MICROFLOW HR.SendNotification\n COMMENT 'Notify manager';", + SeeAlso: []string{"workflow.create", "workflow.call-workflow"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.call-workflow", + Summary: "Call a sub-workflow from within a workflow", + Keywords: []string{ + "call workflow", "sub-workflow", "nested workflow", + }, + Syntax: "CALL WORKFLOW Module.WF [COMMENT ''];", + Example: "CALL WORKFLOW HR.SubApproval COMMENT 'Delegate to sub-process';", + SeeAlso: []string{"workflow.create", "workflow.call-microflow"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.drop", + Summary: "Delete a workflow definition", + Keywords: []string{ + "drop workflow", "delete workflow", "remove workflow", + }, + Syntax: "DROP WORKFLOW Module.Name;", + Example: "DROP WORKFLOW HR.LeaveApproval;", + SeeAlso: []string{"workflow.create"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.catalog", + Summary: "Query workflow metadata via catalog tables", + Keywords: []string{ + "catalog", "query workflows", "workflow metadata", + "cross-reference", "callers", "callees", + }, + Syntax: "REFRESH CATALOG FULL;\nSELECT * FROM CATALOG.WORKFLOWS;\nSHOW CALLERS OF Module.WorkflowName;\nSHOW REFERENCES TO Module.WorkflowName;", + Example: "REFRESH CATALOG FULL;\nSELECT QualifiedName, ActivityCount, UserTaskCount\n FROM CATALOG.WORKFLOWS WHERE UserTaskCount > 0;", + SeeAlso: []string{"workflow.show"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.boundary-event", + Summary: "Attach boundary events (timer) to user tasks for timeouts", + Keywords: []string{ + "boundary event", "timer", "timeout", "deadline", + "SLA", "escalation", + }, + Syntax: "BOUNDARY TIMER ON AFTER '' {\n \n}", + Example: "BOUNDARY TIMER ON ReviewTask AFTER 'P3D' {\n CALL MICROFLOW Module.Escalate;\n}", + MinVersion: "10.6.0", + SeeAlso: []string{"workflow.user-task"}, + }) + + Register(SyntaxFeature{ + Path: "workflow.alter", + Summary: "Modify an existing workflow — change properties, add/remove activities", + Keywords: []string{ + "alter workflow", "modify workflow", "update workflow", + "add activity", "drop activity", "replace activity", + }, + Syntax: "ALTER WORKFLOW Module.Name SET = ;\nALTER WORKFLOW Module.Name INSERT [BEFORE|AFTER ];\nALTER WORKFLOW Module.Name DROP ;\nALTER WORKFLOW Module.Name REPLACE WITH ;", + Example: "ALTER WORKFLOW HR.LeaveApproval SET DUE DATE = 'addDays([%CurrentDateTime%], 7)';\nALTER WORKFLOW HR.LeaveApproval INSERT\n CALL MICROFLOW HR.NotifyHR\n AFTER ReviewTask;", + SeeAlso: []string{"workflow.create", "workflow.drop"}, + }) +} diff --git a/cmd/mxcli/syntax/format.go b/cmd/mxcli/syntax/format.go new file mode 100644 index 00000000..13f1d903 --- /dev/null +++ b/cmd/mxcli/syntax/format.go @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +import ( + "encoding/json" + "fmt" + "io" + "strings" +) + +// WriteJSON writes features as a JSON array. +func WriteJSON(w io.Writer, features []SyntaxFeature) error { + enc := json.NewEncoder(w) + enc.SetIndent("", " ") + return enc.Encode(features) +} + +// WriteText writes features in a human-readable grouped format. +func WriteText(w io.Writer, features []SyntaxFeature) { + if len(features) == 0 { + return + } + + // Single feature — show full detail + if len(features) == 1 { + writeFeatureDetail(w, features[0]) + return + } + + // Multiple features — group by top-level domain + groups := groupByDomain(features) + for i, g := range groups { + if i > 0 { + fmt.Fprintln(w) + } + fmt.Fprintf(w, "%s\n", g.title) + fmt.Fprintf(w, "%s\n\n", strings.Repeat("─", len(g.title))) + for _, f := range g.features { + fmt.Fprintf(w, " %-40s %s\n", f.Path, f.Summary) + } + } + fmt.Fprintln(w) + fmt.Fprintf(w, "Use 'mxcli syntax --json' for machine-readable detail.\n") + fmt.Fprintf(w, "Use 'mxcli syntax ' to drill down (e.g., 'mxcli syntax workflow user-task').\n") +} + +func writeFeatureDetail(w io.Writer, f SyntaxFeature) { + fmt.Fprintf(w, "%s\n", f.Path) + fmt.Fprintf(w, "%s\n\n", strings.Repeat("═", len(f.Path))) + fmt.Fprintf(w, "%s\n\n", f.Summary) + + if f.MinVersion != "" { + fmt.Fprintf(w, "Requires: Mendix %s+\n\n", f.MinVersion) + } + + if len(f.Keywords) > 0 { + fmt.Fprintf(w, "Keywords: %s\n\n", strings.Join(f.Keywords, ", ")) + } + + if f.Syntax != "" { + fmt.Fprintln(w, "Syntax:") + for _, line := range strings.Split(f.Syntax, "\n") { + fmt.Fprintf(w, " %s\n", line) + } + fmt.Fprintln(w) + } + + if f.Example != "" { + fmt.Fprintln(w, "Example:") + for _, line := range strings.Split(f.Example, "\n") { + fmt.Fprintf(w, " %s\n", line) + } + fmt.Fprintln(w) + } + + if len(f.SeeAlso) > 0 { + fmt.Fprintf(w, "See also: %s\n", strings.Join(f.SeeAlso, ", ")) + } +} + +func capitalize(s string) string { + if s == "" { + return s + } + r := []rune(s) + return strings.ToUpper(string(r[:1])) + string(r[1:]) +} + +type featureGroup struct { + title string + features []SyntaxFeature +} + +func groupByDomain(features []SyntaxFeature) []featureGroup { + order := []string{} + m := map[string][]SyntaxFeature{} + for _, f := range features { + domain := f.Path + if idx := strings.IndexByte(f.Path, '.'); idx > 0 { + domain = f.Path[:idx] + } + if _, ok := m[domain]; !ok { + order = append(order, domain) + } + m[domain] = append(m[domain], f) + } + groups := make([]featureGroup, len(order)) + for i, d := range order { + groups[i] = featureGroup{title: capitalize(d), features: m[d]} + } + return groups +} diff --git a/cmd/mxcli/syntax/registry.go b/cmd/mxcli/syntax/registry.go new file mode 100644 index 00000000..fdf86406 --- /dev/null +++ b/cmd/mxcli/syntax/registry.go @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +import ( + "sort" + "strings" +) + +// SyntaxFeature describes a discoverable MDL syntax feature. +type SyntaxFeature struct { + Path string `json:"path"` + Summary string `json:"summary"` + Keywords []string `json:"keywords"` + Syntax string `json:"syntax"` + Example string `json:"example"` + MinVersion string `json:"min_version,omitempty"` + SeeAlso []string `json:"see_also,omitempty"` +} + +var registry []SyntaxFeature +var registeredPaths = map[string]bool{} + +// topicAliases maps legacy topic names and common variants to registry paths. +var topicAliases = map[string]string{ + // Domain model aliases + "keywords": "domain-model.keywords", + "reserved": "domain-model.keywords", + "types": "domain-model.types", + "datatypes": "domain-model.types", + "data-types": "domain-model.types", + "delete": "domain-model.association.delete-behavior", + "delete_behavior": "domain-model.association.delete-behavior", + "delete-behavior": "domain-model.association.delete-behavior", + "entity": "domain-model.entity", + "entities": "domain-model.entity", + "enumeration": "domain-model.enumeration", + "enum": "domain-model.enumeration", + "enumerations": "domain-model.enumeration", + "constant": "domain-model.constant", + "constants": "domain-model.constant", + "association": "domain-model.association", + "associations": "domain-model.association", + // Plural aliases + "microflows": "microflow", + "pages": "page", + "snippets": "snippet", + "fragments": "fragment", + "workflows": "workflow", + // Variant aliases + "nav": "navigation", + "project-settings": "settings", + "rest-client": "rest", + "rest-clients": "rest", + "integrations": "integration", + "services": "integration", + "contract": "integration", + "contracts": "integration", + "javaaction": "java-action", + "java_action": "java-action", + "java-actions": "java-action", + "javaactions": "java-action", + "businessevents": "business-events", + "business_events": "business-events", + "be": "business-events", + "xpath-constraints": "xpath", + "external-sql": "sql", + "validation": "errors", + "testing": "test", + "tests": "test", + // Agents aliases + "agent": "agents", + "agent-editor": "agents", + "agenteditor": "agents", + "model": "agents.model", + "models": "agents.model", + "knowledge-base": "agents.knowledge-base", + "knowledgebase": "agents.knowledge-base", + "mcp": "agents.mcp-service", + "mcp-service": "agents.mcp-service", +} + +// Register adds a syntax feature to the global registry. +// Panics if a feature with the same path is already registered. +func Register(f SyntaxFeature) { + if registeredPaths[f.Path] { + panic("syntax: duplicate feature path: " + f.Path) + } + registeredPaths[f.Path] = true + registry = append(registry, f) +} + +// ResolveAlias returns the canonical registry path for a topic alias. +// If the input is not an alias, it is returned unchanged. +func ResolveAlias(path string) string { + if alias, ok := topicAliases[path]; ok { + return alias + } + return path +} + +// All returns every registered feature, sorted by path. +func All() []SyntaxFeature { + out := make([]SyntaxFeature, len(registry)) + copy(out, registry) + sort.Slice(out, func(i, j int) bool { return out[i].Path < out[j].Path }) + return out +} + +// ByPrefix returns features whose path equals or starts with prefix+".". +func ByPrefix(prefix string) []SyntaxFeature { + var out []SyntaxFeature + for _, f := range registry { + if f.Path == prefix || strings.HasPrefix(f.Path, prefix+".") { + out = append(out, f) + } + } + sort.Slice(out, func(i, j int) bool { return out[i].Path < out[j].Path }) + return out +} + +// ByPath returns the feature with the exact path, or nil. +func ByPath(path string) *SyntaxFeature { + for i := range registry { + if registry[i].Path == path { + return ®istry[i] + } + } + return nil +} + +// HasPrefix reports whether any registered feature matches the prefix. +func HasPrefix(prefix string) bool { + for _, f := range registry { + if f.Path == prefix || strings.HasPrefix(f.Path, prefix+".") { + return true + } + } + return false +} diff --git a/cmd/mxcli/syntax/registry_test.go b/cmd/mxcli/syntax/registry_test.go new file mode 100644 index 00000000..c1b45f17 --- /dev/null +++ b/cmd/mxcli/syntax/registry_test.go @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: Apache-2.0 + +package syntax + +import ( + "bytes" + "encoding/json" + "strings" + "testing" +) + +func TestAll_ReturnsSortedFeatures(t *testing.T) { + all := All() + if len(all) == 0 { + t.Fatal("expected registered features, got none") + } + for i := 1; i < len(all); i++ { + if all[i].Path < all[i-1].Path { + t.Errorf("features not sorted: %q before %q", all[i-1].Path, all[i].Path) + } + } +} + +func TestByPrefix_ReturnsMatchingFeatures(t *testing.T) { + tests := []struct { + prefix string + wantMin int + wantPaths []string // paths that must be present + }{ + {"workflow", 5, []string{"workflow", "workflow.user-task", "workflow.user-task.targeting"}}, + {"workflow.user-task", 2, []string{"workflow.user-task", "workflow.user-task.targeting"}}, + {"security", 5, []string{"security", "security.module-role", "security.entity-access"}}, + {"nonexistent", 0, nil}, + } + for _, tt := range tests { + t.Run(tt.prefix, func(t *testing.T) { + got := ByPrefix(tt.prefix) + if len(got) < tt.wantMin { + t.Errorf("ByPrefix(%q): got %d features, want >= %d", tt.prefix, len(got), tt.wantMin) + } + for _, wantPath := range tt.wantPaths { + found := false + for _, f := range got { + if f.Path == wantPath { + found = true + break + } + } + if !found { + t.Errorf("ByPrefix(%q): missing expected path %q", tt.prefix, wantPath) + } + } + }) + } +} + +func TestByPath_ExactMatch(t *testing.T) { + f := ByPath("workflow.user-task.targeting") + if f == nil { + t.Fatal("expected feature for workflow.user-task.targeting, got nil") + } + if f.Summary == "" { + t.Error("feature summary is empty") + } + if f.MinVersion == "" { + t.Error("expected MinVersion to be set for targeting") + } +} + +func TestByPath_NotFound(t *testing.T) { + f := ByPath("does.not.exist") + if f != nil { + t.Errorf("expected nil for nonexistent path, got %v", f) + } +} + +func TestHasPrefix(t *testing.T) { + if !HasPrefix("workflow") { + t.Error("expected HasPrefix(workflow) = true") + } + if !HasPrefix("security") { + t.Error("expected HasPrefix(security) = true") + } + if HasPrefix("nonexistent") { + t.Error("expected HasPrefix(nonexistent) = false") + } +} + +func TestFeatureFieldsPopulated(t *testing.T) { + for _, f := range All() { + t.Run(f.Path, func(t *testing.T) { + if f.Path == "" { + t.Error("empty path") + } + if f.Summary == "" { + t.Error("empty summary") + } + if len(f.Keywords) == 0 { + t.Error("no keywords") + } + if f.Syntax == "" { + t.Error("empty syntax") + } + if f.Example == "" { + t.Error("empty example") + } + }) + } +} + +func TestWriteJSON_ValidOutput(t *testing.T) { + features := ByPrefix("workflow.user-task") + var buf bytes.Buffer + if err := WriteJSON(&buf, features); err != nil { + t.Fatal(err) + } + var parsed []SyntaxFeature + if err := json.Unmarshal(buf.Bytes(), &parsed); err != nil { + t.Fatalf("invalid JSON: %v", err) + } + if len(parsed) != len(features) { + t.Errorf("got %d features in JSON, want %d", len(parsed), len(features)) + } +} + +func TestWriteText_SingleFeature(t *testing.T) { + f := ByPath("workflow.user-task.targeting") + if f == nil { + t.Fatal("feature not found") + } + var buf bytes.Buffer + WriteText(&buf, []SyntaxFeature{*f}) + out := buf.String() + if !strings.Contains(out, "workflow.user-task.targeting") { + t.Error("output missing feature path") + } + if !strings.Contains(out, "Syntax:") { + t.Error("output missing Syntax section") + } + if !strings.Contains(out, "Example:") { + t.Error("output missing Example section") + } + if !strings.Contains(out, "Mendix 9.0.0+") { + t.Error("output missing MinVersion") + } +} + +func TestWriteText_MultipleFeatures(t *testing.T) { + features := ByPrefix("security") + var buf bytes.Buffer + WriteText(&buf, features) + out := buf.String() + if !strings.Contains(out, "Security") { + t.Error("output missing group header") + } + if !strings.Contains(out, "security.entity-access") { + t.Error("output missing security.entity-access") + } +} + +func TestResolveAlias(t *testing.T) { + tests := []struct { + input string + want string + }{ + {"entity", "domain-model.entity"}, + {"entities", "domain-model.entity"}, + {"enum", "domain-model.enumeration"}, + {"association", "domain-model.association"}, + {"nav", "navigation"}, + {"be", "business-events"}, + {"validation", "errors"}, + {"testing", "test"}, + {"tests", "test"}, + // Non-alias passes through unchanged + {"workflow", "workflow"}, + {"security", "security"}, + {"nonexistent", "nonexistent"}, + } + for _, tt := range tests { + t.Run(tt.input, func(t *testing.T) { + got := ResolveAlias(tt.input) + if got != tt.want { + t.Errorf("ResolveAlias(%q) = %q, want %q", tt.input, got, tt.want) + } + }) + } +} + +func TestAliasTargetsExist(t *testing.T) { + all := All() + pathSet := make(map[string]bool, len(all)) + for _, f := range all { + pathSet[f.Path] = true + } + for alias, target := range topicAliases { + if !HasPrefix(target) { + t.Errorf("alias %q -> %q: target path has no matching features", alias, target) + } + } +} + +func TestSeeAlsoRefsExist(t *testing.T) { + all := All() + pathSet := make(map[string]bool, len(all)) + for _, f := range all { + pathSet[f.Path] = true + } + for _, f := range all { + for _, ref := range f.SeeAlso { + if !pathSet[ref] { + t.Errorf("%s: see_also references %q which is not registered", f.Path, ref) + } + } + } +} diff --git a/docs/11-proposals/syntax-feature-registry.md b/docs/11-proposals/syntax-feature-registry.md new file mode 100644 index 00000000..49d46099 --- /dev/null +++ b/docs/11-proposals/syntax-feature-registry.md @@ -0,0 +1,140 @@ +# Proposal: Self-Describing Syntax Feature Registry + +**Date**: 2026-04-10 +**Status**: Draft +**Branch**: `research/recursive-help-discovery` + +## Problem + +mxcli's help system is flat — `mxcli syntax` has 26 topics, each a monolithic text file. There is no way to: + +1. **Drill down** from a broad topic to a specific feature +2. **Get structured output** for LLM consumption +3. **Discover by business concept** (e.g., "who can handle a workflow task" → `TARGETING`) + +The primary user is an LLM (Claude Code). LLMs can't interactively browse — they need structured data in one shot to match business questions to syntax. + +Adding a new topic currently requires: creating a `.txt` file, adding a `case` in a switch statement, and updating the command's `Long` description. Three files for one concern. + +## Design + +### Data Model + +Each discoverable syntax feature is a `SyntaxFeature`: + +```go +type SyntaxFeature struct { + Path string // Hierarchical key: "workflow.user-task.targeting" + Summary string // One-line business description + Keywords []string // Synonyms for LLM matching + Syntax string // MDL syntax pattern + Example string // Working example + MinVersion string // Minimum Mendix version (optional) + SeeAlso []string // Related feature paths +} +``` + +**Path convention**: `domain.concept[.detail]` +- `workflow` → overview +- `workflow.user-task` → USER TASK activity type +- `workflow.user-task.targeting` → TARGETING clause + +### Query Interface + +**CLI (for LLMs and humans):** + +```bash +# Full index — LLM gets everything in one call +mxcli syntax --json +# → [{"path":"workflow.user-task.targeting", "summary":"...", "keywords":[...]}, ...] + +# Filter by topic prefix +mxcli syntax workflow --json + +# Human-readable (default) — auto-generated from registry, grouped by hierarchy +mxcli syntax workflow + +# Drill down to specific feature +mxcli syntax workflow user-task +``` + +**MDL REPL:** + +```sql +HELP; -- Overview (unchanged) +HELP WORKFLOW; -- Same as: mxcli syntax workflow +HELP WORKFLOW USER TASK; -- Drill down +``` + +`HELP` reads from the same registry — no more hardcoded strings. + +**Typical LLM flow:** + +1. `mxcli syntax --json` → get full index (cache in context) +2. Match keywords/summary → find `workflow.user-task.targeting` +3. Write MDL directly, or `mxcli syntax workflow user-task --json` for details + +One call solves 90% of discovery. + +### File Organization + +Separate package, registrations grouped by domain: + +``` +cmd/mxcli/ + syntax/ + registry.go # Registry type + Register() + query methods + format.go # Text/JSON output formatting + features_workflow.go # Workflow feature registrations + features_security.go # Security feature registrations + features_domain_model.go # Entity/association/enumeration + features_microflow.go + features_page.go + features_navigation.go + ... +``` + +Each `features_*.go` contains only `init()` + `Register()` calls (~50-150 lines). + +### Adding a New Feature (single file change) + +```go +// features_workflow.go +syntax.Register(SyntaxFeature{ + Path: "workflow.boundary-event.timer", + Summary: "Attach a timer to a user task that triggers on timeout", + Keywords: []string{"timeout", "deadline", "SLA", "escalation"}, + Syntax: "BOUNDARY TIMER ON AFTER '' { }", + Example: "BOUNDARY TIMER ON ReviewTask AFTER 'P3D' {\n CALL MICROFLOW Module.Escalate;\n}", + MinVersion: "10.6.0", + SeeAlso: []string{"workflow.user-task"}, +}) +``` + +Automatically appears in: `--json` index, text output, `HELP` command, drill-down navigation. + +No switch case, no .txt file, no manual topic list update. + +### Migration Path + +| Phase | Scope | Approach | +|-------|-------|----------| +| 1 | Registry core + `--json` | Build registry, register workflow + security topics, validate | +| 2 | Migrate remaining topics | Convert each `.txt` → `Register()` calls, delete `.txt` + switch case | +| 3 | MDL `HELP` with parameters | Parse `HELP ` in grammar, read from registry | +| 4 | Cleanup | Remove `help_topics/` directory and old switch statement | + +**Backward compatibility**: During migration, unregistered topics fall back to `.txt` files. `syntaxCmd` checks registry first, then `.txt`. + +### Relationship to Skills + +Skills (`.claude/skills/`) provide **guidance** — when to use, best practices, gotchas. +Registry provides **discovery** — what exists, how to write it. + +Complementary, no overlap. + +## PR Checklist Addition + +```markdown +- [ ] New MDL syntax registered as `SyntaxFeature` (path, summary, keywords, example) +``` diff --git a/mdl-examples/doctype-tests/20-help-examples.mdl b/mdl-examples/doctype-tests/20-help-examples.mdl new file mode 100644 index 00000000..ab2baef5 --- /dev/null +++ b/mdl-examples/doctype-tests/20-help-examples.mdl @@ -0,0 +1,19 @@ +-- Help command examples (syntax-only, no project needed) + +-- Bare HELP shows overview +HELP; + +-- HELP with single topic +HELP workflow; + +-- HELP with multi-word topic +HELP user task; + +-- HELP with nested path +HELP workflow user task targeting; + +-- HELP with alias (entity -> domain-model.entity) +HELP entity; + +-- HELP with unknown topic (should print "No syntax help found") +HELP nonexistenttopic; diff --git a/mdl/ast/ast_query.go b/mdl/ast/ast_query.go index 5c8ae402..2182cec4 100644 --- a/mdl/ast/ast_query.go +++ b/mdl/ast/ast_query.go @@ -436,8 +436,10 @@ type SetStmt struct { func (s *SetStmt) isStatement() {} -// HelpStmt represents: HELP or ? -type HelpStmt struct{} +// HelpStmt represents: HELP [topic words...] +type HelpStmt struct { + Topic []string // e.g., ["workflow", "user-task"] for HELP WORKFLOW USER-TASK +} func (s *HelpStmt) isStatement() {} diff --git a/mdl/executor/cmd_misc.go b/mdl/executor/cmd_misc.go index 0c35439e..919b48cb 100644 --- a/mdl/executor/cmd_misc.go +++ b/mdl/executor/cmd_misc.go @@ -10,6 +10,7 @@ import ( "path/filepath" "strings" + "github.com/mendixlabs/mxcli/cmd/mxcli/syntax" "github.com/mendixlabs/mxcli/mdl/ast" mdlerrors "github.com/mendixlabs/mxcli/mdl/errors" "github.com/mendixlabs/mxcli/mdl/visitor" @@ -50,8 +51,22 @@ func execSet(ctx *ExecContext, s *ast.SetStmt) error { return nil } -// execHelp handles HELP statements. -func execHelp(ctx *ExecContext) error { +// execHelp handles HELP statements. With topic words, queries the syntax registry. +func execHelp(ctx *ExecContext, s *ast.HelpStmt) error { + if len(s.Topic) > 0 { + path := syntax.ResolveAlias(resolveHelpPath(s.Topic)) + features := syntax.ByPrefix(path) + if len(features) == 0 { + fmt.Fprintf(ctx.Output, "No syntax help found for: %s\n", path) + fmt.Fprintln(ctx.Output, "Use HELP; for a command overview.") + return nil + } + if ctx.Format == FormatJSON { + return syntax.WriteJSON(ctx.Output, features) + } + syntax.WriteText(ctx.Output, features) + return nil + } help := `MDL Commands: Connection: @@ -328,6 +343,32 @@ Statement Terminator: return nil } +// resolveHelpPath converts space-separated words like ["workflow", "user", "task"] +// into a registry path like "workflow.user-task" by greedily merging adjacent words +// with hyphens to find the longest matching prefix at each level. +func resolveHelpPath(words []string) string { + var segments []string + i := 0 + for i < len(words) { + matched := false + for j := len(words); j > i; j-- { + candidate := strings.Join(words[i:j], "-") + testPath := strings.Join(append(segments, candidate), ".") + if syntax.HasPrefix(testPath) { + segments = append(segments, candidate) + i = j + matched = true + break + } + } + if !matched { + segments = append(segments, words[i]) + i++ + } + } + return strings.Join(segments, ".") +} + // listVersion displays Mendix project version information. func listVersion(ctx *ExecContext) error { if !ctx.Connected() { diff --git a/mdl/executor/cmd_misc_test.go b/mdl/executor/cmd_misc_test.go new file mode 100644 index 00000000..ddd51ab7 --- /dev/null +++ b/mdl/executor/cmd_misc_test.go @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: Apache-2.0 + +package executor + +import "testing" + +func TestResolveHelpPath(t *testing.T) { + tests := []struct { + name string + words []string + want string + }{ + {"single word exact", []string{"workflow"}, "workflow"}, + {"single word domain-model", []string{"domain-model"}, "domain-model"}, + {"multi-word no match falls through", []string{"user", "task"}, "user.task"}, + {"multi-level path", []string{"workflow", "user", "task"}, "workflow.user-task"}, + {"three-level path", []string{"workflow", "user", "task", "targeting"}, "workflow.user-task.targeting"}, + {"security prefix", []string{"security", "entity", "access"}, "security.entity-access"}, + {"non-existent topic", []string{"nonexistent"}, "nonexistent"}, + {"mixed known and unknown", []string{"workflow", "bogus"}, "workflow.bogus"}, + {"single known nested", []string{"navigation", "create"}, "navigation.create"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := resolveHelpPath(tt.words) + if got != tt.want { + t.Errorf("resolveHelpPath(%v) = %q, want %q", tt.words, got, tt.want) + } + }) + } +} diff --git a/mdl/executor/executor_dispatch.go b/mdl/executor/executor_dispatch.go index a6afdcee..a7d210ab 100644 --- a/mdl/executor/executor_dispatch.go +++ b/mdl/executor/executor_dispatch.go @@ -33,3 +33,6 @@ func (e *Executor) newExecContext(ctx context.Context) *ExecContext { executor: e, } } + +// Ensure ast import is used via executeInner's stmt parameter. +var _ ast.Statement = (*ast.HelpStmt)(nil) diff --git a/mdl/executor/register_stubs.go b/mdl/executor/register_stubs.go index 8d9abd22..e058c267 100644 --- a/mdl/executor/register_stubs.go +++ b/mdl/executor/register_stubs.go @@ -376,7 +376,7 @@ func registerSessionHandlers(r *Registry) { return execSet(ctx, stmt.(*ast.SetStmt)) }) r.Register(&ast.HelpStmt{}, func(ctx *ExecContext, stmt ast.Statement) error { - return execHelp(ctx) + return execHelp(ctx, stmt.(*ast.HelpStmt)) }) r.Register(&ast.ExitStmt{}, func(ctx *ExecContext, stmt ast.Statement) error { return execExit(ctx) diff --git a/mdl/grammar/MDLParser.g4 b/mdl/grammar/MDLParser.g4 index 52514827..40998b7d 100644 --- a/mdl/grammar/MDLParser.g4 +++ b/mdl/grammar/MDLParser.g4 @@ -3483,7 +3483,7 @@ linkMapping ; helpStatement - : IDENTIFIER // HELP command + : IDENTIFIER (identifierOrKeyword)* // HELP [topic words...] ; /** diff --git a/mdl/grammar/parser/MDLParser.interp b/mdl/grammar/parser/MDLParser.interp index 2d641ade..df9af1a1 100644 --- a/mdl/grammar/parser/MDLParser.interp +++ b/mdl/grammar/parser/MDLParser.interp @@ -1578,4 +1578,4 @@ keyword atn: -[4, 1, 572, 7589, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 2, 360, 7, 360, 2, 361, 7, 361, 2, 362, 7, 362, 2, 363, 7, 363, 2, 364, 7, 364, 2, 365, 7, 365, 2, 366, 7, 366, 2, 367, 7, 367, 2, 368, 7, 368, 2, 369, 7, 369, 2, 370, 7, 370, 2, 371, 7, 371, 2, 372, 7, 372, 2, 373, 7, 373, 2, 374, 7, 374, 2, 375, 7, 375, 2, 376, 7, 376, 2, 377, 7, 377, 2, 378, 7, 378, 2, 379, 7, 379, 2, 380, 7, 380, 2, 381, 7, 381, 2, 382, 7, 382, 2, 383, 7, 383, 2, 384, 7, 384, 2, 385, 7, 385, 2, 386, 7, 386, 2, 387, 7, 387, 2, 388, 7, 388, 2, 389, 7, 389, 2, 390, 7, 390, 2, 391, 7, 391, 2, 392, 7, 392, 2, 393, 7, 393, 2, 394, 7, 394, 2, 395, 7, 395, 2, 396, 7, 396, 2, 397, 7, 397, 2, 398, 7, 398, 2, 399, 7, 399, 2, 400, 7, 400, 2, 401, 7, 401, 2, 402, 7, 402, 2, 403, 7, 403, 2, 404, 7, 404, 2, 405, 7, 405, 2, 406, 7, 406, 2, 407, 7, 407, 2, 408, 7, 408, 2, 409, 7, 409, 2, 410, 7, 410, 2, 411, 7, 411, 2, 412, 7, 412, 2, 413, 7, 413, 2, 414, 7, 414, 2, 415, 7, 415, 2, 416, 7, 416, 2, 417, 7, 417, 2, 418, 7, 418, 2, 419, 7, 419, 2, 420, 7, 420, 2, 421, 7, 421, 2, 422, 7, 422, 2, 423, 7, 423, 2, 424, 7, 424, 2, 425, 7, 425, 1, 0, 5, 0, 854, 8, 0, 10, 0, 12, 0, 857, 9, 0, 1, 0, 1, 0, 1, 1, 3, 1, 862, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 867, 8, 1, 1, 1, 3, 1, 870, 8, 1, 1, 1, 3, 1, 873, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 882, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 890, 8, 3, 10, 3, 12, 3, 893, 9, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 899, 8, 3, 10, 3, 12, 3, 902, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 907, 8, 3, 3, 3, 909, 8, 3, 1, 3, 1, 3, 3, 3, 913, 8, 3, 1, 4, 3, 4, 916, 8, 4, 1, 4, 5, 4, 919, 8, 4, 10, 4, 12, 4, 922, 9, 4, 1, 4, 1, 4, 1, 4, 3, 4, 927, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 963, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 969, 8, 5, 11, 5, 12, 5, 970, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 977, 8, 5, 11, 5, 12, 5, 978, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 985, 8, 5, 11, 5, 12, 5, 986, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 993, 8, 5, 11, 5, 12, 5, 994, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 1005, 8, 5, 10, 5, 12, 5, 1008, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 1018, 8, 5, 10, 5, 12, 5, 1021, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 1031, 8, 5, 11, 5, 12, 5, 1032, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 1043, 8, 5, 11, 5, 12, 5, 1044, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 1054, 8, 5, 11, 5, 12, 5, 1055, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 1064, 8, 5, 11, 5, 12, 5, 1065, 1, 5, 3, 5, 1069, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 1078, 8, 5, 1, 5, 5, 5, 1081, 8, 5, 10, 5, 12, 5, 1084, 9, 5, 3, 5, 1086, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 1092, 8, 6, 10, 6, 12, 6, 1095, 9, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1102, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 1112, 8, 8, 10, 8, 12, 8, 1115, 9, 8, 1, 8, 1, 8, 1, 8, 3, 8, 1120, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 1137, 8, 9, 1, 10, 1, 10, 3, 10, 1141, 8, 10, 1, 10, 1, 10, 3, 10, 1145, 8, 10, 1, 10, 1, 10, 3, 10, 1149, 8, 10, 1, 10, 1, 10, 3, 10, 1153, 8, 10, 1, 10, 1, 10, 3, 10, 1157, 8, 10, 1, 10, 1, 10, 3, 10, 1161, 8, 10, 3, 10, 1163, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 1174, 8, 11, 10, 11, 12, 11, 1177, 9, 11, 1, 11, 1, 11, 3, 11, 1181, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 1193, 8, 11, 10, 11, 12, 11, 1196, 9, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 1204, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 1220, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1236, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 1243, 8, 15, 10, 15, 12, 15, 1246, 9, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1260, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 1275, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 1287, 8, 20, 10, 20, 12, 20, 1290, 9, 20, 1, 20, 3, 20, 1293, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1302, 8, 21, 1, 21, 3, 21, 1305, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 1311, 8, 21, 10, 21, 12, 21, 1314, 9, 21, 1, 21, 1, 21, 3, 21, 1318, 8, 21, 3, 21, 1320, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 1431, 8, 22, 3, 22, 1433, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 1442, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 1451, 8, 23, 3, 23, 1453, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1466, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1475, 8, 25, 3, 25, 1477, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1488, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1494, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1502, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1513, 8, 25, 3, 25, 1515, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1523, 8, 25, 3, 25, 1525, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 1546, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 1554, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1570, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1594, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1610, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1620, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1719, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1728, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 1734, 8, 45, 10, 45, 12, 45, 1737, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1750, 8, 47, 1, 48, 1, 48, 1, 48, 5, 48, 1755, 8, 48, 10, 48, 12, 48, 1758, 9, 48, 1, 49, 1, 49, 1, 49, 5, 49, 1763, 8, 49, 10, 49, 12, 49, 1766, 9, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1777, 8, 50, 10, 50, 12, 50, 1780, 9, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1790, 8, 50, 10, 50, 12, 50, 1793, 9, 50, 1, 50, 3, 50, 1796, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1802, 8, 51, 1, 51, 3, 51, 1805, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1811, 8, 51, 1, 51, 3, 51, 1814, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1820, 8, 51, 1, 51, 1, 51, 3, 51, 1824, 8, 51, 1, 51, 1, 51, 3, 51, 1828, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1834, 8, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1839, 8, 51, 1, 51, 3, 51, 1842, 8, 51, 3, 51, 1844, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 1850, 8, 52, 1, 53, 1, 53, 3, 53, 1854, 8, 53, 1, 53, 1, 53, 3, 53, 1858, 8, 53, 1, 53, 3, 53, 1861, 8, 53, 1, 54, 1, 54, 3, 54, 1865, 8, 54, 1, 54, 5, 54, 1868, 8, 54, 10, 54, 12, 54, 1871, 9, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1878, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1887, 8, 56, 1, 56, 3, 56, 1890, 8, 56, 1, 56, 1, 56, 3, 56, 1894, 8, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 5, 59, 1903, 8, 59, 10, 59, 12, 59, 1906, 9, 59, 1, 60, 3, 60, 1909, 8, 60, 1, 60, 5, 60, 1912, 8, 60, 10, 60, 12, 60, 1915, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 1921, 8, 60, 10, 60, 12, 60, 1924, 9, 60, 1, 61, 1, 61, 1, 61, 3, 61, 1929, 8, 61, 1, 62, 1, 62, 1, 62, 3, 62, 1934, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1940, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1945, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1950, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1955, 8, 62, 1, 62, 1, 62, 3, 62, 1959, 8, 62, 1, 62, 3, 62, 1962, 8, 62, 3, 62, 1964, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1970, 8, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 2006, 8, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 2014, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 2039, 8, 65, 1, 66, 3, 66, 2042, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 5, 67, 2051, 8, 67, 10, 67, 12, 67, 2054, 9, 67, 1, 68, 1, 68, 3, 68, 2058, 8, 68, 1, 69, 1, 69, 1, 69, 3, 69, 2063, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 2072, 8, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 2083, 8, 70, 10, 70, 12, 70, 2086, 9, 70, 1, 70, 1, 70, 3, 70, 2090, 8, 70, 1, 71, 4, 71, 2093, 8, 71, 11, 71, 12, 71, 2094, 1, 72, 1, 72, 3, 72, 2099, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 2104, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 2109, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 2116, 8, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 2142, 8, 74, 1, 74, 1, 74, 5, 74, 2146, 8, 74, 10, 74, 12, 74, 2149, 9, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 2155, 8, 74, 1, 74, 1, 74, 5, 74, 2159, 8, 74, 10, 74, 12, 74, 2162, 9, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 2200, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 2214, 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 2221, 8, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 2234, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 2241, 8, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 2249, 8, 77, 1, 78, 1, 78, 1, 78, 3, 78, 2254, 8, 78, 1, 79, 4, 79, 2257, 8, 79, 11, 79, 12, 79, 2258, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 2265, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 2273, 8, 81, 1, 82, 1, 82, 1, 82, 5, 82, 2278, 8, 82, 10, 82, 12, 82, 2281, 9, 82, 1, 83, 3, 83, 2284, 8, 83, 1, 83, 1, 83, 3, 83, 2288, 8, 83, 1, 83, 3, 83, 2291, 8, 83, 1, 84, 1, 84, 1, 84, 3, 84, 2296, 8, 84, 1, 85, 4, 85, 2299, 8, 85, 11, 85, 12, 85, 2300, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 2310, 8, 87, 1, 87, 3, 87, 2313, 8, 87, 1, 88, 4, 88, 2316, 8, 88, 11, 88, 12, 88, 2317, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 2325, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 2331, 8, 90, 10, 90, 12, 90, 2334, 9, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 3, 92, 2347, 8, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 5, 93, 2355, 8, 93, 10, 93, 12, 93, 2358, 9, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 2392, 8, 94, 1, 95, 1, 95, 1, 95, 5, 95, 2397, 8, 95, 10, 95, 12, 95, 2400, 9, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 5, 97, 2414, 8, 97, 10, 97, 12, 97, 2417, 9, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 5, 98, 2428, 8, 98, 10, 98, 12, 98, 2431, 9, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 5, 99, 2441, 8, 99, 10, 99, 12, 99, 2444, 9, 99, 1, 99, 1, 99, 3, 99, 2448, 8, 99, 1, 100, 1, 100, 5, 100, 2452, 8, 100, 10, 100, 12, 100, 2455, 9, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 2466, 8, 101, 10, 101, 12, 101, 2469, 9, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 2480, 8, 101, 10, 101, 12, 101, 2483, 9, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 2493, 8, 101, 10, 101, 12, 101, 2496, 9, 101, 1, 101, 1, 101, 3, 101, 2500, 8, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 2507, 8, 102, 1, 102, 1, 102, 3, 102, 2511, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 5, 102, 2520, 8, 102, 10, 102, 12, 102, 2523, 9, 102, 1, 102, 1, 102, 3, 102, 2527, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 2537, 8, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 3, 105, 2551, 8, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 5, 106, 2559, 8, 106, 10, 106, 12, 106, 2562, 9, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 5, 107, 2576, 8, 107, 10, 107, 12, 107, 2579, 9, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 2601, 8, 107, 3, 107, 2603, 8, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 2610, 8, 108, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 2616, 8, 109, 1, 109, 3, 109, 2619, 8, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 3, 110, 2633, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 5, 112, 2644, 8, 112, 10, 112, 12, 112, 2647, 9, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 2660, 8, 113, 10, 113, 12, 113, 2663, 9, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 2677, 8, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 2713, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 2728, 8, 116, 1, 117, 1, 117, 1, 117, 5, 117, 2733, 8, 117, 10, 117, 12, 117, 2736, 9, 117, 1, 118, 1, 118, 1, 118, 5, 118, 2741, 8, 118, 10, 118, 12, 118, 2744, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 2750, 8, 119, 1, 119, 1, 119, 3, 119, 2754, 8, 119, 1, 119, 3, 119, 2757, 8, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 2763, 8, 119, 1, 119, 3, 119, 2766, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 2773, 8, 120, 1, 120, 1, 120, 3, 120, 2777, 8, 120, 1, 120, 3, 120, 2780, 8, 120, 1, 120, 1, 120, 1, 120, 3, 120, 2785, 8, 120, 1, 121, 1, 121, 1, 121, 5, 121, 2790, 8, 121, 10, 121, 12, 121, 2793, 9, 121, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 2799, 8, 122, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 5, 125, 2813, 8, 125, 10, 125, 12, 125, 2816, 9, 125, 1, 126, 1, 126, 3, 126, 2820, 8, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 3, 127, 2828, 8, 127, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 2834, 8, 128, 1, 129, 4, 129, 2837, 8, 129, 11, 129, 12, 129, 2838, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 2845, 8, 130, 1, 131, 5, 131, 2848, 8, 131, 10, 131, 12, 131, 2851, 9, 131, 1, 132, 5, 132, 2854, 8, 132, 10, 132, 12, 132, 2857, 9, 132, 1, 132, 1, 132, 3, 132, 2861, 8, 132, 1, 132, 5, 132, 2864, 8, 132, 10, 132, 12, 132, 2867, 9, 132, 1, 132, 1, 132, 3, 132, 2871, 8, 132, 1, 132, 5, 132, 2874, 8, 132, 10, 132, 12, 132, 2877, 9, 132, 1, 132, 1, 132, 3, 132, 2881, 8, 132, 1, 132, 5, 132, 2884, 8, 132, 10, 132, 12, 132, 2887, 9, 132, 1, 132, 1, 132, 3, 132, 2891, 8, 132, 1, 132, 5, 132, 2894, 8, 132, 10, 132, 12, 132, 2897, 9, 132, 1, 132, 1, 132, 3, 132, 2901, 8, 132, 1, 132, 5, 132, 2904, 8, 132, 10, 132, 12, 132, 2907, 9, 132, 1, 132, 1, 132, 3, 132, 2911, 8, 132, 1, 132, 5, 132, 2914, 8, 132, 10, 132, 12, 132, 2917, 9, 132, 1, 132, 1, 132, 3, 132, 2921, 8, 132, 1, 132, 5, 132, 2924, 8, 132, 10, 132, 12, 132, 2927, 9, 132, 1, 132, 1, 132, 3, 132, 2931, 8, 132, 1, 132, 5, 132, 2934, 8, 132, 10, 132, 12, 132, 2937, 9, 132, 1, 132, 1, 132, 3, 132, 2941, 8, 132, 1, 132, 5, 132, 2944, 8, 132, 10, 132, 12, 132, 2947, 9, 132, 1, 132, 1, 132, 3, 132, 2951, 8, 132, 1, 132, 5, 132, 2954, 8, 132, 10, 132, 12, 132, 2957, 9, 132, 1, 132, 1, 132, 3, 132, 2961, 8, 132, 1, 132, 5, 132, 2964, 8, 132, 10, 132, 12, 132, 2967, 9, 132, 1, 132, 1, 132, 3, 132, 2971, 8, 132, 1, 132, 5, 132, 2974, 8, 132, 10, 132, 12, 132, 2977, 9, 132, 1, 132, 1, 132, 3, 132, 2981, 8, 132, 1, 132, 5, 132, 2984, 8, 132, 10, 132, 12, 132, 2987, 9, 132, 1, 132, 1, 132, 3, 132, 2991, 8, 132, 1, 132, 5, 132, 2994, 8, 132, 10, 132, 12, 132, 2997, 9, 132, 1, 132, 1, 132, 3, 132, 3001, 8, 132, 1, 132, 5, 132, 3004, 8, 132, 10, 132, 12, 132, 3007, 9, 132, 1, 132, 1, 132, 3, 132, 3011, 8, 132, 1, 132, 5, 132, 3014, 8, 132, 10, 132, 12, 132, 3017, 9, 132, 1, 132, 1, 132, 3, 132, 3021, 8, 132, 1, 132, 5, 132, 3024, 8, 132, 10, 132, 12, 132, 3027, 9, 132, 1, 132, 1, 132, 3, 132, 3031, 8, 132, 1, 132, 5, 132, 3034, 8, 132, 10, 132, 12, 132, 3037, 9, 132, 1, 132, 1, 132, 3, 132, 3041, 8, 132, 1, 132, 5, 132, 3044, 8, 132, 10, 132, 12, 132, 3047, 9, 132, 1, 132, 1, 132, 3, 132, 3051, 8, 132, 1, 132, 5, 132, 3054, 8, 132, 10, 132, 12, 132, 3057, 9, 132, 1, 132, 1, 132, 3, 132, 3061, 8, 132, 1, 132, 5, 132, 3064, 8, 132, 10, 132, 12, 132, 3067, 9, 132, 1, 132, 1, 132, 3, 132, 3071, 8, 132, 1, 132, 5, 132, 3074, 8, 132, 10, 132, 12, 132, 3077, 9, 132, 1, 132, 1, 132, 3, 132, 3081, 8, 132, 1, 132, 5, 132, 3084, 8, 132, 10, 132, 12, 132, 3087, 9, 132, 1, 132, 1, 132, 3, 132, 3091, 8, 132, 1, 132, 5, 132, 3094, 8, 132, 10, 132, 12, 132, 3097, 9, 132, 1, 132, 1, 132, 3, 132, 3101, 8, 132, 1, 132, 5, 132, 3104, 8, 132, 10, 132, 12, 132, 3107, 9, 132, 1, 132, 1, 132, 3, 132, 3111, 8, 132, 1, 132, 5, 132, 3114, 8, 132, 10, 132, 12, 132, 3117, 9, 132, 1, 132, 1, 132, 3, 132, 3121, 8, 132, 1, 132, 5, 132, 3124, 8, 132, 10, 132, 12, 132, 3127, 9, 132, 1, 132, 1, 132, 3, 132, 3131, 8, 132, 1, 132, 5, 132, 3134, 8, 132, 10, 132, 12, 132, 3137, 9, 132, 1, 132, 1, 132, 3, 132, 3141, 8, 132, 1, 132, 5, 132, 3144, 8, 132, 10, 132, 12, 132, 3147, 9, 132, 1, 132, 1, 132, 3, 132, 3151, 8, 132, 1, 132, 5, 132, 3154, 8, 132, 10, 132, 12, 132, 3157, 9, 132, 1, 132, 1, 132, 3, 132, 3161, 8, 132, 1, 132, 5, 132, 3164, 8, 132, 10, 132, 12, 132, 3167, 9, 132, 1, 132, 1, 132, 3, 132, 3171, 8, 132, 1, 132, 5, 132, 3174, 8, 132, 10, 132, 12, 132, 3177, 9, 132, 1, 132, 1, 132, 3, 132, 3181, 8, 132, 1, 132, 5, 132, 3184, 8, 132, 10, 132, 12, 132, 3187, 9, 132, 1, 132, 1, 132, 3, 132, 3191, 8, 132, 1, 132, 5, 132, 3194, 8, 132, 10, 132, 12, 132, 3197, 9, 132, 1, 132, 1, 132, 3, 132, 3201, 8, 132, 1, 132, 5, 132, 3204, 8, 132, 10, 132, 12, 132, 3207, 9, 132, 1, 132, 1, 132, 3, 132, 3211, 8, 132, 1, 132, 5, 132, 3214, 8, 132, 10, 132, 12, 132, 3217, 9, 132, 1, 132, 1, 132, 3, 132, 3221, 8, 132, 1, 132, 5, 132, 3224, 8, 132, 10, 132, 12, 132, 3227, 9, 132, 1, 132, 1, 132, 3, 132, 3231, 8, 132, 1, 132, 5, 132, 3234, 8, 132, 10, 132, 12, 132, 3237, 9, 132, 1, 132, 1, 132, 3, 132, 3241, 8, 132, 1, 132, 5, 132, 3244, 8, 132, 10, 132, 12, 132, 3247, 9, 132, 1, 132, 1, 132, 3, 132, 3251, 8, 132, 1, 132, 5, 132, 3254, 8, 132, 10, 132, 12, 132, 3257, 9, 132, 1, 132, 1, 132, 3, 132, 3261, 8, 132, 1, 132, 5, 132, 3264, 8, 132, 10, 132, 12, 132, 3267, 9, 132, 1, 132, 1, 132, 3, 132, 3271, 8, 132, 1, 132, 5, 132, 3274, 8, 132, 10, 132, 12, 132, 3277, 9, 132, 1, 132, 1, 132, 3, 132, 3281, 8, 132, 1, 132, 5, 132, 3284, 8, 132, 10, 132, 12, 132, 3287, 9, 132, 1, 132, 1, 132, 3, 132, 3291, 8, 132, 1, 132, 5, 132, 3294, 8, 132, 10, 132, 12, 132, 3297, 9, 132, 1, 132, 1, 132, 3, 132, 3301, 8, 132, 1, 132, 5, 132, 3304, 8, 132, 10, 132, 12, 132, 3307, 9, 132, 1, 132, 1, 132, 3, 132, 3311, 8, 132, 1, 132, 5, 132, 3314, 8, 132, 10, 132, 12, 132, 3317, 9, 132, 1, 132, 1, 132, 3, 132, 3321, 8, 132, 3, 132, 3323, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 3330, 8, 133, 1, 134, 1, 134, 1, 134, 3, 134, 3335, 8, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 3, 135, 3342, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 3348, 8, 135, 1, 135, 3, 135, 3351, 8, 135, 1, 135, 3, 135, 3354, 8, 135, 1, 136, 1, 136, 1, 136, 1, 136, 3, 136, 3360, 8, 136, 1, 136, 3, 136, 3363, 8, 136, 1, 137, 1, 137, 1, 137, 1, 137, 3, 137, 3369, 8, 137, 4, 137, 3371, 8, 137, 11, 137, 12, 137, 3372, 1, 138, 1, 138, 1, 138, 1, 138, 3, 138, 3379, 8, 138, 1, 138, 3, 138, 3382, 8, 138, 1, 138, 3, 138, 3385, 8, 138, 1, 139, 1, 139, 1, 139, 3, 139, 3390, 8, 139, 1, 140, 1, 140, 1, 140, 3, 140, 3395, 8, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3404, 8, 141, 1, 141, 5, 141, 3407, 8, 141, 10, 141, 12, 141, 3410, 9, 141, 1, 141, 3, 141, 3413, 8, 141, 3, 141, 3415, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 5, 141, 3421, 8, 141, 10, 141, 12, 141, 3424, 9, 141, 3, 141, 3426, 8, 141, 1, 141, 1, 141, 3, 141, 3430, 8, 141, 1, 141, 1, 141, 3, 141, 3434, 8, 141, 1, 141, 3, 141, 3437, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3449, 8, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 3471, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 5, 144, 3482, 8, 144, 10, 144, 12, 144, 3485, 9, 144, 1, 144, 1, 144, 3, 144, 3489, 8, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 3, 145, 3499, 8, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 3, 146, 3509, 8, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3514, 8, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 3, 149, 3522, 8, 149, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 3, 151, 3529, 8, 151, 1, 151, 1, 151, 3, 151, 3533, 8, 151, 1, 151, 1, 151, 3, 151, 3537, 8, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 5, 153, 3546, 8, 153, 10, 153, 12, 153, 3549, 9, 153, 1, 153, 1, 153, 1, 153, 1, 153, 3, 153, 3555, 8, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 3, 157, 3569, 8, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 3, 157, 3576, 8, 157, 1, 157, 1, 157, 3, 157, 3580, 8, 157, 1, 158, 1, 158, 3, 158, 3584, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 3592, 8, 158, 1, 158, 1, 158, 3, 158, 3596, 8, 158, 1, 159, 1, 159, 3, 159, 3600, 8, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 3610, 8, 159, 3, 159, 3612, 8, 159, 1, 159, 1, 159, 3, 159, 3616, 8, 159, 1, 159, 3, 159, 3619, 8, 159, 1, 159, 1, 159, 1, 159, 3, 159, 3624, 8, 159, 1, 159, 3, 159, 3627, 8, 159, 1, 159, 3, 159, 3630, 8, 159, 1, 160, 1, 160, 3, 160, 3634, 8, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 3, 160, 3642, 8, 160, 1, 160, 1, 160, 3, 160, 3646, 8, 160, 1, 161, 1, 161, 3, 161, 3650, 8, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 3, 161, 3657, 8, 161, 1, 161, 1, 161, 3, 161, 3661, 8, 161, 1, 162, 1, 162, 3, 162, 3665, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3674, 8, 162, 1, 163, 1, 163, 3, 163, 3678, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 3685, 8, 163, 1, 164, 1, 164, 3, 164, 3689, 8, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 3, 164, 3697, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 3703, 8, 165, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 3709, 8, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 3721, 8, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 3729, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 3736, 8, 168, 1, 169, 1, 169, 3, 169, 3740, 8, 169, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 3746, 8, 169, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 3752, 8, 170, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 3758, 8, 171, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 3764, 8, 172, 1, 173, 1, 173, 1, 173, 5, 173, 3769, 8, 173, 10, 173, 12, 173, 3772, 9, 173, 1, 174, 1, 174, 3, 174, 3776, 8, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 3786, 8, 175, 1, 175, 3, 175, 3789, 8, 175, 1, 175, 1, 175, 3, 175, 3793, 8, 175, 1, 175, 1, 175, 3, 175, 3797, 8, 175, 1, 176, 1, 176, 1, 176, 5, 176, 3802, 8, 176, 10, 176, 12, 176, 3805, 9, 176, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 3811, 8, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 3817, 8, 177, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 3831, 8, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 3838, 8, 180, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 3, 182, 3853, 8, 182, 1, 183, 1, 183, 3, 183, 3857, 8, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 3, 183, 3864, 8, 183, 1, 183, 5, 183, 3867, 8, 183, 10, 183, 12, 183, 3870, 9, 183, 1, 183, 3, 183, 3873, 8, 183, 1, 183, 3, 183, 3876, 8, 183, 1, 183, 3, 183, 3879, 8, 183, 1, 183, 1, 183, 3, 183, 3883, 8, 183, 1, 184, 1, 184, 1, 185, 1, 185, 3, 185, 3889, 8, 185, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 3, 189, 3907, 8, 189, 1, 189, 1, 189, 1, 189, 3, 189, 3912, 8, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 3920, 8, 189, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 3939, 8, 191, 1, 192, 1, 192, 3, 192, 3943, 8, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 3950, 8, 192, 1, 192, 3, 192, 3953, 8, 192, 1, 192, 3, 192, 3956, 8, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 3963, 8, 193, 10, 193, 12, 193, 3966, 9, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 3, 196, 3979, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 3989, 8, 196, 1, 197, 1, 197, 3, 197, 3993, 8, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 3, 197, 4003, 8, 197, 1, 198, 1, 198, 3, 198, 4007, 8, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 4014, 8, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 4086, 8, 200, 3, 200, 4088, 8, 200, 1, 200, 3, 200, 4091, 8, 200, 1, 201, 1, 201, 1, 201, 5, 201, 4096, 8, 201, 10, 201, 12, 201, 4099, 9, 201, 1, 202, 1, 202, 3, 202, 4103, 8, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 3, 204, 4133, 8, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 5, 208, 4154, 8, 208, 10, 208, 12, 208, 4157, 9, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 4167, 8, 210, 1, 211, 1, 211, 1, 211, 5, 211, 4172, 8, 211, 10, 211, 12, 211, 4175, 9, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 3, 214, 4191, 8, 214, 1, 214, 3, 214, 4194, 8, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 4, 215, 4201, 8, 215, 11, 215, 12, 215, 4202, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 5, 217, 4211, 8, 217, 10, 217, 12, 217, 4214, 9, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 5, 219, 4223, 8, 219, 10, 219, 12, 219, 4226, 9, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 5, 221, 4235, 8, 221, 10, 221, 12, 221, 4238, 9, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 3, 223, 4248, 8, 223, 1, 223, 3, 223, 4251, 8, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 5, 226, 4262, 8, 226, 10, 226, 12, 226, 4265, 9, 226, 1, 227, 1, 227, 1, 227, 5, 227, 4270, 8, 227, 10, 227, 12, 227, 4273, 9, 227, 1, 228, 1, 228, 1, 228, 3, 228, 4278, 8, 228, 1, 229, 1, 229, 1, 229, 1, 229, 3, 229, 4284, 8, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 3, 230, 4292, 8, 230, 1, 231, 1, 231, 1, 231, 5, 231, 4297, 8, 231, 10, 231, 12, 231, 4300, 9, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 3, 232, 4307, 8, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 3, 233, 4314, 8, 233, 1, 234, 1, 234, 1, 234, 5, 234, 4319, 8, 234, 10, 234, 12, 234, 4322, 9, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 5, 236, 4331, 8, 236, 10, 236, 12, 236, 4334, 9, 236, 3, 236, 4336, 8, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 5, 238, 4346, 8, 238, 10, 238, 12, 238, 4349, 9, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 3, 239, 4372, 8, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 3, 239, 4380, 8, 239, 1, 240, 1, 240, 1, 240, 1, 240, 5, 240, 4386, 8, 240, 10, 240, 12, 240, 4389, 9, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 3, 241, 4408, 8, 241, 1, 242, 1, 242, 5, 242, 4412, 8, 242, 10, 242, 12, 242, 4415, 9, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 3, 243, 4422, 8, 243, 1, 244, 1, 244, 1, 244, 3, 244, 4427, 8, 244, 1, 244, 3, 244, 4430, 8, 244, 1, 244, 1, 244, 1, 244, 1, 244, 3, 244, 4436, 8, 244, 1, 244, 3, 244, 4439, 8, 244, 1, 244, 1, 244, 1, 244, 1, 244, 3, 244, 4445, 8, 244, 1, 244, 3, 244, 4448, 8, 244, 3, 244, 4450, 8, 244, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 5, 246, 4458, 8, 246, 10, 246, 12, 246, 4461, 9, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 3, 247, 4559, 8, 247, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 5, 249, 4567, 8, 249, 10, 249, 12, 249, 4570, 9, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4580, 8, 250, 1, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4586, 8, 250, 1, 250, 5, 250, 4589, 8, 250, 10, 250, 12, 250, 4592, 9, 250, 1, 250, 3, 250, 4595, 8, 250, 3, 250, 4597, 8, 250, 1, 250, 1, 250, 1, 250, 1, 250, 5, 250, 4603, 8, 250, 10, 250, 12, 250, 4606, 9, 250, 3, 250, 4608, 8, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4613, 8, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4618, 8, 250, 1, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4624, 8, 250, 1, 251, 1, 251, 1, 251, 5, 251, 4629, 8, 251, 10, 251, 12, 251, 4632, 9, 251, 1, 252, 1, 252, 3, 252, 4636, 8, 252, 1, 252, 1, 252, 3, 252, 4640, 8, 252, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4646, 8, 252, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4652, 8, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4657, 8, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4662, 8, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4667, 8, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4674, 8, 252, 1, 253, 1, 253, 1, 253, 1, 253, 5, 253, 4680, 8, 253, 10, 253, 12, 253, 4683, 9, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 3, 254, 4693, 8, 254, 1, 255, 1, 255, 1, 255, 3, 255, 4698, 8, 255, 1, 255, 1, 255, 1, 255, 1, 255, 3, 255, 4704, 8, 255, 5, 255, 4706, 8, 255, 10, 255, 12, 255, 4709, 9, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 3, 256, 4717, 8, 256, 3, 256, 4719, 8, 256, 3, 256, 4721, 8, 256, 1, 257, 1, 257, 1, 257, 1, 257, 5, 257, 4727, 8, 257, 10, 257, 12, 257, 4730, 9, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 260, 1, 260, 1, 261, 1, 261, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 5, 263, 4763, 8, 263, 10, 263, 12, 263, 4766, 9, 263, 3, 263, 4768, 8, 263, 1, 263, 3, 263, 4771, 8, 263, 1, 264, 1, 264, 1, 264, 1, 264, 5, 264, 4777, 8, 264, 10, 264, 12, 264, 4780, 9, 264, 1, 264, 1, 264, 1, 264, 1, 264, 3, 264, 4786, 8, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 3, 265, 4797, 8, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 3, 267, 4806, 8, 267, 1, 267, 1, 267, 5, 267, 4810, 8, 267, 10, 267, 12, 267, 4813, 9, 267, 1, 267, 1, 267, 1, 268, 4, 268, 4818, 8, 268, 11, 268, 12, 268, 4819, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 3, 270, 4829, 8, 270, 1, 271, 1, 271, 1, 271, 1, 271, 4, 271, 4835, 8, 271, 11, 271, 12, 271, 4836, 1, 271, 1, 271, 5, 271, 4841, 8, 271, 10, 271, 12, 271, 4844, 9, 271, 1, 271, 3, 271, 4847, 8, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 3, 272, 4856, 8, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 3, 272, 4868, 8, 272, 1, 272, 1, 272, 1, 272, 1, 272, 3, 272, 4874, 8, 272, 3, 272, 4876, 8, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 3, 273, 4889, 8, 273, 5, 273, 4891, 8, 273, 10, 273, 12, 273, 4894, 9, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 5, 273, 4903, 8, 273, 10, 273, 12, 273, 4906, 9, 273, 1, 273, 1, 273, 3, 273, 4910, 8, 273, 3, 273, 4912, 8, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4927, 8, 275, 1, 276, 4, 276, 4930, 8, 276, 11, 276, 12, 276, 4931, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 3, 277, 4941, 8, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 5, 278, 4948, 8, 278, 10, 278, 12, 278, 4951, 9, 278, 3, 278, 4953, 8, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 5, 279, 4962, 8, 279, 10, 279, 12, 279, 4965, 9, 279, 1, 279, 1, 279, 1, 279, 5, 279, 4970, 8, 279, 10, 279, 12, 279, 4973, 9, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 5, 280, 5001, 8, 280, 10, 280, 12, 280, 5004, 9, 280, 1, 280, 1, 280, 3, 280, 5008, 8, 280, 1, 281, 3, 281, 5011, 8, 281, 1, 281, 1, 281, 1, 281, 3, 281, 5016, 8, 281, 1, 281, 1, 281, 1, 281, 1, 281, 5, 281, 5022, 8, 281, 10, 281, 12, 281, 5025, 9, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 5, 282, 5051, 8, 282, 10, 282, 12, 282, 5054, 9, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 5, 282, 5064, 8, 282, 10, 282, 12, 282, 5067, 9, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 5, 282, 5088, 8, 282, 10, 282, 12, 282, 5091, 9, 282, 1, 282, 3, 282, 5094, 8, 282, 3, 282, 5096, 8, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 3, 284, 5109, 8, 284, 1, 285, 1, 285, 1, 285, 1, 285, 3, 285, 5115, 8, 285, 1, 285, 3, 285, 5118, 8, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 5, 285, 5127, 8, 285, 10, 285, 12, 285, 5130, 9, 285, 1, 285, 3, 285, 5133, 8, 285, 1, 285, 3, 285, 5136, 8, 285, 3, 285, 5138, 8, 285, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 5, 287, 5150, 8, 287, 10, 287, 12, 287, 5153, 9, 287, 1, 287, 1, 287, 1, 287, 5, 287, 5158, 8, 287, 10, 287, 12, 287, 5161, 9, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 5, 289, 5173, 8, 289, 10, 289, 12, 289, 5176, 9, 289, 1, 289, 1, 289, 1, 290, 1, 290, 3, 290, 5182, 8, 290, 1, 290, 1, 290, 1, 290, 3, 290, 5187, 8, 290, 1, 290, 1, 290, 1, 290, 3, 290, 5192, 8, 290, 1, 290, 1, 290, 1, 290, 3, 290, 5197, 8, 290, 1, 290, 1, 290, 3, 290, 5201, 8, 290, 1, 290, 3, 290, 5204, 8, 290, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 5, 293, 5223, 8, 293, 10, 293, 12, 293, 5226, 9, 293, 1, 293, 1, 293, 3, 293, 5230, 8, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 5, 294, 5239, 8, 294, 10, 294, 12, 294, 5242, 9, 294, 1, 294, 1, 294, 3, 294, 5246, 8, 294, 1, 294, 1, 294, 5, 294, 5250, 8, 294, 10, 294, 12, 294, 5253, 9, 294, 1, 294, 3, 294, 5256, 8, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 3, 295, 5264, 8, 295, 1, 295, 1, 295, 1, 295, 3, 295, 5269, 8, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 5, 298, 5283, 8, 298, 10, 298, 12, 298, 5286, 9, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 3, 299, 5293, 8, 299, 1, 299, 3, 299, 5296, 8, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 3, 300, 5303, 8, 300, 1, 300, 1, 300, 1, 300, 1, 300, 5, 300, 5309, 8, 300, 10, 300, 12, 300, 5312, 9, 300, 1, 300, 1, 300, 3, 300, 5316, 8, 300, 1, 300, 3, 300, 5319, 8, 300, 1, 300, 3, 300, 5322, 8, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 5, 301, 5330, 8, 301, 10, 301, 12, 301, 5333, 9, 301, 3, 301, 5335, 8, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 3, 302, 5342, 8, 302, 1, 302, 3, 302, 5345, 8, 302, 1, 303, 1, 303, 1, 303, 1, 303, 5, 303, 5351, 8, 303, 10, 303, 12, 303, 5354, 9, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 5, 304, 5369, 8, 304, 10, 304, 12, 304, 5372, 9, 304, 1, 304, 1, 304, 1, 304, 3, 304, 5377, 8, 304, 1, 304, 3, 304, 5380, 8, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 3, 305, 5389, 8, 305, 3, 305, 5391, 8, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 5, 305, 5398, 8, 305, 10, 305, 12, 305, 5401, 9, 305, 1, 305, 1, 305, 3, 305, 5405, 8, 305, 1, 306, 1, 306, 1, 306, 3, 306, 5410, 8, 306, 1, 306, 5, 306, 5413, 8, 306, 10, 306, 12, 306, 5416, 9, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 5, 307, 5423, 8, 307, 10, 307, 12, 307, 5426, 9, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 5, 309, 5442, 8, 309, 10, 309, 12, 309, 5445, 9, 309, 1, 309, 1, 309, 1, 309, 4, 309, 5450, 8, 309, 11, 309, 12, 309, 5451, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 5, 310, 5462, 8, 310, 10, 310, 12, 310, 5465, 9, 310, 1, 310, 1, 310, 1, 310, 1, 310, 3, 310, 5471, 8, 310, 1, 310, 1, 310, 3, 310, 5475, 8, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 311, 1, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5489, 8, 312, 1, 312, 1, 312, 3, 312, 5493, 8, 312, 1, 312, 1, 312, 3, 312, 5497, 8, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5502, 8, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5507, 8, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5512, 8, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5519, 8, 312, 1, 312, 3, 312, 5522, 8, 312, 1, 313, 5, 313, 5525, 8, 313, 10, 313, 12, 313, 5528, 9, 313, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 3, 314, 5557, 8, 314, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 3, 315, 5565, 8, 315, 1, 315, 1, 315, 3, 315, 5569, 8, 315, 1, 315, 1, 315, 3, 315, 5573, 8, 315, 1, 315, 1, 315, 3, 315, 5577, 8, 315, 1, 315, 1, 315, 3, 315, 5581, 8, 315, 1, 315, 1, 315, 3, 315, 5585, 8, 315, 1, 315, 1, 315, 1, 315, 3, 315, 5590, 8, 315, 1, 315, 1, 315, 3, 315, 5594, 8, 315, 1, 315, 1, 315, 4, 315, 5598, 8, 315, 11, 315, 12, 315, 5599, 3, 315, 5602, 8, 315, 1, 315, 1, 315, 1, 315, 4, 315, 5607, 8, 315, 11, 315, 12, 315, 5608, 3, 315, 5611, 8, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 3, 315, 5620, 8, 315, 1, 315, 1, 315, 3, 315, 5624, 8, 315, 1, 315, 1, 315, 3, 315, 5628, 8, 315, 1, 315, 1, 315, 3, 315, 5632, 8, 315, 1, 315, 1, 315, 3, 315, 5636, 8, 315, 1, 315, 1, 315, 3, 315, 5640, 8, 315, 1, 315, 1, 315, 1, 315, 3, 315, 5645, 8, 315, 1, 315, 1, 315, 3, 315, 5649, 8, 315, 1, 315, 1, 315, 4, 315, 5653, 8, 315, 11, 315, 12, 315, 5654, 3, 315, 5657, 8, 315, 1, 315, 1, 315, 1, 315, 4, 315, 5662, 8, 315, 11, 315, 12, 315, 5663, 3, 315, 5666, 8, 315, 3, 315, 5668, 8, 315, 1, 316, 1, 316, 1, 316, 3, 316, 5673, 8, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 5679, 8, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 5685, 8, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 5691, 8, 316, 1, 316, 1, 316, 3, 316, 5695, 8, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 5701, 8, 316, 3, 316, 5703, 8, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 3, 318, 5715, 8, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 5, 318, 5722, 8, 318, 10, 318, 12, 318, 5725, 9, 318, 1, 318, 1, 318, 3, 318, 5729, 8, 318, 1, 318, 1, 318, 4, 318, 5733, 8, 318, 11, 318, 12, 318, 5734, 3, 318, 5737, 8, 318, 1, 318, 1, 318, 1, 318, 4, 318, 5742, 8, 318, 11, 318, 12, 318, 5743, 3, 318, 5746, 8, 318, 1, 319, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 3, 320, 5757, 8, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 5, 320, 5764, 8, 320, 10, 320, 12, 320, 5767, 9, 320, 1, 320, 1, 320, 3, 320, 5771, 8, 320, 1, 321, 1, 321, 3, 321, 5775, 8, 321, 1, 321, 1, 321, 3, 321, 5779, 8, 321, 1, 321, 1, 321, 4, 321, 5783, 8, 321, 11, 321, 12, 321, 5784, 3, 321, 5787, 8, 321, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 323, 1, 323, 1, 323, 1, 323, 3, 323, 5799, 8, 323, 1, 323, 4, 323, 5802, 8, 323, 11, 323, 12, 323, 5803, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 5817, 8, 325, 1, 326, 1, 326, 1, 326, 1, 326, 3, 326, 5823, 8, 326, 1, 326, 1, 326, 3, 326, 5827, 8, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 3, 327, 5834, 8, 327, 1, 327, 1, 327, 1, 327, 4, 327, 5839, 8, 327, 11, 327, 12, 327, 5840, 3, 327, 5843, 8, 327, 1, 328, 1, 328, 1, 328, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 3, 329, 5922, 8, 329, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 3, 330, 5941, 8, 330, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 3, 331, 5956, 8, 331, 1, 332, 1, 332, 1, 332, 3, 332, 5961, 8, 332, 1, 332, 1, 332, 1, 332, 3, 332, 5966, 8, 332, 3, 332, 5968, 8, 332, 1, 333, 1, 333, 1, 333, 1, 333, 5, 333, 5974, 8, 333, 10, 333, 12, 333, 5977, 9, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 3, 333, 5984, 8, 333, 1, 333, 1, 333, 1, 333, 3, 333, 5989, 8, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 3, 333, 5997, 8, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 5, 333, 6004, 8, 333, 10, 333, 12, 333, 6007, 9, 333, 3, 333, 6009, 8, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 335, 1, 335, 1, 336, 1, 336, 1, 336, 1, 336, 3, 336, 6021, 8, 336, 1, 337, 1, 337, 1, 337, 1, 337, 3, 337, 6027, 8, 337, 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6063, 8, 339, 3, 339, 6065, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6072, 8, 339, 3, 339, 6074, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6081, 8, 339, 3, 339, 6083, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6090, 8, 339, 3, 339, 6092, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6099, 8, 339, 3, 339, 6101, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6108, 8, 339, 3, 339, 6110, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6117, 8, 339, 3, 339, 6119, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6126, 8, 339, 3, 339, 6128, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6135, 8, 339, 3, 339, 6137, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6145, 8, 339, 3, 339, 6147, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6154, 8, 339, 3, 339, 6156, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6163, 8, 339, 3, 339, 6165, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6173, 8, 339, 3, 339, 6175, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6183, 8, 339, 3, 339, 6185, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6193, 8, 339, 3, 339, 6195, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6202, 8, 339, 3, 339, 6204, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6211, 8, 339, 3, 339, 6213, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6221, 8, 339, 3, 339, 6223, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6232, 8, 339, 3, 339, 6234, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6242, 8, 339, 3, 339, 6244, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6252, 8, 339, 3, 339, 6254, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6262, 8, 339, 3, 339, 6264, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6300, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6307, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6325, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6330, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6342, 8, 339, 3, 339, 6344, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6383, 8, 339, 3, 339, 6385, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6393, 8, 339, 3, 339, 6395, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6403, 8, 339, 3, 339, 6405, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6413, 8, 339, 3, 339, 6415, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6423, 8, 339, 3, 339, 6425, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6435, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6446, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6452, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6457, 8, 339, 3, 339, 6459, 8, 339, 1, 339, 3, 339, 6462, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6471, 8, 339, 3, 339, 6473, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6482, 8, 339, 3, 339, 6484, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6492, 8, 339, 3, 339, 6494, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6508, 8, 339, 3, 339, 6510, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6518, 8, 339, 3, 339, 6520, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6529, 8, 339, 3, 339, 6531, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6539, 8, 339, 3, 339, 6541, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6550, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6564, 8, 339, 1, 340, 1, 340, 1, 340, 1, 340, 5, 340, 6570, 8, 340, 10, 340, 12, 340, 6573, 9, 340, 1, 340, 1, 340, 1, 340, 3, 340, 6578, 8, 340, 3, 340, 6580, 8, 340, 1, 340, 1, 340, 1, 340, 3, 340, 6585, 8, 340, 3, 340, 6587, 8, 340, 1, 341, 1, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 3, 342, 6597, 8, 342, 1, 343, 1, 343, 1, 343, 1, 343, 1, 344, 1, 344, 1, 344, 1, 344, 3, 344, 6607, 8, 344, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6615, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6623, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6672, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6702, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6711, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6791, 8, 345, 1, 346, 1, 346, 3, 346, 6795, 8, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 3, 346, 6803, 8, 346, 1, 346, 3, 346, 6806, 8, 346, 1, 346, 5, 346, 6809, 8, 346, 10, 346, 12, 346, 6812, 9, 346, 1, 346, 1, 346, 3, 346, 6816, 8, 346, 1, 346, 1, 346, 1, 346, 1, 346, 3, 346, 6822, 8, 346, 3, 346, 6824, 8, 346, 1, 346, 1, 346, 3, 346, 6828, 8, 346, 1, 346, 1, 346, 3, 346, 6832, 8, 346, 1, 346, 1, 346, 3, 346, 6836, 8, 346, 1, 347, 3, 347, 6839, 8, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 3, 347, 6846, 8, 347, 1, 347, 3, 347, 6849, 8, 347, 1, 347, 1, 347, 3, 347, 6853, 8, 347, 1, 348, 1, 348, 1, 349, 1, 349, 1, 349, 3, 349, 6860, 8, 349, 1, 349, 5, 349, 6863, 8, 349, 10, 349, 12, 349, 6866, 9, 349, 1, 350, 1, 350, 3, 350, 6870, 8, 350, 1, 350, 3, 350, 6873, 8, 350, 1, 350, 3, 350, 6876, 8, 350, 1, 350, 3, 350, 6879, 8, 350, 1, 350, 3, 350, 6882, 8, 350, 1, 350, 3, 350, 6885, 8, 350, 1, 350, 1, 350, 3, 350, 6889, 8, 350, 1, 350, 3, 350, 6892, 8, 350, 1, 350, 3, 350, 6895, 8, 350, 1, 350, 1, 350, 3, 350, 6899, 8, 350, 1, 350, 3, 350, 6902, 8, 350, 3, 350, 6904, 8, 350, 1, 351, 1, 351, 3, 351, 6908, 8, 351, 1, 351, 1, 351, 1, 352, 1, 352, 1, 352, 1, 352, 5, 352, 6916, 8, 352, 10, 352, 12, 352, 6919, 9, 352, 3, 352, 6921, 8, 352, 1, 353, 1, 353, 1, 353, 3, 353, 6926, 8, 353, 1, 353, 1, 353, 1, 353, 3, 353, 6931, 8, 353, 3, 353, 6933, 8, 353, 1, 354, 1, 354, 3, 354, 6937, 8, 354, 1, 355, 1, 355, 1, 355, 5, 355, 6942, 8, 355, 10, 355, 12, 355, 6945, 9, 355, 1, 356, 1, 356, 3, 356, 6949, 8, 356, 1, 356, 3, 356, 6952, 8, 356, 1, 356, 1, 356, 1, 356, 1, 356, 3, 356, 6958, 8, 356, 1, 356, 3, 356, 6961, 8, 356, 3, 356, 6963, 8, 356, 1, 357, 3, 357, 6966, 8, 357, 1, 357, 1, 357, 1, 357, 1, 357, 3, 357, 6972, 8, 357, 1, 357, 3, 357, 6975, 8, 357, 1, 357, 1, 357, 1, 357, 3, 357, 6980, 8, 357, 1, 357, 3, 357, 6983, 8, 357, 3, 357, 6985, 8, 357, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 3, 358, 6997, 8, 358, 1, 359, 1, 359, 3, 359, 7001, 8, 359, 1, 359, 1, 359, 3, 359, 7005, 8, 359, 1, 359, 1, 359, 1, 359, 3, 359, 7010, 8, 359, 1, 359, 3, 359, 7013, 8, 359, 1, 360, 1, 360, 1, 360, 1, 361, 1, 361, 1, 361, 1, 362, 1, 362, 1, 362, 1, 363, 1, 363, 1, 363, 1, 364, 1, 364, 1, 364, 5, 364, 7030, 8, 364, 10, 364, 12, 364, 7033, 9, 364, 1, 365, 1, 365, 3, 365, 7037, 8, 365, 1, 366, 1, 366, 1, 366, 5, 366, 7042, 8, 366, 10, 366, 12, 366, 7045, 9, 366, 1, 367, 1, 367, 1, 367, 1, 367, 3, 367, 7051, 8, 367, 1, 367, 1, 367, 1, 367, 1, 367, 3, 367, 7057, 8, 367, 3, 367, 7059, 8, 367, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 3, 368, 7077, 8, 368, 1, 369, 1, 369, 1, 369, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 3, 370, 7088, 8, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 3, 370, 7103, 8, 370, 3, 370, 7105, 8, 370, 1, 371, 1, 371, 1, 372, 1, 372, 1, 372, 1, 372, 3, 372, 7113, 8, 372, 1, 372, 3, 372, 7116, 8, 372, 1, 372, 3, 372, 7119, 8, 372, 1, 372, 3, 372, 7122, 8, 372, 1, 372, 3, 372, 7125, 8, 372, 1, 373, 1, 373, 1, 374, 1, 374, 1, 375, 1, 375, 1, 375, 1, 375, 1, 376, 1, 376, 1, 376, 1, 376, 1, 377, 1, 377, 3, 377, 7141, 8, 377, 1, 377, 1, 377, 3, 377, 7145, 8, 377, 1, 377, 1, 377, 1, 377, 3, 377, 7150, 8, 377, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 3, 378, 7158, 8, 378, 1, 379, 1, 379, 1, 380, 1, 380, 1, 380, 1, 380, 3, 380, 7166, 8, 380, 1, 381, 1, 381, 1, 381, 5, 381, 7171, 8, 381, 10, 381, 12, 381, 7174, 9, 381, 1, 382, 1, 382, 1, 383, 1, 383, 1, 383, 1, 384, 1, 384, 1, 384, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 5, 385, 7214, 8, 385, 10, 385, 12, 385, 7217, 9, 385, 1, 385, 1, 385, 3, 385, 7221, 8, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 5, 385, 7228, 8, 385, 10, 385, 12, 385, 7231, 9, 385, 1, 385, 1, 385, 3, 385, 7235, 8, 385, 1, 385, 3, 385, 7238, 8, 385, 1, 385, 1, 385, 1, 385, 3, 385, 7243, 8, 385, 1, 386, 4, 386, 7246, 8, 386, 11, 386, 12, 386, 7247, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 5, 387, 7262, 8, 387, 10, 387, 12, 387, 7265, 9, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 5, 387, 7273, 8, 387, 10, 387, 12, 387, 7276, 9, 387, 1, 387, 1, 387, 3, 387, 7280, 8, 387, 1, 387, 1, 387, 3, 387, 7284, 8, 387, 1, 387, 1, 387, 3, 387, 7288, 8, 387, 1, 388, 1, 388, 1, 388, 1, 388, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 3, 389, 7304, 8, 389, 1, 390, 1, 390, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 392, 1, 392, 1, 393, 1, 393, 1, 393, 5, 393, 7321, 8, 393, 10, 393, 12, 393, 7324, 9, 393, 1, 394, 1, 394, 1, 394, 5, 394, 7329, 8, 394, 10, 394, 12, 394, 7332, 9, 394, 1, 395, 3, 395, 7335, 8, 395, 1, 395, 1, 395, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7349, 8, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7354, 8, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7362, 8, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7368, 8, 396, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, 5, 398, 7375, 8, 398, 10, 398, 12, 398, 7378, 9, 398, 1, 399, 1, 399, 1, 399, 5, 399, 7383, 8, 399, 10, 399, 12, 399, 7386, 9, 399, 1, 400, 3, 400, 7389, 8, 400, 1, 400, 1, 400, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 3, 401, 7414, 8, 401, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 4, 402, 7422, 8, 402, 11, 402, 12, 402, 7423, 1, 402, 1, 402, 3, 402, 7428, 8, 402, 1, 402, 1, 402, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 405, 1, 405, 1, 406, 1, 406, 1, 406, 3, 406, 7451, 8, 406, 1, 406, 1, 406, 3, 406, 7455, 8, 406, 1, 406, 1, 406, 1, 407, 1, 407, 1, 407, 3, 407, 7462, 8, 407, 1, 407, 1, 407, 1, 408, 1, 408, 1, 409, 1, 409, 1, 409, 5, 409, 7471, 8, 409, 10, 409, 12, 409, 7474, 9, 409, 1, 410, 1, 410, 1, 410, 1, 410, 5, 410, 7480, 8, 410, 10, 410, 12, 410, 7483, 9, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 3, 410, 7490, 8, 410, 1, 411, 1, 411, 1, 411, 5, 411, 7495, 8, 411, 10, 411, 12, 411, 7498, 9, 411, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 5, 412, 7508, 8, 412, 10, 412, 12, 412, 7511, 9, 412, 1, 412, 1, 412, 1, 413, 1, 413, 1, 413, 3, 413, 7518, 8, 413, 1, 414, 1, 414, 1, 414, 5, 414, 7523, 8, 414, 10, 414, 12, 414, 7526, 9, 414, 1, 415, 1, 415, 1, 415, 3, 415, 7531, 8, 415, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 3, 416, 7538, 8, 416, 1, 417, 1, 417, 1, 417, 1, 417, 5, 417, 7544, 8, 417, 10, 417, 12, 417, 7547, 9, 417, 3, 417, 7549, 8, 417, 1, 417, 1, 417, 1, 418, 1, 418, 1, 419, 1, 419, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 3, 420, 7564, 8, 420, 1, 421, 1, 421, 1, 422, 1, 422, 1, 422, 5, 422, 7571, 8, 422, 10, 422, 12, 422, 7574, 9, 422, 1, 423, 1, 423, 1, 423, 1, 423, 3, 423, 7580, 8, 423, 1, 424, 1, 424, 1, 424, 3, 424, 7585, 8, 424, 1, 425, 1, 425, 1, 425, 0, 0, 426, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 0, 59, 2, 0, 22, 22, 454, 454, 1, 0, 33, 34, 2, 0, 30, 30, 33, 33, 5, 0, 23, 23, 27, 28, 30, 31, 33, 33, 37, 37, 2, 0, 478, 479, 515, 515, 2, 0, 94, 94, 515, 515, 1, 0, 414, 415, 2, 0, 17, 17, 101, 103, 2, 0, 568, 568, 570, 570, 2, 0, 424, 424, 458, 458, 1, 0, 95, 96, 2, 0, 12, 12, 44, 44, 2, 0, 313, 313, 449, 449, 2, 0, 39, 39, 52, 52, 2, 0, 14, 16, 54, 55, 2, 0, 566, 566, 572, 572, 1, 0, 566, 567, 2, 0, 545, 545, 551, 551, 3, 0, 70, 70, 136, 139, 320, 320, 2, 0, 86, 86, 569, 569, 2, 0, 101, 101, 354, 357, 2, 0, 566, 566, 570, 570, 1, 0, 569, 570, 1, 0, 303, 304, 6, 0, 303, 305, 536, 541, 545, 545, 549, 553, 556, 557, 565, 569, 4, 0, 129, 129, 305, 305, 314, 315, 570, 571, 12, 0, 39, 39, 149, 158, 161, 163, 165, 166, 168, 168, 170, 177, 181, 181, 183, 188, 197, 198, 229, 229, 240, 245, 265, 265, 3, 0, 129, 129, 141, 141, 570, 570, 3, 0, 269, 275, 424, 424, 570, 570, 4, 0, 136, 137, 260, 264, 313, 313, 570, 570, 2, 0, 220, 220, 568, 568, 1, 0, 446, 448, 3, 0, 276, 276, 349, 349, 351, 352, 2, 0, 72, 72, 77, 77, 2, 0, 545, 545, 566, 566, 2, 0, 361, 361, 467, 467, 2, 0, 358, 358, 570, 570, 1, 0, 516, 517, 2, 0, 313, 315, 566, 566, 3, 0, 231, 231, 405, 405, 570, 570, 1, 0, 65, 66, 8, 0, 149, 155, 161, 163, 166, 166, 170, 177, 197, 198, 229, 229, 240, 245, 570, 570, 2, 0, 309, 309, 539, 539, 1, 0, 85, 86, 8, 0, 144, 146, 190, 190, 195, 195, 227, 227, 332, 332, 400, 401, 403, 406, 570, 570, 2, 0, 349, 349, 424, 425, 1, 0, 570, 571, 2, 1, 545, 545, 549, 549, 1, 0, 536, 541, 1, 0, 542, 543, 2, 0, 544, 548, 558, 558, 1, 0, 276, 281, 1, 0, 294, 298, 7, 0, 124, 124, 129, 129, 141, 141, 188, 188, 294, 300, 314, 315, 570, 571, 1, 0, 349, 350, 1, 0, 522, 523, 1, 0, 314, 315, 7, 0, 49, 49, 191, 192, 222, 222, 319, 319, 429, 429, 503, 503, 570, 570, 3, 0, 5, 462, 464, 535, 547, 548, 8606, 0, 855, 1, 0, 0, 0, 2, 861, 1, 0, 0, 0, 4, 881, 1, 0, 0, 0, 6, 883, 1, 0, 0, 0, 8, 915, 1, 0, 0, 0, 10, 1085, 1, 0, 0, 0, 12, 1101, 1, 0, 0, 0, 14, 1103, 1, 0, 0, 0, 16, 1119, 1, 0, 0, 0, 18, 1136, 1, 0, 0, 0, 20, 1162, 1, 0, 0, 0, 22, 1203, 1, 0, 0, 0, 24, 1205, 1, 0, 0, 0, 26, 1219, 1, 0, 0, 0, 28, 1235, 1, 0, 0, 0, 30, 1237, 1, 0, 0, 0, 32, 1247, 1, 0, 0, 0, 34, 1259, 1, 0, 0, 0, 36, 1261, 1, 0, 0, 0, 38, 1265, 1, 0, 0, 0, 40, 1292, 1, 0, 0, 0, 42, 1319, 1, 0, 0, 0, 44, 1432, 1, 0, 0, 0, 46, 1452, 1, 0, 0, 0, 48, 1454, 1, 0, 0, 0, 50, 1524, 1, 0, 0, 0, 52, 1545, 1, 0, 0, 0, 54, 1547, 1, 0, 0, 0, 56, 1555, 1, 0, 0, 0, 58, 1560, 1, 0, 0, 0, 60, 1593, 1, 0, 0, 0, 62, 1595, 1, 0, 0, 0, 64, 1600, 1, 0, 0, 0, 66, 1611, 1, 0, 0, 0, 68, 1621, 1, 0, 0, 0, 70, 1629, 1, 0, 0, 0, 72, 1637, 1, 0, 0, 0, 74, 1645, 1, 0, 0, 0, 76, 1653, 1, 0, 0, 0, 78, 1661, 1, 0, 0, 0, 80, 1669, 1, 0, 0, 0, 82, 1678, 1, 0, 0, 0, 84, 1687, 1, 0, 0, 0, 86, 1697, 1, 0, 0, 0, 88, 1718, 1, 0, 0, 0, 90, 1720, 1, 0, 0, 0, 92, 1740, 1, 0, 0, 0, 94, 1745, 1, 0, 0, 0, 96, 1751, 1, 0, 0, 0, 98, 1759, 1, 0, 0, 0, 100, 1795, 1, 0, 0, 0, 102, 1843, 1, 0, 0, 0, 104, 1849, 1, 0, 0, 0, 106, 1860, 1, 0, 0, 0, 108, 1862, 1, 0, 0, 0, 110, 1877, 1, 0, 0, 0, 112, 1879, 1, 0, 0, 0, 114, 1895, 1, 0, 0, 0, 116, 1897, 1, 0, 0, 0, 118, 1899, 1, 0, 0, 0, 120, 1908, 1, 0, 0, 0, 122, 1928, 1, 0, 0, 0, 124, 1963, 1, 0, 0, 0, 126, 2005, 1, 0, 0, 0, 128, 2007, 1, 0, 0, 0, 130, 2038, 1, 0, 0, 0, 132, 2041, 1, 0, 0, 0, 134, 2047, 1, 0, 0, 0, 136, 2055, 1, 0, 0, 0, 138, 2062, 1, 0, 0, 0, 140, 2089, 1, 0, 0, 0, 142, 2092, 1, 0, 0, 0, 144, 2115, 1, 0, 0, 0, 146, 2117, 1, 0, 0, 0, 148, 2199, 1, 0, 0, 0, 150, 2213, 1, 0, 0, 0, 152, 2233, 1, 0, 0, 0, 154, 2248, 1, 0, 0, 0, 156, 2250, 1, 0, 0, 0, 158, 2256, 1, 0, 0, 0, 160, 2264, 1, 0, 0, 0, 162, 2266, 1, 0, 0, 0, 164, 2274, 1, 0, 0, 0, 166, 2283, 1, 0, 0, 0, 168, 2295, 1, 0, 0, 0, 170, 2298, 1, 0, 0, 0, 172, 2302, 1, 0, 0, 0, 174, 2305, 1, 0, 0, 0, 176, 2315, 1, 0, 0, 0, 178, 2324, 1, 0, 0, 0, 180, 2326, 1, 0, 0, 0, 182, 2337, 1, 0, 0, 0, 184, 2346, 1, 0, 0, 0, 186, 2348, 1, 0, 0, 0, 188, 2391, 1, 0, 0, 0, 190, 2393, 1, 0, 0, 0, 192, 2401, 1, 0, 0, 0, 194, 2405, 1, 0, 0, 0, 196, 2420, 1, 0, 0, 0, 198, 2434, 1, 0, 0, 0, 200, 2449, 1, 0, 0, 0, 202, 2499, 1, 0, 0, 0, 204, 2501, 1, 0, 0, 0, 206, 2528, 1, 0, 0, 0, 208, 2532, 1, 0, 0, 0, 210, 2550, 1, 0, 0, 0, 212, 2552, 1, 0, 0, 0, 214, 2602, 1, 0, 0, 0, 216, 2609, 1, 0, 0, 0, 218, 2611, 1, 0, 0, 0, 220, 2632, 1, 0, 0, 0, 222, 2634, 1, 0, 0, 0, 224, 2638, 1, 0, 0, 0, 226, 2676, 1, 0, 0, 0, 228, 2678, 1, 0, 0, 0, 230, 2712, 1, 0, 0, 0, 232, 2727, 1, 0, 0, 0, 234, 2729, 1, 0, 0, 0, 236, 2737, 1, 0, 0, 0, 238, 2745, 1, 0, 0, 0, 240, 2767, 1, 0, 0, 0, 242, 2786, 1, 0, 0, 0, 244, 2794, 1, 0, 0, 0, 246, 2800, 1, 0, 0, 0, 248, 2803, 1, 0, 0, 0, 250, 2809, 1, 0, 0, 0, 252, 2819, 1, 0, 0, 0, 254, 2827, 1, 0, 0, 0, 256, 2829, 1, 0, 0, 0, 258, 2836, 1, 0, 0, 0, 260, 2844, 1, 0, 0, 0, 262, 2849, 1, 0, 0, 0, 264, 3322, 1, 0, 0, 0, 266, 3324, 1, 0, 0, 0, 268, 3331, 1, 0, 0, 0, 270, 3341, 1, 0, 0, 0, 272, 3355, 1, 0, 0, 0, 274, 3364, 1, 0, 0, 0, 276, 3374, 1, 0, 0, 0, 278, 3386, 1, 0, 0, 0, 280, 3391, 1, 0, 0, 0, 282, 3396, 1, 0, 0, 0, 284, 3448, 1, 0, 0, 0, 286, 3470, 1, 0, 0, 0, 288, 3472, 1, 0, 0, 0, 290, 3493, 1, 0, 0, 0, 292, 3505, 1, 0, 0, 0, 294, 3515, 1, 0, 0, 0, 296, 3517, 1, 0, 0, 0, 298, 3519, 1, 0, 0, 0, 300, 3523, 1, 0, 0, 0, 302, 3526, 1, 0, 0, 0, 304, 3538, 1, 0, 0, 0, 306, 3554, 1, 0, 0, 0, 308, 3556, 1, 0, 0, 0, 310, 3562, 1, 0, 0, 0, 312, 3564, 1, 0, 0, 0, 314, 3568, 1, 0, 0, 0, 316, 3583, 1, 0, 0, 0, 318, 3599, 1, 0, 0, 0, 320, 3633, 1, 0, 0, 0, 322, 3649, 1, 0, 0, 0, 324, 3664, 1, 0, 0, 0, 326, 3677, 1, 0, 0, 0, 328, 3688, 1, 0, 0, 0, 330, 3698, 1, 0, 0, 0, 332, 3720, 1, 0, 0, 0, 334, 3722, 1, 0, 0, 0, 336, 3730, 1, 0, 0, 0, 338, 3739, 1, 0, 0, 0, 340, 3747, 1, 0, 0, 0, 342, 3753, 1, 0, 0, 0, 344, 3759, 1, 0, 0, 0, 346, 3765, 1, 0, 0, 0, 348, 3775, 1, 0, 0, 0, 350, 3780, 1, 0, 0, 0, 352, 3798, 1, 0, 0, 0, 354, 3816, 1, 0, 0, 0, 356, 3818, 1, 0, 0, 0, 358, 3821, 1, 0, 0, 0, 360, 3825, 1, 0, 0, 0, 362, 3839, 1, 0, 0, 0, 364, 3842, 1, 0, 0, 0, 366, 3856, 1, 0, 0, 0, 368, 3884, 1, 0, 0, 0, 370, 3888, 1, 0, 0, 0, 372, 3890, 1, 0, 0, 0, 374, 3892, 1, 0, 0, 0, 376, 3897, 1, 0, 0, 0, 378, 3919, 1, 0, 0, 0, 380, 3921, 1, 0, 0, 0, 382, 3938, 1, 0, 0, 0, 384, 3942, 1, 0, 0, 0, 386, 3957, 1, 0, 0, 0, 388, 3969, 1, 0, 0, 0, 390, 3973, 1, 0, 0, 0, 392, 3978, 1, 0, 0, 0, 394, 3992, 1, 0, 0, 0, 396, 4006, 1, 0, 0, 0, 398, 4015, 1, 0, 0, 0, 400, 4090, 1, 0, 0, 0, 402, 4092, 1, 0, 0, 0, 404, 4100, 1, 0, 0, 0, 406, 4104, 1, 0, 0, 0, 408, 4132, 1, 0, 0, 0, 410, 4134, 1, 0, 0, 0, 412, 4140, 1, 0, 0, 0, 414, 4145, 1, 0, 0, 0, 416, 4150, 1, 0, 0, 0, 418, 4158, 1, 0, 0, 0, 420, 4166, 1, 0, 0, 0, 422, 4168, 1, 0, 0, 0, 424, 4176, 1, 0, 0, 0, 426, 4180, 1, 0, 0, 0, 428, 4187, 1, 0, 0, 0, 430, 4200, 1, 0, 0, 0, 432, 4204, 1, 0, 0, 0, 434, 4207, 1, 0, 0, 0, 436, 4215, 1, 0, 0, 0, 438, 4219, 1, 0, 0, 0, 440, 4227, 1, 0, 0, 0, 442, 4231, 1, 0, 0, 0, 444, 4239, 1, 0, 0, 0, 446, 4247, 1, 0, 0, 0, 448, 4252, 1, 0, 0, 0, 450, 4256, 1, 0, 0, 0, 452, 4258, 1, 0, 0, 0, 454, 4266, 1, 0, 0, 0, 456, 4277, 1, 0, 0, 0, 458, 4279, 1, 0, 0, 0, 460, 4291, 1, 0, 0, 0, 462, 4293, 1, 0, 0, 0, 464, 4301, 1, 0, 0, 0, 466, 4313, 1, 0, 0, 0, 468, 4315, 1, 0, 0, 0, 470, 4323, 1, 0, 0, 0, 472, 4325, 1, 0, 0, 0, 474, 4339, 1, 0, 0, 0, 476, 4341, 1, 0, 0, 0, 478, 4379, 1, 0, 0, 0, 480, 4381, 1, 0, 0, 0, 482, 4407, 1, 0, 0, 0, 484, 4413, 1, 0, 0, 0, 486, 4416, 1, 0, 0, 0, 488, 4449, 1, 0, 0, 0, 490, 4451, 1, 0, 0, 0, 492, 4453, 1, 0, 0, 0, 494, 4558, 1, 0, 0, 0, 496, 4560, 1, 0, 0, 0, 498, 4562, 1, 0, 0, 0, 500, 4623, 1, 0, 0, 0, 502, 4625, 1, 0, 0, 0, 504, 4673, 1, 0, 0, 0, 506, 4675, 1, 0, 0, 0, 508, 4692, 1, 0, 0, 0, 510, 4697, 1, 0, 0, 0, 512, 4720, 1, 0, 0, 0, 514, 4722, 1, 0, 0, 0, 516, 4733, 1, 0, 0, 0, 518, 4739, 1, 0, 0, 0, 520, 4741, 1, 0, 0, 0, 522, 4743, 1, 0, 0, 0, 524, 4745, 1, 0, 0, 0, 526, 4770, 1, 0, 0, 0, 528, 4785, 1, 0, 0, 0, 530, 4796, 1, 0, 0, 0, 532, 4798, 1, 0, 0, 0, 534, 4802, 1, 0, 0, 0, 536, 4817, 1, 0, 0, 0, 538, 4821, 1, 0, 0, 0, 540, 4824, 1, 0, 0, 0, 542, 4830, 1, 0, 0, 0, 544, 4875, 1, 0, 0, 0, 546, 4877, 1, 0, 0, 0, 548, 4915, 1, 0, 0, 0, 550, 4919, 1, 0, 0, 0, 552, 4929, 1, 0, 0, 0, 554, 4940, 1, 0, 0, 0, 556, 4942, 1, 0, 0, 0, 558, 4954, 1, 0, 0, 0, 560, 5007, 1, 0, 0, 0, 562, 5010, 1, 0, 0, 0, 564, 5095, 1, 0, 0, 0, 566, 5097, 1, 0, 0, 0, 568, 5101, 1, 0, 0, 0, 570, 5137, 1, 0, 0, 0, 572, 5139, 1, 0, 0, 0, 574, 5141, 1, 0, 0, 0, 576, 5164, 1, 0, 0, 0, 578, 5168, 1, 0, 0, 0, 580, 5179, 1, 0, 0, 0, 582, 5205, 1, 0, 0, 0, 584, 5207, 1, 0, 0, 0, 586, 5215, 1, 0, 0, 0, 588, 5231, 1, 0, 0, 0, 590, 5268, 1, 0, 0, 0, 592, 5270, 1, 0, 0, 0, 594, 5274, 1, 0, 0, 0, 596, 5278, 1, 0, 0, 0, 598, 5295, 1, 0, 0, 0, 600, 5297, 1, 0, 0, 0, 602, 5323, 1, 0, 0, 0, 604, 5338, 1, 0, 0, 0, 606, 5346, 1, 0, 0, 0, 608, 5357, 1, 0, 0, 0, 610, 5381, 1, 0, 0, 0, 612, 5406, 1, 0, 0, 0, 614, 5417, 1, 0, 0, 0, 616, 5429, 1, 0, 0, 0, 618, 5433, 1, 0, 0, 0, 620, 5455, 1, 0, 0, 0, 622, 5478, 1, 0, 0, 0, 624, 5482, 1, 0, 0, 0, 626, 5526, 1, 0, 0, 0, 628, 5556, 1, 0, 0, 0, 630, 5667, 1, 0, 0, 0, 632, 5702, 1, 0, 0, 0, 634, 5704, 1, 0, 0, 0, 636, 5709, 1, 0, 0, 0, 638, 5747, 1, 0, 0, 0, 640, 5751, 1, 0, 0, 0, 642, 5772, 1, 0, 0, 0, 644, 5788, 1, 0, 0, 0, 646, 5794, 1, 0, 0, 0, 648, 5805, 1, 0, 0, 0, 650, 5811, 1, 0, 0, 0, 652, 5818, 1, 0, 0, 0, 654, 5828, 1, 0, 0, 0, 656, 5844, 1, 0, 0, 0, 658, 5921, 1, 0, 0, 0, 660, 5940, 1, 0, 0, 0, 662, 5955, 1, 0, 0, 0, 664, 5967, 1, 0, 0, 0, 666, 6008, 1, 0, 0, 0, 668, 6010, 1, 0, 0, 0, 670, 6012, 1, 0, 0, 0, 672, 6020, 1, 0, 0, 0, 674, 6026, 1, 0, 0, 0, 676, 6028, 1, 0, 0, 0, 678, 6563, 1, 0, 0, 0, 680, 6586, 1, 0, 0, 0, 682, 6588, 1, 0, 0, 0, 684, 6596, 1, 0, 0, 0, 686, 6598, 1, 0, 0, 0, 688, 6606, 1, 0, 0, 0, 690, 6790, 1, 0, 0, 0, 692, 6792, 1, 0, 0, 0, 694, 6838, 1, 0, 0, 0, 696, 6854, 1, 0, 0, 0, 698, 6856, 1, 0, 0, 0, 700, 6903, 1, 0, 0, 0, 702, 6905, 1, 0, 0, 0, 704, 6920, 1, 0, 0, 0, 706, 6932, 1, 0, 0, 0, 708, 6936, 1, 0, 0, 0, 710, 6938, 1, 0, 0, 0, 712, 6962, 1, 0, 0, 0, 714, 6984, 1, 0, 0, 0, 716, 6996, 1, 0, 0, 0, 718, 7012, 1, 0, 0, 0, 720, 7014, 1, 0, 0, 0, 722, 7017, 1, 0, 0, 0, 724, 7020, 1, 0, 0, 0, 726, 7023, 1, 0, 0, 0, 728, 7026, 1, 0, 0, 0, 730, 7034, 1, 0, 0, 0, 732, 7038, 1, 0, 0, 0, 734, 7058, 1, 0, 0, 0, 736, 7076, 1, 0, 0, 0, 738, 7078, 1, 0, 0, 0, 740, 7104, 1, 0, 0, 0, 742, 7106, 1, 0, 0, 0, 744, 7124, 1, 0, 0, 0, 746, 7126, 1, 0, 0, 0, 748, 7128, 1, 0, 0, 0, 750, 7130, 1, 0, 0, 0, 752, 7134, 1, 0, 0, 0, 754, 7149, 1, 0, 0, 0, 756, 7157, 1, 0, 0, 0, 758, 7159, 1, 0, 0, 0, 760, 7165, 1, 0, 0, 0, 762, 7167, 1, 0, 0, 0, 764, 7175, 1, 0, 0, 0, 766, 7177, 1, 0, 0, 0, 768, 7180, 1, 0, 0, 0, 770, 7242, 1, 0, 0, 0, 772, 7245, 1, 0, 0, 0, 774, 7249, 1, 0, 0, 0, 776, 7289, 1, 0, 0, 0, 778, 7303, 1, 0, 0, 0, 780, 7305, 1, 0, 0, 0, 782, 7307, 1, 0, 0, 0, 784, 7315, 1, 0, 0, 0, 786, 7317, 1, 0, 0, 0, 788, 7325, 1, 0, 0, 0, 790, 7334, 1, 0, 0, 0, 792, 7338, 1, 0, 0, 0, 794, 7369, 1, 0, 0, 0, 796, 7371, 1, 0, 0, 0, 798, 7379, 1, 0, 0, 0, 800, 7388, 1, 0, 0, 0, 802, 7413, 1, 0, 0, 0, 804, 7415, 1, 0, 0, 0, 806, 7431, 1, 0, 0, 0, 808, 7438, 1, 0, 0, 0, 810, 7445, 1, 0, 0, 0, 812, 7447, 1, 0, 0, 0, 814, 7458, 1, 0, 0, 0, 816, 7465, 1, 0, 0, 0, 818, 7467, 1, 0, 0, 0, 820, 7489, 1, 0, 0, 0, 822, 7491, 1, 0, 0, 0, 824, 7499, 1, 0, 0, 0, 826, 7514, 1, 0, 0, 0, 828, 7519, 1, 0, 0, 0, 830, 7530, 1, 0, 0, 0, 832, 7537, 1, 0, 0, 0, 834, 7539, 1, 0, 0, 0, 836, 7552, 1, 0, 0, 0, 838, 7554, 1, 0, 0, 0, 840, 7556, 1, 0, 0, 0, 842, 7565, 1, 0, 0, 0, 844, 7567, 1, 0, 0, 0, 846, 7579, 1, 0, 0, 0, 848, 7584, 1, 0, 0, 0, 850, 7586, 1, 0, 0, 0, 852, 854, 3, 2, 1, 0, 853, 852, 1, 0, 0, 0, 854, 857, 1, 0, 0, 0, 855, 853, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 858, 1, 0, 0, 0, 857, 855, 1, 0, 0, 0, 858, 859, 5, 0, 0, 1, 859, 1, 1, 0, 0, 0, 860, 862, 3, 838, 419, 0, 861, 860, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 866, 1, 0, 0, 0, 863, 867, 3, 4, 2, 0, 864, 867, 3, 674, 337, 0, 865, 867, 3, 736, 368, 0, 866, 863, 1, 0, 0, 0, 866, 864, 1, 0, 0, 0, 866, 865, 1, 0, 0, 0, 867, 869, 1, 0, 0, 0, 868, 870, 5, 549, 0, 0, 869, 868, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 872, 1, 0, 0, 0, 871, 873, 5, 545, 0, 0, 872, 871, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 3, 1, 0, 0, 0, 874, 882, 3, 8, 4, 0, 875, 882, 3, 10, 5, 0, 876, 882, 3, 44, 22, 0, 877, 882, 3, 46, 23, 0, 878, 882, 3, 50, 25, 0, 879, 882, 3, 6, 3, 0, 880, 882, 3, 52, 26, 0, 881, 874, 1, 0, 0, 0, 881, 875, 1, 0, 0, 0, 881, 876, 1, 0, 0, 0, 881, 877, 1, 0, 0, 0, 881, 878, 1, 0, 0, 0, 881, 879, 1, 0, 0, 0, 881, 880, 1, 0, 0, 0, 882, 5, 1, 0, 0, 0, 883, 884, 5, 416, 0, 0, 884, 885, 5, 190, 0, 0, 885, 886, 5, 48, 0, 0, 886, 891, 3, 686, 343, 0, 887, 888, 5, 550, 0, 0, 888, 890, 3, 686, 343, 0, 889, 887, 1, 0, 0, 0, 890, 893, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 894, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 894, 895, 5, 73, 0, 0, 895, 900, 3, 684, 342, 0, 896, 897, 5, 303, 0, 0, 897, 899, 3, 684, 342, 0, 898, 896, 1, 0, 0, 0, 899, 902, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 908, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 903, 906, 5, 307, 0, 0, 904, 907, 3, 828, 414, 0, 905, 907, 5, 570, 0, 0, 906, 904, 1, 0, 0, 0, 906, 905, 1, 0, 0, 0, 907, 909, 1, 0, 0, 0, 908, 903, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 912, 1, 0, 0, 0, 910, 911, 5, 460, 0, 0, 911, 913, 5, 461, 0, 0, 912, 910, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 7, 1, 0, 0, 0, 914, 916, 3, 838, 419, 0, 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 920, 1, 0, 0, 0, 917, 919, 3, 840, 420, 0, 918, 917, 1, 0, 0, 0, 919, 922, 1, 0, 0, 0, 920, 918, 1, 0, 0, 0, 920, 921, 1, 0, 0, 0, 921, 923, 1, 0, 0, 0, 922, 920, 1, 0, 0, 0, 923, 926, 5, 17, 0, 0, 924, 925, 5, 304, 0, 0, 925, 927, 7, 0, 0, 0, 926, 924, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 962, 1, 0, 0, 0, 928, 963, 3, 102, 51, 0, 929, 963, 3, 140, 70, 0, 930, 963, 3, 156, 78, 0, 931, 963, 3, 238, 119, 0, 932, 963, 3, 240, 120, 0, 933, 963, 3, 426, 213, 0, 934, 963, 3, 428, 214, 0, 935, 963, 3, 162, 81, 0, 936, 963, 3, 228, 114, 0, 937, 963, 3, 534, 267, 0, 938, 963, 3, 542, 271, 0, 939, 963, 3, 550, 275, 0, 940, 963, 3, 558, 279, 0, 941, 963, 3, 584, 292, 0, 942, 963, 3, 586, 293, 0, 943, 963, 3, 588, 294, 0, 944, 963, 3, 608, 304, 0, 945, 963, 3, 610, 305, 0, 946, 963, 3, 612, 306, 0, 947, 963, 3, 618, 309, 0, 948, 963, 3, 624, 312, 0, 949, 963, 3, 58, 29, 0, 950, 963, 3, 90, 45, 0, 951, 963, 3, 174, 87, 0, 952, 963, 3, 204, 102, 0, 953, 963, 3, 208, 104, 0, 954, 963, 3, 218, 109, 0, 955, 963, 3, 556, 278, 0, 956, 963, 3, 574, 287, 0, 957, 963, 3, 824, 412, 0, 958, 963, 3, 186, 93, 0, 959, 963, 3, 194, 97, 0, 960, 963, 3, 196, 98, 0, 961, 963, 3, 198, 99, 0, 962, 928, 1, 0, 0, 0, 962, 929, 1, 0, 0, 0, 962, 930, 1, 0, 0, 0, 962, 931, 1, 0, 0, 0, 962, 932, 1, 0, 0, 0, 962, 933, 1, 0, 0, 0, 962, 934, 1, 0, 0, 0, 962, 935, 1, 0, 0, 0, 962, 936, 1, 0, 0, 0, 962, 937, 1, 0, 0, 0, 962, 938, 1, 0, 0, 0, 962, 939, 1, 0, 0, 0, 962, 940, 1, 0, 0, 0, 962, 941, 1, 0, 0, 0, 962, 942, 1, 0, 0, 0, 962, 943, 1, 0, 0, 0, 962, 944, 1, 0, 0, 0, 962, 945, 1, 0, 0, 0, 962, 946, 1, 0, 0, 0, 962, 947, 1, 0, 0, 0, 962, 948, 1, 0, 0, 0, 962, 949, 1, 0, 0, 0, 962, 950, 1, 0, 0, 0, 962, 951, 1, 0, 0, 0, 962, 952, 1, 0, 0, 0, 962, 953, 1, 0, 0, 0, 962, 954, 1, 0, 0, 0, 962, 955, 1, 0, 0, 0, 962, 956, 1, 0, 0, 0, 962, 957, 1, 0, 0, 0, 962, 958, 1, 0, 0, 0, 962, 959, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 961, 1, 0, 0, 0, 963, 9, 1, 0, 0, 0, 964, 965, 5, 18, 0, 0, 965, 966, 5, 23, 0, 0, 966, 968, 3, 828, 414, 0, 967, 969, 3, 148, 74, 0, 968, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 968, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 1086, 1, 0, 0, 0, 972, 973, 5, 18, 0, 0, 973, 974, 5, 27, 0, 0, 974, 976, 3, 828, 414, 0, 975, 977, 3, 150, 75, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 1086, 1, 0, 0, 0, 980, 981, 5, 18, 0, 0, 981, 982, 5, 28, 0, 0, 982, 984, 3, 828, 414, 0, 983, 985, 3, 152, 76, 0, 984, 983, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 1086, 1, 0, 0, 0, 988, 989, 5, 18, 0, 0, 989, 990, 5, 36, 0, 0, 990, 992, 3, 828, 414, 0, 991, 993, 3, 154, 77, 0, 992, 991, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 992, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 1086, 1, 0, 0, 0, 996, 997, 5, 18, 0, 0, 997, 998, 5, 332, 0, 0, 998, 999, 5, 359, 0, 0, 999, 1000, 3, 828, 414, 0, 1000, 1001, 5, 48, 0, 0, 1001, 1006, 3, 594, 297, 0, 1002, 1003, 5, 550, 0, 0, 1003, 1005, 3, 594, 297, 0, 1004, 1002, 1, 0, 0, 0, 1005, 1008, 1, 0, 0, 0, 1006, 1004, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1086, 1, 0, 0, 0, 1008, 1006, 1, 0, 0, 0, 1009, 1010, 5, 18, 0, 0, 1010, 1011, 5, 332, 0, 0, 1011, 1012, 5, 330, 0, 0, 1012, 1013, 3, 828, 414, 0, 1013, 1014, 5, 48, 0, 0, 1014, 1019, 3, 594, 297, 0, 1015, 1016, 5, 550, 0, 0, 1016, 1018, 3, 594, 297, 0, 1017, 1015, 1, 0, 0, 0, 1018, 1021, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1086, 1, 0, 0, 0, 1021, 1019, 1, 0, 0, 0, 1022, 1023, 5, 18, 0, 0, 1023, 1024, 5, 216, 0, 0, 1024, 1025, 5, 94, 0, 0, 1025, 1026, 7, 1, 0, 0, 1026, 1027, 3, 828, 414, 0, 1027, 1028, 5, 189, 0, 0, 1028, 1030, 5, 570, 0, 0, 1029, 1031, 3, 16, 8, 0, 1030, 1029, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 1030, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1086, 1, 0, 0, 0, 1034, 1035, 5, 18, 0, 0, 1035, 1036, 5, 468, 0, 0, 1036, 1086, 3, 666, 333, 0, 1037, 1038, 5, 18, 0, 0, 1038, 1039, 5, 33, 0, 0, 1039, 1040, 3, 828, 414, 0, 1040, 1042, 5, 554, 0, 0, 1041, 1043, 3, 20, 10, 0, 1042, 1041, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1047, 5, 555, 0, 0, 1047, 1086, 1, 0, 0, 0, 1048, 1049, 5, 18, 0, 0, 1049, 1050, 5, 34, 0, 0, 1050, 1051, 3, 828, 414, 0, 1051, 1053, 5, 554, 0, 0, 1052, 1054, 3, 20, 10, 0, 1053, 1052, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1053, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 1058, 5, 555, 0, 0, 1058, 1086, 1, 0, 0, 0, 1059, 1060, 5, 18, 0, 0, 1060, 1061, 5, 32, 0, 0, 1061, 1063, 3, 828, 414, 0, 1062, 1064, 3, 658, 329, 0, 1063, 1062, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1068, 1, 0, 0, 0, 1067, 1069, 5, 549, 0, 0, 1068, 1067, 1, 0, 0, 0, 1068, 1069, 1, 0, 0, 0, 1069, 1086, 1, 0, 0, 0, 1070, 1071, 5, 18, 0, 0, 1071, 1072, 5, 362, 0, 0, 1072, 1073, 5, 329, 0, 0, 1073, 1074, 5, 330, 0, 0, 1074, 1075, 3, 828, 414, 0, 1075, 1082, 3, 12, 6, 0, 1076, 1078, 5, 550, 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1081, 3, 12, 6, 0, 1080, 1077, 1, 0, 0, 0, 1081, 1084, 1, 0, 0, 0, 1082, 1080, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1086, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1085, 964, 1, 0, 0, 0, 1085, 972, 1, 0, 0, 0, 1085, 980, 1, 0, 0, 0, 1085, 988, 1, 0, 0, 0, 1085, 996, 1, 0, 0, 0, 1085, 1009, 1, 0, 0, 0, 1085, 1022, 1, 0, 0, 0, 1085, 1034, 1, 0, 0, 0, 1085, 1037, 1, 0, 0, 0, 1085, 1048, 1, 0, 0, 0, 1085, 1059, 1, 0, 0, 0, 1085, 1070, 1, 0, 0, 0, 1086, 11, 1, 0, 0, 0, 1087, 1088, 5, 48, 0, 0, 1088, 1093, 3, 14, 7, 0, 1089, 1090, 5, 550, 0, 0, 1090, 1092, 3, 14, 7, 0, 1091, 1089, 1, 0, 0, 0, 1092, 1095, 1, 0, 0, 0, 1093, 1091, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1102, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1096, 1097, 5, 47, 0, 0, 1097, 1102, 3, 578, 289, 0, 1098, 1099, 5, 19, 0, 0, 1099, 1100, 5, 348, 0, 0, 1100, 1102, 5, 566, 0, 0, 1101, 1087, 1, 0, 0, 0, 1101, 1096, 1, 0, 0, 0, 1101, 1098, 1, 0, 0, 0, 1102, 13, 1, 0, 0, 0, 1103, 1104, 3, 830, 415, 0, 1104, 1105, 5, 539, 0, 0, 1105, 1106, 5, 566, 0, 0, 1106, 15, 1, 0, 0, 0, 1107, 1108, 5, 48, 0, 0, 1108, 1113, 3, 18, 9, 0, 1109, 1110, 5, 550, 0, 0, 1110, 1112, 3, 18, 9, 0, 1111, 1109, 1, 0, 0, 0, 1112, 1115, 1, 0, 0, 0, 1113, 1111, 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1120, 1, 0, 0, 0, 1115, 1113, 1, 0, 0, 0, 1116, 1117, 5, 217, 0, 0, 1117, 1118, 5, 213, 0, 0, 1118, 1120, 5, 214, 0, 0, 1119, 1107, 1, 0, 0, 0, 1119, 1116, 1, 0, 0, 0, 1120, 17, 1, 0, 0, 0, 1121, 1122, 5, 210, 0, 0, 1122, 1123, 5, 539, 0, 0, 1123, 1137, 5, 566, 0, 0, 1124, 1125, 5, 211, 0, 0, 1125, 1126, 5, 539, 0, 0, 1126, 1137, 5, 566, 0, 0, 1127, 1128, 5, 566, 0, 0, 1128, 1129, 5, 539, 0, 0, 1129, 1137, 5, 566, 0, 0, 1130, 1131, 5, 566, 0, 0, 1131, 1132, 5, 539, 0, 0, 1132, 1137, 5, 94, 0, 0, 1133, 1134, 5, 566, 0, 0, 1134, 1135, 5, 539, 0, 0, 1135, 1137, 5, 515, 0, 0, 1136, 1121, 1, 0, 0, 0, 1136, 1124, 1, 0, 0, 0, 1136, 1127, 1, 0, 0, 0, 1136, 1130, 1, 0, 0, 0, 1136, 1133, 1, 0, 0, 0, 1137, 19, 1, 0, 0, 0, 1138, 1140, 3, 22, 11, 0, 1139, 1141, 5, 549, 0, 0, 1140, 1139, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1163, 1, 0, 0, 0, 1142, 1144, 3, 28, 14, 0, 1143, 1145, 5, 549, 0, 0, 1144, 1143, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 1163, 1, 0, 0, 0, 1146, 1148, 3, 30, 15, 0, 1147, 1149, 5, 549, 0, 0, 1148, 1147, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1163, 1, 0, 0, 0, 1150, 1152, 3, 32, 16, 0, 1151, 1153, 5, 549, 0, 0, 1152, 1151, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1163, 1, 0, 0, 0, 1154, 1156, 3, 36, 18, 0, 1155, 1157, 5, 549, 0, 0, 1156, 1155, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1163, 1, 0, 0, 0, 1158, 1160, 3, 38, 19, 0, 1159, 1161, 5, 549, 0, 0, 1160, 1159, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1163, 1, 0, 0, 0, 1162, 1138, 1, 0, 0, 0, 1162, 1142, 1, 0, 0, 0, 1162, 1146, 1, 0, 0, 0, 1162, 1150, 1, 0, 0, 0, 1162, 1154, 1, 0, 0, 0, 1162, 1158, 1, 0, 0, 0, 1163, 21, 1, 0, 0, 0, 1164, 1165, 5, 48, 0, 0, 1165, 1166, 5, 35, 0, 0, 1166, 1167, 5, 539, 0, 0, 1167, 1180, 3, 828, 414, 0, 1168, 1169, 5, 375, 0, 0, 1169, 1170, 5, 552, 0, 0, 1170, 1175, 3, 24, 12, 0, 1171, 1172, 5, 550, 0, 0, 1172, 1174, 3, 24, 12, 0, 1173, 1171, 1, 0, 0, 0, 1174, 1177, 1, 0, 0, 0, 1175, 1173, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, 0, 1176, 1178, 1, 0, 0, 0, 1177, 1175, 1, 0, 0, 0, 1178, 1179, 5, 553, 0, 0, 1179, 1181, 1, 0, 0, 0, 1180, 1168, 1, 0, 0, 0, 1180, 1181, 1, 0, 0, 0, 1181, 1204, 1, 0, 0, 0, 1182, 1183, 5, 48, 0, 0, 1183, 1184, 3, 26, 13, 0, 1184, 1185, 5, 94, 0, 0, 1185, 1186, 3, 34, 17, 0, 1186, 1204, 1, 0, 0, 0, 1187, 1188, 5, 48, 0, 0, 1188, 1189, 5, 552, 0, 0, 1189, 1194, 3, 26, 13, 0, 1190, 1191, 5, 550, 0, 0, 1191, 1193, 3, 26, 13, 0, 1192, 1190, 1, 0, 0, 0, 1193, 1196, 1, 0, 0, 0, 1194, 1192, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1197, 1, 0, 0, 0, 1196, 1194, 1, 0, 0, 0, 1197, 1198, 5, 553, 0, 0, 1198, 1199, 5, 94, 0, 0, 1199, 1200, 3, 34, 17, 0, 1200, 1204, 1, 0, 0, 0, 1201, 1202, 5, 48, 0, 0, 1202, 1204, 3, 26, 13, 0, 1203, 1164, 1, 0, 0, 0, 1203, 1182, 1, 0, 0, 0, 1203, 1187, 1, 0, 0, 0, 1203, 1201, 1, 0, 0, 0, 1204, 23, 1, 0, 0, 0, 1205, 1206, 3, 830, 415, 0, 1206, 1207, 5, 77, 0, 0, 1207, 1208, 3, 830, 415, 0, 1208, 25, 1, 0, 0, 0, 1209, 1210, 5, 194, 0, 0, 1210, 1211, 5, 539, 0, 0, 1211, 1220, 3, 500, 250, 0, 1212, 1213, 3, 830, 415, 0, 1213, 1214, 5, 539, 0, 0, 1214, 1215, 3, 526, 263, 0, 1215, 1220, 1, 0, 0, 0, 1216, 1217, 5, 566, 0, 0, 1217, 1218, 5, 539, 0, 0, 1218, 1220, 3, 526, 263, 0, 1219, 1209, 1, 0, 0, 0, 1219, 1212, 1, 0, 0, 0, 1219, 1216, 1, 0, 0, 0, 1220, 27, 1, 0, 0, 0, 1221, 1222, 5, 413, 0, 0, 1222, 1223, 5, 415, 0, 0, 1223, 1224, 3, 34, 17, 0, 1224, 1225, 5, 554, 0, 0, 1225, 1226, 3, 484, 242, 0, 1226, 1227, 5, 555, 0, 0, 1227, 1236, 1, 0, 0, 0, 1228, 1229, 5, 413, 0, 0, 1229, 1230, 5, 414, 0, 0, 1230, 1231, 3, 34, 17, 0, 1231, 1232, 5, 554, 0, 0, 1232, 1233, 3, 484, 242, 0, 1233, 1234, 5, 555, 0, 0, 1234, 1236, 1, 0, 0, 0, 1235, 1221, 1, 0, 0, 0, 1235, 1228, 1, 0, 0, 0, 1236, 29, 1, 0, 0, 0, 1237, 1238, 5, 19, 0, 0, 1238, 1239, 5, 189, 0, 0, 1239, 1244, 3, 34, 17, 0, 1240, 1241, 5, 550, 0, 0, 1241, 1243, 3, 34, 17, 0, 1242, 1240, 1, 0, 0, 0, 1243, 1246, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 31, 1, 0, 0, 0, 1246, 1244, 1, 0, 0, 0, 1247, 1248, 5, 454, 0, 0, 1248, 1249, 3, 34, 17, 0, 1249, 1250, 5, 140, 0, 0, 1250, 1251, 5, 554, 0, 0, 1251, 1252, 3, 484, 242, 0, 1252, 1253, 5, 555, 0, 0, 1253, 33, 1, 0, 0, 0, 1254, 1255, 3, 830, 415, 0, 1255, 1256, 5, 551, 0, 0, 1256, 1257, 3, 830, 415, 0, 1257, 1260, 1, 0, 0, 0, 1258, 1260, 3, 830, 415, 0, 1259, 1254, 1, 0, 0, 0, 1259, 1258, 1, 0, 0, 0, 1260, 35, 1, 0, 0, 0, 1261, 1262, 5, 47, 0, 0, 1262, 1263, 5, 206, 0, 0, 1263, 1264, 3, 444, 222, 0, 1264, 37, 1, 0, 0, 0, 1265, 1266, 5, 19, 0, 0, 1266, 1267, 5, 206, 0, 0, 1267, 1268, 5, 569, 0, 0, 1268, 39, 1, 0, 0, 0, 1269, 1270, 5, 397, 0, 0, 1270, 1271, 7, 2, 0, 0, 1271, 1274, 3, 828, 414, 0, 1272, 1273, 5, 453, 0, 0, 1273, 1275, 3, 828, 414, 0, 1274, 1272, 1, 0, 0, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1293, 1, 0, 0, 0, 1276, 1277, 5, 398, 0, 0, 1277, 1278, 5, 33, 0, 0, 1278, 1293, 3, 828, 414, 0, 1279, 1280, 5, 305, 0, 0, 1280, 1281, 5, 399, 0, 0, 1281, 1282, 5, 33, 0, 0, 1282, 1293, 3, 828, 414, 0, 1283, 1284, 5, 395, 0, 0, 1284, 1288, 5, 552, 0, 0, 1285, 1287, 3, 42, 21, 0, 1286, 1285, 1, 0, 0, 0, 1287, 1290, 1, 0, 0, 0, 1288, 1286, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1291, 1, 0, 0, 0, 1290, 1288, 1, 0, 0, 0, 1291, 1293, 5, 553, 0, 0, 1292, 1269, 1, 0, 0, 0, 1292, 1276, 1, 0, 0, 0, 1292, 1279, 1, 0, 0, 0, 1292, 1283, 1, 0, 0, 0, 1293, 41, 1, 0, 0, 0, 1294, 1295, 5, 395, 0, 0, 1295, 1296, 5, 157, 0, 0, 1296, 1301, 5, 566, 0, 0, 1297, 1298, 5, 33, 0, 0, 1298, 1302, 3, 828, 414, 0, 1299, 1300, 5, 30, 0, 0, 1300, 1302, 3, 828, 414, 0, 1301, 1297, 1, 0, 0, 0, 1301, 1299, 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1304, 1, 0, 0, 0, 1303, 1305, 5, 549, 0, 0, 1304, 1303, 1, 0, 0, 0, 1304, 1305, 1, 0, 0, 0, 1305, 1320, 1, 0, 0, 0, 1306, 1307, 5, 395, 0, 0, 1307, 1308, 5, 566, 0, 0, 1308, 1312, 5, 552, 0, 0, 1309, 1311, 3, 42, 21, 0, 1310, 1309, 1, 0, 0, 0, 1311, 1314, 1, 0, 0, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1315, 1, 0, 0, 0, 1314, 1312, 1, 0, 0, 0, 1315, 1317, 5, 553, 0, 0, 1316, 1318, 5, 549, 0, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1320, 1, 0, 0, 0, 1319, 1294, 1, 0, 0, 0, 1319, 1306, 1, 0, 0, 0, 1320, 43, 1, 0, 0, 0, 1321, 1322, 5, 19, 0, 0, 1322, 1323, 5, 23, 0, 0, 1323, 1433, 3, 828, 414, 0, 1324, 1325, 5, 19, 0, 0, 1325, 1326, 5, 27, 0, 0, 1326, 1433, 3, 828, 414, 0, 1327, 1328, 5, 19, 0, 0, 1328, 1329, 5, 28, 0, 0, 1329, 1433, 3, 828, 414, 0, 1330, 1331, 5, 19, 0, 0, 1331, 1332, 5, 37, 0, 0, 1332, 1433, 3, 828, 414, 0, 1333, 1334, 5, 19, 0, 0, 1334, 1335, 5, 30, 0, 0, 1335, 1433, 3, 828, 414, 0, 1336, 1337, 5, 19, 0, 0, 1337, 1338, 5, 31, 0, 0, 1338, 1433, 3, 828, 414, 0, 1339, 1340, 5, 19, 0, 0, 1340, 1341, 5, 33, 0, 0, 1341, 1433, 3, 828, 414, 0, 1342, 1343, 5, 19, 0, 0, 1343, 1344, 5, 34, 0, 0, 1344, 1433, 3, 828, 414, 0, 1345, 1346, 5, 19, 0, 0, 1346, 1347, 5, 29, 0, 0, 1347, 1433, 3, 828, 414, 0, 1348, 1349, 5, 19, 0, 0, 1349, 1350, 5, 36, 0, 0, 1350, 1433, 3, 828, 414, 0, 1351, 1352, 5, 19, 0, 0, 1352, 1353, 5, 115, 0, 0, 1353, 1354, 5, 117, 0, 0, 1354, 1433, 3, 828, 414, 0, 1355, 1356, 5, 19, 0, 0, 1356, 1357, 5, 41, 0, 0, 1357, 1358, 3, 828, 414, 0, 1358, 1359, 5, 94, 0, 0, 1359, 1360, 3, 828, 414, 0, 1360, 1433, 1, 0, 0, 0, 1361, 1362, 5, 19, 0, 0, 1362, 1363, 5, 332, 0, 0, 1363, 1364, 5, 359, 0, 0, 1364, 1433, 3, 828, 414, 0, 1365, 1366, 5, 19, 0, 0, 1366, 1367, 5, 332, 0, 0, 1367, 1368, 5, 330, 0, 0, 1368, 1433, 3, 828, 414, 0, 1369, 1370, 5, 19, 0, 0, 1370, 1371, 5, 464, 0, 0, 1371, 1372, 5, 465, 0, 0, 1372, 1373, 5, 330, 0, 0, 1373, 1433, 3, 828, 414, 0, 1374, 1375, 5, 19, 0, 0, 1375, 1376, 5, 32, 0, 0, 1376, 1433, 3, 828, 414, 0, 1377, 1378, 5, 19, 0, 0, 1378, 1379, 5, 229, 0, 0, 1379, 1380, 5, 230, 0, 0, 1380, 1433, 3, 828, 414, 0, 1381, 1382, 5, 19, 0, 0, 1382, 1383, 5, 349, 0, 0, 1383, 1384, 5, 440, 0, 0, 1384, 1433, 3, 828, 414, 0, 1385, 1386, 5, 19, 0, 0, 1386, 1387, 5, 378, 0, 0, 1387, 1388, 5, 376, 0, 0, 1388, 1433, 3, 828, 414, 0, 1389, 1390, 5, 19, 0, 0, 1390, 1391, 5, 384, 0, 0, 1391, 1392, 5, 376, 0, 0, 1392, 1433, 3, 828, 414, 0, 1393, 1394, 5, 19, 0, 0, 1394, 1395, 5, 329, 0, 0, 1395, 1396, 5, 359, 0, 0, 1396, 1433, 3, 828, 414, 0, 1397, 1398, 5, 19, 0, 0, 1398, 1399, 5, 362, 0, 0, 1399, 1400, 5, 329, 0, 0, 1400, 1401, 5, 330, 0, 0, 1401, 1433, 3, 828, 414, 0, 1402, 1403, 5, 19, 0, 0, 1403, 1404, 5, 518, 0, 0, 1404, 1405, 5, 520, 0, 0, 1405, 1433, 3, 828, 414, 0, 1406, 1407, 5, 19, 0, 0, 1407, 1408, 5, 231, 0, 0, 1408, 1433, 3, 828, 414, 0, 1409, 1410, 5, 19, 0, 0, 1410, 1411, 5, 238, 0, 0, 1411, 1412, 5, 239, 0, 0, 1412, 1413, 5, 330, 0, 0, 1413, 1433, 3, 828, 414, 0, 1414, 1415, 5, 19, 0, 0, 1415, 1416, 5, 236, 0, 0, 1416, 1417, 5, 333, 0, 0, 1417, 1433, 3, 828, 414, 0, 1418, 1419, 5, 19, 0, 0, 1419, 1420, 5, 233, 0, 0, 1420, 1433, 3, 828, 414, 0, 1421, 1422, 5, 19, 0, 0, 1422, 1423, 5, 469, 0, 0, 1423, 1433, 5, 566, 0, 0, 1424, 1425, 5, 19, 0, 0, 1425, 1426, 5, 222, 0, 0, 1426, 1427, 5, 566, 0, 0, 1427, 1430, 5, 307, 0, 0, 1428, 1431, 3, 828, 414, 0, 1429, 1431, 5, 570, 0, 0, 1430, 1428, 1, 0, 0, 0, 1430, 1429, 1, 0, 0, 0, 1431, 1433, 1, 0, 0, 0, 1432, 1321, 1, 0, 0, 0, 1432, 1324, 1, 0, 0, 0, 1432, 1327, 1, 0, 0, 0, 1432, 1330, 1, 0, 0, 0, 1432, 1333, 1, 0, 0, 0, 1432, 1336, 1, 0, 0, 0, 1432, 1339, 1, 0, 0, 0, 1432, 1342, 1, 0, 0, 0, 1432, 1345, 1, 0, 0, 0, 1432, 1348, 1, 0, 0, 0, 1432, 1351, 1, 0, 0, 0, 1432, 1355, 1, 0, 0, 0, 1432, 1361, 1, 0, 0, 0, 1432, 1365, 1, 0, 0, 0, 1432, 1369, 1, 0, 0, 0, 1432, 1374, 1, 0, 0, 0, 1432, 1377, 1, 0, 0, 0, 1432, 1381, 1, 0, 0, 0, 1432, 1385, 1, 0, 0, 0, 1432, 1389, 1, 0, 0, 0, 1432, 1393, 1, 0, 0, 0, 1432, 1397, 1, 0, 0, 0, 1432, 1402, 1, 0, 0, 0, 1432, 1406, 1, 0, 0, 0, 1432, 1409, 1, 0, 0, 0, 1432, 1414, 1, 0, 0, 0, 1432, 1418, 1, 0, 0, 0, 1432, 1421, 1, 0, 0, 0, 1432, 1424, 1, 0, 0, 0, 1433, 45, 1, 0, 0, 0, 1434, 1435, 5, 20, 0, 0, 1435, 1436, 3, 48, 24, 0, 1436, 1437, 3, 828, 414, 0, 1437, 1438, 5, 450, 0, 0, 1438, 1441, 3, 830, 415, 0, 1439, 1440, 5, 460, 0, 0, 1440, 1442, 5, 461, 0, 0, 1441, 1439, 1, 0, 0, 0, 1441, 1442, 1, 0, 0, 0, 1442, 1453, 1, 0, 0, 0, 1443, 1444, 5, 20, 0, 0, 1444, 1445, 5, 29, 0, 0, 1445, 1446, 3, 830, 415, 0, 1446, 1447, 5, 450, 0, 0, 1447, 1450, 3, 830, 415, 0, 1448, 1449, 5, 460, 0, 0, 1449, 1451, 5, 461, 0, 0, 1450, 1448, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1453, 1, 0, 0, 0, 1452, 1434, 1, 0, 0, 0, 1452, 1443, 1, 0, 0, 0, 1453, 47, 1, 0, 0, 0, 1454, 1455, 7, 3, 0, 0, 1455, 49, 1, 0, 0, 0, 1456, 1465, 5, 21, 0, 0, 1457, 1466, 5, 33, 0, 0, 1458, 1466, 5, 30, 0, 0, 1459, 1466, 5, 34, 0, 0, 1460, 1466, 5, 31, 0, 0, 1461, 1466, 5, 28, 0, 0, 1462, 1466, 5, 37, 0, 0, 1463, 1464, 5, 373, 0, 0, 1464, 1466, 5, 372, 0, 0, 1465, 1457, 1, 0, 0, 0, 1465, 1458, 1, 0, 0, 0, 1465, 1459, 1, 0, 0, 0, 1465, 1460, 1, 0, 0, 0, 1465, 1461, 1, 0, 0, 0, 1465, 1462, 1, 0, 0, 0, 1465, 1463, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 3, 828, 414, 0, 1468, 1469, 5, 450, 0, 0, 1469, 1470, 5, 222, 0, 0, 1470, 1476, 5, 566, 0, 0, 1471, 1474, 5, 307, 0, 0, 1472, 1475, 3, 828, 414, 0, 1473, 1475, 5, 570, 0, 0, 1474, 1472, 1, 0, 0, 0, 1474, 1473, 1, 0, 0, 0, 1475, 1477, 1, 0, 0, 0, 1476, 1471, 1, 0, 0, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1525, 1, 0, 0, 0, 1478, 1487, 5, 21, 0, 0, 1479, 1488, 5, 33, 0, 0, 1480, 1488, 5, 30, 0, 0, 1481, 1488, 5, 34, 0, 0, 1482, 1488, 5, 31, 0, 0, 1483, 1488, 5, 28, 0, 0, 1484, 1488, 5, 37, 0, 0, 1485, 1486, 5, 373, 0, 0, 1486, 1488, 5, 372, 0, 0, 1487, 1479, 1, 0, 0, 0, 1487, 1480, 1, 0, 0, 0, 1487, 1481, 1, 0, 0, 0, 1487, 1482, 1, 0, 0, 0, 1487, 1483, 1, 0, 0, 0, 1487, 1484, 1, 0, 0, 0, 1487, 1485, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 3, 828, 414, 0, 1490, 1493, 5, 450, 0, 0, 1491, 1494, 3, 828, 414, 0, 1492, 1494, 5, 570, 0, 0, 1493, 1491, 1, 0, 0, 0, 1493, 1492, 1, 0, 0, 0, 1494, 1525, 1, 0, 0, 0, 1495, 1496, 5, 21, 0, 0, 1496, 1497, 5, 23, 0, 0, 1497, 1498, 3, 828, 414, 0, 1498, 1501, 5, 450, 0, 0, 1499, 1502, 3, 828, 414, 0, 1500, 1502, 5, 570, 0, 0, 1501, 1499, 1, 0, 0, 0, 1501, 1500, 1, 0, 0, 0, 1502, 1525, 1, 0, 0, 0, 1503, 1504, 5, 21, 0, 0, 1504, 1505, 5, 222, 0, 0, 1505, 1506, 3, 828, 414, 0, 1506, 1507, 5, 450, 0, 0, 1507, 1508, 5, 222, 0, 0, 1508, 1514, 5, 566, 0, 0, 1509, 1512, 5, 307, 0, 0, 1510, 1513, 3, 828, 414, 0, 1511, 1513, 5, 570, 0, 0, 1512, 1510, 1, 0, 0, 0, 1512, 1511, 1, 0, 0, 0, 1513, 1515, 1, 0, 0, 0, 1514, 1509, 1, 0, 0, 0, 1514, 1515, 1, 0, 0, 0, 1515, 1525, 1, 0, 0, 0, 1516, 1517, 5, 21, 0, 0, 1517, 1518, 5, 222, 0, 0, 1518, 1519, 3, 828, 414, 0, 1519, 1522, 5, 450, 0, 0, 1520, 1523, 3, 828, 414, 0, 1521, 1523, 5, 570, 0, 0, 1522, 1520, 1, 0, 0, 0, 1522, 1521, 1, 0, 0, 0, 1523, 1525, 1, 0, 0, 0, 1524, 1456, 1, 0, 0, 0, 1524, 1478, 1, 0, 0, 0, 1524, 1495, 1, 0, 0, 0, 1524, 1503, 1, 0, 0, 0, 1524, 1516, 1, 0, 0, 0, 1525, 51, 1, 0, 0, 0, 1526, 1546, 3, 54, 27, 0, 1527, 1546, 3, 56, 28, 0, 1528, 1546, 3, 60, 30, 0, 1529, 1546, 3, 62, 31, 0, 1530, 1546, 3, 64, 32, 0, 1531, 1546, 3, 66, 33, 0, 1532, 1546, 3, 68, 34, 0, 1533, 1546, 3, 70, 35, 0, 1534, 1546, 3, 72, 36, 0, 1535, 1546, 3, 74, 37, 0, 1536, 1546, 3, 76, 38, 0, 1537, 1546, 3, 78, 39, 0, 1538, 1546, 3, 80, 40, 0, 1539, 1546, 3, 82, 41, 0, 1540, 1546, 3, 84, 42, 0, 1541, 1546, 3, 86, 43, 0, 1542, 1546, 3, 88, 44, 0, 1543, 1546, 3, 92, 46, 0, 1544, 1546, 3, 94, 47, 0, 1545, 1526, 1, 0, 0, 0, 1545, 1527, 1, 0, 0, 0, 1545, 1528, 1, 0, 0, 0, 1545, 1529, 1, 0, 0, 0, 1545, 1530, 1, 0, 0, 0, 1545, 1531, 1, 0, 0, 0, 1545, 1532, 1, 0, 0, 0, 1545, 1533, 1, 0, 0, 0, 1545, 1534, 1, 0, 0, 0, 1545, 1535, 1, 0, 0, 0, 1545, 1536, 1, 0, 0, 0, 1545, 1537, 1, 0, 0, 0, 1545, 1538, 1, 0, 0, 0, 1545, 1539, 1, 0, 0, 0, 1545, 1540, 1, 0, 0, 0, 1545, 1541, 1, 0, 0, 0, 1545, 1542, 1, 0, 0, 0, 1545, 1543, 1, 0, 0, 0, 1545, 1544, 1, 0, 0, 0, 1546, 53, 1, 0, 0, 0, 1547, 1548, 5, 17, 0, 0, 1548, 1549, 5, 29, 0, 0, 1549, 1550, 5, 474, 0, 0, 1550, 1553, 3, 828, 414, 0, 1551, 1552, 5, 511, 0, 0, 1552, 1554, 5, 566, 0, 0, 1553, 1551, 1, 0, 0, 0, 1553, 1554, 1, 0, 0, 0, 1554, 55, 1, 0, 0, 0, 1555, 1556, 5, 19, 0, 0, 1556, 1557, 5, 29, 0, 0, 1557, 1558, 5, 474, 0, 0, 1558, 1559, 3, 828, 414, 0, 1559, 57, 1, 0, 0, 0, 1560, 1561, 5, 486, 0, 0, 1561, 1562, 5, 474, 0, 0, 1562, 1563, 3, 830, 415, 0, 1563, 1564, 5, 552, 0, 0, 1564, 1565, 3, 96, 48, 0, 1565, 1569, 5, 553, 0, 0, 1566, 1567, 5, 480, 0, 0, 1567, 1568, 5, 86, 0, 0, 1568, 1570, 5, 475, 0, 0, 1569, 1566, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 59, 1, 0, 0, 0, 1571, 1572, 5, 18, 0, 0, 1572, 1573, 5, 486, 0, 0, 1573, 1574, 5, 474, 0, 0, 1574, 1575, 3, 830, 415, 0, 1575, 1576, 5, 47, 0, 0, 1576, 1577, 5, 29, 0, 0, 1577, 1578, 5, 475, 0, 0, 1578, 1579, 5, 552, 0, 0, 1579, 1580, 3, 96, 48, 0, 1580, 1581, 5, 553, 0, 0, 1581, 1594, 1, 0, 0, 0, 1582, 1583, 5, 18, 0, 0, 1583, 1584, 5, 486, 0, 0, 1584, 1585, 5, 474, 0, 0, 1585, 1586, 3, 830, 415, 0, 1586, 1587, 5, 134, 0, 0, 1587, 1588, 5, 29, 0, 0, 1588, 1589, 5, 475, 0, 0, 1589, 1590, 5, 552, 0, 0, 1590, 1591, 3, 96, 48, 0, 1591, 1592, 5, 553, 0, 0, 1592, 1594, 1, 0, 0, 0, 1593, 1571, 1, 0, 0, 0, 1593, 1582, 1, 0, 0, 0, 1594, 61, 1, 0, 0, 0, 1595, 1596, 5, 19, 0, 0, 1596, 1597, 5, 486, 0, 0, 1597, 1598, 5, 474, 0, 0, 1598, 1599, 3, 830, 415, 0, 1599, 63, 1, 0, 0, 0, 1600, 1601, 5, 476, 0, 0, 1601, 1602, 3, 96, 48, 0, 1602, 1603, 5, 94, 0, 0, 1603, 1604, 3, 828, 414, 0, 1604, 1605, 5, 552, 0, 0, 1605, 1606, 3, 98, 49, 0, 1606, 1609, 5, 553, 0, 0, 1607, 1608, 5, 73, 0, 0, 1608, 1610, 5, 566, 0, 0, 1609, 1607, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 65, 1, 0, 0, 0, 1611, 1612, 5, 477, 0, 0, 1612, 1613, 3, 96, 48, 0, 1613, 1614, 5, 94, 0, 0, 1614, 1619, 3, 828, 414, 0, 1615, 1616, 5, 552, 0, 0, 1616, 1617, 3, 98, 49, 0, 1617, 1618, 5, 553, 0, 0, 1618, 1620, 1, 0, 0, 0, 1619, 1615, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1620, 67, 1, 0, 0, 0, 1621, 1622, 5, 476, 0, 0, 1622, 1623, 5, 420, 0, 0, 1623, 1624, 5, 94, 0, 0, 1624, 1625, 5, 30, 0, 0, 1625, 1626, 3, 828, 414, 0, 1626, 1627, 5, 450, 0, 0, 1627, 1628, 3, 96, 48, 0, 1628, 69, 1, 0, 0, 0, 1629, 1630, 5, 477, 0, 0, 1630, 1631, 5, 420, 0, 0, 1631, 1632, 5, 94, 0, 0, 1632, 1633, 5, 30, 0, 0, 1633, 1634, 3, 828, 414, 0, 1634, 1635, 5, 72, 0, 0, 1635, 1636, 3, 96, 48, 0, 1636, 71, 1, 0, 0, 0, 1637, 1638, 5, 476, 0, 0, 1638, 1639, 5, 25, 0, 0, 1639, 1640, 5, 94, 0, 0, 1640, 1641, 5, 33, 0, 0, 1641, 1642, 3, 828, 414, 0, 1642, 1643, 5, 450, 0, 0, 1643, 1644, 3, 96, 48, 0, 1644, 73, 1, 0, 0, 0, 1645, 1646, 5, 477, 0, 0, 1646, 1647, 5, 25, 0, 0, 1647, 1648, 5, 94, 0, 0, 1648, 1649, 5, 33, 0, 0, 1649, 1650, 3, 828, 414, 0, 1650, 1651, 5, 72, 0, 0, 1651, 1652, 3, 96, 48, 0, 1652, 75, 1, 0, 0, 0, 1653, 1654, 5, 476, 0, 0, 1654, 1655, 5, 420, 0, 0, 1655, 1656, 5, 94, 0, 0, 1656, 1657, 5, 32, 0, 0, 1657, 1658, 3, 828, 414, 0, 1658, 1659, 5, 450, 0, 0, 1659, 1660, 3, 96, 48, 0, 1660, 77, 1, 0, 0, 0, 1661, 1662, 5, 477, 0, 0, 1662, 1663, 5, 420, 0, 0, 1663, 1664, 5, 94, 0, 0, 1664, 1665, 5, 32, 0, 0, 1665, 1666, 3, 828, 414, 0, 1666, 1667, 5, 72, 0, 0, 1667, 1668, 3, 96, 48, 0, 1668, 79, 1, 0, 0, 0, 1669, 1670, 5, 476, 0, 0, 1670, 1671, 5, 484, 0, 0, 1671, 1672, 5, 94, 0, 0, 1672, 1673, 5, 332, 0, 0, 1673, 1674, 5, 330, 0, 0, 1674, 1675, 3, 828, 414, 0, 1675, 1676, 5, 450, 0, 0, 1676, 1677, 3, 96, 48, 0, 1677, 81, 1, 0, 0, 0, 1678, 1679, 5, 477, 0, 0, 1679, 1680, 5, 484, 0, 0, 1680, 1681, 5, 94, 0, 0, 1681, 1682, 5, 332, 0, 0, 1682, 1683, 5, 330, 0, 0, 1683, 1684, 3, 828, 414, 0, 1684, 1685, 5, 72, 0, 0, 1685, 1686, 3, 96, 48, 0, 1686, 83, 1, 0, 0, 0, 1687, 1688, 5, 476, 0, 0, 1688, 1689, 5, 484, 0, 0, 1689, 1690, 5, 94, 0, 0, 1690, 1691, 5, 362, 0, 0, 1691, 1692, 5, 329, 0, 0, 1692, 1693, 5, 330, 0, 0, 1693, 1694, 3, 828, 414, 0, 1694, 1695, 5, 450, 0, 0, 1695, 1696, 3, 96, 48, 0, 1696, 85, 1, 0, 0, 0, 1697, 1698, 5, 477, 0, 0, 1698, 1699, 5, 484, 0, 0, 1699, 1700, 5, 94, 0, 0, 1700, 1701, 5, 362, 0, 0, 1701, 1702, 5, 329, 0, 0, 1702, 1703, 5, 330, 0, 0, 1703, 1704, 3, 828, 414, 0, 1704, 1705, 5, 72, 0, 0, 1705, 1706, 3, 96, 48, 0, 1706, 87, 1, 0, 0, 0, 1707, 1708, 5, 18, 0, 0, 1708, 1709, 5, 59, 0, 0, 1709, 1710, 5, 473, 0, 0, 1710, 1711, 5, 485, 0, 0, 1711, 1719, 7, 4, 0, 0, 1712, 1713, 5, 18, 0, 0, 1713, 1714, 5, 59, 0, 0, 1714, 1715, 5, 473, 0, 0, 1715, 1716, 5, 481, 0, 0, 1716, 1717, 5, 516, 0, 0, 1717, 1719, 7, 5, 0, 0, 1718, 1707, 1, 0, 0, 0, 1718, 1712, 1, 0, 0, 0, 1719, 89, 1, 0, 0, 0, 1720, 1721, 5, 481, 0, 0, 1721, 1722, 5, 486, 0, 0, 1722, 1723, 5, 566, 0, 0, 1723, 1724, 5, 371, 0, 0, 1724, 1727, 5, 566, 0, 0, 1725, 1726, 5, 23, 0, 0, 1726, 1728, 3, 828, 414, 0, 1727, 1725, 1, 0, 0, 0, 1727, 1728, 1, 0, 0, 0, 1728, 1729, 1, 0, 0, 0, 1729, 1730, 5, 552, 0, 0, 1730, 1735, 3, 830, 415, 0, 1731, 1732, 5, 550, 0, 0, 1732, 1734, 3, 830, 415, 0, 1733, 1731, 1, 0, 0, 0, 1734, 1737, 1, 0, 0, 0, 1735, 1733, 1, 0, 0, 0, 1735, 1736, 1, 0, 0, 0, 1736, 1738, 1, 0, 0, 0, 1737, 1735, 1, 0, 0, 0, 1738, 1739, 5, 553, 0, 0, 1739, 91, 1, 0, 0, 0, 1740, 1741, 5, 19, 0, 0, 1741, 1742, 5, 481, 0, 0, 1742, 1743, 5, 486, 0, 0, 1743, 1744, 5, 566, 0, 0, 1744, 93, 1, 0, 0, 0, 1745, 1746, 5, 416, 0, 0, 1746, 1749, 5, 473, 0, 0, 1747, 1748, 5, 307, 0, 0, 1748, 1750, 3, 828, 414, 0, 1749, 1747, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 95, 1, 0, 0, 0, 1751, 1756, 3, 828, 414, 0, 1752, 1753, 5, 550, 0, 0, 1753, 1755, 3, 828, 414, 0, 1754, 1752, 1, 0, 0, 0, 1755, 1758, 1, 0, 0, 0, 1756, 1754, 1, 0, 0, 0, 1756, 1757, 1, 0, 0, 0, 1757, 97, 1, 0, 0, 0, 1758, 1756, 1, 0, 0, 0, 1759, 1764, 3, 100, 50, 0, 1760, 1761, 5, 550, 0, 0, 1761, 1763, 3, 100, 50, 0, 1762, 1760, 1, 0, 0, 0, 1763, 1766, 1, 0, 0, 0, 1764, 1762, 1, 0, 0, 0, 1764, 1765, 1, 0, 0, 0, 1765, 99, 1, 0, 0, 0, 1766, 1764, 1, 0, 0, 0, 1767, 1796, 5, 17, 0, 0, 1768, 1796, 5, 101, 0, 0, 1769, 1770, 5, 509, 0, 0, 1770, 1796, 5, 544, 0, 0, 1771, 1772, 5, 509, 0, 0, 1772, 1773, 5, 552, 0, 0, 1773, 1778, 5, 570, 0, 0, 1774, 1775, 5, 550, 0, 0, 1775, 1777, 5, 570, 0, 0, 1776, 1774, 1, 0, 0, 0, 1777, 1780, 1, 0, 0, 0, 1778, 1776, 1, 0, 0, 0, 1778, 1779, 1, 0, 0, 0, 1779, 1781, 1, 0, 0, 0, 1780, 1778, 1, 0, 0, 0, 1781, 1796, 5, 553, 0, 0, 1782, 1783, 5, 510, 0, 0, 1783, 1796, 5, 544, 0, 0, 1784, 1785, 5, 510, 0, 0, 1785, 1786, 5, 552, 0, 0, 1786, 1791, 5, 570, 0, 0, 1787, 1788, 5, 550, 0, 0, 1788, 1790, 5, 570, 0, 0, 1789, 1787, 1, 0, 0, 0, 1790, 1793, 1, 0, 0, 0, 1791, 1789, 1, 0, 0, 0, 1791, 1792, 1, 0, 0, 0, 1792, 1794, 1, 0, 0, 0, 1793, 1791, 1, 0, 0, 0, 1794, 1796, 5, 553, 0, 0, 1795, 1767, 1, 0, 0, 0, 1795, 1768, 1, 0, 0, 0, 1795, 1769, 1, 0, 0, 0, 1795, 1771, 1, 0, 0, 0, 1795, 1782, 1, 0, 0, 0, 1795, 1784, 1, 0, 0, 0, 1796, 101, 1, 0, 0, 0, 1797, 1798, 5, 24, 0, 0, 1798, 1799, 5, 23, 0, 0, 1799, 1801, 3, 828, 414, 0, 1800, 1802, 3, 104, 52, 0, 1801, 1800, 1, 0, 0, 0, 1801, 1802, 1, 0, 0, 0, 1802, 1804, 1, 0, 0, 0, 1803, 1805, 3, 106, 53, 0, 1804, 1803, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1844, 1, 0, 0, 0, 1806, 1807, 5, 11, 0, 0, 1807, 1808, 5, 23, 0, 0, 1808, 1810, 3, 828, 414, 0, 1809, 1811, 3, 104, 52, 0, 1810, 1809, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1813, 1, 0, 0, 0, 1812, 1814, 3, 106, 53, 0, 1813, 1812, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1844, 1, 0, 0, 0, 1815, 1816, 5, 25, 0, 0, 1816, 1817, 5, 23, 0, 0, 1817, 1819, 3, 828, 414, 0, 1818, 1820, 3, 106, 53, 0, 1819, 1818, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 1823, 5, 77, 0, 0, 1822, 1824, 5, 552, 0, 0, 1823, 1822, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 1827, 3, 698, 349, 0, 1826, 1828, 5, 553, 0, 0, 1827, 1826, 1, 0, 0, 0, 1827, 1828, 1, 0, 0, 0, 1828, 1844, 1, 0, 0, 0, 1829, 1830, 5, 26, 0, 0, 1830, 1831, 5, 23, 0, 0, 1831, 1833, 3, 828, 414, 0, 1832, 1834, 3, 106, 53, 0, 1833, 1832, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 1844, 1, 0, 0, 0, 1835, 1836, 5, 23, 0, 0, 1836, 1838, 3, 828, 414, 0, 1837, 1839, 3, 104, 52, 0, 1838, 1837, 1, 0, 0, 0, 1838, 1839, 1, 0, 0, 0, 1839, 1841, 1, 0, 0, 0, 1840, 1842, 3, 106, 53, 0, 1841, 1840, 1, 0, 0, 0, 1841, 1842, 1, 0, 0, 0, 1842, 1844, 1, 0, 0, 0, 1843, 1797, 1, 0, 0, 0, 1843, 1806, 1, 0, 0, 0, 1843, 1815, 1, 0, 0, 0, 1843, 1829, 1, 0, 0, 0, 1843, 1835, 1, 0, 0, 0, 1844, 103, 1, 0, 0, 0, 1845, 1846, 5, 46, 0, 0, 1846, 1850, 3, 828, 414, 0, 1847, 1848, 5, 45, 0, 0, 1848, 1850, 3, 828, 414, 0, 1849, 1845, 1, 0, 0, 0, 1849, 1847, 1, 0, 0, 0, 1850, 105, 1, 0, 0, 0, 1851, 1853, 5, 552, 0, 0, 1852, 1854, 3, 118, 59, 0, 1853, 1852, 1, 0, 0, 0, 1853, 1854, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1857, 5, 553, 0, 0, 1856, 1858, 3, 108, 54, 0, 1857, 1856, 1, 0, 0, 0, 1857, 1858, 1, 0, 0, 0, 1858, 1861, 1, 0, 0, 0, 1859, 1861, 3, 108, 54, 0, 1860, 1851, 1, 0, 0, 0, 1860, 1859, 1, 0, 0, 0, 1861, 107, 1, 0, 0, 0, 1862, 1869, 3, 110, 55, 0, 1863, 1865, 5, 550, 0, 0, 1864, 1863, 1, 0, 0, 0, 1864, 1865, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1868, 3, 110, 55, 0, 1867, 1864, 1, 0, 0, 0, 1868, 1871, 1, 0, 0, 0, 1869, 1867, 1, 0, 0, 0, 1869, 1870, 1, 0, 0, 0, 1870, 109, 1, 0, 0, 0, 1871, 1869, 1, 0, 0, 0, 1872, 1873, 5, 429, 0, 0, 1873, 1878, 5, 566, 0, 0, 1874, 1875, 5, 41, 0, 0, 1875, 1878, 3, 132, 66, 0, 1876, 1878, 3, 112, 56, 0, 1877, 1872, 1, 0, 0, 0, 1877, 1874, 1, 0, 0, 0, 1877, 1876, 1, 0, 0, 0, 1878, 111, 1, 0, 0, 0, 1879, 1880, 5, 94, 0, 0, 1880, 1881, 3, 114, 57, 0, 1881, 1882, 3, 116, 58, 0, 1882, 1883, 5, 114, 0, 0, 1883, 1889, 3, 828, 414, 0, 1884, 1886, 5, 552, 0, 0, 1885, 1887, 5, 569, 0, 0, 1886, 1885, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1888, 1, 0, 0, 0, 1888, 1890, 5, 553, 0, 0, 1889, 1884, 1, 0, 0, 0, 1889, 1890, 1, 0, 0, 0, 1890, 1893, 1, 0, 0, 0, 1891, 1892, 5, 321, 0, 0, 1892, 1894, 5, 320, 0, 0, 1893, 1891, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 113, 1, 0, 0, 0, 1895, 1896, 7, 6, 0, 0, 1896, 115, 1, 0, 0, 0, 1897, 1898, 7, 7, 0, 0, 1898, 117, 1, 0, 0, 0, 1899, 1904, 3, 120, 60, 0, 1900, 1901, 5, 550, 0, 0, 1901, 1903, 3, 120, 60, 0, 1902, 1900, 1, 0, 0, 0, 1903, 1906, 1, 0, 0, 0, 1904, 1902, 1, 0, 0, 0, 1904, 1905, 1, 0, 0, 0, 1905, 119, 1, 0, 0, 0, 1906, 1904, 1, 0, 0, 0, 1907, 1909, 3, 838, 419, 0, 1908, 1907, 1, 0, 0, 0, 1908, 1909, 1, 0, 0, 0, 1909, 1913, 1, 0, 0, 0, 1910, 1912, 3, 840, 420, 0, 1911, 1910, 1, 0, 0, 0, 1912, 1915, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1914, 1916, 1, 0, 0, 0, 1915, 1913, 1, 0, 0, 0, 1916, 1917, 3, 122, 61, 0, 1917, 1918, 5, 558, 0, 0, 1918, 1922, 3, 126, 63, 0, 1919, 1921, 3, 124, 62, 0, 1920, 1919, 1, 0, 0, 0, 1921, 1924, 1, 0, 0, 0, 1922, 1920, 1, 0, 0, 0, 1922, 1923, 1, 0, 0, 0, 1923, 121, 1, 0, 0, 0, 1924, 1922, 1, 0, 0, 0, 1925, 1929, 5, 570, 0, 0, 1926, 1929, 5, 572, 0, 0, 1927, 1929, 3, 850, 425, 0, 1928, 1925, 1, 0, 0, 0, 1928, 1926, 1, 0, 0, 0, 1928, 1927, 1, 0, 0, 0, 1929, 123, 1, 0, 0, 0, 1930, 1933, 5, 7, 0, 0, 1931, 1932, 5, 320, 0, 0, 1932, 1934, 5, 566, 0, 0, 1933, 1931, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1964, 1, 0, 0, 0, 1935, 1936, 5, 305, 0, 0, 1936, 1939, 5, 306, 0, 0, 1937, 1938, 5, 320, 0, 0, 1938, 1940, 5, 566, 0, 0, 1939, 1937, 1, 0, 0, 0, 1939, 1940, 1, 0, 0, 0, 1940, 1964, 1, 0, 0, 0, 1941, 1944, 5, 312, 0, 0, 1942, 1943, 5, 320, 0, 0, 1943, 1945, 5, 566, 0, 0, 1944, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1964, 1, 0, 0, 0, 1946, 1949, 5, 313, 0, 0, 1947, 1950, 3, 832, 416, 0, 1948, 1950, 3, 784, 392, 0, 1949, 1947, 1, 0, 0, 0, 1949, 1948, 1, 0, 0, 0, 1950, 1964, 1, 0, 0, 0, 1951, 1954, 5, 319, 0, 0, 1952, 1953, 5, 320, 0, 0, 1953, 1955, 5, 566, 0, 0, 1954, 1952, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 1964, 1, 0, 0, 0, 1956, 1961, 5, 328, 0, 0, 1957, 1959, 5, 508, 0, 0, 1958, 1957, 1, 0, 0, 0, 1958, 1959, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 3, 828, 414, 0, 1961, 1958, 1, 0, 0, 0, 1961, 1962, 1, 0, 0, 0, 1962, 1964, 1, 0, 0, 0, 1963, 1930, 1, 0, 0, 0, 1963, 1935, 1, 0, 0, 0, 1963, 1941, 1, 0, 0, 0, 1963, 1946, 1, 0, 0, 0, 1963, 1951, 1, 0, 0, 0, 1963, 1956, 1, 0, 0, 0, 1964, 125, 1, 0, 0, 0, 1965, 1969, 5, 276, 0, 0, 1966, 1967, 5, 552, 0, 0, 1967, 1968, 7, 8, 0, 0, 1968, 1970, 5, 553, 0, 0, 1969, 1966, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 2006, 1, 0, 0, 0, 1971, 2006, 5, 277, 0, 0, 1972, 2006, 5, 278, 0, 0, 1973, 2006, 5, 279, 0, 0, 1974, 2006, 5, 280, 0, 0, 1975, 2006, 5, 281, 0, 0, 1976, 2006, 5, 282, 0, 0, 1977, 2006, 5, 283, 0, 0, 1978, 2006, 5, 284, 0, 0, 1979, 2006, 5, 285, 0, 0, 1980, 2006, 5, 286, 0, 0, 1981, 2006, 5, 287, 0, 0, 1982, 2006, 5, 288, 0, 0, 1983, 2006, 5, 289, 0, 0, 1984, 2006, 5, 290, 0, 0, 1985, 2006, 5, 291, 0, 0, 1986, 1987, 5, 292, 0, 0, 1987, 1988, 5, 552, 0, 0, 1988, 1989, 3, 128, 64, 0, 1989, 1990, 5, 553, 0, 0, 1990, 2006, 1, 0, 0, 0, 1991, 1992, 5, 23, 0, 0, 1992, 1993, 5, 540, 0, 0, 1993, 1994, 5, 570, 0, 0, 1994, 2006, 5, 541, 0, 0, 1995, 1996, 5, 293, 0, 0, 1996, 2006, 3, 828, 414, 0, 1997, 1998, 5, 28, 0, 0, 1998, 1999, 5, 552, 0, 0, 1999, 2000, 3, 828, 414, 0, 2000, 2001, 5, 553, 0, 0, 2001, 2006, 1, 0, 0, 0, 2002, 2003, 5, 13, 0, 0, 2003, 2006, 3, 828, 414, 0, 2004, 2006, 3, 828, 414, 0, 2005, 1965, 1, 0, 0, 0, 2005, 1971, 1, 0, 0, 0, 2005, 1972, 1, 0, 0, 0, 2005, 1973, 1, 0, 0, 0, 2005, 1974, 1, 0, 0, 0, 2005, 1975, 1, 0, 0, 0, 2005, 1976, 1, 0, 0, 0, 2005, 1977, 1, 0, 0, 0, 2005, 1978, 1, 0, 0, 0, 2005, 1979, 1, 0, 0, 0, 2005, 1980, 1, 0, 0, 0, 2005, 1981, 1, 0, 0, 0, 2005, 1982, 1, 0, 0, 0, 2005, 1983, 1, 0, 0, 0, 2005, 1984, 1, 0, 0, 0, 2005, 1985, 1, 0, 0, 0, 2005, 1986, 1, 0, 0, 0, 2005, 1991, 1, 0, 0, 0, 2005, 1995, 1, 0, 0, 0, 2005, 1997, 1, 0, 0, 0, 2005, 2002, 1, 0, 0, 0, 2005, 2004, 1, 0, 0, 0, 2006, 127, 1, 0, 0, 0, 2007, 2008, 7, 9, 0, 0, 2008, 129, 1, 0, 0, 0, 2009, 2013, 5, 276, 0, 0, 2010, 2011, 5, 552, 0, 0, 2011, 2012, 7, 8, 0, 0, 2012, 2014, 5, 553, 0, 0, 2013, 2010, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2039, 1, 0, 0, 0, 2015, 2039, 5, 277, 0, 0, 2016, 2039, 5, 278, 0, 0, 2017, 2039, 5, 279, 0, 0, 2018, 2039, 5, 280, 0, 0, 2019, 2039, 5, 281, 0, 0, 2020, 2039, 5, 282, 0, 0, 2021, 2039, 5, 283, 0, 0, 2022, 2039, 5, 284, 0, 0, 2023, 2039, 5, 285, 0, 0, 2024, 2039, 5, 286, 0, 0, 2025, 2039, 5, 287, 0, 0, 2026, 2039, 5, 288, 0, 0, 2027, 2039, 5, 289, 0, 0, 2028, 2039, 5, 290, 0, 0, 2029, 2039, 5, 291, 0, 0, 2030, 2031, 5, 293, 0, 0, 2031, 2039, 3, 828, 414, 0, 2032, 2033, 5, 28, 0, 0, 2033, 2034, 5, 552, 0, 0, 2034, 2035, 3, 828, 414, 0, 2035, 2036, 5, 553, 0, 0, 2036, 2039, 1, 0, 0, 0, 2037, 2039, 3, 828, 414, 0, 2038, 2009, 1, 0, 0, 0, 2038, 2015, 1, 0, 0, 0, 2038, 2016, 1, 0, 0, 0, 2038, 2017, 1, 0, 0, 0, 2038, 2018, 1, 0, 0, 0, 2038, 2019, 1, 0, 0, 0, 2038, 2020, 1, 0, 0, 0, 2038, 2021, 1, 0, 0, 0, 2038, 2022, 1, 0, 0, 0, 2038, 2023, 1, 0, 0, 0, 2038, 2024, 1, 0, 0, 0, 2038, 2025, 1, 0, 0, 0, 2038, 2026, 1, 0, 0, 0, 2038, 2027, 1, 0, 0, 0, 2038, 2028, 1, 0, 0, 0, 2038, 2029, 1, 0, 0, 0, 2038, 2030, 1, 0, 0, 0, 2038, 2032, 1, 0, 0, 0, 2038, 2037, 1, 0, 0, 0, 2039, 131, 1, 0, 0, 0, 2040, 2042, 5, 570, 0, 0, 2041, 2040, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2043, 1, 0, 0, 0, 2043, 2044, 5, 552, 0, 0, 2044, 2045, 3, 134, 67, 0, 2045, 2046, 5, 553, 0, 0, 2046, 133, 1, 0, 0, 0, 2047, 2052, 3, 136, 68, 0, 2048, 2049, 5, 550, 0, 0, 2049, 2051, 3, 136, 68, 0, 2050, 2048, 1, 0, 0, 0, 2051, 2054, 1, 0, 0, 0, 2052, 2050, 1, 0, 0, 0, 2052, 2053, 1, 0, 0, 0, 2053, 135, 1, 0, 0, 0, 2054, 2052, 1, 0, 0, 0, 2055, 2057, 3, 138, 69, 0, 2056, 2058, 7, 10, 0, 0, 2057, 2056, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 137, 1, 0, 0, 0, 2059, 2063, 5, 570, 0, 0, 2060, 2063, 5, 572, 0, 0, 2061, 2063, 3, 850, 425, 0, 2062, 2059, 1, 0, 0, 0, 2062, 2060, 1, 0, 0, 0, 2062, 2061, 1, 0, 0, 0, 2063, 139, 1, 0, 0, 0, 2064, 2065, 5, 27, 0, 0, 2065, 2066, 3, 828, 414, 0, 2066, 2067, 5, 72, 0, 0, 2067, 2068, 3, 828, 414, 0, 2068, 2069, 5, 450, 0, 0, 2069, 2071, 3, 828, 414, 0, 2070, 2072, 3, 142, 71, 0, 2071, 2070, 1, 0, 0, 0, 2071, 2072, 1, 0, 0, 0, 2072, 2090, 1, 0, 0, 0, 2073, 2074, 5, 27, 0, 0, 2074, 2075, 3, 828, 414, 0, 2075, 2076, 5, 552, 0, 0, 2076, 2077, 5, 72, 0, 0, 2077, 2078, 3, 828, 414, 0, 2078, 2079, 5, 450, 0, 0, 2079, 2084, 3, 828, 414, 0, 2080, 2081, 5, 550, 0, 0, 2081, 2083, 3, 144, 72, 0, 2082, 2080, 1, 0, 0, 0, 2083, 2086, 1, 0, 0, 0, 2084, 2082, 1, 0, 0, 0, 2084, 2085, 1, 0, 0, 0, 2085, 2087, 1, 0, 0, 0, 2086, 2084, 1, 0, 0, 0, 2087, 2088, 5, 553, 0, 0, 2088, 2090, 1, 0, 0, 0, 2089, 2064, 1, 0, 0, 0, 2089, 2073, 1, 0, 0, 0, 2090, 141, 1, 0, 0, 0, 2091, 2093, 3, 144, 72, 0, 2092, 2091, 1, 0, 0, 0, 2093, 2094, 1, 0, 0, 0, 2094, 2092, 1, 0, 0, 0, 2094, 2095, 1, 0, 0, 0, 2095, 143, 1, 0, 0, 0, 2096, 2098, 5, 443, 0, 0, 2097, 2099, 5, 558, 0, 0, 2098, 2097, 1, 0, 0, 0, 2098, 2099, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2116, 7, 11, 0, 0, 2101, 2103, 5, 42, 0, 0, 2102, 2104, 5, 558, 0, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2105, 1, 0, 0, 0, 2105, 2116, 7, 12, 0, 0, 2106, 2108, 5, 51, 0, 0, 2107, 2109, 5, 558, 0, 0, 2108, 2107, 1, 0, 0, 0, 2108, 2109, 1, 0, 0, 0, 2109, 2110, 1, 0, 0, 0, 2110, 2116, 7, 13, 0, 0, 2111, 2112, 5, 53, 0, 0, 2112, 2116, 3, 146, 73, 0, 2113, 2114, 5, 429, 0, 0, 2114, 2116, 5, 566, 0, 0, 2115, 2096, 1, 0, 0, 0, 2115, 2101, 1, 0, 0, 0, 2115, 2106, 1, 0, 0, 0, 2115, 2111, 1, 0, 0, 0, 2115, 2113, 1, 0, 0, 0, 2116, 145, 1, 0, 0, 0, 2117, 2118, 7, 14, 0, 0, 2118, 147, 1, 0, 0, 0, 2119, 2120, 5, 47, 0, 0, 2120, 2121, 5, 38, 0, 0, 2121, 2200, 3, 120, 60, 0, 2122, 2123, 5, 47, 0, 0, 2123, 2124, 5, 39, 0, 0, 2124, 2200, 3, 120, 60, 0, 2125, 2126, 5, 20, 0, 0, 2126, 2127, 5, 38, 0, 0, 2127, 2128, 3, 122, 61, 0, 2128, 2129, 5, 450, 0, 0, 2129, 2130, 3, 122, 61, 0, 2130, 2200, 1, 0, 0, 0, 2131, 2132, 5, 20, 0, 0, 2132, 2133, 5, 39, 0, 0, 2133, 2134, 3, 122, 61, 0, 2134, 2135, 5, 450, 0, 0, 2135, 2136, 3, 122, 61, 0, 2136, 2200, 1, 0, 0, 0, 2137, 2138, 5, 22, 0, 0, 2138, 2139, 5, 38, 0, 0, 2139, 2141, 3, 122, 61, 0, 2140, 2142, 5, 558, 0, 0, 2141, 2140, 1, 0, 0, 0, 2141, 2142, 1, 0, 0, 0, 2142, 2143, 1, 0, 0, 0, 2143, 2147, 3, 126, 63, 0, 2144, 2146, 3, 124, 62, 0, 2145, 2144, 1, 0, 0, 0, 2146, 2149, 1, 0, 0, 0, 2147, 2145, 1, 0, 0, 0, 2147, 2148, 1, 0, 0, 0, 2148, 2200, 1, 0, 0, 0, 2149, 2147, 1, 0, 0, 0, 2150, 2151, 5, 22, 0, 0, 2151, 2152, 5, 39, 0, 0, 2152, 2154, 3, 122, 61, 0, 2153, 2155, 5, 558, 0, 0, 2154, 2153, 1, 0, 0, 0, 2154, 2155, 1, 0, 0, 0, 2155, 2156, 1, 0, 0, 0, 2156, 2160, 3, 126, 63, 0, 2157, 2159, 3, 124, 62, 0, 2158, 2157, 1, 0, 0, 0, 2159, 2162, 1, 0, 0, 0, 2160, 2158, 1, 0, 0, 0, 2160, 2161, 1, 0, 0, 0, 2161, 2200, 1, 0, 0, 0, 2162, 2160, 1, 0, 0, 0, 2163, 2164, 5, 19, 0, 0, 2164, 2165, 5, 38, 0, 0, 2165, 2200, 3, 122, 61, 0, 2166, 2167, 5, 19, 0, 0, 2167, 2168, 5, 39, 0, 0, 2168, 2200, 3, 122, 61, 0, 2169, 2170, 5, 48, 0, 0, 2170, 2171, 5, 50, 0, 0, 2171, 2200, 5, 566, 0, 0, 2172, 2173, 5, 48, 0, 0, 2173, 2174, 5, 429, 0, 0, 2174, 2200, 5, 566, 0, 0, 2175, 2176, 5, 48, 0, 0, 2176, 2177, 5, 49, 0, 0, 2177, 2178, 5, 552, 0, 0, 2178, 2179, 5, 568, 0, 0, 2179, 2180, 5, 550, 0, 0, 2180, 2181, 5, 568, 0, 0, 2181, 2200, 5, 553, 0, 0, 2182, 2183, 5, 47, 0, 0, 2183, 2184, 5, 41, 0, 0, 2184, 2200, 3, 132, 66, 0, 2185, 2186, 5, 19, 0, 0, 2186, 2187, 5, 41, 0, 0, 2187, 2200, 5, 570, 0, 0, 2188, 2189, 5, 47, 0, 0, 2189, 2190, 5, 465, 0, 0, 2190, 2191, 5, 466, 0, 0, 2191, 2200, 3, 112, 56, 0, 2192, 2193, 5, 19, 0, 0, 2193, 2194, 5, 465, 0, 0, 2194, 2195, 5, 466, 0, 0, 2195, 2196, 5, 94, 0, 0, 2196, 2197, 3, 114, 57, 0, 2197, 2198, 3, 116, 58, 0, 2198, 2200, 1, 0, 0, 0, 2199, 2119, 1, 0, 0, 0, 2199, 2122, 1, 0, 0, 0, 2199, 2125, 1, 0, 0, 0, 2199, 2131, 1, 0, 0, 0, 2199, 2137, 1, 0, 0, 0, 2199, 2150, 1, 0, 0, 0, 2199, 2163, 1, 0, 0, 0, 2199, 2166, 1, 0, 0, 0, 2199, 2169, 1, 0, 0, 0, 2199, 2172, 1, 0, 0, 0, 2199, 2175, 1, 0, 0, 0, 2199, 2182, 1, 0, 0, 0, 2199, 2185, 1, 0, 0, 0, 2199, 2188, 1, 0, 0, 0, 2199, 2192, 1, 0, 0, 0, 2200, 149, 1, 0, 0, 0, 2201, 2202, 5, 48, 0, 0, 2202, 2203, 5, 53, 0, 0, 2203, 2214, 3, 146, 73, 0, 2204, 2205, 5, 48, 0, 0, 2205, 2206, 5, 42, 0, 0, 2206, 2214, 7, 12, 0, 0, 2207, 2208, 5, 48, 0, 0, 2208, 2209, 5, 51, 0, 0, 2209, 2214, 7, 13, 0, 0, 2210, 2211, 5, 48, 0, 0, 2211, 2212, 5, 429, 0, 0, 2212, 2214, 5, 566, 0, 0, 2213, 2201, 1, 0, 0, 0, 2213, 2204, 1, 0, 0, 0, 2213, 2207, 1, 0, 0, 0, 2213, 2210, 1, 0, 0, 0, 2214, 151, 1, 0, 0, 0, 2215, 2216, 5, 47, 0, 0, 2216, 2217, 5, 444, 0, 0, 2217, 2220, 5, 570, 0, 0, 2218, 2219, 5, 191, 0, 0, 2219, 2221, 5, 566, 0, 0, 2220, 2218, 1, 0, 0, 0, 2220, 2221, 1, 0, 0, 0, 2221, 2234, 1, 0, 0, 0, 2222, 2223, 5, 20, 0, 0, 2223, 2224, 5, 444, 0, 0, 2224, 2225, 5, 570, 0, 0, 2225, 2226, 5, 450, 0, 0, 2226, 2234, 5, 570, 0, 0, 2227, 2228, 5, 19, 0, 0, 2228, 2229, 5, 444, 0, 0, 2229, 2234, 5, 570, 0, 0, 2230, 2231, 5, 48, 0, 0, 2231, 2232, 5, 429, 0, 0, 2232, 2234, 5, 566, 0, 0, 2233, 2215, 1, 0, 0, 0, 2233, 2222, 1, 0, 0, 0, 2233, 2227, 1, 0, 0, 0, 2233, 2230, 1, 0, 0, 0, 2234, 153, 1, 0, 0, 0, 2235, 2236, 5, 47, 0, 0, 2236, 2237, 5, 33, 0, 0, 2237, 2240, 3, 828, 414, 0, 2238, 2239, 5, 49, 0, 0, 2239, 2241, 5, 568, 0, 0, 2240, 2238, 1, 0, 0, 0, 2240, 2241, 1, 0, 0, 0, 2241, 2249, 1, 0, 0, 0, 2242, 2243, 5, 19, 0, 0, 2243, 2244, 5, 33, 0, 0, 2244, 2249, 3, 828, 414, 0, 2245, 2246, 5, 48, 0, 0, 2246, 2247, 5, 429, 0, 0, 2247, 2249, 5, 566, 0, 0, 2248, 2235, 1, 0, 0, 0, 2248, 2242, 1, 0, 0, 0, 2248, 2245, 1, 0, 0, 0, 2249, 155, 1, 0, 0, 0, 2250, 2251, 5, 29, 0, 0, 2251, 2253, 3, 830, 415, 0, 2252, 2254, 3, 158, 79, 0, 2253, 2252, 1, 0, 0, 0, 2253, 2254, 1, 0, 0, 0, 2254, 157, 1, 0, 0, 0, 2255, 2257, 3, 160, 80, 0, 2256, 2255, 1, 0, 0, 0, 2257, 2258, 1, 0, 0, 0, 2258, 2256, 1, 0, 0, 0, 2258, 2259, 1, 0, 0, 0, 2259, 159, 1, 0, 0, 0, 2260, 2261, 5, 429, 0, 0, 2261, 2265, 5, 566, 0, 0, 2262, 2263, 5, 222, 0, 0, 2263, 2265, 5, 566, 0, 0, 2264, 2260, 1, 0, 0, 0, 2264, 2262, 1, 0, 0, 0, 2265, 161, 1, 0, 0, 0, 2266, 2267, 5, 28, 0, 0, 2267, 2268, 3, 828, 414, 0, 2268, 2269, 5, 552, 0, 0, 2269, 2270, 3, 164, 82, 0, 2270, 2272, 5, 553, 0, 0, 2271, 2273, 3, 170, 85, 0, 2272, 2271, 1, 0, 0, 0, 2272, 2273, 1, 0, 0, 0, 2273, 163, 1, 0, 0, 0, 2274, 2279, 3, 166, 83, 0, 2275, 2276, 5, 550, 0, 0, 2276, 2278, 3, 166, 83, 0, 2277, 2275, 1, 0, 0, 0, 2278, 2281, 1, 0, 0, 0, 2279, 2277, 1, 0, 0, 0, 2279, 2280, 1, 0, 0, 0, 2280, 165, 1, 0, 0, 0, 2281, 2279, 1, 0, 0, 0, 2282, 2284, 3, 838, 419, 0, 2283, 2282, 1, 0, 0, 0, 2283, 2284, 1, 0, 0, 0, 2284, 2285, 1, 0, 0, 0, 2285, 2290, 3, 168, 84, 0, 2286, 2288, 5, 191, 0, 0, 2287, 2286, 1, 0, 0, 0, 2287, 2288, 1, 0, 0, 0, 2288, 2289, 1, 0, 0, 0, 2289, 2291, 5, 566, 0, 0, 2290, 2287, 1, 0, 0, 0, 2290, 2291, 1, 0, 0, 0, 2291, 167, 1, 0, 0, 0, 2292, 2296, 5, 570, 0, 0, 2293, 2296, 5, 572, 0, 0, 2294, 2296, 3, 850, 425, 0, 2295, 2292, 1, 0, 0, 0, 2295, 2293, 1, 0, 0, 0, 2295, 2294, 1, 0, 0, 0, 2296, 169, 1, 0, 0, 0, 2297, 2299, 3, 172, 86, 0, 2298, 2297, 1, 0, 0, 0, 2299, 2300, 1, 0, 0, 0, 2300, 2298, 1, 0, 0, 0, 2300, 2301, 1, 0, 0, 0, 2301, 171, 1, 0, 0, 0, 2302, 2303, 5, 429, 0, 0, 2303, 2304, 5, 566, 0, 0, 2304, 173, 1, 0, 0, 0, 2305, 2306, 5, 229, 0, 0, 2306, 2307, 5, 230, 0, 0, 2307, 2309, 3, 828, 414, 0, 2308, 2310, 3, 176, 88, 0, 2309, 2308, 1, 0, 0, 0, 2309, 2310, 1, 0, 0, 0, 2310, 2312, 1, 0, 0, 0, 2311, 2313, 3, 180, 90, 0, 2312, 2311, 1, 0, 0, 0, 2312, 2313, 1, 0, 0, 0, 2313, 175, 1, 0, 0, 0, 2314, 2316, 3, 178, 89, 0, 2315, 2314, 1, 0, 0, 0, 2316, 2317, 1, 0, 0, 0, 2317, 2315, 1, 0, 0, 0, 2317, 2318, 1, 0, 0, 0, 2318, 177, 1, 0, 0, 0, 2319, 2320, 5, 384, 0, 0, 2320, 2321, 5, 485, 0, 0, 2321, 2325, 5, 566, 0, 0, 2322, 2323, 5, 429, 0, 0, 2323, 2325, 5, 566, 0, 0, 2324, 2319, 1, 0, 0, 0, 2324, 2322, 1, 0, 0, 0, 2325, 179, 1, 0, 0, 0, 2326, 2327, 5, 552, 0, 0, 2327, 2332, 3, 182, 91, 0, 2328, 2329, 5, 550, 0, 0, 2329, 2331, 3, 182, 91, 0, 2330, 2328, 1, 0, 0, 0, 2331, 2334, 1, 0, 0, 0, 2332, 2330, 1, 0, 0, 0, 2332, 2333, 1, 0, 0, 0, 2333, 2335, 1, 0, 0, 0, 2334, 2332, 1, 0, 0, 0, 2335, 2336, 5, 553, 0, 0, 2336, 181, 1, 0, 0, 0, 2337, 2338, 5, 229, 0, 0, 2338, 2339, 3, 184, 92, 0, 2339, 2340, 5, 72, 0, 0, 2340, 2341, 5, 352, 0, 0, 2341, 2342, 5, 566, 0, 0, 2342, 183, 1, 0, 0, 0, 2343, 2347, 5, 570, 0, 0, 2344, 2347, 5, 572, 0, 0, 2345, 2347, 3, 850, 425, 0, 2346, 2343, 1, 0, 0, 0, 2346, 2344, 1, 0, 0, 0, 2346, 2345, 1, 0, 0, 0, 2347, 185, 1, 0, 0, 0, 2348, 2349, 5, 231, 0, 0, 2349, 2350, 3, 828, 414, 0, 2350, 2351, 5, 552, 0, 0, 2351, 2356, 3, 188, 94, 0, 2352, 2353, 5, 550, 0, 0, 2353, 2355, 3, 188, 94, 0, 2354, 2352, 1, 0, 0, 0, 2355, 2358, 1, 0, 0, 0, 2356, 2354, 1, 0, 0, 0, 2356, 2357, 1, 0, 0, 0, 2357, 2359, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2359, 2360, 5, 553, 0, 0, 2360, 187, 1, 0, 0, 0, 2361, 2362, 3, 830, 415, 0, 2362, 2363, 5, 558, 0, 0, 2363, 2364, 3, 830, 415, 0, 2364, 2392, 1, 0, 0, 0, 2365, 2366, 3, 830, 415, 0, 2366, 2367, 5, 558, 0, 0, 2367, 2368, 3, 828, 414, 0, 2368, 2392, 1, 0, 0, 0, 2369, 2370, 3, 830, 415, 0, 2370, 2371, 5, 558, 0, 0, 2371, 2372, 5, 566, 0, 0, 2372, 2392, 1, 0, 0, 0, 2373, 2374, 3, 830, 415, 0, 2374, 2375, 5, 558, 0, 0, 2375, 2376, 5, 568, 0, 0, 2376, 2392, 1, 0, 0, 0, 2377, 2378, 3, 830, 415, 0, 2378, 2379, 5, 558, 0, 0, 2379, 2380, 3, 836, 418, 0, 2380, 2392, 1, 0, 0, 0, 2381, 2382, 3, 830, 415, 0, 2382, 2383, 5, 558, 0, 0, 2383, 2384, 5, 567, 0, 0, 2384, 2392, 1, 0, 0, 0, 2385, 2386, 3, 830, 415, 0, 2386, 2387, 5, 558, 0, 0, 2387, 2388, 5, 552, 0, 0, 2388, 2389, 3, 190, 95, 0, 2389, 2390, 5, 553, 0, 0, 2390, 2392, 1, 0, 0, 0, 2391, 2361, 1, 0, 0, 0, 2391, 2365, 1, 0, 0, 0, 2391, 2369, 1, 0, 0, 0, 2391, 2373, 1, 0, 0, 0, 2391, 2377, 1, 0, 0, 0, 2391, 2381, 1, 0, 0, 0, 2391, 2385, 1, 0, 0, 0, 2392, 189, 1, 0, 0, 0, 2393, 2398, 3, 192, 96, 0, 2394, 2395, 5, 550, 0, 0, 2395, 2397, 3, 192, 96, 0, 2396, 2394, 1, 0, 0, 0, 2397, 2400, 1, 0, 0, 0, 2398, 2396, 1, 0, 0, 0, 2398, 2399, 1, 0, 0, 0, 2399, 191, 1, 0, 0, 0, 2400, 2398, 1, 0, 0, 0, 2401, 2402, 7, 15, 0, 0, 2402, 2403, 5, 558, 0, 0, 2403, 2404, 3, 830, 415, 0, 2404, 193, 1, 0, 0, 0, 2405, 2406, 5, 238, 0, 0, 2406, 2407, 5, 239, 0, 0, 2407, 2408, 5, 330, 0, 0, 2408, 2409, 3, 828, 414, 0, 2409, 2410, 5, 552, 0, 0, 2410, 2415, 3, 188, 94, 0, 2411, 2412, 5, 550, 0, 0, 2412, 2414, 3, 188, 94, 0, 2413, 2411, 1, 0, 0, 0, 2414, 2417, 1, 0, 0, 0, 2415, 2413, 1, 0, 0, 0, 2415, 2416, 1, 0, 0, 0, 2416, 2418, 1, 0, 0, 0, 2417, 2415, 1, 0, 0, 0, 2418, 2419, 5, 553, 0, 0, 2419, 195, 1, 0, 0, 0, 2420, 2421, 5, 236, 0, 0, 2421, 2422, 5, 333, 0, 0, 2422, 2423, 3, 828, 414, 0, 2423, 2424, 5, 552, 0, 0, 2424, 2429, 3, 188, 94, 0, 2425, 2426, 5, 550, 0, 0, 2426, 2428, 3, 188, 94, 0, 2427, 2425, 1, 0, 0, 0, 2428, 2431, 1, 0, 0, 0, 2429, 2427, 1, 0, 0, 0, 2429, 2430, 1, 0, 0, 0, 2430, 2432, 1, 0, 0, 0, 2431, 2429, 1, 0, 0, 0, 2432, 2433, 5, 553, 0, 0, 2433, 197, 1, 0, 0, 0, 2434, 2435, 5, 233, 0, 0, 2435, 2436, 3, 828, 414, 0, 2436, 2437, 5, 552, 0, 0, 2437, 2442, 3, 188, 94, 0, 2438, 2439, 5, 550, 0, 0, 2439, 2441, 3, 188, 94, 0, 2440, 2438, 1, 0, 0, 0, 2441, 2444, 1, 0, 0, 0, 2442, 2440, 1, 0, 0, 0, 2442, 2443, 1, 0, 0, 0, 2443, 2445, 1, 0, 0, 0, 2444, 2442, 1, 0, 0, 0, 2445, 2447, 5, 553, 0, 0, 2446, 2448, 3, 200, 100, 0, 2447, 2446, 1, 0, 0, 0, 2447, 2448, 1, 0, 0, 0, 2448, 199, 1, 0, 0, 0, 2449, 2453, 5, 554, 0, 0, 2450, 2452, 3, 202, 101, 0, 2451, 2450, 1, 0, 0, 0, 2452, 2455, 1, 0, 0, 0, 2453, 2451, 1, 0, 0, 0, 2453, 2454, 1, 0, 0, 0, 2454, 2456, 1, 0, 0, 0, 2455, 2453, 1, 0, 0, 0, 2456, 2457, 5, 555, 0, 0, 2457, 201, 1, 0, 0, 0, 2458, 2459, 5, 239, 0, 0, 2459, 2460, 5, 330, 0, 0, 2460, 2461, 3, 828, 414, 0, 2461, 2462, 5, 554, 0, 0, 2462, 2467, 3, 188, 94, 0, 2463, 2464, 5, 550, 0, 0, 2464, 2466, 3, 188, 94, 0, 2465, 2463, 1, 0, 0, 0, 2466, 2469, 1, 0, 0, 0, 2467, 2465, 1, 0, 0, 0, 2467, 2468, 1, 0, 0, 0, 2468, 2470, 1, 0, 0, 0, 2469, 2467, 1, 0, 0, 0, 2470, 2471, 5, 555, 0, 0, 2471, 2500, 1, 0, 0, 0, 2472, 2473, 5, 236, 0, 0, 2473, 2474, 5, 333, 0, 0, 2474, 2475, 3, 830, 415, 0, 2475, 2476, 5, 554, 0, 0, 2476, 2481, 3, 188, 94, 0, 2477, 2478, 5, 550, 0, 0, 2478, 2480, 3, 188, 94, 0, 2479, 2477, 1, 0, 0, 0, 2480, 2483, 1, 0, 0, 0, 2481, 2479, 1, 0, 0, 0, 2481, 2482, 1, 0, 0, 0, 2482, 2484, 1, 0, 0, 0, 2483, 2481, 1, 0, 0, 0, 2484, 2485, 5, 555, 0, 0, 2485, 2500, 1, 0, 0, 0, 2486, 2487, 5, 235, 0, 0, 2487, 2488, 3, 830, 415, 0, 2488, 2489, 5, 554, 0, 0, 2489, 2494, 3, 188, 94, 0, 2490, 2491, 5, 550, 0, 0, 2491, 2493, 3, 188, 94, 0, 2492, 2490, 1, 0, 0, 0, 2493, 2496, 1, 0, 0, 0, 2494, 2492, 1, 0, 0, 0, 2494, 2495, 1, 0, 0, 0, 2495, 2497, 1, 0, 0, 0, 2496, 2494, 1, 0, 0, 0, 2497, 2498, 5, 555, 0, 0, 2498, 2500, 1, 0, 0, 0, 2499, 2458, 1, 0, 0, 0, 2499, 2472, 1, 0, 0, 0, 2499, 2486, 1, 0, 0, 0, 2500, 203, 1, 0, 0, 0, 2501, 2502, 5, 349, 0, 0, 2502, 2503, 5, 440, 0, 0, 2503, 2506, 3, 828, 414, 0, 2504, 2505, 5, 222, 0, 0, 2505, 2507, 5, 566, 0, 0, 2506, 2504, 1, 0, 0, 0, 2506, 2507, 1, 0, 0, 0, 2507, 2510, 1, 0, 0, 0, 2508, 2509, 5, 429, 0, 0, 2509, 2511, 5, 566, 0, 0, 2510, 2508, 1, 0, 0, 0, 2510, 2511, 1, 0, 0, 0, 2511, 2512, 1, 0, 0, 0, 2512, 2513, 5, 34, 0, 0, 2513, 2526, 7, 16, 0, 0, 2514, 2515, 5, 430, 0, 0, 2515, 2516, 5, 552, 0, 0, 2516, 2521, 3, 206, 103, 0, 2517, 2518, 5, 550, 0, 0, 2518, 2520, 3, 206, 103, 0, 2519, 2517, 1, 0, 0, 0, 2520, 2523, 1, 0, 0, 0, 2521, 2519, 1, 0, 0, 0, 2521, 2522, 1, 0, 0, 0, 2522, 2524, 1, 0, 0, 0, 2523, 2521, 1, 0, 0, 0, 2524, 2525, 5, 553, 0, 0, 2525, 2527, 1, 0, 0, 0, 2526, 2514, 1, 0, 0, 0, 2526, 2527, 1, 0, 0, 0, 2527, 205, 1, 0, 0, 0, 2528, 2529, 5, 566, 0, 0, 2529, 2530, 5, 77, 0, 0, 2530, 2531, 5, 566, 0, 0, 2531, 207, 1, 0, 0, 0, 2532, 2533, 5, 378, 0, 0, 2533, 2534, 5, 376, 0, 0, 2534, 2536, 3, 828, 414, 0, 2535, 2537, 3, 210, 105, 0, 2536, 2535, 1, 0, 0, 0, 2536, 2537, 1, 0, 0, 0, 2537, 2538, 1, 0, 0, 0, 2538, 2539, 5, 554, 0, 0, 2539, 2540, 3, 212, 106, 0, 2540, 2541, 5, 555, 0, 0, 2541, 209, 1, 0, 0, 0, 2542, 2543, 5, 140, 0, 0, 2543, 2544, 5, 349, 0, 0, 2544, 2545, 5, 440, 0, 0, 2545, 2551, 3, 828, 414, 0, 2546, 2547, 5, 140, 0, 0, 2547, 2548, 5, 350, 0, 0, 2548, 2549, 5, 442, 0, 0, 2549, 2551, 3, 828, 414, 0, 2550, 2542, 1, 0, 0, 0, 2550, 2546, 1, 0, 0, 0, 2551, 211, 1, 0, 0, 0, 2552, 2553, 3, 216, 108, 0, 2553, 2554, 3, 828, 414, 0, 2554, 2555, 5, 554, 0, 0, 2555, 2560, 3, 214, 107, 0, 2556, 2557, 5, 550, 0, 0, 2557, 2559, 3, 214, 107, 0, 2558, 2556, 1, 0, 0, 0, 2559, 2562, 1, 0, 0, 0, 2560, 2558, 1, 0, 0, 0, 2560, 2561, 1, 0, 0, 0, 2561, 2563, 1, 0, 0, 0, 2562, 2560, 1, 0, 0, 0, 2563, 2564, 5, 555, 0, 0, 2564, 213, 1, 0, 0, 0, 2565, 2566, 3, 216, 108, 0, 2566, 2567, 3, 828, 414, 0, 2567, 2568, 5, 545, 0, 0, 2568, 2569, 3, 828, 414, 0, 2569, 2570, 5, 539, 0, 0, 2570, 2571, 3, 830, 415, 0, 2571, 2572, 5, 554, 0, 0, 2572, 2577, 3, 214, 107, 0, 2573, 2574, 5, 550, 0, 0, 2574, 2576, 3, 214, 107, 0, 2575, 2573, 1, 0, 0, 0, 2576, 2579, 1, 0, 0, 0, 2577, 2575, 1, 0, 0, 0, 2577, 2578, 1, 0, 0, 0, 2578, 2580, 1, 0, 0, 0, 2579, 2577, 1, 0, 0, 0, 2580, 2581, 5, 555, 0, 0, 2581, 2603, 1, 0, 0, 0, 2582, 2583, 3, 216, 108, 0, 2583, 2584, 3, 828, 414, 0, 2584, 2585, 5, 545, 0, 0, 2585, 2586, 3, 828, 414, 0, 2586, 2587, 5, 539, 0, 0, 2587, 2588, 3, 830, 415, 0, 2588, 2603, 1, 0, 0, 0, 2589, 2590, 3, 830, 415, 0, 2590, 2591, 5, 539, 0, 0, 2591, 2592, 3, 828, 414, 0, 2592, 2593, 5, 552, 0, 0, 2593, 2594, 3, 830, 415, 0, 2594, 2595, 5, 553, 0, 0, 2595, 2603, 1, 0, 0, 0, 2596, 2597, 3, 830, 415, 0, 2597, 2598, 5, 539, 0, 0, 2598, 2600, 3, 830, 415, 0, 2599, 2601, 5, 380, 0, 0, 2600, 2599, 1, 0, 0, 0, 2600, 2601, 1, 0, 0, 0, 2601, 2603, 1, 0, 0, 0, 2602, 2565, 1, 0, 0, 0, 2602, 2582, 1, 0, 0, 0, 2602, 2589, 1, 0, 0, 0, 2602, 2596, 1, 0, 0, 0, 2603, 215, 1, 0, 0, 0, 2604, 2610, 5, 17, 0, 0, 2605, 2610, 5, 124, 0, 0, 2606, 2607, 5, 124, 0, 0, 2607, 2608, 5, 304, 0, 0, 2608, 2610, 5, 17, 0, 0, 2609, 2604, 1, 0, 0, 0, 2609, 2605, 1, 0, 0, 0, 2609, 2606, 1, 0, 0, 0, 2610, 217, 1, 0, 0, 0, 2611, 2612, 5, 384, 0, 0, 2612, 2613, 5, 376, 0, 0, 2613, 2615, 3, 828, 414, 0, 2614, 2616, 3, 220, 110, 0, 2615, 2614, 1, 0, 0, 0, 2615, 2616, 1, 0, 0, 0, 2616, 2618, 1, 0, 0, 0, 2617, 2619, 3, 222, 111, 0, 2618, 2617, 1, 0, 0, 0, 2618, 2619, 1, 0, 0, 0, 2619, 2620, 1, 0, 0, 0, 2620, 2621, 5, 554, 0, 0, 2621, 2622, 3, 224, 112, 0, 2622, 2623, 5, 555, 0, 0, 2623, 219, 1, 0, 0, 0, 2624, 2625, 5, 140, 0, 0, 2625, 2626, 5, 349, 0, 0, 2626, 2627, 5, 440, 0, 0, 2627, 2633, 3, 828, 414, 0, 2628, 2629, 5, 140, 0, 0, 2629, 2630, 5, 350, 0, 0, 2630, 2631, 5, 442, 0, 0, 2631, 2633, 3, 828, 414, 0, 2632, 2624, 1, 0, 0, 0, 2632, 2628, 1, 0, 0, 0, 2633, 221, 1, 0, 0, 0, 2634, 2635, 5, 306, 0, 0, 2635, 2636, 5, 445, 0, 0, 2636, 2637, 3, 830, 415, 0, 2637, 223, 1, 0, 0, 0, 2638, 2639, 3, 828, 414, 0, 2639, 2640, 5, 554, 0, 0, 2640, 2645, 3, 226, 113, 0, 2641, 2642, 5, 550, 0, 0, 2642, 2644, 3, 226, 113, 0, 2643, 2641, 1, 0, 0, 0, 2644, 2647, 1, 0, 0, 0, 2645, 2643, 1, 0, 0, 0, 2645, 2646, 1, 0, 0, 0, 2646, 2648, 1, 0, 0, 0, 2647, 2645, 1, 0, 0, 0, 2648, 2649, 5, 555, 0, 0, 2649, 225, 1, 0, 0, 0, 2650, 2651, 3, 828, 414, 0, 2651, 2652, 5, 545, 0, 0, 2652, 2653, 3, 828, 414, 0, 2653, 2654, 5, 77, 0, 0, 2654, 2655, 3, 830, 415, 0, 2655, 2656, 5, 554, 0, 0, 2656, 2661, 3, 226, 113, 0, 2657, 2658, 5, 550, 0, 0, 2658, 2660, 3, 226, 113, 0, 2659, 2657, 1, 0, 0, 0, 2660, 2663, 1, 0, 0, 0, 2661, 2659, 1, 0, 0, 0, 2661, 2662, 1, 0, 0, 0, 2662, 2664, 1, 0, 0, 0, 2663, 2661, 1, 0, 0, 0, 2664, 2665, 5, 555, 0, 0, 2665, 2677, 1, 0, 0, 0, 2666, 2667, 3, 828, 414, 0, 2667, 2668, 5, 545, 0, 0, 2668, 2669, 3, 828, 414, 0, 2669, 2670, 5, 77, 0, 0, 2670, 2671, 3, 830, 415, 0, 2671, 2677, 1, 0, 0, 0, 2672, 2673, 3, 830, 415, 0, 2673, 2674, 5, 539, 0, 0, 2674, 2675, 3, 830, 415, 0, 2675, 2677, 1, 0, 0, 0, 2676, 2650, 1, 0, 0, 0, 2676, 2666, 1, 0, 0, 0, 2676, 2672, 1, 0, 0, 0, 2677, 227, 1, 0, 0, 0, 2678, 2679, 5, 316, 0, 0, 2679, 2680, 5, 318, 0, 0, 2680, 2681, 3, 828, 414, 0, 2681, 2682, 5, 453, 0, 0, 2682, 2683, 3, 828, 414, 0, 2683, 2684, 3, 230, 115, 0, 2684, 229, 1, 0, 0, 0, 2685, 2686, 5, 325, 0, 0, 2686, 2687, 3, 784, 392, 0, 2687, 2688, 5, 317, 0, 0, 2688, 2689, 5, 566, 0, 0, 2689, 2713, 1, 0, 0, 0, 2690, 2691, 5, 319, 0, 0, 2691, 2692, 3, 234, 117, 0, 2692, 2693, 5, 317, 0, 0, 2693, 2694, 5, 566, 0, 0, 2694, 2713, 1, 0, 0, 0, 2695, 2696, 5, 312, 0, 0, 2696, 2697, 3, 236, 118, 0, 2697, 2698, 5, 317, 0, 0, 2698, 2699, 5, 566, 0, 0, 2699, 2713, 1, 0, 0, 0, 2700, 2701, 5, 322, 0, 0, 2701, 2702, 3, 234, 117, 0, 2702, 2703, 3, 232, 116, 0, 2703, 2704, 5, 317, 0, 0, 2704, 2705, 5, 566, 0, 0, 2705, 2713, 1, 0, 0, 0, 2706, 2707, 5, 323, 0, 0, 2707, 2708, 3, 234, 117, 0, 2708, 2709, 5, 566, 0, 0, 2709, 2710, 5, 317, 0, 0, 2710, 2711, 5, 566, 0, 0, 2711, 2713, 1, 0, 0, 0, 2712, 2685, 1, 0, 0, 0, 2712, 2690, 1, 0, 0, 0, 2712, 2695, 1, 0, 0, 0, 2712, 2700, 1, 0, 0, 0, 2712, 2706, 1, 0, 0, 0, 2713, 231, 1, 0, 0, 0, 2714, 2715, 5, 308, 0, 0, 2715, 2716, 3, 832, 416, 0, 2716, 2717, 5, 303, 0, 0, 2717, 2718, 3, 832, 416, 0, 2718, 2728, 1, 0, 0, 0, 2719, 2720, 5, 540, 0, 0, 2720, 2728, 3, 832, 416, 0, 2721, 2722, 5, 537, 0, 0, 2722, 2728, 3, 832, 416, 0, 2723, 2724, 5, 541, 0, 0, 2724, 2728, 3, 832, 416, 0, 2725, 2726, 5, 538, 0, 0, 2726, 2728, 3, 832, 416, 0, 2727, 2714, 1, 0, 0, 0, 2727, 2719, 1, 0, 0, 0, 2727, 2721, 1, 0, 0, 0, 2727, 2723, 1, 0, 0, 0, 2727, 2725, 1, 0, 0, 0, 2728, 233, 1, 0, 0, 0, 2729, 2734, 5, 570, 0, 0, 2730, 2731, 5, 545, 0, 0, 2731, 2733, 5, 570, 0, 0, 2732, 2730, 1, 0, 0, 0, 2733, 2736, 1, 0, 0, 0, 2734, 2732, 1, 0, 0, 0, 2734, 2735, 1, 0, 0, 0, 2735, 235, 1, 0, 0, 0, 2736, 2734, 1, 0, 0, 0, 2737, 2742, 3, 234, 117, 0, 2738, 2739, 5, 550, 0, 0, 2739, 2741, 3, 234, 117, 0, 2740, 2738, 1, 0, 0, 0, 2741, 2744, 1, 0, 0, 0, 2742, 2740, 1, 0, 0, 0, 2742, 2743, 1, 0, 0, 0, 2743, 237, 1, 0, 0, 0, 2744, 2742, 1, 0, 0, 0, 2745, 2746, 5, 30, 0, 0, 2746, 2747, 3, 828, 414, 0, 2747, 2749, 5, 552, 0, 0, 2748, 2750, 3, 250, 125, 0, 2749, 2748, 1, 0, 0, 0, 2749, 2750, 1, 0, 0, 0, 2750, 2751, 1, 0, 0, 0, 2751, 2753, 5, 553, 0, 0, 2752, 2754, 3, 256, 128, 0, 2753, 2752, 1, 0, 0, 0, 2753, 2754, 1, 0, 0, 0, 2754, 2756, 1, 0, 0, 0, 2755, 2757, 3, 258, 129, 0, 2756, 2755, 1, 0, 0, 0, 2756, 2757, 1, 0, 0, 0, 2757, 2758, 1, 0, 0, 0, 2758, 2759, 5, 97, 0, 0, 2759, 2760, 3, 262, 131, 0, 2760, 2762, 5, 84, 0, 0, 2761, 2763, 5, 549, 0, 0, 2762, 2761, 1, 0, 0, 0, 2762, 2763, 1, 0, 0, 0, 2763, 2765, 1, 0, 0, 0, 2764, 2766, 5, 545, 0, 0, 2765, 2764, 1, 0, 0, 0, 2765, 2766, 1, 0, 0, 0, 2766, 239, 1, 0, 0, 0, 2767, 2768, 5, 115, 0, 0, 2768, 2769, 5, 117, 0, 0, 2769, 2770, 3, 828, 414, 0, 2770, 2772, 5, 552, 0, 0, 2771, 2773, 3, 242, 121, 0, 2772, 2771, 1, 0, 0, 0, 2772, 2773, 1, 0, 0, 0, 2773, 2774, 1, 0, 0, 0, 2774, 2776, 5, 553, 0, 0, 2775, 2777, 3, 246, 123, 0, 2776, 2775, 1, 0, 0, 0, 2776, 2777, 1, 0, 0, 0, 2777, 2779, 1, 0, 0, 0, 2778, 2780, 3, 248, 124, 0, 2779, 2778, 1, 0, 0, 0, 2779, 2780, 1, 0, 0, 0, 2780, 2781, 1, 0, 0, 0, 2781, 2782, 5, 77, 0, 0, 2782, 2784, 5, 567, 0, 0, 2783, 2785, 5, 549, 0, 0, 2784, 2783, 1, 0, 0, 0, 2784, 2785, 1, 0, 0, 0, 2785, 241, 1, 0, 0, 0, 2786, 2791, 3, 244, 122, 0, 2787, 2788, 5, 550, 0, 0, 2788, 2790, 3, 244, 122, 0, 2789, 2787, 1, 0, 0, 0, 2790, 2793, 1, 0, 0, 0, 2791, 2789, 1, 0, 0, 0, 2791, 2792, 1, 0, 0, 0, 2792, 243, 1, 0, 0, 0, 2793, 2791, 1, 0, 0, 0, 2794, 2795, 3, 254, 127, 0, 2795, 2796, 5, 558, 0, 0, 2796, 2798, 3, 126, 63, 0, 2797, 2799, 5, 7, 0, 0, 2798, 2797, 1, 0, 0, 0, 2798, 2799, 1, 0, 0, 0, 2799, 245, 1, 0, 0, 0, 2800, 2801, 5, 78, 0, 0, 2801, 2802, 3, 126, 63, 0, 2802, 247, 1, 0, 0, 0, 2803, 2804, 5, 390, 0, 0, 2804, 2805, 5, 77, 0, 0, 2805, 2806, 5, 566, 0, 0, 2806, 2807, 5, 307, 0, 0, 2807, 2808, 5, 566, 0, 0, 2808, 249, 1, 0, 0, 0, 2809, 2814, 3, 252, 126, 0, 2810, 2811, 5, 550, 0, 0, 2811, 2813, 3, 252, 126, 0, 2812, 2810, 1, 0, 0, 0, 2813, 2816, 1, 0, 0, 0, 2814, 2812, 1, 0, 0, 0, 2814, 2815, 1, 0, 0, 0, 2815, 251, 1, 0, 0, 0, 2816, 2814, 1, 0, 0, 0, 2817, 2820, 3, 254, 127, 0, 2818, 2820, 5, 569, 0, 0, 2819, 2817, 1, 0, 0, 0, 2819, 2818, 1, 0, 0, 0, 2820, 2821, 1, 0, 0, 0, 2821, 2822, 5, 558, 0, 0, 2822, 2823, 3, 126, 63, 0, 2823, 253, 1, 0, 0, 0, 2824, 2828, 5, 570, 0, 0, 2825, 2828, 5, 572, 0, 0, 2826, 2828, 3, 850, 425, 0, 2827, 2824, 1, 0, 0, 0, 2827, 2825, 1, 0, 0, 0, 2827, 2826, 1, 0, 0, 0, 2828, 255, 1, 0, 0, 0, 2829, 2830, 5, 78, 0, 0, 2830, 2833, 3, 126, 63, 0, 2831, 2832, 5, 77, 0, 0, 2832, 2834, 5, 569, 0, 0, 2833, 2831, 1, 0, 0, 0, 2833, 2834, 1, 0, 0, 0, 2834, 257, 1, 0, 0, 0, 2835, 2837, 3, 260, 130, 0, 2836, 2835, 1, 0, 0, 0, 2837, 2838, 1, 0, 0, 0, 2838, 2836, 1, 0, 0, 0, 2838, 2839, 1, 0, 0, 0, 2839, 259, 1, 0, 0, 0, 2840, 2841, 5, 222, 0, 0, 2841, 2845, 5, 566, 0, 0, 2842, 2843, 5, 429, 0, 0, 2843, 2845, 5, 566, 0, 0, 2844, 2840, 1, 0, 0, 0, 2844, 2842, 1, 0, 0, 0, 2845, 261, 1, 0, 0, 0, 2846, 2848, 3, 264, 132, 0, 2847, 2846, 1, 0, 0, 0, 2848, 2851, 1, 0, 0, 0, 2849, 2847, 1, 0, 0, 0, 2849, 2850, 1, 0, 0, 0, 2850, 263, 1, 0, 0, 0, 2851, 2849, 1, 0, 0, 0, 2852, 2854, 3, 840, 420, 0, 2853, 2852, 1, 0, 0, 0, 2854, 2857, 1, 0, 0, 0, 2855, 2853, 1, 0, 0, 0, 2855, 2856, 1, 0, 0, 0, 2856, 2858, 1, 0, 0, 0, 2857, 2855, 1, 0, 0, 0, 2858, 2860, 3, 266, 133, 0, 2859, 2861, 5, 549, 0, 0, 2860, 2859, 1, 0, 0, 0, 2860, 2861, 1, 0, 0, 0, 2861, 3323, 1, 0, 0, 0, 2862, 2864, 3, 840, 420, 0, 2863, 2862, 1, 0, 0, 0, 2864, 2867, 1, 0, 0, 0, 2865, 2863, 1, 0, 0, 0, 2865, 2866, 1, 0, 0, 0, 2866, 2868, 1, 0, 0, 0, 2867, 2865, 1, 0, 0, 0, 2868, 2870, 3, 268, 134, 0, 2869, 2871, 5, 549, 0, 0, 2870, 2869, 1, 0, 0, 0, 2870, 2871, 1, 0, 0, 0, 2871, 3323, 1, 0, 0, 0, 2872, 2874, 3, 840, 420, 0, 2873, 2872, 1, 0, 0, 0, 2874, 2877, 1, 0, 0, 0, 2875, 2873, 1, 0, 0, 0, 2875, 2876, 1, 0, 0, 0, 2876, 2878, 1, 0, 0, 0, 2877, 2875, 1, 0, 0, 0, 2878, 2880, 3, 410, 205, 0, 2879, 2881, 5, 549, 0, 0, 2880, 2879, 1, 0, 0, 0, 2880, 2881, 1, 0, 0, 0, 2881, 3323, 1, 0, 0, 0, 2882, 2884, 3, 840, 420, 0, 2883, 2882, 1, 0, 0, 0, 2884, 2887, 1, 0, 0, 0, 2885, 2883, 1, 0, 0, 0, 2885, 2886, 1, 0, 0, 0, 2886, 2888, 1, 0, 0, 0, 2887, 2885, 1, 0, 0, 0, 2888, 2890, 3, 270, 135, 0, 2889, 2891, 5, 549, 0, 0, 2890, 2889, 1, 0, 0, 0, 2890, 2891, 1, 0, 0, 0, 2891, 3323, 1, 0, 0, 0, 2892, 2894, 3, 840, 420, 0, 2893, 2892, 1, 0, 0, 0, 2894, 2897, 1, 0, 0, 0, 2895, 2893, 1, 0, 0, 0, 2895, 2896, 1, 0, 0, 0, 2896, 2898, 1, 0, 0, 0, 2897, 2895, 1, 0, 0, 0, 2898, 2900, 3, 272, 136, 0, 2899, 2901, 5, 549, 0, 0, 2900, 2899, 1, 0, 0, 0, 2900, 2901, 1, 0, 0, 0, 2901, 3323, 1, 0, 0, 0, 2902, 2904, 3, 840, 420, 0, 2903, 2902, 1, 0, 0, 0, 2904, 2907, 1, 0, 0, 0, 2905, 2903, 1, 0, 0, 0, 2905, 2906, 1, 0, 0, 0, 2906, 2908, 1, 0, 0, 0, 2907, 2905, 1, 0, 0, 0, 2908, 2910, 3, 276, 138, 0, 2909, 2911, 5, 549, 0, 0, 2910, 2909, 1, 0, 0, 0, 2910, 2911, 1, 0, 0, 0, 2911, 3323, 1, 0, 0, 0, 2912, 2914, 3, 840, 420, 0, 2913, 2912, 1, 0, 0, 0, 2914, 2917, 1, 0, 0, 0, 2915, 2913, 1, 0, 0, 0, 2915, 2916, 1, 0, 0, 0, 2916, 2918, 1, 0, 0, 0, 2917, 2915, 1, 0, 0, 0, 2918, 2920, 3, 278, 139, 0, 2919, 2921, 5, 549, 0, 0, 2920, 2919, 1, 0, 0, 0, 2920, 2921, 1, 0, 0, 0, 2921, 3323, 1, 0, 0, 0, 2922, 2924, 3, 840, 420, 0, 2923, 2922, 1, 0, 0, 0, 2924, 2927, 1, 0, 0, 0, 2925, 2923, 1, 0, 0, 0, 2925, 2926, 1, 0, 0, 0, 2926, 2928, 1, 0, 0, 0, 2927, 2925, 1, 0, 0, 0, 2928, 2930, 3, 280, 140, 0, 2929, 2931, 5, 549, 0, 0, 2930, 2929, 1, 0, 0, 0, 2930, 2931, 1, 0, 0, 0, 2931, 3323, 1, 0, 0, 0, 2932, 2934, 3, 840, 420, 0, 2933, 2932, 1, 0, 0, 0, 2934, 2937, 1, 0, 0, 0, 2935, 2933, 1, 0, 0, 0, 2935, 2936, 1, 0, 0, 0, 2936, 2938, 1, 0, 0, 0, 2937, 2935, 1, 0, 0, 0, 2938, 2940, 3, 282, 141, 0, 2939, 2941, 5, 549, 0, 0, 2940, 2939, 1, 0, 0, 0, 2940, 2941, 1, 0, 0, 0, 2941, 3323, 1, 0, 0, 0, 2942, 2944, 3, 840, 420, 0, 2943, 2942, 1, 0, 0, 0, 2944, 2947, 1, 0, 0, 0, 2945, 2943, 1, 0, 0, 0, 2945, 2946, 1, 0, 0, 0, 2946, 2948, 1, 0, 0, 0, 2947, 2945, 1, 0, 0, 0, 2948, 2950, 3, 288, 144, 0, 2949, 2951, 5, 549, 0, 0, 2950, 2949, 1, 0, 0, 0, 2950, 2951, 1, 0, 0, 0, 2951, 3323, 1, 0, 0, 0, 2952, 2954, 3, 840, 420, 0, 2953, 2952, 1, 0, 0, 0, 2954, 2957, 1, 0, 0, 0, 2955, 2953, 1, 0, 0, 0, 2955, 2956, 1, 0, 0, 0, 2956, 2958, 1, 0, 0, 0, 2957, 2955, 1, 0, 0, 0, 2958, 2960, 3, 290, 145, 0, 2959, 2961, 5, 549, 0, 0, 2960, 2959, 1, 0, 0, 0, 2960, 2961, 1, 0, 0, 0, 2961, 3323, 1, 0, 0, 0, 2962, 2964, 3, 840, 420, 0, 2963, 2962, 1, 0, 0, 0, 2964, 2967, 1, 0, 0, 0, 2965, 2963, 1, 0, 0, 0, 2965, 2966, 1, 0, 0, 0, 2966, 2968, 1, 0, 0, 0, 2967, 2965, 1, 0, 0, 0, 2968, 2970, 3, 292, 146, 0, 2969, 2971, 5, 549, 0, 0, 2970, 2969, 1, 0, 0, 0, 2970, 2971, 1, 0, 0, 0, 2971, 3323, 1, 0, 0, 0, 2972, 2974, 3, 840, 420, 0, 2973, 2972, 1, 0, 0, 0, 2974, 2977, 1, 0, 0, 0, 2975, 2973, 1, 0, 0, 0, 2975, 2976, 1, 0, 0, 0, 2976, 2978, 1, 0, 0, 0, 2977, 2975, 1, 0, 0, 0, 2978, 2980, 3, 294, 147, 0, 2979, 2981, 5, 549, 0, 0, 2980, 2979, 1, 0, 0, 0, 2980, 2981, 1, 0, 0, 0, 2981, 3323, 1, 0, 0, 0, 2982, 2984, 3, 840, 420, 0, 2983, 2982, 1, 0, 0, 0, 2984, 2987, 1, 0, 0, 0, 2985, 2983, 1, 0, 0, 0, 2985, 2986, 1, 0, 0, 0, 2986, 2988, 1, 0, 0, 0, 2987, 2985, 1, 0, 0, 0, 2988, 2990, 3, 296, 148, 0, 2989, 2991, 5, 549, 0, 0, 2990, 2989, 1, 0, 0, 0, 2990, 2991, 1, 0, 0, 0, 2991, 3323, 1, 0, 0, 0, 2992, 2994, 3, 840, 420, 0, 2993, 2992, 1, 0, 0, 0, 2994, 2997, 1, 0, 0, 0, 2995, 2993, 1, 0, 0, 0, 2995, 2996, 1, 0, 0, 0, 2996, 2998, 1, 0, 0, 0, 2997, 2995, 1, 0, 0, 0, 2998, 3000, 3, 298, 149, 0, 2999, 3001, 5, 549, 0, 0, 3000, 2999, 1, 0, 0, 0, 3000, 3001, 1, 0, 0, 0, 3001, 3323, 1, 0, 0, 0, 3002, 3004, 3, 840, 420, 0, 3003, 3002, 1, 0, 0, 0, 3004, 3007, 1, 0, 0, 0, 3005, 3003, 1, 0, 0, 0, 3005, 3006, 1, 0, 0, 0, 3006, 3008, 1, 0, 0, 0, 3007, 3005, 1, 0, 0, 0, 3008, 3010, 3, 300, 150, 0, 3009, 3011, 5, 549, 0, 0, 3010, 3009, 1, 0, 0, 0, 3010, 3011, 1, 0, 0, 0, 3011, 3323, 1, 0, 0, 0, 3012, 3014, 3, 840, 420, 0, 3013, 3012, 1, 0, 0, 0, 3014, 3017, 1, 0, 0, 0, 3015, 3013, 1, 0, 0, 0, 3015, 3016, 1, 0, 0, 0, 3016, 3018, 1, 0, 0, 0, 3017, 3015, 1, 0, 0, 0, 3018, 3020, 3, 302, 151, 0, 3019, 3021, 5, 549, 0, 0, 3020, 3019, 1, 0, 0, 0, 3020, 3021, 1, 0, 0, 0, 3021, 3323, 1, 0, 0, 0, 3022, 3024, 3, 840, 420, 0, 3023, 3022, 1, 0, 0, 0, 3024, 3027, 1, 0, 0, 0, 3025, 3023, 1, 0, 0, 0, 3025, 3026, 1, 0, 0, 0, 3026, 3028, 1, 0, 0, 0, 3027, 3025, 1, 0, 0, 0, 3028, 3030, 3, 314, 157, 0, 3029, 3031, 5, 549, 0, 0, 3030, 3029, 1, 0, 0, 0, 3030, 3031, 1, 0, 0, 0, 3031, 3323, 1, 0, 0, 0, 3032, 3034, 3, 840, 420, 0, 3033, 3032, 1, 0, 0, 0, 3034, 3037, 1, 0, 0, 0, 3035, 3033, 1, 0, 0, 0, 3035, 3036, 1, 0, 0, 0, 3036, 3038, 1, 0, 0, 0, 3037, 3035, 1, 0, 0, 0, 3038, 3040, 3, 316, 158, 0, 3039, 3041, 5, 549, 0, 0, 3040, 3039, 1, 0, 0, 0, 3040, 3041, 1, 0, 0, 0, 3041, 3323, 1, 0, 0, 0, 3042, 3044, 3, 840, 420, 0, 3043, 3042, 1, 0, 0, 0, 3044, 3047, 1, 0, 0, 0, 3045, 3043, 1, 0, 0, 0, 3045, 3046, 1, 0, 0, 0, 3046, 3048, 1, 0, 0, 0, 3047, 3045, 1, 0, 0, 0, 3048, 3050, 3, 318, 159, 0, 3049, 3051, 5, 549, 0, 0, 3050, 3049, 1, 0, 0, 0, 3050, 3051, 1, 0, 0, 0, 3051, 3323, 1, 0, 0, 0, 3052, 3054, 3, 840, 420, 0, 3053, 3052, 1, 0, 0, 0, 3054, 3057, 1, 0, 0, 0, 3055, 3053, 1, 0, 0, 0, 3055, 3056, 1, 0, 0, 0, 3056, 3058, 1, 0, 0, 0, 3057, 3055, 1, 0, 0, 0, 3058, 3060, 3, 320, 160, 0, 3059, 3061, 5, 549, 0, 0, 3060, 3059, 1, 0, 0, 0, 3060, 3061, 1, 0, 0, 0, 3061, 3323, 1, 0, 0, 0, 3062, 3064, 3, 840, 420, 0, 3063, 3062, 1, 0, 0, 0, 3064, 3067, 1, 0, 0, 0, 3065, 3063, 1, 0, 0, 0, 3065, 3066, 1, 0, 0, 0, 3066, 3068, 1, 0, 0, 0, 3067, 3065, 1, 0, 0, 0, 3068, 3070, 3, 350, 175, 0, 3069, 3071, 5, 549, 0, 0, 3070, 3069, 1, 0, 0, 0, 3070, 3071, 1, 0, 0, 0, 3071, 3323, 1, 0, 0, 0, 3072, 3074, 3, 840, 420, 0, 3073, 3072, 1, 0, 0, 0, 3074, 3077, 1, 0, 0, 0, 3075, 3073, 1, 0, 0, 0, 3075, 3076, 1, 0, 0, 0, 3076, 3078, 1, 0, 0, 0, 3077, 3075, 1, 0, 0, 0, 3078, 3080, 3, 356, 178, 0, 3079, 3081, 5, 549, 0, 0, 3080, 3079, 1, 0, 0, 0, 3080, 3081, 1, 0, 0, 0, 3081, 3323, 1, 0, 0, 0, 3082, 3084, 3, 840, 420, 0, 3083, 3082, 1, 0, 0, 0, 3084, 3087, 1, 0, 0, 0, 3085, 3083, 1, 0, 0, 0, 3085, 3086, 1, 0, 0, 0, 3086, 3088, 1, 0, 0, 0, 3087, 3085, 1, 0, 0, 0, 3088, 3090, 3, 358, 179, 0, 3089, 3091, 5, 549, 0, 0, 3090, 3089, 1, 0, 0, 0, 3090, 3091, 1, 0, 0, 0, 3091, 3323, 1, 0, 0, 0, 3092, 3094, 3, 840, 420, 0, 3093, 3092, 1, 0, 0, 0, 3094, 3097, 1, 0, 0, 0, 3095, 3093, 1, 0, 0, 0, 3095, 3096, 1, 0, 0, 0, 3096, 3098, 1, 0, 0, 0, 3097, 3095, 1, 0, 0, 0, 3098, 3100, 3, 360, 180, 0, 3099, 3101, 5, 549, 0, 0, 3100, 3099, 1, 0, 0, 0, 3100, 3101, 1, 0, 0, 0, 3101, 3323, 1, 0, 0, 0, 3102, 3104, 3, 840, 420, 0, 3103, 3102, 1, 0, 0, 0, 3104, 3107, 1, 0, 0, 0, 3105, 3103, 1, 0, 0, 0, 3105, 3106, 1, 0, 0, 0, 3106, 3108, 1, 0, 0, 0, 3107, 3105, 1, 0, 0, 0, 3108, 3110, 3, 362, 181, 0, 3109, 3111, 5, 549, 0, 0, 3110, 3109, 1, 0, 0, 0, 3110, 3111, 1, 0, 0, 0, 3111, 3323, 1, 0, 0, 0, 3112, 3114, 3, 840, 420, 0, 3113, 3112, 1, 0, 0, 0, 3114, 3117, 1, 0, 0, 0, 3115, 3113, 1, 0, 0, 0, 3115, 3116, 1, 0, 0, 0, 3116, 3118, 1, 0, 0, 0, 3117, 3115, 1, 0, 0, 0, 3118, 3120, 3, 398, 199, 0, 3119, 3121, 5, 549, 0, 0, 3120, 3119, 1, 0, 0, 0, 3120, 3121, 1, 0, 0, 0, 3121, 3323, 1, 0, 0, 0, 3122, 3124, 3, 840, 420, 0, 3123, 3122, 1, 0, 0, 0, 3124, 3127, 1, 0, 0, 0, 3125, 3123, 1, 0, 0, 0, 3125, 3126, 1, 0, 0, 0, 3126, 3128, 1, 0, 0, 0, 3127, 3125, 1, 0, 0, 0, 3128, 3130, 3, 406, 203, 0, 3129, 3131, 5, 549, 0, 0, 3130, 3129, 1, 0, 0, 0, 3130, 3131, 1, 0, 0, 0, 3131, 3323, 1, 0, 0, 0, 3132, 3134, 3, 840, 420, 0, 3133, 3132, 1, 0, 0, 0, 3134, 3137, 1, 0, 0, 0, 3135, 3133, 1, 0, 0, 0, 3135, 3136, 1, 0, 0, 0, 3136, 3138, 1, 0, 0, 0, 3137, 3135, 1, 0, 0, 0, 3138, 3140, 3, 412, 206, 0, 3139, 3141, 5, 549, 0, 0, 3140, 3139, 1, 0, 0, 0, 3140, 3141, 1, 0, 0, 0, 3141, 3323, 1, 0, 0, 0, 3142, 3144, 3, 840, 420, 0, 3143, 3142, 1, 0, 0, 0, 3144, 3147, 1, 0, 0, 0, 3145, 3143, 1, 0, 0, 0, 3145, 3146, 1, 0, 0, 0, 3146, 3148, 1, 0, 0, 0, 3147, 3145, 1, 0, 0, 0, 3148, 3150, 3, 414, 207, 0, 3149, 3151, 5, 549, 0, 0, 3150, 3149, 1, 0, 0, 0, 3150, 3151, 1, 0, 0, 0, 3151, 3323, 1, 0, 0, 0, 3152, 3154, 3, 840, 420, 0, 3153, 3152, 1, 0, 0, 0, 3154, 3157, 1, 0, 0, 0, 3155, 3153, 1, 0, 0, 0, 3155, 3156, 1, 0, 0, 0, 3156, 3158, 1, 0, 0, 0, 3157, 3155, 1, 0, 0, 0, 3158, 3160, 3, 364, 182, 0, 3159, 3161, 5, 549, 0, 0, 3160, 3159, 1, 0, 0, 0, 3160, 3161, 1, 0, 0, 0, 3161, 3323, 1, 0, 0, 0, 3162, 3164, 3, 840, 420, 0, 3163, 3162, 1, 0, 0, 0, 3164, 3167, 1, 0, 0, 0, 3165, 3163, 1, 0, 0, 0, 3165, 3166, 1, 0, 0, 0, 3166, 3168, 1, 0, 0, 0, 3167, 3165, 1, 0, 0, 0, 3168, 3170, 3, 366, 183, 0, 3169, 3171, 5, 549, 0, 0, 3170, 3169, 1, 0, 0, 0, 3170, 3171, 1, 0, 0, 0, 3171, 3323, 1, 0, 0, 0, 3172, 3174, 3, 840, 420, 0, 3173, 3172, 1, 0, 0, 0, 3174, 3177, 1, 0, 0, 0, 3175, 3173, 1, 0, 0, 0, 3175, 3176, 1, 0, 0, 0, 3176, 3178, 1, 0, 0, 0, 3177, 3175, 1, 0, 0, 0, 3178, 3180, 3, 384, 192, 0, 3179, 3181, 5, 549, 0, 0, 3180, 3179, 1, 0, 0, 0, 3180, 3181, 1, 0, 0, 0, 3181, 3323, 1, 0, 0, 0, 3182, 3184, 3, 840, 420, 0, 3183, 3182, 1, 0, 0, 0, 3184, 3187, 1, 0, 0, 0, 3185, 3183, 1, 0, 0, 0, 3185, 3186, 1, 0, 0, 0, 3186, 3188, 1, 0, 0, 0, 3187, 3185, 1, 0, 0, 0, 3188, 3190, 3, 392, 196, 0, 3189, 3191, 5, 549, 0, 0, 3190, 3189, 1, 0, 0, 0, 3190, 3191, 1, 0, 0, 0, 3191, 3323, 1, 0, 0, 0, 3192, 3194, 3, 840, 420, 0, 3193, 3192, 1, 0, 0, 0, 3194, 3197, 1, 0, 0, 0, 3195, 3193, 1, 0, 0, 0, 3195, 3196, 1, 0, 0, 0, 3196, 3198, 1, 0, 0, 0, 3197, 3195, 1, 0, 0, 0, 3198, 3200, 3, 394, 197, 0, 3199, 3201, 5, 549, 0, 0, 3200, 3199, 1, 0, 0, 0, 3200, 3201, 1, 0, 0, 0, 3201, 3323, 1, 0, 0, 0, 3202, 3204, 3, 840, 420, 0, 3203, 3202, 1, 0, 0, 0, 3204, 3207, 1, 0, 0, 0, 3205, 3203, 1, 0, 0, 0, 3205, 3206, 1, 0, 0, 0, 3206, 3208, 1, 0, 0, 0, 3207, 3205, 1, 0, 0, 0, 3208, 3210, 3, 396, 198, 0, 3209, 3211, 5, 549, 0, 0, 3210, 3209, 1, 0, 0, 0, 3210, 3211, 1, 0, 0, 0, 3211, 3323, 1, 0, 0, 0, 3212, 3214, 3, 840, 420, 0, 3213, 3212, 1, 0, 0, 0, 3214, 3217, 1, 0, 0, 0, 3215, 3213, 1, 0, 0, 0, 3215, 3216, 1, 0, 0, 0, 3216, 3218, 1, 0, 0, 0, 3217, 3215, 1, 0, 0, 0, 3218, 3220, 3, 322, 161, 0, 3219, 3221, 5, 549, 0, 0, 3220, 3219, 1, 0, 0, 0, 3220, 3221, 1, 0, 0, 0, 3221, 3323, 1, 0, 0, 0, 3222, 3224, 3, 840, 420, 0, 3223, 3222, 1, 0, 0, 0, 3224, 3227, 1, 0, 0, 0, 3225, 3223, 1, 0, 0, 0, 3225, 3226, 1, 0, 0, 0, 3226, 3228, 1, 0, 0, 0, 3227, 3225, 1, 0, 0, 0, 3228, 3230, 3, 324, 162, 0, 3229, 3231, 5, 549, 0, 0, 3230, 3229, 1, 0, 0, 0, 3230, 3231, 1, 0, 0, 0, 3231, 3323, 1, 0, 0, 0, 3232, 3234, 3, 840, 420, 0, 3233, 3232, 1, 0, 0, 0, 3234, 3237, 1, 0, 0, 0, 3235, 3233, 1, 0, 0, 0, 3235, 3236, 1, 0, 0, 0, 3236, 3238, 1, 0, 0, 0, 3237, 3235, 1, 0, 0, 0, 3238, 3240, 3, 326, 163, 0, 3239, 3241, 5, 549, 0, 0, 3240, 3239, 1, 0, 0, 0, 3240, 3241, 1, 0, 0, 0, 3241, 3323, 1, 0, 0, 0, 3242, 3244, 3, 840, 420, 0, 3243, 3242, 1, 0, 0, 0, 3244, 3247, 1, 0, 0, 0, 3245, 3243, 1, 0, 0, 0, 3245, 3246, 1, 0, 0, 0, 3246, 3248, 1, 0, 0, 0, 3247, 3245, 1, 0, 0, 0, 3248, 3250, 3, 328, 164, 0, 3249, 3251, 5, 549, 0, 0, 3250, 3249, 1, 0, 0, 0, 3250, 3251, 1, 0, 0, 0, 3251, 3323, 1, 0, 0, 0, 3252, 3254, 3, 840, 420, 0, 3253, 3252, 1, 0, 0, 0, 3254, 3257, 1, 0, 0, 0, 3255, 3253, 1, 0, 0, 0, 3255, 3256, 1, 0, 0, 0, 3256, 3258, 1, 0, 0, 0, 3257, 3255, 1, 0, 0, 0, 3258, 3260, 3, 330, 165, 0, 3259, 3261, 5, 549, 0, 0, 3260, 3259, 1, 0, 0, 0, 3260, 3261, 1, 0, 0, 0, 3261, 3323, 1, 0, 0, 0, 3262, 3264, 3, 840, 420, 0, 3263, 3262, 1, 0, 0, 0, 3264, 3267, 1, 0, 0, 0, 3265, 3263, 1, 0, 0, 0, 3265, 3266, 1, 0, 0, 0, 3266, 3268, 1, 0, 0, 0, 3267, 3265, 1, 0, 0, 0, 3268, 3270, 3, 334, 167, 0, 3269, 3271, 5, 549, 0, 0, 3270, 3269, 1, 0, 0, 0, 3270, 3271, 1, 0, 0, 0, 3271, 3323, 1, 0, 0, 0, 3272, 3274, 3, 840, 420, 0, 3273, 3272, 1, 0, 0, 0, 3274, 3277, 1, 0, 0, 0, 3275, 3273, 1, 0, 0, 0, 3275, 3276, 1, 0, 0, 0, 3276, 3278, 1, 0, 0, 0, 3277, 3275, 1, 0, 0, 0, 3278, 3280, 3, 336, 168, 0, 3279, 3281, 5, 549, 0, 0, 3280, 3279, 1, 0, 0, 0, 3280, 3281, 1, 0, 0, 0, 3281, 3323, 1, 0, 0, 0, 3282, 3284, 3, 840, 420, 0, 3283, 3282, 1, 0, 0, 0, 3284, 3287, 1, 0, 0, 0, 3285, 3283, 1, 0, 0, 0, 3285, 3286, 1, 0, 0, 0, 3286, 3288, 1, 0, 0, 0, 3287, 3285, 1, 0, 0, 0, 3288, 3290, 3, 338, 169, 0, 3289, 3291, 5, 549, 0, 0, 3290, 3289, 1, 0, 0, 0, 3290, 3291, 1, 0, 0, 0, 3291, 3323, 1, 0, 0, 0, 3292, 3294, 3, 840, 420, 0, 3293, 3292, 1, 0, 0, 0, 3294, 3297, 1, 0, 0, 0, 3295, 3293, 1, 0, 0, 0, 3295, 3296, 1, 0, 0, 0, 3296, 3298, 1, 0, 0, 0, 3297, 3295, 1, 0, 0, 0, 3298, 3300, 3, 340, 170, 0, 3299, 3301, 5, 549, 0, 0, 3300, 3299, 1, 0, 0, 0, 3300, 3301, 1, 0, 0, 0, 3301, 3323, 1, 0, 0, 0, 3302, 3304, 3, 840, 420, 0, 3303, 3302, 1, 0, 0, 0, 3304, 3307, 1, 0, 0, 0, 3305, 3303, 1, 0, 0, 0, 3305, 3306, 1, 0, 0, 0, 3306, 3308, 1, 0, 0, 0, 3307, 3305, 1, 0, 0, 0, 3308, 3310, 3, 342, 171, 0, 3309, 3311, 5, 549, 0, 0, 3310, 3309, 1, 0, 0, 0, 3310, 3311, 1, 0, 0, 0, 3311, 3323, 1, 0, 0, 0, 3312, 3314, 3, 840, 420, 0, 3313, 3312, 1, 0, 0, 0, 3314, 3317, 1, 0, 0, 0, 3315, 3313, 1, 0, 0, 0, 3315, 3316, 1, 0, 0, 0, 3316, 3318, 1, 0, 0, 0, 3317, 3315, 1, 0, 0, 0, 3318, 3320, 3, 344, 172, 0, 3319, 3321, 5, 549, 0, 0, 3320, 3319, 1, 0, 0, 0, 3320, 3321, 1, 0, 0, 0, 3321, 3323, 1, 0, 0, 0, 3322, 2855, 1, 0, 0, 0, 3322, 2865, 1, 0, 0, 0, 3322, 2875, 1, 0, 0, 0, 3322, 2885, 1, 0, 0, 0, 3322, 2895, 1, 0, 0, 0, 3322, 2905, 1, 0, 0, 0, 3322, 2915, 1, 0, 0, 0, 3322, 2925, 1, 0, 0, 0, 3322, 2935, 1, 0, 0, 0, 3322, 2945, 1, 0, 0, 0, 3322, 2955, 1, 0, 0, 0, 3322, 2965, 1, 0, 0, 0, 3322, 2975, 1, 0, 0, 0, 3322, 2985, 1, 0, 0, 0, 3322, 2995, 1, 0, 0, 0, 3322, 3005, 1, 0, 0, 0, 3322, 3015, 1, 0, 0, 0, 3322, 3025, 1, 0, 0, 0, 3322, 3035, 1, 0, 0, 0, 3322, 3045, 1, 0, 0, 0, 3322, 3055, 1, 0, 0, 0, 3322, 3065, 1, 0, 0, 0, 3322, 3075, 1, 0, 0, 0, 3322, 3085, 1, 0, 0, 0, 3322, 3095, 1, 0, 0, 0, 3322, 3105, 1, 0, 0, 0, 3322, 3115, 1, 0, 0, 0, 3322, 3125, 1, 0, 0, 0, 3322, 3135, 1, 0, 0, 0, 3322, 3145, 1, 0, 0, 0, 3322, 3155, 1, 0, 0, 0, 3322, 3165, 1, 0, 0, 0, 3322, 3175, 1, 0, 0, 0, 3322, 3185, 1, 0, 0, 0, 3322, 3195, 1, 0, 0, 0, 3322, 3205, 1, 0, 0, 0, 3322, 3215, 1, 0, 0, 0, 3322, 3225, 1, 0, 0, 0, 3322, 3235, 1, 0, 0, 0, 3322, 3245, 1, 0, 0, 0, 3322, 3255, 1, 0, 0, 0, 3322, 3265, 1, 0, 0, 0, 3322, 3275, 1, 0, 0, 0, 3322, 3285, 1, 0, 0, 0, 3322, 3295, 1, 0, 0, 0, 3322, 3305, 1, 0, 0, 0, 3322, 3315, 1, 0, 0, 0, 3323, 265, 1, 0, 0, 0, 3324, 3325, 5, 98, 0, 0, 3325, 3326, 5, 569, 0, 0, 3326, 3329, 3, 126, 63, 0, 3327, 3328, 5, 539, 0, 0, 3328, 3330, 3, 784, 392, 0, 3329, 3327, 1, 0, 0, 0, 3329, 3330, 1, 0, 0, 0, 3330, 267, 1, 0, 0, 0, 3331, 3334, 5, 48, 0, 0, 3332, 3335, 5, 569, 0, 0, 3333, 3335, 3, 274, 137, 0, 3334, 3332, 1, 0, 0, 0, 3334, 3333, 1, 0, 0, 0, 3335, 3336, 1, 0, 0, 0, 3336, 3337, 5, 539, 0, 0, 3337, 3338, 3, 784, 392, 0, 3338, 269, 1, 0, 0, 0, 3339, 3340, 5, 569, 0, 0, 3340, 3342, 5, 539, 0, 0, 3341, 3339, 1, 0, 0, 0, 3341, 3342, 1, 0, 0, 0, 3342, 3343, 1, 0, 0, 0, 3343, 3344, 5, 17, 0, 0, 3344, 3350, 3, 130, 65, 0, 3345, 3347, 5, 552, 0, 0, 3346, 3348, 3, 416, 208, 0, 3347, 3346, 1, 0, 0, 0, 3347, 3348, 1, 0, 0, 0, 3348, 3349, 1, 0, 0, 0, 3349, 3351, 5, 553, 0, 0, 3350, 3345, 1, 0, 0, 0, 3350, 3351, 1, 0, 0, 0, 3351, 3353, 1, 0, 0, 0, 3352, 3354, 3, 286, 143, 0, 3353, 3352, 1, 0, 0, 0, 3353, 3354, 1, 0, 0, 0, 3354, 271, 1, 0, 0, 0, 3355, 3356, 5, 99, 0, 0, 3356, 3362, 5, 569, 0, 0, 3357, 3359, 5, 552, 0, 0, 3358, 3360, 3, 416, 208, 0, 3359, 3358, 1, 0, 0, 0, 3359, 3360, 1, 0, 0, 0, 3360, 3361, 1, 0, 0, 0, 3361, 3363, 5, 553, 0, 0, 3362, 3357, 1, 0, 0, 0, 3362, 3363, 1, 0, 0, 0, 3363, 273, 1, 0, 0, 0, 3364, 3370, 5, 569, 0, 0, 3365, 3368, 7, 17, 0, 0, 3366, 3369, 5, 570, 0, 0, 3367, 3369, 3, 828, 414, 0, 3368, 3366, 1, 0, 0, 0, 3368, 3367, 1, 0, 0, 0, 3369, 3371, 1, 0, 0, 0, 3370, 3365, 1, 0, 0, 0, 3371, 3372, 1, 0, 0, 0, 3372, 3370, 1, 0, 0, 0, 3372, 3373, 1, 0, 0, 0, 3373, 275, 1, 0, 0, 0, 3374, 3375, 5, 102, 0, 0, 3375, 3378, 5, 569, 0, 0, 3376, 3377, 5, 140, 0, 0, 3377, 3379, 5, 121, 0, 0, 3378, 3376, 1, 0, 0, 0, 3378, 3379, 1, 0, 0, 0, 3379, 3381, 1, 0, 0, 0, 3380, 3382, 5, 417, 0, 0, 3381, 3380, 1, 0, 0, 0, 3381, 3382, 1, 0, 0, 0, 3382, 3384, 1, 0, 0, 0, 3383, 3385, 3, 286, 143, 0, 3384, 3383, 1, 0, 0, 0, 3384, 3385, 1, 0, 0, 0, 3385, 277, 1, 0, 0, 0, 3386, 3387, 5, 101, 0, 0, 3387, 3389, 5, 569, 0, 0, 3388, 3390, 3, 286, 143, 0, 3389, 3388, 1, 0, 0, 0, 3389, 3390, 1, 0, 0, 0, 3390, 279, 1, 0, 0, 0, 3391, 3392, 5, 103, 0, 0, 3392, 3394, 5, 569, 0, 0, 3393, 3395, 5, 417, 0, 0, 3394, 3393, 1, 0, 0, 0, 3394, 3395, 1, 0, 0, 0, 3395, 281, 1, 0, 0, 0, 3396, 3397, 5, 100, 0, 0, 3397, 3398, 5, 569, 0, 0, 3398, 3399, 5, 72, 0, 0, 3399, 3414, 3, 284, 142, 0, 3400, 3412, 5, 73, 0, 0, 3401, 3408, 3, 448, 224, 0, 3402, 3404, 3, 450, 225, 0, 3403, 3402, 1, 0, 0, 0, 3403, 3404, 1, 0, 0, 0, 3404, 3405, 1, 0, 0, 0, 3405, 3407, 3, 448, 224, 0, 3406, 3403, 1, 0, 0, 0, 3407, 3410, 1, 0, 0, 0, 3408, 3406, 1, 0, 0, 0, 3408, 3409, 1, 0, 0, 0, 3409, 3413, 1, 0, 0, 0, 3410, 3408, 1, 0, 0, 0, 3411, 3413, 3, 784, 392, 0, 3412, 3401, 1, 0, 0, 0, 3412, 3411, 1, 0, 0, 0, 3413, 3415, 1, 0, 0, 0, 3414, 3400, 1, 0, 0, 0, 3414, 3415, 1, 0, 0, 0, 3415, 3425, 1, 0, 0, 0, 3416, 3417, 5, 10, 0, 0, 3417, 3422, 3, 446, 223, 0, 3418, 3419, 5, 550, 0, 0, 3419, 3421, 3, 446, 223, 0, 3420, 3418, 1, 0, 0, 0, 3421, 3424, 1, 0, 0, 0, 3422, 3420, 1, 0, 0, 0, 3422, 3423, 1, 0, 0, 0, 3423, 3426, 1, 0, 0, 0, 3424, 3422, 1, 0, 0, 0, 3425, 3416, 1, 0, 0, 0, 3425, 3426, 1, 0, 0, 0, 3426, 3429, 1, 0, 0, 0, 3427, 3428, 5, 76, 0, 0, 3428, 3430, 3, 784, 392, 0, 3429, 3427, 1, 0, 0, 0, 3429, 3430, 1, 0, 0, 0, 3430, 3433, 1, 0, 0, 0, 3431, 3432, 5, 75, 0, 0, 3432, 3434, 3, 784, 392, 0, 3433, 3431, 1, 0, 0, 0, 3433, 3434, 1, 0, 0, 0, 3434, 3436, 1, 0, 0, 0, 3435, 3437, 3, 286, 143, 0, 3436, 3435, 1, 0, 0, 0, 3436, 3437, 1, 0, 0, 0, 3437, 283, 1, 0, 0, 0, 3438, 3449, 3, 828, 414, 0, 3439, 3440, 5, 569, 0, 0, 3440, 3441, 5, 545, 0, 0, 3441, 3449, 3, 828, 414, 0, 3442, 3443, 5, 552, 0, 0, 3443, 3444, 3, 698, 349, 0, 3444, 3445, 5, 553, 0, 0, 3445, 3449, 1, 0, 0, 0, 3446, 3447, 5, 373, 0, 0, 3447, 3449, 5, 566, 0, 0, 3448, 3438, 1, 0, 0, 0, 3448, 3439, 1, 0, 0, 0, 3448, 3442, 1, 0, 0, 0, 3448, 3446, 1, 0, 0, 0, 3449, 285, 1, 0, 0, 0, 3450, 3451, 5, 94, 0, 0, 3451, 3452, 5, 320, 0, 0, 3452, 3471, 5, 109, 0, 0, 3453, 3454, 5, 94, 0, 0, 3454, 3455, 5, 320, 0, 0, 3455, 3471, 5, 103, 0, 0, 3456, 3457, 5, 94, 0, 0, 3457, 3458, 5, 320, 0, 0, 3458, 3459, 5, 554, 0, 0, 3459, 3460, 3, 262, 131, 0, 3460, 3461, 5, 555, 0, 0, 3461, 3471, 1, 0, 0, 0, 3462, 3463, 5, 94, 0, 0, 3463, 3464, 5, 320, 0, 0, 3464, 3465, 5, 459, 0, 0, 3465, 3466, 5, 103, 0, 0, 3466, 3467, 5, 554, 0, 0, 3467, 3468, 3, 262, 131, 0, 3468, 3469, 5, 555, 0, 0, 3469, 3471, 1, 0, 0, 0, 3470, 3450, 1, 0, 0, 0, 3470, 3453, 1, 0, 0, 0, 3470, 3456, 1, 0, 0, 0, 3470, 3462, 1, 0, 0, 0, 3471, 287, 1, 0, 0, 0, 3472, 3473, 5, 106, 0, 0, 3473, 3474, 3, 784, 392, 0, 3474, 3475, 5, 82, 0, 0, 3475, 3483, 3, 262, 131, 0, 3476, 3477, 5, 107, 0, 0, 3477, 3478, 3, 784, 392, 0, 3478, 3479, 5, 82, 0, 0, 3479, 3480, 3, 262, 131, 0, 3480, 3482, 1, 0, 0, 0, 3481, 3476, 1, 0, 0, 0, 3482, 3485, 1, 0, 0, 0, 3483, 3481, 1, 0, 0, 0, 3483, 3484, 1, 0, 0, 0, 3484, 3488, 1, 0, 0, 0, 3485, 3483, 1, 0, 0, 0, 3486, 3487, 5, 83, 0, 0, 3487, 3489, 3, 262, 131, 0, 3488, 3486, 1, 0, 0, 0, 3488, 3489, 1, 0, 0, 0, 3489, 3490, 1, 0, 0, 0, 3490, 3491, 5, 84, 0, 0, 3491, 3492, 5, 106, 0, 0, 3492, 289, 1, 0, 0, 0, 3493, 3494, 5, 104, 0, 0, 3494, 3495, 5, 569, 0, 0, 3495, 3498, 5, 307, 0, 0, 3496, 3499, 5, 569, 0, 0, 3497, 3499, 3, 274, 137, 0, 3498, 3496, 1, 0, 0, 0, 3498, 3497, 1, 0, 0, 0, 3499, 3500, 1, 0, 0, 0, 3500, 3501, 5, 97, 0, 0, 3501, 3502, 3, 262, 131, 0, 3502, 3503, 5, 84, 0, 0, 3503, 3504, 5, 104, 0, 0, 3504, 291, 1, 0, 0, 0, 3505, 3506, 5, 105, 0, 0, 3506, 3508, 3, 784, 392, 0, 3507, 3509, 5, 97, 0, 0, 3508, 3507, 1, 0, 0, 0, 3508, 3509, 1, 0, 0, 0, 3509, 3510, 1, 0, 0, 0, 3510, 3511, 3, 262, 131, 0, 3511, 3513, 5, 84, 0, 0, 3512, 3514, 5, 105, 0, 0, 3513, 3512, 1, 0, 0, 0, 3513, 3514, 1, 0, 0, 0, 3514, 293, 1, 0, 0, 0, 3515, 3516, 5, 109, 0, 0, 3516, 295, 1, 0, 0, 0, 3517, 3518, 5, 110, 0, 0, 3518, 297, 1, 0, 0, 0, 3519, 3521, 5, 111, 0, 0, 3520, 3522, 3, 784, 392, 0, 3521, 3520, 1, 0, 0, 0, 3521, 3522, 1, 0, 0, 0, 3522, 299, 1, 0, 0, 0, 3523, 3524, 5, 321, 0, 0, 3524, 3525, 5, 320, 0, 0, 3525, 301, 1, 0, 0, 0, 3526, 3528, 5, 113, 0, 0, 3527, 3529, 3, 304, 152, 0, 3528, 3527, 1, 0, 0, 0, 3528, 3529, 1, 0, 0, 0, 3529, 3532, 1, 0, 0, 0, 3530, 3531, 5, 120, 0, 0, 3531, 3533, 5, 566, 0, 0, 3532, 3530, 1, 0, 0, 0, 3532, 3533, 1, 0, 0, 0, 3533, 3534, 1, 0, 0, 0, 3534, 3536, 3, 784, 392, 0, 3535, 3537, 3, 310, 155, 0, 3536, 3535, 1, 0, 0, 0, 3536, 3537, 1, 0, 0, 0, 3537, 303, 1, 0, 0, 0, 3538, 3539, 7, 18, 0, 0, 3539, 305, 1, 0, 0, 0, 3540, 3541, 5, 140, 0, 0, 3541, 3542, 5, 552, 0, 0, 3542, 3547, 3, 308, 154, 0, 3543, 3544, 5, 550, 0, 0, 3544, 3546, 3, 308, 154, 0, 3545, 3543, 1, 0, 0, 0, 3546, 3549, 1, 0, 0, 0, 3547, 3545, 1, 0, 0, 0, 3547, 3548, 1, 0, 0, 0, 3548, 3550, 1, 0, 0, 0, 3549, 3547, 1, 0, 0, 0, 3550, 3551, 5, 553, 0, 0, 3551, 3555, 1, 0, 0, 0, 3552, 3553, 5, 392, 0, 0, 3553, 3555, 3, 834, 417, 0, 3554, 3540, 1, 0, 0, 0, 3554, 3552, 1, 0, 0, 0, 3555, 307, 1, 0, 0, 0, 3556, 3557, 5, 554, 0, 0, 3557, 3558, 5, 568, 0, 0, 3558, 3559, 5, 555, 0, 0, 3559, 3560, 5, 539, 0, 0, 3560, 3561, 3, 784, 392, 0, 3561, 309, 1, 0, 0, 0, 3562, 3563, 3, 306, 153, 0, 3563, 311, 1, 0, 0, 0, 3564, 3565, 3, 308, 154, 0, 3565, 313, 1, 0, 0, 0, 3566, 3567, 5, 569, 0, 0, 3567, 3569, 5, 539, 0, 0, 3568, 3566, 1, 0, 0, 0, 3568, 3569, 1, 0, 0, 0, 3569, 3570, 1, 0, 0, 0, 3570, 3571, 5, 114, 0, 0, 3571, 3572, 5, 30, 0, 0, 3572, 3573, 3, 828, 414, 0, 3573, 3575, 5, 552, 0, 0, 3574, 3576, 3, 346, 173, 0, 3575, 3574, 1, 0, 0, 0, 3575, 3576, 1, 0, 0, 0, 3576, 3577, 1, 0, 0, 0, 3577, 3579, 5, 553, 0, 0, 3578, 3580, 3, 286, 143, 0, 3579, 3578, 1, 0, 0, 0, 3579, 3580, 1, 0, 0, 0, 3580, 315, 1, 0, 0, 0, 3581, 3582, 5, 569, 0, 0, 3582, 3584, 5, 539, 0, 0, 3583, 3581, 1, 0, 0, 0, 3583, 3584, 1, 0, 0, 0, 3584, 3585, 1, 0, 0, 0, 3585, 3586, 5, 114, 0, 0, 3586, 3587, 5, 115, 0, 0, 3587, 3588, 5, 117, 0, 0, 3588, 3589, 3, 828, 414, 0, 3589, 3591, 5, 552, 0, 0, 3590, 3592, 3, 346, 173, 0, 3591, 3590, 1, 0, 0, 0, 3591, 3592, 1, 0, 0, 0, 3592, 3593, 1, 0, 0, 0, 3593, 3595, 5, 553, 0, 0, 3594, 3596, 3, 286, 143, 0, 3595, 3594, 1, 0, 0, 0, 3595, 3596, 1, 0, 0, 0, 3596, 317, 1, 0, 0, 0, 3597, 3598, 5, 569, 0, 0, 3598, 3600, 5, 539, 0, 0, 3599, 3597, 1, 0, 0, 0, 3599, 3600, 1, 0, 0, 0, 3600, 3601, 1, 0, 0, 0, 3601, 3602, 5, 420, 0, 0, 3602, 3603, 5, 373, 0, 0, 3603, 3604, 5, 374, 0, 0, 3604, 3611, 3, 828, 414, 0, 3605, 3609, 5, 167, 0, 0, 3606, 3610, 5, 566, 0, 0, 3607, 3610, 5, 567, 0, 0, 3608, 3610, 3, 784, 392, 0, 3609, 3606, 1, 0, 0, 0, 3609, 3607, 1, 0, 0, 0, 3609, 3608, 1, 0, 0, 0, 3610, 3612, 1, 0, 0, 0, 3611, 3605, 1, 0, 0, 0, 3611, 3612, 1, 0, 0, 0, 3612, 3618, 1, 0, 0, 0, 3613, 3615, 5, 552, 0, 0, 3614, 3616, 3, 346, 173, 0, 3615, 3614, 1, 0, 0, 0, 3615, 3616, 1, 0, 0, 0, 3616, 3617, 1, 0, 0, 0, 3617, 3619, 5, 553, 0, 0, 3618, 3613, 1, 0, 0, 0, 3618, 3619, 1, 0, 0, 0, 3619, 3626, 1, 0, 0, 0, 3620, 3621, 5, 372, 0, 0, 3621, 3623, 5, 552, 0, 0, 3622, 3624, 3, 346, 173, 0, 3623, 3622, 1, 0, 0, 0, 3623, 3624, 1, 0, 0, 0, 3624, 3625, 1, 0, 0, 0, 3625, 3627, 5, 553, 0, 0, 3626, 3620, 1, 0, 0, 0, 3626, 3627, 1, 0, 0, 0, 3627, 3629, 1, 0, 0, 0, 3628, 3630, 3, 286, 143, 0, 3629, 3628, 1, 0, 0, 0, 3629, 3630, 1, 0, 0, 0, 3630, 319, 1, 0, 0, 0, 3631, 3632, 5, 569, 0, 0, 3632, 3634, 5, 539, 0, 0, 3633, 3631, 1, 0, 0, 0, 3633, 3634, 1, 0, 0, 0, 3634, 3635, 1, 0, 0, 0, 3635, 3636, 5, 114, 0, 0, 3636, 3637, 5, 26, 0, 0, 3637, 3638, 5, 117, 0, 0, 3638, 3639, 3, 828, 414, 0, 3639, 3641, 5, 552, 0, 0, 3640, 3642, 3, 346, 173, 0, 3641, 3640, 1, 0, 0, 0, 3641, 3642, 1, 0, 0, 0, 3642, 3643, 1, 0, 0, 0, 3643, 3645, 5, 553, 0, 0, 3644, 3646, 3, 286, 143, 0, 3645, 3644, 1, 0, 0, 0, 3645, 3646, 1, 0, 0, 0, 3646, 321, 1, 0, 0, 0, 3647, 3648, 5, 569, 0, 0, 3648, 3650, 5, 539, 0, 0, 3649, 3647, 1, 0, 0, 0, 3649, 3650, 1, 0, 0, 0, 3650, 3651, 1, 0, 0, 0, 3651, 3652, 5, 114, 0, 0, 3652, 3653, 5, 32, 0, 0, 3653, 3654, 3, 828, 414, 0, 3654, 3656, 5, 552, 0, 0, 3655, 3657, 3, 346, 173, 0, 3656, 3655, 1, 0, 0, 0, 3656, 3657, 1, 0, 0, 0, 3657, 3658, 1, 0, 0, 0, 3658, 3660, 5, 553, 0, 0, 3659, 3661, 3, 286, 143, 0, 3660, 3659, 1, 0, 0, 0, 3660, 3661, 1, 0, 0, 0, 3661, 323, 1, 0, 0, 0, 3662, 3663, 5, 569, 0, 0, 3663, 3665, 5, 539, 0, 0, 3664, 3662, 1, 0, 0, 0, 3664, 3665, 1, 0, 0, 0, 3665, 3666, 1, 0, 0, 0, 3666, 3667, 5, 354, 0, 0, 3667, 3668, 5, 32, 0, 0, 3668, 3669, 5, 518, 0, 0, 3669, 3670, 5, 569, 0, 0, 3670, 3671, 5, 77, 0, 0, 3671, 3673, 3, 828, 414, 0, 3672, 3674, 3, 286, 143, 0, 3673, 3672, 1, 0, 0, 0, 3673, 3674, 1, 0, 0, 0, 3674, 325, 1, 0, 0, 0, 3675, 3676, 5, 569, 0, 0, 3676, 3678, 5, 539, 0, 0, 3677, 3675, 1, 0, 0, 0, 3677, 3678, 1, 0, 0, 0, 3678, 3679, 1, 0, 0, 0, 3679, 3680, 5, 354, 0, 0, 3680, 3681, 5, 405, 0, 0, 3681, 3682, 5, 453, 0, 0, 3682, 3684, 5, 569, 0, 0, 3683, 3685, 3, 286, 143, 0, 3684, 3683, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 327, 1, 0, 0, 0, 3686, 3687, 5, 569, 0, 0, 3687, 3689, 5, 539, 0, 0, 3688, 3686, 1, 0, 0, 0, 3688, 3689, 1, 0, 0, 0, 3689, 3690, 1, 0, 0, 0, 3690, 3691, 5, 354, 0, 0, 3691, 3692, 5, 32, 0, 0, 3692, 3693, 5, 513, 0, 0, 3693, 3694, 5, 524, 0, 0, 3694, 3696, 5, 569, 0, 0, 3695, 3697, 3, 286, 143, 0, 3696, 3695, 1, 0, 0, 0, 3696, 3697, 1, 0, 0, 0, 3697, 329, 1, 0, 0, 0, 3698, 3699, 5, 32, 0, 0, 3699, 3700, 5, 339, 0, 0, 3700, 3702, 3, 332, 166, 0, 3701, 3703, 3, 286, 143, 0, 3702, 3701, 1, 0, 0, 0, 3702, 3703, 1, 0, 0, 0, 3703, 331, 1, 0, 0, 0, 3704, 3705, 5, 528, 0, 0, 3705, 3708, 5, 569, 0, 0, 3706, 3707, 5, 533, 0, 0, 3707, 3709, 3, 784, 392, 0, 3708, 3706, 1, 0, 0, 0, 3708, 3709, 1, 0, 0, 0, 3709, 3721, 1, 0, 0, 0, 3710, 3711, 5, 109, 0, 0, 3711, 3721, 5, 569, 0, 0, 3712, 3713, 5, 526, 0, 0, 3713, 3721, 5, 569, 0, 0, 3714, 3715, 5, 530, 0, 0, 3715, 3721, 5, 569, 0, 0, 3716, 3717, 5, 529, 0, 0, 3717, 3721, 5, 569, 0, 0, 3718, 3719, 5, 527, 0, 0, 3719, 3721, 5, 569, 0, 0, 3720, 3704, 1, 0, 0, 0, 3720, 3710, 1, 0, 0, 0, 3720, 3712, 1, 0, 0, 0, 3720, 3714, 1, 0, 0, 0, 3720, 3716, 1, 0, 0, 0, 3720, 3718, 1, 0, 0, 0, 3721, 333, 1, 0, 0, 0, 3722, 3723, 5, 48, 0, 0, 3723, 3724, 5, 487, 0, 0, 3724, 3725, 5, 490, 0, 0, 3725, 3726, 5, 569, 0, 0, 3726, 3728, 5, 566, 0, 0, 3727, 3729, 3, 286, 143, 0, 3728, 3727, 1, 0, 0, 0, 3728, 3729, 1, 0, 0, 0, 3729, 335, 1, 0, 0, 0, 3730, 3731, 5, 534, 0, 0, 3731, 3732, 5, 486, 0, 0, 3732, 3733, 5, 487, 0, 0, 3733, 3735, 5, 569, 0, 0, 3734, 3736, 3, 286, 143, 0, 3735, 3734, 1, 0, 0, 0, 3735, 3736, 1, 0, 0, 0, 3736, 337, 1, 0, 0, 0, 3737, 3738, 5, 569, 0, 0, 3738, 3740, 5, 539, 0, 0, 3739, 3737, 1, 0, 0, 0, 3739, 3740, 1, 0, 0, 0, 3740, 3741, 1, 0, 0, 0, 3741, 3742, 5, 525, 0, 0, 3742, 3743, 5, 32, 0, 0, 3743, 3745, 5, 569, 0, 0, 3744, 3746, 3, 286, 143, 0, 3745, 3744, 1, 0, 0, 0, 3745, 3746, 1, 0, 0, 0, 3746, 339, 1, 0, 0, 0, 3747, 3748, 5, 534, 0, 0, 3748, 3749, 5, 32, 0, 0, 3749, 3751, 5, 569, 0, 0, 3750, 3752, 3, 286, 143, 0, 3751, 3750, 1, 0, 0, 0, 3751, 3752, 1, 0, 0, 0, 3752, 341, 1, 0, 0, 0, 3753, 3754, 5, 531, 0, 0, 3754, 3755, 5, 32, 0, 0, 3755, 3757, 7, 19, 0, 0, 3756, 3758, 3, 286, 143, 0, 3757, 3756, 1, 0, 0, 0, 3757, 3758, 1, 0, 0, 0, 3758, 343, 1, 0, 0, 0, 3759, 3760, 5, 532, 0, 0, 3760, 3761, 5, 32, 0, 0, 3761, 3763, 7, 19, 0, 0, 3762, 3764, 3, 286, 143, 0, 3763, 3762, 1, 0, 0, 0, 3763, 3764, 1, 0, 0, 0, 3764, 345, 1, 0, 0, 0, 3765, 3770, 3, 348, 174, 0, 3766, 3767, 5, 550, 0, 0, 3767, 3769, 3, 348, 174, 0, 3768, 3766, 1, 0, 0, 0, 3769, 3772, 1, 0, 0, 0, 3770, 3768, 1, 0, 0, 0, 3770, 3771, 1, 0, 0, 0, 3771, 347, 1, 0, 0, 0, 3772, 3770, 1, 0, 0, 0, 3773, 3776, 5, 569, 0, 0, 3774, 3776, 3, 254, 127, 0, 3775, 3773, 1, 0, 0, 0, 3775, 3774, 1, 0, 0, 0, 3776, 3777, 1, 0, 0, 0, 3777, 3778, 5, 539, 0, 0, 3778, 3779, 3, 784, 392, 0, 3779, 349, 1, 0, 0, 0, 3780, 3781, 5, 65, 0, 0, 3781, 3782, 5, 33, 0, 0, 3782, 3788, 3, 828, 414, 0, 3783, 3785, 5, 552, 0, 0, 3784, 3786, 3, 352, 176, 0, 3785, 3784, 1, 0, 0, 0, 3785, 3786, 1, 0, 0, 0, 3786, 3787, 1, 0, 0, 0, 3787, 3789, 5, 553, 0, 0, 3788, 3783, 1, 0, 0, 0, 3788, 3789, 1, 0, 0, 0, 3789, 3792, 1, 0, 0, 0, 3790, 3791, 5, 453, 0, 0, 3791, 3793, 5, 569, 0, 0, 3792, 3790, 1, 0, 0, 0, 3792, 3793, 1, 0, 0, 0, 3793, 3796, 1, 0, 0, 0, 3794, 3795, 5, 140, 0, 0, 3795, 3797, 3, 416, 208, 0, 3796, 3794, 1, 0, 0, 0, 3796, 3797, 1, 0, 0, 0, 3797, 351, 1, 0, 0, 0, 3798, 3803, 3, 354, 177, 0, 3799, 3800, 5, 550, 0, 0, 3800, 3802, 3, 354, 177, 0, 3801, 3799, 1, 0, 0, 0, 3802, 3805, 1, 0, 0, 0, 3803, 3801, 1, 0, 0, 0, 3803, 3804, 1, 0, 0, 0, 3804, 353, 1, 0, 0, 0, 3805, 3803, 1, 0, 0, 0, 3806, 3807, 5, 569, 0, 0, 3807, 3810, 5, 539, 0, 0, 3808, 3811, 5, 569, 0, 0, 3809, 3811, 3, 784, 392, 0, 3810, 3808, 1, 0, 0, 0, 3810, 3809, 1, 0, 0, 0, 3811, 3817, 1, 0, 0, 0, 3812, 3813, 3, 830, 415, 0, 3813, 3814, 5, 558, 0, 0, 3814, 3815, 3, 784, 392, 0, 3815, 3817, 1, 0, 0, 0, 3816, 3806, 1, 0, 0, 0, 3816, 3812, 1, 0, 0, 0, 3817, 355, 1, 0, 0, 0, 3818, 3819, 5, 119, 0, 0, 3819, 3820, 5, 33, 0, 0, 3820, 357, 1, 0, 0, 0, 3821, 3822, 5, 65, 0, 0, 3822, 3823, 5, 397, 0, 0, 3823, 3824, 5, 33, 0, 0, 3824, 359, 1, 0, 0, 0, 3825, 3826, 5, 65, 0, 0, 3826, 3827, 5, 426, 0, 0, 3827, 3830, 3, 784, 392, 0, 3828, 3829, 5, 443, 0, 0, 3829, 3831, 3, 830, 415, 0, 3830, 3828, 1, 0, 0, 0, 3830, 3831, 1, 0, 0, 0, 3831, 3837, 1, 0, 0, 0, 3832, 3833, 5, 143, 0, 0, 3833, 3834, 5, 556, 0, 0, 3834, 3835, 3, 822, 411, 0, 3835, 3836, 5, 557, 0, 0, 3836, 3838, 1, 0, 0, 0, 3837, 3832, 1, 0, 0, 0, 3837, 3838, 1, 0, 0, 0, 3838, 361, 1, 0, 0, 0, 3839, 3840, 5, 112, 0, 0, 3840, 3841, 3, 784, 392, 0, 3841, 363, 1, 0, 0, 0, 3842, 3843, 5, 316, 0, 0, 3843, 3844, 5, 317, 0, 0, 3844, 3845, 3, 274, 137, 0, 3845, 3846, 5, 426, 0, 0, 3846, 3852, 3, 784, 392, 0, 3847, 3848, 5, 143, 0, 0, 3848, 3849, 5, 556, 0, 0, 3849, 3850, 3, 822, 411, 0, 3850, 3851, 5, 557, 0, 0, 3851, 3853, 1, 0, 0, 0, 3852, 3847, 1, 0, 0, 0, 3852, 3853, 1, 0, 0, 0, 3853, 365, 1, 0, 0, 0, 3854, 3855, 5, 569, 0, 0, 3855, 3857, 5, 539, 0, 0, 3856, 3854, 1, 0, 0, 0, 3856, 3857, 1, 0, 0, 0, 3857, 3858, 1, 0, 0, 0, 3858, 3859, 5, 329, 0, 0, 3859, 3860, 5, 114, 0, 0, 3860, 3861, 3, 368, 184, 0, 3861, 3863, 3, 370, 185, 0, 3862, 3864, 3, 372, 186, 0, 3863, 3862, 1, 0, 0, 0, 3863, 3864, 1, 0, 0, 0, 3864, 3868, 1, 0, 0, 0, 3865, 3867, 3, 374, 187, 0, 3866, 3865, 1, 0, 0, 0, 3867, 3870, 1, 0, 0, 0, 3868, 3866, 1, 0, 0, 0, 3868, 3869, 1, 0, 0, 0, 3869, 3872, 1, 0, 0, 0, 3870, 3868, 1, 0, 0, 0, 3871, 3873, 3, 376, 188, 0, 3872, 3871, 1, 0, 0, 0, 3872, 3873, 1, 0, 0, 0, 3873, 3875, 1, 0, 0, 0, 3874, 3876, 3, 378, 189, 0, 3875, 3874, 1, 0, 0, 0, 3875, 3876, 1, 0, 0, 0, 3876, 3878, 1, 0, 0, 0, 3877, 3879, 3, 380, 190, 0, 3878, 3877, 1, 0, 0, 0, 3878, 3879, 1, 0, 0, 0, 3879, 3880, 1, 0, 0, 0, 3880, 3882, 3, 382, 191, 0, 3881, 3883, 3, 286, 143, 0, 3882, 3881, 1, 0, 0, 0, 3882, 3883, 1, 0, 0, 0, 3883, 367, 1, 0, 0, 0, 3884, 3885, 7, 20, 0, 0, 3885, 369, 1, 0, 0, 0, 3886, 3889, 5, 566, 0, 0, 3887, 3889, 3, 784, 392, 0, 3888, 3886, 1, 0, 0, 0, 3888, 3887, 1, 0, 0, 0, 3889, 371, 1, 0, 0, 0, 3890, 3891, 3, 306, 153, 0, 3891, 373, 1, 0, 0, 0, 3892, 3893, 5, 198, 0, 0, 3893, 3894, 7, 21, 0, 0, 3894, 3895, 5, 539, 0, 0, 3895, 3896, 3, 784, 392, 0, 3896, 375, 1, 0, 0, 0, 3897, 3898, 5, 334, 0, 0, 3898, 3899, 5, 336, 0, 0, 3899, 3900, 3, 784, 392, 0, 3900, 3901, 5, 371, 0, 0, 3901, 3902, 3, 784, 392, 0, 3902, 377, 1, 0, 0, 0, 3903, 3904, 5, 343, 0, 0, 3904, 3906, 5, 566, 0, 0, 3905, 3907, 3, 306, 153, 0, 3906, 3905, 1, 0, 0, 0, 3906, 3907, 1, 0, 0, 0, 3907, 3920, 1, 0, 0, 0, 3908, 3909, 5, 343, 0, 0, 3909, 3911, 3, 784, 392, 0, 3910, 3912, 3, 306, 153, 0, 3911, 3910, 1, 0, 0, 0, 3911, 3912, 1, 0, 0, 0, 3912, 3920, 1, 0, 0, 0, 3913, 3914, 5, 343, 0, 0, 3914, 3915, 5, 376, 0, 0, 3915, 3916, 3, 828, 414, 0, 3916, 3917, 5, 72, 0, 0, 3917, 3918, 5, 569, 0, 0, 3918, 3920, 1, 0, 0, 0, 3919, 3903, 1, 0, 0, 0, 3919, 3908, 1, 0, 0, 0, 3919, 3913, 1, 0, 0, 0, 3920, 379, 1, 0, 0, 0, 3921, 3922, 5, 342, 0, 0, 3922, 3923, 3, 784, 392, 0, 3923, 381, 1, 0, 0, 0, 3924, 3925, 5, 78, 0, 0, 3925, 3939, 5, 276, 0, 0, 3926, 3927, 5, 78, 0, 0, 3927, 3939, 5, 344, 0, 0, 3928, 3929, 5, 78, 0, 0, 3929, 3930, 5, 376, 0, 0, 3930, 3931, 3, 828, 414, 0, 3931, 3932, 5, 77, 0, 0, 3932, 3933, 3, 828, 414, 0, 3933, 3939, 1, 0, 0, 0, 3934, 3935, 5, 78, 0, 0, 3935, 3939, 5, 448, 0, 0, 3936, 3937, 5, 78, 0, 0, 3937, 3939, 5, 337, 0, 0, 3938, 3924, 1, 0, 0, 0, 3938, 3926, 1, 0, 0, 0, 3938, 3928, 1, 0, 0, 0, 3938, 3934, 1, 0, 0, 0, 3938, 3936, 1, 0, 0, 0, 3939, 383, 1, 0, 0, 0, 3940, 3941, 5, 569, 0, 0, 3941, 3943, 5, 539, 0, 0, 3942, 3940, 1, 0, 0, 0, 3942, 3943, 1, 0, 0, 0, 3943, 3944, 1, 0, 0, 0, 3944, 3945, 5, 346, 0, 0, 3945, 3946, 5, 329, 0, 0, 3946, 3947, 5, 345, 0, 0, 3947, 3949, 3, 828, 414, 0, 3948, 3950, 3, 386, 193, 0, 3949, 3948, 1, 0, 0, 0, 3949, 3950, 1, 0, 0, 0, 3950, 3952, 1, 0, 0, 0, 3951, 3953, 3, 390, 195, 0, 3952, 3951, 1, 0, 0, 0, 3952, 3953, 1, 0, 0, 0, 3953, 3955, 1, 0, 0, 0, 3954, 3956, 3, 286, 143, 0, 3955, 3954, 1, 0, 0, 0, 3955, 3956, 1, 0, 0, 0, 3956, 385, 1, 0, 0, 0, 3957, 3958, 5, 140, 0, 0, 3958, 3959, 5, 552, 0, 0, 3959, 3964, 3, 388, 194, 0, 3960, 3961, 5, 550, 0, 0, 3961, 3963, 3, 388, 194, 0, 3962, 3960, 1, 0, 0, 0, 3963, 3966, 1, 0, 0, 0, 3964, 3962, 1, 0, 0, 0, 3964, 3965, 1, 0, 0, 0, 3965, 3967, 1, 0, 0, 0, 3966, 3964, 1, 0, 0, 0, 3967, 3968, 5, 553, 0, 0, 3968, 387, 1, 0, 0, 0, 3969, 3970, 5, 569, 0, 0, 3970, 3971, 5, 539, 0, 0, 3971, 3972, 3, 784, 392, 0, 3972, 389, 1, 0, 0, 0, 3973, 3974, 5, 343, 0, 0, 3974, 3975, 5, 569, 0, 0, 3975, 391, 1, 0, 0, 0, 3976, 3977, 5, 569, 0, 0, 3977, 3979, 5, 539, 0, 0, 3978, 3976, 1, 0, 0, 0, 3978, 3979, 1, 0, 0, 0, 3979, 3980, 1, 0, 0, 0, 3980, 3981, 5, 378, 0, 0, 3981, 3982, 5, 72, 0, 0, 3982, 3983, 5, 376, 0, 0, 3983, 3984, 3, 828, 414, 0, 3984, 3985, 5, 552, 0, 0, 3985, 3986, 5, 569, 0, 0, 3986, 3988, 5, 553, 0, 0, 3987, 3989, 3, 286, 143, 0, 3988, 3987, 1, 0, 0, 0, 3988, 3989, 1, 0, 0, 0, 3989, 393, 1, 0, 0, 0, 3990, 3991, 5, 569, 0, 0, 3991, 3993, 5, 539, 0, 0, 3992, 3990, 1, 0, 0, 0, 3992, 3993, 1, 0, 0, 0, 3993, 3994, 1, 0, 0, 0, 3994, 3995, 5, 384, 0, 0, 3995, 3996, 5, 450, 0, 0, 3996, 3997, 5, 376, 0, 0, 3997, 3998, 3, 828, 414, 0, 3998, 3999, 5, 552, 0, 0, 3999, 4000, 5, 569, 0, 0, 4000, 4002, 5, 553, 0, 0, 4001, 4003, 3, 286, 143, 0, 4002, 4001, 1, 0, 0, 0, 4002, 4003, 1, 0, 0, 0, 4003, 395, 1, 0, 0, 0, 4004, 4005, 5, 569, 0, 0, 4005, 4007, 5, 539, 0, 0, 4006, 4004, 1, 0, 0, 0, 4006, 4007, 1, 0, 0, 0, 4007, 4008, 1, 0, 0, 0, 4008, 4009, 5, 519, 0, 0, 4009, 4010, 5, 569, 0, 0, 4010, 4011, 5, 140, 0, 0, 4011, 4013, 3, 828, 414, 0, 4012, 4014, 3, 286, 143, 0, 4013, 4012, 1, 0, 0, 0, 4013, 4014, 1, 0, 0, 0, 4014, 397, 1, 0, 0, 0, 4015, 4016, 5, 569, 0, 0, 4016, 4017, 5, 539, 0, 0, 4017, 4018, 3, 400, 200, 0, 4018, 399, 1, 0, 0, 0, 4019, 4020, 5, 122, 0, 0, 4020, 4021, 5, 552, 0, 0, 4021, 4022, 5, 569, 0, 0, 4022, 4091, 5, 553, 0, 0, 4023, 4024, 5, 123, 0, 0, 4024, 4025, 5, 552, 0, 0, 4025, 4026, 5, 569, 0, 0, 4026, 4091, 5, 553, 0, 0, 4027, 4028, 5, 124, 0, 0, 4028, 4029, 5, 552, 0, 0, 4029, 4030, 5, 569, 0, 0, 4030, 4031, 5, 550, 0, 0, 4031, 4032, 3, 784, 392, 0, 4032, 4033, 5, 553, 0, 0, 4033, 4091, 1, 0, 0, 0, 4034, 4035, 5, 188, 0, 0, 4035, 4036, 5, 552, 0, 0, 4036, 4037, 5, 569, 0, 0, 4037, 4038, 5, 550, 0, 0, 4038, 4039, 3, 784, 392, 0, 4039, 4040, 5, 553, 0, 0, 4040, 4091, 1, 0, 0, 0, 4041, 4042, 5, 125, 0, 0, 4042, 4043, 5, 552, 0, 0, 4043, 4044, 5, 569, 0, 0, 4044, 4045, 5, 550, 0, 0, 4045, 4046, 3, 402, 201, 0, 4046, 4047, 5, 553, 0, 0, 4047, 4091, 1, 0, 0, 0, 4048, 4049, 5, 126, 0, 0, 4049, 4050, 5, 552, 0, 0, 4050, 4051, 5, 569, 0, 0, 4051, 4052, 5, 550, 0, 0, 4052, 4053, 5, 569, 0, 0, 4053, 4091, 5, 553, 0, 0, 4054, 4055, 5, 127, 0, 0, 4055, 4056, 5, 552, 0, 0, 4056, 4057, 5, 569, 0, 0, 4057, 4058, 5, 550, 0, 0, 4058, 4059, 5, 569, 0, 0, 4059, 4091, 5, 553, 0, 0, 4060, 4061, 5, 128, 0, 0, 4061, 4062, 5, 552, 0, 0, 4062, 4063, 5, 569, 0, 0, 4063, 4064, 5, 550, 0, 0, 4064, 4065, 5, 569, 0, 0, 4065, 4091, 5, 553, 0, 0, 4066, 4067, 5, 129, 0, 0, 4067, 4068, 5, 552, 0, 0, 4068, 4069, 5, 569, 0, 0, 4069, 4070, 5, 550, 0, 0, 4070, 4071, 5, 569, 0, 0, 4071, 4091, 5, 553, 0, 0, 4072, 4073, 5, 135, 0, 0, 4073, 4074, 5, 552, 0, 0, 4074, 4075, 5, 569, 0, 0, 4075, 4076, 5, 550, 0, 0, 4076, 4077, 5, 569, 0, 0, 4077, 4091, 5, 553, 0, 0, 4078, 4079, 5, 322, 0, 0, 4079, 4080, 5, 552, 0, 0, 4080, 4087, 5, 569, 0, 0, 4081, 4082, 5, 550, 0, 0, 4082, 4085, 3, 784, 392, 0, 4083, 4084, 5, 550, 0, 0, 4084, 4086, 3, 784, 392, 0, 4085, 4083, 1, 0, 0, 0, 4085, 4086, 1, 0, 0, 0, 4086, 4088, 1, 0, 0, 0, 4087, 4081, 1, 0, 0, 0, 4087, 4088, 1, 0, 0, 0, 4088, 4089, 1, 0, 0, 0, 4089, 4091, 5, 553, 0, 0, 4090, 4019, 1, 0, 0, 0, 4090, 4023, 1, 0, 0, 0, 4090, 4027, 1, 0, 0, 0, 4090, 4034, 1, 0, 0, 0, 4090, 4041, 1, 0, 0, 0, 4090, 4048, 1, 0, 0, 0, 4090, 4054, 1, 0, 0, 0, 4090, 4060, 1, 0, 0, 0, 4090, 4066, 1, 0, 0, 0, 4090, 4072, 1, 0, 0, 0, 4090, 4078, 1, 0, 0, 0, 4091, 401, 1, 0, 0, 0, 4092, 4097, 3, 404, 202, 0, 4093, 4094, 5, 550, 0, 0, 4094, 4096, 3, 404, 202, 0, 4095, 4093, 1, 0, 0, 0, 4096, 4099, 1, 0, 0, 0, 4097, 4095, 1, 0, 0, 0, 4097, 4098, 1, 0, 0, 0, 4098, 403, 1, 0, 0, 0, 4099, 4097, 1, 0, 0, 0, 4100, 4102, 5, 570, 0, 0, 4101, 4103, 7, 10, 0, 0, 4102, 4101, 1, 0, 0, 0, 4102, 4103, 1, 0, 0, 0, 4103, 405, 1, 0, 0, 0, 4104, 4105, 5, 569, 0, 0, 4105, 4106, 5, 539, 0, 0, 4106, 4107, 3, 408, 204, 0, 4107, 407, 1, 0, 0, 0, 4108, 4109, 5, 294, 0, 0, 4109, 4110, 5, 552, 0, 0, 4110, 4111, 5, 569, 0, 0, 4111, 4133, 5, 553, 0, 0, 4112, 4113, 5, 295, 0, 0, 4113, 4114, 5, 552, 0, 0, 4114, 4115, 3, 274, 137, 0, 4115, 4116, 5, 553, 0, 0, 4116, 4133, 1, 0, 0, 0, 4117, 4118, 5, 130, 0, 0, 4118, 4119, 5, 552, 0, 0, 4119, 4120, 3, 274, 137, 0, 4120, 4121, 5, 553, 0, 0, 4121, 4133, 1, 0, 0, 0, 4122, 4123, 5, 131, 0, 0, 4123, 4124, 5, 552, 0, 0, 4124, 4125, 3, 274, 137, 0, 4125, 4126, 5, 553, 0, 0, 4126, 4133, 1, 0, 0, 0, 4127, 4128, 5, 132, 0, 0, 4128, 4129, 5, 552, 0, 0, 4129, 4130, 3, 274, 137, 0, 4130, 4131, 5, 553, 0, 0, 4131, 4133, 1, 0, 0, 0, 4132, 4108, 1, 0, 0, 0, 4132, 4112, 1, 0, 0, 0, 4132, 4117, 1, 0, 0, 0, 4132, 4122, 1, 0, 0, 0, 4132, 4127, 1, 0, 0, 0, 4133, 409, 1, 0, 0, 0, 4134, 4135, 5, 569, 0, 0, 4135, 4136, 5, 539, 0, 0, 4136, 4137, 5, 17, 0, 0, 4137, 4138, 5, 13, 0, 0, 4138, 4139, 3, 828, 414, 0, 4139, 411, 1, 0, 0, 0, 4140, 4141, 5, 47, 0, 0, 4141, 4142, 5, 569, 0, 0, 4142, 4143, 5, 450, 0, 0, 4143, 4144, 5, 569, 0, 0, 4144, 413, 1, 0, 0, 0, 4145, 4146, 5, 134, 0, 0, 4146, 4147, 5, 569, 0, 0, 4147, 4148, 5, 72, 0, 0, 4148, 4149, 5, 569, 0, 0, 4149, 415, 1, 0, 0, 0, 4150, 4155, 3, 418, 209, 0, 4151, 4152, 5, 550, 0, 0, 4152, 4154, 3, 418, 209, 0, 4153, 4151, 1, 0, 0, 0, 4154, 4157, 1, 0, 0, 0, 4155, 4153, 1, 0, 0, 0, 4155, 4156, 1, 0, 0, 0, 4156, 417, 1, 0, 0, 0, 4157, 4155, 1, 0, 0, 0, 4158, 4159, 3, 420, 210, 0, 4159, 4160, 5, 539, 0, 0, 4160, 4161, 3, 784, 392, 0, 4161, 419, 1, 0, 0, 0, 4162, 4167, 3, 828, 414, 0, 4163, 4167, 5, 570, 0, 0, 4164, 4167, 5, 572, 0, 0, 4165, 4167, 3, 850, 425, 0, 4166, 4162, 1, 0, 0, 0, 4166, 4163, 1, 0, 0, 0, 4166, 4164, 1, 0, 0, 0, 4166, 4165, 1, 0, 0, 0, 4167, 421, 1, 0, 0, 0, 4168, 4173, 3, 424, 212, 0, 4169, 4170, 5, 550, 0, 0, 4170, 4172, 3, 424, 212, 0, 4171, 4169, 1, 0, 0, 0, 4172, 4175, 1, 0, 0, 0, 4173, 4171, 1, 0, 0, 0, 4173, 4174, 1, 0, 0, 0, 4174, 423, 1, 0, 0, 0, 4175, 4173, 1, 0, 0, 0, 4176, 4177, 5, 570, 0, 0, 4177, 4178, 5, 539, 0, 0, 4178, 4179, 3, 784, 392, 0, 4179, 425, 1, 0, 0, 0, 4180, 4181, 5, 33, 0, 0, 4181, 4182, 3, 828, 414, 0, 4182, 4183, 3, 476, 238, 0, 4183, 4184, 5, 554, 0, 0, 4184, 4185, 3, 484, 242, 0, 4185, 4186, 5, 555, 0, 0, 4186, 427, 1, 0, 0, 0, 4187, 4188, 5, 34, 0, 0, 4188, 4190, 3, 828, 414, 0, 4189, 4191, 3, 480, 240, 0, 4190, 4189, 1, 0, 0, 0, 4190, 4191, 1, 0, 0, 0, 4191, 4193, 1, 0, 0, 0, 4192, 4194, 3, 430, 215, 0, 4193, 4192, 1, 0, 0, 0, 4193, 4194, 1, 0, 0, 0, 4194, 4195, 1, 0, 0, 0, 4195, 4196, 5, 554, 0, 0, 4196, 4197, 3, 484, 242, 0, 4197, 4198, 5, 555, 0, 0, 4198, 429, 1, 0, 0, 0, 4199, 4201, 3, 432, 216, 0, 4200, 4199, 1, 0, 0, 0, 4201, 4202, 1, 0, 0, 0, 4202, 4200, 1, 0, 0, 0, 4202, 4203, 1, 0, 0, 0, 4203, 431, 1, 0, 0, 0, 4204, 4205, 5, 222, 0, 0, 4205, 4206, 5, 566, 0, 0, 4206, 433, 1, 0, 0, 0, 4207, 4212, 3, 436, 218, 0, 4208, 4209, 5, 550, 0, 0, 4209, 4211, 3, 436, 218, 0, 4210, 4208, 1, 0, 0, 0, 4211, 4214, 1, 0, 0, 0, 4212, 4210, 1, 0, 0, 0, 4212, 4213, 1, 0, 0, 0, 4213, 435, 1, 0, 0, 0, 4214, 4212, 1, 0, 0, 0, 4215, 4216, 7, 22, 0, 0, 4216, 4217, 5, 558, 0, 0, 4217, 4218, 3, 126, 63, 0, 4218, 437, 1, 0, 0, 0, 4219, 4224, 3, 440, 220, 0, 4220, 4221, 5, 550, 0, 0, 4221, 4223, 3, 440, 220, 0, 4222, 4220, 1, 0, 0, 0, 4223, 4226, 1, 0, 0, 0, 4224, 4222, 1, 0, 0, 0, 4224, 4225, 1, 0, 0, 0, 4225, 439, 1, 0, 0, 0, 4226, 4224, 1, 0, 0, 0, 4227, 4228, 7, 22, 0, 0, 4228, 4229, 5, 558, 0, 0, 4229, 4230, 3, 126, 63, 0, 4230, 441, 1, 0, 0, 0, 4231, 4236, 3, 444, 222, 0, 4232, 4233, 5, 550, 0, 0, 4233, 4235, 3, 444, 222, 0, 4234, 4232, 1, 0, 0, 0, 4235, 4238, 1, 0, 0, 0, 4236, 4234, 1, 0, 0, 0, 4236, 4237, 1, 0, 0, 0, 4237, 443, 1, 0, 0, 0, 4238, 4236, 1, 0, 0, 0, 4239, 4240, 5, 569, 0, 0, 4240, 4241, 5, 558, 0, 0, 4241, 4242, 3, 126, 63, 0, 4242, 4243, 5, 539, 0, 0, 4243, 4244, 5, 566, 0, 0, 4244, 445, 1, 0, 0, 0, 4245, 4248, 3, 828, 414, 0, 4246, 4248, 5, 570, 0, 0, 4247, 4245, 1, 0, 0, 0, 4247, 4246, 1, 0, 0, 0, 4248, 4250, 1, 0, 0, 0, 4249, 4251, 7, 10, 0, 0, 4250, 4249, 1, 0, 0, 0, 4250, 4251, 1, 0, 0, 0, 4251, 447, 1, 0, 0, 0, 4252, 4253, 5, 556, 0, 0, 4253, 4254, 3, 452, 226, 0, 4254, 4255, 5, 557, 0, 0, 4255, 449, 1, 0, 0, 0, 4256, 4257, 7, 23, 0, 0, 4257, 451, 1, 0, 0, 0, 4258, 4263, 3, 454, 227, 0, 4259, 4260, 5, 304, 0, 0, 4260, 4262, 3, 454, 227, 0, 4261, 4259, 1, 0, 0, 0, 4262, 4265, 1, 0, 0, 0, 4263, 4261, 1, 0, 0, 0, 4263, 4264, 1, 0, 0, 0, 4264, 453, 1, 0, 0, 0, 4265, 4263, 1, 0, 0, 0, 4266, 4271, 3, 456, 228, 0, 4267, 4268, 5, 303, 0, 0, 4268, 4270, 3, 456, 228, 0, 4269, 4267, 1, 0, 0, 0, 4270, 4273, 1, 0, 0, 0, 4271, 4269, 1, 0, 0, 0, 4271, 4272, 1, 0, 0, 0, 4272, 455, 1, 0, 0, 0, 4273, 4271, 1, 0, 0, 0, 4274, 4275, 5, 305, 0, 0, 4275, 4278, 3, 456, 228, 0, 4276, 4278, 3, 458, 229, 0, 4277, 4274, 1, 0, 0, 0, 4277, 4276, 1, 0, 0, 0, 4278, 457, 1, 0, 0, 0, 4279, 4283, 3, 460, 230, 0, 4280, 4281, 3, 794, 397, 0, 4281, 4282, 3, 460, 230, 0, 4282, 4284, 1, 0, 0, 0, 4283, 4280, 1, 0, 0, 0, 4283, 4284, 1, 0, 0, 0, 4284, 459, 1, 0, 0, 0, 4285, 4292, 3, 472, 236, 0, 4286, 4292, 3, 462, 231, 0, 4287, 4288, 5, 552, 0, 0, 4288, 4289, 3, 452, 226, 0, 4289, 4290, 5, 553, 0, 0, 4290, 4292, 1, 0, 0, 0, 4291, 4285, 1, 0, 0, 0, 4291, 4286, 1, 0, 0, 0, 4291, 4287, 1, 0, 0, 0, 4292, 461, 1, 0, 0, 0, 4293, 4298, 3, 464, 232, 0, 4294, 4295, 5, 545, 0, 0, 4295, 4297, 3, 464, 232, 0, 4296, 4294, 1, 0, 0, 0, 4297, 4300, 1, 0, 0, 0, 4298, 4296, 1, 0, 0, 0, 4298, 4299, 1, 0, 0, 0, 4299, 463, 1, 0, 0, 0, 4300, 4298, 1, 0, 0, 0, 4301, 4306, 3, 466, 233, 0, 4302, 4303, 5, 556, 0, 0, 4303, 4304, 3, 452, 226, 0, 4304, 4305, 5, 557, 0, 0, 4305, 4307, 1, 0, 0, 0, 4306, 4302, 1, 0, 0, 0, 4306, 4307, 1, 0, 0, 0, 4307, 465, 1, 0, 0, 0, 4308, 4314, 3, 468, 234, 0, 4309, 4314, 5, 569, 0, 0, 4310, 4314, 5, 566, 0, 0, 4311, 4314, 5, 568, 0, 0, 4312, 4314, 5, 565, 0, 0, 4313, 4308, 1, 0, 0, 0, 4313, 4309, 1, 0, 0, 0, 4313, 4310, 1, 0, 0, 0, 4313, 4311, 1, 0, 0, 0, 4313, 4312, 1, 0, 0, 0, 4314, 467, 1, 0, 0, 0, 4315, 4320, 3, 470, 235, 0, 4316, 4317, 5, 551, 0, 0, 4317, 4319, 3, 470, 235, 0, 4318, 4316, 1, 0, 0, 0, 4319, 4322, 1, 0, 0, 0, 4320, 4318, 1, 0, 0, 0, 4320, 4321, 1, 0, 0, 0, 4321, 469, 1, 0, 0, 0, 4322, 4320, 1, 0, 0, 0, 4323, 4324, 8, 24, 0, 0, 4324, 471, 1, 0, 0, 0, 4325, 4326, 3, 474, 237, 0, 4326, 4335, 5, 552, 0, 0, 4327, 4332, 3, 452, 226, 0, 4328, 4329, 5, 550, 0, 0, 4329, 4331, 3, 452, 226, 0, 4330, 4328, 1, 0, 0, 0, 4331, 4334, 1, 0, 0, 0, 4332, 4330, 1, 0, 0, 0, 4332, 4333, 1, 0, 0, 0, 4333, 4336, 1, 0, 0, 0, 4334, 4332, 1, 0, 0, 0, 4335, 4327, 1, 0, 0, 0, 4335, 4336, 1, 0, 0, 0, 4336, 4337, 1, 0, 0, 0, 4337, 4338, 5, 553, 0, 0, 4338, 473, 1, 0, 0, 0, 4339, 4340, 7, 25, 0, 0, 4340, 475, 1, 0, 0, 0, 4341, 4342, 5, 552, 0, 0, 4342, 4347, 3, 478, 239, 0, 4343, 4344, 5, 550, 0, 0, 4344, 4346, 3, 478, 239, 0, 4345, 4343, 1, 0, 0, 0, 4346, 4349, 1, 0, 0, 0, 4347, 4345, 1, 0, 0, 0, 4347, 4348, 1, 0, 0, 0, 4348, 4350, 1, 0, 0, 0, 4349, 4347, 1, 0, 0, 0, 4350, 4351, 5, 553, 0, 0, 4351, 477, 1, 0, 0, 0, 4352, 4353, 5, 205, 0, 0, 4353, 4354, 5, 558, 0, 0, 4354, 4355, 5, 554, 0, 0, 4355, 4356, 3, 434, 217, 0, 4356, 4357, 5, 555, 0, 0, 4357, 4380, 1, 0, 0, 0, 4358, 4359, 5, 206, 0, 0, 4359, 4360, 5, 558, 0, 0, 4360, 4361, 5, 554, 0, 0, 4361, 4362, 3, 442, 221, 0, 4362, 4363, 5, 555, 0, 0, 4363, 4380, 1, 0, 0, 0, 4364, 4365, 5, 165, 0, 0, 4365, 4366, 5, 558, 0, 0, 4366, 4380, 5, 566, 0, 0, 4367, 4368, 5, 35, 0, 0, 4368, 4371, 5, 558, 0, 0, 4369, 4372, 3, 828, 414, 0, 4370, 4372, 5, 566, 0, 0, 4371, 4369, 1, 0, 0, 0, 4371, 4370, 1, 0, 0, 0, 4372, 4380, 1, 0, 0, 0, 4373, 4374, 5, 221, 0, 0, 4374, 4375, 5, 558, 0, 0, 4375, 4380, 5, 566, 0, 0, 4376, 4377, 5, 222, 0, 0, 4377, 4378, 5, 558, 0, 0, 4378, 4380, 5, 566, 0, 0, 4379, 4352, 1, 0, 0, 0, 4379, 4358, 1, 0, 0, 0, 4379, 4364, 1, 0, 0, 0, 4379, 4367, 1, 0, 0, 0, 4379, 4373, 1, 0, 0, 0, 4379, 4376, 1, 0, 0, 0, 4380, 479, 1, 0, 0, 0, 4381, 4382, 5, 552, 0, 0, 4382, 4387, 3, 482, 241, 0, 4383, 4384, 5, 550, 0, 0, 4384, 4386, 3, 482, 241, 0, 4385, 4383, 1, 0, 0, 0, 4386, 4389, 1, 0, 0, 0, 4387, 4385, 1, 0, 0, 0, 4387, 4388, 1, 0, 0, 0, 4388, 4390, 1, 0, 0, 0, 4389, 4387, 1, 0, 0, 0, 4390, 4391, 5, 553, 0, 0, 4391, 481, 1, 0, 0, 0, 4392, 4393, 5, 205, 0, 0, 4393, 4394, 5, 558, 0, 0, 4394, 4395, 5, 554, 0, 0, 4395, 4396, 3, 438, 219, 0, 4396, 4397, 5, 555, 0, 0, 4397, 4408, 1, 0, 0, 0, 4398, 4399, 5, 206, 0, 0, 4399, 4400, 5, 558, 0, 0, 4400, 4401, 5, 554, 0, 0, 4401, 4402, 3, 442, 221, 0, 4402, 4403, 5, 555, 0, 0, 4403, 4408, 1, 0, 0, 0, 4404, 4405, 5, 222, 0, 0, 4405, 4406, 5, 558, 0, 0, 4406, 4408, 5, 566, 0, 0, 4407, 4392, 1, 0, 0, 0, 4407, 4398, 1, 0, 0, 0, 4407, 4404, 1, 0, 0, 0, 4408, 483, 1, 0, 0, 0, 4409, 4412, 3, 488, 244, 0, 4410, 4412, 3, 486, 243, 0, 4411, 4409, 1, 0, 0, 0, 4411, 4410, 1, 0, 0, 0, 4412, 4415, 1, 0, 0, 0, 4413, 4411, 1, 0, 0, 0, 4413, 4414, 1, 0, 0, 0, 4414, 485, 1, 0, 0, 0, 4415, 4413, 1, 0, 0, 0, 4416, 4417, 5, 68, 0, 0, 4417, 4418, 5, 410, 0, 0, 4418, 4421, 3, 830, 415, 0, 4419, 4420, 5, 77, 0, 0, 4420, 4422, 3, 830, 415, 0, 4421, 4419, 1, 0, 0, 0, 4421, 4422, 1, 0, 0, 0, 4422, 487, 1, 0, 0, 0, 4423, 4424, 3, 490, 245, 0, 4424, 4426, 5, 570, 0, 0, 4425, 4427, 3, 492, 246, 0, 4426, 4425, 1, 0, 0, 0, 4426, 4427, 1, 0, 0, 0, 4427, 4429, 1, 0, 0, 0, 4428, 4430, 3, 532, 266, 0, 4429, 4428, 1, 0, 0, 0, 4429, 4430, 1, 0, 0, 0, 4430, 4450, 1, 0, 0, 0, 4431, 4432, 5, 182, 0, 0, 4432, 4433, 5, 566, 0, 0, 4433, 4435, 5, 570, 0, 0, 4434, 4436, 3, 492, 246, 0, 4435, 4434, 1, 0, 0, 0, 4435, 4436, 1, 0, 0, 0, 4436, 4438, 1, 0, 0, 0, 4437, 4439, 3, 532, 266, 0, 4438, 4437, 1, 0, 0, 0, 4438, 4439, 1, 0, 0, 0, 4439, 4450, 1, 0, 0, 0, 4440, 4441, 5, 181, 0, 0, 4441, 4442, 5, 566, 0, 0, 4442, 4444, 5, 570, 0, 0, 4443, 4445, 3, 492, 246, 0, 4444, 4443, 1, 0, 0, 0, 4444, 4445, 1, 0, 0, 0, 4445, 4447, 1, 0, 0, 0, 4446, 4448, 3, 532, 266, 0, 4447, 4446, 1, 0, 0, 0, 4447, 4448, 1, 0, 0, 0, 4448, 4450, 1, 0, 0, 0, 4449, 4423, 1, 0, 0, 0, 4449, 4431, 1, 0, 0, 0, 4449, 4440, 1, 0, 0, 0, 4450, 489, 1, 0, 0, 0, 4451, 4452, 7, 26, 0, 0, 4452, 491, 1, 0, 0, 0, 4453, 4454, 5, 552, 0, 0, 4454, 4459, 3, 494, 247, 0, 4455, 4456, 5, 550, 0, 0, 4456, 4458, 3, 494, 247, 0, 4457, 4455, 1, 0, 0, 0, 4458, 4461, 1, 0, 0, 0, 4459, 4457, 1, 0, 0, 0, 4459, 4460, 1, 0, 0, 0, 4460, 4462, 1, 0, 0, 0, 4461, 4459, 1, 0, 0, 0, 4462, 4463, 5, 553, 0, 0, 4463, 493, 1, 0, 0, 0, 4464, 4465, 5, 194, 0, 0, 4465, 4466, 5, 558, 0, 0, 4466, 4559, 3, 500, 250, 0, 4467, 4468, 5, 38, 0, 0, 4468, 4469, 5, 558, 0, 0, 4469, 4559, 3, 510, 255, 0, 4470, 4471, 5, 201, 0, 0, 4471, 4472, 5, 558, 0, 0, 4472, 4559, 3, 510, 255, 0, 4473, 4474, 5, 117, 0, 0, 4474, 4475, 5, 558, 0, 0, 4475, 4559, 3, 504, 252, 0, 4476, 4477, 5, 191, 0, 0, 4477, 4478, 5, 558, 0, 0, 4478, 4559, 3, 512, 256, 0, 4479, 4480, 5, 169, 0, 0, 4480, 4481, 5, 558, 0, 0, 4481, 4559, 5, 566, 0, 0, 4482, 4483, 5, 202, 0, 0, 4483, 4484, 5, 558, 0, 0, 4484, 4559, 3, 510, 255, 0, 4485, 4486, 5, 199, 0, 0, 4486, 4487, 5, 558, 0, 0, 4487, 4559, 3, 512, 256, 0, 4488, 4489, 5, 200, 0, 0, 4489, 4490, 5, 558, 0, 0, 4490, 4559, 3, 518, 259, 0, 4491, 4492, 5, 203, 0, 0, 4492, 4493, 5, 558, 0, 0, 4493, 4559, 3, 514, 257, 0, 4494, 4495, 5, 204, 0, 0, 4495, 4496, 5, 558, 0, 0, 4496, 4559, 3, 514, 257, 0, 4497, 4498, 5, 212, 0, 0, 4498, 4499, 5, 558, 0, 0, 4499, 4559, 3, 520, 260, 0, 4500, 4501, 5, 210, 0, 0, 4501, 4502, 5, 558, 0, 0, 4502, 4559, 5, 566, 0, 0, 4503, 4504, 5, 211, 0, 0, 4504, 4505, 5, 558, 0, 0, 4505, 4559, 5, 566, 0, 0, 4506, 4507, 5, 207, 0, 0, 4507, 4508, 5, 558, 0, 0, 4508, 4559, 3, 522, 261, 0, 4509, 4510, 5, 208, 0, 0, 4510, 4511, 5, 558, 0, 0, 4511, 4559, 3, 522, 261, 0, 4512, 4513, 5, 209, 0, 0, 4513, 4514, 5, 558, 0, 0, 4514, 4559, 3, 522, 261, 0, 4515, 4516, 5, 196, 0, 0, 4516, 4517, 5, 558, 0, 0, 4517, 4559, 3, 524, 262, 0, 4518, 4519, 5, 34, 0, 0, 4519, 4520, 5, 558, 0, 0, 4520, 4559, 3, 828, 414, 0, 4521, 4522, 5, 227, 0, 0, 4522, 4523, 5, 558, 0, 0, 4523, 4559, 3, 498, 249, 0, 4524, 4525, 5, 228, 0, 0, 4525, 4526, 5, 558, 0, 0, 4526, 4559, 3, 496, 248, 0, 4527, 4528, 5, 215, 0, 0, 4528, 4529, 5, 558, 0, 0, 4529, 4559, 3, 528, 264, 0, 4530, 4531, 5, 218, 0, 0, 4531, 4532, 5, 558, 0, 0, 4532, 4559, 5, 568, 0, 0, 4533, 4534, 5, 219, 0, 0, 4534, 4535, 5, 558, 0, 0, 4535, 4559, 5, 568, 0, 0, 4536, 4537, 5, 246, 0, 0, 4537, 4538, 5, 558, 0, 0, 4538, 4559, 3, 448, 224, 0, 4539, 4540, 5, 246, 0, 0, 4540, 4541, 5, 558, 0, 0, 4541, 4559, 3, 526, 263, 0, 4542, 4543, 5, 225, 0, 0, 4543, 4544, 5, 558, 0, 0, 4544, 4559, 3, 448, 224, 0, 4545, 4546, 5, 225, 0, 0, 4546, 4547, 5, 558, 0, 0, 4547, 4559, 3, 526, 263, 0, 4548, 4549, 5, 193, 0, 0, 4549, 4550, 5, 558, 0, 0, 4550, 4559, 3, 526, 263, 0, 4551, 4552, 5, 570, 0, 0, 4552, 4553, 5, 558, 0, 0, 4553, 4559, 3, 526, 263, 0, 4554, 4555, 3, 850, 425, 0, 4555, 4556, 5, 558, 0, 0, 4556, 4557, 3, 526, 263, 0, 4557, 4559, 1, 0, 0, 0, 4558, 4464, 1, 0, 0, 0, 4558, 4467, 1, 0, 0, 0, 4558, 4470, 1, 0, 0, 0, 4558, 4473, 1, 0, 0, 0, 4558, 4476, 1, 0, 0, 0, 4558, 4479, 1, 0, 0, 0, 4558, 4482, 1, 0, 0, 0, 4558, 4485, 1, 0, 0, 0, 4558, 4488, 1, 0, 0, 0, 4558, 4491, 1, 0, 0, 0, 4558, 4494, 1, 0, 0, 0, 4558, 4497, 1, 0, 0, 0, 4558, 4500, 1, 0, 0, 0, 4558, 4503, 1, 0, 0, 0, 4558, 4506, 1, 0, 0, 0, 4558, 4509, 1, 0, 0, 0, 4558, 4512, 1, 0, 0, 0, 4558, 4515, 1, 0, 0, 0, 4558, 4518, 1, 0, 0, 0, 4558, 4521, 1, 0, 0, 0, 4558, 4524, 1, 0, 0, 0, 4558, 4527, 1, 0, 0, 0, 4558, 4530, 1, 0, 0, 0, 4558, 4533, 1, 0, 0, 0, 4558, 4536, 1, 0, 0, 0, 4558, 4539, 1, 0, 0, 0, 4558, 4542, 1, 0, 0, 0, 4558, 4545, 1, 0, 0, 0, 4558, 4548, 1, 0, 0, 0, 4558, 4551, 1, 0, 0, 0, 4558, 4554, 1, 0, 0, 0, 4559, 495, 1, 0, 0, 0, 4560, 4561, 7, 27, 0, 0, 4561, 497, 1, 0, 0, 0, 4562, 4563, 5, 556, 0, 0, 4563, 4568, 3, 828, 414, 0, 4564, 4565, 5, 550, 0, 0, 4565, 4567, 3, 828, 414, 0, 4566, 4564, 1, 0, 0, 0, 4567, 4570, 1, 0, 0, 0, 4568, 4566, 1, 0, 0, 0, 4568, 4569, 1, 0, 0, 0, 4569, 4571, 1, 0, 0, 0, 4570, 4568, 1, 0, 0, 0, 4571, 4572, 5, 557, 0, 0, 4572, 499, 1, 0, 0, 0, 4573, 4574, 5, 569, 0, 0, 4574, 4575, 5, 545, 0, 0, 4575, 4624, 3, 502, 251, 0, 4576, 4624, 5, 569, 0, 0, 4577, 4579, 5, 373, 0, 0, 4578, 4580, 5, 72, 0, 0, 4579, 4578, 1, 0, 0, 0, 4579, 4580, 1, 0, 0, 0, 4580, 4581, 1, 0, 0, 0, 4581, 4596, 3, 828, 414, 0, 4582, 4594, 5, 73, 0, 0, 4583, 4590, 3, 448, 224, 0, 4584, 4586, 3, 450, 225, 0, 4585, 4584, 1, 0, 0, 0, 4585, 4586, 1, 0, 0, 0, 4586, 4587, 1, 0, 0, 0, 4587, 4589, 3, 448, 224, 0, 4588, 4585, 1, 0, 0, 0, 4589, 4592, 1, 0, 0, 0, 4590, 4588, 1, 0, 0, 0, 4590, 4591, 1, 0, 0, 0, 4591, 4595, 1, 0, 0, 0, 4592, 4590, 1, 0, 0, 0, 4593, 4595, 3, 784, 392, 0, 4594, 4583, 1, 0, 0, 0, 4594, 4593, 1, 0, 0, 0, 4595, 4597, 1, 0, 0, 0, 4596, 4582, 1, 0, 0, 0, 4596, 4597, 1, 0, 0, 0, 4597, 4607, 1, 0, 0, 0, 4598, 4599, 5, 10, 0, 0, 4599, 4604, 3, 446, 223, 0, 4600, 4601, 5, 550, 0, 0, 4601, 4603, 3, 446, 223, 0, 4602, 4600, 1, 0, 0, 0, 4603, 4606, 1, 0, 0, 0, 4604, 4602, 1, 0, 0, 0, 4604, 4605, 1, 0, 0, 0, 4605, 4608, 1, 0, 0, 0, 4606, 4604, 1, 0, 0, 0, 4607, 4598, 1, 0, 0, 0, 4607, 4608, 1, 0, 0, 0, 4608, 4624, 1, 0, 0, 0, 4609, 4610, 5, 30, 0, 0, 4610, 4612, 3, 828, 414, 0, 4611, 4613, 3, 506, 253, 0, 4612, 4611, 1, 0, 0, 0, 4612, 4613, 1, 0, 0, 0, 4613, 4624, 1, 0, 0, 0, 4614, 4615, 5, 31, 0, 0, 4615, 4617, 3, 828, 414, 0, 4616, 4618, 3, 506, 253, 0, 4617, 4616, 1, 0, 0, 0, 4617, 4618, 1, 0, 0, 0, 4618, 4624, 1, 0, 0, 0, 4619, 4620, 5, 27, 0, 0, 4620, 4624, 3, 502, 251, 0, 4621, 4622, 5, 196, 0, 0, 4622, 4624, 5, 570, 0, 0, 4623, 4573, 1, 0, 0, 0, 4623, 4576, 1, 0, 0, 0, 4623, 4577, 1, 0, 0, 0, 4623, 4609, 1, 0, 0, 0, 4623, 4614, 1, 0, 0, 0, 4623, 4619, 1, 0, 0, 0, 4623, 4621, 1, 0, 0, 0, 4624, 501, 1, 0, 0, 0, 4625, 4630, 3, 828, 414, 0, 4626, 4627, 5, 545, 0, 0, 4627, 4629, 3, 828, 414, 0, 4628, 4626, 1, 0, 0, 0, 4629, 4632, 1, 0, 0, 0, 4630, 4628, 1, 0, 0, 0, 4630, 4631, 1, 0, 0, 0, 4631, 503, 1, 0, 0, 0, 4632, 4630, 1, 0, 0, 0, 4633, 4635, 5, 248, 0, 0, 4634, 4636, 5, 250, 0, 0, 4635, 4634, 1, 0, 0, 0, 4635, 4636, 1, 0, 0, 0, 4636, 4674, 1, 0, 0, 0, 4637, 4639, 5, 249, 0, 0, 4638, 4640, 5, 250, 0, 0, 4639, 4638, 1, 0, 0, 0, 4639, 4640, 1, 0, 0, 0, 4640, 4674, 1, 0, 0, 0, 4641, 4674, 5, 250, 0, 0, 4642, 4674, 5, 253, 0, 0, 4643, 4645, 5, 101, 0, 0, 4644, 4646, 5, 250, 0, 0, 4645, 4644, 1, 0, 0, 0, 4645, 4646, 1, 0, 0, 0, 4646, 4674, 1, 0, 0, 0, 4647, 4648, 5, 254, 0, 0, 4648, 4651, 3, 828, 414, 0, 4649, 4650, 5, 82, 0, 0, 4650, 4652, 3, 504, 252, 0, 4651, 4649, 1, 0, 0, 0, 4651, 4652, 1, 0, 0, 0, 4652, 4674, 1, 0, 0, 0, 4653, 4654, 5, 251, 0, 0, 4654, 4656, 3, 828, 414, 0, 4655, 4657, 3, 506, 253, 0, 4656, 4655, 1, 0, 0, 0, 4656, 4657, 1, 0, 0, 0, 4657, 4674, 1, 0, 0, 0, 4658, 4659, 5, 30, 0, 0, 4659, 4661, 3, 828, 414, 0, 4660, 4662, 3, 506, 253, 0, 4661, 4660, 1, 0, 0, 0, 4661, 4662, 1, 0, 0, 0, 4662, 4674, 1, 0, 0, 0, 4663, 4664, 5, 31, 0, 0, 4664, 4666, 3, 828, 414, 0, 4665, 4667, 3, 506, 253, 0, 4666, 4665, 1, 0, 0, 0, 4666, 4667, 1, 0, 0, 0, 4667, 4674, 1, 0, 0, 0, 4668, 4669, 5, 257, 0, 0, 4669, 4674, 5, 566, 0, 0, 4670, 4674, 5, 258, 0, 0, 4671, 4672, 5, 535, 0, 0, 4672, 4674, 5, 566, 0, 0, 4673, 4633, 1, 0, 0, 0, 4673, 4637, 1, 0, 0, 0, 4673, 4641, 1, 0, 0, 0, 4673, 4642, 1, 0, 0, 0, 4673, 4643, 1, 0, 0, 0, 4673, 4647, 1, 0, 0, 0, 4673, 4653, 1, 0, 0, 0, 4673, 4658, 1, 0, 0, 0, 4673, 4663, 1, 0, 0, 0, 4673, 4668, 1, 0, 0, 0, 4673, 4670, 1, 0, 0, 0, 4673, 4671, 1, 0, 0, 0, 4674, 505, 1, 0, 0, 0, 4675, 4676, 5, 552, 0, 0, 4676, 4681, 3, 508, 254, 0, 4677, 4678, 5, 550, 0, 0, 4678, 4680, 3, 508, 254, 0, 4679, 4677, 1, 0, 0, 0, 4680, 4683, 1, 0, 0, 0, 4681, 4679, 1, 0, 0, 0, 4681, 4682, 1, 0, 0, 0, 4682, 4684, 1, 0, 0, 0, 4683, 4681, 1, 0, 0, 0, 4684, 4685, 5, 553, 0, 0, 4685, 507, 1, 0, 0, 0, 4686, 4687, 5, 570, 0, 0, 4687, 4688, 5, 558, 0, 0, 4688, 4693, 3, 784, 392, 0, 4689, 4690, 5, 569, 0, 0, 4690, 4691, 5, 539, 0, 0, 4691, 4693, 3, 784, 392, 0, 4692, 4686, 1, 0, 0, 0, 4692, 4689, 1, 0, 0, 0, 4693, 509, 1, 0, 0, 0, 4694, 4698, 5, 570, 0, 0, 4695, 4698, 5, 572, 0, 0, 4696, 4698, 3, 850, 425, 0, 4697, 4694, 1, 0, 0, 0, 4697, 4695, 1, 0, 0, 0, 4697, 4696, 1, 0, 0, 0, 4698, 4707, 1, 0, 0, 0, 4699, 4703, 5, 545, 0, 0, 4700, 4704, 5, 570, 0, 0, 4701, 4704, 5, 572, 0, 0, 4702, 4704, 3, 850, 425, 0, 4703, 4700, 1, 0, 0, 0, 4703, 4701, 1, 0, 0, 0, 4703, 4702, 1, 0, 0, 0, 4704, 4706, 1, 0, 0, 0, 4705, 4699, 1, 0, 0, 0, 4706, 4709, 1, 0, 0, 0, 4707, 4705, 1, 0, 0, 0, 4707, 4708, 1, 0, 0, 0, 4708, 511, 1, 0, 0, 0, 4709, 4707, 1, 0, 0, 0, 4710, 4721, 5, 566, 0, 0, 4711, 4721, 3, 510, 255, 0, 4712, 4718, 5, 569, 0, 0, 4713, 4716, 5, 551, 0, 0, 4714, 4717, 5, 570, 0, 0, 4715, 4717, 3, 850, 425, 0, 4716, 4714, 1, 0, 0, 0, 4716, 4715, 1, 0, 0, 0, 4717, 4719, 1, 0, 0, 0, 4718, 4713, 1, 0, 0, 0, 4718, 4719, 1, 0, 0, 0, 4719, 4721, 1, 0, 0, 0, 4720, 4710, 1, 0, 0, 0, 4720, 4711, 1, 0, 0, 0, 4720, 4712, 1, 0, 0, 0, 4721, 513, 1, 0, 0, 0, 4722, 4723, 5, 556, 0, 0, 4723, 4728, 3, 516, 258, 0, 4724, 4725, 5, 550, 0, 0, 4725, 4727, 3, 516, 258, 0, 4726, 4724, 1, 0, 0, 0, 4727, 4730, 1, 0, 0, 0, 4728, 4726, 1, 0, 0, 0, 4728, 4729, 1, 0, 0, 0, 4729, 4731, 1, 0, 0, 0, 4730, 4728, 1, 0, 0, 0, 4731, 4732, 5, 557, 0, 0, 4732, 515, 1, 0, 0, 0, 4733, 4734, 5, 554, 0, 0, 4734, 4735, 5, 568, 0, 0, 4735, 4736, 5, 555, 0, 0, 4736, 4737, 5, 539, 0, 0, 4737, 4738, 3, 784, 392, 0, 4738, 517, 1, 0, 0, 0, 4739, 4740, 7, 28, 0, 0, 4740, 519, 1, 0, 0, 0, 4741, 4742, 7, 29, 0, 0, 4742, 521, 1, 0, 0, 0, 4743, 4744, 7, 30, 0, 0, 4744, 523, 1, 0, 0, 0, 4745, 4746, 7, 31, 0, 0, 4746, 525, 1, 0, 0, 0, 4747, 4771, 5, 566, 0, 0, 4748, 4771, 5, 568, 0, 0, 4749, 4771, 3, 836, 418, 0, 4750, 4771, 3, 828, 414, 0, 4751, 4771, 5, 570, 0, 0, 4752, 4771, 5, 269, 0, 0, 4753, 4771, 5, 270, 0, 0, 4754, 4771, 5, 271, 0, 0, 4755, 4771, 5, 272, 0, 0, 4756, 4771, 5, 273, 0, 0, 4757, 4771, 5, 274, 0, 0, 4758, 4767, 5, 556, 0, 0, 4759, 4764, 3, 784, 392, 0, 4760, 4761, 5, 550, 0, 0, 4761, 4763, 3, 784, 392, 0, 4762, 4760, 1, 0, 0, 0, 4763, 4766, 1, 0, 0, 0, 4764, 4762, 1, 0, 0, 0, 4764, 4765, 1, 0, 0, 0, 4765, 4768, 1, 0, 0, 0, 4766, 4764, 1, 0, 0, 0, 4767, 4759, 1, 0, 0, 0, 4767, 4768, 1, 0, 0, 0, 4768, 4769, 1, 0, 0, 0, 4769, 4771, 5, 557, 0, 0, 4770, 4747, 1, 0, 0, 0, 4770, 4748, 1, 0, 0, 0, 4770, 4749, 1, 0, 0, 0, 4770, 4750, 1, 0, 0, 0, 4770, 4751, 1, 0, 0, 0, 4770, 4752, 1, 0, 0, 0, 4770, 4753, 1, 0, 0, 0, 4770, 4754, 1, 0, 0, 0, 4770, 4755, 1, 0, 0, 0, 4770, 4756, 1, 0, 0, 0, 4770, 4757, 1, 0, 0, 0, 4770, 4758, 1, 0, 0, 0, 4771, 527, 1, 0, 0, 0, 4772, 4773, 5, 556, 0, 0, 4773, 4778, 3, 530, 265, 0, 4774, 4775, 5, 550, 0, 0, 4775, 4777, 3, 530, 265, 0, 4776, 4774, 1, 0, 0, 0, 4777, 4780, 1, 0, 0, 0, 4778, 4776, 1, 0, 0, 0, 4778, 4779, 1, 0, 0, 0, 4779, 4781, 1, 0, 0, 0, 4780, 4778, 1, 0, 0, 0, 4781, 4782, 5, 557, 0, 0, 4782, 4786, 1, 0, 0, 0, 4783, 4784, 5, 556, 0, 0, 4784, 4786, 5, 557, 0, 0, 4785, 4772, 1, 0, 0, 0, 4785, 4783, 1, 0, 0, 0, 4786, 529, 1, 0, 0, 0, 4787, 4788, 5, 566, 0, 0, 4788, 4789, 5, 558, 0, 0, 4789, 4797, 5, 566, 0, 0, 4790, 4791, 5, 566, 0, 0, 4791, 4792, 5, 558, 0, 0, 4792, 4797, 5, 94, 0, 0, 4793, 4794, 5, 566, 0, 0, 4794, 4795, 5, 558, 0, 0, 4795, 4797, 5, 515, 0, 0, 4796, 4787, 1, 0, 0, 0, 4796, 4790, 1, 0, 0, 0, 4796, 4793, 1, 0, 0, 0, 4797, 531, 1, 0, 0, 0, 4798, 4799, 5, 554, 0, 0, 4799, 4800, 3, 484, 242, 0, 4800, 4801, 5, 555, 0, 0, 4801, 533, 1, 0, 0, 0, 4802, 4803, 5, 36, 0, 0, 4803, 4805, 3, 828, 414, 0, 4804, 4806, 3, 536, 268, 0, 4805, 4804, 1, 0, 0, 0, 4805, 4806, 1, 0, 0, 0, 4806, 4807, 1, 0, 0, 0, 4807, 4811, 5, 97, 0, 0, 4808, 4810, 3, 540, 270, 0, 4809, 4808, 1, 0, 0, 0, 4810, 4813, 1, 0, 0, 0, 4811, 4809, 1, 0, 0, 0, 4811, 4812, 1, 0, 0, 0, 4812, 4814, 1, 0, 0, 0, 4813, 4811, 1, 0, 0, 0, 4814, 4815, 5, 84, 0, 0, 4815, 535, 1, 0, 0, 0, 4816, 4818, 3, 538, 269, 0, 4817, 4816, 1, 0, 0, 0, 4818, 4819, 1, 0, 0, 0, 4819, 4817, 1, 0, 0, 0, 4819, 4820, 1, 0, 0, 0, 4820, 537, 1, 0, 0, 0, 4821, 4822, 5, 429, 0, 0, 4822, 4823, 5, 566, 0, 0, 4823, 539, 1, 0, 0, 0, 4824, 4825, 5, 33, 0, 0, 4825, 4828, 3, 828, 414, 0, 4826, 4827, 5, 191, 0, 0, 4827, 4829, 5, 566, 0, 0, 4828, 4826, 1, 0, 0, 0, 4828, 4829, 1, 0, 0, 0, 4829, 541, 1, 0, 0, 0, 4830, 4831, 5, 373, 0, 0, 4831, 4832, 5, 372, 0, 0, 4832, 4834, 3, 828, 414, 0, 4833, 4835, 3, 544, 272, 0, 4834, 4833, 1, 0, 0, 0, 4835, 4836, 1, 0, 0, 0, 4836, 4834, 1, 0, 0, 0, 4836, 4837, 1, 0, 0, 0, 4837, 4846, 1, 0, 0, 0, 4838, 4842, 5, 97, 0, 0, 4839, 4841, 3, 546, 273, 0, 4840, 4839, 1, 0, 0, 0, 4841, 4844, 1, 0, 0, 0, 4842, 4840, 1, 0, 0, 0, 4842, 4843, 1, 0, 0, 0, 4843, 4845, 1, 0, 0, 0, 4844, 4842, 1, 0, 0, 0, 4845, 4847, 5, 84, 0, 0, 4846, 4838, 1, 0, 0, 0, 4846, 4847, 1, 0, 0, 0, 4847, 543, 1, 0, 0, 0, 4848, 4849, 5, 443, 0, 0, 4849, 4876, 5, 566, 0, 0, 4850, 4851, 5, 372, 0, 0, 4851, 4855, 5, 276, 0, 0, 4852, 4856, 5, 566, 0, 0, 4853, 4854, 5, 559, 0, 0, 4854, 4856, 3, 828, 414, 0, 4855, 4852, 1, 0, 0, 0, 4855, 4853, 1, 0, 0, 0, 4856, 4876, 1, 0, 0, 0, 4857, 4858, 5, 63, 0, 0, 4858, 4876, 5, 566, 0, 0, 4859, 4860, 5, 64, 0, 0, 4860, 4876, 5, 568, 0, 0, 4861, 4862, 5, 373, 0, 0, 4862, 4876, 5, 566, 0, 0, 4863, 4867, 5, 370, 0, 0, 4864, 4868, 5, 566, 0, 0, 4865, 4866, 5, 559, 0, 0, 4866, 4868, 3, 828, 414, 0, 4867, 4864, 1, 0, 0, 0, 4867, 4865, 1, 0, 0, 0, 4868, 4876, 1, 0, 0, 0, 4869, 4873, 5, 371, 0, 0, 4870, 4874, 5, 566, 0, 0, 4871, 4872, 5, 559, 0, 0, 4872, 4874, 3, 828, 414, 0, 4873, 4870, 1, 0, 0, 0, 4873, 4871, 1, 0, 0, 0, 4874, 4876, 1, 0, 0, 0, 4875, 4848, 1, 0, 0, 0, 4875, 4850, 1, 0, 0, 0, 4875, 4857, 1, 0, 0, 0, 4875, 4859, 1, 0, 0, 0, 4875, 4861, 1, 0, 0, 0, 4875, 4863, 1, 0, 0, 0, 4875, 4869, 1, 0, 0, 0, 4876, 545, 1, 0, 0, 0, 4877, 4878, 5, 374, 0, 0, 4878, 4879, 3, 830, 415, 0, 4879, 4880, 5, 458, 0, 0, 4880, 4892, 7, 16, 0, 0, 4881, 4882, 5, 391, 0, 0, 4882, 4883, 3, 830, 415, 0, 4883, 4884, 5, 558, 0, 0, 4884, 4888, 3, 126, 63, 0, 4885, 4886, 5, 313, 0, 0, 4886, 4889, 5, 566, 0, 0, 4887, 4889, 5, 306, 0, 0, 4888, 4885, 1, 0, 0, 0, 4888, 4887, 1, 0, 0, 0, 4888, 4889, 1, 0, 0, 0, 4889, 4891, 1, 0, 0, 0, 4890, 4881, 1, 0, 0, 0, 4891, 4894, 1, 0, 0, 0, 4892, 4890, 1, 0, 0, 0, 4892, 4893, 1, 0, 0, 0, 4893, 4911, 1, 0, 0, 0, 4894, 4892, 1, 0, 0, 0, 4895, 4896, 5, 78, 0, 0, 4896, 4909, 3, 828, 414, 0, 4897, 4898, 5, 375, 0, 0, 4898, 4899, 5, 552, 0, 0, 4899, 4904, 3, 548, 274, 0, 4900, 4901, 5, 550, 0, 0, 4901, 4903, 3, 548, 274, 0, 4902, 4900, 1, 0, 0, 0, 4903, 4906, 1, 0, 0, 0, 4904, 4902, 1, 0, 0, 0, 4904, 4905, 1, 0, 0, 0, 4905, 4907, 1, 0, 0, 0, 4906, 4904, 1, 0, 0, 0, 4907, 4908, 5, 553, 0, 0, 4908, 4910, 1, 0, 0, 0, 4909, 4897, 1, 0, 0, 0, 4909, 4910, 1, 0, 0, 0, 4910, 4912, 1, 0, 0, 0, 4911, 4895, 1, 0, 0, 0, 4911, 4912, 1, 0, 0, 0, 4912, 4913, 1, 0, 0, 0, 4913, 4914, 5, 549, 0, 0, 4914, 547, 1, 0, 0, 0, 4915, 4916, 3, 830, 415, 0, 4916, 4917, 5, 77, 0, 0, 4917, 4918, 3, 830, 415, 0, 4918, 549, 1, 0, 0, 0, 4919, 4920, 5, 37, 0, 0, 4920, 4921, 3, 828, 414, 0, 4921, 4922, 5, 443, 0, 0, 4922, 4923, 3, 126, 63, 0, 4923, 4924, 5, 313, 0, 0, 4924, 4926, 3, 832, 416, 0, 4925, 4927, 3, 552, 276, 0, 4926, 4925, 1, 0, 0, 0, 4926, 4927, 1, 0, 0, 0, 4927, 551, 1, 0, 0, 0, 4928, 4930, 3, 554, 277, 0, 4929, 4928, 1, 0, 0, 0, 4930, 4931, 1, 0, 0, 0, 4931, 4929, 1, 0, 0, 0, 4931, 4932, 1, 0, 0, 0, 4932, 553, 1, 0, 0, 0, 4933, 4934, 5, 429, 0, 0, 4934, 4941, 5, 566, 0, 0, 4935, 4936, 5, 222, 0, 0, 4936, 4941, 5, 566, 0, 0, 4937, 4938, 5, 390, 0, 0, 4938, 4939, 5, 450, 0, 0, 4939, 4941, 5, 359, 0, 0, 4940, 4933, 1, 0, 0, 0, 4940, 4935, 1, 0, 0, 0, 4940, 4937, 1, 0, 0, 0, 4941, 555, 1, 0, 0, 0, 4942, 4943, 5, 469, 0, 0, 4943, 4952, 5, 566, 0, 0, 4944, 4949, 3, 670, 335, 0, 4945, 4946, 5, 550, 0, 0, 4946, 4948, 3, 670, 335, 0, 4947, 4945, 1, 0, 0, 0, 4948, 4951, 1, 0, 0, 0, 4949, 4947, 1, 0, 0, 0, 4949, 4950, 1, 0, 0, 0, 4950, 4953, 1, 0, 0, 0, 4951, 4949, 1, 0, 0, 0, 4952, 4944, 1, 0, 0, 0, 4952, 4953, 1, 0, 0, 0, 4953, 557, 1, 0, 0, 0, 4954, 4955, 5, 329, 0, 0, 4955, 4956, 5, 359, 0, 0, 4956, 4957, 3, 828, 414, 0, 4957, 4958, 5, 552, 0, 0, 4958, 4963, 3, 560, 280, 0, 4959, 4960, 5, 550, 0, 0, 4960, 4962, 3, 560, 280, 0, 4961, 4959, 1, 0, 0, 0, 4962, 4965, 1, 0, 0, 0, 4963, 4961, 1, 0, 0, 0, 4963, 4964, 1, 0, 0, 0, 4964, 4966, 1, 0, 0, 0, 4965, 4963, 1, 0, 0, 0, 4966, 4967, 5, 553, 0, 0, 4967, 4971, 5, 554, 0, 0, 4968, 4970, 3, 562, 281, 0, 4969, 4968, 1, 0, 0, 0, 4970, 4973, 1, 0, 0, 0, 4971, 4969, 1, 0, 0, 0, 4971, 4972, 1, 0, 0, 0, 4972, 4974, 1, 0, 0, 0, 4973, 4971, 1, 0, 0, 0, 4974, 4975, 5, 555, 0, 0, 4975, 559, 1, 0, 0, 0, 4976, 4977, 3, 830, 415, 0, 4977, 4978, 5, 558, 0, 0, 4978, 4979, 5, 566, 0, 0, 4979, 5008, 1, 0, 0, 0, 4980, 4981, 3, 830, 415, 0, 4981, 4982, 5, 558, 0, 0, 4982, 4983, 5, 569, 0, 0, 4983, 5008, 1, 0, 0, 0, 4984, 4985, 3, 830, 415, 0, 4985, 4986, 5, 558, 0, 0, 4986, 4987, 5, 559, 0, 0, 4987, 4988, 3, 828, 414, 0, 4988, 5008, 1, 0, 0, 0, 4989, 4990, 3, 830, 415, 0, 4990, 4991, 5, 558, 0, 0, 4991, 4992, 5, 448, 0, 0, 4992, 5008, 1, 0, 0, 0, 4993, 4994, 3, 830, 415, 0, 4994, 4995, 5, 558, 0, 0, 4995, 4996, 5, 336, 0, 0, 4996, 4997, 5, 552, 0, 0, 4997, 5002, 3, 560, 280, 0, 4998, 4999, 5, 550, 0, 0, 4999, 5001, 3, 560, 280, 0, 5000, 4998, 1, 0, 0, 0, 5001, 5004, 1, 0, 0, 0, 5002, 5000, 1, 0, 0, 0, 5002, 5003, 1, 0, 0, 0, 5003, 5005, 1, 0, 0, 0, 5004, 5002, 1, 0, 0, 0, 5005, 5006, 5, 553, 0, 0, 5006, 5008, 1, 0, 0, 0, 5007, 4976, 1, 0, 0, 0, 5007, 4980, 1, 0, 0, 0, 5007, 4984, 1, 0, 0, 0, 5007, 4989, 1, 0, 0, 0, 5007, 4993, 1, 0, 0, 0, 5008, 561, 1, 0, 0, 0, 5009, 5011, 3, 838, 419, 0, 5010, 5009, 1, 0, 0, 0, 5010, 5011, 1, 0, 0, 0, 5011, 5012, 1, 0, 0, 0, 5012, 5015, 5, 339, 0, 0, 5013, 5016, 3, 830, 415, 0, 5014, 5016, 5, 566, 0, 0, 5015, 5013, 1, 0, 0, 0, 5015, 5014, 1, 0, 0, 0, 5016, 5017, 1, 0, 0, 0, 5017, 5018, 5, 554, 0, 0, 5018, 5023, 3, 564, 282, 0, 5019, 5020, 5, 550, 0, 0, 5020, 5022, 3, 564, 282, 0, 5021, 5019, 1, 0, 0, 0, 5022, 5025, 1, 0, 0, 0, 5023, 5021, 1, 0, 0, 0, 5023, 5024, 1, 0, 0, 0, 5024, 5026, 1, 0, 0, 0, 5025, 5023, 1, 0, 0, 0, 5026, 5027, 5, 555, 0, 0, 5027, 563, 1, 0, 0, 0, 5028, 5029, 3, 830, 415, 0, 5029, 5030, 5, 558, 0, 0, 5030, 5031, 3, 572, 286, 0, 5031, 5096, 1, 0, 0, 0, 5032, 5033, 3, 830, 415, 0, 5033, 5034, 5, 558, 0, 0, 5034, 5035, 5, 566, 0, 0, 5035, 5096, 1, 0, 0, 0, 5036, 5037, 3, 830, 415, 0, 5037, 5038, 5, 558, 0, 0, 5038, 5039, 5, 568, 0, 0, 5039, 5096, 1, 0, 0, 0, 5040, 5041, 3, 830, 415, 0, 5041, 5042, 5, 558, 0, 0, 5042, 5043, 5, 448, 0, 0, 5043, 5096, 1, 0, 0, 0, 5044, 5045, 3, 830, 415, 0, 5045, 5046, 5, 558, 0, 0, 5046, 5047, 5, 552, 0, 0, 5047, 5052, 3, 566, 283, 0, 5048, 5049, 5, 550, 0, 0, 5049, 5051, 3, 566, 283, 0, 5050, 5048, 1, 0, 0, 0, 5051, 5054, 1, 0, 0, 0, 5052, 5050, 1, 0, 0, 0, 5052, 5053, 1, 0, 0, 0, 5053, 5055, 1, 0, 0, 0, 5054, 5052, 1, 0, 0, 0, 5055, 5056, 5, 553, 0, 0, 5056, 5096, 1, 0, 0, 0, 5057, 5058, 3, 830, 415, 0, 5058, 5059, 5, 558, 0, 0, 5059, 5060, 5, 552, 0, 0, 5060, 5065, 3, 568, 284, 0, 5061, 5062, 5, 550, 0, 0, 5062, 5064, 3, 568, 284, 0, 5063, 5061, 1, 0, 0, 0, 5064, 5067, 1, 0, 0, 0, 5065, 5063, 1, 0, 0, 0, 5065, 5066, 1, 0, 0, 0, 5066, 5068, 1, 0, 0, 0, 5067, 5065, 1, 0, 0, 0, 5068, 5069, 5, 553, 0, 0, 5069, 5096, 1, 0, 0, 0, 5070, 5071, 3, 830, 415, 0, 5071, 5072, 5, 558, 0, 0, 5072, 5073, 7, 32, 0, 0, 5073, 5074, 7, 33, 0, 0, 5074, 5075, 5, 569, 0, 0, 5075, 5096, 1, 0, 0, 0, 5076, 5077, 3, 830, 415, 0, 5077, 5078, 5, 558, 0, 0, 5078, 5079, 5, 265, 0, 0, 5079, 5080, 5, 566, 0, 0, 5080, 5096, 1, 0, 0, 0, 5081, 5082, 3, 830, 415, 0, 5082, 5083, 5, 558, 0, 0, 5083, 5084, 5, 376, 0, 0, 5084, 5093, 3, 828, 414, 0, 5085, 5089, 5, 554, 0, 0, 5086, 5088, 3, 570, 285, 0, 5087, 5086, 1, 0, 0, 0, 5088, 5091, 1, 0, 0, 0, 5089, 5087, 1, 0, 0, 0, 5089, 5090, 1, 0, 0, 0, 5090, 5092, 1, 0, 0, 0, 5091, 5089, 1, 0, 0, 0, 5092, 5094, 5, 555, 0, 0, 5093, 5085, 1, 0, 0, 0, 5093, 5094, 1, 0, 0, 0, 5094, 5096, 1, 0, 0, 0, 5095, 5028, 1, 0, 0, 0, 5095, 5032, 1, 0, 0, 0, 5095, 5036, 1, 0, 0, 0, 5095, 5040, 1, 0, 0, 0, 5095, 5044, 1, 0, 0, 0, 5095, 5057, 1, 0, 0, 0, 5095, 5070, 1, 0, 0, 0, 5095, 5076, 1, 0, 0, 0, 5095, 5081, 1, 0, 0, 0, 5096, 565, 1, 0, 0, 0, 5097, 5098, 5, 569, 0, 0, 5098, 5099, 5, 558, 0, 0, 5099, 5100, 3, 126, 63, 0, 5100, 567, 1, 0, 0, 0, 5101, 5102, 5, 566, 0, 0, 5102, 5108, 5, 539, 0, 0, 5103, 5109, 5, 566, 0, 0, 5104, 5109, 5, 569, 0, 0, 5105, 5106, 5, 566, 0, 0, 5106, 5107, 5, 542, 0, 0, 5107, 5109, 5, 569, 0, 0, 5108, 5103, 1, 0, 0, 0, 5108, 5104, 1, 0, 0, 0, 5108, 5105, 1, 0, 0, 0, 5109, 569, 1, 0, 0, 0, 5110, 5111, 3, 830, 415, 0, 5111, 5112, 5, 539, 0, 0, 5112, 5114, 3, 830, 415, 0, 5113, 5115, 5, 550, 0, 0, 5114, 5113, 1, 0, 0, 0, 5114, 5115, 1, 0, 0, 0, 5115, 5138, 1, 0, 0, 0, 5116, 5118, 5, 17, 0, 0, 5117, 5116, 1, 0, 0, 0, 5117, 5118, 1, 0, 0, 0, 5118, 5119, 1, 0, 0, 0, 5119, 5120, 3, 828, 414, 0, 5120, 5121, 5, 545, 0, 0, 5121, 5122, 3, 828, 414, 0, 5122, 5123, 5, 539, 0, 0, 5123, 5132, 3, 830, 415, 0, 5124, 5128, 5, 554, 0, 0, 5125, 5127, 3, 570, 285, 0, 5126, 5125, 1, 0, 0, 0, 5127, 5130, 1, 0, 0, 0, 5128, 5126, 1, 0, 0, 0, 5128, 5129, 1, 0, 0, 0, 5129, 5131, 1, 0, 0, 0, 5130, 5128, 1, 0, 0, 0, 5131, 5133, 5, 555, 0, 0, 5132, 5124, 1, 0, 0, 0, 5132, 5133, 1, 0, 0, 0, 5133, 5135, 1, 0, 0, 0, 5134, 5136, 5, 550, 0, 0, 5135, 5134, 1, 0, 0, 0, 5135, 5136, 1, 0, 0, 0, 5136, 5138, 1, 0, 0, 0, 5137, 5110, 1, 0, 0, 0, 5137, 5117, 1, 0, 0, 0, 5138, 571, 1, 0, 0, 0, 5139, 5140, 7, 20, 0, 0, 5140, 573, 1, 0, 0, 0, 5141, 5142, 5, 362, 0, 0, 5142, 5143, 5, 329, 0, 0, 5143, 5144, 5, 330, 0, 0, 5144, 5145, 3, 828, 414, 0, 5145, 5146, 5, 552, 0, 0, 5146, 5151, 3, 576, 288, 0, 5147, 5148, 5, 550, 0, 0, 5148, 5150, 3, 576, 288, 0, 5149, 5147, 1, 0, 0, 0, 5150, 5153, 1, 0, 0, 0, 5151, 5149, 1, 0, 0, 0, 5151, 5152, 1, 0, 0, 0, 5152, 5154, 1, 0, 0, 0, 5153, 5151, 1, 0, 0, 0, 5154, 5155, 5, 553, 0, 0, 5155, 5159, 5, 554, 0, 0, 5156, 5158, 3, 578, 289, 0, 5157, 5156, 1, 0, 0, 0, 5158, 5161, 1, 0, 0, 0, 5159, 5157, 1, 0, 0, 0, 5159, 5160, 1, 0, 0, 0, 5160, 5162, 1, 0, 0, 0, 5161, 5159, 1, 0, 0, 0, 5162, 5163, 5, 555, 0, 0, 5163, 575, 1, 0, 0, 0, 5164, 5165, 3, 830, 415, 0, 5165, 5166, 5, 558, 0, 0, 5166, 5167, 5, 566, 0, 0, 5167, 577, 1, 0, 0, 0, 5168, 5169, 5, 348, 0, 0, 5169, 5170, 5, 566, 0, 0, 5170, 5174, 5, 554, 0, 0, 5171, 5173, 3, 580, 290, 0, 5172, 5171, 1, 0, 0, 0, 5173, 5176, 1, 0, 0, 0, 5174, 5172, 1, 0, 0, 0, 5174, 5175, 1, 0, 0, 0, 5175, 5177, 1, 0, 0, 0, 5176, 5174, 1, 0, 0, 0, 5177, 5178, 5, 555, 0, 0, 5178, 579, 1, 0, 0, 0, 5179, 5181, 3, 572, 286, 0, 5180, 5182, 3, 582, 291, 0, 5181, 5180, 1, 0, 0, 0, 5181, 5182, 1, 0, 0, 0, 5182, 5183, 1, 0, 0, 0, 5183, 5184, 5, 30, 0, 0, 5184, 5186, 3, 828, 414, 0, 5185, 5187, 5, 347, 0, 0, 5186, 5185, 1, 0, 0, 0, 5186, 5187, 1, 0, 0, 0, 5187, 5191, 1, 0, 0, 0, 5188, 5189, 5, 378, 0, 0, 5189, 5190, 5, 376, 0, 0, 5190, 5192, 3, 828, 414, 0, 5191, 5188, 1, 0, 0, 0, 5191, 5192, 1, 0, 0, 0, 5192, 5196, 1, 0, 0, 0, 5193, 5194, 5, 384, 0, 0, 5194, 5195, 5, 376, 0, 0, 5195, 5197, 3, 828, 414, 0, 5196, 5193, 1, 0, 0, 0, 5196, 5197, 1, 0, 0, 0, 5197, 5200, 1, 0, 0, 0, 5198, 5199, 5, 102, 0, 0, 5199, 5201, 3, 830, 415, 0, 5200, 5198, 1, 0, 0, 0, 5200, 5201, 1, 0, 0, 0, 5201, 5203, 1, 0, 0, 0, 5202, 5204, 5, 549, 0, 0, 5203, 5202, 1, 0, 0, 0, 5203, 5204, 1, 0, 0, 0, 5204, 581, 1, 0, 0, 0, 5205, 5206, 7, 34, 0, 0, 5206, 583, 1, 0, 0, 0, 5207, 5208, 5, 41, 0, 0, 5208, 5209, 5, 570, 0, 0, 5209, 5210, 5, 94, 0, 0, 5210, 5211, 3, 828, 414, 0, 5211, 5212, 5, 552, 0, 0, 5212, 5213, 3, 134, 67, 0, 5213, 5214, 5, 553, 0, 0, 5214, 585, 1, 0, 0, 0, 5215, 5216, 5, 332, 0, 0, 5216, 5217, 5, 359, 0, 0, 5217, 5218, 3, 828, 414, 0, 5218, 5219, 5, 552, 0, 0, 5219, 5224, 3, 592, 296, 0, 5220, 5221, 5, 550, 0, 0, 5221, 5223, 3, 592, 296, 0, 5222, 5220, 1, 0, 0, 0, 5223, 5226, 1, 0, 0, 0, 5224, 5222, 1, 0, 0, 0, 5224, 5225, 1, 0, 0, 0, 5225, 5227, 1, 0, 0, 0, 5226, 5224, 1, 0, 0, 0, 5227, 5229, 5, 553, 0, 0, 5228, 5230, 3, 614, 307, 0, 5229, 5228, 1, 0, 0, 0, 5229, 5230, 1, 0, 0, 0, 5230, 587, 1, 0, 0, 0, 5231, 5232, 5, 332, 0, 0, 5232, 5233, 5, 330, 0, 0, 5233, 5234, 3, 828, 414, 0, 5234, 5235, 5, 552, 0, 0, 5235, 5240, 3, 592, 296, 0, 5236, 5237, 5, 550, 0, 0, 5237, 5239, 3, 592, 296, 0, 5238, 5236, 1, 0, 0, 0, 5239, 5242, 1, 0, 0, 0, 5240, 5238, 1, 0, 0, 0, 5240, 5241, 1, 0, 0, 0, 5241, 5243, 1, 0, 0, 0, 5242, 5240, 1, 0, 0, 0, 5243, 5245, 5, 553, 0, 0, 5244, 5246, 3, 596, 298, 0, 5245, 5244, 1, 0, 0, 0, 5245, 5246, 1, 0, 0, 0, 5246, 5255, 1, 0, 0, 0, 5247, 5251, 5, 554, 0, 0, 5248, 5250, 3, 600, 300, 0, 5249, 5248, 1, 0, 0, 0, 5250, 5253, 1, 0, 0, 0, 5251, 5249, 1, 0, 0, 0, 5251, 5252, 1, 0, 0, 0, 5252, 5254, 1, 0, 0, 0, 5253, 5251, 1, 0, 0, 0, 5254, 5256, 5, 555, 0, 0, 5255, 5247, 1, 0, 0, 0, 5255, 5256, 1, 0, 0, 0, 5256, 589, 1, 0, 0, 0, 5257, 5269, 5, 566, 0, 0, 5258, 5269, 5, 568, 0, 0, 5259, 5269, 5, 314, 0, 0, 5260, 5269, 5, 315, 0, 0, 5261, 5263, 5, 30, 0, 0, 5262, 5264, 3, 828, 414, 0, 5263, 5262, 1, 0, 0, 0, 5263, 5264, 1, 0, 0, 0, 5264, 5269, 1, 0, 0, 0, 5265, 5266, 5, 559, 0, 0, 5266, 5269, 3, 828, 414, 0, 5267, 5269, 3, 828, 414, 0, 5268, 5257, 1, 0, 0, 0, 5268, 5258, 1, 0, 0, 0, 5268, 5259, 1, 0, 0, 0, 5268, 5260, 1, 0, 0, 0, 5268, 5261, 1, 0, 0, 0, 5268, 5265, 1, 0, 0, 0, 5268, 5267, 1, 0, 0, 0, 5269, 591, 1, 0, 0, 0, 5270, 5271, 3, 830, 415, 0, 5271, 5272, 5, 558, 0, 0, 5272, 5273, 3, 590, 295, 0, 5273, 593, 1, 0, 0, 0, 5274, 5275, 3, 830, 415, 0, 5275, 5276, 5, 539, 0, 0, 5276, 5277, 3, 590, 295, 0, 5277, 595, 1, 0, 0, 0, 5278, 5279, 5, 335, 0, 0, 5279, 5284, 3, 598, 299, 0, 5280, 5281, 5, 550, 0, 0, 5281, 5283, 3, 598, 299, 0, 5282, 5280, 1, 0, 0, 0, 5283, 5286, 1, 0, 0, 0, 5284, 5282, 1, 0, 0, 0, 5284, 5285, 1, 0, 0, 0, 5285, 597, 1, 0, 0, 0, 5286, 5284, 1, 0, 0, 0, 5287, 5296, 5, 336, 0, 0, 5288, 5296, 5, 366, 0, 0, 5289, 5296, 5, 367, 0, 0, 5290, 5292, 5, 30, 0, 0, 5291, 5293, 3, 828, 414, 0, 5292, 5291, 1, 0, 0, 0, 5292, 5293, 1, 0, 0, 0, 5293, 5296, 1, 0, 0, 0, 5294, 5296, 5, 570, 0, 0, 5295, 5287, 1, 0, 0, 0, 5295, 5288, 1, 0, 0, 0, 5295, 5289, 1, 0, 0, 0, 5295, 5290, 1, 0, 0, 0, 5295, 5294, 1, 0, 0, 0, 5296, 599, 1, 0, 0, 0, 5297, 5298, 5, 361, 0, 0, 5298, 5299, 5, 23, 0, 0, 5299, 5302, 3, 828, 414, 0, 5300, 5301, 5, 77, 0, 0, 5301, 5303, 5, 566, 0, 0, 5302, 5300, 1, 0, 0, 0, 5302, 5303, 1, 0, 0, 0, 5303, 5315, 1, 0, 0, 0, 5304, 5305, 5, 552, 0, 0, 5305, 5310, 3, 592, 296, 0, 5306, 5307, 5, 550, 0, 0, 5307, 5309, 3, 592, 296, 0, 5308, 5306, 1, 0, 0, 0, 5309, 5312, 1, 0, 0, 0, 5310, 5308, 1, 0, 0, 0, 5310, 5311, 1, 0, 0, 0, 5311, 5313, 1, 0, 0, 0, 5312, 5310, 1, 0, 0, 0, 5313, 5314, 5, 553, 0, 0, 5314, 5316, 1, 0, 0, 0, 5315, 5304, 1, 0, 0, 0, 5315, 5316, 1, 0, 0, 0, 5316, 5318, 1, 0, 0, 0, 5317, 5319, 3, 602, 301, 0, 5318, 5317, 1, 0, 0, 0, 5318, 5319, 1, 0, 0, 0, 5319, 5321, 1, 0, 0, 0, 5320, 5322, 5, 549, 0, 0, 5321, 5320, 1, 0, 0, 0, 5321, 5322, 1, 0, 0, 0, 5322, 601, 1, 0, 0, 0, 5323, 5324, 5, 363, 0, 0, 5324, 5334, 5, 552, 0, 0, 5325, 5335, 5, 544, 0, 0, 5326, 5331, 3, 604, 302, 0, 5327, 5328, 5, 550, 0, 0, 5328, 5330, 3, 604, 302, 0, 5329, 5327, 1, 0, 0, 0, 5330, 5333, 1, 0, 0, 0, 5331, 5329, 1, 0, 0, 0, 5331, 5332, 1, 0, 0, 0, 5332, 5335, 1, 0, 0, 0, 5333, 5331, 1, 0, 0, 0, 5334, 5325, 1, 0, 0, 0, 5334, 5326, 1, 0, 0, 0, 5335, 5336, 1, 0, 0, 0, 5336, 5337, 5, 553, 0, 0, 5337, 603, 1, 0, 0, 0, 5338, 5341, 5, 570, 0, 0, 5339, 5340, 5, 77, 0, 0, 5340, 5342, 5, 566, 0, 0, 5341, 5339, 1, 0, 0, 0, 5341, 5342, 1, 0, 0, 0, 5342, 5344, 1, 0, 0, 0, 5343, 5345, 3, 606, 303, 0, 5344, 5343, 1, 0, 0, 0, 5344, 5345, 1, 0, 0, 0, 5345, 605, 1, 0, 0, 0, 5346, 5347, 5, 552, 0, 0, 5347, 5352, 5, 570, 0, 0, 5348, 5349, 5, 550, 0, 0, 5349, 5351, 5, 570, 0, 0, 5350, 5348, 1, 0, 0, 0, 5351, 5354, 1, 0, 0, 0, 5352, 5350, 1, 0, 0, 0, 5352, 5353, 1, 0, 0, 0, 5353, 5355, 1, 0, 0, 0, 5354, 5352, 1, 0, 0, 0, 5355, 5356, 5, 553, 0, 0, 5356, 607, 1, 0, 0, 0, 5357, 5358, 5, 26, 0, 0, 5358, 5359, 5, 23, 0, 0, 5359, 5360, 3, 828, 414, 0, 5360, 5361, 5, 72, 0, 0, 5361, 5362, 5, 332, 0, 0, 5362, 5363, 5, 359, 0, 0, 5363, 5364, 3, 828, 414, 0, 5364, 5365, 5, 552, 0, 0, 5365, 5370, 3, 592, 296, 0, 5366, 5367, 5, 550, 0, 0, 5367, 5369, 3, 592, 296, 0, 5368, 5366, 1, 0, 0, 0, 5369, 5372, 1, 0, 0, 0, 5370, 5368, 1, 0, 0, 0, 5370, 5371, 1, 0, 0, 0, 5371, 5373, 1, 0, 0, 0, 5372, 5370, 1, 0, 0, 0, 5373, 5379, 5, 553, 0, 0, 5374, 5376, 5, 552, 0, 0, 5375, 5377, 3, 118, 59, 0, 5376, 5375, 1, 0, 0, 0, 5376, 5377, 1, 0, 0, 0, 5377, 5378, 1, 0, 0, 0, 5378, 5380, 5, 553, 0, 0, 5379, 5374, 1, 0, 0, 0, 5379, 5380, 1, 0, 0, 0, 5380, 609, 1, 0, 0, 0, 5381, 5382, 5, 26, 0, 0, 5382, 5383, 5, 401, 0, 0, 5383, 5384, 5, 72, 0, 0, 5384, 5390, 3, 828, 414, 0, 5385, 5388, 5, 381, 0, 0, 5386, 5389, 3, 828, 414, 0, 5387, 5389, 5, 570, 0, 0, 5388, 5386, 1, 0, 0, 0, 5388, 5387, 1, 0, 0, 0, 5389, 5391, 1, 0, 0, 0, 5390, 5385, 1, 0, 0, 0, 5390, 5391, 1, 0, 0, 0, 5391, 5404, 1, 0, 0, 0, 5392, 5393, 5, 401, 0, 0, 5393, 5394, 5, 552, 0, 0, 5394, 5399, 3, 830, 415, 0, 5395, 5396, 5, 550, 0, 0, 5396, 5398, 3, 830, 415, 0, 5397, 5395, 1, 0, 0, 0, 5398, 5401, 1, 0, 0, 0, 5399, 5397, 1, 0, 0, 0, 5399, 5400, 1, 0, 0, 0, 5400, 5402, 1, 0, 0, 0, 5401, 5399, 1, 0, 0, 0, 5402, 5403, 5, 553, 0, 0, 5403, 5405, 1, 0, 0, 0, 5404, 5392, 1, 0, 0, 0, 5404, 5405, 1, 0, 0, 0, 5405, 611, 1, 0, 0, 0, 5406, 5409, 5, 394, 0, 0, 5407, 5410, 3, 828, 414, 0, 5408, 5410, 5, 570, 0, 0, 5409, 5407, 1, 0, 0, 0, 5409, 5408, 1, 0, 0, 0, 5410, 5414, 1, 0, 0, 0, 5411, 5413, 3, 40, 20, 0, 5412, 5411, 1, 0, 0, 0, 5413, 5416, 1, 0, 0, 0, 5414, 5412, 1, 0, 0, 0, 5414, 5415, 1, 0, 0, 0, 5415, 613, 1, 0, 0, 0, 5416, 5414, 1, 0, 0, 0, 5417, 5418, 5, 393, 0, 0, 5418, 5419, 5, 552, 0, 0, 5419, 5424, 3, 616, 308, 0, 5420, 5421, 5, 550, 0, 0, 5421, 5423, 3, 616, 308, 0, 5422, 5420, 1, 0, 0, 0, 5423, 5426, 1, 0, 0, 0, 5424, 5422, 1, 0, 0, 0, 5424, 5425, 1, 0, 0, 0, 5425, 5427, 1, 0, 0, 0, 5426, 5424, 1, 0, 0, 0, 5427, 5428, 5, 553, 0, 0, 5428, 615, 1, 0, 0, 0, 5429, 5430, 5, 566, 0, 0, 5430, 5431, 5, 558, 0, 0, 5431, 5432, 3, 590, 295, 0, 5432, 617, 1, 0, 0, 0, 5433, 5434, 5, 464, 0, 0, 5434, 5435, 5, 465, 0, 0, 5435, 5436, 5, 330, 0, 0, 5436, 5437, 3, 828, 414, 0, 5437, 5438, 5, 552, 0, 0, 5438, 5443, 3, 592, 296, 0, 5439, 5440, 5, 550, 0, 0, 5440, 5442, 3, 592, 296, 0, 5441, 5439, 1, 0, 0, 0, 5442, 5445, 1, 0, 0, 0, 5443, 5441, 1, 0, 0, 0, 5443, 5444, 1, 0, 0, 0, 5444, 5446, 1, 0, 0, 0, 5445, 5443, 1, 0, 0, 0, 5446, 5447, 5, 553, 0, 0, 5447, 5449, 5, 554, 0, 0, 5448, 5450, 3, 620, 310, 0, 5449, 5448, 1, 0, 0, 0, 5450, 5451, 1, 0, 0, 0, 5451, 5449, 1, 0, 0, 0, 5451, 5452, 1, 0, 0, 0, 5452, 5453, 1, 0, 0, 0, 5453, 5454, 5, 555, 0, 0, 5454, 619, 1, 0, 0, 0, 5455, 5456, 5, 426, 0, 0, 5456, 5457, 5, 570, 0, 0, 5457, 5458, 5, 552, 0, 0, 5458, 5463, 3, 622, 311, 0, 5459, 5460, 5, 550, 0, 0, 5460, 5462, 3, 622, 311, 0, 5461, 5459, 1, 0, 0, 0, 5462, 5465, 1, 0, 0, 0, 5463, 5461, 1, 0, 0, 0, 5463, 5464, 1, 0, 0, 0, 5464, 5466, 1, 0, 0, 0, 5465, 5463, 1, 0, 0, 0, 5466, 5467, 5, 553, 0, 0, 5467, 5470, 7, 35, 0, 0, 5468, 5469, 5, 23, 0, 0, 5469, 5471, 3, 828, 414, 0, 5470, 5468, 1, 0, 0, 0, 5470, 5471, 1, 0, 0, 0, 5471, 5474, 1, 0, 0, 0, 5472, 5473, 5, 30, 0, 0, 5473, 5475, 3, 828, 414, 0, 5474, 5472, 1, 0, 0, 0, 5474, 5475, 1, 0, 0, 0, 5475, 5476, 1, 0, 0, 0, 5476, 5477, 5, 549, 0, 0, 5477, 621, 1, 0, 0, 0, 5478, 5479, 5, 570, 0, 0, 5479, 5480, 5, 558, 0, 0, 5480, 5481, 3, 126, 63, 0, 5481, 623, 1, 0, 0, 0, 5482, 5483, 5, 32, 0, 0, 5483, 5488, 3, 828, 414, 0, 5484, 5485, 5, 391, 0, 0, 5485, 5486, 5, 569, 0, 0, 5486, 5487, 5, 558, 0, 0, 5487, 5489, 3, 828, 414, 0, 5488, 5484, 1, 0, 0, 0, 5488, 5489, 1, 0, 0, 0, 5489, 5492, 1, 0, 0, 0, 5490, 5491, 5, 512, 0, 0, 5491, 5493, 5, 566, 0, 0, 5492, 5490, 1, 0, 0, 0, 5492, 5493, 1, 0, 0, 0, 5493, 5496, 1, 0, 0, 0, 5494, 5495, 5, 511, 0, 0, 5495, 5497, 5, 566, 0, 0, 5496, 5494, 1, 0, 0, 0, 5496, 5497, 1, 0, 0, 0, 5497, 5501, 1, 0, 0, 0, 5498, 5499, 5, 384, 0, 0, 5499, 5500, 5, 485, 0, 0, 5500, 5502, 7, 36, 0, 0, 5501, 5498, 1, 0, 0, 0, 5501, 5502, 1, 0, 0, 0, 5502, 5506, 1, 0, 0, 0, 5503, 5504, 5, 497, 0, 0, 5504, 5505, 5, 33, 0, 0, 5505, 5507, 3, 828, 414, 0, 5506, 5503, 1, 0, 0, 0, 5506, 5507, 1, 0, 0, 0, 5507, 5511, 1, 0, 0, 0, 5508, 5509, 5, 496, 0, 0, 5509, 5510, 5, 282, 0, 0, 5510, 5512, 5, 566, 0, 0, 5511, 5508, 1, 0, 0, 0, 5511, 5512, 1, 0, 0, 0, 5512, 5513, 1, 0, 0, 0, 5513, 5514, 5, 97, 0, 0, 5514, 5515, 3, 626, 313, 0, 5515, 5516, 5, 84, 0, 0, 5516, 5518, 5, 32, 0, 0, 5517, 5519, 5, 549, 0, 0, 5518, 5517, 1, 0, 0, 0, 5518, 5519, 1, 0, 0, 0, 5519, 5521, 1, 0, 0, 0, 5520, 5522, 5, 545, 0, 0, 5521, 5520, 1, 0, 0, 0, 5521, 5522, 1, 0, 0, 0, 5522, 625, 1, 0, 0, 0, 5523, 5525, 3, 628, 314, 0, 5524, 5523, 1, 0, 0, 0, 5525, 5528, 1, 0, 0, 0, 5526, 5524, 1, 0, 0, 0, 5526, 5527, 1, 0, 0, 0, 5527, 627, 1, 0, 0, 0, 5528, 5526, 1, 0, 0, 0, 5529, 5530, 3, 630, 315, 0, 5530, 5531, 5, 549, 0, 0, 5531, 5557, 1, 0, 0, 0, 5532, 5533, 3, 636, 318, 0, 5533, 5534, 5, 549, 0, 0, 5534, 5557, 1, 0, 0, 0, 5535, 5536, 3, 640, 320, 0, 5536, 5537, 5, 549, 0, 0, 5537, 5557, 1, 0, 0, 0, 5538, 5539, 3, 642, 321, 0, 5539, 5540, 5, 549, 0, 0, 5540, 5557, 1, 0, 0, 0, 5541, 5542, 3, 646, 323, 0, 5542, 5543, 5, 549, 0, 0, 5543, 5557, 1, 0, 0, 0, 5544, 5545, 3, 650, 325, 0, 5545, 5546, 5, 549, 0, 0, 5546, 5557, 1, 0, 0, 0, 5547, 5548, 3, 652, 326, 0, 5548, 5549, 5, 549, 0, 0, 5549, 5557, 1, 0, 0, 0, 5550, 5551, 3, 654, 327, 0, 5551, 5552, 5, 549, 0, 0, 5552, 5557, 1, 0, 0, 0, 5553, 5554, 3, 656, 328, 0, 5554, 5555, 5, 549, 0, 0, 5555, 5557, 1, 0, 0, 0, 5556, 5529, 1, 0, 0, 0, 5556, 5532, 1, 0, 0, 0, 5556, 5535, 1, 0, 0, 0, 5556, 5538, 1, 0, 0, 0, 5556, 5541, 1, 0, 0, 0, 5556, 5544, 1, 0, 0, 0, 5556, 5547, 1, 0, 0, 0, 5556, 5550, 1, 0, 0, 0, 5556, 5553, 1, 0, 0, 0, 5557, 629, 1, 0, 0, 0, 5558, 5559, 5, 486, 0, 0, 5559, 5560, 5, 487, 0, 0, 5560, 5561, 5, 570, 0, 0, 5561, 5564, 5, 566, 0, 0, 5562, 5563, 5, 33, 0, 0, 5563, 5565, 3, 828, 414, 0, 5564, 5562, 1, 0, 0, 0, 5564, 5565, 1, 0, 0, 0, 5565, 5572, 1, 0, 0, 0, 5566, 5568, 5, 492, 0, 0, 5567, 5569, 7, 37, 0, 0, 5568, 5567, 1, 0, 0, 0, 5568, 5569, 1, 0, 0, 0, 5569, 5570, 1, 0, 0, 0, 5570, 5571, 5, 30, 0, 0, 5571, 5573, 3, 828, 414, 0, 5572, 5566, 1, 0, 0, 0, 5572, 5573, 1, 0, 0, 0, 5573, 5580, 1, 0, 0, 0, 5574, 5576, 5, 492, 0, 0, 5575, 5577, 7, 37, 0, 0, 5576, 5575, 1, 0, 0, 0, 5576, 5577, 1, 0, 0, 0, 5577, 5578, 1, 0, 0, 0, 5578, 5579, 5, 326, 0, 0, 5579, 5581, 5, 566, 0, 0, 5580, 5574, 1, 0, 0, 0, 5580, 5581, 1, 0, 0, 0, 5581, 5584, 1, 0, 0, 0, 5582, 5583, 5, 23, 0, 0, 5583, 5585, 3, 828, 414, 0, 5584, 5582, 1, 0, 0, 0, 5584, 5585, 1, 0, 0, 0, 5585, 5589, 1, 0, 0, 0, 5586, 5587, 5, 496, 0, 0, 5587, 5588, 5, 282, 0, 0, 5588, 5590, 5, 566, 0, 0, 5589, 5586, 1, 0, 0, 0, 5589, 5590, 1, 0, 0, 0, 5590, 5593, 1, 0, 0, 0, 5591, 5592, 5, 511, 0, 0, 5592, 5594, 5, 566, 0, 0, 5593, 5591, 1, 0, 0, 0, 5593, 5594, 1, 0, 0, 0, 5594, 5601, 1, 0, 0, 0, 5595, 5597, 5, 491, 0, 0, 5596, 5598, 3, 634, 317, 0, 5597, 5596, 1, 0, 0, 0, 5598, 5599, 1, 0, 0, 0, 5599, 5597, 1, 0, 0, 0, 5599, 5600, 1, 0, 0, 0, 5600, 5602, 1, 0, 0, 0, 5601, 5595, 1, 0, 0, 0, 5601, 5602, 1, 0, 0, 0, 5602, 5610, 1, 0, 0, 0, 5603, 5604, 5, 504, 0, 0, 5604, 5606, 5, 465, 0, 0, 5605, 5607, 3, 632, 316, 0, 5606, 5605, 1, 0, 0, 0, 5607, 5608, 1, 0, 0, 0, 5608, 5606, 1, 0, 0, 0, 5608, 5609, 1, 0, 0, 0, 5609, 5611, 1, 0, 0, 0, 5610, 5603, 1, 0, 0, 0, 5610, 5611, 1, 0, 0, 0, 5611, 5668, 1, 0, 0, 0, 5612, 5613, 5, 507, 0, 0, 5613, 5614, 5, 486, 0, 0, 5614, 5615, 5, 487, 0, 0, 5615, 5616, 5, 570, 0, 0, 5616, 5619, 5, 566, 0, 0, 5617, 5618, 5, 33, 0, 0, 5618, 5620, 3, 828, 414, 0, 5619, 5617, 1, 0, 0, 0, 5619, 5620, 1, 0, 0, 0, 5620, 5627, 1, 0, 0, 0, 5621, 5623, 5, 492, 0, 0, 5622, 5624, 7, 37, 0, 0, 5623, 5622, 1, 0, 0, 0, 5623, 5624, 1, 0, 0, 0, 5624, 5625, 1, 0, 0, 0, 5625, 5626, 5, 30, 0, 0, 5626, 5628, 3, 828, 414, 0, 5627, 5621, 1, 0, 0, 0, 5627, 5628, 1, 0, 0, 0, 5628, 5635, 1, 0, 0, 0, 5629, 5631, 5, 492, 0, 0, 5630, 5632, 7, 37, 0, 0, 5631, 5630, 1, 0, 0, 0, 5631, 5632, 1, 0, 0, 0, 5632, 5633, 1, 0, 0, 0, 5633, 5634, 5, 326, 0, 0, 5634, 5636, 5, 566, 0, 0, 5635, 5629, 1, 0, 0, 0, 5635, 5636, 1, 0, 0, 0, 5636, 5639, 1, 0, 0, 0, 5637, 5638, 5, 23, 0, 0, 5638, 5640, 3, 828, 414, 0, 5639, 5637, 1, 0, 0, 0, 5639, 5640, 1, 0, 0, 0, 5640, 5644, 1, 0, 0, 0, 5641, 5642, 5, 496, 0, 0, 5642, 5643, 5, 282, 0, 0, 5643, 5645, 5, 566, 0, 0, 5644, 5641, 1, 0, 0, 0, 5644, 5645, 1, 0, 0, 0, 5645, 5648, 1, 0, 0, 0, 5646, 5647, 5, 511, 0, 0, 5647, 5649, 5, 566, 0, 0, 5648, 5646, 1, 0, 0, 0, 5648, 5649, 1, 0, 0, 0, 5649, 5656, 1, 0, 0, 0, 5650, 5652, 5, 491, 0, 0, 5651, 5653, 3, 634, 317, 0, 5652, 5651, 1, 0, 0, 0, 5653, 5654, 1, 0, 0, 0, 5654, 5652, 1, 0, 0, 0, 5654, 5655, 1, 0, 0, 0, 5655, 5657, 1, 0, 0, 0, 5656, 5650, 1, 0, 0, 0, 5656, 5657, 1, 0, 0, 0, 5657, 5665, 1, 0, 0, 0, 5658, 5659, 5, 504, 0, 0, 5659, 5661, 5, 465, 0, 0, 5660, 5662, 3, 632, 316, 0, 5661, 5660, 1, 0, 0, 0, 5662, 5663, 1, 0, 0, 0, 5663, 5661, 1, 0, 0, 0, 5663, 5664, 1, 0, 0, 0, 5664, 5666, 1, 0, 0, 0, 5665, 5658, 1, 0, 0, 0, 5665, 5666, 1, 0, 0, 0, 5666, 5668, 1, 0, 0, 0, 5667, 5558, 1, 0, 0, 0, 5667, 5612, 1, 0, 0, 0, 5668, 631, 1, 0, 0, 0, 5669, 5670, 5, 505, 0, 0, 5670, 5672, 5, 494, 0, 0, 5671, 5673, 5, 566, 0, 0, 5672, 5671, 1, 0, 0, 0, 5672, 5673, 1, 0, 0, 0, 5673, 5678, 1, 0, 0, 0, 5674, 5675, 5, 554, 0, 0, 5675, 5676, 3, 626, 313, 0, 5676, 5677, 5, 555, 0, 0, 5677, 5679, 1, 0, 0, 0, 5678, 5674, 1, 0, 0, 0, 5678, 5679, 1, 0, 0, 0, 5679, 5703, 1, 0, 0, 0, 5680, 5681, 5, 506, 0, 0, 5681, 5682, 5, 505, 0, 0, 5682, 5684, 5, 494, 0, 0, 5683, 5685, 5, 566, 0, 0, 5684, 5683, 1, 0, 0, 0, 5684, 5685, 1, 0, 0, 0, 5685, 5690, 1, 0, 0, 0, 5686, 5687, 5, 554, 0, 0, 5687, 5688, 3, 626, 313, 0, 5688, 5689, 5, 555, 0, 0, 5689, 5691, 1, 0, 0, 0, 5690, 5686, 1, 0, 0, 0, 5690, 5691, 1, 0, 0, 0, 5691, 5703, 1, 0, 0, 0, 5692, 5694, 5, 494, 0, 0, 5693, 5695, 5, 566, 0, 0, 5694, 5693, 1, 0, 0, 0, 5694, 5695, 1, 0, 0, 0, 5695, 5700, 1, 0, 0, 0, 5696, 5697, 5, 554, 0, 0, 5697, 5698, 3, 626, 313, 0, 5698, 5699, 5, 555, 0, 0, 5699, 5701, 1, 0, 0, 0, 5700, 5696, 1, 0, 0, 0, 5700, 5701, 1, 0, 0, 0, 5701, 5703, 1, 0, 0, 0, 5702, 5669, 1, 0, 0, 0, 5702, 5680, 1, 0, 0, 0, 5702, 5692, 1, 0, 0, 0, 5703, 633, 1, 0, 0, 0, 5704, 5705, 5, 566, 0, 0, 5705, 5706, 5, 554, 0, 0, 5706, 5707, 3, 626, 313, 0, 5707, 5708, 5, 555, 0, 0, 5708, 635, 1, 0, 0, 0, 5709, 5710, 5, 114, 0, 0, 5710, 5711, 5, 30, 0, 0, 5711, 5714, 3, 828, 414, 0, 5712, 5713, 5, 429, 0, 0, 5713, 5715, 5, 566, 0, 0, 5714, 5712, 1, 0, 0, 0, 5714, 5715, 1, 0, 0, 0, 5715, 5728, 1, 0, 0, 0, 5716, 5717, 5, 140, 0, 0, 5717, 5718, 5, 552, 0, 0, 5718, 5723, 3, 638, 319, 0, 5719, 5720, 5, 550, 0, 0, 5720, 5722, 3, 638, 319, 0, 5721, 5719, 1, 0, 0, 0, 5722, 5725, 1, 0, 0, 0, 5723, 5721, 1, 0, 0, 0, 5723, 5724, 1, 0, 0, 0, 5724, 5726, 1, 0, 0, 0, 5725, 5723, 1, 0, 0, 0, 5726, 5727, 5, 553, 0, 0, 5727, 5729, 1, 0, 0, 0, 5728, 5716, 1, 0, 0, 0, 5728, 5729, 1, 0, 0, 0, 5729, 5736, 1, 0, 0, 0, 5730, 5732, 5, 491, 0, 0, 5731, 5733, 3, 644, 322, 0, 5732, 5731, 1, 0, 0, 0, 5733, 5734, 1, 0, 0, 0, 5734, 5732, 1, 0, 0, 0, 5734, 5735, 1, 0, 0, 0, 5735, 5737, 1, 0, 0, 0, 5736, 5730, 1, 0, 0, 0, 5736, 5737, 1, 0, 0, 0, 5737, 5745, 1, 0, 0, 0, 5738, 5739, 5, 504, 0, 0, 5739, 5741, 5, 465, 0, 0, 5740, 5742, 3, 632, 316, 0, 5741, 5740, 1, 0, 0, 0, 5742, 5743, 1, 0, 0, 0, 5743, 5741, 1, 0, 0, 0, 5743, 5744, 1, 0, 0, 0, 5744, 5746, 1, 0, 0, 0, 5745, 5738, 1, 0, 0, 0, 5745, 5746, 1, 0, 0, 0, 5746, 637, 1, 0, 0, 0, 5747, 5748, 3, 828, 414, 0, 5748, 5749, 5, 539, 0, 0, 5749, 5750, 5, 566, 0, 0, 5750, 639, 1, 0, 0, 0, 5751, 5752, 5, 114, 0, 0, 5752, 5753, 5, 32, 0, 0, 5753, 5756, 3, 828, 414, 0, 5754, 5755, 5, 429, 0, 0, 5755, 5757, 5, 566, 0, 0, 5756, 5754, 1, 0, 0, 0, 5756, 5757, 1, 0, 0, 0, 5757, 5770, 1, 0, 0, 0, 5758, 5759, 5, 140, 0, 0, 5759, 5760, 5, 552, 0, 0, 5760, 5765, 3, 638, 319, 0, 5761, 5762, 5, 550, 0, 0, 5762, 5764, 3, 638, 319, 0, 5763, 5761, 1, 0, 0, 0, 5764, 5767, 1, 0, 0, 0, 5765, 5763, 1, 0, 0, 0, 5765, 5766, 1, 0, 0, 0, 5766, 5768, 1, 0, 0, 0, 5767, 5765, 1, 0, 0, 0, 5768, 5769, 5, 553, 0, 0, 5769, 5771, 1, 0, 0, 0, 5770, 5758, 1, 0, 0, 0, 5770, 5771, 1, 0, 0, 0, 5771, 641, 1, 0, 0, 0, 5772, 5774, 5, 488, 0, 0, 5773, 5775, 5, 566, 0, 0, 5774, 5773, 1, 0, 0, 0, 5774, 5775, 1, 0, 0, 0, 5775, 5778, 1, 0, 0, 0, 5776, 5777, 5, 429, 0, 0, 5777, 5779, 5, 566, 0, 0, 5778, 5776, 1, 0, 0, 0, 5778, 5779, 1, 0, 0, 0, 5779, 5786, 1, 0, 0, 0, 5780, 5782, 5, 491, 0, 0, 5781, 5783, 3, 644, 322, 0, 5782, 5781, 1, 0, 0, 0, 5783, 5784, 1, 0, 0, 0, 5784, 5782, 1, 0, 0, 0, 5784, 5785, 1, 0, 0, 0, 5785, 5787, 1, 0, 0, 0, 5786, 5780, 1, 0, 0, 0, 5786, 5787, 1, 0, 0, 0, 5787, 643, 1, 0, 0, 0, 5788, 5789, 7, 38, 0, 0, 5789, 5790, 5, 562, 0, 0, 5790, 5791, 5, 554, 0, 0, 5791, 5792, 3, 626, 313, 0, 5792, 5793, 5, 555, 0, 0, 5793, 645, 1, 0, 0, 0, 5794, 5795, 5, 501, 0, 0, 5795, 5798, 5, 489, 0, 0, 5796, 5797, 5, 429, 0, 0, 5797, 5799, 5, 566, 0, 0, 5798, 5796, 1, 0, 0, 0, 5798, 5799, 1, 0, 0, 0, 5799, 5801, 1, 0, 0, 0, 5800, 5802, 3, 648, 324, 0, 5801, 5800, 1, 0, 0, 0, 5802, 5803, 1, 0, 0, 0, 5803, 5801, 1, 0, 0, 0, 5803, 5804, 1, 0, 0, 0, 5804, 647, 1, 0, 0, 0, 5805, 5806, 5, 341, 0, 0, 5806, 5807, 5, 568, 0, 0, 5807, 5808, 5, 554, 0, 0, 5808, 5809, 3, 626, 313, 0, 5809, 5810, 5, 555, 0, 0, 5810, 649, 1, 0, 0, 0, 5811, 5812, 5, 495, 0, 0, 5812, 5813, 5, 450, 0, 0, 5813, 5816, 5, 570, 0, 0, 5814, 5815, 5, 429, 0, 0, 5815, 5817, 5, 566, 0, 0, 5816, 5814, 1, 0, 0, 0, 5816, 5817, 1, 0, 0, 0, 5817, 651, 1, 0, 0, 0, 5818, 5819, 5, 502, 0, 0, 5819, 5820, 5, 453, 0, 0, 5820, 5822, 5, 494, 0, 0, 5821, 5823, 5, 566, 0, 0, 5822, 5821, 1, 0, 0, 0, 5822, 5823, 1, 0, 0, 0, 5823, 5826, 1, 0, 0, 0, 5824, 5825, 5, 429, 0, 0, 5825, 5827, 5, 566, 0, 0, 5826, 5824, 1, 0, 0, 0, 5826, 5827, 1, 0, 0, 0, 5827, 653, 1, 0, 0, 0, 5828, 5829, 5, 502, 0, 0, 5829, 5830, 5, 453, 0, 0, 5830, 5833, 5, 493, 0, 0, 5831, 5832, 5, 429, 0, 0, 5832, 5834, 5, 566, 0, 0, 5833, 5831, 1, 0, 0, 0, 5833, 5834, 1, 0, 0, 0, 5834, 5842, 1, 0, 0, 0, 5835, 5836, 5, 504, 0, 0, 5836, 5838, 5, 465, 0, 0, 5837, 5839, 3, 632, 316, 0, 5838, 5837, 1, 0, 0, 0, 5839, 5840, 1, 0, 0, 0, 5840, 5838, 1, 0, 0, 0, 5840, 5841, 1, 0, 0, 0, 5841, 5843, 1, 0, 0, 0, 5842, 5835, 1, 0, 0, 0, 5842, 5843, 1, 0, 0, 0, 5843, 655, 1, 0, 0, 0, 5844, 5845, 5, 503, 0, 0, 5845, 5846, 5, 566, 0, 0, 5846, 657, 1, 0, 0, 0, 5847, 5848, 5, 48, 0, 0, 5848, 5922, 3, 660, 330, 0, 5849, 5850, 5, 48, 0, 0, 5850, 5851, 5, 513, 0, 0, 5851, 5852, 3, 664, 332, 0, 5852, 5853, 3, 662, 331, 0, 5853, 5922, 1, 0, 0, 0, 5854, 5855, 5, 413, 0, 0, 5855, 5856, 5, 415, 0, 0, 5856, 5857, 3, 664, 332, 0, 5857, 5858, 3, 628, 314, 0, 5858, 5922, 1, 0, 0, 0, 5859, 5860, 5, 19, 0, 0, 5860, 5861, 5, 513, 0, 0, 5861, 5922, 3, 664, 332, 0, 5862, 5863, 5, 454, 0, 0, 5863, 5864, 5, 513, 0, 0, 5864, 5865, 3, 664, 332, 0, 5865, 5866, 5, 140, 0, 0, 5866, 5867, 3, 628, 314, 0, 5867, 5922, 1, 0, 0, 0, 5868, 5869, 5, 413, 0, 0, 5869, 5870, 5, 490, 0, 0, 5870, 5871, 5, 566, 0, 0, 5871, 5872, 5, 94, 0, 0, 5872, 5873, 3, 664, 332, 0, 5873, 5874, 5, 554, 0, 0, 5874, 5875, 3, 626, 313, 0, 5875, 5876, 5, 555, 0, 0, 5876, 5922, 1, 0, 0, 0, 5877, 5878, 5, 413, 0, 0, 5878, 5879, 5, 341, 0, 0, 5879, 5880, 5, 94, 0, 0, 5880, 5881, 3, 664, 332, 0, 5881, 5882, 5, 554, 0, 0, 5882, 5883, 3, 626, 313, 0, 5883, 5884, 5, 555, 0, 0, 5884, 5922, 1, 0, 0, 0, 5885, 5886, 5, 19, 0, 0, 5886, 5887, 5, 490, 0, 0, 5887, 5888, 5, 566, 0, 0, 5888, 5889, 5, 94, 0, 0, 5889, 5922, 3, 664, 332, 0, 5890, 5891, 5, 19, 0, 0, 5891, 5892, 5, 341, 0, 0, 5892, 5893, 5, 566, 0, 0, 5893, 5894, 5, 94, 0, 0, 5894, 5922, 3, 664, 332, 0, 5895, 5896, 5, 413, 0, 0, 5896, 5897, 5, 504, 0, 0, 5897, 5898, 5, 465, 0, 0, 5898, 5899, 5, 94, 0, 0, 5899, 5900, 3, 664, 332, 0, 5900, 5901, 3, 632, 316, 0, 5901, 5922, 1, 0, 0, 0, 5902, 5903, 5, 19, 0, 0, 5903, 5904, 5, 504, 0, 0, 5904, 5905, 5, 465, 0, 0, 5905, 5906, 5, 94, 0, 0, 5906, 5922, 3, 664, 332, 0, 5907, 5908, 5, 413, 0, 0, 5908, 5909, 5, 514, 0, 0, 5909, 5910, 5, 566, 0, 0, 5910, 5911, 5, 94, 0, 0, 5911, 5912, 3, 664, 332, 0, 5912, 5913, 5, 554, 0, 0, 5913, 5914, 3, 626, 313, 0, 5914, 5915, 5, 555, 0, 0, 5915, 5922, 1, 0, 0, 0, 5916, 5917, 5, 19, 0, 0, 5917, 5918, 5, 514, 0, 0, 5918, 5919, 5, 566, 0, 0, 5919, 5920, 5, 94, 0, 0, 5920, 5922, 3, 664, 332, 0, 5921, 5847, 1, 0, 0, 0, 5921, 5849, 1, 0, 0, 0, 5921, 5854, 1, 0, 0, 0, 5921, 5859, 1, 0, 0, 0, 5921, 5862, 1, 0, 0, 0, 5921, 5868, 1, 0, 0, 0, 5921, 5877, 1, 0, 0, 0, 5921, 5885, 1, 0, 0, 0, 5921, 5890, 1, 0, 0, 0, 5921, 5895, 1, 0, 0, 0, 5921, 5902, 1, 0, 0, 0, 5921, 5907, 1, 0, 0, 0, 5921, 5916, 1, 0, 0, 0, 5922, 659, 1, 0, 0, 0, 5923, 5924, 5, 512, 0, 0, 5924, 5941, 5, 566, 0, 0, 5925, 5926, 5, 511, 0, 0, 5926, 5941, 5, 566, 0, 0, 5927, 5928, 5, 384, 0, 0, 5928, 5929, 5, 485, 0, 0, 5929, 5941, 7, 36, 0, 0, 5930, 5931, 5, 496, 0, 0, 5931, 5932, 5, 282, 0, 0, 5932, 5941, 5, 566, 0, 0, 5933, 5934, 5, 497, 0, 0, 5934, 5935, 5, 33, 0, 0, 5935, 5941, 3, 828, 414, 0, 5936, 5937, 5, 391, 0, 0, 5937, 5938, 5, 569, 0, 0, 5938, 5939, 5, 558, 0, 0, 5939, 5941, 3, 828, 414, 0, 5940, 5923, 1, 0, 0, 0, 5940, 5925, 1, 0, 0, 0, 5940, 5927, 1, 0, 0, 0, 5940, 5930, 1, 0, 0, 0, 5940, 5933, 1, 0, 0, 0, 5940, 5936, 1, 0, 0, 0, 5941, 661, 1, 0, 0, 0, 5942, 5943, 5, 33, 0, 0, 5943, 5956, 3, 828, 414, 0, 5944, 5945, 5, 511, 0, 0, 5945, 5956, 5, 566, 0, 0, 5946, 5947, 5, 492, 0, 0, 5947, 5948, 5, 30, 0, 0, 5948, 5956, 3, 828, 414, 0, 5949, 5950, 5, 492, 0, 0, 5950, 5951, 5, 326, 0, 0, 5951, 5956, 5, 566, 0, 0, 5952, 5953, 5, 496, 0, 0, 5953, 5954, 5, 282, 0, 0, 5954, 5956, 5, 566, 0, 0, 5955, 5942, 1, 0, 0, 0, 5955, 5944, 1, 0, 0, 0, 5955, 5946, 1, 0, 0, 0, 5955, 5949, 1, 0, 0, 0, 5955, 5952, 1, 0, 0, 0, 5956, 663, 1, 0, 0, 0, 5957, 5960, 5, 570, 0, 0, 5958, 5959, 5, 559, 0, 0, 5959, 5961, 5, 568, 0, 0, 5960, 5958, 1, 0, 0, 0, 5960, 5961, 1, 0, 0, 0, 5961, 5968, 1, 0, 0, 0, 5962, 5965, 5, 566, 0, 0, 5963, 5964, 5, 559, 0, 0, 5964, 5966, 5, 568, 0, 0, 5965, 5963, 1, 0, 0, 0, 5965, 5966, 1, 0, 0, 0, 5966, 5968, 1, 0, 0, 0, 5967, 5957, 1, 0, 0, 0, 5967, 5962, 1, 0, 0, 0, 5968, 665, 1, 0, 0, 0, 5969, 5970, 3, 668, 334, 0, 5970, 5975, 3, 670, 335, 0, 5971, 5972, 5, 550, 0, 0, 5972, 5974, 3, 670, 335, 0, 5973, 5971, 1, 0, 0, 0, 5974, 5977, 1, 0, 0, 0, 5975, 5973, 1, 0, 0, 0, 5975, 5976, 1, 0, 0, 0, 5976, 6009, 1, 0, 0, 0, 5977, 5975, 1, 0, 0, 0, 5978, 5979, 5, 37, 0, 0, 5979, 5983, 5, 566, 0, 0, 5980, 5981, 5, 444, 0, 0, 5981, 5984, 3, 672, 336, 0, 5982, 5984, 5, 19, 0, 0, 5983, 5980, 1, 0, 0, 0, 5983, 5982, 1, 0, 0, 0, 5984, 5988, 1, 0, 0, 0, 5985, 5986, 5, 307, 0, 0, 5986, 5987, 5, 469, 0, 0, 5987, 5989, 5, 566, 0, 0, 5988, 5985, 1, 0, 0, 0, 5988, 5989, 1, 0, 0, 0, 5989, 6009, 1, 0, 0, 0, 5990, 5991, 5, 19, 0, 0, 5991, 5992, 5, 37, 0, 0, 5992, 5996, 5, 566, 0, 0, 5993, 5994, 5, 307, 0, 0, 5994, 5995, 5, 469, 0, 0, 5995, 5997, 5, 566, 0, 0, 5996, 5993, 1, 0, 0, 0, 5996, 5997, 1, 0, 0, 0, 5997, 6009, 1, 0, 0, 0, 5998, 5999, 5, 469, 0, 0, 5999, 6000, 5, 566, 0, 0, 6000, 6005, 3, 670, 335, 0, 6001, 6002, 5, 550, 0, 0, 6002, 6004, 3, 670, 335, 0, 6003, 6001, 1, 0, 0, 0, 6004, 6007, 1, 0, 0, 0, 6005, 6003, 1, 0, 0, 0, 6005, 6006, 1, 0, 0, 0, 6006, 6009, 1, 0, 0, 0, 6007, 6005, 1, 0, 0, 0, 6008, 5969, 1, 0, 0, 0, 6008, 5978, 1, 0, 0, 0, 6008, 5990, 1, 0, 0, 0, 6008, 5998, 1, 0, 0, 0, 6009, 667, 1, 0, 0, 0, 6010, 6011, 7, 39, 0, 0, 6011, 669, 1, 0, 0, 0, 6012, 6013, 5, 570, 0, 0, 6013, 6014, 5, 539, 0, 0, 6014, 6015, 3, 672, 336, 0, 6015, 671, 1, 0, 0, 0, 6016, 6021, 5, 566, 0, 0, 6017, 6021, 5, 568, 0, 0, 6018, 6021, 3, 836, 418, 0, 6019, 6021, 3, 828, 414, 0, 6020, 6016, 1, 0, 0, 0, 6020, 6017, 1, 0, 0, 0, 6020, 6018, 1, 0, 0, 0, 6020, 6019, 1, 0, 0, 0, 6021, 673, 1, 0, 0, 0, 6022, 6027, 3, 678, 339, 0, 6023, 6027, 3, 690, 345, 0, 6024, 6027, 3, 692, 346, 0, 6025, 6027, 3, 698, 349, 0, 6026, 6022, 1, 0, 0, 0, 6026, 6023, 1, 0, 0, 0, 6026, 6024, 1, 0, 0, 0, 6026, 6025, 1, 0, 0, 0, 6027, 675, 1, 0, 0, 0, 6028, 6029, 7, 40, 0, 0, 6029, 677, 1, 0, 0, 0, 6030, 6031, 3, 676, 338, 0, 6031, 6032, 5, 400, 0, 0, 6032, 6564, 1, 0, 0, 0, 6033, 6034, 3, 676, 338, 0, 6034, 6035, 5, 364, 0, 0, 6035, 6036, 5, 401, 0, 0, 6036, 6037, 5, 72, 0, 0, 6037, 6038, 3, 828, 414, 0, 6038, 6564, 1, 0, 0, 0, 6039, 6040, 3, 676, 338, 0, 6040, 6041, 5, 364, 0, 0, 6041, 6042, 5, 118, 0, 0, 6042, 6043, 5, 72, 0, 0, 6043, 6044, 3, 828, 414, 0, 6044, 6564, 1, 0, 0, 0, 6045, 6046, 3, 676, 338, 0, 6046, 6047, 5, 364, 0, 0, 6047, 6048, 5, 428, 0, 0, 6048, 6049, 5, 72, 0, 0, 6049, 6050, 3, 828, 414, 0, 6050, 6564, 1, 0, 0, 0, 6051, 6052, 3, 676, 338, 0, 6052, 6053, 5, 364, 0, 0, 6053, 6054, 5, 427, 0, 0, 6054, 6055, 5, 72, 0, 0, 6055, 6056, 3, 828, 414, 0, 6056, 6564, 1, 0, 0, 0, 6057, 6058, 3, 676, 338, 0, 6058, 6064, 5, 401, 0, 0, 6059, 6062, 5, 307, 0, 0, 6060, 6063, 3, 828, 414, 0, 6061, 6063, 5, 570, 0, 0, 6062, 6060, 1, 0, 0, 0, 6062, 6061, 1, 0, 0, 0, 6063, 6065, 1, 0, 0, 0, 6064, 6059, 1, 0, 0, 0, 6064, 6065, 1, 0, 0, 0, 6065, 6564, 1, 0, 0, 0, 6066, 6067, 3, 676, 338, 0, 6067, 6073, 5, 402, 0, 0, 6068, 6071, 5, 307, 0, 0, 6069, 6072, 3, 828, 414, 0, 6070, 6072, 5, 570, 0, 0, 6071, 6069, 1, 0, 0, 0, 6071, 6070, 1, 0, 0, 0, 6072, 6074, 1, 0, 0, 0, 6073, 6068, 1, 0, 0, 0, 6073, 6074, 1, 0, 0, 0, 6074, 6564, 1, 0, 0, 0, 6075, 6076, 3, 676, 338, 0, 6076, 6082, 5, 403, 0, 0, 6077, 6080, 5, 307, 0, 0, 6078, 6081, 3, 828, 414, 0, 6079, 6081, 5, 570, 0, 0, 6080, 6078, 1, 0, 0, 0, 6080, 6079, 1, 0, 0, 0, 6081, 6083, 1, 0, 0, 0, 6082, 6077, 1, 0, 0, 0, 6082, 6083, 1, 0, 0, 0, 6083, 6564, 1, 0, 0, 0, 6084, 6085, 3, 676, 338, 0, 6085, 6091, 5, 404, 0, 0, 6086, 6089, 5, 307, 0, 0, 6087, 6090, 3, 828, 414, 0, 6088, 6090, 5, 570, 0, 0, 6089, 6087, 1, 0, 0, 0, 6089, 6088, 1, 0, 0, 0, 6090, 6092, 1, 0, 0, 0, 6091, 6086, 1, 0, 0, 0, 6091, 6092, 1, 0, 0, 0, 6092, 6564, 1, 0, 0, 0, 6093, 6094, 3, 676, 338, 0, 6094, 6100, 5, 405, 0, 0, 6095, 6098, 5, 307, 0, 0, 6096, 6099, 3, 828, 414, 0, 6097, 6099, 5, 570, 0, 0, 6098, 6096, 1, 0, 0, 0, 6098, 6097, 1, 0, 0, 0, 6099, 6101, 1, 0, 0, 0, 6100, 6095, 1, 0, 0, 0, 6100, 6101, 1, 0, 0, 0, 6101, 6564, 1, 0, 0, 0, 6102, 6103, 3, 676, 338, 0, 6103, 6109, 5, 144, 0, 0, 6104, 6107, 5, 307, 0, 0, 6105, 6108, 3, 828, 414, 0, 6106, 6108, 5, 570, 0, 0, 6107, 6105, 1, 0, 0, 0, 6107, 6106, 1, 0, 0, 0, 6108, 6110, 1, 0, 0, 0, 6109, 6104, 1, 0, 0, 0, 6109, 6110, 1, 0, 0, 0, 6110, 6564, 1, 0, 0, 0, 6111, 6112, 3, 676, 338, 0, 6112, 6118, 5, 146, 0, 0, 6113, 6116, 5, 307, 0, 0, 6114, 6117, 3, 828, 414, 0, 6115, 6117, 5, 570, 0, 0, 6116, 6114, 1, 0, 0, 0, 6116, 6115, 1, 0, 0, 0, 6117, 6119, 1, 0, 0, 0, 6118, 6113, 1, 0, 0, 0, 6118, 6119, 1, 0, 0, 0, 6119, 6564, 1, 0, 0, 0, 6120, 6121, 3, 676, 338, 0, 6121, 6127, 5, 406, 0, 0, 6122, 6125, 5, 307, 0, 0, 6123, 6126, 3, 828, 414, 0, 6124, 6126, 5, 570, 0, 0, 6125, 6123, 1, 0, 0, 0, 6125, 6124, 1, 0, 0, 0, 6126, 6128, 1, 0, 0, 0, 6127, 6122, 1, 0, 0, 0, 6127, 6128, 1, 0, 0, 0, 6128, 6564, 1, 0, 0, 0, 6129, 6130, 3, 676, 338, 0, 6130, 6136, 5, 407, 0, 0, 6131, 6134, 5, 307, 0, 0, 6132, 6135, 3, 828, 414, 0, 6133, 6135, 5, 570, 0, 0, 6134, 6132, 1, 0, 0, 0, 6134, 6133, 1, 0, 0, 0, 6135, 6137, 1, 0, 0, 0, 6136, 6131, 1, 0, 0, 0, 6136, 6137, 1, 0, 0, 0, 6137, 6564, 1, 0, 0, 0, 6138, 6139, 3, 676, 338, 0, 6139, 6140, 5, 37, 0, 0, 6140, 6146, 5, 445, 0, 0, 6141, 6144, 5, 307, 0, 0, 6142, 6145, 3, 828, 414, 0, 6143, 6145, 5, 570, 0, 0, 6144, 6142, 1, 0, 0, 0, 6144, 6143, 1, 0, 0, 0, 6145, 6147, 1, 0, 0, 0, 6146, 6141, 1, 0, 0, 0, 6146, 6147, 1, 0, 0, 0, 6147, 6564, 1, 0, 0, 0, 6148, 6149, 3, 676, 338, 0, 6149, 6155, 5, 145, 0, 0, 6150, 6153, 5, 307, 0, 0, 6151, 6154, 3, 828, 414, 0, 6152, 6154, 5, 570, 0, 0, 6153, 6151, 1, 0, 0, 0, 6153, 6152, 1, 0, 0, 0, 6154, 6156, 1, 0, 0, 0, 6155, 6150, 1, 0, 0, 0, 6155, 6156, 1, 0, 0, 0, 6156, 6564, 1, 0, 0, 0, 6157, 6158, 3, 676, 338, 0, 6158, 6164, 5, 147, 0, 0, 6159, 6162, 5, 307, 0, 0, 6160, 6163, 3, 828, 414, 0, 6161, 6163, 5, 570, 0, 0, 6162, 6160, 1, 0, 0, 0, 6162, 6161, 1, 0, 0, 0, 6163, 6165, 1, 0, 0, 0, 6164, 6159, 1, 0, 0, 0, 6164, 6165, 1, 0, 0, 0, 6165, 6564, 1, 0, 0, 0, 6166, 6167, 3, 676, 338, 0, 6167, 6168, 5, 115, 0, 0, 6168, 6174, 5, 118, 0, 0, 6169, 6172, 5, 307, 0, 0, 6170, 6173, 3, 828, 414, 0, 6171, 6173, 5, 570, 0, 0, 6172, 6170, 1, 0, 0, 0, 6172, 6171, 1, 0, 0, 0, 6173, 6175, 1, 0, 0, 0, 6174, 6169, 1, 0, 0, 0, 6174, 6175, 1, 0, 0, 0, 6175, 6564, 1, 0, 0, 0, 6176, 6177, 3, 676, 338, 0, 6177, 6178, 5, 116, 0, 0, 6178, 6184, 5, 118, 0, 0, 6179, 6182, 5, 307, 0, 0, 6180, 6183, 3, 828, 414, 0, 6181, 6183, 5, 570, 0, 0, 6182, 6180, 1, 0, 0, 0, 6182, 6181, 1, 0, 0, 0, 6183, 6185, 1, 0, 0, 0, 6184, 6179, 1, 0, 0, 0, 6184, 6185, 1, 0, 0, 0, 6185, 6564, 1, 0, 0, 0, 6186, 6187, 3, 676, 338, 0, 6187, 6188, 5, 229, 0, 0, 6188, 6194, 5, 230, 0, 0, 6189, 6192, 5, 307, 0, 0, 6190, 6193, 3, 828, 414, 0, 6191, 6193, 5, 570, 0, 0, 6192, 6190, 1, 0, 0, 0, 6192, 6191, 1, 0, 0, 0, 6193, 6195, 1, 0, 0, 0, 6194, 6189, 1, 0, 0, 0, 6194, 6195, 1, 0, 0, 0, 6195, 6564, 1, 0, 0, 0, 6196, 6197, 3, 676, 338, 0, 6197, 6203, 5, 232, 0, 0, 6198, 6201, 5, 307, 0, 0, 6199, 6202, 3, 828, 414, 0, 6200, 6202, 5, 570, 0, 0, 6201, 6199, 1, 0, 0, 0, 6201, 6200, 1, 0, 0, 0, 6202, 6204, 1, 0, 0, 0, 6203, 6198, 1, 0, 0, 0, 6203, 6204, 1, 0, 0, 0, 6204, 6564, 1, 0, 0, 0, 6205, 6206, 3, 676, 338, 0, 6206, 6212, 5, 234, 0, 0, 6207, 6210, 5, 307, 0, 0, 6208, 6211, 3, 828, 414, 0, 6209, 6211, 5, 570, 0, 0, 6210, 6208, 1, 0, 0, 0, 6210, 6209, 1, 0, 0, 0, 6211, 6213, 1, 0, 0, 0, 6212, 6207, 1, 0, 0, 0, 6212, 6213, 1, 0, 0, 0, 6213, 6564, 1, 0, 0, 0, 6214, 6215, 3, 676, 338, 0, 6215, 6216, 5, 236, 0, 0, 6216, 6222, 5, 237, 0, 0, 6217, 6220, 5, 307, 0, 0, 6218, 6221, 3, 828, 414, 0, 6219, 6221, 5, 570, 0, 0, 6220, 6218, 1, 0, 0, 0, 6220, 6219, 1, 0, 0, 0, 6221, 6223, 1, 0, 0, 0, 6222, 6217, 1, 0, 0, 0, 6222, 6223, 1, 0, 0, 0, 6223, 6564, 1, 0, 0, 0, 6224, 6225, 3, 676, 338, 0, 6225, 6226, 5, 238, 0, 0, 6226, 6227, 5, 239, 0, 0, 6227, 6233, 5, 331, 0, 0, 6228, 6231, 5, 307, 0, 0, 6229, 6232, 3, 828, 414, 0, 6230, 6232, 5, 570, 0, 0, 6231, 6229, 1, 0, 0, 0, 6231, 6230, 1, 0, 0, 0, 6232, 6234, 1, 0, 0, 0, 6233, 6228, 1, 0, 0, 0, 6233, 6234, 1, 0, 0, 0, 6234, 6564, 1, 0, 0, 0, 6235, 6236, 3, 676, 338, 0, 6236, 6237, 5, 349, 0, 0, 6237, 6243, 5, 441, 0, 0, 6238, 6241, 5, 307, 0, 0, 6239, 6242, 3, 828, 414, 0, 6240, 6242, 5, 570, 0, 0, 6241, 6239, 1, 0, 0, 0, 6241, 6240, 1, 0, 0, 0, 6242, 6244, 1, 0, 0, 0, 6243, 6238, 1, 0, 0, 0, 6243, 6244, 1, 0, 0, 0, 6244, 6564, 1, 0, 0, 0, 6245, 6246, 3, 676, 338, 0, 6246, 6247, 5, 378, 0, 0, 6247, 6253, 5, 377, 0, 0, 6248, 6251, 5, 307, 0, 0, 6249, 6252, 3, 828, 414, 0, 6250, 6252, 5, 570, 0, 0, 6251, 6249, 1, 0, 0, 0, 6251, 6250, 1, 0, 0, 0, 6252, 6254, 1, 0, 0, 0, 6253, 6248, 1, 0, 0, 0, 6253, 6254, 1, 0, 0, 0, 6254, 6564, 1, 0, 0, 0, 6255, 6256, 3, 676, 338, 0, 6256, 6257, 5, 384, 0, 0, 6257, 6263, 5, 377, 0, 0, 6258, 6261, 5, 307, 0, 0, 6259, 6262, 3, 828, 414, 0, 6260, 6262, 5, 570, 0, 0, 6261, 6259, 1, 0, 0, 0, 6261, 6260, 1, 0, 0, 0, 6262, 6264, 1, 0, 0, 0, 6263, 6258, 1, 0, 0, 0, 6263, 6264, 1, 0, 0, 0, 6264, 6564, 1, 0, 0, 0, 6265, 6266, 3, 676, 338, 0, 6266, 6267, 5, 23, 0, 0, 6267, 6268, 3, 828, 414, 0, 6268, 6564, 1, 0, 0, 0, 6269, 6270, 3, 676, 338, 0, 6270, 6271, 5, 27, 0, 0, 6271, 6272, 3, 828, 414, 0, 6272, 6564, 1, 0, 0, 0, 6273, 6274, 3, 676, 338, 0, 6274, 6275, 5, 33, 0, 0, 6275, 6276, 3, 828, 414, 0, 6276, 6564, 1, 0, 0, 0, 6277, 6278, 3, 676, 338, 0, 6278, 6279, 5, 408, 0, 0, 6279, 6564, 1, 0, 0, 0, 6280, 6281, 3, 676, 338, 0, 6281, 6282, 5, 351, 0, 0, 6282, 6564, 1, 0, 0, 0, 6283, 6284, 3, 676, 338, 0, 6284, 6285, 5, 353, 0, 0, 6285, 6564, 1, 0, 0, 0, 6286, 6287, 3, 676, 338, 0, 6287, 6288, 5, 431, 0, 0, 6288, 6289, 5, 351, 0, 0, 6289, 6564, 1, 0, 0, 0, 6290, 6291, 3, 676, 338, 0, 6291, 6292, 5, 431, 0, 0, 6292, 6293, 5, 388, 0, 0, 6293, 6564, 1, 0, 0, 0, 6294, 6295, 3, 676, 338, 0, 6295, 6296, 5, 434, 0, 0, 6296, 6297, 5, 451, 0, 0, 6297, 6299, 3, 828, 414, 0, 6298, 6300, 5, 437, 0, 0, 6299, 6298, 1, 0, 0, 0, 6299, 6300, 1, 0, 0, 0, 6300, 6564, 1, 0, 0, 0, 6301, 6302, 3, 676, 338, 0, 6302, 6303, 5, 435, 0, 0, 6303, 6304, 5, 451, 0, 0, 6304, 6306, 3, 828, 414, 0, 6305, 6307, 5, 437, 0, 0, 6306, 6305, 1, 0, 0, 0, 6306, 6307, 1, 0, 0, 0, 6307, 6564, 1, 0, 0, 0, 6308, 6309, 3, 676, 338, 0, 6309, 6310, 5, 436, 0, 0, 6310, 6311, 5, 450, 0, 0, 6311, 6312, 3, 828, 414, 0, 6312, 6564, 1, 0, 0, 0, 6313, 6314, 3, 676, 338, 0, 6314, 6315, 5, 438, 0, 0, 6315, 6316, 5, 451, 0, 0, 6316, 6317, 3, 828, 414, 0, 6317, 6564, 1, 0, 0, 0, 6318, 6319, 3, 676, 338, 0, 6319, 6320, 5, 224, 0, 0, 6320, 6321, 5, 451, 0, 0, 6321, 6324, 3, 828, 414, 0, 6322, 6323, 5, 439, 0, 0, 6323, 6325, 5, 568, 0, 0, 6324, 6322, 1, 0, 0, 0, 6324, 6325, 1, 0, 0, 0, 6325, 6564, 1, 0, 0, 0, 6326, 6327, 3, 676, 338, 0, 6327, 6329, 5, 190, 0, 0, 6328, 6330, 3, 680, 340, 0, 6329, 6328, 1, 0, 0, 0, 6329, 6330, 1, 0, 0, 0, 6330, 6564, 1, 0, 0, 0, 6331, 6332, 3, 676, 338, 0, 6332, 6333, 5, 59, 0, 0, 6333, 6334, 5, 473, 0, 0, 6334, 6564, 1, 0, 0, 0, 6335, 6336, 3, 676, 338, 0, 6336, 6337, 5, 29, 0, 0, 6337, 6343, 5, 475, 0, 0, 6338, 6341, 5, 307, 0, 0, 6339, 6342, 3, 828, 414, 0, 6340, 6342, 5, 570, 0, 0, 6341, 6339, 1, 0, 0, 0, 6341, 6340, 1, 0, 0, 0, 6342, 6344, 1, 0, 0, 0, 6343, 6338, 1, 0, 0, 0, 6343, 6344, 1, 0, 0, 0, 6344, 6564, 1, 0, 0, 0, 6345, 6346, 3, 676, 338, 0, 6346, 6347, 5, 486, 0, 0, 6347, 6348, 5, 475, 0, 0, 6348, 6564, 1, 0, 0, 0, 6349, 6350, 3, 676, 338, 0, 6350, 6351, 5, 481, 0, 0, 6351, 6352, 5, 516, 0, 0, 6352, 6564, 1, 0, 0, 0, 6353, 6354, 3, 676, 338, 0, 6354, 6355, 5, 484, 0, 0, 6355, 6356, 5, 94, 0, 0, 6356, 6357, 3, 828, 414, 0, 6357, 6564, 1, 0, 0, 0, 6358, 6359, 3, 676, 338, 0, 6359, 6360, 5, 484, 0, 0, 6360, 6361, 5, 94, 0, 0, 6361, 6362, 5, 30, 0, 0, 6362, 6363, 3, 828, 414, 0, 6363, 6564, 1, 0, 0, 0, 6364, 6365, 3, 676, 338, 0, 6365, 6366, 5, 484, 0, 0, 6366, 6367, 5, 94, 0, 0, 6367, 6368, 5, 33, 0, 0, 6368, 6369, 3, 828, 414, 0, 6369, 6564, 1, 0, 0, 0, 6370, 6371, 3, 676, 338, 0, 6371, 6372, 5, 484, 0, 0, 6372, 6373, 5, 94, 0, 0, 6373, 6374, 5, 32, 0, 0, 6374, 6375, 3, 828, 414, 0, 6375, 6564, 1, 0, 0, 0, 6376, 6377, 3, 676, 338, 0, 6377, 6378, 5, 473, 0, 0, 6378, 6384, 5, 482, 0, 0, 6379, 6382, 5, 307, 0, 0, 6380, 6383, 3, 828, 414, 0, 6381, 6383, 5, 570, 0, 0, 6382, 6380, 1, 0, 0, 0, 6382, 6381, 1, 0, 0, 0, 6383, 6385, 1, 0, 0, 0, 6384, 6379, 1, 0, 0, 0, 6384, 6385, 1, 0, 0, 0, 6385, 6564, 1, 0, 0, 0, 6386, 6387, 3, 676, 338, 0, 6387, 6388, 5, 332, 0, 0, 6388, 6394, 5, 360, 0, 0, 6389, 6392, 5, 307, 0, 0, 6390, 6393, 3, 828, 414, 0, 6391, 6393, 5, 570, 0, 0, 6392, 6390, 1, 0, 0, 0, 6392, 6391, 1, 0, 0, 0, 6393, 6395, 1, 0, 0, 0, 6394, 6389, 1, 0, 0, 0, 6394, 6395, 1, 0, 0, 0, 6395, 6564, 1, 0, 0, 0, 6396, 6397, 3, 676, 338, 0, 6397, 6398, 5, 332, 0, 0, 6398, 6404, 5, 331, 0, 0, 6399, 6402, 5, 307, 0, 0, 6400, 6403, 3, 828, 414, 0, 6401, 6403, 5, 570, 0, 0, 6402, 6400, 1, 0, 0, 0, 6402, 6401, 1, 0, 0, 0, 6403, 6405, 1, 0, 0, 0, 6404, 6399, 1, 0, 0, 0, 6404, 6405, 1, 0, 0, 0, 6405, 6564, 1, 0, 0, 0, 6406, 6407, 3, 676, 338, 0, 6407, 6408, 5, 26, 0, 0, 6408, 6414, 5, 401, 0, 0, 6409, 6412, 5, 307, 0, 0, 6410, 6413, 3, 828, 414, 0, 6411, 6413, 5, 570, 0, 0, 6412, 6410, 1, 0, 0, 0, 6412, 6411, 1, 0, 0, 0, 6413, 6415, 1, 0, 0, 0, 6414, 6409, 1, 0, 0, 0, 6414, 6415, 1, 0, 0, 0, 6415, 6564, 1, 0, 0, 0, 6416, 6417, 3, 676, 338, 0, 6417, 6418, 5, 26, 0, 0, 6418, 6424, 5, 118, 0, 0, 6419, 6422, 5, 307, 0, 0, 6420, 6423, 3, 828, 414, 0, 6421, 6423, 5, 570, 0, 0, 6422, 6420, 1, 0, 0, 0, 6422, 6421, 1, 0, 0, 0, 6423, 6425, 1, 0, 0, 0, 6424, 6419, 1, 0, 0, 0, 6424, 6425, 1, 0, 0, 0, 6425, 6564, 1, 0, 0, 0, 6426, 6427, 3, 676, 338, 0, 6427, 6428, 5, 394, 0, 0, 6428, 6564, 1, 0, 0, 0, 6429, 6430, 3, 676, 338, 0, 6430, 6431, 5, 394, 0, 0, 6431, 6434, 5, 395, 0, 0, 6432, 6435, 3, 828, 414, 0, 6433, 6435, 5, 570, 0, 0, 6434, 6432, 1, 0, 0, 0, 6434, 6433, 1, 0, 0, 0, 6434, 6435, 1, 0, 0, 0, 6435, 6564, 1, 0, 0, 0, 6436, 6437, 3, 676, 338, 0, 6437, 6438, 5, 394, 0, 0, 6438, 6439, 5, 396, 0, 0, 6439, 6564, 1, 0, 0, 0, 6440, 6441, 3, 676, 338, 0, 6441, 6442, 5, 213, 0, 0, 6442, 6445, 5, 214, 0, 0, 6443, 6444, 5, 453, 0, 0, 6444, 6446, 3, 682, 341, 0, 6445, 6443, 1, 0, 0, 0, 6445, 6446, 1, 0, 0, 0, 6446, 6564, 1, 0, 0, 0, 6447, 6448, 3, 676, 338, 0, 6448, 6451, 5, 440, 0, 0, 6449, 6450, 5, 439, 0, 0, 6450, 6452, 5, 568, 0, 0, 6451, 6449, 1, 0, 0, 0, 6451, 6452, 1, 0, 0, 0, 6452, 6458, 1, 0, 0, 0, 6453, 6456, 5, 307, 0, 0, 6454, 6457, 3, 828, 414, 0, 6455, 6457, 5, 570, 0, 0, 6456, 6454, 1, 0, 0, 0, 6456, 6455, 1, 0, 0, 0, 6457, 6459, 1, 0, 0, 0, 6458, 6453, 1, 0, 0, 0, 6458, 6459, 1, 0, 0, 0, 6459, 6461, 1, 0, 0, 0, 6460, 6462, 5, 86, 0, 0, 6461, 6460, 1, 0, 0, 0, 6461, 6462, 1, 0, 0, 0, 6462, 6564, 1, 0, 0, 0, 6463, 6464, 3, 676, 338, 0, 6464, 6465, 5, 464, 0, 0, 6465, 6466, 5, 465, 0, 0, 6466, 6472, 5, 331, 0, 0, 6467, 6470, 5, 307, 0, 0, 6468, 6471, 3, 828, 414, 0, 6469, 6471, 5, 570, 0, 0, 6470, 6468, 1, 0, 0, 0, 6470, 6469, 1, 0, 0, 0, 6471, 6473, 1, 0, 0, 0, 6472, 6467, 1, 0, 0, 0, 6472, 6473, 1, 0, 0, 0, 6473, 6564, 1, 0, 0, 0, 6474, 6475, 3, 676, 338, 0, 6475, 6476, 5, 464, 0, 0, 6476, 6477, 5, 465, 0, 0, 6477, 6483, 5, 360, 0, 0, 6478, 6481, 5, 307, 0, 0, 6479, 6482, 3, 828, 414, 0, 6480, 6482, 5, 570, 0, 0, 6481, 6479, 1, 0, 0, 0, 6481, 6480, 1, 0, 0, 0, 6482, 6484, 1, 0, 0, 0, 6483, 6478, 1, 0, 0, 0, 6483, 6484, 1, 0, 0, 0, 6484, 6564, 1, 0, 0, 0, 6485, 6486, 3, 676, 338, 0, 6486, 6487, 5, 464, 0, 0, 6487, 6493, 5, 121, 0, 0, 6488, 6491, 5, 307, 0, 0, 6489, 6492, 3, 828, 414, 0, 6490, 6492, 5, 570, 0, 0, 6491, 6489, 1, 0, 0, 0, 6491, 6490, 1, 0, 0, 0, 6492, 6494, 1, 0, 0, 0, 6493, 6488, 1, 0, 0, 0, 6493, 6494, 1, 0, 0, 0, 6494, 6564, 1, 0, 0, 0, 6495, 6496, 3, 676, 338, 0, 6496, 6497, 5, 468, 0, 0, 6497, 6564, 1, 0, 0, 0, 6498, 6499, 3, 676, 338, 0, 6499, 6500, 5, 411, 0, 0, 6500, 6564, 1, 0, 0, 0, 6501, 6502, 3, 676, 338, 0, 6502, 6503, 5, 373, 0, 0, 6503, 6509, 5, 408, 0, 0, 6504, 6507, 5, 307, 0, 0, 6505, 6508, 3, 828, 414, 0, 6506, 6508, 5, 570, 0, 0, 6507, 6505, 1, 0, 0, 0, 6507, 6506, 1, 0, 0, 0, 6508, 6510, 1, 0, 0, 0, 6509, 6504, 1, 0, 0, 0, 6509, 6510, 1, 0, 0, 0, 6510, 6564, 1, 0, 0, 0, 6511, 6512, 3, 676, 338, 0, 6512, 6513, 5, 329, 0, 0, 6513, 6519, 5, 360, 0, 0, 6514, 6517, 5, 307, 0, 0, 6515, 6518, 3, 828, 414, 0, 6516, 6518, 5, 570, 0, 0, 6517, 6515, 1, 0, 0, 0, 6517, 6516, 1, 0, 0, 0, 6518, 6520, 1, 0, 0, 0, 6519, 6514, 1, 0, 0, 0, 6519, 6520, 1, 0, 0, 0, 6520, 6564, 1, 0, 0, 0, 6521, 6522, 3, 676, 338, 0, 6522, 6523, 5, 362, 0, 0, 6523, 6524, 5, 329, 0, 0, 6524, 6530, 5, 331, 0, 0, 6525, 6528, 5, 307, 0, 0, 6526, 6529, 3, 828, 414, 0, 6527, 6529, 5, 570, 0, 0, 6528, 6526, 1, 0, 0, 0, 6528, 6527, 1, 0, 0, 0, 6529, 6531, 1, 0, 0, 0, 6530, 6525, 1, 0, 0, 0, 6530, 6531, 1, 0, 0, 0, 6531, 6564, 1, 0, 0, 0, 6532, 6533, 3, 676, 338, 0, 6533, 6534, 5, 518, 0, 0, 6534, 6540, 5, 521, 0, 0, 6535, 6538, 5, 307, 0, 0, 6536, 6539, 3, 828, 414, 0, 6537, 6539, 5, 570, 0, 0, 6538, 6536, 1, 0, 0, 0, 6538, 6537, 1, 0, 0, 0, 6539, 6541, 1, 0, 0, 0, 6540, 6535, 1, 0, 0, 0, 6540, 6541, 1, 0, 0, 0, 6541, 6564, 1, 0, 0, 0, 6542, 6543, 3, 676, 338, 0, 6543, 6544, 5, 412, 0, 0, 6544, 6564, 1, 0, 0, 0, 6545, 6546, 3, 676, 338, 0, 6546, 6549, 5, 470, 0, 0, 6547, 6548, 5, 307, 0, 0, 6548, 6550, 5, 570, 0, 0, 6549, 6547, 1, 0, 0, 0, 6549, 6550, 1, 0, 0, 0, 6550, 6564, 1, 0, 0, 0, 6551, 6552, 3, 676, 338, 0, 6552, 6553, 5, 470, 0, 0, 6553, 6554, 5, 453, 0, 0, 6554, 6555, 5, 353, 0, 0, 6555, 6556, 5, 568, 0, 0, 6556, 6564, 1, 0, 0, 0, 6557, 6558, 3, 676, 338, 0, 6558, 6559, 5, 470, 0, 0, 6559, 6560, 5, 471, 0, 0, 6560, 6561, 5, 472, 0, 0, 6561, 6562, 5, 568, 0, 0, 6562, 6564, 1, 0, 0, 0, 6563, 6030, 1, 0, 0, 0, 6563, 6033, 1, 0, 0, 0, 6563, 6039, 1, 0, 0, 0, 6563, 6045, 1, 0, 0, 0, 6563, 6051, 1, 0, 0, 0, 6563, 6057, 1, 0, 0, 0, 6563, 6066, 1, 0, 0, 0, 6563, 6075, 1, 0, 0, 0, 6563, 6084, 1, 0, 0, 0, 6563, 6093, 1, 0, 0, 0, 6563, 6102, 1, 0, 0, 0, 6563, 6111, 1, 0, 0, 0, 6563, 6120, 1, 0, 0, 0, 6563, 6129, 1, 0, 0, 0, 6563, 6138, 1, 0, 0, 0, 6563, 6148, 1, 0, 0, 0, 6563, 6157, 1, 0, 0, 0, 6563, 6166, 1, 0, 0, 0, 6563, 6176, 1, 0, 0, 0, 6563, 6186, 1, 0, 0, 0, 6563, 6196, 1, 0, 0, 0, 6563, 6205, 1, 0, 0, 0, 6563, 6214, 1, 0, 0, 0, 6563, 6224, 1, 0, 0, 0, 6563, 6235, 1, 0, 0, 0, 6563, 6245, 1, 0, 0, 0, 6563, 6255, 1, 0, 0, 0, 6563, 6265, 1, 0, 0, 0, 6563, 6269, 1, 0, 0, 0, 6563, 6273, 1, 0, 0, 0, 6563, 6277, 1, 0, 0, 0, 6563, 6280, 1, 0, 0, 0, 6563, 6283, 1, 0, 0, 0, 6563, 6286, 1, 0, 0, 0, 6563, 6290, 1, 0, 0, 0, 6563, 6294, 1, 0, 0, 0, 6563, 6301, 1, 0, 0, 0, 6563, 6308, 1, 0, 0, 0, 6563, 6313, 1, 0, 0, 0, 6563, 6318, 1, 0, 0, 0, 6563, 6326, 1, 0, 0, 0, 6563, 6331, 1, 0, 0, 0, 6563, 6335, 1, 0, 0, 0, 6563, 6345, 1, 0, 0, 0, 6563, 6349, 1, 0, 0, 0, 6563, 6353, 1, 0, 0, 0, 6563, 6358, 1, 0, 0, 0, 6563, 6364, 1, 0, 0, 0, 6563, 6370, 1, 0, 0, 0, 6563, 6376, 1, 0, 0, 0, 6563, 6386, 1, 0, 0, 0, 6563, 6396, 1, 0, 0, 0, 6563, 6406, 1, 0, 0, 0, 6563, 6416, 1, 0, 0, 0, 6563, 6426, 1, 0, 0, 0, 6563, 6429, 1, 0, 0, 0, 6563, 6436, 1, 0, 0, 0, 6563, 6440, 1, 0, 0, 0, 6563, 6447, 1, 0, 0, 0, 6563, 6463, 1, 0, 0, 0, 6563, 6474, 1, 0, 0, 0, 6563, 6485, 1, 0, 0, 0, 6563, 6495, 1, 0, 0, 0, 6563, 6498, 1, 0, 0, 0, 6563, 6501, 1, 0, 0, 0, 6563, 6511, 1, 0, 0, 0, 6563, 6521, 1, 0, 0, 0, 6563, 6532, 1, 0, 0, 0, 6563, 6542, 1, 0, 0, 0, 6563, 6545, 1, 0, 0, 0, 6563, 6551, 1, 0, 0, 0, 6563, 6557, 1, 0, 0, 0, 6564, 679, 1, 0, 0, 0, 6565, 6566, 5, 73, 0, 0, 6566, 6571, 3, 684, 342, 0, 6567, 6568, 5, 303, 0, 0, 6568, 6570, 3, 684, 342, 0, 6569, 6567, 1, 0, 0, 0, 6570, 6573, 1, 0, 0, 0, 6571, 6569, 1, 0, 0, 0, 6571, 6572, 1, 0, 0, 0, 6572, 6579, 1, 0, 0, 0, 6573, 6571, 1, 0, 0, 0, 6574, 6577, 5, 307, 0, 0, 6575, 6578, 3, 828, 414, 0, 6576, 6578, 5, 570, 0, 0, 6577, 6575, 1, 0, 0, 0, 6577, 6576, 1, 0, 0, 0, 6578, 6580, 1, 0, 0, 0, 6579, 6574, 1, 0, 0, 0, 6579, 6580, 1, 0, 0, 0, 6580, 6587, 1, 0, 0, 0, 6581, 6584, 5, 307, 0, 0, 6582, 6585, 3, 828, 414, 0, 6583, 6585, 5, 570, 0, 0, 6584, 6582, 1, 0, 0, 0, 6584, 6583, 1, 0, 0, 0, 6585, 6587, 1, 0, 0, 0, 6586, 6565, 1, 0, 0, 0, 6586, 6581, 1, 0, 0, 0, 6587, 681, 1, 0, 0, 0, 6588, 6589, 7, 41, 0, 0, 6589, 683, 1, 0, 0, 0, 6590, 6591, 5, 462, 0, 0, 6591, 6592, 7, 42, 0, 0, 6592, 6597, 5, 566, 0, 0, 6593, 6594, 5, 570, 0, 0, 6594, 6595, 7, 42, 0, 0, 6595, 6597, 5, 566, 0, 0, 6596, 6590, 1, 0, 0, 0, 6596, 6593, 1, 0, 0, 0, 6597, 685, 1, 0, 0, 0, 6598, 6599, 5, 566, 0, 0, 6599, 6600, 5, 539, 0, 0, 6600, 6601, 3, 688, 344, 0, 6601, 687, 1, 0, 0, 0, 6602, 6607, 5, 566, 0, 0, 6603, 6607, 5, 568, 0, 0, 6604, 6607, 3, 836, 418, 0, 6605, 6607, 5, 306, 0, 0, 6606, 6602, 1, 0, 0, 0, 6606, 6603, 1, 0, 0, 0, 6606, 6604, 1, 0, 0, 0, 6606, 6605, 1, 0, 0, 0, 6607, 689, 1, 0, 0, 0, 6608, 6609, 5, 67, 0, 0, 6609, 6610, 5, 364, 0, 0, 6610, 6611, 5, 23, 0, 0, 6611, 6614, 3, 828, 414, 0, 6612, 6613, 5, 457, 0, 0, 6613, 6615, 5, 570, 0, 0, 6614, 6612, 1, 0, 0, 0, 6614, 6615, 1, 0, 0, 0, 6615, 6791, 1, 0, 0, 0, 6616, 6617, 5, 67, 0, 0, 6617, 6618, 5, 364, 0, 0, 6618, 6619, 5, 117, 0, 0, 6619, 6622, 3, 828, 414, 0, 6620, 6621, 5, 457, 0, 0, 6621, 6623, 5, 570, 0, 0, 6622, 6620, 1, 0, 0, 0, 6622, 6623, 1, 0, 0, 0, 6623, 6791, 1, 0, 0, 0, 6624, 6625, 5, 67, 0, 0, 6625, 6626, 5, 364, 0, 0, 6626, 6627, 5, 426, 0, 0, 6627, 6791, 3, 828, 414, 0, 6628, 6629, 5, 67, 0, 0, 6629, 6630, 5, 23, 0, 0, 6630, 6791, 3, 828, 414, 0, 6631, 6632, 5, 67, 0, 0, 6632, 6633, 5, 27, 0, 0, 6633, 6791, 3, 828, 414, 0, 6634, 6635, 5, 67, 0, 0, 6635, 6636, 5, 30, 0, 0, 6636, 6791, 3, 828, 414, 0, 6637, 6638, 5, 67, 0, 0, 6638, 6639, 5, 31, 0, 0, 6639, 6791, 3, 828, 414, 0, 6640, 6641, 5, 67, 0, 0, 6641, 6642, 5, 32, 0, 0, 6642, 6791, 3, 828, 414, 0, 6643, 6644, 5, 67, 0, 0, 6644, 6645, 5, 33, 0, 0, 6645, 6791, 3, 828, 414, 0, 6646, 6647, 5, 67, 0, 0, 6647, 6648, 5, 34, 0, 0, 6648, 6791, 3, 828, 414, 0, 6649, 6650, 5, 67, 0, 0, 6650, 6651, 5, 35, 0, 0, 6651, 6791, 3, 828, 414, 0, 6652, 6653, 5, 67, 0, 0, 6653, 6654, 5, 28, 0, 0, 6654, 6791, 3, 828, 414, 0, 6655, 6656, 5, 67, 0, 0, 6656, 6657, 5, 37, 0, 0, 6657, 6791, 3, 828, 414, 0, 6658, 6659, 5, 67, 0, 0, 6659, 6660, 5, 115, 0, 0, 6660, 6661, 5, 117, 0, 0, 6661, 6791, 3, 828, 414, 0, 6662, 6663, 5, 67, 0, 0, 6663, 6664, 5, 116, 0, 0, 6664, 6665, 5, 117, 0, 0, 6665, 6791, 3, 828, 414, 0, 6666, 6667, 5, 67, 0, 0, 6667, 6668, 5, 29, 0, 0, 6668, 6671, 3, 830, 415, 0, 6669, 6670, 5, 140, 0, 0, 6670, 6672, 5, 86, 0, 0, 6671, 6669, 1, 0, 0, 0, 6671, 6672, 1, 0, 0, 0, 6672, 6791, 1, 0, 0, 0, 6673, 6674, 5, 67, 0, 0, 6674, 6675, 5, 29, 0, 0, 6675, 6676, 5, 474, 0, 0, 6676, 6791, 3, 828, 414, 0, 6677, 6678, 5, 67, 0, 0, 6678, 6679, 5, 486, 0, 0, 6679, 6680, 5, 474, 0, 0, 6680, 6791, 5, 566, 0, 0, 6681, 6682, 5, 67, 0, 0, 6682, 6683, 5, 481, 0, 0, 6683, 6684, 5, 486, 0, 0, 6684, 6791, 5, 566, 0, 0, 6685, 6686, 5, 67, 0, 0, 6686, 6687, 5, 332, 0, 0, 6687, 6688, 5, 359, 0, 0, 6688, 6791, 3, 828, 414, 0, 6689, 6690, 5, 67, 0, 0, 6690, 6691, 5, 332, 0, 0, 6691, 6692, 5, 330, 0, 0, 6692, 6791, 3, 828, 414, 0, 6693, 6694, 5, 67, 0, 0, 6694, 6695, 5, 26, 0, 0, 6695, 6696, 5, 23, 0, 0, 6696, 6791, 3, 828, 414, 0, 6697, 6698, 5, 67, 0, 0, 6698, 6701, 5, 394, 0, 0, 6699, 6702, 3, 828, 414, 0, 6700, 6702, 5, 570, 0, 0, 6701, 6699, 1, 0, 0, 0, 6701, 6700, 1, 0, 0, 0, 6701, 6702, 1, 0, 0, 0, 6702, 6791, 1, 0, 0, 0, 6703, 6704, 5, 67, 0, 0, 6704, 6705, 5, 216, 0, 0, 6705, 6706, 5, 94, 0, 0, 6706, 6707, 7, 1, 0, 0, 6707, 6710, 3, 828, 414, 0, 6708, 6709, 5, 189, 0, 0, 6709, 6711, 5, 570, 0, 0, 6710, 6708, 1, 0, 0, 0, 6710, 6711, 1, 0, 0, 0, 6711, 6791, 1, 0, 0, 0, 6712, 6713, 5, 67, 0, 0, 6713, 6714, 5, 431, 0, 0, 6714, 6715, 5, 551, 0, 0, 6715, 6791, 3, 696, 348, 0, 6716, 6717, 5, 67, 0, 0, 6717, 6718, 5, 464, 0, 0, 6718, 6719, 5, 465, 0, 0, 6719, 6720, 5, 330, 0, 0, 6720, 6791, 3, 828, 414, 0, 6721, 6722, 5, 67, 0, 0, 6722, 6723, 5, 373, 0, 0, 6723, 6724, 5, 372, 0, 0, 6724, 6791, 3, 828, 414, 0, 6725, 6726, 5, 67, 0, 0, 6726, 6791, 5, 468, 0, 0, 6727, 6728, 5, 67, 0, 0, 6728, 6729, 5, 410, 0, 0, 6729, 6730, 5, 72, 0, 0, 6730, 6731, 5, 33, 0, 0, 6731, 6732, 3, 828, 414, 0, 6732, 6733, 5, 189, 0, 0, 6733, 6734, 3, 830, 415, 0, 6734, 6791, 1, 0, 0, 0, 6735, 6736, 5, 67, 0, 0, 6736, 6737, 5, 410, 0, 0, 6737, 6738, 5, 72, 0, 0, 6738, 6739, 5, 34, 0, 0, 6739, 6740, 3, 828, 414, 0, 6740, 6741, 5, 189, 0, 0, 6741, 6742, 3, 830, 415, 0, 6742, 6791, 1, 0, 0, 0, 6743, 6744, 5, 67, 0, 0, 6744, 6745, 5, 229, 0, 0, 6745, 6746, 5, 230, 0, 0, 6746, 6791, 3, 828, 414, 0, 6747, 6748, 5, 67, 0, 0, 6748, 6749, 5, 231, 0, 0, 6749, 6791, 3, 828, 414, 0, 6750, 6751, 5, 67, 0, 0, 6751, 6752, 5, 233, 0, 0, 6752, 6791, 3, 828, 414, 0, 6753, 6754, 5, 67, 0, 0, 6754, 6755, 5, 236, 0, 0, 6755, 6756, 5, 333, 0, 0, 6756, 6791, 3, 828, 414, 0, 6757, 6758, 5, 67, 0, 0, 6758, 6759, 5, 238, 0, 0, 6759, 6760, 5, 239, 0, 0, 6760, 6761, 5, 330, 0, 0, 6761, 6791, 3, 828, 414, 0, 6762, 6763, 5, 67, 0, 0, 6763, 6764, 5, 349, 0, 0, 6764, 6765, 5, 440, 0, 0, 6765, 6791, 3, 828, 414, 0, 6766, 6767, 5, 67, 0, 0, 6767, 6768, 5, 378, 0, 0, 6768, 6769, 5, 376, 0, 0, 6769, 6791, 3, 828, 414, 0, 6770, 6771, 5, 67, 0, 0, 6771, 6772, 5, 384, 0, 0, 6772, 6773, 5, 376, 0, 0, 6773, 6791, 3, 828, 414, 0, 6774, 6775, 5, 67, 0, 0, 6775, 6776, 5, 329, 0, 0, 6776, 6777, 5, 359, 0, 0, 6777, 6791, 3, 828, 414, 0, 6778, 6779, 5, 67, 0, 0, 6779, 6780, 5, 362, 0, 0, 6780, 6781, 5, 329, 0, 0, 6781, 6782, 5, 330, 0, 0, 6782, 6791, 3, 828, 414, 0, 6783, 6784, 5, 67, 0, 0, 6784, 6785, 5, 518, 0, 0, 6785, 6786, 5, 520, 0, 0, 6786, 6791, 3, 828, 414, 0, 6787, 6788, 5, 67, 0, 0, 6788, 6789, 5, 410, 0, 0, 6789, 6791, 3, 830, 415, 0, 6790, 6608, 1, 0, 0, 0, 6790, 6616, 1, 0, 0, 0, 6790, 6624, 1, 0, 0, 0, 6790, 6628, 1, 0, 0, 0, 6790, 6631, 1, 0, 0, 0, 6790, 6634, 1, 0, 0, 0, 6790, 6637, 1, 0, 0, 0, 6790, 6640, 1, 0, 0, 0, 6790, 6643, 1, 0, 0, 0, 6790, 6646, 1, 0, 0, 0, 6790, 6649, 1, 0, 0, 0, 6790, 6652, 1, 0, 0, 0, 6790, 6655, 1, 0, 0, 0, 6790, 6658, 1, 0, 0, 0, 6790, 6662, 1, 0, 0, 0, 6790, 6666, 1, 0, 0, 0, 6790, 6673, 1, 0, 0, 0, 6790, 6677, 1, 0, 0, 0, 6790, 6681, 1, 0, 0, 0, 6790, 6685, 1, 0, 0, 0, 6790, 6689, 1, 0, 0, 0, 6790, 6693, 1, 0, 0, 0, 6790, 6697, 1, 0, 0, 0, 6790, 6703, 1, 0, 0, 0, 6790, 6712, 1, 0, 0, 0, 6790, 6716, 1, 0, 0, 0, 6790, 6721, 1, 0, 0, 0, 6790, 6725, 1, 0, 0, 0, 6790, 6727, 1, 0, 0, 0, 6790, 6735, 1, 0, 0, 0, 6790, 6743, 1, 0, 0, 0, 6790, 6747, 1, 0, 0, 0, 6790, 6750, 1, 0, 0, 0, 6790, 6753, 1, 0, 0, 0, 6790, 6757, 1, 0, 0, 0, 6790, 6762, 1, 0, 0, 0, 6790, 6766, 1, 0, 0, 0, 6790, 6770, 1, 0, 0, 0, 6790, 6774, 1, 0, 0, 0, 6790, 6778, 1, 0, 0, 0, 6790, 6783, 1, 0, 0, 0, 6790, 6787, 1, 0, 0, 0, 6791, 691, 1, 0, 0, 0, 6792, 6794, 5, 71, 0, 0, 6793, 6795, 7, 43, 0, 0, 6794, 6793, 1, 0, 0, 0, 6794, 6795, 1, 0, 0, 0, 6795, 6796, 1, 0, 0, 0, 6796, 6797, 3, 704, 352, 0, 6797, 6798, 5, 72, 0, 0, 6798, 6799, 5, 431, 0, 0, 6799, 6800, 5, 551, 0, 0, 6800, 6805, 3, 696, 348, 0, 6801, 6803, 5, 77, 0, 0, 6802, 6801, 1, 0, 0, 0, 6802, 6803, 1, 0, 0, 0, 6803, 6804, 1, 0, 0, 0, 6804, 6806, 5, 570, 0, 0, 6805, 6802, 1, 0, 0, 0, 6805, 6806, 1, 0, 0, 0, 6806, 6810, 1, 0, 0, 0, 6807, 6809, 3, 694, 347, 0, 6808, 6807, 1, 0, 0, 0, 6809, 6812, 1, 0, 0, 0, 6810, 6808, 1, 0, 0, 0, 6810, 6811, 1, 0, 0, 0, 6811, 6815, 1, 0, 0, 0, 6812, 6810, 1, 0, 0, 0, 6813, 6814, 5, 73, 0, 0, 6814, 6816, 3, 784, 392, 0, 6815, 6813, 1, 0, 0, 0, 6815, 6816, 1, 0, 0, 0, 6816, 6823, 1, 0, 0, 0, 6817, 6818, 5, 8, 0, 0, 6818, 6821, 3, 732, 366, 0, 6819, 6820, 5, 74, 0, 0, 6820, 6822, 3, 784, 392, 0, 6821, 6819, 1, 0, 0, 0, 6821, 6822, 1, 0, 0, 0, 6822, 6824, 1, 0, 0, 0, 6823, 6817, 1, 0, 0, 0, 6823, 6824, 1, 0, 0, 0, 6824, 6827, 1, 0, 0, 0, 6825, 6826, 5, 9, 0, 0, 6826, 6828, 3, 728, 364, 0, 6827, 6825, 1, 0, 0, 0, 6827, 6828, 1, 0, 0, 0, 6828, 6831, 1, 0, 0, 0, 6829, 6830, 5, 76, 0, 0, 6830, 6832, 5, 568, 0, 0, 6831, 6829, 1, 0, 0, 0, 6831, 6832, 1, 0, 0, 0, 6832, 6835, 1, 0, 0, 0, 6833, 6834, 5, 75, 0, 0, 6834, 6836, 5, 568, 0, 0, 6835, 6833, 1, 0, 0, 0, 6835, 6836, 1, 0, 0, 0, 6836, 693, 1, 0, 0, 0, 6837, 6839, 3, 718, 359, 0, 6838, 6837, 1, 0, 0, 0, 6838, 6839, 1, 0, 0, 0, 6839, 6840, 1, 0, 0, 0, 6840, 6841, 5, 87, 0, 0, 6841, 6842, 5, 431, 0, 0, 6842, 6843, 5, 551, 0, 0, 6843, 6848, 3, 696, 348, 0, 6844, 6846, 5, 77, 0, 0, 6845, 6844, 1, 0, 0, 0, 6845, 6846, 1, 0, 0, 0, 6846, 6847, 1, 0, 0, 0, 6847, 6849, 5, 570, 0, 0, 6848, 6845, 1, 0, 0, 0, 6848, 6849, 1, 0, 0, 0, 6849, 6852, 1, 0, 0, 0, 6850, 6851, 5, 94, 0, 0, 6851, 6853, 3, 784, 392, 0, 6852, 6850, 1, 0, 0, 0, 6852, 6853, 1, 0, 0, 0, 6853, 695, 1, 0, 0, 0, 6854, 6855, 7, 44, 0, 0, 6855, 697, 1, 0, 0, 0, 6856, 6864, 3, 700, 350, 0, 6857, 6859, 5, 126, 0, 0, 6858, 6860, 5, 86, 0, 0, 6859, 6858, 1, 0, 0, 0, 6859, 6860, 1, 0, 0, 0, 6860, 6861, 1, 0, 0, 0, 6861, 6863, 3, 700, 350, 0, 6862, 6857, 1, 0, 0, 0, 6863, 6866, 1, 0, 0, 0, 6864, 6862, 1, 0, 0, 0, 6864, 6865, 1, 0, 0, 0, 6865, 699, 1, 0, 0, 0, 6866, 6864, 1, 0, 0, 0, 6867, 6869, 3, 702, 351, 0, 6868, 6870, 3, 710, 355, 0, 6869, 6868, 1, 0, 0, 0, 6869, 6870, 1, 0, 0, 0, 6870, 6872, 1, 0, 0, 0, 6871, 6873, 3, 720, 360, 0, 6872, 6871, 1, 0, 0, 0, 6872, 6873, 1, 0, 0, 0, 6873, 6875, 1, 0, 0, 0, 6874, 6876, 3, 722, 361, 0, 6875, 6874, 1, 0, 0, 0, 6875, 6876, 1, 0, 0, 0, 6876, 6878, 1, 0, 0, 0, 6877, 6879, 3, 724, 362, 0, 6878, 6877, 1, 0, 0, 0, 6878, 6879, 1, 0, 0, 0, 6879, 6881, 1, 0, 0, 0, 6880, 6882, 3, 726, 363, 0, 6881, 6880, 1, 0, 0, 0, 6881, 6882, 1, 0, 0, 0, 6882, 6884, 1, 0, 0, 0, 6883, 6885, 3, 734, 367, 0, 6884, 6883, 1, 0, 0, 0, 6884, 6885, 1, 0, 0, 0, 6885, 6904, 1, 0, 0, 0, 6886, 6888, 3, 710, 355, 0, 6887, 6889, 3, 720, 360, 0, 6888, 6887, 1, 0, 0, 0, 6888, 6889, 1, 0, 0, 0, 6889, 6891, 1, 0, 0, 0, 6890, 6892, 3, 722, 361, 0, 6891, 6890, 1, 0, 0, 0, 6891, 6892, 1, 0, 0, 0, 6892, 6894, 1, 0, 0, 0, 6893, 6895, 3, 724, 362, 0, 6894, 6893, 1, 0, 0, 0, 6894, 6895, 1, 0, 0, 0, 6895, 6896, 1, 0, 0, 0, 6896, 6898, 3, 702, 351, 0, 6897, 6899, 3, 726, 363, 0, 6898, 6897, 1, 0, 0, 0, 6898, 6899, 1, 0, 0, 0, 6899, 6901, 1, 0, 0, 0, 6900, 6902, 3, 734, 367, 0, 6901, 6900, 1, 0, 0, 0, 6901, 6902, 1, 0, 0, 0, 6902, 6904, 1, 0, 0, 0, 6903, 6867, 1, 0, 0, 0, 6903, 6886, 1, 0, 0, 0, 6904, 701, 1, 0, 0, 0, 6905, 6907, 5, 71, 0, 0, 6906, 6908, 7, 43, 0, 0, 6907, 6906, 1, 0, 0, 0, 6907, 6908, 1, 0, 0, 0, 6908, 6909, 1, 0, 0, 0, 6909, 6910, 3, 704, 352, 0, 6910, 703, 1, 0, 0, 0, 6911, 6921, 5, 544, 0, 0, 6912, 6917, 3, 706, 353, 0, 6913, 6914, 5, 550, 0, 0, 6914, 6916, 3, 706, 353, 0, 6915, 6913, 1, 0, 0, 0, 6916, 6919, 1, 0, 0, 0, 6917, 6915, 1, 0, 0, 0, 6917, 6918, 1, 0, 0, 0, 6918, 6921, 1, 0, 0, 0, 6919, 6917, 1, 0, 0, 0, 6920, 6911, 1, 0, 0, 0, 6920, 6912, 1, 0, 0, 0, 6921, 705, 1, 0, 0, 0, 6922, 6925, 3, 784, 392, 0, 6923, 6924, 5, 77, 0, 0, 6924, 6926, 3, 708, 354, 0, 6925, 6923, 1, 0, 0, 0, 6925, 6926, 1, 0, 0, 0, 6926, 6933, 1, 0, 0, 0, 6927, 6930, 3, 812, 406, 0, 6928, 6929, 5, 77, 0, 0, 6929, 6931, 3, 708, 354, 0, 6930, 6928, 1, 0, 0, 0, 6930, 6931, 1, 0, 0, 0, 6931, 6933, 1, 0, 0, 0, 6932, 6922, 1, 0, 0, 0, 6932, 6927, 1, 0, 0, 0, 6933, 707, 1, 0, 0, 0, 6934, 6937, 5, 570, 0, 0, 6935, 6937, 3, 850, 425, 0, 6936, 6934, 1, 0, 0, 0, 6936, 6935, 1, 0, 0, 0, 6937, 709, 1, 0, 0, 0, 6938, 6939, 5, 72, 0, 0, 6939, 6943, 3, 712, 356, 0, 6940, 6942, 3, 714, 357, 0, 6941, 6940, 1, 0, 0, 0, 6942, 6945, 1, 0, 0, 0, 6943, 6941, 1, 0, 0, 0, 6943, 6944, 1, 0, 0, 0, 6944, 711, 1, 0, 0, 0, 6945, 6943, 1, 0, 0, 0, 6946, 6951, 3, 828, 414, 0, 6947, 6949, 5, 77, 0, 0, 6948, 6947, 1, 0, 0, 0, 6948, 6949, 1, 0, 0, 0, 6949, 6950, 1, 0, 0, 0, 6950, 6952, 5, 570, 0, 0, 6951, 6948, 1, 0, 0, 0, 6951, 6952, 1, 0, 0, 0, 6952, 6963, 1, 0, 0, 0, 6953, 6954, 5, 552, 0, 0, 6954, 6955, 3, 698, 349, 0, 6955, 6960, 5, 553, 0, 0, 6956, 6958, 5, 77, 0, 0, 6957, 6956, 1, 0, 0, 0, 6957, 6958, 1, 0, 0, 0, 6958, 6959, 1, 0, 0, 0, 6959, 6961, 5, 570, 0, 0, 6960, 6957, 1, 0, 0, 0, 6960, 6961, 1, 0, 0, 0, 6961, 6963, 1, 0, 0, 0, 6962, 6946, 1, 0, 0, 0, 6962, 6953, 1, 0, 0, 0, 6963, 713, 1, 0, 0, 0, 6964, 6966, 3, 718, 359, 0, 6965, 6964, 1, 0, 0, 0, 6965, 6966, 1, 0, 0, 0, 6966, 6967, 1, 0, 0, 0, 6967, 6968, 5, 87, 0, 0, 6968, 6971, 3, 712, 356, 0, 6969, 6970, 5, 94, 0, 0, 6970, 6972, 3, 784, 392, 0, 6971, 6969, 1, 0, 0, 0, 6971, 6972, 1, 0, 0, 0, 6972, 6985, 1, 0, 0, 0, 6973, 6975, 3, 718, 359, 0, 6974, 6973, 1, 0, 0, 0, 6974, 6975, 1, 0, 0, 0, 6975, 6976, 1, 0, 0, 0, 6976, 6977, 5, 87, 0, 0, 6977, 6982, 3, 716, 358, 0, 6978, 6980, 5, 77, 0, 0, 6979, 6978, 1, 0, 0, 0, 6979, 6980, 1, 0, 0, 0, 6980, 6981, 1, 0, 0, 0, 6981, 6983, 5, 570, 0, 0, 6982, 6979, 1, 0, 0, 0, 6982, 6983, 1, 0, 0, 0, 6983, 6985, 1, 0, 0, 0, 6984, 6965, 1, 0, 0, 0, 6984, 6974, 1, 0, 0, 0, 6985, 715, 1, 0, 0, 0, 6986, 6987, 5, 570, 0, 0, 6987, 6988, 5, 545, 0, 0, 6988, 6989, 3, 828, 414, 0, 6989, 6990, 5, 545, 0, 0, 6990, 6991, 3, 828, 414, 0, 6991, 6997, 1, 0, 0, 0, 6992, 6993, 3, 828, 414, 0, 6993, 6994, 5, 545, 0, 0, 6994, 6995, 3, 828, 414, 0, 6995, 6997, 1, 0, 0, 0, 6996, 6986, 1, 0, 0, 0, 6996, 6992, 1, 0, 0, 0, 6997, 717, 1, 0, 0, 0, 6998, 7000, 5, 88, 0, 0, 6999, 7001, 5, 91, 0, 0, 7000, 6999, 1, 0, 0, 0, 7000, 7001, 1, 0, 0, 0, 7001, 7013, 1, 0, 0, 0, 7002, 7004, 5, 89, 0, 0, 7003, 7005, 5, 91, 0, 0, 7004, 7003, 1, 0, 0, 0, 7004, 7005, 1, 0, 0, 0, 7005, 7013, 1, 0, 0, 0, 7006, 7013, 5, 90, 0, 0, 7007, 7009, 5, 92, 0, 0, 7008, 7010, 5, 91, 0, 0, 7009, 7008, 1, 0, 0, 0, 7009, 7010, 1, 0, 0, 0, 7010, 7013, 1, 0, 0, 0, 7011, 7013, 5, 93, 0, 0, 7012, 6998, 1, 0, 0, 0, 7012, 7002, 1, 0, 0, 0, 7012, 7006, 1, 0, 0, 0, 7012, 7007, 1, 0, 0, 0, 7012, 7011, 1, 0, 0, 0, 7013, 719, 1, 0, 0, 0, 7014, 7015, 5, 73, 0, 0, 7015, 7016, 3, 784, 392, 0, 7016, 721, 1, 0, 0, 0, 7017, 7018, 5, 8, 0, 0, 7018, 7019, 3, 822, 411, 0, 7019, 723, 1, 0, 0, 0, 7020, 7021, 5, 74, 0, 0, 7021, 7022, 3, 784, 392, 0, 7022, 725, 1, 0, 0, 0, 7023, 7024, 5, 9, 0, 0, 7024, 7025, 3, 728, 364, 0, 7025, 727, 1, 0, 0, 0, 7026, 7031, 3, 730, 365, 0, 7027, 7028, 5, 550, 0, 0, 7028, 7030, 3, 730, 365, 0, 7029, 7027, 1, 0, 0, 0, 7030, 7033, 1, 0, 0, 0, 7031, 7029, 1, 0, 0, 0, 7031, 7032, 1, 0, 0, 0, 7032, 729, 1, 0, 0, 0, 7033, 7031, 1, 0, 0, 0, 7034, 7036, 3, 784, 392, 0, 7035, 7037, 7, 10, 0, 0, 7036, 7035, 1, 0, 0, 0, 7036, 7037, 1, 0, 0, 0, 7037, 731, 1, 0, 0, 0, 7038, 7043, 3, 784, 392, 0, 7039, 7040, 5, 550, 0, 0, 7040, 7042, 3, 784, 392, 0, 7041, 7039, 1, 0, 0, 0, 7042, 7045, 1, 0, 0, 0, 7043, 7041, 1, 0, 0, 0, 7043, 7044, 1, 0, 0, 0, 7044, 733, 1, 0, 0, 0, 7045, 7043, 1, 0, 0, 0, 7046, 7047, 5, 76, 0, 0, 7047, 7050, 5, 568, 0, 0, 7048, 7049, 5, 75, 0, 0, 7049, 7051, 5, 568, 0, 0, 7050, 7048, 1, 0, 0, 0, 7050, 7051, 1, 0, 0, 0, 7051, 7059, 1, 0, 0, 0, 7052, 7053, 5, 75, 0, 0, 7053, 7056, 5, 568, 0, 0, 7054, 7055, 5, 76, 0, 0, 7055, 7057, 5, 568, 0, 0, 7056, 7054, 1, 0, 0, 0, 7056, 7057, 1, 0, 0, 0, 7057, 7059, 1, 0, 0, 0, 7058, 7046, 1, 0, 0, 0, 7058, 7052, 1, 0, 0, 0, 7059, 735, 1, 0, 0, 0, 7060, 7077, 3, 740, 370, 0, 7061, 7077, 3, 742, 371, 0, 7062, 7077, 3, 744, 372, 0, 7063, 7077, 3, 746, 373, 0, 7064, 7077, 3, 748, 374, 0, 7065, 7077, 3, 750, 375, 0, 7066, 7077, 3, 752, 376, 0, 7067, 7077, 3, 754, 377, 0, 7068, 7077, 3, 738, 369, 0, 7069, 7077, 3, 760, 380, 0, 7070, 7077, 3, 766, 383, 0, 7071, 7077, 3, 768, 384, 0, 7072, 7077, 3, 782, 391, 0, 7073, 7077, 3, 770, 385, 0, 7074, 7077, 3, 774, 387, 0, 7075, 7077, 3, 780, 390, 0, 7076, 7060, 1, 0, 0, 0, 7076, 7061, 1, 0, 0, 0, 7076, 7062, 1, 0, 0, 0, 7076, 7063, 1, 0, 0, 0, 7076, 7064, 1, 0, 0, 0, 7076, 7065, 1, 0, 0, 0, 7076, 7066, 1, 0, 0, 0, 7076, 7067, 1, 0, 0, 0, 7076, 7068, 1, 0, 0, 0, 7076, 7069, 1, 0, 0, 0, 7076, 7070, 1, 0, 0, 0, 7076, 7071, 1, 0, 0, 0, 7076, 7072, 1, 0, 0, 0, 7076, 7073, 1, 0, 0, 0, 7076, 7074, 1, 0, 0, 0, 7076, 7075, 1, 0, 0, 0, 7077, 737, 1, 0, 0, 0, 7078, 7079, 5, 159, 0, 0, 7079, 7080, 5, 566, 0, 0, 7080, 739, 1, 0, 0, 0, 7081, 7082, 5, 56, 0, 0, 7082, 7083, 5, 450, 0, 0, 7083, 7084, 5, 59, 0, 0, 7084, 7087, 5, 566, 0, 0, 7085, 7086, 5, 61, 0, 0, 7086, 7088, 5, 566, 0, 0, 7087, 7085, 1, 0, 0, 0, 7087, 7088, 1, 0, 0, 0, 7088, 7089, 1, 0, 0, 0, 7089, 7090, 5, 62, 0, 0, 7090, 7105, 5, 566, 0, 0, 7091, 7092, 5, 56, 0, 0, 7092, 7093, 5, 58, 0, 0, 7093, 7105, 5, 566, 0, 0, 7094, 7095, 5, 56, 0, 0, 7095, 7096, 5, 60, 0, 0, 7096, 7097, 5, 63, 0, 0, 7097, 7098, 5, 566, 0, 0, 7098, 7099, 5, 64, 0, 0, 7099, 7102, 5, 568, 0, 0, 7100, 7101, 5, 62, 0, 0, 7101, 7103, 5, 566, 0, 0, 7102, 7100, 1, 0, 0, 0, 7102, 7103, 1, 0, 0, 0, 7103, 7105, 1, 0, 0, 0, 7104, 7081, 1, 0, 0, 0, 7104, 7091, 1, 0, 0, 0, 7104, 7094, 1, 0, 0, 0, 7105, 741, 1, 0, 0, 0, 7106, 7107, 5, 57, 0, 0, 7107, 743, 1, 0, 0, 0, 7108, 7125, 5, 416, 0, 0, 7109, 7110, 5, 417, 0, 0, 7110, 7112, 5, 431, 0, 0, 7111, 7113, 5, 92, 0, 0, 7112, 7111, 1, 0, 0, 0, 7112, 7113, 1, 0, 0, 0, 7113, 7115, 1, 0, 0, 0, 7114, 7116, 5, 195, 0, 0, 7115, 7114, 1, 0, 0, 0, 7115, 7116, 1, 0, 0, 0, 7116, 7118, 1, 0, 0, 0, 7117, 7119, 5, 432, 0, 0, 7118, 7117, 1, 0, 0, 0, 7118, 7119, 1, 0, 0, 0, 7119, 7121, 1, 0, 0, 0, 7120, 7122, 5, 433, 0, 0, 7121, 7120, 1, 0, 0, 0, 7121, 7122, 1, 0, 0, 0, 7122, 7125, 1, 0, 0, 0, 7123, 7125, 5, 417, 0, 0, 7124, 7108, 1, 0, 0, 0, 7124, 7109, 1, 0, 0, 0, 7124, 7123, 1, 0, 0, 0, 7125, 745, 1, 0, 0, 0, 7126, 7127, 5, 418, 0, 0, 7127, 747, 1, 0, 0, 0, 7128, 7129, 5, 419, 0, 0, 7129, 749, 1, 0, 0, 0, 7130, 7131, 5, 420, 0, 0, 7131, 7132, 5, 421, 0, 0, 7132, 7133, 5, 566, 0, 0, 7133, 751, 1, 0, 0, 0, 7134, 7135, 5, 420, 0, 0, 7135, 7136, 5, 60, 0, 0, 7136, 7137, 5, 566, 0, 0, 7137, 753, 1, 0, 0, 0, 7138, 7140, 5, 422, 0, 0, 7139, 7141, 3, 756, 378, 0, 7140, 7139, 1, 0, 0, 0, 7140, 7141, 1, 0, 0, 0, 7141, 7144, 1, 0, 0, 0, 7142, 7143, 5, 457, 0, 0, 7143, 7145, 3, 758, 379, 0, 7144, 7142, 1, 0, 0, 0, 7144, 7145, 1, 0, 0, 0, 7145, 7150, 1, 0, 0, 0, 7146, 7147, 5, 65, 0, 0, 7147, 7148, 5, 422, 0, 0, 7148, 7150, 5, 423, 0, 0, 7149, 7138, 1, 0, 0, 0, 7149, 7146, 1, 0, 0, 0, 7150, 755, 1, 0, 0, 0, 7151, 7152, 3, 828, 414, 0, 7152, 7153, 5, 551, 0, 0, 7153, 7154, 5, 544, 0, 0, 7154, 7158, 1, 0, 0, 0, 7155, 7158, 3, 828, 414, 0, 7156, 7158, 5, 544, 0, 0, 7157, 7151, 1, 0, 0, 0, 7157, 7155, 1, 0, 0, 0, 7157, 7156, 1, 0, 0, 0, 7158, 757, 1, 0, 0, 0, 7159, 7160, 7, 45, 0, 0, 7160, 759, 1, 0, 0, 0, 7161, 7162, 5, 68, 0, 0, 7162, 7166, 3, 762, 381, 0, 7163, 7164, 5, 68, 0, 0, 7164, 7166, 5, 86, 0, 0, 7165, 7161, 1, 0, 0, 0, 7165, 7163, 1, 0, 0, 0, 7166, 761, 1, 0, 0, 0, 7167, 7172, 3, 764, 382, 0, 7168, 7169, 5, 550, 0, 0, 7169, 7171, 3, 764, 382, 0, 7170, 7168, 1, 0, 0, 0, 7171, 7174, 1, 0, 0, 0, 7172, 7170, 1, 0, 0, 0, 7172, 7173, 1, 0, 0, 0, 7173, 763, 1, 0, 0, 0, 7174, 7172, 1, 0, 0, 0, 7175, 7176, 7, 46, 0, 0, 7176, 765, 1, 0, 0, 0, 7177, 7178, 5, 69, 0, 0, 7178, 7179, 5, 358, 0, 0, 7179, 767, 1, 0, 0, 0, 7180, 7181, 5, 70, 0, 0, 7181, 7182, 5, 566, 0, 0, 7182, 769, 1, 0, 0, 0, 7183, 7184, 5, 458, 0, 0, 7184, 7185, 5, 56, 0, 0, 7185, 7186, 5, 570, 0, 0, 7186, 7187, 5, 566, 0, 0, 7187, 7188, 5, 77, 0, 0, 7188, 7243, 5, 570, 0, 0, 7189, 7190, 5, 458, 0, 0, 7190, 7191, 5, 57, 0, 0, 7191, 7243, 5, 570, 0, 0, 7192, 7193, 5, 458, 0, 0, 7193, 7243, 5, 408, 0, 0, 7194, 7195, 5, 458, 0, 0, 7195, 7196, 5, 570, 0, 0, 7196, 7197, 5, 65, 0, 0, 7197, 7243, 5, 570, 0, 0, 7198, 7199, 5, 458, 0, 0, 7199, 7200, 5, 570, 0, 0, 7200, 7201, 5, 67, 0, 0, 7201, 7243, 5, 570, 0, 0, 7202, 7203, 5, 458, 0, 0, 7203, 7204, 5, 570, 0, 0, 7204, 7205, 5, 385, 0, 0, 7205, 7206, 5, 386, 0, 0, 7206, 7207, 5, 381, 0, 0, 7207, 7220, 3, 830, 415, 0, 7208, 7209, 5, 388, 0, 0, 7209, 7210, 5, 552, 0, 0, 7210, 7215, 3, 830, 415, 0, 7211, 7212, 5, 550, 0, 0, 7212, 7214, 3, 830, 415, 0, 7213, 7211, 1, 0, 0, 0, 7214, 7217, 1, 0, 0, 0, 7215, 7213, 1, 0, 0, 0, 7215, 7216, 1, 0, 0, 0, 7216, 7218, 1, 0, 0, 0, 7217, 7215, 1, 0, 0, 0, 7218, 7219, 5, 553, 0, 0, 7219, 7221, 1, 0, 0, 0, 7220, 7208, 1, 0, 0, 0, 7220, 7221, 1, 0, 0, 0, 7221, 7234, 1, 0, 0, 0, 7222, 7223, 5, 389, 0, 0, 7223, 7224, 5, 552, 0, 0, 7224, 7229, 3, 830, 415, 0, 7225, 7226, 5, 550, 0, 0, 7226, 7228, 3, 830, 415, 0, 7227, 7225, 1, 0, 0, 0, 7228, 7231, 1, 0, 0, 0, 7229, 7227, 1, 0, 0, 0, 7229, 7230, 1, 0, 0, 0, 7230, 7232, 1, 0, 0, 0, 7231, 7229, 1, 0, 0, 0, 7232, 7233, 5, 553, 0, 0, 7233, 7235, 1, 0, 0, 0, 7234, 7222, 1, 0, 0, 0, 7234, 7235, 1, 0, 0, 0, 7235, 7237, 1, 0, 0, 0, 7236, 7238, 5, 387, 0, 0, 7237, 7236, 1, 0, 0, 0, 7237, 7238, 1, 0, 0, 0, 7238, 7243, 1, 0, 0, 0, 7239, 7240, 5, 458, 0, 0, 7240, 7241, 5, 570, 0, 0, 7241, 7243, 3, 772, 386, 0, 7242, 7183, 1, 0, 0, 0, 7242, 7189, 1, 0, 0, 0, 7242, 7192, 1, 0, 0, 0, 7242, 7194, 1, 0, 0, 0, 7242, 7198, 1, 0, 0, 0, 7242, 7202, 1, 0, 0, 0, 7242, 7239, 1, 0, 0, 0, 7243, 771, 1, 0, 0, 0, 7244, 7246, 8, 47, 0, 0, 7245, 7244, 1, 0, 0, 0, 7246, 7247, 1, 0, 0, 0, 7247, 7245, 1, 0, 0, 0, 7247, 7248, 1, 0, 0, 0, 7248, 773, 1, 0, 0, 0, 7249, 7250, 5, 378, 0, 0, 7250, 7251, 5, 72, 0, 0, 7251, 7252, 3, 830, 415, 0, 7252, 7253, 5, 374, 0, 0, 7253, 7254, 7, 16, 0, 0, 7254, 7255, 5, 381, 0, 0, 7255, 7256, 3, 828, 414, 0, 7256, 7257, 5, 375, 0, 0, 7257, 7258, 5, 552, 0, 0, 7258, 7263, 3, 776, 388, 0, 7259, 7260, 5, 550, 0, 0, 7260, 7262, 3, 776, 388, 0, 7261, 7259, 1, 0, 0, 0, 7262, 7265, 1, 0, 0, 0, 7263, 7261, 1, 0, 0, 0, 7263, 7264, 1, 0, 0, 0, 7264, 7266, 1, 0, 0, 0, 7265, 7263, 1, 0, 0, 0, 7266, 7279, 5, 553, 0, 0, 7267, 7268, 5, 383, 0, 0, 7268, 7269, 5, 552, 0, 0, 7269, 7274, 3, 778, 389, 0, 7270, 7271, 5, 550, 0, 0, 7271, 7273, 3, 778, 389, 0, 7272, 7270, 1, 0, 0, 0, 7273, 7276, 1, 0, 0, 0, 7274, 7272, 1, 0, 0, 0, 7274, 7275, 1, 0, 0, 0, 7275, 7277, 1, 0, 0, 0, 7276, 7274, 1, 0, 0, 0, 7277, 7278, 5, 553, 0, 0, 7278, 7280, 1, 0, 0, 0, 7279, 7267, 1, 0, 0, 0, 7279, 7280, 1, 0, 0, 0, 7280, 7283, 1, 0, 0, 0, 7281, 7282, 5, 382, 0, 0, 7282, 7284, 5, 568, 0, 0, 7283, 7281, 1, 0, 0, 0, 7283, 7284, 1, 0, 0, 0, 7284, 7287, 1, 0, 0, 0, 7285, 7286, 5, 76, 0, 0, 7286, 7288, 5, 568, 0, 0, 7287, 7285, 1, 0, 0, 0, 7287, 7288, 1, 0, 0, 0, 7288, 775, 1, 0, 0, 0, 7289, 7290, 3, 830, 415, 0, 7290, 7291, 5, 77, 0, 0, 7291, 7292, 3, 830, 415, 0, 7292, 777, 1, 0, 0, 0, 7293, 7294, 3, 830, 415, 0, 7294, 7295, 5, 450, 0, 0, 7295, 7296, 3, 830, 415, 0, 7296, 7297, 5, 94, 0, 0, 7297, 7298, 3, 830, 415, 0, 7298, 7304, 1, 0, 0, 0, 7299, 7300, 3, 830, 415, 0, 7300, 7301, 5, 450, 0, 0, 7301, 7302, 3, 830, 415, 0, 7302, 7304, 1, 0, 0, 0, 7303, 7293, 1, 0, 0, 0, 7303, 7299, 1, 0, 0, 0, 7304, 779, 1, 0, 0, 0, 7305, 7306, 5, 570, 0, 0, 7306, 781, 1, 0, 0, 0, 7307, 7308, 5, 409, 0, 0, 7308, 7309, 5, 410, 0, 0, 7309, 7310, 3, 830, 415, 0, 7310, 7311, 5, 77, 0, 0, 7311, 7312, 5, 554, 0, 0, 7312, 7313, 3, 484, 242, 0, 7313, 7314, 5, 555, 0, 0, 7314, 783, 1, 0, 0, 0, 7315, 7316, 3, 786, 393, 0, 7316, 785, 1, 0, 0, 0, 7317, 7322, 3, 788, 394, 0, 7318, 7319, 5, 304, 0, 0, 7319, 7321, 3, 788, 394, 0, 7320, 7318, 1, 0, 0, 0, 7321, 7324, 1, 0, 0, 0, 7322, 7320, 1, 0, 0, 0, 7322, 7323, 1, 0, 0, 0, 7323, 787, 1, 0, 0, 0, 7324, 7322, 1, 0, 0, 0, 7325, 7330, 3, 790, 395, 0, 7326, 7327, 5, 303, 0, 0, 7327, 7329, 3, 790, 395, 0, 7328, 7326, 1, 0, 0, 0, 7329, 7332, 1, 0, 0, 0, 7330, 7328, 1, 0, 0, 0, 7330, 7331, 1, 0, 0, 0, 7331, 789, 1, 0, 0, 0, 7332, 7330, 1, 0, 0, 0, 7333, 7335, 5, 305, 0, 0, 7334, 7333, 1, 0, 0, 0, 7334, 7335, 1, 0, 0, 0, 7335, 7336, 1, 0, 0, 0, 7336, 7337, 3, 792, 396, 0, 7337, 791, 1, 0, 0, 0, 7338, 7367, 3, 796, 398, 0, 7339, 7340, 3, 794, 397, 0, 7340, 7341, 3, 796, 398, 0, 7341, 7368, 1, 0, 0, 0, 7342, 7368, 5, 6, 0, 0, 7343, 7368, 5, 5, 0, 0, 7344, 7345, 5, 307, 0, 0, 7345, 7348, 5, 552, 0, 0, 7346, 7349, 3, 698, 349, 0, 7347, 7349, 3, 822, 411, 0, 7348, 7346, 1, 0, 0, 0, 7348, 7347, 1, 0, 0, 0, 7349, 7350, 1, 0, 0, 0, 7350, 7351, 5, 553, 0, 0, 7351, 7368, 1, 0, 0, 0, 7352, 7354, 5, 305, 0, 0, 7353, 7352, 1, 0, 0, 0, 7353, 7354, 1, 0, 0, 0, 7354, 7355, 1, 0, 0, 0, 7355, 7356, 5, 308, 0, 0, 7356, 7357, 3, 796, 398, 0, 7357, 7358, 5, 303, 0, 0, 7358, 7359, 3, 796, 398, 0, 7359, 7368, 1, 0, 0, 0, 7360, 7362, 5, 305, 0, 0, 7361, 7360, 1, 0, 0, 0, 7361, 7362, 1, 0, 0, 0, 7362, 7363, 1, 0, 0, 0, 7363, 7364, 5, 309, 0, 0, 7364, 7368, 3, 796, 398, 0, 7365, 7366, 5, 310, 0, 0, 7366, 7368, 3, 796, 398, 0, 7367, 7339, 1, 0, 0, 0, 7367, 7342, 1, 0, 0, 0, 7367, 7343, 1, 0, 0, 0, 7367, 7344, 1, 0, 0, 0, 7367, 7353, 1, 0, 0, 0, 7367, 7361, 1, 0, 0, 0, 7367, 7365, 1, 0, 0, 0, 7367, 7368, 1, 0, 0, 0, 7368, 793, 1, 0, 0, 0, 7369, 7370, 7, 48, 0, 0, 7370, 795, 1, 0, 0, 0, 7371, 7376, 3, 798, 399, 0, 7372, 7373, 7, 49, 0, 0, 7373, 7375, 3, 798, 399, 0, 7374, 7372, 1, 0, 0, 0, 7375, 7378, 1, 0, 0, 0, 7376, 7374, 1, 0, 0, 0, 7376, 7377, 1, 0, 0, 0, 7377, 797, 1, 0, 0, 0, 7378, 7376, 1, 0, 0, 0, 7379, 7384, 3, 800, 400, 0, 7380, 7381, 7, 50, 0, 0, 7381, 7383, 3, 800, 400, 0, 7382, 7380, 1, 0, 0, 0, 7383, 7386, 1, 0, 0, 0, 7384, 7382, 1, 0, 0, 0, 7384, 7385, 1, 0, 0, 0, 7385, 799, 1, 0, 0, 0, 7386, 7384, 1, 0, 0, 0, 7387, 7389, 7, 49, 0, 0, 7388, 7387, 1, 0, 0, 0, 7388, 7389, 1, 0, 0, 0, 7389, 7390, 1, 0, 0, 0, 7390, 7391, 3, 802, 401, 0, 7391, 801, 1, 0, 0, 0, 7392, 7393, 5, 552, 0, 0, 7393, 7394, 3, 784, 392, 0, 7394, 7395, 5, 553, 0, 0, 7395, 7414, 1, 0, 0, 0, 7396, 7397, 5, 552, 0, 0, 7397, 7398, 3, 698, 349, 0, 7398, 7399, 5, 553, 0, 0, 7399, 7414, 1, 0, 0, 0, 7400, 7401, 5, 311, 0, 0, 7401, 7402, 5, 552, 0, 0, 7402, 7403, 3, 698, 349, 0, 7403, 7404, 5, 553, 0, 0, 7404, 7414, 1, 0, 0, 0, 7405, 7414, 3, 806, 403, 0, 7406, 7414, 3, 804, 402, 0, 7407, 7414, 3, 808, 404, 0, 7408, 7414, 3, 408, 204, 0, 7409, 7414, 3, 400, 200, 0, 7410, 7414, 3, 812, 406, 0, 7411, 7414, 3, 814, 407, 0, 7412, 7414, 3, 820, 410, 0, 7413, 7392, 1, 0, 0, 0, 7413, 7396, 1, 0, 0, 0, 7413, 7400, 1, 0, 0, 0, 7413, 7405, 1, 0, 0, 0, 7413, 7406, 1, 0, 0, 0, 7413, 7407, 1, 0, 0, 0, 7413, 7408, 1, 0, 0, 0, 7413, 7409, 1, 0, 0, 0, 7413, 7410, 1, 0, 0, 0, 7413, 7411, 1, 0, 0, 0, 7413, 7412, 1, 0, 0, 0, 7414, 803, 1, 0, 0, 0, 7415, 7421, 5, 80, 0, 0, 7416, 7417, 5, 81, 0, 0, 7417, 7418, 3, 784, 392, 0, 7418, 7419, 5, 82, 0, 0, 7419, 7420, 3, 784, 392, 0, 7420, 7422, 1, 0, 0, 0, 7421, 7416, 1, 0, 0, 0, 7422, 7423, 1, 0, 0, 0, 7423, 7421, 1, 0, 0, 0, 7423, 7424, 1, 0, 0, 0, 7424, 7427, 1, 0, 0, 0, 7425, 7426, 5, 83, 0, 0, 7426, 7428, 3, 784, 392, 0, 7427, 7425, 1, 0, 0, 0, 7427, 7428, 1, 0, 0, 0, 7428, 7429, 1, 0, 0, 0, 7429, 7430, 5, 84, 0, 0, 7430, 805, 1, 0, 0, 0, 7431, 7432, 5, 106, 0, 0, 7432, 7433, 3, 784, 392, 0, 7433, 7434, 5, 82, 0, 0, 7434, 7435, 3, 784, 392, 0, 7435, 7436, 5, 83, 0, 0, 7436, 7437, 3, 784, 392, 0, 7437, 807, 1, 0, 0, 0, 7438, 7439, 5, 302, 0, 0, 7439, 7440, 5, 552, 0, 0, 7440, 7441, 3, 784, 392, 0, 7441, 7442, 5, 77, 0, 0, 7442, 7443, 3, 810, 405, 0, 7443, 7444, 5, 553, 0, 0, 7444, 809, 1, 0, 0, 0, 7445, 7446, 7, 51, 0, 0, 7446, 811, 1, 0, 0, 0, 7447, 7448, 7, 52, 0, 0, 7448, 7454, 5, 552, 0, 0, 7449, 7451, 5, 85, 0, 0, 7450, 7449, 1, 0, 0, 0, 7450, 7451, 1, 0, 0, 0, 7451, 7452, 1, 0, 0, 0, 7452, 7455, 3, 784, 392, 0, 7453, 7455, 5, 544, 0, 0, 7454, 7450, 1, 0, 0, 0, 7454, 7453, 1, 0, 0, 0, 7455, 7456, 1, 0, 0, 0, 7456, 7457, 5, 553, 0, 0, 7457, 813, 1, 0, 0, 0, 7458, 7459, 3, 816, 408, 0, 7459, 7461, 5, 552, 0, 0, 7460, 7462, 3, 818, 409, 0, 7461, 7460, 1, 0, 0, 0, 7461, 7462, 1, 0, 0, 0, 7462, 7463, 1, 0, 0, 0, 7463, 7464, 5, 553, 0, 0, 7464, 815, 1, 0, 0, 0, 7465, 7466, 7, 53, 0, 0, 7466, 817, 1, 0, 0, 0, 7467, 7472, 3, 784, 392, 0, 7468, 7469, 5, 550, 0, 0, 7469, 7471, 3, 784, 392, 0, 7470, 7468, 1, 0, 0, 0, 7471, 7474, 1, 0, 0, 0, 7472, 7470, 1, 0, 0, 0, 7472, 7473, 1, 0, 0, 0, 7473, 819, 1, 0, 0, 0, 7474, 7472, 1, 0, 0, 0, 7475, 7490, 3, 832, 416, 0, 7476, 7481, 5, 569, 0, 0, 7477, 7478, 5, 551, 0, 0, 7478, 7480, 3, 122, 61, 0, 7479, 7477, 1, 0, 0, 0, 7480, 7483, 1, 0, 0, 0, 7481, 7479, 1, 0, 0, 0, 7481, 7482, 1, 0, 0, 0, 7482, 7490, 1, 0, 0, 0, 7483, 7481, 1, 0, 0, 0, 7484, 7485, 5, 559, 0, 0, 7485, 7490, 3, 828, 414, 0, 7486, 7490, 3, 828, 414, 0, 7487, 7490, 5, 570, 0, 0, 7488, 7490, 5, 565, 0, 0, 7489, 7475, 1, 0, 0, 0, 7489, 7476, 1, 0, 0, 0, 7489, 7484, 1, 0, 0, 0, 7489, 7486, 1, 0, 0, 0, 7489, 7487, 1, 0, 0, 0, 7489, 7488, 1, 0, 0, 0, 7490, 821, 1, 0, 0, 0, 7491, 7496, 3, 784, 392, 0, 7492, 7493, 5, 550, 0, 0, 7493, 7495, 3, 784, 392, 0, 7494, 7492, 1, 0, 0, 0, 7495, 7498, 1, 0, 0, 0, 7496, 7494, 1, 0, 0, 0, 7496, 7497, 1, 0, 0, 0, 7497, 823, 1, 0, 0, 0, 7498, 7496, 1, 0, 0, 0, 7499, 7500, 5, 518, 0, 0, 7500, 7501, 5, 520, 0, 0, 7501, 7502, 3, 828, 414, 0, 7502, 7503, 5, 195, 0, 0, 7503, 7504, 7, 54, 0, 0, 7504, 7505, 5, 566, 0, 0, 7505, 7509, 5, 554, 0, 0, 7506, 7508, 3, 826, 413, 0, 7507, 7506, 1, 0, 0, 0, 7508, 7511, 1, 0, 0, 0, 7509, 7507, 1, 0, 0, 0, 7509, 7510, 1, 0, 0, 0, 7510, 7512, 1, 0, 0, 0, 7511, 7509, 1, 0, 0, 0, 7512, 7513, 5, 555, 0, 0, 7513, 825, 1, 0, 0, 0, 7514, 7515, 7, 55, 0, 0, 7515, 7517, 7, 16, 0, 0, 7516, 7518, 5, 549, 0, 0, 7517, 7516, 1, 0, 0, 0, 7517, 7518, 1, 0, 0, 0, 7518, 827, 1, 0, 0, 0, 7519, 7524, 3, 830, 415, 0, 7520, 7521, 5, 551, 0, 0, 7521, 7523, 3, 830, 415, 0, 7522, 7520, 1, 0, 0, 0, 7523, 7526, 1, 0, 0, 0, 7524, 7522, 1, 0, 0, 0, 7524, 7525, 1, 0, 0, 0, 7525, 829, 1, 0, 0, 0, 7526, 7524, 1, 0, 0, 0, 7527, 7531, 5, 570, 0, 0, 7528, 7531, 5, 572, 0, 0, 7529, 7531, 3, 850, 425, 0, 7530, 7527, 1, 0, 0, 0, 7530, 7528, 1, 0, 0, 0, 7530, 7529, 1, 0, 0, 0, 7531, 831, 1, 0, 0, 0, 7532, 7538, 5, 566, 0, 0, 7533, 7538, 5, 568, 0, 0, 7534, 7538, 3, 836, 418, 0, 7535, 7538, 5, 306, 0, 0, 7536, 7538, 5, 141, 0, 0, 7537, 7532, 1, 0, 0, 0, 7537, 7533, 1, 0, 0, 0, 7537, 7534, 1, 0, 0, 0, 7537, 7535, 1, 0, 0, 0, 7537, 7536, 1, 0, 0, 0, 7538, 833, 1, 0, 0, 0, 7539, 7548, 5, 556, 0, 0, 7540, 7545, 3, 832, 416, 0, 7541, 7542, 5, 550, 0, 0, 7542, 7544, 3, 832, 416, 0, 7543, 7541, 1, 0, 0, 0, 7544, 7547, 1, 0, 0, 0, 7545, 7543, 1, 0, 0, 0, 7545, 7546, 1, 0, 0, 0, 7546, 7549, 1, 0, 0, 0, 7547, 7545, 1, 0, 0, 0, 7548, 7540, 1, 0, 0, 0, 7548, 7549, 1, 0, 0, 0, 7549, 7550, 1, 0, 0, 0, 7550, 7551, 5, 557, 0, 0, 7551, 835, 1, 0, 0, 0, 7552, 7553, 7, 56, 0, 0, 7553, 837, 1, 0, 0, 0, 7554, 7555, 5, 2, 0, 0, 7555, 839, 1, 0, 0, 0, 7556, 7557, 5, 559, 0, 0, 7557, 7563, 3, 842, 421, 0, 7558, 7559, 5, 552, 0, 0, 7559, 7560, 3, 844, 422, 0, 7560, 7561, 5, 553, 0, 0, 7561, 7564, 1, 0, 0, 0, 7562, 7564, 3, 848, 424, 0, 7563, 7558, 1, 0, 0, 0, 7563, 7562, 1, 0, 0, 0, 7563, 7564, 1, 0, 0, 0, 7564, 841, 1, 0, 0, 0, 7565, 7566, 7, 57, 0, 0, 7566, 843, 1, 0, 0, 0, 7567, 7572, 3, 846, 423, 0, 7568, 7569, 5, 550, 0, 0, 7569, 7571, 3, 846, 423, 0, 7570, 7568, 1, 0, 0, 0, 7571, 7574, 1, 0, 0, 0, 7572, 7570, 1, 0, 0, 0, 7572, 7573, 1, 0, 0, 0, 7573, 845, 1, 0, 0, 0, 7574, 7572, 1, 0, 0, 0, 7575, 7576, 5, 570, 0, 0, 7576, 7577, 5, 558, 0, 0, 7577, 7580, 3, 848, 424, 0, 7578, 7580, 3, 848, 424, 0, 7579, 7575, 1, 0, 0, 0, 7579, 7578, 1, 0, 0, 0, 7580, 847, 1, 0, 0, 0, 7581, 7585, 3, 832, 416, 0, 7582, 7585, 3, 784, 392, 0, 7583, 7585, 3, 828, 414, 0, 7584, 7581, 1, 0, 0, 0, 7584, 7582, 1, 0, 0, 0, 7584, 7583, 1, 0, 0, 0, 7585, 849, 1, 0, 0, 0, 7586, 7587, 7, 58, 0, 0, 7587, 851, 1, 0, 0, 0, 872, 855, 861, 866, 869, 872, 881, 891, 900, 906, 908, 912, 915, 920, 926, 962, 970, 978, 986, 994, 1006, 1019, 1032, 1044, 1055, 1065, 1068, 1077, 1082, 1085, 1093, 1101, 1113, 1119, 1136, 1140, 1144, 1148, 1152, 1156, 1160, 1162, 1175, 1180, 1194, 1203, 1219, 1235, 1244, 1259, 1274, 1288, 1292, 1301, 1304, 1312, 1317, 1319, 1430, 1432, 1441, 1450, 1452, 1465, 1474, 1476, 1487, 1493, 1501, 1512, 1514, 1522, 1524, 1545, 1553, 1569, 1593, 1609, 1619, 1718, 1727, 1735, 1749, 1756, 1764, 1778, 1791, 1795, 1801, 1804, 1810, 1813, 1819, 1823, 1827, 1833, 1838, 1841, 1843, 1849, 1853, 1857, 1860, 1864, 1869, 1877, 1886, 1889, 1893, 1904, 1908, 1913, 1922, 1928, 1933, 1939, 1944, 1949, 1954, 1958, 1961, 1963, 1969, 2005, 2013, 2038, 2041, 2052, 2057, 2062, 2071, 2084, 2089, 2094, 2098, 2103, 2108, 2115, 2141, 2147, 2154, 2160, 2199, 2213, 2220, 2233, 2240, 2248, 2253, 2258, 2264, 2272, 2279, 2283, 2287, 2290, 2295, 2300, 2309, 2312, 2317, 2324, 2332, 2346, 2356, 2391, 2398, 2415, 2429, 2442, 2447, 2453, 2467, 2481, 2494, 2499, 2506, 2510, 2521, 2526, 2536, 2550, 2560, 2577, 2600, 2602, 2609, 2615, 2618, 2632, 2645, 2661, 2676, 2712, 2727, 2734, 2742, 2749, 2753, 2756, 2762, 2765, 2772, 2776, 2779, 2784, 2791, 2798, 2814, 2819, 2827, 2833, 2838, 2844, 2849, 2855, 2860, 2865, 2870, 2875, 2880, 2885, 2890, 2895, 2900, 2905, 2910, 2915, 2920, 2925, 2930, 2935, 2940, 2945, 2950, 2955, 2960, 2965, 2970, 2975, 2980, 2985, 2990, 2995, 3000, 3005, 3010, 3015, 3020, 3025, 3030, 3035, 3040, 3045, 3050, 3055, 3060, 3065, 3070, 3075, 3080, 3085, 3090, 3095, 3100, 3105, 3110, 3115, 3120, 3125, 3130, 3135, 3140, 3145, 3150, 3155, 3160, 3165, 3170, 3175, 3180, 3185, 3190, 3195, 3200, 3205, 3210, 3215, 3220, 3225, 3230, 3235, 3240, 3245, 3250, 3255, 3260, 3265, 3270, 3275, 3280, 3285, 3290, 3295, 3300, 3305, 3310, 3315, 3320, 3322, 3329, 3334, 3341, 3347, 3350, 3353, 3359, 3362, 3368, 3372, 3378, 3381, 3384, 3389, 3394, 3403, 3408, 3412, 3414, 3422, 3425, 3429, 3433, 3436, 3448, 3470, 3483, 3488, 3498, 3508, 3513, 3521, 3528, 3532, 3536, 3547, 3554, 3568, 3575, 3579, 3583, 3591, 3595, 3599, 3609, 3611, 3615, 3618, 3623, 3626, 3629, 3633, 3641, 3645, 3649, 3656, 3660, 3664, 3673, 3677, 3684, 3688, 3696, 3702, 3708, 3720, 3728, 3735, 3739, 3745, 3751, 3757, 3763, 3770, 3775, 3785, 3788, 3792, 3796, 3803, 3810, 3816, 3830, 3837, 3852, 3856, 3863, 3868, 3872, 3875, 3878, 3882, 3888, 3906, 3911, 3919, 3938, 3942, 3949, 3952, 3955, 3964, 3978, 3988, 3992, 4002, 4006, 4013, 4085, 4087, 4090, 4097, 4102, 4132, 4155, 4166, 4173, 4190, 4193, 4202, 4212, 4224, 4236, 4247, 4250, 4263, 4271, 4277, 4283, 4291, 4298, 4306, 4313, 4320, 4332, 4335, 4347, 4371, 4379, 4387, 4407, 4411, 4413, 4421, 4426, 4429, 4435, 4438, 4444, 4447, 4449, 4459, 4558, 4568, 4579, 4585, 4590, 4594, 4596, 4604, 4607, 4612, 4617, 4623, 4630, 4635, 4639, 4645, 4651, 4656, 4661, 4666, 4673, 4681, 4692, 4697, 4703, 4707, 4716, 4718, 4720, 4728, 4764, 4767, 4770, 4778, 4785, 4796, 4805, 4811, 4819, 4828, 4836, 4842, 4846, 4855, 4867, 4873, 4875, 4888, 4892, 4904, 4909, 4911, 4926, 4931, 4940, 4949, 4952, 4963, 4971, 5002, 5007, 5010, 5015, 5023, 5052, 5065, 5089, 5093, 5095, 5108, 5114, 5117, 5128, 5132, 5135, 5137, 5151, 5159, 5174, 5181, 5186, 5191, 5196, 5200, 5203, 5224, 5229, 5240, 5245, 5251, 5255, 5263, 5268, 5284, 5292, 5295, 5302, 5310, 5315, 5318, 5321, 5331, 5334, 5341, 5344, 5352, 5370, 5376, 5379, 5388, 5390, 5399, 5404, 5409, 5414, 5424, 5443, 5451, 5463, 5470, 5474, 5488, 5492, 5496, 5501, 5506, 5511, 5518, 5521, 5526, 5556, 5564, 5568, 5572, 5576, 5580, 5584, 5589, 5593, 5599, 5601, 5608, 5610, 5619, 5623, 5627, 5631, 5635, 5639, 5644, 5648, 5654, 5656, 5663, 5665, 5667, 5672, 5678, 5684, 5690, 5694, 5700, 5702, 5714, 5723, 5728, 5734, 5736, 5743, 5745, 5756, 5765, 5770, 5774, 5778, 5784, 5786, 5798, 5803, 5816, 5822, 5826, 5833, 5840, 5842, 5921, 5940, 5955, 5960, 5965, 5967, 5975, 5983, 5988, 5996, 6005, 6008, 6020, 6026, 6062, 6064, 6071, 6073, 6080, 6082, 6089, 6091, 6098, 6100, 6107, 6109, 6116, 6118, 6125, 6127, 6134, 6136, 6144, 6146, 6153, 6155, 6162, 6164, 6172, 6174, 6182, 6184, 6192, 6194, 6201, 6203, 6210, 6212, 6220, 6222, 6231, 6233, 6241, 6243, 6251, 6253, 6261, 6263, 6299, 6306, 6324, 6329, 6341, 6343, 6382, 6384, 6392, 6394, 6402, 6404, 6412, 6414, 6422, 6424, 6434, 6445, 6451, 6456, 6458, 6461, 6470, 6472, 6481, 6483, 6491, 6493, 6507, 6509, 6517, 6519, 6528, 6530, 6538, 6540, 6549, 6563, 6571, 6577, 6579, 6584, 6586, 6596, 6606, 6614, 6622, 6671, 6701, 6710, 6790, 6794, 6802, 6805, 6810, 6815, 6821, 6823, 6827, 6831, 6835, 6838, 6845, 6848, 6852, 6859, 6864, 6869, 6872, 6875, 6878, 6881, 6884, 6888, 6891, 6894, 6898, 6901, 6903, 6907, 6917, 6920, 6925, 6930, 6932, 6936, 6943, 6948, 6951, 6957, 6960, 6962, 6965, 6971, 6974, 6979, 6982, 6984, 6996, 7000, 7004, 7009, 7012, 7031, 7036, 7043, 7050, 7056, 7058, 7076, 7087, 7102, 7104, 7112, 7115, 7118, 7121, 7124, 7140, 7144, 7149, 7157, 7165, 7172, 7215, 7220, 7229, 7234, 7237, 7242, 7247, 7263, 7274, 7279, 7283, 7287, 7303, 7322, 7330, 7334, 7348, 7353, 7361, 7367, 7376, 7384, 7388, 7413, 7423, 7427, 7450, 7454, 7461, 7472, 7481, 7489, 7496, 7509, 7517, 7524, 7530, 7537, 7545, 7548, 7563, 7572, 7579, 7584] \ No newline at end of file +[4, 1, 572, 7594, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 2, 360, 7, 360, 2, 361, 7, 361, 2, 362, 7, 362, 2, 363, 7, 363, 2, 364, 7, 364, 2, 365, 7, 365, 2, 366, 7, 366, 2, 367, 7, 367, 2, 368, 7, 368, 2, 369, 7, 369, 2, 370, 7, 370, 2, 371, 7, 371, 2, 372, 7, 372, 2, 373, 7, 373, 2, 374, 7, 374, 2, 375, 7, 375, 2, 376, 7, 376, 2, 377, 7, 377, 2, 378, 7, 378, 2, 379, 7, 379, 2, 380, 7, 380, 2, 381, 7, 381, 2, 382, 7, 382, 2, 383, 7, 383, 2, 384, 7, 384, 2, 385, 7, 385, 2, 386, 7, 386, 2, 387, 7, 387, 2, 388, 7, 388, 2, 389, 7, 389, 2, 390, 7, 390, 2, 391, 7, 391, 2, 392, 7, 392, 2, 393, 7, 393, 2, 394, 7, 394, 2, 395, 7, 395, 2, 396, 7, 396, 2, 397, 7, 397, 2, 398, 7, 398, 2, 399, 7, 399, 2, 400, 7, 400, 2, 401, 7, 401, 2, 402, 7, 402, 2, 403, 7, 403, 2, 404, 7, 404, 2, 405, 7, 405, 2, 406, 7, 406, 2, 407, 7, 407, 2, 408, 7, 408, 2, 409, 7, 409, 2, 410, 7, 410, 2, 411, 7, 411, 2, 412, 7, 412, 2, 413, 7, 413, 2, 414, 7, 414, 2, 415, 7, 415, 2, 416, 7, 416, 2, 417, 7, 417, 2, 418, 7, 418, 2, 419, 7, 419, 2, 420, 7, 420, 2, 421, 7, 421, 2, 422, 7, 422, 2, 423, 7, 423, 2, 424, 7, 424, 2, 425, 7, 425, 1, 0, 5, 0, 854, 8, 0, 10, 0, 12, 0, 857, 9, 0, 1, 0, 1, 0, 1, 1, 3, 1, 862, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 867, 8, 1, 1, 1, 3, 1, 870, 8, 1, 1, 1, 3, 1, 873, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 882, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 890, 8, 3, 10, 3, 12, 3, 893, 9, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 899, 8, 3, 10, 3, 12, 3, 902, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 907, 8, 3, 3, 3, 909, 8, 3, 1, 3, 1, 3, 3, 3, 913, 8, 3, 1, 4, 3, 4, 916, 8, 4, 1, 4, 5, 4, 919, 8, 4, 10, 4, 12, 4, 922, 9, 4, 1, 4, 1, 4, 1, 4, 3, 4, 927, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 963, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 969, 8, 5, 11, 5, 12, 5, 970, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 977, 8, 5, 11, 5, 12, 5, 978, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 985, 8, 5, 11, 5, 12, 5, 986, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 993, 8, 5, 11, 5, 12, 5, 994, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 1005, 8, 5, 10, 5, 12, 5, 1008, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 1018, 8, 5, 10, 5, 12, 5, 1021, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 1031, 8, 5, 11, 5, 12, 5, 1032, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 1043, 8, 5, 11, 5, 12, 5, 1044, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 1054, 8, 5, 11, 5, 12, 5, 1055, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 4, 5, 1064, 8, 5, 11, 5, 12, 5, 1065, 1, 5, 3, 5, 1069, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 1078, 8, 5, 1, 5, 5, 5, 1081, 8, 5, 10, 5, 12, 5, 1084, 9, 5, 3, 5, 1086, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 1092, 8, 6, 10, 6, 12, 6, 1095, 9, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1102, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 1112, 8, 8, 10, 8, 12, 8, 1115, 9, 8, 1, 8, 1, 8, 1, 8, 3, 8, 1120, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 1137, 8, 9, 1, 10, 1, 10, 3, 10, 1141, 8, 10, 1, 10, 1, 10, 3, 10, 1145, 8, 10, 1, 10, 1, 10, 3, 10, 1149, 8, 10, 1, 10, 1, 10, 3, 10, 1153, 8, 10, 1, 10, 1, 10, 3, 10, 1157, 8, 10, 1, 10, 1, 10, 3, 10, 1161, 8, 10, 3, 10, 1163, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 1174, 8, 11, 10, 11, 12, 11, 1177, 9, 11, 1, 11, 1, 11, 3, 11, 1181, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 1193, 8, 11, 10, 11, 12, 11, 1196, 9, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 1204, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 1220, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1236, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 1243, 8, 15, 10, 15, 12, 15, 1246, 9, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1260, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 1275, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 1287, 8, 20, 10, 20, 12, 20, 1290, 9, 20, 1, 20, 3, 20, 1293, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1302, 8, 21, 1, 21, 3, 21, 1305, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 1311, 8, 21, 10, 21, 12, 21, 1314, 9, 21, 1, 21, 1, 21, 3, 21, 1318, 8, 21, 3, 21, 1320, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 1431, 8, 22, 3, 22, 1433, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 1442, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 1451, 8, 23, 3, 23, 1453, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1466, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1475, 8, 25, 3, 25, 1477, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1488, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1494, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1502, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1513, 8, 25, 3, 25, 1515, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1523, 8, 25, 3, 25, 1525, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 1546, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 1554, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1570, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1594, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1610, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1620, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 1719, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1728, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 1734, 8, 45, 10, 45, 12, 45, 1737, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1750, 8, 47, 1, 48, 1, 48, 1, 48, 5, 48, 1755, 8, 48, 10, 48, 12, 48, 1758, 9, 48, 1, 49, 1, 49, 1, 49, 5, 49, 1763, 8, 49, 10, 49, 12, 49, 1766, 9, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1777, 8, 50, 10, 50, 12, 50, 1780, 9, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1790, 8, 50, 10, 50, 12, 50, 1793, 9, 50, 1, 50, 3, 50, 1796, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1802, 8, 51, 1, 51, 3, 51, 1805, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1811, 8, 51, 1, 51, 3, 51, 1814, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1820, 8, 51, 1, 51, 1, 51, 3, 51, 1824, 8, 51, 1, 51, 1, 51, 3, 51, 1828, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1834, 8, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1839, 8, 51, 1, 51, 3, 51, 1842, 8, 51, 3, 51, 1844, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 1850, 8, 52, 1, 53, 1, 53, 3, 53, 1854, 8, 53, 1, 53, 1, 53, 3, 53, 1858, 8, 53, 1, 53, 3, 53, 1861, 8, 53, 1, 54, 1, 54, 3, 54, 1865, 8, 54, 1, 54, 5, 54, 1868, 8, 54, 10, 54, 12, 54, 1871, 9, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1878, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1887, 8, 56, 1, 56, 3, 56, 1890, 8, 56, 1, 56, 1, 56, 3, 56, 1894, 8, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 5, 59, 1903, 8, 59, 10, 59, 12, 59, 1906, 9, 59, 1, 60, 3, 60, 1909, 8, 60, 1, 60, 5, 60, 1912, 8, 60, 10, 60, 12, 60, 1915, 9, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 1921, 8, 60, 10, 60, 12, 60, 1924, 9, 60, 1, 61, 1, 61, 1, 61, 3, 61, 1929, 8, 61, 1, 62, 1, 62, 1, 62, 3, 62, 1934, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1940, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1945, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1950, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1955, 8, 62, 1, 62, 1, 62, 3, 62, 1959, 8, 62, 1, 62, 3, 62, 1962, 8, 62, 3, 62, 1964, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1970, 8, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 2006, 8, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 2014, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 2039, 8, 65, 1, 66, 3, 66, 2042, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 5, 67, 2051, 8, 67, 10, 67, 12, 67, 2054, 9, 67, 1, 68, 1, 68, 3, 68, 2058, 8, 68, 1, 69, 1, 69, 1, 69, 3, 69, 2063, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 2072, 8, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 2083, 8, 70, 10, 70, 12, 70, 2086, 9, 70, 1, 70, 1, 70, 3, 70, 2090, 8, 70, 1, 71, 4, 71, 2093, 8, 71, 11, 71, 12, 71, 2094, 1, 72, 1, 72, 3, 72, 2099, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 2104, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 2109, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 2116, 8, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 2142, 8, 74, 1, 74, 1, 74, 5, 74, 2146, 8, 74, 10, 74, 12, 74, 2149, 9, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 2155, 8, 74, 1, 74, 1, 74, 5, 74, 2159, 8, 74, 10, 74, 12, 74, 2162, 9, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 2200, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 2214, 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 2221, 8, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 2234, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 2241, 8, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 2249, 8, 77, 1, 78, 1, 78, 1, 78, 3, 78, 2254, 8, 78, 1, 79, 4, 79, 2257, 8, 79, 11, 79, 12, 79, 2258, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 2265, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 2273, 8, 81, 1, 82, 1, 82, 1, 82, 5, 82, 2278, 8, 82, 10, 82, 12, 82, 2281, 9, 82, 1, 83, 3, 83, 2284, 8, 83, 1, 83, 1, 83, 3, 83, 2288, 8, 83, 1, 83, 3, 83, 2291, 8, 83, 1, 84, 1, 84, 1, 84, 3, 84, 2296, 8, 84, 1, 85, 4, 85, 2299, 8, 85, 11, 85, 12, 85, 2300, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 2310, 8, 87, 1, 87, 3, 87, 2313, 8, 87, 1, 88, 4, 88, 2316, 8, 88, 11, 88, 12, 88, 2317, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 2325, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 2331, 8, 90, 10, 90, 12, 90, 2334, 9, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 3, 92, 2347, 8, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 5, 93, 2355, 8, 93, 10, 93, 12, 93, 2358, 9, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 2392, 8, 94, 1, 95, 1, 95, 1, 95, 5, 95, 2397, 8, 95, 10, 95, 12, 95, 2400, 9, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 5, 97, 2414, 8, 97, 10, 97, 12, 97, 2417, 9, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 5, 98, 2428, 8, 98, 10, 98, 12, 98, 2431, 9, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 5, 99, 2441, 8, 99, 10, 99, 12, 99, 2444, 9, 99, 1, 99, 1, 99, 3, 99, 2448, 8, 99, 1, 100, 1, 100, 5, 100, 2452, 8, 100, 10, 100, 12, 100, 2455, 9, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 2466, 8, 101, 10, 101, 12, 101, 2469, 9, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 2480, 8, 101, 10, 101, 12, 101, 2483, 9, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 2493, 8, 101, 10, 101, 12, 101, 2496, 9, 101, 1, 101, 1, 101, 3, 101, 2500, 8, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 2507, 8, 102, 1, 102, 1, 102, 3, 102, 2511, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 5, 102, 2520, 8, 102, 10, 102, 12, 102, 2523, 9, 102, 1, 102, 1, 102, 3, 102, 2527, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 2537, 8, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 3, 105, 2551, 8, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 5, 106, 2559, 8, 106, 10, 106, 12, 106, 2562, 9, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 5, 107, 2576, 8, 107, 10, 107, 12, 107, 2579, 9, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 2601, 8, 107, 3, 107, 2603, 8, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 2610, 8, 108, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 2616, 8, 109, 1, 109, 3, 109, 2619, 8, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 3, 110, 2633, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 5, 112, 2644, 8, 112, 10, 112, 12, 112, 2647, 9, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 2660, 8, 113, 10, 113, 12, 113, 2663, 9, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 2677, 8, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 2713, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 2728, 8, 116, 1, 117, 1, 117, 1, 117, 5, 117, 2733, 8, 117, 10, 117, 12, 117, 2736, 9, 117, 1, 118, 1, 118, 1, 118, 5, 118, 2741, 8, 118, 10, 118, 12, 118, 2744, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 2750, 8, 119, 1, 119, 1, 119, 3, 119, 2754, 8, 119, 1, 119, 3, 119, 2757, 8, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 2763, 8, 119, 1, 119, 3, 119, 2766, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 2773, 8, 120, 1, 120, 1, 120, 3, 120, 2777, 8, 120, 1, 120, 3, 120, 2780, 8, 120, 1, 120, 1, 120, 1, 120, 3, 120, 2785, 8, 120, 1, 121, 1, 121, 1, 121, 5, 121, 2790, 8, 121, 10, 121, 12, 121, 2793, 9, 121, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 2799, 8, 122, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 5, 125, 2813, 8, 125, 10, 125, 12, 125, 2816, 9, 125, 1, 126, 1, 126, 3, 126, 2820, 8, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 3, 127, 2828, 8, 127, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 2834, 8, 128, 1, 129, 4, 129, 2837, 8, 129, 11, 129, 12, 129, 2838, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 2845, 8, 130, 1, 131, 5, 131, 2848, 8, 131, 10, 131, 12, 131, 2851, 9, 131, 1, 132, 5, 132, 2854, 8, 132, 10, 132, 12, 132, 2857, 9, 132, 1, 132, 1, 132, 3, 132, 2861, 8, 132, 1, 132, 5, 132, 2864, 8, 132, 10, 132, 12, 132, 2867, 9, 132, 1, 132, 1, 132, 3, 132, 2871, 8, 132, 1, 132, 5, 132, 2874, 8, 132, 10, 132, 12, 132, 2877, 9, 132, 1, 132, 1, 132, 3, 132, 2881, 8, 132, 1, 132, 5, 132, 2884, 8, 132, 10, 132, 12, 132, 2887, 9, 132, 1, 132, 1, 132, 3, 132, 2891, 8, 132, 1, 132, 5, 132, 2894, 8, 132, 10, 132, 12, 132, 2897, 9, 132, 1, 132, 1, 132, 3, 132, 2901, 8, 132, 1, 132, 5, 132, 2904, 8, 132, 10, 132, 12, 132, 2907, 9, 132, 1, 132, 1, 132, 3, 132, 2911, 8, 132, 1, 132, 5, 132, 2914, 8, 132, 10, 132, 12, 132, 2917, 9, 132, 1, 132, 1, 132, 3, 132, 2921, 8, 132, 1, 132, 5, 132, 2924, 8, 132, 10, 132, 12, 132, 2927, 9, 132, 1, 132, 1, 132, 3, 132, 2931, 8, 132, 1, 132, 5, 132, 2934, 8, 132, 10, 132, 12, 132, 2937, 9, 132, 1, 132, 1, 132, 3, 132, 2941, 8, 132, 1, 132, 5, 132, 2944, 8, 132, 10, 132, 12, 132, 2947, 9, 132, 1, 132, 1, 132, 3, 132, 2951, 8, 132, 1, 132, 5, 132, 2954, 8, 132, 10, 132, 12, 132, 2957, 9, 132, 1, 132, 1, 132, 3, 132, 2961, 8, 132, 1, 132, 5, 132, 2964, 8, 132, 10, 132, 12, 132, 2967, 9, 132, 1, 132, 1, 132, 3, 132, 2971, 8, 132, 1, 132, 5, 132, 2974, 8, 132, 10, 132, 12, 132, 2977, 9, 132, 1, 132, 1, 132, 3, 132, 2981, 8, 132, 1, 132, 5, 132, 2984, 8, 132, 10, 132, 12, 132, 2987, 9, 132, 1, 132, 1, 132, 3, 132, 2991, 8, 132, 1, 132, 5, 132, 2994, 8, 132, 10, 132, 12, 132, 2997, 9, 132, 1, 132, 1, 132, 3, 132, 3001, 8, 132, 1, 132, 5, 132, 3004, 8, 132, 10, 132, 12, 132, 3007, 9, 132, 1, 132, 1, 132, 3, 132, 3011, 8, 132, 1, 132, 5, 132, 3014, 8, 132, 10, 132, 12, 132, 3017, 9, 132, 1, 132, 1, 132, 3, 132, 3021, 8, 132, 1, 132, 5, 132, 3024, 8, 132, 10, 132, 12, 132, 3027, 9, 132, 1, 132, 1, 132, 3, 132, 3031, 8, 132, 1, 132, 5, 132, 3034, 8, 132, 10, 132, 12, 132, 3037, 9, 132, 1, 132, 1, 132, 3, 132, 3041, 8, 132, 1, 132, 5, 132, 3044, 8, 132, 10, 132, 12, 132, 3047, 9, 132, 1, 132, 1, 132, 3, 132, 3051, 8, 132, 1, 132, 5, 132, 3054, 8, 132, 10, 132, 12, 132, 3057, 9, 132, 1, 132, 1, 132, 3, 132, 3061, 8, 132, 1, 132, 5, 132, 3064, 8, 132, 10, 132, 12, 132, 3067, 9, 132, 1, 132, 1, 132, 3, 132, 3071, 8, 132, 1, 132, 5, 132, 3074, 8, 132, 10, 132, 12, 132, 3077, 9, 132, 1, 132, 1, 132, 3, 132, 3081, 8, 132, 1, 132, 5, 132, 3084, 8, 132, 10, 132, 12, 132, 3087, 9, 132, 1, 132, 1, 132, 3, 132, 3091, 8, 132, 1, 132, 5, 132, 3094, 8, 132, 10, 132, 12, 132, 3097, 9, 132, 1, 132, 1, 132, 3, 132, 3101, 8, 132, 1, 132, 5, 132, 3104, 8, 132, 10, 132, 12, 132, 3107, 9, 132, 1, 132, 1, 132, 3, 132, 3111, 8, 132, 1, 132, 5, 132, 3114, 8, 132, 10, 132, 12, 132, 3117, 9, 132, 1, 132, 1, 132, 3, 132, 3121, 8, 132, 1, 132, 5, 132, 3124, 8, 132, 10, 132, 12, 132, 3127, 9, 132, 1, 132, 1, 132, 3, 132, 3131, 8, 132, 1, 132, 5, 132, 3134, 8, 132, 10, 132, 12, 132, 3137, 9, 132, 1, 132, 1, 132, 3, 132, 3141, 8, 132, 1, 132, 5, 132, 3144, 8, 132, 10, 132, 12, 132, 3147, 9, 132, 1, 132, 1, 132, 3, 132, 3151, 8, 132, 1, 132, 5, 132, 3154, 8, 132, 10, 132, 12, 132, 3157, 9, 132, 1, 132, 1, 132, 3, 132, 3161, 8, 132, 1, 132, 5, 132, 3164, 8, 132, 10, 132, 12, 132, 3167, 9, 132, 1, 132, 1, 132, 3, 132, 3171, 8, 132, 1, 132, 5, 132, 3174, 8, 132, 10, 132, 12, 132, 3177, 9, 132, 1, 132, 1, 132, 3, 132, 3181, 8, 132, 1, 132, 5, 132, 3184, 8, 132, 10, 132, 12, 132, 3187, 9, 132, 1, 132, 1, 132, 3, 132, 3191, 8, 132, 1, 132, 5, 132, 3194, 8, 132, 10, 132, 12, 132, 3197, 9, 132, 1, 132, 1, 132, 3, 132, 3201, 8, 132, 1, 132, 5, 132, 3204, 8, 132, 10, 132, 12, 132, 3207, 9, 132, 1, 132, 1, 132, 3, 132, 3211, 8, 132, 1, 132, 5, 132, 3214, 8, 132, 10, 132, 12, 132, 3217, 9, 132, 1, 132, 1, 132, 3, 132, 3221, 8, 132, 1, 132, 5, 132, 3224, 8, 132, 10, 132, 12, 132, 3227, 9, 132, 1, 132, 1, 132, 3, 132, 3231, 8, 132, 1, 132, 5, 132, 3234, 8, 132, 10, 132, 12, 132, 3237, 9, 132, 1, 132, 1, 132, 3, 132, 3241, 8, 132, 1, 132, 5, 132, 3244, 8, 132, 10, 132, 12, 132, 3247, 9, 132, 1, 132, 1, 132, 3, 132, 3251, 8, 132, 1, 132, 5, 132, 3254, 8, 132, 10, 132, 12, 132, 3257, 9, 132, 1, 132, 1, 132, 3, 132, 3261, 8, 132, 1, 132, 5, 132, 3264, 8, 132, 10, 132, 12, 132, 3267, 9, 132, 1, 132, 1, 132, 3, 132, 3271, 8, 132, 1, 132, 5, 132, 3274, 8, 132, 10, 132, 12, 132, 3277, 9, 132, 1, 132, 1, 132, 3, 132, 3281, 8, 132, 1, 132, 5, 132, 3284, 8, 132, 10, 132, 12, 132, 3287, 9, 132, 1, 132, 1, 132, 3, 132, 3291, 8, 132, 1, 132, 5, 132, 3294, 8, 132, 10, 132, 12, 132, 3297, 9, 132, 1, 132, 1, 132, 3, 132, 3301, 8, 132, 1, 132, 5, 132, 3304, 8, 132, 10, 132, 12, 132, 3307, 9, 132, 1, 132, 1, 132, 3, 132, 3311, 8, 132, 1, 132, 5, 132, 3314, 8, 132, 10, 132, 12, 132, 3317, 9, 132, 1, 132, 1, 132, 3, 132, 3321, 8, 132, 3, 132, 3323, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 3330, 8, 133, 1, 134, 1, 134, 1, 134, 3, 134, 3335, 8, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 3, 135, 3342, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 3348, 8, 135, 1, 135, 3, 135, 3351, 8, 135, 1, 135, 3, 135, 3354, 8, 135, 1, 136, 1, 136, 1, 136, 1, 136, 3, 136, 3360, 8, 136, 1, 136, 3, 136, 3363, 8, 136, 1, 137, 1, 137, 1, 137, 1, 137, 3, 137, 3369, 8, 137, 4, 137, 3371, 8, 137, 11, 137, 12, 137, 3372, 1, 138, 1, 138, 1, 138, 1, 138, 3, 138, 3379, 8, 138, 1, 138, 3, 138, 3382, 8, 138, 1, 138, 3, 138, 3385, 8, 138, 1, 139, 1, 139, 1, 139, 3, 139, 3390, 8, 139, 1, 140, 1, 140, 1, 140, 3, 140, 3395, 8, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3404, 8, 141, 1, 141, 5, 141, 3407, 8, 141, 10, 141, 12, 141, 3410, 9, 141, 1, 141, 3, 141, 3413, 8, 141, 3, 141, 3415, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 5, 141, 3421, 8, 141, 10, 141, 12, 141, 3424, 9, 141, 3, 141, 3426, 8, 141, 1, 141, 1, 141, 3, 141, 3430, 8, 141, 1, 141, 1, 141, 3, 141, 3434, 8, 141, 1, 141, 3, 141, 3437, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3449, 8, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 3471, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 5, 144, 3482, 8, 144, 10, 144, 12, 144, 3485, 9, 144, 1, 144, 1, 144, 3, 144, 3489, 8, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 3, 145, 3499, 8, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 3, 146, 3509, 8, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3514, 8, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 3, 149, 3522, 8, 149, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 3, 151, 3529, 8, 151, 1, 151, 1, 151, 3, 151, 3533, 8, 151, 1, 151, 1, 151, 3, 151, 3537, 8, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 5, 153, 3546, 8, 153, 10, 153, 12, 153, 3549, 9, 153, 1, 153, 1, 153, 1, 153, 1, 153, 3, 153, 3555, 8, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 3, 157, 3569, 8, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 3, 157, 3576, 8, 157, 1, 157, 1, 157, 3, 157, 3580, 8, 157, 1, 158, 1, 158, 3, 158, 3584, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 3592, 8, 158, 1, 158, 1, 158, 3, 158, 3596, 8, 158, 1, 159, 1, 159, 3, 159, 3600, 8, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 3610, 8, 159, 3, 159, 3612, 8, 159, 1, 159, 1, 159, 3, 159, 3616, 8, 159, 1, 159, 3, 159, 3619, 8, 159, 1, 159, 1, 159, 1, 159, 3, 159, 3624, 8, 159, 1, 159, 3, 159, 3627, 8, 159, 1, 159, 3, 159, 3630, 8, 159, 1, 160, 1, 160, 3, 160, 3634, 8, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 3, 160, 3642, 8, 160, 1, 160, 1, 160, 3, 160, 3646, 8, 160, 1, 161, 1, 161, 3, 161, 3650, 8, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 3, 161, 3657, 8, 161, 1, 161, 1, 161, 3, 161, 3661, 8, 161, 1, 162, 1, 162, 3, 162, 3665, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3674, 8, 162, 1, 163, 1, 163, 3, 163, 3678, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 3685, 8, 163, 1, 164, 1, 164, 3, 164, 3689, 8, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 3, 164, 3697, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 3703, 8, 165, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 3709, 8, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 3721, 8, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 3729, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 3736, 8, 168, 1, 169, 1, 169, 3, 169, 3740, 8, 169, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 3746, 8, 169, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 3752, 8, 170, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 3758, 8, 171, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 3764, 8, 172, 1, 173, 1, 173, 1, 173, 5, 173, 3769, 8, 173, 10, 173, 12, 173, 3772, 9, 173, 1, 174, 1, 174, 3, 174, 3776, 8, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 3786, 8, 175, 1, 175, 3, 175, 3789, 8, 175, 1, 175, 1, 175, 3, 175, 3793, 8, 175, 1, 175, 1, 175, 3, 175, 3797, 8, 175, 1, 176, 1, 176, 1, 176, 5, 176, 3802, 8, 176, 10, 176, 12, 176, 3805, 9, 176, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 3811, 8, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 3817, 8, 177, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 3831, 8, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 3838, 8, 180, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 3, 182, 3853, 8, 182, 1, 183, 1, 183, 3, 183, 3857, 8, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 3, 183, 3864, 8, 183, 1, 183, 5, 183, 3867, 8, 183, 10, 183, 12, 183, 3870, 9, 183, 1, 183, 3, 183, 3873, 8, 183, 1, 183, 3, 183, 3876, 8, 183, 1, 183, 3, 183, 3879, 8, 183, 1, 183, 1, 183, 3, 183, 3883, 8, 183, 1, 184, 1, 184, 1, 185, 1, 185, 3, 185, 3889, 8, 185, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 3, 189, 3907, 8, 189, 1, 189, 1, 189, 1, 189, 3, 189, 3912, 8, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 3920, 8, 189, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 3939, 8, 191, 1, 192, 1, 192, 3, 192, 3943, 8, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 3950, 8, 192, 1, 192, 3, 192, 3953, 8, 192, 1, 192, 3, 192, 3956, 8, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 3963, 8, 193, 10, 193, 12, 193, 3966, 9, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 3, 196, 3979, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 3989, 8, 196, 1, 197, 1, 197, 3, 197, 3993, 8, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 3, 197, 4003, 8, 197, 1, 198, 1, 198, 3, 198, 4007, 8, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 4014, 8, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 4086, 8, 200, 3, 200, 4088, 8, 200, 1, 200, 3, 200, 4091, 8, 200, 1, 201, 1, 201, 1, 201, 5, 201, 4096, 8, 201, 10, 201, 12, 201, 4099, 9, 201, 1, 202, 1, 202, 3, 202, 4103, 8, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 3, 204, 4133, 8, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 5, 208, 4154, 8, 208, 10, 208, 12, 208, 4157, 9, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 4167, 8, 210, 1, 211, 1, 211, 1, 211, 5, 211, 4172, 8, 211, 10, 211, 12, 211, 4175, 9, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 3, 214, 4191, 8, 214, 1, 214, 3, 214, 4194, 8, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 4, 215, 4201, 8, 215, 11, 215, 12, 215, 4202, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 5, 217, 4211, 8, 217, 10, 217, 12, 217, 4214, 9, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 5, 219, 4223, 8, 219, 10, 219, 12, 219, 4226, 9, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 5, 221, 4235, 8, 221, 10, 221, 12, 221, 4238, 9, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 3, 223, 4248, 8, 223, 1, 223, 3, 223, 4251, 8, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 5, 226, 4262, 8, 226, 10, 226, 12, 226, 4265, 9, 226, 1, 227, 1, 227, 1, 227, 5, 227, 4270, 8, 227, 10, 227, 12, 227, 4273, 9, 227, 1, 228, 1, 228, 1, 228, 3, 228, 4278, 8, 228, 1, 229, 1, 229, 1, 229, 1, 229, 3, 229, 4284, 8, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 3, 230, 4292, 8, 230, 1, 231, 1, 231, 1, 231, 5, 231, 4297, 8, 231, 10, 231, 12, 231, 4300, 9, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 3, 232, 4307, 8, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 3, 233, 4314, 8, 233, 1, 234, 1, 234, 1, 234, 5, 234, 4319, 8, 234, 10, 234, 12, 234, 4322, 9, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 5, 236, 4331, 8, 236, 10, 236, 12, 236, 4334, 9, 236, 3, 236, 4336, 8, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 5, 238, 4346, 8, 238, 10, 238, 12, 238, 4349, 9, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 3, 239, 4372, 8, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 3, 239, 4380, 8, 239, 1, 240, 1, 240, 1, 240, 1, 240, 5, 240, 4386, 8, 240, 10, 240, 12, 240, 4389, 9, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 3, 241, 4408, 8, 241, 1, 242, 1, 242, 5, 242, 4412, 8, 242, 10, 242, 12, 242, 4415, 9, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 3, 243, 4422, 8, 243, 1, 244, 1, 244, 1, 244, 3, 244, 4427, 8, 244, 1, 244, 3, 244, 4430, 8, 244, 1, 244, 1, 244, 1, 244, 1, 244, 3, 244, 4436, 8, 244, 1, 244, 3, 244, 4439, 8, 244, 1, 244, 1, 244, 1, 244, 1, 244, 3, 244, 4445, 8, 244, 1, 244, 3, 244, 4448, 8, 244, 3, 244, 4450, 8, 244, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 5, 246, 4458, 8, 246, 10, 246, 12, 246, 4461, 9, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 3, 247, 4559, 8, 247, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 5, 249, 4567, 8, 249, 10, 249, 12, 249, 4570, 9, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4580, 8, 250, 1, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4586, 8, 250, 1, 250, 5, 250, 4589, 8, 250, 10, 250, 12, 250, 4592, 9, 250, 1, 250, 3, 250, 4595, 8, 250, 3, 250, 4597, 8, 250, 1, 250, 1, 250, 1, 250, 1, 250, 5, 250, 4603, 8, 250, 10, 250, 12, 250, 4606, 9, 250, 3, 250, 4608, 8, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4613, 8, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4618, 8, 250, 1, 250, 1, 250, 1, 250, 1, 250, 3, 250, 4624, 8, 250, 1, 251, 1, 251, 1, 251, 5, 251, 4629, 8, 251, 10, 251, 12, 251, 4632, 9, 251, 1, 252, 1, 252, 3, 252, 4636, 8, 252, 1, 252, 1, 252, 3, 252, 4640, 8, 252, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4646, 8, 252, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4652, 8, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4657, 8, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4662, 8, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4667, 8, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 4674, 8, 252, 1, 253, 1, 253, 1, 253, 1, 253, 5, 253, 4680, 8, 253, 10, 253, 12, 253, 4683, 9, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 3, 254, 4693, 8, 254, 1, 255, 1, 255, 1, 255, 3, 255, 4698, 8, 255, 1, 255, 1, 255, 1, 255, 1, 255, 3, 255, 4704, 8, 255, 5, 255, 4706, 8, 255, 10, 255, 12, 255, 4709, 9, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 3, 256, 4717, 8, 256, 3, 256, 4719, 8, 256, 3, 256, 4721, 8, 256, 1, 257, 1, 257, 1, 257, 1, 257, 5, 257, 4727, 8, 257, 10, 257, 12, 257, 4730, 9, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 260, 1, 260, 1, 261, 1, 261, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 5, 263, 4763, 8, 263, 10, 263, 12, 263, 4766, 9, 263, 3, 263, 4768, 8, 263, 1, 263, 3, 263, 4771, 8, 263, 1, 264, 1, 264, 1, 264, 1, 264, 5, 264, 4777, 8, 264, 10, 264, 12, 264, 4780, 9, 264, 1, 264, 1, 264, 1, 264, 1, 264, 3, 264, 4786, 8, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 3, 265, 4797, 8, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 3, 267, 4806, 8, 267, 1, 267, 1, 267, 5, 267, 4810, 8, 267, 10, 267, 12, 267, 4813, 9, 267, 1, 267, 1, 267, 1, 268, 4, 268, 4818, 8, 268, 11, 268, 12, 268, 4819, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 3, 270, 4829, 8, 270, 1, 271, 1, 271, 1, 271, 1, 271, 4, 271, 4835, 8, 271, 11, 271, 12, 271, 4836, 1, 271, 1, 271, 5, 271, 4841, 8, 271, 10, 271, 12, 271, 4844, 9, 271, 1, 271, 3, 271, 4847, 8, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 3, 272, 4856, 8, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 3, 272, 4868, 8, 272, 1, 272, 1, 272, 1, 272, 1, 272, 3, 272, 4874, 8, 272, 3, 272, 4876, 8, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 3, 273, 4889, 8, 273, 5, 273, 4891, 8, 273, 10, 273, 12, 273, 4894, 9, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 5, 273, 4903, 8, 273, 10, 273, 12, 273, 4906, 9, 273, 1, 273, 1, 273, 3, 273, 4910, 8, 273, 3, 273, 4912, 8, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4927, 8, 275, 1, 276, 4, 276, 4930, 8, 276, 11, 276, 12, 276, 4931, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 3, 277, 4941, 8, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 5, 278, 4948, 8, 278, 10, 278, 12, 278, 4951, 9, 278, 3, 278, 4953, 8, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 5, 279, 4962, 8, 279, 10, 279, 12, 279, 4965, 9, 279, 1, 279, 1, 279, 1, 279, 5, 279, 4970, 8, 279, 10, 279, 12, 279, 4973, 9, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 5, 280, 5001, 8, 280, 10, 280, 12, 280, 5004, 9, 280, 1, 280, 1, 280, 3, 280, 5008, 8, 280, 1, 281, 3, 281, 5011, 8, 281, 1, 281, 1, 281, 1, 281, 3, 281, 5016, 8, 281, 1, 281, 1, 281, 1, 281, 1, 281, 5, 281, 5022, 8, 281, 10, 281, 12, 281, 5025, 9, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 5, 282, 5051, 8, 282, 10, 282, 12, 282, 5054, 9, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 5, 282, 5064, 8, 282, 10, 282, 12, 282, 5067, 9, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 5, 282, 5088, 8, 282, 10, 282, 12, 282, 5091, 9, 282, 1, 282, 3, 282, 5094, 8, 282, 3, 282, 5096, 8, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 3, 284, 5109, 8, 284, 1, 285, 1, 285, 1, 285, 1, 285, 3, 285, 5115, 8, 285, 1, 285, 3, 285, 5118, 8, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 5, 285, 5127, 8, 285, 10, 285, 12, 285, 5130, 9, 285, 1, 285, 3, 285, 5133, 8, 285, 1, 285, 3, 285, 5136, 8, 285, 3, 285, 5138, 8, 285, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 5, 287, 5150, 8, 287, 10, 287, 12, 287, 5153, 9, 287, 1, 287, 1, 287, 1, 287, 5, 287, 5158, 8, 287, 10, 287, 12, 287, 5161, 9, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 5, 289, 5173, 8, 289, 10, 289, 12, 289, 5176, 9, 289, 1, 289, 1, 289, 1, 290, 1, 290, 3, 290, 5182, 8, 290, 1, 290, 1, 290, 1, 290, 3, 290, 5187, 8, 290, 1, 290, 1, 290, 1, 290, 3, 290, 5192, 8, 290, 1, 290, 1, 290, 1, 290, 3, 290, 5197, 8, 290, 1, 290, 1, 290, 3, 290, 5201, 8, 290, 1, 290, 3, 290, 5204, 8, 290, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 5, 293, 5223, 8, 293, 10, 293, 12, 293, 5226, 9, 293, 1, 293, 1, 293, 3, 293, 5230, 8, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 5, 294, 5239, 8, 294, 10, 294, 12, 294, 5242, 9, 294, 1, 294, 1, 294, 3, 294, 5246, 8, 294, 1, 294, 1, 294, 5, 294, 5250, 8, 294, 10, 294, 12, 294, 5253, 9, 294, 1, 294, 3, 294, 5256, 8, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 3, 295, 5264, 8, 295, 1, 295, 1, 295, 1, 295, 3, 295, 5269, 8, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 5, 298, 5283, 8, 298, 10, 298, 12, 298, 5286, 9, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 3, 299, 5293, 8, 299, 1, 299, 3, 299, 5296, 8, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 3, 300, 5303, 8, 300, 1, 300, 1, 300, 1, 300, 1, 300, 5, 300, 5309, 8, 300, 10, 300, 12, 300, 5312, 9, 300, 1, 300, 1, 300, 3, 300, 5316, 8, 300, 1, 300, 3, 300, 5319, 8, 300, 1, 300, 3, 300, 5322, 8, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 5, 301, 5330, 8, 301, 10, 301, 12, 301, 5333, 9, 301, 3, 301, 5335, 8, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 3, 302, 5342, 8, 302, 1, 302, 3, 302, 5345, 8, 302, 1, 303, 1, 303, 1, 303, 1, 303, 5, 303, 5351, 8, 303, 10, 303, 12, 303, 5354, 9, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 5, 304, 5369, 8, 304, 10, 304, 12, 304, 5372, 9, 304, 1, 304, 1, 304, 1, 304, 3, 304, 5377, 8, 304, 1, 304, 3, 304, 5380, 8, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 3, 305, 5389, 8, 305, 3, 305, 5391, 8, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 5, 305, 5398, 8, 305, 10, 305, 12, 305, 5401, 9, 305, 1, 305, 1, 305, 3, 305, 5405, 8, 305, 1, 306, 1, 306, 1, 306, 3, 306, 5410, 8, 306, 1, 306, 5, 306, 5413, 8, 306, 10, 306, 12, 306, 5416, 9, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 5, 307, 5423, 8, 307, 10, 307, 12, 307, 5426, 9, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 5, 309, 5442, 8, 309, 10, 309, 12, 309, 5445, 9, 309, 1, 309, 1, 309, 1, 309, 4, 309, 5450, 8, 309, 11, 309, 12, 309, 5451, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 5, 310, 5462, 8, 310, 10, 310, 12, 310, 5465, 9, 310, 1, 310, 1, 310, 1, 310, 1, 310, 3, 310, 5471, 8, 310, 1, 310, 1, 310, 3, 310, 5475, 8, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 311, 1, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5489, 8, 312, 1, 312, 1, 312, 3, 312, 5493, 8, 312, 1, 312, 1, 312, 3, 312, 5497, 8, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5502, 8, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5507, 8, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5512, 8, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 3, 312, 5519, 8, 312, 1, 312, 3, 312, 5522, 8, 312, 1, 313, 5, 313, 5525, 8, 313, 10, 313, 12, 313, 5528, 9, 313, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 3, 314, 5557, 8, 314, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 3, 315, 5565, 8, 315, 1, 315, 1, 315, 3, 315, 5569, 8, 315, 1, 315, 1, 315, 3, 315, 5573, 8, 315, 1, 315, 1, 315, 3, 315, 5577, 8, 315, 1, 315, 1, 315, 3, 315, 5581, 8, 315, 1, 315, 1, 315, 3, 315, 5585, 8, 315, 1, 315, 1, 315, 1, 315, 3, 315, 5590, 8, 315, 1, 315, 1, 315, 3, 315, 5594, 8, 315, 1, 315, 1, 315, 4, 315, 5598, 8, 315, 11, 315, 12, 315, 5599, 3, 315, 5602, 8, 315, 1, 315, 1, 315, 1, 315, 4, 315, 5607, 8, 315, 11, 315, 12, 315, 5608, 3, 315, 5611, 8, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 3, 315, 5620, 8, 315, 1, 315, 1, 315, 3, 315, 5624, 8, 315, 1, 315, 1, 315, 3, 315, 5628, 8, 315, 1, 315, 1, 315, 3, 315, 5632, 8, 315, 1, 315, 1, 315, 3, 315, 5636, 8, 315, 1, 315, 1, 315, 3, 315, 5640, 8, 315, 1, 315, 1, 315, 1, 315, 3, 315, 5645, 8, 315, 1, 315, 1, 315, 3, 315, 5649, 8, 315, 1, 315, 1, 315, 4, 315, 5653, 8, 315, 11, 315, 12, 315, 5654, 3, 315, 5657, 8, 315, 1, 315, 1, 315, 1, 315, 4, 315, 5662, 8, 315, 11, 315, 12, 315, 5663, 3, 315, 5666, 8, 315, 3, 315, 5668, 8, 315, 1, 316, 1, 316, 1, 316, 3, 316, 5673, 8, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 5679, 8, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 5685, 8, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 5691, 8, 316, 1, 316, 1, 316, 3, 316, 5695, 8, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 5701, 8, 316, 3, 316, 5703, 8, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 3, 318, 5715, 8, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 5, 318, 5722, 8, 318, 10, 318, 12, 318, 5725, 9, 318, 1, 318, 1, 318, 3, 318, 5729, 8, 318, 1, 318, 1, 318, 4, 318, 5733, 8, 318, 11, 318, 12, 318, 5734, 3, 318, 5737, 8, 318, 1, 318, 1, 318, 1, 318, 4, 318, 5742, 8, 318, 11, 318, 12, 318, 5743, 3, 318, 5746, 8, 318, 1, 319, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 3, 320, 5757, 8, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 5, 320, 5764, 8, 320, 10, 320, 12, 320, 5767, 9, 320, 1, 320, 1, 320, 3, 320, 5771, 8, 320, 1, 321, 1, 321, 3, 321, 5775, 8, 321, 1, 321, 1, 321, 3, 321, 5779, 8, 321, 1, 321, 1, 321, 4, 321, 5783, 8, 321, 11, 321, 12, 321, 5784, 3, 321, 5787, 8, 321, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 323, 1, 323, 1, 323, 1, 323, 3, 323, 5799, 8, 323, 1, 323, 4, 323, 5802, 8, 323, 11, 323, 12, 323, 5803, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 5817, 8, 325, 1, 326, 1, 326, 1, 326, 1, 326, 3, 326, 5823, 8, 326, 1, 326, 1, 326, 3, 326, 5827, 8, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 3, 327, 5834, 8, 327, 1, 327, 1, 327, 1, 327, 4, 327, 5839, 8, 327, 11, 327, 12, 327, 5840, 3, 327, 5843, 8, 327, 1, 328, 1, 328, 1, 328, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 3, 329, 5922, 8, 329, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 3, 330, 5941, 8, 330, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 3, 331, 5956, 8, 331, 1, 332, 1, 332, 1, 332, 3, 332, 5961, 8, 332, 1, 332, 1, 332, 1, 332, 3, 332, 5966, 8, 332, 3, 332, 5968, 8, 332, 1, 333, 1, 333, 1, 333, 1, 333, 5, 333, 5974, 8, 333, 10, 333, 12, 333, 5977, 9, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 3, 333, 5984, 8, 333, 1, 333, 1, 333, 1, 333, 3, 333, 5989, 8, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 3, 333, 5997, 8, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 5, 333, 6004, 8, 333, 10, 333, 12, 333, 6007, 9, 333, 3, 333, 6009, 8, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 335, 1, 335, 1, 336, 1, 336, 1, 336, 1, 336, 3, 336, 6021, 8, 336, 1, 337, 1, 337, 1, 337, 1, 337, 3, 337, 6027, 8, 337, 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6063, 8, 339, 3, 339, 6065, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6072, 8, 339, 3, 339, 6074, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6081, 8, 339, 3, 339, 6083, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6090, 8, 339, 3, 339, 6092, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6099, 8, 339, 3, 339, 6101, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6108, 8, 339, 3, 339, 6110, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6117, 8, 339, 3, 339, 6119, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6126, 8, 339, 3, 339, 6128, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6135, 8, 339, 3, 339, 6137, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6145, 8, 339, 3, 339, 6147, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6154, 8, 339, 3, 339, 6156, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6163, 8, 339, 3, 339, 6165, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6173, 8, 339, 3, 339, 6175, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6183, 8, 339, 3, 339, 6185, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6193, 8, 339, 3, 339, 6195, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6202, 8, 339, 3, 339, 6204, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6211, 8, 339, 3, 339, 6213, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6221, 8, 339, 3, 339, 6223, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6232, 8, 339, 3, 339, 6234, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6242, 8, 339, 3, 339, 6244, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6252, 8, 339, 3, 339, 6254, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6262, 8, 339, 3, 339, 6264, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6300, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6307, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6325, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6330, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6342, 8, 339, 3, 339, 6344, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6383, 8, 339, 3, 339, 6385, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6393, 8, 339, 3, 339, 6395, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6403, 8, 339, 3, 339, 6405, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6413, 8, 339, 3, 339, 6415, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6423, 8, 339, 3, 339, 6425, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6435, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6446, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6452, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6457, 8, 339, 3, 339, 6459, 8, 339, 1, 339, 3, 339, 6462, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6471, 8, 339, 3, 339, 6473, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6482, 8, 339, 3, 339, 6484, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6492, 8, 339, 3, 339, 6494, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6508, 8, 339, 3, 339, 6510, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6518, 8, 339, 3, 339, 6520, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6529, 8, 339, 3, 339, 6531, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6539, 8, 339, 3, 339, 6541, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6550, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6564, 8, 339, 1, 340, 1, 340, 1, 340, 1, 340, 5, 340, 6570, 8, 340, 10, 340, 12, 340, 6573, 9, 340, 1, 340, 1, 340, 1, 340, 3, 340, 6578, 8, 340, 3, 340, 6580, 8, 340, 1, 340, 1, 340, 1, 340, 3, 340, 6585, 8, 340, 3, 340, 6587, 8, 340, 1, 341, 1, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 3, 342, 6597, 8, 342, 1, 343, 1, 343, 1, 343, 1, 343, 1, 344, 1, 344, 1, 344, 1, 344, 3, 344, 6607, 8, 344, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6615, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6623, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6672, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6702, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6711, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 6791, 8, 345, 1, 346, 1, 346, 3, 346, 6795, 8, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 3, 346, 6803, 8, 346, 1, 346, 3, 346, 6806, 8, 346, 1, 346, 5, 346, 6809, 8, 346, 10, 346, 12, 346, 6812, 9, 346, 1, 346, 1, 346, 3, 346, 6816, 8, 346, 1, 346, 1, 346, 1, 346, 1, 346, 3, 346, 6822, 8, 346, 3, 346, 6824, 8, 346, 1, 346, 1, 346, 3, 346, 6828, 8, 346, 1, 346, 1, 346, 3, 346, 6832, 8, 346, 1, 346, 1, 346, 3, 346, 6836, 8, 346, 1, 347, 3, 347, 6839, 8, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 3, 347, 6846, 8, 347, 1, 347, 3, 347, 6849, 8, 347, 1, 347, 1, 347, 3, 347, 6853, 8, 347, 1, 348, 1, 348, 1, 349, 1, 349, 1, 349, 3, 349, 6860, 8, 349, 1, 349, 5, 349, 6863, 8, 349, 10, 349, 12, 349, 6866, 9, 349, 1, 350, 1, 350, 3, 350, 6870, 8, 350, 1, 350, 3, 350, 6873, 8, 350, 1, 350, 3, 350, 6876, 8, 350, 1, 350, 3, 350, 6879, 8, 350, 1, 350, 3, 350, 6882, 8, 350, 1, 350, 3, 350, 6885, 8, 350, 1, 350, 1, 350, 3, 350, 6889, 8, 350, 1, 350, 3, 350, 6892, 8, 350, 1, 350, 3, 350, 6895, 8, 350, 1, 350, 1, 350, 3, 350, 6899, 8, 350, 1, 350, 3, 350, 6902, 8, 350, 3, 350, 6904, 8, 350, 1, 351, 1, 351, 3, 351, 6908, 8, 351, 1, 351, 1, 351, 1, 352, 1, 352, 1, 352, 1, 352, 5, 352, 6916, 8, 352, 10, 352, 12, 352, 6919, 9, 352, 3, 352, 6921, 8, 352, 1, 353, 1, 353, 1, 353, 3, 353, 6926, 8, 353, 1, 353, 1, 353, 1, 353, 3, 353, 6931, 8, 353, 3, 353, 6933, 8, 353, 1, 354, 1, 354, 3, 354, 6937, 8, 354, 1, 355, 1, 355, 1, 355, 5, 355, 6942, 8, 355, 10, 355, 12, 355, 6945, 9, 355, 1, 356, 1, 356, 3, 356, 6949, 8, 356, 1, 356, 3, 356, 6952, 8, 356, 1, 356, 1, 356, 1, 356, 1, 356, 3, 356, 6958, 8, 356, 1, 356, 3, 356, 6961, 8, 356, 3, 356, 6963, 8, 356, 1, 357, 3, 357, 6966, 8, 357, 1, 357, 1, 357, 1, 357, 1, 357, 3, 357, 6972, 8, 357, 1, 357, 3, 357, 6975, 8, 357, 1, 357, 1, 357, 1, 357, 3, 357, 6980, 8, 357, 1, 357, 3, 357, 6983, 8, 357, 3, 357, 6985, 8, 357, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 3, 358, 6997, 8, 358, 1, 359, 1, 359, 3, 359, 7001, 8, 359, 1, 359, 1, 359, 3, 359, 7005, 8, 359, 1, 359, 1, 359, 1, 359, 3, 359, 7010, 8, 359, 1, 359, 3, 359, 7013, 8, 359, 1, 360, 1, 360, 1, 360, 1, 361, 1, 361, 1, 361, 1, 362, 1, 362, 1, 362, 1, 363, 1, 363, 1, 363, 1, 364, 1, 364, 1, 364, 5, 364, 7030, 8, 364, 10, 364, 12, 364, 7033, 9, 364, 1, 365, 1, 365, 3, 365, 7037, 8, 365, 1, 366, 1, 366, 1, 366, 5, 366, 7042, 8, 366, 10, 366, 12, 366, 7045, 9, 366, 1, 367, 1, 367, 1, 367, 1, 367, 3, 367, 7051, 8, 367, 1, 367, 1, 367, 1, 367, 1, 367, 3, 367, 7057, 8, 367, 3, 367, 7059, 8, 367, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 1, 368, 3, 368, 7077, 8, 368, 1, 369, 1, 369, 1, 369, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 3, 370, 7088, 8, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 3, 370, 7103, 8, 370, 3, 370, 7105, 8, 370, 1, 371, 1, 371, 1, 372, 1, 372, 1, 372, 1, 372, 3, 372, 7113, 8, 372, 1, 372, 3, 372, 7116, 8, 372, 1, 372, 3, 372, 7119, 8, 372, 1, 372, 3, 372, 7122, 8, 372, 1, 372, 3, 372, 7125, 8, 372, 1, 373, 1, 373, 1, 374, 1, 374, 1, 375, 1, 375, 1, 375, 1, 375, 1, 376, 1, 376, 1, 376, 1, 376, 1, 377, 1, 377, 3, 377, 7141, 8, 377, 1, 377, 1, 377, 3, 377, 7145, 8, 377, 1, 377, 1, 377, 1, 377, 3, 377, 7150, 8, 377, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 1, 378, 3, 378, 7158, 8, 378, 1, 379, 1, 379, 1, 380, 1, 380, 1, 380, 1, 380, 3, 380, 7166, 8, 380, 1, 381, 1, 381, 1, 381, 5, 381, 7171, 8, 381, 10, 381, 12, 381, 7174, 9, 381, 1, 382, 1, 382, 1, 383, 1, 383, 1, 383, 1, 384, 1, 384, 1, 384, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 5, 385, 7214, 8, 385, 10, 385, 12, 385, 7217, 9, 385, 1, 385, 1, 385, 3, 385, 7221, 8, 385, 1, 385, 1, 385, 1, 385, 1, 385, 1, 385, 5, 385, 7228, 8, 385, 10, 385, 12, 385, 7231, 9, 385, 1, 385, 1, 385, 3, 385, 7235, 8, 385, 1, 385, 3, 385, 7238, 8, 385, 1, 385, 1, 385, 1, 385, 3, 385, 7243, 8, 385, 1, 386, 4, 386, 7246, 8, 386, 11, 386, 12, 386, 7247, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 5, 387, 7262, 8, 387, 10, 387, 12, 387, 7265, 9, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 1, 387, 5, 387, 7273, 8, 387, 10, 387, 12, 387, 7276, 9, 387, 1, 387, 1, 387, 3, 387, 7280, 8, 387, 1, 387, 1, 387, 3, 387, 7284, 8, 387, 1, 387, 1, 387, 3, 387, 7288, 8, 387, 1, 388, 1, 388, 1, 388, 1, 388, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 3, 389, 7304, 8, 389, 1, 390, 1, 390, 5, 390, 7308, 8, 390, 10, 390, 12, 390, 7311, 9, 390, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 392, 1, 392, 1, 393, 1, 393, 1, 393, 5, 393, 7326, 8, 393, 10, 393, 12, 393, 7329, 9, 393, 1, 394, 1, 394, 1, 394, 5, 394, 7334, 8, 394, 10, 394, 12, 394, 7337, 9, 394, 1, 395, 3, 395, 7340, 8, 395, 1, 395, 1, 395, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7354, 8, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7359, 8, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7367, 8, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7373, 8, 396, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, 5, 398, 7380, 8, 398, 10, 398, 12, 398, 7383, 9, 398, 1, 399, 1, 399, 1, 399, 5, 399, 7388, 8, 399, 10, 399, 12, 399, 7391, 9, 399, 1, 400, 3, 400, 7394, 8, 400, 1, 400, 1, 400, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 3, 401, 7419, 8, 401, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 1, 402, 4, 402, 7427, 8, 402, 11, 402, 12, 402, 7428, 1, 402, 1, 402, 3, 402, 7433, 8, 402, 1, 402, 1, 402, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, 1, 405, 1, 405, 1, 406, 1, 406, 1, 406, 3, 406, 7456, 8, 406, 1, 406, 1, 406, 3, 406, 7460, 8, 406, 1, 406, 1, 406, 1, 407, 1, 407, 1, 407, 3, 407, 7467, 8, 407, 1, 407, 1, 407, 1, 408, 1, 408, 1, 409, 1, 409, 1, 409, 5, 409, 7476, 8, 409, 10, 409, 12, 409, 7479, 9, 409, 1, 410, 1, 410, 1, 410, 1, 410, 5, 410, 7485, 8, 410, 10, 410, 12, 410, 7488, 9, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 3, 410, 7495, 8, 410, 1, 411, 1, 411, 1, 411, 5, 411, 7500, 8, 411, 10, 411, 12, 411, 7503, 9, 411, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 5, 412, 7513, 8, 412, 10, 412, 12, 412, 7516, 9, 412, 1, 412, 1, 412, 1, 413, 1, 413, 1, 413, 3, 413, 7523, 8, 413, 1, 414, 1, 414, 1, 414, 5, 414, 7528, 8, 414, 10, 414, 12, 414, 7531, 9, 414, 1, 415, 1, 415, 1, 415, 3, 415, 7536, 8, 415, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 3, 416, 7543, 8, 416, 1, 417, 1, 417, 1, 417, 1, 417, 5, 417, 7549, 8, 417, 10, 417, 12, 417, 7552, 9, 417, 3, 417, 7554, 8, 417, 1, 417, 1, 417, 1, 418, 1, 418, 1, 419, 1, 419, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 3, 420, 7569, 8, 420, 1, 421, 1, 421, 1, 422, 1, 422, 1, 422, 5, 422, 7576, 8, 422, 10, 422, 12, 422, 7579, 9, 422, 1, 423, 1, 423, 1, 423, 1, 423, 3, 423, 7585, 8, 423, 1, 424, 1, 424, 1, 424, 3, 424, 7590, 8, 424, 1, 425, 1, 425, 1, 425, 0, 0, 426, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 0, 59, 2, 0, 22, 22, 454, 454, 1, 0, 33, 34, 2, 0, 30, 30, 33, 33, 5, 0, 23, 23, 27, 28, 30, 31, 33, 33, 37, 37, 2, 0, 478, 479, 515, 515, 2, 0, 94, 94, 515, 515, 1, 0, 414, 415, 2, 0, 17, 17, 101, 103, 2, 0, 568, 568, 570, 570, 2, 0, 424, 424, 458, 458, 1, 0, 95, 96, 2, 0, 12, 12, 44, 44, 2, 0, 313, 313, 449, 449, 2, 0, 39, 39, 52, 52, 2, 0, 14, 16, 54, 55, 2, 0, 566, 566, 572, 572, 1, 0, 566, 567, 2, 0, 545, 545, 551, 551, 3, 0, 70, 70, 136, 139, 320, 320, 2, 0, 86, 86, 569, 569, 2, 0, 101, 101, 354, 357, 2, 0, 566, 566, 570, 570, 1, 0, 569, 570, 1, 0, 303, 304, 6, 0, 303, 305, 536, 541, 545, 545, 549, 553, 556, 557, 565, 569, 4, 0, 129, 129, 305, 305, 314, 315, 570, 571, 12, 0, 39, 39, 149, 158, 161, 163, 165, 166, 168, 168, 170, 177, 181, 181, 183, 188, 197, 198, 229, 229, 240, 245, 265, 265, 3, 0, 129, 129, 141, 141, 570, 570, 3, 0, 269, 275, 424, 424, 570, 570, 4, 0, 136, 137, 260, 264, 313, 313, 570, 570, 2, 0, 220, 220, 568, 568, 1, 0, 446, 448, 3, 0, 276, 276, 349, 349, 351, 352, 2, 0, 72, 72, 77, 77, 2, 0, 545, 545, 566, 566, 2, 0, 361, 361, 467, 467, 2, 0, 358, 358, 570, 570, 1, 0, 516, 517, 2, 0, 313, 315, 566, 566, 3, 0, 231, 231, 405, 405, 570, 570, 1, 0, 65, 66, 8, 0, 149, 155, 161, 163, 166, 166, 170, 177, 197, 198, 229, 229, 240, 245, 570, 570, 2, 0, 309, 309, 539, 539, 1, 0, 85, 86, 8, 0, 144, 146, 190, 190, 195, 195, 227, 227, 332, 332, 400, 401, 403, 406, 570, 570, 2, 0, 349, 349, 424, 425, 1, 0, 570, 571, 2, 1, 545, 545, 549, 549, 1, 0, 536, 541, 1, 0, 542, 543, 2, 0, 544, 548, 558, 558, 1, 0, 276, 281, 1, 0, 294, 298, 7, 0, 124, 124, 129, 129, 141, 141, 188, 188, 294, 300, 314, 315, 570, 571, 1, 0, 349, 350, 1, 0, 522, 523, 1, 0, 314, 315, 7, 0, 49, 49, 191, 192, 222, 222, 319, 319, 429, 429, 503, 503, 570, 570, 3, 0, 5, 462, 464, 535, 547, 548, 8612, 0, 855, 1, 0, 0, 0, 2, 861, 1, 0, 0, 0, 4, 881, 1, 0, 0, 0, 6, 883, 1, 0, 0, 0, 8, 915, 1, 0, 0, 0, 10, 1085, 1, 0, 0, 0, 12, 1101, 1, 0, 0, 0, 14, 1103, 1, 0, 0, 0, 16, 1119, 1, 0, 0, 0, 18, 1136, 1, 0, 0, 0, 20, 1162, 1, 0, 0, 0, 22, 1203, 1, 0, 0, 0, 24, 1205, 1, 0, 0, 0, 26, 1219, 1, 0, 0, 0, 28, 1235, 1, 0, 0, 0, 30, 1237, 1, 0, 0, 0, 32, 1247, 1, 0, 0, 0, 34, 1259, 1, 0, 0, 0, 36, 1261, 1, 0, 0, 0, 38, 1265, 1, 0, 0, 0, 40, 1292, 1, 0, 0, 0, 42, 1319, 1, 0, 0, 0, 44, 1432, 1, 0, 0, 0, 46, 1452, 1, 0, 0, 0, 48, 1454, 1, 0, 0, 0, 50, 1524, 1, 0, 0, 0, 52, 1545, 1, 0, 0, 0, 54, 1547, 1, 0, 0, 0, 56, 1555, 1, 0, 0, 0, 58, 1560, 1, 0, 0, 0, 60, 1593, 1, 0, 0, 0, 62, 1595, 1, 0, 0, 0, 64, 1600, 1, 0, 0, 0, 66, 1611, 1, 0, 0, 0, 68, 1621, 1, 0, 0, 0, 70, 1629, 1, 0, 0, 0, 72, 1637, 1, 0, 0, 0, 74, 1645, 1, 0, 0, 0, 76, 1653, 1, 0, 0, 0, 78, 1661, 1, 0, 0, 0, 80, 1669, 1, 0, 0, 0, 82, 1678, 1, 0, 0, 0, 84, 1687, 1, 0, 0, 0, 86, 1697, 1, 0, 0, 0, 88, 1718, 1, 0, 0, 0, 90, 1720, 1, 0, 0, 0, 92, 1740, 1, 0, 0, 0, 94, 1745, 1, 0, 0, 0, 96, 1751, 1, 0, 0, 0, 98, 1759, 1, 0, 0, 0, 100, 1795, 1, 0, 0, 0, 102, 1843, 1, 0, 0, 0, 104, 1849, 1, 0, 0, 0, 106, 1860, 1, 0, 0, 0, 108, 1862, 1, 0, 0, 0, 110, 1877, 1, 0, 0, 0, 112, 1879, 1, 0, 0, 0, 114, 1895, 1, 0, 0, 0, 116, 1897, 1, 0, 0, 0, 118, 1899, 1, 0, 0, 0, 120, 1908, 1, 0, 0, 0, 122, 1928, 1, 0, 0, 0, 124, 1963, 1, 0, 0, 0, 126, 2005, 1, 0, 0, 0, 128, 2007, 1, 0, 0, 0, 130, 2038, 1, 0, 0, 0, 132, 2041, 1, 0, 0, 0, 134, 2047, 1, 0, 0, 0, 136, 2055, 1, 0, 0, 0, 138, 2062, 1, 0, 0, 0, 140, 2089, 1, 0, 0, 0, 142, 2092, 1, 0, 0, 0, 144, 2115, 1, 0, 0, 0, 146, 2117, 1, 0, 0, 0, 148, 2199, 1, 0, 0, 0, 150, 2213, 1, 0, 0, 0, 152, 2233, 1, 0, 0, 0, 154, 2248, 1, 0, 0, 0, 156, 2250, 1, 0, 0, 0, 158, 2256, 1, 0, 0, 0, 160, 2264, 1, 0, 0, 0, 162, 2266, 1, 0, 0, 0, 164, 2274, 1, 0, 0, 0, 166, 2283, 1, 0, 0, 0, 168, 2295, 1, 0, 0, 0, 170, 2298, 1, 0, 0, 0, 172, 2302, 1, 0, 0, 0, 174, 2305, 1, 0, 0, 0, 176, 2315, 1, 0, 0, 0, 178, 2324, 1, 0, 0, 0, 180, 2326, 1, 0, 0, 0, 182, 2337, 1, 0, 0, 0, 184, 2346, 1, 0, 0, 0, 186, 2348, 1, 0, 0, 0, 188, 2391, 1, 0, 0, 0, 190, 2393, 1, 0, 0, 0, 192, 2401, 1, 0, 0, 0, 194, 2405, 1, 0, 0, 0, 196, 2420, 1, 0, 0, 0, 198, 2434, 1, 0, 0, 0, 200, 2449, 1, 0, 0, 0, 202, 2499, 1, 0, 0, 0, 204, 2501, 1, 0, 0, 0, 206, 2528, 1, 0, 0, 0, 208, 2532, 1, 0, 0, 0, 210, 2550, 1, 0, 0, 0, 212, 2552, 1, 0, 0, 0, 214, 2602, 1, 0, 0, 0, 216, 2609, 1, 0, 0, 0, 218, 2611, 1, 0, 0, 0, 220, 2632, 1, 0, 0, 0, 222, 2634, 1, 0, 0, 0, 224, 2638, 1, 0, 0, 0, 226, 2676, 1, 0, 0, 0, 228, 2678, 1, 0, 0, 0, 230, 2712, 1, 0, 0, 0, 232, 2727, 1, 0, 0, 0, 234, 2729, 1, 0, 0, 0, 236, 2737, 1, 0, 0, 0, 238, 2745, 1, 0, 0, 0, 240, 2767, 1, 0, 0, 0, 242, 2786, 1, 0, 0, 0, 244, 2794, 1, 0, 0, 0, 246, 2800, 1, 0, 0, 0, 248, 2803, 1, 0, 0, 0, 250, 2809, 1, 0, 0, 0, 252, 2819, 1, 0, 0, 0, 254, 2827, 1, 0, 0, 0, 256, 2829, 1, 0, 0, 0, 258, 2836, 1, 0, 0, 0, 260, 2844, 1, 0, 0, 0, 262, 2849, 1, 0, 0, 0, 264, 3322, 1, 0, 0, 0, 266, 3324, 1, 0, 0, 0, 268, 3331, 1, 0, 0, 0, 270, 3341, 1, 0, 0, 0, 272, 3355, 1, 0, 0, 0, 274, 3364, 1, 0, 0, 0, 276, 3374, 1, 0, 0, 0, 278, 3386, 1, 0, 0, 0, 280, 3391, 1, 0, 0, 0, 282, 3396, 1, 0, 0, 0, 284, 3448, 1, 0, 0, 0, 286, 3470, 1, 0, 0, 0, 288, 3472, 1, 0, 0, 0, 290, 3493, 1, 0, 0, 0, 292, 3505, 1, 0, 0, 0, 294, 3515, 1, 0, 0, 0, 296, 3517, 1, 0, 0, 0, 298, 3519, 1, 0, 0, 0, 300, 3523, 1, 0, 0, 0, 302, 3526, 1, 0, 0, 0, 304, 3538, 1, 0, 0, 0, 306, 3554, 1, 0, 0, 0, 308, 3556, 1, 0, 0, 0, 310, 3562, 1, 0, 0, 0, 312, 3564, 1, 0, 0, 0, 314, 3568, 1, 0, 0, 0, 316, 3583, 1, 0, 0, 0, 318, 3599, 1, 0, 0, 0, 320, 3633, 1, 0, 0, 0, 322, 3649, 1, 0, 0, 0, 324, 3664, 1, 0, 0, 0, 326, 3677, 1, 0, 0, 0, 328, 3688, 1, 0, 0, 0, 330, 3698, 1, 0, 0, 0, 332, 3720, 1, 0, 0, 0, 334, 3722, 1, 0, 0, 0, 336, 3730, 1, 0, 0, 0, 338, 3739, 1, 0, 0, 0, 340, 3747, 1, 0, 0, 0, 342, 3753, 1, 0, 0, 0, 344, 3759, 1, 0, 0, 0, 346, 3765, 1, 0, 0, 0, 348, 3775, 1, 0, 0, 0, 350, 3780, 1, 0, 0, 0, 352, 3798, 1, 0, 0, 0, 354, 3816, 1, 0, 0, 0, 356, 3818, 1, 0, 0, 0, 358, 3821, 1, 0, 0, 0, 360, 3825, 1, 0, 0, 0, 362, 3839, 1, 0, 0, 0, 364, 3842, 1, 0, 0, 0, 366, 3856, 1, 0, 0, 0, 368, 3884, 1, 0, 0, 0, 370, 3888, 1, 0, 0, 0, 372, 3890, 1, 0, 0, 0, 374, 3892, 1, 0, 0, 0, 376, 3897, 1, 0, 0, 0, 378, 3919, 1, 0, 0, 0, 380, 3921, 1, 0, 0, 0, 382, 3938, 1, 0, 0, 0, 384, 3942, 1, 0, 0, 0, 386, 3957, 1, 0, 0, 0, 388, 3969, 1, 0, 0, 0, 390, 3973, 1, 0, 0, 0, 392, 3978, 1, 0, 0, 0, 394, 3992, 1, 0, 0, 0, 396, 4006, 1, 0, 0, 0, 398, 4015, 1, 0, 0, 0, 400, 4090, 1, 0, 0, 0, 402, 4092, 1, 0, 0, 0, 404, 4100, 1, 0, 0, 0, 406, 4104, 1, 0, 0, 0, 408, 4132, 1, 0, 0, 0, 410, 4134, 1, 0, 0, 0, 412, 4140, 1, 0, 0, 0, 414, 4145, 1, 0, 0, 0, 416, 4150, 1, 0, 0, 0, 418, 4158, 1, 0, 0, 0, 420, 4166, 1, 0, 0, 0, 422, 4168, 1, 0, 0, 0, 424, 4176, 1, 0, 0, 0, 426, 4180, 1, 0, 0, 0, 428, 4187, 1, 0, 0, 0, 430, 4200, 1, 0, 0, 0, 432, 4204, 1, 0, 0, 0, 434, 4207, 1, 0, 0, 0, 436, 4215, 1, 0, 0, 0, 438, 4219, 1, 0, 0, 0, 440, 4227, 1, 0, 0, 0, 442, 4231, 1, 0, 0, 0, 444, 4239, 1, 0, 0, 0, 446, 4247, 1, 0, 0, 0, 448, 4252, 1, 0, 0, 0, 450, 4256, 1, 0, 0, 0, 452, 4258, 1, 0, 0, 0, 454, 4266, 1, 0, 0, 0, 456, 4277, 1, 0, 0, 0, 458, 4279, 1, 0, 0, 0, 460, 4291, 1, 0, 0, 0, 462, 4293, 1, 0, 0, 0, 464, 4301, 1, 0, 0, 0, 466, 4313, 1, 0, 0, 0, 468, 4315, 1, 0, 0, 0, 470, 4323, 1, 0, 0, 0, 472, 4325, 1, 0, 0, 0, 474, 4339, 1, 0, 0, 0, 476, 4341, 1, 0, 0, 0, 478, 4379, 1, 0, 0, 0, 480, 4381, 1, 0, 0, 0, 482, 4407, 1, 0, 0, 0, 484, 4413, 1, 0, 0, 0, 486, 4416, 1, 0, 0, 0, 488, 4449, 1, 0, 0, 0, 490, 4451, 1, 0, 0, 0, 492, 4453, 1, 0, 0, 0, 494, 4558, 1, 0, 0, 0, 496, 4560, 1, 0, 0, 0, 498, 4562, 1, 0, 0, 0, 500, 4623, 1, 0, 0, 0, 502, 4625, 1, 0, 0, 0, 504, 4673, 1, 0, 0, 0, 506, 4675, 1, 0, 0, 0, 508, 4692, 1, 0, 0, 0, 510, 4697, 1, 0, 0, 0, 512, 4720, 1, 0, 0, 0, 514, 4722, 1, 0, 0, 0, 516, 4733, 1, 0, 0, 0, 518, 4739, 1, 0, 0, 0, 520, 4741, 1, 0, 0, 0, 522, 4743, 1, 0, 0, 0, 524, 4745, 1, 0, 0, 0, 526, 4770, 1, 0, 0, 0, 528, 4785, 1, 0, 0, 0, 530, 4796, 1, 0, 0, 0, 532, 4798, 1, 0, 0, 0, 534, 4802, 1, 0, 0, 0, 536, 4817, 1, 0, 0, 0, 538, 4821, 1, 0, 0, 0, 540, 4824, 1, 0, 0, 0, 542, 4830, 1, 0, 0, 0, 544, 4875, 1, 0, 0, 0, 546, 4877, 1, 0, 0, 0, 548, 4915, 1, 0, 0, 0, 550, 4919, 1, 0, 0, 0, 552, 4929, 1, 0, 0, 0, 554, 4940, 1, 0, 0, 0, 556, 4942, 1, 0, 0, 0, 558, 4954, 1, 0, 0, 0, 560, 5007, 1, 0, 0, 0, 562, 5010, 1, 0, 0, 0, 564, 5095, 1, 0, 0, 0, 566, 5097, 1, 0, 0, 0, 568, 5101, 1, 0, 0, 0, 570, 5137, 1, 0, 0, 0, 572, 5139, 1, 0, 0, 0, 574, 5141, 1, 0, 0, 0, 576, 5164, 1, 0, 0, 0, 578, 5168, 1, 0, 0, 0, 580, 5179, 1, 0, 0, 0, 582, 5205, 1, 0, 0, 0, 584, 5207, 1, 0, 0, 0, 586, 5215, 1, 0, 0, 0, 588, 5231, 1, 0, 0, 0, 590, 5268, 1, 0, 0, 0, 592, 5270, 1, 0, 0, 0, 594, 5274, 1, 0, 0, 0, 596, 5278, 1, 0, 0, 0, 598, 5295, 1, 0, 0, 0, 600, 5297, 1, 0, 0, 0, 602, 5323, 1, 0, 0, 0, 604, 5338, 1, 0, 0, 0, 606, 5346, 1, 0, 0, 0, 608, 5357, 1, 0, 0, 0, 610, 5381, 1, 0, 0, 0, 612, 5406, 1, 0, 0, 0, 614, 5417, 1, 0, 0, 0, 616, 5429, 1, 0, 0, 0, 618, 5433, 1, 0, 0, 0, 620, 5455, 1, 0, 0, 0, 622, 5478, 1, 0, 0, 0, 624, 5482, 1, 0, 0, 0, 626, 5526, 1, 0, 0, 0, 628, 5556, 1, 0, 0, 0, 630, 5667, 1, 0, 0, 0, 632, 5702, 1, 0, 0, 0, 634, 5704, 1, 0, 0, 0, 636, 5709, 1, 0, 0, 0, 638, 5747, 1, 0, 0, 0, 640, 5751, 1, 0, 0, 0, 642, 5772, 1, 0, 0, 0, 644, 5788, 1, 0, 0, 0, 646, 5794, 1, 0, 0, 0, 648, 5805, 1, 0, 0, 0, 650, 5811, 1, 0, 0, 0, 652, 5818, 1, 0, 0, 0, 654, 5828, 1, 0, 0, 0, 656, 5844, 1, 0, 0, 0, 658, 5921, 1, 0, 0, 0, 660, 5940, 1, 0, 0, 0, 662, 5955, 1, 0, 0, 0, 664, 5967, 1, 0, 0, 0, 666, 6008, 1, 0, 0, 0, 668, 6010, 1, 0, 0, 0, 670, 6012, 1, 0, 0, 0, 672, 6020, 1, 0, 0, 0, 674, 6026, 1, 0, 0, 0, 676, 6028, 1, 0, 0, 0, 678, 6563, 1, 0, 0, 0, 680, 6586, 1, 0, 0, 0, 682, 6588, 1, 0, 0, 0, 684, 6596, 1, 0, 0, 0, 686, 6598, 1, 0, 0, 0, 688, 6606, 1, 0, 0, 0, 690, 6790, 1, 0, 0, 0, 692, 6792, 1, 0, 0, 0, 694, 6838, 1, 0, 0, 0, 696, 6854, 1, 0, 0, 0, 698, 6856, 1, 0, 0, 0, 700, 6903, 1, 0, 0, 0, 702, 6905, 1, 0, 0, 0, 704, 6920, 1, 0, 0, 0, 706, 6932, 1, 0, 0, 0, 708, 6936, 1, 0, 0, 0, 710, 6938, 1, 0, 0, 0, 712, 6962, 1, 0, 0, 0, 714, 6984, 1, 0, 0, 0, 716, 6996, 1, 0, 0, 0, 718, 7012, 1, 0, 0, 0, 720, 7014, 1, 0, 0, 0, 722, 7017, 1, 0, 0, 0, 724, 7020, 1, 0, 0, 0, 726, 7023, 1, 0, 0, 0, 728, 7026, 1, 0, 0, 0, 730, 7034, 1, 0, 0, 0, 732, 7038, 1, 0, 0, 0, 734, 7058, 1, 0, 0, 0, 736, 7076, 1, 0, 0, 0, 738, 7078, 1, 0, 0, 0, 740, 7104, 1, 0, 0, 0, 742, 7106, 1, 0, 0, 0, 744, 7124, 1, 0, 0, 0, 746, 7126, 1, 0, 0, 0, 748, 7128, 1, 0, 0, 0, 750, 7130, 1, 0, 0, 0, 752, 7134, 1, 0, 0, 0, 754, 7149, 1, 0, 0, 0, 756, 7157, 1, 0, 0, 0, 758, 7159, 1, 0, 0, 0, 760, 7165, 1, 0, 0, 0, 762, 7167, 1, 0, 0, 0, 764, 7175, 1, 0, 0, 0, 766, 7177, 1, 0, 0, 0, 768, 7180, 1, 0, 0, 0, 770, 7242, 1, 0, 0, 0, 772, 7245, 1, 0, 0, 0, 774, 7249, 1, 0, 0, 0, 776, 7289, 1, 0, 0, 0, 778, 7303, 1, 0, 0, 0, 780, 7305, 1, 0, 0, 0, 782, 7312, 1, 0, 0, 0, 784, 7320, 1, 0, 0, 0, 786, 7322, 1, 0, 0, 0, 788, 7330, 1, 0, 0, 0, 790, 7339, 1, 0, 0, 0, 792, 7343, 1, 0, 0, 0, 794, 7374, 1, 0, 0, 0, 796, 7376, 1, 0, 0, 0, 798, 7384, 1, 0, 0, 0, 800, 7393, 1, 0, 0, 0, 802, 7418, 1, 0, 0, 0, 804, 7420, 1, 0, 0, 0, 806, 7436, 1, 0, 0, 0, 808, 7443, 1, 0, 0, 0, 810, 7450, 1, 0, 0, 0, 812, 7452, 1, 0, 0, 0, 814, 7463, 1, 0, 0, 0, 816, 7470, 1, 0, 0, 0, 818, 7472, 1, 0, 0, 0, 820, 7494, 1, 0, 0, 0, 822, 7496, 1, 0, 0, 0, 824, 7504, 1, 0, 0, 0, 826, 7519, 1, 0, 0, 0, 828, 7524, 1, 0, 0, 0, 830, 7535, 1, 0, 0, 0, 832, 7542, 1, 0, 0, 0, 834, 7544, 1, 0, 0, 0, 836, 7557, 1, 0, 0, 0, 838, 7559, 1, 0, 0, 0, 840, 7561, 1, 0, 0, 0, 842, 7570, 1, 0, 0, 0, 844, 7572, 1, 0, 0, 0, 846, 7584, 1, 0, 0, 0, 848, 7589, 1, 0, 0, 0, 850, 7591, 1, 0, 0, 0, 852, 854, 3, 2, 1, 0, 853, 852, 1, 0, 0, 0, 854, 857, 1, 0, 0, 0, 855, 853, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 858, 1, 0, 0, 0, 857, 855, 1, 0, 0, 0, 858, 859, 5, 0, 0, 1, 859, 1, 1, 0, 0, 0, 860, 862, 3, 838, 419, 0, 861, 860, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 866, 1, 0, 0, 0, 863, 867, 3, 4, 2, 0, 864, 867, 3, 674, 337, 0, 865, 867, 3, 736, 368, 0, 866, 863, 1, 0, 0, 0, 866, 864, 1, 0, 0, 0, 866, 865, 1, 0, 0, 0, 867, 869, 1, 0, 0, 0, 868, 870, 5, 549, 0, 0, 869, 868, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 872, 1, 0, 0, 0, 871, 873, 5, 545, 0, 0, 872, 871, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 3, 1, 0, 0, 0, 874, 882, 3, 8, 4, 0, 875, 882, 3, 10, 5, 0, 876, 882, 3, 44, 22, 0, 877, 882, 3, 46, 23, 0, 878, 882, 3, 50, 25, 0, 879, 882, 3, 6, 3, 0, 880, 882, 3, 52, 26, 0, 881, 874, 1, 0, 0, 0, 881, 875, 1, 0, 0, 0, 881, 876, 1, 0, 0, 0, 881, 877, 1, 0, 0, 0, 881, 878, 1, 0, 0, 0, 881, 879, 1, 0, 0, 0, 881, 880, 1, 0, 0, 0, 882, 5, 1, 0, 0, 0, 883, 884, 5, 416, 0, 0, 884, 885, 5, 190, 0, 0, 885, 886, 5, 48, 0, 0, 886, 891, 3, 686, 343, 0, 887, 888, 5, 550, 0, 0, 888, 890, 3, 686, 343, 0, 889, 887, 1, 0, 0, 0, 890, 893, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 894, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 894, 895, 5, 73, 0, 0, 895, 900, 3, 684, 342, 0, 896, 897, 5, 303, 0, 0, 897, 899, 3, 684, 342, 0, 898, 896, 1, 0, 0, 0, 899, 902, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 908, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 903, 906, 5, 307, 0, 0, 904, 907, 3, 828, 414, 0, 905, 907, 5, 570, 0, 0, 906, 904, 1, 0, 0, 0, 906, 905, 1, 0, 0, 0, 907, 909, 1, 0, 0, 0, 908, 903, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 912, 1, 0, 0, 0, 910, 911, 5, 460, 0, 0, 911, 913, 5, 461, 0, 0, 912, 910, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 7, 1, 0, 0, 0, 914, 916, 3, 838, 419, 0, 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 920, 1, 0, 0, 0, 917, 919, 3, 840, 420, 0, 918, 917, 1, 0, 0, 0, 919, 922, 1, 0, 0, 0, 920, 918, 1, 0, 0, 0, 920, 921, 1, 0, 0, 0, 921, 923, 1, 0, 0, 0, 922, 920, 1, 0, 0, 0, 923, 926, 5, 17, 0, 0, 924, 925, 5, 304, 0, 0, 925, 927, 7, 0, 0, 0, 926, 924, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 962, 1, 0, 0, 0, 928, 963, 3, 102, 51, 0, 929, 963, 3, 140, 70, 0, 930, 963, 3, 156, 78, 0, 931, 963, 3, 238, 119, 0, 932, 963, 3, 240, 120, 0, 933, 963, 3, 426, 213, 0, 934, 963, 3, 428, 214, 0, 935, 963, 3, 162, 81, 0, 936, 963, 3, 228, 114, 0, 937, 963, 3, 534, 267, 0, 938, 963, 3, 542, 271, 0, 939, 963, 3, 550, 275, 0, 940, 963, 3, 558, 279, 0, 941, 963, 3, 584, 292, 0, 942, 963, 3, 586, 293, 0, 943, 963, 3, 588, 294, 0, 944, 963, 3, 608, 304, 0, 945, 963, 3, 610, 305, 0, 946, 963, 3, 612, 306, 0, 947, 963, 3, 618, 309, 0, 948, 963, 3, 624, 312, 0, 949, 963, 3, 58, 29, 0, 950, 963, 3, 90, 45, 0, 951, 963, 3, 174, 87, 0, 952, 963, 3, 204, 102, 0, 953, 963, 3, 208, 104, 0, 954, 963, 3, 218, 109, 0, 955, 963, 3, 556, 278, 0, 956, 963, 3, 574, 287, 0, 957, 963, 3, 824, 412, 0, 958, 963, 3, 186, 93, 0, 959, 963, 3, 194, 97, 0, 960, 963, 3, 196, 98, 0, 961, 963, 3, 198, 99, 0, 962, 928, 1, 0, 0, 0, 962, 929, 1, 0, 0, 0, 962, 930, 1, 0, 0, 0, 962, 931, 1, 0, 0, 0, 962, 932, 1, 0, 0, 0, 962, 933, 1, 0, 0, 0, 962, 934, 1, 0, 0, 0, 962, 935, 1, 0, 0, 0, 962, 936, 1, 0, 0, 0, 962, 937, 1, 0, 0, 0, 962, 938, 1, 0, 0, 0, 962, 939, 1, 0, 0, 0, 962, 940, 1, 0, 0, 0, 962, 941, 1, 0, 0, 0, 962, 942, 1, 0, 0, 0, 962, 943, 1, 0, 0, 0, 962, 944, 1, 0, 0, 0, 962, 945, 1, 0, 0, 0, 962, 946, 1, 0, 0, 0, 962, 947, 1, 0, 0, 0, 962, 948, 1, 0, 0, 0, 962, 949, 1, 0, 0, 0, 962, 950, 1, 0, 0, 0, 962, 951, 1, 0, 0, 0, 962, 952, 1, 0, 0, 0, 962, 953, 1, 0, 0, 0, 962, 954, 1, 0, 0, 0, 962, 955, 1, 0, 0, 0, 962, 956, 1, 0, 0, 0, 962, 957, 1, 0, 0, 0, 962, 958, 1, 0, 0, 0, 962, 959, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 961, 1, 0, 0, 0, 963, 9, 1, 0, 0, 0, 964, 965, 5, 18, 0, 0, 965, 966, 5, 23, 0, 0, 966, 968, 3, 828, 414, 0, 967, 969, 3, 148, 74, 0, 968, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 968, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 1086, 1, 0, 0, 0, 972, 973, 5, 18, 0, 0, 973, 974, 5, 27, 0, 0, 974, 976, 3, 828, 414, 0, 975, 977, 3, 150, 75, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 1086, 1, 0, 0, 0, 980, 981, 5, 18, 0, 0, 981, 982, 5, 28, 0, 0, 982, 984, 3, 828, 414, 0, 983, 985, 3, 152, 76, 0, 984, 983, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 1086, 1, 0, 0, 0, 988, 989, 5, 18, 0, 0, 989, 990, 5, 36, 0, 0, 990, 992, 3, 828, 414, 0, 991, 993, 3, 154, 77, 0, 992, 991, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 992, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 1086, 1, 0, 0, 0, 996, 997, 5, 18, 0, 0, 997, 998, 5, 332, 0, 0, 998, 999, 5, 359, 0, 0, 999, 1000, 3, 828, 414, 0, 1000, 1001, 5, 48, 0, 0, 1001, 1006, 3, 594, 297, 0, 1002, 1003, 5, 550, 0, 0, 1003, 1005, 3, 594, 297, 0, 1004, 1002, 1, 0, 0, 0, 1005, 1008, 1, 0, 0, 0, 1006, 1004, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1086, 1, 0, 0, 0, 1008, 1006, 1, 0, 0, 0, 1009, 1010, 5, 18, 0, 0, 1010, 1011, 5, 332, 0, 0, 1011, 1012, 5, 330, 0, 0, 1012, 1013, 3, 828, 414, 0, 1013, 1014, 5, 48, 0, 0, 1014, 1019, 3, 594, 297, 0, 1015, 1016, 5, 550, 0, 0, 1016, 1018, 3, 594, 297, 0, 1017, 1015, 1, 0, 0, 0, 1018, 1021, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1086, 1, 0, 0, 0, 1021, 1019, 1, 0, 0, 0, 1022, 1023, 5, 18, 0, 0, 1023, 1024, 5, 216, 0, 0, 1024, 1025, 5, 94, 0, 0, 1025, 1026, 7, 1, 0, 0, 1026, 1027, 3, 828, 414, 0, 1027, 1028, 5, 189, 0, 0, 1028, 1030, 5, 570, 0, 0, 1029, 1031, 3, 16, 8, 0, 1030, 1029, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 1030, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1086, 1, 0, 0, 0, 1034, 1035, 5, 18, 0, 0, 1035, 1036, 5, 468, 0, 0, 1036, 1086, 3, 666, 333, 0, 1037, 1038, 5, 18, 0, 0, 1038, 1039, 5, 33, 0, 0, 1039, 1040, 3, 828, 414, 0, 1040, 1042, 5, 554, 0, 0, 1041, 1043, 3, 20, 10, 0, 1042, 1041, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1047, 5, 555, 0, 0, 1047, 1086, 1, 0, 0, 0, 1048, 1049, 5, 18, 0, 0, 1049, 1050, 5, 34, 0, 0, 1050, 1051, 3, 828, 414, 0, 1051, 1053, 5, 554, 0, 0, 1052, 1054, 3, 20, 10, 0, 1053, 1052, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1053, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 1058, 5, 555, 0, 0, 1058, 1086, 1, 0, 0, 0, 1059, 1060, 5, 18, 0, 0, 1060, 1061, 5, 32, 0, 0, 1061, 1063, 3, 828, 414, 0, 1062, 1064, 3, 658, 329, 0, 1063, 1062, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1068, 1, 0, 0, 0, 1067, 1069, 5, 549, 0, 0, 1068, 1067, 1, 0, 0, 0, 1068, 1069, 1, 0, 0, 0, 1069, 1086, 1, 0, 0, 0, 1070, 1071, 5, 18, 0, 0, 1071, 1072, 5, 362, 0, 0, 1072, 1073, 5, 329, 0, 0, 1073, 1074, 5, 330, 0, 0, 1074, 1075, 3, 828, 414, 0, 1075, 1082, 3, 12, 6, 0, 1076, 1078, 5, 550, 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1081, 3, 12, 6, 0, 1080, 1077, 1, 0, 0, 0, 1081, 1084, 1, 0, 0, 0, 1082, 1080, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1086, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1085, 964, 1, 0, 0, 0, 1085, 972, 1, 0, 0, 0, 1085, 980, 1, 0, 0, 0, 1085, 988, 1, 0, 0, 0, 1085, 996, 1, 0, 0, 0, 1085, 1009, 1, 0, 0, 0, 1085, 1022, 1, 0, 0, 0, 1085, 1034, 1, 0, 0, 0, 1085, 1037, 1, 0, 0, 0, 1085, 1048, 1, 0, 0, 0, 1085, 1059, 1, 0, 0, 0, 1085, 1070, 1, 0, 0, 0, 1086, 11, 1, 0, 0, 0, 1087, 1088, 5, 48, 0, 0, 1088, 1093, 3, 14, 7, 0, 1089, 1090, 5, 550, 0, 0, 1090, 1092, 3, 14, 7, 0, 1091, 1089, 1, 0, 0, 0, 1092, 1095, 1, 0, 0, 0, 1093, 1091, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1102, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1096, 1097, 5, 47, 0, 0, 1097, 1102, 3, 578, 289, 0, 1098, 1099, 5, 19, 0, 0, 1099, 1100, 5, 348, 0, 0, 1100, 1102, 5, 566, 0, 0, 1101, 1087, 1, 0, 0, 0, 1101, 1096, 1, 0, 0, 0, 1101, 1098, 1, 0, 0, 0, 1102, 13, 1, 0, 0, 0, 1103, 1104, 3, 830, 415, 0, 1104, 1105, 5, 539, 0, 0, 1105, 1106, 5, 566, 0, 0, 1106, 15, 1, 0, 0, 0, 1107, 1108, 5, 48, 0, 0, 1108, 1113, 3, 18, 9, 0, 1109, 1110, 5, 550, 0, 0, 1110, 1112, 3, 18, 9, 0, 1111, 1109, 1, 0, 0, 0, 1112, 1115, 1, 0, 0, 0, 1113, 1111, 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1120, 1, 0, 0, 0, 1115, 1113, 1, 0, 0, 0, 1116, 1117, 5, 217, 0, 0, 1117, 1118, 5, 213, 0, 0, 1118, 1120, 5, 214, 0, 0, 1119, 1107, 1, 0, 0, 0, 1119, 1116, 1, 0, 0, 0, 1120, 17, 1, 0, 0, 0, 1121, 1122, 5, 210, 0, 0, 1122, 1123, 5, 539, 0, 0, 1123, 1137, 5, 566, 0, 0, 1124, 1125, 5, 211, 0, 0, 1125, 1126, 5, 539, 0, 0, 1126, 1137, 5, 566, 0, 0, 1127, 1128, 5, 566, 0, 0, 1128, 1129, 5, 539, 0, 0, 1129, 1137, 5, 566, 0, 0, 1130, 1131, 5, 566, 0, 0, 1131, 1132, 5, 539, 0, 0, 1132, 1137, 5, 94, 0, 0, 1133, 1134, 5, 566, 0, 0, 1134, 1135, 5, 539, 0, 0, 1135, 1137, 5, 515, 0, 0, 1136, 1121, 1, 0, 0, 0, 1136, 1124, 1, 0, 0, 0, 1136, 1127, 1, 0, 0, 0, 1136, 1130, 1, 0, 0, 0, 1136, 1133, 1, 0, 0, 0, 1137, 19, 1, 0, 0, 0, 1138, 1140, 3, 22, 11, 0, 1139, 1141, 5, 549, 0, 0, 1140, 1139, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1163, 1, 0, 0, 0, 1142, 1144, 3, 28, 14, 0, 1143, 1145, 5, 549, 0, 0, 1144, 1143, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 1163, 1, 0, 0, 0, 1146, 1148, 3, 30, 15, 0, 1147, 1149, 5, 549, 0, 0, 1148, 1147, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1163, 1, 0, 0, 0, 1150, 1152, 3, 32, 16, 0, 1151, 1153, 5, 549, 0, 0, 1152, 1151, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1163, 1, 0, 0, 0, 1154, 1156, 3, 36, 18, 0, 1155, 1157, 5, 549, 0, 0, 1156, 1155, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1163, 1, 0, 0, 0, 1158, 1160, 3, 38, 19, 0, 1159, 1161, 5, 549, 0, 0, 1160, 1159, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1163, 1, 0, 0, 0, 1162, 1138, 1, 0, 0, 0, 1162, 1142, 1, 0, 0, 0, 1162, 1146, 1, 0, 0, 0, 1162, 1150, 1, 0, 0, 0, 1162, 1154, 1, 0, 0, 0, 1162, 1158, 1, 0, 0, 0, 1163, 21, 1, 0, 0, 0, 1164, 1165, 5, 48, 0, 0, 1165, 1166, 5, 35, 0, 0, 1166, 1167, 5, 539, 0, 0, 1167, 1180, 3, 828, 414, 0, 1168, 1169, 5, 375, 0, 0, 1169, 1170, 5, 552, 0, 0, 1170, 1175, 3, 24, 12, 0, 1171, 1172, 5, 550, 0, 0, 1172, 1174, 3, 24, 12, 0, 1173, 1171, 1, 0, 0, 0, 1174, 1177, 1, 0, 0, 0, 1175, 1173, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, 0, 1176, 1178, 1, 0, 0, 0, 1177, 1175, 1, 0, 0, 0, 1178, 1179, 5, 553, 0, 0, 1179, 1181, 1, 0, 0, 0, 1180, 1168, 1, 0, 0, 0, 1180, 1181, 1, 0, 0, 0, 1181, 1204, 1, 0, 0, 0, 1182, 1183, 5, 48, 0, 0, 1183, 1184, 3, 26, 13, 0, 1184, 1185, 5, 94, 0, 0, 1185, 1186, 3, 34, 17, 0, 1186, 1204, 1, 0, 0, 0, 1187, 1188, 5, 48, 0, 0, 1188, 1189, 5, 552, 0, 0, 1189, 1194, 3, 26, 13, 0, 1190, 1191, 5, 550, 0, 0, 1191, 1193, 3, 26, 13, 0, 1192, 1190, 1, 0, 0, 0, 1193, 1196, 1, 0, 0, 0, 1194, 1192, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1197, 1, 0, 0, 0, 1196, 1194, 1, 0, 0, 0, 1197, 1198, 5, 553, 0, 0, 1198, 1199, 5, 94, 0, 0, 1199, 1200, 3, 34, 17, 0, 1200, 1204, 1, 0, 0, 0, 1201, 1202, 5, 48, 0, 0, 1202, 1204, 3, 26, 13, 0, 1203, 1164, 1, 0, 0, 0, 1203, 1182, 1, 0, 0, 0, 1203, 1187, 1, 0, 0, 0, 1203, 1201, 1, 0, 0, 0, 1204, 23, 1, 0, 0, 0, 1205, 1206, 3, 830, 415, 0, 1206, 1207, 5, 77, 0, 0, 1207, 1208, 3, 830, 415, 0, 1208, 25, 1, 0, 0, 0, 1209, 1210, 5, 194, 0, 0, 1210, 1211, 5, 539, 0, 0, 1211, 1220, 3, 500, 250, 0, 1212, 1213, 3, 830, 415, 0, 1213, 1214, 5, 539, 0, 0, 1214, 1215, 3, 526, 263, 0, 1215, 1220, 1, 0, 0, 0, 1216, 1217, 5, 566, 0, 0, 1217, 1218, 5, 539, 0, 0, 1218, 1220, 3, 526, 263, 0, 1219, 1209, 1, 0, 0, 0, 1219, 1212, 1, 0, 0, 0, 1219, 1216, 1, 0, 0, 0, 1220, 27, 1, 0, 0, 0, 1221, 1222, 5, 413, 0, 0, 1222, 1223, 5, 415, 0, 0, 1223, 1224, 3, 34, 17, 0, 1224, 1225, 5, 554, 0, 0, 1225, 1226, 3, 484, 242, 0, 1226, 1227, 5, 555, 0, 0, 1227, 1236, 1, 0, 0, 0, 1228, 1229, 5, 413, 0, 0, 1229, 1230, 5, 414, 0, 0, 1230, 1231, 3, 34, 17, 0, 1231, 1232, 5, 554, 0, 0, 1232, 1233, 3, 484, 242, 0, 1233, 1234, 5, 555, 0, 0, 1234, 1236, 1, 0, 0, 0, 1235, 1221, 1, 0, 0, 0, 1235, 1228, 1, 0, 0, 0, 1236, 29, 1, 0, 0, 0, 1237, 1238, 5, 19, 0, 0, 1238, 1239, 5, 189, 0, 0, 1239, 1244, 3, 34, 17, 0, 1240, 1241, 5, 550, 0, 0, 1241, 1243, 3, 34, 17, 0, 1242, 1240, 1, 0, 0, 0, 1243, 1246, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 31, 1, 0, 0, 0, 1246, 1244, 1, 0, 0, 0, 1247, 1248, 5, 454, 0, 0, 1248, 1249, 3, 34, 17, 0, 1249, 1250, 5, 140, 0, 0, 1250, 1251, 5, 554, 0, 0, 1251, 1252, 3, 484, 242, 0, 1252, 1253, 5, 555, 0, 0, 1253, 33, 1, 0, 0, 0, 1254, 1255, 3, 830, 415, 0, 1255, 1256, 5, 551, 0, 0, 1256, 1257, 3, 830, 415, 0, 1257, 1260, 1, 0, 0, 0, 1258, 1260, 3, 830, 415, 0, 1259, 1254, 1, 0, 0, 0, 1259, 1258, 1, 0, 0, 0, 1260, 35, 1, 0, 0, 0, 1261, 1262, 5, 47, 0, 0, 1262, 1263, 5, 206, 0, 0, 1263, 1264, 3, 444, 222, 0, 1264, 37, 1, 0, 0, 0, 1265, 1266, 5, 19, 0, 0, 1266, 1267, 5, 206, 0, 0, 1267, 1268, 5, 569, 0, 0, 1268, 39, 1, 0, 0, 0, 1269, 1270, 5, 397, 0, 0, 1270, 1271, 7, 2, 0, 0, 1271, 1274, 3, 828, 414, 0, 1272, 1273, 5, 453, 0, 0, 1273, 1275, 3, 828, 414, 0, 1274, 1272, 1, 0, 0, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1293, 1, 0, 0, 0, 1276, 1277, 5, 398, 0, 0, 1277, 1278, 5, 33, 0, 0, 1278, 1293, 3, 828, 414, 0, 1279, 1280, 5, 305, 0, 0, 1280, 1281, 5, 399, 0, 0, 1281, 1282, 5, 33, 0, 0, 1282, 1293, 3, 828, 414, 0, 1283, 1284, 5, 395, 0, 0, 1284, 1288, 5, 552, 0, 0, 1285, 1287, 3, 42, 21, 0, 1286, 1285, 1, 0, 0, 0, 1287, 1290, 1, 0, 0, 0, 1288, 1286, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1291, 1, 0, 0, 0, 1290, 1288, 1, 0, 0, 0, 1291, 1293, 5, 553, 0, 0, 1292, 1269, 1, 0, 0, 0, 1292, 1276, 1, 0, 0, 0, 1292, 1279, 1, 0, 0, 0, 1292, 1283, 1, 0, 0, 0, 1293, 41, 1, 0, 0, 0, 1294, 1295, 5, 395, 0, 0, 1295, 1296, 5, 157, 0, 0, 1296, 1301, 5, 566, 0, 0, 1297, 1298, 5, 33, 0, 0, 1298, 1302, 3, 828, 414, 0, 1299, 1300, 5, 30, 0, 0, 1300, 1302, 3, 828, 414, 0, 1301, 1297, 1, 0, 0, 0, 1301, 1299, 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1304, 1, 0, 0, 0, 1303, 1305, 5, 549, 0, 0, 1304, 1303, 1, 0, 0, 0, 1304, 1305, 1, 0, 0, 0, 1305, 1320, 1, 0, 0, 0, 1306, 1307, 5, 395, 0, 0, 1307, 1308, 5, 566, 0, 0, 1308, 1312, 5, 552, 0, 0, 1309, 1311, 3, 42, 21, 0, 1310, 1309, 1, 0, 0, 0, 1311, 1314, 1, 0, 0, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1315, 1, 0, 0, 0, 1314, 1312, 1, 0, 0, 0, 1315, 1317, 5, 553, 0, 0, 1316, 1318, 5, 549, 0, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1320, 1, 0, 0, 0, 1319, 1294, 1, 0, 0, 0, 1319, 1306, 1, 0, 0, 0, 1320, 43, 1, 0, 0, 0, 1321, 1322, 5, 19, 0, 0, 1322, 1323, 5, 23, 0, 0, 1323, 1433, 3, 828, 414, 0, 1324, 1325, 5, 19, 0, 0, 1325, 1326, 5, 27, 0, 0, 1326, 1433, 3, 828, 414, 0, 1327, 1328, 5, 19, 0, 0, 1328, 1329, 5, 28, 0, 0, 1329, 1433, 3, 828, 414, 0, 1330, 1331, 5, 19, 0, 0, 1331, 1332, 5, 37, 0, 0, 1332, 1433, 3, 828, 414, 0, 1333, 1334, 5, 19, 0, 0, 1334, 1335, 5, 30, 0, 0, 1335, 1433, 3, 828, 414, 0, 1336, 1337, 5, 19, 0, 0, 1337, 1338, 5, 31, 0, 0, 1338, 1433, 3, 828, 414, 0, 1339, 1340, 5, 19, 0, 0, 1340, 1341, 5, 33, 0, 0, 1341, 1433, 3, 828, 414, 0, 1342, 1343, 5, 19, 0, 0, 1343, 1344, 5, 34, 0, 0, 1344, 1433, 3, 828, 414, 0, 1345, 1346, 5, 19, 0, 0, 1346, 1347, 5, 29, 0, 0, 1347, 1433, 3, 828, 414, 0, 1348, 1349, 5, 19, 0, 0, 1349, 1350, 5, 36, 0, 0, 1350, 1433, 3, 828, 414, 0, 1351, 1352, 5, 19, 0, 0, 1352, 1353, 5, 115, 0, 0, 1353, 1354, 5, 117, 0, 0, 1354, 1433, 3, 828, 414, 0, 1355, 1356, 5, 19, 0, 0, 1356, 1357, 5, 41, 0, 0, 1357, 1358, 3, 828, 414, 0, 1358, 1359, 5, 94, 0, 0, 1359, 1360, 3, 828, 414, 0, 1360, 1433, 1, 0, 0, 0, 1361, 1362, 5, 19, 0, 0, 1362, 1363, 5, 332, 0, 0, 1363, 1364, 5, 359, 0, 0, 1364, 1433, 3, 828, 414, 0, 1365, 1366, 5, 19, 0, 0, 1366, 1367, 5, 332, 0, 0, 1367, 1368, 5, 330, 0, 0, 1368, 1433, 3, 828, 414, 0, 1369, 1370, 5, 19, 0, 0, 1370, 1371, 5, 464, 0, 0, 1371, 1372, 5, 465, 0, 0, 1372, 1373, 5, 330, 0, 0, 1373, 1433, 3, 828, 414, 0, 1374, 1375, 5, 19, 0, 0, 1375, 1376, 5, 32, 0, 0, 1376, 1433, 3, 828, 414, 0, 1377, 1378, 5, 19, 0, 0, 1378, 1379, 5, 229, 0, 0, 1379, 1380, 5, 230, 0, 0, 1380, 1433, 3, 828, 414, 0, 1381, 1382, 5, 19, 0, 0, 1382, 1383, 5, 349, 0, 0, 1383, 1384, 5, 440, 0, 0, 1384, 1433, 3, 828, 414, 0, 1385, 1386, 5, 19, 0, 0, 1386, 1387, 5, 378, 0, 0, 1387, 1388, 5, 376, 0, 0, 1388, 1433, 3, 828, 414, 0, 1389, 1390, 5, 19, 0, 0, 1390, 1391, 5, 384, 0, 0, 1391, 1392, 5, 376, 0, 0, 1392, 1433, 3, 828, 414, 0, 1393, 1394, 5, 19, 0, 0, 1394, 1395, 5, 329, 0, 0, 1395, 1396, 5, 359, 0, 0, 1396, 1433, 3, 828, 414, 0, 1397, 1398, 5, 19, 0, 0, 1398, 1399, 5, 362, 0, 0, 1399, 1400, 5, 329, 0, 0, 1400, 1401, 5, 330, 0, 0, 1401, 1433, 3, 828, 414, 0, 1402, 1403, 5, 19, 0, 0, 1403, 1404, 5, 518, 0, 0, 1404, 1405, 5, 520, 0, 0, 1405, 1433, 3, 828, 414, 0, 1406, 1407, 5, 19, 0, 0, 1407, 1408, 5, 231, 0, 0, 1408, 1433, 3, 828, 414, 0, 1409, 1410, 5, 19, 0, 0, 1410, 1411, 5, 238, 0, 0, 1411, 1412, 5, 239, 0, 0, 1412, 1413, 5, 330, 0, 0, 1413, 1433, 3, 828, 414, 0, 1414, 1415, 5, 19, 0, 0, 1415, 1416, 5, 236, 0, 0, 1416, 1417, 5, 333, 0, 0, 1417, 1433, 3, 828, 414, 0, 1418, 1419, 5, 19, 0, 0, 1419, 1420, 5, 233, 0, 0, 1420, 1433, 3, 828, 414, 0, 1421, 1422, 5, 19, 0, 0, 1422, 1423, 5, 469, 0, 0, 1423, 1433, 5, 566, 0, 0, 1424, 1425, 5, 19, 0, 0, 1425, 1426, 5, 222, 0, 0, 1426, 1427, 5, 566, 0, 0, 1427, 1430, 5, 307, 0, 0, 1428, 1431, 3, 828, 414, 0, 1429, 1431, 5, 570, 0, 0, 1430, 1428, 1, 0, 0, 0, 1430, 1429, 1, 0, 0, 0, 1431, 1433, 1, 0, 0, 0, 1432, 1321, 1, 0, 0, 0, 1432, 1324, 1, 0, 0, 0, 1432, 1327, 1, 0, 0, 0, 1432, 1330, 1, 0, 0, 0, 1432, 1333, 1, 0, 0, 0, 1432, 1336, 1, 0, 0, 0, 1432, 1339, 1, 0, 0, 0, 1432, 1342, 1, 0, 0, 0, 1432, 1345, 1, 0, 0, 0, 1432, 1348, 1, 0, 0, 0, 1432, 1351, 1, 0, 0, 0, 1432, 1355, 1, 0, 0, 0, 1432, 1361, 1, 0, 0, 0, 1432, 1365, 1, 0, 0, 0, 1432, 1369, 1, 0, 0, 0, 1432, 1374, 1, 0, 0, 0, 1432, 1377, 1, 0, 0, 0, 1432, 1381, 1, 0, 0, 0, 1432, 1385, 1, 0, 0, 0, 1432, 1389, 1, 0, 0, 0, 1432, 1393, 1, 0, 0, 0, 1432, 1397, 1, 0, 0, 0, 1432, 1402, 1, 0, 0, 0, 1432, 1406, 1, 0, 0, 0, 1432, 1409, 1, 0, 0, 0, 1432, 1414, 1, 0, 0, 0, 1432, 1418, 1, 0, 0, 0, 1432, 1421, 1, 0, 0, 0, 1432, 1424, 1, 0, 0, 0, 1433, 45, 1, 0, 0, 0, 1434, 1435, 5, 20, 0, 0, 1435, 1436, 3, 48, 24, 0, 1436, 1437, 3, 828, 414, 0, 1437, 1438, 5, 450, 0, 0, 1438, 1441, 3, 830, 415, 0, 1439, 1440, 5, 460, 0, 0, 1440, 1442, 5, 461, 0, 0, 1441, 1439, 1, 0, 0, 0, 1441, 1442, 1, 0, 0, 0, 1442, 1453, 1, 0, 0, 0, 1443, 1444, 5, 20, 0, 0, 1444, 1445, 5, 29, 0, 0, 1445, 1446, 3, 830, 415, 0, 1446, 1447, 5, 450, 0, 0, 1447, 1450, 3, 830, 415, 0, 1448, 1449, 5, 460, 0, 0, 1449, 1451, 5, 461, 0, 0, 1450, 1448, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1453, 1, 0, 0, 0, 1452, 1434, 1, 0, 0, 0, 1452, 1443, 1, 0, 0, 0, 1453, 47, 1, 0, 0, 0, 1454, 1455, 7, 3, 0, 0, 1455, 49, 1, 0, 0, 0, 1456, 1465, 5, 21, 0, 0, 1457, 1466, 5, 33, 0, 0, 1458, 1466, 5, 30, 0, 0, 1459, 1466, 5, 34, 0, 0, 1460, 1466, 5, 31, 0, 0, 1461, 1466, 5, 28, 0, 0, 1462, 1466, 5, 37, 0, 0, 1463, 1464, 5, 373, 0, 0, 1464, 1466, 5, 372, 0, 0, 1465, 1457, 1, 0, 0, 0, 1465, 1458, 1, 0, 0, 0, 1465, 1459, 1, 0, 0, 0, 1465, 1460, 1, 0, 0, 0, 1465, 1461, 1, 0, 0, 0, 1465, 1462, 1, 0, 0, 0, 1465, 1463, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 3, 828, 414, 0, 1468, 1469, 5, 450, 0, 0, 1469, 1470, 5, 222, 0, 0, 1470, 1476, 5, 566, 0, 0, 1471, 1474, 5, 307, 0, 0, 1472, 1475, 3, 828, 414, 0, 1473, 1475, 5, 570, 0, 0, 1474, 1472, 1, 0, 0, 0, 1474, 1473, 1, 0, 0, 0, 1475, 1477, 1, 0, 0, 0, 1476, 1471, 1, 0, 0, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1525, 1, 0, 0, 0, 1478, 1487, 5, 21, 0, 0, 1479, 1488, 5, 33, 0, 0, 1480, 1488, 5, 30, 0, 0, 1481, 1488, 5, 34, 0, 0, 1482, 1488, 5, 31, 0, 0, 1483, 1488, 5, 28, 0, 0, 1484, 1488, 5, 37, 0, 0, 1485, 1486, 5, 373, 0, 0, 1486, 1488, 5, 372, 0, 0, 1487, 1479, 1, 0, 0, 0, 1487, 1480, 1, 0, 0, 0, 1487, 1481, 1, 0, 0, 0, 1487, 1482, 1, 0, 0, 0, 1487, 1483, 1, 0, 0, 0, 1487, 1484, 1, 0, 0, 0, 1487, 1485, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 3, 828, 414, 0, 1490, 1493, 5, 450, 0, 0, 1491, 1494, 3, 828, 414, 0, 1492, 1494, 5, 570, 0, 0, 1493, 1491, 1, 0, 0, 0, 1493, 1492, 1, 0, 0, 0, 1494, 1525, 1, 0, 0, 0, 1495, 1496, 5, 21, 0, 0, 1496, 1497, 5, 23, 0, 0, 1497, 1498, 3, 828, 414, 0, 1498, 1501, 5, 450, 0, 0, 1499, 1502, 3, 828, 414, 0, 1500, 1502, 5, 570, 0, 0, 1501, 1499, 1, 0, 0, 0, 1501, 1500, 1, 0, 0, 0, 1502, 1525, 1, 0, 0, 0, 1503, 1504, 5, 21, 0, 0, 1504, 1505, 5, 222, 0, 0, 1505, 1506, 3, 828, 414, 0, 1506, 1507, 5, 450, 0, 0, 1507, 1508, 5, 222, 0, 0, 1508, 1514, 5, 566, 0, 0, 1509, 1512, 5, 307, 0, 0, 1510, 1513, 3, 828, 414, 0, 1511, 1513, 5, 570, 0, 0, 1512, 1510, 1, 0, 0, 0, 1512, 1511, 1, 0, 0, 0, 1513, 1515, 1, 0, 0, 0, 1514, 1509, 1, 0, 0, 0, 1514, 1515, 1, 0, 0, 0, 1515, 1525, 1, 0, 0, 0, 1516, 1517, 5, 21, 0, 0, 1517, 1518, 5, 222, 0, 0, 1518, 1519, 3, 828, 414, 0, 1519, 1522, 5, 450, 0, 0, 1520, 1523, 3, 828, 414, 0, 1521, 1523, 5, 570, 0, 0, 1522, 1520, 1, 0, 0, 0, 1522, 1521, 1, 0, 0, 0, 1523, 1525, 1, 0, 0, 0, 1524, 1456, 1, 0, 0, 0, 1524, 1478, 1, 0, 0, 0, 1524, 1495, 1, 0, 0, 0, 1524, 1503, 1, 0, 0, 0, 1524, 1516, 1, 0, 0, 0, 1525, 51, 1, 0, 0, 0, 1526, 1546, 3, 54, 27, 0, 1527, 1546, 3, 56, 28, 0, 1528, 1546, 3, 60, 30, 0, 1529, 1546, 3, 62, 31, 0, 1530, 1546, 3, 64, 32, 0, 1531, 1546, 3, 66, 33, 0, 1532, 1546, 3, 68, 34, 0, 1533, 1546, 3, 70, 35, 0, 1534, 1546, 3, 72, 36, 0, 1535, 1546, 3, 74, 37, 0, 1536, 1546, 3, 76, 38, 0, 1537, 1546, 3, 78, 39, 0, 1538, 1546, 3, 80, 40, 0, 1539, 1546, 3, 82, 41, 0, 1540, 1546, 3, 84, 42, 0, 1541, 1546, 3, 86, 43, 0, 1542, 1546, 3, 88, 44, 0, 1543, 1546, 3, 92, 46, 0, 1544, 1546, 3, 94, 47, 0, 1545, 1526, 1, 0, 0, 0, 1545, 1527, 1, 0, 0, 0, 1545, 1528, 1, 0, 0, 0, 1545, 1529, 1, 0, 0, 0, 1545, 1530, 1, 0, 0, 0, 1545, 1531, 1, 0, 0, 0, 1545, 1532, 1, 0, 0, 0, 1545, 1533, 1, 0, 0, 0, 1545, 1534, 1, 0, 0, 0, 1545, 1535, 1, 0, 0, 0, 1545, 1536, 1, 0, 0, 0, 1545, 1537, 1, 0, 0, 0, 1545, 1538, 1, 0, 0, 0, 1545, 1539, 1, 0, 0, 0, 1545, 1540, 1, 0, 0, 0, 1545, 1541, 1, 0, 0, 0, 1545, 1542, 1, 0, 0, 0, 1545, 1543, 1, 0, 0, 0, 1545, 1544, 1, 0, 0, 0, 1546, 53, 1, 0, 0, 0, 1547, 1548, 5, 17, 0, 0, 1548, 1549, 5, 29, 0, 0, 1549, 1550, 5, 474, 0, 0, 1550, 1553, 3, 828, 414, 0, 1551, 1552, 5, 511, 0, 0, 1552, 1554, 5, 566, 0, 0, 1553, 1551, 1, 0, 0, 0, 1553, 1554, 1, 0, 0, 0, 1554, 55, 1, 0, 0, 0, 1555, 1556, 5, 19, 0, 0, 1556, 1557, 5, 29, 0, 0, 1557, 1558, 5, 474, 0, 0, 1558, 1559, 3, 828, 414, 0, 1559, 57, 1, 0, 0, 0, 1560, 1561, 5, 486, 0, 0, 1561, 1562, 5, 474, 0, 0, 1562, 1563, 3, 830, 415, 0, 1563, 1564, 5, 552, 0, 0, 1564, 1565, 3, 96, 48, 0, 1565, 1569, 5, 553, 0, 0, 1566, 1567, 5, 480, 0, 0, 1567, 1568, 5, 86, 0, 0, 1568, 1570, 5, 475, 0, 0, 1569, 1566, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 59, 1, 0, 0, 0, 1571, 1572, 5, 18, 0, 0, 1572, 1573, 5, 486, 0, 0, 1573, 1574, 5, 474, 0, 0, 1574, 1575, 3, 830, 415, 0, 1575, 1576, 5, 47, 0, 0, 1576, 1577, 5, 29, 0, 0, 1577, 1578, 5, 475, 0, 0, 1578, 1579, 5, 552, 0, 0, 1579, 1580, 3, 96, 48, 0, 1580, 1581, 5, 553, 0, 0, 1581, 1594, 1, 0, 0, 0, 1582, 1583, 5, 18, 0, 0, 1583, 1584, 5, 486, 0, 0, 1584, 1585, 5, 474, 0, 0, 1585, 1586, 3, 830, 415, 0, 1586, 1587, 5, 134, 0, 0, 1587, 1588, 5, 29, 0, 0, 1588, 1589, 5, 475, 0, 0, 1589, 1590, 5, 552, 0, 0, 1590, 1591, 3, 96, 48, 0, 1591, 1592, 5, 553, 0, 0, 1592, 1594, 1, 0, 0, 0, 1593, 1571, 1, 0, 0, 0, 1593, 1582, 1, 0, 0, 0, 1594, 61, 1, 0, 0, 0, 1595, 1596, 5, 19, 0, 0, 1596, 1597, 5, 486, 0, 0, 1597, 1598, 5, 474, 0, 0, 1598, 1599, 3, 830, 415, 0, 1599, 63, 1, 0, 0, 0, 1600, 1601, 5, 476, 0, 0, 1601, 1602, 3, 96, 48, 0, 1602, 1603, 5, 94, 0, 0, 1603, 1604, 3, 828, 414, 0, 1604, 1605, 5, 552, 0, 0, 1605, 1606, 3, 98, 49, 0, 1606, 1609, 5, 553, 0, 0, 1607, 1608, 5, 73, 0, 0, 1608, 1610, 5, 566, 0, 0, 1609, 1607, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 65, 1, 0, 0, 0, 1611, 1612, 5, 477, 0, 0, 1612, 1613, 3, 96, 48, 0, 1613, 1614, 5, 94, 0, 0, 1614, 1619, 3, 828, 414, 0, 1615, 1616, 5, 552, 0, 0, 1616, 1617, 3, 98, 49, 0, 1617, 1618, 5, 553, 0, 0, 1618, 1620, 1, 0, 0, 0, 1619, 1615, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1620, 67, 1, 0, 0, 0, 1621, 1622, 5, 476, 0, 0, 1622, 1623, 5, 420, 0, 0, 1623, 1624, 5, 94, 0, 0, 1624, 1625, 5, 30, 0, 0, 1625, 1626, 3, 828, 414, 0, 1626, 1627, 5, 450, 0, 0, 1627, 1628, 3, 96, 48, 0, 1628, 69, 1, 0, 0, 0, 1629, 1630, 5, 477, 0, 0, 1630, 1631, 5, 420, 0, 0, 1631, 1632, 5, 94, 0, 0, 1632, 1633, 5, 30, 0, 0, 1633, 1634, 3, 828, 414, 0, 1634, 1635, 5, 72, 0, 0, 1635, 1636, 3, 96, 48, 0, 1636, 71, 1, 0, 0, 0, 1637, 1638, 5, 476, 0, 0, 1638, 1639, 5, 25, 0, 0, 1639, 1640, 5, 94, 0, 0, 1640, 1641, 5, 33, 0, 0, 1641, 1642, 3, 828, 414, 0, 1642, 1643, 5, 450, 0, 0, 1643, 1644, 3, 96, 48, 0, 1644, 73, 1, 0, 0, 0, 1645, 1646, 5, 477, 0, 0, 1646, 1647, 5, 25, 0, 0, 1647, 1648, 5, 94, 0, 0, 1648, 1649, 5, 33, 0, 0, 1649, 1650, 3, 828, 414, 0, 1650, 1651, 5, 72, 0, 0, 1651, 1652, 3, 96, 48, 0, 1652, 75, 1, 0, 0, 0, 1653, 1654, 5, 476, 0, 0, 1654, 1655, 5, 420, 0, 0, 1655, 1656, 5, 94, 0, 0, 1656, 1657, 5, 32, 0, 0, 1657, 1658, 3, 828, 414, 0, 1658, 1659, 5, 450, 0, 0, 1659, 1660, 3, 96, 48, 0, 1660, 77, 1, 0, 0, 0, 1661, 1662, 5, 477, 0, 0, 1662, 1663, 5, 420, 0, 0, 1663, 1664, 5, 94, 0, 0, 1664, 1665, 5, 32, 0, 0, 1665, 1666, 3, 828, 414, 0, 1666, 1667, 5, 72, 0, 0, 1667, 1668, 3, 96, 48, 0, 1668, 79, 1, 0, 0, 0, 1669, 1670, 5, 476, 0, 0, 1670, 1671, 5, 484, 0, 0, 1671, 1672, 5, 94, 0, 0, 1672, 1673, 5, 332, 0, 0, 1673, 1674, 5, 330, 0, 0, 1674, 1675, 3, 828, 414, 0, 1675, 1676, 5, 450, 0, 0, 1676, 1677, 3, 96, 48, 0, 1677, 81, 1, 0, 0, 0, 1678, 1679, 5, 477, 0, 0, 1679, 1680, 5, 484, 0, 0, 1680, 1681, 5, 94, 0, 0, 1681, 1682, 5, 332, 0, 0, 1682, 1683, 5, 330, 0, 0, 1683, 1684, 3, 828, 414, 0, 1684, 1685, 5, 72, 0, 0, 1685, 1686, 3, 96, 48, 0, 1686, 83, 1, 0, 0, 0, 1687, 1688, 5, 476, 0, 0, 1688, 1689, 5, 484, 0, 0, 1689, 1690, 5, 94, 0, 0, 1690, 1691, 5, 362, 0, 0, 1691, 1692, 5, 329, 0, 0, 1692, 1693, 5, 330, 0, 0, 1693, 1694, 3, 828, 414, 0, 1694, 1695, 5, 450, 0, 0, 1695, 1696, 3, 96, 48, 0, 1696, 85, 1, 0, 0, 0, 1697, 1698, 5, 477, 0, 0, 1698, 1699, 5, 484, 0, 0, 1699, 1700, 5, 94, 0, 0, 1700, 1701, 5, 362, 0, 0, 1701, 1702, 5, 329, 0, 0, 1702, 1703, 5, 330, 0, 0, 1703, 1704, 3, 828, 414, 0, 1704, 1705, 5, 72, 0, 0, 1705, 1706, 3, 96, 48, 0, 1706, 87, 1, 0, 0, 0, 1707, 1708, 5, 18, 0, 0, 1708, 1709, 5, 59, 0, 0, 1709, 1710, 5, 473, 0, 0, 1710, 1711, 5, 485, 0, 0, 1711, 1719, 7, 4, 0, 0, 1712, 1713, 5, 18, 0, 0, 1713, 1714, 5, 59, 0, 0, 1714, 1715, 5, 473, 0, 0, 1715, 1716, 5, 481, 0, 0, 1716, 1717, 5, 516, 0, 0, 1717, 1719, 7, 5, 0, 0, 1718, 1707, 1, 0, 0, 0, 1718, 1712, 1, 0, 0, 0, 1719, 89, 1, 0, 0, 0, 1720, 1721, 5, 481, 0, 0, 1721, 1722, 5, 486, 0, 0, 1722, 1723, 5, 566, 0, 0, 1723, 1724, 5, 371, 0, 0, 1724, 1727, 5, 566, 0, 0, 1725, 1726, 5, 23, 0, 0, 1726, 1728, 3, 828, 414, 0, 1727, 1725, 1, 0, 0, 0, 1727, 1728, 1, 0, 0, 0, 1728, 1729, 1, 0, 0, 0, 1729, 1730, 5, 552, 0, 0, 1730, 1735, 3, 830, 415, 0, 1731, 1732, 5, 550, 0, 0, 1732, 1734, 3, 830, 415, 0, 1733, 1731, 1, 0, 0, 0, 1734, 1737, 1, 0, 0, 0, 1735, 1733, 1, 0, 0, 0, 1735, 1736, 1, 0, 0, 0, 1736, 1738, 1, 0, 0, 0, 1737, 1735, 1, 0, 0, 0, 1738, 1739, 5, 553, 0, 0, 1739, 91, 1, 0, 0, 0, 1740, 1741, 5, 19, 0, 0, 1741, 1742, 5, 481, 0, 0, 1742, 1743, 5, 486, 0, 0, 1743, 1744, 5, 566, 0, 0, 1744, 93, 1, 0, 0, 0, 1745, 1746, 5, 416, 0, 0, 1746, 1749, 5, 473, 0, 0, 1747, 1748, 5, 307, 0, 0, 1748, 1750, 3, 828, 414, 0, 1749, 1747, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 95, 1, 0, 0, 0, 1751, 1756, 3, 828, 414, 0, 1752, 1753, 5, 550, 0, 0, 1753, 1755, 3, 828, 414, 0, 1754, 1752, 1, 0, 0, 0, 1755, 1758, 1, 0, 0, 0, 1756, 1754, 1, 0, 0, 0, 1756, 1757, 1, 0, 0, 0, 1757, 97, 1, 0, 0, 0, 1758, 1756, 1, 0, 0, 0, 1759, 1764, 3, 100, 50, 0, 1760, 1761, 5, 550, 0, 0, 1761, 1763, 3, 100, 50, 0, 1762, 1760, 1, 0, 0, 0, 1763, 1766, 1, 0, 0, 0, 1764, 1762, 1, 0, 0, 0, 1764, 1765, 1, 0, 0, 0, 1765, 99, 1, 0, 0, 0, 1766, 1764, 1, 0, 0, 0, 1767, 1796, 5, 17, 0, 0, 1768, 1796, 5, 101, 0, 0, 1769, 1770, 5, 509, 0, 0, 1770, 1796, 5, 544, 0, 0, 1771, 1772, 5, 509, 0, 0, 1772, 1773, 5, 552, 0, 0, 1773, 1778, 5, 570, 0, 0, 1774, 1775, 5, 550, 0, 0, 1775, 1777, 5, 570, 0, 0, 1776, 1774, 1, 0, 0, 0, 1777, 1780, 1, 0, 0, 0, 1778, 1776, 1, 0, 0, 0, 1778, 1779, 1, 0, 0, 0, 1779, 1781, 1, 0, 0, 0, 1780, 1778, 1, 0, 0, 0, 1781, 1796, 5, 553, 0, 0, 1782, 1783, 5, 510, 0, 0, 1783, 1796, 5, 544, 0, 0, 1784, 1785, 5, 510, 0, 0, 1785, 1786, 5, 552, 0, 0, 1786, 1791, 5, 570, 0, 0, 1787, 1788, 5, 550, 0, 0, 1788, 1790, 5, 570, 0, 0, 1789, 1787, 1, 0, 0, 0, 1790, 1793, 1, 0, 0, 0, 1791, 1789, 1, 0, 0, 0, 1791, 1792, 1, 0, 0, 0, 1792, 1794, 1, 0, 0, 0, 1793, 1791, 1, 0, 0, 0, 1794, 1796, 5, 553, 0, 0, 1795, 1767, 1, 0, 0, 0, 1795, 1768, 1, 0, 0, 0, 1795, 1769, 1, 0, 0, 0, 1795, 1771, 1, 0, 0, 0, 1795, 1782, 1, 0, 0, 0, 1795, 1784, 1, 0, 0, 0, 1796, 101, 1, 0, 0, 0, 1797, 1798, 5, 24, 0, 0, 1798, 1799, 5, 23, 0, 0, 1799, 1801, 3, 828, 414, 0, 1800, 1802, 3, 104, 52, 0, 1801, 1800, 1, 0, 0, 0, 1801, 1802, 1, 0, 0, 0, 1802, 1804, 1, 0, 0, 0, 1803, 1805, 3, 106, 53, 0, 1804, 1803, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1844, 1, 0, 0, 0, 1806, 1807, 5, 11, 0, 0, 1807, 1808, 5, 23, 0, 0, 1808, 1810, 3, 828, 414, 0, 1809, 1811, 3, 104, 52, 0, 1810, 1809, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1813, 1, 0, 0, 0, 1812, 1814, 3, 106, 53, 0, 1813, 1812, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1844, 1, 0, 0, 0, 1815, 1816, 5, 25, 0, 0, 1816, 1817, 5, 23, 0, 0, 1817, 1819, 3, 828, 414, 0, 1818, 1820, 3, 106, 53, 0, 1819, 1818, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 1823, 5, 77, 0, 0, 1822, 1824, 5, 552, 0, 0, 1823, 1822, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 1827, 3, 698, 349, 0, 1826, 1828, 5, 553, 0, 0, 1827, 1826, 1, 0, 0, 0, 1827, 1828, 1, 0, 0, 0, 1828, 1844, 1, 0, 0, 0, 1829, 1830, 5, 26, 0, 0, 1830, 1831, 5, 23, 0, 0, 1831, 1833, 3, 828, 414, 0, 1832, 1834, 3, 106, 53, 0, 1833, 1832, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 1844, 1, 0, 0, 0, 1835, 1836, 5, 23, 0, 0, 1836, 1838, 3, 828, 414, 0, 1837, 1839, 3, 104, 52, 0, 1838, 1837, 1, 0, 0, 0, 1838, 1839, 1, 0, 0, 0, 1839, 1841, 1, 0, 0, 0, 1840, 1842, 3, 106, 53, 0, 1841, 1840, 1, 0, 0, 0, 1841, 1842, 1, 0, 0, 0, 1842, 1844, 1, 0, 0, 0, 1843, 1797, 1, 0, 0, 0, 1843, 1806, 1, 0, 0, 0, 1843, 1815, 1, 0, 0, 0, 1843, 1829, 1, 0, 0, 0, 1843, 1835, 1, 0, 0, 0, 1844, 103, 1, 0, 0, 0, 1845, 1846, 5, 46, 0, 0, 1846, 1850, 3, 828, 414, 0, 1847, 1848, 5, 45, 0, 0, 1848, 1850, 3, 828, 414, 0, 1849, 1845, 1, 0, 0, 0, 1849, 1847, 1, 0, 0, 0, 1850, 105, 1, 0, 0, 0, 1851, 1853, 5, 552, 0, 0, 1852, 1854, 3, 118, 59, 0, 1853, 1852, 1, 0, 0, 0, 1853, 1854, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1857, 5, 553, 0, 0, 1856, 1858, 3, 108, 54, 0, 1857, 1856, 1, 0, 0, 0, 1857, 1858, 1, 0, 0, 0, 1858, 1861, 1, 0, 0, 0, 1859, 1861, 3, 108, 54, 0, 1860, 1851, 1, 0, 0, 0, 1860, 1859, 1, 0, 0, 0, 1861, 107, 1, 0, 0, 0, 1862, 1869, 3, 110, 55, 0, 1863, 1865, 5, 550, 0, 0, 1864, 1863, 1, 0, 0, 0, 1864, 1865, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1868, 3, 110, 55, 0, 1867, 1864, 1, 0, 0, 0, 1868, 1871, 1, 0, 0, 0, 1869, 1867, 1, 0, 0, 0, 1869, 1870, 1, 0, 0, 0, 1870, 109, 1, 0, 0, 0, 1871, 1869, 1, 0, 0, 0, 1872, 1873, 5, 429, 0, 0, 1873, 1878, 5, 566, 0, 0, 1874, 1875, 5, 41, 0, 0, 1875, 1878, 3, 132, 66, 0, 1876, 1878, 3, 112, 56, 0, 1877, 1872, 1, 0, 0, 0, 1877, 1874, 1, 0, 0, 0, 1877, 1876, 1, 0, 0, 0, 1878, 111, 1, 0, 0, 0, 1879, 1880, 5, 94, 0, 0, 1880, 1881, 3, 114, 57, 0, 1881, 1882, 3, 116, 58, 0, 1882, 1883, 5, 114, 0, 0, 1883, 1889, 3, 828, 414, 0, 1884, 1886, 5, 552, 0, 0, 1885, 1887, 5, 569, 0, 0, 1886, 1885, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1888, 1, 0, 0, 0, 1888, 1890, 5, 553, 0, 0, 1889, 1884, 1, 0, 0, 0, 1889, 1890, 1, 0, 0, 0, 1890, 1893, 1, 0, 0, 0, 1891, 1892, 5, 321, 0, 0, 1892, 1894, 5, 320, 0, 0, 1893, 1891, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 113, 1, 0, 0, 0, 1895, 1896, 7, 6, 0, 0, 1896, 115, 1, 0, 0, 0, 1897, 1898, 7, 7, 0, 0, 1898, 117, 1, 0, 0, 0, 1899, 1904, 3, 120, 60, 0, 1900, 1901, 5, 550, 0, 0, 1901, 1903, 3, 120, 60, 0, 1902, 1900, 1, 0, 0, 0, 1903, 1906, 1, 0, 0, 0, 1904, 1902, 1, 0, 0, 0, 1904, 1905, 1, 0, 0, 0, 1905, 119, 1, 0, 0, 0, 1906, 1904, 1, 0, 0, 0, 1907, 1909, 3, 838, 419, 0, 1908, 1907, 1, 0, 0, 0, 1908, 1909, 1, 0, 0, 0, 1909, 1913, 1, 0, 0, 0, 1910, 1912, 3, 840, 420, 0, 1911, 1910, 1, 0, 0, 0, 1912, 1915, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1914, 1916, 1, 0, 0, 0, 1915, 1913, 1, 0, 0, 0, 1916, 1917, 3, 122, 61, 0, 1917, 1918, 5, 558, 0, 0, 1918, 1922, 3, 126, 63, 0, 1919, 1921, 3, 124, 62, 0, 1920, 1919, 1, 0, 0, 0, 1921, 1924, 1, 0, 0, 0, 1922, 1920, 1, 0, 0, 0, 1922, 1923, 1, 0, 0, 0, 1923, 121, 1, 0, 0, 0, 1924, 1922, 1, 0, 0, 0, 1925, 1929, 5, 570, 0, 0, 1926, 1929, 5, 572, 0, 0, 1927, 1929, 3, 850, 425, 0, 1928, 1925, 1, 0, 0, 0, 1928, 1926, 1, 0, 0, 0, 1928, 1927, 1, 0, 0, 0, 1929, 123, 1, 0, 0, 0, 1930, 1933, 5, 7, 0, 0, 1931, 1932, 5, 320, 0, 0, 1932, 1934, 5, 566, 0, 0, 1933, 1931, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1964, 1, 0, 0, 0, 1935, 1936, 5, 305, 0, 0, 1936, 1939, 5, 306, 0, 0, 1937, 1938, 5, 320, 0, 0, 1938, 1940, 5, 566, 0, 0, 1939, 1937, 1, 0, 0, 0, 1939, 1940, 1, 0, 0, 0, 1940, 1964, 1, 0, 0, 0, 1941, 1944, 5, 312, 0, 0, 1942, 1943, 5, 320, 0, 0, 1943, 1945, 5, 566, 0, 0, 1944, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1964, 1, 0, 0, 0, 1946, 1949, 5, 313, 0, 0, 1947, 1950, 3, 832, 416, 0, 1948, 1950, 3, 784, 392, 0, 1949, 1947, 1, 0, 0, 0, 1949, 1948, 1, 0, 0, 0, 1950, 1964, 1, 0, 0, 0, 1951, 1954, 5, 319, 0, 0, 1952, 1953, 5, 320, 0, 0, 1953, 1955, 5, 566, 0, 0, 1954, 1952, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 1964, 1, 0, 0, 0, 1956, 1961, 5, 328, 0, 0, 1957, 1959, 5, 508, 0, 0, 1958, 1957, 1, 0, 0, 0, 1958, 1959, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 3, 828, 414, 0, 1961, 1958, 1, 0, 0, 0, 1961, 1962, 1, 0, 0, 0, 1962, 1964, 1, 0, 0, 0, 1963, 1930, 1, 0, 0, 0, 1963, 1935, 1, 0, 0, 0, 1963, 1941, 1, 0, 0, 0, 1963, 1946, 1, 0, 0, 0, 1963, 1951, 1, 0, 0, 0, 1963, 1956, 1, 0, 0, 0, 1964, 125, 1, 0, 0, 0, 1965, 1969, 5, 276, 0, 0, 1966, 1967, 5, 552, 0, 0, 1967, 1968, 7, 8, 0, 0, 1968, 1970, 5, 553, 0, 0, 1969, 1966, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 2006, 1, 0, 0, 0, 1971, 2006, 5, 277, 0, 0, 1972, 2006, 5, 278, 0, 0, 1973, 2006, 5, 279, 0, 0, 1974, 2006, 5, 280, 0, 0, 1975, 2006, 5, 281, 0, 0, 1976, 2006, 5, 282, 0, 0, 1977, 2006, 5, 283, 0, 0, 1978, 2006, 5, 284, 0, 0, 1979, 2006, 5, 285, 0, 0, 1980, 2006, 5, 286, 0, 0, 1981, 2006, 5, 287, 0, 0, 1982, 2006, 5, 288, 0, 0, 1983, 2006, 5, 289, 0, 0, 1984, 2006, 5, 290, 0, 0, 1985, 2006, 5, 291, 0, 0, 1986, 1987, 5, 292, 0, 0, 1987, 1988, 5, 552, 0, 0, 1988, 1989, 3, 128, 64, 0, 1989, 1990, 5, 553, 0, 0, 1990, 2006, 1, 0, 0, 0, 1991, 1992, 5, 23, 0, 0, 1992, 1993, 5, 540, 0, 0, 1993, 1994, 5, 570, 0, 0, 1994, 2006, 5, 541, 0, 0, 1995, 1996, 5, 293, 0, 0, 1996, 2006, 3, 828, 414, 0, 1997, 1998, 5, 28, 0, 0, 1998, 1999, 5, 552, 0, 0, 1999, 2000, 3, 828, 414, 0, 2000, 2001, 5, 553, 0, 0, 2001, 2006, 1, 0, 0, 0, 2002, 2003, 5, 13, 0, 0, 2003, 2006, 3, 828, 414, 0, 2004, 2006, 3, 828, 414, 0, 2005, 1965, 1, 0, 0, 0, 2005, 1971, 1, 0, 0, 0, 2005, 1972, 1, 0, 0, 0, 2005, 1973, 1, 0, 0, 0, 2005, 1974, 1, 0, 0, 0, 2005, 1975, 1, 0, 0, 0, 2005, 1976, 1, 0, 0, 0, 2005, 1977, 1, 0, 0, 0, 2005, 1978, 1, 0, 0, 0, 2005, 1979, 1, 0, 0, 0, 2005, 1980, 1, 0, 0, 0, 2005, 1981, 1, 0, 0, 0, 2005, 1982, 1, 0, 0, 0, 2005, 1983, 1, 0, 0, 0, 2005, 1984, 1, 0, 0, 0, 2005, 1985, 1, 0, 0, 0, 2005, 1986, 1, 0, 0, 0, 2005, 1991, 1, 0, 0, 0, 2005, 1995, 1, 0, 0, 0, 2005, 1997, 1, 0, 0, 0, 2005, 2002, 1, 0, 0, 0, 2005, 2004, 1, 0, 0, 0, 2006, 127, 1, 0, 0, 0, 2007, 2008, 7, 9, 0, 0, 2008, 129, 1, 0, 0, 0, 2009, 2013, 5, 276, 0, 0, 2010, 2011, 5, 552, 0, 0, 2011, 2012, 7, 8, 0, 0, 2012, 2014, 5, 553, 0, 0, 2013, 2010, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2039, 1, 0, 0, 0, 2015, 2039, 5, 277, 0, 0, 2016, 2039, 5, 278, 0, 0, 2017, 2039, 5, 279, 0, 0, 2018, 2039, 5, 280, 0, 0, 2019, 2039, 5, 281, 0, 0, 2020, 2039, 5, 282, 0, 0, 2021, 2039, 5, 283, 0, 0, 2022, 2039, 5, 284, 0, 0, 2023, 2039, 5, 285, 0, 0, 2024, 2039, 5, 286, 0, 0, 2025, 2039, 5, 287, 0, 0, 2026, 2039, 5, 288, 0, 0, 2027, 2039, 5, 289, 0, 0, 2028, 2039, 5, 290, 0, 0, 2029, 2039, 5, 291, 0, 0, 2030, 2031, 5, 293, 0, 0, 2031, 2039, 3, 828, 414, 0, 2032, 2033, 5, 28, 0, 0, 2033, 2034, 5, 552, 0, 0, 2034, 2035, 3, 828, 414, 0, 2035, 2036, 5, 553, 0, 0, 2036, 2039, 1, 0, 0, 0, 2037, 2039, 3, 828, 414, 0, 2038, 2009, 1, 0, 0, 0, 2038, 2015, 1, 0, 0, 0, 2038, 2016, 1, 0, 0, 0, 2038, 2017, 1, 0, 0, 0, 2038, 2018, 1, 0, 0, 0, 2038, 2019, 1, 0, 0, 0, 2038, 2020, 1, 0, 0, 0, 2038, 2021, 1, 0, 0, 0, 2038, 2022, 1, 0, 0, 0, 2038, 2023, 1, 0, 0, 0, 2038, 2024, 1, 0, 0, 0, 2038, 2025, 1, 0, 0, 0, 2038, 2026, 1, 0, 0, 0, 2038, 2027, 1, 0, 0, 0, 2038, 2028, 1, 0, 0, 0, 2038, 2029, 1, 0, 0, 0, 2038, 2030, 1, 0, 0, 0, 2038, 2032, 1, 0, 0, 0, 2038, 2037, 1, 0, 0, 0, 2039, 131, 1, 0, 0, 0, 2040, 2042, 5, 570, 0, 0, 2041, 2040, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2043, 1, 0, 0, 0, 2043, 2044, 5, 552, 0, 0, 2044, 2045, 3, 134, 67, 0, 2045, 2046, 5, 553, 0, 0, 2046, 133, 1, 0, 0, 0, 2047, 2052, 3, 136, 68, 0, 2048, 2049, 5, 550, 0, 0, 2049, 2051, 3, 136, 68, 0, 2050, 2048, 1, 0, 0, 0, 2051, 2054, 1, 0, 0, 0, 2052, 2050, 1, 0, 0, 0, 2052, 2053, 1, 0, 0, 0, 2053, 135, 1, 0, 0, 0, 2054, 2052, 1, 0, 0, 0, 2055, 2057, 3, 138, 69, 0, 2056, 2058, 7, 10, 0, 0, 2057, 2056, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 137, 1, 0, 0, 0, 2059, 2063, 5, 570, 0, 0, 2060, 2063, 5, 572, 0, 0, 2061, 2063, 3, 850, 425, 0, 2062, 2059, 1, 0, 0, 0, 2062, 2060, 1, 0, 0, 0, 2062, 2061, 1, 0, 0, 0, 2063, 139, 1, 0, 0, 0, 2064, 2065, 5, 27, 0, 0, 2065, 2066, 3, 828, 414, 0, 2066, 2067, 5, 72, 0, 0, 2067, 2068, 3, 828, 414, 0, 2068, 2069, 5, 450, 0, 0, 2069, 2071, 3, 828, 414, 0, 2070, 2072, 3, 142, 71, 0, 2071, 2070, 1, 0, 0, 0, 2071, 2072, 1, 0, 0, 0, 2072, 2090, 1, 0, 0, 0, 2073, 2074, 5, 27, 0, 0, 2074, 2075, 3, 828, 414, 0, 2075, 2076, 5, 552, 0, 0, 2076, 2077, 5, 72, 0, 0, 2077, 2078, 3, 828, 414, 0, 2078, 2079, 5, 450, 0, 0, 2079, 2084, 3, 828, 414, 0, 2080, 2081, 5, 550, 0, 0, 2081, 2083, 3, 144, 72, 0, 2082, 2080, 1, 0, 0, 0, 2083, 2086, 1, 0, 0, 0, 2084, 2082, 1, 0, 0, 0, 2084, 2085, 1, 0, 0, 0, 2085, 2087, 1, 0, 0, 0, 2086, 2084, 1, 0, 0, 0, 2087, 2088, 5, 553, 0, 0, 2088, 2090, 1, 0, 0, 0, 2089, 2064, 1, 0, 0, 0, 2089, 2073, 1, 0, 0, 0, 2090, 141, 1, 0, 0, 0, 2091, 2093, 3, 144, 72, 0, 2092, 2091, 1, 0, 0, 0, 2093, 2094, 1, 0, 0, 0, 2094, 2092, 1, 0, 0, 0, 2094, 2095, 1, 0, 0, 0, 2095, 143, 1, 0, 0, 0, 2096, 2098, 5, 443, 0, 0, 2097, 2099, 5, 558, 0, 0, 2098, 2097, 1, 0, 0, 0, 2098, 2099, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2116, 7, 11, 0, 0, 2101, 2103, 5, 42, 0, 0, 2102, 2104, 5, 558, 0, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2105, 1, 0, 0, 0, 2105, 2116, 7, 12, 0, 0, 2106, 2108, 5, 51, 0, 0, 2107, 2109, 5, 558, 0, 0, 2108, 2107, 1, 0, 0, 0, 2108, 2109, 1, 0, 0, 0, 2109, 2110, 1, 0, 0, 0, 2110, 2116, 7, 13, 0, 0, 2111, 2112, 5, 53, 0, 0, 2112, 2116, 3, 146, 73, 0, 2113, 2114, 5, 429, 0, 0, 2114, 2116, 5, 566, 0, 0, 2115, 2096, 1, 0, 0, 0, 2115, 2101, 1, 0, 0, 0, 2115, 2106, 1, 0, 0, 0, 2115, 2111, 1, 0, 0, 0, 2115, 2113, 1, 0, 0, 0, 2116, 145, 1, 0, 0, 0, 2117, 2118, 7, 14, 0, 0, 2118, 147, 1, 0, 0, 0, 2119, 2120, 5, 47, 0, 0, 2120, 2121, 5, 38, 0, 0, 2121, 2200, 3, 120, 60, 0, 2122, 2123, 5, 47, 0, 0, 2123, 2124, 5, 39, 0, 0, 2124, 2200, 3, 120, 60, 0, 2125, 2126, 5, 20, 0, 0, 2126, 2127, 5, 38, 0, 0, 2127, 2128, 3, 122, 61, 0, 2128, 2129, 5, 450, 0, 0, 2129, 2130, 3, 122, 61, 0, 2130, 2200, 1, 0, 0, 0, 2131, 2132, 5, 20, 0, 0, 2132, 2133, 5, 39, 0, 0, 2133, 2134, 3, 122, 61, 0, 2134, 2135, 5, 450, 0, 0, 2135, 2136, 3, 122, 61, 0, 2136, 2200, 1, 0, 0, 0, 2137, 2138, 5, 22, 0, 0, 2138, 2139, 5, 38, 0, 0, 2139, 2141, 3, 122, 61, 0, 2140, 2142, 5, 558, 0, 0, 2141, 2140, 1, 0, 0, 0, 2141, 2142, 1, 0, 0, 0, 2142, 2143, 1, 0, 0, 0, 2143, 2147, 3, 126, 63, 0, 2144, 2146, 3, 124, 62, 0, 2145, 2144, 1, 0, 0, 0, 2146, 2149, 1, 0, 0, 0, 2147, 2145, 1, 0, 0, 0, 2147, 2148, 1, 0, 0, 0, 2148, 2200, 1, 0, 0, 0, 2149, 2147, 1, 0, 0, 0, 2150, 2151, 5, 22, 0, 0, 2151, 2152, 5, 39, 0, 0, 2152, 2154, 3, 122, 61, 0, 2153, 2155, 5, 558, 0, 0, 2154, 2153, 1, 0, 0, 0, 2154, 2155, 1, 0, 0, 0, 2155, 2156, 1, 0, 0, 0, 2156, 2160, 3, 126, 63, 0, 2157, 2159, 3, 124, 62, 0, 2158, 2157, 1, 0, 0, 0, 2159, 2162, 1, 0, 0, 0, 2160, 2158, 1, 0, 0, 0, 2160, 2161, 1, 0, 0, 0, 2161, 2200, 1, 0, 0, 0, 2162, 2160, 1, 0, 0, 0, 2163, 2164, 5, 19, 0, 0, 2164, 2165, 5, 38, 0, 0, 2165, 2200, 3, 122, 61, 0, 2166, 2167, 5, 19, 0, 0, 2167, 2168, 5, 39, 0, 0, 2168, 2200, 3, 122, 61, 0, 2169, 2170, 5, 48, 0, 0, 2170, 2171, 5, 50, 0, 0, 2171, 2200, 5, 566, 0, 0, 2172, 2173, 5, 48, 0, 0, 2173, 2174, 5, 429, 0, 0, 2174, 2200, 5, 566, 0, 0, 2175, 2176, 5, 48, 0, 0, 2176, 2177, 5, 49, 0, 0, 2177, 2178, 5, 552, 0, 0, 2178, 2179, 5, 568, 0, 0, 2179, 2180, 5, 550, 0, 0, 2180, 2181, 5, 568, 0, 0, 2181, 2200, 5, 553, 0, 0, 2182, 2183, 5, 47, 0, 0, 2183, 2184, 5, 41, 0, 0, 2184, 2200, 3, 132, 66, 0, 2185, 2186, 5, 19, 0, 0, 2186, 2187, 5, 41, 0, 0, 2187, 2200, 5, 570, 0, 0, 2188, 2189, 5, 47, 0, 0, 2189, 2190, 5, 465, 0, 0, 2190, 2191, 5, 466, 0, 0, 2191, 2200, 3, 112, 56, 0, 2192, 2193, 5, 19, 0, 0, 2193, 2194, 5, 465, 0, 0, 2194, 2195, 5, 466, 0, 0, 2195, 2196, 5, 94, 0, 0, 2196, 2197, 3, 114, 57, 0, 2197, 2198, 3, 116, 58, 0, 2198, 2200, 1, 0, 0, 0, 2199, 2119, 1, 0, 0, 0, 2199, 2122, 1, 0, 0, 0, 2199, 2125, 1, 0, 0, 0, 2199, 2131, 1, 0, 0, 0, 2199, 2137, 1, 0, 0, 0, 2199, 2150, 1, 0, 0, 0, 2199, 2163, 1, 0, 0, 0, 2199, 2166, 1, 0, 0, 0, 2199, 2169, 1, 0, 0, 0, 2199, 2172, 1, 0, 0, 0, 2199, 2175, 1, 0, 0, 0, 2199, 2182, 1, 0, 0, 0, 2199, 2185, 1, 0, 0, 0, 2199, 2188, 1, 0, 0, 0, 2199, 2192, 1, 0, 0, 0, 2200, 149, 1, 0, 0, 0, 2201, 2202, 5, 48, 0, 0, 2202, 2203, 5, 53, 0, 0, 2203, 2214, 3, 146, 73, 0, 2204, 2205, 5, 48, 0, 0, 2205, 2206, 5, 42, 0, 0, 2206, 2214, 7, 12, 0, 0, 2207, 2208, 5, 48, 0, 0, 2208, 2209, 5, 51, 0, 0, 2209, 2214, 7, 13, 0, 0, 2210, 2211, 5, 48, 0, 0, 2211, 2212, 5, 429, 0, 0, 2212, 2214, 5, 566, 0, 0, 2213, 2201, 1, 0, 0, 0, 2213, 2204, 1, 0, 0, 0, 2213, 2207, 1, 0, 0, 0, 2213, 2210, 1, 0, 0, 0, 2214, 151, 1, 0, 0, 0, 2215, 2216, 5, 47, 0, 0, 2216, 2217, 5, 444, 0, 0, 2217, 2220, 5, 570, 0, 0, 2218, 2219, 5, 191, 0, 0, 2219, 2221, 5, 566, 0, 0, 2220, 2218, 1, 0, 0, 0, 2220, 2221, 1, 0, 0, 0, 2221, 2234, 1, 0, 0, 0, 2222, 2223, 5, 20, 0, 0, 2223, 2224, 5, 444, 0, 0, 2224, 2225, 5, 570, 0, 0, 2225, 2226, 5, 450, 0, 0, 2226, 2234, 5, 570, 0, 0, 2227, 2228, 5, 19, 0, 0, 2228, 2229, 5, 444, 0, 0, 2229, 2234, 5, 570, 0, 0, 2230, 2231, 5, 48, 0, 0, 2231, 2232, 5, 429, 0, 0, 2232, 2234, 5, 566, 0, 0, 2233, 2215, 1, 0, 0, 0, 2233, 2222, 1, 0, 0, 0, 2233, 2227, 1, 0, 0, 0, 2233, 2230, 1, 0, 0, 0, 2234, 153, 1, 0, 0, 0, 2235, 2236, 5, 47, 0, 0, 2236, 2237, 5, 33, 0, 0, 2237, 2240, 3, 828, 414, 0, 2238, 2239, 5, 49, 0, 0, 2239, 2241, 5, 568, 0, 0, 2240, 2238, 1, 0, 0, 0, 2240, 2241, 1, 0, 0, 0, 2241, 2249, 1, 0, 0, 0, 2242, 2243, 5, 19, 0, 0, 2243, 2244, 5, 33, 0, 0, 2244, 2249, 3, 828, 414, 0, 2245, 2246, 5, 48, 0, 0, 2246, 2247, 5, 429, 0, 0, 2247, 2249, 5, 566, 0, 0, 2248, 2235, 1, 0, 0, 0, 2248, 2242, 1, 0, 0, 0, 2248, 2245, 1, 0, 0, 0, 2249, 155, 1, 0, 0, 0, 2250, 2251, 5, 29, 0, 0, 2251, 2253, 3, 830, 415, 0, 2252, 2254, 3, 158, 79, 0, 2253, 2252, 1, 0, 0, 0, 2253, 2254, 1, 0, 0, 0, 2254, 157, 1, 0, 0, 0, 2255, 2257, 3, 160, 80, 0, 2256, 2255, 1, 0, 0, 0, 2257, 2258, 1, 0, 0, 0, 2258, 2256, 1, 0, 0, 0, 2258, 2259, 1, 0, 0, 0, 2259, 159, 1, 0, 0, 0, 2260, 2261, 5, 429, 0, 0, 2261, 2265, 5, 566, 0, 0, 2262, 2263, 5, 222, 0, 0, 2263, 2265, 5, 566, 0, 0, 2264, 2260, 1, 0, 0, 0, 2264, 2262, 1, 0, 0, 0, 2265, 161, 1, 0, 0, 0, 2266, 2267, 5, 28, 0, 0, 2267, 2268, 3, 828, 414, 0, 2268, 2269, 5, 552, 0, 0, 2269, 2270, 3, 164, 82, 0, 2270, 2272, 5, 553, 0, 0, 2271, 2273, 3, 170, 85, 0, 2272, 2271, 1, 0, 0, 0, 2272, 2273, 1, 0, 0, 0, 2273, 163, 1, 0, 0, 0, 2274, 2279, 3, 166, 83, 0, 2275, 2276, 5, 550, 0, 0, 2276, 2278, 3, 166, 83, 0, 2277, 2275, 1, 0, 0, 0, 2278, 2281, 1, 0, 0, 0, 2279, 2277, 1, 0, 0, 0, 2279, 2280, 1, 0, 0, 0, 2280, 165, 1, 0, 0, 0, 2281, 2279, 1, 0, 0, 0, 2282, 2284, 3, 838, 419, 0, 2283, 2282, 1, 0, 0, 0, 2283, 2284, 1, 0, 0, 0, 2284, 2285, 1, 0, 0, 0, 2285, 2290, 3, 168, 84, 0, 2286, 2288, 5, 191, 0, 0, 2287, 2286, 1, 0, 0, 0, 2287, 2288, 1, 0, 0, 0, 2288, 2289, 1, 0, 0, 0, 2289, 2291, 5, 566, 0, 0, 2290, 2287, 1, 0, 0, 0, 2290, 2291, 1, 0, 0, 0, 2291, 167, 1, 0, 0, 0, 2292, 2296, 5, 570, 0, 0, 2293, 2296, 5, 572, 0, 0, 2294, 2296, 3, 850, 425, 0, 2295, 2292, 1, 0, 0, 0, 2295, 2293, 1, 0, 0, 0, 2295, 2294, 1, 0, 0, 0, 2296, 169, 1, 0, 0, 0, 2297, 2299, 3, 172, 86, 0, 2298, 2297, 1, 0, 0, 0, 2299, 2300, 1, 0, 0, 0, 2300, 2298, 1, 0, 0, 0, 2300, 2301, 1, 0, 0, 0, 2301, 171, 1, 0, 0, 0, 2302, 2303, 5, 429, 0, 0, 2303, 2304, 5, 566, 0, 0, 2304, 173, 1, 0, 0, 0, 2305, 2306, 5, 229, 0, 0, 2306, 2307, 5, 230, 0, 0, 2307, 2309, 3, 828, 414, 0, 2308, 2310, 3, 176, 88, 0, 2309, 2308, 1, 0, 0, 0, 2309, 2310, 1, 0, 0, 0, 2310, 2312, 1, 0, 0, 0, 2311, 2313, 3, 180, 90, 0, 2312, 2311, 1, 0, 0, 0, 2312, 2313, 1, 0, 0, 0, 2313, 175, 1, 0, 0, 0, 2314, 2316, 3, 178, 89, 0, 2315, 2314, 1, 0, 0, 0, 2316, 2317, 1, 0, 0, 0, 2317, 2315, 1, 0, 0, 0, 2317, 2318, 1, 0, 0, 0, 2318, 177, 1, 0, 0, 0, 2319, 2320, 5, 384, 0, 0, 2320, 2321, 5, 485, 0, 0, 2321, 2325, 5, 566, 0, 0, 2322, 2323, 5, 429, 0, 0, 2323, 2325, 5, 566, 0, 0, 2324, 2319, 1, 0, 0, 0, 2324, 2322, 1, 0, 0, 0, 2325, 179, 1, 0, 0, 0, 2326, 2327, 5, 552, 0, 0, 2327, 2332, 3, 182, 91, 0, 2328, 2329, 5, 550, 0, 0, 2329, 2331, 3, 182, 91, 0, 2330, 2328, 1, 0, 0, 0, 2331, 2334, 1, 0, 0, 0, 2332, 2330, 1, 0, 0, 0, 2332, 2333, 1, 0, 0, 0, 2333, 2335, 1, 0, 0, 0, 2334, 2332, 1, 0, 0, 0, 2335, 2336, 5, 553, 0, 0, 2336, 181, 1, 0, 0, 0, 2337, 2338, 5, 229, 0, 0, 2338, 2339, 3, 184, 92, 0, 2339, 2340, 5, 72, 0, 0, 2340, 2341, 5, 352, 0, 0, 2341, 2342, 5, 566, 0, 0, 2342, 183, 1, 0, 0, 0, 2343, 2347, 5, 570, 0, 0, 2344, 2347, 5, 572, 0, 0, 2345, 2347, 3, 850, 425, 0, 2346, 2343, 1, 0, 0, 0, 2346, 2344, 1, 0, 0, 0, 2346, 2345, 1, 0, 0, 0, 2347, 185, 1, 0, 0, 0, 2348, 2349, 5, 231, 0, 0, 2349, 2350, 3, 828, 414, 0, 2350, 2351, 5, 552, 0, 0, 2351, 2356, 3, 188, 94, 0, 2352, 2353, 5, 550, 0, 0, 2353, 2355, 3, 188, 94, 0, 2354, 2352, 1, 0, 0, 0, 2355, 2358, 1, 0, 0, 0, 2356, 2354, 1, 0, 0, 0, 2356, 2357, 1, 0, 0, 0, 2357, 2359, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2359, 2360, 5, 553, 0, 0, 2360, 187, 1, 0, 0, 0, 2361, 2362, 3, 830, 415, 0, 2362, 2363, 5, 558, 0, 0, 2363, 2364, 3, 830, 415, 0, 2364, 2392, 1, 0, 0, 0, 2365, 2366, 3, 830, 415, 0, 2366, 2367, 5, 558, 0, 0, 2367, 2368, 3, 828, 414, 0, 2368, 2392, 1, 0, 0, 0, 2369, 2370, 3, 830, 415, 0, 2370, 2371, 5, 558, 0, 0, 2371, 2372, 5, 566, 0, 0, 2372, 2392, 1, 0, 0, 0, 2373, 2374, 3, 830, 415, 0, 2374, 2375, 5, 558, 0, 0, 2375, 2376, 5, 568, 0, 0, 2376, 2392, 1, 0, 0, 0, 2377, 2378, 3, 830, 415, 0, 2378, 2379, 5, 558, 0, 0, 2379, 2380, 3, 836, 418, 0, 2380, 2392, 1, 0, 0, 0, 2381, 2382, 3, 830, 415, 0, 2382, 2383, 5, 558, 0, 0, 2383, 2384, 5, 567, 0, 0, 2384, 2392, 1, 0, 0, 0, 2385, 2386, 3, 830, 415, 0, 2386, 2387, 5, 558, 0, 0, 2387, 2388, 5, 552, 0, 0, 2388, 2389, 3, 190, 95, 0, 2389, 2390, 5, 553, 0, 0, 2390, 2392, 1, 0, 0, 0, 2391, 2361, 1, 0, 0, 0, 2391, 2365, 1, 0, 0, 0, 2391, 2369, 1, 0, 0, 0, 2391, 2373, 1, 0, 0, 0, 2391, 2377, 1, 0, 0, 0, 2391, 2381, 1, 0, 0, 0, 2391, 2385, 1, 0, 0, 0, 2392, 189, 1, 0, 0, 0, 2393, 2398, 3, 192, 96, 0, 2394, 2395, 5, 550, 0, 0, 2395, 2397, 3, 192, 96, 0, 2396, 2394, 1, 0, 0, 0, 2397, 2400, 1, 0, 0, 0, 2398, 2396, 1, 0, 0, 0, 2398, 2399, 1, 0, 0, 0, 2399, 191, 1, 0, 0, 0, 2400, 2398, 1, 0, 0, 0, 2401, 2402, 7, 15, 0, 0, 2402, 2403, 5, 558, 0, 0, 2403, 2404, 3, 830, 415, 0, 2404, 193, 1, 0, 0, 0, 2405, 2406, 5, 238, 0, 0, 2406, 2407, 5, 239, 0, 0, 2407, 2408, 5, 330, 0, 0, 2408, 2409, 3, 828, 414, 0, 2409, 2410, 5, 552, 0, 0, 2410, 2415, 3, 188, 94, 0, 2411, 2412, 5, 550, 0, 0, 2412, 2414, 3, 188, 94, 0, 2413, 2411, 1, 0, 0, 0, 2414, 2417, 1, 0, 0, 0, 2415, 2413, 1, 0, 0, 0, 2415, 2416, 1, 0, 0, 0, 2416, 2418, 1, 0, 0, 0, 2417, 2415, 1, 0, 0, 0, 2418, 2419, 5, 553, 0, 0, 2419, 195, 1, 0, 0, 0, 2420, 2421, 5, 236, 0, 0, 2421, 2422, 5, 333, 0, 0, 2422, 2423, 3, 828, 414, 0, 2423, 2424, 5, 552, 0, 0, 2424, 2429, 3, 188, 94, 0, 2425, 2426, 5, 550, 0, 0, 2426, 2428, 3, 188, 94, 0, 2427, 2425, 1, 0, 0, 0, 2428, 2431, 1, 0, 0, 0, 2429, 2427, 1, 0, 0, 0, 2429, 2430, 1, 0, 0, 0, 2430, 2432, 1, 0, 0, 0, 2431, 2429, 1, 0, 0, 0, 2432, 2433, 5, 553, 0, 0, 2433, 197, 1, 0, 0, 0, 2434, 2435, 5, 233, 0, 0, 2435, 2436, 3, 828, 414, 0, 2436, 2437, 5, 552, 0, 0, 2437, 2442, 3, 188, 94, 0, 2438, 2439, 5, 550, 0, 0, 2439, 2441, 3, 188, 94, 0, 2440, 2438, 1, 0, 0, 0, 2441, 2444, 1, 0, 0, 0, 2442, 2440, 1, 0, 0, 0, 2442, 2443, 1, 0, 0, 0, 2443, 2445, 1, 0, 0, 0, 2444, 2442, 1, 0, 0, 0, 2445, 2447, 5, 553, 0, 0, 2446, 2448, 3, 200, 100, 0, 2447, 2446, 1, 0, 0, 0, 2447, 2448, 1, 0, 0, 0, 2448, 199, 1, 0, 0, 0, 2449, 2453, 5, 554, 0, 0, 2450, 2452, 3, 202, 101, 0, 2451, 2450, 1, 0, 0, 0, 2452, 2455, 1, 0, 0, 0, 2453, 2451, 1, 0, 0, 0, 2453, 2454, 1, 0, 0, 0, 2454, 2456, 1, 0, 0, 0, 2455, 2453, 1, 0, 0, 0, 2456, 2457, 5, 555, 0, 0, 2457, 201, 1, 0, 0, 0, 2458, 2459, 5, 239, 0, 0, 2459, 2460, 5, 330, 0, 0, 2460, 2461, 3, 828, 414, 0, 2461, 2462, 5, 554, 0, 0, 2462, 2467, 3, 188, 94, 0, 2463, 2464, 5, 550, 0, 0, 2464, 2466, 3, 188, 94, 0, 2465, 2463, 1, 0, 0, 0, 2466, 2469, 1, 0, 0, 0, 2467, 2465, 1, 0, 0, 0, 2467, 2468, 1, 0, 0, 0, 2468, 2470, 1, 0, 0, 0, 2469, 2467, 1, 0, 0, 0, 2470, 2471, 5, 555, 0, 0, 2471, 2500, 1, 0, 0, 0, 2472, 2473, 5, 236, 0, 0, 2473, 2474, 5, 333, 0, 0, 2474, 2475, 3, 830, 415, 0, 2475, 2476, 5, 554, 0, 0, 2476, 2481, 3, 188, 94, 0, 2477, 2478, 5, 550, 0, 0, 2478, 2480, 3, 188, 94, 0, 2479, 2477, 1, 0, 0, 0, 2480, 2483, 1, 0, 0, 0, 2481, 2479, 1, 0, 0, 0, 2481, 2482, 1, 0, 0, 0, 2482, 2484, 1, 0, 0, 0, 2483, 2481, 1, 0, 0, 0, 2484, 2485, 5, 555, 0, 0, 2485, 2500, 1, 0, 0, 0, 2486, 2487, 5, 235, 0, 0, 2487, 2488, 3, 830, 415, 0, 2488, 2489, 5, 554, 0, 0, 2489, 2494, 3, 188, 94, 0, 2490, 2491, 5, 550, 0, 0, 2491, 2493, 3, 188, 94, 0, 2492, 2490, 1, 0, 0, 0, 2493, 2496, 1, 0, 0, 0, 2494, 2492, 1, 0, 0, 0, 2494, 2495, 1, 0, 0, 0, 2495, 2497, 1, 0, 0, 0, 2496, 2494, 1, 0, 0, 0, 2497, 2498, 5, 555, 0, 0, 2498, 2500, 1, 0, 0, 0, 2499, 2458, 1, 0, 0, 0, 2499, 2472, 1, 0, 0, 0, 2499, 2486, 1, 0, 0, 0, 2500, 203, 1, 0, 0, 0, 2501, 2502, 5, 349, 0, 0, 2502, 2503, 5, 440, 0, 0, 2503, 2506, 3, 828, 414, 0, 2504, 2505, 5, 222, 0, 0, 2505, 2507, 5, 566, 0, 0, 2506, 2504, 1, 0, 0, 0, 2506, 2507, 1, 0, 0, 0, 2507, 2510, 1, 0, 0, 0, 2508, 2509, 5, 429, 0, 0, 2509, 2511, 5, 566, 0, 0, 2510, 2508, 1, 0, 0, 0, 2510, 2511, 1, 0, 0, 0, 2511, 2512, 1, 0, 0, 0, 2512, 2513, 5, 34, 0, 0, 2513, 2526, 7, 16, 0, 0, 2514, 2515, 5, 430, 0, 0, 2515, 2516, 5, 552, 0, 0, 2516, 2521, 3, 206, 103, 0, 2517, 2518, 5, 550, 0, 0, 2518, 2520, 3, 206, 103, 0, 2519, 2517, 1, 0, 0, 0, 2520, 2523, 1, 0, 0, 0, 2521, 2519, 1, 0, 0, 0, 2521, 2522, 1, 0, 0, 0, 2522, 2524, 1, 0, 0, 0, 2523, 2521, 1, 0, 0, 0, 2524, 2525, 5, 553, 0, 0, 2525, 2527, 1, 0, 0, 0, 2526, 2514, 1, 0, 0, 0, 2526, 2527, 1, 0, 0, 0, 2527, 205, 1, 0, 0, 0, 2528, 2529, 5, 566, 0, 0, 2529, 2530, 5, 77, 0, 0, 2530, 2531, 5, 566, 0, 0, 2531, 207, 1, 0, 0, 0, 2532, 2533, 5, 378, 0, 0, 2533, 2534, 5, 376, 0, 0, 2534, 2536, 3, 828, 414, 0, 2535, 2537, 3, 210, 105, 0, 2536, 2535, 1, 0, 0, 0, 2536, 2537, 1, 0, 0, 0, 2537, 2538, 1, 0, 0, 0, 2538, 2539, 5, 554, 0, 0, 2539, 2540, 3, 212, 106, 0, 2540, 2541, 5, 555, 0, 0, 2541, 209, 1, 0, 0, 0, 2542, 2543, 5, 140, 0, 0, 2543, 2544, 5, 349, 0, 0, 2544, 2545, 5, 440, 0, 0, 2545, 2551, 3, 828, 414, 0, 2546, 2547, 5, 140, 0, 0, 2547, 2548, 5, 350, 0, 0, 2548, 2549, 5, 442, 0, 0, 2549, 2551, 3, 828, 414, 0, 2550, 2542, 1, 0, 0, 0, 2550, 2546, 1, 0, 0, 0, 2551, 211, 1, 0, 0, 0, 2552, 2553, 3, 216, 108, 0, 2553, 2554, 3, 828, 414, 0, 2554, 2555, 5, 554, 0, 0, 2555, 2560, 3, 214, 107, 0, 2556, 2557, 5, 550, 0, 0, 2557, 2559, 3, 214, 107, 0, 2558, 2556, 1, 0, 0, 0, 2559, 2562, 1, 0, 0, 0, 2560, 2558, 1, 0, 0, 0, 2560, 2561, 1, 0, 0, 0, 2561, 2563, 1, 0, 0, 0, 2562, 2560, 1, 0, 0, 0, 2563, 2564, 5, 555, 0, 0, 2564, 213, 1, 0, 0, 0, 2565, 2566, 3, 216, 108, 0, 2566, 2567, 3, 828, 414, 0, 2567, 2568, 5, 545, 0, 0, 2568, 2569, 3, 828, 414, 0, 2569, 2570, 5, 539, 0, 0, 2570, 2571, 3, 830, 415, 0, 2571, 2572, 5, 554, 0, 0, 2572, 2577, 3, 214, 107, 0, 2573, 2574, 5, 550, 0, 0, 2574, 2576, 3, 214, 107, 0, 2575, 2573, 1, 0, 0, 0, 2576, 2579, 1, 0, 0, 0, 2577, 2575, 1, 0, 0, 0, 2577, 2578, 1, 0, 0, 0, 2578, 2580, 1, 0, 0, 0, 2579, 2577, 1, 0, 0, 0, 2580, 2581, 5, 555, 0, 0, 2581, 2603, 1, 0, 0, 0, 2582, 2583, 3, 216, 108, 0, 2583, 2584, 3, 828, 414, 0, 2584, 2585, 5, 545, 0, 0, 2585, 2586, 3, 828, 414, 0, 2586, 2587, 5, 539, 0, 0, 2587, 2588, 3, 830, 415, 0, 2588, 2603, 1, 0, 0, 0, 2589, 2590, 3, 830, 415, 0, 2590, 2591, 5, 539, 0, 0, 2591, 2592, 3, 828, 414, 0, 2592, 2593, 5, 552, 0, 0, 2593, 2594, 3, 830, 415, 0, 2594, 2595, 5, 553, 0, 0, 2595, 2603, 1, 0, 0, 0, 2596, 2597, 3, 830, 415, 0, 2597, 2598, 5, 539, 0, 0, 2598, 2600, 3, 830, 415, 0, 2599, 2601, 5, 380, 0, 0, 2600, 2599, 1, 0, 0, 0, 2600, 2601, 1, 0, 0, 0, 2601, 2603, 1, 0, 0, 0, 2602, 2565, 1, 0, 0, 0, 2602, 2582, 1, 0, 0, 0, 2602, 2589, 1, 0, 0, 0, 2602, 2596, 1, 0, 0, 0, 2603, 215, 1, 0, 0, 0, 2604, 2610, 5, 17, 0, 0, 2605, 2610, 5, 124, 0, 0, 2606, 2607, 5, 124, 0, 0, 2607, 2608, 5, 304, 0, 0, 2608, 2610, 5, 17, 0, 0, 2609, 2604, 1, 0, 0, 0, 2609, 2605, 1, 0, 0, 0, 2609, 2606, 1, 0, 0, 0, 2610, 217, 1, 0, 0, 0, 2611, 2612, 5, 384, 0, 0, 2612, 2613, 5, 376, 0, 0, 2613, 2615, 3, 828, 414, 0, 2614, 2616, 3, 220, 110, 0, 2615, 2614, 1, 0, 0, 0, 2615, 2616, 1, 0, 0, 0, 2616, 2618, 1, 0, 0, 0, 2617, 2619, 3, 222, 111, 0, 2618, 2617, 1, 0, 0, 0, 2618, 2619, 1, 0, 0, 0, 2619, 2620, 1, 0, 0, 0, 2620, 2621, 5, 554, 0, 0, 2621, 2622, 3, 224, 112, 0, 2622, 2623, 5, 555, 0, 0, 2623, 219, 1, 0, 0, 0, 2624, 2625, 5, 140, 0, 0, 2625, 2626, 5, 349, 0, 0, 2626, 2627, 5, 440, 0, 0, 2627, 2633, 3, 828, 414, 0, 2628, 2629, 5, 140, 0, 0, 2629, 2630, 5, 350, 0, 0, 2630, 2631, 5, 442, 0, 0, 2631, 2633, 3, 828, 414, 0, 2632, 2624, 1, 0, 0, 0, 2632, 2628, 1, 0, 0, 0, 2633, 221, 1, 0, 0, 0, 2634, 2635, 5, 306, 0, 0, 2635, 2636, 5, 445, 0, 0, 2636, 2637, 3, 830, 415, 0, 2637, 223, 1, 0, 0, 0, 2638, 2639, 3, 828, 414, 0, 2639, 2640, 5, 554, 0, 0, 2640, 2645, 3, 226, 113, 0, 2641, 2642, 5, 550, 0, 0, 2642, 2644, 3, 226, 113, 0, 2643, 2641, 1, 0, 0, 0, 2644, 2647, 1, 0, 0, 0, 2645, 2643, 1, 0, 0, 0, 2645, 2646, 1, 0, 0, 0, 2646, 2648, 1, 0, 0, 0, 2647, 2645, 1, 0, 0, 0, 2648, 2649, 5, 555, 0, 0, 2649, 225, 1, 0, 0, 0, 2650, 2651, 3, 828, 414, 0, 2651, 2652, 5, 545, 0, 0, 2652, 2653, 3, 828, 414, 0, 2653, 2654, 5, 77, 0, 0, 2654, 2655, 3, 830, 415, 0, 2655, 2656, 5, 554, 0, 0, 2656, 2661, 3, 226, 113, 0, 2657, 2658, 5, 550, 0, 0, 2658, 2660, 3, 226, 113, 0, 2659, 2657, 1, 0, 0, 0, 2660, 2663, 1, 0, 0, 0, 2661, 2659, 1, 0, 0, 0, 2661, 2662, 1, 0, 0, 0, 2662, 2664, 1, 0, 0, 0, 2663, 2661, 1, 0, 0, 0, 2664, 2665, 5, 555, 0, 0, 2665, 2677, 1, 0, 0, 0, 2666, 2667, 3, 828, 414, 0, 2667, 2668, 5, 545, 0, 0, 2668, 2669, 3, 828, 414, 0, 2669, 2670, 5, 77, 0, 0, 2670, 2671, 3, 830, 415, 0, 2671, 2677, 1, 0, 0, 0, 2672, 2673, 3, 830, 415, 0, 2673, 2674, 5, 539, 0, 0, 2674, 2675, 3, 830, 415, 0, 2675, 2677, 1, 0, 0, 0, 2676, 2650, 1, 0, 0, 0, 2676, 2666, 1, 0, 0, 0, 2676, 2672, 1, 0, 0, 0, 2677, 227, 1, 0, 0, 0, 2678, 2679, 5, 316, 0, 0, 2679, 2680, 5, 318, 0, 0, 2680, 2681, 3, 828, 414, 0, 2681, 2682, 5, 453, 0, 0, 2682, 2683, 3, 828, 414, 0, 2683, 2684, 3, 230, 115, 0, 2684, 229, 1, 0, 0, 0, 2685, 2686, 5, 325, 0, 0, 2686, 2687, 3, 784, 392, 0, 2687, 2688, 5, 317, 0, 0, 2688, 2689, 5, 566, 0, 0, 2689, 2713, 1, 0, 0, 0, 2690, 2691, 5, 319, 0, 0, 2691, 2692, 3, 234, 117, 0, 2692, 2693, 5, 317, 0, 0, 2693, 2694, 5, 566, 0, 0, 2694, 2713, 1, 0, 0, 0, 2695, 2696, 5, 312, 0, 0, 2696, 2697, 3, 236, 118, 0, 2697, 2698, 5, 317, 0, 0, 2698, 2699, 5, 566, 0, 0, 2699, 2713, 1, 0, 0, 0, 2700, 2701, 5, 322, 0, 0, 2701, 2702, 3, 234, 117, 0, 2702, 2703, 3, 232, 116, 0, 2703, 2704, 5, 317, 0, 0, 2704, 2705, 5, 566, 0, 0, 2705, 2713, 1, 0, 0, 0, 2706, 2707, 5, 323, 0, 0, 2707, 2708, 3, 234, 117, 0, 2708, 2709, 5, 566, 0, 0, 2709, 2710, 5, 317, 0, 0, 2710, 2711, 5, 566, 0, 0, 2711, 2713, 1, 0, 0, 0, 2712, 2685, 1, 0, 0, 0, 2712, 2690, 1, 0, 0, 0, 2712, 2695, 1, 0, 0, 0, 2712, 2700, 1, 0, 0, 0, 2712, 2706, 1, 0, 0, 0, 2713, 231, 1, 0, 0, 0, 2714, 2715, 5, 308, 0, 0, 2715, 2716, 3, 832, 416, 0, 2716, 2717, 5, 303, 0, 0, 2717, 2718, 3, 832, 416, 0, 2718, 2728, 1, 0, 0, 0, 2719, 2720, 5, 540, 0, 0, 2720, 2728, 3, 832, 416, 0, 2721, 2722, 5, 537, 0, 0, 2722, 2728, 3, 832, 416, 0, 2723, 2724, 5, 541, 0, 0, 2724, 2728, 3, 832, 416, 0, 2725, 2726, 5, 538, 0, 0, 2726, 2728, 3, 832, 416, 0, 2727, 2714, 1, 0, 0, 0, 2727, 2719, 1, 0, 0, 0, 2727, 2721, 1, 0, 0, 0, 2727, 2723, 1, 0, 0, 0, 2727, 2725, 1, 0, 0, 0, 2728, 233, 1, 0, 0, 0, 2729, 2734, 5, 570, 0, 0, 2730, 2731, 5, 545, 0, 0, 2731, 2733, 5, 570, 0, 0, 2732, 2730, 1, 0, 0, 0, 2733, 2736, 1, 0, 0, 0, 2734, 2732, 1, 0, 0, 0, 2734, 2735, 1, 0, 0, 0, 2735, 235, 1, 0, 0, 0, 2736, 2734, 1, 0, 0, 0, 2737, 2742, 3, 234, 117, 0, 2738, 2739, 5, 550, 0, 0, 2739, 2741, 3, 234, 117, 0, 2740, 2738, 1, 0, 0, 0, 2741, 2744, 1, 0, 0, 0, 2742, 2740, 1, 0, 0, 0, 2742, 2743, 1, 0, 0, 0, 2743, 237, 1, 0, 0, 0, 2744, 2742, 1, 0, 0, 0, 2745, 2746, 5, 30, 0, 0, 2746, 2747, 3, 828, 414, 0, 2747, 2749, 5, 552, 0, 0, 2748, 2750, 3, 250, 125, 0, 2749, 2748, 1, 0, 0, 0, 2749, 2750, 1, 0, 0, 0, 2750, 2751, 1, 0, 0, 0, 2751, 2753, 5, 553, 0, 0, 2752, 2754, 3, 256, 128, 0, 2753, 2752, 1, 0, 0, 0, 2753, 2754, 1, 0, 0, 0, 2754, 2756, 1, 0, 0, 0, 2755, 2757, 3, 258, 129, 0, 2756, 2755, 1, 0, 0, 0, 2756, 2757, 1, 0, 0, 0, 2757, 2758, 1, 0, 0, 0, 2758, 2759, 5, 97, 0, 0, 2759, 2760, 3, 262, 131, 0, 2760, 2762, 5, 84, 0, 0, 2761, 2763, 5, 549, 0, 0, 2762, 2761, 1, 0, 0, 0, 2762, 2763, 1, 0, 0, 0, 2763, 2765, 1, 0, 0, 0, 2764, 2766, 5, 545, 0, 0, 2765, 2764, 1, 0, 0, 0, 2765, 2766, 1, 0, 0, 0, 2766, 239, 1, 0, 0, 0, 2767, 2768, 5, 115, 0, 0, 2768, 2769, 5, 117, 0, 0, 2769, 2770, 3, 828, 414, 0, 2770, 2772, 5, 552, 0, 0, 2771, 2773, 3, 242, 121, 0, 2772, 2771, 1, 0, 0, 0, 2772, 2773, 1, 0, 0, 0, 2773, 2774, 1, 0, 0, 0, 2774, 2776, 5, 553, 0, 0, 2775, 2777, 3, 246, 123, 0, 2776, 2775, 1, 0, 0, 0, 2776, 2777, 1, 0, 0, 0, 2777, 2779, 1, 0, 0, 0, 2778, 2780, 3, 248, 124, 0, 2779, 2778, 1, 0, 0, 0, 2779, 2780, 1, 0, 0, 0, 2780, 2781, 1, 0, 0, 0, 2781, 2782, 5, 77, 0, 0, 2782, 2784, 5, 567, 0, 0, 2783, 2785, 5, 549, 0, 0, 2784, 2783, 1, 0, 0, 0, 2784, 2785, 1, 0, 0, 0, 2785, 241, 1, 0, 0, 0, 2786, 2791, 3, 244, 122, 0, 2787, 2788, 5, 550, 0, 0, 2788, 2790, 3, 244, 122, 0, 2789, 2787, 1, 0, 0, 0, 2790, 2793, 1, 0, 0, 0, 2791, 2789, 1, 0, 0, 0, 2791, 2792, 1, 0, 0, 0, 2792, 243, 1, 0, 0, 0, 2793, 2791, 1, 0, 0, 0, 2794, 2795, 3, 254, 127, 0, 2795, 2796, 5, 558, 0, 0, 2796, 2798, 3, 126, 63, 0, 2797, 2799, 5, 7, 0, 0, 2798, 2797, 1, 0, 0, 0, 2798, 2799, 1, 0, 0, 0, 2799, 245, 1, 0, 0, 0, 2800, 2801, 5, 78, 0, 0, 2801, 2802, 3, 126, 63, 0, 2802, 247, 1, 0, 0, 0, 2803, 2804, 5, 390, 0, 0, 2804, 2805, 5, 77, 0, 0, 2805, 2806, 5, 566, 0, 0, 2806, 2807, 5, 307, 0, 0, 2807, 2808, 5, 566, 0, 0, 2808, 249, 1, 0, 0, 0, 2809, 2814, 3, 252, 126, 0, 2810, 2811, 5, 550, 0, 0, 2811, 2813, 3, 252, 126, 0, 2812, 2810, 1, 0, 0, 0, 2813, 2816, 1, 0, 0, 0, 2814, 2812, 1, 0, 0, 0, 2814, 2815, 1, 0, 0, 0, 2815, 251, 1, 0, 0, 0, 2816, 2814, 1, 0, 0, 0, 2817, 2820, 3, 254, 127, 0, 2818, 2820, 5, 569, 0, 0, 2819, 2817, 1, 0, 0, 0, 2819, 2818, 1, 0, 0, 0, 2820, 2821, 1, 0, 0, 0, 2821, 2822, 5, 558, 0, 0, 2822, 2823, 3, 126, 63, 0, 2823, 253, 1, 0, 0, 0, 2824, 2828, 5, 570, 0, 0, 2825, 2828, 5, 572, 0, 0, 2826, 2828, 3, 850, 425, 0, 2827, 2824, 1, 0, 0, 0, 2827, 2825, 1, 0, 0, 0, 2827, 2826, 1, 0, 0, 0, 2828, 255, 1, 0, 0, 0, 2829, 2830, 5, 78, 0, 0, 2830, 2833, 3, 126, 63, 0, 2831, 2832, 5, 77, 0, 0, 2832, 2834, 5, 569, 0, 0, 2833, 2831, 1, 0, 0, 0, 2833, 2834, 1, 0, 0, 0, 2834, 257, 1, 0, 0, 0, 2835, 2837, 3, 260, 130, 0, 2836, 2835, 1, 0, 0, 0, 2837, 2838, 1, 0, 0, 0, 2838, 2836, 1, 0, 0, 0, 2838, 2839, 1, 0, 0, 0, 2839, 259, 1, 0, 0, 0, 2840, 2841, 5, 222, 0, 0, 2841, 2845, 5, 566, 0, 0, 2842, 2843, 5, 429, 0, 0, 2843, 2845, 5, 566, 0, 0, 2844, 2840, 1, 0, 0, 0, 2844, 2842, 1, 0, 0, 0, 2845, 261, 1, 0, 0, 0, 2846, 2848, 3, 264, 132, 0, 2847, 2846, 1, 0, 0, 0, 2848, 2851, 1, 0, 0, 0, 2849, 2847, 1, 0, 0, 0, 2849, 2850, 1, 0, 0, 0, 2850, 263, 1, 0, 0, 0, 2851, 2849, 1, 0, 0, 0, 2852, 2854, 3, 840, 420, 0, 2853, 2852, 1, 0, 0, 0, 2854, 2857, 1, 0, 0, 0, 2855, 2853, 1, 0, 0, 0, 2855, 2856, 1, 0, 0, 0, 2856, 2858, 1, 0, 0, 0, 2857, 2855, 1, 0, 0, 0, 2858, 2860, 3, 266, 133, 0, 2859, 2861, 5, 549, 0, 0, 2860, 2859, 1, 0, 0, 0, 2860, 2861, 1, 0, 0, 0, 2861, 3323, 1, 0, 0, 0, 2862, 2864, 3, 840, 420, 0, 2863, 2862, 1, 0, 0, 0, 2864, 2867, 1, 0, 0, 0, 2865, 2863, 1, 0, 0, 0, 2865, 2866, 1, 0, 0, 0, 2866, 2868, 1, 0, 0, 0, 2867, 2865, 1, 0, 0, 0, 2868, 2870, 3, 268, 134, 0, 2869, 2871, 5, 549, 0, 0, 2870, 2869, 1, 0, 0, 0, 2870, 2871, 1, 0, 0, 0, 2871, 3323, 1, 0, 0, 0, 2872, 2874, 3, 840, 420, 0, 2873, 2872, 1, 0, 0, 0, 2874, 2877, 1, 0, 0, 0, 2875, 2873, 1, 0, 0, 0, 2875, 2876, 1, 0, 0, 0, 2876, 2878, 1, 0, 0, 0, 2877, 2875, 1, 0, 0, 0, 2878, 2880, 3, 410, 205, 0, 2879, 2881, 5, 549, 0, 0, 2880, 2879, 1, 0, 0, 0, 2880, 2881, 1, 0, 0, 0, 2881, 3323, 1, 0, 0, 0, 2882, 2884, 3, 840, 420, 0, 2883, 2882, 1, 0, 0, 0, 2884, 2887, 1, 0, 0, 0, 2885, 2883, 1, 0, 0, 0, 2885, 2886, 1, 0, 0, 0, 2886, 2888, 1, 0, 0, 0, 2887, 2885, 1, 0, 0, 0, 2888, 2890, 3, 270, 135, 0, 2889, 2891, 5, 549, 0, 0, 2890, 2889, 1, 0, 0, 0, 2890, 2891, 1, 0, 0, 0, 2891, 3323, 1, 0, 0, 0, 2892, 2894, 3, 840, 420, 0, 2893, 2892, 1, 0, 0, 0, 2894, 2897, 1, 0, 0, 0, 2895, 2893, 1, 0, 0, 0, 2895, 2896, 1, 0, 0, 0, 2896, 2898, 1, 0, 0, 0, 2897, 2895, 1, 0, 0, 0, 2898, 2900, 3, 272, 136, 0, 2899, 2901, 5, 549, 0, 0, 2900, 2899, 1, 0, 0, 0, 2900, 2901, 1, 0, 0, 0, 2901, 3323, 1, 0, 0, 0, 2902, 2904, 3, 840, 420, 0, 2903, 2902, 1, 0, 0, 0, 2904, 2907, 1, 0, 0, 0, 2905, 2903, 1, 0, 0, 0, 2905, 2906, 1, 0, 0, 0, 2906, 2908, 1, 0, 0, 0, 2907, 2905, 1, 0, 0, 0, 2908, 2910, 3, 276, 138, 0, 2909, 2911, 5, 549, 0, 0, 2910, 2909, 1, 0, 0, 0, 2910, 2911, 1, 0, 0, 0, 2911, 3323, 1, 0, 0, 0, 2912, 2914, 3, 840, 420, 0, 2913, 2912, 1, 0, 0, 0, 2914, 2917, 1, 0, 0, 0, 2915, 2913, 1, 0, 0, 0, 2915, 2916, 1, 0, 0, 0, 2916, 2918, 1, 0, 0, 0, 2917, 2915, 1, 0, 0, 0, 2918, 2920, 3, 278, 139, 0, 2919, 2921, 5, 549, 0, 0, 2920, 2919, 1, 0, 0, 0, 2920, 2921, 1, 0, 0, 0, 2921, 3323, 1, 0, 0, 0, 2922, 2924, 3, 840, 420, 0, 2923, 2922, 1, 0, 0, 0, 2924, 2927, 1, 0, 0, 0, 2925, 2923, 1, 0, 0, 0, 2925, 2926, 1, 0, 0, 0, 2926, 2928, 1, 0, 0, 0, 2927, 2925, 1, 0, 0, 0, 2928, 2930, 3, 280, 140, 0, 2929, 2931, 5, 549, 0, 0, 2930, 2929, 1, 0, 0, 0, 2930, 2931, 1, 0, 0, 0, 2931, 3323, 1, 0, 0, 0, 2932, 2934, 3, 840, 420, 0, 2933, 2932, 1, 0, 0, 0, 2934, 2937, 1, 0, 0, 0, 2935, 2933, 1, 0, 0, 0, 2935, 2936, 1, 0, 0, 0, 2936, 2938, 1, 0, 0, 0, 2937, 2935, 1, 0, 0, 0, 2938, 2940, 3, 282, 141, 0, 2939, 2941, 5, 549, 0, 0, 2940, 2939, 1, 0, 0, 0, 2940, 2941, 1, 0, 0, 0, 2941, 3323, 1, 0, 0, 0, 2942, 2944, 3, 840, 420, 0, 2943, 2942, 1, 0, 0, 0, 2944, 2947, 1, 0, 0, 0, 2945, 2943, 1, 0, 0, 0, 2945, 2946, 1, 0, 0, 0, 2946, 2948, 1, 0, 0, 0, 2947, 2945, 1, 0, 0, 0, 2948, 2950, 3, 288, 144, 0, 2949, 2951, 5, 549, 0, 0, 2950, 2949, 1, 0, 0, 0, 2950, 2951, 1, 0, 0, 0, 2951, 3323, 1, 0, 0, 0, 2952, 2954, 3, 840, 420, 0, 2953, 2952, 1, 0, 0, 0, 2954, 2957, 1, 0, 0, 0, 2955, 2953, 1, 0, 0, 0, 2955, 2956, 1, 0, 0, 0, 2956, 2958, 1, 0, 0, 0, 2957, 2955, 1, 0, 0, 0, 2958, 2960, 3, 290, 145, 0, 2959, 2961, 5, 549, 0, 0, 2960, 2959, 1, 0, 0, 0, 2960, 2961, 1, 0, 0, 0, 2961, 3323, 1, 0, 0, 0, 2962, 2964, 3, 840, 420, 0, 2963, 2962, 1, 0, 0, 0, 2964, 2967, 1, 0, 0, 0, 2965, 2963, 1, 0, 0, 0, 2965, 2966, 1, 0, 0, 0, 2966, 2968, 1, 0, 0, 0, 2967, 2965, 1, 0, 0, 0, 2968, 2970, 3, 292, 146, 0, 2969, 2971, 5, 549, 0, 0, 2970, 2969, 1, 0, 0, 0, 2970, 2971, 1, 0, 0, 0, 2971, 3323, 1, 0, 0, 0, 2972, 2974, 3, 840, 420, 0, 2973, 2972, 1, 0, 0, 0, 2974, 2977, 1, 0, 0, 0, 2975, 2973, 1, 0, 0, 0, 2975, 2976, 1, 0, 0, 0, 2976, 2978, 1, 0, 0, 0, 2977, 2975, 1, 0, 0, 0, 2978, 2980, 3, 294, 147, 0, 2979, 2981, 5, 549, 0, 0, 2980, 2979, 1, 0, 0, 0, 2980, 2981, 1, 0, 0, 0, 2981, 3323, 1, 0, 0, 0, 2982, 2984, 3, 840, 420, 0, 2983, 2982, 1, 0, 0, 0, 2984, 2987, 1, 0, 0, 0, 2985, 2983, 1, 0, 0, 0, 2985, 2986, 1, 0, 0, 0, 2986, 2988, 1, 0, 0, 0, 2987, 2985, 1, 0, 0, 0, 2988, 2990, 3, 296, 148, 0, 2989, 2991, 5, 549, 0, 0, 2990, 2989, 1, 0, 0, 0, 2990, 2991, 1, 0, 0, 0, 2991, 3323, 1, 0, 0, 0, 2992, 2994, 3, 840, 420, 0, 2993, 2992, 1, 0, 0, 0, 2994, 2997, 1, 0, 0, 0, 2995, 2993, 1, 0, 0, 0, 2995, 2996, 1, 0, 0, 0, 2996, 2998, 1, 0, 0, 0, 2997, 2995, 1, 0, 0, 0, 2998, 3000, 3, 298, 149, 0, 2999, 3001, 5, 549, 0, 0, 3000, 2999, 1, 0, 0, 0, 3000, 3001, 1, 0, 0, 0, 3001, 3323, 1, 0, 0, 0, 3002, 3004, 3, 840, 420, 0, 3003, 3002, 1, 0, 0, 0, 3004, 3007, 1, 0, 0, 0, 3005, 3003, 1, 0, 0, 0, 3005, 3006, 1, 0, 0, 0, 3006, 3008, 1, 0, 0, 0, 3007, 3005, 1, 0, 0, 0, 3008, 3010, 3, 300, 150, 0, 3009, 3011, 5, 549, 0, 0, 3010, 3009, 1, 0, 0, 0, 3010, 3011, 1, 0, 0, 0, 3011, 3323, 1, 0, 0, 0, 3012, 3014, 3, 840, 420, 0, 3013, 3012, 1, 0, 0, 0, 3014, 3017, 1, 0, 0, 0, 3015, 3013, 1, 0, 0, 0, 3015, 3016, 1, 0, 0, 0, 3016, 3018, 1, 0, 0, 0, 3017, 3015, 1, 0, 0, 0, 3018, 3020, 3, 302, 151, 0, 3019, 3021, 5, 549, 0, 0, 3020, 3019, 1, 0, 0, 0, 3020, 3021, 1, 0, 0, 0, 3021, 3323, 1, 0, 0, 0, 3022, 3024, 3, 840, 420, 0, 3023, 3022, 1, 0, 0, 0, 3024, 3027, 1, 0, 0, 0, 3025, 3023, 1, 0, 0, 0, 3025, 3026, 1, 0, 0, 0, 3026, 3028, 1, 0, 0, 0, 3027, 3025, 1, 0, 0, 0, 3028, 3030, 3, 314, 157, 0, 3029, 3031, 5, 549, 0, 0, 3030, 3029, 1, 0, 0, 0, 3030, 3031, 1, 0, 0, 0, 3031, 3323, 1, 0, 0, 0, 3032, 3034, 3, 840, 420, 0, 3033, 3032, 1, 0, 0, 0, 3034, 3037, 1, 0, 0, 0, 3035, 3033, 1, 0, 0, 0, 3035, 3036, 1, 0, 0, 0, 3036, 3038, 1, 0, 0, 0, 3037, 3035, 1, 0, 0, 0, 3038, 3040, 3, 316, 158, 0, 3039, 3041, 5, 549, 0, 0, 3040, 3039, 1, 0, 0, 0, 3040, 3041, 1, 0, 0, 0, 3041, 3323, 1, 0, 0, 0, 3042, 3044, 3, 840, 420, 0, 3043, 3042, 1, 0, 0, 0, 3044, 3047, 1, 0, 0, 0, 3045, 3043, 1, 0, 0, 0, 3045, 3046, 1, 0, 0, 0, 3046, 3048, 1, 0, 0, 0, 3047, 3045, 1, 0, 0, 0, 3048, 3050, 3, 318, 159, 0, 3049, 3051, 5, 549, 0, 0, 3050, 3049, 1, 0, 0, 0, 3050, 3051, 1, 0, 0, 0, 3051, 3323, 1, 0, 0, 0, 3052, 3054, 3, 840, 420, 0, 3053, 3052, 1, 0, 0, 0, 3054, 3057, 1, 0, 0, 0, 3055, 3053, 1, 0, 0, 0, 3055, 3056, 1, 0, 0, 0, 3056, 3058, 1, 0, 0, 0, 3057, 3055, 1, 0, 0, 0, 3058, 3060, 3, 320, 160, 0, 3059, 3061, 5, 549, 0, 0, 3060, 3059, 1, 0, 0, 0, 3060, 3061, 1, 0, 0, 0, 3061, 3323, 1, 0, 0, 0, 3062, 3064, 3, 840, 420, 0, 3063, 3062, 1, 0, 0, 0, 3064, 3067, 1, 0, 0, 0, 3065, 3063, 1, 0, 0, 0, 3065, 3066, 1, 0, 0, 0, 3066, 3068, 1, 0, 0, 0, 3067, 3065, 1, 0, 0, 0, 3068, 3070, 3, 350, 175, 0, 3069, 3071, 5, 549, 0, 0, 3070, 3069, 1, 0, 0, 0, 3070, 3071, 1, 0, 0, 0, 3071, 3323, 1, 0, 0, 0, 3072, 3074, 3, 840, 420, 0, 3073, 3072, 1, 0, 0, 0, 3074, 3077, 1, 0, 0, 0, 3075, 3073, 1, 0, 0, 0, 3075, 3076, 1, 0, 0, 0, 3076, 3078, 1, 0, 0, 0, 3077, 3075, 1, 0, 0, 0, 3078, 3080, 3, 356, 178, 0, 3079, 3081, 5, 549, 0, 0, 3080, 3079, 1, 0, 0, 0, 3080, 3081, 1, 0, 0, 0, 3081, 3323, 1, 0, 0, 0, 3082, 3084, 3, 840, 420, 0, 3083, 3082, 1, 0, 0, 0, 3084, 3087, 1, 0, 0, 0, 3085, 3083, 1, 0, 0, 0, 3085, 3086, 1, 0, 0, 0, 3086, 3088, 1, 0, 0, 0, 3087, 3085, 1, 0, 0, 0, 3088, 3090, 3, 358, 179, 0, 3089, 3091, 5, 549, 0, 0, 3090, 3089, 1, 0, 0, 0, 3090, 3091, 1, 0, 0, 0, 3091, 3323, 1, 0, 0, 0, 3092, 3094, 3, 840, 420, 0, 3093, 3092, 1, 0, 0, 0, 3094, 3097, 1, 0, 0, 0, 3095, 3093, 1, 0, 0, 0, 3095, 3096, 1, 0, 0, 0, 3096, 3098, 1, 0, 0, 0, 3097, 3095, 1, 0, 0, 0, 3098, 3100, 3, 360, 180, 0, 3099, 3101, 5, 549, 0, 0, 3100, 3099, 1, 0, 0, 0, 3100, 3101, 1, 0, 0, 0, 3101, 3323, 1, 0, 0, 0, 3102, 3104, 3, 840, 420, 0, 3103, 3102, 1, 0, 0, 0, 3104, 3107, 1, 0, 0, 0, 3105, 3103, 1, 0, 0, 0, 3105, 3106, 1, 0, 0, 0, 3106, 3108, 1, 0, 0, 0, 3107, 3105, 1, 0, 0, 0, 3108, 3110, 3, 362, 181, 0, 3109, 3111, 5, 549, 0, 0, 3110, 3109, 1, 0, 0, 0, 3110, 3111, 1, 0, 0, 0, 3111, 3323, 1, 0, 0, 0, 3112, 3114, 3, 840, 420, 0, 3113, 3112, 1, 0, 0, 0, 3114, 3117, 1, 0, 0, 0, 3115, 3113, 1, 0, 0, 0, 3115, 3116, 1, 0, 0, 0, 3116, 3118, 1, 0, 0, 0, 3117, 3115, 1, 0, 0, 0, 3118, 3120, 3, 398, 199, 0, 3119, 3121, 5, 549, 0, 0, 3120, 3119, 1, 0, 0, 0, 3120, 3121, 1, 0, 0, 0, 3121, 3323, 1, 0, 0, 0, 3122, 3124, 3, 840, 420, 0, 3123, 3122, 1, 0, 0, 0, 3124, 3127, 1, 0, 0, 0, 3125, 3123, 1, 0, 0, 0, 3125, 3126, 1, 0, 0, 0, 3126, 3128, 1, 0, 0, 0, 3127, 3125, 1, 0, 0, 0, 3128, 3130, 3, 406, 203, 0, 3129, 3131, 5, 549, 0, 0, 3130, 3129, 1, 0, 0, 0, 3130, 3131, 1, 0, 0, 0, 3131, 3323, 1, 0, 0, 0, 3132, 3134, 3, 840, 420, 0, 3133, 3132, 1, 0, 0, 0, 3134, 3137, 1, 0, 0, 0, 3135, 3133, 1, 0, 0, 0, 3135, 3136, 1, 0, 0, 0, 3136, 3138, 1, 0, 0, 0, 3137, 3135, 1, 0, 0, 0, 3138, 3140, 3, 412, 206, 0, 3139, 3141, 5, 549, 0, 0, 3140, 3139, 1, 0, 0, 0, 3140, 3141, 1, 0, 0, 0, 3141, 3323, 1, 0, 0, 0, 3142, 3144, 3, 840, 420, 0, 3143, 3142, 1, 0, 0, 0, 3144, 3147, 1, 0, 0, 0, 3145, 3143, 1, 0, 0, 0, 3145, 3146, 1, 0, 0, 0, 3146, 3148, 1, 0, 0, 0, 3147, 3145, 1, 0, 0, 0, 3148, 3150, 3, 414, 207, 0, 3149, 3151, 5, 549, 0, 0, 3150, 3149, 1, 0, 0, 0, 3150, 3151, 1, 0, 0, 0, 3151, 3323, 1, 0, 0, 0, 3152, 3154, 3, 840, 420, 0, 3153, 3152, 1, 0, 0, 0, 3154, 3157, 1, 0, 0, 0, 3155, 3153, 1, 0, 0, 0, 3155, 3156, 1, 0, 0, 0, 3156, 3158, 1, 0, 0, 0, 3157, 3155, 1, 0, 0, 0, 3158, 3160, 3, 364, 182, 0, 3159, 3161, 5, 549, 0, 0, 3160, 3159, 1, 0, 0, 0, 3160, 3161, 1, 0, 0, 0, 3161, 3323, 1, 0, 0, 0, 3162, 3164, 3, 840, 420, 0, 3163, 3162, 1, 0, 0, 0, 3164, 3167, 1, 0, 0, 0, 3165, 3163, 1, 0, 0, 0, 3165, 3166, 1, 0, 0, 0, 3166, 3168, 1, 0, 0, 0, 3167, 3165, 1, 0, 0, 0, 3168, 3170, 3, 366, 183, 0, 3169, 3171, 5, 549, 0, 0, 3170, 3169, 1, 0, 0, 0, 3170, 3171, 1, 0, 0, 0, 3171, 3323, 1, 0, 0, 0, 3172, 3174, 3, 840, 420, 0, 3173, 3172, 1, 0, 0, 0, 3174, 3177, 1, 0, 0, 0, 3175, 3173, 1, 0, 0, 0, 3175, 3176, 1, 0, 0, 0, 3176, 3178, 1, 0, 0, 0, 3177, 3175, 1, 0, 0, 0, 3178, 3180, 3, 384, 192, 0, 3179, 3181, 5, 549, 0, 0, 3180, 3179, 1, 0, 0, 0, 3180, 3181, 1, 0, 0, 0, 3181, 3323, 1, 0, 0, 0, 3182, 3184, 3, 840, 420, 0, 3183, 3182, 1, 0, 0, 0, 3184, 3187, 1, 0, 0, 0, 3185, 3183, 1, 0, 0, 0, 3185, 3186, 1, 0, 0, 0, 3186, 3188, 1, 0, 0, 0, 3187, 3185, 1, 0, 0, 0, 3188, 3190, 3, 392, 196, 0, 3189, 3191, 5, 549, 0, 0, 3190, 3189, 1, 0, 0, 0, 3190, 3191, 1, 0, 0, 0, 3191, 3323, 1, 0, 0, 0, 3192, 3194, 3, 840, 420, 0, 3193, 3192, 1, 0, 0, 0, 3194, 3197, 1, 0, 0, 0, 3195, 3193, 1, 0, 0, 0, 3195, 3196, 1, 0, 0, 0, 3196, 3198, 1, 0, 0, 0, 3197, 3195, 1, 0, 0, 0, 3198, 3200, 3, 394, 197, 0, 3199, 3201, 5, 549, 0, 0, 3200, 3199, 1, 0, 0, 0, 3200, 3201, 1, 0, 0, 0, 3201, 3323, 1, 0, 0, 0, 3202, 3204, 3, 840, 420, 0, 3203, 3202, 1, 0, 0, 0, 3204, 3207, 1, 0, 0, 0, 3205, 3203, 1, 0, 0, 0, 3205, 3206, 1, 0, 0, 0, 3206, 3208, 1, 0, 0, 0, 3207, 3205, 1, 0, 0, 0, 3208, 3210, 3, 396, 198, 0, 3209, 3211, 5, 549, 0, 0, 3210, 3209, 1, 0, 0, 0, 3210, 3211, 1, 0, 0, 0, 3211, 3323, 1, 0, 0, 0, 3212, 3214, 3, 840, 420, 0, 3213, 3212, 1, 0, 0, 0, 3214, 3217, 1, 0, 0, 0, 3215, 3213, 1, 0, 0, 0, 3215, 3216, 1, 0, 0, 0, 3216, 3218, 1, 0, 0, 0, 3217, 3215, 1, 0, 0, 0, 3218, 3220, 3, 322, 161, 0, 3219, 3221, 5, 549, 0, 0, 3220, 3219, 1, 0, 0, 0, 3220, 3221, 1, 0, 0, 0, 3221, 3323, 1, 0, 0, 0, 3222, 3224, 3, 840, 420, 0, 3223, 3222, 1, 0, 0, 0, 3224, 3227, 1, 0, 0, 0, 3225, 3223, 1, 0, 0, 0, 3225, 3226, 1, 0, 0, 0, 3226, 3228, 1, 0, 0, 0, 3227, 3225, 1, 0, 0, 0, 3228, 3230, 3, 324, 162, 0, 3229, 3231, 5, 549, 0, 0, 3230, 3229, 1, 0, 0, 0, 3230, 3231, 1, 0, 0, 0, 3231, 3323, 1, 0, 0, 0, 3232, 3234, 3, 840, 420, 0, 3233, 3232, 1, 0, 0, 0, 3234, 3237, 1, 0, 0, 0, 3235, 3233, 1, 0, 0, 0, 3235, 3236, 1, 0, 0, 0, 3236, 3238, 1, 0, 0, 0, 3237, 3235, 1, 0, 0, 0, 3238, 3240, 3, 326, 163, 0, 3239, 3241, 5, 549, 0, 0, 3240, 3239, 1, 0, 0, 0, 3240, 3241, 1, 0, 0, 0, 3241, 3323, 1, 0, 0, 0, 3242, 3244, 3, 840, 420, 0, 3243, 3242, 1, 0, 0, 0, 3244, 3247, 1, 0, 0, 0, 3245, 3243, 1, 0, 0, 0, 3245, 3246, 1, 0, 0, 0, 3246, 3248, 1, 0, 0, 0, 3247, 3245, 1, 0, 0, 0, 3248, 3250, 3, 328, 164, 0, 3249, 3251, 5, 549, 0, 0, 3250, 3249, 1, 0, 0, 0, 3250, 3251, 1, 0, 0, 0, 3251, 3323, 1, 0, 0, 0, 3252, 3254, 3, 840, 420, 0, 3253, 3252, 1, 0, 0, 0, 3254, 3257, 1, 0, 0, 0, 3255, 3253, 1, 0, 0, 0, 3255, 3256, 1, 0, 0, 0, 3256, 3258, 1, 0, 0, 0, 3257, 3255, 1, 0, 0, 0, 3258, 3260, 3, 330, 165, 0, 3259, 3261, 5, 549, 0, 0, 3260, 3259, 1, 0, 0, 0, 3260, 3261, 1, 0, 0, 0, 3261, 3323, 1, 0, 0, 0, 3262, 3264, 3, 840, 420, 0, 3263, 3262, 1, 0, 0, 0, 3264, 3267, 1, 0, 0, 0, 3265, 3263, 1, 0, 0, 0, 3265, 3266, 1, 0, 0, 0, 3266, 3268, 1, 0, 0, 0, 3267, 3265, 1, 0, 0, 0, 3268, 3270, 3, 334, 167, 0, 3269, 3271, 5, 549, 0, 0, 3270, 3269, 1, 0, 0, 0, 3270, 3271, 1, 0, 0, 0, 3271, 3323, 1, 0, 0, 0, 3272, 3274, 3, 840, 420, 0, 3273, 3272, 1, 0, 0, 0, 3274, 3277, 1, 0, 0, 0, 3275, 3273, 1, 0, 0, 0, 3275, 3276, 1, 0, 0, 0, 3276, 3278, 1, 0, 0, 0, 3277, 3275, 1, 0, 0, 0, 3278, 3280, 3, 336, 168, 0, 3279, 3281, 5, 549, 0, 0, 3280, 3279, 1, 0, 0, 0, 3280, 3281, 1, 0, 0, 0, 3281, 3323, 1, 0, 0, 0, 3282, 3284, 3, 840, 420, 0, 3283, 3282, 1, 0, 0, 0, 3284, 3287, 1, 0, 0, 0, 3285, 3283, 1, 0, 0, 0, 3285, 3286, 1, 0, 0, 0, 3286, 3288, 1, 0, 0, 0, 3287, 3285, 1, 0, 0, 0, 3288, 3290, 3, 338, 169, 0, 3289, 3291, 5, 549, 0, 0, 3290, 3289, 1, 0, 0, 0, 3290, 3291, 1, 0, 0, 0, 3291, 3323, 1, 0, 0, 0, 3292, 3294, 3, 840, 420, 0, 3293, 3292, 1, 0, 0, 0, 3294, 3297, 1, 0, 0, 0, 3295, 3293, 1, 0, 0, 0, 3295, 3296, 1, 0, 0, 0, 3296, 3298, 1, 0, 0, 0, 3297, 3295, 1, 0, 0, 0, 3298, 3300, 3, 340, 170, 0, 3299, 3301, 5, 549, 0, 0, 3300, 3299, 1, 0, 0, 0, 3300, 3301, 1, 0, 0, 0, 3301, 3323, 1, 0, 0, 0, 3302, 3304, 3, 840, 420, 0, 3303, 3302, 1, 0, 0, 0, 3304, 3307, 1, 0, 0, 0, 3305, 3303, 1, 0, 0, 0, 3305, 3306, 1, 0, 0, 0, 3306, 3308, 1, 0, 0, 0, 3307, 3305, 1, 0, 0, 0, 3308, 3310, 3, 342, 171, 0, 3309, 3311, 5, 549, 0, 0, 3310, 3309, 1, 0, 0, 0, 3310, 3311, 1, 0, 0, 0, 3311, 3323, 1, 0, 0, 0, 3312, 3314, 3, 840, 420, 0, 3313, 3312, 1, 0, 0, 0, 3314, 3317, 1, 0, 0, 0, 3315, 3313, 1, 0, 0, 0, 3315, 3316, 1, 0, 0, 0, 3316, 3318, 1, 0, 0, 0, 3317, 3315, 1, 0, 0, 0, 3318, 3320, 3, 344, 172, 0, 3319, 3321, 5, 549, 0, 0, 3320, 3319, 1, 0, 0, 0, 3320, 3321, 1, 0, 0, 0, 3321, 3323, 1, 0, 0, 0, 3322, 2855, 1, 0, 0, 0, 3322, 2865, 1, 0, 0, 0, 3322, 2875, 1, 0, 0, 0, 3322, 2885, 1, 0, 0, 0, 3322, 2895, 1, 0, 0, 0, 3322, 2905, 1, 0, 0, 0, 3322, 2915, 1, 0, 0, 0, 3322, 2925, 1, 0, 0, 0, 3322, 2935, 1, 0, 0, 0, 3322, 2945, 1, 0, 0, 0, 3322, 2955, 1, 0, 0, 0, 3322, 2965, 1, 0, 0, 0, 3322, 2975, 1, 0, 0, 0, 3322, 2985, 1, 0, 0, 0, 3322, 2995, 1, 0, 0, 0, 3322, 3005, 1, 0, 0, 0, 3322, 3015, 1, 0, 0, 0, 3322, 3025, 1, 0, 0, 0, 3322, 3035, 1, 0, 0, 0, 3322, 3045, 1, 0, 0, 0, 3322, 3055, 1, 0, 0, 0, 3322, 3065, 1, 0, 0, 0, 3322, 3075, 1, 0, 0, 0, 3322, 3085, 1, 0, 0, 0, 3322, 3095, 1, 0, 0, 0, 3322, 3105, 1, 0, 0, 0, 3322, 3115, 1, 0, 0, 0, 3322, 3125, 1, 0, 0, 0, 3322, 3135, 1, 0, 0, 0, 3322, 3145, 1, 0, 0, 0, 3322, 3155, 1, 0, 0, 0, 3322, 3165, 1, 0, 0, 0, 3322, 3175, 1, 0, 0, 0, 3322, 3185, 1, 0, 0, 0, 3322, 3195, 1, 0, 0, 0, 3322, 3205, 1, 0, 0, 0, 3322, 3215, 1, 0, 0, 0, 3322, 3225, 1, 0, 0, 0, 3322, 3235, 1, 0, 0, 0, 3322, 3245, 1, 0, 0, 0, 3322, 3255, 1, 0, 0, 0, 3322, 3265, 1, 0, 0, 0, 3322, 3275, 1, 0, 0, 0, 3322, 3285, 1, 0, 0, 0, 3322, 3295, 1, 0, 0, 0, 3322, 3305, 1, 0, 0, 0, 3322, 3315, 1, 0, 0, 0, 3323, 265, 1, 0, 0, 0, 3324, 3325, 5, 98, 0, 0, 3325, 3326, 5, 569, 0, 0, 3326, 3329, 3, 126, 63, 0, 3327, 3328, 5, 539, 0, 0, 3328, 3330, 3, 784, 392, 0, 3329, 3327, 1, 0, 0, 0, 3329, 3330, 1, 0, 0, 0, 3330, 267, 1, 0, 0, 0, 3331, 3334, 5, 48, 0, 0, 3332, 3335, 5, 569, 0, 0, 3333, 3335, 3, 274, 137, 0, 3334, 3332, 1, 0, 0, 0, 3334, 3333, 1, 0, 0, 0, 3335, 3336, 1, 0, 0, 0, 3336, 3337, 5, 539, 0, 0, 3337, 3338, 3, 784, 392, 0, 3338, 269, 1, 0, 0, 0, 3339, 3340, 5, 569, 0, 0, 3340, 3342, 5, 539, 0, 0, 3341, 3339, 1, 0, 0, 0, 3341, 3342, 1, 0, 0, 0, 3342, 3343, 1, 0, 0, 0, 3343, 3344, 5, 17, 0, 0, 3344, 3350, 3, 130, 65, 0, 3345, 3347, 5, 552, 0, 0, 3346, 3348, 3, 416, 208, 0, 3347, 3346, 1, 0, 0, 0, 3347, 3348, 1, 0, 0, 0, 3348, 3349, 1, 0, 0, 0, 3349, 3351, 5, 553, 0, 0, 3350, 3345, 1, 0, 0, 0, 3350, 3351, 1, 0, 0, 0, 3351, 3353, 1, 0, 0, 0, 3352, 3354, 3, 286, 143, 0, 3353, 3352, 1, 0, 0, 0, 3353, 3354, 1, 0, 0, 0, 3354, 271, 1, 0, 0, 0, 3355, 3356, 5, 99, 0, 0, 3356, 3362, 5, 569, 0, 0, 3357, 3359, 5, 552, 0, 0, 3358, 3360, 3, 416, 208, 0, 3359, 3358, 1, 0, 0, 0, 3359, 3360, 1, 0, 0, 0, 3360, 3361, 1, 0, 0, 0, 3361, 3363, 5, 553, 0, 0, 3362, 3357, 1, 0, 0, 0, 3362, 3363, 1, 0, 0, 0, 3363, 273, 1, 0, 0, 0, 3364, 3370, 5, 569, 0, 0, 3365, 3368, 7, 17, 0, 0, 3366, 3369, 5, 570, 0, 0, 3367, 3369, 3, 828, 414, 0, 3368, 3366, 1, 0, 0, 0, 3368, 3367, 1, 0, 0, 0, 3369, 3371, 1, 0, 0, 0, 3370, 3365, 1, 0, 0, 0, 3371, 3372, 1, 0, 0, 0, 3372, 3370, 1, 0, 0, 0, 3372, 3373, 1, 0, 0, 0, 3373, 275, 1, 0, 0, 0, 3374, 3375, 5, 102, 0, 0, 3375, 3378, 5, 569, 0, 0, 3376, 3377, 5, 140, 0, 0, 3377, 3379, 5, 121, 0, 0, 3378, 3376, 1, 0, 0, 0, 3378, 3379, 1, 0, 0, 0, 3379, 3381, 1, 0, 0, 0, 3380, 3382, 5, 417, 0, 0, 3381, 3380, 1, 0, 0, 0, 3381, 3382, 1, 0, 0, 0, 3382, 3384, 1, 0, 0, 0, 3383, 3385, 3, 286, 143, 0, 3384, 3383, 1, 0, 0, 0, 3384, 3385, 1, 0, 0, 0, 3385, 277, 1, 0, 0, 0, 3386, 3387, 5, 101, 0, 0, 3387, 3389, 5, 569, 0, 0, 3388, 3390, 3, 286, 143, 0, 3389, 3388, 1, 0, 0, 0, 3389, 3390, 1, 0, 0, 0, 3390, 279, 1, 0, 0, 0, 3391, 3392, 5, 103, 0, 0, 3392, 3394, 5, 569, 0, 0, 3393, 3395, 5, 417, 0, 0, 3394, 3393, 1, 0, 0, 0, 3394, 3395, 1, 0, 0, 0, 3395, 281, 1, 0, 0, 0, 3396, 3397, 5, 100, 0, 0, 3397, 3398, 5, 569, 0, 0, 3398, 3399, 5, 72, 0, 0, 3399, 3414, 3, 284, 142, 0, 3400, 3412, 5, 73, 0, 0, 3401, 3408, 3, 448, 224, 0, 3402, 3404, 3, 450, 225, 0, 3403, 3402, 1, 0, 0, 0, 3403, 3404, 1, 0, 0, 0, 3404, 3405, 1, 0, 0, 0, 3405, 3407, 3, 448, 224, 0, 3406, 3403, 1, 0, 0, 0, 3407, 3410, 1, 0, 0, 0, 3408, 3406, 1, 0, 0, 0, 3408, 3409, 1, 0, 0, 0, 3409, 3413, 1, 0, 0, 0, 3410, 3408, 1, 0, 0, 0, 3411, 3413, 3, 784, 392, 0, 3412, 3401, 1, 0, 0, 0, 3412, 3411, 1, 0, 0, 0, 3413, 3415, 1, 0, 0, 0, 3414, 3400, 1, 0, 0, 0, 3414, 3415, 1, 0, 0, 0, 3415, 3425, 1, 0, 0, 0, 3416, 3417, 5, 10, 0, 0, 3417, 3422, 3, 446, 223, 0, 3418, 3419, 5, 550, 0, 0, 3419, 3421, 3, 446, 223, 0, 3420, 3418, 1, 0, 0, 0, 3421, 3424, 1, 0, 0, 0, 3422, 3420, 1, 0, 0, 0, 3422, 3423, 1, 0, 0, 0, 3423, 3426, 1, 0, 0, 0, 3424, 3422, 1, 0, 0, 0, 3425, 3416, 1, 0, 0, 0, 3425, 3426, 1, 0, 0, 0, 3426, 3429, 1, 0, 0, 0, 3427, 3428, 5, 76, 0, 0, 3428, 3430, 3, 784, 392, 0, 3429, 3427, 1, 0, 0, 0, 3429, 3430, 1, 0, 0, 0, 3430, 3433, 1, 0, 0, 0, 3431, 3432, 5, 75, 0, 0, 3432, 3434, 3, 784, 392, 0, 3433, 3431, 1, 0, 0, 0, 3433, 3434, 1, 0, 0, 0, 3434, 3436, 1, 0, 0, 0, 3435, 3437, 3, 286, 143, 0, 3436, 3435, 1, 0, 0, 0, 3436, 3437, 1, 0, 0, 0, 3437, 283, 1, 0, 0, 0, 3438, 3449, 3, 828, 414, 0, 3439, 3440, 5, 569, 0, 0, 3440, 3441, 5, 545, 0, 0, 3441, 3449, 3, 828, 414, 0, 3442, 3443, 5, 552, 0, 0, 3443, 3444, 3, 698, 349, 0, 3444, 3445, 5, 553, 0, 0, 3445, 3449, 1, 0, 0, 0, 3446, 3447, 5, 373, 0, 0, 3447, 3449, 5, 566, 0, 0, 3448, 3438, 1, 0, 0, 0, 3448, 3439, 1, 0, 0, 0, 3448, 3442, 1, 0, 0, 0, 3448, 3446, 1, 0, 0, 0, 3449, 285, 1, 0, 0, 0, 3450, 3451, 5, 94, 0, 0, 3451, 3452, 5, 320, 0, 0, 3452, 3471, 5, 109, 0, 0, 3453, 3454, 5, 94, 0, 0, 3454, 3455, 5, 320, 0, 0, 3455, 3471, 5, 103, 0, 0, 3456, 3457, 5, 94, 0, 0, 3457, 3458, 5, 320, 0, 0, 3458, 3459, 5, 554, 0, 0, 3459, 3460, 3, 262, 131, 0, 3460, 3461, 5, 555, 0, 0, 3461, 3471, 1, 0, 0, 0, 3462, 3463, 5, 94, 0, 0, 3463, 3464, 5, 320, 0, 0, 3464, 3465, 5, 459, 0, 0, 3465, 3466, 5, 103, 0, 0, 3466, 3467, 5, 554, 0, 0, 3467, 3468, 3, 262, 131, 0, 3468, 3469, 5, 555, 0, 0, 3469, 3471, 1, 0, 0, 0, 3470, 3450, 1, 0, 0, 0, 3470, 3453, 1, 0, 0, 0, 3470, 3456, 1, 0, 0, 0, 3470, 3462, 1, 0, 0, 0, 3471, 287, 1, 0, 0, 0, 3472, 3473, 5, 106, 0, 0, 3473, 3474, 3, 784, 392, 0, 3474, 3475, 5, 82, 0, 0, 3475, 3483, 3, 262, 131, 0, 3476, 3477, 5, 107, 0, 0, 3477, 3478, 3, 784, 392, 0, 3478, 3479, 5, 82, 0, 0, 3479, 3480, 3, 262, 131, 0, 3480, 3482, 1, 0, 0, 0, 3481, 3476, 1, 0, 0, 0, 3482, 3485, 1, 0, 0, 0, 3483, 3481, 1, 0, 0, 0, 3483, 3484, 1, 0, 0, 0, 3484, 3488, 1, 0, 0, 0, 3485, 3483, 1, 0, 0, 0, 3486, 3487, 5, 83, 0, 0, 3487, 3489, 3, 262, 131, 0, 3488, 3486, 1, 0, 0, 0, 3488, 3489, 1, 0, 0, 0, 3489, 3490, 1, 0, 0, 0, 3490, 3491, 5, 84, 0, 0, 3491, 3492, 5, 106, 0, 0, 3492, 289, 1, 0, 0, 0, 3493, 3494, 5, 104, 0, 0, 3494, 3495, 5, 569, 0, 0, 3495, 3498, 5, 307, 0, 0, 3496, 3499, 5, 569, 0, 0, 3497, 3499, 3, 274, 137, 0, 3498, 3496, 1, 0, 0, 0, 3498, 3497, 1, 0, 0, 0, 3499, 3500, 1, 0, 0, 0, 3500, 3501, 5, 97, 0, 0, 3501, 3502, 3, 262, 131, 0, 3502, 3503, 5, 84, 0, 0, 3503, 3504, 5, 104, 0, 0, 3504, 291, 1, 0, 0, 0, 3505, 3506, 5, 105, 0, 0, 3506, 3508, 3, 784, 392, 0, 3507, 3509, 5, 97, 0, 0, 3508, 3507, 1, 0, 0, 0, 3508, 3509, 1, 0, 0, 0, 3509, 3510, 1, 0, 0, 0, 3510, 3511, 3, 262, 131, 0, 3511, 3513, 5, 84, 0, 0, 3512, 3514, 5, 105, 0, 0, 3513, 3512, 1, 0, 0, 0, 3513, 3514, 1, 0, 0, 0, 3514, 293, 1, 0, 0, 0, 3515, 3516, 5, 109, 0, 0, 3516, 295, 1, 0, 0, 0, 3517, 3518, 5, 110, 0, 0, 3518, 297, 1, 0, 0, 0, 3519, 3521, 5, 111, 0, 0, 3520, 3522, 3, 784, 392, 0, 3521, 3520, 1, 0, 0, 0, 3521, 3522, 1, 0, 0, 0, 3522, 299, 1, 0, 0, 0, 3523, 3524, 5, 321, 0, 0, 3524, 3525, 5, 320, 0, 0, 3525, 301, 1, 0, 0, 0, 3526, 3528, 5, 113, 0, 0, 3527, 3529, 3, 304, 152, 0, 3528, 3527, 1, 0, 0, 0, 3528, 3529, 1, 0, 0, 0, 3529, 3532, 1, 0, 0, 0, 3530, 3531, 5, 120, 0, 0, 3531, 3533, 5, 566, 0, 0, 3532, 3530, 1, 0, 0, 0, 3532, 3533, 1, 0, 0, 0, 3533, 3534, 1, 0, 0, 0, 3534, 3536, 3, 784, 392, 0, 3535, 3537, 3, 310, 155, 0, 3536, 3535, 1, 0, 0, 0, 3536, 3537, 1, 0, 0, 0, 3537, 303, 1, 0, 0, 0, 3538, 3539, 7, 18, 0, 0, 3539, 305, 1, 0, 0, 0, 3540, 3541, 5, 140, 0, 0, 3541, 3542, 5, 552, 0, 0, 3542, 3547, 3, 308, 154, 0, 3543, 3544, 5, 550, 0, 0, 3544, 3546, 3, 308, 154, 0, 3545, 3543, 1, 0, 0, 0, 3546, 3549, 1, 0, 0, 0, 3547, 3545, 1, 0, 0, 0, 3547, 3548, 1, 0, 0, 0, 3548, 3550, 1, 0, 0, 0, 3549, 3547, 1, 0, 0, 0, 3550, 3551, 5, 553, 0, 0, 3551, 3555, 1, 0, 0, 0, 3552, 3553, 5, 392, 0, 0, 3553, 3555, 3, 834, 417, 0, 3554, 3540, 1, 0, 0, 0, 3554, 3552, 1, 0, 0, 0, 3555, 307, 1, 0, 0, 0, 3556, 3557, 5, 554, 0, 0, 3557, 3558, 5, 568, 0, 0, 3558, 3559, 5, 555, 0, 0, 3559, 3560, 5, 539, 0, 0, 3560, 3561, 3, 784, 392, 0, 3561, 309, 1, 0, 0, 0, 3562, 3563, 3, 306, 153, 0, 3563, 311, 1, 0, 0, 0, 3564, 3565, 3, 308, 154, 0, 3565, 313, 1, 0, 0, 0, 3566, 3567, 5, 569, 0, 0, 3567, 3569, 5, 539, 0, 0, 3568, 3566, 1, 0, 0, 0, 3568, 3569, 1, 0, 0, 0, 3569, 3570, 1, 0, 0, 0, 3570, 3571, 5, 114, 0, 0, 3571, 3572, 5, 30, 0, 0, 3572, 3573, 3, 828, 414, 0, 3573, 3575, 5, 552, 0, 0, 3574, 3576, 3, 346, 173, 0, 3575, 3574, 1, 0, 0, 0, 3575, 3576, 1, 0, 0, 0, 3576, 3577, 1, 0, 0, 0, 3577, 3579, 5, 553, 0, 0, 3578, 3580, 3, 286, 143, 0, 3579, 3578, 1, 0, 0, 0, 3579, 3580, 1, 0, 0, 0, 3580, 315, 1, 0, 0, 0, 3581, 3582, 5, 569, 0, 0, 3582, 3584, 5, 539, 0, 0, 3583, 3581, 1, 0, 0, 0, 3583, 3584, 1, 0, 0, 0, 3584, 3585, 1, 0, 0, 0, 3585, 3586, 5, 114, 0, 0, 3586, 3587, 5, 115, 0, 0, 3587, 3588, 5, 117, 0, 0, 3588, 3589, 3, 828, 414, 0, 3589, 3591, 5, 552, 0, 0, 3590, 3592, 3, 346, 173, 0, 3591, 3590, 1, 0, 0, 0, 3591, 3592, 1, 0, 0, 0, 3592, 3593, 1, 0, 0, 0, 3593, 3595, 5, 553, 0, 0, 3594, 3596, 3, 286, 143, 0, 3595, 3594, 1, 0, 0, 0, 3595, 3596, 1, 0, 0, 0, 3596, 317, 1, 0, 0, 0, 3597, 3598, 5, 569, 0, 0, 3598, 3600, 5, 539, 0, 0, 3599, 3597, 1, 0, 0, 0, 3599, 3600, 1, 0, 0, 0, 3600, 3601, 1, 0, 0, 0, 3601, 3602, 5, 420, 0, 0, 3602, 3603, 5, 373, 0, 0, 3603, 3604, 5, 374, 0, 0, 3604, 3611, 3, 828, 414, 0, 3605, 3609, 5, 167, 0, 0, 3606, 3610, 5, 566, 0, 0, 3607, 3610, 5, 567, 0, 0, 3608, 3610, 3, 784, 392, 0, 3609, 3606, 1, 0, 0, 0, 3609, 3607, 1, 0, 0, 0, 3609, 3608, 1, 0, 0, 0, 3610, 3612, 1, 0, 0, 0, 3611, 3605, 1, 0, 0, 0, 3611, 3612, 1, 0, 0, 0, 3612, 3618, 1, 0, 0, 0, 3613, 3615, 5, 552, 0, 0, 3614, 3616, 3, 346, 173, 0, 3615, 3614, 1, 0, 0, 0, 3615, 3616, 1, 0, 0, 0, 3616, 3617, 1, 0, 0, 0, 3617, 3619, 5, 553, 0, 0, 3618, 3613, 1, 0, 0, 0, 3618, 3619, 1, 0, 0, 0, 3619, 3626, 1, 0, 0, 0, 3620, 3621, 5, 372, 0, 0, 3621, 3623, 5, 552, 0, 0, 3622, 3624, 3, 346, 173, 0, 3623, 3622, 1, 0, 0, 0, 3623, 3624, 1, 0, 0, 0, 3624, 3625, 1, 0, 0, 0, 3625, 3627, 5, 553, 0, 0, 3626, 3620, 1, 0, 0, 0, 3626, 3627, 1, 0, 0, 0, 3627, 3629, 1, 0, 0, 0, 3628, 3630, 3, 286, 143, 0, 3629, 3628, 1, 0, 0, 0, 3629, 3630, 1, 0, 0, 0, 3630, 319, 1, 0, 0, 0, 3631, 3632, 5, 569, 0, 0, 3632, 3634, 5, 539, 0, 0, 3633, 3631, 1, 0, 0, 0, 3633, 3634, 1, 0, 0, 0, 3634, 3635, 1, 0, 0, 0, 3635, 3636, 5, 114, 0, 0, 3636, 3637, 5, 26, 0, 0, 3637, 3638, 5, 117, 0, 0, 3638, 3639, 3, 828, 414, 0, 3639, 3641, 5, 552, 0, 0, 3640, 3642, 3, 346, 173, 0, 3641, 3640, 1, 0, 0, 0, 3641, 3642, 1, 0, 0, 0, 3642, 3643, 1, 0, 0, 0, 3643, 3645, 5, 553, 0, 0, 3644, 3646, 3, 286, 143, 0, 3645, 3644, 1, 0, 0, 0, 3645, 3646, 1, 0, 0, 0, 3646, 321, 1, 0, 0, 0, 3647, 3648, 5, 569, 0, 0, 3648, 3650, 5, 539, 0, 0, 3649, 3647, 1, 0, 0, 0, 3649, 3650, 1, 0, 0, 0, 3650, 3651, 1, 0, 0, 0, 3651, 3652, 5, 114, 0, 0, 3652, 3653, 5, 32, 0, 0, 3653, 3654, 3, 828, 414, 0, 3654, 3656, 5, 552, 0, 0, 3655, 3657, 3, 346, 173, 0, 3656, 3655, 1, 0, 0, 0, 3656, 3657, 1, 0, 0, 0, 3657, 3658, 1, 0, 0, 0, 3658, 3660, 5, 553, 0, 0, 3659, 3661, 3, 286, 143, 0, 3660, 3659, 1, 0, 0, 0, 3660, 3661, 1, 0, 0, 0, 3661, 323, 1, 0, 0, 0, 3662, 3663, 5, 569, 0, 0, 3663, 3665, 5, 539, 0, 0, 3664, 3662, 1, 0, 0, 0, 3664, 3665, 1, 0, 0, 0, 3665, 3666, 1, 0, 0, 0, 3666, 3667, 5, 354, 0, 0, 3667, 3668, 5, 32, 0, 0, 3668, 3669, 5, 518, 0, 0, 3669, 3670, 5, 569, 0, 0, 3670, 3671, 5, 77, 0, 0, 3671, 3673, 3, 828, 414, 0, 3672, 3674, 3, 286, 143, 0, 3673, 3672, 1, 0, 0, 0, 3673, 3674, 1, 0, 0, 0, 3674, 325, 1, 0, 0, 0, 3675, 3676, 5, 569, 0, 0, 3676, 3678, 5, 539, 0, 0, 3677, 3675, 1, 0, 0, 0, 3677, 3678, 1, 0, 0, 0, 3678, 3679, 1, 0, 0, 0, 3679, 3680, 5, 354, 0, 0, 3680, 3681, 5, 405, 0, 0, 3681, 3682, 5, 453, 0, 0, 3682, 3684, 5, 569, 0, 0, 3683, 3685, 3, 286, 143, 0, 3684, 3683, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 327, 1, 0, 0, 0, 3686, 3687, 5, 569, 0, 0, 3687, 3689, 5, 539, 0, 0, 3688, 3686, 1, 0, 0, 0, 3688, 3689, 1, 0, 0, 0, 3689, 3690, 1, 0, 0, 0, 3690, 3691, 5, 354, 0, 0, 3691, 3692, 5, 32, 0, 0, 3692, 3693, 5, 513, 0, 0, 3693, 3694, 5, 524, 0, 0, 3694, 3696, 5, 569, 0, 0, 3695, 3697, 3, 286, 143, 0, 3696, 3695, 1, 0, 0, 0, 3696, 3697, 1, 0, 0, 0, 3697, 329, 1, 0, 0, 0, 3698, 3699, 5, 32, 0, 0, 3699, 3700, 5, 339, 0, 0, 3700, 3702, 3, 332, 166, 0, 3701, 3703, 3, 286, 143, 0, 3702, 3701, 1, 0, 0, 0, 3702, 3703, 1, 0, 0, 0, 3703, 331, 1, 0, 0, 0, 3704, 3705, 5, 528, 0, 0, 3705, 3708, 5, 569, 0, 0, 3706, 3707, 5, 533, 0, 0, 3707, 3709, 3, 784, 392, 0, 3708, 3706, 1, 0, 0, 0, 3708, 3709, 1, 0, 0, 0, 3709, 3721, 1, 0, 0, 0, 3710, 3711, 5, 109, 0, 0, 3711, 3721, 5, 569, 0, 0, 3712, 3713, 5, 526, 0, 0, 3713, 3721, 5, 569, 0, 0, 3714, 3715, 5, 530, 0, 0, 3715, 3721, 5, 569, 0, 0, 3716, 3717, 5, 529, 0, 0, 3717, 3721, 5, 569, 0, 0, 3718, 3719, 5, 527, 0, 0, 3719, 3721, 5, 569, 0, 0, 3720, 3704, 1, 0, 0, 0, 3720, 3710, 1, 0, 0, 0, 3720, 3712, 1, 0, 0, 0, 3720, 3714, 1, 0, 0, 0, 3720, 3716, 1, 0, 0, 0, 3720, 3718, 1, 0, 0, 0, 3721, 333, 1, 0, 0, 0, 3722, 3723, 5, 48, 0, 0, 3723, 3724, 5, 487, 0, 0, 3724, 3725, 5, 490, 0, 0, 3725, 3726, 5, 569, 0, 0, 3726, 3728, 5, 566, 0, 0, 3727, 3729, 3, 286, 143, 0, 3728, 3727, 1, 0, 0, 0, 3728, 3729, 1, 0, 0, 0, 3729, 335, 1, 0, 0, 0, 3730, 3731, 5, 534, 0, 0, 3731, 3732, 5, 486, 0, 0, 3732, 3733, 5, 487, 0, 0, 3733, 3735, 5, 569, 0, 0, 3734, 3736, 3, 286, 143, 0, 3735, 3734, 1, 0, 0, 0, 3735, 3736, 1, 0, 0, 0, 3736, 337, 1, 0, 0, 0, 3737, 3738, 5, 569, 0, 0, 3738, 3740, 5, 539, 0, 0, 3739, 3737, 1, 0, 0, 0, 3739, 3740, 1, 0, 0, 0, 3740, 3741, 1, 0, 0, 0, 3741, 3742, 5, 525, 0, 0, 3742, 3743, 5, 32, 0, 0, 3743, 3745, 5, 569, 0, 0, 3744, 3746, 3, 286, 143, 0, 3745, 3744, 1, 0, 0, 0, 3745, 3746, 1, 0, 0, 0, 3746, 339, 1, 0, 0, 0, 3747, 3748, 5, 534, 0, 0, 3748, 3749, 5, 32, 0, 0, 3749, 3751, 5, 569, 0, 0, 3750, 3752, 3, 286, 143, 0, 3751, 3750, 1, 0, 0, 0, 3751, 3752, 1, 0, 0, 0, 3752, 341, 1, 0, 0, 0, 3753, 3754, 5, 531, 0, 0, 3754, 3755, 5, 32, 0, 0, 3755, 3757, 7, 19, 0, 0, 3756, 3758, 3, 286, 143, 0, 3757, 3756, 1, 0, 0, 0, 3757, 3758, 1, 0, 0, 0, 3758, 343, 1, 0, 0, 0, 3759, 3760, 5, 532, 0, 0, 3760, 3761, 5, 32, 0, 0, 3761, 3763, 7, 19, 0, 0, 3762, 3764, 3, 286, 143, 0, 3763, 3762, 1, 0, 0, 0, 3763, 3764, 1, 0, 0, 0, 3764, 345, 1, 0, 0, 0, 3765, 3770, 3, 348, 174, 0, 3766, 3767, 5, 550, 0, 0, 3767, 3769, 3, 348, 174, 0, 3768, 3766, 1, 0, 0, 0, 3769, 3772, 1, 0, 0, 0, 3770, 3768, 1, 0, 0, 0, 3770, 3771, 1, 0, 0, 0, 3771, 347, 1, 0, 0, 0, 3772, 3770, 1, 0, 0, 0, 3773, 3776, 5, 569, 0, 0, 3774, 3776, 3, 254, 127, 0, 3775, 3773, 1, 0, 0, 0, 3775, 3774, 1, 0, 0, 0, 3776, 3777, 1, 0, 0, 0, 3777, 3778, 5, 539, 0, 0, 3778, 3779, 3, 784, 392, 0, 3779, 349, 1, 0, 0, 0, 3780, 3781, 5, 65, 0, 0, 3781, 3782, 5, 33, 0, 0, 3782, 3788, 3, 828, 414, 0, 3783, 3785, 5, 552, 0, 0, 3784, 3786, 3, 352, 176, 0, 3785, 3784, 1, 0, 0, 0, 3785, 3786, 1, 0, 0, 0, 3786, 3787, 1, 0, 0, 0, 3787, 3789, 5, 553, 0, 0, 3788, 3783, 1, 0, 0, 0, 3788, 3789, 1, 0, 0, 0, 3789, 3792, 1, 0, 0, 0, 3790, 3791, 5, 453, 0, 0, 3791, 3793, 5, 569, 0, 0, 3792, 3790, 1, 0, 0, 0, 3792, 3793, 1, 0, 0, 0, 3793, 3796, 1, 0, 0, 0, 3794, 3795, 5, 140, 0, 0, 3795, 3797, 3, 416, 208, 0, 3796, 3794, 1, 0, 0, 0, 3796, 3797, 1, 0, 0, 0, 3797, 351, 1, 0, 0, 0, 3798, 3803, 3, 354, 177, 0, 3799, 3800, 5, 550, 0, 0, 3800, 3802, 3, 354, 177, 0, 3801, 3799, 1, 0, 0, 0, 3802, 3805, 1, 0, 0, 0, 3803, 3801, 1, 0, 0, 0, 3803, 3804, 1, 0, 0, 0, 3804, 353, 1, 0, 0, 0, 3805, 3803, 1, 0, 0, 0, 3806, 3807, 5, 569, 0, 0, 3807, 3810, 5, 539, 0, 0, 3808, 3811, 5, 569, 0, 0, 3809, 3811, 3, 784, 392, 0, 3810, 3808, 1, 0, 0, 0, 3810, 3809, 1, 0, 0, 0, 3811, 3817, 1, 0, 0, 0, 3812, 3813, 3, 830, 415, 0, 3813, 3814, 5, 558, 0, 0, 3814, 3815, 3, 784, 392, 0, 3815, 3817, 1, 0, 0, 0, 3816, 3806, 1, 0, 0, 0, 3816, 3812, 1, 0, 0, 0, 3817, 355, 1, 0, 0, 0, 3818, 3819, 5, 119, 0, 0, 3819, 3820, 5, 33, 0, 0, 3820, 357, 1, 0, 0, 0, 3821, 3822, 5, 65, 0, 0, 3822, 3823, 5, 397, 0, 0, 3823, 3824, 5, 33, 0, 0, 3824, 359, 1, 0, 0, 0, 3825, 3826, 5, 65, 0, 0, 3826, 3827, 5, 426, 0, 0, 3827, 3830, 3, 784, 392, 0, 3828, 3829, 5, 443, 0, 0, 3829, 3831, 3, 830, 415, 0, 3830, 3828, 1, 0, 0, 0, 3830, 3831, 1, 0, 0, 0, 3831, 3837, 1, 0, 0, 0, 3832, 3833, 5, 143, 0, 0, 3833, 3834, 5, 556, 0, 0, 3834, 3835, 3, 822, 411, 0, 3835, 3836, 5, 557, 0, 0, 3836, 3838, 1, 0, 0, 0, 3837, 3832, 1, 0, 0, 0, 3837, 3838, 1, 0, 0, 0, 3838, 361, 1, 0, 0, 0, 3839, 3840, 5, 112, 0, 0, 3840, 3841, 3, 784, 392, 0, 3841, 363, 1, 0, 0, 0, 3842, 3843, 5, 316, 0, 0, 3843, 3844, 5, 317, 0, 0, 3844, 3845, 3, 274, 137, 0, 3845, 3846, 5, 426, 0, 0, 3846, 3852, 3, 784, 392, 0, 3847, 3848, 5, 143, 0, 0, 3848, 3849, 5, 556, 0, 0, 3849, 3850, 3, 822, 411, 0, 3850, 3851, 5, 557, 0, 0, 3851, 3853, 1, 0, 0, 0, 3852, 3847, 1, 0, 0, 0, 3852, 3853, 1, 0, 0, 0, 3853, 365, 1, 0, 0, 0, 3854, 3855, 5, 569, 0, 0, 3855, 3857, 5, 539, 0, 0, 3856, 3854, 1, 0, 0, 0, 3856, 3857, 1, 0, 0, 0, 3857, 3858, 1, 0, 0, 0, 3858, 3859, 5, 329, 0, 0, 3859, 3860, 5, 114, 0, 0, 3860, 3861, 3, 368, 184, 0, 3861, 3863, 3, 370, 185, 0, 3862, 3864, 3, 372, 186, 0, 3863, 3862, 1, 0, 0, 0, 3863, 3864, 1, 0, 0, 0, 3864, 3868, 1, 0, 0, 0, 3865, 3867, 3, 374, 187, 0, 3866, 3865, 1, 0, 0, 0, 3867, 3870, 1, 0, 0, 0, 3868, 3866, 1, 0, 0, 0, 3868, 3869, 1, 0, 0, 0, 3869, 3872, 1, 0, 0, 0, 3870, 3868, 1, 0, 0, 0, 3871, 3873, 3, 376, 188, 0, 3872, 3871, 1, 0, 0, 0, 3872, 3873, 1, 0, 0, 0, 3873, 3875, 1, 0, 0, 0, 3874, 3876, 3, 378, 189, 0, 3875, 3874, 1, 0, 0, 0, 3875, 3876, 1, 0, 0, 0, 3876, 3878, 1, 0, 0, 0, 3877, 3879, 3, 380, 190, 0, 3878, 3877, 1, 0, 0, 0, 3878, 3879, 1, 0, 0, 0, 3879, 3880, 1, 0, 0, 0, 3880, 3882, 3, 382, 191, 0, 3881, 3883, 3, 286, 143, 0, 3882, 3881, 1, 0, 0, 0, 3882, 3883, 1, 0, 0, 0, 3883, 367, 1, 0, 0, 0, 3884, 3885, 7, 20, 0, 0, 3885, 369, 1, 0, 0, 0, 3886, 3889, 5, 566, 0, 0, 3887, 3889, 3, 784, 392, 0, 3888, 3886, 1, 0, 0, 0, 3888, 3887, 1, 0, 0, 0, 3889, 371, 1, 0, 0, 0, 3890, 3891, 3, 306, 153, 0, 3891, 373, 1, 0, 0, 0, 3892, 3893, 5, 198, 0, 0, 3893, 3894, 7, 21, 0, 0, 3894, 3895, 5, 539, 0, 0, 3895, 3896, 3, 784, 392, 0, 3896, 375, 1, 0, 0, 0, 3897, 3898, 5, 334, 0, 0, 3898, 3899, 5, 336, 0, 0, 3899, 3900, 3, 784, 392, 0, 3900, 3901, 5, 371, 0, 0, 3901, 3902, 3, 784, 392, 0, 3902, 377, 1, 0, 0, 0, 3903, 3904, 5, 343, 0, 0, 3904, 3906, 5, 566, 0, 0, 3905, 3907, 3, 306, 153, 0, 3906, 3905, 1, 0, 0, 0, 3906, 3907, 1, 0, 0, 0, 3907, 3920, 1, 0, 0, 0, 3908, 3909, 5, 343, 0, 0, 3909, 3911, 3, 784, 392, 0, 3910, 3912, 3, 306, 153, 0, 3911, 3910, 1, 0, 0, 0, 3911, 3912, 1, 0, 0, 0, 3912, 3920, 1, 0, 0, 0, 3913, 3914, 5, 343, 0, 0, 3914, 3915, 5, 376, 0, 0, 3915, 3916, 3, 828, 414, 0, 3916, 3917, 5, 72, 0, 0, 3917, 3918, 5, 569, 0, 0, 3918, 3920, 1, 0, 0, 0, 3919, 3903, 1, 0, 0, 0, 3919, 3908, 1, 0, 0, 0, 3919, 3913, 1, 0, 0, 0, 3920, 379, 1, 0, 0, 0, 3921, 3922, 5, 342, 0, 0, 3922, 3923, 3, 784, 392, 0, 3923, 381, 1, 0, 0, 0, 3924, 3925, 5, 78, 0, 0, 3925, 3939, 5, 276, 0, 0, 3926, 3927, 5, 78, 0, 0, 3927, 3939, 5, 344, 0, 0, 3928, 3929, 5, 78, 0, 0, 3929, 3930, 5, 376, 0, 0, 3930, 3931, 3, 828, 414, 0, 3931, 3932, 5, 77, 0, 0, 3932, 3933, 3, 828, 414, 0, 3933, 3939, 1, 0, 0, 0, 3934, 3935, 5, 78, 0, 0, 3935, 3939, 5, 448, 0, 0, 3936, 3937, 5, 78, 0, 0, 3937, 3939, 5, 337, 0, 0, 3938, 3924, 1, 0, 0, 0, 3938, 3926, 1, 0, 0, 0, 3938, 3928, 1, 0, 0, 0, 3938, 3934, 1, 0, 0, 0, 3938, 3936, 1, 0, 0, 0, 3939, 383, 1, 0, 0, 0, 3940, 3941, 5, 569, 0, 0, 3941, 3943, 5, 539, 0, 0, 3942, 3940, 1, 0, 0, 0, 3942, 3943, 1, 0, 0, 0, 3943, 3944, 1, 0, 0, 0, 3944, 3945, 5, 346, 0, 0, 3945, 3946, 5, 329, 0, 0, 3946, 3947, 5, 345, 0, 0, 3947, 3949, 3, 828, 414, 0, 3948, 3950, 3, 386, 193, 0, 3949, 3948, 1, 0, 0, 0, 3949, 3950, 1, 0, 0, 0, 3950, 3952, 1, 0, 0, 0, 3951, 3953, 3, 390, 195, 0, 3952, 3951, 1, 0, 0, 0, 3952, 3953, 1, 0, 0, 0, 3953, 3955, 1, 0, 0, 0, 3954, 3956, 3, 286, 143, 0, 3955, 3954, 1, 0, 0, 0, 3955, 3956, 1, 0, 0, 0, 3956, 385, 1, 0, 0, 0, 3957, 3958, 5, 140, 0, 0, 3958, 3959, 5, 552, 0, 0, 3959, 3964, 3, 388, 194, 0, 3960, 3961, 5, 550, 0, 0, 3961, 3963, 3, 388, 194, 0, 3962, 3960, 1, 0, 0, 0, 3963, 3966, 1, 0, 0, 0, 3964, 3962, 1, 0, 0, 0, 3964, 3965, 1, 0, 0, 0, 3965, 3967, 1, 0, 0, 0, 3966, 3964, 1, 0, 0, 0, 3967, 3968, 5, 553, 0, 0, 3968, 387, 1, 0, 0, 0, 3969, 3970, 5, 569, 0, 0, 3970, 3971, 5, 539, 0, 0, 3971, 3972, 3, 784, 392, 0, 3972, 389, 1, 0, 0, 0, 3973, 3974, 5, 343, 0, 0, 3974, 3975, 5, 569, 0, 0, 3975, 391, 1, 0, 0, 0, 3976, 3977, 5, 569, 0, 0, 3977, 3979, 5, 539, 0, 0, 3978, 3976, 1, 0, 0, 0, 3978, 3979, 1, 0, 0, 0, 3979, 3980, 1, 0, 0, 0, 3980, 3981, 5, 378, 0, 0, 3981, 3982, 5, 72, 0, 0, 3982, 3983, 5, 376, 0, 0, 3983, 3984, 3, 828, 414, 0, 3984, 3985, 5, 552, 0, 0, 3985, 3986, 5, 569, 0, 0, 3986, 3988, 5, 553, 0, 0, 3987, 3989, 3, 286, 143, 0, 3988, 3987, 1, 0, 0, 0, 3988, 3989, 1, 0, 0, 0, 3989, 393, 1, 0, 0, 0, 3990, 3991, 5, 569, 0, 0, 3991, 3993, 5, 539, 0, 0, 3992, 3990, 1, 0, 0, 0, 3992, 3993, 1, 0, 0, 0, 3993, 3994, 1, 0, 0, 0, 3994, 3995, 5, 384, 0, 0, 3995, 3996, 5, 450, 0, 0, 3996, 3997, 5, 376, 0, 0, 3997, 3998, 3, 828, 414, 0, 3998, 3999, 5, 552, 0, 0, 3999, 4000, 5, 569, 0, 0, 4000, 4002, 5, 553, 0, 0, 4001, 4003, 3, 286, 143, 0, 4002, 4001, 1, 0, 0, 0, 4002, 4003, 1, 0, 0, 0, 4003, 395, 1, 0, 0, 0, 4004, 4005, 5, 569, 0, 0, 4005, 4007, 5, 539, 0, 0, 4006, 4004, 1, 0, 0, 0, 4006, 4007, 1, 0, 0, 0, 4007, 4008, 1, 0, 0, 0, 4008, 4009, 5, 519, 0, 0, 4009, 4010, 5, 569, 0, 0, 4010, 4011, 5, 140, 0, 0, 4011, 4013, 3, 828, 414, 0, 4012, 4014, 3, 286, 143, 0, 4013, 4012, 1, 0, 0, 0, 4013, 4014, 1, 0, 0, 0, 4014, 397, 1, 0, 0, 0, 4015, 4016, 5, 569, 0, 0, 4016, 4017, 5, 539, 0, 0, 4017, 4018, 3, 400, 200, 0, 4018, 399, 1, 0, 0, 0, 4019, 4020, 5, 122, 0, 0, 4020, 4021, 5, 552, 0, 0, 4021, 4022, 5, 569, 0, 0, 4022, 4091, 5, 553, 0, 0, 4023, 4024, 5, 123, 0, 0, 4024, 4025, 5, 552, 0, 0, 4025, 4026, 5, 569, 0, 0, 4026, 4091, 5, 553, 0, 0, 4027, 4028, 5, 124, 0, 0, 4028, 4029, 5, 552, 0, 0, 4029, 4030, 5, 569, 0, 0, 4030, 4031, 5, 550, 0, 0, 4031, 4032, 3, 784, 392, 0, 4032, 4033, 5, 553, 0, 0, 4033, 4091, 1, 0, 0, 0, 4034, 4035, 5, 188, 0, 0, 4035, 4036, 5, 552, 0, 0, 4036, 4037, 5, 569, 0, 0, 4037, 4038, 5, 550, 0, 0, 4038, 4039, 3, 784, 392, 0, 4039, 4040, 5, 553, 0, 0, 4040, 4091, 1, 0, 0, 0, 4041, 4042, 5, 125, 0, 0, 4042, 4043, 5, 552, 0, 0, 4043, 4044, 5, 569, 0, 0, 4044, 4045, 5, 550, 0, 0, 4045, 4046, 3, 402, 201, 0, 4046, 4047, 5, 553, 0, 0, 4047, 4091, 1, 0, 0, 0, 4048, 4049, 5, 126, 0, 0, 4049, 4050, 5, 552, 0, 0, 4050, 4051, 5, 569, 0, 0, 4051, 4052, 5, 550, 0, 0, 4052, 4053, 5, 569, 0, 0, 4053, 4091, 5, 553, 0, 0, 4054, 4055, 5, 127, 0, 0, 4055, 4056, 5, 552, 0, 0, 4056, 4057, 5, 569, 0, 0, 4057, 4058, 5, 550, 0, 0, 4058, 4059, 5, 569, 0, 0, 4059, 4091, 5, 553, 0, 0, 4060, 4061, 5, 128, 0, 0, 4061, 4062, 5, 552, 0, 0, 4062, 4063, 5, 569, 0, 0, 4063, 4064, 5, 550, 0, 0, 4064, 4065, 5, 569, 0, 0, 4065, 4091, 5, 553, 0, 0, 4066, 4067, 5, 129, 0, 0, 4067, 4068, 5, 552, 0, 0, 4068, 4069, 5, 569, 0, 0, 4069, 4070, 5, 550, 0, 0, 4070, 4071, 5, 569, 0, 0, 4071, 4091, 5, 553, 0, 0, 4072, 4073, 5, 135, 0, 0, 4073, 4074, 5, 552, 0, 0, 4074, 4075, 5, 569, 0, 0, 4075, 4076, 5, 550, 0, 0, 4076, 4077, 5, 569, 0, 0, 4077, 4091, 5, 553, 0, 0, 4078, 4079, 5, 322, 0, 0, 4079, 4080, 5, 552, 0, 0, 4080, 4087, 5, 569, 0, 0, 4081, 4082, 5, 550, 0, 0, 4082, 4085, 3, 784, 392, 0, 4083, 4084, 5, 550, 0, 0, 4084, 4086, 3, 784, 392, 0, 4085, 4083, 1, 0, 0, 0, 4085, 4086, 1, 0, 0, 0, 4086, 4088, 1, 0, 0, 0, 4087, 4081, 1, 0, 0, 0, 4087, 4088, 1, 0, 0, 0, 4088, 4089, 1, 0, 0, 0, 4089, 4091, 5, 553, 0, 0, 4090, 4019, 1, 0, 0, 0, 4090, 4023, 1, 0, 0, 0, 4090, 4027, 1, 0, 0, 0, 4090, 4034, 1, 0, 0, 0, 4090, 4041, 1, 0, 0, 0, 4090, 4048, 1, 0, 0, 0, 4090, 4054, 1, 0, 0, 0, 4090, 4060, 1, 0, 0, 0, 4090, 4066, 1, 0, 0, 0, 4090, 4072, 1, 0, 0, 0, 4090, 4078, 1, 0, 0, 0, 4091, 401, 1, 0, 0, 0, 4092, 4097, 3, 404, 202, 0, 4093, 4094, 5, 550, 0, 0, 4094, 4096, 3, 404, 202, 0, 4095, 4093, 1, 0, 0, 0, 4096, 4099, 1, 0, 0, 0, 4097, 4095, 1, 0, 0, 0, 4097, 4098, 1, 0, 0, 0, 4098, 403, 1, 0, 0, 0, 4099, 4097, 1, 0, 0, 0, 4100, 4102, 5, 570, 0, 0, 4101, 4103, 7, 10, 0, 0, 4102, 4101, 1, 0, 0, 0, 4102, 4103, 1, 0, 0, 0, 4103, 405, 1, 0, 0, 0, 4104, 4105, 5, 569, 0, 0, 4105, 4106, 5, 539, 0, 0, 4106, 4107, 3, 408, 204, 0, 4107, 407, 1, 0, 0, 0, 4108, 4109, 5, 294, 0, 0, 4109, 4110, 5, 552, 0, 0, 4110, 4111, 5, 569, 0, 0, 4111, 4133, 5, 553, 0, 0, 4112, 4113, 5, 295, 0, 0, 4113, 4114, 5, 552, 0, 0, 4114, 4115, 3, 274, 137, 0, 4115, 4116, 5, 553, 0, 0, 4116, 4133, 1, 0, 0, 0, 4117, 4118, 5, 130, 0, 0, 4118, 4119, 5, 552, 0, 0, 4119, 4120, 3, 274, 137, 0, 4120, 4121, 5, 553, 0, 0, 4121, 4133, 1, 0, 0, 0, 4122, 4123, 5, 131, 0, 0, 4123, 4124, 5, 552, 0, 0, 4124, 4125, 3, 274, 137, 0, 4125, 4126, 5, 553, 0, 0, 4126, 4133, 1, 0, 0, 0, 4127, 4128, 5, 132, 0, 0, 4128, 4129, 5, 552, 0, 0, 4129, 4130, 3, 274, 137, 0, 4130, 4131, 5, 553, 0, 0, 4131, 4133, 1, 0, 0, 0, 4132, 4108, 1, 0, 0, 0, 4132, 4112, 1, 0, 0, 0, 4132, 4117, 1, 0, 0, 0, 4132, 4122, 1, 0, 0, 0, 4132, 4127, 1, 0, 0, 0, 4133, 409, 1, 0, 0, 0, 4134, 4135, 5, 569, 0, 0, 4135, 4136, 5, 539, 0, 0, 4136, 4137, 5, 17, 0, 0, 4137, 4138, 5, 13, 0, 0, 4138, 4139, 3, 828, 414, 0, 4139, 411, 1, 0, 0, 0, 4140, 4141, 5, 47, 0, 0, 4141, 4142, 5, 569, 0, 0, 4142, 4143, 5, 450, 0, 0, 4143, 4144, 5, 569, 0, 0, 4144, 413, 1, 0, 0, 0, 4145, 4146, 5, 134, 0, 0, 4146, 4147, 5, 569, 0, 0, 4147, 4148, 5, 72, 0, 0, 4148, 4149, 5, 569, 0, 0, 4149, 415, 1, 0, 0, 0, 4150, 4155, 3, 418, 209, 0, 4151, 4152, 5, 550, 0, 0, 4152, 4154, 3, 418, 209, 0, 4153, 4151, 1, 0, 0, 0, 4154, 4157, 1, 0, 0, 0, 4155, 4153, 1, 0, 0, 0, 4155, 4156, 1, 0, 0, 0, 4156, 417, 1, 0, 0, 0, 4157, 4155, 1, 0, 0, 0, 4158, 4159, 3, 420, 210, 0, 4159, 4160, 5, 539, 0, 0, 4160, 4161, 3, 784, 392, 0, 4161, 419, 1, 0, 0, 0, 4162, 4167, 3, 828, 414, 0, 4163, 4167, 5, 570, 0, 0, 4164, 4167, 5, 572, 0, 0, 4165, 4167, 3, 850, 425, 0, 4166, 4162, 1, 0, 0, 0, 4166, 4163, 1, 0, 0, 0, 4166, 4164, 1, 0, 0, 0, 4166, 4165, 1, 0, 0, 0, 4167, 421, 1, 0, 0, 0, 4168, 4173, 3, 424, 212, 0, 4169, 4170, 5, 550, 0, 0, 4170, 4172, 3, 424, 212, 0, 4171, 4169, 1, 0, 0, 0, 4172, 4175, 1, 0, 0, 0, 4173, 4171, 1, 0, 0, 0, 4173, 4174, 1, 0, 0, 0, 4174, 423, 1, 0, 0, 0, 4175, 4173, 1, 0, 0, 0, 4176, 4177, 5, 570, 0, 0, 4177, 4178, 5, 539, 0, 0, 4178, 4179, 3, 784, 392, 0, 4179, 425, 1, 0, 0, 0, 4180, 4181, 5, 33, 0, 0, 4181, 4182, 3, 828, 414, 0, 4182, 4183, 3, 476, 238, 0, 4183, 4184, 5, 554, 0, 0, 4184, 4185, 3, 484, 242, 0, 4185, 4186, 5, 555, 0, 0, 4186, 427, 1, 0, 0, 0, 4187, 4188, 5, 34, 0, 0, 4188, 4190, 3, 828, 414, 0, 4189, 4191, 3, 480, 240, 0, 4190, 4189, 1, 0, 0, 0, 4190, 4191, 1, 0, 0, 0, 4191, 4193, 1, 0, 0, 0, 4192, 4194, 3, 430, 215, 0, 4193, 4192, 1, 0, 0, 0, 4193, 4194, 1, 0, 0, 0, 4194, 4195, 1, 0, 0, 0, 4195, 4196, 5, 554, 0, 0, 4196, 4197, 3, 484, 242, 0, 4197, 4198, 5, 555, 0, 0, 4198, 429, 1, 0, 0, 0, 4199, 4201, 3, 432, 216, 0, 4200, 4199, 1, 0, 0, 0, 4201, 4202, 1, 0, 0, 0, 4202, 4200, 1, 0, 0, 0, 4202, 4203, 1, 0, 0, 0, 4203, 431, 1, 0, 0, 0, 4204, 4205, 5, 222, 0, 0, 4205, 4206, 5, 566, 0, 0, 4206, 433, 1, 0, 0, 0, 4207, 4212, 3, 436, 218, 0, 4208, 4209, 5, 550, 0, 0, 4209, 4211, 3, 436, 218, 0, 4210, 4208, 1, 0, 0, 0, 4211, 4214, 1, 0, 0, 0, 4212, 4210, 1, 0, 0, 0, 4212, 4213, 1, 0, 0, 0, 4213, 435, 1, 0, 0, 0, 4214, 4212, 1, 0, 0, 0, 4215, 4216, 7, 22, 0, 0, 4216, 4217, 5, 558, 0, 0, 4217, 4218, 3, 126, 63, 0, 4218, 437, 1, 0, 0, 0, 4219, 4224, 3, 440, 220, 0, 4220, 4221, 5, 550, 0, 0, 4221, 4223, 3, 440, 220, 0, 4222, 4220, 1, 0, 0, 0, 4223, 4226, 1, 0, 0, 0, 4224, 4222, 1, 0, 0, 0, 4224, 4225, 1, 0, 0, 0, 4225, 439, 1, 0, 0, 0, 4226, 4224, 1, 0, 0, 0, 4227, 4228, 7, 22, 0, 0, 4228, 4229, 5, 558, 0, 0, 4229, 4230, 3, 126, 63, 0, 4230, 441, 1, 0, 0, 0, 4231, 4236, 3, 444, 222, 0, 4232, 4233, 5, 550, 0, 0, 4233, 4235, 3, 444, 222, 0, 4234, 4232, 1, 0, 0, 0, 4235, 4238, 1, 0, 0, 0, 4236, 4234, 1, 0, 0, 0, 4236, 4237, 1, 0, 0, 0, 4237, 443, 1, 0, 0, 0, 4238, 4236, 1, 0, 0, 0, 4239, 4240, 5, 569, 0, 0, 4240, 4241, 5, 558, 0, 0, 4241, 4242, 3, 126, 63, 0, 4242, 4243, 5, 539, 0, 0, 4243, 4244, 5, 566, 0, 0, 4244, 445, 1, 0, 0, 0, 4245, 4248, 3, 828, 414, 0, 4246, 4248, 5, 570, 0, 0, 4247, 4245, 1, 0, 0, 0, 4247, 4246, 1, 0, 0, 0, 4248, 4250, 1, 0, 0, 0, 4249, 4251, 7, 10, 0, 0, 4250, 4249, 1, 0, 0, 0, 4250, 4251, 1, 0, 0, 0, 4251, 447, 1, 0, 0, 0, 4252, 4253, 5, 556, 0, 0, 4253, 4254, 3, 452, 226, 0, 4254, 4255, 5, 557, 0, 0, 4255, 449, 1, 0, 0, 0, 4256, 4257, 7, 23, 0, 0, 4257, 451, 1, 0, 0, 0, 4258, 4263, 3, 454, 227, 0, 4259, 4260, 5, 304, 0, 0, 4260, 4262, 3, 454, 227, 0, 4261, 4259, 1, 0, 0, 0, 4262, 4265, 1, 0, 0, 0, 4263, 4261, 1, 0, 0, 0, 4263, 4264, 1, 0, 0, 0, 4264, 453, 1, 0, 0, 0, 4265, 4263, 1, 0, 0, 0, 4266, 4271, 3, 456, 228, 0, 4267, 4268, 5, 303, 0, 0, 4268, 4270, 3, 456, 228, 0, 4269, 4267, 1, 0, 0, 0, 4270, 4273, 1, 0, 0, 0, 4271, 4269, 1, 0, 0, 0, 4271, 4272, 1, 0, 0, 0, 4272, 455, 1, 0, 0, 0, 4273, 4271, 1, 0, 0, 0, 4274, 4275, 5, 305, 0, 0, 4275, 4278, 3, 456, 228, 0, 4276, 4278, 3, 458, 229, 0, 4277, 4274, 1, 0, 0, 0, 4277, 4276, 1, 0, 0, 0, 4278, 457, 1, 0, 0, 0, 4279, 4283, 3, 460, 230, 0, 4280, 4281, 3, 794, 397, 0, 4281, 4282, 3, 460, 230, 0, 4282, 4284, 1, 0, 0, 0, 4283, 4280, 1, 0, 0, 0, 4283, 4284, 1, 0, 0, 0, 4284, 459, 1, 0, 0, 0, 4285, 4292, 3, 472, 236, 0, 4286, 4292, 3, 462, 231, 0, 4287, 4288, 5, 552, 0, 0, 4288, 4289, 3, 452, 226, 0, 4289, 4290, 5, 553, 0, 0, 4290, 4292, 1, 0, 0, 0, 4291, 4285, 1, 0, 0, 0, 4291, 4286, 1, 0, 0, 0, 4291, 4287, 1, 0, 0, 0, 4292, 461, 1, 0, 0, 0, 4293, 4298, 3, 464, 232, 0, 4294, 4295, 5, 545, 0, 0, 4295, 4297, 3, 464, 232, 0, 4296, 4294, 1, 0, 0, 0, 4297, 4300, 1, 0, 0, 0, 4298, 4296, 1, 0, 0, 0, 4298, 4299, 1, 0, 0, 0, 4299, 463, 1, 0, 0, 0, 4300, 4298, 1, 0, 0, 0, 4301, 4306, 3, 466, 233, 0, 4302, 4303, 5, 556, 0, 0, 4303, 4304, 3, 452, 226, 0, 4304, 4305, 5, 557, 0, 0, 4305, 4307, 1, 0, 0, 0, 4306, 4302, 1, 0, 0, 0, 4306, 4307, 1, 0, 0, 0, 4307, 465, 1, 0, 0, 0, 4308, 4314, 3, 468, 234, 0, 4309, 4314, 5, 569, 0, 0, 4310, 4314, 5, 566, 0, 0, 4311, 4314, 5, 568, 0, 0, 4312, 4314, 5, 565, 0, 0, 4313, 4308, 1, 0, 0, 0, 4313, 4309, 1, 0, 0, 0, 4313, 4310, 1, 0, 0, 0, 4313, 4311, 1, 0, 0, 0, 4313, 4312, 1, 0, 0, 0, 4314, 467, 1, 0, 0, 0, 4315, 4320, 3, 470, 235, 0, 4316, 4317, 5, 551, 0, 0, 4317, 4319, 3, 470, 235, 0, 4318, 4316, 1, 0, 0, 0, 4319, 4322, 1, 0, 0, 0, 4320, 4318, 1, 0, 0, 0, 4320, 4321, 1, 0, 0, 0, 4321, 469, 1, 0, 0, 0, 4322, 4320, 1, 0, 0, 0, 4323, 4324, 8, 24, 0, 0, 4324, 471, 1, 0, 0, 0, 4325, 4326, 3, 474, 237, 0, 4326, 4335, 5, 552, 0, 0, 4327, 4332, 3, 452, 226, 0, 4328, 4329, 5, 550, 0, 0, 4329, 4331, 3, 452, 226, 0, 4330, 4328, 1, 0, 0, 0, 4331, 4334, 1, 0, 0, 0, 4332, 4330, 1, 0, 0, 0, 4332, 4333, 1, 0, 0, 0, 4333, 4336, 1, 0, 0, 0, 4334, 4332, 1, 0, 0, 0, 4335, 4327, 1, 0, 0, 0, 4335, 4336, 1, 0, 0, 0, 4336, 4337, 1, 0, 0, 0, 4337, 4338, 5, 553, 0, 0, 4338, 473, 1, 0, 0, 0, 4339, 4340, 7, 25, 0, 0, 4340, 475, 1, 0, 0, 0, 4341, 4342, 5, 552, 0, 0, 4342, 4347, 3, 478, 239, 0, 4343, 4344, 5, 550, 0, 0, 4344, 4346, 3, 478, 239, 0, 4345, 4343, 1, 0, 0, 0, 4346, 4349, 1, 0, 0, 0, 4347, 4345, 1, 0, 0, 0, 4347, 4348, 1, 0, 0, 0, 4348, 4350, 1, 0, 0, 0, 4349, 4347, 1, 0, 0, 0, 4350, 4351, 5, 553, 0, 0, 4351, 477, 1, 0, 0, 0, 4352, 4353, 5, 205, 0, 0, 4353, 4354, 5, 558, 0, 0, 4354, 4355, 5, 554, 0, 0, 4355, 4356, 3, 434, 217, 0, 4356, 4357, 5, 555, 0, 0, 4357, 4380, 1, 0, 0, 0, 4358, 4359, 5, 206, 0, 0, 4359, 4360, 5, 558, 0, 0, 4360, 4361, 5, 554, 0, 0, 4361, 4362, 3, 442, 221, 0, 4362, 4363, 5, 555, 0, 0, 4363, 4380, 1, 0, 0, 0, 4364, 4365, 5, 165, 0, 0, 4365, 4366, 5, 558, 0, 0, 4366, 4380, 5, 566, 0, 0, 4367, 4368, 5, 35, 0, 0, 4368, 4371, 5, 558, 0, 0, 4369, 4372, 3, 828, 414, 0, 4370, 4372, 5, 566, 0, 0, 4371, 4369, 1, 0, 0, 0, 4371, 4370, 1, 0, 0, 0, 4372, 4380, 1, 0, 0, 0, 4373, 4374, 5, 221, 0, 0, 4374, 4375, 5, 558, 0, 0, 4375, 4380, 5, 566, 0, 0, 4376, 4377, 5, 222, 0, 0, 4377, 4378, 5, 558, 0, 0, 4378, 4380, 5, 566, 0, 0, 4379, 4352, 1, 0, 0, 0, 4379, 4358, 1, 0, 0, 0, 4379, 4364, 1, 0, 0, 0, 4379, 4367, 1, 0, 0, 0, 4379, 4373, 1, 0, 0, 0, 4379, 4376, 1, 0, 0, 0, 4380, 479, 1, 0, 0, 0, 4381, 4382, 5, 552, 0, 0, 4382, 4387, 3, 482, 241, 0, 4383, 4384, 5, 550, 0, 0, 4384, 4386, 3, 482, 241, 0, 4385, 4383, 1, 0, 0, 0, 4386, 4389, 1, 0, 0, 0, 4387, 4385, 1, 0, 0, 0, 4387, 4388, 1, 0, 0, 0, 4388, 4390, 1, 0, 0, 0, 4389, 4387, 1, 0, 0, 0, 4390, 4391, 5, 553, 0, 0, 4391, 481, 1, 0, 0, 0, 4392, 4393, 5, 205, 0, 0, 4393, 4394, 5, 558, 0, 0, 4394, 4395, 5, 554, 0, 0, 4395, 4396, 3, 438, 219, 0, 4396, 4397, 5, 555, 0, 0, 4397, 4408, 1, 0, 0, 0, 4398, 4399, 5, 206, 0, 0, 4399, 4400, 5, 558, 0, 0, 4400, 4401, 5, 554, 0, 0, 4401, 4402, 3, 442, 221, 0, 4402, 4403, 5, 555, 0, 0, 4403, 4408, 1, 0, 0, 0, 4404, 4405, 5, 222, 0, 0, 4405, 4406, 5, 558, 0, 0, 4406, 4408, 5, 566, 0, 0, 4407, 4392, 1, 0, 0, 0, 4407, 4398, 1, 0, 0, 0, 4407, 4404, 1, 0, 0, 0, 4408, 483, 1, 0, 0, 0, 4409, 4412, 3, 488, 244, 0, 4410, 4412, 3, 486, 243, 0, 4411, 4409, 1, 0, 0, 0, 4411, 4410, 1, 0, 0, 0, 4412, 4415, 1, 0, 0, 0, 4413, 4411, 1, 0, 0, 0, 4413, 4414, 1, 0, 0, 0, 4414, 485, 1, 0, 0, 0, 4415, 4413, 1, 0, 0, 0, 4416, 4417, 5, 68, 0, 0, 4417, 4418, 5, 410, 0, 0, 4418, 4421, 3, 830, 415, 0, 4419, 4420, 5, 77, 0, 0, 4420, 4422, 3, 830, 415, 0, 4421, 4419, 1, 0, 0, 0, 4421, 4422, 1, 0, 0, 0, 4422, 487, 1, 0, 0, 0, 4423, 4424, 3, 490, 245, 0, 4424, 4426, 5, 570, 0, 0, 4425, 4427, 3, 492, 246, 0, 4426, 4425, 1, 0, 0, 0, 4426, 4427, 1, 0, 0, 0, 4427, 4429, 1, 0, 0, 0, 4428, 4430, 3, 532, 266, 0, 4429, 4428, 1, 0, 0, 0, 4429, 4430, 1, 0, 0, 0, 4430, 4450, 1, 0, 0, 0, 4431, 4432, 5, 182, 0, 0, 4432, 4433, 5, 566, 0, 0, 4433, 4435, 5, 570, 0, 0, 4434, 4436, 3, 492, 246, 0, 4435, 4434, 1, 0, 0, 0, 4435, 4436, 1, 0, 0, 0, 4436, 4438, 1, 0, 0, 0, 4437, 4439, 3, 532, 266, 0, 4438, 4437, 1, 0, 0, 0, 4438, 4439, 1, 0, 0, 0, 4439, 4450, 1, 0, 0, 0, 4440, 4441, 5, 181, 0, 0, 4441, 4442, 5, 566, 0, 0, 4442, 4444, 5, 570, 0, 0, 4443, 4445, 3, 492, 246, 0, 4444, 4443, 1, 0, 0, 0, 4444, 4445, 1, 0, 0, 0, 4445, 4447, 1, 0, 0, 0, 4446, 4448, 3, 532, 266, 0, 4447, 4446, 1, 0, 0, 0, 4447, 4448, 1, 0, 0, 0, 4448, 4450, 1, 0, 0, 0, 4449, 4423, 1, 0, 0, 0, 4449, 4431, 1, 0, 0, 0, 4449, 4440, 1, 0, 0, 0, 4450, 489, 1, 0, 0, 0, 4451, 4452, 7, 26, 0, 0, 4452, 491, 1, 0, 0, 0, 4453, 4454, 5, 552, 0, 0, 4454, 4459, 3, 494, 247, 0, 4455, 4456, 5, 550, 0, 0, 4456, 4458, 3, 494, 247, 0, 4457, 4455, 1, 0, 0, 0, 4458, 4461, 1, 0, 0, 0, 4459, 4457, 1, 0, 0, 0, 4459, 4460, 1, 0, 0, 0, 4460, 4462, 1, 0, 0, 0, 4461, 4459, 1, 0, 0, 0, 4462, 4463, 5, 553, 0, 0, 4463, 493, 1, 0, 0, 0, 4464, 4465, 5, 194, 0, 0, 4465, 4466, 5, 558, 0, 0, 4466, 4559, 3, 500, 250, 0, 4467, 4468, 5, 38, 0, 0, 4468, 4469, 5, 558, 0, 0, 4469, 4559, 3, 510, 255, 0, 4470, 4471, 5, 201, 0, 0, 4471, 4472, 5, 558, 0, 0, 4472, 4559, 3, 510, 255, 0, 4473, 4474, 5, 117, 0, 0, 4474, 4475, 5, 558, 0, 0, 4475, 4559, 3, 504, 252, 0, 4476, 4477, 5, 191, 0, 0, 4477, 4478, 5, 558, 0, 0, 4478, 4559, 3, 512, 256, 0, 4479, 4480, 5, 169, 0, 0, 4480, 4481, 5, 558, 0, 0, 4481, 4559, 5, 566, 0, 0, 4482, 4483, 5, 202, 0, 0, 4483, 4484, 5, 558, 0, 0, 4484, 4559, 3, 510, 255, 0, 4485, 4486, 5, 199, 0, 0, 4486, 4487, 5, 558, 0, 0, 4487, 4559, 3, 512, 256, 0, 4488, 4489, 5, 200, 0, 0, 4489, 4490, 5, 558, 0, 0, 4490, 4559, 3, 518, 259, 0, 4491, 4492, 5, 203, 0, 0, 4492, 4493, 5, 558, 0, 0, 4493, 4559, 3, 514, 257, 0, 4494, 4495, 5, 204, 0, 0, 4495, 4496, 5, 558, 0, 0, 4496, 4559, 3, 514, 257, 0, 4497, 4498, 5, 212, 0, 0, 4498, 4499, 5, 558, 0, 0, 4499, 4559, 3, 520, 260, 0, 4500, 4501, 5, 210, 0, 0, 4501, 4502, 5, 558, 0, 0, 4502, 4559, 5, 566, 0, 0, 4503, 4504, 5, 211, 0, 0, 4504, 4505, 5, 558, 0, 0, 4505, 4559, 5, 566, 0, 0, 4506, 4507, 5, 207, 0, 0, 4507, 4508, 5, 558, 0, 0, 4508, 4559, 3, 522, 261, 0, 4509, 4510, 5, 208, 0, 0, 4510, 4511, 5, 558, 0, 0, 4511, 4559, 3, 522, 261, 0, 4512, 4513, 5, 209, 0, 0, 4513, 4514, 5, 558, 0, 0, 4514, 4559, 3, 522, 261, 0, 4515, 4516, 5, 196, 0, 0, 4516, 4517, 5, 558, 0, 0, 4517, 4559, 3, 524, 262, 0, 4518, 4519, 5, 34, 0, 0, 4519, 4520, 5, 558, 0, 0, 4520, 4559, 3, 828, 414, 0, 4521, 4522, 5, 227, 0, 0, 4522, 4523, 5, 558, 0, 0, 4523, 4559, 3, 498, 249, 0, 4524, 4525, 5, 228, 0, 0, 4525, 4526, 5, 558, 0, 0, 4526, 4559, 3, 496, 248, 0, 4527, 4528, 5, 215, 0, 0, 4528, 4529, 5, 558, 0, 0, 4529, 4559, 3, 528, 264, 0, 4530, 4531, 5, 218, 0, 0, 4531, 4532, 5, 558, 0, 0, 4532, 4559, 5, 568, 0, 0, 4533, 4534, 5, 219, 0, 0, 4534, 4535, 5, 558, 0, 0, 4535, 4559, 5, 568, 0, 0, 4536, 4537, 5, 246, 0, 0, 4537, 4538, 5, 558, 0, 0, 4538, 4559, 3, 448, 224, 0, 4539, 4540, 5, 246, 0, 0, 4540, 4541, 5, 558, 0, 0, 4541, 4559, 3, 526, 263, 0, 4542, 4543, 5, 225, 0, 0, 4543, 4544, 5, 558, 0, 0, 4544, 4559, 3, 448, 224, 0, 4545, 4546, 5, 225, 0, 0, 4546, 4547, 5, 558, 0, 0, 4547, 4559, 3, 526, 263, 0, 4548, 4549, 5, 193, 0, 0, 4549, 4550, 5, 558, 0, 0, 4550, 4559, 3, 526, 263, 0, 4551, 4552, 5, 570, 0, 0, 4552, 4553, 5, 558, 0, 0, 4553, 4559, 3, 526, 263, 0, 4554, 4555, 3, 850, 425, 0, 4555, 4556, 5, 558, 0, 0, 4556, 4557, 3, 526, 263, 0, 4557, 4559, 1, 0, 0, 0, 4558, 4464, 1, 0, 0, 0, 4558, 4467, 1, 0, 0, 0, 4558, 4470, 1, 0, 0, 0, 4558, 4473, 1, 0, 0, 0, 4558, 4476, 1, 0, 0, 0, 4558, 4479, 1, 0, 0, 0, 4558, 4482, 1, 0, 0, 0, 4558, 4485, 1, 0, 0, 0, 4558, 4488, 1, 0, 0, 0, 4558, 4491, 1, 0, 0, 0, 4558, 4494, 1, 0, 0, 0, 4558, 4497, 1, 0, 0, 0, 4558, 4500, 1, 0, 0, 0, 4558, 4503, 1, 0, 0, 0, 4558, 4506, 1, 0, 0, 0, 4558, 4509, 1, 0, 0, 0, 4558, 4512, 1, 0, 0, 0, 4558, 4515, 1, 0, 0, 0, 4558, 4518, 1, 0, 0, 0, 4558, 4521, 1, 0, 0, 0, 4558, 4524, 1, 0, 0, 0, 4558, 4527, 1, 0, 0, 0, 4558, 4530, 1, 0, 0, 0, 4558, 4533, 1, 0, 0, 0, 4558, 4536, 1, 0, 0, 0, 4558, 4539, 1, 0, 0, 0, 4558, 4542, 1, 0, 0, 0, 4558, 4545, 1, 0, 0, 0, 4558, 4548, 1, 0, 0, 0, 4558, 4551, 1, 0, 0, 0, 4558, 4554, 1, 0, 0, 0, 4559, 495, 1, 0, 0, 0, 4560, 4561, 7, 27, 0, 0, 4561, 497, 1, 0, 0, 0, 4562, 4563, 5, 556, 0, 0, 4563, 4568, 3, 828, 414, 0, 4564, 4565, 5, 550, 0, 0, 4565, 4567, 3, 828, 414, 0, 4566, 4564, 1, 0, 0, 0, 4567, 4570, 1, 0, 0, 0, 4568, 4566, 1, 0, 0, 0, 4568, 4569, 1, 0, 0, 0, 4569, 4571, 1, 0, 0, 0, 4570, 4568, 1, 0, 0, 0, 4571, 4572, 5, 557, 0, 0, 4572, 499, 1, 0, 0, 0, 4573, 4574, 5, 569, 0, 0, 4574, 4575, 5, 545, 0, 0, 4575, 4624, 3, 502, 251, 0, 4576, 4624, 5, 569, 0, 0, 4577, 4579, 5, 373, 0, 0, 4578, 4580, 5, 72, 0, 0, 4579, 4578, 1, 0, 0, 0, 4579, 4580, 1, 0, 0, 0, 4580, 4581, 1, 0, 0, 0, 4581, 4596, 3, 828, 414, 0, 4582, 4594, 5, 73, 0, 0, 4583, 4590, 3, 448, 224, 0, 4584, 4586, 3, 450, 225, 0, 4585, 4584, 1, 0, 0, 0, 4585, 4586, 1, 0, 0, 0, 4586, 4587, 1, 0, 0, 0, 4587, 4589, 3, 448, 224, 0, 4588, 4585, 1, 0, 0, 0, 4589, 4592, 1, 0, 0, 0, 4590, 4588, 1, 0, 0, 0, 4590, 4591, 1, 0, 0, 0, 4591, 4595, 1, 0, 0, 0, 4592, 4590, 1, 0, 0, 0, 4593, 4595, 3, 784, 392, 0, 4594, 4583, 1, 0, 0, 0, 4594, 4593, 1, 0, 0, 0, 4595, 4597, 1, 0, 0, 0, 4596, 4582, 1, 0, 0, 0, 4596, 4597, 1, 0, 0, 0, 4597, 4607, 1, 0, 0, 0, 4598, 4599, 5, 10, 0, 0, 4599, 4604, 3, 446, 223, 0, 4600, 4601, 5, 550, 0, 0, 4601, 4603, 3, 446, 223, 0, 4602, 4600, 1, 0, 0, 0, 4603, 4606, 1, 0, 0, 0, 4604, 4602, 1, 0, 0, 0, 4604, 4605, 1, 0, 0, 0, 4605, 4608, 1, 0, 0, 0, 4606, 4604, 1, 0, 0, 0, 4607, 4598, 1, 0, 0, 0, 4607, 4608, 1, 0, 0, 0, 4608, 4624, 1, 0, 0, 0, 4609, 4610, 5, 30, 0, 0, 4610, 4612, 3, 828, 414, 0, 4611, 4613, 3, 506, 253, 0, 4612, 4611, 1, 0, 0, 0, 4612, 4613, 1, 0, 0, 0, 4613, 4624, 1, 0, 0, 0, 4614, 4615, 5, 31, 0, 0, 4615, 4617, 3, 828, 414, 0, 4616, 4618, 3, 506, 253, 0, 4617, 4616, 1, 0, 0, 0, 4617, 4618, 1, 0, 0, 0, 4618, 4624, 1, 0, 0, 0, 4619, 4620, 5, 27, 0, 0, 4620, 4624, 3, 502, 251, 0, 4621, 4622, 5, 196, 0, 0, 4622, 4624, 5, 570, 0, 0, 4623, 4573, 1, 0, 0, 0, 4623, 4576, 1, 0, 0, 0, 4623, 4577, 1, 0, 0, 0, 4623, 4609, 1, 0, 0, 0, 4623, 4614, 1, 0, 0, 0, 4623, 4619, 1, 0, 0, 0, 4623, 4621, 1, 0, 0, 0, 4624, 501, 1, 0, 0, 0, 4625, 4630, 3, 828, 414, 0, 4626, 4627, 5, 545, 0, 0, 4627, 4629, 3, 828, 414, 0, 4628, 4626, 1, 0, 0, 0, 4629, 4632, 1, 0, 0, 0, 4630, 4628, 1, 0, 0, 0, 4630, 4631, 1, 0, 0, 0, 4631, 503, 1, 0, 0, 0, 4632, 4630, 1, 0, 0, 0, 4633, 4635, 5, 248, 0, 0, 4634, 4636, 5, 250, 0, 0, 4635, 4634, 1, 0, 0, 0, 4635, 4636, 1, 0, 0, 0, 4636, 4674, 1, 0, 0, 0, 4637, 4639, 5, 249, 0, 0, 4638, 4640, 5, 250, 0, 0, 4639, 4638, 1, 0, 0, 0, 4639, 4640, 1, 0, 0, 0, 4640, 4674, 1, 0, 0, 0, 4641, 4674, 5, 250, 0, 0, 4642, 4674, 5, 253, 0, 0, 4643, 4645, 5, 101, 0, 0, 4644, 4646, 5, 250, 0, 0, 4645, 4644, 1, 0, 0, 0, 4645, 4646, 1, 0, 0, 0, 4646, 4674, 1, 0, 0, 0, 4647, 4648, 5, 254, 0, 0, 4648, 4651, 3, 828, 414, 0, 4649, 4650, 5, 82, 0, 0, 4650, 4652, 3, 504, 252, 0, 4651, 4649, 1, 0, 0, 0, 4651, 4652, 1, 0, 0, 0, 4652, 4674, 1, 0, 0, 0, 4653, 4654, 5, 251, 0, 0, 4654, 4656, 3, 828, 414, 0, 4655, 4657, 3, 506, 253, 0, 4656, 4655, 1, 0, 0, 0, 4656, 4657, 1, 0, 0, 0, 4657, 4674, 1, 0, 0, 0, 4658, 4659, 5, 30, 0, 0, 4659, 4661, 3, 828, 414, 0, 4660, 4662, 3, 506, 253, 0, 4661, 4660, 1, 0, 0, 0, 4661, 4662, 1, 0, 0, 0, 4662, 4674, 1, 0, 0, 0, 4663, 4664, 5, 31, 0, 0, 4664, 4666, 3, 828, 414, 0, 4665, 4667, 3, 506, 253, 0, 4666, 4665, 1, 0, 0, 0, 4666, 4667, 1, 0, 0, 0, 4667, 4674, 1, 0, 0, 0, 4668, 4669, 5, 257, 0, 0, 4669, 4674, 5, 566, 0, 0, 4670, 4674, 5, 258, 0, 0, 4671, 4672, 5, 535, 0, 0, 4672, 4674, 5, 566, 0, 0, 4673, 4633, 1, 0, 0, 0, 4673, 4637, 1, 0, 0, 0, 4673, 4641, 1, 0, 0, 0, 4673, 4642, 1, 0, 0, 0, 4673, 4643, 1, 0, 0, 0, 4673, 4647, 1, 0, 0, 0, 4673, 4653, 1, 0, 0, 0, 4673, 4658, 1, 0, 0, 0, 4673, 4663, 1, 0, 0, 0, 4673, 4668, 1, 0, 0, 0, 4673, 4670, 1, 0, 0, 0, 4673, 4671, 1, 0, 0, 0, 4674, 505, 1, 0, 0, 0, 4675, 4676, 5, 552, 0, 0, 4676, 4681, 3, 508, 254, 0, 4677, 4678, 5, 550, 0, 0, 4678, 4680, 3, 508, 254, 0, 4679, 4677, 1, 0, 0, 0, 4680, 4683, 1, 0, 0, 0, 4681, 4679, 1, 0, 0, 0, 4681, 4682, 1, 0, 0, 0, 4682, 4684, 1, 0, 0, 0, 4683, 4681, 1, 0, 0, 0, 4684, 4685, 5, 553, 0, 0, 4685, 507, 1, 0, 0, 0, 4686, 4687, 5, 570, 0, 0, 4687, 4688, 5, 558, 0, 0, 4688, 4693, 3, 784, 392, 0, 4689, 4690, 5, 569, 0, 0, 4690, 4691, 5, 539, 0, 0, 4691, 4693, 3, 784, 392, 0, 4692, 4686, 1, 0, 0, 0, 4692, 4689, 1, 0, 0, 0, 4693, 509, 1, 0, 0, 0, 4694, 4698, 5, 570, 0, 0, 4695, 4698, 5, 572, 0, 0, 4696, 4698, 3, 850, 425, 0, 4697, 4694, 1, 0, 0, 0, 4697, 4695, 1, 0, 0, 0, 4697, 4696, 1, 0, 0, 0, 4698, 4707, 1, 0, 0, 0, 4699, 4703, 5, 545, 0, 0, 4700, 4704, 5, 570, 0, 0, 4701, 4704, 5, 572, 0, 0, 4702, 4704, 3, 850, 425, 0, 4703, 4700, 1, 0, 0, 0, 4703, 4701, 1, 0, 0, 0, 4703, 4702, 1, 0, 0, 0, 4704, 4706, 1, 0, 0, 0, 4705, 4699, 1, 0, 0, 0, 4706, 4709, 1, 0, 0, 0, 4707, 4705, 1, 0, 0, 0, 4707, 4708, 1, 0, 0, 0, 4708, 511, 1, 0, 0, 0, 4709, 4707, 1, 0, 0, 0, 4710, 4721, 5, 566, 0, 0, 4711, 4721, 3, 510, 255, 0, 4712, 4718, 5, 569, 0, 0, 4713, 4716, 5, 551, 0, 0, 4714, 4717, 5, 570, 0, 0, 4715, 4717, 3, 850, 425, 0, 4716, 4714, 1, 0, 0, 0, 4716, 4715, 1, 0, 0, 0, 4717, 4719, 1, 0, 0, 0, 4718, 4713, 1, 0, 0, 0, 4718, 4719, 1, 0, 0, 0, 4719, 4721, 1, 0, 0, 0, 4720, 4710, 1, 0, 0, 0, 4720, 4711, 1, 0, 0, 0, 4720, 4712, 1, 0, 0, 0, 4721, 513, 1, 0, 0, 0, 4722, 4723, 5, 556, 0, 0, 4723, 4728, 3, 516, 258, 0, 4724, 4725, 5, 550, 0, 0, 4725, 4727, 3, 516, 258, 0, 4726, 4724, 1, 0, 0, 0, 4727, 4730, 1, 0, 0, 0, 4728, 4726, 1, 0, 0, 0, 4728, 4729, 1, 0, 0, 0, 4729, 4731, 1, 0, 0, 0, 4730, 4728, 1, 0, 0, 0, 4731, 4732, 5, 557, 0, 0, 4732, 515, 1, 0, 0, 0, 4733, 4734, 5, 554, 0, 0, 4734, 4735, 5, 568, 0, 0, 4735, 4736, 5, 555, 0, 0, 4736, 4737, 5, 539, 0, 0, 4737, 4738, 3, 784, 392, 0, 4738, 517, 1, 0, 0, 0, 4739, 4740, 7, 28, 0, 0, 4740, 519, 1, 0, 0, 0, 4741, 4742, 7, 29, 0, 0, 4742, 521, 1, 0, 0, 0, 4743, 4744, 7, 30, 0, 0, 4744, 523, 1, 0, 0, 0, 4745, 4746, 7, 31, 0, 0, 4746, 525, 1, 0, 0, 0, 4747, 4771, 5, 566, 0, 0, 4748, 4771, 5, 568, 0, 0, 4749, 4771, 3, 836, 418, 0, 4750, 4771, 3, 828, 414, 0, 4751, 4771, 5, 570, 0, 0, 4752, 4771, 5, 269, 0, 0, 4753, 4771, 5, 270, 0, 0, 4754, 4771, 5, 271, 0, 0, 4755, 4771, 5, 272, 0, 0, 4756, 4771, 5, 273, 0, 0, 4757, 4771, 5, 274, 0, 0, 4758, 4767, 5, 556, 0, 0, 4759, 4764, 3, 784, 392, 0, 4760, 4761, 5, 550, 0, 0, 4761, 4763, 3, 784, 392, 0, 4762, 4760, 1, 0, 0, 0, 4763, 4766, 1, 0, 0, 0, 4764, 4762, 1, 0, 0, 0, 4764, 4765, 1, 0, 0, 0, 4765, 4768, 1, 0, 0, 0, 4766, 4764, 1, 0, 0, 0, 4767, 4759, 1, 0, 0, 0, 4767, 4768, 1, 0, 0, 0, 4768, 4769, 1, 0, 0, 0, 4769, 4771, 5, 557, 0, 0, 4770, 4747, 1, 0, 0, 0, 4770, 4748, 1, 0, 0, 0, 4770, 4749, 1, 0, 0, 0, 4770, 4750, 1, 0, 0, 0, 4770, 4751, 1, 0, 0, 0, 4770, 4752, 1, 0, 0, 0, 4770, 4753, 1, 0, 0, 0, 4770, 4754, 1, 0, 0, 0, 4770, 4755, 1, 0, 0, 0, 4770, 4756, 1, 0, 0, 0, 4770, 4757, 1, 0, 0, 0, 4770, 4758, 1, 0, 0, 0, 4771, 527, 1, 0, 0, 0, 4772, 4773, 5, 556, 0, 0, 4773, 4778, 3, 530, 265, 0, 4774, 4775, 5, 550, 0, 0, 4775, 4777, 3, 530, 265, 0, 4776, 4774, 1, 0, 0, 0, 4777, 4780, 1, 0, 0, 0, 4778, 4776, 1, 0, 0, 0, 4778, 4779, 1, 0, 0, 0, 4779, 4781, 1, 0, 0, 0, 4780, 4778, 1, 0, 0, 0, 4781, 4782, 5, 557, 0, 0, 4782, 4786, 1, 0, 0, 0, 4783, 4784, 5, 556, 0, 0, 4784, 4786, 5, 557, 0, 0, 4785, 4772, 1, 0, 0, 0, 4785, 4783, 1, 0, 0, 0, 4786, 529, 1, 0, 0, 0, 4787, 4788, 5, 566, 0, 0, 4788, 4789, 5, 558, 0, 0, 4789, 4797, 5, 566, 0, 0, 4790, 4791, 5, 566, 0, 0, 4791, 4792, 5, 558, 0, 0, 4792, 4797, 5, 94, 0, 0, 4793, 4794, 5, 566, 0, 0, 4794, 4795, 5, 558, 0, 0, 4795, 4797, 5, 515, 0, 0, 4796, 4787, 1, 0, 0, 0, 4796, 4790, 1, 0, 0, 0, 4796, 4793, 1, 0, 0, 0, 4797, 531, 1, 0, 0, 0, 4798, 4799, 5, 554, 0, 0, 4799, 4800, 3, 484, 242, 0, 4800, 4801, 5, 555, 0, 0, 4801, 533, 1, 0, 0, 0, 4802, 4803, 5, 36, 0, 0, 4803, 4805, 3, 828, 414, 0, 4804, 4806, 3, 536, 268, 0, 4805, 4804, 1, 0, 0, 0, 4805, 4806, 1, 0, 0, 0, 4806, 4807, 1, 0, 0, 0, 4807, 4811, 5, 97, 0, 0, 4808, 4810, 3, 540, 270, 0, 4809, 4808, 1, 0, 0, 0, 4810, 4813, 1, 0, 0, 0, 4811, 4809, 1, 0, 0, 0, 4811, 4812, 1, 0, 0, 0, 4812, 4814, 1, 0, 0, 0, 4813, 4811, 1, 0, 0, 0, 4814, 4815, 5, 84, 0, 0, 4815, 535, 1, 0, 0, 0, 4816, 4818, 3, 538, 269, 0, 4817, 4816, 1, 0, 0, 0, 4818, 4819, 1, 0, 0, 0, 4819, 4817, 1, 0, 0, 0, 4819, 4820, 1, 0, 0, 0, 4820, 537, 1, 0, 0, 0, 4821, 4822, 5, 429, 0, 0, 4822, 4823, 5, 566, 0, 0, 4823, 539, 1, 0, 0, 0, 4824, 4825, 5, 33, 0, 0, 4825, 4828, 3, 828, 414, 0, 4826, 4827, 5, 191, 0, 0, 4827, 4829, 5, 566, 0, 0, 4828, 4826, 1, 0, 0, 0, 4828, 4829, 1, 0, 0, 0, 4829, 541, 1, 0, 0, 0, 4830, 4831, 5, 373, 0, 0, 4831, 4832, 5, 372, 0, 0, 4832, 4834, 3, 828, 414, 0, 4833, 4835, 3, 544, 272, 0, 4834, 4833, 1, 0, 0, 0, 4835, 4836, 1, 0, 0, 0, 4836, 4834, 1, 0, 0, 0, 4836, 4837, 1, 0, 0, 0, 4837, 4846, 1, 0, 0, 0, 4838, 4842, 5, 97, 0, 0, 4839, 4841, 3, 546, 273, 0, 4840, 4839, 1, 0, 0, 0, 4841, 4844, 1, 0, 0, 0, 4842, 4840, 1, 0, 0, 0, 4842, 4843, 1, 0, 0, 0, 4843, 4845, 1, 0, 0, 0, 4844, 4842, 1, 0, 0, 0, 4845, 4847, 5, 84, 0, 0, 4846, 4838, 1, 0, 0, 0, 4846, 4847, 1, 0, 0, 0, 4847, 543, 1, 0, 0, 0, 4848, 4849, 5, 443, 0, 0, 4849, 4876, 5, 566, 0, 0, 4850, 4851, 5, 372, 0, 0, 4851, 4855, 5, 276, 0, 0, 4852, 4856, 5, 566, 0, 0, 4853, 4854, 5, 559, 0, 0, 4854, 4856, 3, 828, 414, 0, 4855, 4852, 1, 0, 0, 0, 4855, 4853, 1, 0, 0, 0, 4856, 4876, 1, 0, 0, 0, 4857, 4858, 5, 63, 0, 0, 4858, 4876, 5, 566, 0, 0, 4859, 4860, 5, 64, 0, 0, 4860, 4876, 5, 568, 0, 0, 4861, 4862, 5, 373, 0, 0, 4862, 4876, 5, 566, 0, 0, 4863, 4867, 5, 370, 0, 0, 4864, 4868, 5, 566, 0, 0, 4865, 4866, 5, 559, 0, 0, 4866, 4868, 3, 828, 414, 0, 4867, 4864, 1, 0, 0, 0, 4867, 4865, 1, 0, 0, 0, 4868, 4876, 1, 0, 0, 0, 4869, 4873, 5, 371, 0, 0, 4870, 4874, 5, 566, 0, 0, 4871, 4872, 5, 559, 0, 0, 4872, 4874, 3, 828, 414, 0, 4873, 4870, 1, 0, 0, 0, 4873, 4871, 1, 0, 0, 0, 4874, 4876, 1, 0, 0, 0, 4875, 4848, 1, 0, 0, 0, 4875, 4850, 1, 0, 0, 0, 4875, 4857, 1, 0, 0, 0, 4875, 4859, 1, 0, 0, 0, 4875, 4861, 1, 0, 0, 0, 4875, 4863, 1, 0, 0, 0, 4875, 4869, 1, 0, 0, 0, 4876, 545, 1, 0, 0, 0, 4877, 4878, 5, 374, 0, 0, 4878, 4879, 3, 830, 415, 0, 4879, 4880, 5, 458, 0, 0, 4880, 4892, 7, 16, 0, 0, 4881, 4882, 5, 391, 0, 0, 4882, 4883, 3, 830, 415, 0, 4883, 4884, 5, 558, 0, 0, 4884, 4888, 3, 126, 63, 0, 4885, 4886, 5, 313, 0, 0, 4886, 4889, 5, 566, 0, 0, 4887, 4889, 5, 306, 0, 0, 4888, 4885, 1, 0, 0, 0, 4888, 4887, 1, 0, 0, 0, 4888, 4889, 1, 0, 0, 0, 4889, 4891, 1, 0, 0, 0, 4890, 4881, 1, 0, 0, 0, 4891, 4894, 1, 0, 0, 0, 4892, 4890, 1, 0, 0, 0, 4892, 4893, 1, 0, 0, 0, 4893, 4911, 1, 0, 0, 0, 4894, 4892, 1, 0, 0, 0, 4895, 4896, 5, 78, 0, 0, 4896, 4909, 3, 828, 414, 0, 4897, 4898, 5, 375, 0, 0, 4898, 4899, 5, 552, 0, 0, 4899, 4904, 3, 548, 274, 0, 4900, 4901, 5, 550, 0, 0, 4901, 4903, 3, 548, 274, 0, 4902, 4900, 1, 0, 0, 0, 4903, 4906, 1, 0, 0, 0, 4904, 4902, 1, 0, 0, 0, 4904, 4905, 1, 0, 0, 0, 4905, 4907, 1, 0, 0, 0, 4906, 4904, 1, 0, 0, 0, 4907, 4908, 5, 553, 0, 0, 4908, 4910, 1, 0, 0, 0, 4909, 4897, 1, 0, 0, 0, 4909, 4910, 1, 0, 0, 0, 4910, 4912, 1, 0, 0, 0, 4911, 4895, 1, 0, 0, 0, 4911, 4912, 1, 0, 0, 0, 4912, 4913, 1, 0, 0, 0, 4913, 4914, 5, 549, 0, 0, 4914, 547, 1, 0, 0, 0, 4915, 4916, 3, 830, 415, 0, 4916, 4917, 5, 77, 0, 0, 4917, 4918, 3, 830, 415, 0, 4918, 549, 1, 0, 0, 0, 4919, 4920, 5, 37, 0, 0, 4920, 4921, 3, 828, 414, 0, 4921, 4922, 5, 443, 0, 0, 4922, 4923, 3, 126, 63, 0, 4923, 4924, 5, 313, 0, 0, 4924, 4926, 3, 832, 416, 0, 4925, 4927, 3, 552, 276, 0, 4926, 4925, 1, 0, 0, 0, 4926, 4927, 1, 0, 0, 0, 4927, 551, 1, 0, 0, 0, 4928, 4930, 3, 554, 277, 0, 4929, 4928, 1, 0, 0, 0, 4930, 4931, 1, 0, 0, 0, 4931, 4929, 1, 0, 0, 0, 4931, 4932, 1, 0, 0, 0, 4932, 553, 1, 0, 0, 0, 4933, 4934, 5, 429, 0, 0, 4934, 4941, 5, 566, 0, 0, 4935, 4936, 5, 222, 0, 0, 4936, 4941, 5, 566, 0, 0, 4937, 4938, 5, 390, 0, 0, 4938, 4939, 5, 450, 0, 0, 4939, 4941, 5, 359, 0, 0, 4940, 4933, 1, 0, 0, 0, 4940, 4935, 1, 0, 0, 0, 4940, 4937, 1, 0, 0, 0, 4941, 555, 1, 0, 0, 0, 4942, 4943, 5, 469, 0, 0, 4943, 4952, 5, 566, 0, 0, 4944, 4949, 3, 670, 335, 0, 4945, 4946, 5, 550, 0, 0, 4946, 4948, 3, 670, 335, 0, 4947, 4945, 1, 0, 0, 0, 4948, 4951, 1, 0, 0, 0, 4949, 4947, 1, 0, 0, 0, 4949, 4950, 1, 0, 0, 0, 4950, 4953, 1, 0, 0, 0, 4951, 4949, 1, 0, 0, 0, 4952, 4944, 1, 0, 0, 0, 4952, 4953, 1, 0, 0, 0, 4953, 557, 1, 0, 0, 0, 4954, 4955, 5, 329, 0, 0, 4955, 4956, 5, 359, 0, 0, 4956, 4957, 3, 828, 414, 0, 4957, 4958, 5, 552, 0, 0, 4958, 4963, 3, 560, 280, 0, 4959, 4960, 5, 550, 0, 0, 4960, 4962, 3, 560, 280, 0, 4961, 4959, 1, 0, 0, 0, 4962, 4965, 1, 0, 0, 0, 4963, 4961, 1, 0, 0, 0, 4963, 4964, 1, 0, 0, 0, 4964, 4966, 1, 0, 0, 0, 4965, 4963, 1, 0, 0, 0, 4966, 4967, 5, 553, 0, 0, 4967, 4971, 5, 554, 0, 0, 4968, 4970, 3, 562, 281, 0, 4969, 4968, 1, 0, 0, 0, 4970, 4973, 1, 0, 0, 0, 4971, 4969, 1, 0, 0, 0, 4971, 4972, 1, 0, 0, 0, 4972, 4974, 1, 0, 0, 0, 4973, 4971, 1, 0, 0, 0, 4974, 4975, 5, 555, 0, 0, 4975, 559, 1, 0, 0, 0, 4976, 4977, 3, 830, 415, 0, 4977, 4978, 5, 558, 0, 0, 4978, 4979, 5, 566, 0, 0, 4979, 5008, 1, 0, 0, 0, 4980, 4981, 3, 830, 415, 0, 4981, 4982, 5, 558, 0, 0, 4982, 4983, 5, 569, 0, 0, 4983, 5008, 1, 0, 0, 0, 4984, 4985, 3, 830, 415, 0, 4985, 4986, 5, 558, 0, 0, 4986, 4987, 5, 559, 0, 0, 4987, 4988, 3, 828, 414, 0, 4988, 5008, 1, 0, 0, 0, 4989, 4990, 3, 830, 415, 0, 4990, 4991, 5, 558, 0, 0, 4991, 4992, 5, 448, 0, 0, 4992, 5008, 1, 0, 0, 0, 4993, 4994, 3, 830, 415, 0, 4994, 4995, 5, 558, 0, 0, 4995, 4996, 5, 336, 0, 0, 4996, 4997, 5, 552, 0, 0, 4997, 5002, 3, 560, 280, 0, 4998, 4999, 5, 550, 0, 0, 4999, 5001, 3, 560, 280, 0, 5000, 4998, 1, 0, 0, 0, 5001, 5004, 1, 0, 0, 0, 5002, 5000, 1, 0, 0, 0, 5002, 5003, 1, 0, 0, 0, 5003, 5005, 1, 0, 0, 0, 5004, 5002, 1, 0, 0, 0, 5005, 5006, 5, 553, 0, 0, 5006, 5008, 1, 0, 0, 0, 5007, 4976, 1, 0, 0, 0, 5007, 4980, 1, 0, 0, 0, 5007, 4984, 1, 0, 0, 0, 5007, 4989, 1, 0, 0, 0, 5007, 4993, 1, 0, 0, 0, 5008, 561, 1, 0, 0, 0, 5009, 5011, 3, 838, 419, 0, 5010, 5009, 1, 0, 0, 0, 5010, 5011, 1, 0, 0, 0, 5011, 5012, 1, 0, 0, 0, 5012, 5015, 5, 339, 0, 0, 5013, 5016, 3, 830, 415, 0, 5014, 5016, 5, 566, 0, 0, 5015, 5013, 1, 0, 0, 0, 5015, 5014, 1, 0, 0, 0, 5016, 5017, 1, 0, 0, 0, 5017, 5018, 5, 554, 0, 0, 5018, 5023, 3, 564, 282, 0, 5019, 5020, 5, 550, 0, 0, 5020, 5022, 3, 564, 282, 0, 5021, 5019, 1, 0, 0, 0, 5022, 5025, 1, 0, 0, 0, 5023, 5021, 1, 0, 0, 0, 5023, 5024, 1, 0, 0, 0, 5024, 5026, 1, 0, 0, 0, 5025, 5023, 1, 0, 0, 0, 5026, 5027, 5, 555, 0, 0, 5027, 563, 1, 0, 0, 0, 5028, 5029, 3, 830, 415, 0, 5029, 5030, 5, 558, 0, 0, 5030, 5031, 3, 572, 286, 0, 5031, 5096, 1, 0, 0, 0, 5032, 5033, 3, 830, 415, 0, 5033, 5034, 5, 558, 0, 0, 5034, 5035, 5, 566, 0, 0, 5035, 5096, 1, 0, 0, 0, 5036, 5037, 3, 830, 415, 0, 5037, 5038, 5, 558, 0, 0, 5038, 5039, 5, 568, 0, 0, 5039, 5096, 1, 0, 0, 0, 5040, 5041, 3, 830, 415, 0, 5041, 5042, 5, 558, 0, 0, 5042, 5043, 5, 448, 0, 0, 5043, 5096, 1, 0, 0, 0, 5044, 5045, 3, 830, 415, 0, 5045, 5046, 5, 558, 0, 0, 5046, 5047, 5, 552, 0, 0, 5047, 5052, 3, 566, 283, 0, 5048, 5049, 5, 550, 0, 0, 5049, 5051, 3, 566, 283, 0, 5050, 5048, 1, 0, 0, 0, 5051, 5054, 1, 0, 0, 0, 5052, 5050, 1, 0, 0, 0, 5052, 5053, 1, 0, 0, 0, 5053, 5055, 1, 0, 0, 0, 5054, 5052, 1, 0, 0, 0, 5055, 5056, 5, 553, 0, 0, 5056, 5096, 1, 0, 0, 0, 5057, 5058, 3, 830, 415, 0, 5058, 5059, 5, 558, 0, 0, 5059, 5060, 5, 552, 0, 0, 5060, 5065, 3, 568, 284, 0, 5061, 5062, 5, 550, 0, 0, 5062, 5064, 3, 568, 284, 0, 5063, 5061, 1, 0, 0, 0, 5064, 5067, 1, 0, 0, 0, 5065, 5063, 1, 0, 0, 0, 5065, 5066, 1, 0, 0, 0, 5066, 5068, 1, 0, 0, 0, 5067, 5065, 1, 0, 0, 0, 5068, 5069, 5, 553, 0, 0, 5069, 5096, 1, 0, 0, 0, 5070, 5071, 3, 830, 415, 0, 5071, 5072, 5, 558, 0, 0, 5072, 5073, 7, 32, 0, 0, 5073, 5074, 7, 33, 0, 0, 5074, 5075, 5, 569, 0, 0, 5075, 5096, 1, 0, 0, 0, 5076, 5077, 3, 830, 415, 0, 5077, 5078, 5, 558, 0, 0, 5078, 5079, 5, 265, 0, 0, 5079, 5080, 5, 566, 0, 0, 5080, 5096, 1, 0, 0, 0, 5081, 5082, 3, 830, 415, 0, 5082, 5083, 5, 558, 0, 0, 5083, 5084, 5, 376, 0, 0, 5084, 5093, 3, 828, 414, 0, 5085, 5089, 5, 554, 0, 0, 5086, 5088, 3, 570, 285, 0, 5087, 5086, 1, 0, 0, 0, 5088, 5091, 1, 0, 0, 0, 5089, 5087, 1, 0, 0, 0, 5089, 5090, 1, 0, 0, 0, 5090, 5092, 1, 0, 0, 0, 5091, 5089, 1, 0, 0, 0, 5092, 5094, 5, 555, 0, 0, 5093, 5085, 1, 0, 0, 0, 5093, 5094, 1, 0, 0, 0, 5094, 5096, 1, 0, 0, 0, 5095, 5028, 1, 0, 0, 0, 5095, 5032, 1, 0, 0, 0, 5095, 5036, 1, 0, 0, 0, 5095, 5040, 1, 0, 0, 0, 5095, 5044, 1, 0, 0, 0, 5095, 5057, 1, 0, 0, 0, 5095, 5070, 1, 0, 0, 0, 5095, 5076, 1, 0, 0, 0, 5095, 5081, 1, 0, 0, 0, 5096, 565, 1, 0, 0, 0, 5097, 5098, 5, 569, 0, 0, 5098, 5099, 5, 558, 0, 0, 5099, 5100, 3, 126, 63, 0, 5100, 567, 1, 0, 0, 0, 5101, 5102, 5, 566, 0, 0, 5102, 5108, 5, 539, 0, 0, 5103, 5109, 5, 566, 0, 0, 5104, 5109, 5, 569, 0, 0, 5105, 5106, 5, 566, 0, 0, 5106, 5107, 5, 542, 0, 0, 5107, 5109, 5, 569, 0, 0, 5108, 5103, 1, 0, 0, 0, 5108, 5104, 1, 0, 0, 0, 5108, 5105, 1, 0, 0, 0, 5109, 569, 1, 0, 0, 0, 5110, 5111, 3, 830, 415, 0, 5111, 5112, 5, 539, 0, 0, 5112, 5114, 3, 830, 415, 0, 5113, 5115, 5, 550, 0, 0, 5114, 5113, 1, 0, 0, 0, 5114, 5115, 1, 0, 0, 0, 5115, 5138, 1, 0, 0, 0, 5116, 5118, 5, 17, 0, 0, 5117, 5116, 1, 0, 0, 0, 5117, 5118, 1, 0, 0, 0, 5118, 5119, 1, 0, 0, 0, 5119, 5120, 3, 828, 414, 0, 5120, 5121, 5, 545, 0, 0, 5121, 5122, 3, 828, 414, 0, 5122, 5123, 5, 539, 0, 0, 5123, 5132, 3, 830, 415, 0, 5124, 5128, 5, 554, 0, 0, 5125, 5127, 3, 570, 285, 0, 5126, 5125, 1, 0, 0, 0, 5127, 5130, 1, 0, 0, 0, 5128, 5126, 1, 0, 0, 0, 5128, 5129, 1, 0, 0, 0, 5129, 5131, 1, 0, 0, 0, 5130, 5128, 1, 0, 0, 0, 5131, 5133, 5, 555, 0, 0, 5132, 5124, 1, 0, 0, 0, 5132, 5133, 1, 0, 0, 0, 5133, 5135, 1, 0, 0, 0, 5134, 5136, 5, 550, 0, 0, 5135, 5134, 1, 0, 0, 0, 5135, 5136, 1, 0, 0, 0, 5136, 5138, 1, 0, 0, 0, 5137, 5110, 1, 0, 0, 0, 5137, 5117, 1, 0, 0, 0, 5138, 571, 1, 0, 0, 0, 5139, 5140, 7, 20, 0, 0, 5140, 573, 1, 0, 0, 0, 5141, 5142, 5, 362, 0, 0, 5142, 5143, 5, 329, 0, 0, 5143, 5144, 5, 330, 0, 0, 5144, 5145, 3, 828, 414, 0, 5145, 5146, 5, 552, 0, 0, 5146, 5151, 3, 576, 288, 0, 5147, 5148, 5, 550, 0, 0, 5148, 5150, 3, 576, 288, 0, 5149, 5147, 1, 0, 0, 0, 5150, 5153, 1, 0, 0, 0, 5151, 5149, 1, 0, 0, 0, 5151, 5152, 1, 0, 0, 0, 5152, 5154, 1, 0, 0, 0, 5153, 5151, 1, 0, 0, 0, 5154, 5155, 5, 553, 0, 0, 5155, 5159, 5, 554, 0, 0, 5156, 5158, 3, 578, 289, 0, 5157, 5156, 1, 0, 0, 0, 5158, 5161, 1, 0, 0, 0, 5159, 5157, 1, 0, 0, 0, 5159, 5160, 1, 0, 0, 0, 5160, 5162, 1, 0, 0, 0, 5161, 5159, 1, 0, 0, 0, 5162, 5163, 5, 555, 0, 0, 5163, 575, 1, 0, 0, 0, 5164, 5165, 3, 830, 415, 0, 5165, 5166, 5, 558, 0, 0, 5166, 5167, 5, 566, 0, 0, 5167, 577, 1, 0, 0, 0, 5168, 5169, 5, 348, 0, 0, 5169, 5170, 5, 566, 0, 0, 5170, 5174, 5, 554, 0, 0, 5171, 5173, 3, 580, 290, 0, 5172, 5171, 1, 0, 0, 0, 5173, 5176, 1, 0, 0, 0, 5174, 5172, 1, 0, 0, 0, 5174, 5175, 1, 0, 0, 0, 5175, 5177, 1, 0, 0, 0, 5176, 5174, 1, 0, 0, 0, 5177, 5178, 5, 555, 0, 0, 5178, 579, 1, 0, 0, 0, 5179, 5181, 3, 572, 286, 0, 5180, 5182, 3, 582, 291, 0, 5181, 5180, 1, 0, 0, 0, 5181, 5182, 1, 0, 0, 0, 5182, 5183, 1, 0, 0, 0, 5183, 5184, 5, 30, 0, 0, 5184, 5186, 3, 828, 414, 0, 5185, 5187, 5, 347, 0, 0, 5186, 5185, 1, 0, 0, 0, 5186, 5187, 1, 0, 0, 0, 5187, 5191, 1, 0, 0, 0, 5188, 5189, 5, 378, 0, 0, 5189, 5190, 5, 376, 0, 0, 5190, 5192, 3, 828, 414, 0, 5191, 5188, 1, 0, 0, 0, 5191, 5192, 1, 0, 0, 0, 5192, 5196, 1, 0, 0, 0, 5193, 5194, 5, 384, 0, 0, 5194, 5195, 5, 376, 0, 0, 5195, 5197, 3, 828, 414, 0, 5196, 5193, 1, 0, 0, 0, 5196, 5197, 1, 0, 0, 0, 5197, 5200, 1, 0, 0, 0, 5198, 5199, 5, 102, 0, 0, 5199, 5201, 3, 830, 415, 0, 5200, 5198, 1, 0, 0, 0, 5200, 5201, 1, 0, 0, 0, 5201, 5203, 1, 0, 0, 0, 5202, 5204, 5, 549, 0, 0, 5203, 5202, 1, 0, 0, 0, 5203, 5204, 1, 0, 0, 0, 5204, 581, 1, 0, 0, 0, 5205, 5206, 7, 34, 0, 0, 5206, 583, 1, 0, 0, 0, 5207, 5208, 5, 41, 0, 0, 5208, 5209, 5, 570, 0, 0, 5209, 5210, 5, 94, 0, 0, 5210, 5211, 3, 828, 414, 0, 5211, 5212, 5, 552, 0, 0, 5212, 5213, 3, 134, 67, 0, 5213, 5214, 5, 553, 0, 0, 5214, 585, 1, 0, 0, 0, 5215, 5216, 5, 332, 0, 0, 5216, 5217, 5, 359, 0, 0, 5217, 5218, 3, 828, 414, 0, 5218, 5219, 5, 552, 0, 0, 5219, 5224, 3, 592, 296, 0, 5220, 5221, 5, 550, 0, 0, 5221, 5223, 3, 592, 296, 0, 5222, 5220, 1, 0, 0, 0, 5223, 5226, 1, 0, 0, 0, 5224, 5222, 1, 0, 0, 0, 5224, 5225, 1, 0, 0, 0, 5225, 5227, 1, 0, 0, 0, 5226, 5224, 1, 0, 0, 0, 5227, 5229, 5, 553, 0, 0, 5228, 5230, 3, 614, 307, 0, 5229, 5228, 1, 0, 0, 0, 5229, 5230, 1, 0, 0, 0, 5230, 587, 1, 0, 0, 0, 5231, 5232, 5, 332, 0, 0, 5232, 5233, 5, 330, 0, 0, 5233, 5234, 3, 828, 414, 0, 5234, 5235, 5, 552, 0, 0, 5235, 5240, 3, 592, 296, 0, 5236, 5237, 5, 550, 0, 0, 5237, 5239, 3, 592, 296, 0, 5238, 5236, 1, 0, 0, 0, 5239, 5242, 1, 0, 0, 0, 5240, 5238, 1, 0, 0, 0, 5240, 5241, 1, 0, 0, 0, 5241, 5243, 1, 0, 0, 0, 5242, 5240, 1, 0, 0, 0, 5243, 5245, 5, 553, 0, 0, 5244, 5246, 3, 596, 298, 0, 5245, 5244, 1, 0, 0, 0, 5245, 5246, 1, 0, 0, 0, 5246, 5255, 1, 0, 0, 0, 5247, 5251, 5, 554, 0, 0, 5248, 5250, 3, 600, 300, 0, 5249, 5248, 1, 0, 0, 0, 5250, 5253, 1, 0, 0, 0, 5251, 5249, 1, 0, 0, 0, 5251, 5252, 1, 0, 0, 0, 5252, 5254, 1, 0, 0, 0, 5253, 5251, 1, 0, 0, 0, 5254, 5256, 5, 555, 0, 0, 5255, 5247, 1, 0, 0, 0, 5255, 5256, 1, 0, 0, 0, 5256, 589, 1, 0, 0, 0, 5257, 5269, 5, 566, 0, 0, 5258, 5269, 5, 568, 0, 0, 5259, 5269, 5, 314, 0, 0, 5260, 5269, 5, 315, 0, 0, 5261, 5263, 5, 30, 0, 0, 5262, 5264, 3, 828, 414, 0, 5263, 5262, 1, 0, 0, 0, 5263, 5264, 1, 0, 0, 0, 5264, 5269, 1, 0, 0, 0, 5265, 5266, 5, 559, 0, 0, 5266, 5269, 3, 828, 414, 0, 5267, 5269, 3, 828, 414, 0, 5268, 5257, 1, 0, 0, 0, 5268, 5258, 1, 0, 0, 0, 5268, 5259, 1, 0, 0, 0, 5268, 5260, 1, 0, 0, 0, 5268, 5261, 1, 0, 0, 0, 5268, 5265, 1, 0, 0, 0, 5268, 5267, 1, 0, 0, 0, 5269, 591, 1, 0, 0, 0, 5270, 5271, 3, 830, 415, 0, 5271, 5272, 5, 558, 0, 0, 5272, 5273, 3, 590, 295, 0, 5273, 593, 1, 0, 0, 0, 5274, 5275, 3, 830, 415, 0, 5275, 5276, 5, 539, 0, 0, 5276, 5277, 3, 590, 295, 0, 5277, 595, 1, 0, 0, 0, 5278, 5279, 5, 335, 0, 0, 5279, 5284, 3, 598, 299, 0, 5280, 5281, 5, 550, 0, 0, 5281, 5283, 3, 598, 299, 0, 5282, 5280, 1, 0, 0, 0, 5283, 5286, 1, 0, 0, 0, 5284, 5282, 1, 0, 0, 0, 5284, 5285, 1, 0, 0, 0, 5285, 597, 1, 0, 0, 0, 5286, 5284, 1, 0, 0, 0, 5287, 5296, 5, 336, 0, 0, 5288, 5296, 5, 366, 0, 0, 5289, 5296, 5, 367, 0, 0, 5290, 5292, 5, 30, 0, 0, 5291, 5293, 3, 828, 414, 0, 5292, 5291, 1, 0, 0, 0, 5292, 5293, 1, 0, 0, 0, 5293, 5296, 1, 0, 0, 0, 5294, 5296, 5, 570, 0, 0, 5295, 5287, 1, 0, 0, 0, 5295, 5288, 1, 0, 0, 0, 5295, 5289, 1, 0, 0, 0, 5295, 5290, 1, 0, 0, 0, 5295, 5294, 1, 0, 0, 0, 5296, 599, 1, 0, 0, 0, 5297, 5298, 5, 361, 0, 0, 5298, 5299, 5, 23, 0, 0, 5299, 5302, 3, 828, 414, 0, 5300, 5301, 5, 77, 0, 0, 5301, 5303, 5, 566, 0, 0, 5302, 5300, 1, 0, 0, 0, 5302, 5303, 1, 0, 0, 0, 5303, 5315, 1, 0, 0, 0, 5304, 5305, 5, 552, 0, 0, 5305, 5310, 3, 592, 296, 0, 5306, 5307, 5, 550, 0, 0, 5307, 5309, 3, 592, 296, 0, 5308, 5306, 1, 0, 0, 0, 5309, 5312, 1, 0, 0, 0, 5310, 5308, 1, 0, 0, 0, 5310, 5311, 1, 0, 0, 0, 5311, 5313, 1, 0, 0, 0, 5312, 5310, 1, 0, 0, 0, 5313, 5314, 5, 553, 0, 0, 5314, 5316, 1, 0, 0, 0, 5315, 5304, 1, 0, 0, 0, 5315, 5316, 1, 0, 0, 0, 5316, 5318, 1, 0, 0, 0, 5317, 5319, 3, 602, 301, 0, 5318, 5317, 1, 0, 0, 0, 5318, 5319, 1, 0, 0, 0, 5319, 5321, 1, 0, 0, 0, 5320, 5322, 5, 549, 0, 0, 5321, 5320, 1, 0, 0, 0, 5321, 5322, 1, 0, 0, 0, 5322, 601, 1, 0, 0, 0, 5323, 5324, 5, 363, 0, 0, 5324, 5334, 5, 552, 0, 0, 5325, 5335, 5, 544, 0, 0, 5326, 5331, 3, 604, 302, 0, 5327, 5328, 5, 550, 0, 0, 5328, 5330, 3, 604, 302, 0, 5329, 5327, 1, 0, 0, 0, 5330, 5333, 1, 0, 0, 0, 5331, 5329, 1, 0, 0, 0, 5331, 5332, 1, 0, 0, 0, 5332, 5335, 1, 0, 0, 0, 5333, 5331, 1, 0, 0, 0, 5334, 5325, 1, 0, 0, 0, 5334, 5326, 1, 0, 0, 0, 5335, 5336, 1, 0, 0, 0, 5336, 5337, 5, 553, 0, 0, 5337, 603, 1, 0, 0, 0, 5338, 5341, 5, 570, 0, 0, 5339, 5340, 5, 77, 0, 0, 5340, 5342, 5, 566, 0, 0, 5341, 5339, 1, 0, 0, 0, 5341, 5342, 1, 0, 0, 0, 5342, 5344, 1, 0, 0, 0, 5343, 5345, 3, 606, 303, 0, 5344, 5343, 1, 0, 0, 0, 5344, 5345, 1, 0, 0, 0, 5345, 605, 1, 0, 0, 0, 5346, 5347, 5, 552, 0, 0, 5347, 5352, 5, 570, 0, 0, 5348, 5349, 5, 550, 0, 0, 5349, 5351, 5, 570, 0, 0, 5350, 5348, 1, 0, 0, 0, 5351, 5354, 1, 0, 0, 0, 5352, 5350, 1, 0, 0, 0, 5352, 5353, 1, 0, 0, 0, 5353, 5355, 1, 0, 0, 0, 5354, 5352, 1, 0, 0, 0, 5355, 5356, 5, 553, 0, 0, 5356, 607, 1, 0, 0, 0, 5357, 5358, 5, 26, 0, 0, 5358, 5359, 5, 23, 0, 0, 5359, 5360, 3, 828, 414, 0, 5360, 5361, 5, 72, 0, 0, 5361, 5362, 5, 332, 0, 0, 5362, 5363, 5, 359, 0, 0, 5363, 5364, 3, 828, 414, 0, 5364, 5365, 5, 552, 0, 0, 5365, 5370, 3, 592, 296, 0, 5366, 5367, 5, 550, 0, 0, 5367, 5369, 3, 592, 296, 0, 5368, 5366, 1, 0, 0, 0, 5369, 5372, 1, 0, 0, 0, 5370, 5368, 1, 0, 0, 0, 5370, 5371, 1, 0, 0, 0, 5371, 5373, 1, 0, 0, 0, 5372, 5370, 1, 0, 0, 0, 5373, 5379, 5, 553, 0, 0, 5374, 5376, 5, 552, 0, 0, 5375, 5377, 3, 118, 59, 0, 5376, 5375, 1, 0, 0, 0, 5376, 5377, 1, 0, 0, 0, 5377, 5378, 1, 0, 0, 0, 5378, 5380, 5, 553, 0, 0, 5379, 5374, 1, 0, 0, 0, 5379, 5380, 1, 0, 0, 0, 5380, 609, 1, 0, 0, 0, 5381, 5382, 5, 26, 0, 0, 5382, 5383, 5, 401, 0, 0, 5383, 5384, 5, 72, 0, 0, 5384, 5390, 3, 828, 414, 0, 5385, 5388, 5, 381, 0, 0, 5386, 5389, 3, 828, 414, 0, 5387, 5389, 5, 570, 0, 0, 5388, 5386, 1, 0, 0, 0, 5388, 5387, 1, 0, 0, 0, 5389, 5391, 1, 0, 0, 0, 5390, 5385, 1, 0, 0, 0, 5390, 5391, 1, 0, 0, 0, 5391, 5404, 1, 0, 0, 0, 5392, 5393, 5, 401, 0, 0, 5393, 5394, 5, 552, 0, 0, 5394, 5399, 3, 830, 415, 0, 5395, 5396, 5, 550, 0, 0, 5396, 5398, 3, 830, 415, 0, 5397, 5395, 1, 0, 0, 0, 5398, 5401, 1, 0, 0, 0, 5399, 5397, 1, 0, 0, 0, 5399, 5400, 1, 0, 0, 0, 5400, 5402, 1, 0, 0, 0, 5401, 5399, 1, 0, 0, 0, 5402, 5403, 5, 553, 0, 0, 5403, 5405, 1, 0, 0, 0, 5404, 5392, 1, 0, 0, 0, 5404, 5405, 1, 0, 0, 0, 5405, 611, 1, 0, 0, 0, 5406, 5409, 5, 394, 0, 0, 5407, 5410, 3, 828, 414, 0, 5408, 5410, 5, 570, 0, 0, 5409, 5407, 1, 0, 0, 0, 5409, 5408, 1, 0, 0, 0, 5410, 5414, 1, 0, 0, 0, 5411, 5413, 3, 40, 20, 0, 5412, 5411, 1, 0, 0, 0, 5413, 5416, 1, 0, 0, 0, 5414, 5412, 1, 0, 0, 0, 5414, 5415, 1, 0, 0, 0, 5415, 613, 1, 0, 0, 0, 5416, 5414, 1, 0, 0, 0, 5417, 5418, 5, 393, 0, 0, 5418, 5419, 5, 552, 0, 0, 5419, 5424, 3, 616, 308, 0, 5420, 5421, 5, 550, 0, 0, 5421, 5423, 3, 616, 308, 0, 5422, 5420, 1, 0, 0, 0, 5423, 5426, 1, 0, 0, 0, 5424, 5422, 1, 0, 0, 0, 5424, 5425, 1, 0, 0, 0, 5425, 5427, 1, 0, 0, 0, 5426, 5424, 1, 0, 0, 0, 5427, 5428, 5, 553, 0, 0, 5428, 615, 1, 0, 0, 0, 5429, 5430, 5, 566, 0, 0, 5430, 5431, 5, 558, 0, 0, 5431, 5432, 3, 590, 295, 0, 5432, 617, 1, 0, 0, 0, 5433, 5434, 5, 464, 0, 0, 5434, 5435, 5, 465, 0, 0, 5435, 5436, 5, 330, 0, 0, 5436, 5437, 3, 828, 414, 0, 5437, 5438, 5, 552, 0, 0, 5438, 5443, 3, 592, 296, 0, 5439, 5440, 5, 550, 0, 0, 5440, 5442, 3, 592, 296, 0, 5441, 5439, 1, 0, 0, 0, 5442, 5445, 1, 0, 0, 0, 5443, 5441, 1, 0, 0, 0, 5443, 5444, 1, 0, 0, 0, 5444, 5446, 1, 0, 0, 0, 5445, 5443, 1, 0, 0, 0, 5446, 5447, 5, 553, 0, 0, 5447, 5449, 5, 554, 0, 0, 5448, 5450, 3, 620, 310, 0, 5449, 5448, 1, 0, 0, 0, 5450, 5451, 1, 0, 0, 0, 5451, 5449, 1, 0, 0, 0, 5451, 5452, 1, 0, 0, 0, 5452, 5453, 1, 0, 0, 0, 5453, 5454, 5, 555, 0, 0, 5454, 619, 1, 0, 0, 0, 5455, 5456, 5, 426, 0, 0, 5456, 5457, 5, 570, 0, 0, 5457, 5458, 5, 552, 0, 0, 5458, 5463, 3, 622, 311, 0, 5459, 5460, 5, 550, 0, 0, 5460, 5462, 3, 622, 311, 0, 5461, 5459, 1, 0, 0, 0, 5462, 5465, 1, 0, 0, 0, 5463, 5461, 1, 0, 0, 0, 5463, 5464, 1, 0, 0, 0, 5464, 5466, 1, 0, 0, 0, 5465, 5463, 1, 0, 0, 0, 5466, 5467, 5, 553, 0, 0, 5467, 5470, 7, 35, 0, 0, 5468, 5469, 5, 23, 0, 0, 5469, 5471, 3, 828, 414, 0, 5470, 5468, 1, 0, 0, 0, 5470, 5471, 1, 0, 0, 0, 5471, 5474, 1, 0, 0, 0, 5472, 5473, 5, 30, 0, 0, 5473, 5475, 3, 828, 414, 0, 5474, 5472, 1, 0, 0, 0, 5474, 5475, 1, 0, 0, 0, 5475, 5476, 1, 0, 0, 0, 5476, 5477, 5, 549, 0, 0, 5477, 621, 1, 0, 0, 0, 5478, 5479, 5, 570, 0, 0, 5479, 5480, 5, 558, 0, 0, 5480, 5481, 3, 126, 63, 0, 5481, 623, 1, 0, 0, 0, 5482, 5483, 5, 32, 0, 0, 5483, 5488, 3, 828, 414, 0, 5484, 5485, 5, 391, 0, 0, 5485, 5486, 5, 569, 0, 0, 5486, 5487, 5, 558, 0, 0, 5487, 5489, 3, 828, 414, 0, 5488, 5484, 1, 0, 0, 0, 5488, 5489, 1, 0, 0, 0, 5489, 5492, 1, 0, 0, 0, 5490, 5491, 5, 512, 0, 0, 5491, 5493, 5, 566, 0, 0, 5492, 5490, 1, 0, 0, 0, 5492, 5493, 1, 0, 0, 0, 5493, 5496, 1, 0, 0, 0, 5494, 5495, 5, 511, 0, 0, 5495, 5497, 5, 566, 0, 0, 5496, 5494, 1, 0, 0, 0, 5496, 5497, 1, 0, 0, 0, 5497, 5501, 1, 0, 0, 0, 5498, 5499, 5, 384, 0, 0, 5499, 5500, 5, 485, 0, 0, 5500, 5502, 7, 36, 0, 0, 5501, 5498, 1, 0, 0, 0, 5501, 5502, 1, 0, 0, 0, 5502, 5506, 1, 0, 0, 0, 5503, 5504, 5, 497, 0, 0, 5504, 5505, 5, 33, 0, 0, 5505, 5507, 3, 828, 414, 0, 5506, 5503, 1, 0, 0, 0, 5506, 5507, 1, 0, 0, 0, 5507, 5511, 1, 0, 0, 0, 5508, 5509, 5, 496, 0, 0, 5509, 5510, 5, 282, 0, 0, 5510, 5512, 5, 566, 0, 0, 5511, 5508, 1, 0, 0, 0, 5511, 5512, 1, 0, 0, 0, 5512, 5513, 1, 0, 0, 0, 5513, 5514, 5, 97, 0, 0, 5514, 5515, 3, 626, 313, 0, 5515, 5516, 5, 84, 0, 0, 5516, 5518, 5, 32, 0, 0, 5517, 5519, 5, 549, 0, 0, 5518, 5517, 1, 0, 0, 0, 5518, 5519, 1, 0, 0, 0, 5519, 5521, 1, 0, 0, 0, 5520, 5522, 5, 545, 0, 0, 5521, 5520, 1, 0, 0, 0, 5521, 5522, 1, 0, 0, 0, 5522, 625, 1, 0, 0, 0, 5523, 5525, 3, 628, 314, 0, 5524, 5523, 1, 0, 0, 0, 5525, 5528, 1, 0, 0, 0, 5526, 5524, 1, 0, 0, 0, 5526, 5527, 1, 0, 0, 0, 5527, 627, 1, 0, 0, 0, 5528, 5526, 1, 0, 0, 0, 5529, 5530, 3, 630, 315, 0, 5530, 5531, 5, 549, 0, 0, 5531, 5557, 1, 0, 0, 0, 5532, 5533, 3, 636, 318, 0, 5533, 5534, 5, 549, 0, 0, 5534, 5557, 1, 0, 0, 0, 5535, 5536, 3, 640, 320, 0, 5536, 5537, 5, 549, 0, 0, 5537, 5557, 1, 0, 0, 0, 5538, 5539, 3, 642, 321, 0, 5539, 5540, 5, 549, 0, 0, 5540, 5557, 1, 0, 0, 0, 5541, 5542, 3, 646, 323, 0, 5542, 5543, 5, 549, 0, 0, 5543, 5557, 1, 0, 0, 0, 5544, 5545, 3, 650, 325, 0, 5545, 5546, 5, 549, 0, 0, 5546, 5557, 1, 0, 0, 0, 5547, 5548, 3, 652, 326, 0, 5548, 5549, 5, 549, 0, 0, 5549, 5557, 1, 0, 0, 0, 5550, 5551, 3, 654, 327, 0, 5551, 5552, 5, 549, 0, 0, 5552, 5557, 1, 0, 0, 0, 5553, 5554, 3, 656, 328, 0, 5554, 5555, 5, 549, 0, 0, 5555, 5557, 1, 0, 0, 0, 5556, 5529, 1, 0, 0, 0, 5556, 5532, 1, 0, 0, 0, 5556, 5535, 1, 0, 0, 0, 5556, 5538, 1, 0, 0, 0, 5556, 5541, 1, 0, 0, 0, 5556, 5544, 1, 0, 0, 0, 5556, 5547, 1, 0, 0, 0, 5556, 5550, 1, 0, 0, 0, 5556, 5553, 1, 0, 0, 0, 5557, 629, 1, 0, 0, 0, 5558, 5559, 5, 486, 0, 0, 5559, 5560, 5, 487, 0, 0, 5560, 5561, 5, 570, 0, 0, 5561, 5564, 5, 566, 0, 0, 5562, 5563, 5, 33, 0, 0, 5563, 5565, 3, 828, 414, 0, 5564, 5562, 1, 0, 0, 0, 5564, 5565, 1, 0, 0, 0, 5565, 5572, 1, 0, 0, 0, 5566, 5568, 5, 492, 0, 0, 5567, 5569, 7, 37, 0, 0, 5568, 5567, 1, 0, 0, 0, 5568, 5569, 1, 0, 0, 0, 5569, 5570, 1, 0, 0, 0, 5570, 5571, 5, 30, 0, 0, 5571, 5573, 3, 828, 414, 0, 5572, 5566, 1, 0, 0, 0, 5572, 5573, 1, 0, 0, 0, 5573, 5580, 1, 0, 0, 0, 5574, 5576, 5, 492, 0, 0, 5575, 5577, 7, 37, 0, 0, 5576, 5575, 1, 0, 0, 0, 5576, 5577, 1, 0, 0, 0, 5577, 5578, 1, 0, 0, 0, 5578, 5579, 5, 326, 0, 0, 5579, 5581, 5, 566, 0, 0, 5580, 5574, 1, 0, 0, 0, 5580, 5581, 1, 0, 0, 0, 5581, 5584, 1, 0, 0, 0, 5582, 5583, 5, 23, 0, 0, 5583, 5585, 3, 828, 414, 0, 5584, 5582, 1, 0, 0, 0, 5584, 5585, 1, 0, 0, 0, 5585, 5589, 1, 0, 0, 0, 5586, 5587, 5, 496, 0, 0, 5587, 5588, 5, 282, 0, 0, 5588, 5590, 5, 566, 0, 0, 5589, 5586, 1, 0, 0, 0, 5589, 5590, 1, 0, 0, 0, 5590, 5593, 1, 0, 0, 0, 5591, 5592, 5, 511, 0, 0, 5592, 5594, 5, 566, 0, 0, 5593, 5591, 1, 0, 0, 0, 5593, 5594, 1, 0, 0, 0, 5594, 5601, 1, 0, 0, 0, 5595, 5597, 5, 491, 0, 0, 5596, 5598, 3, 634, 317, 0, 5597, 5596, 1, 0, 0, 0, 5598, 5599, 1, 0, 0, 0, 5599, 5597, 1, 0, 0, 0, 5599, 5600, 1, 0, 0, 0, 5600, 5602, 1, 0, 0, 0, 5601, 5595, 1, 0, 0, 0, 5601, 5602, 1, 0, 0, 0, 5602, 5610, 1, 0, 0, 0, 5603, 5604, 5, 504, 0, 0, 5604, 5606, 5, 465, 0, 0, 5605, 5607, 3, 632, 316, 0, 5606, 5605, 1, 0, 0, 0, 5607, 5608, 1, 0, 0, 0, 5608, 5606, 1, 0, 0, 0, 5608, 5609, 1, 0, 0, 0, 5609, 5611, 1, 0, 0, 0, 5610, 5603, 1, 0, 0, 0, 5610, 5611, 1, 0, 0, 0, 5611, 5668, 1, 0, 0, 0, 5612, 5613, 5, 507, 0, 0, 5613, 5614, 5, 486, 0, 0, 5614, 5615, 5, 487, 0, 0, 5615, 5616, 5, 570, 0, 0, 5616, 5619, 5, 566, 0, 0, 5617, 5618, 5, 33, 0, 0, 5618, 5620, 3, 828, 414, 0, 5619, 5617, 1, 0, 0, 0, 5619, 5620, 1, 0, 0, 0, 5620, 5627, 1, 0, 0, 0, 5621, 5623, 5, 492, 0, 0, 5622, 5624, 7, 37, 0, 0, 5623, 5622, 1, 0, 0, 0, 5623, 5624, 1, 0, 0, 0, 5624, 5625, 1, 0, 0, 0, 5625, 5626, 5, 30, 0, 0, 5626, 5628, 3, 828, 414, 0, 5627, 5621, 1, 0, 0, 0, 5627, 5628, 1, 0, 0, 0, 5628, 5635, 1, 0, 0, 0, 5629, 5631, 5, 492, 0, 0, 5630, 5632, 7, 37, 0, 0, 5631, 5630, 1, 0, 0, 0, 5631, 5632, 1, 0, 0, 0, 5632, 5633, 1, 0, 0, 0, 5633, 5634, 5, 326, 0, 0, 5634, 5636, 5, 566, 0, 0, 5635, 5629, 1, 0, 0, 0, 5635, 5636, 1, 0, 0, 0, 5636, 5639, 1, 0, 0, 0, 5637, 5638, 5, 23, 0, 0, 5638, 5640, 3, 828, 414, 0, 5639, 5637, 1, 0, 0, 0, 5639, 5640, 1, 0, 0, 0, 5640, 5644, 1, 0, 0, 0, 5641, 5642, 5, 496, 0, 0, 5642, 5643, 5, 282, 0, 0, 5643, 5645, 5, 566, 0, 0, 5644, 5641, 1, 0, 0, 0, 5644, 5645, 1, 0, 0, 0, 5645, 5648, 1, 0, 0, 0, 5646, 5647, 5, 511, 0, 0, 5647, 5649, 5, 566, 0, 0, 5648, 5646, 1, 0, 0, 0, 5648, 5649, 1, 0, 0, 0, 5649, 5656, 1, 0, 0, 0, 5650, 5652, 5, 491, 0, 0, 5651, 5653, 3, 634, 317, 0, 5652, 5651, 1, 0, 0, 0, 5653, 5654, 1, 0, 0, 0, 5654, 5652, 1, 0, 0, 0, 5654, 5655, 1, 0, 0, 0, 5655, 5657, 1, 0, 0, 0, 5656, 5650, 1, 0, 0, 0, 5656, 5657, 1, 0, 0, 0, 5657, 5665, 1, 0, 0, 0, 5658, 5659, 5, 504, 0, 0, 5659, 5661, 5, 465, 0, 0, 5660, 5662, 3, 632, 316, 0, 5661, 5660, 1, 0, 0, 0, 5662, 5663, 1, 0, 0, 0, 5663, 5661, 1, 0, 0, 0, 5663, 5664, 1, 0, 0, 0, 5664, 5666, 1, 0, 0, 0, 5665, 5658, 1, 0, 0, 0, 5665, 5666, 1, 0, 0, 0, 5666, 5668, 1, 0, 0, 0, 5667, 5558, 1, 0, 0, 0, 5667, 5612, 1, 0, 0, 0, 5668, 631, 1, 0, 0, 0, 5669, 5670, 5, 505, 0, 0, 5670, 5672, 5, 494, 0, 0, 5671, 5673, 5, 566, 0, 0, 5672, 5671, 1, 0, 0, 0, 5672, 5673, 1, 0, 0, 0, 5673, 5678, 1, 0, 0, 0, 5674, 5675, 5, 554, 0, 0, 5675, 5676, 3, 626, 313, 0, 5676, 5677, 5, 555, 0, 0, 5677, 5679, 1, 0, 0, 0, 5678, 5674, 1, 0, 0, 0, 5678, 5679, 1, 0, 0, 0, 5679, 5703, 1, 0, 0, 0, 5680, 5681, 5, 506, 0, 0, 5681, 5682, 5, 505, 0, 0, 5682, 5684, 5, 494, 0, 0, 5683, 5685, 5, 566, 0, 0, 5684, 5683, 1, 0, 0, 0, 5684, 5685, 1, 0, 0, 0, 5685, 5690, 1, 0, 0, 0, 5686, 5687, 5, 554, 0, 0, 5687, 5688, 3, 626, 313, 0, 5688, 5689, 5, 555, 0, 0, 5689, 5691, 1, 0, 0, 0, 5690, 5686, 1, 0, 0, 0, 5690, 5691, 1, 0, 0, 0, 5691, 5703, 1, 0, 0, 0, 5692, 5694, 5, 494, 0, 0, 5693, 5695, 5, 566, 0, 0, 5694, 5693, 1, 0, 0, 0, 5694, 5695, 1, 0, 0, 0, 5695, 5700, 1, 0, 0, 0, 5696, 5697, 5, 554, 0, 0, 5697, 5698, 3, 626, 313, 0, 5698, 5699, 5, 555, 0, 0, 5699, 5701, 1, 0, 0, 0, 5700, 5696, 1, 0, 0, 0, 5700, 5701, 1, 0, 0, 0, 5701, 5703, 1, 0, 0, 0, 5702, 5669, 1, 0, 0, 0, 5702, 5680, 1, 0, 0, 0, 5702, 5692, 1, 0, 0, 0, 5703, 633, 1, 0, 0, 0, 5704, 5705, 5, 566, 0, 0, 5705, 5706, 5, 554, 0, 0, 5706, 5707, 3, 626, 313, 0, 5707, 5708, 5, 555, 0, 0, 5708, 635, 1, 0, 0, 0, 5709, 5710, 5, 114, 0, 0, 5710, 5711, 5, 30, 0, 0, 5711, 5714, 3, 828, 414, 0, 5712, 5713, 5, 429, 0, 0, 5713, 5715, 5, 566, 0, 0, 5714, 5712, 1, 0, 0, 0, 5714, 5715, 1, 0, 0, 0, 5715, 5728, 1, 0, 0, 0, 5716, 5717, 5, 140, 0, 0, 5717, 5718, 5, 552, 0, 0, 5718, 5723, 3, 638, 319, 0, 5719, 5720, 5, 550, 0, 0, 5720, 5722, 3, 638, 319, 0, 5721, 5719, 1, 0, 0, 0, 5722, 5725, 1, 0, 0, 0, 5723, 5721, 1, 0, 0, 0, 5723, 5724, 1, 0, 0, 0, 5724, 5726, 1, 0, 0, 0, 5725, 5723, 1, 0, 0, 0, 5726, 5727, 5, 553, 0, 0, 5727, 5729, 1, 0, 0, 0, 5728, 5716, 1, 0, 0, 0, 5728, 5729, 1, 0, 0, 0, 5729, 5736, 1, 0, 0, 0, 5730, 5732, 5, 491, 0, 0, 5731, 5733, 3, 644, 322, 0, 5732, 5731, 1, 0, 0, 0, 5733, 5734, 1, 0, 0, 0, 5734, 5732, 1, 0, 0, 0, 5734, 5735, 1, 0, 0, 0, 5735, 5737, 1, 0, 0, 0, 5736, 5730, 1, 0, 0, 0, 5736, 5737, 1, 0, 0, 0, 5737, 5745, 1, 0, 0, 0, 5738, 5739, 5, 504, 0, 0, 5739, 5741, 5, 465, 0, 0, 5740, 5742, 3, 632, 316, 0, 5741, 5740, 1, 0, 0, 0, 5742, 5743, 1, 0, 0, 0, 5743, 5741, 1, 0, 0, 0, 5743, 5744, 1, 0, 0, 0, 5744, 5746, 1, 0, 0, 0, 5745, 5738, 1, 0, 0, 0, 5745, 5746, 1, 0, 0, 0, 5746, 637, 1, 0, 0, 0, 5747, 5748, 3, 828, 414, 0, 5748, 5749, 5, 539, 0, 0, 5749, 5750, 5, 566, 0, 0, 5750, 639, 1, 0, 0, 0, 5751, 5752, 5, 114, 0, 0, 5752, 5753, 5, 32, 0, 0, 5753, 5756, 3, 828, 414, 0, 5754, 5755, 5, 429, 0, 0, 5755, 5757, 5, 566, 0, 0, 5756, 5754, 1, 0, 0, 0, 5756, 5757, 1, 0, 0, 0, 5757, 5770, 1, 0, 0, 0, 5758, 5759, 5, 140, 0, 0, 5759, 5760, 5, 552, 0, 0, 5760, 5765, 3, 638, 319, 0, 5761, 5762, 5, 550, 0, 0, 5762, 5764, 3, 638, 319, 0, 5763, 5761, 1, 0, 0, 0, 5764, 5767, 1, 0, 0, 0, 5765, 5763, 1, 0, 0, 0, 5765, 5766, 1, 0, 0, 0, 5766, 5768, 1, 0, 0, 0, 5767, 5765, 1, 0, 0, 0, 5768, 5769, 5, 553, 0, 0, 5769, 5771, 1, 0, 0, 0, 5770, 5758, 1, 0, 0, 0, 5770, 5771, 1, 0, 0, 0, 5771, 641, 1, 0, 0, 0, 5772, 5774, 5, 488, 0, 0, 5773, 5775, 5, 566, 0, 0, 5774, 5773, 1, 0, 0, 0, 5774, 5775, 1, 0, 0, 0, 5775, 5778, 1, 0, 0, 0, 5776, 5777, 5, 429, 0, 0, 5777, 5779, 5, 566, 0, 0, 5778, 5776, 1, 0, 0, 0, 5778, 5779, 1, 0, 0, 0, 5779, 5786, 1, 0, 0, 0, 5780, 5782, 5, 491, 0, 0, 5781, 5783, 3, 644, 322, 0, 5782, 5781, 1, 0, 0, 0, 5783, 5784, 1, 0, 0, 0, 5784, 5782, 1, 0, 0, 0, 5784, 5785, 1, 0, 0, 0, 5785, 5787, 1, 0, 0, 0, 5786, 5780, 1, 0, 0, 0, 5786, 5787, 1, 0, 0, 0, 5787, 643, 1, 0, 0, 0, 5788, 5789, 7, 38, 0, 0, 5789, 5790, 5, 562, 0, 0, 5790, 5791, 5, 554, 0, 0, 5791, 5792, 3, 626, 313, 0, 5792, 5793, 5, 555, 0, 0, 5793, 645, 1, 0, 0, 0, 5794, 5795, 5, 501, 0, 0, 5795, 5798, 5, 489, 0, 0, 5796, 5797, 5, 429, 0, 0, 5797, 5799, 5, 566, 0, 0, 5798, 5796, 1, 0, 0, 0, 5798, 5799, 1, 0, 0, 0, 5799, 5801, 1, 0, 0, 0, 5800, 5802, 3, 648, 324, 0, 5801, 5800, 1, 0, 0, 0, 5802, 5803, 1, 0, 0, 0, 5803, 5801, 1, 0, 0, 0, 5803, 5804, 1, 0, 0, 0, 5804, 647, 1, 0, 0, 0, 5805, 5806, 5, 341, 0, 0, 5806, 5807, 5, 568, 0, 0, 5807, 5808, 5, 554, 0, 0, 5808, 5809, 3, 626, 313, 0, 5809, 5810, 5, 555, 0, 0, 5810, 649, 1, 0, 0, 0, 5811, 5812, 5, 495, 0, 0, 5812, 5813, 5, 450, 0, 0, 5813, 5816, 5, 570, 0, 0, 5814, 5815, 5, 429, 0, 0, 5815, 5817, 5, 566, 0, 0, 5816, 5814, 1, 0, 0, 0, 5816, 5817, 1, 0, 0, 0, 5817, 651, 1, 0, 0, 0, 5818, 5819, 5, 502, 0, 0, 5819, 5820, 5, 453, 0, 0, 5820, 5822, 5, 494, 0, 0, 5821, 5823, 5, 566, 0, 0, 5822, 5821, 1, 0, 0, 0, 5822, 5823, 1, 0, 0, 0, 5823, 5826, 1, 0, 0, 0, 5824, 5825, 5, 429, 0, 0, 5825, 5827, 5, 566, 0, 0, 5826, 5824, 1, 0, 0, 0, 5826, 5827, 1, 0, 0, 0, 5827, 653, 1, 0, 0, 0, 5828, 5829, 5, 502, 0, 0, 5829, 5830, 5, 453, 0, 0, 5830, 5833, 5, 493, 0, 0, 5831, 5832, 5, 429, 0, 0, 5832, 5834, 5, 566, 0, 0, 5833, 5831, 1, 0, 0, 0, 5833, 5834, 1, 0, 0, 0, 5834, 5842, 1, 0, 0, 0, 5835, 5836, 5, 504, 0, 0, 5836, 5838, 5, 465, 0, 0, 5837, 5839, 3, 632, 316, 0, 5838, 5837, 1, 0, 0, 0, 5839, 5840, 1, 0, 0, 0, 5840, 5838, 1, 0, 0, 0, 5840, 5841, 1, 0, 0, 0, 5841, 5843, 1, 0, 0, 0, 5842, 5835, 1, 0, 0, 0, 5842, 5843, 1, 0, 0, 0, 5843, 655, 1, 0, 0, 0, 5844, 5845, 5, 503, 0, 0, 5845, 5846, 5, 566, 0, 0, 5846, 657, 1, 0, 0, 0, 5847, 5848, 5, 48, 0, 0, 5848, 5922, 3, 660, 330, 0, 5849, 5850, 5, 48, 0, 0, 5850, 5851, 5, 513, 0, 0, 5851, 5852, 3, 664, 332, 0, 5852, 5853, 3, 662, 331, 0, 5853, 5922, 1, 0, 0, 0, 5854, 5855, 5, 413, 0, 0, 5855, 5856, 5, 415, 0, 0, 5856, 5857, 3, 664, 332, 0, 5857, 5858, 3, 628, 314, 0, 5858, 5922, 1, 0, 0, 0, 5859, 5860, 5, 19, 0, 0, 5860, 5861, 5, 513, 0, 0, 5861, 5922, 3, 664, 332, 0, 5862, 5863, 5, 454, 0, 0, 5863, 5864, 5, 513, 0, 0, 5864, 5865, 3, 664, 332, 0, 5865, 5866, 5, 140, 0, 0, 5866, 5867, 3, 628, 314, 0, 5867, 5922, 1, 0, 0, 0, 5868, 5869, 5, 413, 0, 0, 5869, 5870, 5, 490, 0, 0, 5870, 5871, 5, 566, 0, 0, 5871, 5872, 5, 94, 0, 0, 5872, 5873, 3, 664, 332, 0, 5873, 5874, 5, 554, 0, 0, 5874, 5875, 3, 626, 313, 0, 5875, 5876, 5, 555, 0, 0, 5876, 5922, 1, 0, 0, 0, 5877, 5878, 5, 413, 0, 0, 5878, 5879, 5, 341, 0, 0, 5879, 5880, 5, 94, 0, 0, 5880, 5881, 3, 664, 332, 0, 5881, 5882, 5, 554, 0, 0, 5882, 5883, 3, 626, 313, 0, 5883, 5884, 5, 555, 0, 0, 5884, 5922, 1, 0, 0, 0, 5885, 5886, 5, 19, 0, 0, 5886, 5887, 5, 490, 0, 0, 5887, 5888, 5, 566, 0, 0, 5888, 5889, 5, 94, 0, 0, 5889, 5922, 3, 664, 332, 0, 5890, 5891, 5, 19, 0, 0, 5891, 5892, 5, 341, 0, 0, 5892, 5893, 5, 566, 0, 0, 5893, 5894, 5, 94, 0, 0, 5894, 5922, 3, 664, 332, 0, 5895, 5896, 5, 413, 0, 0, 5896, 5897, 5, 504, 0, 0, 5897, 5898, 5, 465, 0, 0, 5898, 5899, 5, 94, 0, 0, 5899, 5900, 3, 664, 332, 0, 5900, 5901, 3, 632, 316, 0, 5901, 5922, 1, 0, 0, 0, 5902, 5903, 5, 19, 0, 0, 5903, 5904, 5, 504, 0, 0, 5904, 5905, 5, 465, 0, 0, 5905, 5906, 5, 94, 0, 0, 5906, 5922, 3, 664, 332, 0, 5907, 5908, 5, 413, 0, 0, 5908, 5909, 5, 514, 0, 0, 5909, 5910, 5, 566, 0, 0, 5910, 5911, 5, 94, 0, 0, 5911, 5912, 3, 664, 332, 0, 5912, 5913, 5, 554, 0, 0, 5913, 5914, 3, 626, 313, 0, 5914, 5915, 5, 555, 0, 0, 5915, 5922, 1, 0, 0, 0, 5916, 5917, 5, 19, 0, 0, 5917, 5918, 5, 514, 0, 0, 5918, 5919, 5, 566, 0, 0, 5919, 5920, 5, 94, 0, 0, 5920, 5922, 3, 664, 332, 0, 5921, 5847, 1, 0, 0, 0, 5921, 5849, 1, 0, 0, 0, 5921, 5854, 1, 0, 0, 0, 5921, 5859, 1, 0, 0, 0, 5921, 5862, 1, 0, 0, 0, 5921, 5868, 1, 0, 0, 0, 5921, 5877, 1, 0, 0, 0, 5921, 5885, 1, 0, 0, 0, 5921, 5890, 1, 0, 0, 0, 5921, 5895, 1, 0, 0, 0, 5921, 5902, 1, 0, 0, 0, 5921, 5907, 1, 0, 0, 0, 5921, 5916, 1, 0, 0, 0, 5922, 659, 1, 0, 0, 0, 5923, 5924, 5, 512, 0, 0, 5924, 5941, 5, 566, 0, 0, 5925, 5926, 5, 511, 0, 0, 5926, 5941, 5, 566, 0, 0, 5927, 5928, 5, 384, 0, 0, 5928, 5929, 5, 485, 0, 0, 5929, 5941, 7, 36, 0, 0, 5930, 5931, 5, 496, 0, 0, 5931, 5932, 5, 282, 0, 0, 5932, 5941, 5, 566, 0, 0, 5933, 5934, 5, 497, 0, 0, 5934, 5935, 5, 33, 0, 0, 5935, 5941, 3, 828, 414, 0, 5936, 5937, 5, 391, 0, 0, 5937, 5938, 5, 569, 0, 0, 5938, 5939, 5, 558, 0, 0, 5939, 5941, 3, 828, 414, 0, 5940, 5923, 1, 0, 0, 0, 5940, 5925, 1, 0, 0, 0, 5940, 5927, 1, 0, 0, 0, 5940, 5930, 1, 0, 0, 0, 5940, 5933, 1, 0, 0, 0, 5940, 5936, 1, 0, 0, 0, 5941, 661, 1, 0, 0, 0, 5942, 5943, 5, 33, 0, 0, 5943, 5956, 3, 828, 414, 0, 5944, 5945, 5, 511, 0, 0, 5945, 5956, 5, 566, 0, 0, 5946, 5947, 5, 492, 0, 0, 5947, 5948, 5, 30, 0, 0, 5948, 5956, 3, 828, 414, 0, 5949, 5950, 5, 492, 0, 0, 5950, 5951, 5, 326, 0, 0, 5951, 5956, 5, 566, 0, 0, 5952, 5953, 5, 496, 0, 0, 5953, 5954, 5, 282, 0, 0, 5954, 5956, 5, 566, 0, 0, 5955, 5942, 1, 0, 0, 0, 5955, 5944, 1, 0, 0, 0, 5955, 5946, 1, 0, 0, 0, 5955, 5949, 1, 0, 0, 0, 5955, 5952, 1, 0, 0, 0, 5956, 663, 1, 0, 0, 0, 5957, 5960, 5, 570, 0, 0, 5958, 5959, 5, 559, 0, 0, 5959, 5961, 5, 568, 0, 0, 5960, 5958, 1, 0, 0, 0, 5960, 5961, 1, 0, 0, 0, 5961, 5968, 1, 0, 0, 0, 5962, 5965, 5, 566, 0, 0, 5963, 5964, 5, 559, 0, 0, 5964, 5966, 5, 568, 0, 0, 5965, 5963, 1, 0, 0, 0, 5965, 5966, 1, 0, 0, 0, 5966, 5968, 1, 0, 0, 0, 5967, 5957, 1, 0, 0, 0, 5967, 5962, 1, 0, 0, 0, 5968, 665, 1, 0, 0, 0, 5969, 5970, 3, 668, 334, 0, 5970, 5975, 3, 670, 335, 0, 5971, 5972, 5, 550, 0, 0, 5972, 5974, 3, 670, 335, 0, 5973, 5971, 1, 0, 0, 0, 5974, 5977, 1, 0, 0, 0, 5975, 5973, 1, 0, 0, 0, 5975, 5976, 1, 0, 0, 0, 5976, 6009, 1, 0, 0, 0, 5977, 5975, 1, 0, 0, 0, 5978, 5979, 5, 37, 0, 0, 5979, 5983, 5, 566, 0, 0, 5980, 5981, 5, 444, 0, 0, 5981, 5984, 3, 672, 336, 0, 5982, 5984, 5, 19, 0, 0, 5983, 5980, 1, 0, 0, 0, 5983, 5982, 1, 0, 0, 0, 5984, 5988, 1, 0, 0, 0, 5985, 5986, 5, 307, 0, 0, 5986, 5987, 5, 469, 0, 0, 5987, 5989, 5, 566, 0, 0, 5988, 5985, 1, 0, 0, 0, 5988, 5989, 1, 0, 0, 0, 5989, 6009, 1, 0, 0, 0, 5990, 5991, 5, 19, 0, 0, 5991, 5992, 5, 37, 0, 0, 5992, 5996, 5, 566, 0, 0, 5993, 5994, 5, 307, 0, 0, 5994, 5995, 5, 469, 0, 0, 5995, 5997, 5, 566, 0, 0, 5996, 5993, 1, 0, 0, 0, 5996, 5997, 1, 0, 0, 0, 5997, 6009, 1, 0, 0, 0, 5998, 5999, 5, 469, 0, 0, 5999, 6000, 5, 566, 0, 0, 6000, 6005, 3, 670, 335, 0, 6001, 6002, 5, 550, 0, 0, 6002, 6004, 3, 670, 335, 0, 6003, 6001, 1, 0, 0, 0, 6004, 6007, 1, 0, 0, 0, 6005, 6003, 1, 0, 0, 0, 6005, 6006, 1, 0, 0, 0, 6006, 6009, 1, 0, 0, 0, 6007, 6005, 1, 0, 0, 0, 6008, 5969, 1, 0, 0, 0, 6008, 5978, 1, 0, 0, 0, 6008, 5990, 1, 0, 0, 0, 6008, 5998, 1, 0, 0, 0, 6009, 667, 1, 0, 0, 0, 6010, 6011, 7, 39, 0, 0, 6011, 669, 1, 0, 0, 0, 6012, 6013, 5, 570, 0, 0, 6013, 6014, 5, 539, 0, 0, 6014, 6015, 3, 672, 336, 0, 6015, 671, 1, 0, 0, 0, 6016, 6021, 5, 566, 0, 0, 6017, 6021, 5, 568, 0, 0, 6018, 6021, 3, 836, 418, 0, 6019, 6021, 3, 828, 414, 0, 6020, 6016, 1, 0, 0, 0, 6020, 6017, 1, 0, 0, 0, 6020, 6018, 1, 0, 0, 0, 6020, 6019, 1, 0, 0, 0, 6021, 673, 1, 0, 0, 0, 6022, 6027, 3, 678, 339, 0, 6023, 6027, 3, 690, 345, 0, 6024, 6027, 3, 692, 346, 0, 6025, 6027, 3, 698, 349, 0, 6026, 6022, 1, 0, 0, 0, 6026, 6023, 1, 0, 0, 0, 6026, 6024, 1, 0, 0, 0, 6026, 6025, 1, 0, 0, 0, 6027, 675, 1, 0, 0, 0, 6028, 6029, 7, 40, 0, 0, 6029, 677, 1, 0, 0, 0, 6030, 6031, 3, 676, 338, 0, 6031, 6032, 5, 400, 0, 0, 6032, 6564, 1, 0, 0, 0, 6033, 6034, 3, 676, 338, 0, 6034, 6035, 5, 364, 0, 0, 6035, 6036, 5, 401, 0, 0, 6036, 6037, 5, 72, 0, 0, 6037, 6038, 3, 828, 414, 0, 6038, 6564, 1, 0, 0, 0, 6039, 6040, 3, 676, 338, 0, 6040, 6041, 5, 364, 0, 0, 6041, 6042, 5, 118, 0, 0, 6042, 6043, 5, 72, 0, 0, 6043, 6044, 3, 828, 414, 0, 6044, 6564, 1, 0, 0, 0, 6045, 6046, 3, 676, 338, 0, 6046, 6047, 5, 364, 0, 0, 6047, 6048, 5, 428, 0, 0, 6048, 6049, 5, 72, 0, 0, 6049, 6050, 3, 828, 414, 0, 6050, 6564, 1, 0, 0, 0, 6051, 6052, 3, 676, 338, 0, 6052, 6053, 5, 364, 0, 0, 6053, 6054, 5, 427, 0, 0, 6054, 6055, 5, 72, 0, 0, 6055, 6056, 3, 828, 414, 0, 6056, 6564, 1, 0, 0, 0, 6057, 6058, 3, 676, 338, 0, 6058, 6064, 5, 401, 0, 0, 6059, 6062, 5, 307, 0, 0, 6060, 6063, 3, 828, 414, 0, 6061, 6063, 5, 570, 0, 0, 6062, 6060, 1, 0, 0, 0, 6062, 6061, 1, 0, 0, 0, 6063, 6065, 1, 0, 0, 0, 6064, 6059, 1, 0, 0, 0, 6064, 6065, 1, 0, 0, 0, 6065, 6564, 1, 0, 0, 0, 6066, 6067, 3, 676, 338, 0, 6067, 6073, 5, 402, 0, 0, 6068, 6071, 5, 307, 0, 0, 6069, 6072, 3, 828, 414, 0, 6070, 6072, 5, 570, 0, 0, 6071, 6069, 1, 0, 0, 0, 6071, 6070, 1, 0, 0, 0, 6072, 6074, 1, 0, 0, 0, 6073, 6068, 1, 0, 0, 0, 6073, 6074, 1, 0, 0, 0, 6074, 6564, 1, 0, 0, 0, 6075, 6076, 3, 676, 338, 0, 6076, 6082, 5, 403, 0, 0, 6077, 6080, 5, 307, 0, 0, 6078, 6081, 3, 828, 414, 0, 6079, 6081, 5, 570, 0, 0, 6080, 6078, 1, 0, 0, 0, 6080, 6079, 1, 0, 0, 0, 6081, 6083, 1, 0, 0, 0, 6082, 6077, 1, 0, 0, 0, 6082, 6083, 1, 0, 0, 0, 6083, 6564, 1, 0, 0, 0, 6084, 6085, 3, 676, 338, 0, 6085, 6091, 5, 404, 0, 0, 6086, 6089, 5, 307, 0, 0, 6087, 6090, 3, 828, 414, 0, 6088, 6090, 5, 570, 0, 0, 6089, 6087, 1, 0, 0, 0, 6089, 6088, 1, 0, 0, 0, 6090, 6092, 1, 0, 0, 0, 6091, 6086, 1, 0, 0, 0, 6091, 6092, 1, 0, 0, 0, 6092, 6564, 1, 0, 0, 0, 6093, 6094, 3, 676, 338, 0, 6094, 6100, 5, 405, 0, 0, 6095, 6098, 5, 307, 0, 0, 6096, 6099, 3, 828, 414, 0, 6097, 6099, 5, 570, 0, 0, 6098, 6096, 1, 0, 0, 0, 6098, 6097, 1, 0, 0, 0, 6099, 6101, 1, 0, 0, 0, 6100, 6095, 1, 0, 0, 0, 6100, 6101, 1, 0, 0, 0, 6101, 6564, 1, 0, 0, 0, 6102, 6103, 3, 676, 338, 0, 6103, 6109, 5, 144, 0, 0, 6104, 6107, 5, 307, 0, 0, 6105, 6108, 3, 828, 414, 0, 6106, 6108, 5, 570, 0, 0, 6107, 6105, 1, 0, 0, 0, 6107, 6106, 1, 0, 0, 0, 6108, 6110, 1, 0, 0, 0, 6109, 6104, 1, 0, 0, 0, 6109, 6110, 1, 0, 0, 0, 6110, 6564, 1, 0, 0, 0, 6111, 6112, 3, 676, 338, 0, 6112, 6118, 5, 146, 0, 0, 6113, 6116, 5, 307, 0, 0, 6114, 6117, 3, 828, 414, 0, 6115, 6117, 5, 570, 0, 0, 6116, 6114, 1, 0, 0, 0, 6116, 6115, 1, 0, 0, 0, 6117, 6119, 1, 0, 0, 0, 6118, 6113, 1, 0, 0, 0, 6118, 6119, 1, 0, 0, 0, 6119, 6564, 1, 0, 0, 0, 6120, 6121, 3, 676, 338, 0, 6121, 6127, 5, 406, 0, 0, 6122, 6125, 5, 307, 0, 0, 6123, 6126, 3, 828, 414, 0, 6124, 6126, 5, 570, 0, 0, 6125, 6123, 1, 0, 0, 0, 6125, 6124, 1, 0, 0, 0, 6126, 6128, 1, 0, 0, 0, 6127, 6122, 1, 0, 0, 0, 6127, 6128, 1, 0, 0, 0, 6128, 6564, 1, 0, 0, 0, 6129, 6130, 3, 676, 338, 0, 6130, 6136, 5, 407, 0, 0, 6131, 6134, 5, 307, 0, 0, 6132, 6135, 3, 828, 414, 0, 6133, 6135, 5, 570, 0, 0, 6134, 6132, 1, 0, 0, 0, 6134, 6133, 1, 0, 0, 0, 6135, 6137, 1, 0, 0, 0, 6136, 6131, 1, 0, 0, 0, 6136, 6137, 1, 0, 0, 0, 6137, 6564, 1, 0, 0, 0, 6138, 6139, 3, 676, 338, 0, 6139, 6140, 5, 37, 0, 0, 6140, 6146, 5, 445, 0, 0, 6141, 6144, 5, 307, 0, 0, 6142, 6145, 3, 828, 414, 0, 6143, 6145, 5, 570, 0, 0, 6144, 6142, 1, 0, 0, 0, 6144, 6143, 1, 0, 0, 0, 6145, 6147, 1, 0, 0, 0, 6146, 6141, 1, 0, 0, 0, 6146, 6147, 1, 0, 0, 0, 6147, 6564, 1, 0, 0, 0, 6148, 6149, 3, 676, 338, 0, 6149, 6155, 5, 145, 0, 0, 6150, 6153, 5, 307, 0, 0, 6151, 6154, 3, 828, 414, 0, 6152, 6154, 5, 570, 0, 0, 6153, 6151, 1, 0, 0, 0, 6153, 6152, 1, 0, 0, 0, 6154, 6156, 1, 0, 0, 0, 6155, 6150, 1, 0, 0, 0, 6155, 6156, 1, 0, 0, 0, 6156, 6564, 1, 0, 0, 0, 6157, 6158, 3, 676, 338, 0, 6158, 6164, 5, 147, 0, 0, 6159, 6162, 5, 307, 0, 0, 6160, 6163, 3, 828, 414, 0, 6161, 6163, 5, 570, 0, 0, 6162, 6160, 1, 0, 0, 0, 6162, 6161, 1, 0, 0, 0, 6163, 6165, 1, 0, 0, 0, 6164, 6159, 1, 0, 0, 0, 6164, 6165, 1, 0, 0, 0, 6165, 6564, 1, 0, 0, 0, 6166, 6167, 3, 676, 338, 0, 6167, 6168, 5, 115, 0, 0, 6168, 6174, 5, 118, 0, 0, 6169, 6172, 5, 307, 0, 0, 6170, 6173, 3, 828, 414, 0, 6171, 6173, 5, 570, 0, 0, 6172, 6170, 1, 0, 0, 0, 6172, 6171, 1, 0, 0, 0, 6173, 6175, 1, 0, 0, 0, 6174, 6169, 1, 0, 0, 0, 6174, 6175, 1, 0, 0, 0, 6175, 6564, 1, 0, 0, 0, 6176, 6177, 3, 676, 338, 0, 6177, 6178, 5, 116, 0, 0, 6178, 6184, 5, 118, 0, 0, 6179, 6182, 5, 307, 0, 0, 6180, 6183, 3, 828, 414, 0, 6181, 6183, 5, 570, 0, 0, 6182, 6180, 1, 0, 0, 0, 6182, 6181, 1, 0, 0, 0, 6183, 6185, 1, 0, 0, 0, 6184, 6179, 1, 0, 0, 0, 6184, 6185, 1, 0, 0, 0, 6185, 6564, 1, 0, 0, 0, 6186, 6187, 3, 676, 338, 0, 6187, 6188, 5, 229, 0, 0, 6188, 6194, 5, 230, 0, 0, 6189, 6192, 5, 307, 0, 0, 6190, 6193, 3, 828, 414, 0, 6191, 6193, 5, 570, 0, 0, 6192, 6190, 1, 0, 0, 0, 6192, 6191, 1, 0, 0, 0, 6193, 6195, 1, 0, 0, 0, 6194, 6189, 1, 0, 0, 0, 6194, 6195, 1, 0, 0, 0, 6195, 6564, 1, 0, 0, 0, 6196, 6197, 3, 676, 338, 0, 6197, 6203, 5, 232, 0, 0, 6198, 6201, 5, 307, 0, 0, 6199, 6202, 3, 828, 414, 0, 6200, 6202, 5, 570, 0, 0, 6201, 6199, 1, 0, 0, 0, 6201, 6200, 1, 0, 0, 0, 6202, 6204, 1, 0, 0, 0, 6203, 6198, 1, 0, 0, 0, 6203, 6204, 1, 0, 0, 0, 6204, 6564, 1, 0, 0, 0, 6205, 6206, 3, 676, 338, 0, 6206, 6212, 5, 234, 0, 0, 6207, 6210, 5, 307, 0, 0, 6208, 6211, 3, 828, 414, 0, 6209, 6211, 5, 570, 0, 0, 6210, 6208, 1, 0, 0, 0, 6210, 6209, 1, 0, 0, 0, 6211, 6213, 1, 0, 0, 0, 6212, 6207, 1, 0, 0, 0, 6212, 6213, 1, 0, 0, 0, 6213, 6564, 1, 0, 0, 0, 6214, 6215, 3, 676, 338, 0, 6215, 6216, 5, 236, 0, 0, 6216, 6222, 5, 237, 0, 0, 6217, 6220, 5, 307, 0, 0, 6218, 6221, 3, 828, 414, 0, 6219, 6221, 5, 570, 0, 0, 6220, 6218, 1, 0, 0, 0, 6220, 6219, 1, 0, 0, 0, 6221, 6223, 1, 0, 0, 0, 6222, 6217, 1, 0, 0, 0, 6222, 6223, 1, 0, 0, 0, 6223, 6564, 1, 0, 0, 0, 6224, 6225, 3, 676, 338, 0, 6225, 6226, 5, 238, 0, 0, 6226, 6227, 5, 239, 0, 0, 6227, 6233, 5, 331, 0, 0, 6228, 6231, 5, 307, 0, 0, 6229, 6232, 3, 828, 414, 0, 6230, 6232, 5, 570, 0, 0, 6231, 6229, 1, 0, 0, 0, 6231, 6230, 1, 0, 0, 0, 6232, 6234, 1, 0, 0, 0, 6233, 6228, 1, 0, 0, 0, 6233, 6234, 1, 0, 0, 0, 6234, 6564, 1, 0, 0, 0, 6235, 6236, 3, 676, 338, 0, 6236, 6237, 5, 349, 0, 0, 6237, 6243, 5, 441, 0, 0, 6238, 6241, 5, 307, 0, 0, 6239, 6242, 3, 828, 414, 0, 6240, 6242, 5, 570, 0, 0, 6241, 6239, 1, 0, 0, 0, 6241, 6240, 1, 0, 0, 0, 6242, 6244, 1, 0, 0, 0, 6243, 6238, 1, 0, 0, 0, 6243, 6244, 1, 0, 0, 0, 6244, 6564, 1, 0, 0, 0, 6245, 6246, 3, 676, 338, 0, 6246, 6247, 5, 378, 0, 0, 6247, 6253, 5, 377, 0, 0, 6248, 6251, 5, 307, 0, 0, 6249, 6252, 3, 828, 414, 0, 6250, 6252, 5, 570, 0, 0, 6251, 6249, 1, 0, 0, 0, 6251, 6250, 1, 0, 0, 0, 6252, 6254, 1, 0, 0, 0, 6253, 6248, 1, 0, 0, 0, 6253, 6254, 1, 0, 0, 0, 6254, 6564, 1, 0, 0, 0, 6255, 6256, 3, 676, 338, 0, 6256, 6257, 5, 384, 0, 0, 6257, 6263, 5, 377, 0, 0, 6258, 6261, 5, 307, 0, 0, 6259, 6262, 3, 828, 414, 0, 6260, 6262, 5, 570, 0, 0, 6261, 6259, 1, 0, 0, 0, 6261, 6260, 1, 0, 0, 0, 6262, 6264, 1, 0, 0, 0, 6263, 6258, 1, 0, 0, 0, 6263, 6264, 1, 0, 0, 0, 6264, 6564, 1, 0, 0, 0, 6265, 6266, 3, 676, 338, 0, 6266, 6267, 5, 23, 0, 0, 6267, 6268, 3, 828, 414, 0, 6268, 6564, 1, 0, 0, 0, 6269, 6270, 3, 676, 338, 0, 6270, 6271, 5, 27, 0, 0, 6271, 6272, 3, 828, 414, 0, 6272, 6564, 1, 0, 0, 0, 6273, 6274, 3, 676, 338, 0, 6274, 6275, 5, 33, 0, 0, 6275, 6276, 3, 828, 414, 0, 6276, 6564, 1, 0, 0, 0, 6277, 6278, 3, 676, 338, 0, 6278, 6279, 5, 408, 0, 0, 6279, 6564, 1, 0, 0, 0, 6280, 6281, 3, 676, 338, 0, 6281, 6282, 5, 351, 0, 0, 6282, 6564, 1, 0, 0, 0, 6283, 6284, 3, 676, 338, 0, 6284, 6285, 5, 353, 0, 0, 6285, 6564, 1, 0, 0, 0, 6286, 6287, 3, 676, 338, 0, 6287, 6288, 5, 431, 0, 0, 6288, 6289, 5, 351, 0, 0, 6289, 6564, 1, 0, 0, 0, 6290, 6291, 3, 676, 338, 0, 6291, 6292, 5, 431, 0, 0, 6292, 6293, 5, 388, 0, 0, 6293, 6564, 1, 0, 0, 0, 6294, 6295, 3, 676, 338, 0, 6295, 6296, 5, 434, 0, 0, 6296, 6297, 5, 451, 0, 0, 6297, 6299, 3, 828, 414, 0, 6298, 6300, 5, 437, 0, 0, 6299, 6298, 1, 0, 0, 0, 6299, 6300, 1, 0, 0, 0, 6300, 6564, 1, 0, 0, 0, 6301, 6302, 3, 676, 338, 0, 6302, 6303, 5, 435, 0, 0, 6303, 6304, 5, 451, 0, 0, 6304, 6306, 3, 828, 414, 0, 6305, 6307, 5, 437, 0, 0, 6306, 6305, 1, 0, 0, 0, 6306, 6307, 1, 0, 0, 0, 6307, 6564, 1, 0, 0, 0, 6308, 6309, 3, 676, 338, 0, 6309, 6310, 5, 436, 0, 0, 6310, 6311, 5, 450, 0, 0, 6311, 6312, 3, 828, 414, 0, 6312, 6564, 1, 0, 0, 0, 6313, 6314, 3, 676, 338, 0, 6314, 6315, 5, 438, 0, 0, 6315, 6316, 5, 451, 0, 0, 6316, 6317, 3, 828, 414, 0, 6317, 6564, 1, 0, 0, 0, 6318, 6319, 3, 676, 338, 0, 6319, 6320, 5, 224, 0, 0, 6320, 6321, 5, 451, 0, 0, 6321, 6324, 3, 828, 414, 0, 6322, 6323, 5, 439, 0, 0, 6323, 6325, 5, 568, 0, 0, 6324, 6322, 1, 0, 0, 0, 6324, 6325, 1, 0, 0, 0, 6325, 6564, 1, 0, 0, 0, 6326, 6327, 3, 676, 338, 0, 6327, 6329, 5, 190, 0, 0, 6328, 6330, 3, 680, 340, 0, 6329, 6328, 1, 0, 0, 0, 6329, 6330, 1, 0, 0, 0, 6330, 6564, 1, 0, 0, 0, 6331, 6332, 3, 676, 338, 0, 6332, 6333, 5, 59, 0, 0, 6333, 6334, 5, 473, 0, 0, 6334, 6564, 1, 0, 0, 0, 6335, 6336, 3, 676, 338, 0, 6336, 6337, 5, 29, 0, 0, 6337, 6343, 5, 475, 0, 0, 6338, 6341, 5, 307, 0, 0, 6339, 6342, 3, 828, 414, 0, 6340, 6342, 5, 570, 0, 0, 6341, 6339, 1, 0, 0, 0, 6341, 6340, 1, 0, 0, 0, 6342, 6344, 1, 0, 0, 0, 6343, 6338, 1, 0, 0, 0, 6343, 6344, 1, 0, 0, 0, 6344, 6564, 1, 0, 0, 0, 6345, 6346, 3, 676, 338, 0, 6346, 6347, 5, 486, 0, 0, 6347, 6348, 5, 475, 0, 0, 6348, 6564, 1, 0, 0, 0, 6349, 6350, 3, 676, 338, 0, 6350, 6351, 5, 481, 0, 0, 6351, 6352, 5, 516, 0, 0, 6352, 6564, 1, 0, 0, 0, 6353, 6354, 3, 676, 338, 0, 6354, 6355, 5, 484, 0, 0, 6355, 6356, 5, 94, 0, 0, 6356, 6357, 3, 828, 414, 0, 6357, 6564, 1, 0, 0, 0, 6358, 6359, 3, 676, 338, 0, 6359, 6360, 5, 484, 0, 0, 6360, 6361, 5, 94, 0, 0, 6361, 6362, 5, 30, 0, 0, 6362, 6363, 3, 828, 414, 0, 6363, 6564, 1, 0, 0, 0, 6364, 6365, 3, 676, 338, 0, 6365, 6366, 5, 484, 0, 0, 6366, 6367, 5, 94, 0, 0, 6367, 6368, 5, 33, 0, 0, 6368, 6369, 3, 828, 414, 0, 6369, 6564, 1, 0, 0, 0, 6370, 6371, 3, 676, 338, 0, 6371, 6372, 5, 484, 0, 0, 6372, 6373, 5, 94, 0, 0, 6373, 6374, 5, 32, 0, 0, 6374, 6375, 3, 828, 414, 0, 6375, 6564, 1, 0, 0, 0, 6376, 6377, 3, 676, 338, 0, 6377, 6378, 5, 473, 0, 0, 6378, 6384, 5, 482, 0, 0, 6379, 6382, 5, 307, 0, 0, 6380, 6383, 3, 828, 414, 0, 6381, 6383, 5, 570, 0, 0, 6382, 6380, 1, 0, 0, 0, 6382, 6381, 1, 0, 0, 0, 6383, 6385, 1, 0, 0, 0, 6384, 6379, 1, 0, 0, 0, 6384, 6385, 1, 0, 0, 0, 6385, 6564, 1, 0, 0, 0, 6386, 6387, 3, 676, 338, 0, 6387, 6388, 5, 332, 0, 0, 6388, 6394, 5, 360, 0, 0, 6389, 6392, 5, 307, 0, 0, 6390, 6393, 3, 828, 414, 0, 6391, 6393, 5, 570, 0, 0, 6392, 6390, 1, 0, 0, 0, 6392, 6391, 1, 0, 0, 0, 6393, 6395, 1, 0, 0, 0, 6394, 6389, 1, 0, 0, 0, 6394, 6395, 1, 0, 0, 0, 6395, 6564, 1, 0, 0, 0, 6396, 6397, 3, 676, 338, 0, 6397, 6398, 5, 332, 0, 0, 6398, 6404, 5, 331, 0, 0, 6399, 6402, 5, 307, 0, 0, 6400, 6403, 3, 828, 414, 0, 6401, 6403, 5, 570, 0, 0, 6402, 6400, 1, 0, 0, 0, 6402, 6401, 1, 0, 0, 0, 6403, 6405, 1, 0, 0, 0, 6404, 6399, 1, 0, 0, 0, 6404, 6405, 1, 0, 0, 0, 6405, 6564, 1, 0, 0, 0, 6406, 6407, 3, 676, 338, 0, 6407, 6408, 5, 26, 0, 0, 6408, 6414, 5, 401, 0, 0, 6409, 6412, 5, 307, 0, 0, 6410, 6413, 3, 828, 414, 0, 6411, 6413, 5, 570, 0, 0, 6412, 6410, 1, 0, 0, 0, 6412, 6411, 1, 0, 0, 0, 6413, 6415, 1, 0, 0, 0, 6414, 6409, 1, 0, 0, 0, 6414, 6415, 1, 0, 0, 0, 6415, 6564, 1, 0, 0, 0, 6416, 6417, 3, 676, 338, 0, 6417, 6418, 5, 26, 0, 0, 6418, 6424, 5, 118, 0, 0, 6419, 6422, 5, 307, 0, 0, 6420, 6423, 3, 828, 414, 0, 6421, 6423, 5, 570, 0, 0, 6422, 6420, 1, 0, 0, 0, 6422, 6421, 1, 0, 0, 0, 6423, 6425, 1, 0, 0, 0, 6424, 6419, 1, 0, 0, 0, 6424, 6425, 1, 0, 0, 0, 6425, 6564, 1, 0, 0, 0, 6426, 6427, 3, 676, 338, 0, 6427, 6428, 5, 394, 0, 0, 6428, 6564, 1, 0, 0, 0, 6429, 6430, 3, 676, 338, 0, 6430, 6431, 5, 394, 0, 0, 6431, 6434, 5, 395, 0, 0, 6432, 6435, 3, 828, 414, 0, 6433, 6435, 5, 570, 0, 0, 6434, 6432, 1, 0, 0, 0, 6434, 6433, 1, 0, 0, 0, 6434, 6435, 1, 0, 0, 0, 6435, 6564, 1, 0, 0, 0, 6436, 6437, 3, 676, 338, 0, 6437, 6438, 5, 394, 0, 0, 6438, 6439, 5, 396, 0, 0, 6439, 6564, 1, 0, 0, 0, 6440, 6441, 3, 676, 338, 0, 6441, 6442, 5, 213, 0, 0, 6442, 6445, 5, 214, 0, 0, 6443, 6444, 5, 453, 0, 0, 6444, 6446, 3, 682, 341, 0, 6445, 6443, 1, 0, 0, 0, 6445, 6446, 1, 0, 0, 0, 6446, 6564, 1, 0, 0, 0, 6447, 6448, 3, 676, 338, 0, 6448, 6451, 5, 440, 0, 0, 6449, 6450, 5, 439, 0, 0, 6450, 6452, 5, 568, 0, 0, 6451, 6449, 1, 0, 0, 0, 6451, 6452, 1, 0, 0, 0, 6452, 6458, 1, 0, 0, 0, 6453, 6456, 5, 307, 0, 0, 6454, 6457, 3, 828, 414, 0, 6455, 6457, 5, 570, 0, 0, 6456, 6454, 1, 0, 0, 0, 6456, 6455, 1, 0, 0, 0, 6457, 6459, 1, 0, 0, 0, 6458, 6453, 1, 0, 0, 0, 6458, 6459, 1, 0, 0, 0, 6459, 6461, 1, 0, 0, 0, 6460, 6462, 5, 86, 0, 0, 6461, 6460, 1, 0, 0, 0, 6461, 6462, 1, 0, 0, 0, 6462, 6564, 1, 0, 0, 0, 6463, 6464, 3, 676, 338, 0, 6464, 6465, 5, 464, 0, 0, 6465, 6466, 5, 465, 0, 0, 6466, 6472, 5, 331, 0, 0, 6467, 6470, 5, 307, 0, 0, 6468, 6471, 3, 828, 414, 0, 6469, 6471, 5, 570, 0, 0, 6470, 6468, 1, 0, 0, 0, 6470, 6469, 1, 0, 0, 0, 6471, 6473, 1, 0, 0, 0, 6472, 6467, 1, 0, 0, 0, 6472, 6473, 1, 0, 0, 0, 6473, 6564, 1, 0, 0, 0, 6474, 6475, 3, 676, 338, 0, 6475, 6476, 5, 464, 0, 0, 6476, 6477, 5, 465, 0, 0, 6477, 6483, 5, 360, 0, 0, 6478, 6481, 5, 307, 0, 0, 6479, 6482, 3, 828, 414, 0, 6480, 6482, 5, 570, 0, 0, 6481, 6479, 1, 0, 0, 0, 6481, 6480, 1, 0, 0, 0, 6482, 6484, 1, 0, 0, 0, 6483, 6478, 1, 0, 0, 0, 6483, 6484, 1, 0, 0, 0, 6484, 6564, 1, 0, 0, 0, 6485, 6486, 3, 676, 338, 0, 6486, 6487, 5, 464, 0, 0, 6487, 6493, 5, 121, 0, 0, 6488, 6491, 5, 307, 0, 0, 6489, 6492, 3, 828, 414, 0, 6490, 6492, 5, 570, 0, 0, 6491, 6489, 1, 0, 0, 0, 6491, 6490, 1, 0, 0, 0, 6492, 6494, 1, 0, 0, 0, 6493, 6488, 1, 0, 0, 0, 6493, 6494, 1, 0, 0, 0, 6494, 6564, 1, 0, 0, 0, 6495, 6496, 3, 676, 338, 0, 6496, 6497, 5, 468, 0, 0, 6497, 6564, 1, 0, 0, 0, 6498, 6499, 3, 676, 338, 0, 6499, 6500, 5, 411, 0, 0, 6500, 6564, 1, 0, 0, 0, 6501, 6502, 3, 676, 338, 0, 6502, 6503, 5, 373, 0, 0, 6503, 6509, 5, 408, 0, 0, 6504, 6507, 5, 307, 0, 0, 6505, 6508, 3, 828, 414, 0, 6506, 6508, 5, 570, 0, 0, 6507, 6505, 1, 0, 0, 0, 6507, 6506, 1, 0, 0, 0, 6508, 6510, 1, 0, 0, 0, 6509, 6504, 1, 0, 0, 0, 6509, 6510, 1, 0, 0, 0, 6510, 6564, 1, 0, 0, 0, 6511, 6512, 3, 676, 338, 0, 6512, 6513, 5, 329, 0, 0, 6513, 6519, 5, 360, 0, 0, 6514, 6517, 5, 307, 0, 0, 6515, 6518, 3, 828, 414, 0, 6516, 6518, 5, 570, 0, 0, 6517, 6515, 1, 0, 0, 0, 6517, 6516, 1, 0, 0, 0, 6518, 6520, 1, 0, 0, 0, 6519, 6514, 1, 0, 0, 0, 6519, 6520, 1, 0, 0, 0, 6520, 6564, 1, 0, 0, 0, 6521, 6522, 3, 676, 338, 0, 6522, 6523, 5, 362, 0, 0, 6523, 6524, 5, 329, 0, 0, 6524, 6530, 5, 331, 0, 0, 6525, 6528, 5, 307, 0, 0, 6526, 6529, 3, 828, 414, 0, 6527, 6529, 5, 570, 0, 0, 6528, 6526, 1, 0, 0, 0, 6528, 6527, 1, 0, 0, 0, 6529, 6531, 1, 0, 0, 0, 6530, 6525, 1, 0, 0, 0, 6530, 6531, 1, 0, 0, 0, 6531, 6564, 1, 0, 0, 0, 6532, 6533, 3, 676, 338, 0, 6533, 6534, 5, 518, 0, 0, 6534, 6540, 5, 521, 0, 0, 6535, 6538, 5, 307, 0, 0, 6536, 6539, 3, 828, 414, 0, 6537, 6539, 5, 570, 0, 0, 6538, 6536, 1, 0, 0, 0, 6538, 6537, 1, 0, 0, 0, 6539, 6541, 1, 0, 0, 0, 6540, 6535, 1, 0, 0, 0, 6540, 6541, 1, 0, 0, 0, 6541, 6564, 1, 0, 0, 0, 6542, 6543, 3, 676, 338, 0, 6543, 6544, 5, 412, 0, 0, 6544, 6564, 1, 0, 0, 0, 6545, 6546, 3, 676, 338, 0, 6546, 6549, 5, 470, 0, 0, 6547, 6548, 5, 307, 0, 0, 6548, 6550, 5, 570, 0, 0, 6549, 6547, 1, 0, 0, 0, 6549, 6550, 1, 0, 0, 0, 6550, 6564, 1, 0, 0, 0, 6551, 6552, 3, 676, 338, 0, 6552, 6553, 5, 470, 0, 0, 6553, 6554, 5, 453, 0, 0, 6554, 6555, 5, 353, 0, 0, 6555, 6556, 5, 568, 0, 0, 6556, 6564, 1, 0, 0, 0, 6557, 6558, 3, 676, 338, 0, 6558, 6559, 5, 470, 0, 0, 6559, 6560, 5, 471, 0, 0, 6560, 6561, 5, 472, 0, 0, 6561, 6562, 5, 568, 0, 0, 6562, 6564, 1, 0, 0, 0, 6563, 6030, 1, 0, 0, 0, 6563, 6033, 1, 0, 0, 0, 6563, 6039, 1, 0, 0, 0, 6563, 6045, 1, 0, 0, 0, 6563, 6051, 1, 0, 0, 0, 6563, 6057, 1, 0, 0, 0, 6563, 6066, 1, 0, 0, 0, 6563, 6075, 1, 0, 0, 0, 6563, 6084, 1, 0, 0, 0, 6563, 6093, 1, 0, 0, 0, 6563, 6102, 1, 0, 0, 0, 6563, 6111, 1, 0, 0, 0, 6563, 6120, 1, 0, 0, 0, 6563, 6129, 1, 0, 0, 0, 6563, 6138, 1, 0, 0, 0, 6563, 6148, 1, 0, 0, 0, 6563, 6157, 1, 0, 0, 0, 6563, 6166, 1, 0, 0, 0, 6563, 6176, 1, 0, 0, 0, 6563, 6186, 1, 0, 0, 0, 6563, 6196, 1, 0, 0, 0, 6563, 6205, 1, 0, 0, 0, 6563, 6214, 1, 0, 0, 0, 6563, 6224, 1, 0, 0, 0, 6563, 6235, 1, 0, 0, 0, 6563, 6245, 1, 0, 0, 0, 6563, 6255, 1, 0, 0, 0, 6563, 6265, 1, 0, 0, 0, 6563, 6269, 1, 0, 0, 0, 6563, 6273, 1, 0, 0, 0, 6563, 6277, 1, 0, 0, 0, 6563, 6280, 1, 0, 0, 0, 6563, 6283, 1, 0, 0, 0, 6563, 6286, 1, 0, 0, 0, 6563, 6290, 1, 0, 0, 0, 6563, 6294, 1, 0, 0, 0, 6563, 6301, 1, 0, 0, 0, 6563, 6308, 1, 0, 0, 0, 6563, 6313, 1, 0, 0, 0, 6563, 6318, 1, 0, 0, 0, 6563, 6326, 1, 0, 0, 0, 6563, 6331, 1, 0, 0, 0, 6563, 6335, 1, 0, 0, 0, 6563, 6345, 1, 0, 0, 0, 6563, 6349, 1, 0, 0, 0, 6563, 6353, 1, 0, 0, 0, 6563, 6358, 1, 0, 0, 0, 6563, 6364, 1, 0, 0, 0, 6563, 6370, 1, 0, 0, 0, 6563, 6376, 1, 0, 0, 0, 6563, 6386, 1, 0, 0, 0, 6563, 6396, 1, 0, 0, 0, 6563, 6406, 1, 0, 0, 0, 6563, 6416, 1, 0, 0, 0, 6563, 6426, 1, 0, 0, 0, 6563, 6429, 1, 0, 0, 0, 6563, 6436, 1, 0, 0, 0, 6563, 6440, 1, 0, 0, 0, 6563, 6447, 1, 0, 0, 0, 6563, 6463, 1, 0, 0, 0, 6563, 6474, 1, 0, 0, 0, 6563, 6485, 1, 0, 0, 0, 6563, 6495, 1, 0, 0, 0, 6563, 6498, 1, 0, 0, 0, 6563, 6501, 1, 0, 0, 0, 6563, 6511, 1, 0, 0, 0, 6563, 6521, 1, 0, 0, 0, 6563, 6532, 1, 0, 0, 0, 6563, 6542, 1, 0, 0, 0, 6563, 6545, 1, 0, 0, 0, 6563, 6551, 1, 0, 0, 0, 6563, 6557, 1, 0, 0, 0, 6564, 679, 1, 0, 0, 0, 6565, 6566, 5, 73, 0, 0, 6566, 6571, 3, 684, 342, 0, 6567, 6568, 5, 303, 0, 0, 6568, 6570, 3, 684, 342, 0, 6569, 6567, 1, 0, 0, 0, 6570, 6573, 1, 0, 0, 0, 6571, 6569, 1, 0, 0, 0, 6571, 6572, 1, 0, 0, 0, 6572, 6579, 1, 0, 0, 0, 6573, 6571, 1, 0, 0, 0, 6574, 6577, 5, 307, 0, 0, 6575, 6578, 3, 828, 414, 0, 6576, 6578, 5, 570, 0, 0, 6577, 6575, 1, 0, 0, 0, 6577, 6576, 1, 0, 0, 0, 6578, 6580, 1, 0, 0, 0, 6579, 6574, 1, 0, 0, 0, 6579, 6580, 1, 0, 0, 0, 6580, 6587, 1, 0, 0, 0, 6581, 6584, 5, 307, 0, 0, 6582, 6585, 3, 828, 414, 0, 6583, 6585, 5, 570, 0, 0, 6584, 6582, 1, 0, 0, 0, 6584, 6583, 1, 0, 0, 0, 6585, 6587, 1, 0, 0, 0, 6586, 6565, 1, 0, 0, 0, 6586, 6581, 1, 0, 0, 0, 6587, 681, 1, 0, 0, 0, 6588, 6589, 7, 41, 0, 0, 6589, 683, 1, 0, 0, 0, 6590, 6591, 5, 462, 0, 0, 6591, 6592, 7, 42, 0, 0, 6592, 6597, 5, 566, 0, 0, 6593, 6594, 5, 570, 0, 0, 6594, 6595, 7, 42, 0, 0, 6595, 6597, 5, 566, 0, 0, 6596, 6590, 1, 0, 0, 0, 6596, 6593, 1, 0, 0, 0, 6597, 685, 1, 0, 0, 0, 6598, 6599, 5, 566, 0, 0, 6599, 6600, 5, 539, 0, 0, 6600, 6601, 3, 688, 344, 0, 6601, 687, 1, 0, 0, 0, 6602, 6607, 5, 566, 0, 0, 6603, 6607, 5, 568, 0, 0, 6604, 6607, 3, 836, 418, 0, 6605, 6607, 5, 306, 0, 0, 6606, 6602, 1, 0, 0, 0, 6606, 6603, 1, 0, 0, 0, 6606, 6604, 1, 0, 0, 0, 6606, 6605, 1, 0, 0, 0, 6607, 689, 1, 0, 0, 0, 6608, 6609, 5, 67, 0, 0, 6609, 6610, 5, 364, 0, 0, 6610, 6611, 5, 23, 0, 0, 6611, 6614, 3, 828, 414, 0, 6612, 6613, 5, 457, 0, 0, 6613, 6615, 5, 570, 0, 0, 6614, 6612, 1, 0, 0, 0, 6614, 6615, 1, 0, 0, 0, 6615, 6791, 1, 0, 0, 0, 6616, 6617, 5, 67, 0, 0, 6617, 6618, 5, 364, 0, 0, 6618, 6619, 5, 117, 0, 0, 6619, 6622, 3, 828, 414, 0, 6620, 6621, 5, 457, 0, 0, 6621, 6623, 5, 570, 0, 0, 6622, 6620, 1, 0, 0, 0, 6622, 6623, 1, 0, 0, 0, 6623, 6791, 1, 0, 0, 0, 6624, 6625, 5, 67, 0, 0, 6625, 6626, 5, 364, 0, 0, 6626, 6627, 5, 426, 0, 0, 6627, 6791, 3, 828, 414, 0, 6628, 6629, 5, 67, 0, 0, 6629, 6630, 5, 23, 0, 0, 6630, 6791, 3, 828, 414, 0, 6631, 6632, 5, 67, 0, 0, 6632, 6633, 5, 27, 0, 0, 6633, 6791, 3, 828, 414, 0, 6634, 6635, 5, 67, 0, 0, 6635, 6636, 5, 30, 0, 0, 6636, 6791, 3, 828, 414, 0, 6637, 6638, 5, 67, 0, 0, 6638, 6639, 5, 31, 0, 0, 6639, 6791, 3, 828, 414, 0, 6640, 6641, 5, 67, 0, 0, 6641, 6642, 5, 32, 0, 0, 6642, 6791, 3, 828, 414, 0, 6643, 6644, 5, 67, 0, 0, 6644, 6645, 5, 33, 0, 0, 6645, 6791, 3, 828, 414, 0, 6646, 6647, 5, 67, 0, 0, 6647, 6648, 5, 34, 0, 0, 6648, 6791, 3, 828, 414, 0, 6649, 6650, 5, 67, 0, 0, 6650, 6651, 5, 35, 0, 0, 6651, 6791, 3, 828, 414, 0, 6652, 6653, 5, 67, 0, 0, 6653, 6654, 5, 28, 0, 0, 6654, 6791, 3, 828, 414, 0, 6655, 6656, 5, 67, 0, 0, 6656, 6657, 5, 37, 0, 0, 6657, 6791, 3, 828, 414, 0, 6658, 6659, 5, 67, 0, 0, 6659, 6660, 5, 115, 0, 0, 6660, 6661, 5, 117, 0, 0, 6661, 6791, 3, 828, 414, 0, 6662, 6663, 5, 67, 0, 0, 6663, 6664, 5, 116, 0, 0, 6664, 6665, 5, 117, 0, 0, 6665, 6791, 3, 828, 414, 0, 6666, 6667, 5, 67, 0, 0, 6667, 6668, 5, 29, 0, 0, 6668, 6671, 3, 830, 415, 0, 6669, 6670, 5, 140, 0, 0, 6670, 6672, 5, 86, 0, 0, 6671, 6669, 1, 0, 0, 0, 6671, 6672, 1, 0, 0, 0, 6672, 6791, 1, 0, 0, 0, 6673, 6674, 5, 67, 0, 0, 6674, 6675, 5, 29, 0, 0, 6675, 6676, 5, 474, 0, 0, 6676, 6791, 3, 828, 414, 0, 6677, 6678, 5, 67, 0, 0, 6678, 6679, 5, 486, 0, 0, 6679, 6680, 5, 474, 0, 0, 6680, 6791, 5, 566, 0, 0, 6681, 6682, 5, 67, 0, 0, 6682, 6683, 5, 481, 0, 0, 6683, 6684, 5, 486, 0, 0, 6684, 6791, 5, 566, 0, 0, 6685, 6686, 5, 67, 0, 0, 6686, 6687, 5, 332, 0, 0, 6687, 6688, 5, 359, 0, 0, 6688, 6791, 3, 828, 414, 0, 6689, 6690, 5, 67, 0, 0, 6690, 6691, 5, 332, 0, 0, 6691, 6692, 5, 330, 0, 0, 6692, 6791, 3, 828, 414, 0, 6693, 6694, 5, 67, 0, 0, 6694, 6695, 5, 26, 0, 0, 6695, 6696, 5, 23, 0, 0, 6696, 6791, 3, 828, 414, 0, 6697, 6698, 5, 67, 0, 0, 6698, 6701, 5, 394, 0, 0, 6699, 6702, 3, 828, 414, 0, 6700, 6702, 5, 570, 0, 0, 6701, 6699, 1, 0, 0, 0, 6701, 6700, 1, 0, 0, 0, 6701, 6702, 1, 0, 0, 0, 6702, 6791, 1, 0, 0, 0, 6703, 6704, 5, 67, 0, 0, 6704, 6705, 5, 216, 0, 0, 6705, 6706, 5, 94, 0, 0, 6706, 6707, 7, 1, 0, 0, 6707, 6710, 3, 828, 414, 0, 6708, 6709, 5, 189, 0, 0, 6709, 6711, 5, 570, 0, 0, 6710, 6708, 1, 0, 0, 0, 6710, 6711, 1, 0, 0, 0, 6711, 6791, 1, 0, 0, 0, 6712, 6713, 5, 67, 0, 0, 6713, 6714, 5, 431, 0, 0, 6714, 6715, 5, 551, 0, 0, 6715, 6791, 3, 696, 348, 0, 6716, 6717, 5, 67, 0, 0, 6717, 6718, 5, 464, 0, 0, 6718, 6719, 5, 465, 0, 0, 6719, 6720, 5, 330, 0, 0, 6720, 6791, 3, 828, 414, 0, 6721, 6722, 5, 67, 0, 0, 6722, 6723, 5, 373, 0, 0, 6723, 6724, 5, 372, 0, 0, 6724, 6791, 3, 828, 414, 0, 6725, 6726, 5, 67, 0, 0, 6726, 6791, 5, 468, 0, 0, 6727, 6728, 5, 67, 0, 0, 6728, 6729, 5, 410, 0, 0, 6729, 6730, 5, 72, 0, 0, 6730, 6731, 5, 33, 0, 0, 6731, 6732, 3, 828, 414, 0, 6732, 6733, 5, 189, 0, 0, 6733, 6734, 3, 830, 415, 0, 6734, 6791, 1, 0, 0, 0, 6735, 6736, 5, 67, 0, 0, 6736, 6737, 5, 410, 0, 0, 6737, 6738, 5, 72, 0, 0, 6738, 6739, 5, 34, 0, 0, 6739, 6740, 3, 828, 414, 0, 6740, 6741, 5, 189, 0, 0, 6741, 6742, 3, 830, 415, 0, 6742, 6791, 1, 0, 0, 0, 6743, 6744, 5, 67, 0, 0, 6744, 6745, 5, 229, 0, 0, 6745, 6746, 5, 230, 0, 0, 6746, 6791, 3, 828, 414, 0, 6747, 6748, 5, 67, 0, 0, 6748, 6749, 5, 231, 0, 0, 6749, 6791, 3, 828, 414, 0, 6750, 6751, 5, 67, 0, 0, 6751, 6752, 5, 233, 0, 0, 6752, 6791, 3, 828, 414, 0, 6753, 6754, 5, 67, 0, 0, 6754, 6755, 5, 236, 0, 0, 6755, 6756, 5, 333, 0, 0, 6756, 6791, 3, 828, 414, 0, 6757, 6758, 5, 67, 0, 0, 6758, 6759, 5, 238, 0, 0, 6759, 6760, 5, 239, 0, 0, 6760, 6761, 5, 330, 0, 0, 6761, 6791, 3, 828, 414, 0, 6762, 6763, 5, 67, 0, 0, 6763, 6764, 5, 349, 0, 0, 6764, 6765, 5, 440, 0, 0, 6765, 6791, 3, 828, 414, 0, 6766, 6767, 5, 67, 0, 0, 6767, 6768, 5, 378, 0, 0, 6768, 6769, 5, 376, 0, 0, 6769, 6791, 3, 828, 414, 0, 6770, 6771, 5, 67, 0, 0, 6771, 6772, 5, 384, 0, 0, 6772, 6773, 5, 376, 0, 0, 6773, 6791, 3, 828, 414, 0, 6774, 6775, 5, 67, 0, 0, 6775, 6776, 5, 329, 0, 0, 6776, 6777, 5, 359, 0, 0, 6777, 6791, 3, 828, 414, 0, 6778, 6779, 5, 67, 0, 0, 6779, 6780, 5, 362, 0, 0, 6780, 6781, 5, 329, 0, 0, 6781, 6782, 5, 330, 0, 0, 6782, 6791, 3, 828, 414, 0, 6783, 6784, 5, 67, 0, 0, 6784, 6785, 5, 518, 0, 0, 6785, 6786, 5, 520, 0, 0, 6786, 6791, 3, 828, 414, 0, 6787, 6788, 5, 67, 0, 0, 6788, 6789, 5, 410, 0, 0, 6789, 6791, 3, 830, 415, 0, 6790, 6608, 1, 0, 0, 0, 6790, 6616, 1, 0, 0, 0, 6790, 6624, 1, 0, 0, 0, 6790, 6628, 1, 0, 0, 0, 6790, 6631, 1, 0, 0, 0, 6790, 6634, 1, 0, 0, 0, 6790, 6637, 1, 0, 0, 0, 6790, 6640, 1, 0, 0, 0, 6790, 6643, 1, 0, 0, 0, 6790, 6646, 1, 0, 0, 0, 6790, 6649, 1, 0, 0, 0, 6790, 6652, 1, 0, 0, 0, 6790, 6655, 1, 0, 0, 0, 6790, 6658, 1, 0, 0, 0, 6790, 6662, 1, 0, 0, 0, 6790, 6666, 1, 0, 0, 0, 6790, 6673, 1, 0, 0, 0, 6790, 6677, 1, 0, 0, 0, 6790, 6681, 1, 0, 0, 0, 6790, 6685, 1, 0, 0, 0, 6790, 6689, 1, 0, 0, 0, 6790, 6693, 1, 0, 0, 0, 6790, 6697, 1, 0, 0, 0, 6790, 6703, 1, 0, 0, 0, 6790, 6712, 1, 0, 0, 0, 6790, 6716, 1, 0, 0, 0, 6790, 6721, 1, 0, 0, 0, 6790, 6725, 1, 0, 0, 0, 6790, 6727, 1, 0, 0, 0, 6790, 6735, 1, 0, 0, 0, 6790, 6743, 1, 0, 0, 0, 6790, 6747, 1, 0, 0, 0, 6790, 6750, 1, 0, 0, 0, 6790, 6753, 1, 0, 0, 0, 6790, 6757, 1, 0, 0, 0, 6790, 6762, 1, 0, 0, 0, 6790, 6766, 1, 0, 0, 0, 6790, 6770, 1, 0, 0, 0, 6790, 6774, 1, 0, 0, 0, 6790, 6778, 1, 0, 0, 0, 6790, 6783, 1, 0, 0, 0, 6790, 6787, 1, 0, 0, 0, 6791, 691, 1, 0, 0, 0, 6792, 6794, 5, 71, 0, 0, 6793, 6795, 7, 43, 0, 0, 6794, 6793, 1, 0, 0, 0, 6794, 6795, 1, 0, 0, 0, 6795, 6796, 1, 0, 0, 0, 6796, 6797, 3, 704, 352, 0, 6797, 6798, 5, 72, 0, 0, 6798, 6799, 5, 431, 0, 0, 6799, 6800, 5, 551, 0, 0, 6800, 6805, 3, 696, 348, 0, 6801, 6803, 5, 77, 0, 0, 6802, 6801, 1, 0, 0, 0, 6802, 6803, 1, 0, 0, 0, 6803, 6804, 1, 0, 0, 0, 6804, 6806, 5, 570, 0, 0, 6805, 6802, 1, 0, 0, 0, 6805, 6806, 1, 0, 0, 0, 6806, 6810, 1, 0, 0, 0, 6807, 6809, 3, 694, 347, 0, 6808, 6807, 1, 0, 0, 0, 6809, 6812, 1, 0, 0, 0, 6810, 6808, 1, 0, 0, 0, 6810, 6811, 1, 0, 0, 0, 6811, 6815, 1, 0, 0, 0, 6812, 6810, 1, 0, 0, 0, 6813, 6814, 5, 73, 0, 0, 6814, 6816, 3, 784, 392, 0, 6815, 6813, 1, 0, 0, 0, 6815, 6816, 1, 0, 0, 0, 6816, 6823, 1, 0, 0, 0, 6817, 6818, 5, 8, 0, 0, 6818, 6821, 3, 732, 366, 0, 6819, 6820, 5, 74, 0, 0, 6820, 6822, 3, 784, 392, 0, 6821, 6819, 1, 0, 0, 0, 6821, 6822, 1, 0, 0, 0, 6822, 6824, 1, 0, 0, 0, 6823, 6817, 1, 0, 0, 0, 6823, 6824, 1, 0, 0, 0, 6824, 6827, 1, 0, 0, 0, 6825, 6826, 5, 9, 0, 0, 6826, 6828, 3, 728, 364, 0, 6827, 6825, 1, 0, 0, 0, 6827, 6828, 1, 0, 0, 0, 6828, 6831, 1, 0, 0, 0, 6829, 6830, 5, 76, 0, 0, 6830, 6832, 5, 568, 0, 0, 6831, 6829, 1, 0, 0, 0, 6831, 6832, 1, 0, 0, 0, 6832, 6835, 1, 0, 0, 0, 6833, 6834, 5, 75, 0, 0, 6834, 6836, 5, 568, 0, 0, 6835, 6833, 1, 0, 0, 0, 6835, 6836, 1, 0, 0, 0, 6836, 693, 1, 0, 0, 0, 6837, 6839, 3, 718, 359, 0, 6838, 6837, 1, 0, 0, 0, 6838, 6839, 1, 0, 0, 0, 6839, 6840, 1, 0, 0, 0, 6840, 6841, 5, 87, 0, 0, 6841, 6842, 5, 431, 0, 0, 6842, 6843, 5, 551, 0, 0, 6843, 6848, 3, 696, 348, 0, 6844, 6846, 5, 77, 0, 0, 6845, 6844, 1, 0, 0, 0, 6845, 6846, 1, 0, 0, 0, 6846, 6847, 1, 0, 0, 0, 6847, 6849, 5, 570, 0, 0, 6848, 6845, 1, 0, 0, 0, 6848, 6849, 1, 0, 0, 0, 6849, 6852, 1, 0, 0, 0, 6850, 6851, 5, 94, 0, 0, 6851, 6853, 3, 784, 392, 0, 6852, 6850, 1, 0, 0, 0, 6852, 6853, 1, 0, 0, 0, 6853, 695, 1, 0, 0, 0, 6854, 6855, 7, 44, 0, 0, 6855, 697, 1, 0, 0, 0, 6856, 6864, 3, 700, 350, 0, 6857, 6859, 5, 126, 0, 0, 6858, 6860, 5, 86, 0, 0, 6859, 6858, 1, 0, 0, 0, 6859, 6860, 1, 0, 0, 0, 6860, 6861, 1, 0, 0, 0, 6861, 6863, 3, 700, 350, 0, 6862, 6857, 1, 0, 0, 0, 6863, 6866, 1, 0, 0, 0, 6864, 6862, 1, 0, 0, 0, 6864, 6865, 1, 0, 0, 0, 6865, 699, 1, 0, 0, 0, 6866, 6864, 1, 0, 0, 0, 6867, 6869, 3, 702, 351, 0, 6868, 6870, 3, 710, 355, 0, 6869, 6868, 1, 0, 0, 0, 6869, 6870, 1, 0, 0, 0, 6870, 6872, 1, 0, 0, 0, 6871, 6873, 3, 720, 360, 0, 6872, 6871, 1, 0, 0, 0, 6872, 6873, 1, 0, 0, 0, 6873, 6875, 1, 0, 0, 0, 6874, 6876, 3, 722, 361, 0, 6875, 6874, 1, 0, 0, 0, 6875, 6876, 1, 0, 0, 0, 6876, 6878, 1, 0, 0, 0, 6877, 6879, 3, 724, 362, 0, 6878, 6877, 1, 0, 0, 0, 6878, 6879, 1, 0, 0, 0, 6879, 6881, 1, 0, 0, 0, 6880, 6882, 3, 726, 363, 0, 6881, 6880, 1, 0, 0, 0, 6881, 6882, 1, 0, 0, 0, 6882, 6884, 1, 0, 0, 0, 6883, 6885, 3, 734, 367, 0, 6884, 6883, 1, 0, 0, 0, 6884, 6885, 1, 0, 0, 0, 6885, 6904, 1, 0, 0, 0, 6886, 6888, 3, 710, 355, 0, 6887, 6889, 3, 720, 360, 0, 6888, 6887, 1, 0, 0, 0, 6888, 6889, 1, 0, 0, 0, 6889, 6891, 1, 0, 0, 0, 6890, 6892, 3, 722, 361, 0, 6891, 6890, 1, 0, 0, 0, 6891, 6892, 1, 0, 0, 0, 6892, 6894, 1, 0, 0, 0, 6893, 6895, 3, 724, 362, 0, 6894, 6893, 1, 0, 0, 0, 6894, 6895, 1, 0, 0, 0, 6895, 6896, 1, 0, 0, 0, 6896, 6898, 3, 702, 351, 0, 6897, 6899, 3, 726, 363, 0, 6898, 6897, 1, 0, 0, 0, 6898, 6899, 1, 0, 0, 0, 6899, 6901, 1, 0, 0, 0, 6900, 6902, 3, 734, 367, 0, 6901, 6900, 1, 0, 0, 0, 6901, 6902, 1, 0, 0, 0, 6902, 6904, 1, 0, 0, 0, 6903, 6867, 1, 0, 0, 0, 6903, 6886, 1, 0, 0, 0, 6904, 701, 1, 0, 0, 0, 6905, 6907, 5, 71, 0, 0, 6906, 6908, 7, 43, 0, 0, 6907, 6906, 1, 0, 0, 0, 6907, 6908, 1, 0, 0, 0, 6908, 6909, 1, 0, 0, 0, 6909, 6910, 3, 704, 352, 0, 6910, 703, 1, 0, 0, 0, 6911, 6921, 5, 544, 0, 0, 6912, 6917, 3, 706, 353, 0, 6913, 6914, 5, 550, 0, 0, 6914, 6916, 3, 706, 353, 0, 6915, 6913, 1, 0, 0, 0, 6916, 6919, 1, 0, 0, 0, 6917, 6915, 1, 0, 0, 0, 6917, 6918, 1, 0, 0, 0, 6918, 6921, 1, 0, 0, 0, 6919, 6917, 1, 0, 0, 0, 6920, 6911, 1, 0, 0, 0, 6920, 6912, 1, 0, 0, 0, 6921, 705, 1, 0, 0, 0, 6922, 6925, 3, 784, 392, 0, 6923, 6924, 5, 77, 0, 0, 6924, 6926, 3, 708, 354, 0, 6925, 6923, 1, 0, 0, 0, 6925, 6926, 1, 0, 0, 0, 6926, 6933, 1, 0, 0, 0, 6927, 6930, 3, 812, 406, 0, 6928, 6929, 5, 77, 0, 0, 6929, 6931, 3, 708, 354, 0, 6930, 6928, 1, 0, 0, 0, 6930, 6931, 1, 0, 0, 0, 6931, 6933, 1, 0, 0, 0, 6932, 6922, 1, 0, 0, 0, 6932, 6927, 1, 0, 0, 0, 6933, 707, 1, 0, 0, 0, 6934, 6937, 5, 570, 0, 0, 6935, 6937, 3, 850, 425, 0, 6936, 6934, 1, 0, 0, 0, 6936, 6935, 1, 0, 0, 0, 6937, 709, 1, 0, 0, 0, 6938, 6939, 5, 72, 0, 0, 6939, 6943, 3, 712, 356, 0, 6940, 6942, 3, 714, 357, 0, 6941, 6940, 1, 0, 0, 0, 6942, 6945, 1, 0, 0, 0, 6943, 6941, 1, 0, 0, 0, 6943, 6944, 1, 0, 0, 0, 6944, 711, 1, 0, 0, 0, 6945, 6943, 1, 0, 0, 0, 6946, 6951, 3, 828, 414, 0, 6947, 6949, 5, 77, 0, 0, 6948, 6947, 1, 0, 0, 0, 6948, 6949, 1, 0, 0, 0, 6949, 6950, 1, 0, 0, 0, 6950, 6952, 5, 570, 0, 0, 6951, 6948, 1, 0, 0, 0, 6951, 6952, 1, 0, 0, 0, 6952, 6963, 1, 0, 0, 0, 6953, 6954, 5, 552, 0, 0, 6954, 6955, 3, 698, 349, 0, 6955, 6960, 5, 553, 0, 0, 6956, 6958, 5, 77, 0, 0, 6957, 6956, 1, 0, 0, 0, 6957, 6958, 1, 0, 0, 0, 6958, 6959, 1, 0, 0, 0, 6959, 6961, 5, 570, 0, 0, 6960, 6957, 1, 0, 0, 0, 6960, 6961, 1, 0, 0, 0, 6961, 6963, 1, 0, 0, 0, 6962, 6946, 1, 0, 0, 0, 6962, 6953, 1, 0, 0, 0, 6963, 713, 1, 0, 0, 0, 6964, 6966, 3, 718, 359, 0, 6965, 6964, 1, 0, 0, 0, 6965, 6966, 1, 0, 0, 0, 6966, 6967, 1, 0, 0, 0, 6967, 6968, 5, 87, 0, 0, 6968, 6971, 3, 712, 356, 0, 6969, 6970, 5, 94, 0, 0, 6970, 6972, 3, 784, 392, 0, 6971, 6969, 1, 0, 0, 0, 6971, 6972, 1, 0, 0, 0, 6972, 6985, 1, 0, 0, 0, 6973, 6975, 3, 718, 359, 0, 6974, 6973, 1, 0, 0, 0, 6974, 6975, 1, 0, 0, 0, 6975, 6976, 1, 0, 0, 0, 6976, 6977, 5, 87, 0, 0, 6977, 6982, 3, 716, 358, 0, 6978, 6980, 5, 77, 0, 0, 6979, 6978, 1, 0, 0, 0, 6979, 6980, 1, 0, 0, 0, 6980, 6981, 1, 0, 0, 0, 6981, 6983, 5, 570, 0, 0, 6982, 6979, 1, 0, 0, 0, 6982, 6983, 1, 0, 0, 0, 6983, 6985, 1, 0, 0, 0, 6984, 6965, 1, 0, 0, 0, 6984, 6974, 1, 0, 0, 0, 6985, 715, 1, 0, 0, 0, 6986, 6987, 5, 570, 0, 0, 6987, 6988, 5, 545, 0, 0, 6988, 6989, 3, 828, 414, 0, 6989, 6990, 5, 545, 0, 0, 6990, 6991, 3, 828, 414, 0, 6991, 6997, 1, 0, 0, 0, 6992, 6993, 3, 828, 414, 0, 6993, 6994, 5, 545, 0, 0, 6994, 6995, 3, 828, 414, 0, 6995, 6997, 1, 0, 0, 0, 6996, 6986, 1, 0, 0, 0, 6996, 6992, 1, 0, 0, 0, 6997, 717, 1, 0, 0, 0, 6998, 7000, 5, 88, 0, 0, 6999, 7001, 5, 91, 0, 0, 7000, 6999, 1, 0, 0, 0, 7000, 7001, 1, 0, 0, 0, 7001, 7013, 1, 0, 0, 0, 7002, 7004, 5, 89, 0, 0, 7003, 7005, 5, 91, 0, 0, 7004, 7003, 1, 0, 0, 0, 7004, 7005, 1, 0, 0, 0, 7005, 7013, 1, 0, 0, 0, 7006, 7013, 5, 90, 0, 0, 7007, 7009, 5, 92, 0, 0, 7008, 7010, 5, 91, 0, 0, 7009, 7008, 1, 0, 0, 0, 7009, 7010, 1, 0, 0, 0, 7010, 7013, 1, 0, 0, 0, 7011, 7013, 5, 93, 0, 0, 7012, 6998, 1, 0, 0, 0, 7012, 7002, 1, 0, 0, 0, 7012, 7006, 1, 0, 0, 0, 7012, 7007, 1, 0, 0, 0, 7012, 7011, 1, 0, 0, 0, 7013, 719, 1, 0, 0, 0, 7014, 7015, 5, 73, 0, 0, 7015, 7016, 3, 784, 392, 0, 7016, 721, 1, 0, 0, 0, 7017, 7018, 5, 8, 0, 0, 7018, 7019, 3, 822, 411, 0, 7019, 723, 1, 0, 0, 0, 7020, 7021, 5, 74, 0, 0, 7021, 7022, 3, 784, 392, 0, 7022, 725, 1, 0, 0, 0, 7023, 7024, 5, 9, 0, 0, 7024, 7025, 3, 728, 364, 0, 7025, 727, 1, 0, 0, 0, 7026, 7031, 3, 730, 365, 0, 7027, 7028, 5, 550, 0, 0, 7028, 7030, 3, 730, 365, 0, 7029, 7027, 1, 0, 0, 0, 7030, 7033, 1, 0, 0, 0, 7031, 7029, 1, 0, 0, 0, 7031, 7032, 1, 0, 0, 0, 7032, 729, 1, 0, 0, 0, 7033, 7031, 1, 0, 0, 0, 7034, 7036, 3, 784, 392, 0, 7035, 7037, 7, 10, 0, 0, 7036, 7035, 1, 0, 0, 0, 7036, 7037, 1, 0, 0, 0, 7037, 731, 1, 0, 0, 0, 7038, 7043, 3, 784, 392, 0, 7039, 7040, 5, 550, 0, 0, 7040, 7042, 3, 784, 392, 0, 7041, 7039, 1, 0, 0, 0, 7042, 7045, 1, 0, 0, 0, 7043, 7041, 1, 0, 0, 0, 7043, 7044, 1, 0, 0, 0, 7044, 733, 1, 0, 0, 0, 7045, 7043, 1, 0, 0, 0, 7046, 7047, 5, 76, 0, 0, 7047, 7050, 5, 568, 0, 0, 7048, 7049, 5, 75, 0, 0, 7049, 7051, 5, 568, 0, 0, 7050, 7048, 1, 0, 0, 0, 7050, 7051, 1, 0, 0, 0, 7051, 7059, 1, 0, 0, 0, 7052, 7053, 5, 75, 0, 0, 7053, 7056, 5, 568, 0, 0, 7054, 7055, 5, 76, 0, 0, 7055, 7057, 5, 568, 0, 0, 7056, 7054, 1, 0, 0, 0, 7056, 7057, 1, 0, 0, 0, 7057, 7059, 1, 0, 0, 0, 7058, 7046, 1, 0, 0, 0, 7058, 7052, 1, 0, 0, 0, 7059, 735, 1, 0, 0, 0, 7060, 7077, 3, 740, 370, 0, 7061, 7077, 3, 742, 371, 0, 7062, 7077, 3, 744, 372, 0, 7063, 7077, 3, 746, 373, 0, 7064, 7077, 3, 748, 374, 0, 7065, 7077, 3, 750, 375, 0, 7066, 7077, 3, 752, 376, 0, 7067, 7077, 3, 754, 377, 0, 7068, 7077, 3, 738, 369, 0, 7069, 7077, 3, 760, 380, 0, 7070, 7077, 3, 766, 383, 0, 7071, 7077, 3, 768, 384, 0, 7072, 7077, 3, 782, 391, 0, 7073, 7077, 3, 770, 385, 0, 7074, 7077, 3, 774, 387, 0, 7075, 7077, 3, 780, 390, 0, 7076, 7060, 1, 0, 0, 0, 7076, 7061, 1, 0, 0, 0, 7076, 7062, 1, 0, 0, 0, 7076, 7063, 1, 0, 0, 0, 7076, 7064, 1, 0, 0, 0, 7076, 7065, 1, 0, 0, 0, 7076, 7066, 1, 0, 0, 0, 7076, 7067, 1, 0, 0, 0, 7076, 7068, 1, 0, 0, 0, 7076, 7069, 1, 0, 0, 0, 7076, 7070, 1, 0, 0, 0, 7076, 7071, 1, 0, 0, 0, 7076, 7072, 1, 0, 0, 0, 7076, 7073, 1, 0, 0, 0, 7076, 7074, 1, 0, 0, 0, 7076, 7075, 1, 0, 0, 0, 7077, 737, 1, 0, 0, 0, 7078, 7079, 5, 159, 0, 0, 7079, 7080, 5, 566, 0, 0, 7080, 739, 1, 0, 0, 0, 7081, 7082, 5, 56, 0, 0, 7082, 7083, 5, 450, 0, 0, 7083, 7084, 5, 59, 0, 0, 7084, 7087, 5, 566, 0, 0, 7085, 7086, 5, 61, 0, 0, 7086, 7088, 5, 566, 0, 0, 7087, 7085, 1, 0, 0, 0, 7087, 7088, 1, 0, 0, 0, 7088, 7089, 1, 0, 0, 0, 7089, 7090, 5, 62, 0, 0, 7090, 7105, 5, 566, 0, 0, 7091, 7092, 5, 56, 0, 0, 7092, 7093, 5, 58, 0, 0, 7093, 7105, 5, 566, 0, 0, 7094, 7095, 5, 56, 0, 0, 7095, 7096, 5, 60, 0, 0, 7096, 7097, 5, 63, 0, 0, 7097, 7098, 5, 566, 0, 0, 7098, 7099, 5, 64, 0, 0, 7099, 7102, 5, 568, 0, 0, 7100, 7101, 5, 62, 0, 0, 7101, 7103, 5, 566, 0, 0, 7102, 7100, 1, 0, 0, 0, 7102, 7103, 1, 0, 0, 0, 7103, 7105, 1, 0, 0, 0, 7104, 7081, 1, 0, 0, 0, 7104, 7091, 1, 0, 0, 0, 7104, 7094, 1, 0, 0, 0, 7105, 741, 1, 0, 0, 0, 7106, 7107, 5, 57, 0, 0, 7107, 743, 1, 0, 0, 0, 7108, 7125, 5, 416, 0, 0, 7109, 7110, 5, 417, 0, 0, 7110, 7112, 5, 431, 0, 0, 7111, 7113, 5, 92, 0, 0, 7112, 7111, 1, 0, 0, 0, 7112, 7113, 1, 0, 0, 0, 7113, 7115, 1, 0, 0, 0, 7114, 7116, 5, 195, 0, 0, 7115, 7114, 1, 0, 0, 0, 7115, 7116, 1, 0, 0, 0, 7116, 7118, 1, 0, 0, 0, 7117, 7119, 5, 432, 0, 0, 7118, 7117, 1, 0, 0, 0, 7118, 7119, 1, 0, 0, 0, 7119, 7121, 1, 0, 0, 0, 7120, 7122, 5, 433, 0, 0, 7121, 7120, 1, 0, 0, 0, 7121, 7122, 1, 0, 0, 0, 7122, 7125, 1, 0, 0, 0, 7123, 7125, 5, 417, 0, 0, 7124, 7108, 1, 0, 0, 0, 7124, 7109, 1, 0, 0, 0, 7124, 7123, 1, 0, 0, 0, 7125, 745, 1, 0, 0, 0, 7126, 7127, 5, 418, 0, 0, 7127, 747, 1, 0, 0, 0, 7128, 7129, 5, 419, 0, 0, 7129, 749, 1, 0, 0, 0, 7130, 7131, 5, 420, 0, 0, 7131, 7132, 5, 421, 0, 0, 7132, 7133, 5, 566, 0, 0, 7133, 751, 1, 0, 0, 0, 7134, 7135, 5, 420, 0, 0, 7135, 7136, 5, 60, 0, 0, 7136, 7137, 5, 566, 0, 0, 7137, 753, 1, 0, 0, 0, 7138, 7140, 5, 422, 0, 0, 7139, 7141, 3, 756, 378, 0, 7140, 7139, 1, 0, 0, 0, 7140, 7141, 1, 0, 0, 0, 7141, 7144, 1, 0, 0, 0, 7142, 7143, 5, 457, 0, 0, 7143, 7145, 3, 758, 379, 0, 7144, 7142, 1, 0, 0, 0, 7144, 7145, 1, 0, 0, 0, 7145, 7150, 1, 0, 0, 0, 7146, 7147, 5, 65, 0, 0, 7147, 7148, 5, 422, 0, 0, 7148, 7150, 5, 423, 0, 0, 7149, 7138, 1, 0, 0, 0, 7149, 7146, 1, 0, 0, 0, 7150, 755, 1, 0, 0, 0, 7151, 7152, 3, 828, 414, 0, 7152, 7153, 5, 551, 0, 0, 7153, 7154, 5, 544, 0, 0, 7154, 7158, 1, 0, 0, 0, 7155, 7158, 3, 828, 414, 0, 7156, 7158, 5, 544, 0, 0, 7157, 7151, 1, 0, 0, 0, 7157, 7155, 1, 0, 0, 0, 7157, 7156, 1, 0, 0, 0, 7158, 757, 1, 0, 0, 0, 7159, 7160, 7, 45, 0, 0, 7160, 759, 1, 0, 0, 0, 7161, 7162, 5, 68, 0, 0, 7162, 7166, 3, 762, 381, 0, 7163, 7164, 5, 68, 0, 0, 7164, 7166, 5, 86, 0, 0, 7165, 7161, 1, 0, 0, 0, 7165, 7163, 1, 0, 0, 0, 7166, 761, 1, 0, 0, 0, 7167, 7172, 3, 764, 382, 0, 7168, 7169, 5, 550, 0, 0, 7169, 7171, 3, 764, 382, 0, 7170, 7168, 1, 0, 0, 0, 7171, 7174, 1, 0, 0, 0, 7172, 7170, 1, 0, 0, 0, 7172, 7173, 1, 0, 0, 0, 7173, 763, 1, 0, 0, 0, 7174, 7172, 1, 0, 0, 0, 7175, 7176, 7, 46, 0, 0, 7176, 765, 1, 0, 0, 0, 7177, 7178, 5, 69, 0, 0, 7178, 7179, 5, 358, 0, 0, 7179, 767, 1, 0, 0, 0, 7180, 7181, 5, 70, 0, 0, 7181, 7182, 5, 566, 0, 0, 7182, 769, 1, 0, 0, 0, 7183, 7184, 5, 458, 0, 0, 7184, 7185, 5, 56, 0, 0, 7185, 7186, 5, 570, 0, 0, 7186, 7187, 5, 566, 0, 0, 7187, 7188, 5, 77, 0, 0, 7188, 7243, 5, 570, 0, 0, 7189, 7190, 5, 458, 0, 0, 7190, 7191, 5, 57, 0, 0, 7191, 7243, 5, 570, 0, 0, 7192, 7193, 5, 458, 0, 0, 7193, 7243, 5, 408, 0, 0, 7194, 7195, 5, 458, 0, 0, 7195, 7196, 5, 570, 0, 0, 7196, 7197, 5, 65, 0, 0, 7197, 7243, 5, 570, 0, 0, 7198, 7199, 5, 458, 0, 0, 7199, 7200, 5, 570, 0, 0, 7200, 7201, 5, 67, 0, 0, 7201, 7243, 5, 570, 0, 0, 7202, 7203, 5, 458, 0, 0, 7203, 7204, 5, 570, 0, 0, 7204, 7205, 5, 385, 0, 0, 7205, 7206, 5, 386, 0, 0, 7206, 7207, 5, 381, 0, 0, 7207, 7220, 3, 830, 415, 0, 7208, 7209, 5, 388, 0, 0, 7209, 7210, 5, 552, 0, 0, 7210, 7215, 3, 830, 415, 0, 7211, 7212, 5, 550, 0, 0, 7212, 7214, 3, 830, 415, 0, 7213, 7211, 1, 0, 0, 0, 7214, 7217, 1, 0, 0, 0, 7215, 7213, 1, 0, 0, 0, 7215, 7216, 1, 0, 0, 0, 7216, 7218, 1, 0, 0, 0, 7217, 7215, 1, 0, 0, 0, 7218, 7219, 5, 553, 0, 0, 7219, 7221, 1, 0, 0, 0, 7220, 7208, 1, 0, 0, 0, 7220, 7221, 1, 0, 0, 0, 7221, 7234, 1, 0, 0, 0, 7222, 7223, 5, 389, 0, 0, 7223, 7224, 5, 552, 0, 0, 7224, 7229, 3, 830, 415, 0, 7225, 7226, 5, 550, 0, 0, 7226, 7228, 3, 830, 415, 0, 7227, 7225, 1, 0, 0, 0, 7228, 7231, 1, 0, 0, 0, 7229, 7227, 1, 0, 0, 0, 7229, 7230, 1, 0, 0, 0, 7230, 7232, 1, 0, 0, 0, 7231, 7229, 1, 0, 0, 0, 7232, 7233, 5, 553, 0, 0, 7233, 7235, 1, 0, 0, 0, 7234, 7222, 1, 0, 0, 0, 7234, 7235, 1, 0, 0, 0, 7235, 7237, 1, 0, 0, 0, 7236, 7238, 5, 387, 0, 0, 7237, 7236, 1, 0, 0, 0, 7237, 7238, 1, 0, 0, 0, 7238, 7243, 1, 0, 0, 0, 7239, 7240, 5, 458, 0, 0, 7240, 7241, 5, 570, 0, 0, 7241, 7243, 3, 772, 386, 0, 7242, 7183, 1, 0, 0, 0, 7242, 7189, 1, 0, 0, 0, 7242, 7192, 1, 0, 0, 0, 7242, 7194, 1, 0, 0, 0, 7242, 7198, 1, 0, 0, 0, 7242, 7202, 1, 0, 0, 0, 7242, 7239, 1, 0, 0, 0, 7243, 771, 1, 0, 0, 0, 7244, 7246, 8, 47, 0, 0, 7245, 7244, 1, 0, 0, 0, 7246, 7247, 1, 0, 0, 0, 7247, 7245, 1, 0, 0, 0, 7247, 7248, 1, 0, 0, 0, 7248, 773, 1, 0, 0, 0, 7249, 7250, 5, 378, 0, 0, 7250, 7251, 5, 72, 0, 0, 7251, 7252, 3, 830, 415, 0, 7252, 7253, 5, 374, 0, 0, 7253, 7254, 7, 16, 0, 0, 7254, 7255, 5, 381, 0, 0, 7255, 7256, 3, 828, 414, 0, 7256, 7257, 5, 375, 0, 0, 7257, 7258, 5, 552, 0, 0, 7258, 7263, 3, 776, 388, 0, 7259, 7260, 5, 550, 0, 0, 7260, 7262, 3, 776, 388, 0, 7261, 7259, 1, 0, 0, 0, 7262, 7265, 1, 0, 0, 0, 7263, 7261, 1, 0, 0, 0, 7263, 7264, 1, 0, 0, 0, 7264, 7266, 1, 0, 0, 0, 7265, 7263, 1, 0, 0, 0, 7266, 7279, 5, 553, 0, 0, 7267, 7268, 5, 383, 0, 0, 7268, 7269, 5, 552, 0, 0, 7269, 7274, 3, 778, 389, 0, 7270, 7271, 5, 550, 0, 0, 7271, 7273, 3, 778, 389, 0, 7272, 7270, 1, 0, 0, 0, 7273, 7276, 1, 0, 0, 0, 7274, 7272, 1, 0, 0, 0, 7274, 7275, 1, 0, 0, 0, 7275, 7277, 1, 0, 0, 0, 7276, 7274, 1, 0, 0, 0, 7277, 7278, 5, 553, 0, 0, 7278, 7280, 1, 0, 0, 0, 7279, 7267, 1, 0, 0, 0, 7279, 7280, 1, 0, 0, 0, 7280, 7283, 1, 0, 0, 0, 7281, 7282, 5, 382, 0, 0, 7282, 7284, 5, 568, 0, 0, 7283, 7281, 1, 0, 0, 0, 7283, 7284, 1, 0, 0, 0, 7284, 7287, 1, 0, 0, 0, 7285, 7286, 5, 76, 0, 0, 7286, 7288, 5, 568, 0, 0, 7287, 7285, 1, 0, 0, 0, 7287, 7288, 1, 0, 0, 0, 7288, 775, 1, 0, 0, 0, 7289, 7290, 3, 830, 415, 0, 7290, 7291, 5, 77, 0, 0, 7291, 7292, 3, 830, 415, 0, 7292, 777, 1, 0, 0, 0, 7293, 7294, 3, 830, 415, 0, 7294, 7295, 5, 450, 0, 0, 7295, 7296, 3, 830, 415, 0, 7296, 7297, 5, 94, 0, 0, 7297, 7298, 3, 830, 415, 0, 7298, 7304, 1, 0, 0, 0, 7299, 7300, 3, 830, 415, 0, 7300, 7301, 5, 450, 0, 0, 7301, 7302, 3, 830, 415, 0, 7302, 7304, 1, 0, 0, 0, 7303, 7293, 1, 0, 0, 0, 7303, 7299, 1, 0, 0, 0, 7304, 779, 1, 0, 0, 0, 7305, 7309, 5, 570, 0, 0, 7306, 7308, 3, 830, 415, 0, 7307, 7306, 1, 0, 0, 0, 7308, 7311, 1, 0, 0, 0, 7309, 7307, 1, 0, 0, 0, 7309, 7310, 1, 0, 0, 0, 7310, 781, 1, 0, 0, 0, 7311, 7309, 1, 0, 0, 0, 7312, 7313, 5, 409, 0, 0, 7313, 7314, 5, 410, 0, 0, 7314, 7315, 3, 830, 415, 0, 7315, 7316, 5, 77, 0, 0, 7316, 7317, 5, 554, 0, 0, 7317, 7318, 3, 484, 242, 0, 7318, 7319, 5, 555, 0, 0, 7319, 783, 1, 0, 0, 0, 7320, 7321, 3, 786, 393, 0, 7321, 785, 1, 0, 0, 0, 7322, 7327, 3, 788, 394, 0, 7323, 7324, 5, 304, 0, 0, 7324, 7326, 3, 788, 394, 0, 7325, 7323, 1, 0, 0, 0, 7326, 7329, 1, 0, 0, 0, 7327, 7325, 1, 0, 0, 0, 7327, 7328, 1, 0, 0, 0, 7328, 787, 1, 0, 0, 0, 7329, 7327, 1, 0, 0, 0, 7330, 7335, 3, 790, 395, 0, 7331, 7332, 5, 303, 0, 0, 7332, 7334, 3, 790, 395, 0, 7333, 7331, 1, 0, 0, 0, 7334, 7337, 1, 0, 0, 0, 7335, 7333, 1, 0, 0, 0, 7335, 7336, 1, 0, 0, 0, 7336, 789, 1, 0, 0, 0, 7337, 7335, 1, 0, 0, 0, 7338, 7340, 5, 305, 0, 0, 7339, 7338, 1, 0, 0, 0, 7339, 7340, 1, 0, 0, 0, 7340, 7341, 1, 0, 0, 0, 7341, 7342, 3, 792, 396, 0, 7342, 791, 1, 0, 0, 0, 7343, 7372, 3, 796, 398, 0, 7344, 7345, 3, 794, 397, 0, 7345, 7346, 3, 796, 398, 0, 7346, 7373, 1, 0, 0, 0, 7347, 7373, 5, 6, 0, 0, 7348, 7373, 5, 5, 0, 0, 7349, 7350, 5, 307, 0, 0, 7350, 7353, 5, 552, 0, 0, 7351, 7354, 3, 698, 349, 0, 7352, 7354, 3, 822, 411, 0, 7353, 7351, 1, 0, 0, 0, 7353, 7352, 1, 0, 0, 0, 7354, 7355, 1, 0, 0, 0, 7355, 7356, 5, 553, 0, 0, 7356, 7373, 1, 0, 0, 0, 7357, 7359, 5, 305, 0, 0, 7358, 7357, 1, 0, 0, 0, 7358, 7359, 1, 0, 0, 0, 7359, 7360, 1, 0, 0, 0, 7360, 7361, 5, 308, 0, 0, 7361, 7362, 3, 796, 398, 0, 7362, 7363, 5, 303, 0, 0, 7363, 7364, 3, 796, 398, 0, 7364, 7373, 1, 0, 0, 0, 7365, 7367, 5, 305, 0, 0, 7366, 7365, 1, 0, 0, 0, 7366, 7367, 1, 0, 0, 0, 7367, 7368, 1, 0, 0, 0, 7368, 7369, 5, 309, 0, 0, 7369, 7373, 3, 796, 398, 0, 7370, 7371, 5, 310, 0, 0, 7371, 7373, 3, 796, 398, 0, 7372, 7344, 1, 0, 0, 0, 7372, 7347, 1, 0, 0, 0, 7372, 7348, 1, 0, 0, 0, 7372, 7349, 1, 0, 0, 0, 7372, 7358, 1, 0, 0, 0, 7372, 7366, 1, 0, 0, 0, 7372, 7370, 1, 0, 0, 0, 7372, 7373, 1, 0, 0, 0, 7373, 793, 1, 0, 0, 0, 7374, 7375, 7, 48, 0, 0, 7375, 795, 1, 0, 0, 0, 7376, 7381, 3, 798, 399, 0, 7377, 7378, 7, 49, 0, 0, 7378, 7380, 3, 798, 399, 0, 7379, 7377, 1, 0, 0, 0, 7380, 7383, 1, 0, 0, 0, 7381, 7379, 1, 0, 0, 0, 7381, 7382, 1, 0, 0, 0, 7382, 797, 1, 0, 0, 0, 7383, 7381, 1, 0, 0, 0, 7384, 7389, 3, 800, 400, 0, 7385, 7386, 7, 50, 0, 0, 7386, 7388, 3, 800, 400, 0, 7387, 7385, 1, 0, 0, 0, 7388, 7391, 1, 0, 0, 0, 7389, 7387, 1, 0, 0, 0, 7389, 7390, 1, 0, 0, 0, 7390, 799, 1, 0, 0, 0, 7391, 7389, 1, 0, 0, 0, 7392, 7394, 7, 49, 0, 0, 7393, 7392, 1, 0, 0, 0, 7393, 7394, 1, 0, 0, 0, 7394, 7395, 1, 0, 0, 0, 7395, 7396, 3, 802, 401, 0, 7396, 801, 1, 0, 0, 0, 7397, 7398, 5, 552, 0, 0, 7398, 7399, 3, 784, 392, 0, 7399, 7400, 5, 553, 0, 0, 7400, 7419, 1, 0, 0, 0, 7401, 7402, 5, 552, 0, 0, 7402, 7403, 3, 698, 349, 0, 7403, 7404, 5, 553, 0, 0, 7404, 7419, 1, 0, 0, 0, 7405, 7406, 5, 311, 0, 0, 7406, 7407, 5, 552, 0, 0, 7407, 7408, 3, 698, 349, 0, 7408, 7409, 5, 553, 0, 0, 7409, 7419, 1, 0, 0, 0, 7410, 7419, 3, 806, 403, 0, 7411, 7419, 3, 804, 402, 0, 7412, 7419, 3, 808, 404, 0, 7413, 7419, 3, 408, 204, 0, 7414, 7419, 3, 400, 200, 0, 7415, 7419, 3, 812, 406, 0, 7416, 7419, 3, 814, 407, 0, 7417, 7419, 3, 820, 410, 0, 7418, 7397, 1, 0, 0, 0, 7418, 7401, 1, 0, 0, 0, 7418, 7405, 1, 0, 0, 0, 7418, 7410, 1, 0, 0, 0, 7418, 7411, 1, 0, 0, 0, 7418, 7412, 1, 0, 0, 0, 7418, 7413, 1, 0, 0, 0, 7418, 7414, 1, 0, 0, 0, 7418, 7415, 1, 0, 0, 0, 7418, 7416, 1, 0, 0, 0, 7418, 7417, 1, 0, 0, 0, 7419, 803, 1, 0, 0, 0, 7420, 7426, 5, 80, 0, 0, 7421, 7422, 5, 81, 0, 0, 7422, 7423, 3, 784, 392, 0, 7423, 7424, 5, 82, 0, 0, 7424, 7425, 3, 784, 392, 0, 7425, 7427, 1, 0, 0, 0, 7426, 7421, 1, 0, 0, 0, 7427, 7428, 1, 0, 0, 0, 7428, 7426, 1, 0, 0, 0, 7428, 7429, 1, 0, 0, 0, 7429, 7432, 1, 0, 0, 0, 7430, 7431, 5, 83, 0, 0, 7431, 7433, 3, 784, 392, 0, 7432, 7430, 1, 0, 0, 0, 7432, 7433, 1, 0, 0, 0, 7433, 7434, 1, 0, 0, 0, 7434, 7435, 5, 84, 0, 0, 7435, 805, 1, 0, 0, 0, 7436, 7437, 5, 106, 0, 0, 7437, 7438, 3, 784, 392, 0, 7438, 7439, 5, 82, 0, 0, 7439, 7440, 3, 784, 392, 0, 7440, 7441, 5, 83, 0, 0, 7441, 7442, 3, 784, 392, 0, 7442, 807, 1, 0, 0, 0, 7443, 7444, 5, 302, 0, 0, 7444, 7445, 5, 552, 0, 0, 7445, 7446, 3, 784, 392, 0, 7446, 7447, 5, 77, 0, 0, 7447, 7448, 3, 810, 405, 0, 7448, 7449, 5, 553, 0, 0, 7449, 809, 1, 0, 0, 0, 7450, 7451, 7, 51, 0, 0, 7451, 811, 1, 0, 0, 0, 7452, 7453, 7, 52, 0, 0, 7453, 7459, 5, 552, 0, 0, 7454, 7456, 5, 85, 0, 0, 7455, 7454, 1, 0, 0, 0, 7455, 7456, 1, 0, 0, 0, 7456, 7457, 1, 0, 0, 0, 7457, 7460, 3, 784, 392, 0, 7458, 7460, 5, 544, 0, 0, 7459, 7455, 1, 0, 0, 0, 7459, 7458, 1, 0, 0, 0, 7460, 7461, 1, 0, 0, 0, 7461, 7462, 5, 553, 0, 0, 7462, 813, 1, 0, 0, 0, 7463, 7464, 3, 816, 408, 0, 7464, 7466, 5, 552, 0, 0, 7465, 7467, 3, 818, 409, 0, 7466, 7465, 1, 0, 0, 0, 7466, 7467, 1, 0, 0, 0, 7467, 7468, 1, 0, 0, 0, 7468, 7469, 5, 553, 0, 0, 7469, 815, 1, 0, 0, 0, 7470, 7471, 7, 53, 0, 0, 7471, 817, 1, 0, 0, 0, 7472, 7477, 3, 784, 392, 0, 7473, 7474, 5, 550, 0, 0, 7474, 7476, 3, 784, 392, 0, 7475, 7473, 1, 0, 0, 0, 7476, 7479, 1, 0, 0, 0, 7477, 7475, 1, 0, 0, 0, 7477, 7478, 1, 0, 0, 0, 7478, 819, 1, 0, 0, 0, 7479, 7477, 1, 0, 0, 0, 7480, 7495, 3, 832, 416, 0, 7481, 7486, 5, 569, 0, 0, 7482, 7483, 5, 551, 0, 0, 7483, 7485, 3, 122, 61, 0, 7484, 7482, 1, 0, 0, 0, 7485, 7488, 1, 0, 0, 0, 7486, 7484, 1, 0, 0, 0, 7486, 7487, 1, 0, 0, 0, 7487, 7495, 1, 0, 0, 0, 7488, 7486, 1, 0, 0, 0, 7489, 7490, 5, 559, 0, 0, 7490, 7495, 3, 828, 414, 0, 7491, 7495, 3, 828, 414, 0, 7492, 7495, 5, 570, 0, 0, 7493, 7495, 5, 565, 0, 0, 7494, 7480, 1, 0, 0, 0, 7494, 7481, 1, 0, 0, 0, 7494, 7489, 1, 0, 0, 0, 7494, 7491, 1, 0, 0, 0, 7494, 7492, 1, 0, 0, 0, 7494, 7493, 1, 0, 0, 0, 7495, 821, 1, 0, 0, 0, 7496, 7501, 3, 784, 392, 0, 7497, 7498, 5, 550, 0, 0, 7498, 7500, 3, 784, 392, 0, 7499, 7497, 1, 0, 0, 0, 7500, 7503, 1, 0, 0, 0, 7501, 7499, 1, 0, 0, 0, 7501, 7502, 1, 0, 0, 0, 7502, 823, 1, 0, 0, 0, 7503, 7501, 1, 0, 0, 0, 7504, 7505, 5, 518, 0, 0, 7505, 7506, 5, 520, 0, 0, 7506, 7507, 3, 828, 414, 0, 7507, 7508, 5, 195, 0, 0, 7508, 7509, 7, 54, 0, 0, 7509, 7510, 5, 566, 0, 0, 7510, 7514, 5, 554, 0, 0, 7511, 7513, 3, 826, 413, 0, 7512, 7511, 1, 0, 0, 0, 7513, 7516, 1, 0, 0, 0, 7514, 7512, 1, 0, 0, 0, 7514, 7515, 1, 0, 0, 0, 7515, 7517, 1, 0, 0, 0, 7516, 7514, 1, 0, 0, 0, 7517, 7518, 5, 555, 0, 0, 7518, 825, 1, 0, 0, 0, 7519, 7520, 7, 55, 0, 0, 7520, 7522, 7, 16, 0, 0, 7521, 7523, 5, 549, 0, 0, 7522, 7521, 1, 0, 0, 0, 7522, 7523, 1, 0, 0, 0, 7523, 827, 1, 0, 0, 0, 7524, 7529, 3, 830, 415, 0, 7525, 7526, 5, 551, 0, 0, 7526, 7528, 3, 830, 415, 0, 7527, 7525, 1, 0, 0, 0, 7528, 7531, 1, 0, 0, 0, 7529, 7527, 1, 0, 0, 0, 7529, 7530, 1, 0, 0, 0, 7530, 829, 1, 0, 0, 0, 7531, 7529, 1, 0, 0, 0, 7532, 7536, 5, 570, 0, 0, 7533, 7536, 5, 572, 0, 0, 7534, 7536, 3, 850, 425, 0, 7535, 7532, 1, 0, 0, 0, 7535, 7533, 1, 0, 0, 0, 7535, 7534, 1, 0, 0, 0, 7536, 831, 1, 0, 0, 0, 7537, 7543, 5, 566, 0, 0, 7538, 7543, 5, 568, 0, 0, 7539, 7543, 3, 836, 418, 0, 7540, 7543, 5, 306, 0, 0, 7541, 7543, 5, 141, 0, 0, 7542, 7537, 1, 0, 0, 0, 7542, 7538, 1, 0, 0, 0, 7542, 7539, 1, 0, 0, 0, 7542, 7540, 1, 0, 0, 0, 7542, 7541, 1, 0, 0, 0, 7543, 833, 1, 0, 0, 0, 7544, 7553, 5, 556, 0, 0, 7545, 7550, 3, 832, 416, 0, 7546, 7547, 5, 550, 0, 0, 7547, 7549, 3, 832, 416, 0, 7548, 7546, 1, 0, 0, 0, 7549, 7552, 1, 0, 0, 0, 7550, 7548, 1, 0, 0, 0, 7550, 7551, 1, 0, 0, 0, 7551, 7554, 1, 0, 0, 0, 7552, 7550, 1, 0, 0, 0, 7553, 7545, 1, 0, 0, 0, 7553, 7554, 1, 0, 0, 0, 7554, 7555, 1, 0, 0, 0, 7555, 7556, 5, 557, 0, 0, 7556, 835, 1, 0, 0, 0, 7557, 7558, 7, 56, 0, 0, 7558, 837, 1, 0, 0, 0, 7559, 7560, 5, 2, 0, 0, 7560, 839, 1, 0, 0, 0, 7561, 7562, 5, 559, 0, 0, 7562, 7568, 3, 842, 421, 0, 7563, 7564, 5, 552, 0, 0, 7564, 7565, 3, 844, 422, 0, 7565, 7566, 5, 553, 0, 0, 7566, 7569, 1, 0, 0, 0, 7567, 7569, 3, 848, 424, 0, 7568, 7563, 1, 0, 0, 0, 7568, 7567, 1, 0, 0, 0, 7568, 7569, 1, 0, 0, 0, 7569, 841, 1, 0, 0, 0, 7570, 7571, 7, 57, 0, 0, 7571, 843, 1, 0, 0, 0, 7572, 7577, 3, 846, 423, 0, 7573, 7574, 5, 550, 0, 0, 7574, 7576, 3, 846, 423, 0, 7575, 7573, 1, 0, 0, 0, 7576, 7579, 1, 0, 0, 0, 7577, 7575, 1, 0, 0, 0, 7577, 7578, 1, 0, 0, 0, 7578, 845, 1, 0, 0, 0, 7579, 7577, 1, 0, 0, 0, 7580, 7581, 5, 570, 0, 0, 7581, 7582, 5, 558, 0, 0, 7582, 7585, 3, 848, 424, 0, 7583, 7585, 3, 848, 424, 0, 7584, 7580, 1, 0, 0, 0, 7584, 7583, 1, 0, 0, 0, 7585, 847, 1, 0, 0, 0, 7586, 7590, 3, 832, 416, 0, 7587, 7590, 3, 784, 392, 0, 7588, 7590, 3, 828, 414, 0, 7589, 7586, 1, 0, 0, 0, 7589, 7587, 1, 0, 0, 0, 7589, 7588, 1, 0, 0, 0, 7590, 849, 1, 0, 0, 0, 7591, 7592, 7, 58, 0, 0, 7592, 851, 1, 0, 0, 0, 873, 855, 861, 866, 869, 872, 881, 891, 900, 906, 908, 912, 915, 920, 926, 962, 970, 978, 986, 994, 1006, 1019, 1032, 1044, 1055, 1065, 1068, 1077, 1082, 1085, 1093, 1101, 1113, 1119, 1136, 1140, 1144, 1148, 1152, 1156, 1160, 1162, 1175, 1180, 1194, 1203, 1219, 1235, 1244, 1259, 1274, 1288, 1292, 1301, 1304, 1312, 1317, 1319, 1430, 1432, 1441, 1450, 1452, 1465, 1474, 1476, 1487, 1493, 1501, 1512, 1514, 1522, 1524, 1545, 1553, 1569, 1593, 1609, 1619, 1718, 1727, 1735, 1749, 1756, 1764, 1778, 1791, 1795, 1801, 1804, 1810, 1813, 1819, 1823, 1827, 1833, 1838, 1841, 1843, 1849, 1853, 1857, 1860, 1864, 1869, 1877, 1886, 1889, 1893, 1904, 1908, 1913, 1922, 1928, 1933, 1939, 1944, 1949, 1954, 1958, 1961, 1963, 1969, 2005, 2013, 2038, 2041, 2052, 2057, 2062, 2071, 2084, 2089, 2094, 2098, 2103, 2108, 2115, 2141, 2147, 2154, 2160, 2199, 2213, 2220, 2233, 2240, 2248, 2253, 2258, 2264, 2272, 2279, 2283, 2287, 2290, 2295, 2300, 2309, 2312, 2317, 2324, 2332, 2346, 2356, 2391, 2398, 2415, 2429, 2442, 2447, 2453, 2467, 2481, 2494, 2499, 2506, 2510, 2521, 2526, 2536, 2550, 2560, 2577, 2600, 2602, 2609, 2615, 2618, 2632, 2645, 2661, 2676, 2712, 2727, 2734, 2742, 2749, 2753, 2756, 2762, 2765, 2772, 2776, 2779, 2784, 2791, 2798, 2814, 2819, 2827, 2833, 2838, 2844, 2849, 2855, 2860, 2865, 2870, 2875, 2880, 2885, 2890, 2895, 2900, 2905, 2910, 2915, 2920, 2925, 2930, 2935, 2940, 2945, 2950, 2955, 2960, 2965, 2970, 2975, 2980, 2985, 2990, 2995, 3000, 3005, 3010, 3015, 3020, 3025, 3030, 3035, 3040, 3045, 3050, 3055, 3060, 3065, 3070, 3075, 3080, 3085, 3090, 3095, 3100, 3105, 3110, 3115, 3120, 3125, 3130, 3135, 3140, 3145, 3150, 3155, 3160, 3165, 3170, 3175, 3180, 3185, 3190, 3195, 3200, 3205, 3210, 3215, 3220, 3225, 3230, 3235, 3240, 3245, 3250, 3255, 3260, 3265, 3270, 3275, 3280, 3285, 3290, 3295, 3300, 3305, 3310, 3315, 3320, 3322, 3329, 3334, 3341, 3347, 3350, 3353, 3359, 3362, 3368, 3372, 3378, 3381, 3384, 3389, 3394, 3403, 3408, 3412, 3414, 3422, 3425, 3429, 3433, 3436, 3448, 3470, 3483, 3488, 3498, 3508, 3513, 3521, 3528, 3532, 3536, 3547, 3554, 3568, 3575, 3579, 3583, 3591, 3595, 3599, 3609, 3611, 3615, 3618, 3623, 3626, 3629, 3633, 3641, 3645, 3649, 3656, 3660, 3664, 3673, 3677, 3684, 3688, 3696, 3702, 3708, 3720, 3728, 3735, 3739, 3745, 3751, 3757, 3763, 3770, 3775, 3785, 3788, 3792, 3796, 3803, 3810, 3816, 3830, 3837, 3852, 3856, 3863, 3868, 3872, 3875, 3878, 3882, 3888, 3906, 3911, 3919, 3938, 3942, 3949, 3952, 3955, 3964, 3978, 3988, 3992, 4002, 4006, 4013, 4085, 4087, 4090, 4097, 4102, 4132, 4155, 4166, 4173, 4190, 4193, 4202, 4212, 4224, 4236, 4247, 4250, 4263, 4271, 4277, 4283, 4291, 4298, 4306, 4313, 4320, 4332, 4335, 4347, 4371, 4379, 4387, 4407, 4411, 4413, 4421, 4426, 4429, 4435, 4438, 4444, 4447, 4449, 4459, 4558, 4568, 4579, 4585, 4590, 4594, 4596, 4604, 4607, 4612, 4617, 4623, 4630, 4635, 4639, 4645, 4651, 4656, 4661, 4666, 4673, 4681, 4692, 4697, 4703, 4707, 4716, 4718, 4720, 4728, 4764, 4767, 4770, 4778, 4785, 4796, 4805, 4811, 4819, 4828, 4836, 4842, 4846, 4855, 4867, 4873, 4875, 4888, 4892, 4904, 4909, 4911, 4926, 4931, 4940, 4949, 4952, 4963, 4971, 5002, 5007, 5010, 5015, 5023, 5052, 5065, 5089, 5093, 5095, 5108, 5114, 5117, 5128, 5132, 5135, 5137, 5151, 5159, 5174, 5181, 5186, 5191, 5196, 5200, 5203, 5224, 5229, 5240, 5245, 5251, 5255, 5263, 5268, 5284, 5292, 5295, 5302, 5310, 5315, 5318, 5321, 5331, 5334, 5341, 5344, 5352, 5370, 5376, 5379, 5388, 5390, 5399, 5404, 5409, 5414, 5424, 5443, 5451, 5463, 5470, 5474, 5488, 5492, 5496, 5501, 5506, 5511, 5518, 5521, 5526, 5556, 5564, 5568, 5572, 5576, 5580, 5584, 5589, 5593, 5599, 5601, 5608, 5610, 5619, 5623, 5627, 5631, 5635, 5639, 5644, 5648, 5654, 5656, 5663, 5665, 5667, 5672, 5678, 5684, 5690, 5694, 5700, 5702, 5714, 5723, 5728, 5734, 5736, 5743, 5745, 5756, 5765, 5770, 5774, 5778, 5784, 5786, 5798, 5803, 5816, 5822, 5826, 5833, 5840, 5842, 5921, 5940, 5955, 5960, 5965, 5967, 5975, 5983, 5988, 5996, 6005, 6008, 6020, 6026, 6062, 6064, 6071, 6073, 6080, 6082, 6089, 6091, 6098, 6100, 6107, 6109, 6116, 6118, 6125, 6127, 6134, 6136, 6144, 6146, 6153, 6155, 6162, 6164, 6172, 6174, 6182, 6184, 6192, 6194, 6201, 6203, 6210, 6212, 6220, 6222, 6231, 6233, 6241, 6243, 6251, 6253, 6261, 6263, 6299, 6306, 6324, 6329, 6341, 6343, 6382, 6384, 6392, 6394, 6402, 6404, 6412, 6414, 6422, 6424, 6434, 6445, 6451, 6456, 6458, 6461, 6470, 6472, 6481, 6483, 6491, 6493, 6507, 6509, 6517, 6519, 6528, 6530, 6538, 6540, 6549, 6563, 6571, 6577, 6579, 6584, 6586, 6596, 6606, 6614, 6622, 6671, 6701, 6710, 6790, 6794, 6802, 6805, 6810, 6815, 6821, 6823, 6827, 6831, 6835, 6838, 6845, 6848, 6852, 6859, 6864, 6869, 6872, 6875, 6878, 6881, 6884, 6888, 6891, 6894, 6898, 6901, 6903, 6907, 6917, 6920, 6925, 6930, 6932, 6936, 6943, 6948, 6951, 6957, 6960, 6962, 6965, 6971, 6974, 6979, 6982, 6984, 6996, 7000, 7004, 7009, 7012, 7031, 7036, 7043, 7050, 7056, 7058, 7076, 7087, 7102, 7104, 7112, 7115, 7118, 7121, 7124, 7140, 7144, 7149, 7157, 7165, 7172, 7215, 7220, 7229, 7234, 7237, 7242, 7247, 7263, 7274, 7279, 7283, 7287, 7303, 7309, 7327, 7335, 7339, 7353, 7358, 7366, 7372, 7381, 7389, 7393, 7418, 7428, 7432, 7455, 7459, 7466, 7477, 7486, 7494, 7501, 7514, 7522, 7529, 7535, 7542, 7550, 7553, 7568, 7577, 7584, 7589] \ No newline at end of file diff --git a/mdl/grammar/parser/mdl_parser.go b/mdl/grammar/parser/mdl_parser.go index e37cdada..2b13a3b5 100644 --- a/mdl/grammar/parser/mdl_parser.go +++ b/mdl/grammar/parser/mdl_parser.go @@ -281,7 +281,7 @@ func mdlparserParserInit() { } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 572, 7589, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, + 4, 1, 572, 7594, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, @@ -1144,415 +1144,416 @@ func mdlparserParserInit() { 9, 387, 1, 387, 1, 387, 3, 387, 7280, 8, 387, 1, 387, 1, 387, 3, 387, 7284, 8, 387, 1, 387, 1, 387, 3, 387, 7288, 8, 387, 1, 388, 1, 388, 1, 388, 1, 388, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, 389, 1, - 389, 1, 389, 3, 389, 7304, 8, 389, 1, 390, 1, 390, 1, 391, 1, 391, 1, 391, - 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, 1, 392, 1, 392, 1, 393, 1, 393, - 1, 393, 5, 393, 7321, 8, 393, 10, 393, 12, 393, 7324, 9, 393, 1, 394, 1, - 394, 1, 394, 5, 394, 7329, 8, 394, 10, 394, 12, 394, 7332, 9, 394, 1, 395, - 3, 395, 7335, 8, 395, 1, 395, 1, 395, 1, 396, 1, 396, 1, 396, 1, 396, 1, - 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7349, 8, 396, 1, 396, - 1, 396, 1, 396, 3, 396, 7354, 8, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, - 396, 1, 396, 3, 396, 7362, 8, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, - 7368, 8, 396, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, 5, 398, 7375, 8, - 398, 10, 398, 12, 398, 7378, 9, 398, 1, 399, 1, 399, 1, 399, 5, 399, 7383, - 8, 399, 10, 399, 12, 399, 7386, 9, 399, 1, 400, 3, 400, 7389, 8, 400, 1, - 400, 1, 400, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, + 389, 1, 389, 3, 389, 7304, 8, 389, 1, 390, 1, 390, 5, 390, 7308, 8, 390, + 10, 390, 12, 390, 7311, 9, 390, 1, 391, 1, 391, 1, 391, 1, 391, 1, 391, + 1, 391, 1, 391, 1, 391, 1, 392, 1, 392, 1, 393, 1, 393, 1, 393, 5, 393, + 7326, 8, 393, 10, 393, 12, 393, 7329, 9, 393, 1, 394, 1, 394, 1, 394, 5, + 394, 7334, 8, 394, 10, 394, 12, 394, 7337, 9, 394, 1, 395, 3, 395, 7340, + 8, 395, 1, 395, 1, 395, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, + 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7354, 8, 396, 1, 396, 1, 396, 1, + 396, 3, 396, 7359, 8, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, 1, 396, + 3, 396, 7367, 8, 396, 1, 396, 1, 396, 1, 396, 1, 396, 3, 396, 7373, 8, + 396, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, 5, 398, 7380, 8, 398, 10, + 398, 12, 398, 7383, 9, 398, 1, 399, 1, 399, 1, 399, 5, 399, 7388, 8, 399, + 10, 399, 12, 399, 7391, 9, 399, 1, 400, 3, 400, 7394, 8, 400, 1, 400, 1, + 400, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, 401, 1, - 401, 1, 401, 1, 401, 1, 401, 1, 401, 3, 401, 7414, 8, 401, 1, 402, 1, 402, - 1, 402, 1, 402, 1, 402, 1, 402, 4, 402, 7422, 8, 402, 11, 402, 12, 402, - 7423, 1, 402, 1, 402, 3, 402, 7428, 8, 402, 1, 402, 1, 402, 1, 403, 1, - 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 404, 1, 404, 1, 404, 1, - 404, 1, 404, 1, 404, 1, 404, 1, 405, 1, 405, 1, 406, 1, 406, 1, 406, 3, - 406, 7451, 8, 406, 1, 406, 1, 406, 3, 406, 7455, 8, 406, 1, 406, 1, 406, - 1, 407, 1, 407, 1, 407, 3, 407, 7462, 8, 407, 1, 407, 1, 407, 1, 408, 1, - 408, 1, 409, 1, 409, 1, 409, 5, 409, 7471, 8, 409, 10, 409, 12, 409, 7474, - 9, 409, 1, 410, 1, 410, 1, 410, 1, 410, 5, 410, 7480, 8, 410, 10, 410, - 12, 410, 7483, 9, 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 3, 410, - 7490, 8, 410, 1, 411, 1, 411, 1, 411, 5, 411, 7495, 8, 411, 10, 411, 12, - 411, 7498, 9, 411, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, - 1, 412, 5, 412, 7508, 8, 412, 10, 412, 12, 412, 7511, 9, 412, 1, 412, 1, - 412, 1, 413, 1, 413, 1, 413, 3, 413, 7518, 8, 413, 1, 414, 1, 414, 1, 414, - 5, 414, 7523, 8, 414, 10, 414, 12, 414, 7526, 9, 414, 1, 415, 1, 415, 1, - 415, 3, 415, 7531, 8, 415, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 3, 416, - 7538, 8, 416, 1, 417, 1, 417, 1, 417, 1, 417, 5, 417, 7544, 8, 417, 10, - 417, 12, 417, 7547, 9, 417, 3, 417, 7549, 8, 417, 1, 417, 1, 417, 1, 418, - 1, 418, 1, 419, 1, 419, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, - 1, 420, 3, 420, 7564, 8, 420, 1, 421, 1, 421, 1, 422, 1, 422, 1, 422, 5, - 422, 7571, 8, 422, 10, 422, 12, 422, 7574, 9, 422, 1, 423, 1, 423, 1, 423, - 1, 423, 3, 423, 7580, 8, 423, 1, 424, 1, 424, 1, 424, 3, 424, 7585, 8, - 424, 1, 425, 1, 425, 1, 425, 0, 0, 426, 0, 2, 4, 6, 8, 10, 12, 14, 16, - 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, - 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, - 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, - 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, - 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, - 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, - 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, - 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, - 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, - 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, - 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, - 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, - 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, - 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, - 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, - 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, - 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, - 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, - 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, - 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, - 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, - 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, - 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, - 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, - 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, - 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, - 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, - 842, 844, 846, 848, 850, 0, 59, 2, 0, 22, 22, 454, 454, 1, 0, 33, 34, 2, - 0, 30, 30, 33, 33, 5, 0, 23, 23, 27, 28, 30, 31, 33, 33, 37, 37, 2, 0, - 478, 479, 515, 515, 2, 0, 94, 94, 515, 515, 1, 0, 414, 415, 2, 0, 17, 17, - 101, 103, 2, 0, 568, 568, 570, 570, 2, 0, 424, 424, 458, 458, 1, 0, 95, - 96, 2, 0, 12, 12, 44, 44, 2, 0, 313, 313, 449, 449, 2, 0, 39, 39, 52, 52, - 2, 0, 14, 16, 54, 55, 2, 0, 566, 566, 572, 572, 1, 0, 566, 567, 2, 0, 545, - 545, 551, 551, 3, 0, 70, 70, 136, 139, 320, 320, 2, 0, 86, 86, 569, 569, - 2, 0, 101, 101, 354, 357, 2, 0, 566, 566, 570, 570, 1, 0, 569, 570, 1, - 0, 303, 304, 6, 0, 303, 305, 536, 541, 545, 545, 549, 553, 556, 557, 565, - 569, 4, 0, 129, 129, 305, 305, 314, 315, 570, 571, 12, 0, 39, 39, 149, - 158, 161, 163, 165, 166, 168, 168, 170, 177, 181, 181, 183, 188, 197, 198, - 229, 229, 240, 245, 265, 265, 3, 0, 129, 129, 141, 141, 570, 570, 3, 0, - 269, 275, 424, 424, 570, 570, 4, 0, 136, 137, 260, 264, 313, 313, 570, - 570, 2, 0, 220, 220, 568, 568, 1, 0, 446, 448, 3, 0, 276, 276, 349, 349, - 351, 352, 2, 0, 72, 72, 77, 77, 2, 0, 545, 545, 566, 566, 2, 0, 361, 361, - 467, 467, 2, 0, 358, 358, 570, 570, 1, 0, 516, 517, 2, 0, 313, 315, 566, - 566, 3, 0, 231, 231, 405, 405, 570, 570, 1, 0, 65, 66, 8, 0, 149, 155, - 161, 163, 166, 166, 170, 177, 197, 198, 229, 229, 240, 245, 570, 570, 2, - 0, 309, 309, 539, 539, 1, 0, 85, 86, 8, 0, 144, 146, 190, 190, 195, 195, - 227, 227, 332, 332, 400, 401, 403, 406, 570, 570, 2, 0, 349, 349, 424, - 425, 1, 0, 570, 571, 2, 1, 545, 545, 549, 549, 1, 0, 536, 541, 1, 0, 542, - 543, 2, 0, 544, 548, 558, 558, 1, 0, 276, 281, 1, 0, 294, 298, 7, 0, 124, - 124, 129, 129, 141, 141, 188, 188, 294, 300, 314, 315, 570, 571, 1, 0, - 349, 350, 1, 0, 522, 523, 1, 0, 314, 315, 7, 0, 49, 49, 191, 192, 222, - 222, 319, 319, 429, 429, 503, 503, 570, 570, 3, 0, 5, 462, 464, 535, 547, - 548, 8606, 0, 855, 1, 0, 0, 0, 2, 861, 1, 0, 0, 0, 4, 881, 1, 0, 0, 0, - 6, 883, 1, 0, 0, 0, 8, 915, 1, 0, 0, 0, 10, 1085, 1, 0, 0, 0, 12, 1101, - 1, 0, 0, 0, 14, 1103, 1, 0, 0, 0, 16, 1119, 1, 0, 0, 0, 18, 1136, 1, 0, - 0, 0, 20, 1162, 1, 0, 0, 0, 22, 1203, 1, 0, 0, 0, 24, 1205, 1, 0, 0, 0, - 26, 1219, 1, 0, 0, 0, 28, 1235, 1, 0, 0, 0, 30, 1237, 1, 0, 0, 0, 32, 1247, - 1, 0, 0, 0, 34, 1259, 1, 0, 0, 0, 36, 1261, 1, 0, 0, 0, 38, 1265, 1, 0, - 0, 0, 40, 1292, 1, 0, 0, 0, 42, 1319, 1, 0, 0, 0, 44, 1432, 1, 0, 0, 0, - 46, 1452, 1, 0, 0, 0, 48, 1454, 1, 0, 0, 0, 50, 1524, 1, 0, 0, 0, 52, 1545, - 1, 0, 0, 0, 54, 1547, 1, 0, 0, 0, 56, 1555, 1, 0, 0, 0, 58, 1560, 1, 0, - 0, 0, 60, 1593, 1, 0, 0, 0, 62, 1595, 1, 0, 0, 0, 64, 1600, 1, 0, 0, 0, - 66, 1611, 1, 0, 0, 0, 68, 1621, 1, 0, 0, 0, 70, 1629, 1, 0, 0, 0, 72, 1637, - 1, 0, 0, 0, 74, 1645, 1, 0, 0, 0, 76, 1653, 1, 0, 0, 0, 78, 1661, 1, 0, - 0, 0, 80, 1669, 1, 0, 0, 0, 82, 1678, 1, 0, 0, 0, 84, 1687, 1, 0, 0, 0, - 86, 1697, 1, 0, 0, 0, 88, 1718, 1, 0, 0, 0, 90, 1720, 1, 0, 0, 0, 92, 1740, - 1, 0, 0, 0, 94, 1745, 1, 0, 0, 0, 96, 1751, 1, 0, 0, 0, 98, 1759, 1, 0, - 0, 0, 100, 1795, 1, 0, 0, 0, 102, 1843, 1, 0, 0, 0, 104, 1849, 1, 0, 0, - 0, 106, 1860, 1, 0, 0, 0, 108, 1862, 1, 0, 0, 0, 110, 1877, 1, 0, 0, 0, - 112, 1879, 1, 0, 0, 0, 114, 1895, 1, 0, 0, 0, 116, 1897, 1, 0, 0, 0, 118, - 1899, 1, 0, 0, 0, 120, 1908, 1, 0, 0, 0, 122, 1928, 1, 0, 0, 0, 124, 1963, - 1, 0, 0, 0, 126, 2005, 1, 0, 0, 0, 128, 2007, 1, 0, 0, 0, 130, 2038, 1, - 0, 0, 0, 132, 2041, 1, 0, 0, 0, 134, 2047, 1, 0, 0, 0, 136, 2055, 1, 0, - 0, 0, 138, 2062, 1, 0, 0, 0, 140, 2089, 1, 0, 0, 0, 142, 2092, 1, 0, 0, - 0, 144, 2115, 1, 0, 0, 0, 146, 2117, 1, 0, 0, 0, 148, 2199, 1, 0, 0, 0, - 150, 2213, 1, 0, 0, 0, 152, 2233, 1, 0, 0, 0, 154, 2248, 1, 0, 0, 0, 156, - 2250, 1, 0, 0, 0, 158, 2256, 1, 0, 0, 0, 160, 2264, 1, 0, 0, 0, 162, 2266, - 1, 0, 0, 0, 164, 2274, 1, 0, 0, 0, 166, 2283, 1, 0, 0, 0, 168, 2295, 1, - 0, 0, 0, 170, 2298, 1, 0, 0, 0, 172, 2302, 1, 0, 0, 0, 174, 2305, 1, 0, - 0, 0, 176, 2315, 1, 0, 0, 0, 178, 2324, 1, 0, 0, 0, 180, 2326, 1, 0, 0, - 0, 182, 2337, 1, 0, 0, 0, 184, 2346, 1, 0, 0, 0, 186, 2348, 1, 0, 0, 0, - 188, 2391, 1, 0, 0, 0, 190, 2393, 1, 0, 0, 0, 192, 2401, 1, 0, 0, 0, 194, - 2405, 1, 0, 0, 0, 196, 2420, 1, 0, 0, 0, 198, 2434, 1, 0, 0, 0, 200, 2449, - 1, 0, 0, 0, 202, 2499, 1, 0, 0, 0, 204, 2501, 1, 0, 0, 0, 206, 2528, 1, - 0, 0, 0, 208, 2532, 1, 0, 0, 0, 210, 2550, 1, 0, 0, 0, 212, 2552, 1, 0, - 0, 0, 214, 2602, 1, 0, 0, 0, 216, 2609, 1, 0, 0, 0, 218, 2611, 1, 0, 0, - 0, 220, 2632, 1, 0, 0, 0, 222, 2634, 1, 0, 0, 0, 224, 2638, 1, 0, 0, 0, - 226, 2676, 1, 0, 0, 0, 228, 2678, 1, 0, 0, 0, 230, 2712, 1, 0, 0, 0, 232, - 2727, 1, 0, 0, 0, 234, 2729, 1, 0, 0, 0, 236, 2737, 1, 0, 0, 0, 238, 2745, - 1, 0, 0, 0, 240, 2767, 1, 0, 0, 0, 242, 2786, 1, 0, 0, 0, 244, 2794, 1, - 0, 0, 0, 246, 2800, 1, 0, 0, 0, 248, 2803, 1, 0, 0, 0, 250, 2809, 1, 0, - 0, 0, 252, 2819, 1, 0, 0, 0, 254, 2827, 1, 0, 0, 0, 256, 2829, 1, 0, 0, - 0, 258, 2836, 1, 0, 0, 0, 260, 2844, 1, 0, 0, 0, 262, 2849, 1, 0, 0, 0, - 264, 3322, 1, 0, 0, 0, 266, 3324, 1, 0, 0, 0, 268, 3331, 1, 0, 0, 0, 270, - 3341, 1, 0, 0, 0, 272, 3355, 1, 0, 0, 0, 274, 3364, 1, 0, 0, 0, 276, 3374, - 1, 0, 0, 0, 278, 3386, 1, 0, 0, 0, 280, 3391, 1, 0, 0, 0, 282, 3396, 1, - 0, 0, 0, 284, 3448, 1, 0, 0, 0, 286, 3470, 1, 0, 0, 0, 288, 3472, 1, 0, - 0, 0, 290, 3493, 1, 0, 0, 0, 292, 3505, 1, 0, 0, 0, 294, 3515, 1, 0, 0, - 0, 296, 3517, 1, 0, 0, 0, 298, 3519, 1, 0, 0, 0, 300, 3523, 1, 0, 0, 0, - 302, 3526, 1, 0, 0, 0, 304, 3538, 1, 0, 0, 0, 306, 3554, 1, 0, 0, 0, 308, - 3556, 1, 0, 0, 0, 310, 3562, 1, 0, 0, 0, 312, 3564, 1, 0, 0, 0, 314, 3568, - 1, 0, 0, 0, 316, 3583, 1, 0, 0, 0, 318, 3599, 1, 0, 0, 0, 320, 3633, 1, - 0, 0, 0, 322, 3649, 1, 0, 0, 0, 324, 3664, 1, 0, 0, 0, 326, 3677, 1, 0, - 0, 0, 328, 3688, 1, 0, 0, 0, 330, 3698, 1, 0, 0, 0, 332, 3720, 1, 0, 0, - 0, 334, 3722, 1, 0, 0, 0, 336, 3730, 1, 0, 0, 0, 338, 3739, 1, 0, 0, 0, - 340, 3747, 1, 0, 0, 0, 342, 3753, 1, 0, 0, 0, 344, 3759, 1, 0, 0, 0, 346, - 3765, 1, 0, 0, 0, 348, 3775, 1, 0, 0, 0, 350, 3780, 1, 0, 0, 0, 352, 3798, - 1, 0, 0, 0, 354, 3816, 1, 0, 0, 0, 356, 3818, 1, 0, 0, 0, 358, 3821, 1, - 0, 0, 0, 360, 3825, 1, 0, 0, 0, 362, 3839, 1, 0, 0, 0, 364, 3842, 1, 0, - 0, 0, 366, 3856, 1, 0, 0, 0, 368, 3884, 1, 0, 0, 0, 370, 3888, 1, 0, 0, - 0, 372, 3890, 1, 0, 0, 0, 374, 3892, 1, 0, 0, 0, 376, 3897, 1, 0, 0, 0, - 378, 3919, 1, 0, 0, 0, 380, 3921, 1, 0, 0, 0, 382, 3938, 1, 0, 0, 0, 384, - 3942, 1, 0, 0, 0, 386, 3957, 1, 0, 0, 0, 388, 3969, 1, 0, 0, 0, 390, 3973, - 1, 0, 0, 0, 392, 3978, 1, 0, 0, 0, 394, 3992, 1, 0, 0, 0, 396, 4006, 1, - 0, 0, 0, 398, 4015, 1, 0, 0, 0, 400, 4090, 1, 0, 0, 0, 402, 4092, 1, 0, - 0, 0, 404, 4100, 1, 0, 0, 0, 406, 4104, 1, 0, 0, 0, 408, 4132, 1, 0, 0, - 0, 410, 4134, 1, 0, 0, 0, 412, 4140, 1, 0, 0, 0, 414, 4145, 1, 0, 0, 0, - 416, 4150, 1, 0, 0, 0, 418, 4158, 1, 0, 0, 0, 420, 4166, 1, 0, 0, 0, 422, - 4168, 1, 0, 0, 0, 424, 4176, 1, 0, 0, 0, 426, 4180, 1, 0, 0, 0, 428, 4187, - 1, 0, 0, 0, 430, 4200, 1, 0, 0, 0, 432, 4204, 1, 0, 0, 0, 434, 4207, 1, - 0, 0, 0, 436, 4215, 1, 0, 0, 0, 438, 4219, 1, 0, 0, 0, 440, 4227, 1, 0, - 0, 0, 442, 4231, 1, 0, 0, 0, 444, 4239, 1, 0, 0, 0, 446, 4247, 1, 0, 0, - 0, 448, 4252, 1, 0, 0, 0, 450, 4256, 1, 0, 0, 0, 452, 4258, 1, 0, 0, 0, - 454, 4266, 1, 0, 0, 0, 456, 4277, 1, 0, 0, 0, 458, 4279, 1, 0, 0, 0, 460, - 4291, 1, 0, 0, 0, 462, 4293, 1, 0, 0, 0, 464, 4301, 1, 0, 0, 0, 466, 4313, - 1, 0, 0, 0, 468, 4315, 1, 0, 0, 0, 470, 4323, 1, 0, 0, 0, 472, 4325, 1, - 0, 0, 0, 474, 4339, 1, 0, 0, 0, 476, 4341, 1, 0, 0, 0, 478, 4379, 1, 0, - 0, 0, 480, 4381, 1, 0, 0, 0, 482, 4407, 1, 0, 0, 0, 484, 4413, 1, 0, 0, - 0, 486, 4416, 1, 0, 0, 0, 488, 4449, 1, 0, 0, 0, 490, 4451, 1, 0, 0, 0, - 492, 4453, 1, 0, 0, 0, 494, 4558, 1, 0, 0, 0, 496, 4560, 1, 0, 0, 0, 498, - 4562, 1, 0, 0, 0, 500, 4623, 1, 0, 0, 0, 502, 4625, 1, 0, 0, 0, 504, 4673, - 1, 0, 0, 0, 506, 4675, 1, 0, 0, 0, 508, 4692, 1, 0, 0, 0, 510, 4697, 1, - 0, 0, 0, 512, 4720, 1, 0, 0, 0, 514, 4722, 1, 0, 0, 0, 516, 4733, 1, 0, - 0, 0, 518, 4739, 1, 0, 0, 0, 520, 4741, 1, 0, 0, 0, 522, 4743, 1, 0, 0, - 0, 524, 4745, 1, 0, 0, 0, 526, 4770, 1, 0, 0, 0, 528, 4785, 1, 0, 0, 0, - 530, 4796, 1, 0, 0, 0, 532, 4798, 1, 0, 0, 0, 534, 4802, 1, 0, 0, 0, 536, - 4817, 1, 0, 0, 0, 538, 4821, 1, 0, 0, 0, 540, 4824, 1, 0, 0, 0, 542, 4830, - 1, 0, 0, 0, 544, 4875, 1, 0, 0, 0, 546, 4877, 1, 0, 0, 0, 548, 4915, 1, - 0, 0, 0, 550, 4919, 1, 0, 0, 0, 552, 4929, 1, 0, 0, 0, 554, 4940, 1, 0, - 0, 0, 556, 4942, 1, 0, 0, 0, 558, 4954, 1, 0, 0, 0, 560, 5007, 1, 0, 0, - 0, 562, 5010, 1, 0, 0, 0, 564, 5095, 1, 0, 0, 0, 566, 5097, 1, 0, 0, 0, - 568, 5101, 1, 0, 0, 0, 570, 5137, 1, 0, 0, 0, 572, 5139, 1, 0, 0, 0, 574, - 5141, 1, 0, 0, 0, 576, 5164, 1, 0, 0, 0, 578, 5168, 1, 0, 0, 0, 580, 5179, - 1, 0, 0, 0, 582, 5205, 1, 0, 0, 0, 584, 5207, 1, 0, 0, 0, 586, 5215, 1, - 0, 0, 0, 588, 5231, 1, 0, 0, 0, 590, 5268, 1, 0, 0, 0, 592, 5270, 1, 0, - 0, 0, 594, 5274, 1, 0, 0, 0, 596, 5278, 1, 0, 0, 0, 598, 5295, 1, 0, 0, - 0, 600, 5297, 1, 0, 0, 0, 602, 5323, 1, 0, 0, 0, 604, 5338, 1, 0, 0, 0, - 606, 5346, 1, 0, 0, 0, 608, 5357, 1, 0, 0, 0, 610, 5381, 1, 0, 0, 0, 612, - 5406, 1, 0, 0, 0, 614, 5417, 1, 0, 0, 0, 616, 5429, 1, 0, 0, 0, 618, 5433, - 1, 0, 0, 0, 620, 5455, 1, 0, 0, 0, 622, 5478, 1, 0, 0, 0, 624, 5482, 1, - 0, 0, 0, 626, 5526, 1, 0, 0, 0, 628, 5556, 1, 0, 0, 0, 630, 5667, 1, 0, - 0, 0, 632, 5702, 1, 0, 0, 0, 634, 5704, 1, 0, 0, 0, 636, 5709, 1, 0, 0, - 0, 638, 5747, 1, 0, 0, 0, 640, 5751, 1, 0, 0, 0, 642, 5772, 1, 0, 0, 0, - 644, 5788, 1, 0, 0, 0, 646, 5794, 1, 0, 0, 0, 648, 5805, 1, 0, 0, 0, 650, - 5811, 1, 0, 0, 0, 652, 5818, 1, 0, 0, 0, 654, 5828, 1, 0, 0, 0, 656, 5844, - 1, 0, 0, 0, 658, 5921, 1, 0, 0, 0, 660, 5940, 1, 0, 0, 0, 662, 5955, 1, - 0, 0, 0, 664, 5967, 1, 0, 0, 0, 666, 6008, 1, 0, 0, 0, 668, 6010, 1, 0, - 0, 0, 670, 6012, 1, 0, 0, 0, 672, 6020, 1, 0, 0, 0, 674, 6026, 1, 0, 0, - 0, 676, 6028, 1, 0, 0, 0, 678, 6563, 1, 0, 0, 0, 680, 6586, 1, 0, 0, 0, - 682, 6588, 1, 0, 0, 0, 684, 6596, 1, 0, 0, 0, 686, 6598, 1, 0, 0, 0, 688, - 6606, 1, 0, 0, 0, 690, 6790, 1, 0, 0, 0, 692, 6792, 1, 0, 0, 0, 694, 6838, - 1, 0, 0, 0, 696, 6854, 1, 0, 0, 0, 698, 6856, 1, 0, 0, 0, 700, 6903, 1, - 0, 0, 0, 702, 6905, 1, 0, 0, 0, 704, 6920, 1, 0, 0, 0, 706, 6932, 1, 0, - 0, 0, 708, 6936, 1, 0, 0, 0, 710, 6938, 1, 0, 0, 0, 712, 6962, 1, 0, 0, - 0, 714, 6984, 1, 0, 0, 0, 716, 6996, 1, 0, 0, 0, 718, 7012, 1, 0, 0, 0, - 720, 7014, 1, 0, 0, 0, 722, 7017, 1, 0, 0, 0, 724, 7020, 1, 0, 0, 0, 726, - 7023, 1, 0, 0, 0, 728, 7026, 1, 0, 0, 0, 730, 7034, 1, 0, 0, 0, 732, 7038, - 1, 0, 0, 0, 734, 7058, 1, 0, 0, 0, 736, 7076, 1, 0, 0, 0, 738, 7078, 1, - 0, 0, 0, 740, 7104, 1, 0, 0, 0, 742, 7106, 1, 0, 0, 0, 744, 7124, 1, 0, - 0, 0, 746, 7126, 1, 0, 0, 0, 748, 7128, 1, 0, 0, 0, 750, 7130, 1, 0, 0, - 0, 752, 7134, 1, 0, 0, 0, 754, 7149, 1, 0, 0, 0, 756, 7157, 1, 0, 0, 0, - 758, 7159, 1, 0, 0, 0, 760, 7165, 1, 0, 0, 0, 762, 7167, 1, 0, 0, 0, 764, - 7175, 1, 0, 0, 0, 766, 7177, 1, 0, 0, 0, 768, 7180, 1, 0, 0, 0, 770, 7242, - 1, 0, 0, 0, 772, 7245, 1, 0, 0, 0, 774, 7249, 1, 0, 0, 0, 776, 7289, 1, - 0, 0, 0, 778, 7303, 1, 0, 0, 0, 780, 7305, 1, 0, 0, 0, 782, 7307, 1, 0, - 0, 0, 784, 7315, 1, 0, 0, 0, 786, 7317, 1, 0, 0, 0, 788, 7325, 1, 0, 0, - 0, 790, 7334, 1, 0, 0, 0, 792, 7338, 1, 0, 0, 0, 794, 7369, 1, 0, 0, 0, - 796, 7371, 1, 0, 0, 0, 798, 7379, 1, 0, 0, 0, 800, 7388, 1, 0, 0, 0, 802, - 7413, 1, 0, 0, 0, 804, 7415, 1, 0, 0, 0, 806, 7431, 1, 0, 0, 0, 808, 7438, - 1, 0, 0, 0, 810, 7445, 1, 0, 0, 0, 812, 7447, 1, 0, 0, 0, 814, 7458, 1, - 0, 0, 0, 816, 7465, 1, 0, 0, 0, 818, 7467, 1, 0, 0, 0, 820, 7489, 1, 0, - 0, 0, 822, 7491, 1, 0, 0, 0, 824, 7499, 1, 0, 0, 0, 826, 7514, 1, 0, 0, - 0, 828, 7519, 1, 0, 0, 0, 830, 7530, 1, 0, 0, 0, 832, 7537, 1, 0, 0, 0, - 834, 7539, 1, 0, 0, 0, 836, 7552, 1, 0, 0, 0, 838, 7554, 1, 0, 0, 0, 840, - 7556, 1, 0, 0, 0, 842, 7565, 1, 0, 0, 0, 844, 7567, 1, 0, 0, 0, 846, 7579, - 1, 0, 0, 0, 848, 7584, 1, 0, 0, 0, 850, 7586, 1, 0, 0, 0, 852, 854, 3, - 2, 1, 0, 853, 852, 1, 0, 0, 0, 854, 857, 1, 0, 0, 0, 855, 853, 1, 0, 0, - 0, 855, 856, 1, 0, 0, 0, 856, 858, 1, 0, 0, 0, 857, 855, 1, 0, 0, 0, 858, - 859, 5, 0, 0, 1, 859, 1, 1, 0, 0, 0, 860, 862, 3, 838, 419, 0, 861, 860, - 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 866, 1, 0, 0, 0, 863, 867, 3, 4, - 2, 0, 864, 867, 3, 674, 337, 0, 865, 867, 3, 736, 368, 0, 866, 863, 1, - 0, 0, 0, 866, 864, 1, 0, 0, 0, 866, 865, 1, 0, 0, 0, 867, 869, 1, 0, 0, - 0, 868, 870, 5, 549, 0, 0, 869, 868, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, - 870, 872, 1, 0, 0, 0, 871, 873, 5, 545, 0, 0, 872, 871, 1, 0, 0, 0, 872, - 873, 1, 0, 0, 0, 873, 3, 1, 0, 0, 0, 874, 882, 3, 8, 4, 0, 875, 882, 3, - 10, 5, 0, 876, 882, 3, 44, 22, 0, 877, 882, 3, 46, 23, 0, 878, 882, 3, - 50, 25, 0, 879, 882, 3, 6, 3, 0, 880, 882, 3, 52, 26, 0, 881, 874, 1, 0, - 0, 0, 881, 875, 1, 0, 0, 0, 881, 876, 1, 0, 0, 0, 881, 877, 1, 0, 0, 0, - 881, 878, 1, 0, 0, 0, 881, 879, 1, 0, 0, 0, 881, 880, 1, 0, 0, 0, 882, - 5, 1, 0, 0, 0, 883, 884, 5, 416, 0, 0, 884, 885, 5, 190, 0, 0, 885, 886, - 5, 48, 0, 0, 886, 891, 3, 686, 343, 0, 887, 888, 5, 550, 0, 0, 888, 890, - 3, 686, 343, 0, 889, 887, 1, 0, 0, 0, 890, 893, 1, 0, 0, 0, 891, 889, 1, - 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 894, 1, 0, 0, 0, 893, 891, 1, 0, 0, - 0, 894, 895, 5, 73, 0, 0, 895, 900, 3, 684, 342, 0, 896, 897, 5, 303, 0, - 0, 897, 899, 3, 684, 342, 0, 898, 896, 1, 0, 0, 0, 899, 902, 1, 0, 0, 0, - 900, 898, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 908, 1, 0, 0, 0, 902, - 900, 1, 0, 0, 0, 903, 906, 5, 307, 0, 0, 904, 907, 3, 828, 414, 0, 905, - 907, 5, 570, 0, 0, 906, 904, 1, 0, 0, 0, 906, 905, 1, 0, 0, 0, 907, 909, - 1, 0, 0, 0, 908, 903, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 912, 1, 0, - 0, 0, 910, 911, 5, 460, 0, 0, 911, 913, 5, 461, 0, 0, 912, 910, 1, 0, 0, - 0, 912, 913, 1, 0, 0, 0, 913, 7, 1, 0, 0, 0, 914, 916, 3, 838, 419, 0, - 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 920, 1, 0, 0, 0, 917, - 919, 3, 840, 420, 0, 918, 917, 1, 0, 0, 0, 919, 922, 1, 0, 0, 0, 920, 918, - 1, 0, 0, 0, 920, 921, 1, 0, 0, 0, 921, 923, 1, 0, 0, 0, 922, 920, 1, 0, - 0, 0, 923, 926, 5, 17, 0, 0, 924, 925, 5, 304, 0, 0, 925, 927, 7, 0, 0, - 0, 926, 924, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 962, 1, 0, 0, 0, 928, - 963, 3, 102, 51, 0, 929, 963, 3, 140, 70, 0, 930, 963, 3, 156, 78, 0, 931, - 963, 3, 238, 119, 0, 932, 963, 3, 240, 120, 0, 933, 963, 3, 426, 213, 0, - 934, 963, 3, 428, 214, 0, 935, 963, 3, 162, 81, 0, 936, 963, 3, 228, 114, - 0, 937, 963, 3, 534, 267, 0, 938, 963, 3, 542, 271, 0, 939, 963, 3, 550, - 275, 0, 940, 963, 3, 558, 279, 0, 941, 963, 3, 584, 292, 0, 942, 963, 3, - 586, 293, 0, 943, 963, 3, 588, 294, 0, 944, 963, 3, 608, 304, 0, 945, 963, - 3, 610, 305, 0, 946, 963, 3, 612, 306, 0, 947, 963, 3, 618, 309, 0, 948, - 963, 3, 624, 312, 0, 949, 963, 3, 58, 29, 0, 950, 963, 3, 90, 45, 0, 951, - 963, 3, 174, 87, 0, 952, 963, 3, 204, 102, 0, 953, 963, 3, 208, 104, 0, - 954, 963, 3, 218, 109, 0, 955, 963, 3, 556, 278, 0, 956, 963, 3, 574, 287, - 0, 957, 963, 3, 824, 412, 0, 958, 963, 3, 186, 93, 0, 959, 963, 3, 194, - 97, 0, 960, 963, 3, 196, 98, 0, 961, 963, 3, 198, 99, 0, 962, 928, 1, 0, - 0, 0, 962, 929, 1, 0, 0, 0, 962, 930, 1, 0, 0, 0, 962, 931, 1, 0, 0, 0, - 962, 932, 1, 0, 0, 0, 962, 933, 1, 0, 0, 0, 962, 934, 1, 0, 0, 0, 962, - 935, 1, 0, 0, 0, 962, 936, 1, 0, 0, 0, 962, 937, 1, 0, 0, 0, 962, 938, - 1, 0, 0, 0, 962, 939, 1, 0, 0, 0, 962, 940, 1, 0, 0, 0, 962, 941, 1, 0, - 0, 0, 962, 942, 1, 0, 0, 0, 962, 943, 1, 0, 0, 0, 962, 944, 1, 0, 0, 0, - 962, 945, 1, 0, 0, 0, 962, 946, 1, 0, 0, 0, 962, 947, 1, 0, 0, 0, 962, - 948, 1, 0, 0, 0, 962, 949, 1, 0, 0, 0, 962, 950, 1, 0, 0, 0, 962, 951, - 1, 0, 0, 0, 962, 952, 1, 0, 0, 0, 962, 953, 1, 0, 0, 0, 962, 954, 1, 0, - 0, 0, 962, 955, 1, 0, 0, 0, 962, 956, 1, 0, 0, 0, 962, 957, 1, 0, 0, 0, - 962, 958, 1, 0, 0, 0, 962, 959, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, - 961, 1, 0, 0, 0, 963, 9, 1, 0, 0, 0, 964, 965, 5, 18, 0, 0, 965, 966, 5, - 23, 0, 0, 966, 968, 3, 828, 414, 0, 967, 969, 3, 148, 74, 0, 968, 967, - 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 968, 1, 0, 0, 0, 970, 971, 1, 0, - 0, 0, 971, 1086, 1, 0, 0, 0, 972, 973, 5, 18, 0, 0, 973, 974, 5, 27, 0, - 0, 974, 976, 3, 828, 414, 0, 975, 977, 3, 150, 75, 0, 976, 975, 1, 0, 0, - 0, 977, 978, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, - 1086, 1, 0, 0, 0, 980, 981, 5, 18, 0, 0, 981, 982, 5, 28, 0, 0, 982, 984, - 3, 828, 414, 0, 983, 985, 3, 152, 76, 0, 984, 983, 1, 0, 0, 0, 985, 986, - 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 1086, 1, 0, - 0, 0, 988, 989, 5, 18, 0, 0, 989, 990, 5, 36, 0, 0, 990, 992, 3, 828, 414, - 0, 991, 993, 3, 154, 77, 0, 992, 991, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, - 994, 992, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 1086, 1, 0, 0, 0, 996, - 997, 5, 18, 0, 0, 997, 998, 5, 332, 0, 0, 998, 999, 5, 359, 0, 0, 999, - 1000, 3, 828, 414, 0, 1000, 1001, 5, 48, 0, 0, 1001, 1006, 3, 594, 297, - 0, 1002, 1003, 5, 550, 0, 0, 1003, 1005, 3, 594, 297, 0, 1004, 1002, 1, - 0, 0, 0, 1005, 1008, 1, 0, 0, 0, 1006, 1004, 1, 0, 0, 0, 1006, 1007, 1, - 0, 0, 0, 1007, 1086, 1, 0, 0, 0, 1008, 1006, 1, 0, 0, 0, 1009, 1010, 5, - 18, 0, 0, 1010, 1011, 5, 332, 0, 0, 1011, 1012, 5, 330, 0, 0, 1012, 1013, - 3, 828, 414, 0, 1013, 1014, 5, 48, 0, 0, 1014, 1019, 3, 594, 297, 0, 1015, - 1016, 5, 550, 0, 0, 1016, 1018, 3, 594, 297, 0, 1017, 1015, 1, 0, 0, 0, - 1018, 1021, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, - 1020, 1086, 1, 0, 0, 0, 1021, 1019, 1, 0, 0, 0, 1022, 1023, 5, 18, 0, 0, - 1023, 1024, 5, 216, 0, 0, 1024, 1025, 5, 94, 0, 0, 1025, 1026, 7, 1, 0, - 0, 1026, 1027, 3, 828, 414, 0, 1027, 1028, 5, 189, 0, 0, 1028, 1030, 5, - 570, 0, 0, 1029, 1031, 3, 16, 8, 0, 1030, 1029, 1, 0, 0, 0, 1031, 1032, - 1, 0, 0, 0, 1032, 1030, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1086, - 1, 0, 0, 0, 1034, 1035, 5, 18, 0, 0, 1035, 1036, 5, 468, 0, 0, 1036, 1086, - 3, 666, 333, 0, 1037, 1038, 5, 18, 0, 0, 1038, 1039, 5, 33, 0, 0, 1039, - 1040, 3, 828, 414, 0, 1040, 1042, 5, 554, 0, 0, 1041, 1043, 3, 20, 10, - 0, 1042, 1041, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, - 0, 1044, 1045, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1047, 5, 555, - 0, 0, 1047, 1086, 1, 0, 0, 0, 1048, 1049, 5, 18, 0, 0, 1049, 1050, 5, 34, - 0, 0, 1050, 1051, 3, 828, 414, 0, 1051, 1053, 5, 554, 0, 0, 1052, 1054, - 3, 20, 10, 0, 1053, 1052, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1053, - 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 1058, - 5, 555, 0, 0, 1058, 1086, 1, 0, 0, 0, 1059, 1060, 5, 18, 0, 0, 1060, 1061, - 5, 32, 0, 0, 1061, 1063, 3, 828, 414, 0, 1062, 1064, 3, 658, 329, 0, 1063, - 1062, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, - 1066, 1, 0, 0, 0, 1066, 1068, 1, 0, 0, 0, 1067, 1069, 5, 549, 0, 0, 1068, - 1067, 1, 0, 0, 0, 1068, 1069, 1, 0, 0, 0, 1069, 1086, 1, 0, 0, 0, 1070, - 1071, 5, 18, 0, 0, 1071, 1072, 5, 362, 0, 0, 1072, 1073, 5, 329, 0, 0, - 1073, 1074, 5, 330, 0, 0, 1074, 1075, 3, 828, 414, 0, 1075, 1082, 3, 12, - 6, 0, 1076, 1078, 5, 550, 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, - 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1081, 3, 12, 6, 0, 1080, 1077, 1, - 0, 0, 0, 1081, 1084, 1, 0, 0, 0, 1082, 1080, 1, 0, 0, 0, 1082, 1083, 1, - 0, 0, 0, 1083, 1086, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1085, 964, 1, - 0, 0, 0, 1085, 972, 1, 0, 0, 0, 1085, 980, 1, 0, 0, 0, 1085, 988, 1, 0, - 0, 0, 1085, 996, 1, 0, 0, 0, 1085, 1009, 1, 0, 0, 0, 1085, 1022, 1, 0, - 0, 0, 1085, 1034, 1, 0, 0, 0, 1085, 1037, 1, 0, 0, 0, 1085, 1048, 1, 0, - 0, 0, 1085, 1059, 1, 0, 0, 0, 1085, 1070, 1, 0, 0, 0, 1086, 11, 1, 0, 0, - 0, 1087, 1088, 5, 48, 0, 0, 1088, 1093, 3, 14, 7, 0, 1089, 1090, 5, 550, - 0, 0, 1090, 1092, 3, 14, 7, 0, 1091, 1089, 1, 0, 0, 0, 1092, 1095, 1, 0, - 0, 0, 1093, 1091, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1102, 1, 0, - 0, 0, 1095, 1093, 1, 0, 0, 0, 1096, 1097, 5, 47, 0, 0, 1097, 1102, 3, 578, - 289, 0, 1098, 1099, 5, 19, 0, 0, 1099, 1100, 5, 348, 0, 0, 1100, 1102, - 5, 566, 0, 0, 1101, 1087, 1, 0, 0, 0, 1101, 1096, 1, 0, 0, 0, 1101, 1098, - 1, 0, 0, 0, 1102, 13, 1, 0, 0, 0, 1103, 1104, 3, 830, 415, 0, 1104, 1105, - 5, 539, 0, 0, 1105, 1106, 5, 566, 0, 0, 1106, 15, 1, 0, 0, 0, 1107, 1108, - 5, 48, 0, 0, 1108, 1113, 3, 18, 9, 0, 1109, 1110, 5, 550, 0, 0, 1110, 1112, - 3, 18, 9, 0, 1111, 1109, 1, 0, 0, 0, 1112, 1115, 1, 0, 0, 0, 1113, 1111, - 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1120, 1, 0, 0, 0, 1115, 1113, - 1, 0, 0, 0, 1116, 1117, 5, 217, 0, 0, 1117, 1118, 5, 213, 0, 0, 1118, 1120, - 5, 214, 0, 0, 1119, 1107, 1, 0, 0, 0, 1119, 1116, 1, 0, 0, 0, 1120, 17, - 1, 0, 0, 0, 1121, 1122, 5, 210, 0, 0, 1122, 1123, 5, 539, 0, 0, 1123, 1137, - 5, 566, 0, 0, 1124, 1125, 5, 211, 0, 0, 1125, 1126, 5, 539, 0, 0, 1126, - 1137, 5, 566, 0, 0, 1127, 1128, 5, 566, 0, 0, 1128, 1129, 5, 539, 0, 0, - 1129, 1137, 5, 566, 0, 0, 1130, 1131, 5, 566, 0, 0, 1131, 1132, 5, 539, - 0, 0, 1132, 1137, 5, 94, 0, 0, 1133, 1134, 5, 566, 0, 0, 1134, 1135, 5, - 539, 0, 0, 1135, 1137, 5, 515, 0, 0, 1136, 1121, 1, 0, 0, 0, 1136, 1124, - 1, 0, 0, 0, 1136, 1127, 1, 0, 0, 0, 1136, 1130, 1, 0, 0, 0, 1136, 1133, - 1, 0, 0, 0, 1137, 19, 1, 0, 0, 0, 1138, 1140, 3, 22, 11, 0, 1139, 1141, - 5, 549, 0, 0, 1140, 1139, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1163, - 1, 0, 0, 0, 1142, 1144, 3, 28, 14, 0, 1143, 1145, 5, 549, 0, 0, 1144, 1143, - 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 1163, 1, 0, 0, 0, 1146, 1148, - 3, 30, 15, 0, 1147, 1149, 5, 549, 0, 0, 1148, 1147, 1, 0, 0, 0, 1148, 1149, - 1, 0, 0, 0, 1149, 1163, 1, 0, 0, 0, 1150, 1152, 3, 32, 16, 0, 1151, 1153, - 5, 549, 0, 0, 1152, 1151, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1163, - 1, 0, 0, 0, 1154, 1156, 3, 36, 18, 0, 1155, 1157, 5, 549, 0, 0, 1156, 1155, - 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1163, 1, 0, 0, 0, 1158, 1160, - 3, 38, 19, 0, 1159, 1161, 5, 549, 0, 0, 1160, 1159, 1, 0, 0, 0, 1160, 1161, - 1, 0, 0, 0, 1161, 1163, 1, 0, 0, 0, 1162, 1138, 1, 0, 0, 0, 1162, 1142, - 1, 0, 0, 0, 1162, 1146, 1, 0, 0, 0, 1162, 1150, 1, 0, 0, 0, 1162, 1154, - 1, 0, 0, 0, 1162, 1158, 1, 0, 0, 0, 1163, 21, 1, 0, 0, 0, 1164, 1165, 5, - 48, 0, 0, 1165, 1166, 5, 35, 0, 0, 1166, 1167, 5, 539, 0, 0, 1167, 1180, - 3, 828, 414, 0, 1168, 1169, 5, 375, 0, 0, 1169, 1170, 5, 552, 0, 0, 1170, - 1175, 3, 24, 12, 0, 1171, 1172, 5, 550, 0, 0, 1172, 1174, 3, 24, 12, 0, - 1173, 1171, 1, 0, 0, 0, 1174, 1177, 1, 0, 0, 0, 1175, 1173, 1, 0, 0, 0, - 1175, 1176, 1, 0, 0, 0, 1176, 1178, 1, 0, 0, 0, 1177, 1175, 1, 0, 0, 0, - 1178, 1179, 5, 553, 0, 0, 1179, 1181, 1, 0, 0, 0, 1180, 1168, 1, 0, 0, - 0, 1180, 1181, 1, 0, 0, 0, 1181, 1204, 1, 0, 0, 0, 1182, 1183, 5, 48, 0, - 0, 1183, 1184, 3, 26, 13, 0, 1184, 1185, 5, 94, 0, 0, 1185, 1186, 3, 34, - 17, 0, 1186, 1204, 1, 0, 0, 0, 1187, 1188, 5, 48, 0, 0, 1188, 1189, 5, - 552, 0, 0, 1189, 1194, 3, 26, 13, 0, 1190, 1191, 5, 550, 0, 0, 1191, 1193, - 3, 26, 13, 0, 1192, 1190, 1, 0, 0, 0, 1193, 1196, 1, 0, 0, 0, 1194, 1192, - 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1197, 1, 0, 0, 0, 1196, 1194, - 1, 0, 0, 0, 1197, 1198, 5, 553, 0, 0, 1198, 1199, 5, 94, 0, 0, 1199, 1200, - 3, 34, 17, 0, 1200, 1204, 1, 0, 0, 0, 1201, 1202, 5, 48, 0, 0, 1202, 1204, - 3, 26, 13, 0, 1203, 1164, 1, 0, 0, 0, 1203, 1182, 1, 0, 0, 0, 1203, 1187, - 1, 0, 0, 0, 1203, 1201, 1, 0, 0, 0, 1204, 23, 1, 0, 0, 0, 1205, 1206, 3, - 830, 415, 0, 1206, 1207, 5, 77, 0, 0, 1207, 1208, 3, 830, 415, 0, 1208, - 25, 1, 0, 0, 0, 1209, 1210, 5, 194, 0, 0, 1210, 1211, 5, 539, 0, 0, 1211, - 1220, 3, 500, 250, 0, 1212, 1213, 3, 830, 415, 0, 1213, 1214, 5, 539, 0, - 0, 1214, 1215, 3, 526, 263, 0, 1215, 1220, 1, 0, 0, 0, 1216, 1217, 5, 566, - 0, 0, 1217, 1218, 5, 539, 0, 0, 1218, 1220, 3, 526, 263, 0, 1219, 1209, - 1, 0, 0, 0, 1219, 1212, 1, 0, 0, 0, 1219, 1216, 1, 0, 0, 0, 1220, 27, 1, - 0, 0, 0, 1221, 1222, 5, 413, 0, 0, 1222, 1223, 5, 415, 0, 0, 1223, 1224, - 3, 34, 17, 0, 1224, 1225, 5, 554, 0, 0, 1225, 1226, 3, 484, 242, 0, 1226, - 1227, 5, 555, 0, 0, 1227, 1236, 1, 0, 0, 0, 1228, 1229, 5, 413, 0, 0, 1229, - 1230, 5, 414, 0, 0, 1230, 1231, 3, 34, 17, 0, 1231, 1232, 5, 554, 0, 0, - 1232, 1233, 3, 484, 242, 0, 1233, 1234, 5, 555, 0, 0, 1234, 1236, 1, 0, - 0, 0, 1235, 1221, 1, 0, 0, 0, 1235, 1228, 1, 0, 0, 0, 1236, 29, 1, 0, 0, - 0, 1237, 1238, 5, 19, 0, 0, 1238, 1239, 5, 189, 0, 0, 1239, 1244, 3, 34, - 17, 0, 1240, 1241, 5, 550, 0, 0, 1241, 1243, 3, 34, 17, 0, 1242, 1240, - 1, 0, 0, 0, 1243, 1246, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1245, - 1, 0, 0, 0, 1245, 31, 1, 0, 0, 0, 1246, 1244, 1, 0, 0, 0, 1247, 1248, 5, - 454, 0, 0, 1248, 1249, 3, 34, 17, 0, 1249, 1250, 5, 140, 0, 0, 1250, 1251, - 5, 554, 0, 0, 1251, 1252, 3, 484, 242, 0, 1252, 1253, 5, 555, 0, 0, 1253, - 33, 1, 0, 0, 0, 1254, 1255, 3, 830, 415, 0, 1255, 1256, 5, 551, 0, 0, 1256, - 1257, 3, 830, 415, 0, 1257, 1260, 1, 0, 0, 0, 1258, 1260, 3, 830, 415, - 0, 1259, 1254, 1, 0, 0, 0, 1259, 1258, 1, 0, 0, 0, 1260, 35, 1, 0, 0, 0, - 1261, 1262, 5, 47, 0, 0, 1262, 1263, 5, 206, 0, 0, 1263, 1264, 3, 444, - 222, 0, 1264, 37, 1, 0, 0, 0, 1265, 1266, 5, 19, 0, 0, 1266, 1267, 5, 206, - 0, 0, 1267, 1268, 5, 569, 0, 0, 1268, 39, 1, 0, 0, 0, 1269, 1270, 5, 397, - 0, 0, 1270, 1271, 7, 2, 0, 0, 1271, 1274, 3, 828, 414, 0, 1272, 1273, 5, - 453, 0, 0, 1273, 1275, 3, 828, 414, 0, 1274, 1272, 1, 0, 0, 0, 1274, 1275, - 1, 0, 0, 0, 1275, 1293, 1, 0, 0, 0, 1276, 1277, 5, 398, 0, 0, 1277, 1278, - 5, 33, 0, 0, 1278, 1293, 3, 828, 414, 0, 1279, 1280, 5, 305, 0, 0, 1280, - 1281, 5, 399, 0, 0, 1281, 1282, 5, 33, 0, 0, 1282, 1293, 3, 828, 414, 0, - 1283, 1284, 5, 395, 0, 0, 1284, 1288, 5, 552, 0, 0, 1285, 1287, 3, 42, - 21, 0, 1286, 1285, 1, 0, 0, 0, 1287, 1290, 1, 0, 0, 0, 1288, 1286, 1, 0, - 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1291, 1, 0, 0, 0, 1290, 1288, 1, 0, - 0, 0, 1291, 1293, 5, 553, 0, 0, 1292, 1269, 1, 0, 0, 0, 1292, 1276, 1, - 0, 0, 0, 1292, 1279, 1, 0, 0, 0, 1292, 1283, 1, 0, 0, 0, 1293, 41, 1, 0, - 0, 0, 1294, 1295, 5, 395, 0, 0, 1295, 1296, 5, 157, 0, 0, 1296, 1301, 5, - 566, 0, 0, 1297, 1298, 5, 33, 0, 0, 1298, 1302, 3, 828, 414, 0, 1299, 1300, + 401, 1, 401, 1, 401, 1, 401, 3, 401, 7419, 8, 401, 1, 402, 1, 402, 1, 402, + 1, 402, 1, 402, 1, 402, 4, 402, 7427, 8, 402, 11, 402, 12, 402, 7428, 1, + 402, 1, 402, 3, 402, 7433, 8, 402, 1, 402, 1, 402, 1, 403, 1, 403, 1, 403, + 1, 403, 1, 403, 1, 403, 1, 403, 1, 404, 1, 404, 1, 404, 1, 404, 1, 404, + 1, 404, 1, 404, 1, 405, 1, 405, 1, 406, 1, 406, 1, 406, 3, 406, 7456, 8, + 406, 1, 406, 1, 406, 3, 406, 7460, 8, 406, 1, 406, 1, 406, 1, 407, 1, 407, + 1, 407, 3, 407, 7467, 8, 407, 1, 407, 1, 407, 1, 408, 1, 408, 1, 409, 1, + 409, 1, 409, 5, 409, 7476, 8, 409, 10, 409, 12, 409, 7479, 9, 409, 1, 410, + 1, 410, 1, 410, 1, 410, 5, 410, 7485, 8, 410, 10, 410, 12, 410, 7488, 9, + 410, 1, 410, 1, 410, 1, 410, 1, 410, 1, 410, 3, 410, 7495, 8, 410, 1, 411, + 1, 411, 1, 411, 5, 411, 7500, 8, 411, 10, 411, 12, 411, 7503, 9, 411, 1, + 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 1, 412, 5, 412, 7513, + 8, 412, 10, 412, 12, 412, 7516, 9, 412, 1, 412, 1, 412, 1, 413, 1, 413, + 1, 413, 3, 413, 7523, 8, 413, 1, 414, 1, 414, 1, 414, 5, 414, 7528, 8, + 414, 10, 414, 12, 414, 7531, 9, 414, 1, 415, 1, 415, 1, 415, 3, 415, 7536, + 8, 415, 1, 416, 1, 416, 1, 416, 1, 416, 1, 416, 3, 416, 7543, 8, 416, 1, + 417, 1, 417, 1, 417, 1, 417, 5, 417, 7549, 8, 417, 10, 417, 12, 417, 7552, + 9, 417, 3, 417, 7554, 8, 417, 1, 417, 1, 417, 1, 418, 1, 418, 1, 419, 1, + 419, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 3, 420, 7569, + 8, 420, 1, 421, 1, 421, 1, 422, 1, 422, 1, 422, 5, 422, 7576, 8, 422, 10, + 422, 12, 422, 7579, 9, 422, 1, 423, 1, 423, 1, 423, 1, 423, 3, 423, 7585, + 8, 423, 1, 424, 1, 424, 1, 424, 3, 424, 7590, 8, 424, 1, 425, 1, 425, 1, + 425, 0, 0, 426, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, + 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, + 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, + 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, + 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, + 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, + 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, + 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, + 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, + 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, + 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, + 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, + 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, + 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, + 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, + 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, + 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, + 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, + 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, + 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, + 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, + 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, + 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, + 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, + 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, + 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, + 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, + 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, + 0, 59, 2, 0, 22, 22, 454, 454, 1, 0, 33, 34, 2, 0, 30, 30, 33, 33, 5, 0, + 23, 23, 27, 28, 30, 31, 33, 33, 37, 37, 2, 0, 478, 479, 515, 515, 2, 0, + 94, 94, 515, 515, 1, 0, 414, 415, 2, 0, 17, 17, 101, 103, 2, 0, 568, 568, + 570, 570, 2, 0, 424, 424, 458, 458, 1, 0, 95, 96, 2, 0, 12, 12, 44, 44, + 2, 0, 313, 313, 449, 449, 2, 0, 39, 39, 52, 52, 2, 0, 14, 16, 54, 55, 2, + 0, 566, 566, 572, 572, 1, 0, 566, 567, 2, 0, 545, 545, 551, 551, 3, 0, + 70, 70, 136, 139, 320, 320, 2, 0, 86, 86, 569, 569, 2, 0, 101, 101, 354, + 357, 2, 0, 566, 566, 570, 570, 1, 0, 569, 570, 1, 0, 303, 304, 6, 0, 303, + 305, 536, 541, 545, 545, 549, 553, 556, 557, 565, 569, 4, 0, 129, 129, + 305, 305, 314, 315, 570, 571, 12, 0, 39, 39, 149, 158, 161, 163, 165, 166, + 168, 168, 170, 177, 181, 181, 183, 188, 197, 198, 229, 229, 240, 245, 265, + 265, 3, 0, 129, 129, 141, 141, 570, 570, 3, 0, 269, 275, 424, 424, 570, + 570, 4, 0, 136, 137, 260, 264, 313, 313, 570, 570, 2, 0, 220, 220, 568, + 568, 1, 0, 446, 448, 3, 0, 276, 276, 349, 349, 351, 352, 2, 0, 72, 72, + 77, 77, 2, 0, 545, 545, 566, 566, 2, 0, 361, 361, 467, 467, 2, 0, 358, + 358, 570, 570, 1, 0, 516, 517, 2, 0, 313, 315, 566, 566, 3, 0, 231, 231, + 405, 405, 570, 570, 1, 0, 65, 66, 8, 0, 149, 155, 161, 163, 166, 166, 170, + 177, 197, 198, 229, 229, 240, 245, 570, 570, 2, 0, 309, 309, 539, 539, + 1, 0, 85, 86, 8, 0, 144, 146, 190, 190, 195, 195, 227, 227, 332, 332, 400, + 401, 403, 406, 570, 570, 2, 0, 349, 349, 424, 425, 1, 0, 570, 571, 2, 1, + 545, 545, 549, 549, 1, 0, 536, 541, 1, 0, 542, 543, 2, 0, 544, 548, 558, + 558, 1, 0, 276, 281, 1, 0, 294, 298, 7, 0, 124, 124, 129, 129, 141, 141, + 188, 188, 294, 300, 314, 315, 570, 571, 1, 0, 349, 350, 1, 0, 522, 523, + 1, 0, 314, 315, 7, 0, 49, 49, 191, 192, 222, 222, 319, 319, 429, 429, 503, + 503, 570, 570, 3, 0, 5, 462, 464, 535, 547, 548, 8612, 0, 855, 1, 0, 0, + 0, 2, 861, 1, 0, 0, 0, 4, 881, 1, 0, 0, 0, 6, 883, 1, 0, 0, 0, 8, 915, + 1, 0, 0, 0, 10, 1085, 1, 0, 0, 0, 12, 1101, 1, 0, 0, 0, 14, 1103, 1, 0, + 0, 0, 16, 1119, 1, 0, 0, 0, 18, 1136, 1, 0, 0, 0, 20, 1162, 1, 0, 0, 0, + 22, 1203, 1, 0, 0, 0, 24, 1205, 1, 0, 0, 0, 26, 1219, 1, 0, 0, 0, 28, 1235, + 1, 0, 0, 0, 30, 1237, 1, 0, 0, 0, 32, 1247, 1, 0, 0, 0, 34, 1259, 1, 0, + 0, 0, 36, 1261, 1, 0, 0, 0, 38, 1265, 1, 0, 0, 0, 40, 1292, 1, 0, 0, 0, + 42, 1319, 1, 0, 0, 0, 44, 1432, 1, 0, 0, 0, 46, 1452, 1, 0, 0, 0, 48, 1454, + 1, 0, 0, 0, 50, 1524, 1, 0, 0, 0, 52, 1545, 1, 0, 0, 0, 54, 1547, 1, 0, + 0, 0, 56, 1555, 1, 0, 0, 0, 58, 1560, 1, 0, 0, 0, 60, 1593, 1, 0, 0, 0, + 62, 1595, 1, 0, 0, 0, 64, 1600, 1, 0, 0, 0, 66, 1611, 1, 0, 0, 0, 68, 1621, + 1, 0, 0, 0, 70, 1629, 1, 0, 0, 0, 72, 1637, 1, 0, 0, 0, 74, 1645, 1, 0, + 0, 0, 76, 1653, 1, 0, 0, 0, 78, 1661, 1, 0, 0, 0, 80, 1669, 1, 0, 0, 0, + 82, 1678, 1, 0, 0, 0, 84, 1687, 1, 0, 0, 0, 86, 1697, 1, 0, 0, 0, 88, 1718, + 1, 0, 0, 0, 90, 1720, 1, 0, 0, 0, 92, 1740, 1, 0, 0, 0, 94, 1745, 1, 0, + 0, 0, 96, 1751, 1, 0, 0, 0, 98, 1759, 1, 0, 0, 0, 100, 1795, 1, 0, 0, 0, + 102, 1843, 1, 0, 0, 0, 104, 1849, 1, 0, 0, 0, 106, 1860, 1, 0, 0, 0, 108, + 1862, 1, 0, 0, 0, 110, 1877, 1, 0, 0, 0, 112, 1879, 1, 0, 0, 0, 114, 1895, + 1, 0, 0, 0, 116, 1897, 1, 0, 0, 0, 118, 1899, 1, 0, 0, 0, 120, 1908, 1, + 0, 0, 0, 122, 1928, 1, 0, 0, 0, 124, 1963, 1, 0, 0, 0, 126, 2005, 1, 0, + 0, 0, 128, 2007, 1, 0, 0, 0, 130, 2038, 1, 0, 0, 0, 132, 2041, 1, 0, 0, + 0, 134, 2047, 1, 0, 0, 0, 136, 2055, 1, 0, 0, 0, 138, 2062, 1, 0, 0, 0, + 140, 2089, 1, 0, 0, 0, 142, 2092, 1, 0, 0, 0, 144, 2115, 1, 0, 0, 0, 146, + 2117, 1, 0, 0, 0, 148, 2199, 1, 0, 0, 0, 150, 2213, 1, 0, 0, 0, 152, 2233, + 1, 0, 0, 0, 154, 2248, 1, 0, 0, 0, 156, 2250, 1, 0, 0, 0, 158, 2256, 1, + 0, 0, 0, 160, 2264, 1, 0, 0, 0, 162, 2266, 1, 0, 0, 0, 164, 2274, 1, 0, + 0, 0, 166, 2283, 1, 0, 0, 0, 168, 2295, 1, 0, 0, 0, 170, 2298, 1, 0, 0, + 0, 172, 2302, 1, 0, 0, 0, 174, 2305, 1, 0, 0, 0, 176, 2315, 1, 0, 0, 0, + 178, 2324, 1, 0, 0, 0, 180, 2326, 1, 0, 0, 0, 182, 2337, 1, 0, 0, 0, 184, + 2346, 1, 0, 0, 0, 186, 2348, 1, 0, 0, 0, 188, 2391, 1, 0, 0, 0, 190, 2393, + 1, 0, 0, 0, 192, 2401, 1, 0, 0, 0, 194, 2405, 1, 0, 0, 0, 196, 2420, 1, + 0, 0, 0, 198, 2434, 1, 0, 0, 0, 200, 2449, 1, 0, 0, 0, 202, 2499, 1, 0, + 0, 0, 204, 2501, 1, 0, 0, 0, 206, 2528, 1, 0, 0, 0, 208, 2532, 1, 0, 0, + 0, 210, 2550, 1, 0, 0, 0, 212, 2552, 1, 0, 0, 0, 214, 2602, 1, 0, 0, 0, + 216, 2609, 1, 0, 0, 0, 218, 2611, 1, 0, 0, 0, 220, 2632, 1, 0, 0, 0, 222, + 2634, 1, 0, 0, 0, 224, 2638, 1, 0, 0, 0, 226, 2676, 1, 0, 0, 0, 228, 2678, + 1, 0, 0, 0, 230, 2712, 1, 0, 0, 0, 232, 2727, 1, 0, 0, 0, 234, 2729, 1, + 0, 0, 0, 236, 2737, 1, 0, 0, 0, 238, 2745, 1, 0, 0, 0, 240, 2767, 1, 0, + 0, 0, 242, 2786, 1, 0, 0, 0, 244, 2794, 1, 0, 0, 0, 246, 2800, 1, 0, 0, + 0, 248, 2803, 1, 0, 0, 0, 250, 2809, 1, 0, 0, 0, 252, 2819, 1, 0, 0, 0, + 254, 2827, 1, 0, 0, 0, 256, 2829, 1, 0, 0, 0, 258, 2836, 1, 0, 0, 0, 260, + 2844, 1, 0, 0, 0, 262, 2849, 1, 0, 0, 0, 264, 3322, 1, 0, 0, 0, 266, 3324, + 1, 0, 0, 0, 268, 3331, 1, 0, 0, 0, 270, 3341, 1, 0, 0, 0, 272, 3355, 1, + 0, 0, 0, 274, 3364, 1, 0, 0, 0, 276, 3374, 1, 0, 0, 0, 278, 3386, 1, 0, + 0, 0, 280, 3391, 1, 0, 0, 0, 282, 3396, 1, 0, 0, 0, 284, 3448, 1, 0, 0, + 0, 286, 3470, 1, 0, 0, 0, 288, 3472, 1, 0, 0, 0, 290, 3493, 1, 0, 0, 0, + 292, 3505, 1, 0, 0, 0, 294, 3515, 1, 0, 0, 0, 296, 3517, 1, 0, 0, 0, 298, + 3519, 1, 0, 0, 0, 300, 3523, 1, 0, 0, 0, 302, 3526, 1, 0, 0, 0, 304, 3538, + 1, 0, 0, 0, 306, 3554, 1, 0, 0, 0, 308, 3556, 1, 0, 0, 0, 310, 3562, 1, + 0, 0, 0, 312, 3564, 1, 0, 0, 0, 314, 3568, 1, 0, 0, 0, 316, 3583, 1, 0, + 0, 0, 318, 3599, 1, 0, 0, 0, 320, 3633, 1, 0, 0, 0, 322, 3649, 1, 0, 0, + 0, 324, 3664, 1, 0, 0, 0, 326, 3677, 1, 0, 0, 0, 328, 3688, 1, 0, 0, 0, + 330, 3698, 1, 0, 0, 0, 332, 3720, 1, 0, 0, 0, 334, 3722, 1, 0, 0, 0, 336, + 3730, 1, 0, 0, 0, 338, 3739, 1, 0, 0, 0, 340, 3747, 1, 0, 0, 0, 342, 3753, + 1, 0, 0, 0, 344, 3759, 1, 0, 0, 0, 346, 3765, 1, 0, 0, 0, 348, 3775, 1, + 0, 0, 0, 350, 3780, 1, 0, 0, 0, 352, 3798, 1, 0, 0, 0, 354, 3816, 1, 0, + 0, 0, 356, 3818, 1, 0, 0, 0, 358, 3821, 1, 0, 0, 0, 360, 3825, 1, 0, 0, + 0, 362, 3839, 1, 0, 0, 0, 364, 3842, 1, 0, 0, 0, 366, 3856, 1, 0, 0, 0, + 368, 3884, 1, 0, 0, 0, 370, 3888, 1, 0, 0, 0, 372, 3890, 1, 0, 0, 0, 374, + 3892, 1, 0, 0, 0, 376, 3897, 1, 0, 0, 0, 378, 3919, 1, 0, 0, 0, 380, 3921, + 1, 0, 0, 0, 382, 3938, 1, 0, 0, 0, 384, 3942, 1, 0, 0, 0, 386, 3957, 1, + 0, 0, 0, 388, 3969, 1, 0, 0, 0, 390, 3973, 1, 0, 0, 0, 392, 3978, 1, 0, + 0, 0, 394, 3992, 1, 0, 0, 0, 396, 4006, 1, 0, 0, 0, 398, 4015, 1, 0, 0, + 0, 400, 4090, 1, 0, 0, 0, 402, 4092, 1, 0, 0, 0, 404, 4100, 1, 0, 0, 0, + 406, 4104, 1, 0, 0, 0, 408, 4132, 1, 0, 0, 0, 410, 4134, 1, 0, 0, 0, 412, + 4140, 1, 0, 0, 0, 414, 4145, 1, 0, 0, 0, 416, 4150, 1, 0, 0, 0, 418, 4158, + 1, 0, 0, 0, 420, 4166, 1, 0, 0, 0, 422, 4168, 1, 0, 0, 0, 424, 4176, 1, + 0, 0, 0, 426, 4180, 1, 0, 0, 0, 428, 4187, 1, 0, 0, 0, 430, 4200, 1, 0, + 0, 0, 432, 4204, 1, 0, 0, 0, 434, 4207, 1, 0, 0, 0, 436, 4215, 1, 0, 0, + 0, 438, 4219, 1, 0, 0, 0, 440, 4227, 1, 0, 0, 0, 442, 4231, 1, 0, 0, 0, + 444, 4239, 1, 0, 0, 0, 446, 4247, 1, 0, 0, 0, 448, 4252, 1, 0, 0, 0, 450, + 4256, 1, 0, 0, 0, 452, 4258, 1, 0, 0, 0, 454, 4266, 1, 0, 0, 0, 456, 4277, + 1, 0, 0, 0, 458, 4279, 1, 0, 0, 0, 460, 4291, 1, 0, 0, 0, 462, 4293, 1, + 0, 0, 0, 464, 4301, 1, 0, 0, 0, 466, 4313, 1, 0, 0, 0, 468, 4315, 1, 0, + 0, 0, 470, 4323, 1, 0, 0, 0, 472, 4325, 1, 0, 0, 0, 474, 4339, 1, 0, 0, + 0, 476, 4341, 1, 0, 0, 0, 478, 4379, 1, 0, 0, 0, 480, 4381, 1, 0, 0, 0, + 482, 4407, 1, 0, 0, 0, 484, 4413, 1, 0, 0, 0, 486, 4416, 1, 0, 0, 0, 488, + 4449, 1, 0, 0, 0, 490, 4451, 1, 0, 0, 0, 492, 4453, 1, 0, 0, 0, 494, 4558, + 1, 0, 0, 0, 496, 4560, 1, 0, 0, 0, 498, 4562, 1, 0, 0, 0, 500, 4623, 1, + 0, 0, 0, 502, 4625, 1, 0, 0, 0, 504, 4673, 1, 0, 0, 0, 506, 4675, 1, 0, + 0, 0, 508, 4692, 1, 0, 0, 0, 510, 4697, 1, 0, 0, 0, 512, 4720, 1, 0, 0, + 0, 514, 4722, 1, 0, 0, 0, 516, 4733, 1, 0, 0, 0, 518, 4739, 1, 0, 0, 0, + 520, 4741, 1, 0, 0, 0, 522, 4743, 1, 0, 0, 0, 524, 4745, 1, 0, 0, 0, 526, + 4770, 1, 0, 0, 0, 528, 4785, 1, 0, 0, 0, 530, 4796, 1, 0, 0, 0, 532, 4798, + 1, 0, 0, 0, 534, 4802, 1, 0, 0, 0, 536, 4817, 1, 0, 0, 0, 538, 4821, 1, + 0, 0, 0, 540, 4824, 1, 0, 0, 0, 542, 4830, 1, 0, 0, 0, 544, 4875, 1, 0, + 0, 0, 546, 4877, 1, 0, 0, 0, 548, 4915, 1, 0, 0, 0, 550, 4919, 1, 0, 0, + 0, 552, 4929, 1, 0, 0, 0, 554, 4940, 1, 0, 0, 0, 556, 4942, 1, 0, 0, 0, + 558, 4954, 1, 0, 0, 0, 560, 5007, 1, 0, 0, 0, 562, 5010, 1, 0, 0, 0, 564, + 5095, 1, 0, 0, 0, 566, 5097, 1, 0, 0, 0, 568, 5101, 1, 0, 0, 0, 570, 5137, + 1, 0, 0, 0, 572, 5139, 1, 0, 0, 0, 574, 5141, 1, 0, 0, 0, 576, 5164, 1, + 0, 0, 0, 578, 5168, 1, 0, 0, 0, 580, 5179, 1, 0, 0, 0, 582, 5205, 1, 0, + 0, 0, 584, 5207, 1, 0, 0, 0, 586, 5215, 1, 0, 0, 0, 588, 5231, 1, 0, 0, + 0, 590, 5268, 1, 0, 0, 0, 592, 5270, 1, 0, 0, 0, 594, 5274, 1, 0, 0, 0, + 596, 5278, 1, 0, 0, 0, 598, 5295, 1, 0, 0, 0, 600, 5297, 1, 0, 0, 0, 602, + 5323, 1, 0, 0, 0, 604, 5338, 1, 0, 0, 0, 606, 5346, 1, 0, 0, 0, 608, 5357, + 1, 0, 0, 0, 610, 5381, 1, 0, 0, 0, 612, 5406, 1, 0, 0, 0, 614, 5417, 1, + 0, 0, 0, 616, 5429, 1, 0, 0, 0, 618, 5433, 1, 0, 0, 0, 620, 5455, 1, 0, + 0, 0, 622, 5478, 1, 0, 0, 0, 624, 5482, 1, 0, 0, 0, 626, 5526, 1, 0, 0, + 0, 628, 5556, 1, 0, 0, 0, 630, 5667, 1, 0, 0, 0, 632, 5702, 1, 0, 0, 0, + 634, 5704, 1, 0, 0, 0, 636, 5709, 1, 0, 0, 0, 638, 5747, 1, 0, 0, 0, 640, + 5751, 1, 0, 0, 0, 642, 5772, 1, 0, 0, 0, 644, 5788, 1, 0, 0, 0, 646, 5794, + 1, 0, 0, 0, 648, 5805, 1, 0, 0, 0, 650, 5811, 1, 0, 0, 0, 652, 5818, 1, + 0, 0, 0, 654, 5828, 1, 0, 0, 0, 656, 5844, 1, 0, 0, 0, 658, 5921, 1, 0, + 0, 0, 660, 5940, 1, 0, 0, 0, 662, 5955, 1, 0, 0, 0, 664, 5967, 1, 0, 0, + 0, 666, 6008, 1, 0, 0, 0, 668, 6010, 1, 0, 0, 0, 670, 6012, 1, 0, 0, 0, + 672, 6020, 1, 0, 0, 0, 674, 6026, 1, 0, 0, 0, 676, 6028, 1, 0, 0, 0, 678, + 6563, 1, 0, 0, 0, 680, 6586, 1, 0, 0, 0, 682, 6588, 1, 0, 0, 0, 684, 6596, + 1, 0, 0, 0, 686, 6598, 1, 0, 0, 0, 688, 6606, 1, 0, 0, 0, 690, 6790, 1, + 0, 0, 0, 692, 6792, 1, 0, 0, 0, 694, 6838, 1, 0, 0, 0, 696, 6854, 1, 0, + 0, 0, 698, 6856, 1, 0, 0, 0, 700, 6903, 1, 0, 0, 0, 702, 6905, 1, 0, 0, + 0, 704, 6920, 1, 0, 0, 0, 706, 6932, 1, 0, 0, 0, 708, 6936, 1, 0, 0, 0, + 710, 6938, 1, 0, 0, 0, 712, 6962, 1, 0, 0, 0, 714, 6984, 1, 0, 0, 0, 716, + 6996, 1, 0, 0, 0, 718, 7012, 1, 0, 0, 0, 720, 7014, 1, 0, 0, 0, 722, 7017, + 1, 0, 0, 0, 724, 7020, 1, 0, 0, 0, 726, 7023, 1, 0, 0, 0, 728, 7026, 1, + 0, 0, 0, 730, 7034, 1, 0, 0, 0, 732, 7038, 1, 0, 0, 0, 734, 7058, 1, 0, + 0, 0, 736, 7076, 1, 0, 0, 0, 738, 7078, 1, 0, 0, 0, 740, 7104, 1, 0, 0, + 0, 742, 7106, 1, 0, 0, 0, 744, 7124, 1, 0, 0, 0, 746, 7126, 1, 0, 0, 0, + 748, 7128, 1, 0, 0, 0, 750, 7130, 1, 0, 0, 0, 752, 7134, 1, 0, 0, 0, 754, + 7149, 1, 0, 0, 0, 756, 7157, 1, 0, 0, 0, 758, 7159, 1, 0, 0, 0, 760, 7165, + 1, 0, 0, 0, 762, 7167, 1, 0, 0, 0, 764, 7175, 1, 0, 0, 0, 766, 7177, 1, + 0, 0, 0, 768, 7180, 1, 0, 0, 0, 770, 7242, 1, 0, 0, 0, 772, 7245, 1, 0, + 0, 0, 774, 7249, 1, 0, 0, 0, 776, 7289, 1, 0, 0, 0, 778, 7303, 1, 0, 0, + 0, 780, 7305, 1, 0, 0, 0, 782, 7312, 1, 0, 0, 0, 784, 7320, 1, 0, 0, 0, + 786, 7322, 1, 0, 0, 0, 788, 7330, 1, 0, 0, 0, 790, 7339, 1, 0, 0, 0, 792, + 7343, 1, 0, 0, 0, 794, 7374, 1, 0, 0, 0, 796, 7376, 1, 0, 0, 0, 798, 7384, + 1, 0, 0, 0, 800, 7393, 1, 0, 0, 0, 802, 7418, 1, 0, 0, 0, 804, 7420, 1, + 0, 0, 0, 806, 7436, 1, 0, 0, 0, 808, 7443, 1, 0, 0, 0, 810, 7450, 1, 0, + 0, 0, 812, 7452, 1, 0, 0, 0, 814, 7463, 1, 0, 0, 0, 816, 7470, 1, 0, 0, + 0, 818, 7472, 1, 0, 0, 0, 820, 7494, 1, 0, 0, 0, 822, 7496, 1, 0, 0, 0, + 824, 7504, 1, 0, 0, 0, 826, 7519, 1, 0, 0, 0, 828, 7524, 1, 0, 0, 0, 830, + 7535, 1, 0, 0, 0, 832, 7542, 1, 0, 0, 0, 834, 7544, 1, 0, 0, 0, 836, 7557, + 1, 0, 0, 0, 838, 7559, 1, 0, 0, 0, 840, 7561, 1, 0, 0, 0, 842, 7570, 1, + 0, 0, 0, 844, 7572, 1, 0, 0, 0, 846, 7584, 1, 0, 0, 0, 848, 7589, 1, 0, + 0, 0, 850, 7591, 1, 0, 0, 0, 852, 854, 3, 2, 1, 0, 853, 852, 1, 0, 0, 0, + 854, 857, 1, 0, 0, 0, 855, 853, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, + 858, 1, 0, 0, 0, 857, 855, 1, 0, 0, 0, 858, 859, 5, 0, 0, 1, 859, 1, 1, + 0, 0, 0, 860, 862, 3, 838, 419, 0, 861, 860, 1, 0, 0, 0, 861, 862, 1, 0, + 0, 0, 862, 866, 1, 0, 0, 0, 863, 867, 3, 4, 2, 0, 864, 867, 3, 674, 337, + 0, 865, 867, 3, 736, 368, 0, 866, 863, 1, 0, 0, 0, 866, 864, 1, 0, 0, 0, + 866, 865, 1, 0, 0, 0, 867, 869, 1, 0, 0, 0, 868, 870, 5, 549, 0, 0, 869, + 868, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 872, 1, 0, 0, 0, 871, 873, + 5, 545, 0, 0, 872, 871, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 3, 1, 0, + 0, 0, 874, 882, 3, 8, 4, 0, 875, 882, 3, 10, 5, 0, 876, 882, 3, 44, 22, + 0, 877, 882, 3, 46, 23, 0, 878, 882, 3, 50, 25, 0, 879, 882, 3, 6, 3, 0, + 880, 882, 3, 52, 26, 0, 881, 874, 1, 0, 0, 0, 881, 875, 1, 0, 0, 0, 881, + 876, 1, 0, 0, 0, 881, 877, 1, 0, 0, 0, 881, 878, 1, 0, 0, 0, 881, 879, + 1, 0, 0, 0, 881, 880, 1, 0, 0, 0, 882, 5, 1, 0, 0, 0, 883, 884, 5, 416, + 0, 0, 884, 885, 5, 190, 0, 0, 885, 886, 5, 48, 0, 0, 886, 891, 3, 686, + 343, 0, 887, 888, 5, 550, 0, 0, 888, 890, 3, 686, 343, 0, 889, 887, 1, + 0, 0, 0, 890, 893, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 891, 892, 1, 0, 0, + 0, 892, 894, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 894, 895, 5, 73, 0, 0, 895, + 900, 3, 684, 342, 0, 896, 897, 5, 303, 0, 0, 897, 899, 3, 684, 342, 0, + 898, 896, 1, 0, 0, 0, 899, 902, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, + 901, 1, 0, 0, 0, 901, 908, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 903, 906, + 5, 307, 0, 0, 904, 907, 3, 828, 414, 0, 905, 907, 5, 570, 0, 0, 906, 904, + 1, 0, 0, 0, 906, 905, 1, 0, 0, 0, 907, 909, 1, 0, 0, 0, 908, 903, 1, 0, + 0, 0, 908, 909, 1, 0, 0, 0, 909, 912, 1, 0, 0, 0, 910, 911, 5, 460, 0, + 0, 911, 913, 5, 461, 0, 0, 912, 910, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, + 913, 7, 1, 0, 0, 0, 914, 916, 3, 838, 419, 0, 915, 914, 1, 0, 0, 0, 915, + 916, 1, 0, 0, 0, 916, 920, 1, 0, 0, 0, 917, 919, 3, 840, 420, 0, 918, 917, + 1, 0, 0, 0, 919, 922, 1, 0, 0, 0, 920, 918, 1, 0, 0, 0, 920, 921, 1, 0, + 0, 0, 921, 923, 1, 0, 0, 0, 922, 920, 1, 0, 0, 0, 923, 926, 5, 17, 0, 0, + 924, 925, 5, 304, 0, 0, 925, 927, 7, 0, 0, 0, 926, 924, 1, 0, 0, 0, 926, + 927, 1, 0, 0, 0, 927, 962, 1, 0, 0, 0, 928, 963, 3, 102, 51, 0, 929, 963, + 3, 140, 70, 0, 930, 963, 3, 156, 78, 0, 931, 963, 3, 238, 119, 0, 932, + 963, 3, 240, 120, 0, 933, 963, 3, 426, 213, 0, 934, 963, 3, 428, 214, 0, + 935, 963, 3, 162, 81, 0, 936, 963, 3, 228, 114, 0, 937, 963, 3, 534, 267, + 0, 938, 963, 3, 542, 271, 0, 939, 963, 3, 550, 275, 0, 940, 963, 3, 558, + 279, 0, 941, 963, 3, 584, 292, 0, 942, 963, 3, 586, 293, 0, 943, 963, 3, + 588, 294, 0, 944, 963, 3, 608, 304, 0, 945, 963, 3, 610, 305, 0, 946, 963, + 3, 612, 306, 0, 947, 963, 3, 618, 309, 0, 948, 963, 3, 624, 312, 0, 949, + 963, 3, 58, 29, 0, 950, 963, 3, 90, 45, 0, 951, 963, 3, 174, 87, 0, 952, + 963, 3, 204, 102, 0, 953, 963, 3, 208, 104, 0, 954, 963, 3, 218, 109, 0, + 955, 963, 3, 556, 278, 0, 956, 963, 3, 574, 287, 0, 957, 963, 3, 824, 412, + 0, 958, 963, 3, 186, 93, 0, 959, 963, 3, 194, 97, 0, 960, 963, 3, 196, + 98, 0, 961, 963, 3, 198, 99, 0, 962, 928, 1, 0, 0, 0, 962, 929, 1, 0, 0, + 0, 962, 930, 1, 0, 0, 0, 962, 931, 1, 0, 0, 0, 962, 932, 1, 0, 0, 0, 962, + 933, 1, 0, 0, 0, 962, 934, 1, 0, 0, 0, 962, 935, 1, 0, 0, 0, 962, 936, + 1, 0, 0, 0, 962, 937, 1, 0, 0, 0, 962, 938, 1, 0, 0, 0, 962, 939, 1, 0, + 0, 0, 962, 940, 1, 0, 0, 0, 962, 941, 1, 0, 0, 0, 962, 942, 1, 0, 0, 0, + 962, 943, 1, 0, 0, 0, 962, 944, 1, 0, 0, 0, 962, 945, 1, 0, 0, 0, 962, + 946, 1, 0, 0, 0, 962, 947, 1, 0, 0, 0, 962, 948, 1, 0, 0, 0, 962, 949, + 1, 0, 0, 0, 962, 950, 1, 0, 0, 0, 962, 951, 1, 0, 0, 0, 962, 952, 1, 0, + 0, 0, 962, 953, 1, 0, 0, 0, 962, 954, 1, 0, 0, 0, 962, 955, 1, 0, 0, 0, + 962, 956, 1, 0, 0, 0, 962, 957, 1, 0, 0, 0, 962, 958, 1, 0, 0, 0, 962, + 959, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 961, 1, 0, 0, 0, 963, 9, 1, + 0, 0, 0, 964, 965, 5, 18, 0, 0, 965, 966, 5, 23, 0, 0, 966, 968, 3, 828, + 414, 0, 967, 969, 3, 148, 74, 0, 968, 967, 1, 0, 0, 0, 969, 970, 1, 0, + 0, 0, 970, 968, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 1086, 1, 0, 0, 0, + 972, 973, 5, 18, 0, 0, 973, 974, 5, 27, 0, 0, 974, 976, 3, 828, 414, 0, + 975, 977, 3, 150, 75, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, + 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 1086, 1, 0, 0, 0, 980, 981, + 5, 18, 0, 0, 981, 982, 5, 28, 0, 0, 982, 984, 3, 828, 414, 0, 983, 985, + 3, 152, 76, 0, 984, 983, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 984, 1, + 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 1086, 1, 0, 0, 0, 988, 989, 5, 18, + 0, 0, 989, 990, 5, 36, 0, 0, 990, 992, 3, 828, 414, 0, 991, 993, 3, 154, + 77, 0, 992, 991, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 992, 1, 0, 0, 0, + 994, 995, 1, 0, 0, 0, 995, 1086, 1, 0, 0, 0, 996, 997, 5, 18, 0, 0, 997, + 998, 5, 332, 0, 0, 998, 999, 5, 359, 0, 0, 999, 1000, 3, 828, 414, 0, 1000, + 1001, 5, 48, 0, 0, 1001, 1006, 3, 594, 297, 0, 1002, 1003, 5, 550, 0, 0, + 1003, 1005, 3, 594, 297, 0, 1004, 1002, 1, 0, 0, 0, 1005, 1008, 1, 0, 0, + 0, 1006, 1004, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1086, 1, 0, 0, + 0, 1008, 1006, 1, 0, 0, 0, 1009, 1010, 5, 18, 0, 0, 1010, 1011, 5, 332, + 0, 0, 1011, 1012, 5, 330, 0, 0, 1012, 1013, 3, 828, 414, 0, 1013, 1014, + 5, 48, 0, 0, 1014, 1019, 3, 594, 297, 0, 1015, 1016, 5, 550, 0, 0, 1016, + 1018, 3, 594, 297, 0, 1017, 1015, 1, 0, 0, 0, 1018, 1021, 1, 0, 0, 0, 1019, + 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1086, 1, 0, 0, 0, 1021, + 1019, 1, 0, 0, 0, 1022, 1023, 5, 18, 0, 0, 1023, 1024, 5, 216, 0, 0, 1024, + 1025, 5, 94, 0, 0, 1025, 1026, 7, 1, 0, 0, 1026, 1027, 3, 828, 414, 0, + 1027, 1028, 5, 189, 0, 0, 1028, 1030, 5, 570, 0, 0, 1029, 1031, 3, 16, + 8, 0, 1030, 1029, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 1030, 1, 0, + 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1086, 1, 0, 0, 0, 1034, 1035, 5, 18, + 0, 0, 1035, 1036, 5, 468, 0, 0, 1036, 1086, 3, 666, 333, 0, 1037, 1038, + 5, 18, 0, 0, 1038, 1039, 5, 33, 0, 0, 1039, 1040, 3, 828, 414, 0, 1040, + 1042, 5, 554, 0, 0, 1041, 1043, 3, 20, 10, 0, 1042, 1041, 1, 0, 0, 0, 1043, + 1044, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, + 1046, 1, 0, 0, 0, 1046, 1047, 5, 555, 0, 0, 1047, 1086, 1, 0, 0, 0, 1048, + 1049, 5, 18, 0, 0, 1049, 1050, 5, 34, 0, 0, 1050, 1051, 3, 828, 414, 0, + 1051, 1053, 5, 554, 0, 0, 1052, 1054, 3, 20, 10, 0, 1053, 1052, 1, 0, 0, + 0, 1054, 1055, 1, 0, 0, 0, 1055, 1053, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, + 0, 1056, 1057, 1, 0, 0, 0, 1057, 1058, 5, 555, 0, 0, 1058, 1086, 1, 0, + 0, 0, 1059, 1060, 5, 18, 0, 0, 1060, 1061, 5, 32, 0, 0, 1061, 1063, 3, + 828, 414, 0, 1062, 1064, 3, 658, 329, 0, 1063, 1062, 1, 0, 0, 0, 1064, + 1065, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, + 1068, 1, 0, 0, 0, 1067, 1069, 5, 549, 0, 0, 1068, 1067, 1, 0, 0, 0, 1068, + 1069, 1, 0, 0, 0, 1069, 1086, 1, 0, 0, 0, 1070, 1071, 5, 18, 0, 0, 1071, + 1072, 5, 362, 0, 0, 1072, 1073, 5, 329, 0, 0, 1073, 1074, 5, 330, 0, 0, + 1074, 1075, 3, 828, 414, 0, 1075, 1082, 3, 12, 6, 0, 1076, 1078, 5, 550, + 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1079, 1, 0, + 0, 0, 1079, 1081, 3, 12, 6, 0, 1080, 1077, 1, 0, 0, 0, 1081, 1084, 1, 0, + 0, 0, 1082, 1080, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1086, 1, 0, + 0, 0, 1084, 1082, 1, 0, 0, 0, 1085, 964, 1, 0, 0, 0, 1085, 972, 1, 0, 0, + 0, 1085, 980, 1, 0, 0, 0, 1085, 988, 1, 0, 0, 0, 1085, 996, 1, 0, 0, 0, + 1085, 1009, 1, 0, 0, 0, 1085, 1022, 1, 0, 0, 0, 1085, 1034, 1, 0, 0, 0, + 1085, 1037, 1, 0, 0, 0, 1085, 1048, 1, 0, 0, 0, 1085, 1059, 1, 0, 0, 0, + 1085, 1070, 1, 0, 0, 0, 1086, 11, 1, 0, 0, 0, 1087, 1088, 5, 48, 0, 0, + 1088, 1093, 3, 14, 7, 0, 1089, 1090, 5, 550, 0, 0, 1090, 1092, 3, 14, 7, + 0, 1091, 1089, 1, 0, 0, 0, 1092, 1095, 1, 0, 0, 0, 1093, 1091, 1, 0, 0, + 0, 1093, 1094, 1, 0, 0, 0, 1094, 1102, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, + 0, 1096, 1097, 5, 47, 0, 0, 1097, 1102, 3, 578, 289, 0, 1098, 1099, 5, + 19, 0, 0, 1099, 1100, 5, 348, 0, 0, 1100, 1102, 5, 566, 0, 0, 1101, 1087, + 1, 0, 0, 0, 1101, 1096, 1, 0, 0, 0, 1101, 1098, 1, 0, 0, 0, 1102, 13, 1, + 0, 0, 0, 1103, 1104, 3, 830, 415, 0, 1104, 1105, 5, 539, 0, 0, 1105, 1106, + 5, 566, 0, 0, 1106, 15, 1, 0, 0, 0, 1107, 1108, 5, 48, 0, 0, 1108, 1113, + 3, 18, 9, 0, 1109, 1110, 5, 550, 0, 0, 1110, 1112, 3, 18, 9, 0, 1111, 1109, + 1, 0, 0, 0, 1112, 1115, 1, 0, 0, 0, 1113, 1111, 1, 0, 0, 0, 1113, 1114, + 1, 0, 0, 0, 1114, 1120, 1, 0, 0, 0, 1115, 1113, 1, 0, 0, 0, 1116, 1117, + 5, 217, 0, 0, 1117, 1118, 5, 213, 0, 0, 1118, 1120, 5, 214, 0, 0, 1119, + 1107, 1, 0, 0, 0, 1119, 1116, 1, 0, 0, 0, 1120, 17, 1, 0, 0, 0, 1121, 1122, + 5, 210, 0, 0, 1122, 1123, 5, 539, 0, 0, 1123, 1137, 5, 566, 0, 0, 1124, + 1125, 5, 211, 0, 0, 1125, 1126, 5, 539, 0, 0, 1126, 1137, 5, 566, 0, 0, + 1127, 1128, 5, 566, 0, 0, 1128, 1129, 5, 539, 0, 0, 1129, 1137, 5, 566, + 0, 0, 1130, 1131, 5, 566, 0, 0, 1131, 1132, 5, 539, 0, 0, 1132, 1137, 5, + 94, 0, 0, 1133, 1134, 5, 566, 0, 0, 1134, 1135, 5, 539, 0, 0, 1135, 1137, + 5, 515, 0, 0, 1136, 1121, 1, 0, 0, 0, 1136, 1124, 1, 0, 0, 0, 1136, 1127, + 1, 0, 0, 0, 1136, 1130, 1, 0, 0, 0, 1136, 1133, 1, 0, 0, 0, 1137, 19, 1, + 0, 0, 0, 1138, 1140, 3, 22, 11, 0, 1139, 1141, 5, 549, 0, 0, 1140, 1139, + 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1163, 1, 0, 0, 0, 1142, 1144, + 3, 28, 14, 0, 1143, 1145, 5, 549, 0, 0, 1144, 1143, 1, 0, 0, 0, 1144, 1145, + 1, 0, 0, 0, 1145, 1163, 1, 0, 0, 0, 1146, 1148, 3, 30, 15, 0, 1147, 1149, + 5, 549, 0, 0, 1148, 1147, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1163, + 1, 0, 0, 0, 1150, 1152, 3, 32, 16, 0, 1151, 1153, 5, 549, 0, 0, 1152, 1151, + 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1163, 1, 0, 0, 0, 1154, 1156, + 3, 36, 18, 0, 1155, 1157, 5, 549, 0, 0, 1156, 1155, 1, 0, 0, 0, 1156, 1157, + 1, 0, 0, 0, 1157, 1163, 1, 0, 0, 0, 1158, 1160, 3, 38, 19, 0, 1159, 1161, + 5, 549, 0, 0, 1160, 1159, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1163, + 1, 0, 0, 0, 1162, 1138, 1, 0, 0, 0, 1162, 1142, 1, 0, 0, 0, 1162, 1146, + 1, 0, 0, 0, 1162, 1150, 1, 0, 0, 0, 1162, 1154, 1, 0, 0, 0, 1162, 1158, + 1, 0, 0, 0, 1163, 21, 1, 0, 0, 0, 1164, 1165, 5, 48, 0, 0, 1165, 1166, + 5, 35, 0, 0, 1166, 1167, 5, 539, 0, 0, 1167, 1180, 3, 828, 414, 0, 1168, + 1169, 5, 375, 0, 0, 1169, 1170, 5, 552, 0, 0, 1170, 1175, 3, 24, 12, 0, + 1171, 1172, 5, 550, 0, 0, 1172, 1174, 3, 24, 12, 0, 1173, 1171, 1, 0, 0, + 0, 1174, 1177, 1, 0, 0, 0, 1175, 1173, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, + 0, 1176, 1178, 1, 0, 0, 0, 1177, 1175, 1, 0, 0, 0, 1178, 1179, 5, 553, + 0, 0, 1179, 1181, 1, 0, 0, 0, 1180, 1168, 1, 0, 0, 0, 1180, 1181, 1, 0, + 0, 0, 1181, 1204, 1, 0, 0, 0, 1182, 1183, 5, 48, 0, 0, 1183, 1184, 3, 26, + 13, 0, 1184, 1185, 5, 94, 0, 0, 1185, 1186, 3, 34, 17, 0, 1186, 1204, 1, + 0, 0, 0, 1187, 1188, 5, 48, 0, 0, 1188, 1189, 5, 552, 0, 0, 1189, 1194, + 3, 26, 13, 0, 1190, 1191, 5, 550, 0, 0, 1191, 1193, 3, 26, 13, 0, 1192, + 1190, 1, 0, 0, 0, 1193, 1196, 1, 0, 0, 0, 1194, 1192, 1, 0, 0, 0, 1194, + 1195, 1, 0, 0, 0, 1195, 1197, 1, 0, 0, 0, 1196, 1194, 1, 0, 0, 0, 1197, + 1198, 5, 553, 0, 0, 1198, 1199, 5, 94, 0, 0, 1199, 1200, 3, 34, 17, 0, + 1200, 1204, 1, 0, 0, 0, 1201, 1202, 5, 48, 0, 0, 1202, 1204, 3, 26, 13, + 0, 1203, 1164, 1, 0, 0, 0, 1203, 1182, 1, 0, 0, 0, 1203, 1187, 1, 0, 0, + 0, 1203, 1201, 1, 0, 0, 0, 1204, 23, 1, 0, 0, 0, 1205, 1206, 3, 830, 415, + 0, 1206, 1207, 5, 77, 0, 0, 1207, 1208, 3, 830, 415, 0, 1208, 25, 1, 0, + 0, 0, 1209, 1210, 5, 194, 0, 0, 1210, 1211, 5, 539, 0, 0, 1211, 1220, 3, + 500, 250, 0, 1212, 1213, 3, 830, 415, 0, 1213, 1214, 5, 539, 0, 0, 1214, + 1215, 3, 526, 263, 0, 1215, 1220, 1, 0, 0, 0, 1216, 1217, 5, 566, 0, 0, + 1217, 1218, 5, 539, 0, 0, 1218, 1220, 3, 526, 263, 0, 1219, 1209, 1, 0, + 0, 0, 1219, 1212, 1, 0, 0, 0, 1219, 1216, 1, 0, 0, 0, 1220, 27, 1, 0, 0, + 0, 1221, 1222, 5, 413, 0, 0, 1222, 1223, 5, 415, 0, 0, 1223, 1224, 3, 34, + 17, 0, 1224, 1225, 5, 554, 0, 0, 1225, 1226, 3, 484, 242, 0, 1226, 1227, + 5, 555, 0, 0, 1227, 1236, 1, 0, 0, 0, 1228, 1229, 5, 413, 0, 0, 1229, 1230, + 5, 414, 0, 0, 1230, 1231, 3, 34, 17, 0, 1231, 1232, 5, 554, 0, 0, 1232, + 1233, 3, 484, 242, 0, 1233, 1234, 5, 555, 0, 0, 1234, 1236, 1, 0, 0, 0, + 1235, 1221, 1, 0, 0, 0, 1235, 1228, 1, 0, 0, 0, 1236, 29, 1, 0, 0, 0, 1237, + 1238, 5, 19, 0, 0, 1238, 1239, 5, 189, 0, 0, 1239, 1244, 3, 34, 17, 0, + 1240, 1241, 5, 550, 0, 0, 1241, 1243, 3, 34, 17, 0, 1242, 1240, 1, 0, 0, + 0, 1243, 1246, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, + 0, 1245, 31, 1, 0, 0, 0, 1246, 1244, 1, 0, 0, 0, 1247, 1248, 5, 454, 0, + 0, 1248, 1249, 3, 34, 17, 0, 1249, 1250, 5, 140, 0, 0, 1250, 1251, 5, 554, + 0, 0, 1251, 1252, 3, 484, 242, 0, 1252, 1253, 5, 555, 0, 0, 1253, 33, 1, + 0, 0, 0, 1254, 1255, 3, 830, 415, 0, 1255, 1256, 5, 551, 0, 0, 1256, 1257, + 3, 830, 415, 0, 1257, 1260, 1, 0, 0, 0, 1258, 1260, 3, 830, 415, 0, 1259, + 1254, 1, 0, 0, 0, 1259, 1258, 1, 0, 0, 0, 1260, 35, 1, 0, 0, 0, 1261, 1262, + 5, 47, 0, 0, 1262, 1263, 5, 206, 0, 0, 1263, 1264, 3, 444, 222, 0, 1264, + 37, 1, 0, 0, 0, 1265, 1266, 5, 19, 0, 0, 1266, 1267, 5, 206, 0, 0, 1267, + 1268, 5, 569, 0, 0, 1268, 39, 1, 0, 0, 0, 1269, 1270, 5, 397, 0, 0, 1270, + 1271, 7, 2, 0, 0, 1271, 1274, 3, 828, 414, 0, 1272, 1273, 5, 453, 0, 0, + 1273, 1275, 3, 828, 414, 0, 1274, 1272, 1, 0, 0, 0, 1274, 1275, 1, 0, 0, + 0, 1275, 1293, 1, 0, 0, 0, 1276, 1277, 5, 398, 0, 0, 1277, 1278, 5, 33, + 0, 0, 1278, 1293, 3, 828, 414, 0, 1279, 1280, 5, 305, 0, 0, 1280, 1281, + 5, 399, 0, 0, 1281, 1282, 5, 33, 0, 0, 1282, 1293, 3, 828, 414, 0, 1283, + 1284, 5, 395, 0, 0, 1284, 1288, 5, 552, 0, 0, 1285, 1287, 3, 42, 21, 0, + 1286, 1285, 1, 0, 0, 0, 1287, 1290, 1, 0, 0, 0, 1288, 1286, 1, 0, 0, 0, + 1288, 1289, 1, 0, 0, 0, 1289, 1291, 1, 0, 0, 0, 1290, 1288, 1, 0, 0, 0, + 1291, 1293, 5, 553, 0, 0, 1292, 1269, 1, 0, 0, 0, 1292, 1276, 1, 0, 0, + 0, 1292, 1279, 1, 0, 0, 0, 1292, 1283, 1, 0, 0, 0, 1293, 41, 1, 0, 0, 0, + 1294, 1295, 5, 395, 0, 0, 1295, 1296, 5, 157, 0, 0, 1296, 1301, 5, 566, + 0, 0, 1297, 1298, 5, 33, 0, 0, 1298, 1302, 3, 828, 414, 0, 1299, 1300, 5, 30, 0, 0, 1300, 1302, 3, 828, 414, 0, 1301, 1297, 1, 0, 0, 0, 1301, 1299, 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1304, 1, 0, 0, 0, 1303, 1305, 5, 549, 0, 0, 1304, 1303, 1, 0, 0, 0, 1304, 1305, 1, 0, 0, 0, 1305, @@ -4069,196 +4070,199 @@ func mdlparserParserInit() { 0, 0, 7297, 7298, 3, 830, 415, 0, 7298, 7304, 1, 0, 0, 0, 7299, 7300, 3, 830, 415, 0, 7300, 7301, 5, 450, 0, 0, 7301, 7302, 3, 830, 415, 0, 7302, 7304, 1, 0, 0, 0, 7303, 7293, 1, 0, 0, 0, 7303, 7299, 1, 0, 0, 0, 7304, - 779, 1, 0, 0, 0, 7305, 7306, 5, 570, 0, 0, 7306, 781, 1, 0, 0, 0, 7307, - 7308, 5, 409, 0, 0, 7308, 7309, 5, 410, 0, 0, 7309, 7310, 3, 830, 415, - 0, 7310, 7311, 5, 77, 0, 0, 7311, 7312, 5, 554, 0, 0, 7312, 7313, 3, 484, - 242, 0, 7313, 7314, 5, 555, 0, 0, 7314, 783, 1, 0, 0, 0, 7315, 7316, 3, - 786, 393, 0, 7316, 785, 1, 0, 0, 0, 7317, 7322, 3, 788, 394, 0, 7318, 7319, - 5, 304, 0, 0, 7319, 7321, 3, 788, 394, 0, 7320, 7318, 1, 0, 0, 0, 7321, - 7324, 1, 0, 0, 0, 7322, 7320, 1, 0, 0, 0, 7322, 7323, 1, 0, 0, 0, 7323, - 787, 1, 0, 0, 0, 7324, 7322, 1, 0, 0, 0, 7325, 7330, 3, 790, 395, 0, 7326, - 7327, 5, 303, 0, 0, 7327, 7329, 3, 790, 395, 0, 7328, 7326, 1, 0, 0, 0, - 7329, 7332, 1, 0, 0, 0, 7330, 7328, 1, 0, 0, 0, 7330, 7331, 1, 0, 0, 0, - 7331, 789, 1, 0, 0, 0, 7332, 7330, 1, 0, 0, 0, 7333, 7335, 5, 305, 0, 0, - 7334, 7333, 1, 0, 0, 0, 7334, 7335, 1, 0, 0, 0, 7335, 7336, 1, 0, 0, 0, - 7336, 7337, 3, 792, 396, 0, 7337, 791, 1, 0, 0, 0, 7338, 7367, 3, 796, - 398, 0, 7339, 7340, 3, 794, 397, 0, 7340, 7341, 3, 796, 398, 0, 7341, 7368, - 1, 0, 0, 0, 7342, 7368, 5, 6, 0, 0, 7343, 7368, 5, 5, 0, 0, 7344, 7345, - 5, 307, 0, 0, 7345, 7348, 5, 552, 0, 0, 7346, 7349, 3, 698, 349, 0, 7347, - 7349, 3, 822, 411, 0, 7348, 7346, 1, 0, 0, 0, 7348, 7347, 1, 0, 0, 0, 7349, - 7350, 1, 0, 0, 0, 7350, 7351, 5, 553, 0, 0, 7351, 7368, 1, 0, 0, 0, 7352, - 7354, 5, 305, 0, 0, 7353, 7352, 1, 0, 0, 0, 7353, 7354, 1, 0, 0, 0, 7354, - 7355, 1, 0, 0, 0, 7355, 7356, 5, 308, 0, 0, 7356, 7357, 3, 796, 398, 0, - 7357, 7358, 5, 303, 0, 0, 7358, 7359, 3, 796, 398, 0, 7359, 7368, 1, 0, - 0, 0, 7360, 7362, 5, 305, 0, 0, 7361, 7360, 1, 0, 0, 0, 7361, 7362, 1, - 0, 0, 0, 7362, 7363, 1, 0, 0, 0, 7363, 7364, 5, 309, 0, 0, 7364, 7368, - 3, 796, 398, 0, 7365, 7366, 5, 310, 0, 0, 7366, 7368, 3, 796, 398, 0, 7367, - 7339, 1, 0, 0, 0, 7367, 7342, 1, 0, 0, 0, 7367, 7343, 1, 0, 0, 0, 7367, - 7344, 1, 0, 0, 0, 7367, 7353, 1, 0, 0, 0, 7367, 7361, 1, 0, 0, 0, 7367, - 7365, 1, 0, 0, 0, 7367, 7368, 1, 0, 0, 0, 7368, 793, 1, 0, 0, 0, 7369, - 7370, 7, 48, 0, 0, 7370, 795, 1, 0, 0, 0, 7371, 7376, 3, 798, 399, 0, 7372, - 7373, 7, 49, 0, 0, 7373, 7375, 3, 798, 399, 0, 7374, 7372, 1, 0, 0, 0, - 7375, 7378, 1, 0, 0, 0, 7376, 7374, 1, 0, 0, 0, 7376, 7377, 1, 0, 0, 0, - 7377, 797, 1, 0, 0, 0, 7378, 7376, 1, 0, 0, 0, 7379, 7384, 3, 800, 400, - 0, 7380, 7381, 7, 50, 0, 0, 7381, 7383, 3, 800, 400, 0, 7382, 7380, 1, - 0, 0, 0, 7383, 7386, 1, 0, 0, 0, 7384, 7382, 1, 0, 0, 0, 7384, 7385, 1, - 0, 0, 0, 7385, 799, 1, 0, 0, 0, 7386, 7384, 1, 0, 0, 0, 7387, 7389, 7, - 49, 0, 0, 7388, 7387, 1, 0, 0, 0, 7388, 7389, 1, 0, 0, 0, 7389, 7390, 1, - 0, 0, 0, 7390, 7391, 3, 802, 401, 0, 7391, 801, 1, 0, 0, 0, 7392, 7393, - 5, 552, 0, 0, 7393, 7394, 3, 784, 392, 0, 7394, 7395, 5, 553, 0, 0, 7395, - 7414, 1, 0, 0, 0, 7396, 7397, 5, 552, 0, 0, 7397, 7398, 3, 698, 349, 0, - 7398, 7399, 5, 553, 0, 0, 7399, 7414, 1, 0, 0, 0, 7400, 7401, 5, 311, 0, - 0, 7401, 7402, 5, 552, 0, 0, 7402, 7403, 3, 698, 349, 0, 7403, 7404, 5, - 553, 0, 0, 7404, 7414, 1, 0, 0, 0, 7405, 7414, 3, 806, 403, 0, 7406, 7414, - 3, 804, 402, 0, 7407, 7414, 3, 808, 404, 0, 7408, 7414, 3, 408, 204, 0, - 7409, 7414, 3, 400, 200, 0, 7410, 7414, 3, 812, 406, 0, 7411, 7414, 3, - 814, 407, 0, 7412, 7414, 3, 820, 410, 0, 7413, 7392, 1, 0, 0, 0, 7413, - 7396, 1, 0, 0, 0, 7413, 7400, 1, 0, 0, 0, 7413, 7405, 1, 0, 0, 0, 7413, - 7406, 1, 0, 0, 0, 7413, 7407, 1, 0, 0, 0, 7413, 7408, 1, 0, 0, 0, 7413, - 7409, 1, 0, 0, 0, 7413, 7410, 1, 0, 0, 0, 7413, 7411, 1, 0, 0, 0, 7413, - 7412, 1, 0, 0, 0, 7414, 803, 1, 0, 0, 0, 7415, 7421, 5, 80, 0, 0, 7416, - 7417, 5, 81, 0, 0, 7417, 7418, 3, 784, 392, 0, 7418, 7419, 5, 82, 0, 0, - 7419, 7420, 3, 784, 392, 0, 7420, 7422, 1, 0, 0, 0, 7421, 7416, 1, 0, 0, - 0, 7422, 7423, 1, 0, 0, 0, 7423, 7421, 1, 0, 0, 0, 7423, 7424, 1, 0, 0, - 0, 7424, 7427, 1, 0, 0, 0, 7425, 7426, 5, 83, 0, 0, 7426, 7428, 3, 784, - 392, 0, 7427, 7425, 1, 0, 0, 0, 7427, 7428, 1, 0, 0, 0, 7428, 7429, 1, - 0, 0, 0, 7429, 7430, 5, 84, 0, 0, 7430, 805, 1, 0, 0, 0, 7431, 7432, 5, - 106, 0, 0, 7432, 7433, 3, 784, 392, 0, 7433, 7434, 5, 82, 0, 0, 7434, 7435, - 3, 784, 392, 0, 7435, 7436, 5, 83, 0, 0, 7436, 7437, 3, 784, 392, 0, 7437, - 807, 1, 0, 0, 0, 7438, 7439, 5, 302, 0, 0, 7439, 7440, 5, 552, 0, 0, 7440, - 7441, 3, 784, 392, 0, 7441, 7442, 5, 77, 0, 0, 7442, 7443, 3, 810, 405, - 0, 7443, 7444, 5, 553, 0, 0, 7444, 809, 1, 0, 0, 0, 7445, 7446, 7, 51, - 0, 0, 7446, 811, 1, 0, 0, 0, 7447, 7448, 7, 52, 0, 0, 7448, 7454, 5, 552, - 0, 0, 7449, 7451, 5, 85, 0, 0, 7450, 7449, 1, 0, 0, 0, 7450, 7451, 1, 0, - 0, 0, 7451, 7452, 1, 0, 0, 0, 7452, 7455, 3, 784, 392, 0, 7453, 7455, 5, - 544, 0, 0, 7454, 7450, 1, 0, 0, 0, 7454, 7453, 1, 0, 0, 0, 7455, 7456, - 1, 0, 0, 0, 7456, 7457, 5, 553, 0, 0, 7457, 813, 1, 0, 0, 0, 7458, 7459, - 3, 816, 408, 0, 7459, 7461, 5, 552, 0, 0, 7460, 7462, 3, 818, 409, 0, 7461, - 7460, 1, 0, 0, 0, 7461, 7462, 1, 0, 0, 0, 7462, 7463, 1, 0, 0, 0, 7463, - 7464, 5, 553, 0, 0, 7464, 815, 1, 0, 0, 0, 7465, 7466, 7, 53, 0, 0, 7466, - 817, 1, 0, 0, 0, 7467, 7472, 3, 784, 392, 0, 7468, 7469, 5, 550, 0, 0, - 7469, 7471, 3, 784, 392, 0, 7470, 7468, 1, 0, 0, 0, 7471, 7474, 1, 0, 0, - 0, 7472, 7470, 1, 0, 0, 0, 7472, 7473, 1, 0, 0, 0, 7473, 819, 1, 0, 0, - 0, 7474, 7472, 1, 0, 0, 0, 7475, 7490, 3, 832, 416, 0, 7476, 7481, 5, 569, - 0, 0, 7477, 7478, 5, 551, 0, 0, 7478, 7480, 3, 122, 61, 0, 7479, 7477, - 1, 0, 0, 0, 7480, 7483, 1, 0, 0, 0, 7481, 7479, 1, 0, 0, 0, 7481, 7482, - 1, 0, 0, 0, 7482, 7490, 1, 0, 0, 0, 7483, 7481, 1, 0, 0, 0, 7484, 7485, - 5, 559, 0, 0, 7485, 7490, 3, 828, 414, 0, 7486, 7490, 3, 828, 414, 0, 7487, - 7490, 5, 570, 0, 0, 7488, 7490, 5, 565, 0, 0, 7489, 7475, 1, 0, 0, 0, 7489, - 7476, 1, 0, 0, 0, 7489, 7484, 1, 0, 0, 0, 7489, 7486, 1, 0, 0, 0, 7489, - 7487, 1, 0, 0, 0, 7489, 7488, 1, 0, 0, 0, 7490, 821, 1, 0, 0, 0, 7491, - 7496, 3, 784, 392, 0, 7492, 7493, 5, 550, 0, 0, 7493, 7495, 3, 784, 392, - 0, 7494, 7492, 1, 0, 0, 0, 7495, 7498, 1, 0, 0, 0, 7496, 7494, 1, 0, 0, - 0, 7496, 7497, 1, 0, 0, 0, 7497, 823, 1, 0, 0, 0, 7498, 7496, 1, 0, 0, - 0, 7499, 7500, 5, 518, 0, 0, 7500, 7501, 5, 520, 0, 0, 7501, 7502, 3, 828, - 414, 0, 7502, 7503, 5, 195, 0, 0, 7503, 7504, 7, 54, 0, 0, 7504, 7505, - 5, 566, 0, 0, 7505, 7509, 5, 554, 0, 0, 7506, 7508, 3, 826, 413, 0, 7507, - 7506, 1, 0, 0, 0, 7508, 7511, 1, 0, 0, 0, 7509, 7507, 1, 0, 0, 0, 7509, - 7510, 1, 0, 0, 0, 7510, 7512, 1, 0, 0, 0, 7511, 7509, 1, 0, 0, 0, 7512, - 7513, 5, 555, 0, 0, 7513, 825, 1, 0, 0, 0, 7514, 7515, 7, 55, 0, 0, 7515, - 7517, 7, 16, 0, 0, 7516, 7518, 5, 549, 0, 0, 7517, 7516, 1, 0, 0, 0, 7517, - 7518, 1, 0, 0, 0, 7518, 827, 1, 0, 0, 0, 7519, 7524, 3, 830, 415, 0, 7520, - 7521, 5, 551, 0, 0, 7521, 7523, 3, 830, 415, 0, 7522, 7520, 1, 0, 0, 0, - 7523, 7526, 1, 0, 0, 0, 7524, 7522, 1, 0, 0, 0, 7524, 7525, 1, 0, 0, 0, - 7525, 829, 1, 0, 0, 0, 7526, 7524, 1, 0, 0, 0, 7527, 7531, 5, 570, 0, 0, - 7528, 7531, 5, 572, 0, 0, 7529, 7531, 3, 850, 425, 0, 7530, 7527, 1, 0, - 0, 0, 7530, 7528, 1, 0, 0, 0, 7530, 7529, 1, 0, 0, 0, 7531, 831, 1, 0, - 0, 0, 7532, 7538, 5, 566, 0, 0, 7533, 7538, 5, 568, 0, 0, 7534, 7538, 3, - 836, 418, 0, 7535, 7538, 5, 306, 0, 0, 7536, 7538, 5, 141, 0, 0, 7537, - 7532, 1, 0, 0, 0, 7537, 7533, 1, 0, 0, 0, 7537, 7534, 1, 0, 0, 0, 7537, - 7535, 1, 0, 0, 0, 7537, 7536, 1, 0, 0, 0, 7538, 833, 1, 0, 0, 0, 7539, - 7548, 5, 556, 0, 0, 7540, 7545, 3, 832, 416, 0, 7541, 7542, 5, 550, 0, - 0, 7542, 7544, 3, 832, 416, 0, 7543, 7541, 1, 0, 0, 0, 7544, 7547, 1, 0, - 0, 0, 7545, 7543, 1, 0, 0, 0, 7545, 7546, 1, 0, 0, 0, 7546, 7549, 1, 0, - 0, 0, 7547, 7545, 1, 0, 0, 0, 7548, 7540, 1, 0, 0, 0, 7548, 7549, 1, 0, - 0, 0, 7549, 7550, 1, 0, 0, 0, 7550, 7551, 5, 557, 0, 0, 7551, 835, 1, 0, - 0, 0, 7552, 7553, 7, 56, 0, 0, 7553, 837, 1, 0, 0, 0, 7554, 7555, 5, 2, - 0, 0, 7555, 839, 1, 0, 0, 0, 7556, 7557, 5, 559, 0, 0, 7557, 7563, 3, 842, - 421, 0, 7558, 7559, 5, 552, 0, 0, 7559, 7560, 3, 844, 422, 0, 7560, 7561, - 5, 553, 0, 0, 7561, 7564, 1, 0, 0, 0, 7562, 7564, 3, 848, 424, 0, 7563, - 7558, 1, 0, 0, 0, 7563, 7562, 1, 0, 0, 0, 7563, 7564, 1, 0, 0, 0, 7564, - 841, 1, 0, 0, 0, 7565, 7566, 7, 57, 0, 0, 7566, 843, 1, 0, 0, 0, 7567, - 7572, 3, 846, 423, 0, 7568, 7569, 5, 550, 0, 0, 7569, 7571, 3, 846, 423, - 0, 7570, 7568, 1, 0, 0, 0, 7571, 7574, 1, 0, 0, 0, 7572, 7570, 1, 0, 0, - 0, 7572, 7573, 1, 0, 0, 0, 7573, 845, 1, 0, 0, 0, 7574, 7572, 1, 0, 0, - 0, 7575, 7576, 5, 570, 0, 0, 7576, 7577, 5, 558, 0, 0, 7577, 7580, 3, 848, - 424, 0, 7578, 7580, 3, 848, 424, 0, 7579, 7575, 1, 0, 0, 0, 7579, 7578, - 1, 0, 0, 0, 7580, 847, 1, 0, 0, 0, 7581, 7585, 3, 832, 416, 0, 7582, 7585, - 3, 784, 392, 0, 7583, 7585, 3, 828, 414, 0, 7584, 7581, 1, 0, 0, 0, 7584, - 7582, 1, 0, 0, 0, 7584, 7583, 1, 0, 0, 0, 7585, 849, 1, 0, 0, 0, 7586, - 7587, 7, 58, 0, 0, 7587, 851, 1, 0, 0, 0, 872, 855, 861, 866, 869, 872, - 881, 891, 900, 906, 908, 912, 915, 920, 926, 962, 970, 978, 986, 994, 1006, - 1019, 1032, 1044, 1055, 1065, 1068, 1077, 1082, 1085, 1093, 1101, 1113, - 1119, 1136, 1140, 1144, 1148, 1152, 1156, 1160, 1162, 1175, 1180, 1194, - 1203, 1219, 1235, 1244, 1259, 1274, 1288, 1292, 1301, 1304, 1312, 1317, - 1319, 1430, 1432, 1441, 1450, 1452, 1465, 1474, 1476, 1487, 1493, 1501, - 1512, 1514, 1522, 1524, 1545, 1553, 1569, 1593, 1609, 1619, 1718, 1727, - 1735, 1749, 1756, 1764, 1778, 1791, 1795, 1801, 1804, 1810, 1813, 1819, - 1823, 1827, 1833, 1838, 1841, 1843, 1849, 1853, 1857, 1860, 1864, 1869, - 1877, 1886, 1889, 1893, 1904, 1908, 1913, 1922, 1928, 1933, 1939, 1944, - 1949, 1954, 1958, 1961, 1963, 1969, 2005, 2013, 2038, 2041, 2052, 2057, - 2062, 2071, 2084, 2089, 2094, 2098, 2103, 2108, 2115, 2141, 2147, 2154, - 2160, 2199, 2213, 2220, 2233, 2240, 2248, 2253, 2258, 2264, 2272, 2279, - 2283, 2287, 2290, 2295, 2300, 2309, 2312, 2317, 2324, 2332, 2346, 2356, - 2391, 2398, 2415, 2429, 2442, 2447, 2453, 2467, 2481, 2494, 2499, 2506, - 2510, 2521, 2526, 2536, 2550, 2560, 2577, 2600, 2602, 2609, 2615, 2618, - 2632, 2645, 2661, 2676, 2712, 2727, 2734, 2742, 2749, 2753, 2756, 2762, - 2765, 2772, 2776, 2779, 2784, 2791, 2798, 2814, 2819, 2827, 2833, 2838, - 2844, 2849, 2855, 2860, 2865, 2870, 2875, 2880, 2885, 2890, 2895, 2900, - 2905, 2910, 2915, 2920, 2925, 2930, 2935, 2940, 2945, 2950, 2955, 2960, - 2965, 2970, 2975, 2980, 2985, 2990, 2995, 3000, 3005, 3010, 3015, 3020, - 3025, 3030, 3035, 3040, 3045, 3050, 3055, 3060, 3065, 3070, 3075, 3080, - 3085, 3090, 3095, 3100, 3105, 3110, 3115, 3120, 3125, 3130, 3135, 3140, - 3145, 3150, 3155, 3160, 3165, 3170, 3175, 3180, 3185, 3190, 3195, 3200, - 3205, 3210, 3215, 3220, 3225, 3230, 3235, 3240, 3245, 3250, 3255, 3260, - 3265, 3270, 3275, 3280, 3285, 3290, 3295, 3300, 3305, 3310, 3315, 3320, - 3322, 3329, 3334, 3341, 3347, 3350, 3353, 3359, 3362, 3368, 3372, 3378, - 3381, 3384, 3389, 3394, 3403, 3408, 3412, 3414, 3422, 3425, 3429, 3433, - 3436, 3448, 3470, 3483, 3488, 3498, 3508, 3513, 3521, 3528, 3532, 3536, - 3547, 3554, 3568, 3575, 3579, 3583, 3591, 3595, 3599, 3609, 3611, 3615, - 3618, 3623, 3626, 3629, 3633, 3641, 3645, 3649, 3656, 3660, 3664, 3673, - 3677, 3684, 3688, 3696, 3702, 3708, 3720, 3728, 3735, 3739, 3745, 3751, - 3757, 3763, 3770, 3775, 3785, 3788, 3792, 3796, 3803, 3810, 3816, 3830, - 3837, 3852, 3856, 3863, 3868, 3872, 3875, 3878, 3882, 3888, 3906, 3911, - 3919, 3938, 3942, 3949, 3952, 3955, 3964, 3978, 3988, 3992, 4002, 4006, - 4013, 4085, 4087, 4090, 4097, 4102, 4132, 4155, 4166, 4173, 4190, 4193, - 4202, 4212, 4224, 4236, 4247, 4250, 4263, 4271, 4277, 4283, 4291, 4298, - 4306, 4313, 4320, 4332, 4335, 4347, 4371, 4379, 4387, 4407, 4411, 4413, - 4421, 4426, 4429, 4435, 4438, 4444, 4447, 4449, 4459, 4558, 4568, 4579, - 4585, 4590, 4594, 4596, 4604, 4607, 4612, 4617, 4623, 4630, 4635, 4639, - 4645, 4651, 4656, 4661, 4666, 4673, 4681, 4692, 4697, 4703, 4707, 4716, - 4718, 4720, 4728, 4764, 4767, 4770, 4778, 4785, 4796, 4805, 4811, 4819, - 4828, 4836, 4842, 4846, 4855, 4867, 4873, 4875, 4888, 4892, 4904, 4909, - 4911, 4926, 4931, 4940, 4949, 4952, 4963, 4971, 5002, 5007, 5010, 5015, - 5023, 5052, 5065, 5089, 5093, 5095, 5108, 5114, 5117, 5128, 5132, 5135, - 5137, 5151, 5159, 5174, 5181, 5186, 5191, 5196, 5200, 5203, 5224, 5229, - 5240, 5245, 5251, 5255, 5263, 5268, 5284, 5292, 5295, 5302, 5310, 5315, - 5318, 5321, 5331, 5334, 5341, 5344, 5352, 5370, 5376, 5379, 5388, 5390, - 5399, 5404, 5409, 5414, 5424, 5443, 5451, 5463, 5470, 5474, 5488, 5492, - 5496, 5501, 5506, 5511, 5518, 5521, 5526, 5556, 5564, 5568, 5572, 5576, - 5580, 5584, 5589, 5593, 5599, 5601, 5608, 5610, 5619, 5623, 5627, 5631, - 5635, 5639, 5644, 5648, 5654, 5656, 5663, 5665, 5667, 5672, 5678, 5684, - 5690, 5694, 5700, 5702, 5714, 5723, 5728, 5734, 5736, 5743, 5745, 5756, - 5765, 5770, 5774, 5778, 5784, 5786, 5798, 5803, 5816, 5822, 5826, 5833, - 5840, 5842, 5921, 5940, 5955, 5960, 5965, 5967, 5975, 5983, 5988, 5996, - 6005, 6008, 6020, 6026, 6062, 6064, 6071, 6073, 6080, 6082, 6089, 6091, - 6098, 6100, 6107, 6109, 6116, 6118, 6125, 6127, 6134, 6136, 6144, 6146, - 6153, 6155, 6162, 6164, 6172, 6174, 6182, 6184, 6192, 6194, 6201, 6203, - 6210, 6212, 6220, 6222, 6231, 6233, 6241, 6243, 6251, 6253, 6261, 6263, - 6299, 6306, 6324, 6329, 6341, 6343, 6382, 6384, 6392, 6394, 6402, 6404, - 6412, 6414, 6422, 6424, 6434, 6445, 6451, 6456, 6458, 6461, 6470, 6472, - 6481, 6483, 6491, 6493, 6507, 6509, 6517, 6519, 6528, 6530, 6538, 6540, - 6549, 6563, 6571, 6577, 6579, 6584, 6586, 6596, 6606, 6614, 6622, 6671, - 6701, 6710, 6790, 6794, 6802, 6805, 6810, 6815, 6821, 6823, 6827, 6831, - 6835, 6838, 6845, 6848, 6852, 6859, 6864, 6869, 6872, 6875, 6878, 6881, - 6884, 6888, 6891, 6894, 6898, 6901, 6903, 6907, 6917, 6920, 6925, 6930, - 6932, 6936, 6943, 6948, 6951, 6957, 6960, 6962, 6965, 6971, 6974, 6979, - 6982, 6984, 6996, 7000, 7004, 7009, 7012, 7031, 7036, 7043, 7050, 7056, - 7058, 7076, 7087, 7102, 7104, 7112, 7115, 7118, 7121, 7124, 7140, 7144, - 7149, 7157, 7165, 7172, 7215, 7220, 7229, 7234, 7237, 7242, 7247, 7263, - 7274, 7279, 7283, 7287, 7303, 7322, 7330, 7334, 7348, 7353, 7361, 7367, - 7376, 7384, 7388, 7413, 7423, 7427, 7450, 7454, 7461, 7472, 7481, 7489, - 7496, 7509, 7517, 7524, 7530, 7537, 7545, 7548, 7563, 7572, 7579, 7584, + 779, 1, 0, 0, 0, 7305, 7309, 5, 570, 0, 0, 7306, 7308, 3, 830, 415, 0, + 7307, 7306, 1, 0, 0, 0, 7308, 7311, 1, 0, 0, 0, 7309, 7307, 1, 0, 0, 0, + 7309, 7310, 1, 0, 0, 0, 7310, 781, 1, 0, 0, 0, 7311, 7309, 1, 0, 0, 0, + 7312, 7313, 5, 409, 0, 0, 7313, 7314, 5, 410, 0, 0, 7314, 7315, 3, 830, + 415, 0, 7315, 7316, 5, 77, 0, 0, 7316, 7317, 5, 554, 0, 0, 7317, 7318, + 3, 484, 242, 0, 7318, 7319, 5, 555, 0, 0, 7319, 783, 1, 0, 0, 0, 7320, + 7321, 3, 786, 393, 0, 7321, 785, 1, 0, 0, 0, 7322, 7327, 3, 788, 394, 0, + 7323, 7324, 5, 304, 0, 0, 7324, 7326, 3, 788, 394, 0, 7325, 7323, 1, 0, + 0, 0, 7326, 7329, 1, 0, 0, 0, 7327, 7325, 1, 0, 0, 0, 7327, 7328, 1, 0, + 0, 0, 7328, 787, 1, 0, 0, 0, 7329, 7327, 1, 0, 0, 0, 7330, 7335, 3, 790, + 395, 0, 7331, 7332, 5, 303, 0, 0, 7332, 7334, 3, 790, 395, 0, 7333, 7331, + 1, 0, 0, 0, 7334, 7337, 1, 0, 0, 0, 7335, 7333, 1, 0, 0, 0, 7335, 7336, + 1, 0, 0, 0, 7336, 789, 1, 0, 0, 0, 7337, 7335, 1, 0, 0, 0, 7338, 7340, + 5, 305, 0, 0, 7339, 7338, 1, 0, 0, 0, 7339, 7340, 1, 0, 0, 0, 7340, 7341, + 1, 0, 0, 0, 7341, 7342, 3, 792, 396, 0, 7342, 791, 1, 0, 0, 0, 7343, 7372, + 3, 796, 398, 0, 7344, 7345, 3, 794, 397, 0, 7345, 7346, 3, 796, 398, 0, + 7346, 7373, 1, 0, 0, 0, 7347, 7373, 5, 6, 0, 0, 7348, 7373, 5, 5, 0, 0, + 7349, 7350, 5, 307, 0, 0, 7350, 7353, 5, 552, 0, 0, 7351, 7354, 3, 698, + 349, 0, 7352, 7354, 3, 822, 411, 0, 7353, 7351, 1, 0, 0, 0, 7353, 7352, + 1, 0, 0, 0, 7354, 7355, 1, 0, 0, 0, 7355, 7356, 5, 553, 0, 0, 7356, 7373, + 1, 0, 0, 0, 7357, 7359, 5, 305, 0, 0, 7358, 7357, 1, 0, 0, 0, 7358, 7359, + 1, 0, 0, 0, 7359, 7360, 1, 0, 0, 0, 7360, 7361, 5, 308, 0, 0, 7361, 7362, + 3, 796, 398, 0, 7362, 7363, 5, 303, 0, 0, 7363, 7364, 3, 796, 398, 0, 7364, + 7373, 1, 0, 0, 0, 7365, 7367, 5, 305, 0, 0, 7366, 7365, 1, 0, 0, 0, 7366, + 7367, 1, 0, 0, 0, 7367, 7368, 1, 0, 0, 0, 7368, 7369, 5, 309, 0, 0, 7369, + 7373, 3, 796, 398, 0, 7370, 7371, 5, 310, 0, 0, 7371, 7373, 3, 796, 398, + 0, 7372, 7344, 1, 0, 0, 0, 7372, 7347, 1, 0, 0, 0, 7372, 7348, 1, 0, 0, + 0, 7372, 7349, 1, 0, 0, 0, 7372, 7358, 1, 0, 0, 0, 7372, 7366, 1, 0, 0, + 0, 7372, 7370, 1, 0, 0, 0, 7372, 7373, 1, 0, 0, 0, 7373, 793, 1, 0, 0, + 0, 7374, 7375, 7, 48, 0, 0, 7375, 795, 1, 0, 0, 0, 7376, 7381, 3, 798, + 399, 0, 7377, 7378, 7, 49, 0, 0, 7378, 7380, 3, 798, 399, 0, 7379, 7377, + 1, 0, 0, 0, 7380, 7383, 1, 0, 0, 0, 7381, 7379, 1, 0, 0, 0, 7381, 7382, + 1, 0, 0, 0, 7382, 797, 1, 0, 0, 0, 7383, 7381, 1, 0, 0, 0, 7384, 7389, + 3, 800, 400, 0, 7385, 7386, 7, 50, 0, 0, 7386, 7388, 3, 800, 400, 0, 7387, + 7385, 1, 0, 0, 0, 7388, 7391, 1, 0, 0, 0, 7389, 7387, 1, 0, 0, 0, 7389, + 7390, 1, 0, 0, 0, 7390, 799, 1, 0, 0, 0, 7391, 7389, 1, 0, 0, 0, 7392, + 7394, 7, 49, 0, 0, 7393, 7392, 1, 0, 0, 0, 7393, 7394, 1, 0, 0, 0, 7394, + 7395, 1, 0, 0, 0, 7395, 7396, 3, 802, 401, 0, 7396, 801, 1, 0, 0, 0, 7397, + 7398, 5, 552, 0, 0, 7398, 7399, 3, 784, 392, 0, 7399, 7400, 5, 553, 0, + 0, 7400, 7419, 1, 0, 0, 0, 7401, 7402, 5, 552, 0, 0, 7402, 7403, 3, 698, + 349, 0, 7403, 7404, 5, 553, 0, 0, 7404, 7419, 1, 0, 0, 0, 7405, 7406, 5, + 311, 0, 0, 7406, 7407, 5, 552, 0, 0, 7407, 7408, 3, 698, 349, 0, 7408, + 7409, 5, 553, 0, 0, 7409, 7419, 1, 0, 0, 0, 7410, 7419, 3, 806, 403, 0, + 7411, 7419, 3, 804, 402, 0, 7412, 7419, 3, 808, 404, 0, 7413, 7419, 3, + 408, 204, 0, 7414, 7419, 3, 400, 200, 0, 7415, 7419, 3, 812, 406, 0, 7416, + 7419, 3, 814, 407, 0, 7417, 7419, 3, 820, 410, 0, 7418, 7397, 1, 0, 0, + 0, 7418, 7401, 1, 0, 0, 0, 7418, 7405, 1, 0, 0, 0, 7418, 7410, 1, 0, 0, + 0, 7418, 7411, 1, 0, 0, 0, 7418, 7412, 1, 0, 0, 0, 7418, 7413, 1, 0, 0, + 0, 7418, 7414, 1, 0, 0, 0, 7418, 7415, 1, 0, 0, 0, 7418, 7416, 1, 0, 0, + 0, 7418, 7417, 1, 0, 0, 0, 7419, 803, 1, 0, 0, 0, 7420, 7426, 5, 80, 0, + 0, 7421, 7422, 5, 81, 0, 0, 7422, 7423, 3, 784, 392, 0, 7423, 7424, 5, + 82, 0, 0, 7424, 7425, 3, 784, 392, 0, 7425, 7427, 1, 0, 0, 0, 7426, 7421, + 1, 0, 0, 0, 7427, 7428, 1, 0, 0, 0, 7428, 7426, 1, 0, 0, 0, 7428, 7429, + 1, 0, 0, 0, 7429, 7432, 1, 0, 0, 0, 7430, 7431, 5, 83, 0, 0, 7431, 7433, + 3, 784, 392, 0, 7432, 7430, 1, 0, 0, 0, 7432, 7433, 1, 0, 0, 0, 7433, 7434, + 1, 0, 0, 0, 7434, 7435, 5, 84, 0, 0, 7435, 805, 1, 0, 0, 0, 7436, 7437, + 5, 106, 0, 0, 7437, 7438, 3, 784, 392, 0, 7438, 7439, 5, 82, 0, 0, 7439, + 7440, 3, 784, 392, 0, 7440, 7441, 5, 83, 0, 0, 7441, 7442, 3, 784, 392, + 0, 7442, 807, 1, 0, 0, 0, 7443, 7444, 5, 302, 0, 0, 7444, 7445, 5, 552, + 0, 0, 7445, 7446, 3, 784, 392, 0, 7446, 7447, 5, 77, 0, 0, 7447, 7448, + 3, 810, 405, 0, 7448, 7449, 5, 553, 0, 0, 7449, 809, 1, 0, 0, 0, 7450, + 7451, 7, 51, 0, 0, 7451, 811, 1, 0, 0, 0, 7452, 7453, 7, 52, 0, 0, 7453, + 7459, 5, 552, 0, 0, 7454, 7456, 5, 85, 0, 0, 7455, 7454, 1, 0, 0, 0, 7455, + 7456, 1, 0, 0, 0, 7456, 7457, 1, 0, 0, 0, 7457, 7460, 3, 784, 392, 0, 7458, + 7460, 5, 544, 0, 0, 7459, 7455, 1, 0, 0, 0, 7459, 7458, 1, 0, 0, 0, 7460, + 7461, 1, 0, 0, 0, 7461, 7462, 5, 553, 0, 0, 7462, 813, 1, 0, 0, 0, 7463, + 7464, 3, 816, 408, 0, 7464, 7466, 5, 552, 0, 0, 7465, 7467, 3, 818, 409, + 0, 7466, 7465, 1, 0, 0, 0, 7466, 7467, 1, 0, 0, 0, 7467, 7468, 1, 0, 0, + 0, 7468, 7469, 5, 553, 0, 0, 7469, 815, 1, 0, 0, 0, 7470, 7471, 7, 53, + 0, 0, 7471, 817, 1, 0, 0, 0, 7472, 7477, 3, 784, 392, 0, 7473, 7474, 5, + 550, 0, 0, 7474, 7476, 3, 784, 392, 0, 7475, 7473, 1, 0, 0, 0, 7476, 7479, + 1, 0, 0, 0, 7477, 7475, 1, 0, 0, 0, 7477, 7478, 1, 0, 0, 0, 7478, 819, + 1, 0, 0, 0, 7479, 7477, 1, 0, 0, 0, 7480, 7495, 3, 832, 416, 0, 7481, 7486, + 5, 569, 0, 0, 7482, 7483, 5, 551, 0, 0, 7483, 7485, 3, 122, 61, 0, 7484, + 7482, 1, 0, 0, 0, 7485, 7488, 1, 0, 0, 0, 7486, 7484, 1, 0, 0, 0, 7486, + 7487, 1, 0, 0, 0, 7487, 7495, 1, 0, 0, 0, 7488, 7486, 1, 0, 0, 0, 7489, + 7490, 5, 559, 0, 0, 7490, 7495, 3, 828, 414, 0, 7491, 7495, 3, 828, 414, + 0, 7492, 7495, 5, 570, 0, 0, 7493, 7495, 5, 565, 0, 0, 7494, 7480, 1, 0, + 0, 0, 7494, 7481, 1, 0, 0, 0, 7494, 7489, 1, 0, 0, 0, 7494, 7491, 1, 0, + 0, 0, 7494, 7492, 1, 0, 0, 0, 7494, 7493, 1, 0, 0, 0, 7495, 821, 1, 0, + 0, 0, 7496, 7501, 3, 784, 392, 0, 7497, 7498, 5, 550, 0, 0, 7498, 7500, + 3, 784, 392, 0, 7499, 7497, 1, 0, 0, 0, 7500, 7503, 1, 0, 0, 0, 7501, 7499, + 1, 0, 0, 0, 7501, 7502, 1, 0, 0, 0, 7502, 823, 1, 0, 0, 0, 7503, 7501, + 1, 0, 0, 0, 7504, 7505, 5, 518, 0, 0, 7505, 7506, 5, 520, 0, 0, 7506, 7507, + 3, 828, 414, 0, 7507, 7508, 5, 195, 0, 0, 7508, 7509, 7, 54, 0, 0, 7509, + 7510, 5, 566, 0, 0, 7510, 7514, 5, 554, 0, 0, 7511, 7513, 3, 826, 413, + 0, 7512, 7511, 1, 0, 0, 0, 7513, 7516, 1, 0, 0, 0, 7514, 7512, 1, 0, 0, + 0, 7514, 7515, 1, 0, 0, 0, 7515, 7517, 1, 0, 0, 0, 7516, 7514, 1, 0, 0, + 0, 7517, 7518, 5, 555, 0, 0, 7518, 825, 1, 0, 0, 0, 7519, 7520, 7, 55, + 0, 0, 7520, 7522, 7, 16, 0, 0, 7521, 7523, 5, 549, 0, 0, 7522, 7521, 1, + 0, 0, 0, 7522, 7523, 1, 0, 0, 0, 7523, 827, 1, 0, 0, 0, 7524, 7529, 3, + 830, 415, 0, 7525, 7526, 5, 551, 0, 0, 7526, 7528, 3, 830, 415, 0, 7527, + 7525, 1, 0, 0, 0, 7528, 7531, 1, 0, 0, 0, 7529, 7527, 1, 0, 0, 0, 7529, + 7530, 1, 0, 0, 0, 7530, 829, 1, 0, 0, 0, 7531, 7529, 1, 0, 0, 0, 7532, + 7536, 5, 570, 0, 0, 7533, 7536, 5, 572, 0, 0, 7534, 7536, 3, 850, 425, + 0, 7535, 7532, 1, 0, 0, 0, 7535, 7533, 1, 0, 0, 0, 7535, 7534, 1, 0, 0, + 0, 7536, 831, 1, 0, 0, 0, 7537, 7543, 5, 566, 0, 0, 7538, 7543, 5, 568, + 0, 0, 7539, 7543, 3, 836, 418, 0, 7540, 7543, 5, 306, 0, 0, 7541, 7543, + 5, 141, 0, 0, 7542, 7537, 1, 0, 0, 0, 7542, 7538, 1, 0, 0, 0, 7542, 7539, + 1, 0, 0, 0, 7542, 7540, 1, 0, 0, 0, 7542, 7541, 1, 0, 0, 0, 7543, 833, + 1, 0, 0, 0, 7544, 7553, 5, 556, 0, 0, 7545, 7550, 3, 832, 416, 0, 7546, + 7547, 5, 550, 0, 0, 7547, 7549, 3, 832, 416, 0, 7548, 7546, 1, 0, 0, 0, + 7549, 7552, 1, 0, 0, 0, 7550, 7548, 1, 0, 0, 0, 7550, 7551, 1, 0, 0, 0, + 7551, 7554, 1, 0, 0, 0, 7552, 7550, 1, 0, 0, 0, 7553, 7545, 1, 0, 0, 0, + 7553, 7554, 1, 0, 0, 0, 7554, 7555, 1, 0, 0, 0, 7555, 7556, 5, 557, 0, + 0, 7556, 835, 1, 0, 0, 0, 7557, 7558, 7, 56, 0, 0, 7558, 837, 1, 0, 0, + 0, 7559, 7560, 5, 2, 0, 0, 7560, 839, 1, 0, 0, 0, 7561, 7562, 5, 559, 0, + 0, 7562, 7568, 3, 842, 421, 0, 7563, 7564, 5, 552, 0, 0, 7564, 7565, 3, + 844, 422, 0, 7565, 7566, 5, 553, 0, 0, 7566, 7569, 1, 0, 0, 0, 7567, 7569, + 3, 848, 424, 0, 7568, 7563, 1, 0, 0, 0, 7568, 7567, 1, 0, 0, 0, 7568, 7569, + 1, 0, 0, 0, 7569, 841, 1, 0, 0, 0, 7570, 7571, 7, 57, 0, 0, 7571, 843, + 1, 0, 0, 0, 7572, 7577, 3, 846, 423, 0, 7573, 7574, 5, 550, 0, 0, 7574, + 7576, 3, 846, 423, 0, 7575, 7573, 1, 0, 0, 0, 7576, 7579, 1, 0, 0, 0, 7577, + 7575, 1, 0, 0, 0, 7577, 7578, 1, 0, 0, 0, 7578, 845, 1, 0, 0, 0, 7579, + 7577, 1, 0, 0, 0, 7580, 7581, 5, 570, 0, 0, 7581, 7582, 5, 558, 0, 0, 7582, + 7585, 3, 848, 424, 0, 7583, 7585, 3, 848, 424, 0, 7584, 7580, 1, 0, 0, + 0, 7584, 7583, 1, 0, 0, 0, 7585, 847, 1, 0, 0, 0, 7586, 7590, 3, 832, 416, + 0, 7587, 7590, 3, 784, 392, 0, 7588, 7590, 3, 828, 414, 0, 7589, 7586, + 1, 0, 0, 0, 7589, 7587, 1, 0, 0, 0, 7589, 7588, 1, 0, 0, 0, 7590, 849, + 1, 0, 0, 0, 7591, 7592, 7, 58, 0, 0, 7592, 851, 1, 0, 0, 0, 873, 855, 861, + 866, 869, 872, 881, 891, 900, 906, 908, 912, 915, 920, 926, 962, 970, 978, + 986, 994, 1006, 1019, 1032, 1044, 1055, 1065, 1068, 1077, 1082, 1085, 1093, + 1101, 1113, 1119, 1136, 1140, 1144, 1148, 1152, 1156, 1160, 1162, 1175, + 1180, 1194, 1203, 1219, 1235, 1244, 1259, 1274, 1288, 1292, 1301, 1304, + 1312, 1317, 1319, 1430, 1432, 1441, 1450, 1452, 1465, 1474, 1476, 1487, + 1493, 1501, 1512, 1514, 1522, 1524, 1545, 1553, 1569, 1593, 1609, 1619, + 1718, 1727, 1735, 1749, 1756, 1764, 1778, 1791, 1795, 1801, 1804, 1810, + 1813, 1819, 1823, 1827, 1833, 1838, 1841, 1843, 1849, 1853, 1857, 1860, + 1864, 1869, 1877, 1886, 1889, 1893, 1904, 1908, 1913, 1922, 1928, 1933, + 1939, 1944, 1949, 1954, 1958, 1961, 1963, 1969, 2005, 2013, 2038, 2041, + 2052, 2057, 2062, 2071, 2084, 2089, 2094, 2098, 2103, 2108, 2115, 2141, + 2147, 2154, 2160, 2199, 2213, 2220, 2233, 2240, 2248, 2253, 2258, 2264, + 2272, 2279, 2283, 2287, 2290, 2295, 2300, 2309, 2312, 2317, 2324, 2332, + 2346, 2356, 2391, 2398, 2415, 2429, 2442, 2447, 2453, 2467, 2481, 2494, + 2499, 2506, 2510, 2521, 2526, 2536, 2550, 2560, 2577, 2600, 2602, 2609, + 2615, 2618, 2632, 2645, 2661, 2676, 2712, 2727, 2734, 2742, 2749, 2753, + 2756, 2762, 2765, 2772, 2776, 2779, 2784, 2791, 2798, 2814, 2819, 2827, + 2833, 2838, 2844, 2849, 2855, 2860, 2865, 2870, 2875, 2880, 2885, 2890, + 2895, 2900, 2905, 2910, 2915, 2920, 2925, 2930, 2935, 2940, 2945, 2950, + 2955, 2960, 2965, 2970, 2975, 2980, 2985, 2990, 2995, 3000, 3005, 3010, + 3015, 3020, 3025, 3030, 3035, 3040, 3045, 3050, 3055, 3060, 3065, 3070, + 3075, 3080, 3085, 3090, 3095, 3100, 3105, 3110, 3115, 3120, 3125, 3130, + 3135, 3140, 3145, 3150, 3155, 3160, 3165, 3170, 3175, 3180, 3185, 3190, + 3195, 3200, 3205, 3210, 3215, 3220, 3225, 3230, 3235, 3240, 3245, 3250, + 3255, 3260, 3265, 3270, 3275, 3280, 3285, 3290, 3295, 3300, 3305, 3310, + 3315, 3320, 3322, 3329, 3334, 3341, 3347, 3350, 3353, 3359, 3362, 3368, + 3372, 3378, 3381, 3384, 3389, 3394, 3403, 3408, 3412, 3414, 3422, 3425, + 3429, 3433, 3436, 3448, 3470, 3483, 3488, 3498, 3508, 3513, 3521, 3528, + 3532, 3536, 3547, 3554, 3568, 3575, 3579, 3583, 3591, 3595, 3599, 3609, + 3611, 3615, 3618, 3623, 3626, 3629, 3633, 3641, 3645, 3649, 3656, 3660, + 3664, 3673, 3677, 3684, 3688, 3696, 3702, 3708, 3720, 3728, 3735, 3739, + 3745, 3751, 3757, 3763, 3770, 3775, 3785, 3788, 3792, 3796, 3803, 3810, + 3816, 3830, 3837, 3852, 3856, 3863, 3868, 3872, 3875, 3878, 3882, 3888, + 3906, 3911, 3919, 3938, 3942, 3949, 3952, 3955, 3964, 3978, 3988, 3992, + 4002, 4006, 4013, 4085, 4087, 4090, 4097, 4102, 4132, 4155, 4166, 4173, + 4190, 4193, 4202, 4212, 4224, 4236, 4247, 4250, 4263, 4271, 4277, 4283, + 4291, 4298, 4306, 4313, 4320, 4332, 4335, 4347, 4371, 4379, 4387, 4407, + 4411, 4413, 4421, 4426, 4429, 4435, 4438, 4444, 4447, 4449, 4459, 4558, + 4568, 4579, 4585, 4590, 4594, 4596, 4604, 4607, 4612, 4617, 4623, 4630, + 4635, 4639, 4645, 4651, 4656, 4661, 4666, 4673, 4681, 4692, 4697, 4703, + 4707, 4716, 4718, 4720, 4728, 4764, 4767, 4770, 4778, 4785, 4796, 4805, + 4811, 4819, 4828, 4836, 4842, 4846, 4855, 4867, 4873, 4875, 4888, 4892, + 4904, 4909, 4911, 4926, 4931, 4940, 4949, 4952, 4963, 4971, 5002, 5007, + 5010, 5015, 5023, 5052, 5065, 5089, 5093, 5095, 5108, 5114, 5117, 5128, + 5132, 5135, 5137, 5151, 5159, 5174, 5181, 5186, 5191, 5196, 5200, 5203, + 5224, 5229, 5240, 5245, 5251, 5255, 5263, 5268, 5284, 5292, 5295, 5302, + 5310, 5315, 5318, 5321, 5331, 5334, 5341, 5344, 5352, 5370, 5376, 5379, + 5388, 5390, 5399, 5404, 5409, 5414, 5424, 5443, 5451, 5463, 5470, 5474, + 5488, 5492, 5496, 5501, 5506, 5511, 5518, 5521, 5526, 5556, 5564, 5568, + 5572, 5576, 5580, 5584, 5589, 5593, 5599, 5601, 5608, 5610, 5619, 5623, + 5627, 5631, 5635, 5639, 5644, 5648, 5654, 5656, 5663, 5665, 5667, 5672, + 5678, 5684, 5690, 5694, 5700, 5702, 5714, 5723, 5728, 5734, 5736, 5743, + 5745, 5756, 5765, 5770, 5774, 5778, 5784, 5786, 5798, 5803, 5816, 5822, + 5826, 5833, 5840, 5842, 5921, 5940, 5955, 5960, 5965, 5967, 5975, 5983, + 5988, 5996, 6005, 6008, 6020, 6026, 6062, 6064, 6071, 6073, 6080, 6082, + 6089, 6091, 6098, 6100, 6107, 6109, 6116, 6118, 6125, 6127, 6134, 6136, + 6144, 6146, 6153, 6155, 6162, 6164, 6172, 6174, 6182, 6184, 6192, 6194, + 6201, 6203, 6210, 6212, 6220, 6222, 6231, 6233, 6241, 6243, 6251, 6253, + 6261, 6263, 6299, 6306, 6324, 6329, 6341, 6343, 6382, 6384, 6392, 6394, + 6402, 6404, 6412, 6414, 6422, 6424, 6434, 6445, 6451, 6456, 6458, 6461, + 6470, 6472, 6481, 6483, 6491, 6493, 6507, 6509, 6517, 6519, 6528, 6530, + 6538, 6540, 6549, 6563, 6571, 6577, 6579, 6584, 6586, 6596, 6606, 6614, + 6622, 6671, 6701, 6710, 6790, 6794, 6802, 6805, 6810, 6815, 6821, 6823, + 6827, 6831, 6835, 6838, 6845, 6848, 6852, 6859, 6864, 6869, 6872, 6875, + 6878, 6881, 6884, 6888, 6891, 6894, 6898, 6901, 6903, 6907, 6917, 6920, + 6925, 6930, 6932, 6936, 6943, 6948, 6951, 6957, 6960, 6962, 6965, 6971, + 6974, 6979, 6982, 6984, 6996, 7000, 7004, 7009, 7012, 7031, 7036, 7043, + 7050, 7056, 7058, 7076, 7087, 7102, 7104, 7112, 7115, 7118, 7121, 7124, + 7140, 7144, 7149, 7157, 7165, 7172, 7215, 7220, 7229, 7234, 7237, 7242, + 7247, 7263, 7274, 7279, 7283, 7287, 7303, 7309, 7327, 7335, 7339, 7353, + 7358, 7366, 7372, 7381, 7389, 7393, 7418, 7428, 7432, 7455, 7459, 7466, + 7477, 7486, 7494, 7501, 7514, 7522, 7529, 7535, 7542, 7550, 7553, 7568, + 7577, 7584, 7589, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -105213,6 +105217,8 @@ type IHelpStatementContext interface { // Getter signatures IDENTIFIER() antlr.TerminalNode + AllIdentifierOrKeyword() []IIdentifierOrKeywordContext + IdentifierOrKeyword(i int) IIdentifierOrKeywordContext // IsHelpStatementContext differentiates from other interfaces. IsHelpStatementContext() @@ -105254,6 +105260,47 @@ func (s *HelpStatementContext) IDENTIFIER() antlr.TerminalNode { return s.GetToken(MDLParserIDENTIFIER, 0) } +func (s *HelpStatementContext) AllIdentifierOrKeyword() []IIdentifierOrKeywordContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IIdentifierOrKeywordContext); ok { + len++ + } + } + + tst := make([]IIdentifierOrKeywordContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IIdentifierOrKeywordContext); ok { + tst[i] = t.(IIdentifierOrKeywordContext) + i++ + } + } + + return tst +} + +func (s *HelpStatementContext) IdentifierOrKeyword(i int) IIdentifierOrKeywordContext { + var t antlr.RuleContext + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierOrKeywordContext); ok { + if j == i { + t = ctx.(antlr.RuleContext) + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierOrKeywordContext) +} + func (s *HelpStatementContext) GetRuleContext() antlr.RuleContext { return s } @@ -105277,6 +105324,8 @@ func (s *HelpStatementContext) ExitRule(listener antlr.ParseTreeListener) { func (p *MDLParser) HelpStatement() (localctx IHelpStatementContext) { localctx = NewHelpStatementContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 780, MDLParserRULE_helpStatement) + var _alt int + p.EnterOuterAlt(localctx, 1) { p.SetState(7305) @@ -105286,6 +105335,33 @@ func (p *MDLParser) HelpStatement() (localctx IHelpStatementContext) { goto errorExit } } + p.SetState(7309) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 841, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + { + p.SetState(7306) + p.IdentifierOrKeyword() + } + + } + p.SetState(7311) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 841, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } + } errorExit: if p.HasError() { @@ -105429,7 +105505,7 @@ func (p *MDLParser) DefineFragmentStatement() (localctx IDefineFragmentStatement p.EnterRule(localctx, 782, MDLParserRULE_defineFragmentStatement) p.EnterOuterAlt(localctx, 1) { - p.SetState(7307) + p.SetState(7312) p.Match(MDLParserDEFINE) if p.HasError() { // Recognition error - abort rule @@ -105437,7 +105513,7 @@ func (p *MDLParser) DefineFragmentStatement() (localctx IDefineFragmentStatement } } { - p.SetState(7308) + p.SetState(7313) p.Match(MDLParserFRAGMENT) if p.HasError() { // Recognition error - abort rule @@ -105445,11 +105521,11 @@ func (p *MDLParser) DefineFragmentStatement() (localctx IDefineFragmentStatement } } { - p.SetState(7309) + p.SetState(7314) p.IdentifierOrKeyword() } { - p.SetState(7310) + p.SetState(7315) p.Match(MDLParserAS) if p.HasError() { // Recognition error - abort rule @@ -105457,7 +105533,7 @@ func (p *MDLParser) DefineFragmentStatement() (localctx IDefineFragmentStatement } } { - p.SetState(7311) + p.SetState(7316) p.Match(MDLParserLBRACE) if p.HasError() { // Recognition error - abort rule @@ -105465,11 +105541,11 @@ func (p *MDLParser) DefineFragmentStatement() (localctx IDefineFragmentStatement } } { - p.SetState(7312) + p.SetState(7317) p.PageBodyV3() } { - p.SetState(7313) + p.SetState(7318) p.Match(MDLParserRBRACE) if p.HasError() { // Recognition error - abort rule @@ -105577,7 +105653,7 @@ func (p *MDLParser) Expression() (localctx IExpressionContext) { p.EnterRule(localctx, 784, MDLParserRULE_expression) p.EnterOuterAlt(localctx, 1) { - p.SetState(7315) + p.SetState(7320) p.OrExpression() } @@ -105719,22 +105795,22 @@ func (p *MDLParser) OrExpression() (localctx IOrExpressionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7317) + p.SetState(7322) p.AndExpression() } - p.SetState(7322) + p.SetState(7327) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 841, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 842, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(7318) + p.SetState(7323) p.Match(MDLParserOR) if p.HasError() { // Recognition error - abort rule @@ -105742,17 +105818,17 @@ func (p *MDLParser) OrExpression() (localctx IOrExpressionContext) { } } { - p.SetState(7319) + p.SetState(7324) p.AndExpression() } } - p.SetState(7324) + p.SetState(7329) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 841, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 842, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -105896,22 +105972,22 @@ func (p *MDLParser) AndExpression() (localctx IAndExpressionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7325) + p.SetState(7330) p.NotExpression() } - p.SetState(7330) + p.SetState(7335) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 842, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 843, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(7326) + p.SetState(7331) p.Match(MDLParserAND) if p.HasError() { // Recognition error - abort rule @@ -105919,17 +105995,17 @@ func (p *MDLParser) AndExpression() (localctx IAndExpressionContext) { } } { - p.SetState(7327) + p.SetState(7332) p.NotExpression() } } - p.SetState(7332) + p.SetState(7337) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 842, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 843, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -106039,12 +106115,12 @@ func (p *MDLParser) NotExpression() (localctx INotExpressionContext) { localctx = NewNotExpressionContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 790, MDLParserRULE_notExpression) p.EnterOuterAlt(localctx, 1) - p.SetState(7334) + p.SetState(7339) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 843, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 844, p.GetParserRuleContext()) == 1 { { - p.SetState(7333) + p.SetState(7338) p.Match(MDLParserNOT) if p.HasError() { // Recognition error - abort rule @@ -106056,7 +106132,7 @@ func (p *MDLParser) NotExpression() (localctx INotExpressionContext) { goto errorExit } { - p.SetState(7336) + p.SetState(7341) p.ComparisonExpression() } @@ -106289,27 +106365,27 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex p.EnterOuterAlt(localctx, 1) { - p.SetState(7338) + p.SetState(7343) p.AdditiveExpression() } - p.SetState(7367) + p.SetState(7372) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 847, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) == 1 { { - p.SetState(7339) + p.SetState(7344) p.ComparisonOperator() } { - p.SetState(7340) + p.SetState(7345) p.AdditiveExpression() } } else if p.HasError() { // JIM goto errorExit - } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 847, p.GetParserRuleContext()) == 2 { + } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) == 2 { { - p.SetState(7342) + p.SetState(7347) p.Match(MDLParserIS_NULL) if p.HasError() { // Recognition error - abort rule @@ -106319,9 +106395,9 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } else if p.HasError() { // JIM goto errorExit - } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 847, p.GetParserRuleContext()) == 3 { + } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) == 3 { { - p.SetState(7343) + p.SetState(7348) p.Match(MDLParserIS_NOT_NULL) if p.HasError() { // Recognition error - abort rule @@ -106331,9 +106407,9 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } else if p.HasError() { // JIM goto errorExit - } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 847, p.GetParserRuleContext()) == 4 { + } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) == 4 { { - p.SetState(7344) + p.SetState(7349) p.Match(MDLParserIN) if p.HasError() { // Recognition error - abort rule @@ -106341,29 +106417,29 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } } { - p.SetState(7345) + p.SetState(7350) p.Match(MDLParserLPAREN) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(7348) + p.SetState(7353) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 844, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 845, p.GetParserRuleContext()) { case 1: { - p.SetState(7346) + p.SetState(7351) p.OqlQuery() } case 2: { - p.SetState(7347) + p.SetState(7352) p.ExpressionList() } @@ -106371,7 +106447,7 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex goto errorExit } { - p.SetState(7350) + p.SetState(7355) p.Match(MDLParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -106381,8 +106457,8 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } else if p.HasError() { // JIM goto errorExit - } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 847, p.GetParserRuleContext()) == 5 { - p.SetState(7353) + } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) == 5 { + p.SetState(7358) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -106391,7 +106467,7 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex if _la == MDLParserNOT { { - p.SetState(7352) + p.SetState(7357) p.Match(MDLParserNOT) if p.HasError() { // Recognition error - abort rule @@ -106401,7 +106477,7 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } { - p.SetState(7355) + p.SetState(7360) p.Match(MDLParserBETWEEN) if p.HasError() { // Recognition error - abort rule @@ -106409,11 +106485,11 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } } { - p.SetState(7356) + p.SetState(7361) p.AdditiveExpression() } { - p.SetState(7357) + p.SetState(7362) p.Match(MDLParserAND) if p.HasError() { // Recognition error - abort rule @@ -106421,14 +106497,14 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } } { - p.SetState(7358) + p.SetState(7363) p.AdditiveExpression() } } else if p.HasError() { // JIM goto errorExit - } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 847, p.GetParserRuleContext()) == 6 { - p.SetState(7361) + } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) == 6 { + p.SetState(7366) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -106437,7 +106513,7 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex if _la == MDLParserNOT { { - p.SetState(7360) + p.SetState(7365) p.Match(MDLParserNOT) if p.HasError() { // Recognition error - abort rule @@ -106447,7 +106523,7 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } { - p.SetState(7363) + p.SetState(7368) p.Match(MDLParserLIKE) if p.HasError() { // Recognition error - abort rule @@ -106455,15 +106531,15 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } } { - p.SetState(7364) + p.SetState(7369) p.AdditiveExpression() } } else if p.HasError() { // JIM goto errorExit - } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 847, p.GetParserRuleContext()) == 7 { + } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) == 7 { { - p.SetState(7365) + p.SetState(7370) p.Match(MDLParserMATCH) if p.HasError() { // Recognition error - abort rule @@ -106471,7 +106547,7 @@ func (p *MDLParser) ComparisonExpression() (localctx IComparisonExpressionContex } } { - p.SetState(7366) + p.SetState(7371) p.AdditiveExpression() } @@ -106594,7 +106670,7 @@ func (p *MDLParser) ComparisonOperator() (localctx IComparisonOperatorContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7369) + p.SetState(7374) _la = p.GetTokenStream().LA(1) if !((int64((_la-536)) & ^0x3f) == 0 && ((int64(1)<<(_la-536))&63) != 0) { @@ -106755,22 +106831,22 @@ func (p *MDLParser) AdditiveExpression() (localctx IAdditiveExpressionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7371) + p.SetState(7376) p.MultiplicativeExpression() } - p.SetState(7376) + p.SetState(7381) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 849, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(7372) + p.SetState(7377) _la = p.GetTokenStream().LA(1) if !(_la == MDLParserPLUS || _la == MDLParserMINUS) { @@ -106781,17 +106857,17 @@ func (p *MDLParser) AdditiveExpression() (localctx IAdditiveExpressionContext) { } } { - p.SetState(7373) + p.SetState(7378) p.MultiplicativeExpression() } } - p.SetState(7378) + p.SetState(7383) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 848, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 849, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -106987,22 +107063,22 @@ func (p *MDLParser) MultiplicativeExpression() (localctx IMultiplicativeExpressi p.EnterOuterAlt(localctx, 1) { - p.SetState(7379) + p.SetState(7384) p.UnaryExpression() } - p.SetState(7384) + p.SetState(7389) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 849, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 850, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(7380) + p.SetState(7385) _la = p.GetTokenStream().LA(1) if !((int64((_la-544)) & ^0x3f) == 0 && ((int64(1)<<(_la-544))&16415) != 0) { @@ -107013,17 +107089,17 @@ func (p *MDLParser) MultiplicativeExpression() (localctx IMultiplicativeExpressi } } { - p.SetState(7381) + p.SetState(7386) p.UnaryExpression() } } - p.SetState(7386) + p.SetState(7391) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 849, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 850, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -107140,7 +107216,7 @@ func (p *MDLParser) UnaryExpression() (localctx IUnaryExpressionContext) { var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(7388) + p.SetState(7393) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -107149,7 +107225,7 @@ func (p *MDLParser) UnaryExpression() (localctx IUnaryExpressionContext) { if _la == MDLParserPLUS || _la == MDLParserMINUS { { - p.SetState(7387) + p.SetState(7392) _la = p.GetTokenStream().LA(1) if !(_la == MDLParserPLUS || _la == MDLParserMINUS) { @@ -107162,7 +107238,7 @@ func (p *MDLParser) UnaryExpression() (localctx IUnaryExpressionContext) { } { - p.SetState(7390) + p.SetState(7395) p.PrimaryExpression() } @@ -107432,17 +107508,17 @@ func (s *PrimaryExpressionContext) ExitRule(listener antlr.ParseTreeListener) { func (p *MDLParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { localctx = NewPrimaryExpressionContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 802, MDLParserRULE_primaryExpression) - p.SetState(7413) + p.SetState(7418) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 851, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 852, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(7392) + p.SetState(7397) p.Match(MDLParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -107450,11 +107526,11 @@ func (p *MDLParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { } } { - p.SetState(7393) + p.SetState(7398) p.Expression() } { - p.SetState(7394) + p.SetState(7399) p.Match(MDLParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -107465,7 +107541,7 @@ func (p *MDLParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(7396) + p.SetState(7401) p.Match(MDLParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -107473,11 +107549,11 @@ func (p *MDLParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { } } { - p.SetState(7397) + p.SetState(7402) p.OqlQuery() } { - p.SetState(7398) + p.SetState(7403) p.Match(MDLParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -107488,7 +107564,7 @@ func (p *MDLParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(7400) + p.SetState(7405) p.Match(MDLParserEXISTS) if p.HasError() { // Recognition error - abort rule @@ -107496,7 +107572,7 @@ func (p *MDLParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { } } { - p.SetState(7401) + p.SetState(7406) p.Match(MDLParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -107504,11 +107580,11 @@ func (p *MDLParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { } } { - p.SetState(7402) + p.SetState(7407) p.OqlQuery() } { - p.SetState(7403) + p.SetState(7408) p.Match(MDLParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -107519,56 +107595,56 @@ func (p *MDLParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(7405) + p.SetState(7410) p.IfThenElseExpression() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(7406) + p.SetState(7411) p.CaseExpression() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(7407) + p.SetState(7412) p.CastExpression() } case 7: p.EnterOuterAlt(localctx, 7) { - p.SetState(7408) + p.SetState(7413) p.ListAggregateOperation() } case 8: p.EnterOuterAlt(localctx, 8) { - p.SetState(7409) + p.SetState(7414) p.ListOperation() } case 9: p.EnterOuterAlt(localctx, 9) { - p.SetState(7410) + p.SetState(7415) p.AggregateFunction() } case 10: p.EnterOuterAlt(localctx, 10) { - p.SetState(7411) + p.SetState(7416) p.FunctionCall() } case 11: p.EnterOuterAlt(localctx, 11) { - p.SetState(7412) + p.SetState(7417) p.AtomicExpression() } @@ -107739,14 +107815,14 @@ func (p *MDLParser) CaseExpression() (localctx ICaseExpressionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7415) + p.SetState(7420) p.Match(MDLParserCASE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(7421) + p.SetState(7426) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -107755,7 +107831,7 @@ func (p *MDLParser) CaseExpression() (localctx ICaseExpressionContext) { for ok := true; ok; ok = _la == MDLParserWHEN { { - p.SetState(7416) + p.SetState(7421) p.Match(MDLParserWHEN) if p.HasError() { // Recognition error - abort rule @@ -107763,11 +107839,11 @@ func (p *MDLParser) CaseExpression() (localctx ICaseExpressionContext) { } } { - p.SetState(7417) + p.SetState(7422) p.Expression() } { - p.SetState(7418) + p.SetState(7423) p.Match(MDLParserTHEN) if p.HasError() { // Recognition error - abort rule @@ -107775,18 +107851,18 @@ func (p *MDLParser) CaseExpression() (localctx ICaseExpressionContext) { } } { - p.SetState(7419) + p.SetState(7424) p.Expression() } - p.SetState(7423) + p.SetState(7428) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) } - p.SetState(7427) + p.SetState(7432) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -107795,7 +107871,7 @@ func (p *MDLParser) CaseExpression() (localctx ICaseExpressionContext) { if _la == MDLParserELSE { { - p.SetState(7425) + p.SetState(7430) p.Match(MDLParserELSE) if p.HasError() { // Recognition error - abort rule @@ -107803,13 +107879,13 @@ func (p *MDLParser) CaseExpression() (localctx ICaseExpressionContext) { } } { - p.SetState(7426) + p.SetState(7431) p.Expression() } } { - p.SetState(7429) + p.SetState(7434) p.Match(MDLParserEND) if p.HasError() { // Recognition error - abort rule @@ -107991,7 +108067,7 @@ func (p *MDLParser) IfThenElseExpression() (localctx IIfThenElseExpressionContex p.EnterRule(localctx, 806, MDLParserRULE_ifThenElseExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(7431) + p.SetState(7436) p.Match(MDLParserIF) if p.HasError() { // Recognition error - abort rule @@ -107999,14 +108075,14 @@ func (p *MDLParser) IfThenElseExpression() (localctx IIfThenElseExpressionContex } } { - p.SetState(7432) + p.SetState(7437) var _x = p.Expression() localctx.(*IfThenElseExpressionContext).condition = _x } { - p.SetState(7433) + p.SetState(7438) p.Match(MDLParserTHEN) if p.HasError() { // Recognition error - abort rule @@ -108014,14 +108090,14 @@ func (p *MDLParser) IfThenElseExpression() (localctx IIfThenElseExpressionContex } } { - p.SetState(7434) + p.SetState(7439) var _x = p.Expression() localctx.(*IfThenElseExpressionContext).thenExpr = _x } { - p.SetState(7435) + p.SetState(7440) p.Match(MDLParserELSE) if p.HasError() { // Recognition error - abort rule @@ -108029,7 +108105,7 @@ func (p *MDLParser) IfThenElseExpression() (localctx IIfThenElseExpressionContex } } { - p.SetState(7436) + p.SetState(7441) var _x = p.Expression() @@ -108173,7 +108249,7 @@ func (p *MDLParser) CastExpression() (localctx ICastExpressionContext) { p.EnterRule(localctx, 808, MDLParserRULE_castExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(7438) + p.SetState(7443) p.Match(MDLParserCAST) if p.HasError() { // Recognition error - abort rule @@ -108181,7 +108257,7 @@ func (p *MDLParser) CastExpression() (localctx ICastExpressionContext) { } } { - p.SetState(7439) + p.SetState(7444) p.Match(MDLParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -108189,11 +108265,11 @@ func (p *MDLParser) CastExpression() (localctx ICastExpressionContext) { } } { - p.SetState(7440) + p.SetState(7445) p.Expression() } { - p.SetState(7441) + p.SetState(7446) p.Match(MDLParserAS) if p.HasError() { // Recognition error - abort rule @@ -108201,11 +108277,11 @@ func (p *MDLParser) CastExpression() (localctx ICastExpressionContext) { } } { - p.SetState(7442) + p.SetState(7447) p.CastDataType() } { - p.SetState(7443) + p.SetState(7448) p.Match(MDLParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -108328,7 +108404,7 @@ func (p *MDLParser) CastDataType() (localctx ICastDataTypeContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7445) + p.SetState(7450) _la = p.GetTokenStream().LA(1) if !((int64((_la-276)) & ^0x3f) == 0 && ((int64(1)<<(_la-276))&63) != 0) { @@ -108486,7 +108562,7 @@ func (p *MDLParser) AggregateFunction() (localctx IAggregateFunctionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7447) + p.SetState(7452) _la = p.GetTokenStream().LA(1) if !((int64((_la-294)) & ^0x3f) == 0 && ((int64(1)<<(_la-294))&31) != 0) { @@ -108497,14 +108573,14 @@ func (p *MDLParser) AggregateFunction() (localctx IAggregateFunctionContext) { } } { - p.SetState(7448) + p.SetState(7453) p.Match(MDLParserLPAREN) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(7454) + p.SetState(7459) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -108512,12 +108588,12 @@ func (p *MDLParser) AggregateFunction() (localctx IAggregateFunctionContext) { switch p.GetTokenStream().LA(1) { case MDLParserIS_NOT_NULL, MDLParserIS_NULL, MDLParserNOT_NULL, MDLParserGROUP_BY, MDLParserORDER_BY, MDLParserSORT_BY, MDLParserNON_PERSISTENT, MDLParserREFERENCE_SET, MDLParserLIST_OF, MDLParserDELETE_AND_REFERENCES, MDLParserDELETE_BUT_KEEP_REFERENCES, MDLParserDELETE_IF_NO_REFERENCES, MDLParserCREATE, MDLParserALTER, MDLParserDROP, MDLParserRENAME, MDLParserMOVE, MDLParserMODIFY, MDLParserENTITY, MDLParserPERSISTENT, MDLParserVIEW, MDLParserEXTERNAL, MDLParserASSOCIATION, MDLParserENUMERATION, MDLParserMODULE, MDLParserMICROFLOW, MDLParserNANOFLOW, MDLParserWORKFLOW, MDLParserPAGE, MDLParserSNIPPET, MDLParserLAYOUT, MDLParserNOTEBOOK, MDLParserCONSTANT, MDLParserATTRIBUTE, MDLParserCOLUMN, MDLParserCOLUMNS, MDLParserINDEX, MDLParserOWNER, MDLParserSTORE, MDLParserREFERENCE, MDLParserGENERALIZATION, MDLParserEXTENDS, MDLParserADD, MDLParserSET, MDLParserPOSITION, MDLParserDOCUMENTATION, MDLParserSTORAGE, MDLParserTABLE, MDLParserDELETE_BEHAVIOR, MDLParserCASCADE, MDLParserPREVENT, MDLParserCONNECT, MDLParserDISCONNECT, MDLParserLOCAL, MDLParserPROJECT, MDLParserRUNTIME, MDLParserBRANCH, MDLParserTOKEN, MDLParserHOST, MDLParserPORT, MDLParserSHOW, MDLParserLIST_KW, MDLParserDESCRIBE, MDLParserUSE, MDLParserINTROSPECT, MDLParserDEBUG, MDLParserSELECT, MDLParserFROM, MDLParserWHERE, MDLParserHAVING, MDLParserOFFSET, MDLParserLIMIT, MDLParserAS, MDLParserRETURNS, MDLParserRETURNING, MDLParserCASE, MDLParserWHEN, MDLParserTHEN, MDLParserELSE, MDLParserEND, MDLParserDISTINCT, MDLParserALL, MDLParserJOIN, MDLParserLEFT, MDLParserRIGHT, MDLParserINNER, MDLParserOUTER, MDLParserFULL, MDLParserCROSS, MDLParserON, MDLParserASC, MDLParserDESC, MDLParserBEGIN, MDLParserDECLARE, MDLParserCHANGE, MDLParserRETRIEVE, MDLParserDELETE, MDLParserCOMMIT, MDLParserROLLBACK, MDLParserLOOP, MDLParserWHILE, MDLParserIF, MDLParserELSIF, MDLParserELSEIF, MDLParserCONTINUE, MDLParserBREAK, MDLParserRETURN, MDLParserTHROW, MDLParserLOG, MDLParserCALL, MDLParserJAVA, MDLParserJAVASCRIPT, MDLParserACTION, MDLParserACTIONS, MDLParserCLOSE, MDLParserNODE, MDLParserEVENTS, MDLParserHEAD, MDLParserTAIL, MDLParserFIND, MDLParserSORT, MDLParserUNION, MDLParserINTERSECT, MDLParserSUBTRACT, MDLParserCONTAINS, MDLParserAVERAGE, MDLParserMINIMUM, MDLParserMAXIMUM, MDLParserLIST, MDLParserREMOVE, MDLParserEQUALS_OP, MDLParserINFO, MDLParserWARNING, MDLParserTRACE, MDLParserCRITICAL, MDLParserWITH, MDLParserEMPTY, MDLParserOBJECT, MDLParserOBJECTS, MDLParserPAGES, MDLParserLAYOUTS, MDLParserSNIPPETS, MDLParserNOTEBOOKS, MDLParserPLACEHOLDER, MDLParserSNIPPETCALL, MDLParserLAYOUTGRID, MDLParserDATAGRID, MDLParserDATAVIEW, MDLParserLISTVIEW, MDLParserGALLERY, MDLParserCONTAINER, MDLParserROW, MDLParserITEM, MDLParserCONTROLBAR, MDLParserSEARCH, MDLParserSEARCHBAR, MDLParserNAVIGATIONLIST, MDLParserACTIONBUTTON, MDLParserLINKBUTTON, MDLParserBUTTON, MDLParserTITLE, MDLParserDYNAMICTEXT, MDLParserDYNAMIC, MDLParserSTATICTEXT, MDLParserLABEL, MDLParserTEXTBOX, MDLParserTEXTAREA, MDLParserDATEPICKER, MDLParserRADIOBUTTONS, MDLParserDROPDOWN, MDLParserCOMBOBOX, MDLParserCHECKBOX, MDLParserREFERENCESELECTOR, MDLParserINPUTREFERENCESETSELECTOR, MDLParserFILEINPUT, MDLParserIMAGEINPUT, MDLParserCUSTOMWIDGET, MDLParserPLUGGABLEWIDGET, MDLParserTEXTFILTER, MDLParserNUMBERFILTER, MDLParserDROPDOWNFILTER, MDLParserDATEFILTER, MDLParserDROPDOWNSORT, MDLParserFILTER, MDLParserWIDGET, MDLParserWIDGETS, MDLParserCAPTION, MDLParserICON, MDLParserTOOLTIP, MDLParserDATASOURCE, MDLParserSOURCE_KW, MDLParserSELECTION, MDLParserFOOTER, MDLParserHEADER, MDLParserCONTENT, MDLParserRENDERMODE, MDLParserBINDS, MDLParserATTR, MDLParserCONTENTPARAMS, MDLParserCAPTIONPARAMS, MDLParserPARAMS, MDLParserVARIABLES_KW, MDLParserDESKTOPWIDTH, MDLParserTABLETWIDTH, MDLParserPHONEWIDTH, MDLParserCLASS, MDLParserSTYLE, MDLParserBUTTONSTYLE, MDLParserDESIGN, MDLParserPROPERTIES, MDLParserDESIGNPROPERTIES, MDLParserSTYLING, MDLParserCLEAR, MDLParserWIDTH, MDLParserHEIGHT, MDLParserAUTOFILL, MDLParserURL, MDLParserFOLDER, MDLParserPASSING, MDLParserCONTEXT, MDLParserEDITABLE, MDLParserREADONLY, MDLParserATTRIBUTES, MDLParserFILTERTYPE, MDLParserIMAGE, MDLParserCOLLECTION, MDLParserMODEL, MDLParserMODELS, MDLParserAGENT, MDLParserAGENTS, MDLParserTOOL, MDLParserKNOWLEDGE, MDLParserBASES, MDLParserCONSUMED, MDLParserMCP, MDLParserSTATICIMAGE, MDLParserDYNAMICIMAGE, MDLParserCUSTOMCONTAINER, MDLParserTABCONTAINER, MDLParserTABPAGE, MDLParserGROUPBOX, MDLParserVISIBLE, MDLParserSAVECHANGES, MDLParserSAVE_CHANGES, MDLParserCANCEL_CHANGES, MDLParserCLOSE_PAGE, MDLParserSHOW_PAGE, MDLParserDELETE_ACTION, MDLParserDELETE_OBJECT, MDLParserCREATE_OBJECT, MDLParserCALL_MICROFLOW, MDLParserCALL_NANOFLOW, MDLParserOPEN_LINK, MDLParserSIGN_OUT, MDLParserCANCEL, MDLParserPRIMARY, MDLParserSUCCESS, MDLParserDANGER, MDLParserWARNING_STYLE, MDLParserINFO_STYLE, MDLParserTEMPLATE, MDLParserONCLICK, MDLParserONCHANGE, MDLParserTABINDEX, MDLParserH1, MDLParserH2, MDLParserH3, MDLParserH4, MDLParserH5, MDLParserH6, MDLParserPARAGRAPH, MDLParserSTRING_TYPE, MDLParserINTEGER_TYPE, MDLParserLONG_TYPE, MDLParserDECIMAL_TYPE, MDLParserBOOLEAN_TYPE, MDLParserDATETIME_TYPE, MDLParserDATE_TYPE, MDLParserAUTONUMBER_TYPE, MDLParserAUTOOWNER_TYPE, MDLParserAUTOCHANGEDBY_TYPE, MDLParserAUTOCREATEDDATE_TYPE, MDLParserAUTOCHANGEDDATE_TYPE, MDLParserBINARY_TYPE, MDLParserHASHEDSTRING_TYPE, MDLParserCURRENCY_TYPE, MDLParserFLOAT_TYPE, MDLParserSTRINGTEMPLATE_TYPE, MDLParserENUM_TYPE, MDLParserCOUNT, MDLParserSUM, MDLParserAVG, MDLParserMIN, MDLParserMAX, MDLParserLENGTH, MDLParserTRIM, MDLParserCOALESCE, MDLParserCAST, MDLParserAND, MDLParserOR, MDLParserNOT, MDLParserNULL, MDLParserIN, MDLParserBETWEEN, MDLParserLIKE, MDLParserMATCH, MDLParserEXISTS, MDLParserUNIQUE, MDLParserDEFAULT, MDLParserTRUE, MDLParserFALSE, MDLParserVALIDATION, MDLParserFEEDBACK, MDLParserRULE, MDLParserREQUIRED, MDLParserERROR, MDLParserRAISE, MDLParserRANGE, MDLParserREGEX, MDLParserPATTERN, MDLParserEXPRESSION, MDLParserXPATH, MDLParserCONSTRAINT, MDLParserCALCULATED, MDLParserREST, MDLParserSERVICE, MDLParserSERVICES, MDLParserODATA, MDLParserBASE, MDLParserAUTH, MDLParserAUTHENTICATION, MDLParserBASIC, MDLParserNOTHING, MDLParserOAUTH, MDLParserOPERATION, MDLParserMETHOD, MDLParserPATH, MDLParserTIMEOUT, MDLParserBODY, MDLParserRESPONSE, MDLParserREQUEST, MDLParserSEND, MDLParserDEPRECATED, MDLParserRESOURCE, MDLParserJSON, MDLParserXML, MDLParserSTATUS, MDLParserFILE_KW, MDLParserVERSION, MDLParserGET, MDLParserPOST, MDLParserPUT, MDLParserPATCH, MDLParserAPI, MDLParserCLIENT, MDLParserCLIENTS, MDLParserPUBLISH, MDLParserPUBLISHED, MDLParserEXPOSE, MDLParserCONTRACT, MDLParserNAMESPACE_KW, MDLParserSESSION, MDLParserGUEST, MDLParserPAGING, MDLParserNOT_SUPPORTED, MDLParserUSERNAME, MDLParserPASSWORD, MDLParserCONNECTION, MDLParserDATABASE, MDLParserQUERY, MDLParserMAP, MDLParserMAPPING, MDLParserMAPPINGS, MDLParserIMPORT, MDLParserVIA, MDLParserKEY, MDLParserINTO, MDLParserBATCH, MDLParserLINK, MDLParserEXPORT, MDLParserGENERATE, MDLParserCONNECTOR, MDLParserEXEC, MDLParserTABLES, MDLParserVIEWS, MDLParserEXPOSED, MDLParserPARAMETER, MDLParserPARAMETERS, MDLParserHEADERS, MDLParserNAVIGATION, MDLParserMENU_KW, MDLParserHOMES, MDLParserHOME, MDLParserLOGIN, MDLParserFOUND, MDLParserMODULES, MDLParserENTITIES, MDLParserASSOCIATIONS, MDLParserMICROFLOWS, MDLParserNANOFLOWS, MDLParserWORKFLOWS, MDLParserENUMERATIONS, MDLParserCONSTANTS, MDLParserCONNECTIONS, MDLParserDEFINE, MDLParserFRAGMENT, MDLParserFRAGMENTS, MDLParserLANGUAGES, MDLParserINSERT, MDLParserBEFORE, MDLParserAFTER, MDLParserUPDATE, MDLParserREFRESH, MDLParserCHECK, MDLParserBUILD, MDLParserEXECUTE, MDLParserSCRIPT, MDLParserLINT, MDLParserRULES, MDLParserTEXT, MDLParserSARIF, MDLParserMESSAGE, MDLParserMESSAGES, MDLParserCHANNELS, MDLParserCOMMENT, MDLParserCUSTOM_NAME_MAP, MDLParserCATALOG, MDLParserFORCE, MDLParserBACKGROUND, MDLParserCALLERS, MDLParserCALLEES, MDLParserREFERENCES, MDLParserTRANSITIVE, MDLParserIMPACT, MDLParserDEPTH, MDLParserSTRUCTURE, MDLParserSTRUCTURES, MDLParserSCHEMA, MDLParserTYPE, MDLParserVALUE, MDLParserVALUES, MDLParserSINGLE, MDLParserMULTIPLE, MDLParserNONE, MDLParserBOTH, MDLParserTO, MDLParserOF, MDLParserOVER, MDLParserFOR, MDLParserREPLACE, MDLParserMEMBERS, MDLParserATTRIBUTE_NAME, MDLParserFORMAT, MDLParserSQL, MDLParserWITHOUT, MDLParserDRY, MDLParserRUN, MDLParserWIDGETTYPE, MDLParserBUSINESS, MDLParserEVENT, MDLParserHANDLER, MDLParserSUBSCRIBE, MDLParserSETTINGS, MDLParserCONFIGURATION, MDLParserFEATURES, MDLParserADDED, MDLParserSINCE, MDLParserSECURITY, MDLParserROLE, MDLParserROLES, MDLParserGRANT, MDLParserREVOKE, MDLParserPRODUCTION, MDLParserPROTOTYPE, MDLParserMANAGE, MDLParserDEMO, MDLParserMATRIX, MDLParserAPPLY, MDLParserACCESS, MDLParserLEVEL, MDLParserUSER, MDLParserTASK, MDLParserDECISION, MDLParserSPLIT, MDLParserOUTCOME, MDLParserOUTCOMES, MDLParserTARGETING, MDLParserNOTIFICATION, MDLParserTIMER, MDLParserJUMP, MDLParserDUE, MDLParserOVERVIEW, MDLParserDATE, MDLParserCHANGED, MDLParserCREATED, MDLParserPARALLEL, MDLParserWAIT, MDLParserANNOTATION, MDLParserBOUNDARY, MDLParserINTERRUPTING, MDLParserNON, MDLParserMULTI, MDLParserBY, MDLParserREAD, MDLParserWRITE, MDLParserDESCRIPTION, MDLParserDISPLAY, MDLParserACTIVITY, MDLParserCONDITION, MDLParserOFF, MDLParserUSERS, MDLParserGROUPS, MDLParserDATA, MDLParserTRANSFORM, MDLParserTRANSFORMER, MDLParserTRANSFORMERS, MDLParserJSLT, MDLParserXSLT, MDLParserRECORDS, MDLParserNOTIFY, MDLParserPAUSE, MDLParserUNPAUSE, MDLParserABORT, MDLParserRETRY, MDLParserRESTART, MDLParserLOCK, MDLParserUNLOCK, MDLParserREASON, MDLParserOPEN, MDLParserCOMPLETE_TASK, MDLParserPLUS, MDLParserMINUS, MDLParserMOD, MDLParserDIV, MDLParserLPAREN, MDLParserAT, MDLParserMENDIX_TOKEN, MDLParserSTRING_LITERAL, MDLParserNUMBER_LITERAL, MDLParserVARIABLE, MDLParserIDENTIFIER, MDLParserHYPHENATED_ID, MDLParserQUOTED_IDENTIFIER: - p.SetState(7450) + p.SetState(7455) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 854, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 855, p.GetParserRuleContext()) == 1 { { - p.SetState(7449) + p.SetState(7454) p.Match(MDLParserDISTINCT) if p.HasError() { // Recognition error - abort rule @@ -108529,13 +108605,13 @@ func (p *MDLParser) AggregateFunction() (localctx IAggregateFunctionContext) { goto errorExit } { - p.SetState(7452) + p.SetState(7457) p.Expression() } case MDLParserSTAR: { - p.SetState(7453) + p.SetState(7458) p.Match(MDLParserSTAR) if p.HasError() { // Recognition error - abort rule @@ -108548,7 +108624,7 @@ func (p *MDLParser) AggregateFunction() (localctx IAggregateFunctionContext) { goto errorExit } { - p.SetState(7456) + p.SetState(7461) p.Match(MDLParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -108685,18 +108761,18 @@ func (p *MDLParser) FunctionCall() (localctx IFunctionCallContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7458) + p.SetState(7463) p.FunctionName() } { - p.SetState(7459) + p.SetState(7464) p.Match(MDLParserLPAREN) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(7461) + p.SetState(7466) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -108705,13 +108781,13 @@ func (p *MDLParser) FunctionCall() (localctx IFunctionCallContext) { if ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&-32) != 0) || ((int64((_la-64)) & ^0x3f) == 0 && ((int64(1)<<(_la-64))&-1) != 0) || ((int64((_la-128)) & ^0x3f) == 0 && ((int64(1)<<(_la-128))&-1) != 0) || ((int64((_la-192)) & ^0x3f) == 0 && ((int64(1)<<(_la-192))&-1) != 0) || ((int64((_la-256)) & ^0x3f) == 0 && ((int64(1)<<(_la-256))&-1) != 0) || ((int64((_la-320)) & ^0x3f) == 0 && ((int64(1)<<(_la-320))&-1) != 0) || ((int64((_la-384)) & ^0x3f) == 0 && ((int64(1)<<(_la-384))&-1) != 0) || ((int64((_la-448)) & ^0x3f) == 0 && ((int64(1)<<(_la-448))&-32769) != 0) || ((int64((_la-512)) & ^0x3f) == 0 && ((int64(1)<<(_la-512))&2260948956257189887) != 0) { { - p.SetState(7460) + p.SetState(7465) p.ArgumentList() } } { - p.SetState(7463) + p.SetState(7468) p.Match(MDLParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -108879,7 +108955,7 @@ func (p *MDLParser) FunctionName() (localctx IFunctionNameContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7465) + p.SetState(7470) _la = p.GetTokenStream().LA(1) if !(((int64((_la-124)) & ^0x3f) == 0 && ((int64(1)<<(_la-124))&131105) != 0) || _la == MDLParserFILTER || ((int64((_la-294)) & ^0x3f) == 0 && ((int64(1)<<(_la-294))&3145855) != 0) || _la == MDLParserIDENTIFIER || _la == MDLParserHYPHENATED_ID) { @@ -109028,10 +109104,10 @@ func (p *MDLParser) ArgumentList() (localctx IArgumentListContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7467) + p.SetState(7472) p.Expression() } - p.SetState(7472) + p.SetState(7477) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109040,7 +109116,7 @@ func (p *MDLParser) ArgumentList() (localctx IArgumentListContext) { for _la == MDLParserCOMMA { { - p.SetState(7468) + p.SetState(7473) p.Match(MDLParserCOMMA) if p.HasError() { // Recognition error - abort rule @@ -109048,11 +109124,11 @@ func (p *MDLParser) ArgumentList() (localctx IArgumentListContext) { } } { - p.SetState(7469) + p.SetState(7474) p.Expression() } - p.SetState(7474) + p.SetState(7479) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109250,31 +109326,31 @@ func (p *MDLParser) AtomicExpression() (localctx IAtomicExpressionContext) { p.EnterRule(localctx, 820, MDLParserRULE_atomicExpression) var _la int - p.SetState(7489) + p.SetState(7494) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 859, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 860, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(7475) + p.SetState(7480) p.Literal() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(7476) + p.SetState(7481) p.Match(MDLParserVARIABLE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(7481) + p.SetState(7486) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109283,7 +109359,7 @@ func (p *MDLParser) AtomicExpression() (localctx IAtomicExpressionContext) { for _la == MDLParserDOT { { - p.SetState(7477) + p.SetState(7482) p.Match(MDLParserDOT) if p.HasError() { // Recognition error - abort rule @@ -109291,11 +109367,11 @@ func (p *MDLParser) AtomicExpression() (localctx IAtomicExpressionContext) { } } { - p.SetState(7478) + p.SetState(7483) p.AttributeName() } - p.SetState(7483) + p.SetState(7488) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109306,7 +109382,7 @@ func (p *MDLParser) AtomicExpression() (localctx IAtomicExpressionContext) { case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(7484) + p.SetState(7489) p.Match(MDLParserAT) if p.HasError() { // Recognition error - abort rule @@ -109314,21 +109390,21 @@ func (p *MDLParser) AtomicExpression() (localctx IAtomicExpressionContext) { } } { - p.SetState(7485) + p.SetState(7490) p.QualifiedName() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(7486) + p.SetState(7491) p.QualifiedName() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(7487) + p.SetState(7492) p.Match(MDLParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -109339,7 +109415,7 @@ func (p *MDLParser) AtomicExpression() (localctx IAtomicExpressionContext) { case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(7488) + p.SetState(7493) p.Match(MDLParserMENDIX_TOKEN) if p.HasError() { // Recognition error - abort rule @@ -109489,10 +109565,10 @@ func (p *MDLParser) ExpressionList() (localctx IExpressionListContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7491) + p.SetState(7496) p.Expression() } - p.SetState(7496) + p.SetState(7501) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109501,7 +109577,7 @@ func (p *MDLParser) ExpressionList() (localctx IExpressionListContext) { for _la == MDLParserCOMMA { { - p.SetState(7492) + p.SetState(7497) p.Match(MDLParserCOMMA) if p.HasError() { // Recognition error - abort rule @@ -109509,11 +109585,11 @@ func (p *MDLParser) ExpressionList() (localctx IExpressionListContext) { } } { - p.SetState(7493) + p.SetState(7498) p.Expression() } - p.SetState(7498) + p.SetState(7503) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109706,7 +109782,7 @@ func (p *MDLParser) CreateDataTransformerStatement() (localctx ICreateDataTransf p.EnterOuterAlt(localctx, 1) { - p.SetState(7499) + p.SetState(7504) p.Match(MDLParserDATA) if p.HasError() { // Recognition error - abort rule @@ -109714,7 +109790,7 @@ func (p *MDLParser) CreateDataTransformerStatement() (localctx ICreateDataTransf } } { - p.SetState(7500) + p.SetState(7505) p.Match(MDLParserTRANSFORMER) if p.HasError() { // Recognition error - abort rule @@ -109722,11 +109798,11 @@ func (p *MDLParser) CreateDataTransformerStatement() (localctx ICreateDataTransf } } { - p.SetState(7501) + p.SetState(7506) p.QualifiedName() } { - p.SetState(7502) + p.SetState(7507) p.Match(MDLParserSOURCE_KW) if p.HasError() { // Recognition error - abort rule @@ -109734,7 +109810,7 @@ func (p *MDLParser) CreateDataTransformerStatement() (localctx ICreateDataTransf } } { - p.SetState(7503) + p.SetState(7508) _la = p.GetTokenStream().LA(1) if !(_la == MDLParserJSON || _la == MDLParserXML) { @@ -109745,7 +109821,7 @@ func (p *MDLParser) CreateDataTransformerStatement() (localctx ICreateDataTransf } } { - p.SetState(7504) + p.SetState(7509) p.Match(MDLParserSTRING_LITERAL) if p.HasError() { // Recognition error - abort rule @@ -109753,14 +109829,14 @@ func (p *MDLParser) CreateDataTransformerStatement() (localctx ICreateDataTransf } } { - p.SetState(7505) + p.SetState(7510) p.Match(MDLParserLBRACE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(7509) + p.SetState(7514) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109769,11 +109845,11 @@ func (p *MDLParser) CreateDataTransformerStatement() (localctx ICreateDataTransf for _la == MDLParserJSLT || _la == MDLParserXSLT { { - p.SetState(7506) + p.SetState(7511) p.DataTransformerStep() } - p.SetState(7511) + p.SetState(7516) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109781,7 +109857,7 @@ func (p *MDLParser) CreateDataTransformerStatement() (localctx ICreateDataTransf _la = p.GetTokenStream().LA(1) } { - p.SetState(7512) + p.SetState(7517) p.Match(MDLParserRBRACE) if p.HasError() { // Recognition error - abort rule @@ -109899,7 +109975,7 @@ func (p *MDLParser) DataTransformerStep() (localctx IDataTransformerStepContext) p.EnterOuterAlt(localctx, 1) { - p.SetState(7514) + p.SetState(7519) _la = p.GetTokenStream().LA(1) if !(_la == MDLParserJSLT || _la == MDLParserXSLT) { @@ -109910,7 +109986,7 @@ func (p *MDLParser) DataTransformerStep() (localctx IDataTransformerStepContext) } } { - p.SetState(7515) + p.SetState(7520) _la = p.GetTokenStream().LA(1) if !(_la == MDLParserSTRING_LITERAL || _la == MDLParserDOLLAR_STRING) { @@ -109920,7 +109996,7 @@ func (p *MDLParser) DataTransformerStep() (localctx IDataTransformerStepContext) p.Consume() } } - p.SetState(7517) + p.SetState(7522) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -109929,7 +110005,7 @@ func (p *MDLParser) DataTransformerStep() (localctx IDataTransformerStepContext) if _la == MDLParserSEMICOLON { { - p.SetState(7516) + p.SetState(7521) p.Match(MDLParserSEMICOLON) if p.HasError() { // Recognition error - abort rule @@ -110077,22 +110153,22 @@ func (p *MDLParser) QualifiedName() (localctx IQualifiedNameContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7519) + p.SetState(7524) p.IdentifierOrKeyword() } - p.SetState(7524) + p.SetState(7529) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 863, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 864, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(7520) + p.SetState(7525) p.Match(MDLParserDOT) if p.HasError() { // Recognition error - abort rule @@ -110100,17 +110176,17 @@ func (p *MDLParser) QualifiedName() (localctx IQualifiedNameContext) { } } { - p.SetState(7521) + p.SetState(7526) p.IdentifierOrKeyword() } } - p.SetState(7526) + p.SetState(7531) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 863, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 864, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -110224,7 +110300,7 @@ func (s *IdentifierOrKeywordContext) ExitRule(listener antlr.ParseTreeListener) func (p *MDLParser) IdentifierOrKeyword() (localctx IIdentifierOrKeywordContext) { localctx = NewIdentifierOrKeywordContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 830, MDLParserRULE_identifierOrKeyword) - p.SetState(7530) + p.SetState(7535) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -110234,7 +110310,7 @@ func (p *MDLParser) IdentifierOrKeyword() (localctx IIdentifierOrKeywordContext) case MDLParserIDENTIFIER: p.EnterOuterAlt(localctx, 1) { - p.SetState(7527) + p.SetState(7532) p.Match(MDLParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -110245,7 +110321,7 @@ func (p *MDLParser) IdentifierOrKeyword() (localctx IIdentifierOrKeywordContext) case MDLParserQUOTED_IDENTIFIER: p.EnterOuterAlt(localctx, 2) { - p.SetState(7528) + p.SetState(7533) p.Match(MDLParserQUOTED_IDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -110256,7 +110332,7 @@ func (p *MDLParser) IdentifierOrKeyword() (localctx IIdentifierOrKeywordContext) case MDLParserIS_NOT_NULL, MDLParserIS_NULL, MDLParserNOT_NULL, MDLParserGROUP_BY, MDLParserORDER_BY, MDLParserSORT_BY, MDLParserNON_PERSISTENT, MDLParserREFERENCE_SET, MDLParserLIST_OF, MDLParserDELETE_AND_REFERENCES, MDLParserDELETE_BUT_KEEP_REFERENCES, MDLParserDELETE_IF_NO_REFERENCES, MDLParserCREATE, MDLParserALTER, MDLParserDROP, MDLParserRENAME, MDLParserMOVE, MDLParserMODIFY, MDLParserENTITY, MDLParserPERSISTENT, MDLParserVIEW, MDLParserEXTERNAL, MDLParserASSOCIATION, MDLParserENUMERATION, MDLParserMODULE, MDLParserMICROFLOW, MDLParserNANOFLOW, MDLParserWORKFLOW, MDLParserPAGE, MDLParserSNIPPET, MDLParserLAYOUT, MDLParserNOTEBOOK, MDLParserCONSTANT, MDLParserATTRIBUTE, MDLParserCOLUMN, MDLParserCOLUMNS, MDLParserINDEX, MDLParserOWNER, MDLParserSTORE, MDLParserREFERENCE, MDLParserGENERALIZATION, MDLParserEXTENDS, MDLParserADD, MDLParserSET, MDLParserPOSITION, MDLParserDOCUMENTATION, MDLParserSTORAGE, MDLParserTABLE, MDLParserDELETE_BEHAVIOR, MDLParserCASCADE, MDLParserPREVENT, MDLParserCONNECT, MDLParserDISCONNECT, MDLParserLOCAL, MDLParserPROJECT, MDLParserRUNTIME, MDLParserBRANCH, MDLParserTOKEN, MDLParserHOST, MDLParserPORT, MDLParserSHOW, MDLParserLIST_KW, MDLParserDESCRIBE, MDLParserUSE, MDLParserINTROSPECT, MDLParserDEBUG, MDLParserSELECT, MDLParserFROM, MDLParserWHERE, MDLParserHAVING, MDLParserOFFSET, MDLParserLIMIT, MDLParserAS, MDLParserRETURNS, MDLParserRETURNING, MDLParserCASE, MDLParserWHEN, MDLParserTHEN, MDLParserELSE, MDLParserEND, MDLParserDISTINCT, MDLParserALL, MDLParserJOIN, MDLParserLEFT, MDLParserRIGHT, MDLParserINNER, MDLParserOUTER, MDLParserFULL, MDLParserCROSS, MDLParserON, MDLParserASC, MDLParserDESC, MDLParserBEGIN, MDLParserDECLARE, MDLParserCHANGE, MDLParserRETRIEVE, MDLParserDELETE, MDLParserCOMMIT, MDLParserROLLBACK, MDLParserLOOP, MDLParserWHILE, MDLParserIF, MDLParserELSIF, MDLParserELSEIF, MDLParserCONTINUE, MDLParserBREAK, MDLParserRETURN, MDLParserTHROW, MDLParserLOG, MDLParserCALL, MDLParserJAVA, MDLParserJAVASCRIPT, MDLParserACTION, MDLParserACTIONS, MDLParserCLOSE, MDLParserNODE, MDLParserEVENTS, MDLParserHEAD, MDLParserTAIL, MDLParserFIND, MDLParserSORT, MDLParserUNION, MDLParserINTERSECT, MDLParserSUBTRACT, MDLParserCONTAINS, MDLParserAVERAGE, MDLParserMINIMUM, MDLParserMAXIMUM, MDLParserLIST, MDLParserREMOVE, MDLParserEQUALS_OP, MDLParserINFO, MDLParserWARNING, MDLParserTRACE, MDLParserCRITICAL, MDLParserWITH, MDLParserEMPTY, MDLParserOBJECT, MDLParserOBJECTS, MDLParserPAGES, MDLParserLAYOUTS, MDLParserSNIPPETS, MDLParserNOTEBOOKS, MDLParserPLACEHOLDER, MDLParserSNIPPETCALL, MDLParserLAYOUTGRID, MDLParserDATAGRID, MDLParserDATAVIEW, MDLParserLISTVIEW, MDLParserGALLERY, MDLParserCONTAINER, MDLParserROW, MDLParserITEM, MDLParserCONTROLBAR, MDLParserSEARCH, MDLParserSEARCHBAR, MDLParserNAVIGATIONLIST, MDLParserACTIONBUTTON, MDLParserLINKBUTTON, MDLParserBUTTON, MDLParserTITLE, MDLParserDYNAMICTEXT, MDLParserDYNAMIC, MDLParserSTATICTEXT, MDLParserLABEL, MDLParserTEXTBOX, MDLParserTEXTAREA, MDLParserDATEPICKER, MDLParserRADIOBUTTONS, MDLParserDROPDOWN, MDLParserCOMBOBOX, MDLParserCHECKBOX, MDLParserREFERENCESELECTOR, MDLParserINPUTREFERENCESETSELECTOR, MDLParserFILEINPUT, MDLParserIMAGEINPUT, MDLParserCUSTOMWIDGET, MDLParserPLUGGABLEWIDGET, MDLParserTEXTFILTER, MDLParserNUMBERFILTER, MDLParserDROPDOWNFILTER, MDLParserDATEFILTER, MDLParserDROPDOWNSORT, MDLParserFILTER, MDLParserWIDGET, MDLParserWIDGETS, MDLParserCAPTION, MDLParserICON, MDLParserTOOLTIP, MDLParserDATASOURCE, MDLParserSOURCE_KW, MDLParserSELECTION, MDLParserFOOTER, MDLParserHEADER, MDLParserCONTENT, MDLParserRENDERMODE, MDLParserBINDS, MDLParserATTR, MDLParserCONTENTPARAMS, MDLParserCAPTIONPARAMS, MDLParserPARAMS, MDLParserVARIABLES_KW, MDLParserDESKTOPWIDTH, MDLParserTABLETWIDTH, MDLParserPHONEWIDTH, MDLParserCLASS, MDLParserSTYLE, MDLParserBUTTONSTYLE, MDLParserDESIGN, MDLParserPROPERTIES, MDLParserDESIGNPROPERTIES, MDLParserSTYLING, MDLParserCLEAR, MDLParserWIDTH, MDLParserHEIGHT, MDLParserAUTOFILL, MDLParserURL, MDLParserFOLDER, MDLParserPASSING, MDLParserCONTEXT, MDLParserEDITABLE, MDLParserREADONLY, MDLParserATTRIBUTES, MDLParserFILTERTYPE, MDLParserIMAGE, MDLParserCOLLECTION, MDLParserMODEL, MDLParserMODELS, MDLParserAGENT, MDLParserAGENTS, MDLParserTOOL, MDLParserKNOWLEDGE, MDLParserBASES, MDLParserCONSUMED, MDLParserMCP, MDLParserSTATICIMAGE, MDLParserDYNAMICIMAGE, MDLParserCUSTOMCONTAINER, MDLParserTABCONTAINER, MDLParserTABPAGE, MDLParserGROUPBOX, MDLParserVISIBLE, MDLParserSAVECHANGES, MDLParserSAVE_CHANGES, MDLParserCANCEL_CHANGES, MDLParserCLOSE_PAGE, MDLParserSHOW_PAGE, MDLParserDELETE_ACTION, MDLParserDELETE_OBJECT, MDLParserCREATE_OBJECT, MDLParserCALL_MICROFLOW, MDLParserCALL_NANOFLOW, MDLParserOPEN_LINK, MDLParserSIGN_OUT, MDLParserCANCEL, MDLParserPRIMARY, MDLParserSUCCESS, MDLParserDANGER, MDLParserWARNING_STYLE, MDLParserINFO_STYLE, MDLParserTEMPLATE, MDLParserONCLICK, MDLParserONCHANGE, MDLParserTABINDEX, MDLParserH1, MDLParserH2, MDLParserH3, MDLParserH4, MDLParserH5, MDLParserH6, MDLParserPARAGRAPH, MDLParserSTRING_TYPE, MDLParserINTEGER_TYPE, MDLParserLONG_TYPE, MDLParserDECIMAL_TYPE, MDLParserBOOLEAN_TYPE, MDLParserDATETIME_TYPE, MDLParserDATE_TYPE, MDLParserAUTONUMBER_TYPE, MDLParserAUTOOWNER_TYPE, MDLParserAUTOCHANGEDBY_TYPE, MDLParserAUTOCREATEDDATE_TYPE, MDLParserAUTOCHANGEDDATE_TYPE, MDLParserBINARY_TYPE, MDLParserHASHEDSTRING_TYPE, MDLParserCURRENCY_TYPE, MDLParserFLOAT_TYPE, MDLParserSTRINGTEMPLATE_TYPE, MDLParserENUM_TYPE, MDLParserCOUNT, MDLParserSUM, MDLParserAVG, MDLParserMIN, MDLParserMAX, MDLParserLENGTH, MDLParserTRIM, MDLParserCOALESCE, MDLParserCAST, MDLParserAND, MDLParserOR, MDLParserNOT, MDLParserNULL, MDLParserIN, MDLParserBETWEEN, MDLParserLIKE, MDLParserMATCH, MDLParserEXISTS, MDLParserUNIQUE, MDLParserDEFAULT, MDLParserTRUE, MDLParserFALSE, MDLParserVALIDATION, MDLParserFEEDBACK, MDLParserRULE, MDLParserREQUIRED, MDLParserERROR, MDLParserRAISE, MDLParserRANGE, MDLParserREGEX, MDLParserPATTERN, MDLParserEXPRESSION, MDLParserXPATH, MDLParserCONSTRAINT, MDLParserCALCULATED, MDLParserREST, MDLParserSERVICE, MDLParserSERVICES, MDLParserODATA, MDLParserBASE, MDLParserAUTH, MDLParserAUTHENTICATION, MDLParserBASIC, MDLParserNOTHING, MDLParserOAUTH, MDLParserOPERATION, MDLParserMETHOD, MDLParserPATH, MDLParserTIMEOUT, MDLParserBODY, MDLParserRESPONSE, MDLParserREQUEST, MDLParserSEND, MDLParserDEPRECATED, MDLParserRESOURCE, MDLParserJSON, MDLParserXML, MDLParserSTATUS, MDLParserFILE_KW, MDLParserVERSION, MDLParserGET, MDLParserPOST, MDLParserPUT, MDLParserPATCH, MDLParserAPI, MDLParserCLIENT, MDLParserCLIENTS, MDLParserPUBLISH, MDLParserPUBLISHED, MDLParserEXPOSE, MDLParserCONTRACT, MDLParserNAMESPACE_KW, MDLParserSESSION, MDLParserGUEST, MDLParserPAGING, MDLParserNOT_SUPPORTED, MDLParserUSERNAME, MDLParserPASSWORD, MDLParserCONNECTION, MDLParserDATABASE, MDLParserQUERY, MDLParserMAP, MDLParserMAPPING, MDLParserMAPPINGS, MDLParserIMPORT, MDLParserVIA, MDLParserKEY, MDLParserINTO, MDLParserBATCH, MDLParserLINK, MDLParserEXPORT, MDLParserGENERATE, MDLParserCONNECTOR, MDLParserEXEC, MDLParserTABLES, MDLParserVIEWS, MDLParserEXPOSED, MDLParserPARAMETER, MDLParserPARAMETERS, MDLParserHEADERS, MDLParserNAVIGATION, MDLParserMENU_KW, MDLParserHOMES, MDLParserHOME, MDLParserLOGIN, MDLParserFOUND, MDLParserMODULES, MDLParserENTITIES, MDLParserASSOCIATIONS, MDLParserMICROFLOWS, MDLParserNANOFLOWS, MDLParserWORKFLOWS, MDLParserENUMERATIONS, MDLParserCONSTANTS, MDLParserCONNECTIONS, MDLParserDEFINE, MDLParserFRAGMENT, MDLParserFRAGMENTS, MDLParserLANGUAGES, MDLParserINSERT, MDLParserBEFORE, MDLParserAFTER, MDLParserUPDATE, MDLParserREFRESH, MDLParserCHECK, MDLParserBUILD, MDLParserEXECUTE, MDLParserSCRIPT, MDLParserLINT, MDLParserRULES, MDLParserTEXT, MDLParserSARIF, MDLParserMESSAGE, MDLParserMESSAGES, MDLParserCHANNELS, MDLParserCOMMENT, MDLParserCUSTOM_NAME_MAP, MDLParserCATALOG, MDLParserFORCE, MDLParserBACKGROUND, MDLParserCALLERS, MDLParserCALLEES, MDLParserREFERENCES, MDLParserTRANSITIVE, MDLParserIMPACT, MDLParserDEPTH, MDLParserSTRUCTURE, MDLParserSTRUCTURES, MDLParserSCHEMA, MDLParserTYPE, MDLParserVALUE, MDLParserVALUES, MDLParserSINGLE, MDLParserMULTIPLE, MDLParserNONE, MDLParserBOTH, MDLParserTO, MDLParserOF, MDLParserOVER, MDLParserFOR, MDLParserREPLACE, MDLParserMEMBERS, MDLParserATTRIBUTE_NAME, MDLParserFORMAT, MDLParserSQL, MDLParserWITHOUT, MDLParserDRY, MDLParserRUN, MDLParserWIDGETTYPE, MDLParserBUSINESS, MDLParserEVENT, MDLParserHANDLER, MDLParserSUBSCRIBE, MDLParserSETTINGS, MDLParserCONFIGURATION, MDLParserFEATURES, MDLParserADDED, MDLParserSINCE, MDLParserSECURITY, MDLParserROLE, MDLParserROLES, MDLParserGRANT, MDLParserREVOKE, MDLParserPRODUCTION, MDLParserPROTOTYPE, MDLParserMANAGE, MDLParserDEMO, MDLParserMATRIX, MDLParserAPPLY, MDLParserACCESS, MDLParserLEVEL, MDLParserUSER, MDLParserTASK, MDLParserDECISION, MDLParserSPLIT, MDLParserOUTCOME, MDLParserOUTCOMES, MDLParserTARGETING, MDLParserNOTIFICATION, MDLParserTIMER, MDLParserJUMP, MDLParserDUE, MDLParserOVERVIEW, MDLParserDATE, MDLParserCHANGED, MDLParserCREATED, MDLParserPARALLEL, MDLParserWAIT, MDLParserANNOTATION, MDLParserBOUNDARY, MDLParserINTERRUPTING, MDLParserNON, MDLParserMULTI, MDLParserBY, MDLParserREAD, MDLParserWRITE, MDLParserDESCRIPTION, MDLParserDISPLAY, MDLParserACTIVITY, MDLParserCONDITION, MDLParserOFF, MDLParserUSERS, MDLParserGROUPS, MDLParserDATA, MDLParserTRANSFORM, MDLParserTRANSFORMER, MDLParserTRANSFORMERS, MDLParserJSLT, MDLParserXSLT, MDLParserRECORDS, MDLParserNOTIFY, MDLParserPAUSE, MDLParserUNPAUSE, MDLParserABORT, MDLParserRETRY, MDLParserRESTART, MDLParserLOCK, MDLParserUNLOCK, MDLParserREASON, MDLParserOPEN, MDLParserCOMPLETE_TASK, MDLParserMOD, MDLParserDIV: p.EnterOuterAlt(localctx, 3) { - p.SetState(7529) + p.SetState(7534) p.Keyword() } @@ -110383,7 +110459,7 @@ func (s *LiteralContext) ExitRule(listener antlr.ParseTreeListener) { func (p *MDLParser) Literal() (localctx ILiteralContext) { localctx = NewLiteralContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 832, MDLParserRULE_literal) - p.SetState(7537) + p.SetState(7542) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -110393,7 +110469,7 @@ func (p *MDLParser) Literal() (localctx ILiteralContext) { case MDLParserSTRING_LITERAL: p.EnterOuterAlt(localctx, 1) { - p.SetState(7532) + p.SetState(7537) p.Match(MDLParserSTRING_LITERAL) if p.HasError() { // Recognition error - abort rule @@ -110404,7 +110480,7 @@ func (p *MDLParser) Literal() (localctx ILiteralContext) { case MDLParserNUMBER_LITERAL: p.EnterOuterAlt(localctx, 2) { - p.SetState(7533) + p.SetState(7538) p.Match(MDLParserNUMBER_LITERAL) if p.HasError() { // Recognition error - abort rule @@ -110415,14 +110491,14 @@ func (p *MDLParser) Literal() (localctx ILiteralContext) { case MDLParserTRUE, MDLParserFALSE: p.EnterOuterAlt(localctx, 3) { - p.SetState(7534) + p.SetState(7539) p.BooleanLiteral() } case MDLParserNULL: p.EnterOuterAlt(localctx, 4) { - p.SetState(7535) + p.SetState(7540) p.Match(MDLParserNULL) if p.HasError() { // Recognition error - abort rule @@ -110433,7 +110509,7 @@ func (p *MDLParser) Literal() (localctx ILiteralContext) { case MDLParserEMPTY: p.EnterOuterAlt(localctx, 5) { - p.SetState(7536) + p.SetState(7541) p.Match(MDLParserEMPTY) if p.HasError() { // Recognition error - abort rule @@ -110594,14 +110670,14 @@ func (p *MDLParser) ArrayLiteral() (localctx IArrayLiteralContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7539) + p.SetState(7544) p.Match(MDLParserLBRACKET) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(7548) + p.SetState(7553) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -110610,10 +110686,10 @@ func (p *MDLParser) ArrayLiteral() (localctx IArrayLiteralContext) { if _la == MDLParserEMPTY || ((int64((_la-306)) & ^0x3f) == 0 && ((int64(1)<<(_la-306))&769) != 0) || _la == MDLParserSTRING_LITERAL || _la == MDLParserNUMBER_LITERAL { { - p.SetState(7540) + p.SetState(7545) p.Literal() } - p.SetState(7545) + p.SetState(7550) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -110622,7 +110698,7 @@ func (p *MDLParser) ArrayLiteral() (localctx IArrayLiteralContext) { for _la == MDLParserCOMMA { { - p.SetState(7541) + p.SetState(7546) p.Match(MDLParserCOMMA) if p.HasError() { // Recognition error - abort rule @@ -110630,11 +110706,11 @@ func (p *MDLParser) ArrayLiteral() (localctx IArrayLiteralContext) { } } { - p.SetState(7542) + p.SetState(7547) p.Literal() } - p.SetState(7547) + p.SetState(7552) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -110644,7 +110720,7 @@ func (p *MDLParser) ArrayLiteral() (localctx IArrayLiteralContext) { } { - p.SetState(7550) + p.SetState(7555) p.Match(MDLParserRBRACKET) if p.HasError() { // Recognition error - abort rule @@ -110747,7 +110823,7 @@ func (p *MDLParser) BooleanLiteral() (localctx IBooleanLiteralContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7552) + p.SetState(7557) _la = p.GetTokenStream().LA(1) if !(_la == MDLParserTRUE || _la == MDLParserFALSE) { @@ -110846,7 +110922,7 @@ func (p *MDLParser) DocComment() (localctx IDocCommentContext) { p.EnterRule(localctx, 838, MDLParserRULE_docComment) p.EnterOuterAlt(localctx, 1) { - p.SetState(7554) + p.SetState(7559) p.Match(MDLParserDOC_COMMENT) if p.HasError() { // Recognition error - abort rule @@ -111003,7 +111079,7 @@ func (p *MDLParser) Annotation() (localctx IAnnotationContext) { p.EnterRule(localctx, 840, MDLParserRULE_annotation) p.EnterOuterAlt(localctx, 1) { - p.SetState(7556) + p.SetState(7561) p.Match(MDLParserAT) if p.HasError() { // Recognition error - abort rule @@ -111011,15 +111087,15 @@ func (p *MDLParser) Annotation() (localctx IAnnotationContext) { } } { - p.SetState(7557) + p.SetState(7562) p.AnnotationName() } - p.SetState(7563) + p.SetState(7568) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 868, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 869, p.GetParserRuleContext()) == 1 { { - p.SetState(7558) + p.SetState(7563) p.Match(MDLParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -111027,11 +111103,11 @@ func (p *MDLParser) Annotation() (localctx IAnnotationContext) { } } { - p.SetState(7559) + p.SetState(7564) p.AnnotationParams() } { - p.SetState(7560) + p.SetState(7565) p.Match(MDLParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -111041,9 +111117,9 @@ func (p *MDLParser) Annotation() (localctx IAnnotationContext) { } else if p.HasError() { // JIM goto errorExit - } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 868, p.GetParserRuleContext()) == 2 { + } else if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 869, p.GetParserRuleContext()) == 2 { { - p.SetState(7562) + p.SetState(7567) p.AnnotationValue() } @@ -111176,7 +111252,7 @@ func (p *MDLParser) AnnotationName() (localctx IAnnotationNameContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7565) + p.SetState(7570) _la = p.GetTokenStream().LA(1) if !(_la == MDLParserPOSITION || ((int64((_la-191)) & ^0x3f) == 0 && ((int64(1)<<(_la-191))&2147483651) != 0) || _la == MDLParserREQUIRED || _la == MDLParserCOMMENT || _la == MDLParserANNOTATION || _la == MDLParserIDENTIFIER) { @@ -111325,10 +111401,10 @@ func (p *MDLParser) AnnotationParams() (localctx IAnnotationParamsContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7567) + p.SetState(7572) p.AnnotationParam() } - p.SetState(7572) + p.SetState(7577) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -111337,7 +111413,7 @@ func (p *MDLParser) AnnotationParams() (localctx IAnnotationParamsContext) { for _la == MDLParserCOMMA { { - p.SetState(7568) + p.SetState(7573) p.Match(MDLParserCOMMA) if p.HasError() { // Recognition error - abort rule @@ -111345,11 +111421,11 @@ func (p *MDLParser) AnnotationParams() (localctx IAnnotationParamsContext) { } } { - p.SetState(7569) + p.SetState(7574) p.AnnotationParam() } - p.SetState(7574) + p.SetState(7579) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -111465,17 +111541,17 @@ func (s *AnnotationParamContext) ExitRule(listener antlr.ParseTreeListener) { func (p *MDLParser) AnnotationParam() (localctx IAnnotationParamContext) { localctx = NewAnnotationParamContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 846, MDLParserRULE_annotationParam) - p.SetState(7579) + p.SetState(7584) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 870, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 871, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(7575) + p.SetState(7580) p.Match(MDLParserIDENTIFIER) if p.HasError() { // Recognition error - abort rule @@ -111483,7 +111559,7 @@ func (p *MDLParser) AnnotationParam() (localctx IAnnotationParamContext) { } } { - p.SetState(7576) + p.SetState(7581) p.Match(MDLParserCOLON) if p.HasError() { // Recognition error - abort rule @@ -111491,14 +111567,14 @@ func (p *MDLParser) AnnotationParam() (localctx IAnnotationParamContext) { } } { - p.SetState(7577) + p.SetState(7582) p.AnnotationValue() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(7578) + p.SetState(7583) p.AnnotationValue() } @@ -111638,31 +111714,31 @@ func (s *AnnotationValueContext) ExitRule(listener antlr.ParseTreeListener) { func (p *MDLParser) AnnotationValue() (localctx IAnnotationValueContext) { localctx = NewAnnotationValueContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 848, MDLParserRULE_annotationValue) - p.SetState(7584) + p.SetState(7589) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 871, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 872, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(7581) + p.SetState(7586) p.Literal() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(7582) + p.SetState(7587) p.Expression() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(7583) + p.SetState(7588) p.QualifiedName() } @@ -114415,7 +114491,7 @@ func (p *MDLParser) Keyword() (localctx IKeywordContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(7586) + p.SetState(7591) _la = p.GetTokenStream().LA(1) if !(((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&-32) != 0) || ((int64((_la-64)) & ^0x3f) == 0 && ((int64(1)<<(_la-64))&-1) != 0) || ((int64((_la-128)) & ^0x3f) == 0 && ((int64(1)<<(_la-128))&-1) != 0) || ((int64((_la-192)) & ^0x3f) == 0 && ((int64(1)<<(_la-192))&-1) != 0) || ((int64((_la-256)) & ^0x3f) == 0 && ((int64(1)<<(_la-256))&-1) != 0) || ((int64((_la-320)) & ^0x3f) == 0 && ((int64(1)<<(_la-320))&-1) != 0) || ((int64((_la-384)) & ^0x3f) == 0 && ((int64(1)<<(_la-384))&-1) != 0) || ((int64((_la-448)) & ^0x3f) == 0 && ((int64(1)<<(_la-448))&-32769) != 0) || ((int64((_la-512)) & ^0x3f) == 0 && ((int64(1)<<(_la-512))&103095992319) != 0)) { diff --git a/mdl/visitor/visitor_query.go b/mdl/visitor/visitor_query.go index bc00116b..26399e77 100644 --- a/mdl/visitor/visitor_query.go +++ b/mdl/visitor/visitor_query.go @@ -1004,13 +1004,17 @@ func (b *Builder) ExitExecuteScriptStatement(ctx *parser.ExecuteScriptStatementC } // ExitHelpStatement handles help/exit/quit commands -// Grammar: helpStatement: IDENTIFIER +// Grammar: helpStatement: IDENTIFIER (identifierOrKeyword)* func (b *Builder) ExitHelpStatement(ctx *parser.HelpStatementContext) { if id := ctx.IDENTIFIER(); id != nil { cmd := strings.ToLower(id.GetText()) switch cmd { case "help", "?": - b.statements = append(b.statements, &ast.HelpStmt{}) + stmt := &ast.HelpStmt{} + for _, tok := range ctx.AllIdentifierOrKeyword() { + stmt.Topic = append(stmt.Topic, strings.ToLower(tok.GetText())) + } + b.statements = append(b.statements, stmt) case "exit", "quit": b.statements = append(b.statements, &ast.ExitStmt{}) case "status":