diff --git a/Makefile b/Makefile index 2907ad4..6bf71d3 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,31 @@ TEE := -run: +run: it1 it2 + +it0: + echo "Hand made" + +it1: cat it1-in.lang0 | python3 it0-out.py $(if $(TEE),| tee,> ) it1-out0.py cat it1-in.lang0 | python3 it1-out0.py $(if $(TEE),| tee,> ) it1-out1.py diff it1-out0.py it1-out1.py > it1-out1.diff cat it1-in.lang0 | python3 it1-out1.py $(if $(TEE),| tee,> ) it1-out2.py diff it1-out1.py it1-out2.py > it1-out2.diff - cat it1-in.lang0 | python3 it1-out2.py $(if $(TEE),| tee,> ) it1-out3.py - diff it1-out2.py it1-out3.py > it1-out3.diff + cat it1-in.lang0 | python3 it1-out2.py $(if $(TEE),| tee,> ) it1-out.py + diff it1-out2.py it1-out.py > it1-out.diff # See how much our hand written code differs from resulting code -diff it0-out.py it1-out0.py > it0-out0.diff +it2: + cat it2-in.lang0 | python3 it1-out.py $(if $(TEE),| tee,> ) it2-out0.py + + cat it2-in.lang0 | python3 it2-out0.py $(if $(TEE),| tee,> ) it2-out1.c && gcc it2-out1.c -o it2-out1 + cat it2-in.lang0 | it2-out1 $(if $(TEE),| tee,> ) it2-out2.c && gcc it2-out2.c -o it2-out2 + cat it2-in.lang0 | it2-out2 $(if $(TEE),| tee,> ) it2-out.c && gcc it2-out.c -o it2-out + clean: -rm it1-out* + +.PHONY: it2 diff --git a/it2-in.lang0 b/it2-in.lang0 new file mode 100644 index 0000000..5158f66 --- /dev/null +++ b/it2-in.lang0 @@ -0,0 +1,384 @@ +increaseindent indent: + calc indent addstringchar indent " " + calc indent addstringchar indent " " + calc indent addstringchar indent " " + calc indent addstringchar indent " " + return indent +/ + +lexident: + set word "" + forever + calc char peek + calc isbeforea lt char "a" + if isbeforea + break + / + calc isafterz lt "z" char + if isafterz + break + / + calc word addstringchar word char + skip + / + return word +/ + +parseconststring: + skipchar quote + emit quote + forever + calc char peek + calc iseof eq char eof + if iseof + break + / + calc isquote eq char quote + if isquote + break + / + emit char + skip + / + skipchar quote + emit quote +/ + +parseexprvarref: + calc varname lexident + emit "var_" + emit varname +/ + +parseexprcall: + calc funcname lexident + emit funcname + emit "(" + set first "1" + forever + calc char peek + calc isspace eq char " " + calc isnotspace not isspace + if isnotspace + break + / + skip + calc isfirst eq first "1" + calc isnotfirst not isfirst + if isnotfirst + emit ", " + / + calc char peek + calc isquote eq char quote + calc isnotquote not isquote + if isquote + parseconststring + / + if isnotquote + parseexprvarref + / + set first "0" + / + emit ")" +/ + +parsestatset indent: + skipchar " " + calc var lexident + skipchar " " + emit indent + emit "char * var_" + emit var + emit " = " + parseconststring + emit ";" + emit eol + skipchar eol +/ + +parsestatcalc indent: + skipchar " " + calc var lexident + skipchar " " + emit indent + emit "char * var_" + emit var + emit " = " + parseexprcall + emit ";" + emit eol + skipchar eol +/ + +parsestatif indent: + skipchar " " + emit indent + emit "if (" + parseexprvarref + emit ")\n" + emit indent + emit "{\n" + skipchar eol + calc indentt increaseindent indent + parseblock indentt + emit indent + emit "}\n" +/ + +parsestatforever indent: + emit indent + emit "while (1)\n" + emit indent + emit "{\n" + skipchar eol + calc indentt increaseindent indent + parseblock indentt + emit indent + emit "}\n" +/ + +parsestatbreak indent: + emit indent + emit "break;\n" + skipchar eol +/ + +parsestatreturn indent: + emit indent + emit "return " + calc char peek + calc isspace eq char " " + if isspace + skip + parseexprvarref + / + emit ";" + emit eol + skipchar eol +/ + +parsestatemit indent: + emit indent + emit "emit(" + skipchar " " + calc char peek + calc isquote eq char quote + calc isnotquote not isquote + if isquote + parseconststring + / + if isnotquote + parseexprvarref + / + emit ");\n" + skipchar eol +/ + +parsestattrace indent: + emit indent + emit "trace(" + emit quote + skipchar " " + calc varname lexident + emit varname + emit quote + emit ", " + emit varname + emit ")\n" + skipchar eol +/ + +parsestatskipchar indent: + skipchar " " + emit indent + emit "skipchar(" + calc char peek + calc isquote eq char quote + calc isnotquote not isquote + if isquote + parseconststring + / + if isnotquote + parseexprvarref + / + emit ");\n" + skipchar eol +/ + +parsestat indent: + calc call lexident + trace call + calc isset eq call "set" + if isset + parsestatset indent + return + / + calc iscalc eq call "calc" + if iscalc + parsestatcalc indent + return + / + calc isif eq call "if" + if isif + parsestatif indent + return + / + calc isforever eq call "forever" + if isforever + parsestatforever indent + return + / + calc isbreak eq call "break" + if isbreak + parsestatbreak indent + return + / + calc isreturn eq call "return" + if isreturn + parsestatreturn indent + return + / + calc isemit eq call "emit" + if isemit + parsestatemit indent + return + / + calc istrace eq call "trace" + if istrace + parsestattrace indent + return + / + calc isskipchar eq call "skipchar" + if isskipchar + parsestatskipchar indent + return + / + emit indent + emit call + emit "(" + set first "1" + forever + calc char peek + calc isspace eq char " " + calc isnotspace not isspace + if isnotspace + break + / + skip + calc char peek + calc isquote eq char quote + calc isnotquote not isquote + if isquote + parseconststring + / + if isnotquote + parseexprvarref + / + calc isfirst eq first "1" + calc isnotfirst not isfirst + if isnotfirst + emit ", " + / + set first "0" + / + skipchar eol + emit ");\n" +/ + +parseblock indent: + forever + forever + calc char peek + calc iseol eq char eol + calc isnoteol not iseol + if isnoteol + break + / + skip + / + set copy " " + forever + calc isdone eq copy indent + if isdone + break + / + skipchar "\t" + calc copy increaseindent copy + / + calc char peek + calc iseoblock eq char "/" + if iseoblock + skip + skipchar eol + break + / + skipchar "\t" + parsestat indent + / +/ + +parsefunc: + calc funcname lexident + trace funcname + emit "void " + emit funcname + emit "(" + set first "1" + forever + calc char peek + calc isspace eq char " " + calc isnotspace not isspace + if isnotspace + break + / + skip + calc var lexident + calc isfirst eq first "1" + calc isnotfirst not isfirst + if isnotfirst + emit ", " + / + emit "char * var_" + emit var + set first "0" + / + skipchar ":" + skipchar eol + emit ")\n{\n" + parseblock " " + emit "}\n\n" +/ + +emitheader: + emit "char * addstringchar(char * str, char * chr)\n" + emit "{\n" + emit "}\n" + emit "\n" + emit "\n" +/ + +emitfooter: + emit "" +/ + +main: + emitheader + forever + calc char peek + calc iseof eq char eof + if iseof + break + / + forever + calc char peek + calc iseol eq char eol + calc isnoteol not iseol + if isnoteol + break + / + skip + / + parsefunc + / + emitfooter +/ diff --git a/it2-out0.py b/it2-out0.py new file mode 100644 index 0000000..36eabff --- /dev/null +++ b/it2-out0.py @@ -0,0 +1,372 @@ +import os +import sys + +def eq(a, b): + return a == b + +def lt(a, b): + return a[0] < b[0] + +def addstringchar(a, b): + return a + b[0] + +def emit(string): + sys.stdout.write(string) + +def trace(header, value): + if os.environ.get('TRACE'): + sys.stderr.write(f'{header}={value!r}\n') + +eof = chr(0) +eol = chr(10) +quote = chr(34) +PEEK = None +LINE = 1 + +def peek(): + global PEEK + if PEEK is None: + char = sys.stdin.read(1) + trace('char', char) + if not char: + PEEK = eof + else: + PEEK = char + return PEEK + +def skip(): + global LINE + global PEEK + if eol == PEEK: + LINE += 1 + PEEK = None + +def skipchar(char): + global LINE + assert char == peek(), (LINE, char, peek()) + skip() + +def increaseindent(indent): + indent = addstringchar(indent, " ") + indent = addstringchar(indent, " ") + indent = addstringchar(indent, " ") + indent = addstringchar(indent, " ") + return indent + +def lexident(): + word = "" + while True: + char = peek() + isbeforea = lt(char, "a") + if isbeforea: + break + isafterz = lt("z", char) + if isafterz: + break + word = addstringchar(word, char) + skip() + return word + +def parseconststring(): + skipchar(quote) + emit(quote) + while True: + char = peek() + iseof = eq(char, eof) + if iseof: + break + isquote = eq(char, quote) + if isquote: + break + emit(char) + skip() + skipchar(quote) + emit(quote) + +def parseexprvarref(): + varname = lexident() + emit("var_") + emit(varname) + +def parseexprcall(): + funcname = lexident() + emit(funcname) + emit("(") + first = "1" + while True: + char = peek() + isspace = eq(char, " ") + isnotspace = not(isspace) + if isnotspace: + break + skip() + isfirst = eq(first, "1") + isnotfirst = not(isfirst) + if isnotfirst: + emit(", ") + char = peek() + isquote = eq(char, quote) + isnotquote = not(isquote) + if isquote: + parseconststring() + if isnotquote: + parseexprvarref() + first = "0" + emit(")") + +def parsestatset(indent): + skipchar(" ") + var = lexident() + skipchar(" ") + emit(indent) + emit("char * var_") + emit(var) + emit(" = ") + parseconststring() + emit(";") + emit(eol) + skipchar(eol) + +def parsestatcalc(indent): + skipchar(" ") + var = lexident() + skipchar(" ") + emit(indent) + emit("char * var_") + emit(var) + emit(" = ") + parseexprcall() + emit(";") + emit(eol) + skipchar(eol) + +def parsestatif(indent): + skipchar(" ") + emit(indent) + emit("if (") + parseexprvarref() + emit(")\n") + emit(indent) + emit("{\n") + skipchar(eol) + indentt = increaseindent(indent) + parseblock(indentt) + emit(indent) + emit("}\n") + +def parsestatforever(indent): + emit(indent) + emit("while (1)\n") + emit(indent) + emit("{\n") + skipchar(eol) + indentt = increaseindent(indent) + parseblock(indentt) + emit(indent) + emit("}\n") + +def parsestatbreak(indent): + emit(indent) + emit("break;\n") + skipchar(eol) + +def parsestatreturn(indent): + emit(indent) + emit("return ") + char = peek() + isspace = eq(char, " ") + if isspace: + skip() + parseexprvarref() + emit(";") + emit(eol) + skipchar(eol) + +def parsestatemit(indent): + emit(indent) + emit("emit(") + skipchar(" ") + char = peek() + isquote = eq(char, quote) + isnotquote = not(isquote) + if isquote: + parseconststring() + if isnotquote: + parseexprvarref() + emit(");\n") + skipchar(eol) + +def parsestattrace(indent): + emit(indent) + emit("trace(") + emit(quote) + skipchar(" ") + varname = lexident() + emit(varname) + emit(quote) + emit(", ") + emit(varname) + emit(")\n") + skipchar(eol) + +def parsestatskipchar(indent): + skipchar(" ") + emit(indent) + emit("skipchar(") + char = peek() + isquote = eq(char, quote) + isnotquote = not(isquote) + if isquote: + parseconststring() + if isnotquote: + parseexprvarref() + emit(");\n") + skipchar(eol) + +def parsestat(indent): + call = lexident() + trace("call", call) + isset = eq(call, "set") + if isset: + parsestatset(indent) + return + iscalc = eq(call, "calc") + if iscalc: + parsestatcalc(indent) + return + isif = eq(call, "if") + if isif: + parsestatif(indent) + return + isforever = eq(call, "forever") + if isforever: + parsestatforever(indent) + return + isbreak = eq(call, "break") + if isbreak: + parsestatbreak(indent) + return + isreturn = eq(call, "return") + if isreturn: + parsestatreturn(indent) + return + isemit = eq(call, "emit") + if isemit: + parsestatemit(indent) + return + istrace = eq(call, "trace") + if istrace: + parsestattrace(indent) + return + isskipchar = eq(call, "skipchar") + if isskipchar: + parsestatskipchar(indent) + return + emit(indent) + emit(call) + emit("(") + first = "1" + while True: + char = peek() + isspace = eq(char, " ") + isnotspace = not(isspace) + if isnotspace: + break + skip() + char = peek() + isquote = eq(char, quote) + isnotquote = not(isquote) + if isquote: + parseconststring() + if isnotquote: + parseexprvarref() + isfirst = eq(first, "1") + isnotfirst = not(isfirst) + if isnotfirst: + emit(", ") + first = "0" + skipchar(eol) + emit(");\n") + +def parseblock(indent): + while True: + while True: + char = peek() + iseol = eq(char, eol) + isnoteol = not(iseol) + if isnoteol: + break + skip() + copy = " " + while True: + isdone = eq(copy, indent) + if isdone: + break + skipchar("\t") + copy = increaseindent(copy) + char = peek() + iseoblock = eq(char, "/") + if iseoblock: + skip() + skipchar(eol) + break + skipchar("\t") + parsestat(indent) + +def parsefunc(): + funcname = lexident() + trace("funcname", funcname) + emit("void ") + emit(funcname) + emit("(") + first = "1" + while True: + char = peek() + isspace = eq(char, " ") + isnotspace = not(isspace) + if isnotspace: + break + skip() + var = lexident() + isfirst = eq(first, "1") + isnotfirst = not(isfirst) + if isnotfirst: + emit(", ") + emit("char * var_") + emit(var) + first = "0" + skipchar(":") + skipchar(eol) + emit(")\n{\n") + parseblock(" ") + emit("}\n\n") + +def emitheader(): + emit("char * addstringchar(char * str, char * chr)\n") + emit("{\n") + emit("}\n") + emit("\n") + emit("\n") + +def emitfooter(): + emit("") + +def main(): + emitheader() + while True: + char = peek() + iseof = eq(char, eof) + if iseof: + break + while True: + char = peek() + iseol = eq(char, eol) + isnoteol = not(iseol) + if isnoteol: + break + skip() + parsefunc() + emitfooter() + +if __name__ == '__main__': + main() diff --git a/it2-out1.c b/it2-out1.c new file mode 100644 index 0000000..a4bff57 --- /dev/null +++ b/it2-out1.c @@ -0,0 +1,453 @@ +char * addstringchar(char * str, char * chr) +{ +} + + +void increaseindent(char * var_indent) +{ + char * var_indent = addstringchar(var_indent, " "); + char * var_indent = addstringchar(var_indent, " "); + char * var_indent = addstringchar(var_indent, " "); + char * var_indent = addstringchar(var_indent, " "); + return var_indent; +} + +void lexident() +{ + char * var_word = ""; + while (1) + { + char * var_char = peek(); + char * var_isbeforea = lt(var_char, "a"); + if (var_isbeforea) + { + break; + } + char * var_isafterz = lt("z", var_char); + if (var_isafterz) + { + break; + } + char * var_word = addstringchar(var_word, var_char); + skip(); + } + return var_word; +} + +void parseconststring() +{ + skipchar(var_quote); + emit(var_quote); + while (1) + { + char * var_char = peek(); + char * var_iseof = eq(var_char, var_eof); + if (var_iseof) + { + break; + } + char * var_isquote = eq(var_char, var_quote); + if (var_isquote) + { + break; + } + emit(var_char); + skip(); + } + skipchar(var_quote); + emit(var_quote); +} + +void parseexprvarref() +{ + char * var_varname = lexident(); + emit("var_"); + emit(var_varname); +} + +void parseexprcall() +{ + char * var_funcname = lexident(); + emit(var_funcname); + emit("("); + char * var_first = "1"; + while (1) + { + char * var_char = peek(); + char * var_isspace = eq(var_char, " "); + char * var_isnotspace = not(var_isspace); + if (var_isnotspace) + { + break; + } + skip(); + char * var_isfirst = eq(var_first, "1"); + char * var_isnotfirst = not(var_isfirst); + if (var_isnotfirst) + { + emit(", "); + } + char * var_char = peek(); + char * var_isquote = eq(var_char, var_quote); + char * var_isnotquote = not(var_isquote); + if (var_isquote) + { + parseconststring(); + } + if (var_isnotquote) + { + parseexprvarref(); + } + char * var_first = "0"; + } + emit(")"); +} + +void parsestatset(char * var_indent) +{ + skipchar(" "); + char * var_var = lexident(); + skipchar(" "); + emit(var_indent); + emit("char * var_"); + emit(var_var); + emit(" = "); + parseconststring(); + emit(";"); + emit(var_eol); + skipchar(var_eol); +} + +void parsestatcalc(char * var_indent) +{ + skipchar(" "); + char * var_var = lexident(); + skipchar(" "); + emit(var_indent); + emit("char * var_"); + emit(var_var); + emit(" = "); + parseexprcall(); + emit(";"); + emit(var_eol); + skipchar(var_eol); +} + +void parsestatif(char * var_indent) +{ + skipchar(" "); + emit(var_indent); + emit("if ("); + parseexprvarref(); + emit(")\n"); + emit(var_indent); + emit("{\n"); + skipchar(var_eol); + char * var_indentt = increaseindent(var_indent); + parseblock(var_indentt); + emit(var_indent); + emit("}\n"); +} + +void parsestatforever(char * var_indent) +{ + emit(var_indent); + emit("while (1)\n"); + emit(var_indent); + emit("{\n"); + skipchar(var_eol); + char * var_indentt = increaseindent(var_indent); + parseblock(var_indentt); + emit(var_indent); + emit("}\n"); +} + +void parsestatbreak(char * var_indent) +{ + emit(var_indent); + emit("break;\n"); + skipchar(var_eol); +} + +void parsestatreturn(char * var_indent) +{ + emit(var_indent); + emit("return "); + char * var_char = peek(); + char * var_isspace = eq(var_char, " "); + if (var_isspace) + { + skip(); + parseexprvarref(); + } + emit(";"); + emit(var_eol); + skipchar(var_eol); +} + +void parsestatemit(char * var_indent) +{ + emit(var_indent); + emit("emit("); + skipchar(" "); + char * var_char = peek(); + char * var_isquote = eq(var_char, var_quote); + char * var_isnotquote = not(var_isquote); + if (var_isquote) + { + parseconststring(); + } + if (var_isnotquote) + { + parseexprvarref(); + } + emit(");\n"); + skipchar(var_eol); +} + +void parsestattrace(char * var_indent) +{ + emit(var_indent); + emit("trace("); + emit(var_quote); + skipchar(" "); + char * var_varname = lexident(); + emit(var_varname); + emit(var_quote); + emit(", "); + emit(var_varname); + emit(")\n"); + skipchar(var_eol); +} + +void parsestatskipchar(char * var_indent) +{ + skipchar(" "); + emit(var_indent); + emit("skipchar("); + char * var_char = peek(); + char * var_isquote = eq(var_char, var_quote); + char * var_isnotquote = not(var_isquote); + if (var_isquote) + { + parseconststring(); + } + if (var_isnotquote) + { + parseexprvarref(); + } + emit(");\n"); + skipchar(var_eol); +} + +void parsestat(char * var_indent) +{ + char * var_call = lexident(); + trace("call", call) + char * var_isset = eq(var_call, "set"); + if (var_isset) + { + parsestatset(var_indent); + return ; + } + char * var_iscalc = eq(var_call, "calc"); + if (var_iscalc) + { + parsestatcalc(var_indent); + return ; + } + char * var_isif = eq(var_call, "if"); + if (var_isif) + { + parsestatif(var_indent); + return ; + } + char * var_isforever = eq(var_call, "forever"); + if (var_isforever) + { + parsestatforever(var_indent); + return ; + } + char * var_isbreak = eq(var_call, "break"); + if (var_isbreak) + { + parsestatbreak(var_indent); + return ; + } + char * var_isreturn = eq(var_call, "return"); + if (var_isreturn) + { + parsestatreturn(var_indent); + return ; + } + char * var_isemit = eq(var_call, "emit"); + if (var_isemit) + { + parsestatemit(var_indent); + return ; + } + char * var_istrace = eq(var_call, "trace"); + if (var_istrace) + { + parsestattrace(var_indent); + return ; + } + char * var_isskipchar = eq(var_call, "skipchar"); + if (var_isskipchar) + { + parsestatskipchar(var_indent); + return ; + } + emit(var_indent); + emit(var_call); + emit("("); + char * var_first = "1"; + while (1) + { + char * var_char = peek(); + char * var_isspace = eq(var_char, " "); + char * var_isnotspace = not(var_isspace); + if (var_isnotspace) + { + break; + } + skip(); + char * var_char = peek(); + char * var_isquote = eq(var_char, var_quote); + char * var_isnotquote = not(var_isquote); + if (var_isquote) + { + parseconststring(); + } + if (var_isnotquote) + { + parseexprvarref(); + } + char * var_isfirst = eq(var_first, "1"); + char * var_isnotfirst = not(var_isfirst); + if (var_isnotfirst) + { + emit(", "); + } + char * var_first = "0"; + } + skipchar(var_eol); + emit(");\n"); +} + +void parseblock(char * var_indent) +{ + while (1) + { + while (1) + { + char * var_char = peek(); + char * var_iseol = eq(var_char, var_eol); + char * var_isnoteol = not(var_iseol); + if (var_isnoteol) + { + break; + } + skip(); + } + char * var_copy = " "; + while (1) + { + char * var_isdone = eq(var_copy, var_indent); + if (var_isdone) + { + break; + } + skipchar("\t"); + char * var_copy = increaseindent(var_copy); + } + char * var_char = peek(); + char * var_iseoblock = eq(var_char, "/"); + if (var_iseoblock) + { + skip(); + skipchar(var_eol); + break; + } + skipchar("\t"); + parsestat(var_indent); + } +} + +void parsefunc() +{ + char * var_funcname = lexident(); + trace("funcname", funcname) + emit("void "); + emit(var_funcname); + emit("("); + char * var_first = "1"; + while (1) + { + char * var_char = peek(); + char * var_isspace = eq(var_char, " "); + char * var_isnotspace = not(var_isspace); + if (var_isnotspace) + { + break; + } + skip(); + char * var_var = lexident(); + char * var_isfirst = eq(var_first, "1"); + char * var_isnotfirst = not(var_isfirst); + if (var_isnotfirst) + { + emit(", "); + } + emit("char * var_"); + emit(var_var); + char * var_first = "0"; + } + skipchar(":"); + skipchar(var_eol); + emit(")\n{\n"); + parseblock(" "); + emit("}\n\n"); +} + +void emitheader() +{ + emit("char * addstringchar(char * str, char * chr)\n"); + emit("{\n"); + emit("}\n"); + emit("\n"); + emit("\n"); +} + +void emitfooter() +{ + emit(""); +} + +void main() +{ + emitheader(); + while (1) + { + char * var_char = peek(); + char * var_iseof = eq(var_char, var_eof); + if (var_iseof) + { + break; + } + while (1) + { + char * var_char = peek(); + char * var_iseol = eq(var_char, var_eol); + char * var_isnoteol = not(var_iseol); + if (var_isnoteol) + { + break; + } + skip(); + } + parsefunc(); + } + emitfooter(); +} + diff --git a/t-diagram.excalidraw b/t-diagram.excalidraw new file mode 100644 index 0000000..cc78aca --- /dev/null +++ b/t-diagram.excalidraw @@ -0,0 +1,2162 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "sa5DlHhxpJaKEJJQyQzX0", + "type": "rectangle", + "x": 725, + "y": 306, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0", + "roundness": { + "type": 3 + }, + "seed": 902003894, + "version": 28, + "versionNonce": 1349374006, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "vC6ze8D2C_8xamOti_FDo" + } + ], + "updated": 1736684246699, + "link": null, + "locked": false + }, + { + "id": "vC6ze8D2C_8xamOti_FDo", + "type": "text", + "x": 752.9500732421875, + "y": 319, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0V", + "roundness": null, + "seed": 1788670826, + "version": 19, + "versionNonce": 1785814954, + "isDeleted": false, + "boundElements": null, + "updated": 1736684250287, + "link": null, + "locked": false, + "text": "it0-out.py\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "sa5DlHhxpJaKEJJQyQzX0", + "originalText": "it0-out.py\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "iRDZE9sWTt5mrJyU5i0OC", + "type": "rectangle", + "x": 727, + "y": 215, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0X", + "roundness": { + "type": 3 + }, + "seed": 792095402, + "version": 70, + "versionNonce": 839175030, + "isDeleted": false, + "boundElements": [ + { + "id": "lVEW9qv7JCrDEcaTw23EF", + "type": "text" + } + ], + "updated": 1736684345816, + "link": null, + "locked": false + }, + { + "id": "lVEW9qv7JCrDEcaTw23EF", + "type": "text", + "x": 786.2900390625, + "y": 240.5, + "width": 78.419921875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Z", + "roundness": null, + "seed": 1438280950, + "version": 68, + "versionNonce": 1195221302, + "isDeleted": false, + "boundElements": null, + "updated": 1736684348736, + "link": null, + "locked": false, + "text": "python3", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "iRDZE9sWTt5mrJyU5i0OC", + "originalText": "python3", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "KD8v4pRNddVymx4gtcuFf", + "type": "rectangle", + "x": 1489.5, + "y": 212.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Z4", + "roundness": { + "type": 3 + }, + "seed": 449131702, + "version": 485, + "versionNonce": 1740622378, + "isDeleted": false, + "boundElements": [ + { + "id": "udIwcNyD5b7w3jOwv5w5O", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "udIwcNyD5b7w3jOwv5w5O", + "type": "text", + "x": 1548.7900390625, + "y": 238, + "width": 78.419921875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Z8", + "roundness": null, + "seed": 1188960682, + "version": 482, + "versionNonce": 2052650218, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "python3", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "KD8v4pRNddVymx4gtcuFf", + "originalText": "python3", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "5dxh4jp-LBMH-OO9qJDeP", + "type": "rectangle", + "x": 873, + "y": 26, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0ZG", + "roundness": { + "type": 3 + }, + "seed": 321199670, + "version": 118, + "versionNonce": 1798632746, + "isDeleted": false, + "boundElements": [ + { + "id": "dNE_Ok9Fv3hB84lcVR7sb", + "type": "text" + } + ], + "updated": 1736684445213, + "link": null, + "locked": false + }, + { + "id": "dNE_Ok9Fv3hB84lcVR7sb", + "type": "text", + "x": 932.2900390625, + "y": 51.5, + "width": 78.419921875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0ZV", + "roundness": null, + "seed": 1944815658, + "version": 115, + "versionNonce": 1274068970, + "isDeleted": false, + "boundElements": null, + "updated": 1736684445213, + "link": null, + "locked": false, + "text": "python3", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "5dxh4jp-LBMH-OO9qJDeP", + "originalText": "python3", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "tucsxFW4KsqJ7nebJW25u", + "type": "rectangle", + "x": 1008, + "y": -165.25, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0ZVV", + "roundness": { + "type": 3 + }, + "seed": 1721035894, + "version": 183, + "versionNonce": 2132921642, + "isDeleted": false, + "boundElements": [ + { + "id": "dJgZuLybWv3V2VMtrrQob", + "type": "text" + } + ], + "updated": 1736684949700, + "link": null, + "locked": false + }, + { + "id": "dJgZuLybWv3V2VMtrrQob", + "type": "text", + "x": 1067.2900390625, + "y": -139.75, + "width": 78.419921875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0ZW", + "roundness": null, + "seed": 718716394, + "version": 179, + "versionNonce": 2088933354, + "isDeleted": false, + "boundElements": null, + "updated": 1736684949700, + "link": null, + "locked": false, + "text": "python3", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "tucsxFW4KsqJ7nebJW25u", + "originalText": "python3", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "V2lA3s8-_GqfV15_LNAa4", + "type": "rectangle", + "x": 1146.75, + "y": -356.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0ZWG", + "roundness": { + "type": 3 + }, + "seed": 859754922, + "version": 224, + "versionNonce": 575082678, + "isDeleted": false, + "boundElements": [ + { + "id": "lpfkRtKp3yuaTTxrV7pDj", + "type": "text" + } + ], + "updated": 1736684961559, + "link": null, + "locked": false + }, + { + "id": "lpfkRtKp3yuaTTxrV7pDj", + "type": "text", + "x": 1206.0400390625, + "y": -331, + "width": 78.419921875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0ZWV", + "roundness": null, + "seed": 1108342262, + "version": 219, + "versionNonce": 600803830, + "isDeleted": false, + "boundElements": null, + "updated": 1736684961559, + "link": null, + "locked": false, + "text": "python3", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "V2lA3s8-_GqfV15_LNAa4", + "originalText": "python3", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "1Fs8X72_ly-ZMkVkF9jsw", + "type": "rectangle", + "x": 1635.5, + "y": 23.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Zd", + "roundness": { + "type": 3 + }, + "seed": 820588022, + "version": 533, + "versionNonce": 503236522, + "isDeleted": false, + "boundElements": [ + { + "id": "YkDbjN74IOoV8cz3amB97", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "YkDbjN74IOoV8cz3amB97", + "type": "text", + "x": 1694.7900390625, + "y": 49, + "width": 78.419921875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Zl", + "roundness": null, + "seed": 268522602, + "version": 529, + "versionNonce": 1524384362, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "python3", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "1Fs8X72_ly-ZMkVkF9jsw", + "originalText": "python3", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "-w6of5yEqut19et1qPd0U", + "type": "rectangle", + "x": 1770.5, + "y": -169.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Zp", + "roundness": { + "type": 3 + }, + "seed": 726852202, + "version": 582, + "versionNonce": 2075944234, + "isDeleted": false, + "boundElements": [ + { + "id": "kKBSfe_0w5BFgwByjlnJa", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "kKBSfe_0w5BFgwByjlnJa", + "type": "text", + "x": 1853.370018005371, + "y": -144, + "width": 31.259963989257812, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Zt", + "roundness": null, + "seed": 294801718, + "version": 580, + "versionNonce": 973746154, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "gcc", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "-w6of5yEqut19et1qPd0U", + "originalText": "gcc", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "zj3TnQ--hn7OHU7CQp6m2", + "type": "rectangle", + "x": 1880.5, + "y": -350.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Zv", + "roundness": { + "type": 3 + }, + "seed": 2112476662, + "version": 631, + "versionNonce": 1775280810, + "isDeleted": false, + "boundElements": [ + { + "id": "q3BfGLBXzdvn6qPpQI7jA", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "q3BfGLBXzdvn6qPpQI7jA", + "type": "text", + "x": 1963.370018005371, + "y": -325, + "width": 31.259963989257812, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0Zx", + "roundness": null, + "seed": 247409770, + "version": 628, + "versionNonce": 632995178, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "gcc", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "zj3TnQ--hn7OHU7CQp6m2", + "originalText": "gcc", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "JpWSt6KcCpoXnoEq_GCJp", + "type": "rectangle", + "x": 566, + "y": 122, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0d", + "roundness": { + "type": 3 + }, + "seed": 2070136810, + "version": 130, + "versionNonce": 1921081002, + "isDeleted": false, + "boundElements": [ + { + "id": "wbK8T0IJWC6QMWKFsflZU", + "type": "text" + } + ], + "updated": 1736684351221, + "link": null, + "locked": false + }, + { + "id": "wbK8T0IJWC6QMWKFsflZU", + "type": "text", + "x": 593.9500732421875, + "y": 135, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l", + "roundness": null, + "seed": 864846774, + "version": 138, + "versionNonce": 1358166378, + "isDeleted": false, + "boundElements": null, + "updated": 1736684351221, + "link": null, + "locked": false, + "text": "it1-in.lang0\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "JpWSt6KcCpoXnoEq_GCJp", + "originalText": "it1-in.lang0\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "xdt3-HzXEKTWxrWigJjiT", + "type": "rectangle", + "x": 1328.5, + "y": 119.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l1", + "roundness": { + "type": 3 + }, + "seed": 1790705462, + "version": 545, + "versionNonce": 2064875562, + "isDeleted": false, + "boundElements": [ + { + "id": "Mj0dEWiGr1Z9qT8mn8V3K", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "Mj0dEWiGr1Z9qT8mn8V3K", + "type": "text", + "x": 1356.4500732421875, + "y": 132.5, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l2", + "roundness": null, + "seed": 779040554, + "version": 554, + "versionNonce": 365292266, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it2-in.lang0\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "xdt3-HzXEKTWxrWigJjiT", + "originalText": "it2-in.lang0\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Vi9eTOIjQtbNC7zF_5rwS", + "type": "rectangle", + "x": 741, + "y": -74, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l4", + "roundness": { + "type": 3 + }, + "seed": 993873258, + "version": 237, + "versionNonce": 989596726, + "isDeleted": false, + "boundElements": [ + { + "id": "5pAueU5y4qXjdgix_f5pa", + "type": "text" + } + ], + "updated": 1736684488394, + "link": null, + "locked": false + }, + { + "id": "5pAueU5y4qXjdgix_f5pa", + "type": "text", + "x": 768.9500732421875, + "y": -61, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l8", + "roundness": null, + "seed": 471340598, + "version": 242, + "versionNonce": 645687542, + "isDeleted": false, + "boundElements": null, + "updated": 1736684455955, + "link": null, + "locked": false, + "text": "it1-in.lang0\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Vi9eTOIjQtbNC7zF_5rwS", + "originalText": "it1-in.lang0\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "nq35O_LXfbGnImWL9Qc06", + "type": "rectangle", + "x": 876, + "y": -265.25, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l88", + "roundness": { + "type": 3 + }, + "seed": 560721334, + "version": 304, + "versionNonce": 524056234, + "isDeleted": false, + "boundElements": [ + { + "id": "hOjP8z6dti8Z5hpgB3d5b", + "type": "text" + } + ], + "updated": 1736684957255, + "link": null, + "locked": false + }, + { + "id": "hOjP8z6dti8Z5hpgB3d5b", + "type": "text", + "x": 903.9500732421875, + "y": -252.25, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l8G", + "roundness": null, + "seed": 1843097770, + "version": 308, + "versionNonce": 1508581622, + "isDeleted": false, + "boundElements": null, + "updated": 1736684957255, + "link": null, + "locked": false, + "text": "it1-in.lang0\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "nq35O_LXfbGnImWL9Qc06", + "originalText": "it1-in.lang0\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "sm_C3kQH3NnoN8GY0WsHa", + "type": "rectangle", + "x": 1014.75, + "y": -456.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l8K", + "roundness": { + "type": 3 + }, + "seed": 529206378, + "version": 345, + "versionNonce": 1752619830, + "isDeleted": false, + "boundElements": [ + { + "id": "P9GsVng_mlohB8reiaQaw", + "type": "text" + } + ], + "updated": 1736684961559, + "link": null, + "locked": false + }, + { + "id": "P9GsVng_mlohB8reiaQaw", + "type": "text", + "x": 1042.7000732421875, + "y": -443.5, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0l8O", + "roundness": null, + "seed": 1003079478, + "version": 348, + "versionNonce": 1453458550, + "isDeleted": false, + "boundElements": null, + "updated": 1736684961559, + "link": null, + "locked": false, + "text": "it1-in.lang0\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "sm_C3kQH3NnoN8GY0WsHa", + "originalText": "it1-in.lang0\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "FkKqusUxwu0Fdxigv0fZW", + "type": "rectangle", + "x": 1503.5, + "y": -75.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0lA", + "roundness": { + "type": 3 + }, + "seed": 480422006, + "version": 653, + "versionNonce": 1818033578, + "isDeleted": false, + "boundElements": [ + { + "id": "ypQvCIgox5Ez78rMw8nJk", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "ypQvCIgox5Ez78rMw8nJk", + "type": "text", + "x": 1531.4500732421875, + "y": -62.5, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0lC", + "roundness": null, + "seed": 1922220522, + "version": 659, + "versionNonce": 1812183146, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it2-in.lang0\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "FkKqusUxwu0Fdxigv0fZW", + "originalText": "it2-in.lang0\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "EIr70q6Ecsh_k_mhXX_d1", + "type": "rectangle", + "x": 1665.5, + "y": -261.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0lD", + "roundness": { + "type": 3 + }, + "seed": 271217654, + "version": 715, + "versionNonce": 612703018, + "isDeleted": false, + "boundElements": [ + { + "id": "5JR6I1qRvymfZUCUFUEiC", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "5JR6I1qRvymfZUCUFUEiC", + "type": "text", + "x": 1693.4500732421875, + "y": -248.5, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0lE", + "roundness": null, + "seed": 887058026, + "version": 720, + "versionNonce": 1951147498, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it2-in.lang0\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "EIr70q6Ecsh_k_mhXX_d1", + "originalText": "it2-in.lang0\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "P5YHIvfxndgZtpw2M194q", + "type": "rectangle", + "x": 1775.5, + "y": -442.5, + "width": 197, + "height": 76, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0lEV", + "roundness": { + "type": 3 + }, + "seed": 560441142, + "version": 764, + "versionNonce": 878958762, + "isDeleted": false, + "boundElements": [ + { + "id": "2mQPed9SFteJcR4z6zGyt", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "2mQPed9SFteJcR4z6zGyt", + "type": "text", + "x": 1803.4500732421875, + "y": -429.5, + "width": 141.099853515625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0lF", + "roundness": null, + "seed": 1202851626, + "version": 768, + "versionNonce": 1685533546, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it2-in.lang0\n(hand written)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "P5YHIvfxndgZtpw2M194q", + "originalText": "it2-in.lang0\n(hand written)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "xhGx8DjmbBrbJtwOztMKw", + "type": "rectangle", + "x": 876, + "y": 121, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0p", + "roundness": { + "type": 3 + }, + "seed": 1738165110, + "version": 320, + "versionNonce": 242867434, + "isDeleted": false, + "boundElements": [ + { + "id": "MFQOMZ3Q8GWnWIOy737f6", + "type": "text" + } + ], + "updated": 1736684364282, + "link": null, + "locked": false + }, + { + "id": "MFQOMZ3Q8GWnWIOy737f6", + "type": "text", + "x": 920.2900619506836, + "y": 146, + "width": 106.41987609863281, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0t", + "roundness": null, + "seed": 781897450, + "version": 334, + "versionNonce": 1304604586, + "isDeleted": false, + "boundElements": null, + "updated": 1736684364282, + "link": null, + "locked": false, + "text": "it1-out0.py", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "xhGx8DjmbBrbJtwOztMKw", + "originalText": "it1-out0.py", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "V4SlwrmLxEj5lu0skBUJ1", + "type": "rectangle", + "x": 1638.5, + "y": 118.5, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0t8", + "roundness": { + "type": 3 + }, + "seed": 1180838326, + "version": 735, + "versionNonce": 1456551466, + "isDeleted": false, + "boundElements": [ + { + "id": "uq1n89eIzIoEF64MTNtC0", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "uq1n89eIzIoEF64MTNtC0", + "type": "text", + "x": 1680.0600662231445, + "y": 143.5, + "width": 111.87986755371094, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0tG", + "roundness": null, + "seed": 1735849130, + "version": 750, + "versionNonce": 1549590762, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it2-out0.py", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "V4SlwrmLxEj5lu0skBUJ1", + "originalText": "it2-out0.py", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "q7GdmXdIkEVil1E7K3Vtv", + "type": "rectangle", + "x": 1009, + "y": -77, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0tV", + "roundness": { + "type": 3 + }, + "seed": 216212342, + "version": 378, + "versionNonce": 1346015286, + "isDeleted": false, + "boundElements": [ + { + "id": "Y8BLkvSVXeE_VCIsnaqRY", + "type": "text" + } + ], + "updated": 1736684465162, + "link": null, + "locked": false + }, + { + "id": "Y8BLkvSVXeE_VCIsnaqRY", + "type": "text", + "x": 1055.2600555419922, + "y": -52.00000000000001, + "width": 102.47988891601562, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0u", + "roundness": null, + "seed": 15431402, + "version": 394, + "versionNonce": 1445402998, + "isDeleted": false, + "boundElements": null, + "updated": 1736684465162, + "link": null, + "locked": false, + "text": "it1-out1.py", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "q7GdmXdIkEVil1E7K3Vtv", + "originalText": "it1-out1.py", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "4tXC4CO1352XEGgn5ZWPo", + "type": "rectangle", + "x": 1144, + "y": -268.25, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0u1", + "roundness": { + "type": 3 + }, + "seed": 72402678, + "version": 443, + "versionNonce": 210036778, + "isDeleted": false, + "boundElements": [ + { + "id": "nB2NHk0Nl6BGmmPd2LQlN", + "type": "text" + } + ], + "updated": 1736684949700, + "link": null, + "locked": false + }, + { + "id": "nB2NHk0Nl6BGmmPd2LQlN", + "type": "text", + "x": 1187.5300598144531, + "y": -243.25, + "width": 107.93988037109375, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0u2", + "roundness": null, + "seed": 993774442, + "version": 460, + "versionNonce": 789420906, + "isDeleted": false, + "boundElements": null, + "updated": 1736684954094, + "link": null, + "locked": false, + "text": "it1-out2.py", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "4tXC4CO1352XEGgn5ZWPo", + "originalText": "it1-out2.py", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "_njzXhKgPzadFQfgDnI_E", + "type": "rectangle", + "x": 1282.75, + "y": -459.5, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0u2V", + "roundness": { + "type": 3 + }, + "seed": 335671082, + "version": 484, + "versionNonce": 1075185078, + "isDeleted": false, + "boundElements": [ + { + "id": "K8FKdMdbEtQXcBMy_4JGQ", + "type": "text" + } + ], + "updated": 1736684961559, + "link": null, + "locked": false + }, + { + "id": "K8FKdMdbEtQXcBMy_4JGQ", + "type": "text", + "x": 1327.2000579833984, + "y": -434.5, + "width": 106.09988403320312, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0u3", + "roundness": null, + "seed": 414675062, + "version": 502, + "versionNonce": 1109378358, + "isDeleted": false, + "boundElements": null, + "updated": 1736684963415, + "link": null, + "locked": false, + "text": "it1-out3.py", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "_njzXhKgPzadFQfgDnI_E", + "originalText": "it1-out3.py", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "ZjoMA7OeaNnjNpaVjFLsc", + "type": "rectangle", + "x": 1489, + "y": 299.25, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0u4", + "roundness": { + "type": 3 + }, + "seed": 1033809526, + "version": 504, + "versionNonce": 1889874858, + "isDeleted": false, + "boundElements": [ + { + "id": "-3hZTUkUzcwcd4qQ6tH9Q", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "-3hZTUkUzcwcd4qQ6tH9Q", + "type": "text", + "x": 1533.4500579833984, + "y": 324.25, + "width": 106.09988403320312, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0u8", + "roundness": null, + "seed": 1942100970, + "version": 523, + "versionNonce": 1708469866, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it1-out3.py", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ZjoMA7OeaNnjNpaVjFLsc", + "originalText": "it1-out3.py", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "_dSfxbsy4dHEcZZ5zwehT", + "type": "rectangle", + "x": 1771.5, + "y": -79.5, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0uG", + "roundness": { + "type": 3 + }, + "seed": 656376566, + "version": 741, + "versionNonce": 280482090, + "isDeleted": false, + "boundElements": [ + { + "id": "gSS5ui-65NHgMOUQh5qaI", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "gSS5ui-65NHgMOUQh5qaI", + "type": "text", + "x": 1820.8600616455078, + "y": -54.5, + "width": 96.27987670898438, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0uV", + "roundness": null, + "seed": 2126958442, + "version": 761, + "versionNonce": 1958222826, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it2-out1.c", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "_dSfxbsy4dHEcZZ5zwehT", + "originalText": "it2-out1.c", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "7AT_y3BQx_MTOK2YJ5gyT", + "type": "rectangle", + "x": 1875.5, + "y": -258.5, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0uX", + "roundness": { + "type": 3 + }, + "seed": 1264283498, + "version": 803, + "versionNonce": 1877020330, + "isDeleted": false, + "boundElements": [ + { + "id": "0RfiY6ME4YQvG93V4ZTf7", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "0RfiY6ME4YQvG93V4ZTf7", + "type": "text", + "x": 1922.1300659179688, + "y": -233.5, + "width": 101.7398681640625, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0uZ", + "roundness": null, + "seed": 1038423094, + "version": 823, + "versionNonce": 1725802858, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it2-out2.c", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "7AT_y3BQx_MTOK2YJ5gyT", + "originalText": "it2-out2.c", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "wtdGNdh8BUiQz-JxcpA_L", + "type": "rectangle", + "x": 1990.5, + "y": -443.5, + "width": 195.0000000000001, + "height": 74.99999999999999, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0ua", + "roundness": { + "type": 3 + }, + "seed": 1360068714, + "version": 840, + "versionNonce": 1895361578, + "isDeleted": false, + "boundElements": [ + { + "id": "yJu3JDSgZH2EElzwcEo8a", + "type": "text" + } + ], + "updated": 1736684934138, + "link": null, + "locked": false + }, + { + "id": "yJu3JDSgZH2EElzwcEo8a", + "type": "text", + "x": 2038.050064086914, + "y": -418.5, + "width": 99.89987182617188, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0ub", + "roundness": null, + "seed": 1154290486, + "version": 865, + "versionNonce": 69064426, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "text": "it2-out3.c", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "wtdGNdh8BUiQz-JxcpA_L", + "originalText": "it2-out3.c", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "eDELti94mLy2t3R4bECOH", + "type": "arrow", + "x": 685, + "y": 96, + "width": 61, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a5", + "roundness": { + "type": 2 + }, + "seed": 1666782582, + "version": 59, + "versionNonce": 2125545782, + "isDeleted": false, + "boundElements": null, + "updated": 1736684495257, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 61, + -75 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "PeyUjZakaWogn3vg3j8eo", + "type": "arrow", + "x": 820, + "y": -95.25, + "width": 61, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a5G", + "roundness": { + "type": 2 + }, + "seed": 2143844406, + "version": 124, + "versionNonce": 1720455530, + "isDeleted": false, + "boundElements": null, + "updated": 1736684957255, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 61, + -75 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "w4Ar-4KEfqfFsRbjOrY5k", + "type": "arrow", + "x": 958.75, + "y": -286.5, + "width": 61, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a5O", + "roundness": { + "type": 2 + }, + "seed": 84834794, + "version": 163, + "versionNonce": 1556910134, + "isDeleted": false, + "boundElements": null, + "updated": 1736684961559, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 61, + -75 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "9OGDgT_Lsmfhwczs8Rc-Z", + "type": "arrow", + "x": 1447.5, + "y": 93.5, + "width": 61, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a6", + "roundness": { + "type": 2 + }, + "seed": 302049590, + "version": 472, + "versionNonce": 550988202, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 61, + -75 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "og_eon1hJp99Tg0eXsa8W", + "type": "arrow", + "x": 1609.5, + "y": -92.5, + "width": 61, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a7", + "roundness": { + "type": 2 + }, + "seed": 501515574, + "version": 532, + "versionNonce": 2119214186, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 61, + -75 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "MZIQeqz9pm0T9ka6Vu3kQ", + "type": "arrow", + "x": 1719.5, + "y": -273.5, + "width": 61, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a8", + "roundness": { + "type": 2 + }, + "seed": 1335447670, + "version": 579, + "versionNonce": 911509290, + "isDeleted": false, + "boundElements": null, + "updated": 1736684934138, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 61, + -75 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "elbowed": false + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/t-diagram.png b/t-diagram.png new file mode 100644 index 0000000..b11aab8 Binary files /dev/null and b/t-diagram.png differ