diff --git a/BUGS-TO-REPORT.md b/BUGS-TO-REPORT.md index f6e877088..66d2f354e 100644 --- a/BUGS-TO-REPORT.md +++ b/BUGS-TO-REPORT.md @@ -1056,12 +1056,12 @@ Each line stays as it is typed, as it does in the code editor. The code editor's **Desktop:** - OS: Windows 10 Pro 22H2 (build 19045) - - twinBASIC compiler version: BETA 1010 + - twinBASIC compiler version: BETA 1034 **Additional context** What does not reproduce it: a word that is already the list's first entry, and not a procedure, keeps its space, so `total = 6` stays as it is. `? total` and `Debug.Print total` stay as they are. Escape before the space closes the list, and the space is then typed. With the IDE's IntelliSense mode set to LEGACY or MANUAL, the list does not open while the first word of a line is typed, and `Print total` and `Call Touch(total)` stay as they are. -In the default mode, MODERN, the console asks for the list after every key and answers within a few milliseconds, so the list is open at the space whenever a line is typed at an ordinary speed. Every keyword that starts a longer name is replaced in the same way, and the others type as they are: `Do` becomes `DockModeConstants`, `For` becomes `FormArrangeConstants`, `On` becomes `OnErrorCatch`, `Get` becomes `GetAllSettings()` and `RaiseEvent` becomes `RaiseEventByName()`, while `Dim`, `End`, `Exit`, `With`, `Open`, `Close`, `ReDim`, `Stop` and `GoTo` stay. The same happens with no program running: `Print 1 + 1` becomes `Printer1 + 1`. +In the mode MODERN (the default up to BETA 1010; since BETA 1033 the default is LEGACY), the console asks for the list after every key and answers within a few milliseconds, so the list is open at the space whenever a line is typed at an ordinary speed. Every keyword that starts a longer name is replaced in the same way, and the others type as they are: `Do` becomes `DockModeConstants`, `For` becomes `FormArrangeConstants`, `On` becomes `OnErrorCatch`, `Get` becomes `GetAllSettings()` and `RaiseEvent` becomes `RaiseEventByName()`, while `Dim`, `End`, `Exit`, `With`, `Open`, `Close`, `ReDim`, `Stop` and `GoTo` stay. The same happens with no program running: `Print 1 + 1` becomes `Printer1 + 1`. Severity: moderate. `Print`, `Call` and `Set` begin lines that are often typed in the console, and each becomes a line the console refuses. The only ways round it are Escape before the space and another IntelliSense mode. @@ -5345,60 +5345,6 @@ Severity: low. A type library is labelled as a package. --- -## With Export Verbose, each DONE line of Export Project shows \ for every backslash - -**Describe the bug** -With *Export Verbose* on (Project Settings, Export), Export Project prints a `DONE:` line in the DEBUG CONSOLE for each file it writes. Every backslash in those paths shows as the text `\`. The files are written correctly. It was observed in an IDE started with an `APPDATA` of its own, reading the console's lines and the rows it draws, and the folder written. - -**To Reproduce** -Steps to reproduce the behavior: -1. Open any project, and set *Export Verbose* to YES in Project Settings, Export. -2. Export Project into an empty folder. -3. The DEBUG CONSOLE shows `[EXPORT] DONE: \Settings`, `[EXPORT] DONE: \Sources\Startup.twin`, and so on for each file. - -**Expected behavior** -`[EXPORT] DONE: \Settings`, `[EXPORT] DONE: \Sources\Startup.twin`. - -**Desktop:** - - OS: Windows 10 Pro 22H2 (build 19045) - - twinBASIC compiler version: BETA 1010 - -**Additional context** -Also on BETA 1007, with the same lines. The other `[EXPORT]` lines are right: the first line, `exporting current project to "\\?\C:\...\"...`, the `COMPLETED (... folders, ... files)` line, and, when the export folder already holds files, each `DELETED: \\?\C:\...` line. The files written and their contents are right. - -The cause looks to be the one in #2444. The compiler sends each `DONE` line in three parts: `[EXPORT] DONE: `, then the path, then the line break. `debugOutputPartial` in `ide/main.js` adds the path to a line that is still open, and passes it through `TEXTtoHTML` twice, so `\` is stored as `&#92;` and drawn as `\`. A `DELETED` line comes in one part and is escaped once. - -Severity: cosmetic. The paths are hard to read, and a path copied from the console is wrong. - -**Fix shape** - -`debugOutputPartial` in `ide/main.js`, BETA 1010, in a readable form. The local names are ours, not twinBASIC's (`text`, `colorClass`, `isHTML`, `timeStamp`, `endsLine`, `addedHTML`, `lineHTML`, `stampHTML`); the build calls them `e`, `t`, `o`, `n`, `r`, `i`, `n`, `i`. - -```diff -@@ -6,11 +6,11 @@ - if (debugConsolePartialLineItem) { - let lineHTML = debugConsoleContent.onAsyncGetItemHTML(debugConsolePartialLineItem); - if (debugConsolePartialLineItem_LastColorClass === colorClass) { -- text = TEXTtoHTML(text); -+ text = isHTML ? text : TEXTtoHTML(text); - } else { - text = "" + (isHTML ? text : TEXTtoHTML(text)); - } -- var addedHTML = isHTML ? text : TEXTtoHTML(text); -+ var addedHTML = text; - debugConsoleContent.updateItem( - debugConsolePartialLineItem, - lineHTML + addedHTML + (endsLine ? "" : ""), -``` - -Both branches of the `if` already escape `text`, so the second `TEXTtoHTML` escapes it again (this bug and #2444); after a colour change it also escapes the `` markup that the `else` branch added. The first changed line is a related case: HTML text that continues a line in the same colour is escaped, though it is HTML. Drop that line if `isHTML` never continues a line. - -Tested on a copy of BETA 1010 with this change (two edits in `main.js`, every other byte the same): the DONE lines read `DONE: \Settings` and `DONE: \Sources\Startup.twin`, the other `[EXPORT]` lines are unchanged, and #2444's reproducer no longer reproduces. - - - ---- - ## Auto-Increment raises the version in memory only, and the increments are lost **Describe the bug** @@ -11181,3 +11127,388 @@ This is separate from the PictureBox report on Discord (2026-10-28), that settin +--- + +## In the Object Browser, Tab moves the focus from the search box to Aa and no further + +**Describe the bug** +In the Object Browser (View → Object Browser, F2), Tab moves the focus from the search box to the **Aa** button and no further: every later Tab leaves the focus on **Aa**. Shift+Tab from the search box goes to the **Project / Library** box, then to the Description's copy button, and stops there. So Back and Forward, Browse and Results, the sort and filter buttons, the Components and Members lists and the Description cannot be reached from the keyboard; only a click puts the focus in a list. It was observed in an IDE started with an `APPDATA` of its own, pressing the keys and reading which element had the focus after each. + +**To Reproduce** +Steps to reproduce the behavior: +1. Open any project, put the caret in the code editor, and press F2. The Object Browser opens with the focus in its search box. +2. Press Tab: the focus goes to **Aa**. +3. Press Tab a few more times: the focus stays on **Aa**. +4. Click in the search box and press Shift+Tab three times: the focus goes to **Project / Library**, then to the copy button at the top right of the Description, and stays there. + +**Expected behavior** +Tab and Shift+Tab move through every control of the dialog and wrap at its ends. The Object Browser's own key handler is written for that: it collects the dialog's buttons, inputs, selects and lists, and wraps Tab from the last to the first and Shift+Tab from the first to the last, leaving the moves in between to the browser. + +**Desktop:** + - OS: Windows 10 Pro 22H2 (build 19045) + - twinBASIC compiler version: BETA 1034 + +**Additional context** +The cause is in `showModalDialog` in `ide/main.js`, which the Object Browser opens in. The dialog container's `onkeydown` takes Tab and Shift+Tab (and Right and Left) for itself whenever the focused element is not an `input` or a `textarea`: it moves the highlight between the footer buttons (**Go to Definition** and **Close**), and prevents the default. The search box is an `input`, so its Tab reaches the browser and moves to **Aa**; **Aa** is a `button`, so its Tab is taken. Other dialogs were not tried. + +Once a list has the focus (by a click), its keys work: Up, Down, Home, End, type-ahead, and Enter for Go to Definition. Escape closes the dialog from anywhere in it. + +Severity: low for a mouse user; a keyboard user cannot reach the lists at all. + +**Fix shape** + +`showModalDialog` in `ide/main.js`, BETA 1034, in a readable form. The local names are ours, not twinBASIC's (`content`, `buttons`, `caption`, `onClose`, `keepUnlocked`, `noButtonKeys`, `container`, `previous`, `startLeft`, `startTop`, `startX`, `startY`, `dragging`, `titleBar`, `closeBox`, `cancelButton`, `acceptButton`, `focusedButton`, `firstButton`, `lastButton`, `buttonBar`, `leadingSpacer`, `hasSpacer`, `down`, `move`, `dx`, `dy`, `up`, `press`, `event`, `inTextBox`, `button`, `element`, `click`, `mouseDown`); the build calls them `e`, `t`, `o`, `n`, `i`, `r`, `a`, `s`, `l`, `d`, `c`, `u`, `p`, `f`, `g`, `m`, `h`, `v`, `b`, `C`, `y`, `E`, `D`, `e`, `e`, `t`, `o`, `e`, `e`, `e`, `e`, `e`, `t`, `t`, `t`. + +```diff +@@ -93,6 +93,29 @@ + } + } + if (!noButtonKeys) { ++ // Tab and Shift+Tab move the focus through the dialog's own controls while one of them ++ // has it, wrapping at the ends, where a dialog that does so itself has done it already. ++ if ( ++ event.key === "Tab" && ++ container.contains(document.activeElement) && ++ document.activeElement !== container ++ ) { ++ if (!event.defaultPrevented) { ++ const controls = [ ++ ...container.querySelectorAll("button, input, select, textarea, [tabindex]"), ++ ].filter( ++ (control) => ++ control.tabIndex >= 0 && !control.disabled && control.getClientRects().length, ++ ); ++ const current = controls.indexOf(document.activeElement); ++ const step = event.shiftKey ? controls.length - 1 : 1; ++ if (controls.length) ++ controls[current < 0 ? 0 : (current + step) % controls.length].focus(); ++ event.preventDefault(); ++ } ++ event.stopPropagation(); ++ return; ++ } + if ((event.key === "Tab" && !event.shiftKey) || event.key === "ArrowRight") { + if ( + document.activeElement.localName == "input" || +``` + +While a control inside the dialog has the focus, Tab now moves it to the next control the dialog shows, and Shift+Tab to the one before, wrapping inside the dialog, so the focus never leaves it for the IDE behind. The footer buttons are `div`s with no tab stop, so they are not among the controls; Right and Left still move their highlight, and Enter still presses the highlighted one. The Object Browser wraps at its own ends in a handler that runs first and prevents the default, so `defaultPrevented` leaves that move alone. With the focus on the container itself, as when a dialog has just opened, Tab still moves the footer highlight as before. One change for other dialogs: Tab from a text box also stays inside the dialog now, where before it went wherever the browser sent it. + +Tested on a copy of BETA 1034 with this change (12 edits in `main.js`, most of them parentheses round an arrow function's parameter, every other byte the same): Tab from the search box goes to **Aa**, **Browse**, **Results** and the sort button of Components in turn, and Shift+Tab goes to **Project / Library**, the copy button and the Description; the Object Browser lane's other 19 tests pass, and so do the five tests of the Customising lane, which type names into the Manage Keyboard Shortcuts and Manage Panel Layouts dialogs. + + + +--- + +## The messages of TB0034, and of TB0035 for an `Object`, leave out the names they report + +**Describe the bug** +Two of the warnings new in BETA 1034 print their message with its names missing. TB0034, for a `Declare` of a legacy DLL, leaves both DLL names empty. TB0035, for a conversion from an `Object` to a class or interface type, shows its placeholders `{0}`, `{1}` and `{2}` as they are. The text is the same in the DIAGNOSTICS panel and in the code editor's squiggle. + +**To Reproduce** +Steps to reproduce the behavior: +1. Open `warning-message-names-blank.twinproj` (attached as `warning-message-names-blank.zip`). Its one source file, `Startup.twin`: + ``` + [EnforceWarnings(TB0035)] + Module Startup + Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" (ByRef PicDesc As Any, ByRef RefIID As Any, ByVal fPictureOwnsHandle As Long, ByRef IPic As Any) As Long + + Public Sub Main() + Dim o As Object + Dim v As Variant + Dim f As StdFont + Set f = o + Set f = v + End Sub + End Module + ``` +2. See three warnings in the DIAGNOSTICS panel: + ``` + TB0034 Use of legacy DLL has been redirected to + TB0035 Conversion from type {0} to type {1} might fail at runtime. Use {2}(expression) to avoid this message + TB0035 Conversion from type Variant to type Font might fail at runtime. Use CType(Of Font)(expression) to avoid this message + ``` + +**Expected behavior** +TB0034 names both DLLs, as TB0015 did for the same `Declare` in BETA 1033: `use of legacy OLEPRO32.DLL has been redirected to OLEAUT32.DLL`. TB0035 names the two types and the conversion for an `Object`, as it does for a `Variant`: `Conversion from type Object to type Font might fail at runtime. Use CType(Of Font)(expression) to avoid this message`. + +**Desktop:** + - OS: Windows 10 Pro 22H2 (build 19045) + - twinBASIC compiler version: BETA 1034 + +**Additional context** +`locale/en-gb.lang` gives the two messages as `Use of legacy DLL {0} has been redirected to {1}` and `Conversion from type {0} to type {1} might fail at runtime. Use {2}(expression) to avoid this message`, so the values the compiler has for these two cases do not reach the text: for TB0034 it fills in two empty strings, for TB0035 nothing at all. + +TB0035 leaves its placeholders for every `Object` source tried: an `Object` variable, a function that returns `Object`, and an `Object` passed to a `StdFont` parameter, with a `StdFont`, a class of the project and an interface of the project as the target. A `Variant` source, a `Variant` item of a `Collection` included, names its types. TB0034 is the same in a win32 and a win64 build. + +Severity: low; the message no longer says which DLL is replaced, or which conversion to write. + + + +--- + +## TB0034 is reported as a warning whatever level Project Settings or an attribute gives it + +**Describe the bug** +TB0034, the warning for a `Declare` of a legacy DLL that twinBASIC redirects to another, is always reported as a warning. The level the Compiler Warnings list of Project Settings gives it is not applied: at **IGNORE**, **HINT** or **ERROR** it is still a warning, and `[IgnoreWarnings(TB0034)]` and `[EnforceErrors(TB0034)]` change nothing either. TB0015, the warning for a `Declare` that twinBASIC implements itself, follows its level. In a new project the list shows TB0034 at **HINT**. + +**To Reproduce** +Steps to reproduce the behavior: +1. Open `tb0034-level-ignored.twinproj` (attached as `tb0034-level-ignored.zip`). Its Settings put TB0015 and TB0034 at **IGNORE**, and its one source file, `Startup.twin`, is: + ``` + Module Startup + Private Declare PtrSafe Sub GetMem4 Lib "msvbvm60" (ByVal Src As LongPtr, ByVal Dst As LongPtr) + Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" (ByRef PicDesc As Any, ByRef RefIID As Any, ByVal fPictureOwnsHandle As Long, ByRef IPic As Any) As Long + + Public Sub Main() + End Sub + End Module + + [IgnoreWarnings(TB0034)] + Module ByAttribute + Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" (ByRef PicDesc As Any, ByRef RefIID As Any, ByVal fPictureOwnsHandle As Long, ByRef IPic As Any) As Long + End Module + ``` +2. See two warnings, one for each `olepro32` declaration, and nothing for the `msvbvm60` one: + ``` + TB0034 Use of legacy DLL has been redirected to [4,38] + TB0034 Use of legacy DLL has been redirected to [13,38] + ``` + +**Expected behavior** +TB0034 follows its level, as TB0015 does: not reported at **IGNORE**, a hint at **HINT**, an error at **ERROR**. In a new project, whose list shows TB0034 at **HINT**, it is a hint. + +**Desktop:** + - OS: Windows 10 Pro 22H2 (build 19045) + - twinBASIC compiler version: BETA 1034 + +**Additional context** +Also tried, each with the same result, a warning: TB0034 at **HINT** and at **ERROR** in Project Settings (TB0015 at **ERROR** becomes an error), and `[EnforceErrors(TB0034)]` on the module. In BETA 1033 the same `Declare` drew TB0015 as a warning in a new project, although the list showed TB0015 at **HINT**; BETA 1034 gave the message a code of its own, and its level is still not applied. + +Severity: low; the warning cannot be turned off, so a project that declares such a function always shows it. + + + +--- + +## TB0035 is not reported in a new project, although the Compiler Warnings list shows it at WARNING + +**Describe the bug** +In a project whose Settings give TB0035 no level, as a new project's do, TB0035 is not reported at all, but the Compiler Warnings list of Project Settings shows it at **WARNING**. TB0035 is reported once it is named: in the project's `project.warnings`, or with `[EnforceWarnings(TB0035)]`. + +**To Reproduce** +Steps to reproduce the behavior: +1. Open `tb0035-default-not-reported.twinproj` (attached as `tb0035-default-not-reported.zip`). Its Settings give no warning a level, as a new Standard EXE's do, and its one source file, `Startup.twin`, is: + ``` + Module Startup + Public Sub Main() + Dim o As Object + Dim f As StdFont + Set f = o + End Sub + End Module + ``` +2. See no diagnostics. +3. Open Project Settings, Compiler Warnings: TB0035 is at **WARNING**. + +**Expected behavior** +The list and the compiler agree. Either TB0035 is reported, as a warning, as the list says, or the list shows it at **IGNORE**, as it does for TB0020, the neighbouring *Suspicious interface conversion*, which the compiler also leaves out by default. + +**Desktop:** + - OS: Windows 10 Pro 22H2 (build 19045) + - twinBASIC compiler version: BETA 1034 + +**Additional context** +The other warnings new in BETA 1034 agree with the list: TB0036 and TB0037 are reported as warnings in a new project, as the list shows. TB0034 does not (reported separately: it is a warning whatever its level). + +Severity: low; the list says that conversions from `Object` and `Variant` are checked, and they are not. + + + +--- + +## A language pack's string is cut at a semicolon followed by a space, so TB0022's message ends at *Suspicious array assignment* + +**Describe the bug** +The IDE reads a language pack's strings by splitting the file at every `;` followed by a space, a tab or a line break, before it looks at the quotes. So a string that holds `; ` inside its double quotes ends there, and the rest of it is dropped without a word. Since BETA 1034 the compiler's messages are strings of the pack too, and `en-gb.lang` gives TB0022 as `"Suspicious array assignment; subtypes do not match"`, so the warning reads only *Suspicious array assignment*. A translator's string with `; ` in it is cut the same way. + +**To Reproduce** +Steps to reproduce the behavior: +1. Open any project and add these lines to a procedure: + ``` + Dim counts() As Long + Dim small() As Integer + ReDim small(3) + counts = small + ``` +2. See TB0022 in the DIAGNOSTICS panel: `Suspicious array assignment`. +3. Put a pack `zz-zz.lang` in `%APPDATA%\twinBASIC\locale` with these lines, restart the IDE, and choose *Probe Pack* under **Window, Language**: + ``` + FriendlyName: "Probe Pack"; + inherits: en-gb; + MenuCaptionHelp: "PHELP; CUT"; + MenuCaptionView: "PVIEW;WHOLE"; + ``` +4. See the Help menu read `PHELP`. The View menu reads `PVIEW;WHOLE`: a `;` with no space after it stays in the string. + +**Expected behavior** +A `;` inside a string's quotes is part of the string: TB0022 reads *Suspicious array assignment; subtypes do not match*, and the Help menu `PHELP; CUT`. `locale\README.txt` describes a pack as properties written as in `en-gb.lang`, each a quoted string, and says nothing that keeps a string from holding `; `; `en-gb.lang` itself holds one. + +**Desktop:** + - OS: Windows 10 Pro 22H2 (build 19045) + - twinBASIC compiler version: BETA 1034 + +**Additional context** +Of all the strings of the 19 packs BETA 1034 ships, only TB0022 of `en-gb.lang` holds `; ` inside its quotes, so the shipped packs lose only that one today. A reader that ends a value only at a `;` outside quotes would not do: several shipped packs leave a quote unclosed before a `;` at the end of the line (`ja-jp.lang` line 206, `MenuShortcutKeyARROWLEFT: "左←;`, and the `DialogSaveChangesToProjectCaptionMain` lines of `de-de.lang`, `it-it.lang` and `fr-fr.lang`), and the present reader still ends those values at the line's end. With such a reader `ja-jp.lang` would lose 71 strings. The fix below keeps that. + +Severity: low; a message or a translation is shorter than written, and nothing says so. + +**Fix shape** + +`applyLanguagePack` in `ide/main.js`, BETA 1034, in a readable form. The local names are ours, not twinBASIC's (`packName`, `pack`, `packText`, `entries`, `language`, `entry`, `colon`, `key`, `value`); the build calls them `e`, `t`, `o`, `n`, `t`, `e`, `t`, `o`, `n`. + +```diff +@@ -19,11 +19,25 @@ + if (pack && pack.text) { + var packText = pack.text + "\r\n"; + packText = packText.replace(/\/\*[\s\S]*?\*\//g, ""); +- packText = packText.replace(/; /g, "%;%"); +- packText = packText.replace(/;\t/g, "%;%"); +- packText = packText.replace(/;\n/g, "%;%"); +- packText = packText.replace(/;\r\n/g, "%;%"); +- var entries = packText.split("%;%"); ++ var entries = []; ++ var entryStart = 0; ++ var inQuotes = false; ++ var lineEnd = /[ \t]*\r?\n/y; ++ for (let index = 0; index < packText.length; index++) { ++ const character = packText[index]; ++ if (character === '"') { ++ inQuotes = !inQuotes; ++ } else if (character === ";") { ++ lineEnd.lastIndex = index + 1; ++ const next = packText[index + 1]; ++ if (lineEnd.test(packText) || (!inQuotes && (next === " " || next === "\t"))) { ++ entries.push(packText.slice(entryStart, index)); ++ entryStart = index + 1; ++ inQuotes = false; ++ } ++ } ++ } ++ entries.push(packText.slice(entryStart)); + entries.forEach((entry) => { + let colon = entry.indexOf(":"); + if (colon !== -1) { +``` + +A `;` followed by a space or a tab now ends a value only outside its quotes, so a string may hold `; `. A `;` that ends its line, with only spaces or tabs after it, ends the value as before, quotes or not, and the next value starts outside quotes, so a pack that leaves a quote unclosed before such a `;` reads as it does today. Read this way, the 19 packs BETA 1034 ships give every string the value they give now, except TB0022 of `en-gb.lang`, which is whole. + +Tested on a copy of BETA 1034 with this change (3 edits in `main.js`, every other byte the same): the Help menu reads `PHELP; CUT`, and the text the IDE passes to the compiler for TB0022 is `Suspicious array assignment; subtypes do not match`; the View menu still reads `PVIEW;WHOLE`, and the language lane's seven other tests pass. + + + +--- + +## An `Import Library` statement that names an import library crashes the compiler + +**Describe the bug** +An `Import Library` statement whose file is an import library, a `.lib` that lists the exports of a DLL and holds no code, crashes the compiler. The IDE prints `NATIVE EXCEPTION: ACCESS_VIOLATION` in the DEBUG CONSOLE, restarts the compiler on the same project, and it crashes again, so nothing in the project compiles while the statement is there. The statement alone does it: no `Declare` uses its namespace. The Windows SDK's own `user32.lib` does it, and so does an import library of one function made with `lib /def`. Observed in the IDE, in a 32-bit and a 64-bit build. + +**To Reproduce** +Steps to reproduce the behavior: +1. Open `import-library-import-lib-crash.twinproj` (attached as `import-library-import-lib-crash.zip`). Its `Miscellaneous` folder holds `myimp_32.lib` and `myimp_64.lib`, import libraries for one function of `user32.dll`, made with `lib /def:myimp.def /machine:x86` and `/machine:x64` from `myimp.def`, which is there too: + ``` + LIBRARY user32.dll + EXPORTS + GetDesktopWindow + ``` + Its one source file, `Startup.twin`, is, without its comments: + ``` + #If Win64 Then + Import Library "/Miscellaneous/myimp_64.lib" As MYIMP + #Else + Import Library "/Miscellaneous/myimp_32.lib" As MYIMP + #End If + + Module Startup + + Public Sub Main() + End Sub + + End Module + ``` +2. Let the IDE compile it (it does so on opening). +3. See the DEBUG CONSOLE: `NATIVE EXCEPTION: ACCESS_VIOLATION {no-basic-code} [$1EB32CF6:twinBASIC_win32.dll+00132CF6]`, then `restarting from MEMORY [...]`, and the same exception again, with a list of the compiler's threads in which the failing one is `>>> thread 0004: ParsingFileStart, Startup.twin`. + +**Expected behavior** +A diagnostic, or the library linked. An import library holds no code, so the compiler can refuse it with an error that names the file, as it refuses an object file of the other architecture (TB5060, *incorrect OBJ file format*), or resolve its functions as it resolves those of a DLL named in `Link`. Either way the project keeps compiling. + +**Desktop:** + - OS: Windows 10 Pro 22H2 (build 19045) + - twinBASIC compiler version: BETA 1034 + +**Additional context** +The Windows SDK's `user32.lib` (10.0.26100.0, x86 and x64) crashes the compiler in the same way, alone and with a `Declare` that uses its namespace; so does `myimp_64.lib` with a `Declare` of `GetDesktopWindow`. A library of object files, which `lib.exe` writes from `.obj` files, links and works. The reproducer crashes BETA 1010 too. A user on Discord met it with the SDK's `user32.lib` and `winmm.lib` on BETA 996, as a crash loop that ended in Safe Mode. + +Severity: medium. Nothing in the project compiles until the statement is removed, and the crash does not say which statement or file causes it. + + + +--- + +## In a 64-bit build, the `__except` handler of statically linked C code never runs, and the exception ends the program + +**Describe the bug** +C code linked into a program with `Import Library` that handles an exception with `__try` and `__except` links without an error in a 64-bit build, but its handler never runs: the exception ends the program instead. In an IDE run the run stops at `NATIVE EXCEPTION: INT_DIVIDE_BY_ZERO`, and the built exe ends with exit code `0xC0000094` (`STATUS_INTEGER_DIVIDE_BY_ZERO`). Observed in the IDE and in the exe. + +**To Reproduce** +Steps to reproduce the behavior: +1. Open `static-seh-handler-not-run.twinproj` (attached as `static-seh-handler-not-run.zip`), and set the build to win64. Its `Miscellaneous` folder holds `seh.c`: + ``` + int seh_div(int a, int b) + { + int r = -1; + __try { r = a / b; } + __except (1) { r = -2; } + return r; + } + ``` + and `seh_64.obj`, compiled from it with `cl /c /Gw /Gy /GS- seh.c /Fo"seh_64.obj"` (MSVC 14.44, x64). Its one source file, `Startup.twin`, is, without its comments: + ``` + Import Library "/Miscellaneous/seh_64.obj" As SEHLIB Link "stdlib" + + Module Startup + + Private Declare PtrSafe Function seh_div CDecl Lib SEHLIB (ByVal a As Long, ByVal b As Long) As Long + + Public Sub Main() + Debug.Print "seh_div(6, 3) = " & seh_div(6, 3) + Debug.Print "seh_div(6, 0) = " & seh_div(6, 0) + End Sub + + [RunAfterBuild] + Private Sub Built() + Debug.Cls + Main + End Sub + + End Module + ``` +2. Build it. The `[RunAfterBuild]` Sub runs `Main` in the IDE. +3. See the DEBUG CONSOLE: `seh_div(6, 3) = 2`, then `NATIVE EXCEPTION: INT_DIVIDE_BY_ZERO /Startup.twin; Startup.Main LINE 000013 [CONTINUABLE]`, and no line for `seh_div(6, 0)`. +4. Run the built exe. It ends with exit code -1073741676 (`0xC0000094`), and the Application event log records the exception in `StaticSehHandlerNotRun_win64.exe`. + +**Expected behavior** +`seh_div(6, 0) = -2`: the division raises inside `__try`, and the `__except` handler returns -2. Linked by Microsoft's linker into a C program that calls `seh_div(6, 3)` and `seh_div(6, 0)`, the same `seh_64.obj` returns 2 and -2. If twinBASIC's linker cannot make the handler work, an error at the `Import Library` statement, as a 32-bit build gives: there `__try` needs `__except_handler3`, and the statement is TB5058, *linker error: unrecognized symbol '__except_handler3'*. + +**Desktop:** + - OS: Windows 10 Pro 22H2 (build 19045) + - twinBASIC compiler version: BETA 1034 + +**Additional context** +The reproducer behaves the same on BETA 1010. `Link "stdlib", "kernel32"` and `Link "stdlib", "ntdll"` also link it without an error. + +Severity: medium. Code written to handle an error crashes the program instead, with nothing at build time to say so; the SQLite sample is compiled with `SQLITE_OMIT_SEH`, which leaves its handlers out. + + + diff --git a/WIP.Harness.md b/WIP.Harness.md index fc6f01066..e3bc02de9 100644 --- a/WIP.Harness.md +++ b/WIP.Harness.md @@ -1200,6 +1200,10 @@ never navigates twice. The script puts a setter on `window.hostAppObject`, which wraps the host object: `GetIDESetting` answers `""` for the blanked keys and `"{}"` for `GENERAL` and `GENERAL2`, every other call goes through with `this` bound to the real object. The keys it left unanswered are the licence's, `LICENCEAGREEMENTV3`, `ALLOWERRORREPORTINGV3`, `PUBLISHER` and `NEWYEAR_*`. +A new build can add a key, which is read from the user's registry until it is blanked: BETA 1023 added +`OBJECT_BROWSER` (the Object Browser's view, filters, sorts and pane sizes) and BETA 1033 `NEWFRONTPAGE` (the +New / Open Project dialog's section), both blanked since 2026-11-02. After a new BETA, list the keys the page passes +to `GetIDESetting` (a search of the install's `ide/*.js` for the call) and compare them with `BLANKED_KEYS`. The recent lists are left alone: `test/ide/recent-projects-copies.test.mjs` needs the IDE's own, and `shoot_docs.mjs`'s `PAGE_DEFAULTS` empties them where a picture shows them. @@ -1819,7 +1823,8 @@ unit changed takes the later build's change back out. Before patching a build ot one a fix was written on, run `shape` on it: its diff is exactly what the patch changes. **The IDE does not check `main.js`.** A copy of BETA 1010 with the two edits of -`export-verbose-done-escaped`'s fix ran the export lane: the defect's test reported that it +`export-verbose-done-escaped`'s fix (that entry and `debug-print-escaped-twice` were retired +once BETA 1034 fixed both; the fix and the reproducers are in git history) ran the export lane: the defect's test reported that it no longer reproduced, its two controls and the lane's six other tests passed, and `bug_repro.mjs verify debug-print-escaped-twice` said NO LONGER REPRODUCES (it reproduces on an unpatched, byte-identical copy). That was the study's prototype; the tool's patch of the diff --git a/WIP.IDE.md b/WIP.IDE.md index 7fde69c8d..16aecc9d1 100644 --- a/WIP.IDE.md +++ b/WIP.IDE.md @@ -104,7 +104,8 @@ for contributors. so. - **Defects the twinBASIC developers already know of** (owner) are not queued, but a page that describes the feature still carries the callout rule 6 calls for: - - Rename Symbol (F2) renames nothing; + - Rename Symbol renames nothing (on BETA 1034 it opens no box at all, and F2, which + the right-click menu still shows beside it, opens the Object Browser); - accepting a function from the completion list by typing `(` doubles the parenthesis (`Area(()`). - Callouts follow WIP.md rule 6. A twinBASIC defect found while writing goes into @@ -210,4 +211,3 @@ From the survey of BETA 1005. Each chapter's fact sheet confirms the items in it - **Themes:** custom `.theme` files in a `themes` folder. - **Webpage:** mobile mode, and back, forward and reload. - **Troubleshooting:** the DevTools command (`tbIdeDevTools_Show`, which has no menu item). -- The **View → Object Browser** item does nothing; say so. diff --git a/WIP.Screenshots.md b/WIP.Screenshots.md index fbb879fef..064148178 100644 --- a/WIP.Screenshots.md +++ b/WIP.Screenshots.md @@ -335,7 +335,7 @@ the page once real ones are shown, as History's times are. Setup `code-chapter` (three parts): FeatureTour, the feature map's Inventory project, with `test/shots/codechapter/` staged onto it (`Helpers`, `Ev`/`Ev2`, `Watcher`) and the project's -warnings set so that TB0016 is a hint and TB0012 information. Its 20 pictures are under +warnings set so that TB0016 is a hint and TB0012 information. Its 21 pictures are under `docs/IDE/Code/Images/`, plus `Menu_Edit` and `Menu_View`, taken with the code focused. - **Each picture starts from the default layout and its own tabs** (`chapterTabs`), and closes @@ -347,6 +347,10 @@ warnings set so that TB0016 is a hint and TB0012 information. Its 20 pictures ar when it opens on a file already reported: Tabs_States edits Inventory and undoes it. - Edits are made in the page and undone (`editedThenUndone`) or discarded with their tab; the clipboard is the tool's own text (`FAKE_CLIPBOARD`), never the host's. +- **The Object Browser opens with its default settings** (view, filters, sorts, pane sizes) in + every IDE: the setting `OBJECT_BROWSER` is in `BLANKED_KEYS`, and the IDE saves nothing, so the + light pass opens it as the dark one did. `Object_Browser` chooses Inventory and Total by real + clicks, so that the Description shows a declaration and its line. ## The "Running and debugging" chapter diff --git a/bugs/export-verbose-done-escaped/fix.js b/bugs/export-verbose-done-escaped/fix.js deleted file mode 100644 index 9e210d5c3..000000000 --- a/bugs/export-verbose-done-escaped/fix.js +++ /dev/null @@ -1,43 +0,0 @@ -// Fix for export-verbose-done-escaped and twinbasic#2444: text that continues an -// open DEBUG CONSOLE line is escaped once, not twice. Written on BETA 1010; the local -// names are ours (scripts/ide-js/names.json), not twinBASIC's. Applied with -// `node scripts/ide_js.mjs patch bugs/export-verbose-done-escaped/fix.js --copy-to `. -function debugOutputPartial(text, colorClass, isHTML, timeStamp) { - var endsLine = text.endsWith("\r\n"); - if (endsLine) { - text = text.substr(0, text.length - 2); - } - if (debugConsolePartialLineItem) { - let lineHTML = debugConsoleContent.onAsyncGetItemHTML(debugConsolePartialLineItem); - if (debugConsolePartialLineItem_LastColorClass === colorClass) { - text = isHTML ? text : TEXTtoHTML(text); - } else { - text = "" + (isHTML ? text : TEXTtoHTML(text)); - } - var addedHTML = text; - debugConsoleContent.updateItem( - debugConsolePartialLineItem, - lineHTML + addedHTML + (endsLine ? "" : ""), - ); - } else { - let stampHTML = ""; - if (timeStamp) { - stampHTML += timeStamp; - } else { - stampHTML += GetJsTimeStamp(); - } - debugConsolePartialLineItem = debugConsoleContent.addItem( - "" + - stampHTML + - "" + - (isHTML ? text : TEXTtoHTML(text)) + - (endsLine ? "" : ""), - ); - } - if (endsLine) { - debugConsolePartialLineItem = undefined; - } - debugConsolePartialLineItem_LastColorClass = colorClass; -} diff --git a/bugs/export-verbose-done-escaped/repro.json b/bugs/export-verbose-done-escaped/repro.json deleted file mode 100644 index 4653fd961..000000000 --- a/bugs/export-verbose-done-escaped/repro.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mode": "lane", - "lane": "ide:export", - "tests": [ - "with Export Verbose, every DONE line shows \ for each backslash of the path, and the files are right" - ], - "steps": "1. A project with Export Verbose on (Project Settings, Export).\n2. Export Project into an empty folder: the DEBUG CONSOLE shows each DONE line as [EXPORT] DONE: \Sources\Startup.twin, \ for each backslash; the files are written right.\nControl: the DELETED lines of a second verbose export, and the first and COMPLETED lines of an export without Export Verbose, show the backslashes." -} diff --git a/bugs/filed/debug-print-escaped-twice/REPORT.md b/bugs/filed/debug-print-escaped-twice/REPORT.md deleted file mode 100644 index 9046027ef..000000000 --- a/bugs/filed/debug-print-escaped-twice/REPORT.md +++ /dev/null @@ -1,27 +0,0 @@ -Filed as [twinbasic/twinbasic#2444](https://github.com/twinbasic/twinbasic/issues/2444). - -## Text that continues a `Debug.Print` line is escaped twice in the DEBUG CONSOLE - -**Describe the bug** -When a `Debug.Print` statement ends with `;`, the next `Debug.Print` continues the same line, and the DEBUG CONSOLE escapes that continued text twice: `&`, `<` and `>` show as `&`, `<` and `>`. The text that opens the line comes out right. - -**To Reproduce** -Steps to reproduce the behavior: -1. Open `debug-print-escaped-twice.twinproj` (attached as `debug-print-escaped-twice.zip`) and run it (F5). Its `Sub Main` holds the whole bug: - ``` - Debug.Print "A"; - Debug.Print "&" - ``` -2. See the DEBUG CONSOLE show `A&`. The project's other lines show the rest: `Debug.Print "a < b";` followed by `Debug.Print " and c > d"` shows `a < b and c > d`. After three statements, `Debug.Print "C";`, `Debug.Print "D";` and `Debug.Print "<&>"`, the line reads `CD<&>`. - -**Expected behavior** -`A&`, `a < b and c > d` and `CD<&>`: the console shows what the program printed, whether it is one statement or several. - -**Desktop:** - - OS: Windows 10 Pro 22H2 (build 19045) - - twinBASIC compiler version: BETA 995 - -**Additional context** -Severity: cosmetic, but it changes what a program appears to print. Also on BETA 983, with the same output. What does not reproduce it: a whole line (`Debug.Print "a < b & c"` shows exactly that), and the same text in one statement (`Debug.Print "B"; "&"` shows `B&`). The cause looks to be `debugOutputPartial` in `ide/main.js`, which takes all of a program's output, and an add-in's `PrintText` too, and adds to a line that is still open: it passes the new text through `TEXTtoHTML` twice, once as it builds the text and again as it stores it. When the new text's colour differs from the line's, the `` it puts in to change colour goes through the second pass too, so the tags themselves show as text. The colour comes from the output: a program's plain output is `debugConsoleOutputText`, and a `PrintText` is `debugConsoleOutputTextYELLOW`. With a line left open in the first, made by calling `debugOutputPartial` from the page, a `PrintText` from the IDE's own Sample 10 add-in showed as `Hello there from WaynesWorldAddIn!`. A program's own open line followed by a `PrintText` was not tried. - - diff --git a/bugs/filed/debug-print-escaped-twice/repro.json b/bugs/filed/debug-print-escaped-twice/repro.json deleted file mode 100644 index 5d7bae17c..000000000 --- a/bugs/filed/debug-print-escaped-twice/repro.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "mode": "run", - "expect": { - "exit": 0, - "output": [ - "^A&$", - "^a < b and c > d$", - "^B&$" - ] - }, - "issue": 2444 -} diff --git a/bugs/filed/debug-print-escaped-twice/src/Sources/Startup.twin b/bugs/filed/debug-print-escaped-twice/src/Sources/Startup.twin deleted file mode 100644 index d26146e8e..000000000 --- a/bugs/filed/debug-print-escaped-twice/src/Sources/Startup.twin +++ /dev/null @@ -1,15 +0,0 @@ -' Text that continues a Debug.Print line is escaped twice in the DEBUG CONSOLE. -Module Startup - - Public Sub Main() - Debug.Print "A"; - Debug.Print "&" ' the console shows A& instead of A& - - Debug.Print "a < b"; ' the text that opens the line is right - Debug.Print " and c > d" ' the console shows and c > d - - Debug.Print "B"; "&" ' the same text in one statement is right: B& - Debug.Print "a < b & c" ' a whole line is right - End Sub - -End Module diff --git a/bugs/filed/keyboard-group-bar-name/REPORT.md b/bugs/filed/keyboard-group-bar-name/REPORT.md deleted file mode 100644 index ae2fb3e66..000000000 --- a/bugs/filed/keyboard-group-bar-name/REPORT.md +++ /dev/null @@ -1,27 +0,0 @@ -Filed as [twinbasic/twinbasic#2528](https://github.com/twinbasic/twinbasic/issues/2528). - -## A keyboard-shortcut group whose name contains `|` switches other groups on and off - -**Describe the bug** -The IDE keeps the list of keyboard-shortcut groups that are on as one string, each name between two bars, such as `|Mine||Other|`, and looks a name up in it as text. Manage Keyboard Shortcuts accepts a group name that contains `|`, and that name's entry can then contain another group's: with groups `A|B` and `B`, the text `|A|B|` is the entry of `A|B` and also contains `|B|`. Clicking `B` in Window > Keyboard Shortcuts then removes the wrong text: the first click leaves `B` ticked, and the second switches `A|B` off as well and saves a list that ends in a broken `|A`. Nothing warns about the name. It was observed by operating Manage Keyboard Shortcuts and the commands of the Window > Keyboard Shortcuts items in an IDE whose saves were blocked, and reading the list and the menu's ticks after each step. - -**To Reproduce** -Steps to reproduce the behavior: -1. There is no project to open. The steps change the groups saved in `HKCU\Software\VB and VBA Program Settings\twinBASIC_IDE\IDESettings` (`CUSTOM_KEYBOARD_SHORTCUT_GROUPS` and `ACTIVE_KEYBOARD_SHORTCUT_GROUPS`): export that key first if they matter. Choose Window > Keyboard Shortcuts > Manage Keyboard Shortcuts..., Add New..., type `A|B`, press Enter, and Save Changes. The new group is switched on. -2. Do the same with the name `B`. Window > Keyboard Shortcuts shows `Custom 1. A|B` and `Custom 2. B`, both ticked. The list of groups that are on is `|A|B||B|`. -3. Click `Custom 2. B`. It stays ticked: the IDE removed the first `|B|` it found, which is the one inside `|A|B|`, and the list is now `|A|B|`. -4. Click `Custom 2. B` again. `A|B` and `B` are both unticked, though only `B` was clicked, and the list saved is `|A`, which names no group. - -**Expected behavior** -Step 3 switches `B` off and leaves `A|B` on. Either Manage Keyboard Shortcuts refuses a name that contains `|`, as it refuses one that starts with `<`, or the list is kept in a form that a name cannot break, such as a JSON array of names. - -**Desktop:** - - OS: Windows 10 Pro 22H2 (build 19045) - - twinBASIC compiler version: BETA 1005 - -**Additional context** -The code, read from `ide\main.js`: `toggleActiveKeyboardShortcutName` tests the list with `indexOf("|" + name + "|")` and removes the entry with `replace`, which replaces the first match; `getCustomKeyboardShortcutMenuOptions` ticks a group by the same `indexOf`. The merge of the groups that are on matches names the same way: with the list `|A|B|`, `A|B` on and `B` defined but never switched on, a shortcut that only `B` defines works, and `B` is ticked in the menu. That was tried with the groups set in the IDE's page as Save Changes sets them, and a real key press. - -Severity: low. A name with `|` is unusual, and the groups themselves are kept, but the saved list is corrupted without a message, and the menu shows a group as on after it was switched off. - - diff --git a/bugs/filed/keyboard-group-bar-name/repro.json b/bugs/filed/keyboard-group-bar-name/repro.json deleted file mode 100644 index f9585e997..000000000 --- a/bugs/filed/keyboard-group-bar-name/repro.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "mode": "lane", - "lane": "ide:customising", - "tests": [ - "a group named A|B switches B on with it, and toggling B twice switches both off" - ], - "steps": "It changes the user's own keyboard-shortcut groups, saved in HKCU\\Software\\VB and VBA Program Settings\\twinBASIC_IDE\\IDESettings (CUSTOM_KEYBOARD_SHORTCUT_GROUPS and ACTIVE_KEYBOARD_SHORTCUT_GROUPS). Export that key first with reg export, and import it back afterwards.\n1. Window > Keyboard Shortcuts > Manage Keyboard Shortcuts... Add New..., type A|B, Enter, Save Changes.\n2. The same again with the name B. Window > Keyboard Shortcuts now shows Custom 1. A|B and Custom 2. B, both ticked; the active list is |A|B||B|.\n3. Click Custom 2. B. Expected: B is unticked and A|B stays ticked. Actual: B stays ticked; the IDE removed the first |B| it found, the one inside |A|B|, and the list is |A|B|.\n4. Click Custom 2. B again: A|B and B are both unticked, though only B was clicked, and the saved list is |A, which names no group.", - "issue": 2528 -} diff --git a/bugs/filed/theme-inherit-loop/REPORT.md b/bugs/filed/theme-inherit-loop/REPORT.md deleted file mode 100644 index 6d9e2dcdf..000000000 --- a/bugs/filed/theme-inherit-loop/REPORT.md +++ /dev/null @@ -1,39 +0,0 @@ -Filed as [twinbasic/twinbasic#2526](https://github.com/twinbasic/twinbasic/issues/2526). - -## Two themes that inherit from each other freeze the IDE, and choosing one fails with a stack overflow - -**Describe the bug** -When two theme files name each other in their `inherits:` lines, loading the themes stops the IDE's page for several seconds and leaves the themes half linked: one of the two is listed as ` (undefined)`. Choosing either of them afterwards changes nothing on screen: the page raises an uncaught `RangeError: Maximum call stack size exceeded` while it applies the theme, and the previous theme's colours stay. Nothing on screen reports the error. It was observed in an IDE started with an `APPDATA` of its own, with a timer in the IDE's page recording the longest time the page did not run, and a listener for the page's `error` event catching the exception. - -**To Reproduce** -Steps to reproduce the behavior: -1. Start the IDE. There is no project to open. In `%APPDATA%\twinBASIC\themes`, write `LoopA.theme`: - ``` - inherits: LoopB; - MenuBackColor: rgb(1, 1, 1); - ``` - and `LoopB.theme`: - ``` - inherits: LoopA; - MenuBackColor: rgb(2, 2, 2); - ``` -2. Choose Window > Theme > Reload from disk. The IDE does not respond for about seven seconds (7.5 s on the machine it was found on). -3. Open Window > Theme: it lists `LoopB (undefined)`. -4. Choose `LoopA`: the menu bar does not take `rgb(1, 1, 1)`, and nothing else changes. -5. To recover, remove the loop from the files and restart the IDE. - -**Expected behavior** -The IDE stays responsive, and the themes in the loop fall back to the Dark theme, which the code in `addTheme` means them to do: it checks for a theme met twice, and sets the group to Dark when it finds one. Choosing `LoopA` then applies at least its own `MenuBackColor`. A message naming the loop would help the person who wrote it. - -**Desktop:** - - OS: Windows 10 Pro 22H2 (build 19045) - - twinBASIC compiler version: BETA 1005 - -**Additional context** -The cause, read from `ide\main.js`: in `addTheme`, the pass that gives each theme its group follows `inheritsFromLink` in a `while` loop and records each theme it passes. When it meets a theme a second time it sets the group to Dark, but does not leave the loop, so it keeps going round the two themes until it stops after several seconds without finishing: `LoopB` is never given a group, and `afterRefreshedThemes` is still pending afterwards. `applyThemeData` then follows the same links recursively when a theme of the loop is applied, and overflows the stack. A `break` after the fall-back, and the same check in `applyThemeData`, would cure both. - -Start-up loads the themes through the same `reloadThemesFromDisk`, so an IDE started with the two files in place should freeze the same way; only Reload from disk was tried. A longer chain that returns to its first theme takes the same path in the code, and was not tried. - -Severity: moderate. Nothing is lost and the IDE recovers, but the freeze looks like a hang, and nothing says which files cause it. - - diff --git a/bugs/filed/theme-inherit-loop/repro.json b/bugs/filed/theme-inherit-loop/repro.json deleted file mode 100644 index 238fe1d4d..000000000 --- a/bugs/filed/theme-inherit-loop/repro.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "mode": "lane", - "lane": "ide:customising", - "tests": [ - "two themes that inherit each other freeze the page, and choosing one fails with a stack overflow" - ], - "steps": "1. Start the twinBASIC IDE. In %APPDATA%\\twinBASIC\\themes write LoopA.theme with the lines inherits: LoopB; and MenuBackColor: rgb(1, 1, 1); and LoopB.theme with inherits: LoopA; and MenuBackColor: rgb(2, 2, 2);\n2. Choose Window > Theme > Reload from disk. The IDE stops responding for about seven seconds.\n3. Open Window > Theme. LoopB is listed as LoopB (undefined).\n4. Choose LoopA. Nothing on screen changes: the IDE's page raises an uncaught RangeError: Maximum call stack size exceeded, which nothing on screen reports, and the previous theme's colours stay.\n5. Remove the loop from the files and restart the IDE to recover.", - "issue": 2526 -} diff --git a/bugs/filed/vb6-attribute-lines-no-effect/REPORT.md b/bugs/filed/vb6-attribute-lines-no-effect/REPORT.md index ee123e8f1..6b4d50999 100644 --- a/bugs/filed/vb6-attribute-lines-no-effect/REPORT.md +++ b/bugs/filed/vb6-attribute-lines-no-effect/REPORT.md @@ -23,4 +23,4 @@ Each line gives what it asks for, as its neighbours do: a help context of 2000, **Additional context** The import is not the cause: it keeps every `Attribute` line of a `.bas` and a `.cls` byte for byte, and those of a `.frm`, `.ctl` and `.pag` inside the class it writes. The type information a class has at run time in the IDE carries no flags and no descriptions for any member, whichever way they are written, so the built DLL is where to look. `[NonBrowsable]` on a public field leaves it without `nonbrowsable` as well. A VB6 build of the same class was not made: VB6 registers an ActiveX DLL as it builds it. Severity: medium for anyone moving a VB6 component to twinBASIC under binary compatibility; nothing fails, and the loss shows only to the component's users, in their object browsers and data-binding dialogs. - + diff --git a/bugs/import-library-import-lib-crash/import-library-import-lib-crash.twinproj b/bugs/import-library-import-lib-crash/import-library-import-lib-crash.twinproj new file mode 100644 index 000000000..d461f0006 Binary files /dev/null and b/bugs/import-library-import-lib-crash/import-library-import-lib-crash.twinproj differ diff --git a/bugs/import-library-import-lib-crash/repro.json b/bugs/import-library-import-lib-crash/repro.json new file mode 100644 index 000000000..db90b39cf --- /dev/null +++ b/bugs/import-library-import-lib-crash/repro.json @@ -0,0 +1,6 @@ +{ + "mode": "compile", + "expect": { + "exit": 4 + } +} diff --git a/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp.def b/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp.def new file mode 100644 index 000000000..48ae3e02e --- /dev/null +++ b/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp.def @@ -0,0 +1,3 @@ +LIBRARY user32.dll +EXPORTS + GetDesktopWindow diff --git a/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp_32.lib b/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp_32.lib new file mode 100644 index 000000000..9ec856be0 Binary files /dev/null and b/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp_32.lib differ diff --git a/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp_64.lib b/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp_64.lib new file mode 100644 index 000000000..c1765f83c Binary files /dev/null and b/bugs/import-library-import-lib-crash/src/Miscellaneous/myimp_64.lib differ diff --git a/bugs/filed/debug-print-escaped-twice/src/Settings b/bugs/import-library-import-lib-crash/src/Settings similarity index 84% rename from bugs/filed/debug-print-escaped-twice/src/Settings rename to bugs/import-library-import-lib-crash/src/Settings index 14ea33248..95f8b3a37 100644 --- a/bugs/filed/debug-print-escaped-twice/src/Settings +++ b/bugs/import-library-import-lib-crash/src/Settings @@ -1,12 +1,12 @@ { "configuration.inherits": "Defaults", - "project.appTitle": "DebugPrintEscapedTwice", + "project.appTitle": "ImportLibraryImportLibCrash", "project.buildPath": "${SourcePath}\\Build\\${ProjectName}_${Architecture}.${FileExtension}", "project.buildType": "Standard EXE", - "project.description": "Reproduces: Text that continues a `Debug.Print` line is escaped twice in the DEBUG CONSOLE", + "project.description": "Reproduces: An `Import Library` statement that names an import library crashes the compiler", "project.exportPathIsV2": true, - "project.id": "{7D848A28-61FD-4058-AEC0-7136C282F2D7}", - "project.name": "DebugPrintEscapedTwice", + "project.id": "{030ACCF4-401F-4317-8031-BB419813DD35}", + "project.name": "ImportLibraryImportLibCrash", "project.optionExplicit": true, "project.references": [ { diff --git a/bugs/import-library-import-lib-crash/src/Sources/Startup.twin b/bugs/import-library-import-lib-crash/src/Sources/Startup.twin new file mode 100644 index 000000000..aeb4c56d9 --- /dev/null +++ b/bugs/import-library-import-lib-crash/src/Sources/Startup.twin @@ -0,0 +1,17 @@ +' myimp_32.lib and myimp_64.lib are import libraries for one function of user32.dll, GetDesktopWindow, +' made from myimp.def with lib.exe: +' lib /def:myimp.def /machine:x86 /out:myimp_32.lib +' lib /def:myimp.def /machine:x64 /out:myimp_64.lib +' The Import Library statement alone crashes the compiler, in a 32-bit and in a 64-bit build. +#If Win64 Then + Import Library "/Miscellaneous/myimp_64.lib" As MYIMP +#Else + Import Library "/Miscellaneous/myimp_32.lib" As MYIMP +#End If + +Module Startup + + Public Sub Main() + End Sub + +End Module diff --git a/bugs/language-pack-semicolon-cut/fix.js b/bugs/language-pack-semicolon-cut/fix.js new file mode 100644 index 000000000..c8e674837 --- /dev/null +++ b/bugs/language-pack-semicolon-cut/fix.js @@ -0,0 +1,55 @@ +// Fix for language-pack-semicolon-cut: a ";" followed by a space or a tab ends a language pack's +// value only outside its quotes, so a string with "; " in it is read whole. A ";" that ends its +// line ends the value as before, quotes or not, and the next value starts outside quotes, so the +// shipped packs that leave a quote unclosed before an end-of-line ";" read as they do now. +// Written on BETA 1034; the local names are ours (scripts/ide-js/names.json), not twinBASIC's. +// Applied with `node scripts/ide_js.mjs patch bugs/language-pack-semicolon-cut/fix.js --copy-to `. +function applyLanguagePack(packName) { + if (packName === undefined) packName = "en-gb"; + var pack = customLanguages.find((language) => language.name.toLowerCase() == packName.toLowerCase()); + if (!pack) { + if (packName !== "en-gb") { + applyLanguagePack("en-gb"); + } + return; + } + if (pack.inheritsFrom) { + applyLanguagePack(pack.inheritsFrom); + } else { + if (packName !== "en-gb") { + applyLanguagePack("en-gb"); + } + } + if (pack && pack.text) { + var packText = pack.text + "\r\n"; + packText = packText.replace(/\/\*[\s\S]*?\*\//g, ""); + var entries = []; + var entryStart = 0; + var inQuotes = false; + var lineEnd = /[ \t]*\r?\n/y; + for (let index = 0; index < packText.length; index++) { + const character = packText[index]; + if (character === '"') { + inQuotes = !inQuotes; + } else if (character === ";") { + lineEnd.lastIndex = index + 1; + const next = packText[index + 1]; + if (lineEnd.test(packText) || (!inQuotes && (next === " " || next === "\t"))) { + entries.push(packText.slice(entryStart, index)); + entryStart = index + 1; + inQuotes = false; + } + } + } + entries.push(packText.slice(entryStart)); + entries.forEach((entry) => { + let colon = entry.indexOf(":"); + if (colon !== -1) { + var key = entry.slice(0, colon).trim(); + var value = entry.slice(colon + 1); + key = key.replace(/^[ \t]+/, ""); + activeLanguageData[key] = parseQuotedString2(value); + } + }); + } +} diff --git a/bugs/language-pack-semicolon-cut/repro.json b/bugs/language-pack-semicolon-cut/repro.json new file mode 100644 index 000000000..d59fe8cbe --- /dev/null +++ b/bugs/language-pack-semicolon-cut/repro.json @@ -0,0 +1,8 @@ +{ + "mode": "lane", + "lane": "ide:language", + "tests": [ + "a ';' and a space end a pack's string inside its quotes: the Help menu reads PHELP, and TB0022's message ends at its semicolon" + ], + "steps": "1. Open any project with the line `counts = small`, where `Dim counts() As Long` and `Dim small() As Integer` (ReDim small first): the DIAGNOSTICS panel shows TB0022 as Suspicious array assignment, although en-gb.lang gives it as Suspicious array assignment; subtypes do not match.\n2. Put a pack in %APPDATA%\\twinBASIC\\locale with the line MenuCaptionHelp: \"Help; more\"; restart the IDE and choose the pack under Window, Language: the Help menu reads Help.\nControl: MenuCaptionView: \"View;more\" reads View;more." +} diff --git a/bugs/object-browser-tab-stops/fix.js b/bugs/object-browser-tab-stops/fix.js new file mode 100644 index 000000000..887f66a8b --- /dev/null +++ b/bugs/object-browser-tab-stops/fix.js @@ -0,0 +1,211 @@ +// Fix for object-browser-tab-stops: in a modal dialog, Tab and Shift+Tab move the focus +// through the dialog's own controls while one of them has it, instead of moving the +// highlight of the footer buttons and leaving the focus where it was. Written on BETA 1034; +// the local names are ours (scripts/ide-js/names.json), not twinBASIC's. Applied with +// `node scripts/ide_js.mjs patch bugs/object-browser-tab-stops/fix.js --copy-to `. +function showModalDialog(content, buttons, caption, onClose, keepUnlocked, noButtonKeys) { + let container = document.createElement("div"); + container.className = "modalDialogContainer"; + container.style.display = "none"; + bodyInner.appendChild(container); + var previous = modalDialogs.length ? modalDialogs[modalDialogs.length - 1] : undefined; + if (previous) { + if (previous.canBeAutoClosed) { + hideModalDialog(); + } else { + previous.style.pointerEvents = "none"; + } + } + modalDialogs.push(container); + if (modalDialogs.length == 1) lockUI("showing modal dialog1", 0, undefined); + if (keepUnlocked) alert("dont lock ui?"); + container.innerHTML = ""; + var startLeft; + var startTop; + var startX; + var startY; + var dragging; + var titleBar = document.createElement("div"); + titleBar.className = "modalTitleBar"; + titleBar.innerText = caption ? evaluateLocalizedString(caption) : "twinBASIC"; + titleBar.onpointerdown = (down) => { + startLeft = container.offsetLeft; + startTop = container.offsetTop; + startX = down.clientX; + startY = down.clientY; + titleBar.setPointerCapture(down.pointerId); + dragging = true; + }; + titleBar.onmousemove = (move) => { + if (dragging) { + var dx = move.clientX - startX; + var dy = move.clientY - startY; + container.style.left = startLeft + dx + "px"; + container.style.top = startTop + dy + "px"; + webpagePanel.checkObscured(); + } + }; + titleBar.onpointerup = (up) => { + dragging = false; + }; + container.appendChild(titleBar); + if (onClose) { + var closeBox = document.createElement("div"); + closeBox.className = "modalTitleBarCloseBtn codicon codicon-close"; + closeBox.onpointerdown = (press) => { + press.stopPropagation(); + }; + closeBox.onmouseup = () => { + debugger; + onClose(); + }; + closeBox.title = "Close"; + titleBar.appendChild(closeBox); + } + container.canBeAutoClosed = content.canBeAutoClosed; + container.appendChild(content); + container.style.display = "block"; + container.tabIndex = 0; + container.escapeButton = undefined; + var cancelButton = undefined; + var acceptButton = undefined; + var focusedButton = undefined; + var firstButton = undefined; + var lastButton = undefined; + container.onkeydown = (event) => { + if (event.key === "Escape") { + if (cancelButton) { + const inTextBox = document.activeElement + ? document.activeElement.tagName === "INPUT" || + document.activeElement.tagName === "TEXTAREA" + : false; + if (inTextBox) { + container.focus(); + } else if (cancelButton.onclick) { + cancelButton.onclick(); + } else if (cancelButton.domObject.click) { + cancelButton.domObject.click(); + } + } + } + if (event.key === "Enter") { + if (focusedButton) { + if (focusedButton.onclick) { + focusedButton.onclick(); + } else if (focusedButton.domObject.click) { + focusedButton.domObject.click(); + } + } + } + if (!noButtonKeys) { + // Tab and Shift+Tab move the focus through the dialog's own controls while one of them + // has it, wrapping at the ends, where a dialog that does so itself has done it already. + if (event.key === "Tab" && container.contains(document.activeElement) && document.activeElement !== container) { + if (!event.defaultPrevented) { + const controls = [...container.querySelectorAll("button, input, select, textarea, [tabindex]")].filter( + (control) => control.tabIndex >= 0 && !control.disabled && control.getClientRects().length, + ); + const current = controls.indexOf(document.activeElement); + const step = event.shiftKey ? controls.length - 1 : 1; + if (controls.length) controls[current < 0 ? 0 : (current + step) % controls.length].focus(); + event.preventDefault(); + } + event.stopPropagation(); + return; + } + if ((event.key === "Tab" && !event.shiftKey) || event.key === "ArrowRight") { + if ( + document.activeElement.localName == "input" || + document.activeElement.localName == "textarea" + ) + return; + if (focusedButton) { + focusedButton.domObject.classList.remove("buttonFocused"); + focusedButton = focusedButton.nextButton; + } + if (!focusedButton) focusedButton = firstButton; + if (focusedButton) { + focusedButton.domObject.classList.add("buttonFocused"); + } + event.preventDefault(); + event.stopPropagation(); + } + if ((event.key === "Tab" && event.shiftKey) || event.key === "ArrowLeft") { + if ( + document.activeElement.localName == "input" || + document.activeElement.localName == "textarea" + ) + return; + if (focusedButton) { + focusedButton.domObject.classList.remove("buttonFocused"); + focusedButton = focusedButton.prevButton; + } + if (!focusedButton) focusedButton = lastButton; + if (focusedButton) { + focusedButton.domObject.classList.add("buttonFocused"); + } + event.preventDefault(); + event.stopPropagation(); + } + } + }; + if (buttons) { + var buttonBar = createDOMElement(container, "div", "msgBoxButtons"); + var leadingSpacer = createDOMElement(buttonBar, "div", ""); + var hasSpacer = false; + var lastButton = undefined; + buttons.forEach((button) => { + if (!button.hidden) { + if (button.caption) { + var element = createDOMElement( + buttonBar, + "div", + "msgBoxButton", + evaluateLocalizedString(button.caption), + ); + if (button.id) element.id = button.id; + element.onclick = (click) => { + if (click.button === 0 && button.onclick) button.onclick(); + }; + if (!noButtonKeys) { + element.onmousedown = (mouseDown) => { + if (focusedButton) { + focusedButton.domObject.classList.remove("buttonFocused"); + focusedButton = button; + focusedButton.domObject.classList.add("buttonFocused"); + } + }; + button.domObject = element; + if (lastButton) lastButton.nextButton = button; + button.prevButton = lastButton; + lastButton = button; + if (!firstButton) firstButton = button; + lastButton = button; + } + if (button.width) { + element.style.minWidth = button.width * generalScaling + "px"; + } + if (button.isDefaultCancelAction) { + cancelButton = button; + } + if (button.isDefaultAcceptAction) { + acceptButton = button; + if (!noButtonKeys) { + element.classList.add("buttonFocused"); + focusedButton = button; + } + } + } else { + createDOMElement(buttonBar, "div", "msgBoxButtonSpacer"); + hasSpacer = true; + } + } + }); + if (!hasSpacer) { + leadingSpacer.classList = "msgBoxButtonSpacer"; + } + container.focus(); + container.escapeButton = cancelButton; + } + RepositionModalDialog(container); +} diff --git a/bugs/object-browser-tab-stops/repro.json b/bugs/object-browser-tab-stops/repro.json new file mode 100644 index 000000000..748387042 --- /dev/null +++ b/bugs/object-browser-tab-stops/repro.json @@ -0,0 +1,8 @@ +{ + "mode": "lane", + "lane": "ide:object-browser", + "tests": [ + "Tab moves the focus from the search box to Aa and no further; Shift+Tab to Project / Library, then to the copy button, and no further" + ], + "steps": "1. Open any project, put the caret in the code editor and press F2. The Object Browser opens with the focus in its search box.\n2. Press Tab: the focus goes to Aa. Press Tab again a few times: the focus stays on Aa.\n3. Click in the search box and press Shift+Tab three times: the focus goes to Project / Library, then to the Description's copy button, and stays there.\nControl: a click on the Components list gives it the focus, and Down then moves its selection." +} diff --git a/bugs/static-seh-handler-not-run/repro.json b/bugs/static-seh-handler-not-run/repro.json new file mode 100644 index 000000000..0cc34389e --- /dev/null +++ b/bugs/static-seh-handler-not-run/repro.json @@ -0,0 +1,10 @@ +{ + "mode": "run", + "arch": "win64", + "exe": true, + "expect": { + "exit": 5, + "output": ["^seh_div\\(6, 3\\) = 2$", "NATIVE EXCEPTION: INT_DIVIDE_BY_ZERO", "^--- exe: exit -1073741676 \\(0xC0000094\\)$"], + "absent": ["^seh_div\\(6, 0\\) = -2$"] + } +} diff --git a/bugs/static-seh-handler-not-run/src/Miscellaneous/seh.c b/bugs/static-seh-handler-not-run/src/Miscellaneous/seh.c new file mode 100644 index 000000000..6e2f3b5a4 --- /dev/null +++ b/bugs/static-seh-handler-not-run/src/Miscellaneous/seh.c @@ -0,0 +1,8 @@ +/* structured exception handling */ +int seh_div(int a, int b) +{ + int r = -1; + __try { r = a / b; } + __except (1) { r = -2; } + return r; +} diff --git a/bugs/static-seh-handler-not-run/src/Miscellaneous/seh_64.obj b/bugs/static-seh-handler-not-run/src/Miscellaneous/seh_64.obj new file mode 100644 index 000000000..70969fcf1 Binary files /dev/null and b/bugs/static-seh-handler-not-run/src/Miscellaneous/seh_64.obj differ diff --git a/bugs/filed/debug-print-escaped-twice/debug-print-escaped-twice.twinproj b/bugs/static-seh-handler-not-run/src/Settings similarity index 57% rename from bugs/filed/debug-print-escaped-twice/debug-print-escaped-twice.twinproj rename to bugs/static-seh-handler-not-run/src/Settings index 08e30c9dd..3bb011bce 100644 Binary files a/bugs/filed/debug-print-escaped-twice/debug-print-escaped-twice.twinproj and b/bugs/static-seh-handler-not-run/src/Settings differ diff --git a/bugs/static-seh-handler-not-run/src/Sources/Startup.twin b/bugs/static-seh-handler-not-run/src/Sources/Startup.twin new file mode 100644 index 000000000..7351b1b5b --- /dev/null +++ b/bugs/static-seh-handler-not-run/src/Sources/Startup.twin @@ -0,0 +1,22 @@ +' Build as win64. seh_64.obj is seh.c compiled for x64 with: +' cl /c /Gw /Gy /GS- seh.c /Fo"seh_64.obj" +' seh_div divides a by b inside __try, and its __except handler returns -2 when the division raises. +' seh_div(6, 0) should return -2; the exception ends the program instead, in the IDE and in the exe. +Import Library "/Miscellaneous/seh_64.obj" As SEHLIB Link "stdlib" + +Module Startup + + Private Declare PtrSafe Function seh_div CDecl Lib SEHLIB (ByVal a As Long, ByVal b As Long) As Long + + Public Sub Main() + Debug.Print "seh_div(6, 3) = " & seh_div(6, 3) + Debug.Print "seh_div(6, 0) = " & seh_div(6, 0) + End Sub + + [RunAfterBuild] + Private Sub Built() + Debug.Cls + Main + End Sub + +End Module diff --git a/bugs/static-seh-handler-not-run/static-seh-handler-not-run.twinproj b/bugs/static-seh-handler-not-run/static-seh-handler-not-run.twinproj new file mode 100644 index 000000000..e2f0dcc95 Binary files /dev/null and b/bugs/static-seh-handler-not-run/static-seh-handler-not-run.twinproj differ diff --git a/bugs/tb0034-level-ignored/repro.json b/bugs/tb0034-level-ignored/repro.json new file mode 100644 index 000000000..9187c4271 --- /dev/null +++ b/bugs/tb0034-level-ignored/repro.json @@ -0,0 +1,8 @@ +{ + "mode": "compile", + "expect": { + "exit": 0, + "output": ["\\{WARNING\\} [^\"]*\\[4,\\d+\\]: TB0034 ", "\\{WARNING\\} [^\"]*\\[13,\\d+\\]: TB0034 "], + "absent": ["TB0015"] + } +} diff --git a/bugs/tb0034-level-ignored/src/Settings b/bugs/tb0034-level-ignored/src/Settings new file mode 100644 index 000000000..8767dc62c --- /dev/null +++ b/bugs/tb0034-level-ignored/src/Settings @@ -0,0 +1,64 @@ +{ + "configuration.inherits": "Defaults", + "project.appTitle": "Tb0034LevelIgnored", + "project.buildPath": "${SourcePath}\\Build\\${ProjectName}_${Architecture}.${FileExtension}", + "project.buildType": "Standard EXE", + "project.description": "Reproduces: TB0034 is reported as a warning whatever level Project Settings or an attribute gives it", + "project.exportPathIsV2": true, + "project.id": "{F768410E-E5CE-4887-93FD-B5B45D945BCE}", + "project.name": "Tb0034LevelIgnored", + "project.optionExplicit": true, + "project.references": [ + { + "id": "{00020430-0000-0000-C000-000000000046}", + "lcid": 0, + "name": "OLE Automation", + "path32": "C:\\Windows\\SysWOW64\\stdole2.tlb", + "path64": "C:\\Windows\\System32\\stdole2.tlb", + "symbolId": "stdole", + "versionMajor": 2, + "versionMinor": 0 + }, + { + "id": "{F50B82D0-DCAB-43FE-9631-11959D4A4728}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - VB Compatibility Package (Forms)", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "VB", + "versionBuild": 0, + "versionMajor": 0, + "versionMinor": 0, + "versionRevision": 31 + }, + { + "id": "{C192FB39-64CA-4D9B-B477-A5502F48EFCC}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - App global class object", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "AppGlobalClassProject", + "versionBuild": 0, + "versionMajor": 1, + "versionMinor": 0, + "versionRevision": 0 + } + ], + "project.settingsVersion": 1, + "project.startupObject": "Sub Main", + "project.warnings": { + "errors": [], + "hints": [], + "ignored": [ + "TB0015", + "TB0034" + ], + "info": [], + "warnings": [] + }, + "runtime.useUnicodeStandardLibrary": true +} diff --git a/bugs/tb0034-level-ignored/src/Sources/Startup.twin b/bugs/tb0034-level-ignored/src/Sources/Startup.twin new file mode 100644 index 000000000..166bf4b5f --- /dev/null +++ b/bugs/tb0034-level-ignored/src/Sources/Startup.twin @@ -0,0 +1,14 @@ +Module Startup + ' Settings puts TB0015 and TB0034 at IGNORE. TB0015 is not reported; TB0034 is, as a warning. + Private Declare PtrSafe Sub GetMem4 Lib "msvbvm60" (ByVal Src As LongPtr, ByVal Dst As LongPtr) + Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" (ByRef PicDesc As Any, ByRef RefIID As Any, ByVal fPictureOwnsHandle As Long, ByRef IPic As Any) As Long + + Public Sub Main() + End Sub +End Module + +' The attribute does not turn it off either. +[IgnoreWarnings(TB0034)] +Module ByAttribute + Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" (ByRef PicDesc As Any, ByRef RefIID As Any, ByVal fPictureOwnsHandle As Long, ByRef IPic As Any) As Long +End Module diff --git a/bugs/tb0034-level-ignored/tb0034-level-ignored.twinproj b/bugs/tb0034-level-ignored/tb0034-level-ignored.twinproj new file mode 100644 index 000000000..e7250c222 Binary files /dev/null and b/bugs/tb0034-level-ignored/tb0034-level-ignored.twinproj differ diff --git a/bugs/tb0035-default-not-reported/repro.json b/bugs/tb0035-default-not-reported/repro.json new file mode 100644 index 000000000..0bb7a09f3 --- /dev/null +++ b/bugs/tb0035-default-not-reported/repro.json @@ -0,0 +1,7 @@ +{ + "mode": "compile", + "expect": { + "exit": 0, + "noDiagnostics": true + } +} diff --git a/bugs/tb0035-default-not-reported/src/Settings b/bugs/tb0035-default-not-reported/src/Settings new file mode 100644 index 000000000..43b49ab61 --- /dev/null +++ b/bugs/tb0035-default-not-reported/src/Settings @@ -0,0 +1,61 @@ +{ + "configuration.inherits": "Defaults", + "project.appTitle": "Tb0035DefaultNotReported", + "project.buildPath": "${SourcePath}\\Build\\${ProjectName}_${Architecture}.${FileExtension}", + "project.buildType": "Standard EXE", + "project.description": "Reproduces: TB0035 is not reported in a new project, although the Compiler Warnings list shows it at WARNING", + "project.exportPathIsV2": true, + "project.id": "{00221FFF-1417-4785-ACB4-8A94584975ED}", + "project.name": "Tb0035DefaultNotReported", + "project.optionExplicit": true, + "project.references": [ + { + "id": "{00020430-0000-0000-C000-000000000046}", + "lcid": 0, + "name": "OLE Automation", + "path32": "C:\\Windows\\SysWOW64\\stdole2.tlb", + "path64": "C:\\Windows\\System32\\stdole2.tlb", + "symbolId": "stdole", + "versionMajor": 2, + "versionMinor": 0 + }, + { + "id": "{F50B82D0-DCAB-43FE-9631-11959D4A4728}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - VB Compatibility Package (Forms)", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "VB", + "versionBuild": 0, + "versionMajor": 0, + "versionMinor": 0, + "versionRevision": 31 + }, + { + "id": "{C192FB39-64CA-4D9B-B477-A5502F48EFCC}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - App global class object", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "AppGlobalClassProject", + "versionBuild": 0, + "versionMajor": 1, + "versionMinor": 0, + "versionRevision": 0 + } + ], + "project.settingsVersion": 1, + "project.startupObject": "Sub Main", + "project.warnings": { + "errors": [], + "hints": [], + "ignored": [], + "info": [], + "warnings": [] + }, + "runtime.useUnicodeStandardLibrary": true +} diff --git a/bugs/tb0035-default-not-reported/src/Sources/Startup.twin b/bugs/tb0035-default-not-reported/src/Sources/Startup.twin new file mode 100644 index 000000000..e0226951e --- /dev/null +++ b/bugs/tb0035-default-not-reported/src/Sources/Startup.twin @@ -0,0 +1,7 @@ +Module Startup + Public Sub Main() + Dim o As Object + Dim f As StdFont + Set f = o ' TB0035, which the Compiler Warnings list shows at WARNING, is not reported + End Sub +End Module diff --git a/bugs/tb0035-default-not-reported/tb0035-default-not-reported.twinproj b/bugs/tb0035-default-not-reported/tb0035-default-not-reported.twinproj new file mode 100644 index 000000000..6f8e0a840 Binary files /dev/null and b/bugs/tb0035-default-not-reported/tb0035-default-not-reported.twinproj differ diff --git a/bugs/warning-message-names-blank/repro.json b/bugs/warning-message-names-blank/repro.json new file mode 100644 index 000000000..7563ba5c3 --- /dev/null +++ b/bugs/warning-message-names-blank/repro.json @@ -0,0 +1,10 @@ +{ + "mode": "compile", + "expect": { + "exit": 0, + "output": [ + "TB0034 Use of legacy DLL\\s+has been redirected to\\s*\"", + "TB0035 Conversion from type \\{0\\} to type \\{1\\} might fail at runtime\\.\\s+Use \\{2\\}\\(expression\\)" + ] + } +} diff --git a/bugs/warning-message-names-blank/src/Settings b/bugs/warning-message-names-blank/src/Settings new file mode 100644 index 000000000..887508abc --- /dev/null +++ b/bugs/warning-message-names-blank/src/Settings @@ -0,0 +1,61 @@ +{ + "configuration.inherits": "Defaults", + "project.appTitle": "WarningMessageNamesBlank", + "project.buildPath": "${SourcePath}\\Build\\${ProjectName}_${Architecture}.${FileExtension}", + "project.buildType": "Standard EXE", + "project.description": "Reproduces: The messages of TB0034, and of TB0035 for an `Object`, leave out the names they report", + "project.exportPathIsV2": true, + "project.id": "{1F9D76A5-56E7-435D-A4DC-FB2B80069912}", + "project.name": "WarningMessageNamesBlank", + "project.optionExplicit": true, + "project.references": [ + { + "id": "{00020430-0000-0000-C000-000000000046}", + "lcid": 0, + "name": "OLE Automation", + "path32": "C:\\Windows\\SysWOW64\\stdole2.tlb", + "path64": "C:\\Windows\\System32\\stdole2.tlb", + "symbolId": "stdole", + "versionMajor": 2, + "versionMinor": 0 + }, + { + "id": "{F50B82D0-DCAB-43FE-9631-11959D4A4728}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - VB Compatibility Package (Forms)", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "VB", + "versionBuild": 0, + "versionMajor": 0, + "versionMinor": 0, + "versionRevision": 31 + }, + { + "id": "{C192FB39-64CA-4D9B-B477-A5502F48EFCC}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - App global class object", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "AppGlobalClassProject", + "versionBuild": 0, + "versionMajor": 1, + "versionMinor": 0, + "versionRevision": 0 + } + ], + "project.settingsVersion": 1, + "project.startupObject": "Sub Main", + "project.warnings": { + "errors": [], + "hints": [], + "ignored": [], + "info": [], + "warnings": [] + }, + "runtime.useUnicodeStandardLibrary": true +} diff --git a/bugs/warning-message-names-blank/src/Sources/Startup.twin b/bugs/warning-message-names-blank/src/Sources/Startup.twin new file mode 100644 index 000000000..2a083b26b --- /dev/null +++ b/bugs/warning-message-names-blank/src/Sources/Startup.twin @@ -0,0 +1,13 @@ +[EnforceWarnings(TB0035)] +Module Startup + ' TB0034: the message should name OLEPRO32.DLL and OLEAUT32.DLL, as BETA 1033's TB0015 did + Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" (ByRef PicDesc As Any, ByRef RefIID As Any, ByVal fPictureOwnsHandle As Long, ByRef IPic As Any) As Long + + Public Sub Main() + Dim o As Object + Dim v As Variant + Dim f As StdFont + Set f = o ' TB0035 with {0}, {1} and {2} in its message + Set f = v ' TB0035 naming Variant and Font, as it should + End Sub +End Module diff --git a/bugs/warning-message-names-blank/warning-message-names-blank.twinproj b/bugs/warning-message-names-blank/warning-message-names-blank.twinproj new file mode 100644 index 000000000..b3c4fa0d3 Binary files /dev/null and b/bugs/warning-message-names-blank/warning-message-names-blank.twinproj differ diff --git a/builder/page-baseline.json b/builder/page-baseline.json index 8528f328a..3cafbec66 100644 --- a/builder/page-baseline.json +++ b/builder/page-baseline.json @@ -1,5 +1,5 @@ { "src": "docs", - "pages": 1504, - "staticFiles": 1107 + "pages": 1505, + "staticFiles": 1130 } diff --git a/docs/Documentation/Tools-Defects.md b/docs/Documentation/Tools-Defects.md index ef9f36513..bd9b07d34 100644 --- a/docs/Documentation/Tools-Defects.md +++ b/docs/Documentation/Tools-Defects.md @@ -98,8 +98,8 @@ refused with exit 2, naming the file and the key, before anything runs. | `expect.diagnostics` | `compile`. Diagnostic codes, such as `TB5182`, that must all be reported. | | `expect.noDiagnostics` | `compile`. `true` expects no error, warning, hint or information. | | `expect.message` | `build`, `run`. A regular expression what `tbbuild` or `tbrun` prints on standard error must match: for `run`, a failed build's lines are there. | -| `expect.output` | `run`, `test`, `cli` and `probe`. Regular expressions, each of which must match the output. They are matched line by line, so `^` and `$` hold at each line. | -| `expect.absent` | `run`, `test`, `cli` and `probe`. Regular expressions, none of which may match the output, such as an `ERROR` line the bug's fix would print. | +| `expect.output` | `compile`, `run`, `test`, `cli` and `probe`. Regular expressions, each of which must match the output. They are matched line by line, so `^` and `$` hold at each line. For `compile` the output is the report of `tbbuild --json`, which has each diagnostic on a line of its own as `"{WARNING} [,]: "`, so an expression can match a diagnostic's level or its text. | +| `expect.absent` | `compile`, `run`, `test`, `cli` and `probe`. Regular expressions, none of which may match the output, such as an `ERROR` line the bug's fix would print. | | `cli` | `cli` mode. The arguments for the compiler executable, `bin\twinBASIC_win32.exe`, or a list of such lists, run in turn. Their output is joined, and their exit code is the one they all gave, or the codes joined by commas, such as `0,999`. `{tmp}` stands for a new temp folder, deleted afterwards; `{project}` for a copy of the packed `.twinproj` in it, and `{src}` for a copy of `src/`, so a command that writes either never touches the committed reproducer; `{ide}` for the folder of the IDE that `--ide` names or that is found, so a file the installation ships can be named without a user name. Give an output folder with backslashes and a trailing one, as `export` requires. Each command runs on a private desktop, inside a job that ends everything it starts; `--timeout` (default 120 seconds) is the limit on each. The compiler opens a modal message box for some inputs, such as a damaged project, so the tool presses OK on every dialog a command opens. A command's output begins with one line for each box, in the order they opened, `dialog: : <text>` with the box's text on one line, then its standard output, then its standard error. `expect.output` and `expect.absent` are matched against that. | | `steps` | What a person does to see the bug, for the issue. `verify` prints it for a `manual` reproducer. | | `images` | Optional, `run` and `manual`. A non-empty list of picture names, each of letters, digits, `-` and `_`, without repeats. The project needs a `PngDump.twin` under `src/Sources/` and, when there is a `vb6/`, a `vb6/PngDump.bas` and a `Module=PngDump; PngDump.bas` line in its `Probe.vbp`; without them the file is refused. | diff --git a/docs/Features/Advanced/Static-Linking.md b/docs/Features/Advanced/Static-Linking.md index 79baa4d94..e667c581f 100644 --- a/docs/Features/Advanced/Static-Linking.md +++ b/docs/Features/Advanced/Static-Linking.md @@ -3,15 +3,41 @@ title: Static Linking parent: Advanced Features nav_order: 3 permalink: /Features/Advanced/Static-Linking +index: static library --- # Static Linking of OBJ and LIB Files -tB allows you to use properly compiled .lib and .obj files as statically linked libraries, using declares similar to DLLs, only referring a lib/obj file in your Miscellaneous files folder of your project. Once the file is in the project, it's set up with this syntax outside of declares. +Links compiled C code from `.obj`, `.lib` and `.a` files into the program, which calls its functions through **Declare** statements and needs no DLL beside it. -## Example +> [!NOTE] BETA 1034 +> Static linking is experimental. It links code that needs nothing from the C runtime library beyond the few functions twinBASIC provides, and nothing from the C++ runtime. The SQLite amalgamation and SlimDetours link and work; most other C projects do not link without changes. [What can be linked](#what-can-be-linked) lists the limits. + +A program uses a library in three steps: + +1. Compile the C source to an object file for each architecture the program is built for (see [Compiling the object files](#compiling-the-object-files)). +2. Import the files into the project, into the **Miscellaneous** folder or any other folder (see [Adding files](../../tB/IDE/Projects/Adding-Files#import)). +3. Name each file in an **Import Library** statement, and declare each function the program calls with a **Declare** statement. + +A package can carry the files and the statements, so that a project that references it needs neither; the [DetoursLib](../../tB/Packages/Contributed/DetoursLib/) package links SlimDetours this way. + +## Syntax +{: index="Import Library" } + +**Import Library** "*path*" **As** *namespace* [ **Link** "*dependency*" [ **,** "*dependency*" ] ... ] + +*path* +: *required* The path of the file in the project, starting with a slash: `"/Miscellaneous/sqlite3_64.obj"`. The file is an object file (`.obj`), a library of object files (`.lib`, as Microsoft's `lib.exe` writes one), or an archive of the same kind (`.a`, as the GNU tools write one). + +*namespace* +: *required* The name that **Declare** statements give after **Lib**, without quotes, in place of a DLL's name. A namespace that is also the project's name is ambiguous, and each **Declare** that uses it is compile error TB5137. + +*dependency* +: *optional* A string naming where the code finds the functions it calls but does not define: `"stdlib"`, a Windows DLL, or another library of the project. Each is in quotes. See [Dependencies](#dependencies). + +The statement is written at the top level of a file, outside any **Module** or **Class**; inside a module it is a syntax error. Its namespace is known in every file of the project. -Example from the sqlite sample: +The file must be for the architecture of the build. A program built for both architectures has a file for each and chooses one with `#If Win64`: ```tb inert=external #If Win64 Then @@ -21,32 +47,171 @@ Example from the sqlite sample: #End If ``` -### Generic Syntax +## Declaring the functions -```tb inert=skeleton -Import Library "Relative resource path" As NAMESPACE Link "dependency1", "dependency2", '... +An object file names the functions it defines, but not their parameters or return types, so each function the program calls needs a [**Declare**](../../tB/Core/Declare) statement, as a function of a DLL does. **Lib** is followed by the namespace: + +```tb inert=external +Module MainModule + Declare PtrSafe Function sqlite3_open CDecl Lib SQLITE3 (ByVal filename As String, ByRef ppDb As LongPtr) As Long + Declare PtrSafe Function sqlite3_close CDecl Lib SQLITE3 (ByVal pDb As LongPtr) As Long +End Module ``` -## Using Imported Libraries +The parameters work as they do for a DLL function, and **AddressOf** passes a twinBASIC procedure to a C function that calls it back. The procedure's name, or the name after **Alias**, is the function's name in the file. A name the file does not define is compile error TB5008, on the **Declare**. -After that, you can use NAMESPACE in place of a DLL name, inside class/module declares: +### Calling conventions and names + +The default calling convention of a C function is `__cdecl`, so its **Declare** names **CDecl**. A **Declare** without a convention keyword is stdcall (see [Calling Conventions](API-Declarations#calling-conventions)); a 64-bit build has only one convention, and ignores the keyword. + +In a 32-bit build, the C compiler decorates the names in the object file. It puts an underscore before the name of a `__cdecl` or `__stdcall` function, which a **Declare** leaves out: twinBASIC adds it. A `__stdcall` function's name also ends with `@` and the size of its arguments, each rounded up to 4 bytes, and that suffix goes into **Alias**. `int __stdcall add_std(int a, short b)` is `_add_std@8` in a 32-bit file and `add_std` in a 64-bit one: ```tb inert=external -' Compiled sqlite-amalgamation-3440200 (v3.44.2) -' using cmdline (MSVC): cl /c /Gw /Gy /GS- /DSQLITE_OMIT_SEH sqlite3.c #If Win64 Then - Import Library "/Miscellaneous/sqlite3_64.obj" As SQLITE3 Link "stdlib", "kernel32" + Declare PtrSafe Function add_std Lib MYLIB (ByVal a As Long, ByVal b As Integer) As Long #Else - Import Library "/Miscellaneous/sqlite3_32.obj" As SQLITE3 Link "stdlib", "kernel32" + Declare PtrSafe Function add_std Lib MYLIB Alias "add_std@8" (ByVal a As Long, ByVal b As Integer) As Long +#End If +``` + +A function in a C++ file has a decorated name in either architecture, such as `?add@@YAHHH@Z`, unless the file declares it `extern "C"`. **Alias** takes the decorated name, as `dumpbin /symbols` lists it, but `extern "C"` is simpler. + +## Dependencies +{: index="stdlib" } + +Code in a library usually calls functions it does not define: functions of the C runtime library, of Windows, or of another library. The statement's **Link** list names where to find them: + +`"stdlib"` +: twinBASIC's own implementation of a small part of the C runtime library: functions such as `memset`, `memcpy`, `strcpy`, `strlen`, `toupper`, `malloc` and `free`. It does not have formatted output (`sprintf`), `qsort`, `atoi` or the maths functions (`sin`, `floor`). + +A Windows DLL +: The functions the DLL exports, from a table of the Windows DLLs built into the compiler. The DLL is named without `.dll`: `"kernel32"`, `"user32"`, `"ntdll"`. The program calls the functions in the DLL, as a **Declare** would. The Windows SDK's import libraries, such as `user32.lib`, are not used, and an import library cannot be imported (see the warning in [What can be linked](#what-can-be-linked)). + +Another library +: The functions defined by the library of another **Import Library** statement, named by its namespace: `"MYHELPERS"`. + +A function that neither the file nor its **Link** list defines is compile error TB5058, which names the function. When the function is in `"stdlib"`, in the compiler's table of DLLs or in another library of the project, the error names that too: *linker error: unrecognized symbol '_memcpy' (Link With "stdlib"?)*. A name in the list that is none of these is TB5057. + +Each library is linked on its own, so two libraries may define functions of the same name, and each **Declare** reaches the one in its own namespace. Object files that call each other's functions are linked together with **Link**, or put into one `.lib` with `lib.exe`, where they need no **Link**. + +## What can be linked + +Code links when every function it calls is in its own file or in one that its **Link** list names. That leaves out: + +- **Most of the C runtime library.** Only the functions of `"stdlib"` are there. +- **Code compiled for the runtime DLL.** An object file compiled with `/MD` calls the runtime through names that begin `__imp_`, such as `__imp_malloc`, which `"stdlib"` does not define. Compile with `/MT`, the default of `cl.exe`. +- **Buffer security checks.** With `/GS`, which is on unless turned off, a function that has a local array calls `__security_check_cookie`. Compile with `/GS-`. +- **C++ runtime support**: `new` and `delete`, exceptions (`try`, `catch` and `throw`) and run-time type information. A C++ class that needs none of them, such as one created as a local variable, links. +- **Exception handling in a 32-bit build.** `__try` and `__except` need `__except_handler3`, which neither `"stdlib"` nor `"kernel32"` nor `"ntdll"` defines. +- **Whole-program optimisation.** An object file compiled with `/GL` holds no machine code, and is compile error TB5059. + +> [!WARNING] BETA 1034 +> In a 64-bit build, code that uses `__try` and `__except` links without an error, but its handler never runs: an exception that it should handle ends the program, in the IDE and in a built exe. + +> [!WARNING] BETA 1034 +> An **Import Library** statement that names an import library crashes the compiler, in either architecture. An import library is a `.lib` that lists the functions of a DLL and holds no code, such as the Windows SDK's `user32.lib`. Name a Windows DLL in the **Link** list instead. + +The SQLite amalgamation, which is the whole of SQLite in one C file, needs only `"stdlib"` and `"kernel32"`, and SlimDetours needs only `"stdlib"` and `"ntdll"`. Most libraries need more, often other libraries that they were built to link with; each of those must be linked too, within the same limits. + +## Compiling the object files + +The object files come from Microsoft's C compiler, `cl.exe`, run from a command prompt set up for the architecture: `vcvars32.bat` for a 32-bit build and `vcvars64.bat` for a 64-bit one, both in the `VC\Auxiliary\Build` folder of a Visual Studio installation. The IDE's samples compile with these switches: + +```batch +vcvars32.bat +cl /c /Gw /Gy /GS- mylib.c /Fo"mylib_32.obj" +``` + +```batch +vcvars64.bat +cl /c /Gw /Gy /GS- mylib.c /Fo"mylib_64.obj" +``` + +`/c` compiles without linking, and writes the object file. `/GS-` turns off the buffer security checks. `/Gy` and `/Gw` put each function and each global variable in a section of its own; a file compiled without them links too. + +`lib.exe` puts several object files into one library: `lib /out:mylib_64.lib first.obj second.obj`. + +A project in Visual Studio compiles with other defaults, which stop its object files linking: the runtime DLL (`/MD`, or `/MDd` in the Debug configuration), buffer security checks (`/GS`), and in the Release configuration whole-program optimisation (`/GL`). Change them in the project's properties, or compile from the command line. + +## Errors + +TB5008 and TB5010 are reported on a **Declare**. The others are reported at line 1 of the file that holds the **Import Library** statement. + +### TB5008: unrecognized symbol '*name*' in static library '*namespace*' +{: index="TB5008" } + +A **Declare** names a function that the library does not define. In a 32-bit build, check the name's decoration (see [Calling conventions and names](#calling-conventions-and-names)). The error follows TB5059 and TB5060 for each **Declare** of the library, since the library then defines nothing. + +### TB5010: internal error loading static library '*namespace*' +{: index="TB5010" } + +The library could not be loaded. It follows TB5095, on each **Declare** of the library. + +### TB5056: unexpected relocation type *n* on X64. Check LIB/OBJ file is designed for this platform. +{: index="TB5056" } + +The file holds a kind of address that the linker cannot fix up. The tables of C++ exception handling give this error in a 64-bit build. + +### TB5057: referenced library '*name*' not found +{: index="TB5057" } + +A name in the **Link** list is not `"stdlib"`, a DLL of the compiler's table or a namespace of the project. `"msvcrt"` is not in the table. + +### TB5058: unrecognized symbol '*name*' +{: index="TB5058" } + +The code calls a function, or reads a variable, that neither the file nor its **Link** list defines (see [Dependencies](#dependencies)). The name is the one in the file, decorated: `_memcpy` in a 32-bit file, `memcpy` in a 64-bit one. + +### TB5059: incorrect OBJ file format, file is empty +{: index="TB5059" } + +The file has nothing to link. An object file compiled with `/GL` gives this error. + +### TB5060: incorrect OBJ file format, expected x86 +{: index="TB5060" } + +The file is not an object file for the architecture of the build: it is for the other one, or is not an object file at all. A 64-bit build says `expected x64`. + +### TB5095: unable to open library file '*path*' +{: index="TB5095" } + +The project has no file at that path. + +## Example + +A C file, `mathlib.c`, defines one function: + +```c +int add(int a, int b) { return a + b; } +``` + +It is compiled twice, as in [Compiling the object files](#compiling-the-object-files), to `mathlib_32.obj` and `mathlib_64.obj`, and both files are imported into the project's **Miscellaneous** folder. The function needs nothing from outside the file, so the statement has no **Link** list: + +```tb inert=external +#If Win64 Then + Import Library "/Miscellaneous/mathlib_64.obj" As MATHLIB +#Else + Import Library "/Miscellaneous/mathlib_32.obj" As MATHLIB #End If Module MainModule + Private Declare PtrSafe Function add CDecl Lib MATHLIB (ByVal a As Long, ByVal b As Long) As Long - Declare PtrSafe Function sqlite3_open CDecl Lib SQLITE3 (ByVal filename As String, ByRef ppDb As LongPtr) As Long - Declare PtrSafe Function sqlite3_exec CDecl Lib SQLITE3 (ByVal pDb As LongPtr, ByVal sql As String, ByVal exec_callback As LongPtr, ByVal udp As LongPtr, ByRef errmsg As LongPtr) As Long - ' ... + Public Sub Main() + Debug.Print add(2, 3) + End Sub End Module ``` -> [!NOTE] -> StdCall names will be mangled with argument sizes, e.g. `int myfunc(int x, short y);` would be `myfunc@6`. It therefore may be better to use `CDecl`. +```text +5 +``` + +The New Project dialog has two larger [samples](../../tB/IDE/Project/New#samples): **Static Library Example (SQLITE3)**, which links SQLite, and **Static Library Example (libdeflate)**, which links the libdeflate compression library from `.a` files. + +## See Also + +- [Declare](../../tB/Core/Declare) statement +- [Enhanced API Declarations](API-Declarations) -- calling conventions +- [Direct Assembly Insertion](Assembly) -- machine code written into a procedure, with no C compiler +- [DetoursLib](../../tB/Packages/Contributed/DetoursLib/) package -- links SlimDetours diff --git a/docs/Features/Compiler-IDE/Compiler-Warnings.md b/docs/Features/Compiler-IDE/Compiler-Warnings.md index 70d953c54..cec6f4743 100644 --- a/docs/Features/Compiler-IDE/Compiler-Warnings.md +++ b/docs/Features/Compiler-IDE/Compiler-Warnings.md @@ -7,11 +7,11 @@ permalink: /Features/Compiler-IDE/Compiler-Warnings # Compiler Warnings -twinBASIC reports a warning, as the code is written, for a common bad practice or a likely oversight: code that compiles, but probably does not do what was meant, or uses a feature kept only for compatibility with VBA and VB6. Each warning has a code from TB0001 to TB0033, and the [Diagnostics](../../tB/IDE/Code/Diagnostics) panel lists them with the line they are on. +twinBASIC reports a warning, as the code is written, for a common bad practice or a likely oversight: code that compiles, but probably does not do what was meant, or uses a feature kept only for compatibility with VBA and VB6. Each warning has a code from TB0001 to TB0037, and the [Diagnostics](../../tB/IDE/Code/Diagnostics) panel lists them with the line they are on. ## Adjusting Warnings -Each warning has a level: **WARNING**, **HINT**, **INFO**, **IGNORE** or **ERROR**. A warning at **IGNORE** is not reported, and one at **ERROR** is reported as an error, so the project does not build. In a new project the Compiler Warnings list of Project Settings shows TB0015 and TB0030 at **HINT**, TB0018 to TB0021, TB0024, TB0025 and TB0029 at **IGNORE**, and every other warning at **WARNING**. +Each warning has a level: **WARNING**, **HINT**, **INFO**, **IGNORE** or **ERROR**. A warning at **IGNORE** is not reported, and one at **ERROR** is reported as an error, so the project does not build. In a new project the Compiler Warnings list of Project Settings shows TB0015, TB0030 and TB0034 at **HINT**, TB0018 to TB0021, TB0024, TB0025 and TB0029 at **IGNORE**, and every other warning at **WARNING**. The compiler reports TB0034 and TB0035 at other levels: see [TB0034](#tb0034-legacy-dll-redirected) and [TB0035](#tb0035-late-bound-conversion). The levels for the whole project are in the **Compiler Warnings** group of [Project Settings](../../tB/IDE/Project-Settings#compiler-warnings). Each row of its list has a drop-down for the level, then the code and the text of the warning. The **Filter warnings...** box above the list narrows it to the rows whose code or text holds the words typed: @@ -33,6 +33,7 @@ Four warnings report implicit conversions that VBA makes silently, in the way .N ## The Warnings ### TB0001: Use of Legacy DefType +{: index="TB0001" } A [**Def**_type_](../../tB/Core/Deftype) statement, such as **DefLng**, sets the type of every variable whose name starts with one of its letters. The type of a variable then depends on its name rather than on its declaration, which makes the code hard to read and its errors hard to find. @@ -45,6 +46,7 @@ End Function ``` ### TB0002: Compiler-Generated Variable +{: index="TB0002" } In a file with [**Option Explicit Off**](../../tB/Core/Option), a name that has not been declared is declared by the compiler, as a **Variant**. Each such variable draws TB0002, *This variable has been auto-declared by the compiler due to Option Explicit being OFF*, so a misspelt name does not go unnoticed. @@ -60,6 +62,7 @@ End Module ``` ### TB0003: Implicit Variant Data Type +{: index="TB0003" } A variable, parameter or function declared without **As** _type_ is a **Variant**. TB0003, *Datatype has not been explicitly declared so will default to Variant*, says so. Write `As Variant` where a **Variant** is meant. @@ -70,6 +73,7 @@ Debug.Print total ``` ### TB0004: Wrong Exit Statement +{: index="TB0004" } **Exit Function** or **Exit Sub** inside a **Property Get** procedure leaves the property, as VBA allows, but the statement that belongs there is [**Exit Property**](../../tB/Core/Exit). @@ -83,6 +87,7 @@ End Property ``` ### TB0005: Warning Directive +{: index="TB0005" } A `#Warning` directive reports its text as warning TB0005, as a reminder in the code. @@ -92,6 +97,7 @@ Debug.Print "testing" ``` ### TB0006: Record Length Is Ignored in Binary Mode +{: index="TB0006" } A file opened **For Binary** is read and written byte by byte, so the **Len** clause of its [**Open**](../../tB/Core/Open) statement has no effect. @@ -103,6 +109,7 @@ Close #f ``` ### TB0007: Mismatched Data Type Hint +{: index="TB0007" } A type-declaration character on a name that is declared as a different type, such as `count$` for a **Long**. @@ -113,6 +120,7 @@ Debug.Print count$ ``` ### TB0008: Suspicious Call +{: index="TB0008" } A call to a class's own **Class_Initialize** event procedure, *Suspicious call to event Class_Initialize*. The class's initialization runs again on an object that already exists. Move the code into a procedure that **Class_Initialize** and the other caller both call. @@ -129,6 +137,7 @@ End Sub ``` ### TB0009: Unimplemented +{: index="TB0009" } A call to a procedure marked [**Unimplemented**](../../tB/Core/Attributes#unimplemented), *[ExportToPdf] has not yet been implemented*. The warning is at the call, not at the procedure. Some members of the built-in packages that twinBASIC does not implement yet are marked this way. @@ -143,14 +152,17 @@ End Sub ``` ### TB0010: Duplicate DLL Declaration +{: index="TB0010" } Reports a DLL entry point that is declared more than once: *Duplicate declaration of DLL entry point*. ### TB0011: Use of Legacy Date/Time Property Let +{: index="TB0011" } Reports an assignment to the legacy date and time properties, such as the [**Date**](../../tB/Modules/DateTime/Date) statement, which sets the system date: *Use of legacy date/time property-let assignments are strongly discouraged*. ### TB0012: Possible Hex Literal Misuse +{: index="TB0012" } A hexadecimal literal without a type character takes the smallest type it fits in. So `&H8000` is the **Integer** -32,768, and stored in a **Long** it stays -32,768 rather than becoming the positive 32,768 that was most likely meant, which needs `&H8000&`. TB0012 reports a literal from `&H8000` to `&HFFFF` converted to a **Long** or **LongLong**, and one from `&H80000000` to `&HFFFFFFFF`, a **Long**, converted to a **LongLong**. Its message names the literal to write instead: `&H8000&` for a **Long**, `&H80000000^` for a **LongLong**. @@ -163,6 +175,7 @@ Debug.Print mask ' 32768 ``` ### TB0013: Missing InterfaceId Attribute +{: index="TB0013" } A class marked [**COMControl**](../../tB/Core/Attributes#comcontrol) without an [**InterfaceId**](../../tB/Core/Attributes#interfaceid) attribute, and again without an [**EventInterfaceId**](../../tB/Core/Attributes#eventinterfaceid) attribute. A host may cache the identifiers of a control's interfaces, so they should be fixed in the source rather than made anew by each build. @@ -173,6 +186,7 @@ End Class ``` ### TB0014: Inline ByVal on a UDT +{: index="TB0014" } **ByVal** written in front of a user-defined type in a call to a [**Declare**](../../tB/Core/Declare) procedure has no effect. The structure is passed by reference all the same, and its strings are not converted to ANSI, as in VBA and VB6. @@ -191,20 +205,19 @@ Public Sub ShowCursor() End Sub ``` -### TB0015: DLL Redirection +### TB0015: Declare Redirected to twinBASIC +{: index="TB0015" } -A **Declare** of a function from a legacy system DLL that twinBASIC calls in its modern replacement instead: *use of legacy OLEPRO32.DLL has been redirected to OLEAUT32.DLL*. It is at **HINT** by default. - -> [!NOTE] BETA 1010 -> In a project whose `project.warnings` setting names no level for TB0015, as in a new project, TB0015 is reported as a warning, although the Compiler Warnings list shows it at **HINT**. +A **Declare** of a function that twinBASIC implements itself, such as `GetMem4` from `msvbvm60.dll`: *This Declare statement has been redirected to an internal twinBASIC implementation, supporting both 32-bit and 64-bit*. The call runs twinBASIC's own code, not the DLL's, in a 32-bit and a 64-bit build alike. The [FAQ](../../FAQ#when-it-does-not-work) lists the functions. It is at **HINT** by default. ```tb check_build slot=module -Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" ( _ - ByRef PicDesc As Any, ByRef RefIID As Any, _ - ByVal fPictureOwnsHandle As Long, ByRef IPic As Any) As Long +Private Declare PtrSafe Sub GetMem4 Lib "msvbvm60" (ByVal Src As LongPtr, ByVal Dst As LongPtr) ``` +A **Declare** of a function from a legacy DLL that twinBASIC calls in another DLL instead is [TB0034](#tb0034-legacy-dll-redirected). + ### TB0016: Implicit ReDim Variable +{: index="TB0016" } [**ReDim**](../../tB/Core/ReDim) of a name that has not been declared declares the array, as VBA allows. Declare it first, with **Dim** and empty parentheses. @@ -214,10 +227,12 @@ scores(1) = 95 ``` ### TB0017: Inexact Array Alias Argument +{: index="TB0017" } Reports an array passed to an array parameter whose element type is a different alias of the same type, which twinBASIC accepts for compatibility with VBA and VB6: *array argument does not precisely match the expected type as the alias subtypes are different, but this is allowed for VBx compatibility*. ### TB0018: Implicit Narrowing Conversion +{: index="TB0018" } A value converted to a smaller type without a conversion function, such as a **Long** assigned to an **Integer**. The conversion raises an overflow error when the value does not fit. The message names the function to use, here [**CInt**](../../tB/Modules/Conversion/CInt). An enumeration value assigned to an **Integer** or a **Byte** draws it too. It is at **IGNORE** by default. @@ -232,6 +247,7 @@ End Sub ``` ### TB0019: Implicit Enumeration Conversion +{: index="TB0019" } A value of one enumeration assigned to a variable of another, or a **Double**, **Single**, **Currency** or **Variant** assigned to a variable of an enumeration. [**CType(Of** _type_**)**](../../tB/Modules/Conversion/CType) makes the conversion explicit. It is at **IGNORE** by default. @@ -249,6 +265,7 @@ End Sub > A member of another enumeration, written as a constant (`day = vbOK`), converts without a warning. ### TB0020: Suspicious Interface Conversion +{: index="TB0020" } An object assigned to a variable of an interface or class that its type is not declared to support, *suspicious conversion from type StdPicture to type Font*. The assignment asks the object for that interface at run time, and fails if it does not have it. **CType(Of** _type_**)** makes the conversion explicit. It is at **IGNORE** by default. @@ -263,6 +280,7 @@ End Sub ``` ### TB0021: Implicit Enumeration Conversion to/from Numeric +{: index="TB0021" } Reports an implicit conversion between an enumeration and a numeric type. It is at **IGNORE** by default. @@ -270,9 +288,13 @@ Reports an implicit conversion between an enumeration and a numeric type. It is > None of these conversions draws TB0021. A whole number assigned to a variable of an enumeration, or an enumeration value assigned to a **Long**, converts without a warning. A **Double**, **Single**, **Currency** or **Variant** assigned to a variable of an enumeration draws [TB0019](#tb0019-implicit-enumeration-conversion), and an enumeration value assigned to an **Integer**, **Byte** or **Single** draws [TB0018](#tb0018-implicit-narrowing-conversion). ### TB0022: Suspicious Assignment +{: index="TB0022" } An array assigned to an array of another element type, *suspicious array assignment; subtypes do not match*. +> [!NOTE] BETA 1034 +> The message reads only *Suspicious array assignment*: the IDE cuts the text that `en-gb.lang` gives it at its semicolon. See [Language packs](../../tB/IDE/Customising/#language-packs). + ```tb check_build Dim counts() As Long Dim small() As Integer @@ -281,6 +303,7 @@ counts = small ``` ### TB0023: Unusual Use of an Implicit Implements Field +{: index="TB0023" } In a class, [**Implements**](../../tB/Core/Implements) _name_ also declares a field called _name_, which is **Nothing**. Code that uses the field draws TB0023, *Unusual use of implicit field generated from an Implements statement*. To refer to the object as that interface, use **Me**. @@ -302,6 +325,7 @@ End Class ``` ### TB0024: Unused Variable +{: index="TB0024" } A local variable that is declared but never used, *Unused local variable 'unused'*. It is at **IGNORE** by default. @@ -316,6 +340,7 @@ End Sub ``` ### TB0025: Unused Parameter +{: index="TB0025" } A parameter that the procedure never uses, *Unused procedure parameter 'title'*. It is at **IGNORE** by default. @@ -327,6 +352,7 @@ End Sub ``` ### TB0026: Mismatched Delegate Types +{: index="TB0026" } [**AddressOf**](../../tB/Core/AddressOf) of a procedure whose parameters or return type do not match the [**Delegate**](../../tB/Core/Delegate) type it is assigned or passed to. The program still builds, and the procedure then receives its arguments in a form it does not expect. **CType(Of** _type_**)** makes the conversion explicit, and `[EnforceErrors(TB0026)]` makes the mismatch an error. See [Delegates](../Language/Delegates). @@ -344,14 +370,17 @@ End Sub ``` ### TB0027: Return Without GoSub +{: index="TB0027" } Reports a [**Return**](../../tB/Core/GoSub-Return) that is not preceded by a **GoSub**. ### TB0028: Control Overshadowed +{: index="TB0028" } Reports a control on a form that has the name of a method or property of the form: *control [name] is overshadowed by base form method or property of the same name*. ### TB0029: Missing PtrSafe +{: index="TB0029" } A **Declare** statement without **PtrSafe**, which 64-bit VBA 7 requires, *Declare needs PtrSafe attribute on this build configuration for VBA7 compatibility*. It is reported only in a 64-bit build, and is at **IGNORE** by default. @@ -363,6 +392,7 @@ End Module ``` ### TB0030: Declare Alias Not Needed +{: index="TB0030" } An **Alias** clause on a **Declare** statement that names the same entry point as the procedure's own name. It is at **HINT** by default. @@ -371,6 +401,7 @@ Private Declare PtrSafe Function GetTickCount Lib "kernel32" Alias "GetTickCount ``` ### TB0031: Suspicious Use of Erase +{: index="TB0031" } [**Erase**](../../tB/Core/Erase) of the array a function returns. The function returns a copy of its array, which is freed on its own, so the statement erases nothing that remains. @@ -386,6 +417,7 @@ End Sub ``` ### TB0032: Unused Line Label +{: index="TB0032" } A line label that no **GoTo**, **GoSub**, **On Error** or **Resume** statement names, *Line label is not used*. @@ -397,11 +429,79 @@ Debug.Print i ``` ### TB0033: Duplicate Definition +{: index="TB0033" } Reports a duplicate definition as a warning: *Duplicate definition, consider changing the name to be unique*. A name declared twice in one module, procedure, **Enum** or **Type** is error TB5134 instead. -> [!NOTE] BETA 1033 -> The Compiler Warnings list of Project Settings shows this warning with the code TB0032, the code of [Unused Line Label](#tb0032-unused-line-label). +### TB0034: Legacy DLL Redirected +{: index="TB0034" } + +A **Declare** of a function from a legacy system DLL that twinBASIC calls in its modern replacement instead, such as `OleCreatePictureIndirect`, which `olepro32.dll` exported and `oleaut32.dll` now does: *Use of legacy DLL OLEPRO32.DLL has been redirected to OLEAUT32.DLL*. Up to BETA 1033 the compiler reported it as [TB0015](#tb0015-declare-redirected-to-twinbasic). The Compiler Warnings list shows it at **HINT** by default. + +> [!NOTE] BETA 1034 +> TB0034 is reported as a warning whatever its level: at **IGNORE**, **HINT** or **ERROR** in the Compiler Warnings list, and under **IgnoreWarnings** or **EnforceErrors**. Its message leaves out the two names: *Use of legacy DLL has been redirected to*. + +```tb check_build slot=module +Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" ( _ + ByRef PicDesc As Any, ByRef RefIID As Any, _ + ByVal fPictureOwnsHandle As Long, ByRef IPic As Any) As Long +``` + +### TB0035: Late-Bound Conversion +{: index="TB0035" } + +A value whose type is known only at run time, an **Object** or a **Variant**, assigned or passed to a variable or parameter of a class or interface type: *Conversion from type Variant to type Font might fail at runtime. Use CType(Of Font)(expression) to avoid this message*. An item of a **Collection** is a **Variant**, and the result of a function declared **As Object** is an **Object**. When the value is not an object of that type, the conversion raises an error at run time, such as error 424, *Object required*, for a string. **CType(Of** _type_**)** makes the conversion explicit. A conversion from a known type that is not declared to support the target is [TB0020](#tb0020-suspicious-interface-conversion) instead. The Compiler Warnings list shows TB0035 at **WARNING** by default. + +> [!NOTE] BETA 1034 +> In a project whose settings give TB0035 no level, as a new project's do, TB0035 is not reported, although the Compiler Warnings list shows it at **WARNING**. Name it in an **EnforceWarnings** attribute, as below, to have it reported. For a conversion from an **Object**, its message shows `{0}`, `{1}` and `{2}` in place of the two types and the conversion. + +```tb check_build slot=module +[EnforceWarnings(TB0035)] +Public Sub UseFirst(ByVal fonts As Collection) + Dim f As StdFont + Set f = fonts(1) ' TB0035 + Set f = CType(Of StdFont)(fonts(1)) ' no warning +End Sub +``` + +### TB0036: Assignment to an Object With No Default Property +{: index="TB0036" } + +An assignment without **Set** to a variable of a class that has no default property to take the value, *Assignment to class that does not seem to offer a default property-put member*. At run time the assignment raises error 438, *Object doesn't support this property or method*. Assign to one of the object's properties, or use **Set** to assign another object. + +```tb check_build slot=file +Class Counter + Public Total As Long +End Class + +Module Usage + Public Sub Reset() + Dim c As New Counter + c = 0 ' TB0036: Counter has no default property + c.Total = 0 ' no warning + End Sub +End Module +``` + +### TB0037: Implicit Conversion to a Delegate Type +{: index="TB0037" } + +A value that is not a delegate, such as a **LongPtr** that holds a procedure's address, a **Long** or a **Variant**, assigned or passed to a [**Delegate**](../../tB/Core/Delegate) type: *Implicit conversion to delegate type. Use CType(Of ) to explicitly convert the delegate to a different type*. The compiler cannot check that the value is the address of a procedure that matches the delegate. [**AddressOf**](../../tB/Core/AddressOf) of a procedure assigns without this warning, and [TB0026](#tb0026-mismatched-delegate-types) checks the procedure instead. **CType(Of** _type_**)** makes the conversion explicit. + +```tb check_build slot=module +Private Delegate Function LongTransform(ByVal x As Long) As Long + +Private Function Quarter(ByVal x As Long) As Long + Return x \ 4 +End Function + +Public Sub UseIt() + Dim p As LongPtr = AddressOf Quarter + Dim t As LongTransform = p ' TB0037 + Dim u As LongTransform = CType(Of LongTransform)(p) ' no warning + Debug.Print t(10), u(10) +End Sub +``` <!-- BETA 1007 (tbbuild, every warning set to WARNING in project.warnings): none of these drew TB0010, TB0011, TB0017, TB0021, TB0027, TB0028 or TB0033. @@ -429,5 +529,30 @@ Reports a duplicate definition as a warning: *Duplicate definition, consider cha TB0015 is a WARNING, TB0030 a HINT, in a project whose project.warnings lists are empty (the console template, as in a new IDE project). The compiler's message texts quoted above are from twinBASIC_win32.dll and - twinBASIC_win64.dll; TB0029's message is in the win64 one only. The IDE's list - (ide/main.js) gives TB0033's row the id TB0032. --> + twinBASIC_win64.dll; TB0029's message is in the win64 one only. + BETA 1034 (tbbuild, a project with empty project.warnings lists, as the Standard + EXE and ActiveX DLL templates have, then [EnforceWarnings]; BETA 1033 the control): + the messages of TB0001 to TB0037 are in locale/en-gb.lang; the IDE's list + (ide/main.js warningsTable) has TB0034 to TB0037 and gives TB0033 its own id, and + its Project Settings code sets TB0015, TB0030 and TB0034 to HINT. + TB0015: a Declare of msvbvm60's GetMem4 is a HINT, and follows IGNORE and ERROR. + BETA 1033 reported it as TB0015 too, and the olepro32 Declare as TB0015, a WARNING. + TB0034: the olepro32 Declare, a WARNING at IGNORE, HINT and ERROR and under + IgnoreWarnings and EnforceErrors, win32 and win64 (bugs/tb0034-level-ignored); + the message's {0} and {1} are empty (bugs/warning-message-names-blank). + TB0035: not reported with no level (bugs/tb0035-default-not-reported); reported + when named in project.warnings.warnings or EnforceWarnings. Drawn by an Object + or a Variant to StdFont, a project class or interface, Set and Dim ... =, a + function As Object, an Object argument, a Collection item, o.Font late bound; + {0} {1} {2} left for every Object source. StdFont to StdPicture, IUnknown to + StdFont, class to interface and back are TB0020. Run time: a String item to + StdFont raises 424. + TB0036: c = 3 on a class with no default member (BETA 1033: TB0022); StdFont, + whose default is Name, draws nothing; a Collection draws TB5092 Missing + argument 'Index'. Run time: 438. + TB0037: a LongPtr, a Long or a Variant to a delegate, by Dim ... = and as an + argument (BETA 1033: TB0026); AddressOf and CType(Of) draw nothing; the + delegate made from a LongPtr calls the procedure. TB0022's and TB0026's + samples still draw TB0022 and TB0026. TB0022's message in BETA 1034 is cut at + its "; " by the IDE's language-pack reader: "Suspicious array assignment" + (bugs/language-pack-semicolon-cut, asserted by the language lane). --> diff --git a/docs/IDE/Code/Editor.md b/docs/IDE/Code/Editor.md index 10aebe597..9303e7660 100644 --- a/docs/IDE/Code/Editor.md +++ b/docs/IDE/Code/Editor.md @@ -257,10 +257,10 @@ Paste on a blank line, or with the caret at the end of the indent. Pasting at th ## Rename Symbol and Change All Occurrences -**Rename Symbol** is on the right-click menu and has the key <kbd>F2</kbd>. It opens a box over the word with its name selected. +**Rename Symbol** is on the right-click menu, which shows the key <kbd>F2</kbd> beside it. <kbd>F2</kbd> opens the [Object Browser](Object-Browser) instead, in the editor as everywhere else. -> [!NOTE] BETA 1005 -> Rename Symbol renames nothing. Typing a new name changes the box, but <kbd>Enter</kbd> and <kbd>Esc</kbd> do nothing, and the box stays open until you click in the code. To rename a name that is used in one file, use **Change All Occurrences**. For a name used in several files, use the [Find / Replace](Finding) panel with **Whole Word Only** and **Current Project**, and replace one match at a time, because **Replace All** does not work in project scope. +> [!NOTE] BETA 1034 +> Rename Symbol does nothing: choosing it from the right-click menu opens no box and changes no name. To rename a name that is used in one file, use **Change All Occurrences**. For a name used in several files, use the [Find / Replace](Finding) panel with **Whole Word Only** and **Current Project**, and replace one match at a time, because **Replace All** does not work in project scope. **Change All Occurrences**, on the right-click menu only, gives a cursor to every occurrence of the word under the caret in the file. Type the new name to replace them all. The match is on text, not on meaning: the word is also changed inside strings and comments. A longer name that contains the word, such as `totalPrice` for `total`, is not changed. One <kbd>Ctrl</kbd>+<kbd>Z</kbd> restores all of them. Other files are not touched. diff --git a/docs/IDE/Code/Images/Object_Browser.light.png b/docs/IDE/Code/Images/Object_Browser.light.png new file mode 100644 index 000000000..66d6d271f Binary files /dev/null and b/docs/IDE/Code/Images/Object_Browser.light.png differ diff --git a/docs/IDE/Code/Images/Object_Browser.light.svg b/docs/IDE/Code/Images/Object_Browser.light.svg new file mode 100644 index 000000000..332ba26c7 --- /dev/null +++ b/docs/IDE/Code/Images/Object_Browser.light.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1162" height="857.5" viewBox="59 11 1162 857.5" data-clip="59 11 1162 857.5"><style>text{white-space:pre}@font-face{font-family:"f0";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f1";src:url(data:font/woff2;base64,d09GMgABAAAAAAWAAAsAAAAACVgAAAUyAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoGYACBIAqLBIhpATYCJAMkCyIABCAFgggHIBtYByjGh8dNe58ES8AToE5V57Qrc0EmJnSi9M5hYjA1YGqeTp2Jy2lj4Q+QpnhxKL9G035ha1rWZRsk0ET2sDFBujiiqamIV02Hc/l1IAAYpCANolp1Gtmg6tfZNQAm0AAQDiMupkkmmQIxgL24CCADzFOgQuPWIogp8DbNetTuhv1Cv7LBJAtAFKmL7a7EK6rVVJIDBaIgjQn/Qyw0oKAS+gsuYZgwRvhXmCHMEzYK+4SjZTXKmpcNKBscDgNCv02/mvfxk3gP7+ZdfHe+GV+Lt3LHuV3cQm4+CGLRyGqwrNWozfFUgCyuvS9KrwviBARikUWgvJqWRaAX29KMVEHTYlqhlMmztga9wqilOI6mFXLN1ahMZgUrYYaaGOt0EgdnZ8DautoMDqN9ciKfmW7MyDSkZXDpDiVRQPPshAELl++0Gx1Og+3Y59v4tp7T+90HznjPHSo9eNZGvCc2uNcfd7pnePylM70++/AR2i7fwe+BO2vW9qTNlhVrFyyIWli4cpt9W+a62NK1hlDFFZu5wOUrVXxbHFa+qCpXXGSwFhudVlLMpTOegDvIsgQA/5yV7dJ4J5PB8s15pIFIkjEvOcE+UhDcsCgtcPxoiiEsLFy3y99s5S7jqqVLMkInDycF1i/ekLx8S6qDJUw2GNKW5cExzQyEMRC7ZzGZZ3WyYBCFtp7Tu5413cY7g1fObbp6loFn59rSdbu8O9a4V29nnLVRK7vIYmYSKhfn1iF1c6xVEtn4wqq2uqSOITejckoCY+YsadlcLdTms9IL+Xg2MbVKZo5jJusNwh1YtmLO3Gwf651Z6vfPmOFzGlnexnTlGIOTbcvaYZyNdRAGhLAIpLZvp+rk3G7c+JDuUNgdqlcLdt0vbiVUauLfgF3W03fuvPz16/W9e2fvHP1Dopc0tPG+6nK/zl9F79fD91/NWndqkanmHQp7wGdK2phZL3NjvXJi4vsHcTkPix9mo4FPFtLMacVQe6mgXML3wCJTsz/DrSplXn3gaPm1u+XCt+xur1pFrTJ/aDWplDPK35xuYW4lfDE0NtfVfbNTo8+ePpuvi0G7Hcrhp4dX5lalhji5Xq4IS9WKytNtOjQoiG91+N/GgQR9oAm5YwL+hroGVSpjkanFH2+Gx+yrn9prwxrLBXn0qemtQ3Hv9dRefsXH8lqkNHbPyHgwX2bXx0436UyuhqaGiDJ9/G/3f+Ptn3NzYfzIDaOCD4I5s+OHS2bpOuiSddmu2JsZZ/7XW6HrkFtdBy+rQUo66qv1jN9l7N4jp0f3HHsx2WHEl72WIsut4O6lRUv3zDk1AZ2as2etUF7fiIjIgTvJasnUiKmfV2tPDowcjw88qV392W4qWU12dmywQqn7T6eudGXN6jETWkjku7Seh1fbN0Hyod4XR/buroGk58iLvXsNt5lo0ox6MubzmD/O9Dl+tYNOb9Kn/KPn+C8AABAp3gGsxncoEh9DeI7nigRyszYIG0iUN2vRG6GokOLNPlR+DlBF5RwCgABjlsq6dlQXfZKxJAsAxiSvdwsTbuRfJOciiwwiQCHA5iDJ2qL63QQE6hFxA+BiAkBDSmA8CDJgjOFFMvQABULLQaACJtQivUpN6eFMO8QwIbpcsuhgUA/le7NIwRh0xUB0Q2+YPAAt0B09UYJ+6IwhcEwlh2Aoem+Im5GPnF48Dzb0KnjzUYL5HuB1hfgQmOFQ5LilBJ3RT2wJ1wTf7TrZjJoPx7ujF1ytZRAsyOV7XMi6hO0n8kDkPBHqDwqZewoAAA==)}@font-face{font-family:"f3";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f4";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f5";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f6";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f7";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f8";src:url(data:font/woff2;base64,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)}.t0{font-family:"f0";font-weight:normal;font-style:normal;font-size:9.945px;fill:rgb(255, 255, 255)}.t1{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:10.9395px;fill:rgb(255, 255, 255)}.t2{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(255, 255, 255)}.t3{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.05px;fill:rgb(0, 0, 0)}.t4{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.05px;fill:rgb(109, 109, 109)}.t5{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.05px;fill:rgb(255, 255, 255)}.t6{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:11.7px;fill:rgb(255, 255, 255)}.t7{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:11.7px;fill:rgb(122, 122, 122)}.t8{font-family:"f4";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(255, 255, 255)}.t9{font-family:"f4";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(122, 122, 122)}.t10{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(128, 128, 128)}.t11{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(102, 102, 102)}.t12{font-family:"f0";font-weight:normal;font-style:normal;font-size:11.05px;fill:rgb(56, 56, 56)}.t13{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:11.05px;fill:rgb(206, 206, 206)}.t14{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:11.05px;fill:rgb(24, 24, 24)}.t15{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(170, 170, 170)}.t16{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(43, 43, 43)}.t17{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(82, 82, 82)}.t18{font-family:"f1","f2";font-weight:bold;font-style:normal;font-size:13px;fill:rgb(0, 0, 0)}.t19{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.7px;fill:rgb(32, 32, 32)}.t20{font-family:"f0";font-weight:normal;font-style:normal;font-size:12.09px;fill:rgb(0, 0, 0)}.t21{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(10, 27, 10)}.t22{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(35, 120, 147)}.t23{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(11, 33, 111)}.t24{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(56, 91, 169)}.t25{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(234, 140, 0)}.t26{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(128, 161, 165)}.t27{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(165, 99, 13)}.t28{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(177, 85, 31)}.t29{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(185, 99, 0)}.t30{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(141, 94, 175)}.t31{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(0, 0, 0)}.t32{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(147, 144, 0)}.t33{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(69, 126, 18)}.t34{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(187, 149, 106)}.t35{font-family:"f5","f6","f7";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(103, 159, 30)}.t36{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(103, 159, 30)}.t37{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(168, 115, 0)}.t38{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:11px;fill:rgb(165, 164, 164)}.t39{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:12.155px;fill:rgb(255, 255, 255)}.t40{font-family:"f0";font-weight:normal;font-style:normal;font-size:11.05px;fill:rgb(255, 255, 255)}.t41{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(0, 0, 0)}.t42{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(168, 168, 55)}.t43{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.115px;fill:rgb(128, 128, 128)}.t44{font-family:"f3";font-weight:normal;font-style:normal;font-size:12.35px;fill:rgb(128, 128, 128)}.t45{font-family:"f3";font-weight:normal;font-style:normal;font-size:12.35px;fill:rgb(0, 0, 0)}.t46{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(206, 206, 206)}.t47{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(24, 24, 24)}.t48{font-family:"f8";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(139, 118, 29)}.t49{font-family:"f0";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(255, 255, 255)}.t50{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(255, 255, 255)}.t51{font-family:"f8";font-weight:normal;font-style:normal;font-size:11px;fill:rgb(70, 83, 101)}.t52{font-family:"f8";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(41, 56, 81)}.t53{font-family:"f3";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(104, 118, 138)}.t54{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(22, 34, 51)}.t55{font-family:"f3";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(255, 255, 255)}.t56{font-family:"f3";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(67, 84, 106)}.t57{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(117, 117, 117)}.t58{font-family:"f8";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(115, 129, 153)}.t59{font-family:"f8";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(149, 96, 9)}.t60{font-family:"f3";font-weight:normal;font-style:normal;font-size:12.5px;fill:rgb(36, 49, 70)}.t61{font-family:"f8";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(29, 79, 145)}.t62{font-family:"f8";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(20, 108, 62)}.t63{font-family:"f3";font-weight:normal;font-style:normal;font-size:12.5px;fill:rgb(255, 255, 255)}.t64{font-family:"f8";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(107, 64, 164)}.t65{font-family:"f8";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(56, 78, 145)}.t66{font-family:"f8";font-weight:normal;font-style:normal;font-size:15px;fill:rgb(34, 54, 84)}.t67{font-family:"f3";font-weight:normal;font-style:normal;font-size:10.5px;fill:rgb(81, 101, 129)}.t68{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.5px;fill:rgb(99, 112, 134)}.t69{font-family:"f5";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(32, 55, 86)}.t70{font-family:"f3";font-weight:normal;font-style:normal;font-size:11px;fill:rgb(104, 119, 138)}</style><defs><image id="d0" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAPklEQVR42u3UsQ0AMAgDMOj/P6cvsLbYc5YglCoAAAAAAAAAAAAA/tTTYJI8U6p73Ots/wAHsAIAAAAA7HIBf0YECJY4xmAAAAAASUVORK5CYII="/><image id="d1" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAAgCAYAAACPb1E+AAAEyUlEQVRYw+2YX0xbVRzHP7ctfwKs60ARHeKWuJGhwzCMy/bi3NRsi/FlIyGIS0g0/NEEgW3sZWa+SGLGRnQ+mLCYLJPQYMxmIjCM00RdDB1jyBJGkWA7BOrEdqWM0d7b40PvLW1pu0IEXvZNTnruPefc+z2/P9/z64VH+H8gqb9FwJuAYZXfPwtYgV8BR7yJLwNzgFjD9gD4FtgVy5JfA4e6u7vJzc1dVTPOzMwwNjbGpUuX6OjoQAihAK1Ag2rlIK4Cwu12i7WCoiiir69PHD58WLPsb0BmKMkfATE7OyvWGh6PRzQ1NWlErwB61ERJXk0XWywWhoeHA7EmSWzevJkdO3aQmppKeno69fX1uN1umpqaXgeqgM9RM2vVLFlVVbUocUpKSoTdbg/OcTgcIj8/XwB3gJSHS45PhsFhuD0G7ll46jEoKoCnnwyM358Dy83AHEWB556FXS9Cenq8p3qAN1QvvtXR0fG2x+PRtbe3YzQayc7Opra2lpqamlxgb5CkwRCF7+x9aLkAg/bApiV18+1XoPQ12L4Vzl2AyWl1zA+9/dB9FY6/D9mPxyKpqMkxD3wPTHZ1dZ3o7OyktLQUgN27dwclUqf1dDrd4kf9dA1u/QmSApK80PCB+Tv48CxM3QWdHD4+NQVtZhAi0VD9GHCdP38eoa7JycnRxgp0cZdevxX+8sgmfCD5AO2euhmdDDf64N69hCUTGOrv78fj8QCQmZmJXq8HyIkdk8IPD+ZUy6muDLrcvxD3odeSPzwn5ueXkvg+WZZRFCWY+UEnaz1ZliPOIh3kPRFipSgt0s2SstBSDLB+faIEjUBhcXExRqMRAKfTqRG+GyTp9/sXL32paDExovVVYkELA3tfhdTURAgagGbAVFlZGcwNu92ujd+ML0EvbIfiArgxEO5KKVTmoiAzC/YfiPfkJKBcPfoOATuPHDnCwYMHA5EmBD09PdrcTl0gVWPt0QDvVMDWTeGuDLVYJNLSoLYONmyIOqxaKk0tJD7R6/U7T548SUtLCxkZGQCMjIxw6tQpgEHgmqQWGK+43W7WrVsX/cX3XNDcDLax+I5LSYFjjbBla8wpVquVoaEhkpKSMJlMbNy4kby8vGCiOJ1OKioquHz5sh84APRIwA/AXqfTiclkik1gehrONsMde2yr19ZDYeGyz3WbzUZjYyNmsxngNHAMQAd4YyZOKLKyoP4oPLMpSoQlQcPxZREUQuBwOLh48SJ79uzBbDYL4DPgRGhmyQmRDCgs1DXAuU/hj5HAveRkqD8G27YlRMpqtTI6OorX62V6epre3l5aW1s1uXEAR4GvIoP+G0BMTk4mXsrMzAjRfFqIqneFGB5eUnFbXl4eWQXNA9eBOlUvo2rUPBBU+oSQkQE174HLBQtn7EOhKAo2mw3gb+AD4C/gtnodF18CYfXcSsHlcmnW+3kpcasDbADj4+MrXpUPDAxo3V+WurYQUMrKylb0z9jExITYt2+fFoNblkLQAPwOfNHW1lbt9Xqprq4OreXCpOKhZYzPhyzLCCHwer34/X5kWcbhcHDmzBksFgvAR8DIcjyRDJxT5WilPgC41AyWlvuZRcPzwH4gO4G13ggtk9VDHU0xQn7/BbqAfx592VpL/AfJs7Z5JsGBxAAAAABJRU5ErkJggg=="/><clipPath id="d2"><rect x="0" y="0" width="1204" height="25"/></clipPath><clipPath id="d3"><rect x="523" y="3" width="671" height="17"/></clipPath><clipPath id="d4"><rect x="0" y="25" width="1280" height="32"/></clipPath><clipPath id="d5"><rect x="1" y="26" width="1279" height="30"/></clipPath><clipPath id="d6"><rect x="313" y="32" width="58" height="19"/></clipPath><image id="d7" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil1 {fill:url(%23id0)} .fil2 {fill:url(%23id1)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="-0.915429" y1="67.0903" x2="129.514" y2="67.0903"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" x1="19.1934" y1="48.6309" x2="33.3042" y2="48.6309"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M17 17c-18,18 -18,46 0,64l0 0c9,9 20,13 32,13l0 0c8,0 16,-2 22,-6l0 0 38 38c5,5 12,5 17,0l0 0c2,-2 4,-5 4,-9l0 0c0,-3 -1,-6 -4,-9l0 0 -38 -38c10,-17 7,-39 -7,-54l0 0c-9,-9 -20,-13 -32,-13l0 0c-12,0 -23,5 -32,13zm9 55c-13,-13 -13,-33 0,-46l0 0c6,-6 14,-10 23,-10l0 0c9,0 17,3 23,10l0 0c13,13 13,33 0,46l0 0c-6,6 -14,10 -23,10l0 0c-9,0 -17,-3 -23,-10l0 0z"/> <path class="fil2" d="M30 32l0 0 0 0c-1,0 -2,0 -2,1l0 0c-8,8 -8,22 0,30l0 0c1,1 1,1 2,1l0 0c1,0 2,0 2,-1l0 0c1,-1 1,-3 0,-4l0 0c-6,-6 -6,-16 0,-21l0 0c1,-1 1,-3 0,-4l0 0c-1,-1 -1,-1 -2,-1z"/> </g> </svg>"/><filter id="d9" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0.5" intercept="0.25"/><feFuncG type="linear" slope="0.5" intercept="0.25"/><feFuncB type="linear" slope="0.5" intercept="0.25"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="1.1"/><feFuncG type="linear" slope="1.1"/><feFuncB type="linear" slope="1.1"/></feComponentTransfer></filter><g id="d8" filter="url(#d9)"><use href="#d7"/></g><image id="d10" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAIBklEQVR42u2bfVAU5xnAf/chBBEasOhqVFAUrYqzKGOSoWpS40laBttGUTMT6zg4YIhi4tVMiHYYGUyiFwfJKOg1kzGTjBFITFucNBhbjeMY40hWMdVUiIgUz+IHICCHHvSPW5eDcPJxt3s3Y5+/bp99933399z7+TzP6lBZLKIYBTwJzACmAFGAADwOBMnF7gINgA2oBi4C54BTZkmqVvP9dCpBPwskAQuAWA+rqwAOA6VmSfqn3xrAIooCsAJYDogq/WESsB/40CxJNr8wgEUUxwBrgNVABNpIPWAFCsySVOszA1hEcT2QKY9rX0g1sNMsSXmaGsAiinOAjfI49wcpBbaZJen4QB80DAI+A8gHZuE/EgMkmgShrcxmO61KD7CIYgiwGfgj/i3bgRyzJN3xWg+wiOJYYCuw1hdEYfHxLCko4FpdHa1XrvRVPAGIMAmCVGazNXlsABk+B1jlC/ifiSIpFgvhgsCkhASqL12i9erVvh6bCYSbBOFMX0Yw9KPbb/UVfGhsLEt37CA0PByAIYGB3NfpuHLkSH8eF4EQkyAcLbPZ2t0V0vdRyWYg1RfwIVOnsuTddwkdPlzRXTh5kmNZWQOpJlVmGHgPkGf7XF/AB0+eTMrOnYSNGKHo/n36NIfS0wdTXYJJEG64Wx0MD1nn84EQreGHRkezND+f8JEjFV3ld9/xt7Q06OwcbLVxJkH4tsxmq+nvENgIjNIaPigykpT8fMIFQdFdPn+ev6an0+lweFL1KJmp7x4gb2/XaQ3/2JgxpOzezc+feELR1Vy4wMHVq+m0272yWTIJQmOZzfaN242QfLA5rvXePmDkSJbu3cuIceMUXe2lS5SsWoWjudnbZ4c5rgeonkNgjebwERGkFBZ2g7/24498mpbmbXhktjW99gD5PH9OwyMtQ4YPZ8nevYyaMEHRXb9yhaLVq2mvr1fzKD3jgT/BtQes0BLeEBrK4sLCbvD1tbUUv/yymvDIjCt6GwLLNYMfNozFViujJ05UdDfr6ijKyMBeV6fFKyzvZgDZhydq0bI+KIjfW62MiYlRdLevX6do3Traamq0+g9EmVnpAZo4NnQBAfzOamXclCmKrqG+nqL162mtqtJ65U1yNcACLeB/a7USNW2aomu6dYviDRtovnjRFzvuBQA62W9/WVV4g4Fkq5WJcXGKrrmhgQNmMw1nzvjSeTJejzNooW5fKyzsBt/S1ERJVpav4QGe1OOM2Kgmv9mzh5j4eOX6bnMzn27ezM2TJ/EDmaHHGa5SRZ7fvZsps2cr120tLXyWnU3911/jJzJFr9bWd+F77zH16aeVa/vduxzMycHWP2+OVhKls4jif4DRXp1e8/KYMW+eqm/e2dnJiZISTm3d6kk1dUacUVqvyXyLRRP44598wult2zyt6nEjXSFqj+WZt99GnD9fXfiODo5+/DHlO3Z4xQejs4hiByqFyT2VSS+9xK/XrsU4ZAgAHR0d/GPfPs7m53vNnkacyQlD/Q1+8sqVPJ+RgcFodMI7HBx+/33OFxR4s5m7RpyZGX5lgF+kprIwLU2BdzgclO3Zw7+sVm831aDHmZbiNzI9PZ3E9PQu+Pv3+fuuXWrAA9j0OP1kfiEzXnmFBamp6A1OX+39e/c4lJ/PxQ8+UKvJaiPOhCSfi5iZybMrVqDXOw+o99rbOZSXR9X+/Wo2e9GI0w/oU5m5YQPPvPgiOhm+3W6n1GLhckmJ2k2fMwKnfAkfv3Ejc5ctQ6dzrsTtbW385Z13qPn8cy2aP6WX8/AqvF2zMSyMscnJDy0z+403usHbW1s5mJurFXyFWZKqH3iEDnu79uhFi4hNTHR7/6lNm5iTkqLAt7W08NmWLdSWlmrV+Q5Dl0vM662OnzWLyOnT0Rl+Gn9NyM4m4YUXuvsIsrOp+/JLLUdfqWIAOQNT8mbto2NiGBoSwoQlS7rp5+Tk8NSiRcp1a1MTJZs2YfvqKy3hpQdZp65xAa+tN6GxsUpsf7LLyXDeW28xO6nLAd3S2EhxVhb/PXZM67lXYXU1wIc4w0aeH2IWLlR+R06bhs5g4FfbthHvMic0NzRQ9Prr3DhxQmv4epm1uwHkWJlX9pvjYrvyo4eGhLD4o4+IW9DleW+6dYsDZjO3TvlkBba65hn3jA4XeGNrPCo6urtBXAIhjTduUPTaa77yCFfLjPRqADluvtOTFsYkJREUHNzrvTu3b3MgM5PGs2d9te/a2TO5+idrVJnN9o1JEOJxpp8OWOJWrmT0pEm93gsMCiJ67lzCRRG7Xs+dykpNlz2zJGX2VPaaJGUShFogkUEkSf0yI4NhYWFu7z8WHIwwfjyxzz1HbEoKw2fN4l5gII0//KAm/DXg1X4nSclZ1wNOkQuIiCBi7Nh+lXU4HLTeucM9ux1DQAC6gAA1DZDrLpPc6O4JsyTtsohiJANIjo5OTlYcGT2ls7OT2zYbdZWVVJeXc/nQIbUTIR7IdrMk7XJ7Zunj4RwgjH5mi0bNnNntuunmTa5VVVFTUUHlF1/4IgT+Z5nBrfTpDXZJlv5DX2WXFRdjb2nh6vffU3nkCA3l5b48ae8DNpsl6apHBnAxwp/wUd7wIP/5LX3Bu10Felkam0yCcFQeMgl+Dr8deNMsSf2aYAYcEJGTqN/EB6m0/Vjqch824Q26B/ToDadNgvAtznSzGD+BLwVeNUvSgJ2I//9sztM3eKQ/nOxhiEfz01k3xnj0Pp5+iDGi8OPP5/8HjVjHnRCM1AoAAAAASUVORK5CYII="/><filter id="d12" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0.8" intercept="0.1"/><feFuncG type="linear" slope="0.8" intercept="0.1"/><feFuncB type="linear" slope="0.8" intercept="0.1"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="1.5"/><feFuncG type="linear" slope="1.5"/><feFuncB type="linear" slope="1.5"/></feComponentTransfer></filter><g id="d11" filter="url(#d12)"><use href="#d10"/></g><image id="d13" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABcklEQVRIx+2UT0sCQRjGnxVDTWFbhJYozKP059gt8tzFc9A38NbZDyF+Bq+d/AwSXWIJRfZgsLnW6k7rsGEHTXw7yIKU/2bTINjnNsy872/eYZ4HCPTfJU0vDE0jOZ2GoijSvIJygVP26gXRHRlbiQQAYDwaYeC6eO8MkTk/khYBwyK3m1wIAPYxcF24hjFpEoshIstQj5OwTZPubyPI3exKKzXknNOsvbauE+ecXptNKhdmn9GrDXIYI4cxqhRt8g30YHq1sbRJKd8j2zTJYYxK+R4JA0VgnipFmzjn1NZ1MaAHa9XqJPobvdrvU4YWFcRVFR/dLlKnJ5Io8OlhGwBwkXOwFDgNO8hkJD9+y16nJABQ1P5y4G9hvnwYV1XMswiAheHgBQQAjIef84HPjSQOYaxlkrNLC8Ae6nfpv8lMZlnELOvHC4U2ATM0jcLRKNqP/c1P1qrVVzP9OuSZPYAFsLXCwn6B/bcxgM3kbSAhfQEDJyMTHtJSMgAAAABJRU5ErkJggg=="/><filter id="d15" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0" intercept="0.5"/><feFuncG type="linear" slope="0" intercept="0.5"/><feFuncB type="linear" slope="0" intercept="0.5"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="0"/><feFuncG type="linear" slope="0"/><feFuncB type="linear" slope="0"/></feComponentTransfer></filter><g id="d14" filter="url(#d15)"><use href="#d13"/></g><image id="d16" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABd0lEQVRIx+2Wz0oCURTGP2UqaSiRFlMo4iqEauGiZbUOoheIXsB1u9auZZ6hTWvfIJB2IaHILAxujjg4t/E2MFEkelopis4fzaJgvt3Aufd37vnzMUCo/66IX4BWrtPm9irW4nFEJQkA0HMcfLzauLtN4rKQcL1DCEE2Y8jkcqOYqFtwqWiSqeuk7O1gRZbxblmwGYPNGAb9PjZSSZxdAaxSoW8/u1Q0yeKcLM5JK9dnXnhzLajdaJAQglqaRm4v9E1IzXfJ4pxMXSc136UgJXeDBgK2NI2EEFQqmoFL5Qb1Bar5rmeJvNSs1qbOzgJODM3xuQUAeHpYn7vv6YP9yFunA1lR4JXwBDChOACAk4t0ZJFhS2WzvtDoshd7HDpL0vjH4LM3GnmvhR72Z5GEJoC1+wyOdoHDUwMoeB+0GQsEeK5veQdwwyBuGPRTXjrVw9ajAykWW45lBdVw+ZvV2u9DFzGBEBpClwqdy0uHPum8DMK/wb+jL2JNMA0ISjOzAAAAAElFTkSuQmCC"/><g id="d17" filter="url(#d15)"><use href="#d16"/></g><image id="d18" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 386.972 386.972" style="enable-background:new 0 0 386.972 386.972;" xmlns="http://www.w3.org/2000/svg"> <defs id="defs37"></defs> <g id="g4"></g> <g id="g6"></g> <g id="g8"></g> <g id="g10"></g> <g id="g12"></g> <g id="g14"></g> <g id="g16"></g> <g id="g18"></g> <g id="g20"></g> <g id="g22"></g> <g id="g24"></g> <g id="g26"></g> <g id="g28"></g> <g id="g30"></g> <g id="g32"></g> <path style="fill: rgb(53, 115, 49); stroke-width: 0;" d="M 31.997 273.071 C 31.852 222.638 31.897 144.641 32.093 99.743 L 32.452 18.113 L 44.974 24.781 C 100.819 54.513 349.23 188.382 352.864 190.701 C 353.981 191.415 352.659 192.318 342.13 198.033 C 300.675 220.537 77.511 340.606 49.625 355.411 C 42.54 359.171 35.736 362.815 34.5 363.508 L 32.256 364.767 L 31.997 273.071 Z" id="path114"></path> </svg>"/><filter id="d20" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="1.5"/><feFuncG type="linear" slope="1.5"/><feFuncB type="linear" slope="1.5"/></feComponentTransfer></filter><g id="d19" filter="url(#d20)"><use href="#d18"/></g><image id="d21" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 365 365" xmlns="http://www.w3.org/2000/svg"> <defs></defs> <g> <rect x="74.5" width="73" height="365" style="fill: rgb(21, 40, 95);"></rect> <rect x="217.5" width="73" height="365" style="fill: rgb(21, 40, 95);"></rect> </g> </svg>"/><filter id="d23" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="100" intercept="-49.5"/><feFuncG type="linear" slope="100" intercept="-49.5"/><feFuncB type="linear" slope="100" intercept="-49.5"/></feComponentTransfer><feColorMatrix in="r0" result="r1" type="matrix" values="0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0 0 0 1 0"/></filter><g id="d22" filter="url(#d23)"><use href="#d21"/></g><image id="d24" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 330 330" style="enable-background:new 0 0 330 330;" xmlns="http://www.w3.org/2000/svg"> <defs id="defs569"></defs> <g id="g536"></g> <g id="g538"></g> <g id="g540"></g> <g id="g542"></g> <g id="g544"></g> <g id="g546"></g> <g id="g548"></g> <g id="g550"></g> <g id="g552"></g> <g id="g554"></g> <g id="g556"></g> <g id="g558"></g> <g id="g560"></g> <g id="g562"></g> <g id="g564"></g> <path style="fill:%23782121;stroke-width:0.458971" d="M 30.062587,165 V 30.062587 H 165 299.93741 V 165 299.93741 H 165 30.062587 Z" id="path743"></path> </svg>"/><g id="d25" filter="url(#d23)"><use href="#d24"/></g><image id="d26" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 14a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2m11.46-5.14l-1.59 6.89L15 14.16l3.8-2.38A7.972 7.972 0 0 0 12 8c-3.95 0-7.23 2.86-7.88 6.63l-1.97-.35C2.96 9.58 7.06 6 12 6c3.58 0 6.73 1.89 8.5 4.72l2.96-1.86Z"/></svg>"/><g id="d27" filter="url(#d15)"><use href="#d26"/></g><image id="d28" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a2 2 0 0 1-2-2a2 2 0 0 1 2-2a2 2 0 0 1 2 2a2 2 0 0 1-2 2m1-20v11l4.5-4.5l1.42 1.42L12 16.84L5.08 9.92L6.5 8.5L11 13V2h2Z"/></svg>"/><g id="d29" filter="url(#d15)"><use href="#d28"/></g><image id="d30" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a2 2 0 0 1-2-2a2 2 0 0 1 2-2a2 2 0 0 1 2 2a2 2 0 0 1-2 2m1-6h-2V6l-4.5 4.5l-1.42-1.42L12 2.16l6.92 6.92l-1.42 1.42L13 6v10Z"/></svg>"/><g id="d31" filter="url(#d15)"><use href="#d30"/></g><image id="d32" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><g id="d33" filter="url(#d9)"><use href="#d32"/></g><image id="d34" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACkElEQVR42u2bv2sUQRTHv2+SnIlCEBFCIlYiQoo0KlrlD7CytUqjWNhYaW3jP2EK7RQs7RRB0EbRQgVBRAWLIIqimLvbH/P9WriRNdyZ7OUSd8/3mmWHnZn3/czbt29hBnD7v812crIkSefHxsbOhmALZja31i5phdILRi63WhMvR45yjHGJ5Adtwkiu5DGeHwnh3SQ5EMm3GsBIvut2k4ONFU9ykWSmLRjJjOTpxonPYzwpaSPxnRjZltTeiEOex8XGiE/SdB/Jdu8VVSdG3siybLbcJ82y2UheJ7naJxK6SZrONCPhkQ/7iLifZVnrr33zOE7ybp/+T5qw+vN9nL9ZMX9c6zVOnudH65747vQQ/2rAT+ezHmM9qDuAP959/nL68GAAuJ8U1wHoDNvn8Z5CpJbIqyGEuSqDSZpa19A1syuSBvWvA2D377LVbFLSLQCxwqJ8NrNLIYTupkthko/N7PioVKKSnoYQjlUBEM0sjBAAhBB6au0nMh2135FKOUDSOTNbLjXtkoQ0y2uvtDUxDjMDgKTQYpQubCV8QpGEVxsS7m1VyLphSM801kZanAMYtBDa4juoUuFiO/WcR4ADcAAOwAE4AAfgAByAA3AADsABOAAH4AAcgANwAA7AATgAB+AAHIADcAAOwAE4AAfgABzAoCZpodgl1m6Iv2nh78ywImC6uE5JOlVz8RcBTKzdbgfVH5L21lT8odIxnW/DHny5tGv9jaTJmomfkfSl5OPl7ZjkY2mCr5JO1ET8kqSk5NvzKv2tCmUAr0s5AQBWsTOnT6f6tLcB7CndvwdwxMzSoQMoIEwDuAegbmcJCOA2gDNmxm2JgHUgZgEcA/DoH4rOzex7EZmfqgp3K+wn54g3ax+wmTMAAAAASUVORK5CYII="/><filter id="d36" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0.5" intercept="0.25"/><feFuncG type="linear" slope="0.5" intercept="0.25"/><feFuncB type="linear" slope="0.5" intercept="0.25"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="0.2"/><feFuncG type="linear" slope="0.2"/><feFuncB type="linear" slope="0.2"/></feComponentTransfer></filter><g id="d35" filter="url(#d36)"><use href="#d34"/></g><image id="d37" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil4 {fill:url(%23id0)} .fil5 {fill:url(%23id1)} .fil9 {fill:url(%23id2)} .fil6 {fill:url(%23id3)} .fil8 {fill:url(%23id4)} .fil7 {fill:url(%23id5)} .fil3 {fill:url(%23id6)} .fil1 {fill:url(%23id7)} .fil2 {fill:url(%23id8)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="2.07709" y1="115.665" x2="33.4786" y2="115.665"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="2.07709" y1="74.4549" x2="33.4786" y2="74.4549"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="2.07709" y1="33.2465" x2="33.4786" y2="33.2465"> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="44.4802" y1="115.665" x2="75.8805" y2="115.665"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="44.4802" y1="74.4549" x2="75.8805" y2="74.4549"> </linearGradient> <linearGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="86.8821" y1="115.665" x2="118.284" y2="115.665"> </linearGradient> <linearGradient id="id6" gradientUnits="userSpaceOnUse" x1="42.1439" y1="26.895" x2="77.1777" y2="26.895"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> <linearGradient id="id7" gradientUnits="userSpaceOnUse" xlink:href="%23id6" x1="88.2252" y1="22.8115" x2="130.897" y2="22.8115"> </linearGradient> <linearGradient id="id8" gradientUnits="userSpaceOnUse" xlink:href="%23id6" x1="90.0997" y1="72.7902" x2="132.298" y2="72.7902"> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M131 20l0 0c0,-1 0,-1 -1,-2l0 0c-4,-3 -12,-9 -17,-12l0 0c-4,-3 -5,-4 -6,-4l0 0c-1,0 -2,2 -5,5l0 0 -7 9c-1,1 -1,2 -2,3l0 0c-1,1 -2,2 -2,3l0 0c0,1 -2,2 -2,3l0 0c0,2 1,2 2,3l0 0c2,1 20,16 21,16l0 0c1,0 4,-4 5,-5l0 0c1,-2 14,-17 14,-18z"/> <path class="fil2" d="M117 52c-1,0 -6,3 -7,3l0 0c-1,1 -2,1 -3,2l0 0c-1,1 -2,1 -3,2l0 0c-1,1 -2,1 -3,2l0 0 -7 3c-1,1 -3,1 -3,3l0 0c0,1 11,22 12,25l0 0c1,2 4,1 9,-2l0 0 17 -8c4,-2 4,-2 0,-9l0 0 -8 -17c-1,-1 -1,-3 -2,-3l0 0c0,0 0,0 0,0l0 0z"/> <path class="fil3" d="M71 10l-4 0c-1,0 -3,0 -4,0l0 0 -19 2c-1,0 -2,1 -2,3l0 0 3 26c0,1 1,2 3,1l0 0c5,-1 10,-1 16,-2l0 0 11 -1c2,0 2,-1 1,-3l0 0 -3 -26c0,-1 0,-1 -1,-1l0 0c0,0 -1,0 -1,0l0 0c0,0 -1,0 -1,0l0 0z"/> <path class="fil4" d="M4 131l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 0,-2 -1,-2l0 0 -29 0c-1,0 -1,1 -1,1l0 0 0 27 0 0c0,1 1,2 2,2z"/> <path class="fil5" d="M4 90l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 -1,-1 -2,-1l0 0 -28 0c-1,0 -1,1 -1,1l0 0 0 27 0 0c0,1 1,2 2,2z"/> <path class="fil6" d="M46 131l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 0,-2 -1,-2l0 0 -29 0c-1,0 -1,1 -1,1l0 0 0 27c0,1 1,2 2,2z"/> <path class="fil7" d="M89 131l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27 0 0c0,-1 -1,-2 -2,-2l0 0 -28 0c-1,0 -1,1 -1,1l0 0 0 27c0,1 1,2 2,2z"/> <path class="fil8" d="M46 90l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 -1,-2 -2,-2l0 0 -28 0c-1,0 -1,1 -1,1l0 0 0 27c0,1 1,2 2,2z"/> <path class="fil9" d="M32 18l0 0 -28 0c-1,0 -1,1 -1,2l0 0 0 27 0 0c0,1 1,2 2,2l0 0 28 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 -1,-2 -2,-2z"/> </g> </svg>"/><g id="d38" filter="url(#d9)"><use href="#d37"/></g><image id="d39" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil2 {fill:url(%23id0)} .fil6 {fill:url(%23id1)} .fil1 {fill:url(%23id2)} .fil5 {fill:url(%23id3)} .fil4 {fill:url(%23id4)} .fil3 {fill:url(%23id5)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="2.03586" y1="8.28128" x2="27.3191" y2="8.28128"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.3091" y1="124.715" x2="130.964" y2="124.715"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.3091" y1="8.28128" x2="130.964" y2="8.28128"> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="42.9215" y1="95.6076" x2="130.964" y2="95.6076"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" x1="29.3091" y1="66.5012" x2="130.964" y2="66.5012"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> <linearGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="%23id4" x1="29.3091" y1="37.3936" x2="130.964" y2="37.3936"> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M125 2l-90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6l0 0 90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6z"/> <path class="fil2" d="M21 2l-13 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6l0 0 13 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6z"/> <path class="fil3" d="M35 44l90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil4" d="M35 73l90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil5" d="M49 102l76 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -76 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil6" d="M125 118l-90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6l0 0 90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6z"/> </g> </svg>"/><g id="d40" filter="url(#d15)"><use href="#d39"/></g><image id="d41" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil4 {fill:url(%23id0)} .fil3 {fill:url(%23id1)} .fil5 {fill:url(%23id2)} .fil2 {fill:url(%23id3)} .fil1 {fill:url(%23id4)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="20.8181" y1="124.778" x2="131.217" y2="124.778"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="35.6016" y1="93.1547" x2="131.217" y2="93.1547"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" x1="4.65844" y1="42.9922" x2="87.9295" y2="42.9922"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id2" x1="91.5665" y1="61.5317" x2="131.217" y2="61.5317"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" xlink:href="%23id2" x1="91.5665" y1="29.9123" x2="131.217" y2="29.9123"> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M94 36l35 0c1,0 2,-3 2,-6 0,-4 -1,-6 -2,-6l0 0 -35 0c-1,0 -2,3 -2,6l0 0c0,4 1,6 2,6z"/> <path class="fil2" d="M129 55l-35 0c-1,0 -2,3 -2,6l0 0c0,4 1,6 2,6l0 0 35 0c1,0 2,-3 2,-6 0,-4 -1,-6 -2,-6z"/> <path class="fil3" d="M125 87l-83 0c-4,0 -6,3 -6,6l0 0c0,4 3,6 6,6l0 0 83 0c4,0 6,-3 6,-6 0,-4 -3,-6 -6,-6z"/> <path class="fil4" d="M125 118l-98 0c-4,0 -6,3 -6,6l0 0c0,4 3,6 6,6l0 0 98 0c4,0 6,-3 6,-6 0,-4 -3,-6 -6,-6z"/> <path class="fil5" d="M5 30l0 0 0 0c0,1 0,1 1,2l0 0 26 20c0,0 1,1 2,1l0 0c0,0 1,0 1,0l0 0c1,0 1,-1 1,-2l0 0 0 -13 22 0c7,0 13,5 13,11l0 0c1,8 -5,14 -13,14l0 0 -20 0c-1,0 -3,1 -3,3l0 0 0 10c0,1 1,3 3,3l0 0 20 0c16,0 30,-14 28,-31l0 0c-1,-15 -15,-25 -29,-25l0 0 -22 0 0 -13c0,-1 -1,-2 -1,-2l0 0c0,0 -1,0 -1,0l0 0c-1,0 -1,0 -2,1l0 0 -26 20c-1,0 -1,1 -1,2z"/> </g> </svg>"/><g id="d42" filter="url(#d15)"><use href="#d41"/></g><image id="d43" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil7 {fill:url(%23id0)} .fil5 {fill:url(%23id1)} .fil3 {fill:url(%23id2)} .fil8 {fill:url(%23id3)} .fil4 {fill:url(%23id4)} .fil2 {fill:url(%23id5)} .fil6 {fill:url(%23id6)} .fil1 {fill:url(%23id7)} .fil9 {fill:url(%23id8)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="1.65767" y1="101.818" x2="27.0859" y2="101.818"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="1.65767" y1="78.2745" x2="27.0859" y2="78.2745"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.0887" y1="125.361" x2="54.5217" y2="125.361"> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.0887" y1="101.818" x2="131.346" y2="101.818"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.0887" y1="78.2745" x2="131.346" y2="78.2745"> </linearGradient> <linearGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="7.63683" x2="100.452" y2="7.63683"> </linearGradient> <linearGradient id="id6" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="54.7278" x2="131.346" y2="54.7278"> </linearGradient> <linearGradient id="id7" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="31.187" x2="131.346" y2="31.187"> </linearGradient> <linearGradient id="id8" gradientUnits="userSpaceOnUse" x1="6.61183" y1="34.2703" x2="70.0121" y2="34.2703"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M127 25l-48 0c-2,0 -4,3 -4,6l0 0c0,3 2,6 4,6l0 0 48 0c2,0 4,-3 4,-6 0,-3 -2,-6 -4,-6z"/> <path class="fil2" d="M81 14l13 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil3" d="M35 131l13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6z"/> <path class="fil4" d="M125 72l-90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6l0 0 90 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6z"/> <path class="fil5" d="M21 72l-13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6l0 0 13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6z"/> <path class="fil6" d="M127 49l-48 0c-2,0 -4,3 -4,6l0 0c0,3 2,6 4,6l0 0 48 0c2,0 4,-3 4,-6 0,-3 -2,-6 -4,-6z"/> <path class="fil7" d="M8 108l13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6z"/> <path class="fil8" d="M35 108l90 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil9" d="M36 62l0 0 0 0c1,0 1,0 2,-1l0 0 31 -25c1,-1 1,-1 1,-2l0 0c0,-1 0,-2 -1,-2l0 0 -31 -25c-1,0 -1,-1 -2,-1l0 0c0,0 -1,0 -1,0l0 0c-1,1 -2,2 -2,3l0 0 0 15 -26 0 -1 0 0 18 27 0 0 15c0,1 1,2 2,3l0 0c0,0 1,0 1,0z"/> </g> </svg>"/><g id="d44" filter="url(#d15)"><use href="#d43"/></g><image id="d45" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil7 {fill:url(%23id0)} .fil5 {fill:url(%23id1)} .fil3 {fill:url(%23id2)} .fil8 {fill:url(%23id3)} .fil4 {fill:url(%23id4)} .fil2 {fill:url(%23id5)} .fil6 {fill:url(%23id6)} .fil1 {fill:url(%23id7)} .fil9 {fill:url(%23id8)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="1.66592" y1="101.809" x2="27.0941" y2="101.809"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="1.66592" y1="78.2698" x2="27.0941" y2="78.2698"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.097" y1="125.348" x2="54.5217" y2="125.348"> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.097" y1="101.809" x2="131.334" y2="101.809"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.097" y1="78.2698" x2="131.334" y2="78.2698"> </linearGradient> <linearGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="7.65214" x2="100.449" y2="7.65214"> </linearGradient> <linearGradient id="id6" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="54.7278" x2="131.334" y2="54.7278"> </linearGradient> <linearGradient id="id7" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="31.1953" x2="131.334" y2="31.1953"> </linearGradient> <linearGradient id="id8" gradientUnits="userSpaceOnUse" x1="5.02838" y1="38.6966" x2="68.3662" y2="38.6966"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M127 25l-48 0c-2,0 -4,3 -4,6l0 0c0,3 2,6 4,6l0 0 48 0c2,0 4,-3 4,-6 0,-3 -2,-6 -4,-6z"/> <path class="fil2" d="M94 2l-13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6l0 0 14 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6z"/> <path class="fil3" d="M35 131l13 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil4" d="M35 84l90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil5" d="M8 84l13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6z"/> <path class="fil6" d="M127 49l-48 0c-2,0 -4,3 -4,6l0 0c0,3 2,6 4,6l0 0 48 0c2,0 4,-3 4,-6 0,-3 -2,-6 -4,-6z"/> <path class="fil7" d="M8 108l13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6z"/> <path class="fil8" d="M35 108l90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil9" d="M39 66l0 0 0 0c0,0 1,0 1,0l0 0c1,-1 2,-2 2,-3l0 0 0 -15 27 0 0 -18 -1 0 -26 0 0 -15c0,-1 -1,-2 -2,-3l0 0c0,0 -1,0 -1,0l0 0c-1,0 -1,0 -2,1l0 0 -31 25c-1,1 -1,1 -1,2l0 0c0,1 0,2 1,2l0 0 31 25c1,0 1,1 2,1z"/> </g> </svg>"/><g id="d46" filter="url(#d15)"><use href="#d45"/></g><image id="d47" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABDUlEQVRIx2NgGO6AEca4e+3a/2179zDk5uYx3r127T8xmmHqSbGQBZdE18QJDNra2jg1eru4kuVDnBZqa2sz5OXl43S9N5GhgA6Y6B2HOH149epVhkmTJv6nm4Vl+QX086GylhYjXYN08uRJVA9KWPbBaqGXswvVfZZLKA637tmNN1sQCyZNmvgfOc/SPVsMv3x49epVlGKQ5vkQvcylez4cnIlm4rFn/+W6z/6ni4WtBx7/7z36nPapFGbZzNOv4Pz8LfcI+tJQkpshwVickWQL0S1jYGBgWH/9Pe2CdOvN9/RNNMfS9Rhl+FjpV9LALLWaeen/k0+/GRgYGBgelRoTzJ8TKU2ltPLp8AUA81FfZGxs66MAAAAASUVORK5CYII="/><filter id="d49" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="100" intercept="-49.5"/><feFuncG type="linear" slope="100" intercept="-49.5"/><feFuncB type="linear" slope="100" intercept="-49.5"/></feComponentTransfer><feColorMatrix in="r0" result="r1" type="matrix" values="0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0 0 0 1 0"/><feComponentTransfer in="r1" result="r2"><feFuncR type="table" tableValues="1 0"/><feFuncG type="table" tableValues="1 0"/><feFuncB type="table" tableValues="1 0"/></feComponentTransfer></filter><g id="d48" filter="url(#d49)"><use href="#d47"/></g><image id="d50" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAACzElEQVRIx82Wz07UUBTGv3t7y4B/MtNQNERgRickBv9L4gb7ACxY8Abu3CCueAX3wIp30LhAwpYImMDCGCRsFJEZlCitBRJgOu09xwXTyThgENIhnlWb77a/nO+ec+4FzjkEAKyurEgAFgDZIA4B8PM9PaQAIAxDC8AsALtBQBeAA8BTADC3uHBulioAuN7VtQPGYPxe9YGZ1grr25ook89mpSENHNGLhV9BENBJlgoh/Cow19mVZubX5TC0hRAAAGZGk2m6UojBtWLhVde1jqrdXKPfyGadfE+PF2svZoqyrNma/7qL/Yj8+ad36UiGAGQ5DO3J6enWdCbtA8DO9o410N8fr7GjKGp9v/zRD4KAtNYy1lNNTbIWFhHnw4gmiRnEGOibWFqthVYXCyGQzqT9UhA4pSBw0pm0H2cLAIZSfkd7u3NQKt06To9hQVlPzXza7i7sht2aeYoY+b6JJXkUCMAwDJJSulJK1zAMEn/2D2U7Ot3h4edb9frou+9SChzCPu/kvx1oGWiW3r7O10MT6btyRJaOePLt6iEs9i+kKnRSMyzUV+VZ4+WHLRCDvJD8C4aw9jRLrlRnSOxv7UVVNxLJ8GdA/o8yOffsZudx7rJ/SVU3wwfgaIbDh8/JZLg20ksAvME3X2SkuXbvCYBbGOn16tsCAJBKpWQ+l7MBYGNzU1Y+SH7ShGEIAHh4+45lKDULAFdabQuAp0knD5xbXKDKgK0ND4AbRhGZSiULLAWBz8zOMUVEAFTiwKGhZ1TJ6EiMj4+1JWmpxDmHSvJnphQQDFxUtQUuGge82dZCmtitjLX4pKflRgGVFD4ARxlCsqgcvJUJ0xDgk96rfy2+UwMZkOsbRXtsbBREZGutJZ9hEv0zUEeRtbG5OdvS3Fw98ZnZawSQALhKKTy6/yDOlpjZazJN97Tz9kRg5bblAJCmaR57wcX/HL8BWqh2IouwYt0AAAAASUVORK5CYII="/><g id="d51" filter="url(#d49)"><use href="#d50"/></g><image id="d52" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABFUlEQVRIx2NgGO6AkVQNkydP+u/l7EKUWmUtLUaYemUtLUYGBgYGFnJdunXPbpxyV69eZSjLL8AqR7aFeXn5OENn0qSJ/3HJMdE7Dsn2IT5fXL16lcHbxZW6FuIykJAcyRbm5uYx5lIjSCdPnvSf2vGVm5vHiNNCYvMWSRYSCtKte3bjTe6kJChc8Uj3bDGw+fDq1at48xexgOh8iKv8o2YeZUEu2YdlHFLFQrnus/8nHnv2n64+7D36nKH1wOP/JKVSdLDg7Mv/559/JWjZ+uvvGRgYGBhmnn7F0Hrg8f9qB1lGsiw8//wr3DBiASFLaZJott58T79UKsPHynAsXY+8IJ3oo8RIbColxjKq+pAYy0YGAAA5NGLrDLwUowAAAABJRU5ErkJggg=="/><g id="d53" filter="url(#d49)"><use href="#d52"/></g><image id="d54" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAC30lEQVRIx72Wz0tUURTHv/fc++a9qVAfzgjmL8raWIQRKJQTbsWEoP6HNmabVv0BbdyU+Qf0H7StRRAM0UohNBBkMEdFzafPEUwfc++5LcY3jYPhj56e5T2X97nn3u/5ngdccIjjNkxOviPPdf2Bvn5yHKc+zQDC7p4ePilQHbfBWusDyAPIlMvlylplHSnHCYQQOQCbiQEBEICM1rp5enYmjKKIjTFU2i75I0NDcFMpOs2VnnizVCpsb23N7e3v39qPolxjU2MohDj1G9IpHpu72juCsbEXG0QUSClZnEE0KkkFvp9aJ83Wn9vYozJbAGABhG8eXedzAWq2vmGb18ZmdAUYADgkqkSBcxt7pI3NfPu5k93VcVGCzu1Ky2yh2WJXM3a0jRvrbKJJKlTsJgcNTkc4CSUO9Fy36iZ1+aCs9ZPEgQN9/VU3kUqFAGC09pVSKK4sU3FlJTEgAUBsytOzM+Hq+lpudX0tNz07EwKAJJn8G8YRRRHPzs0FAJD2PD430fxvXBufIgP4xWAvk21Ika0z/s7xKZYC4cLLe5wIsMUlny3y34P9Fm8r8ndNFekDyEuBX+LAcRKR/NPeLB7fbqa2tPR/G3uoQoeEn72sqOWKk1zjpxSFUomRh92Nhba05PijDgluviQLUogRKRAeAloAxhhi5gwzZ4wxtSeFBWhxeSkzMfE2W59/cf8qs0XBTcnhwRsVqCursGESKHx9docPA61Fabvke66b91w3X9ou+db+RRqt/eXV1Xza834clX812MGKRAV6s2m+s8GZr4fVqpRTjhOMDA0hnuLW2s2U4wQANIBAKYW+3rtxtVyT51ro6y9LBVb0gIQACRvWwqp/bZ8/fVSw6K5vE7aWF4qL24a5qburi+pNgK3lhaXiVhRFx/UsCyHC0dHnlbZYKBYbAXw4wktBRCAi/MveSAikPe84XVUHceylFzueHMcJD05wXvORgUpbXHj8AeHEUTTYsGhNAAAAAElFTkSuQmCC"/><g id="d55" filter="url(#d49)"><use href="#d54"/></g><image id="d56" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADVElEQVRIx+2WTWgbVxDH/ztvl8aupVjWCrP4UnsTu9W1yKSBBgztoaipKaE4PZSUklsP6aH30nsPsUSgB+M2hBQCaUxKdGrBEIMbEkoCxmqJWauGQGq0suSlcrL7PraHSEWWLa0VjE+Z0/LevPnNmzczO8ARiwYAo9/9QQOMEmfG4jCYVr384Zg6DONf3VknLsPE3XUP/0pVLX39ttIBYIDRn2fG4vLKtJ2+dGc9CaDSenBxcZGklIm1tcckhNhlVNd1nDw5rhhj1ampqV2OhkDiyrRd+fK2U7y77jEAE3pjLwmgqUztnkopE0KIJc652Q4MwxBCCBfAu+2Ottgym996t5AsFCsEYND5/Rfdr3tm9r33U/vpFX77Fa+9HtcXipUhALWP08mOT6J3gwkZ2lKpH43hExfrj+8DAD67+EUagNv0/NrcfFEIgYHhE0M+l3OM6POFYsXpBKVusGe+KNx4sGmvbniteu7y8r3y8vK9cgsYqxse3XiwaT/zRUHI0G5EJxpokEZ1X9o7vijcfFi2V2oBBUF00gaBwkotoJsPy/aOLwp1X9oGaRQJNPv1wbovr956VB4tegEF4cHLIAiBohfQrUfl0bovr5r9+mAk0N0RtadecMHoM0rHGCmtx6I+xkgZfUbpqRdccHdELRLIVajWqr6jMy07YfY5cYOUdgCqpgFxg9SE2efoTMuuVX2Hq1AdKGmuz4wrpmmOoWvZ9HC/E4sZ/x/MZCbNXG42lcvNpjKZSbO5HosZKj3c7xi6lmWa5lyfGT94lrZCGWlnU883tprrlmUtcc5XOeerlmUtNddTzze2GGlnu8EiC79xcOudfC6pXpRA6pOPppP7qLpM+eKnmfGtqNDvATLFKZ/PJdtuT0R07vsf5klKuVufMYyMjCgAej6fa+1EqqQ4RQJj20+GOOc/N/rfLrEsa1+vlVJQak8U3dj2k3MANrsCS/+49E32g7cO4e+U+rawEn1D3vC0rWf2Kua1ufki33vrrknjNvplz3L69KmOe3TUI8Yr4KFLx6TJZCbN8+c/fSmjjuOYPQMbPfOlxkXLsigKWAHQ7FkCADr0zF6lOeK5ANi+g3D1r/vbf9+ePX4I76vemL60nXhz8njrIHzUOYP/AEjBgQ5H0c0KAAAAAElFTkSuQmCC"/><g id="d57" filter="url(#d49)"><use href="#d56"/></g><image id="d58" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABGklEQVRIx2NgoDNghDHkus/+p6VFj0qNGRkYGBhYYAKBmoI09dlEhpECGAkpWHD25f8EY3Gs6iZPnvTfy9mFKIuUtbRQ4xAbWH/t7f+KnQ8Zolbe+r8sXI2RkGHYwKRJE/97u7jC+UyELPv+5z/DkUefGaJW3qJKKmYiZBkMUMtSrEEaqCWMNYiWUcGHKBbu37///5Url4nSmJubx0ixhVeuXGYgNtXlUjNISUl1VEk0tATD30KscXj32rX/dLFQR0eXYdvePfTzoaOjI+OABCm2oo2BgYHBRo6XAV8hTnaiCdQSZuxwl2fgZGGkqmV4UymypdSyjGB9GKglzIivAqZHqh7CbZr8LfdoGiwTfZRQ2zTrr78fnkEKAPQcbFtf1PTIAAAAAElFTkSuQmCC"/><g id="d59" filter="url(#d49)"><use href="#d58"/></g><image id="d60" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADdklEQVRIx+2WwWsbRxSHfzOzC7GdmkgrOxif7MUS3mubEBxiMLRgV6auD8VtiggI3Uya4vTeY3xoTCOTPyCkKRYJMSbWoW2KwSUmJJQkmK5biZUuNYkjraQK22G1O7M92CqyK3kVJ7iXvtPsmzfve/PmvZ0BjlgIAPR88ys9zqhvsLcdMiPFb0d7xdtw/uVihtrc9S1nytjkopj96l0hAcBxRtcGe9v59TFVu7SYUQCYtQuXlpYo59yXTqeo4zh7nEqShL6+oGCMFYeGhvYE6gK+62OqOblg6MuZMgMQknbnFABVY7o/Usuy1lKpP3z7YQBg2zZ0/TcEg6EigNC+6aqvQHUsHZSSed2kAE6k7n+nhN//QDnINnn/Jzqvm34ApXFNaXgktJ5y7tnLB7dX830AMK4pBYdzAgCRWFRTNY1EYtHOSCzauTvWAMDhnIxrSgEAbq/m++aevXzQNDDxeEN9ZTlJh7vqvG5SuDvFBSAPACsrD3MrKw9ztTq4IPO6SR3uqq8sJ5l4vKE2BZQpoaulCr3zJKduW05yy+Jqs1W5ZXF123KSd57k1NVShcqUUE9goFU6UXEBvVyhd5/merYsfuM1gDfuPs316OUKrbg7vjyB+W2nRAAcY1TILXL2eblyoVng83LlgtwiZ48xKsiuL0+gLVzRLlMRCrQYEiPhdNEymgWmi5YhMRIOBVqMdpkKW7iiqaLRTrYaskTCjBDj1kRQ7PQwcOrU6QAAxOPXOuLxax21OgDurYmgYIQYskTC2snWuoHW7cPEZ6GzAPB5IkXPJ1J+rN9zAaCrq+uX6ekrsG1bAMD09JWagF33fCLlB1Ca+zSUBnD20mKmoylgVXZ3V3hv5qoJQPnko7GDmt/8fiJY8Er7v4BM2HR2Nq7sS/fgvR9/8K+vr1PO+V57xtDd3S1kWS7MzsZrdySywqaewHf++tN/8eIXa3WC2wCAmZmrOoD+qnJq6jJptJuvb/7cX13XEJh9kacHpWRseKS/9ntq6nJD23q+6rSF91UYiUVHI7HoqJddPV/SIe/WR4e9lOlRPzH+B751OVTRDA+PnBZCHB2wra1t0bbtNwKaAKr/LMdr0ccjHzbr36l5hrB/gJtc9C9nyr7JBUMp/v7IGBg4ozQ630gs2ulFGRg40wFAEMCYXDCU5Uz53CYXRfwX8je3jGnORUPN3QAAAABJRU5ErkJggg=="/><g id="d61" filter="url(#d49)"><use href="#d60"/></g><image id="d62" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAEcUlEQVRIx71WW29UVRT+1j63mel0TudSwsilF5hoDTFUEhnaBoypzgv6wING1Ad9sMoDhmgCPwEMxmAjCdV4iQ+KwT4AiSnVt1JLIowoiUIhdSpIQGfauXQ817186JR2IEJppOvpZO+1z7f2l299exFq0XbwLIFBeBBB4Il3NvHsJ4CH3zunRzQxTMDqubX/MZiBqyVXPn3x7ccdNd1/niRzsnN1gw3AWxwgMQC+fZEIxIzb9xjAP9mrlWS6//ykunFVCAzgyI7UM3iA0Td4uYUIoJcOfEVkBINqsCEFIHC3Q5oQiDY2SDdgVjyheQyQ43PEsn1VAEpYF6EZV1Z1hfyVEcMrOn7Jl8wAHBBd73+23aGerVuJSYk0b36uGoyv5LsBBlQV65p0Cjt/hYvm+tJF5aFGx5Pv5wrWpilbBgCmRpV4YzxgPdkROysE7fnxz5kSAD60vZ0BQGXfJWZH3Bw56o+Ojsl7UdPf/4EAgFjhF5aJZEUQBpIR/V2/6KzzpTQ6mgz7ibbIOU0RA6pKlUPb2+v+KW4J9z6F7ooGCCIWRFlDE/tao0Z2QyxQ6VlvZhtD2j5VoaymiDsYU5faWdKpxtZN/xqOWNeqthHP+StSB6JRc5fmFA+XcuM5t3QjYq5KhU5+O1TSBKYzmYxcMqDrujHfdQ+Hnd9aJIM1u0Ja+Q/VUvSQ5TuHwNIDgYsTP1O0tW1CaNpOAPklAbquS4VC3nx158u9i8k/OXxKNjc3m0NDQ4VMJsNzgCSEaOrtfYosy2Ip79QOESGRSJBlWVQoTGkA8MXXRyfy+fzrly5dnHRdl+vTae1A/4fDtm1ToVBQKpUKAZgFJCLz84GPryym4mMnjn9vGPpBAFBV1UkmkxdyudzNcrlclxcOh0uzvsbs+z4cx5kXjWEYKgB8OfjNdLVa3ZPNZs8Ui9PeQnEpirL5syMffQrgMSGEWgOEYRjh3t7em7t3v3WLlu7uLcLzvPC8mTKYeb4tmJkAwPM8IaWk//T82VAAWrLBqzUh+ADwyvMvRAB8co8zeWaWtQIhpayMjY2hqystFt5IVdVKnavXalRPn/5B9vR0Tbz2Zl+zaZpULpel4zg8R8FCFSQSzSKdTgvbttprgHo+n99g29ZkIBCoE43v+2vnzimKAl3X5284MjLqA/h7MZRs27ZNiUaja2qMtAEYvlu+YRgci8X8eDzBS+pDTdM4FosXj504/h2IWsDgWc6ESooegu9U5xrf0HVqbW3LaZpWzGQyvGSn0TStIIXxYjG4Zs7adH9FqjMaNXcF2TrsXh/PuqUbjrkqFVI0t6QITNeJpqsrTaOjY3w/Y4PQQ1NXmjqmpHxE85k3+TO8N1ixN3S3m42Rji17dVWc1VSR3/5o3K97Lbq7twgA5kKVLQZQkzOQzCSZO21X7v99yu68ULDCI5eLneWqu9/zudP172yxZX+Al3/EeGNwnBhYe2RHKrcMQ9Sk+tO1KiQz+gbHTwFoeUBjYi57tdIniJZ/EKblHvX/BYd5Va0uo/ugAAAAAElFTkSuQmCC"/><g id="d63" filter="url(#d49)"><use href="#d62"/></g><image id="d64" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAZUlEQVRIx+3UOw6AIBCE4dXY2HkP738kW2wgNJKfwthYsSTaMF9HmPDIJmM2DCACsTEbABqzB7f9vVGA8sGFF3CaiIi3aRKQes5dOt+3akQi0lVtGciOuvJkw7Oef/jLZGbbOKOrkjxiN0jUgd0AAAAASUVORK5CYII="/><filter id="d66" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0.6"/><feFuncG type="linear" slope="0.6"/><feFuncB type="linear" slope="0.6"/></feComponentTransfer></filter><g id="d65" filter="url(#d66)"><use href="#d64"/></g><image id="d67" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAeUlEQVRIx2NgGO6AkYGBgeHutWv/idWgrKXFSLGtxFpIisNwASZ6B+nwt5CF1LiiNIGx4FK8+B4HRT6JVfox0uOQGnmMaAvRI5eWlo9m/GFa0lALoCc+ZS0tRppaiJz6YZaP4DjEVfgOOCC1eTKa8QdnxqdX1UYWAAD0djFtJm9iwAAAAABJRU5ErkJggg=="/><g id="d68" filter="url(#d49)"><use href="#d67"/></g><image id="d69" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAgElEQVRIx2NgGO6AkYGBgeHutWv/idWgrKXFSLGtxFpIisNwASZ6B+nwt5CFVvGNK4GRbOHiexxEqYtV+jHS45AaeYxoC9Ej9+61a/+JjavRfDha0pAMcGVwbClfWUuLkYUariamjoRZPoLjEF/cDCggtXkymvEHX8anZ9VGFgAA2cEw5eaacyAAAAAASUVORK5CYII="/><g id="d70" filter="url(#d49)"><use href="#d69"/></g><clipPath id="d71"><rect x="911" y="32" width="27" height="19"/></clipPath><clipPath id="d72"><rect x="4" y="61" width="124" height="581"/></clipPath><clipPath id="d73"><rect x="5" y="62" width="123" height="25"/></clipPath><clipPath id="d74"><rect x="136" y="61" width="871" height="581"/></clipPath><clipPath id="d75"><rect x="137" y="62" width="870" height="25"/></clipPath><image id="d76" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg class="svg-icon" style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M384 64H256C220.66 64 192 92.66 192 128v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64V128c0-35.34-28.66-64-64-64z m0 320H256c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64v-128c0-35.34-28.66-64-64-64z m0 320H256c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64v-128c0-35.34-28.66-64-64-64zM768 64h-128c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64V128c0-35.34-28.66-64-64-64z m0 320h-128c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64v-128c0-35.34-28.66-64-64-64z m0 320h-128c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64v-128c0-35.34-28.66-64-64-64z" fill="" /></svg>"/><clipPath id="d77"><path d="M145 67H154A3 3 0 0 1 157 70V79A3 3 0 0 1 154 82H145A3 3 0 0 1 142 79V70A3 3 0 0 1 145 67Z"/></clipPath><filter id="d79" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="table" tableValues="1 0"/><feFuncG type="table" tableValues="1 0"/><feFuncB type="table" tableValues="1 0"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="0.36"/><feFuncG type="linear" slope="0.36"/><feFuncB type="linear" slope="0.36"/></feComponentTransfer></filter><g id="d78" filter="url(#d79)"><use href="#d76"/></g><clipPath id="d80"><rect x="137" y="87" width="869" height="554"/></clipPath><clipPath id="d81"><rect x="224.656" y="124" width="208.563" height="22"/></clipPath><clipPath id="d82"><rect x="461.219" y="124" width="208.547" height="22"/></clipPath><clipPath id="d83"><rect x="697.766" y="124" width="208.563" height="22"/></clipPath><clipPath id="d84"><polygon points="142 91 264 91 261 97 145 97"/></clipPath><clipPath id="d85"><polygon points="264 91 264 116 263 116 261 97"/></clipPath><clipPath id="d86"><polygon points="142 116 142 91 145 97 143 116"/></clipPath><image id="d87" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><filter id="d89" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="1.3"/><feFuncG type="linear" slope="1.3"/><feFuncB type="linear" slope="1.3"/></feComponentTransfer></filter><g id="d88" filter="url(#d89)"><use href="#d87"/></g><clipPath id="d90"><rect x="137" y="153" width="869" height="488"/></clipPath><clipPath id="d91"><rect x="217" y="153" width="789" height="488"/></clipPath><clipPath id="d92"><rect x="217" y="171" width="7" height="18"/></clipPath><clipPath id="d93"><rect x="217" y="189" width="7" height="18"/></clipPath><clipPath id="d94"><rect x="217" y="207" width="7" height="18"/></clipPath><clipPath id="d95"><rect x="217" y="225" width="7" height="18"/></clipPath><clipPath id="d96"><rect x="217" y="243" width="7" height="18"/></clipPath><clipPath id="d97"><rect x="217" y="261" width="7" height="18"/></clipPath><clipPath id="d98"><rect x="245" y="261" width="7" height="18"/></clipPath><clipPath id="d99"><rect x="217" y="279" width="7" height="18"/></clipPath><clipPath id="d100"><rect x="245" y="279" width="7" height="18"/></clipPath><clipPath id="d101"><rect x="217" y="297" width="7" height="18"/></clipPath><clipPath id="d102"><rect x="245" y="297" width="7" height="18"/></clipPath><clipPath id="d103"><rect x="274" y="297" width="7" height="18"/></clipPath><clipPath id="d104"><rect x="217" y="315" width="7" height="18"/></clipPath><clipPath id="d105"><rect x="245" y="315" width="7" height="18"/></clipPath><clipPath id="d106"><rect x="274" y="315" width="7" height="18"/></clipPath><clipPath id="d107"><rect x="217" y="333" width="7" height="18"/></clipPath><clipPath id="d108"><rect x="245" y="333" width="7" height="18"/></clipPath><clipPath id="d109"><rect x="274" y="333" width="7" height="18"/></clipPath><clipPath id="d110"><rect x="217" y="351" width="7" height="18"/></clipPath><clipPath id="d111"><rect x="245" y="351" width="7" height="18"/></clipPath><clipPath id="d112"><rect x="217" y="369" width="7" height="18"/></clipPath><clipPath id="d113"><rect x="245" y="369" width="7" height="18"/></clipPath><clipPath id="d114"><rect x="217" y="387" width="7" height="18"/></clipPath><clipPath id="d115"><rect x="217" y="405" width="7" height="18"/></clipPath><clipPath id="d116"><rect x="217" y="423" width="7" height="18"/></clipPath><clipPath id="d117"><rect x="217" y="441" width="7" height="18"/></clipPath><clipPath id="d118"><rect x="245" y="441" width="7" height="18"/></clipPath><clipPath id="d119"><rect x="217" y="459" width="7" height="18"/></clipPath><clipPath id="d120"><rect x="245" y="459" width="7" height="18"/></clipPath><image id="d121" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6 3' enable-background='new 0 0 6 3' height='3' width='6'><g fill='%23bf8803'><polygon points='5.5,0 2.5,3 1.1,3 4.1,0'/><polygon points='4,0 6,2 6,0.6 5.4,0'/><polygon points='0,2 1,3 2.4,3 0,0.6'/></g></svg>"/><clipPath id="d122"><rect x="303" y="459" width="57" height="18"/></clipPath><clipPath id="d123"><rect x="217" y="477" width="7" height="18"/></clipPath><clipPath id="d124"><rect x="245" y="477" width="7" height="18"/></clipPath><clipPath id="d125"><rect x="303" y="477" width="29" height="18"/></clipPath><clipPath id="d126"><rect x="217" y="495" width="7" height="18"/></clipPath><clipPath id="d127"><rect x="245" y="495" width="7" height="18"/></clipPath><clipPath id="d128"><rect x="217" y="513" width="7" height="18"/></clipPath><clipPath id="d129"><rect x="245" y="513" width="7" height="18"/></clipPath><clipPath id="d130"><rect x="217" y="531" width="7" height="18"/></clipPath><clipPath id="d131"><rect x="245" y="531" width="7" height="18"/></clipPath><clipPath id="d132"><rect x="274" y="531" width="7" height="18"/></clipPath><clipPath id="d133"><rect x="217" y="549" width="7" height="18"/></clipPath><clipPath id="d134"><rect x="245" y="549" width="7" height="18"/></clipPath><clipPath id="d135"><rect x="274" y="549" width="7" height="18"/></clipPath><clipPath id="d136"><rect x="302" y="549" width="8" height="18"/></clipPath><clipPath id="d137"><rect x="217" y="567" width="7" height="18"/></clipPath><clipPath id="d138"><rect x="245" y="567" width="7" height="18"/></clipPath><clipPath id="d139"><rect x="274" y="567" width="7" height="18"/></clipPath><clipPath id="d140"><rect x="302" y="567" width="8" height="18"/></clipPath><clipPath id="d141"><rect x="217" y="585" width="7" height="18"/></clipPath><clipPath id="d142"><rect x="245" y="585" width="7" height="18"/></clipPath><clipPath id="d143"><rect x="274" y="585" width="7" height="18"/></clipPath><clipPath id="d144"><rect x="302" y="585" width="8" height="18"/></clipPath><clipPath id="d145"><rect x="217" y="603" width="7" height="18"/></clipPath><clipPath id="d146"><rect x="245" y="603" width="7" height="18"/></clipPath><clipPath id="d147"><rect x="274" y="603" width="7" height="18"/></clipPath><clipPath id="d148"><rect x="302" y="603" width="8" height="18"/></clipPath><clipPath id="d149"><rect x="331" y="603" width="7" height="18"/></clipPath><clipPath id="d150"><rect x="217" y="621" width="7" height="18"/></clipPath><clipPath id="d151"><rect x="245" y="621" width="7" height="18"/></clipPath><clipPath id="d152"><rect x="274" y="621" width="7" height="18"/></clipPath><clipPath id="d153"><rect x="302" y="621" width="8" height="18"/></clipPath><clipPath id="d154"><rect x="331" y="621" width="7" height="18"/></clipPath><clipPath id="d155"><rect x="217" y="639" width="7" height="18"/></clipPath><clipPath id="d156"><rect x="245" y="639" width="7" height="18"/></clipPath><clipPath id="d157"><rect x="274" y="639" width="7" height="18"/></clipPath><clipPath id="d158"><rect x="302" y="639" width="8" height="18"/></clipPath><image id="d159" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><clipPath id="d160"><rect x="4" y="646" width="356" height="203"/></clipPath><clipPath id="d161"><rect x="5" y="647" width="355" height="25"/></clipPath><image id="d162" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABaElEQVR42u3ZMU7DMBiG4c8xiJ0VJAakThEn6NhkAQklkpdyBo7DhDiCnTAicQJgzsbMSHIA20wsGSJa2U5FvndMFbv/01StEoAxxhhjS02k3lApdWat/RwdfjTG3M8BcJR6Q2utAHAyOnw81xWQLf0rQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgwIIK+mSorutz7/16ckMhTgE8jA6/eu+fJj+pLPvWWr+EBgj6ZEhK+WWtvQFwt+OpGyHEZuL1HkAR4wqQIRfrus7nef7svb8EcBVo2V4IUWitPw4eIAJC1OGjAARE6AGUxphow0cDCIDwO/x77F8BGXPxPRGGVMNHB9gDYQBQpBo+CcAOCMmHTwbwB4TBOVc2TZN0+KQAEwiDc65s2/Ztjr/CMvWGI4SLOYefNaWUrKpqBcbYf7ofsAWwjfRerTHm9qDvBwBYAbiOBRBjUd4TJABjjDHGGFtmP4X8p9Vq0ZMVAAAAAElFTkSuQmCC"/><clipPath id="d163"><path d="M279 652H289A3 3 0 0 1 292 655V665A3 3 0 0 1 289 668H279A3 3 0 0 1 276 665V655A3 3 0 0 1 279 652Z"/></clipPath><filter id="d165" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0.1"/><feFuncG type="linear" slope="0.1"/><feFuncB type="linear" slope="0.1"/></feComponentTransfer></filter><g id="d164" filter="url(#d165)"><use href="#d162"/></g><clipPath id="d166"><rect x="5" y="672" width="354" height="176"/></clipPath><clipPath id="d167"><rect x="5" y="672" width="354" height="153"/></clipPath><image id="d168" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' fill='rgba(96, 96, 96, 0.4)'><polygon points='20,0 80,0 50,50'/></svg>"/><clipPath id="d169"><rect x="341" y="809" width="16" height="16"/></clipPath><clipPath id="d170"><rect x="341.281" y="672.016" width="16" height="16"/></clipPath><clipPath id="d171"><rect x="368" y="646" width="315" height="203"/></clipPath><clipPath id="d172"><rect x="369" y="647" width="314" height="25"/></clipPath><clipPath id="d173"><path d="M377 652H386A3 3 0 0 1 389 655V664A3 3 0 0 1 386 667H377A3 3 0 0 1 374 664V655A3 3 0 0 1 377 652Z"/></clipPath><clipPath id="d174"><rect x="369" y="672" width="313" height="176"/></clipPath><clipPath id="d175"><rect x="384" y="703" width="279" height="16"/></clipPath><clipPath id="d176"><rect x="405" y="703" width="223" height="16"/></clipPath><clipPath id="d177"><rect x="384" y="753" width="279" height="16"/></clipPath><clipPath id="d178"><rect x="405" y="753" width="223" height="16"/></clipPath><clipPath id="d179"><rect x="384" y="774" width="279" height="16"/></clipPath><clipPath id="d180"><rect x="405" y="774" width="223" height="16"/></clipPath><clipPath id="d181"><rect x="384" y="824" width="279" height="16"/></clipPath><clipPath id="d182"><rect x="405" y="824" width="229" height="16"/></clipPath><image id="d183" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAOUlEQVQoz2OcNGnSfwZyADkaJ02a9J+JgUwwhDSyIHNu3LiBN6A0NDQYqWsjsonDKFTJ1shIbiIHAK6jD2qRWoSFAAAAAElFTkSuQmCC"/><clipPath id="d184"><path d="M377 680H385A2 2 0 0 1 387 682V690A2 2 0 0 1 385 692H377A2 2 0 0 1 375 690V682A2 2 0 0 1 377 680Z"/></clipPath><filter id="d186" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0.5"/><feFuncG type="linear" slope="0.5"/><feFuncB type="linear" slope="0.5"/></feComponentTransfer></filter><g id="d185" filter="url(#d186)"><use href="#d183"/></g><clipPath id="d187"><path d="M377 730H385A2 2 0 0 1 387 732V740A2 2 0 0 1 385 742H377A2 2 0 0 1 375 740V732A2 2 0 0 1 377 730Z"/></clipPath><clipPath id="d188"><path d="M377 801H385A2 2 0 0 1 387 803V811A2 2 0 0 1 385 813H377A2 2 0 0 1 375 811V803A2 2 0 0 1 377 801Z"/></clipPath><clipPath id="d189"><rect x="691" y="646" width="154" height="203"/></clipPath><clipPath id="d190"><rect x="692" y="647" width="153" height="25"/></clipPath><clipPath id="d191"><path d="M700 652H709A3 3 0 0 1 712 655V664A3 3 0 0 1 709 667H700A3 3 0 0 1 697 664V655A3 3 0 0 1 700 652Z"/></clipPath><clipPath id="d192"><rect x="692" y="672" width="152" height="39"/></clipPath><clipPath id="d193"><rect x="715" y="673" width="129" height="34"/></clipPath><clipPath id="d194"><rect x="692" y="711" width="152" height="22"/></clipPath><clipPath id="d195"><rect x="715" y="712" width="129" height="17"/></clipPath><clipPath id="d196"><path d="M699 675H707A2 2 0 0 1 709 677V685A2 2 0 0 1 707 687H699A2 2 0 0 1 697 685V677A2 2 0 0 1 699 675Z"/></clipPath><clipPath id="d197"><path d="M699 714H707A2 2 0 0 1 709 716V724A2 2 0 0 1 707 726H699A2 2 0 0 1 697 724V716A2 2 0 0 1 699 714Z"/></clipPath><clipPath id="d198"><rect x="853" y="646" width="154" height="203"/></clipPath><clipPath id="d199"><rect x="854" y="647" width="153" height="25"/></clipPath><clipPath id="d200"><path d="M862 652H871A3 3 0 0 1 874 655V664A3 3 0 0 1 871 667H862A3 3 0 0 1 859 664V655A3 3 0 0 1 862 652Z"/></clipPath><clipPath id="d201"><rect x="1015" y="61" width="261" height="475"/></clipPath><clipPath id="d202"><rect x="1016" y="62" width="260" height="25"/></clipPath><clipPath id="d203"><path d="M1024 67H1033A3 3 0 0 1 1036 70V79A3 3 0 0 1 1033 82H1024A3 3 0 0 1 1021 79V70A3 3 0 0 1 1024 67Z"/></clipPath><image id="d204" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><clipPath id="d205"><rect x="1016" y="87" width="259" height="273"/></clipPath><clipPath id="d206"><rect x="1059" y="88" width="216" height="17"/></clipPath><clipPath id="d207"><rect x="1016" y="108" width="259" height="21"/></clipPath><clipPath id="d208"><rect x="1079" y="109" width="196" height="17"/></clipPath><clipPath id="d209"><rect x="1016" y="129" width="259" height="21"/></clipPath><clipPath id="d210"><rect x="1079" y="130" width="196" height="17"/></clipPath><clipPath id="d211"><rect x="1016" y="150" width="259" height="21"/></clipPath><clipPath id="d212"><rect x="1079" y="151" width="196" height="17"/></clipPath><clipPath id="d213"><rect x="1016" y="171" width="259" height="21"/></clipPath><clipPath id="d214"><rect x="1079" y="172" width="196" height="17"/></clipPath><clipPath id="d215"><rect x="1016" y="192" width="259" height="21"/></clipPath><clipPath id="d216"><rect x="1079" y="193" width="196" height="17"/></clipPath><clipPath id="d217"><rect x="1016" y="213" width="259" height="147"/></clipPath><clipPath id="d218"><rect x="1079" y="214" width="196" height="17"/></clipPath><clipPath id="d219"><rect x="1099" y="235" width="176" height="17"/></clipPath><clipPath id="d220"><rect x="1099" y="256" width="162" height="17"/></clipPath><clipPath id="d221"><rect x="1016" y="276" width="259" height="21"/></clipPath><clipPath id="d222"><rect x="1099" y="277" width="162" height="17"/></clipPath><clipPath id="d223"><rect x="1099" y="298" width="162" height="17"/></clipPath><clipPath id="d224"><rect x="1099" y="319" width="176" height="17"/></clipPath><clipPath id="d225"><rect x="1099" y="340" width="176" height="17"/></clipPath><clipPath id="d226"><path d="M1023 90H1031A2 2 0 0 1 1033 92V100A2 2 0 0 1 1031 102H1023A2 2 0 0 1 1021 100V92A2 2 0 0 1 1023 90Z"/></clipPath><image id="d227" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAATUlEQVQoz2OcNGnSfwZyADkaJ02a9J+JgUyAU+ONGzf+37hx4z/JGsm2kRBgQXceNifD2BoaGozUtRHZRJhNyGKDKHBwOZuqNjKSm8gBLK4eejJbWN0AAAAASUVORK5CYII="/><clipPath id="d228"><path d="M1043 111H1051A2 2 0 0 1 1053 113V121A2 2 0 0 1 1051 123H1043A2 2 0 0 1 1041 121V113A2 2 0 0 1 1043 111Z"/></clipPath><g id="d229" filter="url(#d186)"><use href="#d227"/></g><clipPath id="d230"><path d="M1043 132H1051A2 2 0 0 1 1053 134V142A2 2 0 0 1 1051 144H1043A2 2 0 0 1 1041 142V134A2 2 0 0 1 1043 132Z"/></clipPath><clipPath id="d231"><path d="M1043 153H1051A2 2 0 0 1 1053 155V163A2 2 0 0 1 1051 165H1043A2 2 0 0 1 1041 163V155A2 2 0 0 1 1043 153Z"/></clipPath><clipPath id="d232"><path d="M1043 174H1051A2 2 0 0 1 1053 176V184A2 2 0 0 1 1051 186H1043A2 2 0 0 1 1041 184V176A2 2 0 0 1 1043 174Z"/></clipPath><clipPath id="d233"><path d="M1043 195H1051A2 2 0 0 1 1053 197V205A2 2 0 0 1 1051 207H1043A2 2 0 0 1 1041 205V197A2 2 0 0 1 1043 195Z"/></clipPath><clipPath id="d234"><path d="M1043 216H1051A2 2 0 0 1 1053 218V226A2 2 0 0 1 1051 228H1043A2 2 0 0 1 1041 226V218A2 2 0 0 1 1043 216Z"/></clipPath><clipPath id="d235"><rect x="1016" y="234" width="259" height="21"/></clipPath><clipPath id="d236"><rect x="1016" y="255" width="259" height="21"/></clipPath><clipPath id="d237"><rect x="1016" y="297" width="259" height="21"/></clipPath><clipPath id="d238"><rect x="1016" y="318" width="259" height="21"/></clipPath><clipPath id="d239"><rect x="1016" y="339" width="259" height="21"/></clipPath><clipPath id="d240"><rect x="1015" y="540" width="261" height="309"/></clipPath><clipPath id="d241"><rect x="1016" y="541" width="260" height="25"/></clipPath><clipPath id="d242"><path d="M1024 545H1033A3 3 0 0 1 1036 548V557A3 3 0 0 1 1033 560H1024A3 3 0 0 1 1021 557V548A3 3 0 0 1 1024 545Z"/></clipPath><image id="d243" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"><defs><style>.cls-1{fill:%23fff;}</style></defs><g id="图层_2" data-name="图层 2"><g id="Discord_Logos" data-name="Discord Logos"><g id="Discord_Logo_-_Large_-_White" data-name="Discord Logo - Large - White"><path class="cls-1" d="M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z"/></g></g></g></svg>"/><filter id="d245" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="table" tableValues="1 0"/><feFuncG type="table" tableValues="1 0"/><feFuncB type="table" tableValues="1 0"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="0.1" intercept="0.45"/><feFuncG type="linear" slope="0.1" intercept="0.45"/><feFuncB type="linear" slope="0.1" intercept="0.45"/></feComponentTransfer></filter><g id="d244" filter="url(#d245)"><use href="#d243"/></g><image id="d246" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg version="1.1" id="Logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 248 204" style="enable-background:new 0 0 248 204;" xml:space="preserve"> <style type="text/css"> .st0{fill:%23FFFFFF;} </style> <g id="Logo_1_"> <path id="white_background" class="st0" d="M221.95,51.29c0.15,2.17,0.15,4.34,0.15,6.53c0,66.73-50.8,143.69-143.69,143.69v-0.04 C50.97,201.51,24.1,193.65,1,178.83c3.99,0.48,8,0.72,12.02,0.73c22.74,0.02,44.83-7.61,62.72-21.66 c-21.61-0.41-40.56-14.5-47.18-35.07c7.57,1.46,15.37,1.16,22.8-0.87C27.8,117.2,10.85,96.5,10.85,72.46c0-0.22,0-0.43,0-0.64 c7.02,3.91,14.88,6.08,22.92,6.32C11.58,63.31,4.74,33.79,18.14,10.71c25.64,31.55,63.47,50.73,104.08,52.76 c-4.07-17.54,1.49-35.92,14.61-48.25c20.34-19.12,52.33-18.14,71.45,2.19c11.31-2.23,22.15-6.38,32.07-12.26 c-3.77,11.69-11.66,21.62-22.2,27.93c10.01-1.18,19.79-3.86,29-7.95C240.37,35.29,231.83,44.14,221.95,51.29z"/> </g> </svg>"/><g id="d247" filter="url(#d245)"><use href="#d246"/></g><image id="d248" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="%23fff"/></svg>"/><g id="d249" filter="url(#d245)"><use href="#d248"/></g><image id="d250" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAOMCAYAAAAsTLH8AAADCklEQVR4AezXy23CQBQF0JGlbL1xQ2mAtJMa0k5oIA2ERkIHWSSS98yTeLLno4M0q8ugywEh7nK7ff/d7z/NzrKua9m2rdlZSuOHAgQIECBAgAABAgQIECBA4HCBaPsqQIAAAQIECBAgQIAAAQIECIwvEO3/KCdAgAABAgQIECBAgAABAgQI9C8Q7ftsToAAAQIECBAgQIAAAQIECBBoL5Dd99n7BAgQIECAAAECBAgQIECAAIHjBYL9rgCBXeByeSutzl4g+KIeGiuwC1yvn6XV2Qsc+iEHL64AAQIECBAgQIBAWuDr46VkTrpA8JcvjCcoEL7H+hMIECBAgAABAgQIjC/w+v5bMmd8gfp/3jglQIAAgQEE4h+z1DMIECBAgAABAgQIECBAgAABAh0IpNZ9/jIBAgQIECBAgAABAgQIECBA4ASB+oRXgAABAgQIECBAgAABAgQIEJhBoL7/o5QAAQIECBAgQIAAAQIECBAgMIJAtPBzOQECBAgQIECAAAECBAgQIECgB4Hcvs/eJkCAAAECBAgQIECAAAECBAicIVBd8AoQIECAAAECBAgQIECAAAECUwhU938UEiBAgAABAgQIECBAgAABAgSGEIgmfionQIAAAQIECBAgQIAAAQIECHQhkNr32csECBAgQIAAAQIECBAgQIAAgVMEahNeAQIECBAgQIAAAQIECBAgQGAOgdr+jzICBAgQIECAAAECBAgQIECAwBgC0cbP5AQIECBAgAABAgQIECBAgACBPgQy+z57lwABAgQIECBAgAABAgQIECBwjkBlwytAgAABAgQIECBAgAABAgQITCJQ2f9RRIAAAQIECBAgQIAAAQIECBAYRCAa+YmcAAECBAgQIECAAAECBAgQINCJQGLfZ68SIECAAAECBAgQIECAAAECBE4SeDziFSBAgAABAgQIECBAgAABAgRmEXi8/6OEAAECBAgQIECAAAECBAgQIDCKQLTyn88JECBAgAABAgQIECBAgAABAr0IPL/vszcJECBAgAABAgQI/AMAAP//P907agAAAAZJREFUAwDYWBMf28rJdwAAAABJRU5ErkJggg=="/><filter id="d251" filterUnits="userSpaceOnUse" x="-1" y="-49" width="1282" height="978"><feGaussianBlur stdDeviation="20"/></filter><clipPath id="d252"><polygon points="59 11 1221 11 1218 14 62 14"/></clipPath><clipPath id="d253"><polygon points="1221 11 1221 869 1220 868 1218 14"/></clipPath><clipPath id="d254"><polygon points="1221 869 59 869 60 868 1220 868"/></clipPath><clipPath id="d255"><polygon points="59 869 59 11 62 14 60 868"/></clipPath><filter id="d256" filterUnits="userSpaceOnUse" x="986.5" y="827.5" width="123" height="37"><feGaussianBlur stdDeviation="1.5"/></filter><filter id="d257" filterUnits="userSpaceOnUse" x="1120.5" y="827.5" width="89" height="37"><feGaussianBlur stdDeviation="1.5"/></filter><clipPath id="d258"><rect x="60" y="39" width="1160" height="780"/></clipPath><linearGradient id="d259" gradientUnits="userSpaceOnUse" x1="15" y1="0" x2="15" y2="29"><stop offset="0" stop-color="rgb(255,255,255)"/><stop offset="1" stop-color="rgb(230,234,240)"/></linearGradient><rect id="d260" width="30" height="29" fill="url(#d259)"/><clipPath id="d261"><path d="M1012 68H1038A3 3 0 0 1 1041 71V96A3 3 0 0 1 1038 99H1012A3 3 0 0 1 1009 96V71A3 3 0 0 1 1012 68Z"/></clipPath><clipPath id="d262"><rect x="85" y="68" width="197" height="31"/></clipPath><clipPath id="d263"><rect x="1086" y="69" width="116" height="29"/></clipPath><clipPath id="d264"><rect x="325" y="69" width="632" height="29"/></clipPath><clipPath id="d265"><path d="M1050 68H1076A3 3 0 0 1 1079 71V96A3 3 0 0 1 1076 99H1050A3 3 0 0 1 1047 96V71A3 3 0 0 1 1050 68Z"/></clipPath><clipPath id="d266"><rect x="73" y="135" width="566" height="27"/></clipPath><clipPath id="d267"><rect x="106" y="140" width="37" height="17"/></clipPath><clipPath id="d268"><rect x="73" y="162" width="566" height="27"/></clipPath><clipPath id="d269"><rect x="106" y="167" width="12" height="17"/></clipPath><clipPath id="d270"><rect x="73" y="189" width="566" height="27"/></clipPath><clipPath id="d271"><rect x="106" y="194" width="19" height="17"/></clipPath><clipPath id="d272"><rect x="73" y="216" width="566" height="27"/></clipPath><clipPath id="d273"><rect x="106" y="221" width="42" height="17"/></clipPath><clipPath id="d274"><rect x="73" y="135" width="566" height="423"/></clipPath><clipPath id="d275"><rect x="73" y="243" width="566" height="27"/></clipPath><clipPath id="d276"><rect x="106" y="248" width="52" height="17"/></clipPath><clipPath id="d277"><rect x="73" y="270" width="566" height="27"/></clipPath><clipPath id="d278"><rect x="106" y="275" width="70" height="17"/></clipPath><clipPath id="d279"><rect x="73" y="297" width="566" height="27"/></clipPath><clipPath id="d280"><rect x="106" y="302" width="55" height="17"/></clipPath><clipPath id="d281"><rect x="73" y="324" width="566" height="27"/></clipPath><clipPath id="d282"><rect x="106" y="329" width="31" height="17"/></clipPath><clipPath id="d283"><rect x="73" y="351" width="566" height="27"/></clipPath><clipPath id="d284"><rect x="106" y="356" width="46" height="17"/></clipPath><clipPath id="d285"><rect x="655" y="135" width="552" height="27"/></clipPath><clipPath id="d286"><rect x="688" y="140" width="23" height="17"/></clipPath><clipPath id="d287"><rect x="655" y="162" width="552" height="27"/></clipPath><clipPath id="d288"><rect x="688" y="167" width="28" height="17"/></clipPath><clipPath id="d289"><rect x="655" y="189" width="552" height="27"/></clipPath><clipPath id="d290"><rect x="688" y="194" width="24" height="17"/></clipPath><clipPath id="d291"><rect x="655" y="216" width="552" height="27"/></clipPath><clipPath id="d292"><rect x="688" y="221" width="68" height="17"/></clipPath><clipPath id="d293"><rect x="655" y="135" width="552" height="423"/></clipPath><clipPath id="d294"><rect x="655" y="243" width="552" height="27"/></clipPath><clipPath id="d295"><rect x="688" y="248" width="26" height="17"/></clipPath><clipPath id="d296"><rect x="73" y="593" width="1134" height="215"/></clipPath></defs><rect x="59" y="11" width="1162" height="857.5" fill="rgb(250, 250, 250)"/><rect x="0" y="0" width="1280" height="880" fill="rgb(250, 250, 250)"/><rect x="0" y="0" width="1280" height="25" fill="rgb(0, 110, 200)"/><use href="#d0" transform="translate(1209.625 5.625) scale(13.75 13.75)"/><rect x="1" y="854" width="1279" height="26" fill="rgb(223, 223, 223)"/><polygon points="0 853 1280 853 1280 854 1 854" fill="rgb(255, 255, 255)"/><polygon points="0 880 0 853 1 854 1 880" fill="rgb(107, 107, 107)"/><rect x="10" y="855" width="173" height="22" fill="rgb(78, 140, 143)"/><polygon points="9 854 184 854 183 855 10 855" fill="rgb(123, 139, 164)"/><polygon points="184 854 184 878 183 877 183 855" fill="rgb(155, 171, 196)"/><polygon points="184 878 9 878 10 877 183 877" fill="rgb(155, 171, 196)"/><polygon points="9 878 9 854 10 855 10 877" fill="rgb(123, 139, 164)"/><text class="t0" x="44.563" y="869" textLength="119.797" lengthAdjust="spacing">tB Services: OPERATIONAL</text><rect x="193" y="855" width="148" height="22" fill="rgb(78, 140, 143)"/><polygon points="192 854 342 854 341 855 193 855" fill="rgb(123, 139, 164)"/><polygon points="342 854 342 878 341 877 341 855" fill="rgb(155, 171, 196)"/><polygon points="342 878 192 878 193 877 341 877" fill="rgb(155, 171, 196)"/><polygon points="192 878 192 854 193 855 193 877" fill="rgb(123, 139, 164)"/><text class="t1" x="215.594" y="869.531"></text><text class="t0" x="231.531" y="869" textLength="86.859" lengthAdjust="spacing">ULTIMATE EDITION</text><use href="#d1" transform="translate(356.5 857.805) scale(21 16.39)"/><g clip-path="url(#d2)"><text class="t2" x="40.453" y="17" textLength="21.797" lengthAdjust="spacing">Edit</text><text class="t2" x="76.25" y="17" textLength="27.422" lengthAdjust="spacing">View</text><text class="t2" x="117.672" y="17" textLength="39.781" lengthAdjust="spacing">Project</text><text class="t2" x="171.453" y="17" textLength="40.703" lengthAdjust="spacing">Format</text><text class="t2" x="226.156" y="17" textLength="38.578" lengthAdjust="spacing">Debug</text><text class="t2" x="278.734" y="17" textLength="22.5" lengthAdjust="spacing">Run</text><text class="t2" x="315.234" y="17" textLength="29.453" lengthAdjust="spacing">Tools</text><text class="t2" x="358.688" y="17" textLength="45.234" lengthAdjust="spacing">Add-Ins</text><text class="t2" x="417.922" y="17" textLength="47.328" lengthAdjust="spacing">Window</text><text class="t2" x="479.25" y="17" textLength="26.828" lengthAdjust="spacing">Help</text></g><g clip-path="url(#d3)"><text class="t2" x="699.922" y="17" textLength="317.234" lengthAdjust="spacing">project.twinproj - twinBASIC (twinBASIC IDE BETA 1034)</text></g><rect x="0" y="25" width="1280" height="32" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M0 25h1280v36h-1280ZM0 25h1280v32h-1280Z"/><g clip-path="url(#d4)"><rect x="1" y="26" width="1279" height="30" fill="rgb(240, 240, 240)"/><polygon points="0 25 1280 25 1280 26 1 26" fill="rgb(244, 244, 244)"/><polygon points="0 56 0 25 1 26 1 56" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d5)"><rect x="95" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="152" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="297" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="465" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="574" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="687" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="800" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="838" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="895" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><rect x="1044" y="29" width="1" height="26" fill="rgba(128, 128, 128, 0.36)"/><path d="M310 32H386A2 2 0 0 1 388 34V49A2 2 0 0 1 386 51H310A2 2 0 0 1 308 49V34A2 2 0 0 1 310 32Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(189, 189, 189)" d="M310 32H386A2 2 0 0 1 388 34V49A2 2 0 0 1 386 51H310A2 2 0 0 1 308 49V34A2 2 0 0 1 310 32ZM310 33H386A1 1 0 0 1 387 34V49A1 1 0 0 1 386 50H310A1 1 0 0 1 309 49V34A1 1 0 0 1 310 33Z"/><g clip-path="url(#d6)"><text class="t3" x="313" y="46" textLength="28.844" lengthAdjust="spacing">win32</text></g><path d="M375 39L379 43L383 39" fill="none" stroke="rgb(0, 0, 0)" stroke-width="2"/><use href="#d8" transform="translate(48 33) scale(16 16)"/><use href="#d11" transform="translate(70 33) scale(16 16)"/></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d14" transform="translate(105 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d17" transform="translate(127 33) scale(16 16)"/></g></g><g clip-path="url(#d5)"><use href="#d19" transform="translate(162 33) scale(16 16)"/></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d22" transform="translate(184 34) scale(14.4 14.4)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d25" transform="translate(206 34) scale(14.4 14.4)"/></g></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d27" transform="translate(228 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d29" transform="translate(250 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d31" transform="translate(272 33) scale(16 16)"/></g></g><g clip-path="url(#d5)"><use href="#d33" transform="translate(396 33) scale(16 16)"/><g transform="matrix(1.07 0 0 1.07 -29.82 -2.87)"><use href="#d35" transform="translate(417.998 32.998) scale(16 16)"/></g><use href="#d38" transform="translate(440 33) scale(16 16)"/></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d40" transform="translate(475 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d42" transform="translate(499 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d44" transform="translate(523 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d5)"><use href="#d46" transform="translate(547 33) scale(16 16)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d48" transform="translate(584 32) scale(19 19)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d51" transform="translate(609 32) scale(19 19)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d53" transform="translate(634 32) scale(19 19)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d55" transform="translate(659 32) scale(19 19)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d57" transform="translate(697 32) scale(19 19)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d59" transform="translate(722 32) scale(19 19)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d61" transform="translate(747 32) scale(19 19)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d63" transform="translate(772 32) scale(19 19)"/></g></g><g clip-path="url(#d5)"><rect x="810" y="32" width="19" height="19" fill="rgba(153, 153, 153, 0.25)"/><use href="#d65" transform="translate(810 32) scale(19 19)"/><rect x="809" y="31" width="21" height="21" fill="none" stroke="rgba(153, 153, 153, 0.5)" stroke-width="2"/></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d68" transform="translate(848 33) scale(16 16)"/></g></g><g opacity="0.4"><g clip-path="url(#d5)"><use href="#d70" transform="translate(870 33) scale(16 16)"/></g></g><g opacity="0.4"><g opacity="0.7"><g clip-path="url(#d5)"><path d="M908 32H953A2 2 0 0 1 955 34V49A2 2 0 0 1 953 51H908A2 2 0 0 1 906 49V34A2 2 0 0 1 908 32Z" fill="rgb(0, 0, 0)"/><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M908 32H953A2 2 0 0 1 955 34V49A2 2 0 0 1 953 51H908A2 2 0 0 1 906 49V34A2 2 0 0 1 908 32ZM908 33H953A1 1 0 0 1 954 34V49A1 1 0 0 1 953 50H908A1 1 0 0 1 907 49V34A1 1 0 0 1 908 33Z"/><g clip-path="url(#d71)"><text class="t5" x="911" y="46" textLength="26.922" lengthAdjust="spacing">100%</text></g><path d="M942 39L946 43L950 39" fill="none" stroke="rgb(255, 255, 255)" stroke-width="2"/></g></g></g><g clip-path="url(#d5)"><path d="M968 32H1035A3 3 0 0 1 1038 35V48A3 3 0 0 1 1035 51H968A3 3 0 0 1 965 48V35A3 3 0 0 1 968 32Z" fill="rgba(160, 160, 160, 0.76)"/><text class="t7" x="970" y="47"></text><text class="t9" x="983.703" y="47" textLength="49.75" lengthAdjust="spacing">PREVIEW</text><text class="t11" x="1054.453" y="49"></text></g><g clip-path="url(#d4)"><rect x="1" y="56" width="1278" height="0" fill="rgb(255, 255, 255)"/><polygon points="1280 56 1280 57 1279 56 1279 56" fill="rgb(211, 211, 211)"/><polygon points="1280 57 0 57 1 56 1279 56" fill="rgb(211, 211, 211)"/><polygon points="0 57 0 56 1 56 1 56" fill="rgb(191, 191, 191)"/></g><rect x="4" y="61" width="124" height="581" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M0 61h132v585h-132ZM4 61h124v581h-124Z"/><g clip-path="url(#d72)"><rect x="5" y="62" width="123" height="25" fill="rgb(191, 205, 219)"/><polygon points="4 61 128 61 128 62 5 62" fill="rgb(244, 244, 244)"/><polygon points="4 87 4 61 5 62 5 87" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d73)"><text class="t12" x="30" y="78.5" textLength="49.391" lengthAdjust="spacing">TOOLBOX</text><path d="M124 66H136A2 2 0 0 1 138 68V80A2 2 0 0 1 136 82H124A2 2 0 0 1 122 80V68A2 2 0 0 1 124 66Z" fill="rgb(240, 240, 240)"/><path fill-rule="evenodd" fill="rgb(163, 163, 163)" d="M124 66H136A2 2 0 0 1 138 68V80A2 2 0 0 1 136 82H124A2 2 0 0 1 122 80V68A2 2 0 0 1 124 66ZM124 67H136A1 1 0 0 1 137 68V80A1 1 0 0 1 136 81H124A1 1 0 0 1 123 80V68A1 1 0 0 1 124 67Z"/></g><g opacity="0.4"><g clip-path="url(#d73)"><text class="t14" x="79.391" y="80.5"></text></g></g><g opacity="0.4"><g clip-path="url(#d73)"><text class="t16" x="100.391" y="83.5"></text></g></g><g clip-path="url(#d73)"><text class="t17" x="122.391" y="82.5"></text></g><g clip-path="url(#d72)"><rect x="5" y="87" width="122" height="554" fill="rgb(255, 255, 255)"/><polygon points="128 87 128 642 127 641 127 87" fill="rgb(211, 211, 211)"/><polygon points="128 642 4 642 5 641 127 641" fill="rgb(211, 211, 211)"/><polygon points="4 642 4 87 5 87 5 641" fill="rgb(191, 191, 191)"/></g><rect x="136" y="61" width="871" height="581" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M132 61h879v585h-879ZM136 61h871v581h-871Z"/><g clip-path="url(#d74)"><rect x="137" y="62" width="870" height="25" fill="rgb(191, 205, 219)"/><polygon points="136 61 1007 61 1007 62 137 62" fill="rgb(244, 244, 244)"/><polygon points="136 87 136 61 137 62 137 87" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d75)"><text class="t12" x="161.656" y="78.5" textLength="45.234" lengthAdjust="spacing">EDITOR 1</text><path d="M989 66H1001A2 2 0 0 1 1003 68V80A2 2 0 0 1 1001 82H989A2 2 0 0 1 987 80V68A2 2 0 0 1 989 66Z" fill="rgb(240, 240, 240)"/><path fill-rule="evenodd" fill="rgb(163, 163, 163)" d="M989 66H1001A2 2 0 0 1 1003 68V80A2 2 0 0 1 1001 82H989A2 2 0 0 1 987 80V68A2 2 0 0 1 989 66ZM989 67H1001A1 1 0 0 1 1002 68V80A1 1 0 0 1 1001 81H989A1 1 0 0 1 988 80V68A1 1 0 0 1 989 67Z"/><g clip-path="url(#d77)"><use href="#d78" transform="translate(142 68) scale(13 13)"/></g></g><g opacity="0.4"><g clip-path="url(#d75)"><text class="t16" x="965.328" y="83.5"></text></g></g><g clip-path="url(#d75)"><text class="t17" x="987.328" y="82.5"></text></g><g clip-path="url(#d74)"><rect x="137" y="87" width="869" height="554" fill="rgb(255, 255, 255)"/><polygon points="1007 87 1007 642 1006 641 1006 87" fill="rgb(211, 211, 211)"/><polygon points="1007 642 136 642 137 641 1006 641" fill="rgb(211, 211, 211)"/><polygon points="136 642 136 87 137 87 137 641" fill="rgb(191, 191, 191)"/></g><g clip-path="url(#d80)"><rect x="137" y="87" width="869" height="29" fill="rgb(224, 228, 230)"/><path fill-rule="evenodd" fill="rgb(169, 169, 169)" d="M137 87h869v30h-869ZM137 87h869v29h-869Z"/><rect x="978" y="92" width="23" height="19" fill="rgb(242, 242, 242)"/><path fill-rule="evenodd" fill="rgb(175, 175, 175)" d="M977 91h25v21h-25ZM978 92h23v19h-23Z"/><text class="t18" x="983.328" y="108"></text><rect x="137" y="117" width="869" height="36" fill="rgb(244, 244, 244)"/><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.19)" d="M137 117h869v36h-869ZM137 118h869v34h-869Z"/><path d="M223 124H447A3 3 0 0 1 450 127V143A3 3 0 0 1 447 146H223A3 3 0 0 1 220 143V127A3 3 0 0 1 223 124Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(211, 210, 210)" d="M223 124H447A3 3 0 0 1 450 127V143A3 3 0 0 1 447 146H223A3 3 0 0 1 220 143V127A3 3 0 0 1 223 124ZM223 125H447A2 2 0 0 1 449 127V143A2 2 0 0 1 447 145H223A2 2 0 0 1 221 143V127A2 2 0 0 1 223 125Z"/><g clip-path="url(#d81)"><text class="t19" x="224.656" y="140" textLength="48.641" lengthAdjust="spacing">Inventory</text></g><path d="M437 133L441 137L445 133" fill="none" stroke="rgb(32, 32, 32)" stroke-width="2"/><path d="M459 124H684A3 3 0 0 1 687 127V143A3 3 0 0 1 684 146H459A3 3 0 0 1 456 143V127A3 3 0 0 1 459 124Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(211, 210, 210)" d="M459 124H684A3 3 0 0 1 687 127V143A3 3 0 0 1 684 146H459A3 3 0 0 1 456 143V127A3 3 0 0 1 459 124ZM459 125H684A2 2 0 0 1 686 127V143A2 2 0 0 1 684 145H459A2 2 0 0 1 457 143V127A2 2 0 0 1 459 125Z"/><g clip-path="url(#d82)"><text class="t19" x="461.219" y="140" textLength="45.672" lengthAdjust="spacing">(general)</text></g><path d="M674 133L678 137L682 133" fill="none" stroke="rgb(32, 32, 32)" stroke-width="2"/><path d="M696 124H920A3 3 0 0 1 923 127V143A3 3 0 0 1 920 146H696A3 3 0 0 1 693 143V127A3 3 0 0 1 696 124Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(211, 210, 210)" d="M696 124H920A3 3 0 0 1 923 127V143A3 3 0 0 1 920 146H696A3 3 0 0 1 693 143V127A3 3 0 0 1 696 124ZM696 125H920A2 2 0 0 1 922 127V143A2 2 0 0 1 920 145H696A2 2 0 0 1 694 143V127A2 2 0 0 1 696 125Z"/><g clip-path="url(#d83)"><text class="t19" x="697.766" y="140" textLength="24.609" lengthAdjust="spacing">Total</text></g><path d="M910 133L914 137L918 133" fill="none" stroke="rgb(32, 32, 32)" stroke-width="2"/><path d="M145 91H261A3 3 0 0 1 264 94V116L264 116H142L142 116V94A3 3 0 0 1 145 91Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(0, 126, 255)" d="M145 91H261A3 3 0 0 1 264 94V116L264 116H142L142 116V94A3 3 0 0 1 145 91ZM145 93H261A2 1 0 0 1 263 94V116L263 116H143L143 116V94A2 1 0 0 1 145 93Z" clip-path="url(#d84)"/><path fill-rule="evenodd" fill="rgb(221, 212, 212)" d="M145 91H261A3 3 0 0 1 264 94V116L264 116H142L142 116V94A3 3 0 0 1 145 91ZM145 93H261A2 1 0 0 1 263 94V116L263 116H143L143 116V94A2 1 0 0 1 145 93Z" clip-path="url(#d85)"/><path fill-rule="evenodd" fill="rgb(221, 212, 212)" d="M145 91H261A3 3 0 0 1 264 94V116L264 116H142L142 116V94A3 3 0 0 1 145 91ZM145 93H261A2 1 0 0 1 263 94V116L263 116H143L143 116V94A2 1 0 0 1 145 93Z" clip-path="url(#d86)"/><text class="t20" x="162.656" y="109.5" textLength="78.656" lengthAdjust="spacing">Inventory.twin</text><text class="t21" x="243.313" y="112.5"></text><use href="#d88" transform="translate(148 99) scale(10.11 11)"/></g><g clip-path="url(#d90)"><rect x="137" y="153" width="869" height="488" fill="rgb(255, 255, 254)"/><rect x="137" y="153" width="80" height="1478" fill="rgb(248, 248, 248)"/><text class="t22" x="183.5" y="184">2</text><text class="t22" x="183.5" y="202">3</text><text class="t22" x="183.5" y="220">4</text><text class="t22" x="183.5" y="238">5</text><text class="t22" x="183.5" y="256">6</text><text class="t22" x="183.5" y="274">7</text><text class="t22" x="183.5" y="292">8</text><text class="t22" x="183.5" y="310">9</text><text class="t22" x="176.359" y="328" textLength="14.297" lengthAdjust="spacing">10</text><text class="t22" x="176.359" y="346" textLength="14.297" lengthAdjust="spacing">11</text><text class="t22" x="176.359" y="364" textLength="14.297" lengthAdjust="spacing">12</text><text class="t22" x="176.359" y="382" textLength="14.297" lengthAdjust="spacing">13</text><text class="t22" x="176.359" y="400" textLength="14.297" lengthAdjust="spacing">14</text><text class="t22" x="176.359" y="418" textLength="14.297" lengthAdjust="spacing">15</text><text class="t23" x="176.359" y="436" textLength="14.297" lengthAdjust="spacing">16</text><text class="t22" x="176.359" y="454" textLength="14.297" lengthAdjust="spacing">17</text><text class="t22" x="176.359" y="472" textLength="14.297" lengthAdjust="spacing">18</text><text class="t22" x="176.359" y="490" textLength="14.297" lengthAdjust="spacing">19</text><text class="t22" x="176.359" y="508" textLength="14.297" lengthAdjust="spacing">20</text><text class="t22" x="176.359" y="526" textLength="14.297" lengthAdjust="spacing">21</text><text class="t22" x="176.359" y="544" textLength="14.297" lengthAdjust="spacing">22</text><text class="t22" x="176.359" y="562" textLength="14.297" lengthAdjust="spacing">23</text><text class="t22" x="176.359" y="580" textLength="14.297" lengthAdjust="spacing">24</text><text class="t22" x="176.359" y="598" textLength="14.297" lengthAdjust="spacing">25</text><text class="t22" x="176.359" y="616" textLength="14.297" lengthAdjust="spacing">26</text><text class="t22" x="176.359" y="634" textLength="14.297" lengthAdjust="spacing">27</text><text class="t22" x="176.359" y="652" textLength="14.297" lengthAdjust="spacing">28</text><text class="t22" x="183.5" y="166">1</text></g><g clip-path="url(#d91)"><rect x="217" y="153" width="1000000" height="1000000" fill="rgb(255, 255, 254)"/><path clip-path="url(#d92)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 171h7v18h-7ZM218 171h7v18h-7Z"/><path clip-path="url(#d93)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 189h7v18h-7ZM218 189h7v18h-7Z"/><path clip-path="url(#d94)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 207h7v18h-7ZM218 207h7v18h-7Z"/><path clip-path="url(#d95)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 225h7v18h-7ZM218 225h7v18h-7Z"/><path fill-rule="evenodd" fill="rgb(208, 208, 208)" d="M217 225h687v18h-687ZM217 225h687v17h-687Z"/><path clip-path="url(#d96)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 243h7v18h-7ZM218 243h7v18h-7Z"/><path clip-path="url(#d97)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 261h7v18h-7ZM218 261h7v18h-7Z"/><path clip-path="url(#d98)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M245 261h7v18h-7ZM246 261h7v18h-7Z"/><path clip-path="url(#d99)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 279h7v18h-7ZM218 279h7v18h-7Z"/><path clip-path="url(#d100)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M245 279h7v18h-7ZM246 279h7v18h-7Z"/><path clip-path="url(#d101)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 297h7v18h-7ZM218 297h7v18h-7Z"/><path clip-path="url(#d102)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M245 297h7v18h-7ZM246 297h7v18h-7Z"/><path clip-path="url(#d103)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 297h7v18h-7ZM275 297h7v18h-7Z"/><path clip-path="url(#d104)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 315h7v18h-7ZM218 315h7v18h-7Z"/><path clip-path="url(#d105)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M245 315h7v18h-7ZM246 315h7v18h-7Z"/><path clip-path="url(#d106)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 315h7v18h-7ZM275 315h7v18h-7Z"/><path clip-path="url(#d107)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 333h7v18h-7ZM218 333h7v18h-7Z"/><path clip-path="url(#d108)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M245 333h7v18h-7ZM246 333h7v18h-7Z"/><path clip-path="url(#d109)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 333h7v18h-7ZM275 333h7v18h-7Z"/><path clip-path="url(#d110)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 351h7v18h-7ZM218 351h7v18h-7Z"/><path clip-path="url(#d111)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M245 351h7v18h-7ZM246 351h7v18h-7Z"/><path clip-path="url(#d112)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 369h7v18h-7ZM218 369h7v18h-7Z"/><path clip-path="url(#d113)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M245 369h7v18h-7ZM246 369h7v18h-7Z"/><path clip-path="url(#d114)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 387h7v18h-7ZM218 387h7v18h-7Z"/><path clip-path="url(#d115)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 405h7v18h-7ZM218 405h7v18h-7Z"/><path fill-rule="evenodd" fill="rgb(208, 208, 208)" d="M217 405h687v18h-687ZM217 405h687v17h-687Z"/><rect x="217" y="423" width="687" height="18" fill="rgb(242, 242, 242)"/><path clip-path="url(#d116)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 423h7v18h-7ZM218 423h7v18h-7Z"/><path clip-path="url(#d117)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 441h7v18h-7ZM218 441h7v18h-7Z"/><path clip-path="url(#d118)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 441h7v18h-7ZM246 441h7v18h-7Z"/><path clip-path="url(#d119)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 459h7v18h-7ZM218 459h7v18h-7Z"/><path clip-path="url(#d120)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 459h7v18h-7ZM246 459h7v18h-7Z"/><g clip-path="url(#d122)"><use href="#d121" transform="translate(303 474) scale(6 3)"/><use href="#d121" transform="translate(309 474) scale(6 3)"/><use href="#d121" transform="translate(315 474) scale(6 3)"/><use href="#d121" transform="translate(321 474) scale(6 3)"/><use href="#d121" transform="translate(327 474) scale(6 3)"/><use href="#d121" transform="translate(333 474) scale(6 3)"/><use href="#d121" transform="translate(339 474) scale(6 3)"/><use href="#d121" transform="translate(345 474) scale(6 3)"/><use href="#d121" transform="translate(351 474) scale(6 3)"/><use href="#d121" transform="translate(357 474) scale(6 3)"/></g><rect x="303" y="459" width="57" height="18" fill="rgba(236, 199, 120, 0.094)"/><path clip-path="url(#d123)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 477h7v18h-7ZM218 477h7v18h-7Z"/><path clip-path="url(#d124)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 477h7v18h-7ZM246 477h7v18h-7Z"/><g clip-path="url(#d125)"><use href="#d121" transform="translate(303 492) scale(6 3)"/><use href="#d121" transform="translate(309 492) scale(6 3)"/><use href="#d121" transform="translate(315 492) scale(6 3)"/><use href="#d121" transform="translate(321 492) scale(6 3)"/><use href="#d121" transform="translate(327 492) scale(6 3)"/></g><rect x="303" y="477" width="29" height="18" fill="rgba(236, 199, 120, 0.094)"/><path clip-path="url(#d126)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 495h7v18h-7ZM218 495h7v18h-7Z"/><path clip-path="url(#d127)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 495h7v18h-7ZM246 495h7v18h-7Z"/><path clip-path="url(#d128)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 513h7v18h-7ZM218 513h7v18h-7Z"/><path clip-path="url(#d129)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 513h7v18h-7ZM246 513h7v18h-7Z"/><path clip-path="url(#d130)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 531h7v18h-7ZM218 531h7v18h-7Z"/><path clip-path="url(#d131)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 531h7v18h-7ZM246 531h7v18h-7Z"/><path clip-path="url(#d132)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 531h7v18h-7ZM275 531h7v18h-7Z"/><path clip-path="url(#d133)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 549h7v18h-7ZM218 549h7v18h-7Z"/><path clip-path="url(#d134)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 549h7v18h-7ZM246 549h7v18h-7Z"/><path clip-path="url(#d135)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 549h7v18h-7ZM275 549h7v18h-7Z"/><path clip-path="url(#d136)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M302 549h8v18h-8ZM303 549h8v18h-8Z"/><path clip-path="url(#d137)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 567h7v18h-7ZM218 567h7v18h-7Z"/><path clip-path="url(#d138)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 567h7v18h-7ZM246 567h7v18h-7Z"/><path clip-path="url(#d139)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 567h7v18h-7ZM275 567h7v18h-7Z"/><path clip-path="url(#d140)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M302 567h8v18h-8ZM303 567h8v18h-8Z"/><path clip-path="url(#d141)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 585h7v18h-7ZM218 585h7v18h-7Z"/><path clip-path="url(#d142)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 585h7v18h-7ZM246 585h7v18h-7Z"/><path clip-path="url(#d143)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 585h7v18h-7ZM275 585h7v18h-7Z"/><path clip-path="url(#d144)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M302 585h8v18h-8ZM303 585h8v18h-8Z"/><path clip-path="url(#d145)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 603h7v18h-7ZM218 603h7v18h-7Z"/><path clip-path="url(#d146)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 603h7v18h-7ZM246 603h7v18h-7Z"/><path clip-path="url(#d147)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 603h7v18h-7ZM275 603h7v18h-7Z"/><path clip-path="url(#d148)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M302 603h8v18h-8ZM303 603h8v18h-8Z"/><path clip-path="url(#d149)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M331 603h7v18h-7ZM332 603h7v18h-7Z"/><path clip-path="url(#d150)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 621h7v18h-7ZM218 621h7v18h-7Z"/><path clip-path="url(#d151)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 621h7v18h-7ZM246 621h7v18h-7Z"/><path clip-path="url(#d152)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 621h7v18h-7ZM275 621h7v18h-7Z"/><path clip-path="url(#d153)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M302 621h8v18h-8ZM303 621h8v18h-8Z"/><path clip-path="url(#d154)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M331 621h7v18h-7ZM332 621h7v18h-7Z"/><path clip-path="url(#d155)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M217 639h7v18h-7ZM218 639h7v18h-7Z"/><path clip-path="url(#d156)" fill-rule="evenodd" fill="rgb(192, 192, 192)" d="M245 639h7v18h-7ZM246 639h7v18h-7Z"/><path clip-path="url(#d157)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M274 639h7v18h-7ZM275 639h7v18h-7Z"/><path clip-path="url(#d158)" fill-rule="evenodd" fill="rgb(216, 216, 216)" d="M302 639h8v18h-8ZM303 639h8v18h-8Z"/><text class="t24" x="245.25" y="202" textLength="50.047" lengthAdjust="spacing">Private</text><text class="t25" x="302.453" y="202" textLength="35.75" lengthAdjust="spacing">items</text><text class="t26" x="338.203" y="202" textLength="14.297" lengthAdjust="spacing">()</text><text class="t24" x="359.656" y="202" textLength="14.297" lengthAdjust="spacing">As</text><text class="t27" x="381.109" y="202" textLength="64.328" lengthAdjust="spacing">StockItem</text><text class="t24" x="245.25" y="220" textLength="50.047" lengthAdjust="spacing">Private</text><text class="t25" x="302.453" y="220" textLength="35.75" lengthAdjust="spacing">count</text><text class="t24" x="345.359" y="220" textLength="14.297" lengthAdjust="spacing">As</text><text class="t28" x="366.813" y="220" textLength="28.594" lengthAdjust="spacing">Long</text><text class="t24" x="245.25" y="256" textLength="42.891" lengthAdjust="spacing">Public</text><text class="t24" x="295.297" y="256" textLength="21.453" lengthAdjust="spacing">Sub</text><text class="t29" x="323.906" y="256" textLength="21.453" lengthAdjust="spacing">Add</text><text class="t26" x="345.359" y="256">(</text><text class="t24" x="352.516" y="256" textLength="35.75" lengthAdjust="spacing">ByVal</text><text class="t30" x="395.422" y="256" textLength="28.594" lengthAdjust="spacing">name</text><text class="t24" x="431.172" y="256" textLength="14.297" lengthAdjust="spacing">As</text><text class="t28" x="452.625" y="256" textLength="42.891" lengthAdjust="spacing">String</text><text class="t26" x="495.516" y="256">,</text><text class="t24" x="509.828" y="256" textLength="35.75" lengthAdjust="spacing">ByVal</text><text class="t30" x="552.734" y="256" textLength="57.188" lengthAdjust="spacing">quantity</text><text class="t24" x="617.078" y="256" textLength="14.297" lengthAdjust="spacing">As</text><text class="t28" x="638.531" y="256" textLength="28.594" lengthAdjust="spacing">Long</text><text class="t26" x="667.125" y="256">,</text><text class="t24" x="681.438" y="256" textLength="35.75" lengthAdjust="spacing">ByVal</text><text class="t30" x="724.344" y="256" textLength="35.75" lengthAdjust="spacing">price</text><text class="t24" x="767.25" y="256" textLength="14.297" lengthAdjust="spacing">As</text><text class="t28" x="788.703" y="256" textLength="42.891" lengthAdjust="spacing">Double</text><text class="t26" x="831.594" y="256">)</text><text class="t24" x="273.844" y="274" textLength="35.75" lengthAdjust="spacing">ReDim</text><text class="t24" x="316.75" y="274" textLength="57.188" lengthAdjust="spacing">Preserve</text><text class="t25" x="381.094" y="274" textLength="35.75" lengthAdjust="spacing">items</text><text class="t26" x="416.844" y="274">(</text><text class="t25" x="424" y="274" textLength="35.75" lengthAdjust="spacing">count</text><text class="t26" x="459.75" y="274">)</text><text class="t24" x="273.844" y="292" textLength="28.594" lengthAdjust="spacing">With</text><text class="t25" x="309.594" y="292" textLength="35.75" lengthAdjust="spacing">items</text><text class="t26" x="345.344" y="292">(</text><text class="t25" x="352.5" y="292" textLength="35.75" lengthAdjust="spacing">count</text><text class="t26" x="388.25" y="292">)</text><text class="t31" x="216.656" y="310" textLength="92.922" lengthAdjust="spacing">            .</text><text class="t25" x="309.578" y="310" textLength="28.594" lengthAdjust="spacing">Name</text><text class="t26" x="345.328" y="310">=</text><text class="t32" x="359.641" y="310" textLength="28.594" lengthAdjust="spacing">name</text><text class="t31" x="216.656" y="328" textLength="92.922" lengthAdjust="spacing">            .</text><text class="t25" x="309.578" y="328" textLength="57.188" lengthAdjust="spacing">Quantity</text><text class="t26" x="373.922" y="328">=</text><text class="t30" x="388.234" y="328" textLength="57.188" lengthAdjust="spacing">quantity</text><text class="t31" x="216.656" y="346" textLength="92.922" lengthAdjust="spacing">            .</text><text class="t25" x="309.578" y="346" textLength="35.75" lengthAdjust="spacing">Price</text><text class="t26" x="352.484" y="346">=</text><text class="t30" x="366.797" y="346" textLength="35.75" lengthAdjust="spacing">price</text><text class="t24" x="273.844" y="364" textLength="21.453" lengthAdjust="spacing">End</text><text class="t24" x="302.453" y="364" textLength="28.594" lengthAdjust="spacing">With</text><text class="t25" x="273.844" y="382" textLength="35.75" lengthAdjust="spacing">count</text><text class="t26" x="316.75" y="382">=</text><text class="t25" x="331.063" y="382" textLength="35.75" lengthAdjust="spacing">count</text><text class="t26" x="373.969" y="382">+</text><text class="t33" x="388.281" y="382">1</text><text class="t24" x="245.25" y="400" textLength="21.453" lengthAdjust="spacing">End</text><text class="t24" x="273.859" y="400" textLength="21.453" lengthAdjust="spacing">Sub</text><text class="t24" x="245.25" y="436" textLength="42.891" lengthAdjust="spacing">Public</text><text class="t24" x="295.297" y="436" textLength="57.188" lengthAdjust="spacing">Function</text><text class="t29" x="359.641" y="436" textLength="35.75" lengthAdjust="spacing">Total</text><text class="t26" x="395.391" y="436">(</text><text class="t24" x="402.547" y="436" textLength="35.75" lengthAdjust="spacing">ByVal</text><text class="t30" x="445.453" y="436" textLength="50.047" lengthAdjust="spacing">taxRate</text><text class="t24" x="502.656" y="436" textLength="14.297" lengthAdjust="spacing">As</text><text class="t28" x="524.109" y="436" textLength="42.891" lengthAdjust="spacing">Double</text><text class="t26" x="567" y="436">)</text><text class="t24" x="581.313" y="436" textLength="14.297" lengthAdjust="spacing">As</text><text class="t28" x="602.766" y="436" textLength="42.891" lengthAdjust="spacing">Double</text><text class="t24" x="273.844" y="454" textLength="21.453" lengthAdjust="spacing">Dim</text><text class="t32" x="302.453" y="454">i</text><text class="t24" x="316.766" y="454" textLength="14.297" lengthAdjust="spacing">As</text><text class="t28" x="338.219" y="454" textLength="28.594" lengthAdjust="spacing">Long</text><text class="t24" x="273.844" y="472" textLength="21.453" lengthAdjust="spacing">Dim</text><text class="t32" x="302.453" y="472" textLength="57.188" lengthAdjust="spacing">subtotal</text><text class="t24" x="273.844" y="490" textLength="21.453" lengthAdjust="spacing">Dim</text><text class="t32" x="302.453" y="490" textLength="28.594" lengthAdjust="spacing">note</text><text class="t24" x="273.844" y="508" textLength="21.453" lengthAdjust="spacing">Dim</text><text class="t32" x="302.453" y="508" textLength="35.75" lengthAdjust="spacing">price</text><text class="t24" x="345.359" y="508" textLength="14.297" lengthAdjust="spacing">As</text><text class="t28" x="366.813" y="508" textLength="42.891" lengthAdjust="spacing">Double</text><text class="t24" x="273.844" y="526" textLength="21.453" lengthAdjust="spacing">For</text><text class="t32" x="302.453" y="526">i</text><text class="t26" x="316.766" y="526">=</text><text class="t33" x="331.078" y="526">0</text><text class="t24" x="345.391" y="526" textLength="14.297" lengthAdjust="spacing">To</text><text class="t25" x="366.844" y="526" textLength="35.75" lengthAdjust="spacing">count</text><text class="t26" x="409.75" y="526">-</text><text class="t33" x="424.063" y="526">1</text><text class="t24" x="302.438" y="544" textLength="14.297" lengthAdjust="spacing">If</text><text class="t25" x="323.891" y="544" textLength="35.75" lengthAdjust="spacing">items</text><text class="t26" x="359.641" y="544">(</text><text class="t32" x="366.797" y="544">i</text><text class="t26" x="373.953" y="544">)</text><text class="t31" x="381.109" y="544">.</text><text class="t25" x="388.266" y="544" textLength="57.188" lengthAdjust="spacing">Quantity</text><text class="t26" x="452.609" y="544">></text><text class="t33" x="466.922" y="544">0</text><text class="t24" x="481.234" y="544" textLength="28.594" lengthAdjust="spacing">Then</text><text class="t32" x="331.016" y="562" textLength="35.75" lengthAdjust="spacing">price</text><text class="t26" x="373.922" y="562">=</text><text class="t34" x="388.234" y="562" textLength="35.75" lengthAdjust="spacing">Round</text><text class="t26" x="423.984" y="562">(</text><text class="t25" x="431.141" y="562" textLength="35.75" lengthAdjust="spacing">items</text><text class="t26" x="466.891" y="562">(</text><text class="t32" x="474.047" y="562">i</text><text class="t26" x="481.203" y="562">)</text><text class="t31" x="488.359" y="562">.</text><text class="t25" x="495.516" y="562" textLength="35.75" lengthAdjust="spacing">Price</text><text class="t26" x="538.422" y="562">*</text><text class="t26" x="552.734" y="562">(</text><text class="t33" x="559.891" y="562">1</text><text class="t26" x="574.203" y="562">+</text><text class="t30" x="588.516" y="562" textLength="50.047" lengthAdjust="spacing">taxRate</text><text class="t26" x="638.563" y="562" textLength="14.297" lengthAdjust="spacing">),</text><text class="t33" x="660.016" y="562">2</text><text class="t26" x="667.172" y="562">)</text><text class="t32" x="331.016" y="580" textLength="57.188" lengthAdjust="spacing">subtotal</text><text class="t26" x="395.359" y="580">=</text><text class="t32" x="409.672" y="580" textLength="57.188" lengthAdjust="spacing">subtotal</text><text class="t26" x="474.016" y="580">+</text><text class="t25" x="488.328" y="580" textLength="35.75" lengthAdjust="spacing">items</text><text class="t26" x="524.078" y="580">(</text><text class="t32" x="531.234" y="580">i</text><text class="t26" x="538.391" y="580">)</text><text class="t31" x="545.547" y="580">.</text><text class="t25" x="552.703" y="580" textLength="57.188" lengthAdjust="spacing">Quantity</text><text class="t26" x="617.047" y="580">*</text><text class="t32" x="631.359" y="580" textLength="35.75" lengthAdjust="spacing">price</text><text class="t24" x="331.016" y="598" textLength="14.297" lengthAdjust="spacing">If</text><text class="t25" x="352.469" y="598" textLength="35.75" lengthAdjust="spacing">items</text><text class="t26" x="388.219" y="598">(</text><text class="t32" x="395.375" y="598">i</text><text class="t26" x="402.531" y="598">)</text><text class="t31" x="409.688" y="598">.</text><text class="t25" x="416.844" y="598" textLength="57.188" lengthAdjust="spacing">Quantity</text><text class="t26" x="481.188" y="598">></text><text class="t33" x="495.5" y="598" textLength="21.453" lengthAdjust="spacing">100</text><text class="t24" x="524.109" y="598" textLength="28.594" lengthAdjust="spacing">Then</text><text class="t32" x="359.609" y="616" textLength="28.594" lengthAdjust="spacing">note</text><text class="t26" x="395.359" y="616">=</text><text class="t35" x="409.672" y="616" textLength="146.281" lengthAdjust="spacing">"Grüße 👋 こんにちは"</text><text class="t24" x="359.609" y="634" textLength="35.75" lengthAdjust="spacing">Debug</text><text class="t31" x="395.359" y="634">.</text><text class="t24" x="402.516" y="634" textLength="35.75" lengthAdjust="spacing">Print</text><text class="t32" x="445.422" y="634" textLength="28.594" lengthAdjust="spacing">note</text><text class="t26" x="481.172" y="634">&</text><text class="t36" x="495.484" y="634" textLength="28.594" lengthAdjust="spacing">": "</text><text class="t26" x="531.234" y="634">&</text><text class="t25" x="545.547" y="634" textLength="35.75" lengthAdjust="spacing">items</text><text class="t26" x="581.297" y="634">(</text><text class="t32" x="588.453" y="634">i</text><text class="t26" x="595.609" y="634">)</text><text class="t31" x="602.766" y="634">.</text><text class="t25" x="609.922" y="634" textLength="28.594" lengthAdjust="spacing">Name</text><text class="t24" x="331.016" y="652" textLength="21.453" lengthAdjust="spacing">End</text><text class="t24" x="359.625" y="652" textLength="14.297" lengthAdjust="spacing">If</text><text class="t24" x="216.656" y="166" textLength="35.75" lengthAdjust="spacing">Class</text><text class="t37" x="259.563" y="166" textLength="64.328" lengthAdjust="spacing">Inventory</text><rect x="989" y="153" width="17" height="488" fill="rgb(239, 239, 239)"/><text class="t38" x="991.156" y="167"></text><text class="t38" x="991.156" y="638"></text></g><g clip-path="url(#d90)"><use href="#d159" transform="translate(888 153) scale(102 488)"/><use href="#d159" transform="translate(888 153) scale(102 488)"/></g><rect x="4" y="646" width="356" height="203" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M0 646h364v207h-364ZM4 646h356v203h-356Z"/><g clip-path="url(#d160)"><rect x="5" y="647" width="355" height="25" fill="rgb(191, 205, 219)"/><polygon points="4 646 360 646 360 647 5 647" fill="rgb(244, 244, 244)"/><polygon points="4 672 4 646 5 647 5 672" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d161)"><text class="t12" x="30" y="663.516" textLength="87.875" lengthAdjust="spacing">DEBUG CONSOLE</text><path d="M342 651H354A2 2 0 0 1 356 653V665A2 2 0 0 1 354 667H342A2 2 0 0 1 340 665V653A2 2 0 0 1 342 651Z" fill="rgb(240, 240, 240)"/><path fill-rule="evenodd" fill="rgb(163, 163, 163)" d="M342 651H354A2 2 0 0 1 356 653V665A2 2 0 0 1 354 667H342A2 2 0 0 1 340 665V653A2 2 0 0 1 342 651ZM342 652H354A1 1 0 0 1 355 653V665A1 1 0 0 1 354 666H342A1 1 0 0 1 341 665V653A1 1 0 0 1 342 652Z"/></g><g opacity="0.4"><g clip-path="url(#d161)"><path d="M279 652H289A3 3 0 0 1 292 655V665A3 3 0 0 1 289 668H279A3 3 0 0 1 276 665V655A3 3 0 0 1 279 652Z" fill="rgba(26, 26, 26, 0.2)"/><g clip-path="url(#d163)"><use href="#d164" transform="translate(276 637) scale(16 16)"/><use href="#d164" transform="translate(276 653) scale(16 16)"/></g></g></g><g opacity="0.4"><g clip-path="url(#d161)"><text class="t16" x="297.281" y="668.516"></text></g></g><g opacity="0.4"><g clip-path="url(#d161)"><text class="t16" x="318.281" y="668.516"></text></g></g><g clip-path="url(#d161)"><text class="t17" x="340.281" y="667.516"></text></g><g clip-path="url(#d160)"><rect x="5" y="672" width="354" height="176" fill="rgb(255, 255, 255)"/><polygon points="360 672 360 849 359 848 359 672" fill="rgb(211, 211, 211)"/><polygon points="360 849 4 849 5 848 359 848" fill="rgb(211, 211, 211)"/><polygon points="4 849 4 672 5 672 5 848" fill="rgb(191, 191, 191)"/></g><g clip-path="url(#d166)"><rect x="5" y="827" width="354" height="21" fill="rgba(229, 230, 232, 0.15)"/><path fill-rule="evenodd" fill="rgb(128, 128, 128)" d="M5 826h354v22h-354ZM5 827h354v21h-354Z"/></g><g clip-path="url(#d167)"><rect x="341" y="672" width="18" height="153" fill="rgb(240, 240, 240)"/><path fill-rule="evenodd" fill="rgb(224, 224, 224)" d="M340 672h19v153h-19ZM341 672h18v153h-18Z"/><g clip-path="url(#d169)"><use href="#d168" transform="translate(341 813) scale(16 16)"/></g><g transform="matrix(-1 0 0 -1 698.563 1360.031)"><g clip-path="url(#d170)"><use href="#d168" transform="translate(341.281 676.016) scale(16 16)"/></g></g></g><rect x="368" y="646" width="315" height="203" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M364 646h323v207h-323ZM368 646h315v203h-315Z"/><g clip-path="url(#d171)"><rect x="369" y="647" width="314" height="25" fill="rgb(191, 205, 219)"/><polygon points="368 646 683 646 683 647 369 647" fill="rgb(244, 244, 244)"/><polygon points="368 672 368 646 369 647 369 672" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d172)"><text class="t12" x="394.281" y="663.516" textLength="71.188" lengthAdjust="spacing">DIAGNOSTICS</text><path d="M665 651H677A2 2 0 0 1 679 653V665A2 2 0 0 1 677 667H665A2 2 0 0 1 663 665V653A2 2 0 0 1 665 651Z" fill="rgb(240, 240, 240)"/><path fill-rule="evenodd" fill="rgb(163, 163, 163)" d="M665 651H677A2 2 0 0 1 679 653V665A2 2 0 0 1 677 667H665A2 2 0 0 1 663 665V653A2 2 0 0 1 665 651ZM665 652H677A1 1 0 0 1 678 653V665A1 1 0 0 1 677 666H665A1 1 0 0 1 664 665V653A1 1 0 0 1 665 652Z"/><g clip-path="url(#d173)"><use href="#d78" transform="translate(374 653) scale(13 13)"/></g><path d="M512 646H545L545 646V672L545 672H512A4 4 0 0 1 508 668V650A4 4 0 0 1 512 646Z" fill="rgba(208, 101, 101, 0.5)"/><text class="t39" x="515.031" y="665.438"></text><text class="t40" x="532.188" y="663.516">0</text><rect x="545" y="646" width="38" height="26" fill="rgba(193, 196, 69, 0.7)"/><text class="t39" x="552.328" y="665.438"></text><text class="t40" x="569.484" y="663.516">4</text><text class="t39" x="589.859" y="665.438"></text><text class="t40" x="607.016" y="663.516">1</text><text class="t39" x="625.469" y="665.438"></text><text class="t40" x="642.625" y="663.516">1</text><text class="t17" x="663.078" y="667.516"></text></g><g clip-path="url(#d171)"><rect x="369" y="672" width="313" height="176" fill="rgb(255, 255, 255)"/><polygon points="683 672 683 849 682 848 682 672" fill="rgb(211, 211, 211)"/><polygon points="683 849 368 849 369 848 682 848" fill="rgb(211, 211, 211)"/><polygon points="368 849 368 672 369 672 369 848" fill="rgb(191, 191, 191)"/></g><g clip-path="url(#d174)"><rect x="372" y="675" width="290" height="23" fill="rgb(230, 230, 234)"/><text class="t41" x="393.281" y="692.016" textLength="70.781" lengthAdjust="spacing">Helpers.twin</text><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.11)" d="M369 701h296v21h-296ZM369 701h296v20h-296Z"/><rect x="372" y="725" width="290" height="23" fill="rgb(230, 230, 234)"/><text class="t41" x="393.281" y="742.016" textLength="81.156" lengthAdjust="spacing">Inventory.twin</text><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.11)" d="M369 751h296v21h-296ZM369 751h296v20h-296Z"/><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.11)" d="M369 772h296v21h-296ZM369 772h296v20h-296Z"/><rect x="372" y="796" width="290" height="23" fill="rgb(230, 230, 234)"/><text class="t41" x="393.281" y="813.016" textLength="100.172" lengthAdjust="spacing">MainModule.twin</text><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.11)" d="M369 822h296v21h-296ZM369 822h296v20h-296Z"/></g><g clip-path="url(#d175)"><text class="t42" x="384.281" y="720.016"></text><text class="t43" x="628" y="715.016" textLength="33.078" lengthAdjust="spacing">[16,15]</text></g><g clip-path="url(#d176)"><text class="t44" x="405.281" y="716.016" textLength="40.188" lengthAdjust="spacing">TB0003</text><text class="t45" x="450.469" y="716.016" textLength="165.172" lengthAdjust="spacing">Datatype has not been explicit</text><text class="t45" x="615.641" y="716.016">…</text></g><g clip-path="url(#d177)"><text class="t42" x="384.281" y="770.016"></text><text class="t43" x="628" y="765.016" textLength="33.078" lengthAdjust="spacing">[18,13]</text></g><g clip-path="url(#d178)"><text class="t44" x="405.281" y="766.016" textLength="40.188" lengthAdjust="spacing">TB0003</text><text class="t45" x="450.469" y="766.016" textLength="165.172" lengthAdjust="spacing">Datatype has not been explicit</text><text class="t45" x="615.641" y="766.016">…</text></g><g clip-path="url(#d179)"><text class="t42" x="384.281" y="791.016"></text><text class="t43" x="628" y="786.016" textLength="33.078" lengthAdjust="spacing">[19,13]</text></g><g clip-path="url(#d180)"><text class="t44" x="405.281" y="787.016" textLength="40.188" lengthAdjust="spacing">TB0003</text><text class="t45" x="450.469" y="787.016" textLength="165.172" lengthAdjust="spacing">Datatype has not been explicit</text><text class="t45" x="615.641" y="787.016">…</text></g><g clip-path="url(#d181)"><text class="t42" x="384.281" y="841.016"></text><text class="t43" x="633.984" y="836.016" textLength="27.094" lengthAdjust="spacing">[6,13]</text></g><g clip-path="url(#d182)"><text class="t44" x="405.281" y="837.016" textLength="40.188" lengthAdjust="spacing">TB0003</text><text class="t45" x="450.469" y="837.016" textLength="168.156" lengthAdjust="spacing">Datatype has not been explicitl</text><text class="t45" x="618.625" y="837.016">…</text></g><g clip-path="url(#d174)"><g clip-path="url(#d184)"><use href="#d185" transform="translate(375 680) scale(12 12)"/></g><g clip-path="url(#d187)"><use href="#d185" transform="translate(375 730) scale(12 12)"/></g><g clip-path="url(#d188)"><use href="#d185" transform="translate(375 801) scale(12 12)"/></g></g><rect x="691" y="646" width="154" height="203" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M687 646h162v207h-162ZM691 646h154v203h-154Z"/><g clip-path="url(#d189)"><rect x="692" y="647" width="153" height="25" fill="rgb(191, 205, 219)"/><polygon points="691 646 845 646 845 647 692 647" fill="rgb(244, 244, 244)"/><polygon points="691 672 691 646 692 647 692 672" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d190)"><text class="t12" x="717.078" y="663.516" textLength="60.313" lengthAdjust="spacing">CALL STACK</text><path d="M827 651H839A2 2 0 0 1 841 653V665A2 2 0 0 1 839 667H827A2 2 0 0 1 825 665V653A2 2 0 0 1 827 651Z" fill="rgb(240, 240, 240)"/><path fill-rule="evenodd" fill="rgb(163, 163, 163)" d="M827 651H839A2 2 0 0 1 841 653V665A2 2 0 0 1 839 667H827A2 2 0 0 1 825 665V653A2 2 0 0 1 827 651ZM827 652H839A1 1 0 0 1 840 653V665A1 1 0 0 1 839 666H827A1 1 0 0 1 826 665V653A1 1 0 0 1 827 652Z"/><g clip-path="url(#d191)"><use href="#d78" transform="translate(697 653) scale(13 13)"/></g><text class="t17" x="825.203" y="667.516"></text></g><g clip-path="url(#d189)"><rect x="692" y="672" width="152" height="176" fill="rgb(255, 255, 255)"/><polygon points="845 672 845 849 844 848 844 672" fill="rgb(211, 211, 211)"/><polygon points="845 849 691 849 692 848 844 848" fill="rgb(211, 211, 211)"/><polygon points="691 849 691 672 692 672 692 848" fill="rgb(191, 191, 191)"/></g><g clip-path="url(#d192)"><path fill-rule="evenodd" fill="rgba(100, 100, 100, 0.3)" d="M692 672h152v39h-152ZM692 672h152v38h-152Z"/></g><g clip-path="url(#d193)"><text class="t41" x="715.078" y="687.016" textLength="112.031" lengthAdjust="spacing">COMPILER [Win32] </text><text class="t41" x="715.078" y="704.016" textLength="60.922" lengthAdjust="spacing">v0.15.1034</text></g><g clip-path="url(#d194)"><path fill-rule="evenodd" fill="rgba(100, 100, 100, 0.3)" d="M692 711h152v22h-152ZM692 711h152v21h-152Z"/></g><g clip-path="url(#d195)"><text class="t41" x="715.078" y="726.016" textLength="123.219" lengthAdjust="spacing">MAIN_THREAD [IDLE]</text></g><g clip-path="url(#d192)"><g clip-path="url(#d196)"><use href="#d185" transform="translate(698 676) scale(10 10)"/></g></g><g clip-path="url(#d194)"><g clip-path="url(#d197)"><use href="#d185" transform="translate(698 715) scale(10 10)"/></g></g><rect x="853" y="646" width="154" height="203" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M849 646h162v207h-162ZM853 646h154v203h-154Z"/><g clip-path="url(#d198)"><rect x="854" y="647" width="153" height="25" fill="rgb(191, 205, 219)"/><polygon points="853 646 1007 646 1007 647 854 647" fill="rgb(244, 244, 244)"/><polygon points="853 672 853 646 854 647 854 672" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d199)"><text class="t12" x="879.203" y="663.516" textLength="55.234" lengthAdjust="spacing">VARIABLES</text><path d="M989 651H1001A2 2 0 0 1 1003 653V665A2 2 0 0 1 1001 667H989A2 2 0 0 1 987 665V653A2 2 0 0 1 989 651Z" fill="rgb(240, 240, 240)"/><path fill-rule="evenodd" fill="rgb(163, 163, 163)" d="M989 651H1001A2 2 0 0 1 1003 653V665A2 2 0 0 1 1001 667H989A2 2 0 0 1 987 665V653A2 2 0 0 1 989 651ZM989 652H1001A1 1 0 0 1 1002 653V665A1 1 0 0 1 1001 666H989A1 1 0 0 1 988 665V653A1 1 0 0 1 989 652Z"/><g clip-path="url(#d200)"><use href="#d78" transform="translate(859 653) scale(13 13)"/></g><text class="t17" x="987.328" y="667.516"></text></g><g clip-path="url(#d198)"><rect x="854" y="672" width="152" height="176" fill="rgb(255, 255, 255)"/><polygon points="1007 672 1007 849 1006 848 1006 672" fill="rgb(211, 211, 211)"/><polygon points="1007 849 853 849 854 848 1006 848" fill="rgb(211, 211, 211)"/><polygon points="853 849 853 672 854 672 854 848" fill="rgb(191, 191, 191)"/></g><rect x="1015" y="61" width="261" height="475" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M1011 61h269v479h-269ZM1015 61h261v475h-261Z"/><g clip-path="url(#d201)"><rect x="1016" y="62" width="260" height="25" fill="rgb(191, 205, 219)"/><polygon points="1015 61 1276 61 1276 62 1016 62" fill="rgb(244, 244, 244)"/><polygon points="1015 87 1015 61 1016 62 1016 87" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d202)"><text class="t12" x="1041.328" y="78.5" textLength="99.656" lengthAdjust="spacing">PROJECT EXPLORER</text><g clip-path="url(#d203)"><use href="#d78" transform="translate(1021 68) scale(13 13)"/></g></g><g opacity="0.4"><g clip-path="url(#d202)"><text class="t47" x="1192" y="83.5"></text></g></g><g opacity="0.4"><g clip-path="url(#d202)"><text class="t47" x="1213" y="83.5"></text></g></g><g clip-path="url(#d201)"><rect x="1016" y="87" width="259" height="448" fill="rgb(255, 255, 255)"/><polygon points="1276 87 1276 536 1275 535 1275 87" fill="rgb(211, 211, 211)"/><polygon points="1276 536 1015 536 1016 535 1275 535" fill="rgb(211, 211, 211)"/><polygon points="1015 536 1015 87 1016 87 1016 535" fill="rgb(191, 191, 191)"/></g><g clip-path="url(#d205)"><use href="#d204" transform="translate(1039 91) scale(15.918 11)"/></g><g clip-path="url(#d206)"><text class="t48" x="1059.328" y="102" textLength="73.313" lengthAdjust="spacing">FeatureTour</text></g><g clip-path="url(#d207)"><use href="#d204" transform="translate(1059 112) scale(15.918 11)"/></g><g clip-path="url(#d208)"><text class="t41" x="1079.328" y="123" textLength="128.156" lengthAdjust="spacing">ImportedTypeLibraries</text></g><g clip-path="url(#d209)"><use href="#d204" transform="translate(1059 133) scale(15.918 11)"/></g><g clip-path="url(#d210)"><text class="t41" x="1079.328" y="144" textLength="80.703" lengthAdjust="spacing">Miscellaneous</text></g><g clip-path="url(#d211)"><use href="#d204" transform="translate(1059 154) scale(15.918 11)"/></g><g clip-path="url(#d212)"><text class="t41" x="1079.328" y="165" textLength="52.516" lengthAdjust="spacing">Packages</text></g><g clip-path="url(#d213)"><use href="#d204" transform="translate(1059 175) scale(15.918 11)"/></g><g clip-path="url(#d214)"><text class="t41" x="1079.328" y="186" textLength="62.063" lengthAdjust="spacing">References</text></g><g clip-path="url(#d215)"><use href="#d204" transform="translate(1059 196) scale(15.918 11)"/></g><g clip-path="url(#d216)"><text class="t41" x="1079.328" y="207" textLength="57.531" lengthAdjust="spacing">Resources</text></g><g clip-path="url(#d217)"><use href="#d204" transform="translate(1059 217) scale(15.918 11)"/></g><g clip-path="url(#d218)"><text class="t48" x="1079.328" y="228" textLength="47.219" lengthAdjust="spacing">Sources</text></g><g clip-path="url(#d219)"><text class="t41" x="1099.328" y="249" textLength="39.938" lengthAdjust="spacing">Ev.twin</text></g><g clip-path="url(#d220)"><text class="t48" x="1099.328" y="270" textLength="77.266" lengthAdjust="spacing">Helpers.twin</text></g><g clip-path="url(#d221)"><rect x="1016" y="276" width="259" height="21" fill="rgb(239, 239, 239)"/></g><g clip-path="url(#d222)"><text class="t48" x="1099.328" y="291" textLength="89.25" lengthAdjust="spacing">Inventory.twin</text></g><g clip-path="url(#d223)"><text class="t48" x="1099.328" y="312" textLength="108.547" lengthAdjust="spacing">MainModule.twin</text></g><g clip-path="url(#d224)"><text class="t41" x="1099.328" y="333" textLength="59.469" lengthAdjust="spacing">Types.twin</text></g><g clip-path="url(#d225)"><text class="t41" x="1099.328" y="354" textLength="74.469" lengthAdjust="spacing">Watcher.twin</text></g><g clip-path="url(#d205)"><g clip-path="url(#d226)"><use href="#d185" transform="translate(1022 91) scale(10 10)"/></g></g><g clip-path="url(#d207)"><g clip-path="url(#d228)"><use href="#d229" transform="translate(1042 112) scale(10 10)"/></g></g><g clip-path="url(#d209)"><g clip-path="url(#d230)"><use href="#d229" transform="translate(1042 133) scale(10 10)"/></g></g><g clip-path="url(#d211)"><g clip-path="url(#d231)"><use href="#d229" transform="translate(1042 154) scale(10 10)"/></g></g><g clip-path="url(#d213)"><g clip-path="url(#d232)"><use href="#d229" transform="translate(1042 175) scale(10 10)"/></g></g><g clip-path="url(#d215)"><g clip-path="url(#d233)"><use href="#d229" transform="translate(1042 196) scale(10 10)"/></g></g><g clip-path="url(#d217)"><g clip-path="url(#d234)"><use href="#d185" transform="translate(1042 217) scale(10 10)"/></g></g><g clip-path="url(#d235)"><use href="#d88" transform="translate(1079 236) scale(14.705 16)"/></g><g clip-path="url(#d236)"><use href="#d88" transform="translate(1079 257) scale(14.705 16)"/></g><g clip-path="url(#d221)"><use href="#d88" transform="translate(1079 278) scale(14.705 16)"/></g><g clip-path="url(#d237)"><use href="#d88" transform="translate(1079 299) scale(14.705 16)"/></g><g clip-path="url(#d238)"><use href="#d88" transform="translate(1079 320) scale(14.705 16)"/></g><g clip-path="url(#d239)"><use href="#d88" transform="translate(1079 341) scale(14.705 16)"/></g><rect x="1015" y="540" width="261" height="309" fill="rgb(238, 238, 238)"/><path fill-rule="evenodd" fill="rgb(236, 236, 236)" d="M1011 540h269v313h-269ZM1015 540h261v309h-261Z"/><g clip-path="url(#d240)"><rect x="1016" y="541" width="260" height="25" fill="rgb(191, 205, 219)"/><polygon points="1015 540 1276 540 1276 541 1016 541" fill="rgb(244, 244, 244)"/><polygon points="1015 566 1015 540 1016 541 1016 566" fill="rgb(168, 168, 168)"/></g><g clip-path="url(#d241)"><text class="t12" x="1041.328" y="557.047" textLength="61.438" lengthAdjust="spacing">PROPERTIES</text><g clip-path="url(#d242)"><use href="#d78" transform="translate(1021 546) scale(13 13)"/></g></g><g clip-path="url(#d240)"><rect x="1016" y="566" width="259" height="282" fill="rgb(255, 255, 255)"/><polygon points="1276 566 1276 849 1275 848 1275 566" fill="rgb(211, 211, 211)"/><polygon points="1276 849 1015 849 1016 848 1275 848" fill="rgb(211, 211, 211)"/><polygon points="1015 849 1015 566 1016 566 1016 848" fill="rgb(191, 191, 191)"/></g><use href="#d244" transform="translate(390.5 858.042) scale(21 15.916)"/><use href="#d247" transform="translate(423.75 858.802) scale(17.5 14.395)"/><use href="#d249" transform="translate(453.75 857.918) scale(16.5 16.163)"/><g clip-path="url(#d91)"><use href="#d250" transform="translate(990 170) scale(16 454)"/><path d="M995 170H999A2 2 0 0 1 1001 172V317A2 2 0 0 1 999 319H995A2 2 0 0 1 993 317V172A2 2 0 0 1 995 170Z" fill="rgba(190, 200, 200, 0.8)"/></g><path d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11Z" fill="rgba(0, 0, 0, 0.24)" filter="url(#d251)"/><path d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11ZM62 12H1218A2 2 0 0 1 1220 14V868L1220 868H60L60 868V14A2 2 0 0 1 62 12Z" clip-path="url(#d252)"/><path fill-rule="evenodd" fill="rgb(147, 136, 136)" d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11ZM62 12H1218A2 2 0 0 1 1220 14V868L1220 868H60L60 868V14A2 2 0 0 1 62 12Z" clip-path="url(#d253)"/><path fill-rule="evenodd" fill="rgb(147, 136, 136)" d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11ZM62 12H1218A2 2 0 0 1 1220 14V868L1220 868H60L60 868V14A2 2 0 0 1 62 12Z" clip-path="url(#d254)"/><path fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11ZM62 12H1218A2 2 0 0 1 1220 14V868L1220 868H60L60 868V14A2 2 0 0 1 62 12Z" clip-path="url(#d255)"/><path fill-rule="evenodd" fill="rgba(255, 255, 255, 0.06)" d="M62 8H1218A6 6 0 0 1 1224 14V872L1224 872H56L56 872V14A6 6 0 0 1 62 8ZM62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11Z"/><path d="M63 12H1217A3 3 0 0 1 1220 15V39L1220 39H60L60 39V15A3 3 0 0 1 63 12Z" fill="rgb(0, 110, 200)"/><text class="t49" x="70" y="31" textLength="89.828" lengthAdjust="spacing">Object Browser</text><text class="t50" x="1198" y="33"></text><path d="M60 819H1220L1220 819V860A8 8 0 0 1 1212 868H68A8 8 0 0 1 60 860V819L60 819Z" fill="rgb(246, 246, 246)"/><path fill-rule="evenodd" fill="rgb(128, 128, 128)" d="M60 819H1220L1220 819V860A8 8 0 0 1 1212 868H68A8 8 0 0 1 60 860V819L60 819ZM60 820H1220L1220 820V860A8 8 0 0 1 1212 868H68A8 8 0 0 1 60 860V820L60 820Z"/><rect x="991" y="832" width="114" height="28" fill="rgba(124, 124, 124, 0.47)" filter="url(#d256)"/><rect x="990" y="831" width="112" height="26" fill="rgb(251, 253, 255)"/><polygon points="989 830 1103 830 1102 831 990 831" fill="rgb(155, 155, 155)"/><polygon points="1103 830 1103 858 1102 857 1102 831" fill="rgb(94, 94, 94)"/><polygon points="1103 858 989 858 990 857 1102 857" fill="rgb(94, 94, 94)"/><polygon points="989 858 989 830 990 831 990 857" fill="rgb(155, 155, 155)"/><text class="t41" x="1000.141" y="848.5" textLength="91.859" lengthAdjust="spacing">Go to Definition</text><rect x="1125" y="832" width="80" height="28" fill="rgba(124, 124, 124, 0.47)" filter="url(#d257)"/><rect x="1124" y="831" width="78" height="26" fill="rgb(251, 253, 255)"/><polygon points="1123 830 1203 830 1202 831 1124 831" fill="rgb(155, 155, 155)"/><polygon points="1203 830 1203 858 1202 857 1202 831" fill="rgb(94, 94, 94)"/><polygon points="1203 858 1123 858 1124 857 1202 857" fill="rgb(94, 94, 94)"/><polygon points="1123 858 1123 830 1124 831 1124 857" fill="rgb(155, 155, 155)"/><text class="t41" x="1147.422" y="848.5" textLength="31.141" lengthAdjust="spacing">Close</text><rect x="60" y="39" width="1160" height="780" fill="rgb(237, 240, 245)"/><g clip-path="url(#d258)"><text class="t51" x="72" y="62" textLength="83.984" lengthAdjust="spacing">Project / Library</text><text class="t51" x="316" y="62" textLength="174.938" lengthAdjust="spacing">Search components and members</text><g clip-path="url(#d261)"><use href="#d260" transform="translate(980 40)"/><use href="#d260" transform="translate(1010 40)"/><use href="#d260" transform="translate(1040 40)"/><use href="#d260" transform="translate(980 69)"/><use href="#d260" transform="translate(1010 69)"/><use href="#d260" transform="translate(1040 69)"/><use href="#d260" transform="translate(980 98)"/><use href="#d260" transform="translate(1010 98)"/><use href="#d260" transform="translate(1040 98)"/></g><path fill-rule="evenodd" fill="rgb(170, 182, 197)" d="M1012 68H1038A3 3 0 0 1 1041 71V96A3 3 0 0 1 1038 99H1012A3 3 0 0 1 1009 96V71A3 3 0 0 1 1012 68ZM1012 69H1038A2 2 0 0 1 1040 71V96A2 2 0 0 1 1038 98H1012A2 2 0 0 1 1010 96V71A2 2 0 0 1 1012 69Z"/><text class="t52" x="72" y="125.5" textLength="71.563" lengthAdjust="spacing">Components</text><text class="t53" x="541.563" y="125.5" textLength="38.438" lengthAdjust="spacing">9 items</text><text class="t52" x="654" y="125.5" textLength="53.031" lengthAdjust="spacing">Members</text><text class="t53" x="1109.563" y="125.5" textLength="38.438" lengthAdjust="spacing">5 items</text><text class="t52" x="72" y="583.891" textLength="64.734" lengthAdjust="spacing">Description</text><path d="M75 68H304A3 3 0 0 1 307 71V96A3 3 0 0 1 304 99H75A3 3 0 0 1 72 96V71A3 3 0 0 1 75 68Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(165, 177, 192)" d="M75 68H304A3 3 0 0 1 307 71V96A3 3 0 0 1 304 99H75A3 3 0 0 1 72 96V71A3 3 0 0 1 75 68ZM75 69H304A2 2 0 0 1 306 71V96A2 2 0 0 1 304 98H75A2 2 0 0 1 73 96V71A2 2 0 0 1 75 69Z"/><g clip-path="url(#d262)"><text class="t54" x="85" y="89" textLength="119.422" lengthAdjust="spacing">FeatureTour (project)</text></g><path d="M294 81L298 85L302 81" fill="none" stroke="rgb(22, 34, 51)" stroke-width="2"/><svg x="1016" y="75" width="18" height="18" viewBox="0 0 24 24" style="color:rgb(37, 50, 71);fill:none;stroke:rgb(37, 50, 71);stroke-width:1.9px;stroke-linecap:round;stroke-linejoin:round"><path d="M15 18l-6-6 6-6M9 12h11"/></svg><path d="M1089 68H1199A4 4 0 0 1 1203 72V95A4 4 0 0 1 1199 99H1089A4 4 0 0 1 1085 95V72A4 4 0 0 1 1089 68Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(170, 182, 197)" d="M1089 68H1199A4 4 0 0 1 1203 72V95A4 4 0 0 1 1199 99H1089A4 4 0 0 1 1085 95V72A4 4 0 0 1 1089 68ZM1089 69H1199A3 3 0 0 1 1202 72V95A3 3 0 0 1 1199 98H1089A3 3 0 0 1 1086 95V72A3 3 0 0 1 1089 69Z"/></g><g clip-path="url(#d263)"><rect x="1086" y="69" width="58" height="29" fill="rgb(43, 97, 167)"/><path fill-rule="evenodd" fill="rgb(170, 182, 197)" d="M1086 69h59v29h-59ZM1086 69h58v29h-58Z"/><text class="t55" x="1095.813" y="88.5" textLength="38.125" lengthAdjust="spacing">Browse</text><text class="t56" x="1154.938" y="88.5" textLength="37.063" lengthAdjust="spacing">Results</text></g><g clip-path="url(#d258)"><path d="M74 134H638A2 2 0 0 1 640 136V557A2 2 0 0 1 638 559H74A2 2 0 0 1 72 557V136A2 2 0 0 1 74 134Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(170, 184, 202)" d="M74 134H638A2 2 0 0 1 640 136V557A2 2 0 0 1 638 559H74A2 2 0 0 1 72 557V136A2 2 0 0 1 74 134ZM74 135H638A1 1 0 0 1 639 136V557A1 1 0 0 1 638 558H74A1 1 0 0 1 73 557V136A1 1 0 0 1 74 135Z"/><path d="M656 134H1206A2 2 0 0 1 1208 136V557A2 2 0 0 1 1206 559H656A2 2 0 0 1 654 557V136A2 2 0 0 1 656 134Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(170, 184, 202)" d="M656 134H1206A2 2 0 0 1 1208 136V557A2 2 0 0 1 1206 559H656A2 2 0 0 1 654 557V136A2 2 0 0 1 656 134ZM656 135H1206A1 1 0 0 1 1207 136V557A1 1 0 0 1 1206 558H656A1 1 0 0 1 655 557V136A1 1 0 0 1 656 135Z"/><path d="M319 68H997A3 3 0 0 1 1000 71V96A3 3 0 0 1 997 99H319A3 3 0 0 1 316 96V71A3 3 0 0 1 319 68Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(165, 177, 192)" d="M319 68H997A3 3 0 0 1 1000 71V96A3 3 0 0 1 997 99H319A3 3 0 0 1 316 96V71A3 3 0 0 1 319 68ZM319 69H997A2 2 0 0 1 999 71V96A2 2 0 0 1 997 98H319A2 2 0 0 1 317 96V71A2 2 0 0 1 319 69Z"/><g clip-path="url(#d264)"><text class="t57" x="325" y="89" textLength="127.297" lengthAdjust="spacing">Type a name to filter…</text></g><text class="t58" x="972.859" y="88.5" textLength="14.906" lengthAdjust="spacing">Aa</text></g><g opacity="0.44"><g clip-path="url(#d258)"><g clip-path="url(#d265)"><use href="#d260" transform="translate(1018 40)"/><use href="#d260" transform="translate(1048 40)"/><use href="#d260" transform="translate(1078 40)"/><use href="#d260" transform="translate(1018 69)"/><use href="#d260" transform="translate(1048 69)"/><use href="#d260" transform="translate(1078 69)"/><use href="#d260" transform="translate(1018 98)"/><use href="#d260" transform="translate(1048 98)"/><use href="#d260" transform="translate(1078 98)"/></g><path fill-rule="evenodd" fill="rgb(170, 182, 197)" d="M1050 68H1076A3 3 0 0 1 1079 71V96A3 3 0 0 1 1076 99H1050A3 3 0 0 1 1047 96V71A3 3 0 0 1 1050 68ZM1050 69H1076A2 2 0 0 1 1078 71V96A2 2 0 0 1 1076 98H1050A2 2 0 0 1 1048 96V71A2 2 0 0 1 1050 69Z"/><svg x="1054" y="75" width="18" height="18" viewBox="0 0 24 24" style="color:rgb(37, 50, 71);fill:none;stroke:rgb(37, 50, 71);stroke-width:1.9px;stroke-linecap:round;stroke-linejoin:round"><path d="M9 18l6-6-6-6M15 12H4"/></svg></g></g><g clip-path="url(#d258)"><svg x="592" y="112" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(102, 121, 147);fill:none;stroke:rgb(102, 121, 147);stroke-width:1.9px;stroke-linecap:round;stroke-linejoin:round"><path d="M3 6h12M3 11h9M3 16h6M18 5v14m-3-3 3 3 3-3"/></svg><svg x="619" y="112" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(102, 121, 147);fill:none;stroke:rgb(102, 121, 147);stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round"><path d="M4 5h16l-6.4 7.5v5.2L10.4 20v-7.5L4 5z"/></svg></g><g clip-path="url(#d266)"><path d="M83 141H96A2 2 0 0 1 98 143V155A2 2 0 0 1 96 157H83A2 2 0 0 1 81 155V143A2 2 0 0 1 83 141Z" fill="rgb(255, 240, 216)"/><path fill-rule="evenodd" fill="rgb(238, 208, 158)" d="M83 141H96A2 2 0 0 1 98 143V155A2 2 0 0 1 96 157H83A2 2 0 0 1 81 155V143A2 2 0 0 1 83 141ZM83 142H96A1 1 0 0 1 97 143V155A1 1 0 0 1 96 156H83A1 1 0 0 1 82 155V143A1 1 0 0 1 83 142Z"/><text class="t59" x="86.828" y="152.5">E</text></g><g clip-path="url(#d267)"><text class="t60" x="106" y="152.75" textLength="36.844" lengthAdjust="spacing">Colour</text></g><g clip-path="url(#d268)"><path d="M83 168H96A2 2 0 0 1 98 170V182A2 2 0 0 1 96 184H83A2 2 0 0 1 81 182V170A2 2 0 0 1 83 168Z" fill="rgb(220, 232, 252)"/><path fill-rule="evenodd" fill="rgb(150, 180, 220)" d="M83 168H96A2 2 0 0 1 98 170V182A2 2 0 0 1 96 184H83A2 2 0 0 1 81 182V170A2 2 0 0 1 83 168ZM83 169H96A1 1 0 0 1 97 170V182A1 1 0 0 1 96 183H83A1 1 0 0 1 82 182V170A1 1 0 0 1 83 169Z"/><text class="t61" x="86.375" y="179.5">C</text></g><g clip-path="url(#d269)"><text class="t60" x="106" y="179.75" textLength="12.313" lengthAdjust="spacing">Ev</text></g><g clip-path="url(#d270)"><path d="M83 195H96A2 2 0 0 1 98 197V209A2 2 0 0 1 96 211H83A2 2 0 0 1 81 209V197A2 2 0 0 1 83 195Z" fill="rgb(220, 232, 252)"/><path fill-rule="evenodd" fill="rgb(150, 180, 220)" d="M83 195H96A2 2 0 0 1 98 197V209A2 2 0 0 1 96 211H83A2 2 0 0 1 81 209V197A2 2 0 0 1 83 195ZM83 196H96A1 1 0 0 1 97 197V209A1 1 0 0 1 96 210H83A1 1 0 0 1 82 209V197A1 1 0 0 1 83 196Z"/><text class="t61" x="86.375" y="206.5">C</text></g><g clip-path="url(#d271)"><text class="t60" x="106" y="206.75" textLength="19.063" lengthAdjust="spacing">Ev2</text></g><g clip-path="url(#d272)"><path d="M83 222H96A2 2 0 0 1 98 224V236A2 2 0 0 1 96 238H83A2 2 0 0 1 81 236V224A2 2 0 0 1 83 222Z" fill="rgb(225, 243, 232)"/><path fill-rule="evenodd" fill="rgb(169, 208, 182)" d="M83 222H96A2 2 0 0 1 98 224V236A2 2 0 0 1 96 238H83A2 2 0 0 1 81 236V224A2 2 0 0 1 83 222ZM83 223H96A1 1 0 0 1 97 224V236A1 1 0 0 1 96 237H83A1 1 0 0 1 82 236V224A1 1 0 0 1 83 223Z"/><text class="t62" x="84.703" y="233.5">M</text></g><g clip-path="url(#d273)"><text class="t60" x="106" y="233.75" textLength="41.984" lengthAdjust="spacing">Helpers</text></g><g clip-path="url(#d274)"><rect x="73" y="243" width="566" height="27" fill="rgb(43, 97, 167)"/></g><g clip-path="url(#d275)"><path d="M83 249H96A2 2 0 0 1 98 251V263A2 2 0 0 1 96 265H83A2 2 0 0 1 81 263V251A2 2 0 0 1 83 249Z" fill="rgb(220, 232, 252)"/><path fill-rule="evenodd" fill="rgb(150, 180, 220)" d="M83 249H96A2 2 0 0 1 98 251V263A2 2 0 0 1 96 265H83A2 2 0 0 1 81 263V251A2 2 0 0 1 83 249ZM83 250H96A1 1 0 0 1 97 251V263A1 1 0 0 1 96 264H83A1 1 0 0 1 82 263V251A1 1 0 0 1 83 250Z"/><text class="t61" x="86.375" y="260.5">C</text></g><g clip-path="url(#d276)"><text class="t63" x="106" y="260.75" textLength="51.953" lengthAdjust="spacing">Inventory</text></g><g clip-path="url(#d277)"><path d="M83 276H96A2 2 0 0 1 98 278V290A2 2 0 0 1 96 292H83A2 2 0 0 1 81 290V278A2 2 0 0 1 83 276Z" fill="rgb(225, 243, 232)"/><path fill-rule="evenodd" fill="rgb(169, 208, 182)" d="M83 276H96A2 2 0 0 1 98 278V290A2 2 0 0 1 96 292H83A2 2 0 0 1 81 290V278A2 2 0 0 1 83 276ZM83 277H96A1 1 0 0 1 97 278V290A1 1 0 0 1 96 291H83A1 1 0 0 1 82 290V278A1 1 0 0 1 83 277Z"/><text class="t62" x="84.703" y="287.5">M</text></g><g clip-path="url(#d278)"><text class="t60" x="106" y="287.75" textLength="70.234" lengthAdjust="spacing">MainModule</text></g><g clip-path="url(#d279)"><path d="M83 303H96A2 2 0 0 1 98 305V317A2 2 0 0 1 96 319H83A2 2 0 0 1 81 317V305A2 2 0 0 1 83 303Z" fill="rgb(237, 229, 252)"/><path fill-rule="evenodd" fill="rgb(197, 172, 232)" d="M83 303H96A2 2 0 0 1 98 305V317A2 2 0 0 1 96 319H83A2 2 0 0 1 81 317V305A2 2 0 0 1 83 303ZM83 304H96A1 1 0 0 1 97 305V317A1 1 0 0 1 96 318H83A1 1 0 0 1 82 317V305A1 1 0 0 1 83 304Z"/><text class="t64" x="86.563" y="314.5">T</text></g><g clip-path="url(#d280)"><text class="t60" x="106" y="314.75" textLength="54.656" lengthAdjust="spacing">StockItem</text></g><g clip-path="url(#d281)"><path d="M83 330H96A2 2 0 0 1 98 332V344A2 2 0 0 1 96 346H83A2 2 0 0 1 81 344V332A2 2 0 0 1 83 330Z" fill="rgb(225, 243, 232)"/><path fill-rule="evenodd" fill="rgb(169, 208, 182)" d="M83 330H96A2 2 0 0 1 98 332V344A2 2 0 0 1 96 346H83A2 2 0 0 1 81 344V332A2 2 0 0 1 83 330ZM83 331H96A1 1 0 0 1 97 332V344A1 1 0 0 1 96 345H83A1 1 0 0 1 82 344V332A1 1 0 0 1 83 331Z"/><text class="t62" x="84.703" y="341.5">M</text></g><g clip-path="url(#d282)"><text class="t60" x="106" y="341.75" textLength="31.109" lengthAdjust="spacing">Types</text></g><g clip-path="url(#d283)"><path d="M83 357H96A2 2 0 0 1 98 359V371A2 2 0 0 1 96 373H83A2 2 0 0 1 81 371V359A2 2 0 0 1 83 357Z" fill="rgb(220, 232, 252)"/><path fill-rule="evenodd" fill="rgb(150, 180, 220)" d="M83 357H96A2 2 0 0 1 98 359V371A2 2 0 0 1 96 373H83A2 2 0 0 1 81 371V359A2 2 0 0 1 83 357ZM83 358H96A1 1 0 0 1 97 359V371A1 1 0 0 1 96 372H83A1 1 0 0 1 82 371V359A1 1 0 0 1 83 358Z"/><text class="t61" x="86.375" y="368.5">C</text></g><g clip-path="url(#d284)"><text class="t60" x="106" y="368.75" textLength="45.516" lengthAdjust="spacing">Watcher</text></g><g clip-path="url(#d258)"><path d="M647 306H647A1 1 0 0 1 648 307V359A1 1 0 0 1 647 360H647A1 1 0 0 1 646 359V307A1 1 0 0 1 647 306Z" fill="rgb(164, 176, 189)"/><svg x="1160" y="112" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(102, 121, 147);fill:none;stroke:rgb(102, 121, 147);stroke-width:1.9px;stroke-linecap:round;stroke-linejoin:round"><path d="M3 6h12M3 11h9M3 16h6M18 5v14m-3-3 3 3 3-3"/></svg><svg x="1187" y="112" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(102, 121, 147);fill:none;stroke:rgb(102, 121, 147);stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round"><path d="M4 5h16l-6.4 7.5v5.2L10.4 20v-7.5L4 5z"/></svg></g><g clip-path="url(#d285)"><path d="M665 141H678A2 2 0 0 1 680 143V155A2 2 0 0 1 678 157H665A2 2 0 0 1 663 155V143A2 2 0 0 1 665 141Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 141H678A2 2 0 0 1 680 143V155A2 2 0 0 1 678 157H665A2 2 0 0 1 663 155V143A2 2 0 0 1 665 141ZM665 142H678A1 1 0 0 1 679 143V155A1 1 0 0 1 678 156H665A1 1 0 0 1 664 155V143A1 1 0 0 1 665 142Z"/><text class="t65" x="668.688" y="152.5">S</text></g><g clip-path="url(#d286)"><text class="t60" x="688" y="152.75" textLength="22.797" lengthAdjust="spacing">Add</text></g><g clip-path="url(#d287)"><path d="M665 168H678A2 2 0 0 1 680 170V182A2 2 0 0 1 678 184H665A2 2 0 0 1 663 182V170A2 2 0 0 1 665 168Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 168H678A2 2 0 0 1 680 170V182A2 2 0 0 1 678 184H665A2 2 0 0 1 663 182V170A2 2 0 0 1 665 168ZM665 169H678A1 1 0 0 1 679 170V182A1 1 0 0 1 678 183H665A1 1 0 0 1 664 182V170A1 1 0 0 1 665 169Z"/><text class="t65" x="668.688" y="179.5">S</text></g><g clip-path="url(#d288)"><text class="t60" x="688" y="179.75" textLength="28.016" lengthAdjust="spacing">Clear</text></g><g clip-path="url(#d289)"><path d="M665 195H678A2 2 0 0 1 680 197V209A2 2 0 0 1 678 211H665A2 2 0 0 1 663 209V197A2 2 0 0 1 665 195Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 195H678A2 2 0 0 1 680 197V209A2 2 0 0 1 678 211H665A2 2 0 0 1 663 209V197A2 2 0 0 1 665 195ZM665 196H678A1 1 0 0 1 679 197V209A1 1 0 0 1 678 210H665A1 1 0 0 1 664 209V197A1 1 0 0 1 665 196Z"/><text class="t65" x="668.609" y="206.5">ƒ</text></g><g clip-path="url(#d290)"><text class="t60" x="688" y="206.75" textLength="23.578" lengthAdjust="spacing">Find</text></g><g clip-path="url(#d291)"><path d="M665 222H678A2 2 0 0 1 680 224V236A2 2 0 0 1 678 238H665A2 2 0 0 1 663 236V224A2 2 0 0 1 665 222Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 222H678A2 2 0 0 1 680 224V236A2 2 0 0 1 678 238H665A2 2 0 0 1 663 236V224A2 2 0 0 1 665 222ZM665 223H678A1 1 0 0 1 679 224V236A1 1 0 0 1 678 237H665A1 1 0 0 1 664 236V224A1 1 0 0 1 665 223Z"/><text class="t65" x="668.609" y="233.5">ƒ</text></g><g clip-path="url(#d292)"><text class="t60" x="688" y="233.75" textLength="68.125" lengthAdjust="spacing">ItemByIndex</text></g><g clip-path="url(#d293)"><rect x="655" y="243" width="552" height="27" fill="rgb(43, 97, 167)"/></g><g clip-path="url(#d294)"><path d="M665 249H678A2 2 0 0 1 680 251V263A2 2 0 0 1 678 265H665A2 2 0 0 1 663 263V251A2 2 0 0 1 665 249Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 249H678A2 2 0 0 1 680 251V263A2 2 0 0 1 678 265H665A2 2 0 0 1 663 263V251A2 2 0 0 1 665 249ZM665 250H678A1 1 0 0 1 679 251V263A1 1 0 0 1 678 264H665A1 1 0 0 1 664 263V251A1 1 0 0 1 665 250Z"/><text class="t65" x="668.609" y="260.5">ƒ</text></g><g clip-path="url(#d295)"><text class="t63" x="688" y="260.75" textLength="26.281" lengthAdjust="spacing">Total</text></g><g clip-path="url(#d258)"><rect x="617" y="561" width="46" height="2" fill="rgb(164, 176, 189)"/><path d="M74 592H1206A2 2 0 0 1 1208 594V807A2 2 0 0 1 1206 809H74A2 2 0 0 1 72 807V594A2 2 0 0 1 74 592Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(170, 184, 202)" d="M74 592H1206A2 2 0 0 1 1208 594V807A2 2 0 0 1 1206 809H74A2 2 0 0 1 72 807V594A2 2 0 0 1 74 592ZM74 593H1206A1 1 0 0 1 1207 594V807A1 1 0 0 1 1206 808H74A1 1 0 0 1 73 807V594A1 1 0 0 1 74 593Z"/></g><g clip-path="url(#d296)"><text class="t66" x="88" y="622.391" textLength="100.422" lengthAdjust="spacing">Function Total</text><path d="M199 607H237A2 2 0 0 1 239 609V625A2 2 0 0 1 237 627H199A2 2 0 0 1 197 625V609A2 2 0 0 1 199 607Z" fill="rgb(239, 243, 248)"/><path fill-rule="evenodd" fill="rgb(217, 227, 238)" d="M199 607H237A2 2 0 0 1 239 609V625A2 2 0 0 1 237 627H199A2 2 0 0 1 197 625V609A2 2 0 0 1 199 607ZM199 608H237A1 1 0 0 1 238 609V625A1 1 0 0 1 237 626H199A1 1 0 0 1 198 625V609A1 1 0 0 1 199 608Z"/><text class="t67" x="204.422" y="620.063" textLength="27.938" lengthAdjust="spacing">Public</text><text class="t68" x="88" y="643.391" textLength="63.203" lengthAdjust="spacing">FeatureTour </text><text class="t68" x="151.188" y="643.391" textLength="5.656" lengthAdjust="spacing">· </text><text class="t68" x="156.828" y="643.391" textLength="47.813" lengthAdjust="spacing">Inventory</text><rect x="91" y="660" width="1100" height="34" fill="rgb(244, 247, 252)"/><polygon points="88 659 1192 659 1191 660 91 660" fill="rgb(220, 230, 243)"/><polygon points="1192 659 1192 695 1191 694 1191 660" fill="rgb(220, 230, 243)"/><polygon points="1192 695 88 695 91 694 1191 694" fill="rgb(220, 230, 243)"/><polygon points="88 695 88 659 91 660 91 694" fill="rgb(91, 146, 215)"/><text class="t69" x="102" y="681.406" textLength="415.656" lengthAdjust="spacing">FeatureTour._Inventory.Total(ByVal taxRate As Double) As Double</text><path fill-rule="evenodd" fill="rgb(230, 236, 243)" d="M88 707h1104v26h-1104ZM88 708h1104v25h-1104Z"/><text class="t70" x="88" y="729.406" textLength="257.203" lengthAdjust="spacing">Source: /FeatureTour/Sources/Inventory.twin (line 16)</text></g><g clip-path="url(#d258)"><path d="M1152 604H1175A3 3 0 0 1 1178 607V629A3 3 0 0 1 1175 632H1152A3 3 0 0 1 1149 629V607A3 3 0 0 1 1152 604Z" fill="rgb(248, 250, 252)"/><path fill-rule="evenodd" fill="rgb(197, 210, 225)" d="M1152 604H1175A3 3 0 0 1 1178 607V629A3 3 0 0 1 1175 632H1152A3 3 0 0 1 1149 629V607A3 3 0 0 1 1152 604ZM1152 605H1175A2 2 0 0 1 1177 607V629A2 2 0 0 1 1175 631H1152A2 2 0 0 1 1150 629V607A2 2 0 0 1 1152 605Z"/><svg x="1155" y="610" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(56, 90, 128);fill:none;stroke:rgb(56, 90, 128);stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round"><path d="M8 7h11a2 2 0 012 2v10a2 2 0 01-2 2H9a2 2 0 01-2-2V8a1 1 0 011-1zM16 7V5a2 2 0 00-2-2H5a2 2 0 00-2 2v9a2 2 0 002 2h2"/></svg></g></svg> diff --git a/docs/IDE/Code/Images/Object_Browser.png b/docs/IDE/Code/Images/Object_Browser.png new file mode 100644 index 000000000..d83ec93cf Binary files /dev/null and b/docs/IDE/Code/Images/Object_Browser.png differ diff --git a/docs/IDE/Code/Images/Object_Browser.svg b/docs/IDE/Code/Images/Object_Browser.svg new file mode 100644 index 000000000..d179ba621 --- /dev/null +++ b/docs/IDE/Code/Images/Object_Browser.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1162" height="857.5" viewBox="59 11 1162 857.5" data-clip="59 11 1162 857.5"><style>text{white-space:pre}@font-face{font-family:"f0";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f1";src:url(data:font/woff2;base64,d09GMgABAAAAAAWAAAsAAAAACVgAAAUyAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoGYACBIAqLBIhpATYCJAMkCyIABCAFgggHIBtYByjGh8dNe58ES8AToE5V57Qrc0EmJnSi9M5hYjA1YGqeTp2Jy2lj4Q+QpnhxKL9G035ha1rWZRsk0ET2sDFBujiiqamIV02Hc/l1IAAYpCANolp1Gtmg6tfZNQAm0AAQDiMupkkmmQIxgL24CCADzFOgQuPWIogp8DbNetTuhv1Cv7LBJAtAFKmL7a7EK6rVVJIDBaIgjQn/Qyw0oKAS+gsuYZgwRvhXmCHMEzYK+4SjZTXKmpcNKBscDgNCv02/mvfxk3gP7+ZdfHe+GV+Lt3LHuV3cQm4+CGLRyGqwrNWozfFUgCyuvS9KrwviBARikUWgvJqWRaAX29KMVEHTYlqhlMmztga9wqilOI6mFXLN1ahMZgUrYYaaGOt0EgdnZ8DautoMDqN9ciKfmW7MyDSkZXDpDiVRQPPshAELl++0Gx1Og+3Y59v4tp7T+90HznjPHSo9eNZGvCc2uNcfd7pnePylM70++/AR2i7fwe+BO2vW9qTNlhVrFyyIWli4cpt9W+a62NK1hlDFFZu5wOUrVXxbHFa+qCpXXGSwFhudVlLMpTOegDvIsgQA/5yV7dJ4J5PB8s15pIFIkjEvOcE+UhDcsCgtcPxoiiEsLFy3y99s5S7jqqVLMkInDycF1i/ekLx8S6qDJUw2GNKW5cExzQyEMRC7ZzGZZ3WyYBCFtp7Tu5413cY7g1fObbp6loFn59rSdbu8O9a4V29nnLVRK7vIYmYSKhfn1iF1c6xVEtn4wqq2uqSOITejckoCY+YsadlcLdTms9IL+Xg2MbVKZo5jJusNwh1YtmLO3Gwf651Z6vfPmOFzGlnexnTlGIOTbcvaYZyNdRAGhLAIpLZvp+rk3G7c+JDuUNgdqlcLdt0vbiVUauLfgF3W03fuvPz16/W9e2fvHP1Dopc0tPG+6nK/zl9F79fD91/NWndqkanmHQp7wGdK2phZL3NjvXJi4vsHcTkPix9mo4FPFtLMacVQe6mgXML3wCJTsz/DrSplXn3gaPm1u+XCt+xur1pFrTJ/aDWplDPK35xuYW4lfDE0NtfVfbNTo8+ePpuvi0G7Hcrhp4dX5lalhji5Xq4IS9WKytNtOjQoiG91+N/GgQR9oAm5YwL+hroGVSpjkanFH2+Gx+yrn9prwxrLBXn0qemtQ3Hv9dRefsXH8lqkNHbPyHgwX2bXx0436UyuhqaGiDJ9/G/3f+Ptn3NzYfzIDaOCD4I5s+OHS2bpOuiSddmu2JsZZ/7XW6HrkFtdBy+rQUo66qv1jN9l7N4jp0f3HHsx2WHEl72WIsut4O6lRUv3zDk1AZ2as2etUF7fiIjIgTvJasnUiKmfV2tPDowcjw88qV392W4qWU12dmywQqn7T6eudGXN6jETWkjku7Seh1fbN0Hyod4XR/buroGk58iLvXsNt5lo0ox6MubzmD/O9Dl+tYNOb9Kn/KPn+C8AABAp3gGsxncoEh9DeI7nigRyszYIG0iUN2vRG6GokOLNPlR+DlBF5RwCgABjlsq6dlQXfZKxJAsAxiSvdwsTbuRfJOciiwwiQCHA5iDJ2qL63QQE6hFxA+BiAkBDSmA8CDJgjOFFMvQABULLQaACJtQivUpN6eFMO8QwIbpcsuhgUA/le7NIwRh0xUB0Q2+YPAAt0B09UYJ+6IwhcEwlh2Aoem+Im5GPnF48Dzb0KnjzUYL5HuB1hfgQmOFQ5LilBJ3RT2wJ1wTf7TrZjJoPx7ujF1ytZRAsyOV7XMi6hO0n8kDkPBHqDwqZewoAAA==)}@font-face{font-family:"f3";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f4";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f5";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f6";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f7";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f8";src:url(data:font/woff2;base64,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)}@font-face{font-family:"f9";src:url(data:font/woff2;base64,d09GMgABAAAAACO4ABMAAAAATvAAACNSAAWeuAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbhEIcgUgGYBaLYACBHAiULgmUXBEQCqhQozwShTABNgIkA4EYC04ABCAFpGQHIAyILRvESifEmz0l4XZgYrn6QxiJEDYOQCJsL4oSSbqG6P//vycnY7ihAerK3g0SyCFEDWfak6vWTCsUapmk4qYtQIUrKq+WQeirqJJYMaLkPENoPDE2w7nQQmpwKjxfdhmX+DW4r9pXm/OLxT51x+fMh6E00j+OzWTiOtxJx9gXIqJzEe/ERjFmFngM/o0HOL5gGiTRZGymw6Z5ssReNdnnEN+EH9H+C7+JPE287BEa+yT35/lt/rnwQJsqEYzlm8MoJtYUhsWUaaONFdNluGzRv+/fd1Vh1DIxVmjz9zYr3/sE/aFJ05J25mYJumd6qSPJCJFZO1flyilf1pydHcqAQWhHrgtNGNlBcpUrM0U2CDVnUjaqVzXQglHbSYNg9zz//Brt/DdvFteKJ6h4p0EoLq2JlrSNkDzSIBMh7lyKyR0k2hZrQvSXa+9XmAq/qkApgWL6pPo3yQZecDa53pzr+BL/c9sQYSD4sZoeJktcNNTD0sL2Xf4+oEwcbGE707HSdbcfxiIU/6dL+yPZvM7NkmkCo4zXTiJDCOYuWpgNKKAFvyfZKUa5zTNURxXvAU2wKK8ovw7lVIdUXc0dYbcJRDA7OC+UPuIgBuYZeh50SBycV3oZwAtXa7p34YPg+JZ1WfhObBlUp/bzax5cLp1qAuGA4f7TakqcGkYF83oXToXtiCubZbp9uHJ0OmN4pIfMFzn9cpIC5o4HVquZ3YPZ1cFo9bArme5YJ4PAoD2TzhAhhP+RkfYedWd4oH0DQYzRh5/aWeA4tSMKkojpyT9I3izQAC42n55b9VKgS/1y+YplO+EC0AAGUAMWxux9+qvZ3dlRSrvTL9gd0K/RuVWWjsMCeAAmeb83LXi1t6k6g5Egurf//e1dFrE6u544EEOTh7Rn8ndzvlfS25b20mutVWPEiIh4IiKi/vF/jIAAWAIAACBAACMgCMDcDd6IN3fzIcy73BrAfITLMUwYAPAaZQ9b8zGm4K0dYbSJYZqAmzlQhGFIVGG2FTbZ546PDMYaoMJw2LRG3Tg07oyXkNIrfUEollcIEjoOARtCInbsOSDjeYeSMqK0sksj+7zjkFYIz01EJDoYjjyHQFRLT0bioSxoI+voURygqrubYG4j5XFqFtGr3S517LnDsmuCLDCCZTmqgtNZzkDOTCDgmB4eQyvosQJBJIpUGdJyiuL6GqhBiRIw23kpx+cCWmyTeYTJZgtczBXb5Qj71HGAFBIOiyMtIYIYPU4GoVIQBYkGPb0YCMxiFrKGqYPKO+BzrrstS4d8iItfoWZPwQHnYJQUs5iMpBI17wT4Bb9AH9Uj8SMsGMAAhqgBGdaDvl+Pu0oEA9DiP7APC/YZ5dyPzHbbD5i8b01f1LEzvhBgOd92iFxHkrE1uGRlzRwRsQCBHdJEU0xeKtkaYwqjhSevYxwgSnE76tBHvexGavGBlaLqEob+XQg/YA+VoBHTwnFtZyjaq3UJiZpfzW4AOnQLJv6QXfSCVJvWV29HrQmAGYD2iKuV2EbHprlxaSCr9Z+KsGQ7YPirqBgHA4yanP8WRijoDDNjSu01Z8HWkssQK0WthQyiiKhopaFnAB1zGZg4Lws3/dg4eLj45bFJHz4hAVs2RP9CYrh87ICI/SvmmB527I3gYCRHozrC6BiMNMYoYzsanr/GGGes8cVJ8sc4zpy4GM91JXXmnt9ceHDlyY1X3XnnFw9SnibwIlvvSvnmpwn8+PCvTLeInnxJfjR/OAH3IBiSpbhqvjsUGJGV6uRuPBJUUZt0V1lXTGRRrW22LrrdcHQ6O1tcVrfN7+49MKL9AL6wiOyDKYQuZXoxFudXkIIqYQ8tZiSstE7WzcsFCqGykbpLrNlEqpXpJ79TYdxSZWpt7tBYtLbpbtc7djC6TO7OnjaL1+rrBmi1Ax1gJ+TnBW1x/1IP7PvCwYfUn0vkJhAFhFoYrQFBh2LCsAa/jsBGwkHGKwW/hkqARohOVAZxFZMEixSbrBzyCi4FHiU+9QguE9IS0RHTvxLGEikZEznzKC5SslGxU3OM5gItJx1X9dx5Br41MvEzC9QimGMVYhNmFx3HWU4xLgluyXqkMrzS6+OXncBpQXkhhQ03opgSVRZTEVdtQi0pqS6lIa3ZjFZCVmdz8rot6MUVDZQMlY1aMY6pmqiZqpu1YR7VtNCy0raezhFdWz277XfgEGzo+I6cg4xNXExdzdzMPWZx0NLLynvX78Y3wNbO3z5rMdB0300/Je4vv8X6R1Ju+KsJg6Z6NGuv5rmuTwv9WhrQqoNScs2Q1B1mlPYFIPghfpjwhznMtz3Lh22LiqhwRCKQQogIkaJp5Ss1w6yxKUaA2HiBgiiFizRFulyFpvb/1Od3mnIzN3I9V3M5F3M0h3MoB3Ng2QRBHukvrml9hUfKvqgdAzwDxkMUyab8IxhuGv/iHwbDe1qfzihl6JjUVQVXH+o1PQGWB6d9Ut8MJwB+QNW22aXZHNGptttC5ZShawbpokN56WVl4lNSxWzCq7VP67Hif/zim7daK+8/Pob39HLDd6j62BLypaH+3tpvEAMRf+BqAzojlUYrrDFPpTK6rl98doxVc+8FDm4MYIazDpltUeeqfbKiv4htsMcVgLaOk6kOrRyhTfD/Bxq9C2q8t8cmiGe5qxQWP6zJ/b8L8pEMuvYvaCu1C9zWevrx1haA2sfI1AeDQHxBGG4PqzA36FW8gLxnhDa6kXZP3Cr/o59rl1/DK9aKhmqzJGVz5/yyH83W0+vmsdwdrZY45r1ujKCtW+KSLbakMkeojVlhcoTCdVviSWmsV3mAaERTDKpWng2RmE/Ic0r4dWuWNSZSrFxUvgAAADjv7NylYvnX8Dxmp5JTDN5Zo6TgzM93rpg8dfLE8WNHjxw+dPDA/qXFhXl33949c7OlGbHb+asC/YcL+o8Y9P805FtDJnGyGqpNnKpqzIiaoBwzl37PAiHHHJHlh5aiBawDEftdhLyPhSBMwDse4YBb1L6Edon+6SDkLjKusK/03bw4H3dwTzN0BP2G9fNoReC0z3EchlbJ8HNnGNAw406lAelQbLAZtOTkpb3vGQYPHjnW5Pp2VnG8uFWuawug93a+PZeIoUlmqlpDKCSQ+YNQHCZ/B6SbxD0uWiVKJ9svsISk8CeaR1K8iJCbg5Bd07dU4KrOpkh3s4FT1Y5Wac/vmXS42bxmmD20p6sO9vHjtiejI1VRvTbSqQcPEjbqjNGwHIV4ICGZ+8ida2XUySxhaItgY269hjqNbKJ3Xe+kqDkRCyvk75L23j7lMKeX6jPxVXThQBUHQ/IN9GKE66XJ/NumkFK4qt1MR3TiKyHa8UBgAvYRtd7G7X6w0sOo2CN6nWOfp2eiPcEVw40nuEwDZvHsLC9eZ/2a1ksk+oal4uFq+KLzNsNczVGYdXFsbJ6xR39ktlGTG7wqjXkRb/JKI+w1nAuL4oKTC/PcKKHWdW1hXm1WdNK/pDcKxuS5jnbO512POXavbkJvKL4B/xbHUPbvnTuR6IcQ6rJ0OnpzzXxzkff9ZLm5fo1XuEGUKxjvGrUTIUQ1hbC8fDcroVoXakbJjXjhiVloSezglJs6xqg1yrhTabQ145MK9olNrIe5BK1SFb32NQntLRBcdVbFtSjXBpCe+j5FGxFXmgZKcbD0Yv+i4GZCZXCk4FLnfYm9fcvzm6GqMeEFWjbn3l8m2S9RvzmwyKRGmqVfHE3H/ZbwGyDoWz8P6LYB91sbj0cJvj6p8gV8Ma0u6tqYInndhB2I0153SHAqTJLJmAeU5pbPCb/gXcWwfiNCqtfJyYV5DreZ9aaP+caqfrw6X48B3y50WjjHmZONcK5K0K3bWSdGqjggDf05l2CmGjqM193LEWnvdzY9XjDeUZbTFO6HLD2XxAitEC1mKcKOzOBGS0Io6TuG+L2eRisZBRViQyPXUw+uNgK7Z9qbwudhr4K35EZo6Z6mtw8qLjd1E+RSC+d2Gyb9FqT9cM41WZHjJ5aAduOVjeHbc097/8Oh4/pW8qtsZpVaLWaXj7iCcokTLiFRSRjc4xoq+NcCqYv91fBtJiNOswg58uBnBzlxjMr2J8R3lkKBIpFIxtsZHE3i0lP2xPHTxO45nSujweXji2oN16uwLhrWWFR8eiq+k82Jtxt97jie2i7VbWmAOVnmfITb/DEqxs8J0bjCyjgSrRAadxmu+Lq2x5DrmgPYOaxZpr1vHXF7LGTIkF62r1EhrM8OtcsI4NBVnhbrJ9FDb5/zyh5Boq1lsB0qiW6T7pqMc7wk+v1KTOD427WWue1aYlrKvADnXK/QOIV191GZ159JJHDWF8I5GjKATIlnz0l1rbT3NtZGzMbwHqmvcZ5gj36cPI1FKokgLzUSL7PWBx23CSpbFIC/1A5ftYhV1ZUomZHzwi0O4LXWWSQhlTreDj7xm+YQfh7b8gC6vWZfA02ywymBt6YhlWiweuhM9bNIAKuhr8/Dhr6GofouRXYC4i/kjfR7Q96wl7HGLJaQJv6qfdq7BGB4wGuCjJG+0q1vuinpJtoehgHdAS9iuGp5btm6Es4B0AuLIlTIO8PMLlrVAIncnVXcqcX5HEGRT3/CDP1lO+zIdWnKTy5XG7WyVlIiLwUifXWuYMFvrjIk0QKwgVKM0rpEARwFV3Ca+kWfBawHGxYEGBAQOVVkvSQ+OpJonTX6xWDMMaUapZ1xTCyMvK8ak3yTfBbZMefZYXY6uThW2S3qC8wyhqmcmYjFB/MesX2uNFifaAhE0SU6BEqja72NLdeE+MkKfwH3X6pW6rH8J1iaq3aOcjro/AgzzJVPbI9lNKaoozIkE3jrFhSYQhGKLyeDiZCUIqWBR+VaEbudfdYYwlxsYxrCYZmcbuV+uzVOm62bptaP6KN8itiiPaA1V/7LhmVetNs8Zg0/l610vyEMicfTwM6GrGYdW8D6RNz8HoqoiIlAxghk9bOIOzxsV6uFzI5P0QHSIkbGH2awPsF96n6BU1TwPp7yRCbmOKv8zSZ6T2ZK9q0R//wky0PSwI5P6GJcS8PhWv/nfcHQfpppyQh+S0JwOcJENSr+rjkRk3VhFY3VRmySxBTXj+T6DfE2cEkYrVPNzTSTFnuisPyyUv2C9WOWgMNVwB1myZUAv4abGPcTNNJBVaV45JXjGzfdp9ACBS2Xu5oTHVHdeMcm0+KFQIARToYpB0YsrrLywv1MSAat8VDNQ0OYslfjvJ/KvtW2Abu0pw0WREl/VWastQopoCjybeSJq/Z2xx3F4100QZjMiY62AHPNH2IRzvPUhxmnCjSTaz5nD5Cmv06/du61W86ozvBpXFVOqkKZnxQZla2ZFJKr4U6Q6/AzK/j4shUOCVTQWr/hLL8U8W7dAuSQWfWORA41VflWf1oZutCtJmwodNaSoPh9B6c0rHf3Wh9z7kHPUPuzb4Y7l2uScuuApBscvDi5dn2SxZbNa2sbOgfaH+u/t0jgCpB0Pia9/s3kZiVvkh9zc39aPbneKQhIOt8Jcc8gWKlWVvKDZGpZsPRL5lD7Y69htzDKS9PAP3G1xV5T7hIpi/jUlJV5u8W21syysZbnMLJ97fQpanstJZvMny6Mo0+JfOz5uaNzjD/5/bb32zzNsaqTVxcQ3r8iSNM9A2KVD5W5vomsO02isZJAtVeZWyB/r7zu/vrShFpdzkPnqaWH+EoB7h09IoEbbzHaK4HZzLRzjJe7Zjp/i3FYEZmudVscNzNxV3XWE7x8etOoNSHum6s2B2/eblLh1I5vxrIPPth6YN/asWlOLMd9Z87WFXYG2n10SzlzevRN+XlOFWOGZ2hwQELJ7I23pmMzZNCvly3DKk603Wmm6KGv+st5/nmZZYsSCqfvqVpQuE6bOnet3PvZiHzfB3oH4XuS9zjy6UiJZUbI7BU7d65ZsV1XOb00xLtEthYr2F1/7Zv172HkUn8nYi2WLmNk9kdklS9JzptWt2F52UZt2swq78D6PTWU12b7F0z+uDbsQy+NbjC+Ntve/jH76Ch7eSK8eJ5FcrLGR/GuLjpnXrqSuR/vUqz82F1NnQs9elekNkU+SZsQGZWVMEmZlYSd2iUDObpjBzZ8eEWpl0cJewMd3bZ+J8v8r0/1hrOLusFH+aZOlV6Z5StTtf8XlbagWCoDWYs5Rx3LzmuffKXiygdVjTbDR9p5QJ3HwudD7sJKL7RF73Ep5MKMrWFYYks0bqXeeK9TbgaUzqlaO6rzg0SE35qOqWTQ3yrTYRUnmu62UX/AYA3n89zU+SWVSfL8/W3dkD57k9yV/mFdeE75tsXfZCCvYKFPb7pelATy4eJ4nZM8Os1JYns2WBjFSbmjcfeTi5P8Y0PnzFXVOsYFr2YGMf6cWGE/UZS/pZRl41WjYOOftG5K+cjkwCTVwsWRBxw1+2d2Wcgd16qSmvd82/NqQoLX52+fd9YucA3PUPvUkCpO3co6mu+jaj8Uo52eHerjIg8GThPksk+B+vh0YT4WipEVwtzTcwO0GNArIHxb3A+kIJMjrv2XpKQzobKmeic2kYzJnx7d7vRPdbxJoknI/qXVkfJg4GPqrevGl4fwBj+GzpZM9ZjPJw6nXCnmmamwlZzwa6UpgcHbhuRz2SvYK3a2XkuMEt588Wmvq4LxK9Njju39OP+81nWsLdw9L+7uV4ezl0+Q67xO6/6kwf3SBqAtr61EyoByrhn0f8sT4FuI1d9OhnUB4uc/lPpnoQMltN/sYXWTlxWhpuYxnAIB4Pj3anKfECKKNGY0TbOvxjJIBIFOEKWNReuLQJlj1uiCOffu6nVi4VOOC0JVCPRNITgpKEOgXEhlXRAc5yhI7Aq/zwm3dWPN09xO0Lenq3Ga+psJujLlaZfbjkP81v7LiJ4k+fzh56PNZr2mpjTEwQIIZVVVEeYqR0BHTSyv65KUbyIlWLTUWq/8mxQDOLKDJda28THv93nqN2MPq6UmZv3Zo00peTLMITdwlkKvF6DfBhnV25Cyx0cevc/6yREMQKDf/IomvyTMZGhdF+M5QhiCJshMeHEJZWrTIhe8MKvtOCBB85QB5Hp7+hkpwzTrxzGPCacRJbPCx+mKMha3WCKWykESGc8wpZRS0TcntlJw9eYzYObZUEE1PEH0ikGMD5xwdz/CKpIXUhi/wEllQjmJ/XvH7FojE6CcwrureyM+davXh35dNop6fujbWSOtJ9/gGqkvfRRAMu4JuzpKwkp623F0pbpfkasGr0lMOVPWrSpoWfr4LGlIJM31TGtXJ0ALAjdx39fHFn7MWkoyNT9GqXh8VAwFKYps8ckRGSAcV9XcffK1/KK5190j9CbK68gP6gPCZtWM2IC6QAMdEAoLtELfSZdYM3aHzeE7GgYYkWiKbGTvGMuuu3PpccI7j480av2AP7rYePzHPk36seLv/1/aXTbldnqjmYbkuqUoueBhUUGBAydPBoqUapVeV4+nPUz5Cj/MDys5k0SLA0Fs1yJtMVDbfuSLYKMlnttliTVd8uV38ea8gi/995Qx2AbO2Ts/vhK610a/nyavMIKXdPML6/Iw9GEVPhPOwtfC0/B6/bT0Zv5FmC3P0srI2aPNTcjuZjhB9w7BZn2N1liHeic0Yq7nOzoycC8zG2ZkNjskWWxdTd/pRsSnSwhlXrBaZWc2BqvsBqMFPbo3vdQTvcBrLp3zuS3gDdZFbWtYxMYACeHlWRzOXo5gzX4cZ6QpxsIHwBEIOh7fYoot/kRbqPYn36Dod6mmqL6niCuBQmB6LXnIJOeDFrdHDyWectxwqQ1p1ossdU9bP0ddOxbYTogGYNuxdGobPVx69WuFDAgzW2x8XQQBX/2yAE01ddoJP3jita8tQx6f5Titc67aUO2ERUuBLEuBJ9fRDA1pSKqnccaMzn+f12FNALZWaMKoTz/BMi6JFahTncNry3YWsavczO3MIm4nFCrp91dx2wwamjq1nfrwSG/f4SYGez95T2t/2oj4T6fpCDltcbSju12TyZAJ+SUKtYSG8gCS0oVGuLJfRdQvUw4lKcsmvNx6t7v6Gp3vwBksiE53eSI8pgsiEy2pCDe6kLUKZkWQ+Ljz7pSM2LpbbcPTf9v8pbbVt+StdMyak/OO7IR9z0lzfnfLZklEE+3K41vnhBeUd/F4e/X73+4an61t3H6te9qRbh0ifPKmkel9ht+i4jV+Fl/Fr6N47EPK0E7DyfphoIeUWFHCd5RlkiTZTKExshBWStHdBxkAfC9QeGFV2Ibhq+zrjLB+s5twGNr0Fs/TNjzrP3gSGzVaU8edTWWjCuGpyqgh/tFRNSruZV67SnEi+ADxGiCpLQ1X6H1KrsMERFIrHvOM9n/7XCI/T5sNrE49OEm3Yrzf4dUa71d4xeJDgw80pROK6/B5lhZFaKklpp6XNkzlLG2fubAax+/puZ02TzR8K9d3QzyMxLJorar4WgjlqNqhi8oFjvbU4mWLNkZXjXeOhnvXj5+GyCmNBu8JgwnbMVLzF/fs0eZkWH9s2SGr0HqNgaJjquZNU39Pk9xOSkUIxU4zD2G+XAOQOdmZ9xLlUY21BDabgS7LugAo+rHP05TGdBL9xtvQx3RG0qdrhkOi+op/bkJczMLhASLJlNI/AXD8ExWfp/XuPxbDAkACgGvWSkq5kkoIRYWVQgjJpehKamSUjLMn05hlzio8TC3NAEUunCEjsIwjysFGSOadYkxoZVrBpDfk2DgxFlWnJBfcYEnyUNyQk1ZbjlmbKrTauAxYh5o2rYUUzIU0jyGyjAME6IklYVQRhkc1GKxDDff6s1K0nAduqee5jmdZbZXFUyJZI4LlC21EmR36lBbGBGGys2OnnLEokoshlJLOBGNlXRVC6OCDtVHayjsUxicmUC19SKWVt8k6OWujlDaF7F1Wrg2+8MEVJkFtgjRWN6wMrpp36VboylQVRa0LHAkxJF+Yiq/BQUzJOhtDE6JeLkqlfJXrEBodfnqz2mgrAetEtSi5YA2L4bWka3pCZEQyJlM9YZ2BgnGEkO4AIbkzxVi2LdOuok+20Cw4Z6GRMEQGhBLNb6RiHT8dEqW6xArXuDtEHxBtRGCM7SFGpWXAgBf3a+XMjTJDWMJfS8qxoMTMOT/nUozVOW4xqfdzCI7V95QOKj1bqbmHlpsQ4t5at7Atn3LR/++SMhzmqZazLt/Zep1p1iGlfI85Edyo19ptZEIASO9WT6w7uiO1ZL9CUAAAwNH/sqMAoO2pKQcGg+u2DW/MBNEQAAACpp/WhgEo/0S1/xFt96GwI+ex7CkPgHAKzbQmT+da5r0InT+r64lJGaOu2Km1Um2OtW4fwvdtm4umjxG1CmkbVE6tlP0HIHrZepWloEQNc46gcl10pFvTHylxuQRyK02chIwxX5VpHQu2ch1qq8Jg66jqaTwgACPrILE6JohIYhkg/NyoAYMALH0HEfYGQNgPlGMoFjdGqDoeo7pyXpHFuFmFgmjMiEnfrNkx5UbpY9bnJnbMb90fF4YtfHzHUvvJK7Zt2nIIPPIUVjRcv9GBcwWrOUeGe7/j2QZwKorAG89yupZxquWEfSEaMz1v5LTjZxGJkRF4VpHsw1QaAQ8wpIthTGGIhlWEERSv0osXliqgPW7aKQuPemBNx4DiijgabixzLJRAHe4UyfJ5OtCaLfngzVu5XdRjBkcEZ1WKQ8OrtTjj8WLUQEQGMSrEkOsIFwSkmGnirp0bHT669QGHRIiH8I4n4IvtkCQStuobWhuqwXi7UbhUF7MNzIcOQaKJG97FSoH2f7l1Rr8d6XGBM/xescb8tz0b9m0v4LhpnYkhKVqmkEFNSMpuAVGG0Y+o2edqUMnktSQk30ePLJ1TuBEv6eyrzTFB0KY4dk6+ISWCxklVy4XgxYlwGaCuvDXVVrfknBoF4K3g32IFKYYBkpveA5rJGNUC+I2MGKVANY12YqABAYGM1SikVVcsSjco2g44GhLBSOpW0uRFJ2TeF1Lkr+dBMRbuvubrZhUdRqWvcLGAyiw3sYHo5TpyxNs4ZD4aJfKREg356aLHisUfWcIry6nrs4P1YtC2mQZTtcDb0JRNcVj7BjDo6yonEYCR2an9zDkIDKsIvo3GteRyevSuYqhShXm5aYkHlAWrO2qH3WQeIqK4J0c09c/X2cSeE0IKOT7QaxI0vM1tZO0NNqjJYJT3HOwcVpPOJbSbpa3nXhrKUo3gwMQ2JDSUMLgOPbRxrSwxc8H5+qcHX07wWmGEFjqr6bfqhbbYc3eY4+XD59tAL2aKVxQcdtboc6UGfHozI5jT25ndK0GCSmsd9p22wJCb1bFn/3XNNqaXqS1GBz2A1znOiBdnFQqw4LIpSw7LZXyhgPM/9iNDUrQOdO4rf1PTYDFIWbmCfY9kp9j4ksap/v4JvHujnN5ahgguJ4VXfCbOie8duLAG8rSS22kN6DvLgIZabW3zld+PnJymkdhD7DUpIsU8L1FAUF/JoVXjmpZVm9SSiJutUyfJQxeO01AisAbONqE6d6hZgE22jdNGOoNIffkbiuQjtwLet57BXCYFpu/Q1rDEGSp9u22vZDQAMOfme95xmeO9heKZ8KfBcl/AjRZRcZ3RrZV2CcYc/aKOnti/t0FXCwOgyKRycp8ktDBbvLAQtF1X8TpI+Bcxpo3QB+LDAOohknXQMA3gVeHj2KXbX8BGPANZqgOH9CLlWA/ArfDBIRFroVcr2iUO0TCIoad/Z0pCRxotiGJk8fRrtgyT3FjQF3T040ypTL6AwVYVmMtQJvlw3ClueihIno/0xy9Av6XodHNGAYiZOA+VRXrQMCxSdYsBzbtWa8XCwuhWFBVA2H+sggY8vk4EgPRJ2rKpPe8L+ssdX1RID/49r24ZFEsuJuJCQmRkVhJkU9kpVWYIKhCIprtehd51KSct3tk66HSbMynbc3GrAkdI2A2oj8VMU//yMvSOqG1B3EQCTw8OCAF2Uo9wZolCSliOvG20cKhvCxnBlue66OhjiRp60uVDeCIz8gn+ufzZTL7g0Cml+BPuM9E3T2j0nvD5cWm5VTKzkr55y+bYNDVnd85ctsCmePUN1Jo+AyNFpZHCEregmC3AgAVT+RXTmCybnHyIZOe52lymAIIqy/i8cvbsIJ7drPTskkBL7DNISFSw4G33AMpfCzHWfdKKJg04h30/YcGUnjdeq+ukwF7qH2iF/QEE69nv0ugMXa9pAPb1pAVV6n8ZTQQEFBQItRgYYEXo7SHgf/+Q8D89GH7OeO0eBwdpCEPYw2BLv34h4l8+E/CAzwyW1P06mvKQgKvNcsGXUQlEK4StQ4UnjKLBVVQMCBWhAiAAjgph5AQRD7vQfpERWhAQXIPh/1aR8JoqDK+uIuC6KjJetdUcT/8Hw//ZTMC3bMbwTRtJ+MbNRHzzVpaIminOJEzaScB3bKWItm8l4tu2EvBzxrest44YLY3diu5vRb8NJuxGDRwBxq2wpkjPozyUGzCWiP9YheHfV11gde2Vq8j4qqVm+KIFCF84H8MXpPx5803w+UuJUwb4ZHB50oylCF8BsPz34LKlJLxyKRlfstQEF3ixuJ4slgeL7s6iuLEsXVlmLiyyM4soYcEiSxRoiSaDBE0GAgpFYcCCAIUDglIUGiBB3T8pnV3W+g7rgk5k0enTGdZ5sXOgk2TRndS9unugG9MTjbM2ynr0KMpIMhc/j7JRTgCDMha3HodT7B2sHR0otiJrsYhyAaWjDFQakGpJodIszcwtLMkmppZEjGQJiGBJJnJFFKI/cTLxDRH7F94gCJDQimvCt2JROVZ0jGklEaBhnpf75B45K2fkbsnlTsnkpCzKnLxHDssBaUuQwaE2wZwPfruCeWKU1pEPuX5q8yYeDMDhYDVMCLkVsYVovZQSaGPfD1gyV12RnJRMPWzH82wLyADM6udvRq67Azu/qz7a3RHhwTvljgA/3MsGMlFxkfnwmaS+aP3JnlmF+1SM80rXBshH8GfG/V35OLuihr/ukFXVf0Q18socyMUgBg99Of/slFR/oBPhSEr8kXKfcBJP+61VOw8nw+qRQbOSraGmHQlWcVo08DEcdTKiAgAA)}.t0{font-family:"f0";font-weight:normal;font-style:normal;font-size:9.945px;fill:rgb(255, 255, 255)}.t1{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:10.9395px;fill:rgb(255, 255, 255)}.t2{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(255, 255, 255)}.t3{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(128, 128, 128)}.t4{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(0, 0, 0)}.t5{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(109, 109, 109)}.t6{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:11.7px;fill:rgb(255, 255, 255)}.t7{font-family:"f4";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(255, 255, 255)}.t8{font-family:"f0";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(236, 233, 233)}.t9{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(206, 206, 206)}.t10{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(170, 170, 170)}.t11{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(208, 208, 208)}.t12{font-family:"f1","f2";font-weight:bold;font-style:normal;font-size:13px;fill:rgb(255, 255, 255)}.t13{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.7px;fill:rgb(32, 32, 32)}.t14{font-family:"f0";font-weight:normal;font-style:normal;font-size:12.09px;fill:rgb(200, 200, 200)}.t15{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(255, 255, 255)}.t16{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(133, 133, 133)}.t17{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(198, 198, 198)}.t18{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(108, 142, 218)}.t19{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(245, 158, 27)}.t20{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(128, 161, 165)}.t21{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(165, 99, 13)}.t22{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(177, 85, 31)}.t23{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(207, 154, 93)}.t24{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(155, 121, 179)}.t25{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(212, 212, 212)}.t26{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(139, 139, 82)}.t27{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(174, 202, 137)}.t28{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(187, 149, 106)}.t29{font-family:"f6","f7","f8";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(174, 202, 137)}.t30{font-family:"f6";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(174, 202, 137)}.t31{font-family:"f5";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(228, 198, 133)}.t32{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:11px;fill:rgb(165, 164, 164)}.t33{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:14.3px;fill:rgb(255, 255, 255)}.t34{font-family:"f0";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(255, 255, 255)}.t35{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(200, 200, 200)}.t36{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(168, 168, 55)}.t37{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.115px;fill:rgb(128, 128, 128)}.t38{font-family:"f3";font-weight:normal;font-style:normal;font-size:12.35px;fill:rgb(128, 128, 128)}.t39{font-family:"f3";font-weight:normal;font-style:normal;font-size:12.35px;fill:rgb(200, 200, 200)}.t40{font-family:"f1","f2";font-weight:normal;font-style:normal;font-size:16px;fill:rgb(206, 206, 206)}.t41{font-family:"f9";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(206, 186, 99)}.t42{font-family:"f9";font-weight:normal;font-style:normal;font-size:11px;fill:rgb(70, 83, 101)}.t43{font-family:"f9";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(41, 56, 81)}.t44{font-family:"f3";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(104, 118, 138)}.t45{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(22, 34, 51)}.t46{font-family:"f3";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(255, 255, 255)}.t47{font-family:"f3";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(67, 84, 106)}.t48{font-family:"f3";font-weight:normal;font-style:normal;font-size:13px;fill:rgb(117, 117, 117)}.t49{font-family:"f9";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(115, 129, 153)}.t50{font-family:"f9";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(149, 96, 9)}.t51{font-family:"f3";font-weight:normal;font-style:normal;font-size:12.5px;fill:rgb(36, 49, 70)}.t52{font-family:"f9";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(29, 79, 145)}.t53{font-family:"f9";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(20, 108, 62)}.t54{font-family:"f3";font-weight:normal;font-style:normal;font-size:12.5px;fill:rgb(255, 255, 255)}.t55{font-family:"f9";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(107, 64, 164)}.t56{font-family:"f9";font-weight:normal;font-style:normal;font-size:10px;fill:rgb(56, 78, 145)}.t57{font-family:"f9";font-weight:normal;font-style:normal;font-size:15px;fill:rgb(34, 54, 84)}.t58{font-family:"f3";font-weight:normal;font-style:normal;font-size:10.5px;fill:rgb(81, 101, 129)}.t59{font-family:"f3";font-weight:normal;font-style:normal;font-size:11.5px;fill:rgb(99, 112, 134)}.t60{font-family:"f5";font-weight:normal;font-style:normal;font-size:12px;fill:rgb(32, 55, 86)}.t61{font-family:"f3";font-weight:normal;font-style:normal;font-size:11px;fill:rgb(104, 119, 138)}</style><defs><image id="d0" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAPklEQVR42u3UsQ0AMAgDMOj/P6cvsLbYc5YglCoAAAAAAAAAAAAA/tTTYJI8U6p73Ots/wAHsAIAAAAA7HIBf0YECJY4xmAAAAAASUVORK5CYII="/><image id="d1" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAAgCAYAAACPb1E+AAAEyUlEQVRYw+2YX0xbVRzHP7ctfwKs60ARHeKWuJGhwzCMy/bi3NRsi/FlIyGIS0g0/NEEgW3sZWa+SGLGRnQ+mLCYLJPQYMxmIjCM00RdDB1jyBJGkWA7BOrEdqWM0d7b40PvLW1pu0IEXvZNTnruPefc+z2/P9/z64VH+H8gqb9FwJuAYZXfPwtYgV8BR7yJLwNzgFjD9gD4FtgVy5JfA4e6u7vJzc1dVTPOzMwwNjbGpUuX6OjoQAihAK1Ag2rlIK4Cwu12i7WCoiiir69PHD58WLPsb0BmKMkfATE7OyvWGh6PRzQ1NWlErwB61ERJXk0XWywWhoeHA7EmSWzevJkdO3aQmppKeno69fX1uN1umpqaXgeqgM9RM2vVLFlVVbUocUpKSoTdbg/OcTgcIj8/XwB3gJSHS45PhsFhuD0G7ll46jEoKoCnnwyM358Dy83AHEWB556FXS9Cenq8p3qAN1QvvtXR0fG2x+PRtbe3YzQayc7Opra2lpqamlxgb5CkwRCF7+x9aLkAg/bApiV18+1XoPQ12L4Vzl2AyWl1zA+9/dB9FY6/D9mPxyKpqMkxD3wPTHZ1dZ3o7OyktLQUgN27dwclUqf1dDrd4kf9dA1u/QmSApK80PCB+Tv48CxM3QWdHD4+NQVtZhAi0VD9GHCdP38eoa7JycnRxgp0cZdevxX+8sgmfCD5AO2euhmdDDf64N69hCUTGOrv78fj8QCQmZmJXq8HyIkdk8IPD+ZUy6muDLrcvxD3odeSPzwn5ueXkvg+WZZRFCWY+UEnaz1ZliPOIh3kPRFipSgt0s2SstBSDLB+faIEjUBhcXExRqMRAKfTqRG+GyTp9/sXL32paDExovVVYkELA3tfhdTURAgagGbAVFlZGcwNu92ujd+ML0EvbIfiArgxEO5KKVTmoiAzC/YfiPfkJKBcPfoOATuPHDnCwYMHA5EmBD09PdrcTl0gVWPt0QDvVMDWTeGuDLVYJNLSoLYONmyIOqxaKk0tJD7R6/U7T548SUtLCxkZGQCMjIxw6tQpgEHgmqQWGK+43W7WrVsX/cX3XNDcDLax+I5LSYFjjbBla8wpVquVoaEhkpKSMJlMbNy4kby8vGCiOJ1OKioquHz5sh84APRIwA/AXqfTiclkik1gehrONsMde2yr19ZDYeGyz3WbzUZjYyNmsxngNHAMQAd4YyZOKLKyoP4oPLMpSoQlQcPxZREUQuBwOLh48SJ79uzBbDYL4DPgRGhmyQmRDCgs1DXAuU/hj5HAveRkqD8G27YlRMpqtTI6OorX62V6epre3l5aW1s1uXEAR4GvIoP+G0BMTk4mXsrMzAjRfFqIqneFGB5eUnFbXl4eWQXNA9eBOlUvo2rUPBBU+oSQkQE174HLBQtn7EOhKAo2mw3gb+AD4C/gtnodF18CYfXcSsHlcmnW+3kpcasDbADj4+MrXpUPDAxo3V+WurYQUMrKylb0z9jExITYt2+fFoNblkLQAPwOfNHW1lbt9Xqprq4OreXCpOKhZYzPhyzLCCHwer34/X5kWcbhcHDmzBksFgvAR8DIcjyRDJxT5WilPgC41AyWlvuZRcPzwH4gO4G13ggtk9VDHU0xQn7/BbqAfx592VpL/AfJs7Z5JsGBxAAAAABJRU5ErkJggg=="/><image id="d2" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"><defs><style>.cls-1{fill:%23fff;}</style></defs><g id="图层_2" data-name="图层 2"><g id="Discord_Logos" data-name="Discord Logos"><g id="Discord_Logo_-_Large_-_White" data-name="Discord Logo - Large - White"><path class="cls-1" d="M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z"/></g></g></g></svg>"/><image id="d3" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg version="1.1" id="Logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 248 204" style="enable-background:new 0 0 248 204;" xml:space="preserve"> <style type="text/css"> .st0{fill:%23FFFFFF;} </style> <g id="Logo_1_"> <path id="white_background" class="st0" d="M221.95,51.29c0.15,2.17,0.15,4.34,0.15,6.53c0,66.73-50.8,143.69-143.69,143.69v-0.04 C50.97,201.51,24.1,193.65,1,178.83c3.99,0.48,8,0.72,12.02,0.73c22.74,0.02,44.83-7.61,62.72-21.66 c-21.61-0.41-40.56-14.5-47.18-35.07c7.57,1.46,15.37,1.16,22.8-0.87C27.8,117.2,10.85,96.5,10.85,72.46c0-0.22,0-0.43,0-0.64 c7.02,3.91,14.88,6.08,22.92,6.32C11.58,63.31,4.74,33.79,18.14,10.71c25.64,31.55,63.47,50.73,104.08,52.76 c-4.07-17.54,1.49-35.92,14.61-48.25c20.34-19.12,52.33-18.14,71.45,2.19c11.31-2.23,22.15-6.38,32.07-12.26 c-3.77,11.69-11.66,21.62-22.2,27.93c10.01-1.18,19.79-3.86,29-7.95C240.37,35.29,231.83,44.14,221.95,51.29z"/> </g> </svg>"/><image id="d4" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="%23fff"/></svg>"/><clipPath id="d5"><rect x="0" y="0" width="1204" height="25"/></clipPath><clipPath id="d6"><rect x="523" y="3" width="671" height="17"/></clipPath><clipPath id="d7"><rect x="0" y="25" width="1280" height="35"/></clipPath><clipPath id="d8"><rect x="0" y="26" width="1280" height="34"/></clipPath><clipPath id="d9"><rect x="312" y="32" width="58" height="21"/></clipPath><image id="d10" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil1 {fill:url(%23id0)} .fil2 {fill:url(%23id1)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="-0.915429" y1="67.0903" x2="129.514" y2="67.0903"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" x1="19.1934" y1="48.6309" x2="33.3042" y2="48.6309"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M17 17c-18,18 -18,46 0,64l0 0c9,9 20,13 32,13l0 0c8,0 16,-2 22,-6l0 0 38 38c5,5 12,5 17,0l0 0c2,-2 4,-5 4,-9l0 0c0,-3 -1,-6 -4,-9l0 0 -38 -38c10,-17 7,-39 -7,-54l0 0c-9,-9 -20,-13 -32,-13l0 0c-12,0 -23,5 -32,13zm9 55c-13,-13 -13,-33 0,-46l0 0c6,-6 14,-10 23,-10l0 0c9,0 17,3 23,10l0 0c13,13 13,33 0,46l0 0c-6,6 -14,10 -23,10l0 0c-9,0 -17,-3 -23,-10l0 0z"/> <path class="fil2" d="M30 32l0 0 0 0c-1,0 -2,0 -2,1l0 0c-8,8 -8,22 0,30l0 0c1,1 1,1 2,1l0 0c1,0 2,0 2,-1l0 0c1,-1 1,-3 0,-4l0 0c-6,-6 -6,-16 0,-21l0 0c1,-1 1,-3 0,-4l0 0c-1,-1 -1,-1 -2,-1z"/> </g> </svg>"/><filter id="d12" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0.7" intercept="0.15"/><feFuncG type="linear" slope="0.7" intercept="0.15"/><feFuncB type="linear" slope="0.7" intercept="0.15"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="2"/><feFuncG type="linear" slope="2"/><feFuncB type="linear" slope="2"/></feComponentTransfer></filter><g id="d11" filter="url(#d12)"><use href="#d10"/></g><image id="d13" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><filter id="d15" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="2"/><feFuncG type="linear" slope="2"/><feFuncB type="linear" slope="2"/></feComponentTransfer></filter><g id="d14" filter="url(#d15)"><use href="#d13"/></g><image id="d16" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABcklEQVRIx+2UT0sCQRjGnxVDTWFbhJYozKP059gt8tzFc9A38NbZDyF+Bq+d/AwSXWIJRfZgsLnW6k7rsGEHTXw7yIKU/2bTINjnNsy872/eYZ4HCPTfJU0vDE0jOZ2GoijSvIJygVP26gXRHRlbiQQAYDwaYeC6eO8MkTk/khYBwyK3m1wIAPYxcF24hjFpEoshIstQj5OwTZPubyPI3exKKzXknNOsvbauE+ecXptNKhdmn9GrDXIYI4cxqhRt8g30YHq1sbRJKd8j2zTJYYxK+R4JA0VgnipFmzjn1NZ1MaAHa9XqJPobvdrvU4YWFcRVFR/dLlKnJ5Io8OlhGwBwkXOwFDgNO8hkJD9+y16nJABQ1P5y4G9hvnwYV1XMswiAheHgBQQAjIef84HPjSQOYaxlkrNLC8Ae6nfpv8lMZlnELOvHC4U2ATM0jcLRKNqP/c1P1qrVVzP9OuSZPYAFsLXCwn6B/bcxgM3kbSAhfQEDJyMTHtJSMgAAAABJRU5ErkJggg=="/><filter id="d18" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0" intercept="0.5"/><feFuncG type="linear" slope="0" intercept="0.5"/><feFuncB type="linear" slope="0" intercept="0.5"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="2"/><feFuncG type="linear" slope="2"/><feFuncB type="linear" slope="2"/></feComponentTransfer></filter><g id="d17" filter="url(#d18)"><use href="#d16"/></g><image id="d19" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABd0lEQVRIx+2Wz0oCURTGP2UqaSiRFlMo4iqEauGiZbUOoheIXsB1u9auZZ6hTWvfIJB2IaHILAxujjg4t/E2MFEkelopis4fzaJgvt3Aufd37vnzMUCo/66IX4BWrtPm9irW4nFEJQkA0HMcfLzauLtN4rKQcL1DCEE2Y8jkcqOYqFtwqWiSqeuk7O1gRZbxblmwGYPNGAb9PjZSSZxdAaxSoW8/u1Q0yeKcLM5JK9dnXnhzLajdaJAQglqaRm4v9E1IzXfJ4pxMXSc136UgJXeDBgK2NI2EEFQqmoFL5Qb1Bar5rmeJvNSs1qbOzgJODM3xuQUAeHpYn7vv6YP9yFunA1lR4JXwBDChOACAk4t0ZJFhS2WzvtDoshd7HDpL0vjH4LM3GnmvhR72Z5GEJoC1+wyOdoHDUwMoeB+0GQsEeK5veQdwwyBuGPRTXjrVw9ajAykWW45lBdVw+ZvV2u9DFzGBEBpClwqdy0uHPum8DMK/wb+jL2JNMA0ISjOzAAAAAElFTkSuQmCC"/><g id="d20" filter="url(#d18)"><use href="#d19"/></g><image id="d21" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 386.972 386.972" style="enable-background:new 0 0 386.972 386.972;" xmlns="http://www.w3.org/2000/svg"> <defs id="defs37"></defs> <g id="g4"></g> <g id="g6"></g> <g id="g8"></g> <g id="g10"></g> <g id="g12"></g> <g id="g14"></g> <g id="g16"></g> <g id="g18"></g> <g id="g20"></g> <g id="g22"></g> <g id="g24"></g> <g id="g26"></g> <g id="g28"></g> <g id="g30"></g> <g id="g32"></g> <path style="fill: rgb(53, 115, 49); stroke-width: 0;" d="M 31.997 273.071 C 31.852 222.638 31.897 144.641 32.093 99.743 L 32.452 18.113 L 44.974 24.781 C 100.819 54.513 349.23 188.382 352.864 190.701 C 353.981 191.415 352.659 192.318 342.13 198.033 C 300.675 220.537 77.511 340.606 49.625 355.411 C 42.54 359.171 35.736 362.815 34.5 363.508 L 32.256 364.767 L 31.997 273.071 Z" id="path114"></path> </svg>"/><filter id="d23" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="1.5"/><feFuncG type="linear" slope="1.5"/><feFuncB type="linear" slope="1.5"/></feComponentTransfer></filter><g id="d22" filter="url(#d23)"><use href="#d21"/></g><image id="d24" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 365 365" xmlns="http://www.w3.org/2000/svg"> <defs></defs> <g> <rect x="74.5" width="73" height="365" style="fill: rgb(21, 40, 95);"></rect> <rect x="217.5" width="73" height="365" style="fill: rgb(21, 40, 95);"></rect> </g> </svg>"/><filter id="d26" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="100" intercept="-49.5"/><feFuncG type="linear" slope="100" intercept="-49.5"/><feFuncB type="linear" slope="100" intercept="-49.5"/></feComponentTransfer><feColorMatrix in="r0" result="r1" type="matrix" values="0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0 0 0 1 0"/><feComponentTransfer in="r1" result="r2"><feFuncR type="table" tableValues="1 0"/><feFuncG type="table" tableValues="1 0"/><feFuncB type="table" tableValues="1 0"/></feComponentTransfer></filter><g id="d25" filter="url(#d26)"><use href="#d24"/></g><image id="d27" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 330 330" style="enable-background:new 0 0 330 330;" xmlns="http://www.w3.org/2000/svg"> <defs id="defs569"></defs> <g id="g536"></g> <g id="g538"></g> <g id="g540"></g> <g id="g542"></g> <g id="g544"></g> <g id="g546"></g> <g id="g548"></g> <g id="g550"></g> <g id="g552"></g> <g id="g554"></g> <g id="g556"></g> <g id="g558"></g> <g id="g560"></g> <g id="g562"></g> <g id="g564"></g> <path style="fill:%23782121;stroke-width:0.458971" d="M 30.062587,165 V 30.062587 H 165 299.93741 V 165 299.93741 H 165 30.062587 Z" id="path743"></path> </svg>"/><g id="d28" filter="url(#d26)"><use href="#d27"/></g><image id="d29" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 14a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2m11.46-5.14l-1.59 6.89L15 14.16l3.8-2.38A7.972 7.972 0 0 0 12 8c-3.95 0-7.23 2.86-7.88 6.63l-1.97-.35C2.96 9.58 7.06 6 12 6c3.58 0 6.73 1.89 8.5 4.72l2.96-1.86Z"/></svg>"/><g id="d30" filter="url(#d18)"><use href="#d29"/></g><image id="d31" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a2 2 0 0 1-2-2a2 2 0 0 1 2-2a2 2 0 0 1 2 2a2 2 0 0 1-2 2m1-20v11l4.5-4.5l1.42 1.42L12 16.84L5.08 9.92L6.5 8.5L11 13V2h2Z"/></svg>"/><g id="d32" filter="url(#d18)"><use href="#d31"/></g><image id="d33" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a2 2 0 0 1-2-2a2 2 0 0 1 2-2a2 2 0 0 1 2 2a2 2 0 0 1-2 2m1-6h-2V6l-4.5 4.5l-1.42-1.42L12 2.16l6.92 6.92l-1.42 1.42L13 6v10Z"/></svg>"/><g id="d34" filter="url(#d18)"><use href="#d33"/></g><image id="d35" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><g id="d36" filter="url(#d12)"><use href="#d35"/></g><image id="d37" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACkElEQVR42u2bv2sUQRTHv2+SnIlCEBFCIlYiQoo0KlrlD7CytUqjWNhYaW3jP2EK7RQs7RRB0EbRQgVBRAWLIIqimLvbH/P9WriRNdyZ7OUSd8/3mmWHnZn3/czbt29hBnD7v812crIkSefHxsbOhmALZja31i5phdILRi63WhMvR45yjHGJ5Adtwkiu5DGeHwnh3SQ5EMm3GsBIvut2k4ONFU9ykWSmLRjJjOTpxonPYzwpaSPxnRjZltTeiEOex8XGiE/SdB/Jdu8VVSdG3siybLbcJ82y2UheJ7naJxK6SZrONCPhkQ/7iLifZVnrr33zOE7ybp/+T5qw+vN9nL9ZMX9c6zVOnudH65747vQQ/2rAT+ezHmM9qDuAP959/nL68GAAuJ8U1wHoDNvn8Z5CpJbIqyGEuSqDSZpa19A1syuSBvWvA2D377LVbFLSLQCxwqJ8NrNLIYTupkthko/N7PioVKKSnoYQjlUBEM0sjBAAhBB6au0nMh2135FKOUDSOTNbLjXtkoQ0y2uvtDUxDjMDgKTQYpQubCV8QpGEVxsS7m1VyLphSM801kZanAMYtBDa4juoUuFiO/WcR4ADcAAOwAE4AAfgAByAA3AADsABOAAH4AAcgANwAA7AATgAB+AAHIADcAAOwAE4AAfgABzAoCZpodgl1m6Iv2nh78ywImC6uE5JOlVz8RcBTKzdbgfVH5L21lT8odIxnW/DHny5tGv9jaTJmomfkfSl5OPl7ZjkY2mCr5JO1ET8kqSk5NvzKv2tCmUAr0s5AQBWsTOnT6f6tLcB7CndvwdwxMzSoQMoIEwDuAegbmcJCOA2gDNmxm2JgHUgZgEcA/DoH4rOzex7EZmfqgp3K+wn54g3ax+wmTMAAAAASUVORK5CYII="/><g id="d38" filter="url(#d15)"><use href="#d37"/></g><image id="d39" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil4 {fill:url(%23id0)} .fil5 {fill:url(%23id1)} .fil9 {fill:url(%23id2)} .fil6 {fill:url(%23id3)} .fil8 {fill:url(%23id4)} .fil7 {fill:url(%23id5)} .fil3 {fill:url(%23id6)} .fil1 {fill:url(%23id7)} .fil2 {fill:url(%23id8)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="2.07709" y1="115.665" x2="33.4786" y2="115.665"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="2.07709" y1="74.4549" x2="33.4786" y2="74.4549"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="2.07709" y1="33.2465" x2="33.4786" y2="33.2465"> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="44.4802" y1="115.665" x2="75.8805" y2="115.665"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="44.4802" y1="74.4549" x2="75.8805" y2="74.4549"> </linearGradient> <linearGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="86.8821" y1="115.665" x2="118.284" y2="115.665"> </linearGradient> <linearGradient id="id6" gradientUnits="userSpaceOnUse" x1="42.1439" y1="26.895" x2="77.1777" y2="26.895"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> <linearGradient id="id7" gradientUnits="userSpaceOnUse" xlink:href="%23id6" x1="88.2252" y1="22.8115" x2="130.897" y2="22.8115"> </linearGradient> <linearGradient id="id8" gradientUnits="userSpaceOnUse" xlink:href="%23id6" x1="90.0997" y1="72.7902" x2="132.298" y2="72.7902"> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M131 20l0 0c0,-1 0,-1 -1,-2l0 0c-4,-3 -12,-9 -17,-12l0 0c-4,-3 -5,-4 -6,-4l0 0c-1,0 -2,2 -5,5l0 0 -7 9c-1,1 -1,2 -2,3l0 0c-1,1 -2,2 -2,3l0 0c0,1 -2,2 -2,3l0 0c0,2 1,2 2,3l0 0c2,1 20,16 21,16l0 0c1,0 4,-4 5,-5l0 0c1,-2 14,-17 14,-18z"/> <path class="fil2" d="M117 52c-1,0 -6,3 -7,3l0 0c-1,1 -2,1 -3,2l0 0c-1,1 -2,1 -3,2l0 0c-1,1 -2,1 -3,2l0 0 -7 3c-1,1 -3,1 -3,3l0 0c0,1 11,22 12,25l0 0c1,2 4,1 9,-2l0 0 17 -8c4,-2 4,-2 0,-9l0 0 -8 -17c-1,-1 -1,-3 -2,-3l0 0c0,0 0,0 0,0l0 0z"/> <path class="fil3" d="M71 10l-4 0c-1,0 -3,0 -4,0l0 0 -19 2c-1,0 -2,1 -2,3l0 0 3 26c0,1 1,2 3,1l0 0c5,-1 10,-1 16,-2l0 0 11 -1c2,0 2,-1 1,-3l0 0 -3 -26c0,-1 0,-1 -1,-1l0 0c0,0 -1,0 -1,0l0 0c0,0 -1,0 -1,0l0 0z"/> <path class="fil4" d="M4 131l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 0,-2 -1,-2l0 0 -29 0c-1,0 -1,1 -1,1l0 0 0 27 0 0c0,1 1,2 2,2z"/> <path class="fil5" d="M4 90l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 -1,-1 -2,-1l0 0 -28 0c-1,0 -1,1 -1,1l0 0 0 27 0 0c0,1 1,2 2,2z"/> <path class="fil6" d="M46 131l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 0,-2 -1,-2l0 0 -29 0c-1,0 -1,1 -1,1l0 0 0 27c0,1 1,2 2,2z"/> <path class="fil7" d="M89 131l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27 0 0c0,-1 -1,-2 -2,-2l0 0 -28 0c-1,0 -1,1 -1,1l0 0 0 27c0,1 1,2 2,2z"/> <path class="fil8" d="M46 90l0 0 28 0 0 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 -1,-2 -2,-2l0 0 -28 0c-1,0 -1,1 -1,1l0 0 0 27c0,1 1,2 2,2z"/> <path class="fil9" d="M32 18l0 0 -28 0c-1,0 -1,1 -1,2l0 0 0 27 0 0c0,1 1,2 2,2l0 0 28 0c1,0 2,-1 2,-2l0 0 0 -27c0,-1 -1,-2 -2,-2z"/> </g> </svg>"/><g id="d40" filter="url(#d12)"><use href="#d39"/></g><image id="d41" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil2 {fill:url(%23id0)} .fil6 {fill:url(%23id1)} .fil1 {fill:url(%23id2)} .fil5 {fill:url(%23id3)} .fil4 {fill:url(%23id4)} .fil3 {fill:url(%23id5)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="2.03586" y1="8.28128" x2="27.3191" y2="8.28128"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.3091" y1="124.715" x2="130.964" y2="124.715"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.3091" y1="8.28128" x2="130.964" y2="8.28128"> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="42.9215" y1="95.6076" x2="130.964" y2="95.6076"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" x1="29.3091" y1="66.5012" x2="130.964" y2="66.5012"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> <linearGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="%23id4" x1="29.3091" y1="37.3936" x2="130.964" y2="37.3936"> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M125 2l-90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6l0 0 90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6z"/> <path class="fil2" d="M21 2l-13 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6l0 0 13 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6z"/> <path class="fil3" d="M35 44l90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil4" d="M35 73l90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil5" d="M49 102l76 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -76 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil6" d="M125 118l-90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6l0 0 90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6z"/> </g> </svg>"/><g id="d42" filter="url(#d18)"><use href="#d41"/></g><image id="d43" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil4 {fill:url(%23id0)} .fil3 {fill:url(%23id1)} .fil5 {fill:url(%23id2)} .fil2 {fill:url(%23id3)} .fil1 {fill:url(%23id4)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="20.8181" y1="124.778" x2="131.217" y2="124.778"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="35.6016" y1="93.1547" x2="131.217" y2="93.1547"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" x1="4.65844" y1="42.9922" x2="87.9295" y2="42.9922"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id2" x1="91.5665" y1="61.5317" x2="131.217" y2="61.5317"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" xlink:href="%23id2" x1="91.5665" y1="29.9123" x2="131.217" y2="29.9123"> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M94 36l35 0c1,0 2,-3 2,-6 0,-4 -1,-6 -2,-6l0 0 -35 0c-1,0 -2,3 -2,6l0 0c0,4 1,6 2,6z"/> <path class="fil2" d="M129 55l-35 0c-1,0 -2,3 -2,6l0 0c0,4 1,6 2,6l0 0 35 0c1,0 2,-3 2,-6 0,-4 -1,-6 -2,-6z"/> <path class="fil3" d="M125 87l-83 0c-4,0 -6,3 -6,6l0 0c0,4 3,6 6,6l0 0 83 0c4,0 6,-3 6,-6 0,-4 -3,-6 -6,-6z"/> <path class="fil4" d="M125 118l-98 0c-4,0 -6,3 -6,6l0 0c0,4 3,6 6,6l0 0 98 0c4,0 6,-3 6,-6 0,-4 -3,-6 -6,-6z"/> <path class="fil5" d="M5 30l0 0 0 0c0,1 0,1 1,2l0 0 26 20c0,0 1,1 2,1l0 0c0,0 1,0 1,0l0 0c1,0 1,-1 1,-2l0 0 0 -13 22 0c7,0 13,5 13,11l0 0c1,8 -5,14 -13,14l0 0 -20 0c-1,0 -3,1 -3,3l0 0 0 10c0,1 1,3 3,3l0 0 20 0c16,0 30,-14 28,-31l0 0c-1,-15 -15,-25 -29,-25l0 0 -22 0 0 -13c0,-1 -1,-2 -1,-2l0 0c0,0 -1,0 -1,0l0 0c-1,0 -1,0 -2,1l0 0 -26 20c-1,0 -1,1 -1,2z"/> </g> </svg>"/><g id="d44" filter="url(#d18)"><use href="#d43"/></g><image id="d45" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil7 {fill:url(%23id0)} .fil5 {fill:url(%23id1)} .fil3 {fill:url(%23id2)} .fil8 {fill:url(%23id3)} .fil4 {fill:url(%23id4)} .fil2 {fill:url(%23id5)} .fil6 {fill:url(%23id6)} .fil1 {fill:url(%23id7)} .fil9 {fill:url(%23id8)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="1.65767" y1="101.818" x2="27.0859" y2="101.818"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="1.65767" y1="78.2745" x2="27.0859" y2="78.2745"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.0887" y1="125.361" x2="54.5217" y2="125.361"> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.0887" y1="101.818" x2="131.346" y2="101.818"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.0887" y1="78.2745" x2="131.346" y2="78.2745"> </linearGradient> <linearGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="7.63683" x2="100.452" y2="7.63683"> </linearGradient> <linearGradient id="id6" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="54.7278" x2="131.346" y2="54.7278"> </linearGradient> <linearGradient id="id7" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="31.187" x2="131.346" y2="31.187"> </linearGradient> <linearGradient id="id8" gradientUnits="userSpaceOnUse" x1="6.61183" y1="34.2703" x2="70.0121" y2="34.2703"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M127 25l-48 0c-2,0 -4,3 -4,6l0 0c0,3 2,6 4,6l0 0 48 0c2,0 4,-3 4,-6 0,-3 -2,-6 -4,-6z"/> <path class="fil2" d="M81 14l13 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil3" d="M35 131l13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6z"/> <path class="fil4" d="M125 72l-90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6l0 0 90 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6z"/> <path class="fil5" d="M21 72l-13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6l0 0 13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6z"/> <path class="fil6" d="M127 49l-48 0c-2,0 -4,3 -4,6l0 0c0,3 2,6 4,6l0 0 48 0c2,0 4,-3 4,-6 0,-3 -2,-6 -4,-6z"/> <path class="fil7" d="M8 108l13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6z"/> <path class="fil8" d="M35 108l90 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil9" d="M36 62l0 0 0 0c1,0 1,0 2,-1l0 0 31 -25c1,-1 1,-1 1,-2l0 0c0,-1 0,-2 -1,-2l0 0 -31 -25c-1,0 -1,-1 -2,-1l0 0c0,0 -1,0 -1,0l0 0c-1,1 -2,2 -2,3l0 0 0 15 -26 0 -1 0 0 18 27 0 0 15c0,1 1,2 2,3l0 0c0,0 1,0 1,0z"/> </g> </svg>"/><g id="d46" filter="url(#d18)"><use href="#d45"/></g><image id="d47" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="133px" height="133px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" viewBox="0 0 133 133" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <style type="text/css"> <![CDATA[ .fil0 {fill:none} .fil7 {fill:url(%23id0)} .fil5 {fill:url(%23id1)} .fil3 {fill:url(%23id2)} .fil8 {fill:url(%23id3)} .fil4 {fill:url(%23id4)} .fil2 {fill:url(%23id5)} .fil6 {fill:url(%23id6)} .fil1 {fill:url(%23id7)} .fil9 {fill:url(%23id8)} ]]> </style> <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="1.66592" y1="101.809" x2="27.0941" y2="101.809"> <stop offset="0" style="stop-color:%23656261"/> <stop offset="1" style="stop-color:%233C3936"/> </linearGradient> <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="1.66592" y1="78.2698" x2="27.0941" y2="78.2698"> </linearGradient> <linearGradient id="id2" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.097" y1="125.348" x2="54.5217" y2="125.348"> </linearGradient> <linearGradient id="id3" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.097" y1="101.809" x2="131.334" y2="101.809"> </linearGradient> <linearGradient id="id4" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="29.097" y1="78.2698" x2="131.334" y2="78.2698"> </linearGradient> <linearGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="7.65214" x2="100.449" y2="7.65214"> </linearGradient> <linearGradient id="id6" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="54.7278" x2="131.334" y2="54.7278"> </linearGradient> <linearGradient id="id7" gradientUnits="userSpaceOnUse" xlink:href="%23id0" x1="75.0287" y1="31.1953" x2="131.334" y2="31.1953"> </linearGradient> <linearGradient id="id8" gradientUnits="userSpaceOnUse" x1="5.02838" y1="38.6966" x2="68.3662" y2="38.6966"> <stop offset="0" style="stop-color:%238AC6E7"/> <stop offset="0.501961" style="stop-color:%2365B2E1"/> <stop offset="1" style="stop-color:%23369FD9"/> </linearGradient> </defs> <g id="Layer_x0020_1"> <rect class="fil0" width="133" height="133"/> <rect class="fil0" width="133" height="133"/> </g> <g id="Layer_x0020_1_0"> <path class="fil1" d="M127 25l-48 0c-2,0 -4,3 -4,6l0 0c0,3 2,6 4,6l0 0 48 0c2,0 4,-3 4,-6 0,-3 -2,-6 -4,-6z"/> <path class="fil2" d="M94 2l-13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6l0 0 14 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6z"/> <path class="fil3" d="M35 131l13 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil4" d="M35 84l90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil5" d="M8 84l13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6z"/> <path class="fil6" d="M127 49l-48 0c-2,0 -4,3 -4,6l0 0c0,3 2,6 4,6l0 0 48 0c2,0 4,-3 4,-6 0,-3 -2,-6 -4,-6z"/> <path class="fil7" d="M8 108l13 0c3,0 6,-3 6,-6l0 0c0,-3 -3,-6 -6,-6l0 0 -13 0c-3,0 -6,3 -6,6 0,3 3,6 6,6z"/> <path class="fil8" d="M35 108l90 0c3,0 6,-3 6,-6 0,-3 -3,-6 -6,-6l0 0 -90 0c-3,0 -6,3 -6,6l0 0c0,3 3,6 6,6z"/> <path class="fil9" d="M39 66l0 0 0 0c0,0 1,0 1,0l0 0c1,-1 2,-2 2,-3l0 0 0 -15 27 0 0 -18 -1 0 -26 0 0 -15c0,-1 -1,-2 -2,-3l0 0c0,0 -1,0 -1,0l0 0c-1,0 -1,0 -2,1l0 0 -31 25c-1,1 -1,1 -1,2l0 0c0,1 0,2 1,2l0 0 31 25c1,0 1,1 2,1z"/> </g> </svg>"/><g id="d48" filter="url(#d18)"><use href="#d47"/></g><image id="d49" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABDUlEQVRIx2NgGO6AEca4e+3a/2179zDk5uYx3r127T8xmmHqSbGQBZdE18QJDNra2jg1eru4kuVDnBZqa2sz5OXl43S9N5GhgA6Y6B2HOH149epVhkmTJv6nm4Vl+QX086GylhYjXYN08uRJVA9KWPbBaqGXswvVfZZLKA637tmNN1sQCyZNmvgfOc/SPVsMv3x49epVlGKQ5vkQvcylez4cnIlm4rFn/+W6z/6ni4WtBx7/7z36nPapFGbZzNOv4Pz8LfcI+tJQkpshwVickWQL0S1jYGBgWH/9Pe2CdOvN9/RNNMfS9Rhl+FjpV9LALLWaeen/k0+/GRgYGBgelRoTzJ8TKU2ltPLp8AUA81FfZGxs66MAAAAASUVORK5CYII="/><filter id="d51" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="100" intercept="-49.5"/><feFuncG type="linear" slope="100" intercept="-49.5"/><feFuncB type="linear" slope="100" intercept="-49.5"/></feComponentTransfer><feColorMatrix in="r0" result="r1" type="matrix" values="0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0 0 0 1 0"/></filter><g id="d50" filter="url(#d51)"><use href="#d49"/></g><image id="d52" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAACzElEQVRIx82Wz07UUBTGv3t7y4B/MtNQNERgRickBv9L4gb7ACxY8Abu3CCueAX3wIp30LhAwpYImMDCGCRsFJEZlCitBRJgOu09xwXTyThgENIhnlWb77a/nO+ec+4FzjkEAKyurEgAFgDZIA4B8PM9PaQAIAxDC8AsALtBQBeAA8BTADC3uHBulioAuN7VtQPGYPxe9YGZ1grr25ook89mpSENHNGLhV9BENBJlgoh/Cow19mVZubX5TC0hRAAAGZGk2m6UojBtWLhVde1jqrdXKPfyGadfE+PF2svZoqyrNma/7qL/Yj8+ad36UiGAGQ5DO3J6enWdCbtA8DO9o410N8fr7GjKGp9v/zRD4KAtNYy1lNNTbIWFhHnw4gmiRnEGOibWFqthVYXCyGQzqT9UhA4pSBw0pm0H2cLAIZSfkd7u3NQKt06To9hQVlPzXza7i7sht2aeYoY+b6JJXkUCMAwDJJSulJK1zAMEn/2D2U7Ot3h4edb9frou+9SChzCPu/kvx1oGWiW3r7O10MT6btyRJaOePLt6iEs9i+kKnRSMyzUV+VZ4+WHLRCDvJD8C4aw9jRLrlRnSOxv7UVVNxLJ8GdA/o8yOffsZudx7rJ/SVU3wwfgaIbDh8/JZLg20ksAvME3X2SkuXbvCYBbGOn16tsCAJBKpWQ+l7MBYGNzU1Y+SH7ShGEIAHh4+45lKDULAFdabQuAp0knD5xbXKDKgK0ND4AbRhGZSiULLAWBz8zOMUVEAFTiwKGhZ1TJ6EiMj4+1JWmpxDmHSvJnphQQDFxUtQUuGge82dZCmtitjLX4pKflRgGVFD4ARxlCsqgcvJUJ0xDgk96rfy2+UwMZkOsbRXtsbBREZGutJZ9hEv0zUEeRtbG5OdvS3Fw98ZnZawSQALhKKTy6/yDOlpjZazJN97Tz9kRg5bblAJCmaR57wcX/HL8BWqh2IouwYt0AAAAASUVORK5CYII="/><g id="d53" filter="url(#d51)"><use href="#d52"/></g><image id="d54" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABFUlEQVRIx2NgGO6AkVQNkydP+u/l7EKUWmUtLUaYemUtLUYGBgYGFnJdunXPbpxyV69eZSjLL8AqR7aFeXn5OENn0qSJ/3HJMdE7Dsn2IT5fXL16lcHbxZW6FuIykJAcyRbm5uYx5lIjSCdPnvSf2vGVm5vHiNNCYvMWSRYSCtKte3bjTe6kJChc8Uj3bDGw+fDq1at48xexgOh8iKv8o2YeZUEu2YdlHFLFQrnus/8nHnv2n64+7D36nKH1wOP/JKVSdLDg7Mv/559/JWjZ+uvvGRgYGBhmnn7F0Hrg8f9qB1lGsiw8//wr3DBiASFLaZJott58T79UKsPHynAsXY+8IJ3oo8RIbColxjKq+pAYy0YGAAA5NGLrDLwUowAAAABJRU5ErkJggg=="/><g id="d55" filter="url(#d51)"><use href="#d54"/></g><image id="d56" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAC30lEQVRIx72Wz0tUURTHv/fc++a9qVAfzgjmL8raWIQRKJQTbsWEoP6HNmabVv0BbdyU+Qf0H7StRRAM0UohNBBkMEdFzafPEUwfc++5LcY3jYPhj56e5T2X97nn3u/5ngdccIjjNkxOviPPdf2Bvn5yHKc+zQDC7p4ePilQHbfBWusDyAPIlMvlylplHSnHCYQQOQCbiQEBEICM1rp5enYmjKKIjTFU2i75I0NDcFMpOs2VnnizVCpsb23N7e3v39qPolxjU2MohDj1G9IpHpu72juCsbEXG0QUSClZnEE0KkkFvp9aJ83Wn9vYozJbAGABhG8eXedzAWq2vmGb18ZmdAUYADgkqkSBcxt7pI3NfPu5k93VcVGCzu1Ky2yh2WJXM3a0jRvrbKJJKlTsJgcNTkc4CSUO9Fy36iZ1+aCs9ZPEgQN9/VU3kUqFAGC09pVSKK4sU3FlJTEgAUBsytOzM+Hq+lpudX0tNz07EwKAJJn8G8YRRRHPzs0FAJD2PD430fxvXBufIgP4xWAvk21Ika0z/s7xKZYC4cLLe5wIsMUlny3y34P9Fm8r8ndNFekDyEuBX+LAcRKR/NPeLB7fbqa2tPR/G3uoQoeEn72sqOWKk1zjpxSFUomRh92Nhba05PijDgluviQLUogRKRAeAloAxhhi5gwzZ4wxtSeFBWhxeSkzMfE2W59/cf8qs0XBTcnhwRsVqCursGESKHx9docPA61Fabvke66b91w3X9ou+db+RRqt/eXV1Xza834clX812MGKRAV6s2m+s8GZr4fVqpRTjhOMDA0hnuLW2s2U4wQANIBAKYW+3rtxtVyT51ro6y9LBVb0gIQACRvWwqp/bZ8/fVSw6K5vE7aWF4qL24a5qburi+pNgK3lhaXiVhRFx/UsCyHC0dHnlbZYKBYbAXw4wktBRCAi/MveSAikPe84XVUHceylFzueHMcJD05wXvORgUpbXHj8AeHEUTTYsGhNAAAAAElFTkSuQmCC"/><g id="d57" filter="url(#d51)"><use href="#d56"/></g><image id="d58" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADVElEQVRIx+2WTWgbVxDH/ztvl8aupVjWCrP4UnsTu9W1yKSBBgztoaipKaE4PZSUklsP6aH30nsPsUSgB+M2hBQCaUxKdGrBEIMbEkoCxmqJWauGQGq0suSlcrL7PraHSEWWLa0VjE+Z0/LevPnNmzczO8ARiwYAo9/9QQOMEmfG4jCYVr384Zg6DONf3VknLsPE3XUP/0pVLX39ttIBYIDRn2fG4vLKtJ2+dGc9CaDSenBxcZGklIm1tcckhNhlVNd1nDw5rhhj1ampqV2OhkDiyrRd+fK2U7y77jEAE3pjLwmgqUztnkopE0KIJc652Q4MwxBCCBfAu+2Ottgym996t5AsFCsEYND5/Rfdr3tm9r33U/vpFX77Fa+9HtcXipUhALWP08mOT6J3gwkZ2lKpH43hExfrj+8DAD67+EUagNv0/NrcfFEIgYHhE0M+l3OM6POFYsXpBKVusGe+KNx4sGmvbniteu7y8r3y8vK9cgsYqxse3XiwaT/zRUHI0G5EJxpokEZ1X9o7vijcfFi2V2oBBUF00gaBwkotoJsPy/aOLwp1X9oGaRQJNPv1wbovr956VB4tegEF4cHLIAiBohfQrUfl0bovr5r9+mAk0N0RtadecMHoM0rHGCmtx6I+xkgZfUbpqRdccHdELRLIVajWqr6jMy07YfY5cYOUdgCqpgFxg9SE2efoTMuuVX2Hq1AdKGmuz4wrpmmOoWvZ9HC/E4sZ/x/MZCbNXG42lcvNpjKZSbO5HosZKj3c7xi6lmWa5lyfGT94lrZCGWlnU883tprrlmUtcc5XOeerlmUtNddTzze2GGlnu8EiC79xcOudfC6pXpRA6pOPppP7qLpM+eKnmfGtqNDvATLFKZ/PJdtuT0R07vsf5klKuVufMYyMjCgAej6fa+1EqqQ4RQJj20+GOOc/N/rfLrEsa1+vlVJQak8U3dj2k3MANrsCS/+49E32g7cO4e+U+rawEn1D3vC0rWf2Kua1ufki33vrrknjNvplz3L69KmOe3TUI8Yr4KFLx6TJZCbN8+c/fSmjjuOYPQMbPfOlxkXLsigKWAHQ7FkCADr0zF6lOeK5ANi+g3D1r/vbf9+ePX4I76vemL60nXhz8njrIHzUOYP/AEjBgQ5H0c0KAAAAAElFTkSuQmCC"/><g id="d59" filter="url(#d51)"><use href="#d58"/></g><image id="d60" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABGklEQVRIx2NgoDNghDHkus/+p6VFj0qNGRkYGBhYYAKBmoI09dlEhpECGAkpWHD25f8EY3Gs6iZPnvTfy9mFKIuUtbRQ4xAbWH/t7f+KnQ8Zolbe+r8sXI2RkGHYwKRJE/97u7jC+UyELPv+5z/DkUefGaJW3qJKKmYiZBkMUMtSrEEaqCWMNYiWUcGHKBbu37///5Url4nSmJubx0ixhVeuXGYgNtXlUjNISUl1VEk0tATD30KscXj32rX/dLFQR0eXYdvePfTzoaOjI+OABCm2oo2BgYHBRo6XAV8hTnaiCdQSZuxwl2fgZGGkqmV4UymypdSyjGB9GKglzIivAqZHqh7CbZr8LfdoGiwTfZRQ2zTrr78fnkEKAPQcbFtf1PTIAAAAAElFTkSuQmCC"/><g id="d61" filter="url(#d51)"><use href="#d60"/></g><image id="d62" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADdklEQVRIx+2WwWsbRxSHfzOzC7GdmkgrOxif7MUS3mubEBxiMLRgV6auD8VtiggI3Uya4vTeY3xoTCOTPyCkKRYJMSbWoW2KwSUmJJQkmK5biZUuNYkjraQK22G1O7M92CqyK3kVJ7iXvtPsmzfve/PmvZ0BjlgIAPR88ys9zqhvsLcdMiPFb0d7xdtw/uVihtrc9S1nytjkopj96l0hAcBxRtcGe9v59TFVu7SYUQCYtQuXlpYo59yXTqeo4zh7nEqShL6+oGCMFYeGhvYE6gK+62OqOblg6MuZMgMQknbnFABVY7o/Usuy1lKpP3z7YQBg2zZ0/TcEg6EigNC+6aqvQHUsHZSSed2kAE6k7n+nhN//QDnINnn/Jzqvm34ApXFNaXgktJ5y7tnLB7dX830AMK4pBYdzAgCRWFRTNY1EYtHOSCzauTvWAMDhnIxrSgEAbq/m++aevXzQNDDxeEN9ZTlJh7vqvG5SuDvFBSAPACsrD3MrKw9ztTq4IPO6SR3uqq8sJ5l4vKE2BZQpoaulCr3zJKduW05yy+Jqs1W5ZXF123KSd57k1NVShcqUUE9goFU6UXEBvVyhd5/merYsfuM1gDfuPs316OUKrbg7vjyB+W2nRAAcY1TILXL2eblyoVng83LlgtwiZ48xKsiuL0+gLVzRLlMRCrQYEiPhdNEymgWmi5YhMRIOBVqMdpkKW7iiqaLRTrYaskTCjBDj1kRQ7PQwcOrU6QAAxOPXOuLxax21OgDurYmgYIQYskTC2snWuoHW7cPEZ6GzAPB5IkXPJ1J+rN9zAaCrq+uX6ekrsG1bAMD09JWagF33fCLlB1Ca+zSUBnD20mKmoylgVXZ3V3hv5qoJQPnko7GDmt/8fiJY8Er7v4BM2HR2Nq7sS/fgvR9/8K+vr1PO+V57xtDd3S1kWS7MzsZrdySywqaewHf++tN/8eIXa3WC2wCAmZmrOoD+qnJq6jJptJuvb/7cX13XEJh9kacHpWRseKS/9ntq6nJD23q+6rSF91UYiUVHI7HoqJddPV/SIe/WR4e9lOlRPzH+B751OVTRDA+PnBZCHB2wra1t0bbtNwKaAKr/LMdr0ccjHzbr36l5hrB/gJtc9C9nyr7JBUMp/v7IGBg4ozQ630gs2ulFGRg40wFAEMCYXDCU5Uz53CYXRfwX8je3jGnORUPN3QAAAABJRU5ErkJggg=="/><g id="d63" filter="url(#d51)"><use href="#d62"/></g><image id="d64" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAEcUlEQVRIx71WW29UVRT+1j63mel0TudSwsilF5hoDTFUEhnaBoypzgv6wING1Ad9sMoDhmgCPwEMxmAjCdV4iQ+KwT4AiSnVt1JLIowoiUIhdSpIQGfauXQ817186JR2IEJppOvpZO+1z7f2l299exFq0XbwLIFBeBBB4Il3NvHsJ4CH3zunRzQxTMDqubX/MZiBqyVXPn3x7ccdNd1/niRzsnN1gw3AWxwgMQC+fZEIxIzb9xjAP9mrlWS6//ykunFVCAzgyI7UM3iA0Td4uYUIoJcOfEVkBINqsCEFIHC3Q5oQiDY2SDdgVjyheQyQ43PEsn1VAEpYF6EZV1Z1hfyVEcMrOn7Jl8wAHBBd73+23aGerVuJSYk0b36uGoyv5LsBBlQV65p0Cjt/hYvm+tJF5aFGx5Pv5wrWpilbBgCmRpV4YzxgPdkROysE7fnxz5kSAD60vZ0BQGXfJWZH3Bw56o+Ojsl7UdPf/4EAgFjhF5aJZEUQBpIR/V2/6KzzpTQ6mgz7ibbIOU0RA6pKlUPb2+v+KW4J9z6F7ooGCCIWRFlDE/tao0Z2QyxQ6VlvZhtD2j5VoaymiDsYU5faWdKpxtZN/xqOWNeqthHP+StSB6JRc5fmFA+XcuM5t3QjYq5KhU5+O1TSBKYzmYxcMqDrujHfdQ+Hnd9aJIM1u0Ja+Q/VUvSQ5TuHwNIDgYsTP1O0tW1CaNpOAPklAbquS4VC3nx158u9i8k/OXxKNjc3m0NDQ4VMJsNzgCSEaOrtfYosy2Ip79QOESGRSJBlWVQoTGkA8MXXRyfy+fzrly5dnHRdl+vTae1A/4fDtm1ToVBQKpUKAZgFJCLz84GPryym4mMnjn9vGPpBAFBV1UkmkxdyudzNcrlclxcOh0uzvsbs+z4cx5kXjWEYKgB8OfjNdLVa3ZPNZs8Ui9PeQnEpirL5syMffQrgMSGEWgOEYRjh3t7em7t3v3WLlu7uLcLzvPC8mTKYeb4tmJkAwPM8IaWk//T82VAAWrLBqzUh+ADwyvMvRAB8co8zeWaWtQIhpayMjY2hqystFt5IVdVKnavXalRPn/5B9vR0Tbz2Zl+zaZpULpel4zg8R8FCFSQSzSKdTgvbttprgHo+n99g29ZkIBCoE43v+2vnzimKAl3X5284MjLqA/h7MZRs27ZNiUaja2qMtAEYvlu+YRgci8X8eDzBS+pDTdM4FosXj504/h2IWsDgWc6ESooegu9U5xrf0HVqbW3LaZpWzGQyvGSn0TStIIXxYjG4Zs7adH9FqjMaNXcF2TrsXh/PuqUbjrkqFVI0t6QITNeJpqsrTaOjY3w/Y4PQQ1NXmjqmpHxE85k3+TO8N1ixN3S3m42Rji17dVWc1VSR3/5o3K97Lbq7twgA5kKVLQZQkzOQzCSZO21X7v99yu68ULDCI5eLneWqu9/zudP172yxZX+Al3/EeGNwnBhYe2RHKrcMQ9Sk+tO1KiQz+gbHTwFoeUBjYi57tdIniJZ/EKblHvX/BYd5Va0uo/ugAAAAAElFTkSuQmCC"/><g id="d65" filter="url(#d51)"><use href="#d64"/></g><image id="d66" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAZUlEQVRIx+3UOw6AIBCE4dXY2HkP738kW2wgNJKfwthYsSTaMF9HmPDIJmM2DCACsTEbABqzB7f9vVGA8sGFF3CaiIi3aRKQes5dOt+3akQi0lVtGciOuvJkw7Oef/jLZGbbOKOrkjxiN0jUgd0AAAAASUVORK5CYII="/><filter id="d68" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="0.6"/><feFuncG type="linear" slope="0.6"/><feFuncB type="linear" slope="0.6"/></feComponentTransfer></filter><g id="d67" filter="url(#d68)"><use href="#d66"/></g><image id="d69" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAeUlEQVRIx2NgGO6AkYGBgeHutWv/idWgrKXFSLGtxFpIisNwASZ6B+nwt5CF1LiiNIGx4FK8+B4HRT6JVfox0uOQGnmMaAvRI5eWlo9m/GFa0lALoCc+ZS0tRppaiJz6YZaP4DjEVfgOOCC1eTKa8QdnxqdX1UYWAAD0djFtJm9iwAAAAABJRU5ErkJggg=="/><g id="d70" filter="url(#d51)"><use href="#d69"/></g><image id="d71" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAgElEQVRIx2NgGO6AkYGBgeHutWv/idWgrKXFSLGtxFpIisNwASZ6B+nwt5CFVvGNK4GRbOHiexxEqYtV+jHS45AaeYxoC9Ej9+61a/+JjavRfDha0pAMcGVwbClfWUuLkYUariamjoRZPoLjEF/cDCggtXkymvEHX8anZ9VGFgAA2cEw5eaacyAAAAAASUVORK5CYII="/><g id="d72" filter="url(#d51)"><use href="#d71"/></g><clipPath id="d73"><rect x="910" y="32" width="32" height="21"/></clipPath><clipPath id="d74"><rect x="1" y="61" width="130" height="584"/></clipPath><clipPath id="d75"><rect x="1" y="62" width="130" height="27"/></clipPath><filter id="d76" color-interpolation-filters="sRGB" x="-30%" y="-30%" width="160%" height="160%"><feGaussianBlur in="SourceAlpha" stdDeviation="0.5" result="b"/><feOffset in="b" dx="0" dy="0" result="o"/><feFlood flood-color="rgb(0, 0, 0)"/><feComposite in2="o" operator="in"/></filter><clipPath id="d77"><rect x="133" y="61" width="877" height="584"/></clipPath><clipPath id="d78"><rect x="133" y="62" width="877" height="27"/></clipPath><image id="d79" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg class="svg-icon" style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M384 64H256C220.66 64 192 92.66 192 128v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64V128c0-35.34-28.66-64-64-64z m0 320H256c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64v-128c0-35.34-28.66-64-64-64z m0 320H256c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64v-128c0-35.34-28.66-64-64-64zM768 64h-128c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64V128c0-35.34-28.66-64-64-64z m0 320h-128c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64v-128c0-35.34-28.66-64-64-64z m0 320h-128c-35.34 0-64 28.66-64 64v128c0 35.34 28.66 64 64 64h128c35.34 0 64-28.66 64-64v-128c0-35.34-28.66-64-64-64z" fill="" /></svg>"/><clipPath id="d80"><path d="M141 67H150A3 3 0 0 1 153 70V79A3 3 0 0 1 150 82H141A3 3 0 0 1 138 79V70A3 3 0 0 1 141 67Z"/></clipPath><filter id="d82" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="table" tableValues="1 0"/><feFuncG type="table" tableValues="1 0"/><feFuncB type="table" tableValues="1 0"/></feComponentTransfer><feComponentTransfer in="r0" result="r1"><feFuncR type="linear" slope="0.7"/><feFuncG type="linear" slope="0.7"/><feFuncB type="linear" slope="0.7"/></feComponentTransfer></filter><g id="d81" filter="url(#d82)"><use href="#d79"/></g><clipPath id="d83"><rect x="133" y="89" width="877" height="556"/></clipPath><clipPath id="d84"><rect x="220.656" y="125" width="211.234" height="22"/></clipPath><clipPath id="d85"><rect x="459.891" y="125" width="211.219" height="22"/></clipPath><clipPath id="d86"><rect x="699.109" y="125" width="211.219" height="22"/></clipPath><image id="d87" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><clipPath id="d88"><rect x="133" y="154" width="877" height="491"/></clipPath><clipPath id="d89"><rect x="213" y="154" width="797" height="491"/></clipPath><clipPath id="d90"><rect x="213" y="172" width="7" height="18"/></clipPath><clipPath id="d91"><rect x="213" y="190" width="7" height="18"/></clipPath><clipPath id="d92"><rect x="213" y="208" width="7" height="18"/></clipPath><clipPath id="d93"><rect x="213" y="226" width="7" height="18"/></clipPath><clipPath id="d94"><rect x="213" y="244" width="7" height="18"/></clipPath><clipPath id="d95"><rect x="213" y="262" width="7" height="18"/></clipPath><clipPath id="d96"><rect x="241" y="262" width="7" height="18"/></clipPath><clipPath id="d97"><rect x="213" y="280" width="7" height="18"/></clipPath><clipPath id="d98"><rect x="241" y="280" width="7" height="18"/></clipPath><clipPath id="d99"><rect x="213" y="298" width="7" height="18"/></clipPath><clipPath id="d100"><rect x="241" y="298" width="7" height="18"/></clipPath><clipPath id="d101"><rect x="270" y="298" width="7" height="18"/></clipPath><clipPath id="d102"><rect x="213" y="316" width="7" height="18"/></clipPath><clipPath id="d103"><rect x="241" y="316" width="7" height="18"/></clipPath><clipPath id="d104"><rect x="270" y="316" width="7" height="18"/></clipPath><clipPath id="d105"><rect x="213" y="334" width="7" height="18"/></clipPath><clipPath id="d106"><rect x="241" y="334" width="7" height="18"/></clipPath><clipPath id="d107"><rect x="270" y="334" width="7" height="18"/></clipPath><clipPath id="d108"><rect x="213" y="352" width="7" height="18"/></clipPath><clipPath id="d109"><rect x="241" y="352" width="7" height="18"/></clipPath><clipPath id="d110"><rect x="213" y="370" width="7" height="18"/></clipPath><clipPath id="d111"><rect x="241" y="370" width="7" height="18"/></clipPath><clipPath id="d112"><rect x="213" y="388" width="7" height="18"/></clipPath><clipPath id="d113"><rect x="213" y="406" width="7" height="18"/></clipPath><clipPath id="d114"><rect x="213" y="424" width="7" height="18"/></clipPath><clipPath id="d115"><rect x="213" y="442" width="7" height="18"/></clipPath><clipPath id="d116"><rect x="241" y="442" width="7" height="18"/></clipPath><clipPath id="d117"><rect x="213" y="460" width="7" height="18"/></clipPath><clipPath id="d118"><rect x="241" y="460" width="7" height="18"/></clipPath><image id="d119" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6 3' enable-background='new 0 0 6 3' height='3' width='6'><g fill='%23cca700'><polygon points='5.5,0 2.5,3 1.1,3 4.1,0'/><polygon points='4,0 6,2 6,0.6 5.4,0'/><polygon points='0,2 1,3 2.4,3 0,0.6'/></g></svg>"/><clipPath id="d120"><rect x="299" y="460" width="57" height="18"/></clipPath><clipPath id="d121"><rect x="213" y="478" width="7" height="18"/></clipPath><clipPath id="d122"><rect x="241" y="478" width="7" height="18"/></clipPath><clipPath id="d123"><rect x="299" y="478" width="29" height="18"/></clipPath><clipPath id="d124"><rect x="213" y="496" width="7" height="18"/></clipPath><clipPath id="d125"><rect x="241" y="496" width="7" height="18"/></clipPath><clipPath id="d126"><rect x="213" y="514" width="7" height="18"/></clipPath><clipPath id="d127"><rect x="241" y="514" width="7" height="18"/></clipPath><clipPath id="d128"><rect x="213" y="532" width="7" height="18"/></clipPath><clipPath id="d129"><rect x="241" y="532" width="7" height="18"/></clipPath><clipPath id="d130"><rect x="270" y="532" width="7" height="18"/></clipPath><clipPath id="d131"><rect x="213" y="550" width="7" height="18"/></clipPath><clipPath id="d132"><rect x="241" y="550" width="7" height="18"/></clipPath><clipPath id="d133"><rect x="270" y="550" width="7" height="18"/></clipPath><clipPath id="d134"><rect x="298" y="550" width="8" height="18"/></clipPath><clipPath id="d135"><rect x="213" y="568" width="7" height="18"/></clipPath><clipPath id="d136"><rect x="241" y="568" width="7" height="18"/></clipPath><clipPath id="d137"><rect x="270" y="568" width="7" height="18"/></clipPath><clipPath id="d138"><rect x="298" y="568" width="8" height="18"/></clipPath><clipPath id="d139"><rect x="213" y="586" width="7" height="18"/></clipPath><clipPath id="d140"><rect x="241" y="586" width="7" height="18"/></clipPath><clipPath id="d141"><rect x="270" y="586" width="7" height="18"/></clipPath><clipPath id="d142"><rect x="298" y="586" width="8" height="18"/></clipPath><clipPath id="d143"><rect x="213" y="604" width="7" height="18"/></clipPath><clipPath id="d144"><rect x="241" y="604" width="7" height="18"/></clipPath><clipPath id="d145"><rect x="270" y="604" width="7" height="18"/></clipPath><clipPath id="d146"><rect x="298" y="604" width="8" height="18"/></clipPath><clipPath id="d147"><rect x="327" y="604" width="7" height="18"/></clipPath><clipPath id="d148"><rect x="213" y="622" width="7" height="18"/></clipPath><clipPath id="d149"><rect x="241" y="622" width="7" height="18"/></clipPath><clipPath id="d150"><rect x="270" y="622" width="7" height="18"/></clipPath><clipPath id="d151"><rect x="298" y="622" width="8" height="18"/></clipPath><clipPath id="d152"><rect x="327" y="622" width="7" height="18"/></clipPath><clipPath id="d153"><rect x="213" y="640" width="7" height="18"/></clipPath><clipPath id="d154"><rect x="241" y="640" width="7" height="18"/></clipPath><clipPath id="d155"><rect x="270" y="640" width="7" height="18"/></clipPath><clipPath id="d156"><rect x="298" y="640" width="8" height="18"/></clipPath><image id="d157" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><clipPath id="d158"><rect x="1" y="646" width="362" height="206"/></clipPath><clipPath id="d159"><rect x="1" y="647" width="362" height="27"/></clipPath><image id="d160" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABaElEQVR42u3ZMU7DMBiG4c8xiJ0VJAakThEn6NhkAQklkpdyBo7DhDiCnTAicQJgzsbMSHIA20wsGSJa2U5FvndMFbv/01StEoAxxhhjS02k3lApdWat/RwdfjTG3M8BcJR6Q2utAHAyOnw81xWQLf0rQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgwIIK+mSorutz7/16ckMhTgE8jA6/eu+fJj+pLPvWWr+EBgj6ZEhK+WWtvQFwt+OpGyHEZuL1HkAR4wqQIRfrus7nef7svb8EcBVo2V4IUWitPw4eIAJC1OGjAARE6AGUxphow0cDCIDwO/x77F8BGXPxPRGGVMNHB9gDYQBQpBo+CcAOCMmHTwbwB4TBOVc2TZN0+KQAEwiDc65s2/Ztjr/CMvWGI4SLOYefNaWUrKpqBcbYf7ofsAWwjfRerTHm9qDvBwBYAbiOBRBjUd4TJABjjDHGGFtmP4X8p9Vq0ZMVAAAAAElFTkSuQmCC"/><clipPath id="d161"><path d="M282 652H292A3 3 0 0 1 295 655V665A3 3 0 0 1 292 668H282A3 3 0 0 1 279 665V655A3 3 0 0 1 282 652Z"/></clipPath><filter id="d163" color-interpolation-filters="sRGB" ><feComponentTransfer in="SourceGraphic" result="r0"><feFuncR type="linear" slope="2.9"/><feFuncG type="linear" slope="2.9"/><feFuncB type="linear" slope="2.9"/></feComponentTransfer></filter><g id="d162" filter="url(#d163)"><use href="#d160"/></g><clipPath id="d164"><rect x="1" y="674" width="362" height="178"/></clipPath><clipPath id="d165"><rect x="1" y="674" width="362" height="155"/></clipPath><image id="d166" width="1" height="1" preserveAspectRatio="none" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' fill='rgba(96, 96, 96, 0.4)'><polygon points='20,0 80,0 50,50'/></svg>"/><clipPath id="d167"><rect x="345" y="813" width="16" height="16"/></clipPath><clipPath id="d168"><rect x="345.281" y="674.016" width="16" height="16"/></clipPath><clipPath id="d169"><rect x="365" y="646" width="321" height="206"/></clipPath><clipPath id="d170"><rect x="365" y="647" width="321" height="27"/></clipPath><clipPath id="d171"><path d="M373 652H382A3 3 0 0 1 385 655V664A3 3 0 0 1 382 667H373A3 3 0 0 1 370 664V655A3 3 0 0 1 373 652Z"/></clipPath><clipPath id="d172"><rect x="365" y="674" width="321" height="178"/></clipPath><image id="d173" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAOUlEQVQoz2OcNGnSfwZyADkaJ02a9J+JgUwwhDSyIHNu3LiBN6A0NDQYqWsjsonDKFTJ1shIbiIHAK6jD2qRWoSFAAAAAElFTkSuQmCC"/><clipPath id="d174"><path d="M373 682H381A2 2 0 0 1 383 684V692A2 2 0 0 1 381 694H373A2 2 0 0 1 371 692V684A2 2 0 0 1 373 682Z"/></clipPath><clipPath id="d175"><path d="M373 732H381A2 2 0 0 1 383 734V742A2 2 0 0 1 381 744H373A2 2 0 0 1 371 742V734A2 2 0 0 1 373 732Z"/></clipPath><clipPath id="d176"><path d="M373 803H381A2 2 0 0 1 383 805V813A2 2 0 0 1 381 815H373A2 2 0 0 1 371 813V805A2 2 0 0 1 373 803Z"/></clipPath><clipPath id="d177"><rect x="380" y="705" width="287" height="16"/></clipPath><clipPath id="d178"><rect x="401" y="705" width="231" height="16"/></clipPath><clipPath id="d179"><rect x="380" y="755" width="287" height="16"/></clipPath><clipPath id="d180"><rect x="401" y="755" width="231" height="16"/></clipPath><clipPath id="d181"><rect x="380" y="776" width="287" height="16"/></clipPath><clipPath id="d182"><rect x="401" y="776" width="231" height="16"/></clipPath><clipPath id="d183"><rect x="380" y="826" width="287" height="16"/></clipPath><clipPath id="d184"><rect x="401" y="826" width="237" height="16"/></clipPath><clipPath id="d185"><rect x="688" y="646" width="160" height="206"/></clipPath><clipPath id="d186"><rect x="688" y="647" width="160" height="27"/></clipPath><clipPath id="d187"><path d="M696 652H705A3 3 0 0 1 708 655V664A3 3 0 0 1 705 667H696A3 3 0 0 1 693 664V655A3 3 0 0 1 696 652Z"/></clipPath><clipPath id="d188"><rect x="688" y="674" width="160" height="39"/></clipPath><clipPath id="d189"><path d="M695 677H703A2 2 0 0 1 705 679V687A2 2 0 0 1 703 689H695A2 2 0 0 1 693 687V679A2 2 0 0 1 695 677Z"/></clipPath><clipPath id="d190"><rect x="711" y="675" width="137" height="34"/></clipPath><clipPath id="d191"><rect x="688" y="713" width="160" height="22"/></clipPath><clipPath id="d192"><path d="M695 716H703A2 2 0 0 1 705 718V726A2 2 0 0 1 703 728H695A2 2 0 0 1 693 726V718A2 2 0 0 1 695 716Z"/></clipPath><clipPath id="d193"><rect x="711" y="714" width="137" height="17"/></clipPath><clipPath id="d194"><rect x="850" y="646" width="160" height="206"/></clipPath><clipPath id="d195"><rect x="850" y="647" width="160" height="27"/></clipPath><clipPath id="d196"><path d="M858 652H867A3 3 0 0 1 870 655V664A3 3 0 0 1 867 667H858A3 3 0 0 1 855 664V655A3 3 0 0 1 858 652Z"/></clipPath><clipPath id="d197"><rect x="1012" y="61" width="267" height="478"/></clipPath><clipPath id="d198"><rect x="1012" y="62" width="267" height="27"/></clipPath><clipPath id="d199"><path d="M1020 67H1029A3 3 0 0 1 1032 70V79A3 3 0 0 1 1029 82H1020A3 3 0 0 1 1017 79V70A3 3 0 0 1 1020 67Z"/></clipPath><clipPath id="d200"><path d="M1019 92H1027A2 2 0 0 1 1029 94V102A2 2 0 0 1 1027 104H1019A2 2 0 0 1 1017 102V94A2 2 0 0 1 1019 92Z"/></clipPath><clipPath id="d201"><rect x="1012" y="89" width="267" height="273"/></clipPath><image id="d202" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,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"/><clipPath id="d203"><rect x="1055" y="90" width="224" height="17"/></clipPath><image id="d204" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAATUlEQVQoz2OcNGnSfwZyADkaJ02a9J+JgUyAU+ONGzf+37hx4z/JGsm2kRBgQXceNifD2BoaGozUtRHZRJhNyGKDKHBwOZuqNjKSm8gBLK4eejJbWN0AAAAASUVORK5CYII="/><clipPath id="d205"><path d="M1039 113H1047A2 2 0 0 1 1049 115V123A2 2 0 0 1 1047 125H1039A2 2 0 0 1 1037 123V115A2 2 0 0 1 1039 113Z"/></clipPath><clipPath id="d206"><rect x="1012" y="110" width="267" height="21"/></clipPath><clipPath id="d207"><rect x="1075" y="111" width="204" height="17"/></clipPath><clipPath id="d208"><path d="M1039 134H1047A2 2 0 0 1 1049 136V144A2 2 0 0 1 1047 146H1039A2 2 0 0 1 1037 144V136A2 2 0 0 1 1039 134Z"/></clipPath><clipPath id="d209"><rect x="1012" y="131" width="267" height="21"/></clipPath><clipPath id="d210"><rect x="1075" y="132" width="204" height="17"/></clipPath><clipPath id="d211"><path d="M1039 155H1047A2 2 0 0 1 1049 157V165A2 2 0 0 1 1047 167H1039A2 2 0 0 1 1037 165V157A2 2 0 0 1 1039 155Z"/></clipPath><clipPath id="d212"><rect x="1012" y="152" width="267" height="21"/></clipPath><clipPath id="d213"><rect x="1075" y="153" width="204" height="17"/></clipPath><clipPath id="d214"><path d="M1039 176H1047A2 2 0 0 1 1049 178V186A2 2 0 0 1 1047 188H1039A2 2 0 0 1 1037 186V178A2 2 0 0 1 1039 176Z"/></clipPath><clipPath id="d215"><rect x="1012" y="173" width="267" height="21"/></clipPath><clipPath id="d216"><rect x="1075" y="174" width="204" height="17"/></clipPath><clipPath id="d217"><path d="M1039 197H1047A2 2 0 0 1 1049 199V207A2 2 0 0 1 1047 209H1039A2 2 0 0 1 1037 207V199A2 2 0 0 1 1039 197Z"/></clipPath><clipPath id="d218"><rect x="1012" y="194" width="267" height="21"/></clipPath><clipPath id="d219"><rect x="1075" y="195" width="204" height="17"/></clipPath><clipPath id="d220"><path d="M1039 218H1047A2 2 0 0 1 1049 220V228A2 2 0 0 1 1047 230H1039A2 2 0 0 1 1037 228V220A2 2 0 0 1 1039 218Z"/></clipPath><clipPath id="d221"><rect x="1012" y="215" width="267" height="147"/></clipPath><clipPath id="d222"><rect x="1075" y="216" width="204" height="17"/></clipPath><clipPath id="d223"><rect x="1012" y="236" width="267" height="21"/></clipPath><clipPath id="d224"><rect x="1095" y="237" width="184" height="17"/></clipPath><clipPath id="d225"><rect x="1012" y="257" width="267" height="21"/></clipPath><clipPath id="d226"><rect x="1095" y="258" width="170" height="17"/></clipPath><clipPath id="d227"><rect x="1012" y="278" width="267" height="21"/></clipPath><clipPath id="d228"><rect x="1095" y="279" width="170" height="17"/></clipPath><clipPath id="d229"><rect x="1012" y="299" width="267" height="21"/></clipPath><clipPath id="d230"><rect x="1095" y="300" width="170" height="17"/></clipPath><clipPath id="d231"><rect x="1012" y="320" width="267" height="21"/></clipPath><clipPath id="d232"><rect x="1095" y="321" width="184" height="17"/></clipPath><clipPath id="d233"><rect x="1012" y="341" width="267" height="21"/></clipPath><clipPath id="d234"><rect x="1095" y="342" width="184" height="17"/></clipPath><clipPath id="d235"><rect x="1012" y="540" width="267" height="312"/></clipPath><clipPath id="d236"><rect x="1012" y="541" width="267" height="27"/></clipPath><clipPath id="d237"><path d="M1020 545H1029A3 3 0 0 1 1032 548V557A3 3 0 0 1 1029 560H1020A3 3 0 0 1 1017 557V548A3 3 0 0 1 1020 545Z"/></clipPath><image id="d238" width="1" height="1" preserveAspectRatio="none" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAOSCAYAAAAVkNIXAAADBUlEQVR4AezXwU3DQBAF0FUKoQN34QqoAWiBGmgBqIGi6MAHn6GC7EgZ2TtrvUhz+ppo9KJY/rd1Xf+WZRk2t33f27Ztw+bWBn8cQIAAAQIECBAgQIAAAQIEDheIuq8DCBAgQIAAAQIECBAgQIAAgfkFov4f5QQIECBAgAABAgQIECBAgACB+gJRv8/mBAgQIECAAAECBAgQIECAAIHxAtl+n90nQIAAAQIECBAgQIAAAQIECBwvEPR3BxCoIfD69tJGTQ2B4K96aFxD4Ovzu42aGgKH/sjBlxMgQIAAAQIECMwv8PPx2zIzv0AL3vmimAABAgQIECBAgACBtMDz+1PLTPqA6K03yh1AgACBCQSiR1kyJ0CAAAECBAgQIECAAAECBAgUEEj2++w6AQIECBAgQIAAAQIECBAgQOAEgX6BdwABAgQIECBAgAABAgQIECBwBYF+/49SAgQIECBAgAABAgQIECBAgMAMAlHDz+UECBAgQIAAAQIECBAgQIAAgQoCuX6f3SZAgAABAgQIECBAgAABAgQInCHQbfAOIECAAAECBAgQIECAAAECBC4h0O3/UUiAAAECBAgQIECAAAECBAgQmEIgqvipnAABAgQIECBAgAABAgQIECBQQiDV77PLBAgQIECAAAECBAgQIECAAIFTBHoV3gEECBAgQIAAAQIECBAgQIDANQR6/T/KCBAgQIAAAQIECBAgQIAAAQJzCEQdP5MTIECAAAECBAgQIECAAAECBGoIZPp9dpcAAQIECBAgQIAAAQIECBAgcI5Ap8M7gAABAgQIECBAgAABAgQIELiIQKf/RxEBAgQIECBAgAABAgQIECBAYBKBqOQncgIECBAgQIAAAQIECBAgQIBAEYFEv8+uEiBAgAABAgQIECBAgAABAgROErhf4h1AgAABAgQIECBAgAABAgQIXEXgfv+PEgIECBAgQIAAAQIECBAgQIDALAJRy388J0CAAAECBAgQIECAAAECBAhUEXi832c3CRAgQIAAAQIECBAgQOAfAAD//3OlGKUAAAAGSURBVAMAypcfpTwokoAAAAAASUVORK5CYII="/><filter id="d239" filterUnits="userSpaceOnUse" x="-1" y="-49" width="1282" height="978"><feGaussianBlur stdDeviation="20"/></filter><clipPath id="d240"><polygon points="59 11 1221 11 1218 14 62 14"/></clipPath><clipPath id="d241"><polygon points="1221 11 1221 869 1220 868 1218 14"/></clipPath><clipPath id="d242"><polygon points="1221 869 59 869 60 868 1220 868"/></clipPath><clipPath id="d243"><polygon points="59 869 59 11 62 14 60 868"/></clipPath><filter id="d244" filterUnits="userSpaceOnUse" x="986.5" y="827.5" width="123" height="37"><feGaussianBlur stdDeviation="1.5"/></filter><filter id="d245" filterUnits="userSpaceOnUse" x="1120.5" y="827.5" width="89" height="37"><feGaussianBlur stdDeviation="1.5"/></filter><clipPath id="d246"><rect x="60" y="39" width="1160" height="780"/></clipPath><linearGradient id="d247" gradientUnits="userSpaceOnUse" x1="15" y1="0" x2="15" y2="29"><stop offset="0" stop-color="rgb(255,255,255)"/><stop offset="1" stop-color="rgb(230,234,240)"/></linearGradient><rect id="d248" width="30" height="29" fill="url(#d247)"/><clipPath id="d249"><path d="M1012 68H1038A3 3 0 0 1 1041 71V96A3 3 0 0 1 1038 99H1012A3 3 0 0 1 1009 96V71A3 3 0 0 1 1012 68Z"/></clipPath><clipPath id="d250"><rect x="85" y="68" width="197" height="31"/></clipPath><clipPath id="d251"><rect x="1086" y="69" width="116" height="29"/></clipPath><clipPath id="d252"><rect x="325" y="69" width="632" height="29"/></clipPath><clipPath id="d253"><path d="M1050 68H1076A3 3 0 0 1 1079 71V96A3 3 0 0 1 1076 99H1050A3 3 0 0 1 1047 96V71A3 3 0 0 1 1050 68Z"/></clipPath><clipPath id="d254"><rect x="73" y="135" width="566" height="27"/></clipPath><clipPath id="d255"><rect x="106" y="140" width="37" height="17"/></clipPath><clipPath id="d256"><rect x="73" y="162" width="566" height="27"/></clipPath><clipPath id="d257"><rect x="106" y="167" width="12" height="17"/></clipPath><clipPath id="d258"><rect x="73" y="189" width="566" height="27"/></clipPath><clipPath id="d259"><rect x="106" y="194" width="19" height="17"/></clipPath><clipPath id="d260"><rect x="73" y="216" width="566" height="27"/></clipPath><clipPath id="d261"><rect x="106" y="221" width="42" height="17"/></clipPath><clipPath id="d262"><rect x="73" y="135" width="566" height="423"/></clipPath><clipPath id="d263"><rect x="73" y="243" width="566" height="27"/></clipPath><clipPath id="d264"><rect x="106" y="248" width="52" height="17"/></clipPath><clipPath id="d265"><rect x="73" y="270" width="566" height="27"/></clipPath><clipPath id="d266"><rect x="106" y="275" width="70" height="17"/></clipPath><clipPath id="d267"><rect x="73" y="297" width="566" height="27"/></clipPath><clipPath id="d268"><rect x="106" y="302" width="55" height="17"/></clipPath><clipPath id="d269"><rect x="73" y="324" width="566" height="27"/></clipPath><clipPath id="d270"><rect x="106" y="329" width="31" height="17"/></clipPath><clipPath id="d271"><rect x="73" y="351" width="566" height="27"/></clipPath><clipPath id="d272"><rect x="106" y="356" width="46" height="17"/></clipPath><clipPath id="d273"><rect x="655" y="135" width="552" height="27"/></clipPath><clipPath id="d274"><rect x="688" y="140" width="23" height="17"/></clipPath><clipPath id="d275"><rect x="655" y="162" width="552" height="27"/></clipPath><clipPath id="d276"><rect x="688" y="167" width="28" height="17"/></clipPath><clipPath id="d277"><rect x="655" y="189" width="552" height="27"/></clipPath><clipPath id="d278"><rect x="688" y="194" width="24" height="17"/></clipPath><clipPath id="d279"><rect x="655" y="216" width="552" height="27"/></clipPath><clipPath id="d280"><rect x="688" y="221" width="68" height="17"/></clipPath><clipPath id="d281"><rect x="655" y="135" width="552" height="423"/></clipPath><clipPath id="d282"><rect x="655" y="243" width="552" height="27"/></clipPath><clipPath id="d283"><rect x="688" y="248" width="26" height="17"/></clipPath><clipPath id="d284"><rect x="73" y="593" width="1134" height="215"/></clipPath></defs><rect x="59" y="11" width="1162" height="857.5" fill="rgb(43, 43, 43)"/><rect x="0" y="0" width="1280" height="880" fill="rgb(43, 43, 43)"/><rect x="0" y="0" width="1280" height="25" fill="rgb(48, 38, 38)"/><use href="#d0" transform="translate(1209.625 5.625) scale(13.75 13.75)"/><rect x="1" y="854" width="1279" height="26" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(107, 107, 107)" d="M0 853h1280v27h-1280ZM1 854h1279v26h-1279Z"/><rect x="10" y="855" width="173" height="22" fill="rgb(74, 167, 74)"/><polygon points="9 854 184 854 183 855 10 855" fill="rgb(165, 190, 165)"/><polygon points="184 854 184 878 183 877 183 855" fill="rgb(118, 155, 118)"/><polygon points="184 878 9 878 10 877 183 877" fill="rgb(150, 177, 150)"/><polygon points="9 878 9 854 10 855 10 877" fill="rgb(165, 190, 165)"/><text class="t0" x="44.563" y="869" textLength="119.797" lengthAdjust="spacing">tB Services: OPERATIONAL</text><rect x="193" y="855" width="148" height="22" fill="rgb(74, 167, 74)"/><polygon points="192 854 342 854 341 855 193 855" fill="rgb(165, 190, 165)"/><polygon points="342 854 342 878 341 877 341 855" fill="rgb(118, 155, 118)"/><polygon points="342 878 192 878 193 877 341 877" fill="rgb(150, 177, 150)"/><polygon points="192 878 192 854 193 855 193 877" fill="rgb(165, 190, 165)"/><text class="t1" x="215.594" y="869.531"></text><text class="t0" x="231.531" y="869" textLength="86.859" lengthAdjust="spacing">ULTIMATE EDITION</text><use href="#d1" transform="translate(356.5 857.805) scale(21 16.39)"/><use href="#d2" transform="translate(390.5 858.042) scale(21 15.916)"/><use href="#d3" transform="translate(423.75 858.802) scale(17.5 14.395)"/><use href="#d4" transform="translate(453.75 857.918) scale(16.5 16.163)"/><g clip-path="url(#d5)"><text class="t2" x="40.453" y="17" textLength="21.797" lengthAdjust="spacing">Edit</text><text class="t2" x="76.25" y="17" textLength="27.422" lengthAdjust="spacing">View</text><text class="t2" x="117.672" y="17" textLength="39.781" lengthAdjust="spacing">Project</text><text class="t2" x="171.453" y="17" textLength="40.703" lengthAdjust="spacing">Format</text><text class="t2" x="226.156" y="17" textLength="38.578" lengthAdjust="spacing">Debug</text><text class="t2" x="278.734" y="17" textLength="22.5" lengthAdjust="spacing">Run</text><text class="t2" x="315.234" y="17" textLength="29.453" lengthAdjust="spacing">Tools</text><text class="t2" x="358.688" y="17" textLength="45.234" lengthAdjust="spacing">Add-Ins</text><text class="t2" x="417.922" y="17" textLength="47.328" lengthAdjust="spacing">Window</text><text class="t2" x="479.25" y="17" textLength="26.828" lengthAdjust="spacing">Help</text></g><g clip-path="url(#d6)"><text class="t2" x="699.922" y="17" textLength="317.234" lengthAdjust="spacing">project.twinproj - twinBASIC (twinBASIC IDE BETA 1034)</text></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M0 25h1280v36h-1280ZM0 25h1280v35h-1280Z"/><g clip-path="url(#d7)"><rect x="0" y="26" width="1280" height="34" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M0 25h1280v35h-1280ZM0 26h1280v34h-1280Z"/></g><g clip-path="url(#d8)"><rect x="94" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="151" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="296" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="464" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="573" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="686" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="799" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="837" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="894" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><rect x="1048" y="29" width="1" height="28" fill="rgba(128, 128, 128, 0.36)"/><text class="t3" x="1058.453" y="49"></text><path d="M309 32H385A2 2 0 0 1 387 34V51A2 2 0 0 1 385 53H309A2 2 0 0 1 307 51V34A2 2 0 0 1 309 32Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(189, 189, 189)" d="M309 32H385A2 2 0 0 1 387 34V51A2 2 0 0 1 385 53H309A2 2 0 0 1 307 51V34A2 2 0 0 1 309 32ZM309 33H385A1 1 0 0 1 386 34V51A1 1 0 0 1 385 52H309A1 1 0 0 1 308 51V34A1 1 0 0 1 309 33Z"/><g clip-path="url(#d9)"><text class="t4" x="312" y="48" textLength="33.922" lengthAdjust="spacing">win32</text></g><path d="M374 40L378 44L382 40" fill="none" stroke="rgb(0, 0, 0)" stroke-width="2"/><use href="#d11" transform="translate(47 33) scale(16 16)"/><use href="#d14" transform="translate(69 33) scale(16 16)"/></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d17" transform="translate(104 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d20" transform="translate(126 33) scale(16 16)"/></g></g><g clip-path="url(#d8)"><use href="#d22" transform="translate(161 33) scale(16 16)"/></g><g opacity="0.4"><g clip-path="url(#d8)"><use href="#d25" transform="translate(183 34) scale(14.4 14.4)"/></g></g><g opacity="0.4"><g clip-path="url(#d8)"><use href="#d28" transform="translate(205 34) scale(14.4 14.4)"/></g></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d30" transform="translate(227 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d32" transform="translate(249 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d34" transform="translate(271 33) scale(16 16)"/></g></g><g clip-path="url(#d8)"><use href="#d36" transform="translate(395 33) scale(16 16)"/><g transform="matrix(1.07 0 0 1.07 -29.75 -2.87)"><use href="#d38" transform="translate(416.998 32.998) scale(16 16)"/></g><use href="#d40" transform="translate(439 33) scale(16 16)"/></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d42" transform="translate(474 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d44" transform="translate(498 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d46" transform="translate(522 33) scale(16 16)"/></g></g><g opacity="0.3"><g clip-path="url(#d8)"><use href="#d48" transform="translate(546 33) scale(16 16)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d50" transform="translate(583 33) scale(19 19)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d53" transform="translate(608 33) scale(19 19)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d55" transform="translate(633 33) scale(19 19)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d57" transform="translate(658 33) scale(19 19)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d59" transform="translate(696 33) scale(19 19)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d61" transform="translate(721 33) scale(19 19)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d63" transform="translate(746 33) scale(19 19)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d65" transform="translate(771 33) scale(19 19)"/></g></g><g clip-path="url(#d8)"><rect x="809" y="33" width="19" height="19" fill="rgba(153, 153, 153, 0.25)"/><use href="#d67" transform="translate(809 33) scale(19 19)"/><rect x="808" y="32" width="21" height="21" fill="none" stroke="rgba(153, 153, 153, 0.5)" stroke-width="2"/></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d70" transform="translate(847 33) scale(16 16)"/></g></g><g opacity="0.25"><g clip-path="url(#d8)"><use href="#d72" transform="translate(869 33) scale(16 16)"/></g></g><g opacity="0.25"><g opacity="0.7"><g clip-path="url(#d8)"><path d="M907 32H957A2 2 0 0 1 959 34V51A2 2 0 0 1 957 53H907A2 2 0 0 1 905 51V34A2 2 0 0 1 907 32Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(255, 255, 255)" d="M907 32H957A2 2 0 0 1 959 34V51A2 2 0 0 1 957 53H907A2 2 0 0 1 905 51V34A2 2 0 0 1 907 32ZM907 33H957A1 1 0 0 1 958 34V51A1 1 0 0 1 957 52H907A1 1 0 0 1 906 51V34A1 1 0 0 1 907 33Z"/><g clip-path="url(#d73)"><text class="t4" x="910" y="48" textLength="31.672" lengthAdjust="spacing">100%</text></g><path d="M946 40L950 44L954 40" fill="none" stroke="rgb(0, 0, 0)" stroke-width="2"/></g></g></g><g clip-path="url(#d8)"><path d="M972 33H1039A3 3 0 0 1 1042 36V49A3 3 0 0 1 1039 52H972A3 3 0 0 1 969 49V36A3 3 0 0 1 972 33Z" fill="rgba(196, 196, 196, 0.76)"/><text class="t6" x="974" y="48"></text><text class="t7" x="987.703" y="48" textLength="49.75" lengthAdjust="spacing">PREVIEW</text></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M0 61h132v585h-132ZM1 61h130v584h-130Z"/><g clip-path="url(#d74)"><rect x="1" y="62" width="130" height="27" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M1 61h130v28h-130ZM1 62h130v27h-130Z"/></g><g clip-path="url(#d75)"><text class="t8" x="26" y="79.5" textLength="58.094" lengthAdjust="spacing">TOOLBOX</text></g><g><g filter="url(#d76)"><g opacity="0.4"><g clip-path="url(#d75)"><text class="t9" x="84.094" y="82.5"></text></g></g></g><g opacity="0.4"><g clip-path="url(#d75)"><text class="t9" x="84.094" y="82.5"></text></g></g></g><g><g filter="url(#d76)"><g opacity="0.4"><g clip-path="url(#d75)"><text class="t10" x="105.094" y="83.5"></text></g></g></g><g opacity="0.4"><g clip-path="url(#d75)"><text class="t10" x="105.094" y="83.5"></text></g></g></g><g clip-path="url(#d75)"><text class="t11" x="127.094" y="83.5"></text></g><g clip-path="url(#d74)"><rect x="1" y="89" width="130" height="556" fill="rgb(43, 43, 43)"/></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M132 61h879v585h-879ZM133 61h877v584h-877Z"/><g clip-path="url(#d77)"><rect x="133" y="62" width="877" height="27" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M133 61h877v28h-877ZM133 62h877v27h-877Z"/></g><g clip-path="url(#d78)"><text class="t8" x="157.656" y="79.5" textLength="53.203" lengthAdjust="spacing">EDITOR 1</text><g clip-path="url(#d80)"><use href="#d81" transform="translate(138 68) scale(13 13)"/></g></g><g><g filter="url(#d76)"><g opacity="0.4"><g clip-path="url(#d78)"><text class="t10" x="968.328" y="83.5"></text></g></g></g><g opacity="0.4"><g clip-path="url(#d78)"><text class="t10" x="968.328" y="83.5"></text></g></g></g><g clip-path="url(#d78)"><text class="t11" x="990.328" y="83.5"></text></g><g clip-path="url(#d77)"><rect x="133" y="89" width="877" height="556" fill="rgb(43, 43, 43)"/></g><g clip-path="url(#d83)"><rect x="133" y="89" width="877" height="556" fill="rgb(33, 33, 33)"/><rect x="133" y="89" width="877" height="29" fill="rgb(43, 43, 43)"/><rect x="982" y="94" width="23" height="19" fill="rgb(94, 92, 92)"/><path fill-rule="evenodd" fill="rgb(175, 175, 175)" d="M981 93h25v21h-25ZM982 94h23v19h-23Z"/><text class="t12" x="987.328" y="110"></text><rect x="133" y="118" width="877" height="36" fill="rgb(48, 47, 47)"/><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.19)" d="M133 118h877v36h-877ZM133 119h877v34h-877Z"/><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M133 154h877v492h-877ZM133 154h877v491h-877Z"/><path d="M219 125H446A3 3 0 0 1 449 128V144A3 3 0 0 1 446 147H219A3 3 0 0 1 216 144V128A3 3 0 0 1 219 125Z" fill="rgb(194, 194, 194)"/><path fill-rule="evenodd" fill="rgb(211, 210, 210)" d="M219 125H446A3 3 0 0 1 449 128V144A3 3 0 0 1 446 147H219A3 3 0 0 1 216 144V128A3 3 0 0 1 219 125ZM219 126H446A2 2 0 0 1 448 128V144A2 2 0 0 1 446 146H219A2 2 0 0 1 217 144V128A2 2 0 0 1 219 126Z"/><g clip-path="url(#d84)"><text class="t13" x="220.656" y="141" textLength="48.641" lengthAdjust="spacing">Inventory</text></g><path d="M436 134L440 138L444 134" fill="none" stroke="rgb(32, 32, 32)" stroke-width="2"/><path d="M458 125H685A3 3 0 0 1 688 128V144A3 3 0 0 1 685 147H458A3 3 0 0 1 455 144V128A3 3 0 0 1 458 125Z" fill="rgb(194, 194, 194)"/><path fill-rule="evenodd" fill="rgb(211, 210, 210)" d="M458 125H685A3 3 0 0 1 688 128V144A3 3 0 0 1 685 147H458A3 3 0 0 1 455 144V128A3 3 0 0 1 458 125ZM458 126H685A2 2 0 0 1 687 128V144A2 2 0 0 1 685 146H458A2 2 0 0 1 456 144V128A2 2 0 0 1 458 126Z"/><g clip-path="url(#d85)"><text class="t13" x="459.891" y="141" textLength="45.672" lengthAdjust="spacing">(general)</text></g><path d="M675 134L679 138L683 134" fill="none" stroke="rgb(32, 32, 32)" stroke-width="2"/><path d="M697 125H924A3 3 0 0 1 927 128V144A3 3 0 0 1 924 147H697A3 3 0 0 1 694 144V128A3 3 0 0 1 697 125Z" fill="rgb(194, 194, 194)"/><path fill-rule="evenodd" fill="rgb(211, 210, 210)" d="M697 125H924A3 3 0 0 1 927 128V144A3 3 0 0 1 924 147H697A3 3 0 0 1 694 144V128A3 3 0 0 1 697 125ZM697 126H924A2 2 0 0 1 926 128V144A2 2 0 0 1 924 146H697A2 2 0 0 1 695 144V128A2 2 0 0 1 697 126Z"/><g clip-path="url(#d86)"><text class="t13" x="699.109" y="141" textLength="24.609" lengthAdjust="spacing">Total</text></g><path d="M914 134L918 138L922 134" fill="none" stroke="rgb(32, 32, 32)" stroke-width="2"/><path d="M141 93H257A3 3 0 0 1 260 96V118L260 118H138L138 118V96A3 3 0 0 1 141 93Z" fill="rgb(135, 107, 107)"/><path fill-rule="evenodd" fill="rgb(142, 109, 109)" d="M141 93H257A3 3 0 0 1 260 96V118L260 118H138L138 118V96A3 3 0 0 1 141 93ZM141 94H257A2 2 0 0 1 259 96V118L259 118H139L139 118V96A2 2 0 0 1 141 94Z"/><use href="#d87" transform="translate(144 101) scale(10.11 11)"/><text class="t14" x="158.656" y="111" textLength="78.656" lengthAdjust="spacing">Inventory.twin</text><text class="t15" x="239.313" y="114"></text></g><g clip-path="url(#d88)"><rect x="133" y="154" width="877" height="491" fill="rgb(31, 31, 31)"/><rect x="133" y="154" width="80" height="1481" fill="rgb(40, 40, 40)"/><text class="t16" x="179.5" y="185">2</text><text class="t16" x="179.5" y="203">3</text><text class="t16" x="179.5" y="221">4</text><text class="t16" x="179.5" y="239">5</text><text class="t16" x="179.5" y="257">6</text><text class="t16" x="179.5" y="275">7</text><text class="t16" x="179.5" y="293">8</text><text class="t16" x="179.5" y="311">9</text><text class="t16" x="172.359" y="329" textLength="14.297" lengthAdjust="spacing">10</text><text class="t16" x="172.359" y="347" textLength="14.297" lengthAdjust="spacing">11</text><text class="t16" x="172.359" y="365" textLength="14.297" lengthAdjust="spacing">12</text><text class="t16" x="172.359" y="383" textLength="14.297" lengthAdjust="spacing">13</text><text class="t16" x="172.359" y="401" textLength="14.297" lengthAdjust="spacing">14</text><text class="t16" x="172.359" y="419" textLength="14.297" lengthAdjust="spacing">15</text><text class="t17" x="172.359" y="437" textLength="14.297" lengthAdjust="spacing">16</text><text class="t16" x="172.359" y="455" textLength="14.297" lengthAdjust="spacing">17</text><text class="t16" x="172.359" y="473" textLength="14.297" lengthAdjust="spacing">18</text><text class="t16" x="172.359" y="491" textLength="14.297" lengthAdjust="spacing">19</text><text class="t16" x="172.359" y="509" textLength="14.297" lengthAdjust="spacing">20</text><text class="t16" x="172.359" y="527" textLength="14.297" lengthAdjust="spacing">21</text><text class="t16" x="172.359" y="545" textLength="14.297" lengthAdjust="spacing">22</text><text class="t16" x="172.359" y="563" textLength="14.297" lengthAdjust="spacing">23</text><text class="t16" x="172.359" y="581" textLength="14.297" lengthAdjust="spacing">24</text><text class="t16" x="172.359" y="599" textLength="14.297" lengthAdjust="spacing">25</text><text class="t16" x="172.359" y="617" textLength="14.297" lengthAdjust="spacing">26</text><text class="t16" x="172.359" y="635" textLength="14.297" lengthAdjust="spacing">27</text><text class="t16" x="172.359" y="653" textLength="14.297" lengthAdjust="spacing">28</text><text class="t16" x="179.5" y="167">1</text></g><g clip-path="url(#d89)"><rect x="213" y="154" width="1000000" height="1000000" fill="rgb(31, 31, 31)"/><path clip-path="url(#d90)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 172h7v18h-7ZM214 172h7v18h-7Z"/><path clip-path="url(#d91)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 190h7v18h-7ZM214 190h7v18h-7Z"/><path clip-path="url(#d92)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 208h7v18h-7ZM214 208h7v18h-7Z"/><path clip-path="url(#d93)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 226h7v18h-7ZM214 226h7v18h-7Z"/><path fill-rule="evenodd" fill="rgba(80, 80, 80, 0.5)" d="M213 226h694v18h-694ZM213 226h694v17h-694Z"/><path clip-path="url(#d94)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 244h7v18h-7ZM214 244h7v18h-7Z"/><path clip-path="url(#d95)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 262h7v18h-7ZM214 262h7v18h-7Z"/><path clip-path="url(#d96)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M241 262h7v18h-7ZM242 262h7v18h-7Z"/><path clip-path="url(#d97)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 280h7v18h-7ZM214 280h7v18h-7Z"/><path clip-path="url(#d98)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M241 280h7v18h-7ZM242 280h7v18h-7Z"/><path clip-path="url(#d99)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 298h7v18h-7ZM214 298h7v18h-7Z"/><path clip-path="url(#d100)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M241 298h7v18h-7ZM242 298h7v18h-7Z"/><path clip-path="url(#d101)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 298h7v18h-7ZM271 298h7v18h-7Z"/><path clip-path="url(#d102)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 316h7v18h-7ZM214 316h7v18h-7Z"/><path clip-path="url(#d103)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M241 316h7v18h-7ZM242 316h7v18h-7Z"/><path clip-path="url(#d104)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 316h7v18h-7ZM271 316h7v18h-7Z"/><path clip-path="url(#d105)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 334h7v18h-7ZM214 334h7v18h-7Z"/><path clip-path="url(#d106)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M241 334h7v18h-7ZM242 334h7v18h-7Z"/><path clip-path="url(#d107)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 334h7v18h-7ZM271 334h7v18h-7Z"/><path clip-path="url(#d108)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 352h7v18h-7ZM214 352h7v18h-7Z"/><path clip-path="url(#d109)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M241 352h7v18h-7ZM242 352h7v18h-7Z"/><path clip-path="url(#d110)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 370h7v18h-7ZM214 370h7v18h-7Z"/><path clip-path="url(#d111)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M241 370h7v18h-7ZM242 370h7v18h-7Z"/><path clip-path="url(#d112)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 388h7v18h-7ZM214 388h7v18h-7Z"/><path clip-path="url(#d113)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 406h7v18h-7ZM214 406h7v18h-7Z"/><path fill-rule="evenodd" fill="rgba(80, 80, 80, 0.5)" d="M213 406h694v18h-694ZM213 406h694v17h-694Z"/><rect x="213" y="424" width="694" height="18" fill="rgb(48, 48, 48)"/><path clip-path="url(#d114)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 424h7v18h-7ZM214 424h7v18h-7Z"/><path clip-path="url(#d115)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 442h7v18h-7ZM214 442h7v18h-7Z"/><path clip-path="url(#d116)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 442h7v18h-7ZM242 442h7v18h-7Z"/><path clip-path="url(#d117)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 460h7v18h-7ZM214 460h7v18h-7Z"/><path clip-path="url(#d118)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 460h7v18h-7ZM242 460h7v18h-7Z"/><g clip-path="url(#d120)"><use href="#d119" transform="translate(299 475) scale(6 3)"/><use href="#d119" transform="translate(305 475) scale(6 3)"/><use href="#d119" transform="translate(311 475) scale(6 3)"/><use href="#d119" transform="translate(317 475) scale(6 3)"/><use href="#d119" transform="translate(323 475) scale(6 3)"/><use href="#d119" transform="translate(329 475) scale(6 3)"/><use href="#d119" transform="translate(335 475) scale(6 3)"/><use href="#d119" transform="translate(341 475) scale(6 3)"/><use href="#d119" transform="translate(347 475) scale(6 3)"/><use href="#d119" transform="translate(353 475) scale(6 3)"/></g><rect x="299" y="460" width="57" height="18" fill="rgba(236, 199, 120, 0.094)"/><path clip-path="url(#d121)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 478h7v18h-7ZM214 478h7v18h-7Z"/><path clip-path="url(#d122)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 478h7v18h-7ZM242 478h7v18h-7Z"/><g clip-path="url(#d123)"><use href="#d119" transform="translate(299 493) scale(6 3)"/><use href="#d119" transform="translate(305 493) scale(6 3)"/><use href="#d119" transform="translate(311 493) scale(6 3)"/><use href="#d119" transform="translate(317 493) scale(6 3)"/><use href="#d119" transform="translate(323 493) scale(6 3)"/></g><rect x="299" y="478" width="29" height="18" fill="rgba(236, 199, 120, 0.094)"/><path clip-path="url(#d124)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 496h7v18h-7ZM214 496h7v18h-7Z"/><path clip-path="url(#d125)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 496h7v18h-7ZM242 496h7v18h-7Z"/><path clip-path="url(#d126)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 514h7v18h-7ZM214 514h7v18h-7Z"/><path clip-path="url(#d127)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 514h7v18h-7ZM242 514h7v18h-7Z"/><path clip-path="url(#d128)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 532h7v18h-7ZM214 532h7v18h-7Z"/><path clip-path="url(#d129)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 532h7v18h-7ZM242 532h7v18h-7Z"/><path clip-path="url(#d130)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 532h7v18h-7ZM271 532h7v18h-7Z"/><path clip-path="url(#d131)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 550h7v18h-7ZM214 550h7v18h-7Z"/><path clip-path="url(#d132)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 550h7v18h-7ZM242 550h7v18h-7Z"/><path clip-path="url(#d133)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 550h7v18h-7ZM271 550h7v18h-7Z"/><path clip-path="url(#d134)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M298 550h8v18h-8ZM299 550h8v18h-8Z"/><path clip-path="url(#d135)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 568h7v18h-7ZM214 568h7v18h-7Z"/><path clip-path="url(#d136)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 568h7v18h-7ZM242 568h7v18h-7Z"/><path clip-path="url(#d137)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 568h7v18h-7ZM271 568h7v18h-7Z"/><path clip-path="url(#d138)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M298 568h8v18h-8ZM299 568h8v18h-8Z"/><path clip-path="url(#d139)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 586h7v18h-7ZM214 586h7v18h-7Z"/><path clip-path="url(#d140)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 586h7v18h-7ZM242 586h7v18h-7Z"/><path clip-path="url(#d141)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 586h7v18h-7ZM271 586h7v18h-7Z"/><path clip-path="url(#d142)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M298 586h8v18h-8ZM299 586h8v18h-8Z"/><path clip-path="url(#d143)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 604h7v18h-7ZM214 604h7v18h-7Z"/><path clip-path="url(#d144)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 604h7v18h-7ZM242 604h7v18h-7Z"/><path clip-path="url(#d145)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 604h7v18h-7ZM271 604h7v18h-7Z"/><path clip-path="url(#d146)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M298 604h8v18h-8ZM299 604h8v18h-8Z"/><path clip-path="url(#d147)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M327 604h7v18h-7ZM328 604h7v18h-7Z"/><path clip-path="url(#d148)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 622h7v18h-7ZM214 622h7v18h-7Z"/><path clip-path="url(#d149)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 622h7v18h-7ZM242 622h7v18h-7Z"/><path clip-path="url(#d150)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 622h7v18h-7ZM271 622h7v18h-7Z"/><path clip-path="url(#d151)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M298 622h8v18h-8ZM299 622h8v18h-8Z"/><path clip-path="url(#d152)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M327 622h7v18h-7ZM328 622h7v18h-7Z"/><path clip-path="url(#d153)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M213 640h7v18h-7ZM214 640h7v18h-7Z"/><path clip-path="url(#d154)" fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M241 640h7v18h-7ZM242 640h7v18h-7Z"/><path clip-path="url(#d155)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M270 640h7v18h-7ZM271 640h7v18h-7Z"/><path clip-path="url(#d156)" fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M298 640h8v18h-8ZM299 640h8v18h-8Z"/><text class="t18" x="241.25" y="203" textLength="50.047" lengthAdjust="spacing">Private</text><text class="t19" x="298.453" y="203" textLength="35.75" lengthAdjust="spacing">items</text><text class="t20" x="334.203" y="203" textLength="14.297" lengthAdjust="spacing">()</text><text class="t18" x="355.656" y="203" textLength="14.297" lengthAdjust="spacing">As</text><text class="t21" x="377.109" y="203" textLength="64.328" lengthAdjust="spacing">StockItem</text><text class="t18" x="241.25" y="221" textLength="50.047" lengthAdjust="spacing">Private</text><text class="t19" x="298.453" y="221" textLength="35.75" lengthAdjust="spacing">count</text><text class="t18" x="341.359" y="221" textLength="14.297" lengthAdjust="spacing">As</text><text class="t22" x="362.813" y="221" textLength="28.594" lengthAdjust="spacing">Long</text><text class="t18" x="241.25" y="257" textLength="42.891" lengthAdjust="spacing">Public</text><text class="t18" x="291.297" y="257" textLength="21.453" lengthAdjust="spacing">Sub</text><text class="t23" x="319.906" y="257" textLength="21.453" lengthAdjust="spacing">Add</text><text class="t20" x="341.359" y="257">(</text><text class="t18" x="348.516" y="257" textLength="35.75" lengthAdjust="spacing">ByVal</text><text class="t24" x="391.422" y="257" textLength="28.594" lengthAdjust="spacing">name</text><text class="t18" x="427.172" y="257" textLength="14.297" lengthAdjust="spacing">As</text><text class="t22" x="448.625" y="257" textLength="42.891" lengthAdjust="spacing">String</text><text class="t20" x="491.516" y="257">,</text><text class="t18" x="505.828" y="257" textLength="35.75" lengthAdjust="spacing">ByVal</text><text class="t24" x="548.734" y="257" textLength="57.188" lengthAdjust="spacing">quantity</text><text class="t18" x="613.078" y="257" textLength="14.297" lengthAdjust="spacing">As</text><text class="t22" x="634.531" y="257" textLength="28.594" lengthAdjust="spacing">Long</text><text class="t20" x="663.125" y="257">,</text><text class="t18" x="677.438" y="257" textLength="35.75" lengthAdjust="spacing">ByVal</text><text class="t24" x="720.344" y="257" textLength="35.75" lengthAdjust="spacing">price</text><text class="t18" x="763.25" y="257" textLength="14.297" lengthAdjust="spacing">As</text><text class="t22" x="784.703" y="257" textLength="42.891" lengthAdjust="spacing">Double</text><text class="t20" x="827.594" y="257">)</text><text class="t18" x="269.844" y="275" textLength="35.75" lengthAdjust="spacing">ReDim</text><text class="t18" x="312.75" y="275" textLength="57.188" lengthAdjust="spacing">Preserve</text><text class="t19" x="377.094" y="275" textLength="35.75" lengthAdjust="spacing">items</text><text class="t20" x="412.844" y="275">(</text><text class="t19" x="420" y="275" textLength="35.75" lengthAdjust="spacing">count</text><text class="t20" x="455.75" y="275">)</text><text class="t18" x="269.844" y="293" textLength="28.594" lengthAdjust="spacing">With</text><text class="t19" x="305.594" y="293" textLength="35.75" lengthAdjust="spacing">items</text><text class="t20" x="341.344" y="293">(</text><text class="t19" x="348.5" y="293" textLength="35.75" lengthAdjust="spacing">count</text><text class="t20" x="384.25" y="293">)</text><text class="t25" x="212.656" y="311" textLength="92.922" lengthAdjust="spacing">            .</text><text class="t19" x="305.578" y="311" textLength="28.594" lengthAdjust="spacing">Name</text><text class="t20" x="341.328" y="311">=</text><text class="t26" x="355.641" y="311" textLength="28.594" lengthAdjust="spacing">name</text><text class="t25" x="212.656" y="329" textLength="92.922" lengthAdjust="spacing">            .</text><text class="t19" x="305.578" y="329" textLength="57.188" lengthAdjust="spacing">Quantity</text><text class="t20" x="369.922" y="329">=</text><text class="t24" x="384.234" y="329" textLength="57.188" lengthAdjust="spacing">quantity</text><text class="t25" x="212.656" y="347" textLength="92.922" lengthAdjust="spacing">            .</text><text class="t19" x="305.578" y="347" textLength="35.75" lengthAdjust="spacing">Price</text><text class="t20" x="348.484" y="347">=</text><text class="t24" x="362.797" y="347" textLength="35.75" lengthAdjust="spacing">price</text><text class="t18" x="269.844" y="365" textLength="21.453" lengthAdjust="spacing">End</text><text class="t18" x="298.453" y="365" textLength="28.594" lengthAdjust="spacing">With</text><text class="t19" x="269.844" y="383" textLength="35.75" lengthAdjust="spacing">count</text><text class="t20" x="312.75" y="383">=</text><text class="t19" x="327.063" y="383" textLength="35.75" lengthAdjust="spacing">count</text><text class="t20" x="369.969" y="383">+</text><text class="t27" x="384.281" y="383">1</text><text class="t18" x="241.25" y="401" textLength="21.453" lengthAdjust="spacing">End</text><text class="t18" x="269.859" y="401" textLength="21.453" lengthAdjust="spacing">Sub</text><text class="t18" x="241.25" y="437" textLength="42.891" lengthAdjust="spacing">Public</text><text class="t18" x="291.297" y="437" textLength="57.188" lengthAdjust="spacing">Function</text><text class="t23" x="355.641" y="437" textLength="35.75" lengthAdjust="spacing">Total</text><text class="t20" x="391.391" y="437">(</text><text class="t18" x="398.547" y="437" textLength="35.75" lengthAdjust="spacing">ByVal</text><text class="t24" x="441.453" y="437" textLength="50.047" lengthAdjust="spacing">taxRate</text><text class="t18" x="498.656" y="437" textLength="14.297" lengthAdjust="spacing">As</text><text class="t22" x="520.109" y="437" textLength="42.891" lengthAdjust="spacing">Double</text><text class="t20" x="563" y="437">)</text><text class="t18" x="577.313" y="437" textLength="14.297" lengthAdjust="spacing">As</text><text class="t22" x="598.766" y="437" textLength="42.891" lengthAdjust="spacing">Double</text><text class="t18" x="269.844" y="455" textLength="21.453" lengthAdjust="spacing">Dim</text><text class="t26" x="298.453" y="455">i</text><text class="t18" x="312.766" y="455" textLength="14.297" lengthAdjust="spacing">As</text><text class="t22" x="334.219" y="455" textLength="28.594" lengthAdjust="spacing">Long</text><text class="t18" x="269.844" y="473" textLength="21.453" lengthAdjust="spacing">Dim</text><text class="t26" x="298.453" y="473" textLength="57.188" lengthAdjust="spacing">subtotal</text><text class="t18" x="269.844" y="491" textLength="21.453" lengthAdjust="spacing">Dim</text><text class="t26" x="298.453" y="491" textLength="28.594" lengthAdjust="spacing">note</text><text class="t18" x="269.844" y="509" textLength="21.453" lengthAdjust="spacing">Dim</text><text class="t26" x="298.453" y="509" textLength="35.75" lengthAdjust="spacing">price</text><text class="t18" x="341.359" y="509" textLength="14.297" lengthAdjust="spacing">As</text><text class="t22" x="362.813" y="509" textLength="42.891" lengthAdjust="spacing">Double</text><text class="t18" x="269.844" y="527" textLength="21.453" lengthAdjust="spacing">For</text><text class="t26" x="298.453" y="527">i</text><text class="t20" x="312.766" y="527">=</text><text class="t27" x="327.078" y="527">0</text><text class="t18" x="341.391" y="527" textLength="14.297" lengthAdjust="spacing">To</text><text class="t19" x="362.844" y="527" textLength="35.75" lengthAdjust="spacing">count</text><text class="t20" x="405.75" y="527">-</text><text class="t27" x="420.063" y="527">1</text><text class="t18" x="298.438" y="545" textLength="14.297" lengthAdjust="spacing">If</text><text class="t19" x="319.891" y="545" textLength="35.75" lengthAdjust="spacing">items</text><text class="t20" x="355.641" y="545">(</text><text class="t26" x="362.797" y="545">i</text><text class="t20" x="369.953" y="545">)</text><text class="t25" x="377.109" y="545">.</text><text class="t19" x="384.266" y="545" textLength="57.188" lengthAdjust="spacing">Quantity</text><text class="t20" x="448.609" y="545">></text><text class="t27" x="462.922" y="545">0</text><text class="t18" x="477.234" y="545" textLength="28.594" lengthAdjust="spacing">Then</text><text class="t26" x="327.016" y="563" textLength="35.75" lengthAdjust="spacing">price</text><text class="t20" x="369.922" y="563">=</text><text class="t28" x="384.234" y="563" textLength="35.75" lengthAdjust="spacing">Round</text><text class="t20" x="419.984" y="563">(</text><text class="t19" x="427.141" y="563" textLength="35.75" lengthAdjust="spacing">items</text><text class="t20" x="462.891" y="563">(</text><text class="t26" x="470.047" y="563">i</text><text class="t20" x="477.203" y="563">)</text><text class="t25" x="484.359" y="563">.</text><text class="t19" x="491.516" y="563" textLength="35.75" lengthAdjust="spacing">Price</text><text class="t20" x="534.422" y="563">*</text><text class="t20" x="548.734" y="563">(</text><text class="t27" x="555.891" y="563">1</text><text class="t20" x="570.203" y="563">+</text><text class="t24" x="584.516" y="563" textLength="50.047" lengthAdjust="spacing">taxRate</text><text class="t20" x="634.563" y="563" textLength="14.297" lengthAdjust="spacing">),</text><text class="t27" x="656.016" y="563">2</text><text class="t20" x="663.172" y="563">)</text><text class="t26" x="327.016" y="581" textLength="57.188" lengthAdjust="spacing">subtotal</text><text class="t20" x="391.359" y="581">=</text><text class="t26" x="405.672" y="581" textLength="57.188" lengthAdjust="spacing">subtotal</text><text class="t20" x="470.016" y="581">+</text><text class="t19" x="484.328" y="581" textLength="35.75" lengthAdjust="spacing">items</text><text class="t20" x="520.078" y="581">(</text><text class="t26" x="527.234" y="581">i</text><text class="t20" x="534.391" y="581">)</text><text class="t25" x="541.547" y="581">.</text><text class="t19" x="548.703" y="581" textLength="57.188" lengthAdjust="spacing">Quantity</text><text class="t20" x="613.047" y="581">*</text><text class="t26" x="627.359" y="581" textLength="35.75" lengthAdjust="spacing">price</text><text class="t18" x="327.016" y="599" textLength="14.297" lengthAdjust="spacing">If</text><text class="t19" x="348.469" y="599" textLength="35.75" lengthAdjust="spacing">items</text><text class="t20" x="384.219" y="599">(</text><text class="t26" x="391.375" y="599">i</text><text class="t20" x="398.531" y="599">)</text><text class="t25" x="405.688" y="599">.</text><text class="t19" x="412.844" y="599" textLength="57.188" lengthAdjust="spacing">Quantity</text><text class="t20" x="477.188" y="599">></text><text class="t27" x="491.5" y="599" textLength="21.453" lengthAdjust="spacing">100</text><text class="t18" x="520.109" y="599" textLength="28.594" lengthAdjust="spacing">Then</text><text class="t26" x="355.609" y="617" textLength="28.594" lengthAdjust="spacing">note</text><text class="t20" x="391.359" y="617">=</text><text class="t29" x="405.672" y="617" textLength="146.281" lengthAdjust="spacing">"Grüße 👋 こんにちは"</text><text class="t18" x="355.609" y="635" textLength="35.75" lengthAdjust="spacing">Debug</text><text class="t25" x="391.359" y="635">.</text><text class="t18" x="398.516" y="635" textLength="35.75" lengthAdjust="spacing">Print</text><text class="t26" x="441.422" y="635" textLength="28.594" lengthAdjust="spacing">note</text><text class="t20" x="477.172" y="635">&</text><text class="t30" x="491.484" y="635" textLength="28.594" lengthAdjust="spacing">": "</text><text class="t20" x="527.234" y="635">&</text><text class="t19" x="541.547" y="635" textLength="35.75" lengthAdjust="spacing">items</text><text class="t20" x="577.297" y="635">(</text><text class="t26" x="584.453" y="635">i</text><text class="t20" x="591.609" y="635">)</text><text class="t25" x="598.766" y="635">.</text><text class="t19" x="605.922" y="635" textLength="28.594" lengthAdjust="spacing">Name</text><text class="t18" x="327.016" y="653" textLength="21.453" lengthAdjust="spacing">End</text><text class="t18" x="355.625" y="653" textLength="14.297" lengthAdjust="spacing">If</text><text class="t18" x="212.656" y="167" textLength="35.75" lengthAdjust="spacing">Class</text><text class="t31" x="255.563" y="167" textLength="64.328" lengthAdjust="spacing">Inventory</text><rect x="993" y="154" width="17" height="491" fill="rgba(190, 190, 190, 0.17)"/><text class="t32" x="995.156" y="168"></text><text class="t32" x="995.156" y="642"></text></g><g clip-path="url(#d88)"><use href="#d157" transform="translate(891 154) scale(103 491)"/><use href="#d157" transform="translate(891 154) scale(103 491)"/></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M0 646h364v207h-364ZM1 646h362v206h-362Z"/><g clip-path="url(#d158)"><rect x="1" y="647" width="362" height="27" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M1 646h362v28h-362ZM1 647h362v27h-362Z"/></g><g clip-path="url(#d159)"><text class="t8" x="26" y="664.516" textLength="103.391" lengthAdjust="spacing">DEBUG CONSOLE</text></g><g opacity="0.4"><g clip-path="url(#d159)"><path d="M282 652H292A3 3 0 0 1 295 655V665A3 3 0 0 1 292 668H282A3 3 0 0 1 279 665V655A3 3 0 0 1 282 652Z" fill="rgba(255, 255, 255, 0.2)"/><g clip-path="url(#d161)"><use href="#d162" transform="translate(279 637) scale(16 16)"/><use href="#d162" transform="translate(279 653) scale(16 16)"/></g></g></g><g><g filter="url(#d76)"><g opacity="0.4"><g clip-path="url(#d159)"><text class="t10" x="300.281" y="668.516"></text></g></g></g><g opacity="0.4"><g clip-path="url(#d159)"><text class="t10" x="300.281" y="668.516"></text></g></g></g><g><g filter="url(#d76)"><g opacity="0.4"><g clip-path="url(#d159)"><text class="t10" x="321.281" y="668.516"></text></g></g></g><g opacity="0.4"><g clip-path="url(#d159)"><text class="t10" x="321.281" y="668.516"></text></g></g></g><g clip-path="url(#d159)"><text class="t11" x="343.281" y="668.516"></text></g><g clip-path="url(#d158)"><rect x="1" y="674" width="362" height="178" fill="rgb(43, 43, 43)"/></g><g clip-path="url(#d164)"><rect x="1" y="831" width="362" height="21" fill="rgba(229, 230, 232, 0.15)"/><path fill-rule="evenodd" fill="rgb(128, 128, 128)" d="M1 830h362v22h-362ZM1 831h362v21h-362Z"/></g><g clip-path="url(#d165)"><rect x="345" y="674" width="18" height="155" fill="rgb(58, 58, 58)"/><path fill-rule="evenodd" fill="rgb(64, 64, 64)" d="M344 674h19v155h-19ZM345 674h18v155h-18Z"/><g clip-path="url(#d167)"><use href="#d166" transform="translate(345 817) scale(16 16)"/></g><g transform="matrix(-1 0 0 -1 706.563 1364.031)"><g clip-path="url(#d168)"><use href="#d166" transform="translate(345.281 678.016) scale(16 16)"/></g></g></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M364 646h323v207h-323ZM365 646h321v206h-321Z"/><g clip-path="url(#d169)"><rect x="365" y="647" width="321" height="27" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M365 646h321v28h-321ZM365 647h321v27h-321Z"/></g><g clip-path="url(#d170)"><text class="t8" x="390.281" y="664.516" textLength="83.75" lengthAdjust="spacing">DIAGNOSTICS</text><g clip-path="url(#d171)"><use href="#d81" transform="translate(370 653) scale(13 13)"/></g><path d="M503 646H539L539 646V672L539 672H503A4 4 0 0 1 499 668V650A4 4 0 0 1 503 646Z" fill="rgba(206, 91, 91, 0.5)"/><text class="t33" x="505.641" y="666.359"></text><text class="t34" x="524.953" y="664.516">0</text><rect x="539" y="646" width="41" height="26" fill="rgba(157, 160, 40, 0.7)"/><text class="t33" x="546.172" y="666.359"></text><text class="t34" x="565.484" y="664.516">4</text><text class="t33" x="586.984" y="666.359"></text><text class="t34" x="606.297" y="664.516">1</text><text class="t33" x="625.531" y="666.359"></text><text class="t34" x="644.844" y="664.516">1</text><text class="t11" x="666.078" y="668.516"></text></g><g clip-path="url(#d169)"><rect x="365" y="674" width="321" height="178" fill="rgb(43, 43, 43)"/></g><g clip-path="url(#d172)"><rect x="368" y="677" width="298" height="23" fill="rgba(200, 100, 100, 0.2)"/><g clip-path="url(#d174)"><use href="#d173" transform="translate(371 682) scale(12 12)"/></g><text class="t35" x="389.281" y="694.016" textLength="70.781" lengthAdjust="spacing">Helpers.twin</text><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.11)" d="M365 703h304v21h-304ZM365 703h304v20h-304Z"/><rect x="368" y="727" width="298" height="23" fill="rgba(200, 100, 100, 0.2)"/><g clip-path="url(#d175)"><use href="#d173" transform="translate(371 732) scale(12 12)"/></g><text class="t35" x="389.281" y="744.016" textLength="81.156" lengthAdjust="spacing">Inventory.twin</text><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.11)" d="M365 753h304v21h-304ZM365 753h304v20h-304Z"/><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.11)" d="M365 774h304v21h-304ZM365 774h304v20h-304Z"/><rect x="368" y="798" width="298" height="23" fill="rgba(200, 100, 100, 0.2)"/><g clip-path="url(#d176)"><use href="#d173" transform="translate(371 803) scale(12 12)"/></g><text class="t35" x="389.281" y="815.016" textLength="100.172" lengthAdjust="spacing">MainModule.twin</text><path fill-rule="evenodd" fill="rgba(128, 128, 128, 0.11)" d="M365 824h304v21h-304ZM365 824h304v20h-304Z"/></g><g clip-path="url(#d177)"><text class="t36" x="380.281" y="722.016"></text><text class="t37" x="632" y="717.016" textLength="33.078" lengthAdjust="spacing">[16,15]</text></g><g clip-path="url(#d178)"><text class="t38" x="401.281" y="718.016" textLength="40.188" lengthAdjust="spacing">TB0003</text><text class="t39" x="446.469" y="718.016" textLength="174.141" lengthAdjust="spacing">Datatype has not been explicitly</text><text class="t39" x="620.609" y="718.016">…</text></g><g clip-path="url(#d179)"><text class="t36" x="380.281" y="772.016"></text><text class="t37" x="632" y="767.016" textLength="33.078" lengthAdjust="spacing">[18,13]</text></g><g clip-path="url(#d180)"><text class="t38" x="401.281" y="768.016" textLength="40.188" lengthAdjust="spacing">TB0003</text><text class="t39" x="446.469" y="768.016" textLength="174.141" lengthAdjust="spacing">Datatype has not been explicitly</text><text class="t39" x="620.609" y="768.016">…</text></g><g clip-path="url(#d181)"><text class="t36" x="380.281" y="793.016"></text><text class="t37" x="632" y="788.016" textLength="33.078" lengthAdjust="spacing">[19,13]</text></g><g clip-path="url(#d182)"><text class="t38" x="401.281" y="789.016" textLength="40.188" lengthAdjust="spacing">TB0003</text><text class="t39" x="446.469" y="789.016" textLength="174.141" lengthAdjust="spacing">Datatype has not been explicitly</text><text class="t39" x="620.609" y="789.016">…</text></g><g clip-path="url(#d183)"><text class="t36" x="380.281" y="843.016"></text><text class="t37" x="637.984" y="838.016" textLength="27.094" lengthAdjust="spacing">[6,13]</text></g><g clip-path="url(#d184)"><text class="t38" x="401.281" y="839.016" textLength="40.188" lengthAdjust="spacing">TB0003</text><text class="t39" x="446.469" y="839.016" textLength="177.516" lengthAdjust="spacing">Datatype has not been explicitly </text><text class="t39" x="623.984" y="839.016">…</text></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M687 646h162v207h-162ZM688 646h160v206h-160Z"/><g clip-path="url(#d185)"><rect x="688" y="647" width="160" height="27" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M688 646h160v28h-160ZM688 647h160v27h-160Z"/></g><g clip-path="url(#d186)"><text class="t8" x="713.078" y="664.516" textLength="70.953" lengthAdjust="spacing">CALL STACK</text><g clip-path="url(#d187)"><use href="#d81" transform="translate(693 653) scale(13 13)"/></g><text class="t11" x="828.203" y="668.516"></text></g><g clip-path="url(#d185)"><rect x="688" y="674" width="160" height="178" fill="rgb(43, 43, 43)"/></g><g clip-path="url(#d188)"><path fill-rule="evenodd" fill="rgba(100, 100, 100, 0.3)" d="M688 674h160v39h-160ZM688 674h160v38h-160Z"/><g clip-path="url(#d189)"><use href="#d173" transform="translate(694 678) scale(10 10)"/></g></g><g clip-path="url(#d190)"><text class="t35" x="711.078" y="689.016" textLength="112.031" lengthAdjust="spacing">COMPILER [Win32] </text><text class="t35" x="711.078" y="706.016" textLength="60.922" lengthAdjust="spacing">v0.15.1034</text></g><g clip-path="url(#d191)"><path fill-rule="evenodd" fill="rgba(100, 100, 100, 0.3)" d="M688 713h160v22h-160ZM688 713h160v21h-160Z"/><g clip-path="url(#d192)"><use href="#d173" transform="translate(694 717) scale(10 10)"/></g></g><g clip-path="url(#d193)"><text class="t35" x="711.078" y="728.016" textLength="123.219" lengthAdjust="spacing">MAIN_THREAD [IDLE]</text></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M849 646h162v207h-162ZM850 646h160v206h-160Z"/><g clip-path="url(#d194)"><rect x="850" y="647" width="160" height="27" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M850 646h160v28h-160ZM850 647h160v27h-160Z"/></g><g clip-path="url(#d195)"><text class="t8" x="875.203" y="664.516" textLength="64.984" lengthAdjust="spacing">VARIABLES</text><g clip-path="url(#d196)"><use href="#d81" transform="translate(855 653) scale(13 13)"/></g><text class="t11" x="990.328" y="668.516"></text></g><g clip-path="url(#d194)"><rect x="850" y="674" width="160" height="178" fill="rgb(43, 43, 43)"/></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M1011 61h269v479h-269ZM1012 61h267v478h-267Z"/><g clip-path="url(#d197)"><rect x="1012" y="62" width="267" height="27" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M1012 61h267v28h-267ZM1012 62h267v27h-267Z"/></g><g clip-path="url(#d198)"><text class="t8" x="1037.328" y="79.5" textLength="117.234" lengthAdjust="spacing">PROJECT EXPLORER</text><g clip-path="url(#d199)"><use href="#d81" transform="translate(1017 68) scale(13 13)"/></g></g><g><g filter="url(#d76)"><g opacity="0.4"><g clip-path="url(#d198)"><text class="t40" x="1195" y="83.5"></text></g></g></g><g opacity="0.4"><g clip-path="url(#d198)"><text class="t40" x="1195" y="83.5"></text></g></g></g><g><g filter="url(#d76)"><g opacity="0.4"><g clip-path="url(#d198)"><text class="t40" x="1216" y="83.5"></text></g></g></g><g opacity="0.4"><g clip-path="url(#d198)"><text class="t40" x="1216" y="83.5"></text></g></g></g><g clip-path="url(#d197)"><rect x="1012" y="89" width="267" height="450" fill="rgb(43, 43, 43)"/></g><g clip-path="url(#d201)"><g clip-path="url(#d200)"><use href="#d173" transform="translate(1018 93) scale(10 10)"/></g><use href="#d202" transform="translate(1035 93) scale(15.918 11)"/></g><g clip-path="url(#d203)"><text class="t41" x="1055.328" y="104" textLength="73.313" lengthAdjust="spacing">FeatureTour</text></g><g clip-path="url(#d206)"><g clip-path="url(#d205)"><use href="#d204" transform="translate(1038 114) scale(10 10)"/></g><use href="#d202" transform="translate(1055 114) scale(15.918 11)"/></g><g clip-path="url(#d207)"><text class="t35" x="1075.328" y="125" textLength="128.156" lengthAdjust="spacing">ImportedTypeLibraries</text></g><g clip-path="url(#d209)"><g clip-path="url(#d208)"><use href="#d204" transform="translate(1038 135) scale(10 10)"/></g><use href="#d202" transform="translate(1055 135) scale(15.918 11)"/></g><g clip-path="url(#d210)"><text class="t35" x="1075.328" y="146" textLength="80.703" lengthAdjust="spacing">Miscellaneous</text></g><g clip-path="url(#d212)"><g clip-path="url(#d211)"><use href="#d204" transform="translate(1038 156) scale(10 10)"/></g><use href="#d202" transform="translate(1055 156) scale(15.918 11)"/></g><g clip-path="url(#d213)"><text class="t35" x="1075.328" y="167" textLength="52.516" lengthAdjust="spacing">Packages</text></g><g clip-path="url(#d215)"><g clip-path="url(#d214)"><use href="#d204" transform="translate(1038 177) scale(10 10)"/></g><use href="#d202" transform="translate(1055 177) scale(15.918 11)"/></g><g clip-path="url(#d216)"><text class="t35" x="1075.328" y="188" textLength="62.063" lengthAdjust="spacing">References</text></g><g clip-path="url(#d218)"><g clip-path="url(#d217)"><use href="#d204" transform="translate(1038 198) scale(10 10)"/></g><use href="#d202" transform="translate(1055 198) scale(15.918 11)"/></g><g clip-path="url(#d219)"><text class="t35" x="1075.328" y="209" textLength="57.531" lengthAdjust="spacing">Resources</text></g><g clip-path="url(#d221)"><g clip-path="url(#d220)"><use href="#d173" transform="translate(1038 219) scale(10 10)"/></g><use href="#d202" transform="translate(1055 219) scale(15.918 11)"/></g><g clip-path="url(#d222)"><text class="t41" x="1075.328" y="230" textLength="47.219" lengthAdjust="spacing">Sources</text></g><g clip-path="url(#d223)"><use href="#d87" transform="translate(1075 238) scale(14.705 16)"/></g><g clip-path="url(#d224)"><text class="t35" x="1095.328" y="251" textLength="39.938" lengthAdjust="spacing">Ev.twin</text></g><g clip-path="url(#d225)"><use href="#d87" transform="translate(1075 259) scale(14.705 16)"/></g><g clip-path="url(#d226)"><text class="t41" x="1095.328" y="272" textLength="77.266" lengthAdjust="spacing">Helpers.twin</text></g><g clip-path="url(#d227)"><rect x="1012" y="278" width="267" height="21" fill="rgb(70, 70, 70)"/><use href="#d87" transform="translate(1075 280) scale(14.705 16)"/></g><g clip-path="url(#d228)"><text class="t41" x="1095.328" y="293" textLength="89.25" lengthAdjust="spacing">Inventory.twin</text></g><g clip-path="url(#d229)"><use href="#d87" transform="translate(1075 301) scale(14.705 16)"/></g><g clip-path="url(#d230)"><text class="t41" x="1095.328" y="314" textLength="108.547" lengthAdjust="spacing">MainModule.twin</text></g><g clip-path="url(#d231)"><use href="#d87" transform="translate(1075 322) scale(14.705 16)"/></g><g clip-path="url(#d232)"><text class="t35" x="1095.328" y="335" textLength="59.469" lengthAdjust="spacing">Types.twin</text></g><g clip-path="url(#d233)"><use href="#d87" transform="translate(1075 343) scale(14.705 16)"/></g><g clip-path="url(#d234)"><text class="t35" x="1095.328" y="356" textLength="74.469" lengthAdjust="spacing">Watcher.twin</text></g><path fill-rule="evenodd" fill="rgb(0, 0, 0)" d="M1011 540h269v313h-269ZM1012 540h267v312h-267Z"/><g clip-path="url(#d235)"><rect x="1012" y="541" width="267" height="27" fill="rgb(75, 67, 67)"/><path fill-rule="evenodd" fill="rgb(100, 98, 98)" d="M1012 540h267v28h-267ZM1012 541h267v27h-267Z"/></g><g clip-path="url(#d236)"><text class="t8" x="1037.328" y="558.047" textLength="72.281" lengthAdjust="spacing">PROPERTIES</text><g clip-path="url(#d237)"><use href="#d81" transform="translate(1017 546) scale(13 13)"/></g></g><g clip-path="url(#d235)"><rect x="1012" y="568" width="267" height="284" fill="rgb(43, 43, 43)"/></g><g clip-path="url(#d89)"><use href="#d238" transform="translate(994 171) scale(16 457)"/><path d="M999 171H1003A2 2 0 0 1 1005 173V320A2 2 0 0 1 1003 322H999A2 2 0 0 1 997 320V173A2 2 0 0 1 999 171Z" fill="rgba(120, 110, 110, 0.8)"/></g><path d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11Z" fill="rgba(178, 177, 177, 0.3)" filter="url(#d239)"/><path d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11ZM62 12H1218A2 2 0 0 1 1220 14V868L1220 868H60L60 868V14A2 2 0 0 1 62 12Z" clip-path="url(#d240)"/><path fill-rule="evenodd" fill="rgb(147, 136, 136)" d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11ZM62 12H1218A2 2 0 0 1 1220 14V868L1220 868H60L60 868V14A2 2 0 0 1 62 12Z" clip-path="url(#d241)"/><path fill-rule="evenodd" fill="rgb(147, 136, 136)" d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11ZM62 12H1218A2 2 0 0 1 1220 14V868L1220 868H60L60 868V14A2 2 0 0 1 62 12Z" clip-path="url(#d242)"/><path fill-rule="evenodd" fill="rgb(112, 112, 112)" d="M62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11ZM62 12H1218A2 2 0 0 1 1220 14V868L1220 868H60L60 868V14A2 2 0 0 1 62 12Z" clip-path="url(#d243)"/><path fill-rule="evenodd" fill="rgba(255, 255, 255, 0.06)" d="M62 8H1218A6 6 0 0 1 1224 14V872L1224 872H56L56 872V14A6 6 0 0 1 62 8ZM62 11H1218A3 3 0 0 1 1221 14V869L1221 869H59L59 869V14A3 3 0 0 1 62 11Z"/><path d="M63 12H1217A3 3 0 0 1 1220 15V39L1220 39H60L60 39V15A3 3 0 0 1 63 12Z" fill="rgb(68, 58, 58)"/><text class="t34" x="70" y="31" textLength="89.828" lengthAdjust="spacing">Object Browser</text><text class="t15" x="1198" y="33"></text><path d="M60 819H1220L1220 819V860A8 8 0 0 1 1212 868H68A8 8 0 0 1 60 860V819L60 819Z" fill="rgb(246, 246, 246)"/><path fill-rule="evenodd" fill="rgb(128, 128, 128)" d="M60 819H1220L1220 819V860A8 8 0 0 1 1212 868H68A8 8 0 0 1 60 860V819L60 819ZM60 820H1220L1220 820V860A8 8 0 0 1 1212 868H68A8 8 0 0 1 60 860V820L60 820Z"/><rect x="991" y="832" width="114" height="28" fill="rgba(124, 124, 124, 0.47)" filter="url(#d244)"/><rect x="990" y="831" width="112" height="26" fill="rgb(251, 253, 255)"/><polygon points="989 830 1103 830 1102 831 990 831" fill="rgb(155, 155, 155)"/><polygon points="1103 830 1103 858 1102 857 1102 831" fill="rgb(94, 94, 94)"/><polygon points="1103 858 989 858 990 857 1102 857" fill="rgb(94, 94, 94)"/><polygon points="989 858 989 830 990 831 990 857" fill="rgb(155, 155, 155)"/><text class="t4" x="1000.141" y="848.5" textLength="91.859" lengthAdjust="spacing">Go to Definition</text><rect x="1125" y="832" width="80" height="28" fill="rgba(124, 124, 124, 0.47)" filter="url(#d245)"/><rect x="1124" y="831" width="78" height="26" fill="rgb(251, 253, 255)"/><polygon points="1123 830 1203 830 1202 831 1124 831" fill="rgb(155, 155, 155)"/><polygon points="1203 830 1203 858 1202 857 1202 831" fill="rgb(94, 94, 94)"/><polygon points="1203 858 1123 858 1124 857 1202 857" fill="rgb(94, 94, 94)"/><polygon points="1123 858 1123 830 1124 831 1124 857" fill="rgb(155, 155, 155)"/><text class="t4" x="1147.422" y="848.5" textLength="31.141" lengthAdjust="spacing">Close</text><rect x="60" y="39" width="1160" height="780" fill="rgb(237, 240, 245)"/><g clip-path="url(#d246)"><text class="t42" x="72" y="62" textLength="83.984" lengthAdjust="spacing">Project / Library</text><text class="t42" x="316" y="62" textLength="174.938" lengthAdjust="spacing">Search components and members</text><g clip-path="url(#d249)"><use href="#d248" transform="translate(980 40)"/><use href="#d248" transform="translate(1010 40)"/><use href="#d248" transform="translate(1040 40)"/><use href="#d248" transform="translate(980 69)"/><use href="#d248" transform="translate(1010 69)"/><use href="#d248" transform="translate(1040 69)"/><use href="#d248" transform="translate(980 98)"/><use href="#d248" transform="translate(1010 98)"/><use href="#d248" transform="translate(1040 98)"/></g><path fill-rule="evenodd" fill="rgb(170, 182, 197)" d="M1012 68H1038A3 3 0 0 1 1041 71V96A3 3 0 0 1 1038 99H1012A3 3 0 0 1 1009 96V71A3 3 0 0 1 1012 68ZM1012 69H1038A2 2 0 0 1 1040 71V96A2 2 0 0 1 1038 98H1012A2 2 0 0 1 1010 96V71A2 2 0 0 1 1012 69Z"/><text class="t43" x="72" y="125.5" textLength="71.563" lengthAdjust="spacing">Components</text><text class="t44" x="541.563" y="125.5" textLength="38.438" lengthAdjust="spacing">9 items</text><text class="t43" x="654" y="125.5" textLength="53.031" lengthAdjust="spacing">Members</text><text class="t44" x="1109.563" y="125.5" textLength="38.438" lengthAdjust="spacing">5 items</text><text class="t43" x="72" y="583.891" textLength="64.734" lengthAdjust="spacing">Description</text><path d="M75 68H304A3 3 0 0 1 307 71V96A3 3 0 0 1 304 99H75A3 3 0 0 1 72 96V71A3 3 0 0 1 75 68Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(165, 177, 192)" d="M75 68H304A3 3 0 0 1 307 71V96A3 3 0 0 1 304 99H75A3 3 0 0 1 72 96V71A3 3 0 0 1 75 68ZM75 69H304A2 2 0 0 1 306 71V96A2 2 0 0 1 304 98H75A2 2 0 0 1 73 96V71A2 2 0 0 1 75 69Z"/><g clip-path="url(#d250)"><text class="t45" x="85" y="89" textLength="119.422" lengthAdjust="spacing">FeatureTour (project)</text></g><path d="M294 81L298 85L302 81" fill="none" stroke="rgb(22, 34, 51)" stroke-width="2"/><svg x="1016" y="75" width="18" height="18" viewBox="0 0 24 24" style="color:rgb(37, 50, 71);fill:none;stroke:rgb(37, 50, 71);stroke-width:1.9px;stroke-linecap:round;stroke-linejoin:round"><path d="M15 18l-6-6 6-6M9 12h11"/></svg><path d="M1089 68H1199A4 4 0 0 1 1203 72V95A4 4 0 0 1 1199 99H1089A4 4 0 0 1 1085 95V72A4 4 0 0 1 1089 68Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(170, 182, 197)" d="M1089 68H1199A4 4 0 0 1 1203 72V95A4 4 0 0 1 1199 99H1089A4 4 0 0 1 1085 95V72A4 4 0 0 1 1089 68ZM1089 69H1199A3 3 0 0 1 1202 72V95A3 3 0 0 1 1199 98H1089A3 3 0 0 1 1086 95V72A3 3 0 0 1 1089 69Z"/></g><g clip-path="url(#d251)"><rect x="1086" y="69" width="58" height="29" fill="rgb(43, 97, 167)"/><path fill-rule="evenodd" fill="rgb(170, 182, 197)" d="M1086 69h59v29h-59ZM1086 69h58v29h-58Z"/><text class="t46" x="1095.813" y="88.5" textLength="38.125" lengthAdjust="spacing">Browse</text><text class="t47" x="1154.938" y="88.5" textLength="37.063" lengthAdjust="spacing">Results</text></g><g clip-path="url(#d246)"><path d="M74 134H638A2 2 0 0 1 640 136V557A2 2 0 0 1 638 559H74A2 2 0 0 1 72 557V136A2 2 0 0 1 74 134Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(170, 184, 202)" d="M74 134H638A2 2 0 0 1 640 136V557A2 2 0 0 1 638 559H74A2 2 0 0 1 72 557V136A2 2 0 0 1 74 134ZM74 135H638A1 1 0 0 1 639 136V557A1 1 0 0 1 638 558H74A1 1 0 0 1 73 557V136A1 1 0 0 1 74 135Z"/><path d="M656 134H1206A2 2 0 0 1 1208 136V557A2 2 0 0 1 1206 559H656A2 2 0 0 1 654 557V136A2 2 0 0 1 656 134Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(170, 184, 202)" d="M656 134H1206A2 2 0 0 1 1208 136V557A2 2 0 0 1 1206 559H656A2 2 0 0 1 654 557V136A2 2 0 0 1 656 134ZM656 135H1206A1 1 0 0 1 1207 136V557A1 1 0 0 1 1206 558H656A1 1 0 0 1 655 557V136A1 1 0 0 1 656 135Z"/><path d="M319 68H997A3 3 0 0 1 1000 71V96A3 3 0 0 1 997 99H319A3 3 0 0 1 316 96V71A3 3 0 0 1 319 68Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(165, 177, 192)" d="M319 68H997A3 3 0 0 1 1000 71V96A3 3 0 0 1 997 99H319A3 3 0 0 1 316 96V71A3 3 0 0 1 319 68ZM319 69H997A2 2 0 0 1 999 71V96A2 2 0 0 1 997 98H319A2 2 0 0 1 317 96V71A2 2 0 0 1 319 69Z"/><g clip-path="url(#d252)"><text class="t48" x="325" y="89" textLength="127.297" lengthAdjust="spacing">Type a name to filter…</text></g><text class="t49" x="972.859" y="88.5" textLength="14.906" lengthAdjust="spacing">Aa</text></g><g opacity="0.44"><g clip-path="url(#d246)"><g clip-path="url(#d253)"><use href="#d248" transform="translate(1018 40)"/><use href="#d248" transform="translate(1048 40)"/><use href="#d248" transform="translate(1078 40)"/><use href="#d248" transform="translate(1018 69)"/><use href="#d248" transform="translate(1048 69)"/><use href="#d248" transform="translate(1078 69)"/><use href="#d248" transform="translate(1018 98)"/><use href="#d248" transform="translate(1048 98)"/><use href="#d248" transform="translate(1078 98)"/></g><path fill-rule="evenodd" fill="rgb(170, 182, 197)" d="M1050 68H1076A3 3 0 0 1 1079 71V96A3 3 0 0 1 1076 99H1050A3 3 0 0 1 1047 96V71A3 3 0 0 1 1050 68ZM1050 69H1076A2 2 0 0 1 1078 71V96A2 2 0 0 1 1076 98H1050A2 2 0 0 1 1048 96V71A2 2 0 0 1 1050 69Z"/><svg x="1054" y="75" width="18" height="18" viewBox="0 0 24 24" style="color:rgb(37, 50, 71);fill:none;stroke:rgb(37, 50, 71);stroke-width:1.9px;stroke-linecap:round;stroke-linejoin:round"><path d="M9 18l6-6-6-6M15 12H4"/></svg></g></g><g clip-path="url(#d246)"><svg x="592" y="112" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(102, 121, 147);fill:none;stroke:rgb(102, 121, 147);stroke-width:1.9px;stroke-linecap:round;stroke-linejoin:round"><path d="M3 6h12M3 11h9M3 16h6M18 5v14m-3-3 3 3 3-3"/></svg><svg x="619" y="112" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(102, 121, 147);fill:none;stroke:rgb(102, 121, 147);stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round"><path d="M4 5h16l-6.4 7.5v5.2L10.4 20v-7.5L4 5z"/></svg></g><g clip-path="url(#d254)"><path d="M83 141H96A2 2 0 0 1 98 143V155A2 2 0 0 1 96 157H83A2 2 0 0 1 81 155V143A2 2 0 0 1 83 141Z" fill="rgb(255, 240, 216)"/><path fill-rule="evenodd" fill="rgb(238, 208, 158)" d="M83 141H96A2 2 0 0 1 98 143V155A2 2 0 0 1 96 157H83A2 2 0 0 1 81 155V143A2 2 0 0 1 83 141ZM83 142H96A1 1 0 0 1 97 143V155A1 1 0 0 1 96 156H83A1 1 0 0 1 82 155V143A1 1 0 0 1 83 142Z"/><text class="t50" x="86.828" y="152.5">E</text></g><g clip-path="url(#d255)"><text class="t51" x="106" y="152.75" textLength="36.844" lengthAdjust="spacing">Colour</text></g><g clip-path="url(#d256)"><path d="M83 168H96A2 2 0 0 1 98 170V182A2 2 0 0 1 96 184H83A2 2 0 0 1 81 182V170A2 2 0 0 1 83 168Z" fill="rgb(220, 232, 252)"/><path fill-rule="evenodd" fill="rgb(150, 180, 220)" d="M83 168H96A2 2 0 0 1 98 170V182A2 2 0 0 1 96 184H83A2 2 0 0 1 81 182V170A2 2 0 0 1 83 168ZM83 169H96A1 1 0 0 1 97 170V182A1 1 0 0 1 96 183H83A1 1 0 0 1 82 182V170A1 1 0 0 1 83 169Z"/><text class="t52" x="86.375" y="179.5">C</text></g><g clip-path="url(#d257)"><text class="t51" x="106" y="179.75" textLength="12.313" lengthAdjust="spacing">Ev</text></g><g clip-path="url(#d258)"><path d="M83 195H96A2 2 0 0 1 98 197V209A2 2 0 0 1 96 211H83A2 2 0 0 1 81 209V197A2 2 0 0 1 83 195Z" fill="rgb(220, 232, 252)"/><path fill-rule="evenodd" fill="rgb(150, 180, 220)" d="M83 195H96A2 2 0 0 1 98 197V209A2 2 0 0 1 96 211H83A2 2 0 0 1 81 209V197A2 2 0 0 1 83 195ZM83 196H96A1 1 0 0 1 97 197V209A1 1 0 0 1 96 210H83A1 1 0 0 1 82 209V197A1 1 0 0 1 83 196Z"/><text class="t52" x="86.375" y="206.5">C</text></g><g clip-path="url(#d259)"><text class="t51" x="106" y="206.75" textLength="19.063" lengthAdjust="spacing">Ev2</text></g><g clip-path="url(#d260)"><path d="M83 222H96A2 2 0 0 1 98 224V236A2 2 0 0 1 96 238H83A2 2 0 0 1 81 236V224A2 2 0 0 1 83 222Z" fill="rgb(225, 243, 232)"/><path fill-rule="evenodd" fill="rgb(169, 208, 182)" d="M83 222H96A2 2 0 0 1 98 224V236A2 2 0 0 1 96 238H83A2 2 0 0 1 81 236V224A2 2 0 0 1 83 222ZM83 223H96A1 1 0 0 1 97 224V236A1 1 0 0 1 96 237H83A1 1 0 0 1 82 236V224A1 1 0 0 1 83 223Z"/><text class="t53" x="84.703" y="233.5">M</text></g><g clip-path="url(#d261)"><text class="t51" x="106" y="233.75" textLength="41.984" lengthAdjust="spacing">Helpers</text></g><g clip-path="url(#d262)"><rect x="73" y="243" width="566" height="27" fill="rgb(43, 97, 167)"/></g><g clip-path="url(#d263)"><path d="M83 249H96A2 2 0 0 1 98 251V263A2 2 0 0 1 96 265H83A2 2 0 0 1 81 263V251A2 2 0 0 1 83 249Z" fill="rgb(220, 232, 252)"/><path fill-rule="evenodd" fill="rgb(150, 180, 220)" d="M83 249H96A2 2 0 0 1 98 251V263A2 2 0 0 1 96 265H83A2 2 0 0 1 81 263V251A2 2 0 0 1 83 249ZM83 250H96A1 1 0 0 1 97 251V263A1 1 0 0 1 96 264H83A1 1 0 0 1 82 263V251A1 1 0 0 1 83 250Z"/><text class="t52" x="86.375" y="260.5">C</text></g><g clip-path="url(#d264)"><text class="t54" x="106" y="260.75" textLength="51.953" lengthAdjust="spacing">Inventory</text></g><g clip-path="url(#d265)"><path d="M83 276H96A2 2 0 0 1 98 278V290A2 2 0 0 1 96 292H83A2 2 0 0 1 81 290V278A2 2 0 0 1 83 276Z" fill="rgb(225, 243, 232)"/><path fill-rule="evenodd" fill="rgb(169, 208, 182)" d="M83 276H96A2 2 0 0 1 98 278V290A2 2 0 0 1 96 292H83A2 2 0 0 1 81 290V278A2 2 0 0 1 83 276ZM83 277H96A1 1 0 0 1 97 278V290A1 1 0 0 1 96 291H83A1 1 0 0 1 82 290V278A1 1 0 0 1 83 277Z"/><text class="t53" x="84.703" y="287.5">M</text></g><g clip-path="url(#d266)"><text class="t51" x="106" y="287.75" textLength="70.234" lengthAdjust="spacing">MainModule</text></g><g clip-path="url(#d267)"><path d="M83 303H96A2 2 0 0 1 98 305V317A2 2 0 0 1 96 319H83A2 2 0 0 1 81 317V305A2 2 0 0 1 83 303Z" fill="rgb(237, 229, 252)"/><path fill-rule="evenodd" fill="rgb(197, 172, 232)" d="M83 303H96A2 2 0 0 1 98 305V317A2 2 0 0 1 96 319H83A2 2 0 0 1 81 317V305A2 2 0 0 1 83 303ZM83 304H96A1 1 0 0 1 97 305V317A1 1 0 0 1 96 318H83A1 1 0 0 1 82 317V305A1 1 0 0 1 83 304Z"/><text class="t55" x="86.563" y="314.5">T</text></g><g clip-path="url(#d268)"><text class="t51" x="106" y="314.75" textLength="54.656" lengthAdjust="spacing">StockItem</text></g><g clip-path="url(#d269)"><path d="M83 330H96A2 2 0 0 1 98 332V344A2 2 0 0 1 96 346H83A2 2 0 0 1 81 344V332A2 2 0 0 1 83 330Z" fill="rgb(225, 243, 232)"/><path fill-rule="evenodd" fill="rgb(169, 208, 182)" d="M83 330H96A2 2 0 0 1 98 332V344A2 2 0 0 1 96 346H83A2 2 0 0 1 81 344V332A2 2 0 0 1 83 330ZM83 331H96A1 1 0 0 1 97 332V344A1 1 0 0 1 96 345H83A1 1 0 0 1 82 344V332A1 1 0 0 1 83 331Z"/><text class="t53" x="84.703" y="341.5">M</text></g><g clip-path="url(#d270)"><text class="t51" x="106" y="341.75" textLength="31.109" lengthAdjust="spacing">Types</text></g><g clip-path="url(#d271)"><path d="M83 357H96A2 2 0 0 1 98 359V371A2 2 0 0 1 96 373H83A2 2 0 0 1 81 371V359A2 2 0 0 1 83 357Z" fill="rgb(220, 232, 252)"/><path fill-rule="evenodd" fill="rgb(150, 180, 220)" d="M83 357H96A2 2 0 0 1 98 359V371A2 2 0 0 1 96 373H83A2 2 0 0 1 81 371V359A2 2 0 0 1 83 357ZM83 358H96A1 1 0 0 1 97 359V371A1 1 0 0 1 96 372H83A1 1 0 0 1 82 371V359A1 1 0 0 1 83 358Z"/><text class="t52" x="86.375" y="368.5">C</text></g><g clip-path="url(#d272)"><text class="t51" x="106" y="368.75" textLength="45.516" lengthAdjust="spacing">Watcher</text></g><g clip-path="url(#d246)"><path d="M647 306H647A1 1 0 0 1 648 307V359A1 1 0 0 1 647 360H647A1 1 0 0 1 646 359V307A1 1 0 0 1 647 306Z" fill="rgb(164, 176, 189)"/><svg x="1160" y="112" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(102, 121, 147);fill:none;stroke:rgb(102, 121, 147);stroke-width:1.9px;stroke-linecap:round;stroke-linejoin:round"><path d="M3 6h12M3 11h9M3 16h6M18 5v14m-3-3 3 3 3-3"/></svg><svg x="1187" y="112" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(102, 121, 147);fill:none;stroke:rgb(102, 121, 147);stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round"><path d="M4 5h16l-6.4 7.5v5.2L10.4 20v-7.5L4 5z"/></svg></g><g clip-path="url(#d273)"><path d="M665 141H678A2 2 0 0 1 680 143V155A2 2 0 0 1 678 157H665A2 2 0 0 1 663 155V143A2 2 0 0 1 665 141Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 141H678A2 2 0 0 1 680 143V155A2 2 0 0 1 678 157H665A2 2 0 0 1 663 155V143A2 2 0 0 1 665 141ZM665 142H678A1 1 0 0 1 679 143V155A1 1 0 0 1 678 156H665A1 1 0 0 1 664 155V143A1 1 0 0 1 665 142Z"/><text class="t56" x="668.688" y="152.5">S</text></g><g clip-path="url(#d274)"><text class="t51" x="688" y="152.75" textLength="22.797" lengthAdjust="spacing">Add</text></g><g clip-path="url(#d275)"><path d="M665 168H678A2 2 0 0 1 680 170V182A2 2 0 0 1 678 184H665A2 2 0 0 1 663 182V170A2 2 0 0 1 665 168Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 168H678A2 2 0 0 1 680 170V182A2 2 0 0 1 678 184H665A2 2 0 0 1 663 182V170A2 2 0 0 1 665 168ZM665 169H678A1 1 0 0 1 679 170V182A1 1 0 0 1 678 183H665A1 1 0 0 1 664 182V170A1 1 0 0 1 665 169Z"/><text class="t56" x="668.688" y="179.5">S</text></g><g clip-path="url(#d276)"><text class="t51" x="688" y="179.75" textLength="28.016" lengthAdjust="spacing">Clear</text></g><g clip-path="url(#d277)"><path d="M665 195H678A2 2 0 0 1 680 197V209A2 2 0 0 1 678 211H665A2 2 0 0 1 663 209V197A2 2 0 0 1 665 195Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 195H678A2 2 0 0 1 680 197V209A2 2 0 0 1 678 211H665A2 2 0 0 1 663 209V197A2 2 0 0 1 665 195ZM665 196H678A1 1 0 0 1 679 197V209A1 1 0 0 1 678 210H665A1 1 0 0 1 664 209V197A1 1 0 0 1 665 196Z"/><text class="t56" x="668.609" y="206.5">ƒ</text></g><g clip-path="url(#d278)"><text class="t51" x="688" y="206.75" textLength="23.578" lengthAdjust="spacing">Find</text></g><g clip-path="url(#d279)"><path d="M665 222H678A2 2 0 0 1 680 224V236A2 2 0 0 1 678 238H665A2 2 0 0 1 663 236V224A2 2 0 0 1 665 222Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 222H678A2 2 0 0 1 680 224V236A2 2 0 0 1 678 238H665A2 2 0 0 1 663 236V224A2 2 0 0 1 665 222ZM665 223H678A1 1 0 0 1 679 224V236A1 1 0 0 1 678 237H665A1 1 0 0 1 664 236V224A1 1 0 0 1 665 223Z"/><text class="t56" x="668.609" y="233.5">ƒ</text></g><g clip-path="url(#d280)"><text class="t51" x="688" y="233.75" textLength="68.125" lengthAdjust="spacing">ItemByIndex</text></g><g clip-path="url(#d281)"><rect x="655" y="243" width="552" height="27" fill="rgb(43, 97, 167)"/></g><g clip-path="url(#d282)"><path d="M665 249H678A2 2 0 0 1 680 251V263A2 2 0 0 1 678 265H665A2 2 0 0 1 663 263V251A2 2 0 0 1 665 249Z" fill="rgb(230, 234, 250)"/><path fill-rule="evenodd" fill="rgb(182, 195, 234)" d="M665 249H678A2 2 0 0 1 680 251V263A2 2 0 0 1 678 265H665A2 2 0 0 1 663 263V251A2 2 0 0 1 665 249ZM665 250H678A1 1 0 0 1 679 251V263A1 1 0 0 1 678 264H665A1 1 0 0 1 664 263V251A1 1 0 0 1 665 250Z"/><text class="t56" x="668.609" y="260.5">ƒ</text></g><g clip-path="url(#d283)"><text class="t54" x="688" y="260.75" textLength="26.281" lengthAdjust="spacing">Total</text></g><g clip-path="url(#d246)"><rect x="617" y="561" width="46" height="2" fill="rgb(164, 176, 189)"/><path d="M74 592H1206A2 2 0 0 1 1208 594V807A2 2 0 0 1 1206 809H74A2 2 0 0 1 72 807V594A2 2 0 0 1 74 592Z" fill="rgb(255, 255, 255)"/><path fill-rule="evenodd" fill="rgb(170, 184, 202)" d="M74 592H1206A2 2 0 0 1 1208 594V807A2 2 0 0 1 1206 809H74A2 2 0 0 1 72 807V594A2 2 0 0 1 74 592ZM74 593H1206A1 1 0 0 1 1207 594V807A1 1 0 0 1 1206 808H74A1 1 0 0 1 73 807V594A1 1 0 0 1 74 593Z"/></g><g clip-path="url(#d284)"><text class="t57" x="88" y="622.391" textLength="100.422" lengthAdjust="spacing">Function Total</text><path d="M199 607H237A2 2 0 0 1 239 609V625A2 2 0 0 1 237 627H199A2 2 0 0 1 197 625V609A2 2 0 0 1 199 607Z" fill="rgb(239, 243, 248)"/><path fill-rule="evenodd" fill="rgb(217, 227, 238)" d="M199 607H237A2 2 0 0 1 239 609V625A2 2 0 0 1 237 627H199A2 2 0 0 1 197 625V609A2 2 0 0 1 199 607ZM199 608H237A1 1 0 0 1 238 609V625A1 1 0 0 1 237 626H199A1 1 0 0 1 198 625V609A1 1 0 0 1 199 608Z"/><text class="t58" x="204.422" y="620.063" textLength="27.938" lengthAdjust="spacing">Public</text><text class="t59" x="88" y="643.391" textLength="63.203" lengthAdjust="spacing">FeatureTour </text><text class="t59" x="151.188" y="643.391" textLength="5.656" lengthAdjust="spacing">· </text><text class="t59" x="156.828" y="643.391" textLength="47.813" lengthAdjust="spacing">Inventory</text><rect x="91" y="660" width="1100" height="34" fill="rgb(244, 247, 252)"/><polygon points="88 659 1192 659 1191 660 91 660" fill="rgb(220, 230, 243)"/><polygon points="1192 659 1192 695 1191 694 1191 660" fill="rgb(220, 230, 243)"/><polygon points="1192 695 88 695 91 694 1191 694" fill="rgb(220, 230, 243)"/><polygon points="88 695 88 659 91 660 91 694" fill="rgb(91, 146, 215)"/><text class="t60" x="102" y="681.406" textLength="415.656" lengthAdjust="spacing">FeatureTour._Inventory.Total(ByVal taxRate As Double) As Double</text><path fill-rule="evenodd" fill="rgb(230, 236, 243)" d="M88 707h1104v26h-1104ZM88 708h1104v25h-1104Z"/><text class="t61" x="88" y="729.406" textLength="257.203" lengthAdjust="spacing">Source: /FeatureTour/Sources/Inventory.twin (line 16)</text></g><g clip-path="url(#d246)"><path d="M1152 604H1175A3 3 0 0 1 1178 607V629A3 3 0 0 1 1175 632H1152A3 3 0 0 1 1149 629V607A3 3 0 0 1 1152 604Z" fill="rgb(248, 250, 252)"/><path fill-rule="evenodd" fill="rgb(197, 210, 225)" d="M1152 604H1175A3 3 0 0 1 1178 607V629A3 3 0 0 1 1175 632H1152A3 3 0 0 1 1149 629V607A3 3 0 0 1 1152 604ZM1152 605H1175A2 2 0 0 1 1177 607V629A2 2 0 0 1 1175 631H1152A2 2 0 0 1 1150 629V607A2 2 0 0 1 1152 605Z"/><svg x="1155" y="610" width="17" height="17" viewBox="0 0 24 24" style="color:rgb(56, 90, 128);fill:none;stroke:rgb(56, 90, 128);stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round"><path d="M8 7h11a2 2 0 012 2v10a2 2 0 01-2 2H9a2 2 0 01-2-2V8a1 1 0 011-1zM16 7V5a2 2 0 00-2-2H5a2 2 0 00-2 2v9a2 2 0 002 2h2"/></svg></g></svg> diff --git a/docs/IDE/Code/Navigating.md b/docs/IDE/Code/Navigating.md index 4de5263cd..0273c023b 100644 --- a/docs/IDE/Code/Navigating.md +++ b/docs/IDE/Code/Navigating.md @@ -149,3 +149,4 @@ The three panels are in no built-in layout, so each comes up floating the first - [Editor](Editor) -- the combo boxes, tabs and editing commands - [Finding](Finding) -- search the file or the project - [Diagnostics](Diagnostics) -- the list of problems +- [Object Browser](Object-Browser) -- find a component or member by name, and go to its declaration diff --git a/docs/IDE/Code/Object-Browser.md b/docs/IDE/Code/Object-Browser.md new file mode 100644 index 000000000..6dd7bdb4a --- /dev/null +++ b/docs/IDE/Code/Object-Browser.md @@ -0,0 +1,104 @@ +--- +title: Object Browser +parent: Writing code +grand_parent: IDE +nav_order: 6 +permalink: /tB/IDE/Code/Object-Browser +index: object browser +--- + +# Object Browser + +The **Object Browser** lists the components of the project and of the libraries it uses, with their members, and takes you to the code where each one is declared. + +![The Object Browser on the project FeatureTour. Components lists nine items, with Inventory selected, and Members lists the five public members of Inventory, with Total selected. The Description below shows Function Total, Public, FeatureTour · Inventory, the declaration FeatureTour._Inventory.Total(ByVal taxRate As Double) As Double, and Source: /FeatureTour/Sources/Inventory.twin (line 16). Go to Definition and Close are at the bottom.](Images/Object_Browser.png){:width="1162" height="858"} + +## Opening it + +With a project open, choose **View → Object Browser** or press <kbd>F2</kbd>. <kbd>F2</kbd> opens it from the code editor too, although the editor's right-click menu shows <kbd>F2</kbd> beside [Rename Symbol](Editor#rename-symbol-and-change-all-occurrences). + +If text is selected in the code editor, the Object Browser opens with that text as its search, so selecting a name and pressing <kbd>F2</kbd> lists the components and members of that name. With nothing selected, the search is empty; the word at the caret is not used. + +The Object Browser is a dialog: the rest of the IDE waits until you close it. It opens on the project, in the view you used last, with the first component selected. + +## Browse and Results + +**Browse** shows two lists side by side. **Components** lists the project's classes, modules, forms, interfaces, enums and user-defined types. Select one, and **Members** lists its members. A coloured letter before each name stands for its kind; hover over a name for the kind in words. The number of items in each list is shown above it. + +- An enum or a type declared inside a module is a component of its own. Its description names the module. +- A class that inherits another lists the members it inherits as well, in italics, with the name of the class that declares them at the right. +- Private members are not listed until you ask for them (see [Filters and sorting](#filters-and-sorting)). + +**Results** shows one list, **Symbols**, of every component and every member, each by its full name, such as `FeatureTour.Inventory.Total`, with its kind at the right. It suits a search for a member whose component you do not know. + +The **Project / Library** box chooses what the lists show: the project, marked *(project)*, one library, or **<All Libraries>**. The libraries are the packages the project references, such as **VBA**, **VB** and **VBRUN**, and its type libraries, such as **stdole**. Under **<All Libraries>**, each component shows its library at the right. + +**Back** and **Forward**, the two arrow buttons, step through the items you have selected since the Object Browser opened. + +## Searching + +The search box filters the lists as you type. It matches any part of a name: `tory` finds `Inventory`. Capitals do not matter unless **Aa**, at the right end of the box, is pressed. Only names are searched, not declarations or descriptions. + +In Browse, a component is listed when its own name matches, or the name of one of its members does. When the component's name matches, all its members are listed; otherwise only the members whose names match. + +A dot in the search names the component first. `Inventory.` lists the class `Inventory` and all its members, and `Strings.Left` finds the members whose names contain `Left` in a component whose name contains `Strings`. + +The search covers only what **Project / Library** shows. To find `Strings.Left`, which is in VBA, choose **VBA** or **<All Libraries>**. + +## Filters and sorting + +Above each list are two buttons. The first sorts the list, the second filters it. In Results, the list has a sort button and two filter buttons, one for components and one for members. + +The filter of **Components** lists the kinds of component, each with a tick box, and **All** and **None**. It also has **Show hidden components**, off at first, which adds the components and members that are marked hidden or restricted. + +The filter of **Members** lists the kinds of member, and two display options: + +- **Show inherited members**, on at first. Clear it to list only the members a class declares itself. +- **Show private members**, off at first. Tick it to list the `Private` members as well, and the other members that are not public, such as `Protected` ones. + +A filter takes effect at once. A filter button that is not at its defaults is marked with a dot. <kbd>Esc</kbd> closes the list of a filter or a sort without closing the Object Browser. + +**Components** can be sorted **Alphabetical** or by **Type**, and **Members** and **Symbols** also by **Declaration order**, which is the order of the code. + +## The description + +**Description**, under the lists, describes the selected item: + +- its kind and name, its visibility, and for a property whether it is **Read / Write**, **Read Only** or **Write Only**; +- its library and component, and for an inherited member the class it is inherited from; +- its declaration, with its full name; a property has one line for each of its Get, Let and Set; +- the description its library gives it, when there is one, as VBA's **Left** has; +- for a class, the class it inherits; +- **Source:**, the file and the line where it is declared. + +A class's members are shown on the class's default interface, whose name is the class's with an underscore before it: `FeatureTour._Inventory.Total` for `Total` of the class `Inventory`. + +The button at the top right of the description copies the declaration of the selected item, or the full name of a selected component. If you have selected some of the description's text, it copies that text instead. + +## Going to the code + +**Go to Definition** closes the Object Browser and puts the caret at the start of the line where the selected item is declared: the selected member, or the component when no member is selected. Double-click an item, or press <kbd>Enter</kbd> in a list, for the same: + +- a double-click on a component goes to the component, even when one of its members is selected; +- an inherited member goes to its declaration in the class it is inherited from. + +A member of a package, such as VBA's **Left**, opens the package's source in a read-only tab. An item of a type library, such as **stdole**, opens the IDE's read-only text of the library, which declares its types in twinBASIC. + +## Using the keyboard + +In a list, <kbd>Up</kbd>, <kbd>Down</kbd>, <kbd>Home</kbd> and <kbd>End</kbd> move the selection, and typing the first letters of a name selects the next item that starts with them. Letters typed within a second of each other make one name; after a pause, a letter starts again. <kbd>Enter</kbd> goes to the definition. <kbd>Esc</kbd> closes the Object Browser from anywhere in it, as **Close** and the title bar's **X** do, and the focus goes back to where it was. + +> [!NOTE] BETA 1034 +> <kbd>Tab</kbd> moves the focus from the search box to **Aa** and no further. <kbd>Shift</kbd>+<kbd>Tab</kbd> moves it from the search box to **Project / Library**, then to the copy button of the description, and no further. To use a list from the keyboard, click it first: its keys then work. + +## What it remembers + +The Object Browser keeps these between openings: the view, **Aa**, the filters and their display options, the sorts, and the sizes of its panes. To resize the panes, drag the bar between **Components** and **Members**, or the bar above **Description**. + +It does not keep the choice of **Project / Library**, the search, the selection, or the history of **Back** and **Forward**. Each time, it opens on the project, with an empty search or the selected text. + +## See Also + +- [Navigating](Navigating) -- Go To Definition and Last Position in the code editor +- [Editor](Editor) -- the editor's commands, Rename Symbol among them +- [View menu](../Reference/Menu/View) -- the menu that opens the Object Browser diff --git a/docs/IDE/Code/index.md b/docs/IDE/Code/index.md index d9a21d230..5dca3a9b0 100644 --- a/docs/IDE/Code/index.md +++ b/docs/IDE/Code/index.md @@ -8,13 +8,14 @@ has_toc: false # Writing code -The code editor and the panels you use beside it: tabs, editing commands, IntelliSense, navigation, searching and the list of problems. +The code editor and the panels you use beside it: tabs, editing commands, IntelliSense, navigation, searching, the list of problems and the Object Browser. - [**Editor**](Editor) --- the editor panel and its tabs, the three navigation combo boxes, editing commands, formatting, Auto Prettify and the command palette. - [**IntelliSense**](IntelliSense) --- the completion list, signature help, hover, inline code hints and CodeLens. - [**Navigating**](Navigating) --- Go To Definition, Last Position, bookmarks, Go To Line/Column, and the Outline, Open Editors and History panels. - [**Finding**](Finding) --- the **Find / Replace** panel, searching the whole project, the Quick Find widget and regular expressions. - [**Diagnostics**](Diagnostics) --- the panel that lists the errors and warnings the compiler finds, and how to filter and copy them. +- [**Object Browser**](Object-Browser) --- the dialog that lists the components and members of the project and its libraries, searches them, and goes to their declarations. The commands of these pages are listed by menu in the [Edit menu](../Reference/Menu/Edit) and [View menu](../Reference/Menu/View) reference pages. Everything that sets how the editor looks, such as its fonts, the minimap and the IntelliSense mode, is in [IDE Options](../Customising/IDE-Options). diff --git a/docs/IDE/Customising/IDE-Options.md b/docs/IDE/Customising/IDE-Options.md index c05162889..41892740a 100644 --- a/docs/IDE/Customising/IDE-Options.md +++ b/docs/IDE/Customising/IDE-Options.md @@ -69,7 +69,7 @@ No question is asked. About two seconds after **Save Changes**, the **tB Service : Default Dark. The IDE's theme: **Aurora**, **Classic**, **Dark**, **High Contrast Dark**, **High Contrast Light** or **Light**, the themes that **Window → Theme** lists. See [Themes](Themes). **IDE Font Size** -: Default 13px. The size of the IDE's own text. The list runs from 8px to 30px in steps of 1px, and 13px is the normal size: the whole IDE is scaled in proportion. <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>+</kbd> makes the text 1px bigger with no upper limit, so it can pass 30px, and <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>-</kbd> makes it 1px smaller, down to 8px. Both keys save the new size at once. +: Default 13px. The size of the IDE's own text. The list runs from 8px to 30px in steps of 1px, and 13px is the normal size: the toolbar's icons are scaled in proportion to it. <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>+</kbd> makes the text 1px bigger with no upper limit, so it can pass 30px, and <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>-</kbd> makes it 1px smaller, down to 8px. Both keys save the new size at once. **IDE Font** : Default Segoe UI. The typeface of the IDE's own text. Segoe UI is also the fallback. @@ -106,7 +106,7 @@ No question is asked. About two seconds after **Save Changes**, the **tB Service ## IntelliSense and hover **Intellisense mode** -: Default MODERN. When the IntelliSense list opens. See [Intellisense modes](#intellisense-modes). +: Default LEGACY. When the IntelliSense list opens. See [Intellisense modes](#intellisense-modes). **Signature-Help Show First Line Of Docs** : Default on. The collapsed signature-help box includes the first line of the procedure's documentation. <kbd>F1</kbd> expands the box. diff --git a/docs/IDE/Customising/Keyboard-Shortcuts.md b/docs/IDE/Customising/Keyboard-Shortcuts.md index 063422259..19d3f1885 100644 --- a/docs/IDE/Customising/Keyboard-Shortcuts.md +++ b/docs/IDE/Customising/Keyboard-Shortcuts.md @@ -47,7 +47,7 @@ The **Edit as JSON** box is ticked. If you clear it, the pane shows only the tex ![The same dialog with the Edit as JSON box cleared: the editing pane is empty apart from the line Keyboard editor coming soon.](../Menu/Images/Menu_Window_KeyboardShortcuts_ManageKeyboardShortcuts_1.png){:width="1016" height="740"} **Add New...** -: Asks for a name, then creates a group that holds one sample entry, `{"tbMisc_ShowTestMessage":["{KEYDOWN}{CTRL}0"]}`. <kbd>Ctrl</kbd>+<kbd>0</kbd> then opens a test dialog that reads *This is just a test modal dialog.* A name that starts with `<` is refused with a message that says *Custom panel name cannot begin with '<'*, although it means a group name. +: Asks for a name, then creates a group that holds one sample entry, `{"tbMisc_ShowTestMessage":["{KEYDOWN}{CTRL}0"]}`. <kbd>Ctrl</kbd>+<kbd>0</kbd> then opens a test dialog that reads *This is just a test modal dialog.* A name that starts with `<` is refused with a message that says *Custom panel name cannot begin with '<'*, although it means a group name. A name that contains a vertical bar is refused with *Group name cannot contain '|'*, because the IDE saves the list of groups that are on as their names, each between two bars, such as `|Mine||Other|`. A name already in use is refused with *Group already exists*. **Save Changes** : Greyed out until you change something. It saves the groups, switches on the groups you added, and applies the result. @@ -57,9 +57,6 @@ The **Edit as JSON** box is ticked. If you clear it, the pane shows only the tex Text that is not valid JSON turns red. The IDE ignores a group whose text is not valid when it merges the groups. -> [!WARNING] BETA 1010 -> A group whose name contains a vertical bar (`|`) can break the list of groups that are on. The IDE saves the list as the names, each between two bars, such as `|Mine||Other|`. A name with a bar inside it can match part of another name. For example, with groups named `A|B` and `B` both on, clicking `B` in the menu leaves it ticked, and clicking it again switches off both groups, and leaves a broken entry in the saved list. Nothing warns you. Do not use `|` in a group name. - ## The text of a group A group is a JSON object. Each key names a command, and each value is a list of key strings. The commands are named in the default group, which is listed on the [Window menu](../Reference/Menu/Window#keyboard-shortcuts) page and is the place to look up the name of a command. diff --git a/docs/IDE/Customising/Panel-Layouts.md b/docs/IDE/Customising/Panel-Layouts.md index 3c7d02e43..9ac7c1ee7 100644 --- a/docs/IDE/Customising/Panel-Layouts.md +++ b/docs/IDE/Customising/Panel-Layouts.md @@ -63,7 +63,7 @@ Choose **Window → Panel Layouts → Manage Panel Layouts...** to add and delet The list on the left holds `<DEFAULT> (built-in)` and `<FULLSCREEN> (built-in)`, which are read-only, and then your layouts. Each of yours has a close icon that removes it. The pane on the right shows the selected layout as text, which you can edit unless it is a built-in layout. **Add New...** -: Asks for a name in a box that reads *<new name>*. <kbd>Enter</kbd> creates a layout that is a copy of the Default layout, and <kbd>Esc</kbd> cancels. A name that starts with `<` is refused with the message *Custom panel name cannot begin with '<'*. +: Asks for a name in a box that reads *<new name>*. <kbd>Enter</kbd> creates a layout that is a copy of the Default layout, and <kbd>Esc</kbd> cancels. A name that starts with `<` is refused with the message *Custom panel name cannot begin with '<'*. A name that contains a vertical bar is refused with *Group name cannot contain '|'*, and a name already in use with *Group already exists*. **Save Changes** : Greyed out until you change something. It saves the layouts and, if a named layout is in use, applies it again. diff --git a/docs/IDE/Customising/Themes.md b/docs/IDE/Customising/Themes.md index 76d2b8056..1eed77f83 100644 --- a/docs/IDE/Customising/Themes.md +++ b/docs/IDE/Customising/Themes.md @@ -73,8 +73,7 @@ SymbolClassTextDecoration: underline; > [!WARNING] BETA 1010 > A file named `Dark.theme` or `Light.theme` in `%APPDATA%\twinBASIC\themes` breaks the inheritance of every custom theme. The IDE ignores the file's contents, but still counts it, and so it never links the themes to their parents. Every custom theme, and **Classic (Light)** with them, is listed as `(undefined)` in place of **Light** or **Dark**. Choosing one gives the dark base with only that theme's own properties changed, and **Reload from disk** no longer applies the edits you make. No error is shown. To change one of the shipped themes, give your file another name and inherit from the shipped theme: `inherits: dark;`. -> [!WARNING] BETA 1010 -> Two themes that inherit from each other freeze the IDE. For example, `LoopA` has the line `inherits: LoopB;`, and `LoopB` has `inherits: LoopA;`. When the IDE starts, or when you choose **Reload from disk**, it stops responding for several seconds. Choosing one of the two themes afterwards changes nothing on screen, because the IDE fails before it applies the theme. Never let a chain of `inherits:` lines return to a theme in it. To recover, remove the loop from the files and restart the IDE. +A chain of `inherits:` lines must not return to a theme in it. When `LoopA` has the line `inherits: LoopB;` and `LoopB` has `inherits: LoopA;`, **Reload from disk** shows the alert *Invalid theme file detected: LoopB.theme (recursive inheritance)*. `LoopA` is then left out of the **Theme** list, and `LoopB` is listed with the dark base. ### The format of a theme file diff --git a/docs/IDE/Customising/index.md b/docs/IDE/Customising/index.md index 34ede8399..733c63c77 100644 --- a/docs/IDE/Customising/index.md +++ b/docs/IDE/Customising/index.md @@ -15,7 +15,20 @@ The IDE lets you change its fonts and behaviour, its colours, the arrangement of - [**Panel layouts**](Panel-Layouts) --- save and switch the arrangement of the panels, and control how panels can be moved. - [**Keyboard shortcuts**](Keyboard-Shortcuts) --- add, replace or remove the keys of any IDE command. -The language of the IDE is described below, on this page. +Zoom and the language of the IDE are described below, on this page. + +## Zoom +{: index="zoom; IDE zoom" } + +Each part of the IDE that can be zoomed has a setting of its own. <kbd>Ctrl</kbd> with the mouse wheel zooms none of them. + +**The whole IDE.** <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>+</kbd> makes the IDE bigger and <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>-</kbd> makes it smaller. The <kbd>+</kbd> and <kbd>-</kbd> keys of the numeric keypad work too. Each press changes [**IDE Font Size**](IDE-Options#theme-and-fonts) by 1px, and the toolbar's icons are sized in proportion to the IDE's text. The new size is saved at once, so the IDE starts at it the next time. No key returns the IDE to its normal size: choose 13px, the default, in the **IDE Font Size** list of **IDE Options**. + +**The code editor.** <kbd>Ctrl</kbd>+<kbd>+</kbd> and <kbd>Ctrl</kbd>+<kbd>-</kbd> change the size of the code by 1px, as the **Code Editor Font Size** option, and save it at once. See [Word wrap and zoom](../Code/Editor#word-wrap-and-zoom). + +**The form designer.** The zoom box in the toolbar scales the form you are designing, from 25% to 400%, and **View → Zoom In** and **View → Zoom Out** step through it. The zoom is not saved. See [Zoom](../Forms/Designer#zoom) in the form designer's chapter. + +**The Webpage pane.** Its own zoom list scales the page it shows, from 50% to 150%. It starts at 70%, and keeps the zoom you choose. See [Webpage](../Project/Webpage). ## Where the IDE keeps its settings @@ -96,7 +109,9 @@ These parts stay in English: - **Restart the compiler** and **Flush the LLVM compiler cache** on the **Tools** menu; - **Automatic IDE Error Reporting...** on the **Help** menu; - most text in the Debug Console; -- the compiler's messages and the hover text: they stay in English after a switch, and after a restart of the compiler. +- the hover text, also after a restart of the compiler. + +The compiler's warnings and errors stay in English as well, because no pack that ships with the IDE translates them yet. Since BETA 1034 a pack can translate them: see [Language packs](#language-packs). The compiler uses the new language the next time it checks a file, so a message already shown, in the [**DIAGNOSTICS**](../Code/Diagnostics) panel or in the code editor, keeps its text until you edit its file or restart the compiler. ### Language packs @@ -111,6 +126,11 @@ To write a pack, copy `en-gb.lang` and translate it. The `README.txt` in the IDE A pack is a text file of `Name: value;` pairs, as a [theme](Themes#the-format-of-a-theme-file) is, with `/* ... */` comments. Each value is a string in double quotes. Write two double quotes for one inside a string. A line break inside the quotes is kept. In a string, `{%Name}` stands for another string and `{%1}` and `{%2}` mark the places where the IDE fills in a value. +> [!NOTE] BETA 1034 +> A `;` followed by a space, a tab or a line break ends the string even inside its quotes, and the rest of the string is lost: `"Save; then close"` reads *Save*. A `;` with no space after it stays in the string. `en-gb.lang` has one such string, the warning TB0022, so the warning reads only *Suspicious array assignment*. + +Since BETA 1034 the compiler also takes the text of its warnings and errors from the pack: a string named after a code, such as `TB0024`, is the text of the message with that code. `en-gb.lang` holds the English text of the [warnings](../../../Features/Compiler-IDE/Compiler-Warnings) and of the error TB5079, *Unrecognized symbol*. In those strings `{0}`, `{1}` and so on mark the values the compiler fills in, such as a variable's name. A string named after any other code replaces that message too, and `{0}` in it stands for the compiler's English message. + A line `inherits: <pack>;` makes the pack take its missing strings from another pack instead of from `en-gb.lang`. Translators share new and updated packs in the [#langpacks channel on the twinBASIC Discord server](https://discord.com/channels/927638153546829845/1329533568376115282). diff --git a/docs/IDE/Debugging/Debug-Console.md b/docs/IDE/Debugging/Debug-Console.md index 83cee695a..f76fa6d21 100644 --- a/docs/IDE/Debugging/Debug-Console.md +++ b/docs/IDE/Debugging/Debug-Console.md @@ -98,8 +98,8 @@ The input row is one line. There is no way to enter a multi-line construct. > [!NOTE] BETA 1010 > The input row offers no completion for a name typed after `?` and a space, and <kbd>Ctrl</kbd>+<kbd>Space</kbd> there opens no list. Type the name without the space, as `?total`, or start the line with the name. -> [!NOTE] BETA 1010 -> A space typed while the completion list is open accepts the list's first entry, and the space is lost. Typing `Print total` gives `Printertotal`, because the list offers `Printer` but not the keyword `Print`; `Call Touch(total)` and `Set obj = items` are changed in the same way. The console refuses the changed line. Press <kbd>Escape</kbd> to close the list before you type the space: the text you typed stays. +> [!NOTE] BETA 1034 +> In the **MODERN** [Intellisense mode](../Customising/IDE-Options#intellisense-modes), a space typed while the completion list is open accepts the list's first entry, and the space is lost. Typing `Print total` gives `Printertotal`, because the list offers `Printer` but not the keyword `Print`; `Call Touch(total)` and `Set obj = items` are changed in the same way. The console refuses the changed line. Press <kbd>Escape</kbd> to close the list before you type the space: the text you typed stays. > [!NOTE] BETA 1010 > `? p`, where `p` is a variable of a user-defined type, fails with `(compile error: codegen error; check for compilation errors)`, and the console prints a `[LINKER] compilation (codegen) error` line. The [Variables](Inspecting#variables) panel and a watch show the same variable, so read it there. diff --git a/docs/IDE/Menu/View.md b/docs/IDE/Menu/View.md index f05d92e6c..6a04b2770 100644 --- a/docs/IDE/Menu/View.md +++ b/docs/IDE/Menu/View.md @@ -12,7 +12,7 @@ redirect_from: The View menu switches between a file's code and its designer, moves around the code, changes the zoom, and shows the panels of the IDE. -![The View menu open while the code editor has the focus. Code Editor and Object Browser are greyed out. Object Designer, Definition and Last Position are available, and so are Increase Font Size and Decrease Font Size, with CTRL++ and CTRL+-. Below them the seventeen panel names from EDITOR down to MEMORY 1 are all available, each beside its own icon, with CTRL+L against CALL STACK and CTRL+G against DEBUG CONSOLE.](Images/Menu_View.png){:width="218" height="626"} +![The View menu open while the code editor has the focus. Code Editor is greyed out. Object Designer, Definition, Last Position and Object Browser, with F2, are available, and so are Increase Font Size and Decrease Font Size, with CTRL++ and CTRL+-. Below them the seventeen panel names from EDITOR down to MEMORY 1 are all available, each beside its own icon, with CTRL+L against CALL STACK and CTRL+G against DEBUG CONSOLE.](Images/Menu_View.png){:width="218" height="626"} The picture shows the menu while the code editor has the focus. The upper commands depend on what has the focus; the panel names are always available. @@ -32,8 +32,8 @@ The picture shows the menu while the code editor has the focus. The upper comman **Last Position** (<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>F2</kbd>) : Goes back to the place the caret was before. See [Last Position](../../Code/Navigating#last-position). -**Object Browser** -: Always greyed out. It has no function. +**Object Browser** (<kbd>F2</kbd>) +: Opens the Object Browser, which lists the components and members of the project and of its libraries, and goes to where each is declared. It needs a project open. See [Object Browser](../../Code/Object-Browser). ## Zoom diff --git a/docs/IDE/Projects/Saving-and-Exporting.md b/docs/IDE/Projects/Saving-and-Exporting.md index 5869f299b..01b2aeb81 100644 --- a/docs/IDE/Projects/Saving-and-Exporting.md +++ b/docs/IDE/Projects/Saving-and-Exporting.md @@ -157,9 +157,6 @@ The tB executable's `import` cannot pack a folder while any folder remains under Each export writes a first line, `[EXPORT] exporting current project to "…"`, and a last line: `[EXPORT] COMPLETED (72 folders, 478 files)`, or the failure lines above. With [*Export Verbose*](../Project-Settings#export-verbose) set, it also writes a line for each file and folder it deletes, `[EXPORT] DELETED: …`, and for each file it writes, `[EXPORT] DONE: …`. If the compiler answers the IDE's request with an error code, a box reads **ERROR: exportProject failed.** and the code. -> [!NOTE] BETA 1010 -> Each `DONE` line shows `\` for every backslash of its path: `[EXPORT] DONE: \Sources\Startup.twin` for the file `Sources\Startup.twin` of the export folder. The files are written correctly, and the other `[EXPORT]` lines show their backslashes. - ![The DEBUG CONSOLE, floating, after Export Project with Export Verbose off: the line that starts the export and names the export folder, and the COMPLETED line with the numbers of folders and files.](Images/Export_Console.png){:width="600" height="132"} The `export` command of the tB executable and of the import/export script deletes nothing. See [What both programs do](../../../Features/Packages/Import-Export-Tool#what-both-programs-do). diff --git a/docs/Miscellaneous/FAQs.md b/docs/Miscellaneous/FAQs.md index bc54c46e7..253554164 100644 --- a/docs/Miscellaneous/FAQs.md +++ b/docs/Miscellaneous/FAQs.md @@ -20,7 +20,9 @@ twinBASIC is a new BASIC language and development environment (IDE) aiming to be <details open> <summary markdown=span id="authors"><b>Who is behind twinBASIC?</b></summary> -twinBASIC is the work of Wayne Phillips, who operates the company [Everything Access](https://www.everythingaccess.com/), a well established provider of professional tools and services for Microsoft Access and VBA generally, including the popular vbWatchdog software. +twinBASIC is developed by [TWINBASIC LTD](https://twinbasic.com/about), a family-run software company registered in England and Wales. It is led by Wayne Phillips, who created twinBASIC, and Louise Phillips. Wayne ran the business as a sole trader until TWINBASIC LTD took it over on 10 November 2025 ([announcement](https://twinbasic.com/news/twinbasic-incorporation)). In July 2026 the company took its first outside investment, led by RepSoft, LLC ([announcement](https://twinbasic.com/news/twinbasic-investment-july2026)). + +Wayne is also known for [Everything Access](https://www.everythingaccess.com/), a well-established provider of professional tools and services for Microsoft Access and VBA, including the popular vbWatchdog software. Everything Access is now a brand of TWINBASIC LTD. </details> @@ -34,9 +36,11 @@ The latest version can be downloaded from the [Releases section](https://github. <details> <summary markdown=span id="current-status"><b>What is the current status of the project?</b></summary> -twinBASIC is currently late into the **Beta** stage, under development and not yet at a stable 1.0 release. All of the VB6/VBA7 syntax and intrinsic functions have been implemented. All of the basic controls except the OLE control, and about half of the Common Controls, have been implemented. It supports Forms, Classes, and UserControls-- both as compiled OCX/DLL controls and as in-project code (i.e. like .ctl files). However, not all features of these, such as properties, events, and methods, have been completed. Additionally, ActiveX EXEs and VBG project group support are not yet implemented, and there's a fair number of bugs remaining. +twinBASIC is currently late into the **Beta** stage: it is under active development, with a new build published almost every day, and not yet at a stable 1.0 release. The [twinBASIC Roadmap](https://twinbasic.com/roadmap) plans a release candidate for 16 November 2026 and version 1.0 for 14 December 2026; both dates are tentative, and the release may come later. + +Nearly all of the VB6/VBA7 syntax and intrinsic functions have been implemented. All of the basic controls have been implemented except the [OLE](tB/Packages/VB/OLE/) container control, which is a placeholder, and so have eight of the fourteen Microsoft Common Controls, in the [WinNativeCommonCtls](tB/Packages/WinNativeCommonCtls/) package. It supports Forms, Classes, and UserControls --- both as compiled OCX/DLL controls and as in-project code (i.e. like .ctl files). However, not all features of these, such as properties, events, and methods, have been completed. Additionally, ActiveX EXEs and VBG project group support are not yet implemented (to share code between projects, one project can use another as a [linked package](Features/Packages/Linked)), and there's a fair number of bugs remaining. -However, **tB can already run many existing projects**, even fairly complex and large ones. Many community members have managed to get their apps and other open source apps up and running with little to no difficulty, and created new projects from scratch. Check out these examples for a good real world demonstrate of how far along the project is: +However, **tB can already run many existing projects**, even fairly complex and large ones. Many community members have managed to get their apps and other open source apps up and running with little to no difficulty, and created new projects from scratch. Check out these examples for a good real-world demonstration of how far along the project is: Krool's [VBCCR](https://github.com/Kr00l/VBCCR) and [VBFlexGrid](https://github.com/Kr00l/VBFLXGRD) controls, Ben Clothier's [TwinBasicSevenZip](https://github.com/bclothier/TwinBasicSevenZip), Carles PV's [Lemmings](https://github.com/fafalone/Lems64), Don Jarrett's [basicNES](https://github.com/fafalone/basicNES) Nintendo emulator, and Jon Johnson's [ucShellBrowse/ucShellTree](https://github.com/fafalone/ShellControls), [FileActivityMon ETW Event Tracer](https://github.com/fafalone/EventTrace), [cTaskDialog](https://github.com/fafalone/cTaskDialog64), and [many more](https://github.com/fafalone). @@ -45,16 +49,16 @@ Krool's [VBCCR](https://github.com/Kr00l/VBCCR) and [VBFlexGrid](https://github. <details> <summary markdown=span id="feature-timeline"><b>Is there an estimated timeline for when expected features will become available?</b></summary> -Yes, see the [twinBASIC Roadmap](https://github.com/twinbasic/twinbasic/issues/335) in the Issues section for the latest update to the timeline. This roadmap only covers major components; smaller features are implemented in a less formal manner, usually when the related part of the codebase is being worked on. +Yes, see the [twinBASIC Roadmap](https://twinbasic.com/roadmap) on the twinBASIC website for the latest update to the timeline. This roadmap only covers major components; smaller features are implemented in a less formal manner, usually when the related part of the codebase is being worked on. </details> <details> <summary markdown=span id="new-features"><b>What new features does twinBASIC have compared to VB6?</b></summary> -**Many!** It has 64bit compilation (using VBA7x64 compatible syntax), generics, overloading, multithreading (API-only right now, built in syntax coming soon), inheritance, ability to define interfaces and coclasses in your project using BASIC-style syntax, Unicode support in all controls and the editor (.twin files only), support for modern image formats, numerous enhancements to *Implements*, ability to create standard DLLs and kernel mode drivers, ability to set UDT packing alignment, and dozens of others, all available *right now*, with many more planned in the future. +**Many!** It has 64bit compilation (using VBA7x64 compatible syntax), generics, overloading, [multithreading](Features/Advanced/Multithreading) (through the API for now; built-in syntax is on the roadmap for 2027), inheritance, ability to define interfaces and coclasses in your project using BASIC-style syntax, Unicode support in all controls and the editor (.twin files only), support for modern image formats, numerous enhancements to *Implements*, ability to create standard DLLs and kernel mode drivers, ability to set UDT packing alignment, and dozens of others, all available *right now*, with many more planned in the future. -For a full list of all the new features available right now, see the Wiki article [Overview of features new to twinBASIC](Features). +For a full list of all the new features available right now, see the [Features](Features/) section of this documentation. </details> @@ -63,7 +67,7 @@ For a full list of all the new features available right now, see the Wiki articl [twinBASIC Home Page](https://twinbasic.com) -twinBASIC GitHub: [Main section](https://github.com/twinbasic/twinbasic) \| [Issues](https://github.com/twinbasic/twinbasic/issues) \| [Discussions](https://github.com/twinbasic/twinbasic/discussions) \| [Language Design](https://github.com/twinbasic/lang-design) \| [ Language Specification](https://github.com/twinbasic/lang-spec) \| [Documentation](https://docs.twinbasic.com) +twinBASIC GitHub: [Main section](https://github.com/twinbasic/twinbasic) \| [Issues](https://github.com/twinbasic/twinbasic/issues) \| [Discussions](https://github.com/twinbasic/twinbasic/discussions) \| [Language Design](https://github.com/twinbasic/lang-design) \| [Language Specification](https://github.com/twinbasic/lang-spec) \| [Documentation](https://docs.twinbasic.com) [twinBASIC Discord](https://discord.gg/UaW9GgKKuE) @@ -74,14 +78,14 @@ twinBASIC GitHub: [Main section](https://github.com/twinbasic/twinbasic) \| [Iss <details> <summary markdown=span id="open-source"><b>Is twinBASIC Open Source?</b></summary> -While open source models are possible in the future, at this time the compiler is not. There are plans in the works to open source the IDE. To address some of the major concerns this presents, once tB hits it first major release, the source code will be placed in escrow, to be released to the community in the event the author disappears or is unable to continue working on it due to death or serious illness/injury. +No. twinBASIC has been a closed-source, commercial project from the start, and neither the compiler nor the IDE is open source. Wayne Phillips [has said](https://github.com/twinbasic/twinbasic/issues/1472#issuecomment-1411092862) that he would like to see it open-sourced eventually. To address some of the major concerns a closed-source tool presents, once tB hits its first major release, the source code will be placed in escrow, to be released to the community in the event the author disappears or is unable to continue working on it due to death or serious illness/injury. </details> <details> <summary markdown=span id="cost"><b>How much does twinBASIC cost?</b></summary> -There are 4 basic editions of twinBASIC: The Community Edition is FREE. A splash screen is placed on compiled 64bit binaries and certain features like [advanced optimized compilation](LLVM/Getting-Started) and future cross-platform compilation are unavailable, but there are no restrictions on core language features or royalties imposed. To get those features, subscriptions are available for the Personal, Professional and Ultimate editions. There are also VIP editions that come with perpetual licenses. For more details on what's included with each edition, and to see current pricing, [see this page](https://twinbasic.com/licensing). +There are 4 basic editions of twinBASIC: The Community Edition is FREE, including for commercial use. The 64-bit programs it builds show a brief twinBASIC startup notice, and it has no [optimized (LLVM) compilation](LLVM/Getting-Started#availability), but there are no restrictions on core language features or royalties imposed. Subscriptions are available for the Personal, Professional and Ultimate editions. The Personal Edition removes the startup notice but does not allow commercial use, and its LLVM compilation covers only the built-in packages. Cross-platform compilation, planned for version 2, will be in the Ultimate Edition only. There are also VIP editions that come with perpetual licenses. For more details on what's included with each edition, and to see current pricing, [see this page](https://twinbasic.com/licensing). > [!NOTE] > You can change the subscription level at any time and the Community Edition is always available. There will be no lockout (see [the previous statement regarding escrow](#open-source)) so you will always have the ability to develop, test and compile. @@ -91,12 +95,12 @@ There are 4 basic editions of twinBASIC: The Community Edition is FREE. A splash <details> <summary markdown=span id="perpetual-license"><b>Can I pay a one-time fee for a perpetual license?</b></summary> -Due to the need for continuing income to be able to develop twinBASIC, subscriptions are the primary model for premium versions, which [are available](https://twinbasic.com/licensing) on a month-to-month or yearly basis. However, right now for a limited time, a buy-once perpetual license is available in the form of the [VIP Silver and Gold Lifetime Licence Initiatives](https://twinbasic.com/licensing). This provides not only a lifetime license to twinBASIC including updates and new versions, but numerous additional benefits available only to people who purchase this license. +Due to the need for continuing income to be able to develop twinBASIC, subscriptions are the primary model for premium versions, which [are available](https://twinbasic.com/licensing) on a month-to-month or yearly basis. However, until the 1.0 release, buy-once perpetual licenses are available as the [VIP Silver and VIP Gold editions](https://twinbasic.com/licensing). VIP Silver covers versions 1.x through 5.x, betas included; VIP Gold is a lifetime license covering all future versions. Both come with additional benefits available only to people who purchase them. </details> <details> -<summary markdown=span id="commercial-use"><b>Can twinBASIC be used to develop commercial products, and are royalties are owed?</b></summary> +<summary markdown=span id="commercial-use"><b>Can twinBASIC be used to develop commercial products, and are royalties owed?</b></summary> All versions of twinBASIC except the Personal Edition can be used to develop commercial products, on a ROYALTY FREE basis, including the free Community Edition. Nothing is owed for selling programs or other products created with twinBASIC editions allowing commercial use. The twinBASIC software itself, however, may not be redistributed without appropriate license. @@ -107,14 +111,14 @@ All versions of twinBASIC except the Personal Edition can be used to develop com Backwards compatibility refers to matching all publicly documented syntax, included controls, component and control behavior, and control appearance. It does not include undocumented, proprietary internal implementation details. So for example all language keywords, functions, and methods are present and should give the same results, and Forms/Classes/UserControls should implement all the same publicly documented interfaces, but twinBASIC exe files are not internally structured in the same way, and there isn't compatibility with the undocumented VB project info structures in the exe, whose contents have been reverse engineered over the years by the community. -Currently, all basic controls have reimplementations in twinBASIC that support Unicode and 64bit compilation except the OLE control; and a number of the primary Common Controls have also been reimplemented. Eventually, all controls shipped with VB6 Enterprise Edition will be reimplemented. Until that time, the original controls will still work in 32bit builds, and community members provide some alternatives, for example Krool's VBCCR controls and VBFlexGrid control all work and have 64bit-compatible twinBASIC versions. +Currently, all basic controls have reimplementations in twinBASIC that support Unicode and 64bit compilation except the OLE control; and eight of the Common Controls have also been reimplemented. Eventually, all controls shipped with VB6 Enterprise Edition will be reimplemented: the [roadmap](https://twinbasic.com/roadmap) plans the remaining ones, such as Winsock, MAPI, Adodc, DataGrid and MSCOMM, from 2027. Until that time, the original controls will still work in 32bit builds, and community members provide some alternatives, for example Krool's VBCCR controls and VBFlexGrid control all work and have 64bit-compatible twinBASIC versions. </details> <details> <summary markdown=span id="when-it-does-not-work"><b>So some of my projects won't work?</b></summary> -Most projects do not use these reverse engineered internals, but some do: most commonly, for self-subclassing and callbacks inside Forms/Classes/UserControls; and also for multithreading and inline assembly. These routines have native support in twinBASIC without requiring internals hacks, so replacing these small parts of a few programs is very simple: `AddressOf` is supported on class members, so you can use regular subclassing and callback methods as you would if they were in a .bas module. `CreateThread` can be called without any special steps. And tB supports statically linked .obj files allowing incorporation of code from other languages, inline assembly in the form of `Emit()`/`EmitAny()` to insert instructions, and further support is planned in the future. +Most projects do not use these reverse engineered internals, but some do: most commonly, for self-subclassing and callbacks inside Forms/Classes/UserControls; and also for multithreading and inline assembly. These routines have native support in twinBASIC without requiring internals hacks, so replacing these small parts of a few programs is very simple: `AddressOf` is supported on class members, so you can use regular subclassing and callback methods as you would if they were in a .bas module. `CreateThread` can be called without any special steps. And tB supports [statically linked](Features/Advanced/Static-Linking) .obj files allowing incorporation of code from other languages (still experimental, and only for code that needs nothing from the C runtime), inline assembly in the form of `Emit()`/`EmitAny()` to insert instructions, and further support is planned in the future. Additionally, twinBASIC redirects the most common msvbvm60.dll (also msvbvm50.dll/vbe6.dll/vbe7.dll) functions used as `Declare` statements by users, all of which also work in x64, if you add the `PtrSafe` keyword like any other DLL definition. The following functions currently have redirects: `VarPtr, GetMem1, GetMem2, GetMem4, GetMem8, PutMem1, PutMem2, PutMem4, PutMem8, __vbaObjSet, __vbaObjSetAddRef, __vbaObjAddRef, __vbaCastObj, __vbaCopyBytes, __vbaCopyBytesZero, __vbaRefVarAry`, and `__vbaAryMove`. You may continue to use these with `Declare` statements to support the particular signatures you prefer. Further, declares for olepro32.dll are redirected to identical functions in oleaut32.dll, as olepro32 was deprecated by NT4 and doesn't have a 64bit version. @@ -134,9 +138,9 @@ You can also create a post in the #bugs channel of the [twinBASIC Discord server <details> <summary markdown=span id="localization"><b>Is the twinBASIC IDE available in other languages?</b></summary> -Yes. The whole front-end UI can be localized, with translations supplied by members of the community. The IDE ships with language packs for 18 languages besides the base British English. Choose one under **Window → Language**. [The language of the IDE](tB/IDE/Customising/#the-language-of-the-ide) lists the packs as the menu shows them, says what stays in English, and says how to write a pack: a pack is a UTF-8 text file in a `locale` folder, and the IDE reads the packs when it starts. Translators share new and updated packs in [#langpacks on the tB Discord server](https://discord.com/channels/927638153546829845/1329533568376115282). +Yes. Most of the front-end UI can be localized, with translations supplied by members of the community. The IDE ships with language packs for 18 languages besides the base British English. Choose one under **Window → Language**. [The language of the IDE](tB/IDE/Customising/#the-language-of-the-ide) lists the packs as the menu shows them, says what stays in English, and says how to write a pack: a pack is a UTF-8 text file in a `locale` folder, and the IDE reads the packs when it starts. Translators share new and updated packs in [#langpacks on the tB Discord server](https://discord.com/channels/927638153546829845/1329533568376115282). -Internal text such as the hover information does not yet support localization, but this is planned for the future. +Since BETA 1034 a pack can also translate the compiler's warnings and errors, though no pack that ships with the IDE does yet; `en-gb.lang` holds the English text of the warnings. The hover information cannot be translated yet. </details> @@ -169,7 +173,7 @@ You can also manually configure Windows 7 with the proper updates. First, make s <summary markdown=span id="missing-files"><b>The IDE reports missing files when I try to launch it.</b></summary> -If, when launching the twinBASIC IDE, you are notified of missing files, the most likely reason is that the anti-virus software installed on your PC has quarantined some of the files needed by twinBASIC, mistakenly thinking that they contain a virus or other malware. Such erroneous detections are common with newly released software, so please be assured this is just a false-positive detection --- see also [the previous entry](#false-scanner-alerts) for context. +If, when launching the twinBASIC IDE, you are notified of missing files, the most likely reason is that the anti-virus software installed on your PC has quarantined some of the files needed by twinBASIC, mistakenly thinking that they contain a virus or other malware. Such erroneous detections are common with newly released software, so please be assured this is just a false-positive detection --- see also [Is twinBASIC safe?](#false-scanner-alerts) below for context. To get the twinBASIC IDE to launch successfully, configure your anti-virus software to disregard the twinBASIC executable files (EXEs and DLLs) within the root folder, and the `bin` subfolder. This usually means adding the root folder and the `bin` subfolder to an 'exception list' in your anti-virus software. @@ -186,7 +190,9 @@ tB does not require a full installation process, you need only extract the ZIP f ![The expanded Assets list of a GitHub release: the release's twinBASIC_IDE_BETA zip file with the start of its SHA-256, its size and its age, above the two automatic source code archives.](Images/ac019c1a-dcef-4964-a730-bc5b86c644ba.png){:width="891" height="183"} -Download the zip and extract it to an **empty** folder. Do not simply overwrite a previous version; either delete everything in the folder or use a different one. Odd errors have been known to occur otherwise. It will run from this folder; some settings will be placed in AppData. +Download the zip and extract it to an **empty** folder. Do not simply overwrite a previous version; either delete everything in the folder or use a different one. Odd errors have been known to occur otherwise. It will run from this folder; some settings will be placed in AppData. + +If Windows refuses to delete some of the old files, a twinBASIC process is still running. By default the LLVM cache process, `bin\twinBASIC_win64.exe`, stays alive after the IDE closes: end it in Task Manager, or turn off **LLVM - Keep cache process alive after exiting the IDE** in [IDE Options](tB/IDE/Customising/IDE-Options#compiler-and-llvm). </details> @@ -227,6 +233,8 @@ In addition to the directory you extract the IDE to, twinBASIC stores files and Anyone who has ever tested their own programs against a wide variety of AV engines knows that unless your exe is 64bit and signed with a high-level certificate (and maybe not even then, until it's manually added to a trust list), false positives in a small number are simply a way of life. twinBASIC's IDE and compiler executables, like all apps in its position, may trigger a small number of positives on services like VirusTotal, particularly 32bit apps. These are almost always not from major vendors and/or "AI" based algorithmic detection. +Every executable and DLL of the IDE is signed with TWINBASIC LTD's code-signing certificate. The **Digital Signatures** tab of a file's **Properties** shows the signature. + </details> ## Using twinBASIC @@ -234,16 +242,16 @@ Anyone who has ever tested their own programs against a wide variety of AV engin <details> <summary markdown=span id="vb6-import"><b>How do I import my VB6 project into twinBASIC?</b></summary> -The easiest way is through the import wizard. When you first start the twinBASIC IDE, you're presented with the New Project dialog- this contains an 'Import from VBP' option: +The easiest way is through the import wizard. When you first start the twinBASIC IDE, you're presented with the New / Open Project dialog --- its **New** section has an **Import from VBP...** card: ![The New / Open Project dialog on its New section, showing a grid of project template cards from Standard EXE to Import from folder, with a red arrow pointing up at the icon of the Import from VBP card.](Images/7e1cb69c-6db3-4f3f-aea1-c1fae25938a2.png){:width="970" height="728"} -You can import individual files, from VB projects or any type, through the Import option on the Add menu, under Project or by right clicking the desired folder in the Project Explorer pane: +You can import individual files, from VB projects of any type, through the Import option on the Add menu, under Project or by right clicking the desired folder in the Project Explorer pane: ![The Project Explorer context menu opened on a project's Sources folder, with the Add submenu expanded beside it. A red arrow points at Add, and a second arrow points at Import, which is ringed among the Add Folder, Add Windows Form and Add Resource entries.](Images/2b32ab8c-fabc-4f42-9e6b-06e85574eaf4.png){:width="754" height="626"} > [!NOTE] -> You can select .bas/.cls files individually, but to import Forms, UserControls, Property Pages, and Resource Files you must currently select the .vbp file they're associated with. You'll then be shown a list of files you can import (with their new twinBASIC extensions .tbform/.twin etc-- make sure to import both, e.g. for Form1.frm you'll see Form1.frm.tbform and Form1.frm.twin: +> You can select .bas/.cls files individually, but to import Forms, UserControls, Property Pages, and Resource Files you must currently select the .vbp file they're associated with. You'll then be shown a list of files you can import (with their new twinBASIC extensions .tbform/.twin and so on --- make sure to import both, e.g. for Form1.frm you'll see Form1.frm.tbform and Form1.frm.twin: ![The Import from twinproj dialog: a tick-box tree of everything found in ImportDemo.vbp, with the Resources branch expanded over its ICON and MANIFEST folders and a Sources branch below, where a module from a folder beside the project's sits in a PARENT-FOLDER branch. Form1.frm.tbform and Form1.frm.twin are both ticked.](Images/16833fae-4bd7-418f-bb16-691a611a5b01.png){:width="469" height="401"} @@ -270,9 +278,9 @@ In a built ActiveX DLL, these lines have the same effect as the twinBASIC attrib `VB_Name` is the name of the module or class. A class with `VB_Exposed = False` is left out of the type library. A class with `VB_Creatable = False` is not marked creatable there, and a class with `VB_GlobalNameSpace = True` is marked as an application object (`appobject`). -<!-- Checked on BETA 1010 by test/ide/vb6-import.test.mjs (ide-test.bat --only vb6-import): it imports test/ide/probes/vb6-import with Import from VBP..., checks the converted files, then builds the project with project.dllRegisterAfterBuild false and reads the DLL's type library. The twinBASIC-attribute column: a class written with those attributes built into the same DLL gave the same help strings, dispatch IDs and flags (scratch probe, 2026-10-14). The WARNING below is the BUGS-TO-REPORT entry "Some VB6 attribute lines have no effect in a built type library". --> +<!-- Checked on BETA 1034 by test/ide/vb6-import.test.mjs (ide-test.bat --only vb6-import): it imports test/ide/probes/vb6-import with Import from VBP..., checks the converted files, then builds the project with project.dllRegisterAfterBuild false and reads the DLL's type library. The twinBASIC-attribute column: a class written with those attributes built into the same DLL gave the same help strings, dispatch IDs and flags (scratch probe, 2026-10-14). The WARNING below is the BUGS-TO-REPORT entry "Some VB6 attribute lines have no effect in a built type library". --> -> [!WARNING] BETA 1010 +> [!WARNING] BETA 1034 > Some `Attribute` lines have no effect, and nothing says so. `VB_HelpID` and `VB_VarHelpID` give no help context ID. `VB_VarMemberFlags` leaves a public field neither hidden nor nonbrowsable. `VB_MemberFlags = "200"` (the user-interface default) and `"14"` (the data-binding flags `bindable` and `displaybind`) set no flag. A component moved from VB6 loses these when it is built again. In a `.twin` file, `[Hidden]` on a public field does hide it. </details> @@ -320,13 +328,13 @@ Currently tB does not have a dedicated resource editor; instead, resources are m ![The right of the IDE window: its title bar, the toolbar, the editor and the Project Explorer. In the tree the Resources branch is expanded over an ICON folder holding twinBASIC.ico, a MANIFEST folder holding #1.xml and the folders MESSAGETABLE and STRING, above the Sources branch.](Images/71ddde83-a091-47e3-b5b8-681954b0639d.png){:width="940" height="426"} -You can create additional folders here, using their standard names. For example a BITMAP group could be added, then used with `LoadResImage`. Unlike its predecessor, tB does not restrict the type of resources: you can create any type of folder you want, and import binary data into it. For example, some community projects have inserted `UIFILE` resources for Ribbon controls and `DIALOG` resources for property sheets. Resources can be imported by right-clicking the folder you want them in, and selecting Add->Import file... from the menu. +You can create additional folders here, using their standard names. For example a BITMAP group could be added, then used with `LoadResImage`. Unlike its predecessor, tB does not restrict the type of resources: you can create any type of folder you want, and import binary data into it. For example, some community projects have inserted `UIFILE` resources for Ribbon controls and `DIALOG` resources for property sheets. Resources can be imported by right-clicking the folder you want them in, and selecting **Add → Import...** from the menu. If you're importing a project, the resources in a linked .res file will be imported automatically. ### Strings -String table resources are currently treated specially; they're edited in the IDE as JSON. If you import from VBP with a .res, string resources will be automatically converted. If you right click the 'Resources' folder, and go to the 'Add' submenu, at the bottom, you'll find "Add resource: String table" that adds one populated with example strings: +String table resources are currently treated specially; they're edited in the IDE as JSON. If you import from VBP with a .res, string resources will be automatically converted. If you right click the 'Resources' folder, and go to the 'Add' submenu, at the bottom, you'll find **Add Resource: String Table**, which adds one populated with example strings: ![An editor tab holding Strings.json, a JSON array of two entries, each carrying an id, a name and one line per locale, keyed LCID_0000 for the neutral text through LCID_0809. The Project Explorer beside it shows the file inside a STRING folder under Resources.](Images/97cc8655-7a8b-47f3-b52c-eb1ddfce662f.png){:width="1040" height="417"} @@ -343,7 +351,7 @@ RCDATA STRING MESSAGETABLE -For other standard types, you must use the # (pound sign) followed their number. For example, for DIALOG (RT_DIALOG) resources, do not name the folder dialog, it must be named `#5`. ANICURSOR would be named `#21`. And so on, for the [standard types](https://learn.microsoft.com/en-us/windows/win32/menurc/resource-types) with `RT_` constants. For any others, you can use any name you want, e.g. UIFILE can just be named UIFILE. +For other standard types, you must use the # (pound sign) followed by their number. For example, for DIALOG (RT_DIALOG) resources, do not name the folder dialog, it must be named `#5`. ANICURSOR would be named `#21`. And so on, for the [standard types](https://learn.microsoft.com/en-us/windows/win32/menurc/resource-types) with `RT_` constants. For any others, you can use any name you want, e.g. UIFILE can just be named UIFILE. > [!NOTE] > At this time, .res files can only be imported as part of a VBP. @@ -357,7 +365,7 @@ By default newly created projects use the twinBASIC logo. Imported projects use the icon of the Form chosen in Project Settings. This can be modified or set for all projects in the same way: in the **Startup** group of the Project Settings dialog for your project, the **Icon Form** setting is a drop-down from which you can select which Form's icon will be used for your exe. If you don't set that option, or your project contains no Forms, the icon can be managed manually through the Resources folder. -If you're not already familiar with using resources in twinBASIC, see the FAQ entry right above this one. In this scenario, the icon used for your application in Explorer is the one in the Resources\ICON folder that comes first alphabetically. If you do not have an ICON folder in your project, you can create one by right-clicking the Resources folder and selecting Add->Add folder. +If you're not already familiar with using resources in twinBASIC, see the FAQ entry right above this one. In this scenario, the icon used for your application in Explorer is the one in the Resources\ICON folder that comes first alphabetically. If you do not have an ICON folder in your project, you can create one by right-clicking the Resources folder and selecting **Add → Add Folder**. ![The Project Explorer with the ICON folder under Resources expanded to two entries, MyOwnIcon.ico above twinBASIC.ico, beside the Toolbox and a form open in the designer.](Images/8611d12a-d7a6-48cc-9544-cb27c5299aa5.png){:width="642" height="462"} @@ -366,7 +374,7 @@ In the above picture, MyOwnIcon.ico would be used by Explorer and other apps to > [!NOTE] > This will not be set as the icon of any form; icons for forms are set by the "Icon" property in the Properties list. -You may set both the Icon Form option and include additional ICON resources. In this scenario, the Icon Form will take precedence- it will be inserted as #1, making it the first possible entry and therefore being used by Explorer. Do not use #1 for any of your additional icons in Resources in this scenario, the results may be unpredictable. +You may set both the Icon Form option and include additional ICON resources. In this scenario, the Icon Form will take precedence --- it will be inserted as #1, making it the first possible entry and therefore being used by Explorer. Do not use #1 for any of your additional icons in Resources in this scenario, the results may be unpredictable. </details> @@ -374,7 +382,7 @@ You may set both the Icon Form option and include additional ICON resources. In <summary markdown=span id="runtime-requirements"><b>What are the runtime requirements for twinBASIC-produced EXEs/binaries?</b></summary> Programs and modules/controls produced by twinBASIC have no native dependencies besides standard Windows system DLLs and are completely standalone/portable, besides of course 3rd party files your code may use. No runtime is required to be present. -Currently the minimum supported Windows version is **Windows XP**, with Windows 2000 support likely in the future. There are no current plans to support Windows ME, 98, 95, NT4, or earlier versions, as these lack key features for basic modernization provided by tB. +Currently the minimum supported Windows version is **Windows XP**, the default of the project's [Target OS Version](tB/IDE/Project-Settings#target-os-version) setting. Since BETA 844 a program can also run on Windows 2000 when that setting is changed to Windows 2000. There are no current plans to support Windows ME, 98, 95, NT4, or earlier versions, as these lack key features for basic modernization provided by tB. Certain new tB-exclusive features like child control transparency require newer versions only if they're used. Everything should also work under WINE and ReactOS, but testing, while successful, has been minimal. Please share your experiences if you try this. diff --git a/docs/Reference/Core/Declare.md b/docs/Reference/Core/Declare.md index 45bc2c2c3..0baaaf357 100644 --- a/docs/Reference/Core/Declare.md +++ b/docs/Reference/Core/Declare.md @@ -63,7 +63,7 @@ Syntax: : *optional* The calling convention of the DLL procedure: **CDecl**, **ThisCall** or **FastCall**. The default is stdcall, the convention of nearly all Windows API functions. A twinBASIC extension; see [Calling Conventions](../../Features/Advanced/API-Declarations#calling-conventions). *libname* -: Name of the DLL or code resource that contains the declared procedure. +: Name of the DLL or code resource that contains the declared procedure. In twinBASIC it can also be, without quotes, the namespace of a statically linked library that an **Import Library** statement names; see [Static Linking](../../Features/Advanced/Static-Linking). **Alias** *aliasname* : *optional* Indicates that the procedure being called has another name in the DLL. This is useful when the external procedure name is the same as a keyword. Alias also applies when a DLL procedure has the same name as a public variable, constant, or any other procedure in the same scope. Alias is also useful when any characters in the DLL procedure name aren't allowed by the DLL naming convention. diff --git a/docs/Reference/Glossary.md b/docs/Reference/Glossary.md index 5cf6bc3a3..0e5ce780a 100644 --- a/docs/Reference/Glossary.md +++ b/docs/Reference/Glossary.md @@ -465,7 +465,7 @@ Note that the named arguments don't have to appear in the normal positional orde ## namespace {: index="namespaces" } -(twinBASIC) A name that groups the names declared under it, so that code reaches them through it, followed by a dot. A [package](#package) groups its components under the namespace given when it is [published](../Features/Packages/Creating-TWINPACK), and a project that references the package reaches them through that name; see [Packages](../Features/Packages/). A project's own namespace is its [**Project Name**](IDE/Project-Settings#project-name). **Import Library** ... **As** *namespace* names a [statically linked library](../Features/Advanced/Static-Linking#generic-syntax), which **Declare** statements then use in place of a DLL name. A class with the **[AppObject]** [attribute](../Features/Language/Interfaces-CoClasses) is part of the global namespace. +(twinBASIC) A name that groups the names declared under it, so that code reaches them through it, followed by a dot. A [package](#package) groups its components under the namespace given when it is [published](../Features/Packages/Creating-TWINPACK), and a project that references the package reaches them through that name; see [Packages](../Features/Packages/). A project's own namespace is its [**Project Name**](IDE/Project-Settings#project-name). **Import Library** ... **As** *namespace* names a [statically linked library](../Features/Advanced/Static-Linking#syntax), which **Declare** statements then use in place of a DLL name. A class with the **[AppObject]** [attribute](../Features/Language/Interfaces-CoClasses) is part of the global namespace. ## Null @@ -485,7 +485,7 @@ A combination of code and data that can be treated as a unit, for example, a con ## Object Browser -A dialog box in which you can examine the contents of an object library to get information about the objects provided. +A dialog box in which you can examine the contents of an object library to get information about the objects provided. The twinBASIC IDE's is described under [Object Browser](IDE/Code/Object-Browser). ## Object data type diff --git a/docs/Reference/twinBASIC-Additions.md b/docs/Reference/twinBASIC-Additions.md index 5e210f1b3..997886be1 100644 --- a/docs/Reference/twinBASIC-Additions.md +++ b/docs/Reference/twinBASIC-Additions.md @@ -150,9 +150,13 @@ Additional low-level memory, threading, and introspection functions are document twinBASIC compiles to either 32-bit or 64-bit native code. The target is set per-project. See [Features → 64-bit Compilation](../Features/64bit) and use `#If Win64 Then` / `#If Win32 Then` to conditionally compile architecture-specific code. -### Static linking (Fusion) +### Static linking -twinBASIC can statically link its runtime into the output EXE, producing a single-file distributable with no separate runtime DLL. See [Features → Fusion](../Features/Fusion). +The `Import Library` statement links compiled C code from `.obj`, `.lib` and `.a` files into the program, which calls its functions through `Declare` statements with no DLL beside it. The feature is experimental. See [Features → Static Linking](../Features/Advanced/Static-Linking). + +### Fusion + +A 64-bit program can host some 32-bit ActiveX controls, which run in a 32-bit helper process. See [Features → Fusion](../Features/Fusion). ### Multithreading diff --git a/scripts/bug_repro.mjs b/scripts/bug_repro.mjs index 483c3c4d0..f3e766162 100644 --- a/scripts/bug_repro.mjs +++ b/scripts/bug_repro.mjs @@ -638,7 +638,8 @@ const MODES = ["compile", "build", "run", "test", "cli", "lane", "probe", "manua const warned = new Set(); // What `expect` may hold in each mode. A lane reproducer has no `expect`: its tests are what it expects. const EXPECT_KEYS = { - compile: ["exit", "diagnostics", "noDiagnostics"], + // `output` and `absent` are matched against tbbuild's --json report, one diagnostic to a line. + compile: ["exit", "diagnostics", "noDiagnostics", "output", "absent"], build: ["exit", "message"], // `message` is what tbrun writes to stderr, a failed build's lines included. run: ["exit", "output", "absent", "message", "imagesDiffer"], diff --git a/scripts/ide-js/names.json b/scripts/ide-js/names.json index ffccce437..e54c16d29 100644 --- a/scripts/ide-js/names.json +++ b/scripts/ide-js/names.json @@ -110,6 +110,326 @@ "refs": 4 } } + }, + "showModalDialog": { + "namedOn": "BETA 1034", + "shape": "a5d811b2364e1882", + "names": { + "0#0": { + "name": "content", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 2 + }, + "0#1": { + "name": "buttons", + "was": "t", + "def": "Parameter", + "kind": "param1", + "refs": 2 + }, + "0#2": { + "name": "caption", + "was": "o", + "def": "Parameter", + "kind": "param2", + "refs": 2 + }, + "0#3": { + "name": "onClose", + "was": "n", + "def": "Parameter", + "kind": "param3", + "refs": 2 + }, + "0#4": { + "name": "keepUnlocked", + "was": "i", + "def": "Parameter", + "kind": "param4", + "refs": 1 + }, + "0#5": { + "name": "noButtonKeys", + "was": "r", + "def": "Parameter", + "kind": "param5", + "refs": 3 + }, + "0#6": { + "name": "container", + "was": "a", + "def": "Variable", + "kind": "let", + "refs": 22 + }, + "0#7": { + "name": "previous", + "was": "s", + "def": "Variable", + "kind": "var", + "refs": 4 + }, + "0#8": { + "name": "startLeft", + "was": "l", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0#9": { + "name": "startTop", + "was": "d", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0#10": { + "name": "startX", + "was": "c", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0#11": { + "name": "startY", + "was": "u", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0#12": { + "name": "dragging", + "was": "p", + "def": "Variable", + "kind": "var", + "refs": 3 + }, + "0#13": { + "name": "titleBar", + "was": "f", + "def": "Variable", + "kind": "var", + "refs": 9 + }, + "0#14": { + "name": "closeBox", + "was": "g", + "def": "Variable", + "kind": "var", + "refs": 6 + }, + "0#15": { + "name": "cancelButton", + "was": "m", + "def": "Variable", + "kind": "var", + "refs": 8 + }, + "0#16": { + "name": "acceptButton", + "was": "h", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0#17": { + "name": "focusedButton", + "was": "v", + "def": "Variable", + "kind": "var", + "refs": 27 + }, + "0#18": { + "name": "firstButton", + "was": "b", + "def": "Variable", + "kind": "var", + "refs": 4 + }, + "0#19": { + "name": "lastButton", + "was": "C", + "def": "Variable", + "kind": "var", + "refs": 8 + }, + "0#20": { + "name": "buttonBar", + "was": "y", + "def": "Variable", + "kind": "var", + "refs": 4 + }, + "0#21": { + "name": "leadingSpacer", + "was": "E", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0#22": { + "name": "hasSpacer", + "was": "D", + "def": "Variable", + "kind": "var", + "refs": 3 + }, + "0/1#0": { + "name": "down", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 3 + }, + "0/2#0": { + "name": "move", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 2 + }, + "0/2#1": { + "name": "dx", + "was": "t", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0/2#2": { + "name": "dy", + "was": "o", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0/3#0": { + "name": "up", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 0 + }, + "0/4/0#0": { + "name": "press", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 1 + }, + "0/5#0": { + "name": "event", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 12 + }, + "0/5/0/0#0": { + "name": "inTextBox", + "was": "e", + "def": "Variable", + "kind": "const", + "refs": 2 + }, + "0/6/0#0": { + "name": "button", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 21 + }, + "0/6/0#1": { + "name": "element", + "was": "t", + "def": "Variable", + "kind": "var", + "refs": 7 + }, + "0/6/0/0/0/0#0": { + "name": "click", + "was": "t", + "def": "Parameter", + "kind": "param0", + "refs": 1 + }, + "0/6/0/0/0/1/0#0": { + "name": "mouseDown", + "was": "t", + "def": "Parameter", + "kind": "param0", + "refs": 0 + } + } + }, + "applyLanguagePack": { + "namedOn": "BETA 1034", + "shape": "22e73f2f6b3e21b1", + "names": { + "0#0": { + "name": "packName", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 5 + }, + "0#1": { + "name": "pack", + "was": "t", + "def": "Variable", + "kind": "var", + "refs": 7 + }, + "0#2": { + "name": "packText", + "was": "o", + "def": "Variable", + "kind": "var", + "refs": 12 + }, + "0#3": { + "name": "entries", + "was": "n", + "def": "Variable", + "kind": "var", + "refs": 2 + }, + "0/0#0": { + "name": "language", + "was": "t", + "def": "Parameter", + "kind": "param0", + "refs": 1 + }, + "0/4/0#0": { + "name": "entry", + "was": "e", + "def": "Parameter", + "kind": "param0", + "refs": 3 + }, + "0/4/0#1": { + "name": "colon", + "was": "t", + "def": "Variable", + "kind": "let", + "refs": 4 + }, + "0/4/0#2": { + "name": "key", + "was": "o", + "def": "Variable", + "kind": "var", + "refs": 4 + }, + "0/4/0#3": { + "name": "value", + "was": "n", + "def": "Variable", + "kind": "var", + "refs": 2 + } + } } } } diff --git a/scripts/lib/tb-defaults.mjs b/scripts/lib/tb-defaults.mjs index 42cf5b5e5..5bcc8fcd1 100644 --- a/scripts/lib/tb-defaults.mjs +++ b/scripts/lib/tb-defaults.mjs @@ -26,7 +26,9 @@ import { connect } from "./tb-cdp.mjs"; // parsed as the options' objects, and "" in their place is the first run's mark: the IDE then // opens its Options dialog and goes no further. The others take "" as a fresh install's // answer: JSON.parse fails inside a try and the variable keeps its default, parseJson gives -// undefined, and an empty targetArchitectureMemory reads as "unknown". Not here, and +// undefined, an empty targetArchitectureMemory reads as "unknown", and the Object Browser +// (OBJECT_BROWSER, BETA 1023) and the New / Open Project dialog's section (NEWFRONTPAGE, BETA +// 1033) test the length first and keep their defaults. Not here, and // answered from the registry: the licence's keys, LICENCEAGREEMENTV3, ALLOWERRORREPORTINGV3, // PUBLISHER and NEWYEAR_*, which are not settings of how the IDE looks. export const BLANKED_KEYS = { @@ -41,6 +43,8 @@ export const BLANKED_KEYS = { WEBPANEL_SETTINGS: "", FORMS_windowsPalette: "", targetArchitectureMemory: "", + OBJECT_BROWSER: "", + NEWFRONTPAGE: "", }; // Runs in the page, in every document of the IDE's browser; only main.htm does anything. diff --git a/scripts/lib/tb-ide-console.mjs b/scripts/lib/tb-ide-console.mjs index a00bc8377..c2d98b96a 100644 --- a/scripts/lib/tb-ide-console.mjs +++ b/scripts/lib/tb-ide-console.mjs @@ -34,10 +34,10 @@ // // An entry's text is stored escaped: an add-in's PrintText of "<b>©=1" // is stored as "<b>&copy=1" (measured), so decoding gives -// back exactly what was printed, markup and ampersands included. Except for -// the IDE's own bug (twinbasic/twinbasic#2444): text that continues a line left open -// by `Debug.Print ...;` is escaped twice, so the console shows "&" for -// "&", and so does this reader. It returns what the console shows. +// back exactly what was printed, markup and ampersands included. Up to BETA +// 1010, text that continued a line left open by `Debug.Print ...;` was escaped +// twice (twinbasic/twinbasic#2444, fixed by BETA 1034), so the console showed +// "&" for "&", and so did this reader. It returns what the console shows. // // A mark (consoleMark) is checked in the same evaluate as the read, so a // clear cannot fall between the two. The entry that was last when the mark diff --git a/scripts/shoot_docs.mjs b/scripts/shoot_docs.mjs index 1cf4d9ba7..7dd560a9a 100644 --- a/scripts/shoot_docs.mjs +++ b/scripts/shoot_docs.mjs @@ -9729,6 +9729,44 @@ const codeDiagnosticsMenuShot = annotatedPanelShot( }, ); +// The Object Browser, opened from the code with only a caret (so its search is empty), with +// Inventory chosen in Components and Total in Members by real clicks, so that the Description shows +// a function's declaration and the line it is on. The dialog's own colours are the same in every +// theme; only its title bar follows the theme. It opens with its default settings in every IDE the +// tool starts: the setting OBJECT_BROWSER is answered "no saved value" (scripts/lib/tb-defaults.mjs). +const obRow = (c, label, name) => + c.evaluate(`(() => { + const b = window.__twinBasicObjectBrowser?.element.querySelector('.tbob-listbox[aria-label=${JSON.stringify(label)}]'); + const r = b && [...b.querySelectorAll(".tbob-item")].find((e) => e.querySelector(".tbob-itemname")?.textContent === ${JSON.stringify(name)}); + if (!r) return null; + const q = r.getBoundingClientRect(); + return { x: q.x + q.width / 2, y: q.y + q.height / 2 }; +})()`); +const codeObjectBrowserShot = { + out: CHAPTER_IMAGE("Object_Browser"), + setup: "code-chapter", + async take({ c }) { + await chapterTabs(c, ["Inventory.twin"]); + await caretOn(c, "Public Function Total(", { offset: 4 }); + return inDialog(c, { command: "tbShowObjectBrowser", title: "Object Browser", close: "Close" }, async () => { + for (const [label, name] of [ + ["Components", "Inventory"], + ["Members", "Total"], + ]) { + const p = await obRow(c, label, name); + if (!p) throw new Error(`the Object Browser's ${label} list has no ${name}`); + await clickAt(c, p.x, p.y); + await dialogStill(c); + } + const text = await c.evaluate(`document.querySelector(".tbob-description").innerText`); + if (!text.includes("Total(ByVal taxRate As Double) As Double")) { + throw new Error(`the Description does not show Total: ${JSON.stringify(text)}`); + } + return dialogShot(c, "Object_Browser"); + }); + }, +}; + const codeChapterShots = [ codeEditorPanelShot, codeTabsStatesShot, @@ -9751,6 +9789,7 @@ const codeChapterShots = [ codeOutlineMenuShot, codeDiagnosticsRowsShot, codeDiagnosticsMenuShot, + codeObjectBrowserShot, ]; // ---- the "Running and debugging" chapter (setup debugging): the Writing code chapter's project, diff --git a/test/ide/building-kit.mjs b/test/ide/building-kit.mjs index 1e250a5d3..ba88f08eb 100644 --- a/test/ide/building-kit.mjs +++ b/test/ide/building-kit.mjs @@ -162,6 +162,24 @@ export async function clickText(c, text, { scope = "*", startsWith = false } = { await sleep(600); } +/** + * Click, with the mouse, the card of the New / Open Project dialog (BETA 1033's, + * #fp2root) whose item is named `name`. A card is found by its item rather than its + * text, because the cards of Standard EXE (+VBCCR) and Standard EXE (Console App) + * also show the name Standard EXE, with their variant in a badge. + */ +export async function clickCard(c, name) { + const p = await c.evaluate(`(() => { + const e = [...document.querySelectorAll("#fp2root .fp2-card")] + .find((x) => x.getBoundingClientRect().width && x.fp2Item?.name === ${J(name)}); + const r = e && e.getBoundingClientRect(); + return r ? { x: r.x + r.width / 2, y: r.y + r.height / 2 } : null; + })()`); + if (!p) throw new Error(`the New / Open Project dialog shows no card named ${J(name)}`); + await clickAt(c, p.x, p.y); + await sleep(600); +} + /** A root menu (File, View, ...) opened with the mouse, then one of its items. */ export async function menu(c, root, item) { await clickText(c, root, { scope: "[id^=rootMenu]" }); diff --git a/test/ide/building.test.mjs b/test/ide/building.test.mjs index ffcb629e4..f6690de49 100644 --- a/test/ide/building.test.mjs +++ b/test/ide/building.test.mjs @@ -18,7 +18,7 @@ // - no project, then New Project (Standard EXE): "Save in the build's 'You must // first save the project' box writes no project file". // -// Each test states what BETA 1010 does. If one fails after an IDE update, the +// Each test states what BETA 1034 does. If one fails after an IDE update, the // IDE has changed: update the matching entry in BUGS-TO-REPORT.md or // bugs/filed/, and then this file. // @@ -34,6 +34,7 @@ import { scenario } from "../addin/scenario.mjs"; import { answer, boxes, + clickCard, clickText, diskText, guard, @@ -245,7 +246,7 @@ scenario("Building", (lane) => { ); await sleep(1500); await guard(c); - await clickText(c, "Standard EXE", { scope: ".frontPageListViewItem" }); + await clickCard(c, "Standard EXE"); await answer(c, "Open"); assert.ok(await waitBox(c, /New Project Options/, { timeout: 60 * 1000 }), "no New Project Options"); await answer(c, "Continue"); diff --git a/test/ide/code-editor.test.mjs b/test/ide/code-editor.test.mjs index dc719163a..6cf92a7fa 100644 --- a/test/ide/code-editor.test.mjs +++ b/test/ide/code-editor.test.mjs @@ -34,7 +34,7 @@ // the Windows clipboard, so that and the host's copyClipboardIDE request are replaced by recorders // first. Nothing here reaches SaveSetting, so lanes.mjs names no settings for this lane. // -// The tests share the lane's IDE in order. Each test states what BETA 1010 does; the tests named +// The tests share the lane's IDE in order. Each test states what BETA 1034 does; the tests named // "control" pass whether or not the defects are fixed. If another fails after an IDE update, the // IDE has changed: update the entry in BUGS-TO-REPORT.md, or its report in bugs/filed/, the // callout on the page of docs/IDE/Code/ that carries it, and then this file. @@ -399,7 +399,7 @@ scenario("the code editor and its panels", (lane) => { assert.match( copy[0], new RegExp( - `^\\{WARNING\\} ${HELPERS.replace(/\//g, "\\/")} \\[${NARROWING},\\d+\\]: <span>TB0018</span>implicit narrowing`, + `^\\{WARNING\\} ${HELPERS.replace(/\//g, "\\/")} \\[${NARROWING},\\d+\\]: <span>TB0018</span>Implicit narrowing or lossy conversion from Long to Integer`, ), ); diff --git a/test/ide/console-space.test.mjs b/test/ide/console-space.test.mjs index b6525c3fc..4acc0cbb8 100644 --- a/test/ide/console-space.test.mjs +++ b/test/ide/console-space.test.mjs @@ -12,12 +12,12 @@ // // Each line is typed one key at a time, and after each key the lane waits for the // console's answer to it, as a person typing at an ordinary speed sees the list: -// in the IDE's default IntelliSense mode, MODERN, the console asks for the list -// after every key. The IDE closes the console's list 100 ms after the code editor +// in the IntelliSense mode MODERN, which the lane sets, the console asks for the +// list after every key. The IDE closes the console's list 100 ms after the code editor // loses the focus, so the focus moves to the console before the first line, and // each test checks that the console has it before and after. // -// Each test states what BETA 1010 does. If one fails after an IDE update, the IDE +// Each test states what BETA 1034 does. If one fails after an IDE update, the IDE // has changed: update the entry "A space typed in the Debug Console accepts the // IntelliSense list's selection, so `Print x` becomes `Printerx`" in // BUGS-TO-REPORT.md, or its report in bugs/filed/, and then this file. @@ -101,10 +101,13 @@ scenario("a space in the Debug Console", (lane) => { before(async () => { c = await lane.open(PROJECT); + // The default is LEGACY since BETA 1033 (MODERN before), in which the console + // opens its list only on a ".", so the lane sets MODERN for the IDE it runs. + await c.evaluate(`liveIDEOptions.intellisenseMode = "MODERN"; changedIdeOptions();`); assert.equal( await c.evaluate(`liveIDEOptions["intellisenseMode"]`), "MODERN", - "the IDE's IntelliSense mode is not its default, MODERN, in which the console asks after every key", + "the IDE's IntelliSense mode is not MODERN, in which the console asks after every key", ); await openFile(c, FILE, { line: BREAK, column: 9 }); await setCursor(c, BREAK, 9); @@ -123,10 +126,7 @@ scenario("a space in the Debug Console", (lane) => { test("Print total becomes Printertotal, which the console refuses", async () => { assert.equal(await type("Print total"), "Printertotal"); - assert.ok( - await enter((l) => l === "(compile error: Unrecognized symbol 'Printertotal')"), - "the console did not refuse it", - ); + assert.ok(await enter(refused), "the console did not refuse it"); }); test("Escape before the space keeps it, and Print total prints 5", async () => { diff --git a/test/ide/customising.test.mjs b/test/ide/customising.test.mjs index 22695a113..fa7955247 100644 --- a/test/ide/customising.test.mjs +++ b/test/ide/customising.test.mjs @@ -1,12 +1,8 @@ -// Customising the IDE: custom themes and keyboard-shortcut groups, tested against three entries in -// BUGS-TO-REPORT.md: -// -// "A `Dark.theme` or `Light.theme` in `%APPDATA%\twinBASIC\themes` stops every custom theme from -// inheriting, and Reload from disk from applying the theme" (bugs/theme-override-breaks-inheritance) -// "Two themes that inherit from each other freeze the IDE, and choosing one fails with a stack -// overflow" (bugs/theme-inherit-loop) -// "A keyboard-shortcut group whose name contains `|` switches other groups on and off" -// (bugs/keyboard-group-bar-name) +// Customising the IDE: custom themes and keyboard-shortcut groups, tested against the entry in +// BUGS-TO-REPORT.md "A `Dark.theme` or `Light.theme` in `%APPDATA%\twinBASIC\themes` stops every +// custom theme from inheriting, and Reload from disk from applying the theme" +// (bugs/theme-override-breaks-inheritance), and for what BETA 1034 does where two retired entries +// (a theme inheritance loop, and a group name holding `|`) were defects up to BETA 1010. // // No project is opened: each IDE starts as from its icon, and the New / Open dialog is cancelled. // The custom theme files go only into the lane's own APPDATA (<work>\appdata\twinBASIC\themes), which @@ -24,7 +20,7 @@ // // The tests share the lane's IDE in order: the first two run in an IDE started with one custom theme, // AtStart (inherits light); the third starts a new IDE with a Dark.theme beside it; the fourth uses -// whichever IDE is open. Each test states what BETA 1010 does. If one fails after an IDE update, the +// whichever IDE is open. Each test states what BETA 1034 does. If one fails after an IDE update, the // IDE has changed: update the entry in BUGS-TO-REPORT.md, or its report in bugs/filed/, the WARNING on // docs/IDE/Customising/Themes.md or Keyboard-Shortcuts.md, and then this file. // @@ -70,6 +66,10 @@ const GUARD_JS = `(() => { }); window.__errors = []; window.addEventListener("error", (e) => window.__errors.push(String(e.message))); + // Every message msgBox shows, as text: a box the Enter that answered a name box can close at once. + window.__msg = []; + const real = msgBox; + msgBox = function (t, ...r) { window.__msg.push(String(t).replace(/<[^>]+>/g, " ").replace(/\\s+/g, " ").trim()); return real.apply(this, [t, ...r]); }; window.__maxGap = 0; let last = performance.now(); setInterval(() => { @@ -189,36 +189,29 @@ scenario("customising the IDE", (lane) => { assert.equal(s.menu, GREEN, `Reload from disk did not apply the edit: ${JSON.stringify(s)}`); }); - test("two themes that inherit each other freeze the page, and choosing one fails with a stack overflow", async (t) => { + // Up to BETA 1010 the loop froze the page for seconds, and choosing either theme failed with a + // stack overflow; BETA 1034 refuses the loop when it reads the themes. + test("two themes that inherit each other: Reload from disk names one in an alert, leaves the other out, and the page does not stop", async (t) => { if (!lane.run) await startIde(); writeTheme("LoopA", theme("LoopB", LOOP_A)); writeTheme("LoopB", theme("LoopA", "rgb(2, 2, 2)")); await c.evaluate(`window.__maxGap = 0; window.__errors.length = 0`); + c.dialogs.length = 0; await chooseTheme("Reload from disk"); - const read = await waitFor( - c, - () => c.evaluate(`customThemes.length === customThemesCount && customThemes.some((t) => t.name === "LoopB")`), - { timeout: 60 * 1000, interval: 500 }, - ); - assert.ok(read, "Reload from disk never read LoopA.theme and LoopB.theme"); - await sleep(500); + const alerted = await waitFor(c, async () => c.dialogs.length > 0, { timeout: 20 * 1000, interval: 250 }); + assert.ok(alerted, "Reload from disk showed no alert"); + await sleep(1500); + // The alert is answered by the harness; taken out here, the lane's close does not fail on it. + const dialogs = c.dialogs.splice(0).map((d) => `${d.type}: ${d.message}`); const gap = Math.round(await c.evaluate("window.__maxGap")); - t.diagnostic(`the page did not run for ${gap} ms`); - assert.ok(gap >= 2000, `the page never stopped for 2 s: its longest pause was ${gap} ms`); + const errors = await c.evaluate("window.__errors.slice()"); const menu = await themeMenu(); - assert.ok(menu.includes("LoopB (undefined)"), `LoopB is not listed as LoopB (undefined): ${JSON.stringify(menu)}`); - const loopA = menu.find((m) => m.replace("[x] ", "").startsWith("LoopA (")); - assert.ok(loopA, `LoopA is not listed: ${JSON.stringify(menu)}`); - await c.evaluate(`window.__errors.length = 0`); - await chooseTheme("LoopA"); - const s = await themeState(); - t.diagnostic(`after choosing LoopA: ${JSON.stringify(s)}`); - assert.equal(s.colorTheme, "LoopA", `choosing LoopA did not select it: ${JSON.stringify(s)}`); - assert.notEqual(s.menu, LOOP_A, `LoopA's menu colour was applied: ${JSON.stringify(s)}`); - assert.ok( - s.errors.some((e) => /Maximum call stack size exceeded/.test(e)), - `choosing LoopA raised no stack overflow: ${JSON.stringify(s.errors)}`, - ); + t.diagnostic(JSON.stringify({ dialogs, gap, errors, menu })); + assert.deepEqual(dialogs, ["alert: Invalid theme file detected: LoopB.theme\n(recursive inheritance)"]); + assert.ok(gap < 2000, `the page stopped for ${gap} ms`); + assert.deepEqual(errors, []); + assert.ok(!menu.some((m) => m.replace("[x] ", "").startsWith("LoopA")), `LoopA is listed: ${JSON.stringify(menu)}`); + assert.ok(menu.includes("LoopB (Dark)"), `LoopB is not listed as LoopB (Dark): ${JSON.stringify(menu)}`); }); test("a Dark.theme in the APPDATA themes folder unlinks every custom theme, and Reload from disk stops applying", async (t) => { @@ -254,22 +247,25 @@ scenario("customising the IDE", (lane) => { assert.equal(s.menu, RED, `Reload from disk applied the edit: ${JSON.stringify(s)}`); }); - test("a group named A|B switches B on with it, and toggling B twice switches both off", async (t) => { + // Up to BETA 1010 a group named A|B could be added, and it switched B on and off with it, since the + // IDE keeps the groups that are on as |name| pairs; BETA 1034 refuses such a name, in the Manage + // Panel Layouts dialog too, and refuses a name already in use. + test("Add New... refuses a group or layout name that contains | or is in use, with a message, and adds nothing", async (t) => { if (!lane.run) await startIde(); // The user's own groups, which the IDE read from the registry, are set aside in the page. await c.evaluate( `customKeyboardShortcutGroups = {}; activeKeyboardShortcutGroupNames = ""; syncActiveKeyboardShortcuts()`, ); - // Manage Keyboard Shortcuts, Add New..., the name, Enter, Save Changes. - async function addGroup(name) { - await c.evaluate(`executeIdeCommand("tbKeyboardShortcuts_ShowManageKeyboardShortcuts")`); + // The dialog a command opens, checked by its title. + async function openDialog(command, title) { + await c.evaluate(`executeIdeCommand(${JSON.stringify(command)})`); await sleep(800); - assert.deepEqual( - await modalTitles(), - ["Manage Keyboard Shortcuts"], - "the Manage Keyboard Shortcuts dialog did not open", - ); + assert.deepEqual(await modalTitles(), [title], `the ${title} dialog did not open`); + } + // Add New..., the name, Enter: the messages msgBox showed. A box the Enter left open is answered. + async function addName(name) { + await c.evaluate("window.__msg.length = 0"); await clickModalButton("Add New..."); const box = await c.evaluate(`(() => { const i = document.querySelector(".configEditorEntryNew"); @@ -281,42 +277,34 @@ scenario("customising the IDE", (lane) => { await typeText(c, name); await pressKey(c, "Enter"); await sleep(500); - await clickModalButton("Save Changes"); - assert.deepEqual(await modalTitles(), [], "Save Changes did not close the dialog"); + if ((await modalTitles()).length > 1) await clickModalButton("OK"); + return c.evaluate("window.__msg.splice(0)"); } - + const saveDisabled = () => c.evaluate(`document.getElementById("SAVEBTN").classList.contains("disabled")`); const keyState = () => c.evaluate(`({ groups: Object.keys(customKeyboardShortcutGroups), active: activeKeyboardShortcutGroupNames, - ticked: getCustomKeyboardShortcutMenuOptions().filter((o) => o.name).map((o) => (o.codicon === "check" ? "[x] " : "") + o.name.replace(/^.* \\d+\\. /, "")), })`); - await addGroup("A|B"); - await addGroup("B"); - let s = await keyState(); - t.diagnostic(`both added: ${JSON.stringify(s)}`); - assert.deepEqual(s.groups, ["A|B", "B"], `the groups are not A|B and B: ${JSON.stringify(s)}`); - assert.equal(s.active, "|A|B||B|", `both groups are not on: ${JSON.stringify(s)}`); - assert.deepEqual(s.ticked, ["[x] A|B", "[x] B"], `both groups are not ticked: ${JSON.stringify(s)}`); + await openDialog("tbKeyboardShortcuts_ShowManageKeyboardShortcuts", "Manage Keyboard Shortcuts"); + assert.deepEqual(await addName("A|B"), ["Group name cannot contain '|'"]); + assert.equal(await saveDisabled(), true, "Save Changes is enabled after the refused name"); + assert.deepEqual(await addName("B"), []); + assert.equal(await saveDisabled(), false, "Save Changes is not enabled after B"); + assert.deepEqual(await addName("B"), ["Group already exists"]); + await clickModalButton("Save Changes"); + assert.deepEqual(await modalTitles(), [], "Save Changes did not close the dialog"); + const s = await keyState(); + t.diagnostic(`keyboard groups: ${JSON.stringify(s)}`); + assert.deepEqual(s, { groups: ["B"], active: "|B|" }); - // B is the second custom group: Window > Keyboard Shortcuts > Custom 2. B runs this command. - await c.evaluate(`executeIdeCommand("tbKeyboardShortcuts_ToggleActiveKeyboardShortcutGroupCustom2")`); - await sleep(500); - s = await keyState(); - t.diagnostic(`B clicked once: ${JSON.stringify(s)}`); - assert.equal(s.active, "|A|B|", `the first click on B did not leave |A|B|: ${JSON.stringify(s)}`); - assert.deepEqual( - s.ticked, - ["[x] A|B", "[x] B"], - `B is not still ticked after the first click: ${JSON.stringify(s)}`, - ); - - await c.evaluate(`executeIdeCommand("tbKeyboardShortcuts_ToggleActiveKeyboardShortcutGroupCustom2")`); - await sleep(500); - s = await keyState(); - t.diagnostic(`B clicked twice: ${JSON.stringify(s)}`); - assert.equal(s.active, "|A", `the second click on B did not leave |A: ${JSON.stringify(s)}`); - assert.deepEqual(s.ticked, ["A|B", "B"], `A|B and B are not both off: ${JSON.stringify(s)}`); + await openDialog("tbPanels_ShowManagePanelLayouts", "Manage Panel Layouts"); + assert.deepEqual(await addName("A|B"), ["Group name cannot contain '|'"]); + assert.deepEqual(await addName("Mine"), []); + assert.deepEqual(await addName("Mine"), ["Group already exists"]); + await clickModalButton("Cancel"); + assert.deepEqual(await modalTitles(), [], "Cancel did not close the dialog"); + assert.equal(await c.evaluate(`"Mine" in customPanelLayouts`), false, "Cancel kept the layout Mine"); }); }); diff --git a/test/ide/export.test.mjs b/test/ide/export.test.mjs index c08826ed0..cbaa45f01 100644 --- a/test/ide/export.test.mjs +++ b/test/ide/export.test.mjs @@ -4,7 +4,7 @@ // exports into, and every folder a junction in one points to, is inside the // lane's work folder: one of the behaviours tested deletes through a junction. // -// Each test states what BETA 1010 does. If one fails after an IDE update, +// Each test states what BETA 1034 does. If one fails after an IDE update, // the IDE has changed: update the matching entry in BUGS-TO-REPORT.md or // bugs/filed/, and then this file. // @@ -75,25 +75,23 @@ scenario("Export Project", (lane) => { assert.ok(packages.includes("VBA"), `no Packages\\VBA among ${packages.join(", ")}`); }); - // bugs/export-verbose-done-escaped: the compiler sends each DONE line in - // three parts, "[EXPORT] DONE: ", the path and the line break, and the - // console's debugOutputPartial() passes the text that continues an open line - // through TEXTtoHTML() twice (twinbasic/twinbasic#2444's cause), so each - // backslash is stored as &#92; and drawn as \. The DELETED lines, - // sent whole, are right; so are the files. - test("with Export Verbose, every DONE line shows \ for each backslash of the path, and the files are right", async () => { + // The compiler sends each DONE line in three parts, "[EXPORT] DONE: ", the + // path and the line break. Up to BETA 1010 the console's debugOutputPartial() + // passed the text that continues an open line through TEXTtoHTML() twice, so + // each backslash was drawn as \; BETA 1034 draws the backslashes. + test("with Export Verbose, every DONE line shows the path's backslashes, and the files are right", async () => { const out = path.join(root, "verbose"); mkdirSync(out); const lines = await exportTo(out); const done = lines.filter((l) => l.startsWith("DONE: ")); assert.equal(lines[0], `exporting current project to "\\\\?\\${out}\\"...`); assert.match(lines.at(-1), /^COMPLETED \(\d+ folders, \d+ files\)$/); - assert.ok(done.includes("DONE: \Settings"), `no DONE: \Settings among ${JSON.stringify(done.slice(0, 3))}`); - assert.ok(done.includes("DONE: \Sources\Startup.twin")); + assert.ok(done.includes("DONE: \\Settings"), `no DONE: \\Settings among ${JSON.stringify(done.slice(0, 3))}`); + assert.ok(done.includes("DONE: \\Sources\\Startup.twin")); assert.deepEqual( - done.filter((l) => l.includes("\\") || !l.includes("\")), + done.filter((l) => l.includes("\")), [], - "a DONE line shows a backslash", + "a DONE line shows \", ); // As the pane draws them: the rows it has drawn, which are the last ones. const drawn = await c.evaluate( @@ -101,12 +99,12 @@ scenario("Export Project", (lane) => { ); assert.ok(drawn.length > 0, "the pane draws no DONE row"); assert.deepEqual( - drawn.filter((t) => t.includes("\\") || !t.includes("\")), + drawn.filter((t) => t.includes("\") || !t.includes("\\")), [], - "a drawn DONE row shows a backslash", + "a drawn DONE row shows \, or no backslash", ); - // Each path, with its backslashes put back, is a file the export wrote. - const missing = done.map((l) => l.slice(6).replaceAll("\", "\\")).filter((r) => !existsSync(path.join(out, r))); + // Each path is a file the export wrote. + const missing = done.map((l) => l.slice(6)).filter((r) => !existsSync(path.join(out, r))); assert.deepEqual(missing, []); const startup = path.join("Sources", "Startup.twin"); assert.equal(readFileSync(path.join(out, startup), "utf8"), readFileSync(path.join(PROJECT, startup), "utf8")); diff --git a/test/ide/lanes.mjs b/test/ide/lanes.mjs index 567b1558b..35ee0ad65 100644 --- a/test/ide/lanes.mjs +++ b/test/ide/lanes.mjs @@ -46,4 +46,7 @@ export default [ { file: "building.test.mjs" }, { file: "building-hklm.test.mjs" }, { file: "building-llvm-box.test.mjs" }, + { file: "zoom.test.mjs" }, + { file: "object-browser.test.mjs" }, + { file: "language.test.mjs" }, ]; diff --git a/test/ide/language.test.mjs b/test/ide/language.test.mjs new file mode 100644 index 000000000..d7e931bb6 --- /dev/null +++ b/test/ide/language.test.mjs @@ -0,0 +1,268 @@ +// The language of the IDE and the compiler's messages, tested for what docs/IDE/Customising/index.md +// (What changes when you switch, and Language packs) and the FAQ's localization entry say: since +// BETA 1034 the compiler takes the text of each warning and error from the language pack, by a +// string named after its code. en-gb.lang holds the English text of the warnings and of the error +// TB5079, where {0}, {1} ... are the values the compiler fills in; a string named after another +// code replaces that message too, with the compiler's English message as {0}. No pack that ships +// with the IDE has any of these strings. A switch changes no message already shown: the compiler +// uses the new language when it next checks the file, after an edit or a restart of the compiler. +// +// It is also tested against one entry in BUGS-TO-REPORT.md: +// +// "A language pack's string is cut at a semicolon followed by a space, so TB0022's message ends at +// *Suspicious array assignment*" (bugs/language-pack-semicolon-cut) +// +// The project in probes/language has one file, Language.twin, with the warning TB0024 (an unused +// local variable, which its Settings makes a warning). The lane types two lines into it that give +// the errors TB5079 (an unrecognised name) and TB5179 (an expression cut short), later one more +// unused variable, and last four lines that give the warning TB0022 (an array assigned to one of +// another type). The pack, zz-zz.lang ("Probe Pack"), goes only into the lane's own APPDATA +// (<work>\appdata\twinBASIC\locale), which the IDE reads as its second locale folder. It inherits +// en-gb and gives the File menu, TB0024, TB5079 and TB5179 texts of its own, the Help menu a text +// with "; " inside its quotes and the View menu one with a ";" and no space after it. +// +// Choosing a language saves the IDE's options. The lane's IDE writes none of its settings +// (--no-save-ide-settings, IDE_FLAGS in scripts/lib/tb-ide.mjs). The page's hostAppObject is +// replaced by a proxy whose ChangeWindowSetting and RemoveRecentsList calls do nothing, the two +// calls the flags do not guard, as customising.test.mjs does. Nothing here reaches SaveSetting, so +// lanes.mjs names no settings for this lane. +// +// The tests share the lane's IDE in order. Each states what BETA 1034 does; the test named "control" +// passes whether or not the defect is fixed. If another fails after an IDE update, the IDE has +// changed: update the entry in BUGS-TO-REPORT.md, or its report in bugs/filed/, the two pages +// above and Compiler-Warnings.md (TB0022), and then this file. +// +// Run it with ide-test.bat, which gives it a lane; on its own it is skipped. + +import assert from "node:assert/strict"; +import { mkdirSync, writeFileSync } from "node:fs"; +import path from "node:path"; +import { before, test } from "node:test"; +import { fileURLToPath } from "node:url"; +import { sleep } from "../../scripts/lib/tb-ide.mjs"; +import { + clickAt, + openFile, + pressKey, + restartCompiler, + setCursor, + typeText, + waitFor, +} from "../../scripts/lib/tb-operate.mjs"; +import { scenario } from "../addin/scenario.mjs"; + +const HERE = path.dirname(fileURLToPath(import.meta.url)); +const PROJECT = path.join(HERE, "probes", "language"); +const FILE = "/LanguageProbe/Sources/Language.twin"; +const DIM_LINE = 5; // Dim unused As Long + +const PACK_NAME = "Probe Pack"; +const BRITISH = "English (British English)"; +const PACK = [ + `FriendlyName: "${PACK_NAME}";`, + "inherits: en-gb;", + 'MenuCaptionFile: "PFILE";', + "TB0024: \"PROBE unused local '{0}'\";", + "TB5079: \"PROBE unrecognised symbol '{0}'\";", + 'TB5179: "PROBE TB5179 [{0}]";', + 'MenuCaptionHelp: "PHELP; CUT";', + 'MenuCaptionView: "PVIEW;WHOLE";', + "", +].join("\r\n"); + +// TB0022's text in en-gb.lang, which holds a semicolon and a space. +const TB0022_WHOLE = "Suspicious array assignment; subtypes do not match"; +const TB0022_CUT = "Suspicious array assignment"; + +// What the compiler reports for the probe's lines, in English and in the pack. `Debug.Print 1 +` +// gives two errors, TB5179 and a TB5079 for the end of the line. +const ENGLISH = { + unused: "TB0024: Unused local variable 'unused'", + spare: "TB0024: Unused local variable 'spare'", + name: "TB5079: Unrecognized symbol 'noSuchName'", + eol: "TB5079: Unrecognized symbol '{unexpected end of line}'", + cut: "TB5179: Unexpected end of expression", +}; +const PACKED = { + unused: "TB0024: PROBE unused local 'unused'", + spare: "TB0024: PROBE unused local 'spare'", + name: "TB5079: PROBE unrecognised symbol 'noSuchName'", + eol: "TB5079: PROBE unrecognised symbol '{unexpected end of line}'", + cut: "TB5179: PROBE TB5179 [Unexpected end of expression]", +}; +const TYPED = ["unused", "name", "eol", "cut"]; +const EDITED = ["unused", "spare", "name", "eol", "cut"]; +const messages = (table, keys) => keys.map((k) => table[k]); + +const GUARD_JS = `(() => { + if (window.__guarded) return; + window.__guarded = true; + const blocked = new Set(["ChangeWindowSetting", "RemoveRecentsList"]); + hostAppObject = new Proxy(hostAppObject, { + get(target, key) { + if (blocked.has(key)) return async () => undefined; + return Reflect.get(target, key); + }, + }); +})()`; + +// The messages as the code editor has them ("TB0024: ...") and the DIAGNOSTICS panel's rows as +// they read ("TB0024Unused ... [5,13]"), the language chosen and the captions of the File, Help and +// View menus. +const STATE_JS = `(() => { + const rows = [...(problemsPanel.tree.sectionHeader.parentNode).querySelectorAll(".problemNodeItem")] + .map((e) => e.innerText.replace(/\\s+/g, " ").trim()); + const markers = monaco.editor.getModelMarkers({}).map((m) => m.message).sort(); + return { language: liveIDEOptions.language, file: rootMenuFile.innerText, help: rootMenuHelp.innerText, + view: rootMenuView.innerText, rows, markers }; +})()`; + +// Each pack's codes: the names of its strings that are a diagnostic's code. +const PACK_CODES_JS = `Object.fromEntries(customLanguages.map((l) => + [l.fullName, [...l.text.matchAll(/(?:^|\\n)[ \\t]*(TB\\d{4})[ \\t]*:/g)].map((m) => m[1])]))`; + +scenario("language", (lane) => { + let c = null; + const state = () => c.evaluate(STATE_JS); + + // True when the editor and the panel both hold exactly `messages`. + const holds = (s, messages) => { + const want = [...messages].sort(); + if (JSON.stringify(s.markers) !== JSON.stringify(want)) return false; + // A row is the code, the message and the position: "TB0024Unused local variable 'unused' [5,13]". + const rows = s.rows.map((r) => r.replace(/ \[\d+,\d+\]$/, "").replace(/^(TB\d{4})/, "$1: ")).sort(); + return JSON.stringify(rows) === JSON.stringify(want); + }; + const waitForMessages = async (t, what, messages) => { + const ok = await waitFor(c, async () => holds(await state(), messages), { timeout: 30 * 1000, interval: 300 }); + const s = await state(); + t.diagnostic(`${what}: ${JSON.stringify(s)}`); + assert.ok(ok, `${what}: the messages are not ${JSON.stringify(messages)}`); + return s; + }; + + // Window > Language, then the pack named `name`, with the mouse: the submenu opens on a hover. + async function chooseLanguage(name) { + const root = await c.evaluate( + `(() => { const r = rootMenuWindows.getBoundingClientRect(); return { x: r.x + r.width / 2, y: r.y + r.height / 2 }; })()`, + ); + await clickAt(c, root.x, root.y); + await sleep(400); + const item = await c.evaluate(`(() => { + const e = [...document.querySelectorAll("#contextMenu > *")].find((x) => x.querySelector(".codicon-globe")); + const r = e && e.getBoundingClientRect(); + return r ? { x: r.x + r.width / 2, y: r.y + r.height / 2 } : null; + })()`); + assert.ok(item, "the Window menu has no Language item"); + await c.send("Input.dispatchMouseEvent", { type: "mouseMoved", x: item.x, y: item.y }); + const pick = await waitFor( + c, + () => + c.evaluate(`(() => { + const e = [...document.querySelectorAll("#contextMenuSUB > *")].find((x) => x.innerText.trim() === ${JSON.stringify(name)}); + const r = e && e.getBoundingClientRect(); + return r && r.width ? { x: r.x + r.width / 2, y: r.y + r.height / 2 } : null; + })()`), + { timeout: 5 * 1000 }, + ); + assert.ok(pick, `the Language submenu has no item ${name}`); + await c.send("Input.dispatchMouseEvent", { type: "mouseMoved", x: item.x + 40, y: pick.y }); + await clickAt(c, pick.x, pick.y); + await sleep(500); + } + + // Types `lines` below line `after`, each on a line of its own, with no completion accepted. + async function addLines(after, lines) { + await setCursor(c, after, 1); + await pressKey(c, "End"); + for (const line of lines) { + await pressKey(c, "Escape"); + await pressKey(c, "Enter"); + await typeText(c, line); + await sleep(300); + } + await pressKey(c, "Escape"); + } + + before(async () => { + const locale = path.join(lane.appdataDir(), "twinBASIC", "locale"); + mkdirSync(locale, { recursive: true }); + writeFileSync(path.join(locale, "zz-zz.lang"), PACK); + c = await lane.open(PROJECT); + await c.evaluate(GUARD_JS); + await c.evaluate(`executeIdeCommand("tbProblems_ShowPanel")`); + await openFile(c, FILE, { line: DIM_LINE, column: 1 }); + }); + + test("en-gb.lang names the warnings and the error TB5079, and no pack that ships with the IDE names a code", async (t) => { + const codes = await c.evaluate(PACK_CODES_JS); + t.diagnostic(JSON.stringify(codes)); + const british = codes["en-gb.lang"]; + assert.ok(british, "no en-gb.lang"); + assert.ok(british.includes("TB5079"), "en-gb.lang has no TB5079"); + assert.deepEqual( + british.filter((k) => !/^TB00\d\d$/.test(k)), + ["TB5079"], + "en-gb.lang names a code that is neither a warning nor TB5079", + ); + assert.ok(!british.includes("TB5179"), "en-gb.lang names TB5179"); + const shipped = Object.entries(codes).filter(([f, k]) => f !== "en-gb.lang" && f !== "zz-zz.lang" && k.length); + assert.deepEqual(shipped, [], "a shipped pack names a code"); + }); + + test("in British English the compiler's messages are its own English text", async (t) => { + await waitForMessages(t, "at start", [ENGLISH.unused]); + await addLines(DIM_LINE, ["Debug.Print noSuchName", "Debug.Print 1 +"]); + await waitForMessages(t, "typed", messages(ENGLISH, TYPED)); + }); + + test("a switch to a pack changes the IDE's own text at once and no message already shown", async (t) => { + await chooseLanguage(PACK_NAME); + const s = await state(); + assert.equal(s.language, "zz-zz"); + assert.equal(s.file, "PFILE"); + await sleep(5000); + await waitForMessages(t, "five seconds after the switch", messages(ENGLISH, TYPED)); + }); + + test("after an edit every message takes the pack's text by its code, {0} the English message for a code en-gb.lang lacks", async (t) => { + await addLines(DIM_LINE, ["Dim spare As Long"]); + await waitForMessages(t, "edited", messages(PACKED, EDITED)); + }); + + test("a switch back keeps the pack's text, and a restart of the compiler gives the English back", async (t) => { + await chooseLanguage(BRITISH); + assert.equal((await state()).file, "File"); + await sleep(5000); + await waitForMessages(t, "five seconds after the switch", messages(PACKED, EDITED)); + await restartCompiler(c, { project: lane.project }); + await waitForMessages(t, "restarted", messages(ENGLISH, EDITED)); + }); + + test("a restart of the compiler under the pack gives the pack's text", async (t) => { + await chooseLanguage(PACK_NAME); + await restartCompiler(c, { project: lane.project }); + await waitForMessages(t, "restarted", messages(PACKED, EDITED)); + }); + + test("a ';' and a space end a pack's string inside its quotes: the Help menu reads PHELP, and TB0022's message ends at its semicolon", async (t) => { + const s = await state(); + const read = await c.evaluate(`({ + file: customLanguages.find((l) => l.fullName === "en-gb.lang").text.includes(${JSON.stringify(TB0022_WHOLE)}), + table: activeLanguageData.TB0022, + })`); + t.diagnostic(JSON.stringify({ help: s.help, read })); + assert.equal(s.help, "PHELP"); + assert.ok(read.file, "en-gb.lang does not hold TB0022's whole text"); + assert.equal(read.table, TB0022_CUT); + await addLines(DIM_LINE, ["Dim counts() As Long", "Dim small() As Integer", "ReDim small(3)", "counts = small"]); + const tb0022 = () => state().then((x) => x.markers.find((m) => m.startsWith("TB0022"))); + const shown = await waitFor(c, tb0022, { timeout: 30 * 1000, interval: 300 }); + t.diagnostic(`TB0022's marker: ${JSON.stringify(shown)}`); + assert.equal(shown, `TB0022: ${TB0022_CUT}`); + }); + + test("control: a ';' with no space after it stays in a pack's string: the View menu reads PVIEW;WHOLE", async () => { + assert.equal((await state()).view, "PVIEW;WHOLE"); + }); +}); diff --git a/test/ide/object-browser.test.mjs b/test/ide/object-browser.test.mjs new file mode 100644 index 000000000..52d301c4c --- /dev/null +++ b/test/ide/object-browser.test.mjs @@ -0,0 +1,776 @@ +// The Object Browser, tested for what docs/IDE/Code/Object-Browser.md says, for the View menu's +// entry (docs/IDE/Menu/View.md), for what Editor.md says of F2 and Rename Symbol, and against one +// entry in BUGS-TO-REPORT.md: +// +// "In the Object Browser, Tab moves the focus from the search box to Aa and no further" +// (bugs/object-browser-tab-stops) +// +// The project in probes/object-browser has two files: Helpers.twin, a module with a constant, a +// global variable, an Enum, a Type, a Declare, the function Twice, a Private Sub and Sub Main, and +// Shapes.twin, with the class Shape (a Private field, an Event, a Property Get and Let, a Function +// and a Sub) and the class Circle, which Inherits Shape and adds a field and a Function. +// +// The Object Browser keeps its settings in the IDE setting OBJECT_BROWSER, which the IDE reads at +// each opening and writes at each change. The lane's IDE writes none of its settings +// (--no-save-ide-settings, IDE_FLAGS in scripts/lib/tb-ide.mjs) and is answered "no saved value" +// for this one (BLANKED_KEYS in scripts/lib/tb-defaults.mjs). So the page's host object is +// replaced by a proxy that keeps OBJECT_BROWSER in the page, which the test of what is remembered +// reads back; the same proxy blocks the two calls the flags do not guard that write the user's +// registry, ChangeWindowSetting and RemoveRecentsList, as code-editor.test.mjs does. The defaults +// hook answers OBJECT_BROWSER from its accessor on window.hostAppObject, so the property is +// replaced rather than assigned. THE USER'S CLIPBOARD IS NEVER TOUCHED: the Object Browser's copy +// button calls navigator.clipboard.writeText, which is replaced by a recorder first. Nothing here +// reaches SaveSetting, so lanes.mjs names no settings for this lane. +// +// The tests share the lane's IDE in order, and each opens an Object Browser of its own. Each test +// states what BETA 1034 does; the test named "control" passes whether or not the defect is fixed. +// If another fails after an IDE update, the IDE has changed: update the entry in +// BUGS-TO-REPORT.md, or its report in bugs/filed/, the pages above, and then this file. +// +// Run it with ide-test.bat, which gives it a lane; on its own it is skipped. + +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import path from "node:path"; +import { before, test } from "node:test"; +import { fileURLToPath } from "node:url"; +import { sleep } from "../../scripts/lib/tb-ide.mjs"; +import { + afterReveal, + clickAt, + openFile, + pressKey, + select, + setCursor, + typeText, + waitFor, +} from "../../scripts/lib/tb-operate.mjs"; +import { scenario } from "../addin/scenario.mjs"; + +const HERE = path.dirname(fileURLToPath(import.meta.url)); +const PROJECT = path.join(HERE, "probes", "object-browser"); +const SOURCES = "/ObjectBrowserProbe/Sources/"; +const HELPERS = `${SOURCES}Helpers.twin`; +const SHAPES = `${SOURCES}Shapes.twin`; +const read = (name) => readFileSync(path.join(PROJECT, "Sources", name), "utf8").split(/\r?\n/); +const HELPERS_SRC = read("Helpers.twin"); +const SHAPES_SRC = read("Shapes.twin"); +const lineIn = (src, text) => { + const n = src.findIndex((l) => l.includes(text)) + 1; + assert.ok(n > 0, `no line holding ${JSON.stringify(text)}`); + return n; +}; +const TWICE = lineIn(HELPERS_SRC, "Public Function Twice("); +const SHAPE = lineIn(SHAPES_SRC, "Class Shape"); +const AREA = lineIn(SHAPES_SRC, "Public Function Area("); +const DESCRIBE = lineIn(SHAPES_SRC, "Public Sub Describe("); +const CIRCLE = lineIn(SHAPES_SRC, "Class Circle"); +const CIRCUMFERENCE = lineIn(SHAPES_SRC, "Public Function Circumference("); +const J = JSON.stringify; + +// Keeps OBJECT_BROWSER in the page, blocks the registry writes the flags do not guard, and +// records every copy (see the top of this file). +const GUARD_JS = `(() => { + if (window.__guarded) return; + window.__guarded = true; + window.__obSetting = ""; + window.__copies = []; + const blocked = new Set(["ChangeWindowSetting", "RemoveRecentsList"]); + const mine = new Proxy(hostAppObject, { + get(target, key) { + if (blocked.has(key)) return async () => undefined; + const m = Reflect.get(target, key); + if (key === "GetIDESetting") return (...a) => (String(a[0]) === "OBJECT_BROWSER" ? Promise.resolve(window.__obSetting) : m(...a)); + if (key === "SaveIDESetting") + return (...a) => { + if (String(a[0]) !== "OBJECT_BROWSER") return m(...a); + window.__obSetting = String(a[1]); + }; + return m; + }, + }); + Object.defineProperty(window, "hostAppObject", { configurable: true, enumerable: true, get: () => mine, set: () => {} }); + navigator.clipboard.writeText = (t) => { window.__copies.push(String(t)); return Promise.resolve(); }; + navigator.clipboard.write = () => { window.__copies.push("(clipboard.write)"); return Promise.resolve(); }; +})()`; + +// The open Object Browser as a person sees it, or null when none is open. A row is its glyph, +// its name, and the text at its right (a component's library, an inherited member's base type, +// a result's kind), with * before the selected one. +const STATE_JS = `(() => { + const ob = window.__twinBasicObjectBrowser; + if (!ob) return null; + const root = ob.element; + const rows = (label) => { + const b = root.querySelector('.tbob-listbox[aria-label="' + label + '"]'); + if (!b || !b.getBoundingClientRect().width) return null; + return [...b.querySelectorAll(".tbob-item")].map((r) => + (r.classList.contains("tbob-active") ? "*" : "") + + r.querySelector(".tbob-glyph").textContent + " " + + r.querySelector(".tbob-itemname, .tbob-resultpath").textContent + + (r.querySelector(".tbob-origin, .tbob-resultkind") ? " (" + r.querySelector(".tbob-origin, .tbob-resultkind").textContent + ")" : "") + + (getComputedStyle(r).fontStyle === "italic" ? " italic" : "")); + }; + const a = document.activeElement; + return { + library: root.querySelector("select").selectedOptions[0].text, + libraries: [...root.querySelector("select").options].map((o) => o.text), + search: root.querySelector("input[type=search]").value, + matchCase: root.querySelector(".tbob-searchcase").getAttribute("aria-pressed") === "true", + view: root.querySelector(".tbob-viewbutton[aria-pressed=true]").textContent, + components: rows("Components"), + members: rows("Members"), + results: rows("Search results"), + counts: [...root.querySelectorAll(".tbob-count")].filter((e) => e.getBoundingClientRect().width).map((e) => e.textContent), + componentsWidth: Math.round(root.querySelector(".tbob-listpane").getBoundingClientRect().width), + description: root.querySelector(".tbob-description").innerText.replace(/\\s+/g, " ").trim(), + goToDefinition: getComputedStyle(document.getElementById("obGoToDefinition")).visibility, + focus: a === root.querySelector("input[type=search]") ? "search" : a.getAttribute("aria-label") || a.tagName, + }; +})()`; + +// Where a row is, scrolled into view, by its name: a component's or member's own name, or a +// result's full name. +const ROW_JS = (label, name) => `(() => { + const b = window.__twinBasicObjectBrowser.element.querySelector('.tbob-listbox[aria-label=${J(label)}]'); + const r = [...b.querySelectorAll(".tbob-item")].find((e) => e.querySelector(".tbob-itemname, .tbob-resultpath").textContent === ${J(name)}); + if (!r) return null; + r.scrollIntoView({ block: "nearest" }); + const q = r.getBoundingClientRect(); + return { x: q.x + q.width / 2, y: q.y + q.height / 2 }; +})()`; + +// Where the nth shown element a selector finds is. +const AT_JS = (css, n) => `(() => { + const e = [...document.querySelectorAll(${J(css)})].filter((x) => x.getBoundingClientRect().width)[${n}]; + if (!e) return null; + const q = e.getBoundingClientRect(); + return { x: q.x + q.width / 2, y: q.y + q.height / 2 }; +})()`; + +// The code editor: the caret, whether it is read-only, and whether it has the focus. +const EDITOR_JS = `(() => { + const p = editor.getPosition(); + return { + line: p.lineNumber, + column: p.column, + readOnly: editor.getOption(monaco.editor.EditorOption.readOnly), + focused: editor.hasTextFocus(), + }; +})()`; + +scenario("object-browser", (lane) => { + let c = null; + const state = () => c.evaluate(STATE_JS); + const isOpen = () => c.evaluate("!!window.__twinBasicObjectBrowser"); + const editorNow = () => c.evaluate(EDITOR_JS); + + async function clickRow(label, name, { clickCount = 1 } = {}) { + const p = await c.evaluate(ROW_JS(label, name)); + assert.ok(p, `the ${label} list has no row ${name}`); + await clickAt(c, p.x, p.y, { clickCount }); + await sleep(300); + } + async function clickOn(css, n = 0) { + const p = await c.evaluate(AT_JS(css, n)); + assert.ok(p, `nothing shown at ${css} (${n})`); + await clickAt(c, p.x, p.y); + await sleep(300); + } + async function waitOpen(open = true) { + const ok = await waitFor(c, async () => (await isOpen()) === open, { timeout: 15 * 1000, interval: 100 }); + assert.ok(ok, open ? "the Object Browser did not open" : "the Object Browser did not close"); + await sleep(300); + } + // A fresh Object Browser, opened by F2 from the code editor with nothing selected, in Browse. + async function fresh() { + if (await isOpen()) { + await pressKey(c, "Escape"); + await waitOpen(false); + } + await openFile(c, HELPERS, { line: 1, column: 1 }); + await afterReveal(c); + await c.evaluate("editor.focus()"); + await setCursor(c, 1, 1); + await pressKey(c, "F2"); + await waitOpen(); + if ((await state()).view !== "Browse") await clickOn(".tbob-dialog .tbob-viewbutton", 0); + } + async function search(text) { + await clickOn(".tbob-dialog input[type=search]"); + await pressKey(c, "a", { ctrl: true }); + await pressKey(c, "Backspace"); + if (text) await typeText(c, text); + await sleep(300); + } + async function setLibrary(text) { + const p = await c.evaluate(`(() => { + const s = window.__twinBasicObjectBrowser.element.querySelector("select"); + const o = [...s.options].find((x) => x.text === ${J(text)}); + if (!o) return false; + s.value = o.value; + s.dispatchEvent(new Event("change", { bubbles: true })); + return true; + })()`); + assert.ok(p, `the Project / Library box has no ${text}`); + await sleep(300); + } + // Ticks or clears a box in the open filter list, by the setting it stands for. + async function clickOption(setting) { + const p = await c.evaluate(`(() => { + const i = [...document.querySelectorAll(".tbob-filtermenu:not([hidden]) input")].find((x) => x.dataset.setting === ${J(setting)} || x.value === ${J(setting)}); + if (!i) return null; + const q = i.getBoundingClientRect(); + return { x: q.x + q.width / 2, y: q.y + q.height / 2 }; + })()`); + assert.ok(p, `the open list has no box for ${setting}`); + await clickAt(c, p.x, p.y); + await sleep(300); + } + const openList = () => + c.evaluate( + `[...document.querySelectorAll(".tbob-filtermenu")].filter((m) => !m.hidden).map((m) => m.innerText.replace(/\\s+/g, " ").trim()).join(" | ")`, + ); + const MEMBER_FILTER = ".tbob-dialog .tbob-filterbutton:not(.tbob-sortbutton)"; + + before(async () => { + c = await lane.open(PROJECT); + await openFile(c, HELPERS, { line: 1, column: 1 }); + await afterReveal(c); + await c.evaluate(GUARD_JS); + }); + + test("View has Object Browser, enabled with a project open, with the key F2, and it opens the Object Browser on the project", async (t) => { + await c.evaluate("editor.focus()"); + await setCursor(c, 1, 1); + await clickOn("#rootMenuView"); + const items = await c.evaluate( + `[...document.querySelectorAll("#contextMenu > *")].map((e) => ({ text: e.innerText.replace(/\\s+/g, " ").trim(), disabled: /disabled/i.test(e.className) })).filter((e) => e.text)`, + ); + t.diagnostic(J(items)); + const item = items.find((i) => i.text.startsWith("Object Browser")); + assert.ok(item, "View has no Object Browser"); + assert.equal(item.text, "Object Browser F2"); + assert.equal(item.disabled, false); + const at = await c.evaluate( + `(() => { const e = [...document.querySelectorAll("#contextMenu > *")].find((x) => x.innerText.trim().startsWith("Object Browser")); const q = e.getBoundingClientRect(); return { x: q.x + q.width / 2, y: q.y + q.height / 2 }; })()`, + ); + await clickAt(c, at.x, at.y); + await waitOpen(); + const title = await c.evaluate( + `[...document.querySelectorAll(".modalDialogContainer")].filter((m) => m.getBoundingClientRect().width).map((m) => m.querySelector(".modalTitleBar").innerText.trim())`, + ); + const s = await state(); + t.diagnostic(J({ title, s })); + assert.deepEqual(title, ["Object Browser"]); + assert.equal(s.library, "ObjectBrowserProbe (project)"); + assert.deepEqual(s.libraries, [ + "<All Libraries>", + "ObjectBrowserProbe (project)", + "AppGlobalClassProject", + "VB", + "VBRUN", + "VBA", + "stdole", + ]); + assert.equal(s.search, ""); + assert.equal(s.view, "Browse"); + assert.equal(s.focus, "search"); + }); + + test("F2 in the code editor opens the Object Browser with the selected text as its search; Rename Symbol's box stays hidden", async (t) => { + await pressKey(c, "Escape"); + await waitOpen(false); + await openFile(c, HELPERS, { line: TWICE, column: 1 }); + await afterReveal(c); + const col = HELPERS_SRC[TWICE - 1].indexOf("Twice") + 1; + await select(c, { startLine: TWICE, startColumn: col, endLine: TWICE, endColumn: col + 5 }); + await pressKey(c, "F2"); + await waitOpen(); + const s = await state(); + const rename = await c.evaluate( + `[...document.querySelectorAll(".rename-box")].map((e) => getComputedStyle(e).display)`, + ); + t.diagnostic(J({ s, rename })); + assert.equal(s.search, "Twice"); + assert.deepEqual(s.components, ["*M Helpers"]); + assert.deepEqual(s.members, ["ƒ Twice"]); + assert.ok( + rename.every((d) => d === "none"), + `the rename box shows: ${J(rename)}`, + ); + }); + + test("F2 with only a caret in the code opens it with an empty search", async (t) => { + await pressKey(c, "Escape"); + await waitOpen(false); + await c.evaluate("editor.focus()"); + await setCursor(c, TWICE, HELPERS_SRC[TWICE - 1].indexOf("Twice") + 3); + await pressKey(c, "F2"); + await waitOpen(); + const s = await state(); + t.diagnostic(J(s)); + assert.equal(s.search, ""); + }); + + // BETA 1010 opened Monaco's rename box here, with the focus in it; BETA 1034 opens nothing. + test("the editor's right-click menu still shows F2 against Rename Symbol, and choosing it opens no box and changes nothing", async (t) => { + await pressKey(c, "Escape"); + await waitOpen(false); + const before = await c.evaluate("editor.getModel().getValue()"); + const p = await c.evaluate(`(() => { + const r = editor.getDomNode().getBoundingClientRect(); + const q = editor.getScrolledVisiblePosition({ lineNumber: ${TWICE}, column: ${HELPERS_SRC[TWICE - 1].indexOf("Twice") + 3} }); + return { x: r.x + q.left + 2, y: r.y + q.top + q.height / 2 }; + })()`); + for (const type of ["mouseMoved", "mousePressed", "mouseReleased"]) { + await c.send("Input.dispatchMouseEvent", { + type, + x: p.x, + y: p.y, + button: type === "mouseMoved" ? "none" : "right", + buttons: type === "mousePressed" ? 2 : 0, + clickCount: 1, + }); + } + await sleep(500); + const items = await c.evaluate( + `[...document.querySelectorAll("#contextMenu > *")].map((e) => e.innerText.replace(/\\s+/g, " ").trim()).filter(Boolean)`, + ); + t.diagnostic(J(items)); + assert.ok(items.includes("Rename Symbol F2"), J(items)); + const item = await c.evaluate(`(() => { + const e = [...document.querySelectorAll("#contextMenu > *")].find((x) => x.innerText.replace(/\\s+/g, " ").trim() === "Rename Symbol F2"); + const q = e.getBoundingClientRect(); + return { x: q.x + q.width / 2, y: q.y + q.height / 2 }; + })()`); + await clickAt(c, item.x, item.y); + await sleep(2000); + const after = await c.evaluate(`(() => ({ + box: [...document.querySelectorAll(".rename-box")].some((b) => getComputedStyle(b).display !== "none"), + focus: editor.hasTextFocus(), + text: editor.getModel().getValue(), + }))()`); + t.diagnostic(J({ box: after.box, focus: after.focus })); + assert.equal(after.box, false, "Rename Symbol opened its box"); + assert.equal(after.focus, true, "the code lost the focus"); + assert.equal(after.text, before, "the code changed"); + }); + + test("Components lists the project's classes, modules, enums and types; a class's members include what it inherits, in italics with the base class's name", async (t) => { + await fresh(); + const s = await state(); + t.diagnostic(J(s)); + assert.deepEqual(s.components, ["*C Circle", "E Colour", "M Helpers", "T Point", "C Shape"]); + assert.deepEqual(s.members, [ + "ƒ Area (Shape) italic", + "⚡ Changed (Shape) italic", + "ƒ Circumference", + "S Describe (Shape) italic", + "P Name (Shape) italic", + "F Radius", + ]); + assert.deepEqual(s.counts, ["5 items", "6 items"]); + assert.ok(s.description.startsWith("Class Circle Public ObjectBrowserProbe Inherits: Shape"), s.description); + await clickRow("Components", "Helpers"); + const h = await state(); + t.diagnostic(J(h.members)); + assert.deepEqual(h.members, ["K BigValue", "G Counter", "ƒ GetTickCount", "S Main", "ƒ Twice"]); + await clickRow("Components", "Colour"); + assert.deepEqual((await state()).members, ["# Blue", "# Green", "# Red"]); + await clickRow("Components", "Point"); + const p = await state(); + assert.deepEqual(p.members, ["V X", "V Y"]); + assert.ok(p.description.includes("Declared in module: Helpers"), p.description); + }); + + test("the description shows the kind, the declaration and the file and line it is on", async (t) => { + await fresh(); + await clickRow("Components", "Helpers"); + await clickRow("Members", "Twice"); + const s = await state(); + t.diagnostic(s.description); + assert.equal( + s.description, + `Function Twice Public ObjectBrowserProbe · Helpers ObjectBrowserProbe.Helpers.Twice(ByVal n As Long) As Long Source: ${HELPERS} (line ${TWICE})`, + ); + assert.equal(s.goToDefinition, "visible"); + await clickRow("Components", "Shape"); + await clickRow("Members", "Name"); + const n = await state(); + t.diagnostic(n.description); + assert.ok(n.description.startsWith("Property Name Public Read / Write ObjectBrowserProbe · Shape"), n.description); + await clickRow("Components", "Circle"); + await clickRow("Members", "Area"); + const a = await state(); + t.diagnostic(a.description); + assert.ok(a.description.includes("Inherited from Shape"), a.description); + assert.ok(a.description.endsWith(`Source: ${SHAPES} (line ${AREA})`), a.description); + }); + + test("Private members show only with Show private members; inherited ones go without Show inherited members", async (t) => { + await fresh(); + await clickRow("Components", "Shape"); + assert.ok(!(await state()).members.some((m) => m.includes("mName"))); + await clickOn(MEMBER_FILTER, 1); + const list = await openList(); + t.diagnostic(list); + assert.ok( + list.startsWith( + "Show member types Display options Show inherited members Show private members Symbol types All None", + ), + list, + ); + await clickOption("showNonPublic"); + const s = await state(); + t.diagnostic(J(s.members)); + assert.ok(s.members.includes("F mName"), J(s.members)); + await clickOption("showNonPublic"); + await clickOption("showInherited"); + await pressKey(c, "Escape"); + await sleep(300); + assert.equal(await isOpen(), true, "Escape in the filter list closed the Object Browser"); + await clickRow("Components", "Circle"); + const i = await state(); + t.diagnostic(J(i.members)); + assert.deepEqual(i.members, ["ƒ Circumference", "F Radius"]); + await clickOn(MEMBER_FILTER, 1); + await clickOption("showInherited"); + await pressKey(c, "Escape"); + await sleep(300); + }); + + test("Sort members: Declaration order lists them in the order of the code", async (t) => { + await fresh(); + await clickRow("Components", "Shape"); + await clickOn(".tbob-dialog .tbob-sortbutton", 1); + t.diagnostic(await openList()); + await clickOption("declared"); + const s = await state(); + t.diagnostic(J(s.members)); + assert.deepEqual(s.members, ["⚡ Changed", "P Name", "ƒ Area", "S Describe"]); + await clickOption("alphabetical"); + await pressKey(c, "Escape"); + await sleep(300); + }); + + test("the search matches any part of a name, ignoring case unless Aa is pressed", async (t) => { + await fresh(); + await search("twice"); + const s = await state(); + assert.deepEqual(s.components, ["*M Helpers"]); + assert.deepEqual(s.members, ["ƒ Twice"]); + await search("ir"); + const ir = await state(); + t.diagnostic(J(ir)); + assert.deepEqual(ir.components, ["*C Circle"]); + await search("twice"); + await clickOn(".tbob-dialog .tbob-searchcase"); + const cs = await state(); + t.diagnostic(J(cs)); + assert.equal(cs.matchCase, true); + assert.deepEqual(cs.components, []); + assert.equal(cs.focus, "search"); + await clickOn(".tbob-dialog .tbob-searchcase"); + }); + + test("a dot in the search takes the part before it as the component: Shape. lists Shape's members, and Strings.Left finds VBA's under <All Libraries>", async (t) => { + await fresh(); + await search("Shape."); + const s = await state(); + t.diagnostic(J(s)); + assert.deepEqual(s.components, ["*C Shape"]); + assert.deepEqual(s.members, ["ƒ Area", "⚡ Changed", "S Describe", "P Name"]); + await search("Strings.Left"); + assert.deepEqual((await state()).components, []); + await setLibrary("<All Libraries>"); + const all = await state(); + t.diagnostic(J(all)); + assert.deepEqual(all.components, ["*M Strings (VBA)"]); + assert.deepEqual(all.members, ["ƒ Left", "ƒ Left$", "ƒ LeftB", "ƒ LeftB$"]); + }); + + test("Results lists every component and member in one list, with its full name and its kind", async (t) => { + await fresh(); + await clickOn(".tbob-dialog .tbob-viewbutton", 1); + await waitFor(c, async () => (await state()).results?.length > 0, { timeout: 15 * 1000 }); + const s = await state(); + t.diagnostic(J(s)); + assert.equal(s.view, "Results"); + assert.equal(s.components, null); + for (const r of [ + "C ObjectBrowserProbe.Circle (Class)", + "ƒ ObjectBrowserProbe.Circle.Area (Function) italic", + "M ObjectBrowserProbe.Helpers (Module)", + "ƒ ObjectBrowserProbe.Helpers.GetTickCount (Declare)", + "# ObjectBrowserProbe.Colour.Green (Enum member)", + ]) + assert.ok( + s.results.some((x) => x.replace(/^\*/, "") === r), + `no result ${r}`, + ); + await search("Name"); + const n = await state(); + t.diagnostic(J(n.results)); + assert.deepEqual(n.results, [ + "*P ObjectBrowserProbe.Circle.Name (Property) italic", + "P ObjectBrowserProbe.Shape.Name (Property)", + ]); + await search("Circum"); + await clickRow("Search results", "ObjectBrowserProbe.Circle.Circumference", { clickCount: 2 }); + await waitOpen(false); + const e = await editorNow(); + t.diagnostic(J(e)); + assert.equal(e.line, CIRCUMFERENCE); + await fresh(); + await clickOn(".tbob-dialog .tbob-viewbutton", 0); + }); + + test("in a list, Down, Up, Home, End and the first letters of a name move the selection", async (t) => { + await fresh(); + await clickRow("Components", "Circle"); + const now = async () => (await state()).components.find((r) => r.startsWith("*")); + await pressKey(c, "ArrowDown"); + assert.equal(await now(), "*E Colour"); + await pressKey(c, "End"); + assert.equal(await now(), "*C Shape"); + await pressKey(c, "ArrowUp"); + assert.equal(await now(), "*T Point"); + await pressKey(c, "Home"); + assert.equal(await now(), "*C Circle"); + await pressKey(c, "s"); + assert.equal(await now(), "*C Shape"); + await pressKey(c, "h"); + assert.equal(await now(), "*C Shape", "s then h, within a second, is the prefix sh"); + await sleep(1200); + await pressKey(c, "c"); + assert.equal(await now(), "*C Circle"); + await pressKey(c, "c"); + t.diagnostic(await now()); + assert.equal(await now(), "*E Colour", "c again goes on to the next name starting with c"); + }); + + test("Enter in a list, a double-click and Go to Definition close the browser and put the caret at the start of the declaration", async (t) => { + await fresh(); + await clickRow("Components", "Circle"); + await pressKey(c, "Enter"); + await waitOpen(false); + let e = await editorNow(); + t.diagnostic(J(e)); + assert.deepEqual([e.line, e.column, e.readOnly], [CIRCLE, 1, false]); + await fresh(); + await clickRow("Components", "Circle"); + await clickRow("Members", "Describe", { clickCount: 2 }); + await waitOpen(false); + e = await editorNow(); + t.diagnostic(J(e)); + assert.equal(e.line, DESCRIBE, "an inherited member goes to the base class's declaration"); + await fresh(); + await clickRow("Components", "Shape"); + await clickRow("Members", "Area"); + await clickOn("#obGoToDefinition"); + await waitOpen(false); + e = await editorNow(); + assert.equal(e.line, AREA, "Go to Definition goes to the selected member"); + await fresh(); + await clickRow("Components", "Shape"); + await clickRow("Members", "Area"); + await clickRow("Components", "Shape", { clickCount: 2 }); + await waitOpen(false); + e = await editorNow(); + assert.equal(e.line, SHAPE, "a double-click on a component goes to the component"); + }); + + test("Go to Definition on a library's member opens its package's file, read-only", async (t) => { + await fresh(); + await setLibrary("VBA"); + await search("Strings.Left"); + await clickRow("Members", "Left"); + const s = await state(); + t.diagnostic(s.description.slice(0, 300)); + assert.ok(s.description.startsWith("Declare Function Left Public VBA · Strings"), s.description); + const source = s.description.match(/Source: (\S+) \(line (\d+)\)$/); + assert.ok(source, s.description); + assert.ok(source[1].endsWith("/VBA/Sources/Strings.twin"), source[1]); + await clickOn("#obGoToDefinition"); + await waitOpen(false); + const e = await editorNow(); + t.diagnostic(J(e)); + assert.equal(e.line, Number(source[2])); + assert.equal(e.readOnly, true); + }); + + test("a type library's item goes to the IDE's read-only text of the library", async (t) => { + await fresh(); + await setLibrary("stdole"); + const s = await state(); + t.diagnostic(J(s)); + const source = s.description.match(/Source: (\S+) \(line (\d+)\)$/); + assert.ok(source, s.description); + assert.equal(source[1], "/ObjectBrowserProbe/References/stdole"); + await clickRow("Components", "DISPPARAMS"); + await pressKey(c, "Enter"); + await waitOpen(false); + const e = await editorNow(); + const text = await c.evaluate( + `(() => { const m = editor.getModel(); return { lines: m.getLineCount(), here: m.getLineContent(editor.getPosition().lineNumber), head: m.getValue().slice(0, 300), uri: m.uri.toString(), tab: [...document.querySelectorAll(".tab, .editorTab")].filter((x) => /active|selected/.test(x.className)).map((x) => x.innerText.trim()) }; })()`, + ); + t.diagnostic(J({ e, text })); + assert.equal(e.line, Number(source[2])); + assert.equal(e.readOnly, true); + }); + + test("Back and Forward step through what was selected", async (t) => { + await fresh(); + await clickRow("Components", "Shape"); + await clickRow("Members", "Describe"); + await clickRow("Components", "Helpers"); + const sel = async () => { + const s = await state(); + return [s.components.find((r) => r.startsWith("*")), s.members.find((r) => r.startsWith("*")) ?? null]; + }; + await clickOn(".tbob-dialog .tbob-iconbutton", 0); + assert.deepEqual(await sel(), ["*C Shape", "*S Describe"]); + await clickOn(".tbob-dialog .tbob-iconbutton", 0); + assert.deepEqual(await sel(), ["*C Shape", null]); + await clickOn(".tbob-dialog .tbob-iconbutton", 1); + t.diagnostic(J(await sel())); + assert.deepEqual(await sel(), ["*C Shape", "*S Describe"]); + }); + + test("the copy button copies the declaration of what is selected", async (t) => { + await fresh(); + await c.evaluate("window.__copies.length = 0"); + await clickRow("Components", "Helpers"); + await clickRow("Members", "Twice"); + await clickOn(".tbob-dialog .tbob-desc-copy"); + await clickRow("Components", "Shape"); + await clickRow("Members", "Name"); + await clickOn(".tbob-dialog .tbob-desc-copy"); + await clickRow("Components", "Helpers"); + await clickOn(".tbob-dialog .tbob-desc-copy"); + const copies = await c.evaluate("window.__copies"); + t.diagnostic(J(copies)); + assert.deepEqual(copies, [ + "ObjectBrowserProbe.Helpers.Twice(ByVal n As Long) As Long", + "ObjectBrowserProbe._Shape.Name() As String\nObjectBrowserProbe._Shape.Name(ByVal value As String)", + "ObjectBrowserProbe.Helpers", + ]); + }); + + test("Escape, Close and the title bar's X close the browser, and the focus goes back to the code", async () => { + await fresh(); + await pressKey(c, "Escape"); + await waitOpen(false); + assert.equal((await editorNow()).focused, true); + await fresh(); + await clickOn(".modalDialogContainer .msgBoxButton:not(#obGoToDefinition)"); + await waitOpen(false); + assert.equal((await editorNow()).focused, true); + await fresh(); + await clickOn(".modalDialogContainer .modalTitleBarCloseBtn"); + await waitOpen(false); + assert.equal((await editorNow()).focused, true); + }); + + test("the view, Aa, the filters, the sorts and the panes' sizes are remembered; the library and the search are not", async (t) => { + await fresh(); + await clickOn(".tbob-dialog .tbob-viewbutton", 1); + await clickOn(".tbob-dialog .tbob-searchcase"); + await search("Circ"); + await setLibrary("<All Libraries>"); + await clickOn(".tbob-dialog .tbob-viewbutton", 0); + const before = (await state()).componentsWidth; + const bar = await c.evaluate(AT_JS(".tbob-dialog .tbob-splitter", 0)); + await c.send("Input.dispatchMouseEvent", { type: "mouseMoved", x: bar.x, y: bar.y }); + await c.send("Input.dispatchMouseEvent", { + type: "mousePressed", + x: bar.x, + y: bar.y, + button: "left", + buttons: 1, + clickCount: 1, + }); + for (let dx = 20; dx <= 120; dx += 20) { + await c.send("Input.dispatchMouseEvent", { + type: "mouseMoved", + x: bar.x + dx, + y: bar.y, + button: "left", + buttons: 1, + }); + } + await c.send("Input.dispatchMouseEvent", { + type: "mouseReleased", + x: bar.x + 120, + y: bar.y, + button: "left", + buttons: 0, + clickCount: 1, + }); + await sleep(300); + const dragged = (await state()).componentsWidth; + await clickOn(".tbob-dialog .tbob-viewbutton", 1); + await pressKey(c, "Escape"); + await waitOpen(false); + const saved = JSON.parse(await c.evaluate("window.__obSetting")); + t.diagnostic(J({ before, dragged, saved })); + assert.ok(dragged > before + 100, `the drag did not widen Components: ${before} then ${dragged}`); + assert.equal(saved.viewMode, "results"); + assert.equal(saved.exactMatch, true); + await c.evaluate("editor.focus()"); + await setCursor(c, 1, 1); + await pressKey(c, "F2"); + await waitOpen(); + const s = await state(); + t.diagnostic(J(s)); + assert.equal(s.view, "Results"); + assert.equal(s.matchCase, true); + assert.equal(s.library, "ObjectBrowserProbe (project)"); + assert.equal(s.search, ""); + await clickOn(".tbob-dialog .tbob-viewbutton", 0); + const reopened = (await state()).componentsWidth; + assert.ok(Math.abs(reopened - dragged) <= 2, `Components is ${reopened} px wide again, not ${dragged}`); + await clickOn(".tbob-dialog .tbob-searchcase"); + await c.evaluate(`window.__obSetting = ""`); + }); + + test("Tab moves the focus from the search box to Aa and no further; Shift+Tab to Project / Library, then to the copy button, and no further", async (t) => { + await fresh(); + const where = async () => + c.evaluate(`(() => { + const a = document.activeElement; + return a.matches("input[type=search]") ? "search" : a.classList.contains("tbob-searchcase") ? "Aa" : a.tagName === "SELECT" ? "Project / Library" : a.getAttribute("aria-label") || a.tagName; + })()`); + const seen = []; + for (let i = 0; i < 4; i++) { + await pressKey(c, "Tab"); + seen.push(await where()); + } + await clickOn(".tbob-dialog input[type=search]"); + for (let i = 0; i < 3; i++) { + await pressKey(c, "Tab", { shift: true }); + seen.push(await where()); + } + t.diagnostic(J(seen)); + assert.deepEqual(seen, [ + "Aa", + "Aa", + "Aa", + "Aa", + "Project / Library", + "Copy selection or declaration", + "Copy selection or declaration", + ]); + }); + + test("control: a click on a list gives it the focus, and the keys then move in it", async () => { + await fresh(); + await clickRow("Components", "Helpers"); + assert.equal((await state()).focus, "Components"); + await pressKey(c, "ArrowDown"); + assert.ok((await state()).components.includes("*T Point")); + await pressKey(c, "Escape"); + await waitOpen(false); + }); +}); diff --git a/test/ide/probes/language/Settings b/test/ide/probes/language/Settings new file mode 100644 index 000000000..52de68e06 --- /dev/null +++ b/test/ide/probes/language/Settings @@ -0,0 +1,63 @@ +{ + "configuration.inherits": "Defaults", + "project.appTitle": "LanguageProbe", + "project.buildPath": "${SourcePath}\\Build\\${ProjectName}_${Architecture}.${FileExtension}", + "project.buildType": "Standard EXE", + "project.description": "test/ide/language.test.mjs opens it in a lane's copy of the install, adds a language pack that translates the warning TB0024 and the error TB5079, and switches to it.", + "project.exportPathIsV2": true, + "project.id": "{7B247500-0000-4000-9000-7B24750000B7}", + "project.name": "LanguageProbe", + "project.optionExplicit": true, + "project.references": [ + { + "id": "{00020430-0000-0000-C000-000000000046}", + "lcid": 0, + "name": "OLE Automation", + "path32": "C:\\Windows\\SysWOW64\\stdole2.tlb", + "path64": "C:\\Windows\\System32\\stdole2.tlb", + "symbolId": "stdole", + "versionMajor": 2, + "versionMinor": 0 + }, + { + "id": "{F50B82D0-DCAB-43FE-9631-11959D4A4728}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - VB Compatibility Package (Forms)", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "VB", + "versionBuild": 0, + "versionMajor": 0, + "versionMinor": 0, + "versionRevision": 31 + }, + { + "id": "{C192FB39-64CA-4D9B-B477-A5502F48EFCC}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - App global class object", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "AppGlobalClassProject", + "versionBuild": 0, + "versionMajor": 1, + "versionMinor": 0, + "versionRevision": 0 + } + ], + "project.settingsVersion": 1, + "project.startupObject": "Sub Main", + "project.warnings": { + "errors": [], + "hints": [], + "ignored": [], + "info": [], + "warnings": [ + "TB0024" + ] + }, + "runtime.useUnicodeStandardLibrary": true +} diff --git a/test/ide/probes/language/Sources/Language.twin b/test/ide/probes/language/Sources/Language.twin new file mode 100644 index 000000000..abe6a99bf --- /dev/null +++ b/test/ide/probes/language/Sources/Language.twin @@ -0,0 +1,7 @@ +Module Language + ' unused gives the warning TB0024 (Settings makes it a warning). The lane types lines below it + ' that give the errors TB5079 and TB5179, and another unused variable. + Public Sub Main() + Dim unused As Long + End Sub +End Module diff --git a/test/ide/probes/object-browser/Settings b/test/ide/probes/object-browser/Settings new file mode 100644 index 000000000..02788d48e --- /dev/null +++ b/test/ide/probes/object-browser/Settings @@ -0,0 +1,54 @@ +{ + "configuration.inherits": "Defaults", + "project.appTitle": "ObjectBrowserProbe", + "project.buildPath": "${SourcePath}\\Build\\${ProjectName}_${Architecture}.${FileExtension}", + "project.buildType": "Standard EXE", + "project.description": "test/ide/object-browser.test.mjs opens it in a lane's copy of the install and tries the Object Browser: opening it, searching, the filters, the description and Go to Definition.", + "project.exportPathIsV2": true, + "project.id": "{7B247500-0000-4000-9000-7B24750000B6}", + "project.name": "ObjectBrowserProbe", + "project.optionExplicit": true, + "project.references": [ + { + "id": "{00020430-0000-0000-C000-000000000046}", + "lcid": 0, + "name": "OLE Automation", + "path32": "C:\\Windows\\SysWOW64\\stdole2.tlb", + "path64": "C:\\Windows\\System32\\stdole2.tlb", + "symbolId": "stdole", + "versionMajor": 2, + "versionMinor": 0 + }, + { + "id": "{F50B82D0-DCAB-43FE-9631-11959D4A4728}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - VB Compatibility Package (Forms)", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "VB", + "versionBuild": 0, + "versionMajor": 0, + "versionMinor": 0, + "versionRevision": 31 + }, + { + "id": "{C192FB39-64CA-4D9B-B477-A5502F48EFCC}", + "isCompilerPackage": true, + "licence": "MIT", + "name": "[COMPILER PACKAGE] twinBASIC - App global class object", + "path32": "", + "path64": "", + "publisher": "TWINBASIC-COMPILER", + "symbolId": "AppGlobalClassProject", + "versionBuild": 0, + "versionMajor": 1, + "versionMinor": 0, + "versionRevision": 0 + } + ], + "project.settingsVersion": 1, + "project.startupObject": "Sub Main", + "runtime.useUnicodeStandardLibrary": true +} diff --git a/test/ide/probes/object-browser/Sources/Helpers.twin b/test/ide/probes/object-browser/Sources/Helpers.twin new file mode 100644 index 000000000..d08bdf8ee --- /dev/null +++ b/test/ide/probes/object-browser/Sources/Helpers.twin @@ -0,0 +1,33 @@ +Module Helpers + ' test/ide/object-browser.test.mjs finds the lines it needs by their text. + Public Const BigValue As Long = &H8000& + Public Counter As Long + + Public Enum Colour + Red = 1 + Green = 2 + Blue = 4 + End Enum + + Public Type Point + X As Long + Y As Long + End Type + + Public Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long + + Public Function Twice(ByVal n As Long) As Long + Return n * 2 + End Function + + Private Sub Unseen() + Counter = 0 + End Sub + + Public Sub Main() + Dim c As New Circle + c.Radius = 2 + c.Name = "Disc" + Debug.Print Twice(3), c.Circumference(), c.Name + End Sub +End Module diff --git a/test/ide/probes/object-browser/Sources/Shapes.twin b/test/ide/probes/object-browser/Sources/Shapes.twin new file mode 100644 index 000000000..bf8de2fb9 --- /dev/null +++ b/test/ide/probes/object-browser/Sources/Shapes.twin @@ -0,0 +1,32 @@ +Class Shape + Private mName As String + + Public Event Changed(ByVal what As String) + + Public Property Get Name() As String + Name = mName + End Property + + Public Property Let Name(ByVal value As String) + mName = value + RaiseEvent Changed("Name") + End Property + + Public Function Area() As Double + Return 0 + End Function + + Public Sub Describe() + Debug.Print mName + End Sub +End Class + +Class Circle + Inherits Shape + + Public Radius As Double + + Public Function Circumference() As Double + Return 2 * 3.14159 * Radius + End Function +End Class diff --git a/test/ide/projects-import-crash.test.mjs b/test/ide/projects-import-crash.test.mjs index b0016dfe2..2dafa3fb1 100644 --- a/test/ide/projects-import-crash.test.mjs +++ b/test/ide/projects-import-crash.test.mjs @@ -13,7 +13,7 @@ // (tb-lane.mjs), so the test that has asserted the crash clears the console; the IDE has already // restarted the compiler by then. // -// Each test states what BETA 1005 does; the test named "control" passes whether or not the defect +// Each test states what BETA 1034 does; the test named "control" passes whether or not the defect // is fixed. If another fails after an IDE update, the IDE has changed: update the entry in // BUGS-TO-REPORT.md, or its report in bugs/filed/, the callout on the page of docs/IDE/Projects/ // that carries it, and then this file. @@ -87,6 +87,9 @@ scenario("Project Explorer: importing over an open file", (lane) => { }); test("Add > Import... of a file over one open in a tab crashes the compiler, leaves the old text in the tab, and the next save writes it back over the import", async (t) => { + // Since BETA 1033 the compiler's restart after the crash collapses the tree. + await k.expand(P("Sources")); + await k.expand(P("Sources/Helpers")); await k.doubleClickNode(P("Sources/Helpers/Util.twin")); await sleep(1200); assert.ok( diff --git a/test/ide/projects-loss.test.mjs b/test/ide/projects-loss.test.mjs index b3565283c..b5e26c336 100644 --- a/test/ide/projects-loss.test.mjs +++ b/test/ide/projects-loss.test.mjs @@ -26,7 +26,7 @@ // lane's own copy, in its work folder. projects-kit.mjs says what the page's guard does. A // project file a test leaves damaged is read with impexp's readProject, and never opened. // -// Each test states what BETA 1005 does; the tests named "control" pass whether or not the defects +// Each test states what BETA 1034 does; the tests named "control" pass whether or not the defects // are fixed. If another fails after an IDE update, the IDE has changed: update the entry in // BUGS-TO-REPORT.md, or its report in bugs/filed/, the callout on the page of docs/IDE/Projects/ // that carries it, and then this file. @@ -161,16 +161,17 @@ scenario("Project Explorer: lost work and unasked saves", (lane) => { const copy = path.join(lane.work, "reopened", "project.twinproj"); mkdirSync(path.dirname(copy), { recursive: true }); copyFileSync(file, copy); + // As Lane.open launches: on the lane's slot, with a DevTools port Windows picks. const run = await launchIde({ exe: lane.copy(), project: copy, - port: lane.port, + slot: await lane.leased(), show: lane.show, env: { APPDATA: lane.appdataDir() }, }); let c2 = null; try { - c2 = await attachIde(lane.port); + c2 = await attachIde(run.port); assert.ok(c2, "the IDE never exposed a debug port"); const outcome = compileOutcome(await waitForCompile(c2, { project: copy, timeout: ms }), { name: copy }); await sleep(Math.max(0, ms - (Date.now() - t0))); diff --git a/test/ide/projects.test.mjs b/test/ide/projects.test.mjs index adcb51fd7..51ee2616e 100644 --- a/test/ide/projects.test.mjs +++ b/test/ide/projects.test.mjs @@ -32,7 +32,7 @@ // the page's guard does) once, and the tests share it in order. None of them saves; what they // add (MyFile, a type library's copy) does not stop the project compiling. // -// Each test states what BETA 1005 does; the tests named "control" pass whether or not the defects +// Each test states what BETA 1034 does; the tests named "control" pass whether or not the defects // are fixed. If another fails after an IDE update, the IDE has changed: update the entry in // BUGS-TO-REPORT.md, or its report in bugs/filed/, the callout on the page of docs/IDE/Projects/ // that carries it, and then this file. @@ -552,6 +552,7 @@ scenario("Project Explorer and Project Settings", (lane) => { await sleep(800); assert.deepEqual(ref, ["[IMPORTED] Microsoft Data Source Interfaces for ActiveX Data Binding Type Library"]); assert.equal(rows.length, 1, `the rows are ${J(rows)}`); - assert.match(rows[0], /^\[LINKED-PACKAGE\] Microsoft Data Source Interfaces/); + // Since BETA 1033 a row starts with its drag handle, ⠿. + assert.match(rows[0], /^(?:⠿ )?\[LINKED-PACKAGE\] Microsoft Data Source Interfaces/); }); }); diff --git a/test/ide/vb6-import.test.mjs b/test/ide/vb6-import.test.mjs index 3d5bffda2..bd6c8cf2b 100644 --- a/test/ide/vb6-import.test.mjs +++ b/test/ide/vb6-import.test.mjs @@ -27,7 +27,7 @@ // LoadTypeLibEx and REGKIND_NONE, by a 64-bit PowerShell (typeLibrary), which // cannot run the 32-bit DLL's code. // -// Each test states what BETA 1010 does. If one fails after an IDE update, the +// Each test states what BETA 1034 does. If one fails after an IDE update, the // IDE has changed: update the FAQ's VB6-import answer // (docs/Miscellaneous/FAQs.md), the entry "Some VB6 attribute lines have no // effect in a built type library" in BUGS-TO-REPORT.md or bugs/filed/, and @@ -263,17 +263,18 @@ scenario("VB6 import", (lane) => { c = await lane.openNoProject(); assert.ok(await waitModal(c, "New / Open"), "the IDE showed no New / Open Project dialog"); - // The tiles are listed once the IDE has the samples and projects from its host. + // The cards are listed once the IDE has the samples and projects from its host + // (BETA 1033's dialog, #fp2root; a double-click on a card's name reaches the card). await waitFor( c, () => c.evaluate( - `[...document.querySelectorAll(".frontPageListViewItem")].some((e) => e.textContent.trim() === "Import from VBP...")`, + `[...document.querySelectorAll("#fp2root .fp2-cardName")].some((e) => e.textContent.trim() === "Import from VBP...")`, ), { timeout: 30 * 1000 }, ); await standIn(c, "OpenProjectVBP", vbp); - await click(c, { css: ".frontPageListViewItem", text: "Import from VBP..." }, { clickCount: 2 }); + await click(c, { css: "#fp2root .fp2-cardName", text: "Import from VBP..." }, { clickCount: 2 }); assert.ok(await waitModal(c, "New Project Options"), "the import showed no New Project Options dialog"); await click(c, "OKBTN"); assert.ok( diff --git a/test/ide/zoom.test.mjs b/test/ide/zoom.test.mjs new file mode 100644 index 000000000..69634fa11 --- /dev/null +++ b/test/ide/zoom.test.mjs @@ -0,0 +1,174 @@ +// The zoom of the whole IDE, tested for what docs/IDE/Customising/index.md (the Zoom section) and +// IDE-Options.md (IDE Font Size) say: Ctrl+Alt++ and Ctrl+Alt+- run tbIde_IncreaseFontSize and +// tbIde_DecreaseFontSize, which change the IDE Options value fontSize by 1px and save the options +// at once. The IDE sets the size as the page's --ide-fontsize, and the size divided by 13 as +// --generalScaling, which sizes the toolbar's icons (main.htm's 19 elements of class "icon"). The +// codicon glyphs and the page's scroll bars keep their 16px; the scroll bar is reported, not +// asserted. There is no upper limit, the lower one is 8px, and no key resets the size. +// +// No project is opened: the IDE starts as from its icon, and the New / Open dialog is cancelled. +// The page's saveIDEOptions is wrapped to count its calls. It writes nothing: every IDE the +// harness starts has --no-save-ide-settings (IDE_FLAGS in scripts/lib/tb-ide.mjs), and the page +// is answered "no saved value" for its options, so the IDE starts at the default, 13px. Nothing +// here reaches SaveSetting, so lanes.mjs names no settings for this lane. +// +// The keys go in through DevTools, which reaches the page's own key handling, where these +// commands are. Ctrl with the mouse wheel, which the page does not handle, cannot be tested this +// way, so nothing here asserts it. +// +// Each test states what BETA 1034 does. If one fails after an IDE update, the IDE has changed: +// update the Zoom section of docs/IDE/Customising/index.md and IDE Font Size in IDE-Options.md, +// and then this file. +// +// Run it with ide-test.bat, which gives it a lane; on its own it is skipped. + +import assert from "node:assert/strict"; +import { before, test } from "node:test"; +import { sleep } from "../../scripts/lib/tb-ide.mjs"; +import { clickAt, pressKey, waitFor } from "../../scripts/lib/tb-operate.mjs"; +import { scenario } from "../addin/scenario.mjs"; + +// The size as the options hold it and as the page applies it, the scaling the page derives from +// it, an icon's size (an element of the IDE's class "icon", sized 16px times --generalScaling; the +// codicon glyphs are a fixed 16px), a scroll bar's width, and the saves. +const STATE_JS = `(() => { + const root = getComputedStyle(document.documentElement); + const icon = [...document.querySelectorAll(".icon")].find((e) => e.getBoundingClientRect().height); + let probe = document.getElementById("__zoomScrollProbe"); + if (!probe) { + probe = document.createElement("div"); + probe.id = "__zoomScrollProbe"; + probe.style.cssText = "position:absolute;left:-1000px;top:0;width:100px;height:100px;overflow:scroll"; + document.body.appendChild(probe); + } + return { + option: liveIDEOptions.fontSize, + variable: root.getPropertyValue("--ide-fontsize").trim(), + scaling: root.getPropertyValue("--generalScaling").trim(), + body: getComputedStyle(document.body).fontSize, + icon: icon ? Math.round(icon.getBoundingClientRect().height * 100) / 100 : null, + scrollbar: probe.offsetWidth - probe.clientWidth, + saves: window.__saves, + }; +})()`; + +// Counts the page's calls of saveIDEOptions, which the font-size commands call through the global. +const SPY_JS = `(() => { + if (window.__saves !== undefined) return; + window.__saves = 0; + const real = saveIDEOptions; + saveIDEOptions = function (...a) { window.__saves++; return real.apply(this, a); }; +})()`; + +scenario("zoom", (lane) => { + let c = null; + const state = () => c.evaluate(STATE_JS); + const ctrlAlt = { ctrl: true, alt: true }; + + // The numeric keypad's + or -, with Ctrl and Alt held, as the keyboard sends it. + async function pressKeypad(which) { + const k = which === "+" ? { key: "+", code: "NumpadAdd", vk: 107 } : { key: "-", code: "NumpadSubtract", vk: 109 }; + const mod = (type, key, code, vk, modifiers) => + c.send("Input.dispatchKeyEvent", { + type, + key, + code, + windowsVirtualKeyCode: vk, + nativeVirtualKeyCode: vk, + modifiers, + }); + await mod("rawKeyDown", "Control", "ControlLeft", 17, 2); + await mod("rawKeyDown", "Alt", "AltLeft", 18, 3); + await mod("rawKeyDown", k.key, k.code, k.vk, 3); + await mod("keyUp", k.key, k.code, k.vk, 3); + await mod("keyUp", "Alt", "AltLeft", 18, 2); + await mod("keyUp", "Control", "ControlLeft", 17, 0); + } + // A key press, then the state once the page has applied it. + async function after(press) { + await press(); + await sleep(300); + return state(); + } + + before(async () => { + c = await lane.openNoProject(); + const ready = await waitFor( + c, + () => + c.evaluate( + `(() => { try { return typeof liveIDEOptions === "object" && [...document.querySelectorAll(".modalTitleBar")].some((b) => b.innerText.includes("New / Open")); } catch { return false; } })()`, + ), + { timeout: 90 * 1000, interval: 250 }, + ); + assert.ok(ready, "the IDE showed no New / Open dialog"); + await sleep(1500); + const cancel = await c.evaluate(`(() => { + const ms = [...document.querySelectorAll(".modalDialogContainer")].filter((m) => m.getBoundingClientRect().width); + const b = ms.length && [...ms.at(-1).querySelectorAll("button, .dialogButton, .msgBoxButton, [class*=Button]")] + .find((e) => e.textContent.trim() === "Cancel" && e.getBoundingClientRect().width); + if (!b) return null; + const q = b.getBoundingClientRect(); + return { x: q.x + q.width / 2, y: q.y + q.height / 2 }; + })()`); + assert.ok(cancel, "the New / Open dialog has no Cancel button"); + await clickAt(c, cancel.x, cancel.y); + await sleep(800); + await c.evaluate(SPY_JS); + }); + + test("the IDE starts at the default IDE Font Size, 13px, and applies it to the page", async (t) => { + const s = await state(); + t.diagnostic(JSON.stringify(s)); + assert.equal(s.option, "13px"); + assert.equal(s.variable, "13px"); + assert.equal(s.body, "13px"); + }); + + test("Ctrl+Alt++ makes the IDE 1px bigger, the toolbar's icons with its text, and saves the options", async (t) => { + const s0 = await state(); + const s1 = await after(() => pressKey(c, "+", ctrlAlt)); + t.diagnostic(JSON.stringify({ s0, s1 })); + assert.equal(s1.option, "14px"); + assert.equal(s1.variable, "14px"); + assert.equal(s1.body, "14px"); + assert.equal(Number(s1.scaling), 14 / 13, `--generalScaling is ${s1.scaling}`); + assert.ok(s0.icon && s1.icon > s0.icon, `an icon did not grow: ${s0.icon} then ${s1.icon}`); + assert.equal(s1.saves, s0.saves + 1, "the options were not saved once"); + }); + + test("the numeric keypad's + and - do the same with Ctrl+Alt", async (t) => { + const s1 = await after(() => pressKeypad("+")); + const s2 = await after(() => pressKeypad("-")); + t.diagnostic(JSON.stringify({ s1, s2 })); + assert.equal(s1.option, "15px"); + assert.equal(s2.option, "14px"); + }); + + test("Ctrl+Alt+- makes the IDE 1px smaller, down to 8px, and a press at 8px saves nothing", async (t) => { + let s = await state(); + for (let i = 0; i < 6; i++) s = await after(() => pressKey(c, "-", ctrlAlt)); + assert.equal(s.option, "8px"); + assert.equal(s.variable, "8px"); + const below = await after(() => pressKey(c, "-", ctrlAlt)); + t.diagnostic(JSON.stringify({ at8: s, below })); + assert.equal(below.option, "8px"); + assert.equal(below.saves, s.saves, "a press at 8px saved the options"); + }); + + test("Ctrl+Alt++ has no upper limit: the size passes 30px, the top of the IDE Options list", async (t) => { + let s = await state(); + for (let i = 0; i < 23; i++) s = await after(() => pressKey(c, "+", ctrlAlt)); + t.diagnostic(JSON.stringify(s)); + assert.equal(s.option, "31px"); + assert.equal(s.variable, "31px"); + }); + + test("Ctrl+Alt+0 does not reset the size", async (t) => { + const s0 = await state(); + const s1 = await after(() => pressKey(c, "0", ctrlAlt)); + t.diagnostic(JSON.stringify({ s0, s1 })); + assert.equal(s1.option, s0.option); + assert.equal(s1.saves, s0.saves, "Ctrl+Alt+0 saved the options"); + }); +}); diff --git a/test/shots/manifest.json b/test/shots/manifest.json index c2b2e2ad1..508ed9a0e 100644 --- a/test/shots/manifest.json +++ b/test/shots/manifest.json @@ -35,6 +35,12 @@ } } }, + "IDE/Code/Images/Object_Browser.light.png": { + "build": 1034 + }, + "IDE/Code/Images/Object_Browser.png": { + "build": 1034 + }, "IDE/Debugging/Images/Breakpoint_Glyphs.png": { "svg": { "decision": {