|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                               !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN O P Q R S TUVW X Y Z [ \]^_`abcdefghijklmnopqrstuvwxy z { | } ~                             ;Safe068"=  Safe68# Safe68#Safe68#  !"#$% Safe68*J&Almost all key presses are registered including modifier keys. Expect character keys to come in as their character. Press a c, get a "c". If a modifier is used and a different character is expected, it will be that instead. Press shift + c, get a Ct. Modifiers are also sent as their string representation: "shift", "ctrl" or "alt". Space is expected as "space". &'&'Safe*()*++*)(Safe68GQ, Opcode: 1900 - Opcode: 1901. Opcode: 1902/ Opcode: 18000 Opcode: 18011 Opcode: 18022 Opcode: 23003 Opcode: 23014@Opcode: 2302 Usually this is the top left corner of the element 6 Opcode: 22019 Opcode: 2200; Opcode: 1601< Opcode: 1602= Opcode: 1603> Opcode: 1604? Opcode: 1605@ Opcode: 1606A Opcode: 1607B Opcode: 1608D Opcode: 1600E Opcode: 1500F Opcode: 1501G Opcode: 1502H Opcode: 1503I Opcode: 2400J Opcode: 2401K Opcode: 2402M Opcode: 1401N Opcode: 1402P Opcode: 1400Q Opcode: 1300R Opcode: 1301S Opcode: 1200T Opcode: 1201U Opcode: 1000VOpcode: 1001 First circle = inner circle, Second circle is enclosing circleW Opcode: 1002X Opcode: 0900Y Opcode: 0901Z Opcode: 0902[ Opcode: 0903\ Opcode: 0904] Opcode: 0800^ Opcode: 0801_Opcode: 0802 [ScreenPixel] should be as long as width * height * 4. Each quad is red,green,blue,alphaa Opcode: 0701b Opcode:0702c Opcode: 0703d Opcode: 0700f Opcode: 0601g Opcode: 0602h Opcode: 0600j Opcode: 0501k Opcode: 0502l Opcode: 0500m Opcode: 0400n Opcode: 0401o Opcode: 0402p Opcode: 0403q Opcode: 0404r Opcode: 0405s Opcode: 0406t Opcode: 0407u Opcode: 0408v Opcode: 0300w Opcode: 0301 x Opcode: 0302 y Opcode: 0303 z Opcode: 0304 { Opcode: 0305 |Reserved type words Type: t | Opcode Arguments: a | List of arguments for that data type Route: r | Either s for system or u8 for user Object: o | The object that is beneathExample: {r: s, o: {SystemMeasuredText object}}SystemMeasuredText object: {t:2102, a1:[CanvasId, CanvasText object, ScreenDimensions]} Opcode: 0200} Opcode: 0201~ Opcode: 0202 Opcode: 0203 Opcode: 0204 Opcode: 0100 Opcode: 0101 Opcode: 2000 Opcode: 2001 Opcode: 2100 Opcode: 2101 In degrees,.-/1024356789:BA@?>=<;CDEHGFIKJLNMOPQRSTUWVX\[ZY]_^`cbadegfhikjlmutsrqponvzyxw{|~},-./0123456:;<=>?@ABEFGHIJKLMNQRSTUVWXYZ[\]^_`abcefgijkmnopqrstuvwxyz{|}~SafeKNoneKNoneL Safe68;=Q0Returns the vector perpendicular on the given vector between the 2 points. Always has positive y and vector length 1; y is inverted in canvasReturns the vector perpendicular on the given vector between the 2 points. Always has negative y and vector length 1; y is inverted in canvas In degrees-6 Safe68SySafe68TN2            Safe68bR"Z| The point indications are from the perspective of a regular Cartesian cordinate system.'| Rotation is around a point on the canvas. May be the centre of the boundingbox (enclosing rectangle) or an arbitrary point. Angle is in degrees and counter-clockwise in the cordinate system(from the x-axis to the y-axis) and visually on canvas clock-wise.)8Should contain atleast 1 shape. Rotation before Position*| Position is upperleftcorner. Position is the corner closes to origin. Visually in canvas, this is top left. In a Cartesian cordinate system, this is bottom left.+| Position is center,The first point of the regular polygon, always starts in the direction from the x-axis.(Towards x-infinity). Position is the the centre of the regular polygonB"| Can contain any number of points@EFGH!"#$%&'(-*)+,./01<?=>B23456789:;@ACDEFGHIJKLMNOPQRSTUVWXYZ[!"#$%&'(<)*+,-./012345678945:78945;:7894<=>5?7894@A894B894BC7894B7894DESafed Safe68eX!\]^_`abcdefhgijklmnopqrstuvwxyz{|"ijfghdecba`_^\]}klmnopqrstuvwxyz{|\]defghij Safe68f !Safe 0678;<=STVih Convert to a  Convert to a  A version of 8 that works for any data type that has an instance for "Nonei"#None68jNone68k $None1l  %Nonemv&NonemNonenHW      !"$#%&/.-,+*)('0123456789]9876543210%&'()*+,-./!"#$              !"#$% &'()*+,-./'Noner(Noner)Nones$*Nonese+Nones,Noneteventloop function eventloop function -Nonet.Noneu';<=>?@Noneux !"#$%;<=>?@;<=>?@%$#"! /Nonev8ABCNonev}ABCABC0NonevDEFGHNonew* DEFGH DEFGH1NonewIJKLMNonex IJKLMIJKLM 2NonexNOPQRS NoneyPNOPQRSNOPQRS3Nonez$TUVNonezieEFGH!"#$%&'(-*)+,./01<?=>B23456789:;@ACDEFGHIJKLMNOPQRSTUVWXYZ[TUVTUV[ZYXWVUTSRQPONMLKJIHGFDE()*+,-./012345678945:78945;:7894<=>5?7894@A894B894BC7894B7894&'#$%!"EFGH4None~UWXYZ[ None~WXYZ[WXYZ[5None\]^_`None&'\]^_`\]^_`&'NoneOabcabc6None7NonedefghNone),-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv{wxyz|}~defghdefgh|}~vwxyz{mnopqrstulijkhefgd`abc]^_XYZ[\UVWSTQRPOLMNIJKEFGHDC:;<=>?@AB98756234/01,-.8NoneijklNoneijklijkl|}~vwxyz{mnopqrstulijkhefgd`abc]^_XYZ[\UVWSTQRPOLMNIJKEFGHDC:;<=>?@AB98756234/01,-.9None:NoneGrab an outEvent from the outEventQueue and route it to the correct module sender if any. If there isn't one, throw a NoOutRouteException. The router will continue until it: - Comes across a Stop outEvent: Raises a RequestShutdownException - Raises an exception - Receives an exception (Only possibility is ShutdownException) In all cases, a Stop outEvent is sent to all module senders.NoneXm-Starts the entire system. First the setup phase is handled to setup the different concurrent resources. This is followed by the initialization phase where all modules are initialised. Than, the different worker threads are spawned and finally the system thread will go to work as the eventloop thread.^Shutting down is handled centrally through the system thread (main thread). If any of the threads(including the system thread) receive an exception, only the first exception is thrown to the system thread which will try to shutdown immediately. This exception is logged by the system thread. All other exceptions are logged by their respective threads. The system thread will than shutdown the worker threads. This is done by throwing exceptions to all workerthreads except sender threads. These are sent a Stop event. If they take longer than 1 second, to finish up, they will also be thrown an exception.oUtility function in order to create the different thread actions in the system. Assumed is that the action requires the system configuration, the module configuration and some resource that may be available in the module configuration. mnopqrstuvwx mnopqrstuvwx;None GCheckes to see if there is a node on a certain position Abstracts the standardized <= to  Abstracts  back to  BasicShapes and Canvas events'Translates color datatype to RGBA codes.Translates the thickness to a float Returns the point when making a step f long from the point start in the direction of the vector. The length between start pos and result pos is always f.Vector from p1 to p2 Returns the vector perpendicular on the given vector between the 2 points. Always has positive y and vector length 1; y is inverted in canvasReturns the vector perpendicular on the given vector between the 2 points. Always has negative y and vector length 1; y is inverted in canvas8Returns the size of the vector "yz{|}~ NoneT      yz{|}~Tyz{|}~      >?@ABCDEFGHIJKLM?NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrrstuvwxyz{|}~     y                                        !"#$%&'()*+,-../00123456789:;<=>??@ABCDEFGHIJKL-dMNOOPQRSSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy5z786{|}~   N                                                     !!!""""""""""""""""""""""""""""""""""################      !!"#$%&'())*+,--./01234567889:;<==>?@@ABCDEFGHIJKLMNOPQRST.U.V.W.X.Y.Z/[/\/]0^0_0`0a0b1c1d1e1f1g2h2i2j2k2l2m3n3o3p4q4r4s4t4u5v5w5x5y5z{|}7~77778888;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!!$$$$$$$$$$$%%%%%%%%%%%%%%%%%%&&&&'(())***+,,,,-69::::(eventloop-0.8.2.7-HLMH3aXjMz89XaMriCCZgXEventloop.Module.FileEventloop.Module.StdInEventloop.Module.StdOutEventloop.Module.Timer#Eventloop.Module.Websocket.KeyboardEventloop.Types.Common!Eventloop.Module.Websocket.CanvasEventloop.Module.BasicShapesEventloop.Utility.Vectors Eventloop.Module.Websocket.MouseEventloop.Module.Graphs#Eventloop.Utility.Trees.GeneralTreeEventloop.Module.DrawTrees!Eventloop.Module.StatefulGraphicsEventloop.Types.EventsEventloop.Types.SystemEventloop.DefaultConfigurationEventloop.CoreEventloop.Module.File.TypesEventloop.Module.StdIn.TypesEventloop.Module.StdOut.TypesEventloop.Module.Timer.Types)Eventloop.Module.Websocket.Keyboard.Types'Eventloop.Module.Websocket.Canvas.Types(Eventloop.Module.Websocket.Canvas.Opcode.Eventloop.Module.Websocket.Canvas.JSONEncoding,Eventloop.Module.BasicShapes.MeasureTextHack&Eventloop.Module.Websocket.Mouse.TypesEventloop.Module.Graphs.Types"Eventloop.Module.BasicShapes.Types"Eventloop.Utility.Trees.LayoutTree Eventloop.Module.DrawTrees.Types*Eventloop.Module.DrawTrees.RoseTreeGeneric$Eventloop.Module.BasicShapes.Classes'Eventloop.Module.StatefulGraphics.TypesEventloop.Types.ExceptionEventloop.Utility.WebsocketsEventloop.Utility.ConfigEventloop.System.TeardownThreadEventloop.System.SenderThread Eventloop.System.RetrieverThreadEventloop.System.Processing%Eventloop.System.InitializationThread Eventloop.System.EventloopThread'Eventloop.System.DisplayExceptionThreadEventloop.Module.Timer.TimerEventloop.Module.StdOut.StdOutEventloop.Module.StdIn.StdInEventloop.Module.File.File$Eventloop.Module.DrawTrees.DrawTrees(Eventloop.Module.BasicShapes.BasicShapes&Eventloop.Module.Websocket.Mouse.Mouse,Eventloop.Module.Websocket.Keyboard.KeyboardEventloop.System.Setup(Eventloop.Module.Websocket.Canvas.Canvas2Eventloop.Module.StatefulGraphics.StatefulGraphicsEventloop.OutRouter Eventloop.System.OutRouterThreadEventloop.Module.Graphs.GraphsEventLoop.Types EventTypesFileOutOpenFile CloseFileRetrieveContents RetrieveLine RetrieveCharIfEOFWriteToFileIn FileOpened FileClosedRetrievedContents RetrievedLine RetrievedCharIsEOFWroteToStdInOutStdInReceiveContentsStdInReceiveLineStdInReceiveCharStdInInStdInReceivedContentsStdInReceivedLineStdInReceivedChar StdOutOut StdOutMessageTimerOutSetTimerSetIntervalTimer UnsetTimerTimerInTickTimerStartFunction StartedTimer TickBufferTimerIdMicroSecondDelayKeyboardKey NumericIdNamedIdProcessingDescriptionEventloopModuleIdentifier ClearPartClearRectangle ClearCanvasCSSUnit CSSPixels CSSPercentage CSSBindPoint CSSFromCenterCSSFromDefault CSSPositionCSSMeasurements CSSTopOffset CSSLeftOffsetCanvasTransformSaveRestore TranslateRotateScale Transform SetTransformResetTransformTransformationMatrix TransformUnit Alignment AlignLeft AlignRight AlignCenterTextFill NoTextFill TextStroke NoTextStrokeTextFillRenderStyleTextStrokeRenderStyleFont CanvasTextCanvasGradientTypeRadialGradientLinearGradientPatternRepetitionRepeatRepeatXRepeatYNoRepeat CanvasImage CanvasElement ImageData RenderStyle CanvasColorCanvasGradient CanvasPatternCanvasColorStopPathFill NoPathFillPathRenderFillStyle PathStroke NoPathStrokePathRenderStrokeStyleScreenPathPartMoveToLineTo BezierCurveToQuadraticCurveToArcToArc Rectangle ClosePathCanvasOperationDrawPathDrawText DoTransformClearFrame CanvasOut SetupCanvasTeardownCanvasCanvasOperations MeasureTextCanvasIn MeasuredTextSystemCanvasOutSystemMeasureTextSystemCanvasInSystemMeasuredTextRoutedMessageOut OutUserCanvasOutSystemCanvasRoutedMessageIn InUserCanvasInSystemCanvasFontSize FontFamilyScreenLineThicknessScaleYScaleX ScaleUnit ScreenCircleColorStopOffset ScreenPixel ScreenColor ScreenAlpha ScreenBlue ScreenGreen ScreenRedScreenColorMetricZIndexCanvasIdScreenEndAngleScreenStartingAngleScreenEndPointScreenControlPointScreenStartingPointScreenDimensions ScreenPoint ScreenAngle ScreenRadius ScreenHeight ScreenWidthScreenYScreenX ScreenMetricOpcodeCanvasSystemReceiveBufferRotateLeftAroundrotateLeftAround ToPolarCoord toPolarCoordToPointtoPointVector2D|+||-||/|* negateVector angleBetween translate ExtremaCoordxMinxMaxyMinyMaxCoordxyPoint PolarCoordOffsetYXLengthRadiansAngledegreesToRadiansradiansToDegrees lengthToPointlengthBetweenPointsdifferenceBetweenPoints averagePointdownPerpendicularupPerpendicular followVectorintersectVector turnToVector originPoint $fCoordPoint$fExtremaCoord[]$fVector2DPoint$fToPointPolarCoord$fCoordPolarCoord$fToPolarCoordPoint$fRotateLeftAroundPoint$fRotateLeftAroundPolarCoord$fVector2DPolarCoord$fShowPolarCoord$fEqPolarCoord $fShowPoint $fEqPoint$fGenericPoint $fNFDataPoint MouseButton MouseLeft MouseRight MouseMiddle MouseEventClick DoubleClick MouseMove MouseDownMouseUp MouseEnter MouseLeave MouseType MouseCanvasMouseSVGMouseInMouseWeighted UnweightedDirected Undirected ThicknessThinThickColorRedBlueGreenPurpleGreyYellowOrangeBlackWhiteGraphnodesedgesdirectedweightedEdgeNodeWeightLabel GraphsOut SetupGraphs DrawGraph InstructionsGraphsInVectorPos BoundingBox RotatePoint AroundCenter AroundPointRotationShapeCompositeShapeCircleRegularPolygonTextLine MultiLineFilledMultiLinePolygonshapes positionM rotationMposition dimensions fillColorstrokeLineThickness strokeColorradiusnumberOfPointstext fontFamilyfontSize alignmentpoint1point2points fillWidthBasicShapesOut DrawShapesNumberOfPoints LowerRight LowerLeft UpperRight UpperLeftStrokeLineThickness FillThickness StrokeColor FillColorAlphaRadius DimensionsHeightWidthPositionGraphicalNumericGeneralizeTreegeneralizeTreeMiddle BottomOffset RightOffset TopOffset LeftOffset GeneralLineGeneralNodeContentGeneralNodeText GeneralNode GeneralTreeGeneralTreeBoxtextFont textHeight charWidthmarginBetweenTreesmarginBetweenNodeContentmarginBetweenNodeRowsmarginBetweenNodeColumnsgeneralNodeDimensionflattenDimensionsgeneralNodeContentDimensionlayoutGeneralTreelayoutGeneralTreeChildren layoutLinelayoutGeneralTreeslayoutGeneralNodeContentListlayoutGeneralNodeContenttextSize treeIndex$fGeneralizeTreeGeneralTree$fShowGeneralNodeContent$fEqGeneralNodeContent$fGenericGeneralNodeContent$fNFDataGeneralNodeContent$fShowGeneralLine$fEqGeneralLine$fGenericGeneralLine$fNFDataGeneralLine$fShowGeneralTree$fEqGeneralTree$fGenericGeneralTree$fNFDataGeneralTreeRoseTreeRoseNodeRBTreeRBNode NodeColorNodeRed NodeBlackNodeGrey DrawTreesOut DrawTrees ToRoseTree toRoseTreegenericToRoseTreeToScreenPathParttoScreenPathPartsToCanvasOperationstoCanvasOperations ToCanvasOut toCanvasOutOverlapsoverlapscontainstouches ToBoundingBox toBoundingBoxToCentertoCenter ToPrimitives toPrimitivesGeometricPrimitivePoints CircleAreaopOnBoundingBoxallRegularPolygonPointsboundingBoxFromPrimitives normalizeBBox roundPoint roundColorstrokePointsForLinestrokePointsForConnection strokePointsstrokePointsClosedPathfindRotationPoint toCanvasTexttoCanvasPathFillhasCanvasPathFillallScreenPolygonPoints NoDimChange noDimChangeGraphicsStates GraphicsState StatefulBBStatefulGraphicStatefulGraphicPerformedDrawnModifiedRemovedNoOpStatefulGraphicsOutDrawRemoveOutOutFileOutTimer OutStdOutOutStdIn OutCanvasOutBasicShapes OutDrawTrees OutGraphsOutStatefulGraphicsStopInStart InKeyboardInMouseInFileInTimerInStdInInCanvasInGraphs$fEqIn$fShowIn$fEqOut $fShowOut $fGenericOut $fNFDataOutIOState TimerState FileStateStatefulGraphicsStateNoStatestartedIntervalTimers startedTimersopenedstates IOConstantsMouseConstantsKeyboardConstantsCanvasConstantsStdInConstantsTimerConstants FileConstants NoConstants clientSocketclientConnection serverSocketcanvasSystemReceiveBuffer stdInInQueue tickInQueue fileInQueue SharedIOStateSharedIOConstantssafePrintToken measureText!EventloopSetupModuleConfigurationmoduleIdentifier initializerFeventRetrieverF preprocessorFpostprocessorF eventSenderF teardownFEventloopSetupConfigurationbeginProgstate eventloopFsetupModuleConfigurationsEventloopSystemConfigurationeventloopConfig moduleConfigssharedIOConstantssharedIOStateTsystemThreadIdretrieverThreadsMoutRouterThreadMsenderThreadsM exceptions isStoppingMEventloopConfiguration progstateT eventloopFunc inEventQueue outEventQueue"EventloopModuleSenderConfigurationsendersenderEventQueueEventloopModuleConfigurationmoduleId ioConstantsioStateT initializerM retrieverM preprocessorMpostprocessorM senderConfigM teardownMSenderEventQueue OutEventQueue InEventQueueOutEventRouterTeardown EventSender PostProcessor PreProcessorEventRetriever Initializer$fShowIOConstantssetupTimerModuleConfigurationtimerModuleIdentifiertimerInitializertimerEventRetrievertimerEventSender timerTeardownsetupStdOutModuleConfigurationstdOutModuleIdentifierstdOutEventSendersetupStdInModuleConfigurationstdInModuleIdentifierstdInInitializerstdInEventRetrieverstdInEventSendersetupFileModuleConfigurationfileModuleIdentifierfileEventRetrieverfileEventSender fileTeardown!setupDrawTreesModuleConfigurationdrawTreesModuleIdentifierdrawTreesPostProcessorshowGeneralTreeList rbExampleTreeroseExampleTree#setupBasicShapesModuleConfigurationbasicShapesModuleIdentifierbasicShapesPostProcessorsetupMouseModuleConfigurationmouseModuleIdentifiermouseInitializermouseEventRetrievermouseEventSender setupKeyboardModuleConfigurationkeyboardModuleIdentifierkeyboardInitializerkeyboardEventRetrieverkeyboardEventSender%allModulesEventloopSetupConfigurationsetupSharedIOConstantssetupSharedIOStatesetupCanvasModuleConfigurationcanvasModuleIdentifiercanvasInitializercanvasEventRetrievercanvasEventSender(setupStatefulGraphicsModuleConfiguration statefulGraphicsModuleIdentifierstatefulGraphicsInitializerstatefulGraphicsPostProcessorstartEventloopSystemterminateWithinOrThrowExceptionthreadActionsBasedOnModulespawnWorkerThreadregisterRetrieverThreadregisterOutRouterThreadregisterSenderThreadthrowShutdownExceptionToThreadallWorkerThreadsretrieverThreadsoutRouterThread senderThreadssetupGraphsModuleConfigurationgraphsModuleIdentifier nodeRadius xArrowSize yArrowSize weightHeightdimCanvasGraphsroundDimCanvasGraphscanvasGraphsWidthcanvasGraphsHeightinstructionsHeightinstructionsBeginAtcanvasInstrWidthcanvasInstrHeightdimCanvasInstrroundDimCanvasInstrcanvasIdGraphscanvasIdInstructionsonNodegraphsPreProcessorgraphsPostProcessorcolorToRGBAColorthicknessToFloatfindNode graphToShapes nodeToShapes edgeToShapes posOnVector vectorizedownPerpendicularToupPerpendicularTo vectorSizeToOpcodetoOpcodeoperationObjectmeasureTextRefsaveMeasureTextuseMeasureTextConnect BottomConnect TopConnect LayoutLineLayoutNodeContent LayoutNodeLayoutNodeText LayoutTreeLBox marginLine lineThickness textThickness printTreeprintNodeContent printLinemarginizeLinePointsbase GHC.GenericsGeneric GToRoseTree gtoRoseTreeEventloopExceptionTeardownExceptionSendingExceptionProcessingExceptionRetrievingExceptionInitializationExceptionNoOutRouteExceptionRequestShutdownExceptionShuttingDownExceptionexceptionMessage&network-2.6.3.2-Elf6Dxkfz0iKjb1zv5eBTPNetwork.Socket iNADDR_ANY)websockets-0.9.8.2-JREN4EcndphFCImRYnA9YMNetwork.WebSockets.Connection ConnectionUnbufferedReaderThread ReaderThread ClientSocket ServerSocket ReceiveBufferMessagePortHostcreateBindListenServerSocketacceptFirstConnectionsetupWebsocketConnectionhandleCloseRequestException takeMessage writeMessagewriteBinaryMessage isConnectedcloseWebsocketConnectiondestroyWebsocketConnection ipAddress keyboardPort mousePort canvasPortstartTeardowning startSendingsendOnestartRetrieving retrieveOneprocessEventWithModuleprocessEventsWithModules processEventsstartInitializingeventloopSteps eventloopStepstartEventloopingfindProcessorsstartDisplayingExceptionssetupEventloopSystemConfig routeOutEventstartOutRouting outRoutes outRouteOneoutRouteBroadcastStop