wyvern-diagrams 0.3.1.3 → 0.3.2.0
raw patch · 11 files changed
+2093/−48 lines, 11 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ LexerV2: AlexPn :: !Int -> !Int -> !Int -> AlexPosn
+ LexerV2: TokenAction :: AlexPosn -> String -> Token
+ LexerV2: TokenCCB :: AlexPosn -> Token
+ LexerV2: TokenOCB :: AlexPosn -> Token
+ LexerV2: TokenSoloIdentifier :: AlexPosn -> String -> Token
+ LexerV2: alexScanTokens :: String -> [Token]
+ LexerV2: data AlexPosn
+ LexerV2: data Token
+ LexerV2: instance GHC.Classes.Eq LexerV2.AlexPosn
+ LexerV2: instance GHC.Classes.Eq LexerV2.Token
+ LexerV2: instance GHC.Classes.Ord LexerV2.AlexPosn
+ LexerV2: instance GHC.Show.Show LexerV2.AlexPosn
+ LexerV2: instance GHC.Show.Show LexerV2.Token
+ LexerV3: AlexPn :: !Int -> !Int -> !Int -> AlexPosn
+ LexerV3: TokenAction :: AlexPosn -> String -> Token
+ LexerV3: TokenCCB :: AlexPosn -> Token
+ LexerV3: TokenOCB :: AlexPosn -> Token
+ LexerV3: TokenSoloIdentifier :: AlexPosn -> String -> Token
+ LexerV3: data AlexPosn
+ LexerV3: data Token
+ LexerV3: instance GHC.Base.Applicative LexerV3.Alex
+ LexerV3: instance GHC.Base.Functor LexerV3.Alex
+ LexerV3: instance GHC.Base.Monad LexerV3.Alex
+ LexerV3: instance GHC.Classes.Eq LexerV3.AlexPosn
+ LexerV3: instance GHC.Classes.Eq LexerV3.Token
+ LexerV3: instance GHC.Classes.Ord LexerV3.AlexPosn
+ LexerV3: instance GHC.Show.Show LexerV3.AlexPosn
+ LexerV3: instance GHC.Show.Show LexerV3.Token
+ LexerV3: lexAll :: Alex [Token]
+ LexerV3: runAlex :: String -> Alex a -> Either String a
Files
- CHANGELOG.md +6/−0
- diagrams/temp.svg +1/−1
- diagrams/temp.txt +128/−19
- src/app/Main.hs +21/−5
- src/lib/LexerV2.hs +900/−0
- src/lib/LexerV2.x +40/−0
- src/lib/LexerV3.hs +914/−0
- src/lib/LexerV3.x +54/−0
- src/lib/Parser.hs +18/−16
- src/lib/Parser.y +8/−6
- wyvern-diagrams.cabal +3/−1
CHANGELOG.md view
@@ -1,3 +1,9 @@+## [0.3.2.0](https://github.com/PiotrJustyna/wyvern/tree/0.3.2.0) (2026-01-28)++It is imperative to the end user to see where in the input files they are making mistakes. Previous versions just informed the user that there is a lexing error in their input while the new version points out exactly where it was found. The change makes learning wyvern and working with it that much easier. I hope!++- resolved issue 55 - more details extracted from the lexer: https://github.com/PiotrJustyna/wyvern/issues/55+ ## [0.3.1.3](https://github.com/PiotrJustyna/wyvern/tree/0.3.1.2) (2026-01-22) - resolved issue 52 - support for text 2.1.3: https://github.com/PiotrJustyna/wyvern/issues/52
diagrams/temp.svg view
@@ -1,3 +1,3 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg font-size="1" viewBox="0.0 0.0 1000.0 1000.0" stroke="rgb(0,0,0)" xmlns="http://www.w3.org/2000/svg" width="1000.0000" stroke-opacity="1" height="1000.0000" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"><defs></defs><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 166.6667,847.2222 h 0.0000 c 0.0000,-9.5883 -7.7728,-17.3611 -17.3611 -17.3611h -131.9444 c -9.5883,-0.0000 -17.3611,7.7728 -17.3611 17.3611h 0.0000 c -0.0000,9.5883 7.7728,17.3611 17.3611 17.3611h 131.9444 c 9.5883,0.0000 17.3611,-7.7728 17.3611 -17.3611Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,83.3333,847.2222)" stroke="none" dominant-baseline="middle" text-anchor="middle">end</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,812.5000 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,395.8333 v 416.6667 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,378.4722 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,395.8333 v 416.6667 h -208.3333 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 708.3333,534.7222 v 277.7778 h -416.6667 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 916.6667,604.1667 v 69.4444 h -208.3333 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 833.3333,621.5278 h 166.6667 v 34.7222 h -166.6667 v -34.7222 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,916.6667,638.8889)" stroke="none" dominant-baseline="middle" text-anchor="middle">2</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 916.6667,656.2500 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 916.6667,604.1667 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 791.6667,569.4444 h 125.0000 v 34.7222 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 708.3333,673.6111 h 0.0000 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,691.6667,597.2222)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,806.2500,559.0278)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 625.0000,621.5278 h 166.6667 v 34.7222 h -166.6667 v -34.7222 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,708.3333,638.8889)" stroke="none" dominant-baseline="middle" text-anchor="middle">1</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 708.3333,656.2500 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 708.3333,604.1667 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 631.9444,552.0833 h 152.7778 l 6.9444,17.3611 l -6.9444,17.3611 h -152.7778 l -6.9444,-17.3611 l 6.9444,-17.3611 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,708.3333,569.4444)" stroke="none" dominant-baseline="middle" text-anchor="middle">a</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 708.3333,586.8056 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 708.3333,534.7222 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 375.0000,500.0000 h 333.3333 v 34.7222 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,275.0000,527.7778)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,389.5833,489.5833)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 298.0811,468.7500 l -6.0141,3.4722 l 6.0141,3.4722 Z"/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,812.5000 h 416.6667 v -340.2778 h -410.6250 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 208.3333,760.4167 h 166.6667 v 34.7222 h -166.6667 v -34.7222 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,291.6667,777.7778)" stroke="none" dominant-baseline="middle" text-anchor="middle">i++</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,795.1389 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 500.0000,604.1667 v 138.8889 h -208.3333 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 416.6667,690.9722 h 166.6667 v 34.7222 h -166.6667 v -34.7222 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,500.0000,708.3333)" stroke="none" dominant-baseline="middle" text-anchor="middle">swapped = true</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 500.0000,725.6944 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 416.6667,621.5278 h 166.6667 v 34.7222 h -166.6667 v -34.7222 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,500.0000,638.8889)" stroke="none" dominant-baseline="middle" text-anchor="middle">swap(input[i - 1], input[i])</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 500.0000,656.2500 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 500.0000,604.1667 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 500.0000,673.6111 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 375.0000,569.4444 h 125.0000 v 34.7222 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,604.1667 v 138.8889 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,275.0000,597.2222)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,389.5833,559.0278)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 215.2778,552.0833 h 152.7778 l 6.9444,17.3611 l -6.9444,17.3611 h -152.7778 l -6.9444,-17.3611 l 6.9444,-17.3611 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,291.6667,569.4444)" stroke="none" dominant-baseline="middle" text-anchor="middle">input[i - 1] < input[i]</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,586.8056 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,534.7222 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,743.0556 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 215.2778,482.6389 h 152.7778 l 6.9444,17.3611 l -6.9444,17.3611 h -152.7778 l -6.9444,-17.3611 l 6.9444,-17.3611 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,291.6667,500.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">i < n</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,517.3611 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 208.3333,413.1944 h 166.6667 v 34.7222 h -166.6667 v -34.7222 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,291.6667,430.5556)" stroke="none" dominant-baseline="middle" text-anchor="middle">i = 1</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,447.9167 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,395.8333 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 291.6667,465.2778 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 166.6667,361.1111 h 125.0000 v 34.7222 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,395.8333 v 416.6667 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,66.6667,388.8889)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,181.2500,350.6944)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 6.9444,343.7500 h 152.7778 l 6.9444,17.3611 l -6.9444,17.3611 h -152.7778 l -6.9444,-17.3611 l 6.9444,-17.3611 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,83.3333,361.1111)" stroke="none" dominant-baseline="middle" text-anchor="middle">swapped</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,326.3889 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,309.0278 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M -0.0000,274.3056 h 166.6667 v 34.7222 h -166.6667 v -34.7222 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,83.3333,291.6667)" stroke="none" dominant-baseline="middle" text-anchor="middle">swapped = false</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,256.9444 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,239.5833 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M -0.0000,204.8611 h 166.6667 v 34.7222 h -166.6667 v -34.7222 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,83.3333,222.2222)" stroke="none" dominant-baseline="middle" text-anchor="middle">n = length of input</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,187.5000 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,187.5000 h 0.0000 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 83.3333,170.1389 v 17.3611 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="0.8539125638299667"><path d="M 166.6667,152.7778 h 0.0000 c 0.0000,-9.5883 -7.7728,-17.3611 -17.3611 -17.3611h -131.9444 c -9.5883,-0.0000 -17.3611,7.7728 -17.3611 17.3611h 0.0000 c -0.0000,9.5883 7.7728,17.3611 17.3611 17.3611h 131.9444 c 9.5883,0.0000 17.3611,-7.7728 17.3611 -17.3611Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="8.680555555555557px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="3.415650255319867"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,83.3333,152.7778)" stroke="none" dominant-baseline="middle" text-anchor="middle">start</text></g></svg>+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg font-size="1" viewBox="0.0 0.0 1920.0 1080.0" stroke="rgb(0,0,0)" xmlns="http://www.w3.org/2000/svg" width="1920.0000" stroke-opacity="1" height="1080.0000" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"><defs></defs><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,42.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,77.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,111.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,145.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,968.5714 v -822.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,1002.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,1037.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,1071.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,1071.4286 h 0.0000 c 0.0000,-4.7339 -3.8376,-8.5714 -8.5714 -8.5714h -65.1429 c -4.7339,-0.0000 -8.5714,3.8376 -8.5714 8.5714h 0.0000 c -0.0000,4.7339 3.8376,8.5714 8.5714 8.5714h 65.1429 c 4.7339,0.0000 8.5714,-3.8376 8.5714 -8.5714Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,1071.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">end</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,1045.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,1037.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,1011.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,1002.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,977.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,968.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,951.4286 h 925.7143 v -428.5714 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,180.0000 v -34.2857 h -925.7143 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,934.2857 v -754.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,180.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,214.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,248.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,282.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,540.0000 h 205.7143 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,317.1429 v -34.2857 h -205.7143 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,522.8571 v -205.7143 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,317.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,351.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,385.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,420.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,540.0000 h 102.8571 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1577.1429,454.2857 v -34.2857 h -102.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,522.8571 v -68.5714 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,454.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1577.1429,488.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1577.1429,522.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1618.2857,531.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1577.1429,522.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1618.2857,497.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1577.1429,488.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1618.2857,462.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1577.1429,454.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,488.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1474.2857,522.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1515.4286,531.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1474.2857,522.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1515.4286,497.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1474.2857,488.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1515.4286,462.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1474.2857,454.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1520.5714,416.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1467.4286,433.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1436.5714,428.5714 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1474.2857,420.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1515.4286,394.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1474.2857,385.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1515.4286,360.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1474.2857,351.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1515.4286,325.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1474.2857,317.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,351.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,385.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,420.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,540.0000 h 102.8571 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1371.4286,454.2857 v -34.2857 h -102.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,522.8571 v -68.5714 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,454.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1371.4286,488.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1371.4286,522.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1412.5714,531.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1371.4286,522.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1412.5714,497.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1371.4286,488.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1412.5714,462.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1371.4286,454.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,488.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1268.5714,522.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,531.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,522.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,497.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,488.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,462.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,454.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1314.8571,416.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1261.7143,433.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1230.8571,428.5714 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,420.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,394.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,385.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,360.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,351.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,325.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,317.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1314.8571,279.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1261.7143,296.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1230.8571,291.4286 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,282.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,257.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,248.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,222.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,214.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1309.7143,188.5714 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1268.5714,180.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,214.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,248.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,282.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,951.4286 h 720.0000 v -428.5714 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,317.1429 v -34.2857 h -720.0000 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,934.2857 v -617.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,317.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,351.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,385.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,420.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,540.0000 h 102.8571 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1165.7143,454.2857 v -34.2857 h -102.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,522.8571 v -68.5714 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,454.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1165.7143,488.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1165.7143,522.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1206.8571,531.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1165.7143,522.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1206.8571,497.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1165.7143,488.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1206.8571,462.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1165.7143,454.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,488.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1062.8571,522.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1104.0000,531.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1062.8571,522.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1104.0000,497.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1062.8571,488.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1104.0000,462.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1062.8571,454.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1109.1429,416.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1056.0000,433.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1025.1429,428.5714 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1062.8571,420.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1104.0000,394.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1062.8571,385.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1104.0000,360.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1062.8571,351.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1104.0000,325.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,1062.8571,317.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,351.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,385.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,420.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,951.4286 h 205.7143 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,454.2857 v -34.2857 h -205.7143 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,934.2857 v -480.0000 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,454.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,488.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,522.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,557.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,951.4286 h 205.7143 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,591.4286 v -34.2857 h -205.7143 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,934.2857 v -342.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,591.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,625.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,660.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,694.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,951.4286 h 102.8571 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,728.5714 v -34.2857 h -102.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,934.2857 v -205.7143 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,728.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,762.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,797.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,831.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,951.4286 h 102.8571 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 960.0000,865.7143 v -34.2857 h -102.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,934.2857 v -68.5714 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,865.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 960.0000,900.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 960.0000,934.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1001.1429,942.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,960.0000,934.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1001.1429,908.5714 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,960.0000,900.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 1001.1429,874.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,960.0000,865.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,900.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 857.1429,934.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 898.2857,942.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,857.1429,934.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 898.2857,908.5714 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,857.1429,900.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 898.2857,874.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,857.1429,865.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,903.4286,828.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,850.2857,845.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 819.4286,840.0000 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,857.1429,831.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 898.2857,805.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,857.1429,797.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 898.2857,771.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,857.1429,762.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 898.2857,737.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,857.1429,728.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,762.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 754.2857,797.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 795.4286,805.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,754.2857,797.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 795.4286,771.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,754.2857,762.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 795.4286,737.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,754.2857,728.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,800.5714,690.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,747.4286,708.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 716.5714,702.8571 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,754.2857,694.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 795.4286,668.5714 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,754.2857,660.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 795.4286,634.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,754.2857,625.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 795.4286,600.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,754.2857,591.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,625.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,660.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,694.2857 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,814.2857 h 102.8571 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 651.4286,728.5714 v -34.2857 h -102.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,797.1429 v -68.5714 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,728.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 651.4286,762.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 651.4286,797.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 692.5714,805.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,651.4286,797.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 692.5714,771.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,651.4286,762.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 692.5714,737.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,651.4286,728.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,762.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 548.5714,797.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,805.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,797.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,771.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,762.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,737.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,728.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,594.8571,690.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,541.7143,708.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 510.8571,702.8571 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,694.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,668.5714 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,660.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,634.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,625.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,600.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,591.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,594.8571,553.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,541.7143,570.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 510.8571,565.7143 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,557.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,531.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,522.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,497.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,488.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 589.7143,462.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,548.5714,454.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,488.5714 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,522.8571 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,557.1429 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,677.1429 h 102.8571 v -17.1429 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 445.7143,591.4286 v -34.2857 h -102.8571 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,660.0000 v -68.5714 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,591.4286 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 445.7143,625.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 445.7143,660.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 486.8571,668.5714 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,445.7143,660.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 486.8571,634.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,445.7143,625.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 486.8571,600.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,445.7143,591.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,625.7143 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="0.0" fill="rgb(0,0,0)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 342.8571,660.0000 v -34.2857 "/></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,668.5714 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,660.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,634.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,625.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,600.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,591.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,389.1429,553.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,336.0000,570.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 305.1429,565.7143 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,557.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,531.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,522.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,497.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,488.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,462.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,454.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,389.1429,416.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,336.0000,433.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 305.1429,428.5714 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,420.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,394.2857 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,385.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,360.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,351.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,325.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,317.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,389.1429,279.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,336.0000,296.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 305.1429,291.4286 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,282.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,257.1429 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,248.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,222.8571 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,214.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,188.5714 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,180.0000)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,389.1429,142.2857)" stroke="none" dominant-baseline="middle" text-anchor="middle">no</text></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,336.0000,159.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">yes</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 305.1429,154.2857 l -3.4286,-8.5714 l 3.4286,-8.5714 h 75.4286 l 3.4286,8.5714 l -3.4286,8.5714 h -75.4286 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,145.7143)" stroke="none" dominant-baseline="middle" text-anchor="middle">question</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,120.0000 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,111.4286)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,85.7143 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,77.1429)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,51.4286 l -0.0000,-17.1429 h -82.2857 l -0.0000,17.1429 Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,42.8571)" stroke="none" dominant-baseline="middle" text-anchor="middle">"# \"action\""</text></g><g stroke-linejoin="miter" fill-opacity="1.0" fill="rgb(237,237,244)" stroke="rgb(160,194,222)" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="1.192433286543588"><path d="M 384.0000,8.5714 h 0.0000 c 0.0000,-4.7339 -3.8376,-8.5714 -8.5714 -8.5714h -65.1429 c -4.7339,-0.0000 -8.5714,3.8376 -8.5714 8.5714h 0.0000 c -0.0000,4.7339 3.8376,8.5714 8.5714 8.5714h 65.1429 c 4.7339,0.0000 8.5714,-3.8376 8.5714 -8.5714Z"/></g><g stroke-linejoin="miter" fill-opacity="1.0" font-size="4.285714285714286px" fill="rgb(6,71,128)" stroke="rgb(0,0,0)" font-weight="300" font-family="helvetica" stroke-linecap="butt" stroke-miterlimit="10.0" stroke-opacity="1.0" stroke-width="4.769733146174352"><text transform="matrix(1.0000,0.0000,0.0000,1.0000,342.8571,8.5714)" stroke="none" dominant-baseline="middle" text-anchor="middle">start</text></g></svg>
diagrams/temp.txt view
@@ -1,29 +1,138 @@-"n = length of input"-"swapped = false"-1 "swapped"-{-}+"action"+"action"+"action"+"question" {- "i = 1"- 2 "i < n"- {- "input[i - 1] < input[i]"+ "action"+ "action"+ "action"+ "question" {+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ }+ {+ "action"+ "action"+ "action"+ }+ }+ {+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ }+ {+ "action"+ "action"+ "action"+ }+ }+ {+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ }+ {+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ }+ {+ "action"+ "action"+ "action"+ }+ }+ }+ } } {- "swap(input[i - 1], input[i])"- "swapped = true"+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ }+ {+ "action"+ "action"+ "action"+ } }- "i++"- 2- }- {- "a"+}+{+ "action"+ "action"+ "action"+ "question" {- "1"+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ }+ {+ "action"+ "action"+ "action"+ } } {- "2"+ "action"+ "action"+ "action"+ "question"+ {+ "action"+ "action"+ "action"+ }+ {+ "action"+ "action"+ "action"+ } }- } }+"action"+"action"+"action"
src/app/Main.hs view
@@ -4,7 +4,9 @@ import Constants (svgOptions) import Diagrams.Backend.SVG (renderSVG') import InputArguments (inputPath, outputPath, parseInput)-import Lexer (alexScanTokens)+-- import Lexer (alexScanTokens)+-- import LexerV2 (alexScanTokens)+import LexerV3 (lexAll, runAlex) import Options.Applicative (execParser, fullDesc, header, helper, info, (<**>)) import Parser (ParseResult (..), diagram) @@ -13,10 +15,24 @@ input <- execParser options print input fileContent <- readFile $ inputPath input- let tokens = alexScanTokens fileContent- case diagram tokens 1 of- ParseOk d -> renderSVG' (outputPath input) svgOptions (Blocks.render d)- ParseFail s -> error s++ -- lexer v1/v2+ -- let tokens = alexScanTokens fileContent++ -- putStrLn "tokens:"+ -- print tokens++ -- lexer v3+ let lexingResult = runAlex fileContent lexAll++ case lexingResult of+ Left lexingError -> do+ putStrLn $ "Wyvern failed with the following error: " <> lexingError+ Right tokens -> do+ -- print tokens+ case diagram tokens 1 of+ ParseOk d -> renderSVG' (outputPath input) svgOptions (Blocks.render d)+ ParseFail s -> error s where options = info
+ src/lib/LexerV2.hs view
@@ -0,0 +1,900 @@+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}+{-# OPTIONS_GHC -fno-warn-tabs #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE MagicHash #-}+{-# LINE 1 "./src/lib/LexerV2.x" #-}+module LexerV2+ (alexScanTokens,+ Token(TokenAction,+ TokenSoloIdentifier,+ TokenOCB,+ TokenCCB),+ AlexPosn(..)) where+#include "ghcconfig.h"+import qualified Data.Array+import qualified Data.Char+import Data.Array.Base (unsafeAt)+import GHC.Exts (Addr#,Int#,Int(I#),(*#),(+#),(-#),(==#),(>=#),indexCharOffAddr#,indexInt16OffAddr#,indexInt32OffAddr#,int2Word#,narrow16Int#,narrow32Int#,negateInt#,or#,ord#,uncheckedShiftL#,word2Int#)+import qualified GHC.Exts+#define ALEX_POSN 1+-- -----------------------------------------------------------------------------+-- Alex wrapper code.+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++#if defined(ALEX_MONAD) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_MONAD_STRICT_TEXT)+import Control.Applicative as App (Applicative (..))+#endif++#if defined(ALEX_STRICT_TEXT) || defined (ALEX_POSN_STRICT_TEXT) || defined(ALEX_MONAD_STRICT_TEXT)+import qualified Data.Text+#endif++import Data.Word (Word8)++#if defined(ALEX_BASIC_BYTESTRING) || defined(ALEX_POSN_BYTESTRING) || defined(ALEX_MONAD_BYTESTRING)++import Data.Int (Int64)+import qualified Data.ByteString.Lazy as ByteString+import qualified Data.ByteString.Internal as ByteString (w2c)++#elif defined(ALEX_STRICT_BYTESTRING)++import qualified Data.ByteString as ByteString+import qualified Data.ByteString.Internal as ByteString hiding (ByteString)+import qualified Data.ByteString.Unsafe as ByteString++#else++import qualified Data.Bits++-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.+utf8Encode :: Char -> [Word8]+utf8Encode = uncurry (:) . utf8Encode'++utf8Encode' :: Char -> (Word8, [Word8])+utf8Encode' c = case go (Data.Char.ord c) of+ (x, xs) -> (fromIntegral x, map fromIntegral xs)+ where+ go oc+ | oc <= 0x7f = ( oc+ , [+ ])++ | oc <= 0x7ff = ( 0xc0 + (oc `Data.Bits.shiftR` 6)+ , [0x80 + oc Data.Bits..&. 0x3f+ ])++ | oc <= 0xffff = ( 0xe0 + (oc `Data.Bits.shiftR` 12)+ , [0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])+ | otherwise = ( 0xf0 + (oc `Data.Bits.shiftR` 18)+ , [0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)+ , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])++#endif++type Byte = Word8++-- -----------------------------------------------------------------------------+-- The input type++#if defined(ALEX_POSN) || defined(ALEX_MONAD) || defined(ALEX_GSCAN)+type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Byte], -- pending bytes on current char+ String) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_p,c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (_,_,[],[]) = Nothing+alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c+ in case utf8Encode' c of+ (b, bs) -> p' `seq` Just (b, (p', c, bs, s))+#endif++#if defined (ALEX_STRICT_TEXT)+type AlexInput = (Char, -- previous char+ [Byte], -- pending bytes on current char+ Data.Text.Text) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (c,_ps,s) = (c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (c,(b:bs),s) = Just (b,(c,bs,s))+alexGetByte (_,[],s) = case Data.Text.uncons s of+ Just (c, cs) ->+ case utf8Encode' c of+ (b, bs) -> Just (b, (c, bs, cs))+ Nothing ->+ Nothing+#endif++#if defined (ALEX_POSN_STRICT_TEXT) || defined(ALEX_MONAD_STRICT_TEXT)+type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Byte], -- pending bytes on current char+ Data.Text.Text) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_p,c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (p,_,[],s) = case Data.Text.uncons s of+ Just (c, cs) ->+ let p' = alexMove p c+ in case utf8Encode' c of+ (b, bs) -> p' `seq` Just (b, (p', c, bs, cs))+ Nothing ->+ Nothing+#endif++#if defined(ALEX_POSN_BYTESTRING) || defined(ALEX_MONAD_BYTESTRING)+type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ ByteString.ByteString, -- current input string+ Int64) -- bytes consumed so far++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes i = i -- no pending bytes when lexing bytestrings++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_,c,_,_) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,_,cs,n) =+ case ByteString.uncons cs of+ Nothing -> Nothing+ Just (b, cs') ->+ let c = ByteString.w2c b+ p' = alexMove p c+ n' = n+1+ in p' `seq` cs' `seq` n' `seq` Just (b, (p', c, cs',n'))+#endif++#ifdef ALEX_BASIC_BYTESTRING+data AlexInput = AlexInput { alexChar :: {-# UNPACK #-} !Char, -- previous char+ alexStr :: !ByteString.ByteString, -- current input string+ alexBytePos :: {-# UNPACK #-} !Int64} -- bytes consumed so far++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar = alexChar++alexGetByte (AlexInput {alexStr=cs,alexBytePos=n}) =+ case ByteString.uncons cs of+ Nothing -> Nothing+ Just (c, rest) ->+ Just (c, AlexInput {+ alexChar = ByteString.w2c c,+ alexStr = rest,+ alexBytePos = n+1})+#endif++#ifdef ALEX_STRICT_BYTESTRING+data AlexInput = AlexInput { alexChar :: {-# UNPACK #-} !Char,+ alexStr :: {-# UNPACK #-} !ByteString.ByteString,+ alexBytePos :: {-# UNPACK #-} !Int}++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar = alexChar++alexGetByte (AlexInput {alexStr=cs,alexBytePos=n}) =+ case ByteString.uncons cs of+ Nothing -> Nothing+ Just (c, rest) ->+ Just (c, AlexInput {+ alexChar = ByteString.w2c c,+ alexStr = rest,+ alexBytePos = n+1})+#endif++-- -----------------------------------------------------------------------------+-- Token positions++-- `Posn' records the location of a token in the input text. It has three+-- fields: the address (number of characters preceding the token), line number+-- and column of a token within the file. `start_pos' gives the position of the+-- start of the file and `eof_pos' a standard encoding for the end of file.+-- `move_pos' calculates the new position after traversing a given character,+-- assuming the usual eight character tab stops.++#if defined(ALEX_POSN) || defined(ALEX_MONAD) || defined(ALEX_POSN_BYTESTRING) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_GSCAN) || defined (ALEX_POSN_STRICT_TEXT) || defined(ALEX_MONAD_STRICT_TEXT)+data AlexPosn = AlexPn !Int !Int !Int+ deriving (Eq, Show, Ord)++alexStartPos :: AlexPosn+alexStartPos = AlexPn 0 1 1++alexMove :: AlexPosn -> Char -> AlexPosn+alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (c+alex_tab_size-((c-1) `mod` alex_tab_size))+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1) 1+alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)+#endif++-- -----------------------------------------------------------------------------+-- Monad (default and with ByteString input)++#if defined(ALEX_MONAD) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_MONAD_STRICT_TEXT)+data AlexState = AlexState {+ alex_pos :: !AlexPosn, -- position at current input location+#ifdef ALEX_MONAD_STRICT_TEXT+ alex_inp :: Data.Text.Text,+ alex_chr :: !Char,+ alex_bytes :: [Byte],+#endif /* ALEX_MONAD_STRICT_TEXT */+#ifdef ALEX_MONAD+ alex_inp :: String, -- the current input+ alex_chr :: !Char, -- the character before the input+ alex_bytes :: [Byte],+#endif /* ALEX_MONAD */+#ifdef ALEX_MONAD_BYTESTRING+ alex_bpos:: !Int64, -- bytes consumed so far+ alex_inp :: ByteString.ByteString, -- the current input+ alex_chr :: !Char, -- the character before the input+#endif /* ALEX_MONAD_BYTESTRING */+ alex_scd :: !Int -- the current startcode+#ifdef ALEX_MONAD_USER_STATE+ , alex_ust :: AlexUserState -- AlexUserState will be defined in the user program+#endif+ }++-- Compile with -funbox-strict-fields for best results!++#ifdef ALEX_MONAD+runAlex :: String -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bytes = [],+ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',+#ifdef ALEX_MONAD_USER_STATE+ alex_ust = alexInitUserState,+#endif+ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a+#endif++#ifdef ALEX_MONAD_BYTESTRING+runAlex :: ByteString.ByteString -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bpos = 0,+ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',+#ifdef ALEX_MONAD_USER_STATE+ alex_ust = alexInitUserState,+#endif+ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+runAlex :: Data.Text.Text -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bytes = [],+ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',+#ifdef ALEX_MONAD_USER_STATE+ alex_ust = alexInitUserState,+#endif+ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a+#endif++newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }++instance Functor Alex where+ fmap f a = Alex $ \s -> case unAlex a s of+ Left msg -> Left msg+ Right (s', a') -> Right (s', f a')++instance Applicative Alex where+ pure a = Alex $ \s -> Right (s, a)+ fa <*> a = Alex $ \s -> case unAlex fa s of+ Left msg -> Left msg+ Right (s', f) -> case unAlex a s' of+ Left msg -> Left msg+ Right (s'', b) -> Right (s'', f b)++instance Monad Alex where+ m >>= k = Alex $ \s -> case unAlex m s of+ Left msg -> Left msg+ Right (s',a) -> unAlex (k a) s'+ return = App.pure+++#ifdef ALEX_MONAD+alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} ->+ Right (s, (pos,c,bs,inp__))+#endif++#ifdef ALEX_MONAD_BYTESTRING+alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_bpos=bpos,alex_chr=c,alex_inp=inp__} ->+ Right (s, (pos,c,inp__,bpos))+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} ->+ Right (s, (pos,c,bs,inp__))+#endif++#ifdef ALEX_MONAD+alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,bs,inp__)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} of+ state__@(AlexState{}) -> Right (state__, ())+#endif++#ifdef ALEX_MONAD_BYTESTRING+alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,inp__,bpos)+ = Alex $ \s -> case s{alex_pos=pos,+ alex_bpos=bpos,+ alex_chr=c,+ alex_inp=inp__} of+ state__@(AlexState{}) -> Right (state__, ())+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,bs,inp__)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} of+ state__@(AlexState{}) -> Right (state__, ())+#endif++alexError :: String -> Alex a+alexError message = Alex $ const $ Left message++alexGetStartCode :: Alex Int+alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)++alexSetStartCode :: Int -> Alex ()+alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())++#if defined(ALEX_MONAD_USER_STATE)+alexGetUserState :: Alex AlexUserState+alexGetUserState = Alex $ \s@AlexState{alex_ust=ust} -> Right (s,ust)++alexSetUserState :: AlexUserState -> Alex ()+alexSetUserState ss = Alex $ \s -> Right (s{alex_ust=ss}, ())+#endif /* defined(ALEX_MONAD_USER_STATE) */++#ifdef ALEX_MONAD+alexMonadScan = do+ inp__ <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp__ sc of+ AlexEOF -> alexEOF+ AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan+ AlexToken inp__' len action -> do+ alexSetInput inp__'+ action (ignorePendingBytes inp__) len+#endif++#ifdef ALEX_MONAD_BYTESTRING+alexMonadScan = do+ inp__@(_,_,_,n) <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp__ sc of+ AlexEOF -> alexEOF+ AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan+ AlexToken inp__'@(_,_,_,n') _ action -> let len = n'-n in do+ alexSetInput inp__'+ action (ignorePendingBytes inp__) len+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+alexMonadScan = do+ inp__ <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp__ sc of+ AlexEOF -> alexEOF+ AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan+ AlexToken inp__' len action -> do+ alexSetInput inp__'+ action (ignorePendingBytes inp__) len+#endif++-- -----------------------------------------------------------------------------+-- Useful token actions++#ifdef ALEX_MONAD+type AlexAction result = AlexInput -> Int -> Alex result+#endif++#ifdef ALEX_MONAD_BYTESTRING+type AlexAction result = AlexInput -> Int64 -> Alex result+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+type AlexAction result = AlexInput -> Int -> Alex result+#endif++-- just ignore this token and scan another one+-- skip :: AlexAction result+skip _input _len = alexMonadScan++-- ignore this token, but set the start code to a new value+-- begin :: Int -> AlexAction result+begin code _input _len = do alexSetStartCode code; alexMonadScan++-- perform an action for this token, and set the start code to a new value+andBegin :: AlexAction result -> Int -> AlexAction result+(action `andBegin` code) input__ len = do+ alexSetStartCode code+ action input__ len++#ifdef ALEX_MONAD+token :: (AlexInput -> Int -> token) -> AlexAction token+token t input__ len = return (t input__ len)+#endif++#ifdef ALEX_MONAD_BYTESTRING+token :: (AlexInput -> Int64 -> token) -> AlexAction token+token t input__ len = return (t input__ len)+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+token :: (AlexInput -> Int -> token) -> AlexAction token+token t input__ len = return (t input__ len)+#endif++#endif /* defined(ALEX_MONAD) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_MONAD_STRICT_TEXT) */++-- -----------------------------------------------------------------------------+-- Basic wrapper++#ifdef ALEX_BASIC+type AlexInput = (Char,[Byte],String)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (c,_,_) = c++-- alexScanTokens :: String -> [token]+alexScanTokens str = go ('\n',[],str)+ where go inp__@(_,_bs,s) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError _ -> error "lexical error"+ AlexSkip inp__' _ln -> go inp__'+ AlexToken inp__' len act -> act (take len s) : go inp__'++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (c,(b:bs),s) = Just (b,(c,bs,s))+alexGetByte (_,[],[]) = Nothing+alexGetByte (_,[],(c:s)) = case utf8Encode' c of+ (b, bs) -> Just (b, (c, bs, s))+#endif+++-- -----------------------------------------------------------------------------+-- Basic wrapper, ByteString version++#ifdef ALEX_BASIC_BYTESTRING++-- alexScanTokens :: ByteString.ByteString -> [token]+alexScanTokens str = go (AlexInput '\n' str 0)+ where go inp__ =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError _ -> error "lexical error"+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__' _ act ->+ let len = alexBytePos inp__' - alexBytePos inp__ in+ act (ByteString.take len (alexStr inp__)) : go inp__'++#endif++#ifdef ALEX_STRICT_BYTESTRING++-- alexScanTokens :: ByteString.ByteString -> [token]+alexScanTokens str = go (AlexInput '\n' str 0)+ where go inp__ =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError _ -> error "lexical error"+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__' _ act ->+ let len = alexBytePos inp__' - alexBytePos inp__ in+ act (ByteString.take len (alexStr inp__)) : go inp__'++#endif++#ifdef ALEX_STRICT_TEXT+-- alexScanTokens :: Data.Text.Text -> [token]+alexScanTokens str = go ('\n',[],str)+ where go inp__@(_,_bs,s) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError _ -> error "lexical error"+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__' len act -> act (Data.Text.take len s) : go inp__'+#endif++#ifdef ALEX_POSN_STRICT_TEXT+-- alexScanTokens :: Data.Text.Text -> [token]+alexScanTokens str = go (alexStartPos,'\n',[],str)+ where go inp__@(pos,_,_bs,s) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__' len act -> act pos (Data.Text.take len s) : go inp__'+#endif+++-- -----------------------------------------------------------------------------+-- Posn wrapper++-- Adds text positions to the basic model.++#ifdef ALEX_POSN+--alexScanTokens :: String -> [token]+alexScanTokens str0 = go (alexStartPos,'\n',[],str0)+ where go inp__@(pos,_,_,str) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _ln -> go inp__'+ AlexToken inp__' len act -> act pos (take len str) : go inp__'+#endif+++-- -----------------------------------------------------------------------------+-- Posn wrapper, ByteString version++#ifdef ALEX_POSN_BYTESTRING+--alexScanTokens :: ByteString.ByteString -> [token]+alexScanTokens str0 = go (alexStartPos,'\n',str0,0)+ where go inp__@(pos,_,str,n) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__'@(_,_,_,n') _ act ->+ act pos (ByteString.take (n'-n) str) : go inp__'+#endif+++-- -----------------------------------------------------------------------------+-- GScan wrapper++-- For compatibility with previous versions of Alex, and because we can.++#ifdef ALEX_GSCAN+alexGScan stop__ state__ inp__ =+ alex_gscan stop__ alexStartPos '\n' [] inp__ (0,state__)++alex_gscan stop__ p c bs inp__ (sc,state__) =+ case alexScan (p,c,bs,inp__) sc of+ AlexEOF -> stop__ p c inp__ (sc,state__)+ AlexError _ -> stop__ p c inp__ (sc,state__)+ AlexSkip (p',c',bs',inp__') _len ->+ alex_gscan stop__ p' c' bs' inp__' (sc,state__)+ AlexToken (p',c',bs',inp__') len k ->+ k p c inp__ len (\scs -> alex_gscan stop__ p' c' bs' inp__' scs) (sc,state__)+#endif+alex_tab_size :: Int+alex_tab_size = 8+alex_base :: AlexAddr+alex_base = AlexA#+ "\xf8\xff\xff\xff\x00\x00\x00\x00\x6d\x00\x00\x00\xdf\x00\x00\x00\x00\x00\x00\x00\xfd\xff\xff\xff\x02\x00\x00\x00\x51\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x01\x00\x00\x35\x02\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA#+ "\x00\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x05\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x00\x00\x08\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_check :: AlexAddr+alex_check = AlexA#+ "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\x20\x00\xff\xff\x27\x00\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\xff\xff\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_deflt :: AlexAddr+alex_deflt = AlexA#+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_accept = Data.Array.listArray (0 :: Int, 11)+ [ AlexAccNone+ , AlexAcc 4+ , AlexAccNone+ , AlexAccNone+ , AlexAcc 3+ , AlexAccSkip+ , AlexAccNone+ , AlexAccNone+ , AlexAcc 2+ , AlexAcc 1+ , AlexAcc 0+ , AlexAccNone+ ]++alex_actions = Data.Array.array (0 :: Int, 5)+ [ (4,alex_action_2)+ , (3,alex_action_1)+ , (2,alex_action_5)+ , (1,alex_action_4)+ , (0,alex_action_3)+ ]++alex_action_1 = (\position input -> TokenAction position input)+alex_action_2 = (\position input -> TokenAction position ("# " <> input)) -- # is a placeholder id that will later be replaced by a unique identifier+alex_action_3 = (\position input -> TokenSoloIdentifier position input)+alex_action_4 = (\position _ -> TokenOCB position)+alex_action_5 = (\position _ -> TokenCCB position)++#define ALEX_GHC 1+#define ALEX_NOPRED 1+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++#ifdef ALEX_GHC+# define ILIT(n) n#+# define IBOX(n) (I# (n))+# define FAST_INT Int#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+# if __GLASGOW_HASKELL__ > 706+# define CMP_GEQ(n,m) (((n) >=# (m)) :: Int#)+# define CMP_EQ(n,m) (((n) ==# (m)) :: Int#)+# define CMP_MKBOOL(x) ((GHC.Exts.tagToEnum# (x)) :: Bool)+# else+# define CMP_GEQ(n,m) (((n) >= (m)) :: Bool)+# define CMP_EQ(n,m) (((n) == (m)) :: Bool)+# define CMP_MKBOOL(x) ((x) :: Bool)+# endif+# define GTE(n,m) CMP_MKBOOL(CMP_GEQ(n,m))+# define EQ(n,m) CMP_MKBOOL(CMP_EQ(n,m))+# define PLUS(n,m) (n +# m)+# define MINUS(n,m) (n -# m)+# define TIMES(n,m) (n *# m)+# define NEGATE(n) (negateInt# (n))+# define IF_GHC(x) (x)+#else+# define ILIT(n) (n)+# define IBOX(n) (n)+# define FAST_INT Int+# define GTE(n,m) (n >= m)+# define EQ(n,m) (n == m)+# define PLUS(n,m) (n + m)+# define MINUS(n,m) (n - m)+# define TIMES(n,m) (n * m)+# define NEGATE(n) (negate (n))+# define IF_GHC(x)+#endif++#ifdef ALEX_GHC+data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr :: AlexAddr -> Int# -> Int#+alexIndexInt16OffAddr (AlexA# arr) off =+#if __GLASGOW_HASKELL__ >= 901+ GHC.Exts.int16ToInt# -- qualified import because it doesn't exist on older GHC's+#endif+#ifdef WORDS_BIGENDIAN+ (GHC.Exts.word16ToInt16# (GHC.Exts.wordToWord16# (GHC.Exts.byteSwap16# (GHC.Exts.word16ToWord# (GHC.Exts.int16ToWord16#+#endif+ (indexInt16OffAddr# arr off)+#ifdef WORDS_BIGENDIAN+ )))))+#endif+#else+alexIndexInt16OffAddr = (Data.Array.!)+#endif++#ifdef ALEX_GHC+{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr :: AlexAddr -> Int# -> Int#+alexIndexInt32OffAddr (AlexA# arr) off =+#if __GLASGOW_HASKELL__ >= 901+ GHC.Exts.int32ToInt# -- qualified import because it doesn't exist on older GHC's+#endif+#ifdef WORDS_BIGENDIAN+ (GHC.Exts.word32ToInt32# (GHC.Exts.wordToWord32# (GHC.Exts.byteSwap32# (GHC.Exts.word32ToWord# (GHC.Exts.int32ToWord32#+#endif+ (indexInt32OffAddr# arr off)+#ifdef WORDS_BIGENDIAN+ )))))+#endif+#else+alexIndexInt32OffAddr = (Data.Array.!)+#endif++#ifdef ALEX_GHC+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#else+quickIndex = (Data.Array.!)+#endif++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+ = AlexEOF+ | AlexError !AlexInput+ | AlexSkip !AlexInput !Int+ | AlexToken !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input__ IBOX(sc)+ = alexScanUser (error "alex rule requiring context was invoked by alexScan; use alexScanUser instead?") input__ IBOX(sc)++-- If the generated alexScan/alexScanUser functions are called multiple times+-- in the same file, alexScanUser gets broken out into a separate function and+-- increases memory usage. Make sure GHC inlines this function and optimizes it.+{-# INLINE alexScanUser #-}++alexScanUser user__ input__ IBOX(sc)+ = case alex_scan_tkn user__ input__ ILIT(0) input__ sc AlexNone of+ (AlexNone, input__') ->+ case alexGetByte input__ of+ Nothing ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("End of input.") $+#endif+ AlexEOF+ Just _ ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("Error.") $+#endif+ AlexError input__'++ (AlexLastSkip input__'' len, _) ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("Skipping.") $+#endif+ AlexSkip input__'' len++ (AlexLastAcc k input__''' len, _) ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("Accept.") $+#endif+ AlexToken input__''' len ((Data.Array.!) alex_actions k)+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user__ orig_input len input__ s last_acc =+ input__ `seq` -- strict in the input+ let+ new_acc = (check_accs (alex_accept `quickIndex` IBOX(s)))+ in+ new_acc `seq`+ case alexGetByte input__ of+ Nothing -> (new_acc, input__)+ Just (c, new_input) ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("State: " ++ show IBOX(s) ++ ", char: " ++ show c ++ " " ++ (show . Data.Char.chr . fromIntegral) c) $+#endif+ case fromIntegral c of { IBOX(ord_c) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = PLUS(base,ord_c)++ new_s = if GTE(offset,ILIT(0))+ && let check = alexIndexInt16OffAddr alex_check offset+ in EQ(check,ord_c)+ then alexIndexInt16OffAddr alex_table offset+ else alexIndexInt16OffAddr alex_deflt s+ in+ case new_s of+ ILIT(-1) -> (new_acc, input__)+ -- on an error, we want to keep the input *before* the+ -- character that failed, not after.+ _ -> alex_scan_tkn user__ orig_input+#ifdef ALEX_LATIN1+ PLUS(len,ILIT(1))+ -- issue 119: in the latin1 encoding, *each* byte is one character+#else+ (if c < 0x80 || c >= 0xC0 then PLUS(len,ILIT(1)) else len)+ -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+#endif+ new_input new_s new_acc+ }+ where+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input__ IBOX(len)+ check_accs (AlexAccSkip) = AlexLastSkip input__ IBOX(len)+#ifndef ALEX_NOPRED+ check_accs (AlexAccPred a predx rest)+ | predx user__ orig_input IBOX(len) input__+ = AlexLastAcc a input__ IBOX(len)+ | otherwise+ = check_accs rest+ check_accs (AlexAccSkipPred predx rest)+ | predx user__ orig_input IBOX(len) input__+ = AlexLastSkip input__ IBOX(len)+ | otherwise+ = check_accs rest+#endif++data AlexLastAcc+ = AlexNone+ | AlexLastAcc !Int !AlexInput !Int+ | AlexLastSkip !AlexInput !Int++data AlexAcc user+ = AlexAccNone+ | AlexAcc Int+ | AlexAccSkip+#ifndef ALEX_NOPRED+ | AlexAccPred Int (AlexAccPred user) (AlexAcc user)+ | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)++type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool++-- -----------------------------------------------------------------------------+-- Predicates on a rule++alexAndPred p1 p2 user__ in1 len in2+ = p1 user__ in1 len in2 && p2 user__ in1 len in2++--alexPrevCharIsPred :: Char -> AlexAccPred _+alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__++alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)++--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _+alexPrevCharIsOneOf arr _ input__ _ _ = arr Data.Array.! alexInputPrevChar input__++--alexRightContext :: Int -> AlexAccPred _+alexRightContext IBOX(sc) user__ _ _ input__ =+ case alex_scan_tkn user__ input__ ILIT(0) input__ sc AlexNone of+ (AlexNone, _) -> False+ _ -> True+ -- TODO: there's no need to find the longest+ -- match when checking the right context, just+ -- the first match will do.+#endif+{-# LINE 31 "./src/lib/LexerV2.x" #-}+-- Each token action (the right hand side function) is of type :: AlexPosn -> String -> Token++data Token+ = TokenAction AlexPosn String+ | TokenSoloIdentifier AlexPosn String+ | TokenOCB AlexPosn+ | TokenCCB AlexPosn+ deriving (Eq, Show)
+ src/lib/LexerV2.x view
@@ -0,0 +1,40 @@+{+module LexerV2+ (alexScanTokens,+ Token(TokenAction,+ TokenSoloIdentifier,+ TokenOCB,+ TokenCCB),+ AlexPosn(..)) where+}++%wrapper "posn"++$digit = 0-9+$alpha = [a-zA-Z]++$idChar = [$alpha $digit \']+$contentChar = [$alpha $digit $white \' \, \! \- \. \/ \? \= \< \> \[ \] \+ \( \)]++@id = $idChar++@content = $contentChar+++tokens :-++ $white+ ;+ @id [$white]+ \"@content\" { (\position input -> TokenAction position input) }+ \"@content\" { (\position input -> TokenAction position ("# " <> input)) -- # is a placeholder id that will later be replaced by a unique identifier }+ @id { (\position input -> TokenSoloIdentifier position input) }+ \{ { (\position _ -> TokenOCB position) }+ \} { (\position _ -> TokenCCB position) }++{+-- Each token action (the right hand side function) is of type :: AlexPosn -> String -> Token++data Token+ = TokenAction AlexPosn String+ | TokenSoloIdentifier AlexPosn String+ | TokenOCB AlexPosn+ | TokenCCB AlexPosn+ deriving (Eq, Show)+}
+ src/lib/LexerV3.hs view
@@ -0,0 +1,914 @@+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}+{-# OPTIONS_GHC -fno-warn-tabs #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE MagicHash #-}+{-# LINE 1 "./src/lib/LexerV3.x" #-}+module LexerV3+ (lexAll,+ runAlex,+ Token(TokenAction,+ TokenSoloIdentifier,+ TokenOCB,+ TokenCCB),+ AlexPosn(..)) where+#include "ghcconfig.h"+import qualified Data.Array+import qualified Data.Char+import Data.Array.Base (unsafeAt)+import GHC.Exts (Addr#,Int#,Int(I#),(*#),(+#),(-#),(==#),(>=#),indexCharOffAddr#,indexInt16OffAddr#,indexInt32OffAddr#,int2Word#,narrow16Int#,narrow32Int#,negateInt#,or#,ord#,uncheckedShiftL#,word2Int#)+import qualified GHC.Exts+#define ALEX_MONAD 1+-- -----------------------------------------------------------------------------+-- Alex wrapper code.+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++#if defined(ALEX_MONAD) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_MONAD_STRICT_TEXT)+import Control.Applicative as App (Applicative (..))+#endif++#if defined(ALEX_STRICT_TEXT) || defined (ALEX_POSN_STRICT_TEXT) || defined(ALEX_MONAD_STRICT_TEXT)+import qualified Data.Text+#endif++import Data.Word (Word8)++#if defined(ALEX_BASIC_BYTESTRING) || defined(ALEX_POSN_BYTESTRING) || defined(ALEX_MONAD_BYTESTRING)++import Data.Int (Int64)+import qualified Data.ByteString.Lazy as ByteString+import qualified Data.ByteString.Internal as ByteString (w2c)++#elif defined(ALEX_STRICT_BYTESTRING)++import qualified Data.ByteString as ByteString+import qualified Data.ByteString.Internal as ByteString hiding (ByteString)+import qualified Data.ByteString.Unsafe as ByteString++#else++import qualified Data.Bits++-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.+utf8Encode :: Char -> [Word8]+utf8Encode = uncurry (:) . utf8Encode'++utf8Encode' :: Char -> (Word8, [Word8])+utf8Encode' c = case go (Data.Char.ord c) of+ (x, xs) -> (fromIntegral x, map fromIntegral xs)+ where+ go oc+ | oc <= 0x7f = ( oc+ , [+ ])++ | oc <= 0x7ff = ( 0xc0 + (oc `Data.Bits.shiftR` 6)+ , [0x80 + oc Data.Bits..&. 0x3f+ ])++ | oc <= 0xffff = ( 0xe0 + (oc `Data.Bits.shiftR` 12)+ , [0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])+ | otherwise = ( 0xf0 + (oc `Data.Bits.shiftR` 18)+ , [0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)+ , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])++#endif++type Byte = Word8++-- -----------------------------------------------------------------------------+-- The input type++#if defined(ALEX_POSN) || defined(ALEX_MONAD) || defined(ALEX_GSCAN)+type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Byte], -- pending bytes on current char+ String) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_p,c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (_,_,[],[]) = Nothing+alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c+ in case utf8Encode' c of+ (b, bs) -> p' `seq` Just (b, (p', c, bs, s))+#endif++#if defined (ALEX_STRICT_TEXT)+type AlexInput = (Char, -- previous char+ [Byte], -- pending bytes on current char+ Data.Text.Text) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (c,_ps,s) = (c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (c,(b:bs),s) = Just (b,(c,bs,s))+alexGetByte (_,[],s) = case Data.Text.uncons s of+ Just (c, cs) ->+ case utf8Encode' c of+ (b, bs) -> Just (b, (c, bs, cs))+ Nothing ->+ Nothing+#endif++#if defined (ALEX_POSN_STRICT_TEXT) || defined(ALEX_MONAD_STRICT_TEXT)+type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Byte], -- pending bytes on current char+ Data.Text.Text) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_p,c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (p,_,[],s) = case Data.Text.uncons s of+ Just (c, cs) ->+ let p' = alexMove p c+ in case utf8Encode' c of+ (b, bs) -> p' `seq` Just (b, (p', c, bs, cs))+ Nothing ->+ Nothing+#endif++#if defined(ALEX_POSN_BYTESTRING) || defined(ALEX_MONAD_BYTESTRING)+type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ ByteString.ByteString, -- current input string+ Int64) -- bytes consumed so far++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes i = i -- no pending bytes when lexing bytestrings++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_,c,_,_) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,_,cs,n) =+ case ByteString.uncons cs of+ Nothing -> Nothing+ Just (b, cs') ->+ let c = ByteString.w2c b+ p' = alexMove p c+ n' = n+1+ in p' `seq` cs' `seq` n' `seq` Just (b, (p', c, cs',n'))+#endif++#ifdef ALEX_BASIC_BYTESTRING+data AlexInput = AlexInput { alexChar :: {-# UNPACK #-} !Char, -- previous char+ alexStr :: !ByteString.ByteString, -- current input string+ alexBytePos :: {-# UNPACK #-} !Int64} -- bytes consumed so far++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar = alexChar++alexGetByte (AlexInput {alexStr=cs,alexBytePos=n}) =+ case ByteString.uncons cs of+ Nothing -> Nothing+ Just (c, rest) ->+ Just (c, AlexInput {+ alexChar = ByteString.w2c c,+ alexStr = rest,+ alexBytePos = n+1})+#endif++#ifdef ALEX_STRICT_BYTESTRING+data AlexInput = AlexInput { alexChar :: {-# UNPACK #-} !Char,+ alexStr :: {-# UNPACK #-} !ByteString.ByteString,+ alexBytePos :: {-# UNPACK #-} !Int}++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar = alexChar++alexGetByte (AlexInput {alexStr=cs,alexBytePos=n}) =+ case ByteString.uncons cs of+ Nothing -> Nothing+ Just (c, rest) ->+ Just (c, AlexInput {+ alexChar = ByteString.w2c c,+ alexStr = rest,+ alexBytePos = n+1})+#endif++-- -----------------------------------------------------------------------------+-- Token positions++-- `Posn' records the location of a token in the input text. It has three+-- fields: the address (number of characters preceding the token), line number+-- and column of a token within the file. `start_pos' gives the position of the+-- start of the file and `eof_pos' a standard encoding for the end of file.+-- `move_pos' calculates the new position after traversing a given character,+-- assuming the usual eight character tab stops.++#if defined(ALEX_POSN) || defined(ALEX_MONAD) || defined(ALEX_POSN_BYTESTRING) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_GSCAN) || defined (ALEX_POSN_STRICT_TEXT) || defined(ALEX_MONAD_STRICT_TEXT)+data AlexPosn = AlexPn !Int !Int !Int+ deriving (Eq, Show, Ord)++alexStartPos :: AlexPosn+alexStartPos = AlexPn 0 1 1++alexMove :: AlexPosn -> Char -> AlexPosn+alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (c+alex_tab_size-((c-1) `mod` alex_tab_size))+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1) 1+alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)+#endif++-- -----------------------------------------------------------------------------+-- Monad (default and with ByteString input)++#if defined(ALEX_MONAD) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_MONAD_STRICT_TEXT)+data AlexState = AlexState {+ alex_pos :: !AlexPosn, -- position at current input location+#ifdef ALEX_MONAD_STRICT_TEXT+ alex_inp :: Data.Text.Text,+ alex_chr :: !Char,+ alex_bytes :: [Byte],+#endif /* ALEX_MONAD_STRICT_TEXT */+#ifdef ALEX_MONAD+ alex_inp :: String, -- the current input+ alex_chr :: !Char, -- the character before the input+ alex_bytes :: [Byte],+#endif /* ALEX_MONAD */+#ifdef ALEX_MONAD_BYTESTRING+ alex_bpos:: !Int64, -- bytes consumed so far+ alex_inp :: ByteString.ByteString, -- the current input+ alex_chr :: !Char, -- the character before the input+#endif /* ALEX_MONAD_BYTESTRING */+ alex_scd :: !Int -- the current startcode+#ifdef ALEX_MONAD_USER_STATE+ , alex_ust :: AlexUserState -- AlexUserState will be defined in the user program+#endif+ }++-- Compile with -funbox-strict-fields for best results!++#ifdef ALEX_MONAD+runAlex :: String -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bytes = [],+ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',+#ifdef ALEX_MONAD_USER_STATE+ alex_ust = alexInitUserState,+#endif+ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a+#endif++#ifdef ALEX_MONAD_BYTESTRING+runAlex :: ByteString.ByteString -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bpos = 0,+ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',+#ifdef ALEX_MONAD_USER_STATE+ alex_ust = alexInitUserState,+#endif+ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+runAlex :: Data.Text.Text -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bytes = [],+ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',+#ifdef ALEX_MONAD_USER_STATE+ alex_ust = alexInitUserState,+#endif+ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a+#endif++newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }++instance Functor Alex where+ fmap f a = Alex $ \s -> case unAlex a s of+ Left msg -> Left msg+ Right (s', a') -> Right (s', f a')++instance Applicative Alex where+ pure a = Alex $ \s -> Right (s, a)+ fa <*> a = Alex $ \s -> case unAlex fa s of+ Left msg -> Left msg+ Right (s', f) -> case unAlex a s' of+ Left msg -> Left msg+ Right (s'', b) -> Right (s'', f b)++instance Monad Alex where+ m >>= k = Alex $ \s -> case unAlex m s of+ Left msg -> Left msg+ Right (s',a) -> unAlex (k a) s'+ return = App.pure+++#ifdef ALEX_MONAD+alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} ->+ Right (s, (pos,c,bs,inp__))+#endif++#ifdef ALEX_MONAD_BYTESTRING+alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_bpos=bpos,alex_chr=c,alex_inp=inp__} ->+ Right (s, (pos,c,inp__,bpos))+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} ->+ Right (s, (pos,c,bs,inp__))+#endif++#ifdef ALEX_MONAD+alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,bs,inp__)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} of+ state__@(AlexState{}) -> Right (state__, ())+#endif++#ifdef ALEX_MONAD_BYTESTRING+alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,inp__,bpos)+ = Alex $ \s -> case s{alex_pos=pos,+ alex_bpos=bpos,+ alex_chr=c,+ alex_inp=inp__} of+ state__@(AlexState{}) -> Right (state__, ())+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,bs,inp__)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} of+ state__@(AlexState{}) -> Right (state__, ())+#endif++alexError :: String -> Alex a+alexError message = Alex $ const $ Left message++alexGetStartCode :: Alex Int+alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)++alexSetStartCode :: Int -> Alex ()+alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())++#if defined(ALEX_MONAD_USER_STATE)+alexGetUserState :: Alex AlexUserState+alexGetUserState = Alex $ \s@AlexState{alex_ust=ust} -> Right (s,ust)++alexSetUserState :: AlexUserState -> Alex ()+alexSetUserState ss = Alex $ \s -> Right (s{alex_ust=ss}, ())+#endif /* defined(ALEX_MONAD_USER_STATE) */++#ifdef ALEX_MONAD+alexMonadScan = do+ inp__ <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp__ sc of+ AlexEOF -> alexEOF+ AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan+ AlexToken inp__' len action -> do+ alexSetInput inp__'+ action (ignorePendingBytes inp__) len+#endif++#ifdef ALEX_MONAD_BYTESTRING+alexMonadScan = do+ inp__@(_,_,_,n) <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp__ sc of+ AlexEOF -> alexEOF+ AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan+ AlexToken inp__'@(_,_,_,n') _ action -> let len = n'-n in do+ alexSetInput inp__'+ action (ignorePendingBytes inp__) len+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+alexMonadScan = do+ inp__ <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp__ sc of+ AlexEOF -> alexEOF+ AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan+ AlexToken inp__' len action -> do+ alexSetInput inp__'+ action (ignorePendingBytes inp__) len+#endif++-- -----------------------------------------------------------------------------+-- Useful token actions++#ifdef ALEX_MONAD+type AlexAction result = AlexInput -> Int -> Alex result+#endif++#ifdef ALEX_MONAD_BYTESTRING+type AlexAction result = AlexInput -> Int64 -> Alex result+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+type AlexAction result = AlexInput -> Int -> Alex result+#endif++-- just ignore this token and scan another one+-- skip :: AlexAction result+skip _input _len = alexMonadScan++-- ignore this token, but set the start code to a new value+-- begin :: Int -> AlexAction result+begin code _input _len = do alexSetStartCode code; alexMonadScan++-- perform an action for this token, and set the start code to a new value+andBegin :: AlexAction result -> Int -> AlexAction result+(action `andBegin` code) input__ len = do+ alexSetStartCode code+ action input__ len++#ifdef ALEX_MONAD+token :: (AlexInput -> Int -> token) -> AlexAction token+token t input__ len = return (t input__ len)+#endif++#ifdef ALEX_MONAD_BYTESTRING+token :: (AlexInput -> Int64 -> token) -> AlexAction token+token t input__ len = return (t input__ len)+#endif++#ifdef ALEX_MONAD_STRICT_TEXT+token :: (AlexInput -> Int -> token) -> AlexAction token+token t input__ len = return (t input__ len)+#endif++#endif /* defined(ALEX_MONAD) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_MONAD_STRICT_TEXT) */++-- -----------------------------------------------------------------------------+-- Basic wrapper++#ifdef ALEX_BASIC+type AlexInput = (Char,[Byte],String)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (c,_,_) = c++-- alexScanTokens :: String -> [token]+alexScanTokens str = go ('\n',[],str)+ where go inp__@(_,_bs,s) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError _ -> error "lexical error"+ AlexSkip inp__' _ln -> go inp__'+ AlexToken inp__' len act -> act (take len s) : go inp__'++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (c,(b:bs),s) = Just (b,(c,bs,s))+alexGetByte (_,[],[]) = Nothing+alexGetByte (_,[],(c:s)) = case utf8Encode' c of+ (b, bs) -> Just (b, (c, bs, s))+#endif+++-- -----------------------------------------------------------------------------+-- Basic wrapper, ByteString version++#ifdef ALEX_BASIC_BYTESTRING++-- alexScanTokens :: ByteString.ByteString -> [token]+alexScanTokens str = go (AlexInput '\n' str 0)+ where go inp__ =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError _ -> error "lexical error"+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__' _ act ->+ let len = alexBytePos inp__' - alexBytePos inp__ in+ act (ByteString.take len (alexStr inp__)) : go inp__'++#endif++#ifdef ALEX_STRICT_BYTESTRING++-- alexScanTokens :: ByteString.ByteString -> [token]+alexScanTokens str = go (AlexInput '\n' str 0)+ where go inp__ =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError _ -> error "lexical error"+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__' _ act ->+ let len = alexBytePos inp__' - alexBytePos inp__ in+ act (ByteString.take len (alexStr inp__)) : go inp__'++#endif++#ifdef ALEX_STRICT_TEXT+-- alexScanTokens :: Data.Text.Text -> [token]+alexScanTokens str = go ('\n',[],str)+ where go inp__@(_,_bs,s) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError _ -> error "lexical error"+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__' len act -> act (Data.Text.take len s) : go inp__'+#endif++#ifdef ALEX_POSN_STRICT_TEXT+-- alexScanTokens :: Data.Text.Text -> [token]+alexScanTokens str = go (alexStartPos,'\n',[],str)+ where go inp__@(pos,_,_bs,s) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__' len act -> act pos (Data.Text.take len s) : go inp__'+#endif+++-- -----------------------------------------------------------------------------+-- Posn wrapper++-- Adds text positions to the basic model.++#ifdef ALEX_POSN+--alexScanTokens :: String -> [token]+alexScanTokens str0 = go (alexStartPos,'\n',[],str0)+ where go inp__@(pos,_,_,str) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _ln -> go inp__'+ AlexToken inp__' len act -> act pos (take len str) : go inp__'+#endif+++-- -----------------------------------------------------------------------------+-- Posn wrapper, ByteString version++#ifdef ALEX_POSN_BYTESTRING+--alexScanTokens :: ByteString.ByteString -> [token]+alexScanTokens str0 = go (alexStartPos,'\n',str0,0)+ where go inp__@(pos,_,str,n) =+ case alexScan inp__ 0 of+ AlexEOF -> []+ AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> go inp__'+ AlexToken inp__'@(_,_,_,n') _ act ->+ act pos (ByteString.take (n'-n) str) : go inp__'+#endif+++-- -----------------------------------------------------------------------------+-- GScan wrapper++-- For compatibility with previous versions of Alex, and because we can.++#ifdef ALEX_GSCAN+alexGScan stop__ state__ inp__ =+ alex_gscan stop__ alexStartPos '\n' [] inp__ (0,state__)++alex_gscan stop__ p c bs inp__ (sc,state__) =+ case alexScan (p,c,bs,inp__) sc of+ AlexEOF -> stop__ p c inp__ (sc,state__)+ AlexError _ -> stop__ p c inp__ (sc,state__)+ AlexSkip (p',c',bs',inp__') _len ->+ alex_gscan stop__ p' c' bs' inp__' (sc,state__)+ AlexToken (p',c',bs',inp__') len k ->+ k p c inp__ len (\scs -> alex_gscan stop__ p' c' bs' inp__' scs) (sc,state__)+#endif+alex_tab_size :: Int+alex_tab_size = 8+alex_base :: AlexAddr+alex_base = AlexA#+ "\xf8\xff\xff\xff\x00\x00\x00\x00\x6d\x00\x00\x00\xdf\x00\x00\x00\x00\x00\x00\x00\xfd\xff\xff\xff\x02\x00\x00\x00\x51\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x01\x00\x00\x35\x02\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA#+ "\x00\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x07\x00\x00\x00\x00\x00\x05\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x00\x00\x08\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_check :: AlexAddr+alex_check = AlexA#+ "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\x20\x00\xff\xff\x27\x00\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\xff\xff\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_deflt :: AlexAddr+alex_deflt = AlexA#+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_accept = Data.Array.listArray (0 :: Int, 11)+ [ AlexAccNone+ , AlexAcc 4+ , AlexAccNone+ , AlexAccNone+ , AlexAcc 3+ , AlexAccSkip+ , AlexAccNone+ , AlexAccNone+ , AlexAcc 2+ , AlexAcc 1+ , AlexAcc 0+ , AlexAccNone+ ]++alex_actions = Data.Array.array (0 :: Int, 5)+ [ (4,alex_action_2)+ , (3,alex_action_1)+ , (2,alex_action_5)+ , (1,alex_action_4)+ , (0,alex_action_3)+ ]++alex_action_1 = (\(position, _previousCharacter, _bytes, inputString) len -> return $ TokenAction position (take len inputString))+alex_action_2 = (\(position, _previousCharacter, _bytes, inputString) len -> return $ TokenAction position ("# " <> take len inputString)) -- # is a placeholder id that will later be replaced by a unique identifier+alex_action_3 = (\(position, _previousCharacter, _bytes, inputString) len -> return $ TokenSoloIdentifier position (take len inputString))+alex_action_4 = (\(position, _previousCharacter, _bytes, _inputString) len -> return $ TokenOCB position)+alex_action_5 = (\(position, _previousCharacter, _bytes, _inputString) len -> return $ TokenCCB position)++#define ALEX_GHC 1+#define ALEX_NOPRED 1+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++#ifdef ALEX_GHC+# define ILIT(n) n#+# define IBOX(n) (I# (n))+# define FAST_INT Int#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+# if __GLASGOW_HASKELL__ > 706+# define CMP_GEQ(n,m) (((n) >=# (m)) :: Int#)+# define CMP_EQ(n,m) (((n) ==# (m)) :: Int#)+# define CMP_MKBOOL(x) ((GHC.Exts.tagToEnum# (x)) :: Bool)+# else+# define CMP_GEQ(n,m) (((n) >= (m)) :: Bool)+# define CMP_EQ(n,m) (((n) == (m)) :: Bool)+# define CMP_MKBOOL(x) ((x) :: Bool)+# endif+# define GTE(n,m) CMP_MKBOOL(CMP_GEQ(n,m))+# define EQ(n,m) CMP_MKBOOL(CMP_EQ(n,m))+# define PLUS(n,m) (n +# m)+# define MINUS(n,m) (n -# m)+# define TIMES(n,m) (n *# m)+# define NEGATE(n) (negateInt# (n))+# define IF_GHC(x) (x)+#else+# define ILIT(n) (n)+# define IBOX(n) (n)+# define FAST_INT Int+# define GTE(n,m) (n >= m)+# define EQ(n,m) (n == m)+# define PLUS(n,m) (n + m)+# define MINUS(n,m) (n - m)+# define TIMES(n,m) (n * m)+# define NEGATE(n) (negate (n))+# define IF_GHC(x)+#endif++#ifdef ALEX_GHC+data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr :: AlexAddr -> Int# -> Int#+alexIndexInt16OffAddr (AlexA# arr) off =+#if __GLASGOW_HASKELL__ >= 901+ GHC.Exts.int16ToInt# -- qualified import because it doesn't exist on older GHC's+#endif+#ifdef WORDS_BIGENDIAN+ (GHC.Exts.word16ToInt16# (GHC.Exts.wordToWord16# (GHC.Exts.byteSwap16# (GHC.Exts.word16ToWord# (GHC.Exts.int16ToWord16#+#endif+ (indexInt16OffAddr# arr off)+#ifdef WORDS_BIGENDIAN+ )))))+#endif+#else+alexIndexInt16OffAddr = (Data.Array.!)+#endif++#ifdef ALEX_GHC+{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr :: AlexAddr -> Int# -> Int#+alexIndexInt32OffAddr (AlexA# arr) off =+#if __GLASGOW_HASKELL__ >= 901+ GHC.Exts.int32ToInt# -- qualified import because it doesn't exist on older GHC's+#endif+#ifdef WORDS_BIGENDIAN+ (GHC.Exts.word32ToInt32# (GHC.Exts.wordToWord32# (GHC.Exts.byteSwap32# (GHC.Exts.word32ToWord# (GHC.Exts.int32ToWord32#+#endif+ (indexInt32OffAddr# arr off)+#ifdef WORDS_BIGENDIAN+ )))))+#endif+#else+alexIndexInt32OffAddr = (Data.Array.!)+#endif++#ifdef ALEX_GHC+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#else+quickIndex = (Data.Array.!)+#endif++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+ = AlexEOF+ | AlexError !AlexInput+ | AlexSkip !AlexInput !Int+ | AlexToken !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input__ IBOX(sc)+ = alexScanUser (error "alex rule requiring context was invoked by alexScan; use alexScanUser instead?") input__ IBOX(sc)++-- If the generated alexScan/alexScanUser functions are called multiple times+-- in the same file, alexScanUser gets broken out into a separate function and+-- increases memory usage. Make sure GHC inlines this function and optimizes it.+{-# INLINE alexScanUser #-}++alexScanUser user__ input__ IBOX(sc)+ = case alex_scan_tkn user__ input__ ILIT(0) input__ sc AlexNone of+ (AlexNone, input__') ->+ case alexGetByte input__ of+ Nothing ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("End of input.") $+#endif+ AlexEOF+ Just _ ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("Error.") $+#endif+ AlexError input__'++ (AlexLastSkip input__'' len, _) ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("Skipping.") $+#endif+ AlexSkip input__'' len++ (AlexLastAcc k input__''' len, _) ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("Accept.") $+#endif+ AlexToken input__''' len ((Data.Array.!) alex_actions k)+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user__ orig_input len input__ s last_acc =+ input__ `seq` -- strict in the input+ let+ new_acc = (check_accs (alex_accept `quickIndex` IBOX(s)))+ in+ new_acc `seq`+ case alexGetByte input__ of+ Nothing -> (new_acc, input__)+ Just (c, new_input) ->+#ifdef ALEX_DEBUG+ Debug.Trace.trace ("State: " ++ show IBOX(s) ++ ", char: " ++ show c ++ " " ++ (show . Data.Char.chr . fromIntegral) c) $+#endif+ case fromIntegral c of { IBOX(ord_c) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = PLUS(base,ord_c)++ new_s = if GTE(offset,ILIT(0))+ && let check = alexIndexInt16OffAddr alex_check offset+ in EQ(check,ord_c)+ then alexIndexInt16OffAddr alex_table offset+ else alexIndexInt16OffAddr alex_deflt s+ in+ case new_s of+ ILIT(-1) -> (new_acc, input__)+ -- on an error, we want to keep the input *before* the+ -- character that failed, not after.+ _ -> alex_scan_tkn user__ orig_input+#ifdef ALEX_LATIN1+ PLUS(len,ILIT(1))+ -- issue 119: in the latin1 encoding, *each* byte is one character+#else+ (if c < 0x80 || c >= 0xC0 then PLUS(len,ILIT(1)) else len)+ -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+#endif+ new_input new_s new_acc+ }+ where+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input__ IBOX(len)+ check_accs (AlexAccSkip) = AlexLastSkip input__ IBOX(len)+#ifndef ALEX_NOPRED+ check_accs (AlexAccPred a predx rest)+ | predx user__ orig_input IBOX(len) input__+ = AlexLastAcc a input__ IBOX(len)+ | otherwise+ = check_accs rest+ check_accs (AlexAccSkipPred predx rest)+ | predx user__ orig_input IBOX(len) input__+ = AlexLastSkip input__ IBOX(len)+ | otherwise+ = check_accs rest+#endif++data AlexLastAcc+ = AlexNone+ | AlexLastAcc !Int !AlexInput !Int+ | AlexLastSkip !AlexInput !Int++data AlexAcc user+ = AlexAccNone+ | AlexAcc Int+ | AlexAccSkip+#ifndef ALEX_NOPRED+ | AlexAccPred Int (AlexAccPred user) (AlexAcc user)+ | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)++type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool++-- -----------------------------------------------------------------------------+-- Predicates on a rule++alexAndPred p1 p2 user__ in1 len in2+ = p1 user__ in1 len in2 && p2 user__ in1 len in2++--alexPrevCharIsPred :: Char -> AlexAccPred _+alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__++alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)++--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _+alexPrevCharIsOneOf arr _ input__ _ _ = arr Data.Array.! alexInputPrevChar input__++--alexRightContext :: Int -> AlexAccPred _+alexRightContext IBOX(sc) user__ _ _ input__ =+ case alex_scan_tkn user__ input__ ILIT(0) input__ sc AlexNone of+ (AlexNone, _) -> False+ _ -> True+ -- TODO: there's no need to find the longest+ -- match when checking the right context, just+ -- the first match will do.+#endif+{-# LINE 32 "./src/lib/LexerV3.x" #-}+-- Each token action (the right hand side function) is of type :: AlexInput -> Int -> Alex Token++data Token+ = TokenAction AlexPosn String+ | TokenSoloIdentifier AlexPosn String+ | TokenOCB AlexPosn+ | TokenCCB AlexPosn+ | TokenEOF+ deriving (Eq, Show)++alexEOF :: Alex Token+alexEOF = return TokenEOF++lexAll :: Alex [Token]+lexAll = go+ where+ go = do+ t <- alexMonadScan+ case t of+ TokenEOF -> return []+ _ -> (t:) <$> go
+ src/lib/LexerV3.x view
@@ -0,0 +1,54 @@+{+module LexerV3+ (lexAll,+ runAlex,+ Token(TokenAction,+ TokenSoloIdentifier,+ TokenOCB,+ TokenCCB),+ AlexPosn(..)) where+}++%wrapper "monad"++$digit = 0-9+$alpha = [a-zA-Z]++$idChar = [$alpha $digit \']+$contentChar = [$alpha $digit $white \' \, \! \- \. \/ \? \= \< \> \[ \] \+ \( \)]++@id = $idChar++@content = $contentChar+++tokens :-++ $white+ ;+ @id [$white]+ \"@content\" { (\(position, _previousCharacter, _bytes, inputString) len -> return $ TokenAction position (take len inputString)) }+ \"@content\" { (\(position, _previousCharacter, _bytes, inputString) len -> return $ TokenAction position ("# " <> take len inputString)) -- # is a placeholder id that will later be replaced by a unique identifier }+ @id { (\(position, _previousCharacter, _bytes, inputString) len -> return $ TokenSoloIdentifier position (take len inputString)) }+ \{ { (\(position, _previousCharacter, _bytes, _inputString) len -> return $ TokenOCB position) }+ \} { (\(position, _previousCharacter, _bytes, _inputString) len -> return $ TokenCCB position) }++{+-- Each token action (the right hand side function) is of type :: AlexInput -> Int -> Alex Token++data Token+ = TokenAction AlexPosn String+ | TokenSoloIdentifier AlexPosn String+ | TokenOCB AlexPosn+ | TokenCCB AlexPosn+ | TokenEOF+ deriving (Eq, Show)++alexEOF :: Alex Token+alexEOF = return TokenEOF++lexAll :: Alex [Token]+lexAll = go+ where+ go = do+ t <- alexMonadScan+ case t of+ TokenEOF -> return []+ _ -> (t:) <$> go+}
src/lib/Parser.hs view
@@ -12,7 +12,7 @@ import Data.Char import Data.String.Utils (lstrip) import ID-import Lexer+import LexerV3 import Blocks import qualified Control.Monad as Happy_Prelude import qualified Data.Bool as Happy_Prelude@@ -132,7 +132,7 @@ happyReduction_7 (_ `HappyStk` (HappyAbsSyn6 happy_var_3) `HappyStk` _ `HappyStk`- (HappyTerminal (TokenAction happy_var_1)) `HappyStk`+ (HappyTerminal (TokenAction _ happy_var_1)) `HappyStk` happyRest) = HappyAbsSyn7 (happy_var_3 <> [toHeadline happy_var_1]@@ -140,17 +140,17 @@ happyReduce_8 = happyReduce 5# 2# happyReduction_8 happyReduction_8 (_ `HappyStk`- (HappyTerminal (TokenSoloIdentifier happy_var_4)) `HappyStk`+ (HappyTerminal (TokenSoloIdentifier _ happy_var_4)) `HappyStk` (HappyAbsSyn6 happy_var_3) `HappyStk` _ `HappyStk`- (HappyTerminal (TokenAction happy_var_1)) `HappyStk`+ (HappyTerminal (TokenAction _ happy_var_1)) `HappyStk` happyRest) = HappyAbsSyn7 (toAddress happy_var_4 : happy_var_3 <> [toHeadline happy_var_1] ) `HappyStk` happyRest happyReduce_9 = happySpecReduce_1 3# happyReduction_9-happyReduction_9 (HappyTerminal (TokenAction happy_var_1))+happyReduction_9 (HappyTerminal (TokenAction _ happy_var_1)) = HappyAbsSyn8 (toAction happy_var_1 )@@ -163,7 +163,7 @@ _ `HappyStk` (HappyAbsSyn6 happy_var_3) `HappyStk` _ `HappyStk`- (HappyTerminal (TokenAction happy_var_1)) `HappyStk`+ (HappyTerminal (TokenAction _ happy_var_1)) `HappyStk` happyRest) = HappyAbsSyn8 (toFork happy_var_1 happy_var_3 happy_var_6 Nothing@@ -171,13 +171,13 @@ happyReduce_11 = happyReduce 8# 3# happyReduction_11 happyReduction_11 (_ `HappyStk`- (HappyTerminal (TokenSoloIdentifier happy_var_7)) `HappyStk`+ (HappyTerminal (TokenSoloIdentifier _ happy_var_7)) `HappyStk` (HappyAbsSyn6 happy_var_6) `HappyStk` _ `HappyStk` _ `HappyStk` (HappyAbsSyn6 happy_var_3) `HappyStk` _ `HappyStk`- (HappyTerminal (TokenAction happy_var_1)) `HappyStk`+ (HappyTerminal (TokenAction _ happy_var_1)) `HappyStk` happyRest) = HappyAbsSyn8 (toFork happy_var_1 happy_var_3 happy_var_6 (Just (ID happy_var_7))@@ -185,13 +185,13 @@ happyReduce_12 = happyReduce 8# 3# happyReduction_12 happyReduction_12 (_ `HappyStk`- (HappyTerminal (TokenSoloIdentifier happy_var_7)) `HappyStk`+ (HappyTerminal (TokenSoloIdentifier _ happy_var_7)) `HappyStk` (HappyAbsSyn6 happy_var_6) `HappyStk` _ `HappyStk` _ `HappyStk` (HappyAbsSyn6 happy_var_3) `HappyStk` _ `HappyStk`- (HappyTerminal (TokenAction happy_var_1)) `HappyStk`+ (HappyTerminal (TokenAction _ happy_var_1)) `HappyStk` happyRest) = HappyAbsSyn8 (toFork happy_var_1 happy_var_3 happy_var_6 (Just (ID happy_var_7))@@ -204,17 +204,17 @@ _ `HappyStk` (HappyAbsSyn6 happy_var_3) `HappyStk` _ `HappyStk`- (HappyTerminal (TokenAction happy_var_1)) `HappyStk`+ (HappyTerminal (TokenAction _ happy_var_1)) `HappyStk` happyRest) = HappyAbsSyn8 (toFork happy_var_1 happy_var_3 happy_var_6 Nothing ) `HappyStk` happyRest happyTerminalToTok term = case term of {- TokenAction happy_dollar_dollar -> 2#;- TokenSoloIdentifier happy_dollar_dollar -> 3#;- TokenOCB -> 4#;- TokenCCB -> 5#;+ TokenAction _ happy_dollar_dollar -> 2#;+ TokenSoloIdentifier _ happy_dollar_dollar -> 3#;+ TokenOCB _ -> 4#;+ TokenCCB _ -> 5#; _ -> -1#; } {-# NOINLINE happyTerminalToTok #-}@@ -263,7 +263,9 @@ in take (length idFreeContent' - 1) idFreeContent' toAction :: String -> Block-toAction t = Action (toId t) (toContent t)+toAction t =+ Action Nothing (show t)+ -- Action (toId t) (toContent t) toFork :: String -> [Block] -> [Block] -> Maybe ID -> Block toFork t l r rId = Fork (toId t) (toContent t) l r rId
src/lib/Parser.y view
@@ -3,7 +3,7 @@ import Data.Char import Data.String.Utils (lstrip) import ID-import Lexer+import LexerV3 import Blocks } @@ -12,10 +12,10 @@ %monad { P } { thenP } { returnP } %token- action { TokenAction $$ }- soloId { TokenSoloIdentifier $$ }- '{' { TokenOCB }- '}' { TokenCCB }+ action { TokenAction _ $$ }+ soloId { TokenSoloIdentifier _ $$ }+ '{' { TokenOCB _ }+ '}' { TokenCCB _ } %% @@ -51,7 +51,9 @@ in take (length idFreeContent' - 1) idFreeContent' toAction :: String -> Block-toAction t = Action (toId t) (toContent t)+toAction t =+ Action Nothing (show t)+ -- Action (toId t) (toContent t) toFork :: String -> [Block] -> [Block] -> Maybe ID -> Block toFork t l r rId = Fork (toId t) (toContent t) l r rId
wyvern-diagrams.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.4 name: wyvern-diagrams-version: 0.3.1.3+version: 0.3.2.0 synopsis: Simple flowchart diagrams. Inspired by DRAKON. description: Wyvern combines syntax and rendering engine for simple, DRAKON-like flowcharts.@@ -29,6 +29,8 @@ Blocks HelperDiagrams Lexer+ LexerV2+ LexerV3 Parser InputArguments hs-source-dirs: src/lib